{"version":3,"file":"react-virtualized.cjs","sources":["../lib/utils/useIsomorphicLayoutEffect.ts","../lib/components/ArrowKeyStepper/defaultArrowKeyStepperProps.ts","../lib/components/ArrowKeyStepper/ArrowKeyStepper.tsx","../lib/components/CellMeasurer/CellMeasurer.tsx","../lib/components/CellMeasurer/CellMeasurerCache.ts","../lib/components/ColumnSizer/ColumnSizer.tsx","../lib/components/Grid/accessibilityOverscanIndicesGetter.ts","../lib/components/Grid/defaultCellRangeRenderer.ts","../lib/components/Grid/constants.ts","../lib/components/Grid/defaultOverscanIndicesGetter.ts","../lib/components/Grid/defaultGridProps.ts","../lib/utils/createCallbackMemoizer.ts","../lib/utils/getUpdatedOffsetForIndex.ts","../lib/utils/animationFrame.ts","../lib/utils/requestAnimationTimeout.ts","../lib/utils/scrollElement/useMissingHeightWarning.ts","../lib/utils/scrollElement/dimensions.ts","../lib/utils/scrollElement/scrollListeners.ts","../lib/utils/scrollElement/useScrollElementLink.ts","../lib/components/Grid/utils/CellSizeAndPositionManager.ts","../lib/components/Grid/utils/maxElementSize.ts","../lib/components/Grid/utils/ScalingCellSizeAndPositionManager.ts","../lib/components/Grid/utils/updateScrollIndexHelper.ts","../lib/components/Grid/Grid.tsx","../lib/components/InfiniteLoader/defaultInfiniteLoaderProps.ts","../lib/components/InfiniteLoader/utils.ts","../lib/components/InfiniteLoader/InfiniteLoader.tsx","../lib/components/List/defaultListProps.ts","../lib/utils/createInnerGridRef.ts","../lib/components/List/List.tsx","../lib/components/Masonry/constants.ts","../lib/components/Masonry/defaultMasonryProps.ts","../lib/components/Masonry/createCellPositioner.ts","../lib/vendor/binarySearchBounds.ts","../lib/vendor/intervalTree.ts","../lib/components/Masonry/PositionCache.ts","../lib/components/Masonry/Masonry.tsx","../lib/components/MultiGrid/defaultMultiGridProps.ts","../lib/components/MultiGrid/CellMeasurerCacheDecorator.ts","../lib/components/MultiGrid/MultiGrid.tsx","../lib/components/ScrollSync/ScrollSync.tsx","../lib/components/Table/Column.tsx","../lib/components/Table/createMultiSort.ts","../lib/components/Table/defaultCellDataGetter.ts","../lib/components/Table/defaultCellRenderer.ts","../lib/components/Table/SortDirection.ts","../lib/components/Table/SortIndicator.tsx","../lib/components/Table/defaultHeaderRenderer.tsx","../lib/components/Table/defaultColumnProps.ts","../lib/components/Table/defaultHeaderRowRenderer.tsx","../lib/components/Table/defaultRowRenderer.tsx","../lib/components/Table/defaultTableProps.ts","../lib/components/Table/Table.tsx"],"sourcesContent":["import { useEffect, useLayoutEffect } from \"react\";\n\n/**\n * `useLayoutEffect` in the browser; `useEffect` during server rendering (where layout effects warn and never run).\n */\nexport const useIsomorphicLayoutEffect =\n  typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n","import type { ArrowKeyStepperProps } from \"./types\";\n\ntype DefaultedPropKeys =\n  | \"disabled\"\n  | \"isControlled\"\n  | \"mode\"\n  | \"scrollToColumn\"\n  | \"scrollToRow\";\n\n/**\n * Default values for `ArrowKeyStepper`'s optional props.\n */\nexport const defaultArrowKeyStepperProps: Readonly<\n  Required<Pick<ArrowKeyStepperProps, DefaultedPropKeys>>\n> = /* @__PURE__ */ Object.freeze({\n  disabled: false,\n  isControlled: false,\n  mode: \"edges\",\n  scrollToColumn: 0,\n  scrollToRow: 0\n});\n","import {\n  forwardRef,\n  memo,\n  useCallback,\n  useImperativeHandle,\n  useRef,\n  useState,\n  type KeyboardEvent\n} from \"react\";\nimport { useIsomorphicLayoutEffect } from \"../../utils/useIsomorphicLayoutEffect\";\nimport { defaultArrowKeyStepperProps } from \"./defaultArrowKeyStepperProps\";\nimport type {\n  ArrowKeyStepperChild,\n  ArrowKeyStepperImperativeAPI,\n  ArrowKeyStepperProps,\n  ArrowKeyStepperRenderedSection,\n  ScrollIndices\n} from \"./types\";\n\ntype ArrowKeyStepperState = ScrollIndices & {\n  prevScrollToColumn: number;\n  prevScrollToRow: number;\n};\n\nconst initialState: ArrowKeyStepperState = {\n  scrollToColumn: 0,\n  scrollToRow: 0,\n  prevScrollToColumn: 0,\n  prevScrollToRow: 0\n};\n\n// Equivalent of the 9.x getDerivedStateFromProps():\n// an uncontrolled stepper resets its active cell whenever the scrollToColumn/scrollToRow props change.\nfunction deriveState(\n  isControlled: boolean,\n  scrollToColumn: number,\n  scrollToRow: number,\n  prevState: ArrowKeyStepperState\n): ArrowKeyStepperState {\n  if (\n    !isControlled &&\n    (scrollToColumn !== prevState.prevScrollToColumn ||\n      scrollToRow !== prevState.prevScrollToRow)\n  ) {\n    return {\n      scrollToColumn,\n      scrollToRow,\n      prevScrollToColumn: scrollToColumn,\n      prevScrollToRow: scrollToRow\n    };\n  }\n\n  return prevState;\n}\n\n/**\n * This HOC decorates a virtualized component and responds to arrow-key events by scrolling one row or column at a time.\n * This provides a snap-to behavior rather than the default browser scrolling behavior.\n *\n * Note that unlike the other HOCs in react-virtualized, `ArrowKeyStepper` adds a `<div>` element around its children in order to attach a key-down event handler.\n * The appearance of this wrapper element can be customized using the `className` property.\n */\nexport const ArrowKeyStepper = /* @__PURE__ */ memo(\n  /* @__PURE__ */ forwardRef<\n    ArrowKeyStepperImperativeAPI,\n    ArrowKeyStepperProps\n  >(function ArrowKeyStepper(\n    {\n      children,\n      className,\n      columnCount,\n      disabled = defaultArrowKeyStepperProps.disabled,\n      isControlled = defaultArrowKeyStepperProps.isControlled,\n      mode = defaultArrowKeyStepperProps.mode,\n      onScrollToChange,\n      rowCount,\n      scrollToColumn:\n        scrollToColumnProp = defaultArrowKeyStepperProps.scrollToColumn,\n      scrollToRow: scrollToRowProp = defaultArrowKeyStepperProps.scrollToRow\n    },\n    ref\n  ) {\n    const [storedState, setState] = useState<ArrowKeyStepperState>(() =>\n      deriveState(\n        isControlled,\n        scrollToColumnProp,\n        scrollToRowProp,\n        initialState\n      )\n    );\n\n    // Apply prop changes during render (the documented replacement for getDerivedStateFromProps)\n    const state = deriveState(\n      isControlled,\n      scrollToColumnProp,\n      scrollToRowProp,\n      storedState\n    );\n    if (state !== storedState) {\n      setState(state);\n    }\n\n    const scrollToColumn = isControlled\n      ? scrollToColumnProp\n      : state.scrollToColumn;\n    const scrollToRow = isControlled ? scrollToRowProp : state.scrollToRow;\n\n    // Range of cells most recently rendered by the child (see onSectionRendered)\n    const renderedSectionRef = useRef<ArrowKeyStepperRenderedSection>({\n      columnStartIndex: 0,\n      columnStopIndex: 0,\n      rowStartIndex: 0,\n      rowStopIndex: 0\n    });\n\n    const childRef = useRef<ArrowKeyStepperChild | null>(null);\n\n    // Active cell as of the most recent commit; initialized for the first commit\n    // (child refs are attached before this component's layout effects run)\n    const activeCellRef = useRef<ScrollIndices>({\n      scrollToColumn,\n      scrollToRow\n    });\n\n    // The child and cell most recently scrolled into view; avoids redundant scrollToCell() calls\n    // (e.g. when the same child is re-registered in StrictMode)\n    const lastScrolledRef = useRef<{\n      child: ArrowKeyStepperChild;\n      scrollToColumn: number;\n      scrollToRow: number;\n    } | null>(null);\n\n    const scrollChildToActiveCell = useCallback(() => {\n      const child = childRef.current;\n      const { scrollToColumn, scrollToRow } = activeCellRef.current;\n      const lastScrolled = lastScrolledRef.current;\n\n      if (\n        child === null ||\n        (lastScrolled !== null &&\n          lastScrolled.child === child &&\n          lastScrolled.scrollToColumn === scrollToColumn &&\n          lastScrolled.scrollToRow === scrollToRow)\n      ) {\n        return;\n      }\n\n      lastScrolledRef.current = { child, scrollToColumn, scrollToRow };\n\n      child.scrollToCell({\n        columnIndex: scrollToColumn,\n        rowIndex: scrollToRow\n      });\n    }, []);\n\n    const registerChild = useCallback(\n      (child: ArrowKeyStepperChild | null) => {\n        childRef.current = child;\n        if (child !== null) {\n          scrollChildToActiveCell();\n        }\n      },\n      [scrollChildToActiveCell]\n    );\n\n    useIsomorphicLayoutEffect(() => {\n      activeCellRef.current = { scrollToColumn, scrollToRow };\n      scrollChildToActiveCell();\n    }, [scrollChildToActiveCell, scrollToColumn, scrollToRow]);\n\n    const onSectionRendered = useCallback(\n      ({\n        columnStartIndex,\n        columnStopIndex,\n        rowStartIndex,\n        rowStopIndex\n      }: ArrowKeyStepperRenderedSection) => {\n        renderedSectionRef.current = {\n          columnStartIndex,\n          columnStopIndex,\n          rowStartIndex,\n          rowStopIndex\n        };\n      },\n      []\n    );\n\n    useImperativeHandle(\n      ref,\n      () => ({\n        setScrollIndexes({ scrollToColumn, scrollToRow }: ScrollIndices) {\n          setState((prevState) => ({\n            ...prevState,\n            scrollToColumn,\n            scrollToRow\n          }));\n        }\n      }),\n      []\n    );\n\n    const onKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n      if (disabled) {\n        return;\n      }\n\n      const { columnStartIndex, columnStopIndex, rowStartIndex, rowStopIndex } =\n        renderedSectionRef.current;\n\n      let nextScrollToColumn = scrollToColumn;\n      let nextScrollToRow = scrollToRow;\n\n      // The above cases all prevent default event event behavior.\n      // This is to keep the grid from scrolling after the snap-to update.\n      switch (event.key) {\n        case \"ArrowDown\":\n          nextScrollToRow =\n            mode === \"cells\"\n              ? Math.min(scrollToRow + 1, rowCount - 1)\n              : Math.min(rowStopIndex + 1, rowCount - 1);\n          break;\n        case \"ArrowLeft\":\n          nextScrollToColumn =\n            mode === \"cells\"\n              ? Math.max(scrollToColumn - 1, 0)\n              : Math.max(columnStartIndex - 1, 0);\n          break;\n        case \"ArrowRight\":\n          nextScrollToColumn =\n            mode === \"cells\"\n              ? Math.min(scrollToColumn + 1, columnCount - 1)\n              : Math.min(columnStopIndex + 1, columnCount - 1);\n          break;\n        case \"ArrowUp\":\n          nextScrollToRow =\n            mode === \"cells\"\n              ? Math.max(scrollToRow - 1, 0)\n              : Math.max(rowStartIndex - 1, 0);\n          break;\n      }\n\n      if (\n        nextScrollToColumn !== scrollToColumn ||\n        nextScrollToRow !== scrollToRow\n      ) {\n        event.preventDefault();\n\n        if (typeof onScrollToChange === \"function\") {\n          onScrollToChange({\n            scrollToColumn: nextScrollToColumn,\n            scrollToRow: nextScrollToRow\n          });\n        }\n\n        if (!isControlled) {\n          setState((prevState) => ({\n            ...prevState,\n            scrollToColumn: nextScrollToColumn,\n            scrollToRow: nextScrollToRow\n          }));\n        }\n      }\n    };\n\n    return (\n      <div className={className} onKeyDown={onKeyDown}>\n        {children({\n          onSectionRendered,\n          registerChild,\n          scrollToColumn,\n          scrollToRow\n        })}\n      </div>\n    );\n  })\n);\n","import {\n  cloneElement,\n  Fragment,\n  isValidElement,\n  memo,\n  useCallback,\n  useInsertionEffect,\n  useRef,\n  useState,\n  version,\n  type ReactElement,\n  type ReactNode,\n  type Ref\n} from \"react\";\nimport { useIsomorphicLayoutEffect } from \"../../utils/useIsomorphicLayoutEffect\";\nimport type { CellMeasureCache, CellMeasurerProps } from \"./types\";\n\n/**\n * Wraps a cell and measures its rendered content.\n * Measurements are stored in a per-cell cache.\n * Cached-content is not be re-measured.\n *\n * The child must be a DOM element (e.g. `<div>`) or a component that passes its `ref` along to one;\n * otherwise use a function child and pass `registerChild` as the `ref` of the element to be measured.\n */\nexport const CellMeasurer = /* @__PURE__ */ Object.assign(\n  /* @__PURE__ */ memo(function CellMeasurer(props: CellMeasurerProps) {\n    const { children } = props;\n\n    // Mutable values shared by the stable callbacks below\n    const [internals] = useState(createInternals);\n\n    // Latest props, for the stable callbacks (updated before child refs and layout effects run)\n    const latestPropsRef = useRef(props);\n    useInsertionEffect(() => {\n      latestPropsRef.current = props;\n    });\n\n    const maybeMeasureCell = useCallback(() => {\n      const { cache, columnIndex = 0, index, parent } = latestPropsRef.current;\n      const rowIndex = latestPropsRef.current.rowIndex ?? index ?? 0;\n\n      if (!cache.has(rowIndex, columnIndex)) {\n        const measurements = getCellMeasurements(\n          cache,\n          getMeasurableNode(internals)\n        );\n        if (measurements === null) {\n          // Leave the cache alone (the cell keeps its default size) rather than storing 0x0\n          if (process.env.NODE_ENV !== \"production\") {\n            warnAboutMissingNode(cache, internals);\n          }\n          return;\n        }\n\n        cache.set(\n          rowIndex,\n          columnIndex,\n          measurements.width,\n          measurements.height\n        );\n\n        // If size has changed, let Grid know to re-render.\n        if (\n          parent &&\n          typeof parent.invalidateCellSizeAfterRender === \"function\"\n        ) {\n          parent.invalidateCellSizeAfterRender({\n            columnIndex,\n            rowIndex\n          });\n        }\n      }\n    }, [internals]);\n\n    const measure = useCallback(() => {\n      const { cache, columnIndex = 0, index, parent } = latestPropsRef.current;\n      const rowIndex = latestPropsRef.current.rowIndex ?? index ?? 0;\n\n      if (!internals.isMounted) {\n        // E.g. called from a timeout or a load event after the cell scrolled out of view;\n        // there is nothing to measure (and storing 0x0 would collapse the cell once it's rendered again)\n        return;\n      }\n\n      const measurements = getCellMeasurements(\n        cache,\n        getMeasurableNode(internals)\n      );\n      if (measurements === null) {\n        if (process.env.NODE_ENV !== \"production\") {\n          warnAboutMissingNode(cache, internals);\n        }\n        return;\n      }\n\n      const { height, width } = measurements;\n      if (\n        height !== cache.getHeight(rowIndex, columnIndex) ||\n        width !== cache.getWidth(rowIndex, columnIndex)\n      ) {\n        cache.set(rowIndex, columnIndex, width, height);\n\n        if (parent && typeof parent.recomputeGridSize === \"function\") {\n          parent.recomputeGridSize({\n            columnIndex,\n            rowIndex\n          });\n        }\n      }\n    }, [internals]);\n\n    const registerChild = useCallback(\n      (element: Element | null | undefined) => {\n        if (element && !(element instanceof Element)) {\n          console.warn(\n            \"CellMeasurer registerChild expects to be passed Element or null\"\n          );\n        }\n\n        internals.registeredNode = element ?? null;\n        if (element) {\n          maybeMeasureCell();\n        }\n      },\n      [internals, maybeMeasureCell]\n    );\n\n    useIsomorphicLayoutEffect(() => {\n      internals.isMounted = true;\n      return () => {\n        internals.isMounted = false;\n      };\n    }, [internals]);\n\n    // Equivalent of componentDidMount() + componentDidUpdate()\n    useIsomorphicLayoutEffect(() => {\n      maybeMeasureCell();\n    });\n\n    const resolvedChildren: ReactNode =\n      typeof children === \"function\"\n        ? children({ measure, registerChild })\n        : children;\n\n    const element = getMeasurableElement(resolvedChildren);\n    const hasMeasurableElement = element !== null;\n    useInsertionEffect(() => {\n      internals.hasMeasurableElement = hasMeasurableElement;\n    });\n\n    // The child's own ref (if any) is composed with the ref CellMeasurer attaches to it\n    const childRef = element !== null ? getElementRef(element) : null;\n    const composedRef = useCallback(\n      (node: unknown) => {\n        if (node === null) {\n          if (typeof internals.childRefCleanup === \"function\") {\n            internals.childRefCleanup();\n          } else {\n            assignRef(childRef, null);\n          }\n          internals.childRefCleanup = undefined;\n          internals.clonedNode = null;\n        } else {\n          internals.childRefCleanup = assignRef(childRef, node);\n          internals.clonedNode = node;\n        }\n      },\n      [childRef, internals]\n    );\n\n    if (element === null) {\n      // Strings, arrays, fragments etc. can't be given a ref; render them as-is\n      return resolvedChildren === undefined ? null : resolvedChildren;\n    }\n\n    return cloneElement(element, { ref: composedRef } as Partial<unknown>);\n  }),\n  {\n    // Lets Grid's DEV warning about a missing \"style\" check the CellMeasurer's child instead (see issue #611)\n    __internalCellMeasurerFlag: process.env.NODE_ENV !== \"production\"\n  }\n);\n\ntype Internals = {\n  childRefCleanup: (() => void) | undefined | void;\n  clonedNode: unknown;\n  hasMeasurableElement: boolean;\n  isMounted: boolean;\n  registeredNode: unknown;\n};\n\nfunction createInternals(): Internals {\n  return {\n    childRefCleanup: undefined,\n    clonedNode: null,\n    hasMeasurableElement: false,\n    isMounted: false,\n    registeredNode: null\n  };\n}\n\nfunction isHTMLElement(node: unknown): node is HTMLElement {\n  if (node == null || typeof node !== \"object\") {\n    return false;\n  }\n\n  // Supports nodes from other frames (which have their own HTMLElement class)\n  const view = (node as Partial<Node>).ownerDocument?.defaultView;\n  return view != null && node instanceof view.HTMLElement;\n}\n\n// An element registered with registerChild takes precedence over the element CellMeasurer attached its ref to\nfunction getMeasurableNode(internals: Internals): HTMLElement | null {\n  if (isHTMLElement(internals.registeredNode)) {\n    return internals.registeredNode;\n  } else if (isHTMLElement(internals.clonedNode)) {\n    return internals.clonedNode;\n  }\n  return null;\n}\n\nfunction getCellMeasurements(\n  cache: CellMeasureCache,\n  node: HTMLElement | null\n): { height: number; width: number } | null {\n  // TODO Check for a bad combination of fixedWidth and missing numeric width or vice versa with height\n\n  if (node === null) {\n    return null;\n  }\n\n  const styleWidth = node.style.width;\n  const styleHeight = node.style.height;\n\n  // If we are re-measuring a cell that has already been measured,\n  // It will have a hard-coded width/height from the previous measurement.\n  // The fact that we are measuring indicates this measurement is probably stale,\n  // So explicitly clear it out (eg set to \"auto\") so we can recalculate.\n  // See issue #593 for more info.\n  // Even if we are measuring initially- if we're inside of a MultiGrid component,\n  // Explicitly clear width/height before measuring to avoid being tainted by another Grid.\n  // eg top/left Grid renders before bottom/right Grid\n  // Since the CellMeasurerCache is shared between them this taints derived cell size values.\n  if (!cache.hasFixedWidth()) {\n    node.style.width = \"auto\";\n  }\n  if (!cache.hasFixedHeight()) {\n    node.style.height = \"auto\";\n  }\n\n  const height = Math.ceil(node.offsetHeight);\n  const width = Math.ceil(node.offsetWidth);\n\n  // Reset after measuring to avoid breaking styles; see #660\n  if (styleWidth) {\n    node.style.width = styleWidth;\n  }\n  if (styleHeight) {\n    node.style.height = styleHeight;\n  }\n\n  return { height, width };\n}\n\n// Returns the child element CellMeasurer can attach a ref to (or null for strings, arrays, fragments, etc.)\nfunction getMeasurableElement(children: ReactNode): ReactElement | null {\n  if (!isValidElement(children) || children.type === Fragment) {\n    return null;\n  }\n\n  // React 18 only passes refs to class components, host components and forwardRef() components;\n  // attaching one to a plain function component logs an error (and the ref is never set).\n  // React 19 passes the ref as a regular prop, so a function component can pass it along to a DOM element.\n  if (!isReact19OrNewer() && isPlainFunctionComponent(children.type)) {\n    return null;\n  }\n\n  return children;\n}\n\nconst MEMO_TYPE = /* @__PURE__ */ Symbol.for(\"react.memo\");\n\nfunction isPlainFunctionComponent(type: unknown): boolean {\n  if (typeof type === \"function\") {\n    return !(type.prototype && type.prototype.isReactComponent);\n  } else if (\n    type != null &&\n    typeof type === \"object\" &&\n    (type as { $$typeof?: symbol }).$$typeof === MEMO_TYPE\n  ) {\n    return isPlainFunctionComponent((type as { type: unknown }).type);\n  }\n  return false;\n}\n\nfunction isReact19OrNewer(): boolean {\n  return parseInt(version, 10) >= 19;\n}\n\n// React 19 stores an element's ref in props.ref (reading element.ref logs a deprecation error);\n// React 18 stores it in element.ref (and never in props).\n// React 19 elements without a ref define element.ref as null (without logging an error).\nfunction getElementRef(element: ReactElement): Ref<unknown> | null {\n  const props = element.props as { ref?: Ref<unknown> } | null;\n  if (props != null && \"ref\" in props) {\n    return props.ref ?? null;\n  }\n  return (element as { ref?: Ref<unknown> | null }).ref ?? null;\n}\n\nfunction assignRef(\n  ref: Ref<unknown> | null,\n  value: unknown\n): (() => void) | undefined | void {\n  if (typeof ref === \"function\") {\n    return ref(value);\n  } else if (ref) {\n    (ref as { current: unknown }).current = value;\n  }\n}\n\n// Warn at most once per cache, to avoid flooding the console (one message per rendered cell)\nconst warnedCaches = /* @__PURE__ */ new WeakSet<object>();\n\nfunction warnAboutMissingNode(cache: CellMeasureCache, internals: Internals) {\n  if (warnedCaches.has(cache)) {\n    return;\n  }\n  warnedCaches.add(cache);\n\n  console.warn(\n    internals.hasMeasurableElement\n      ? \"CellMeasurer could not find a DOM element to measure. \" +\n          \"Its child should be a DOM element (e.g. <div>) or a component that passes its ref along to one \" +\n          \"(in React 18, function components must use forwardRef). \" +\n          \"Otherwise, use a function child and pass registerChild as the ref of the element to be measured.\"\n      : \"CellMeasurer could not find a DOM element to measure. \" +\n          \"Its child should be a single DOM element (e.g. <div>), not text, an array or a fragment \" +\n          \"(or, in React 18, a function component that doesn't use forwardRef). \" +\n          \"Otherwise, use a function child and pass registerChild as the ref of the element to be measured.\"\n  );\n}\n","import type {\n  CellMeasureCache,\n  CellMeasurerCacheAPI,\n  CellMeasurerCacheParams\n} from \"./types\";\n\nexport const DEFAULT_HEIGHT = 30;\nexport const DEFAULT_WIDTH = 100;\n\n// Keys are produced by the (possibly user-supplied) key mapper and are coerced to strings when used as object keys.\ntype KeyMapper = (rowIndex: number, columnIndex: number) => string;\n\ntype Cache = Record<string, number>;\n\ntype IndexParam = {\n  index: number;\n};\n\n/**\n * Caches measurements for a given cell.\n */\nexport class CellMeasurerCache\n  implements CellMeasureCache, CellMeasurerCacheAPI\n{\n  _cellHeightCache: Cache = {};\n  _cellWidthCache: Cache = {};\n  _columnWidthCache: Cache = {};\n  _rowHeightCache: Cache = {};\n  // The number of rows (or columns) that each derived column width (or row height) was computed over,\n  // so that it can be updated incrementally when a cell is measured (#1747)\n  _columnWidthRowCount: Cache = {};\n  _rowHeightColumnCount: Cache = {};\n  _defaultHeight: number;\n  _defaultWidth: number;\n  _minHeight: number;\n  _minWidth: number;\n  _keyMapper: KeyMapper;\n  _hasFixedHeight: boolean;\n  _hasFixedWidth: boolean;\n  _columnCount = 0;\n  _rowCount = 0;\n\n  constructor(params: CellMeasurerCacheParams = {}) {\n    const {\n      defaultHeight,\n      defaultWidth,\n      fixedHeight,\n      fixedWidth,\n      keyMapper,\n      minHeight,\n      minWidth\n    } = params;\n\n    this._hasFixedHeight = fixedHeight === true;\n    this._hasFixedWidth = fixedWidth === true;\n    this._minHeight = minHeight || 0;\n    this._minWidth = minWidth || 0;\n    this._keyMapper = (keyMapper || defaultKeyMapper) as KeyMapper;\n\n    this._defaultHeight = Math.max(\n      this._minHeight,\n      typeof defaultHeight === \"number\" ? defaultHeight : DEFAULT_HEIGHT\n    );\n    this._defaultWidth = Math.max(\n      this._minWidth,\n      typeof defaultWidth === \"number\" ? defaultWidth : DEFAULT_WIDTH\n    );\n\n    if (process.env.NODE_ENV !== \"production\") {\n      if (this._hasFixedHeight === false && this._hasFixedWidth === false) {\n        console.warn(\n          \"CellMeasurerCache should only measure a cell's width or height. \" +\n            \"You have configured CellMeasurerCache to measure both. \" +\n            \"This will result in poor performance.\"\n        );\n      }\n\n      if (this._hasFixedHeight === false && this._defaultHeight === 0) {\n        console.warn(\n          \"Fixed height CellMeasurerCache should specify a :defaultHeight greater than 0. \" +\n            \"Failing to do so will lead to unnecessary layout and poor performance.\"\n        );\n      }\n\n      if (this._hasFixedWidth === false && this._defaultWidth === 0) {\n        console.warn(\n          \"Fixed width CellMeasurerCache should specify a :defaultWidth greater than 0. \" +\n            \"Failing to do so will lead to unnecessary layout and poor performance.\"\n        );\n      }\n    }\n  }\n\n  /**\n   * Reset cached measurements for a specific cell.\n   *\n   * This should be called when a cell needs to be re-measured to handle dynamic content\n   * (eg. replacing a loading indicator with loaded content or reacting to state-changes for stateful cells).\n   */\n  clear(rowIndex: number, columnIndex: number = 0) {\n    const key = this._keyMapper(rowIndex, columnIndex);\n\n    delete this._cellHeightCache[key];\n    delete this._cellWidthCache[key];\n\n    this._updateCachedColumnAndRowSizes(rowIndex, columnIndex);\n  }\n\n  /**\n   * Reset cached measurements for all cells.\n   *\n   * This method should be called when a `Grid`, `List` or `Table` needs to reflow content due to a resizing event\n   * for a responsive layout (eg. a window width resize may have an impact on the height of cells).\n   */\n  clearAll() {\n    this._cellHeightCache = {};\n    this._cellWidthCache = {};\n    this._columnWidthCache = {};\n    this._rowHeightCache = {};\n    this._columnWidthRowCount = {};\n    this._rowHeightColumnCount = {};\n    this._rowCount = 0;\n    this._columnCount = 0;\n  }\n\n  /**\n   * Returns the derived width of a column (the widest measured cell in that column) or the default width.\n   * Compatible with the `columnWidth` prop of `Grid`.\n   */\n  columnWidth = ({ index }: IndexParam) => {\n    const key = this._keyMapper(0, index);\n\n    return this._columnWidthCache[key] !== undefined\n      ? this._columnWidthCache[key]\n      : this._defaultWidth;\n  };\n\n  /** Height reported for unmeasured cells. */\n  get defaultHeight(): number {\n    return this._defaultHeight;\n  }\n\n  /** Width reported for unmeasured cells. */\n  get defaultWidth(): number {\n    return this._defaultWidth;\n  }\n\n  /** Returns true if cells have a fixed height (and a dynamic, measured width). */\n  hasFixedHeight(): boolean {\n    return this._hasFixedHeight;\n  }\n\n  /** Returns true if cells have a fixed width (and a dynamic, measured height). */\n  hasFixedWidth(): boolean {\n    return this._hasFixedWidth;\n  }\n\n  /** Returns the (measured or default) height of the specified cell. */\n  getHeight(rowIndex: number, columnIndex: number = 0): number {\n    if (this._hasFixedHeight) {\n      return this._defaultHeight;\n    } else {\n      const key = this._keyMapper(rowIndex, columnIndex);\n\n      return this._cellHeightCache[key] !== undefined\n        ? Math.max(this._minHeight, this._cellHeightCache[key])\n        : this._defaultHeight;\n    }\n  }\n\n  /** Returns the (measured or default) width of the specified cell. */\n  getWidth(rowIndex: number, columnIndex: number = 0): number {\n    if (this._hasFixedWidth) {\n      return this._defaultWidth;\n    } else {\n      const key = this._keyMapper(rowIndex, columnIndex);\n\n      return this._cellWidthCache[key] !== undefined\n        ? Math.max(this._minWidth, this._cellWidthCache[key])\n        : this._defaultWidth;\n    }\n  }\n\n  /** Returns true if the specified cell has already been measured. */\n  has(rowIndex: number, columnIndex: number = 0): boolean {\n    const key = this._keyMapper(rowIndex, columnIndex);\n\n    return this._cellHeightCache[key] !== undefined;\n  }\n\n  /**\n   * Returns the derived height of a row (the tallest measured cell in that row) or the default height.\n   * Compatible with the `rowHeight` prop of `Grid`.\n   */\n  rowHeight = ({ index }: IndexParam) => {\n    const key = this._keyMapper(index, 0);\n\n    return this._rowHeightCache[key] !== undefined\n      ? this._rowHeightCache[key]\n      : this._defaultHeight;\n  };\n\n  /** Stores the measured size of the specified cell. */\n  set(\n    rowIndex: number,\n    columnIndex: number,\n    width: number,\n    height: number\n  ): void {\n    const key = this._keyMapper(rowIndex, columnIndex);\n    const previousCachedWidth = this._cellWidthCache[key];\n    const previousCachedHeight = this._cellHeightCache[key];\n\n    if (columnIndex >= this._columnCount) {\n      this._columnCount = columnIndex + 1;\n    }\n    if (rowIndex >= this._rowCount) {\n      this._rowCount = rowIndex + 1;\n    }\n\n    // Size is cached per cell so we don't have to re-measure if cells are re-ordered.\n    this._cellHeightCache[key] = height;\n    this._cellWidthCache[key] = width;\n\n    // The derived sizes are updated incrementally when possible, rather than recomputed from every cell in the column/row (#1747).\n    this._updateCachedColumnAndRowSizes(rowIndex, columnIndex, {\n      height: this._canUpdateIncrementally(\n        this._rowHeightCache[this._keyMapper(rowIndex, 0)],\n        this._rowHeightColumnCount[this._keyMapper(rowIndex, 0)],\n        columnIndex,\n        this.getHeight(rowIndex, columnIndex),\n        previousCachedHeight === undefined\n          ? undefined\n          : Math.max(this._minHeight, previousCachedHeight)\n      ),\n      width: this._canUpdateIncrementally(\n        this._columnWidthCache[this._keyMapper(0, columnIndex)],\n        this._columnWidthRowCount[this._keyMapper(0, columnIndex)],\n        rowIndex,\n        this.getWidth(rowIndex, columnIndex),\n        previousCachedWidth === undefined\n          ? undefined\n          : Math.max(this._minWidth, previousCachedWidth)\n      )\n    });\n  }\n\n  /**\n   * Whether a derived column width (or row height) can be updated incrementally after a cell is measured:\n   * i.e. whether the previous derived size is still a lower bound of the new one.\n   * The maximum can only decrease if the cell's previous size was the maximum and it got smaller.\n   *\n   * @param derivedSize The current derived size (the maximum of the measured cells counted so far, if any)\n   * @param countedCells The number of cells (rows of a column, or columns of a row) that the derived size was computed over\n   * @param cellIndex The index of the measured cell within the column (or row)\n   * @param size The cell's new (effective) size\n   * @param previousSize The cell's previous (effective) size, or undefined if it wasn't measured (so it wasn't part of the maximum)\n   */\n  _canUpdateIncrementally(\n    derivedSize: number | undefined,\n    countedCells: number | undefined,\n    cellIndex: number,\n    size: number,\n    previousSize: number | undefined\n  ): boolean {\n    if (countedCells === undefined) {\n      return false;\n    }\n\n    // With the default keyMapper, a cell beyond the counted range wasn't part of the maximum.\n    // (Other keyMappers may map it to the key of a counted cell, so it is treated as counted.)\n    if (this._keyMapper === defaultKeyMapper && cellIndex >= countedCells) {\n      return true;\n    }\n\n    return (\n      previousSize === undefined ||\n      size >= previousSize ||\n      (derivedSize !== undefined && previousSize < derivedSize)\n    );\n  }\n\n  _updateCachedColumnAndRowSizes(\n    rowIndex: number,\n    columnIndex: number,\n    incremental: { height: boolean; width: boolean } = {\n      height: false,\n      width: false\n    }\n  ) {\n    // :columnWidth and :rowHeight are derived from the measured cells in a column/row (the default size is only used if none are).\n    // Unmeasured cells aren't counted, so a column measured past its first rows can be narrower than the default width.\n    // Pre-cache these derived values for faster lookup later.\n    // Reads are expected to occur more frequently than writes in this case.\n    // Only update non-fixed dimensions though to avoid doing unnecessary work.\n    if (!this._hasFixedWidth) {\n      const columnKey = this._keyMapper(0, columnIndex);\n      const cachedWidth = this._columnWidthCache[columnKey];\n      const countedRows = this._columnWidthRowCount[columnKey];\n\n      // Incrementally: the previous width, the measured cell, and any rows added since it was computed\n      let columnWidth: number | undefined;\n      let firstRow: number;\n      if (incremental.width && countedRows !== undefined) {\n        columnWidth = Math.max(\n          cachedWidth ?? 0,\n          this.getWidth(rowIndex, columnIndex)\n        );\n        firstRow = countedRows;\n      } else {\n        columnWidth = undefined;\n        firstRow = 0;\n      }\n      for (let i = firstRow; i < this._rowCount; i++) {\n        if (this.has(i, columnIndex)) {\n          columnWidth = Math.max(\n            columnWidth ?? 0,\n            this.getWidth(i, columnIndex)\n          );\n        }\n      }\n      if (columnWidth === undefined) {\n        delete this._columnWidthCache[columnKey];\n      } else {\n        this._columnWidthCache[columnKey] = columnWidth;\n      }\n      this._columnWidthRowCount[columnKey] = this._rowCount;\n    }\n    if (!this._hasFixedHeight) {\n      const rowKey = this._keyMapper(rowIndex, 0);\n      const cachedHeight = this._rowHeightCache[rowKey];\n      const countedColumns = this._rowHeightColumnCount[rowKey];\n\n      let rowHeight: number | undefined;\n      let firstColumn: number;\n      if (incremental.height && countedColumns !== undefined) {\n        rowHeight = Math.max(\n          cachedHeight ?? 0,\n          this.getHeight(rowIndex, columnIndex)\n        );\n        firstColumn = countedColumns;\n      } else {\n        rowHeight = undefined;\n        firstColumn = 0;\n      }\n      for (let i = firstColumn; i < this._columnCount; i++) {\n        if (this.has(rowIndex, i)) {\n          rowHeight = Math.max(rowHeight ?? 0, this.getHeight(rowIndex, i));\n        }\n      }\n      if (rowHeight === undefined) {\n        delete this._rowHeightCache[rowKey];\n      } else {\n        this._rowHeightCache[rowKey] = rowHeight;\n      }\n      this._rowHeightColumnCount[rowKey] = this._columnCount;\n    }\n  }\n}\n\nfunction defaultKeyMapper(rowIndex: number, columnIndex: number) {\n  return `${rowIndex}-${columnIndex}`;\n}\n","import { memo, useCallback, useRef } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"../../utils/useIsomorphicLayoutEffect\";\nimport type { ColumnSizerProps, ColumnSizerRegisteredChild } from \"./types\";\n\n/**\n * High-order component that auto-calculates column-widths for `Grid` cells.\n */\nexport const ColumnSizer = /* @__PURE__ */ memo(function ColumnSizer({\n  children,\n  columnMaxWidth,\n  columnMinWidth,\n  columnCount,\n  width\n}: ColumnSizerProps) {\n  const registeredChildRef = useRef<ColumnSizerRegisteredChild | null>(null);\n\n  const registerChild = useCallback(\n    (child: ColumnSizerRegisteredChild | null) => {\n      if (child && typeof child.recomputeGridSize !== \"function\") {\n        throw Error(\n          \"Unexpected child type registered; only Grid/MultiGrid children are supported.\"\n        );\n      }\n\n      registeredChildRef.current = child;\n\n      if (child) {\n        child.recomputeGridSize();\n      }\n    },\n    []\n  );\n\n  // Recompute the registered child's sizes when the sizing inputs change (but not on mount;\n  // registering the child already does that). Comparing against the previously committed values\n  // (rather than skipping the first effect run) keeps this correct when StrictMode re-runs effects.\n  const committedInputsRef = useRef<{\n    columnCount: number;\n    columnMaxWidth: number | undefined;\n    columnMinWidth: number | undefined;\n    width: number;\n  } | null>(null);\n  useIsomorphicLayoutEffect(() => {\n    const prev = committedInputsRef.current;\n    committedInputsRef.current = {\n      columnCount,\n      columnMaxWidth,\n      columnMinWidth,\n      width\n    };\n\n    if (\n      prev !== null &&\n      (columnMaxWidth !== prev.columnMaxWidth ||\n        columnMinWidth !== prev.columnMinWidth ||\n        columnCount !== prev.columnCount ||\n        width !== prev.width)\n    ) {\n      registeredChildRef.current?.recomputeGridSize();\n    }\n  }, [columnCount, columnMaxWidth, columnMinWidth, width]);\n\n  const safeColumnMinWidth = columnMinWidth || 1;\n\n  const safeColumnMaxWidth = columnMaxWidth\n    ? Math.min(columnMaxWidth, width)\n    : width;\n\n  let columnWidth = width / columnCount;\n  columnWidth = Math.max(safeColumnMinWidth, columnWidth);\n  columnWidth = Math.min(safeColumnMaxWidth, columnWidth);\n  columnWidth = Math.floor(columnWidth);\n\n  const adjustedWidth = Math.min(width, columnWidth * columnCount);\n\n  return children({\n    adjustedWidth,\n    columnWidth,\n    getColumnWidth: () => columnWidth,\n    registerChild\n  });\n});\n","import type { OverscanIndices, OverscanIndicesGetterParams } from \"./types\";\n\nexport const SCROLL_DIRECTION_BACKWARD = -1;\nexport const SCROLL_DIRECTION_FORWARD = 1;\n\nexport const SCROLL_DIRECTION_HORIZONTAL = \"horizontal\";\nexport const SCROLL_DIRECTION_VERTICAL = \"vertical\";\n\n/**\n * Calculates the number of cells to overscan before and after a specified range.\n * This function ensures that overscanning doesn't exceed the available cells.\n */\n\nexport function accessibilityOverscanIndicesGetter({\n  cellCount,\n  overscanCellsCount,\n  scrollDirection,\n  startIndex,\n  stopIndex\n}: OverscanIndicesGetterParams): OverscanIndices {\n  // Make sure we render at least 1 cell extra before and after (except near boundaries)\n  // This is necessary in order to support keyboard navigation (TAB/SHIFT+TAB) in some cases\n  // For more info see issues #625\n  overscanCellsCount = Math.max(1, overscanCellsCount);\n\n  if (scrollDirection === SCROLL_DIRECTION_FORWARD) {\n    return {\n      overscanStartIndex: Math.max(0, startIndex - 1),\n      overscanStopIndex: Math.min(cellCount - 1, stopIndex + overscanCellsCount)\n    };\n  } else {\n    return {\n      overscanStartIndex: Math.max(0, startIndex - overscanCellsCount),\n      overscanStopIndex: Math.min(cellCount - 1, stopIndex + 1)\n    };\n  }\n}\n","import { cloneElement, type CSSProperties, type ReactElement } from \"react\";\nimport type { CellMeasurerParent } from \"../CellMeasurer/types\";\nimport type {\n  CellRangeRendererParams,\n  CellRendererParams,\n  CellRenderer\n} from \"./types\";\n\n/**\n * Default implementation of cellRangeRenderer used by Grid.\n * This renderer supports cell-caching while the user is scrolling.\n */\n\nexport function defaultCellRangeRenderer({\n  cellCache,\n  cellRenderer,\n  columnSizeAndPositionManager,\n  columnStartIndex,\n  columnStopIndex,\n  deferredMeasurementCache,\n  horizontalOffsetAdjustment,\n  isScrolling,\n  isScrollingOptOut,\n  parent, // Grid (or List or Table)\n  rowSizeAndPositionManager,\n  rowStartIndex,\n  rowStopIndex,\n  styleCache,\n  verticalOffsetAdjustment,\n  visibleColumnIndices,\n  visibleRowIndices\n}: CellRangeRendererParams): ReactElement[] {\n  const renderedCells: ReactElement[] = [];\n\n  // Browsers have native size limits for elements (eg Chrome 33M pixels, IE 1.5M pixes).\n  // User cannot scroll beyond these size limitations.\n  // In order to work around this, ScalingCellSizeAndPositionManager compresses offsets.\n  // We should never cache styles for compressed offsets though as this can lead to bugs.\n  // See issue #576 for more.\n  const areOffsetsAdjusted =\n    columnSizeAndPositionManager.areOffsetsAdjusted() ||\n    rowSizeAndPositionManager.areOffsetsAdjusted();\n\n  const canCacheStyle = !isScrolling && !areOffsetsAdjusted;\n\n  for (let rowIndex = rowStartIndex; rowIndex <= rowStopIndex; rowIndex++) {\n    const rowDatum =\n      rowSizeAndPositionManager.getSizeAndPositionOfCell(rowIndex);\n\n    for (\n      let columnIndex = columnStartIndex;\n      columnIndex <= columnStopIndex;\n      columnIndex++\n    ) {\n      const columnDatum =\n        columnSizeAndPositionManager.getSizeAndPositionOfCell(columnIndex);\n      // Note that start/stop may be undefined (in which case the comparisons below are false)\n      const isVisible =\n        columnIndex >= visibleColumnIndices.start! &&\n        columnIndex <= visibleColumnIndices.stop! &&\n        rowIndex >= visibleRowIndices.start! &&\n        rowIndex <= visibleRowIndices.stop!;\n      const key = `${rowIndex}-${columnIndex}`;\n      let style: CSSProperties;\n\n      // Cache style objects so shallow-compare doesn't re-render unnecessarily.\n      if (canCacheStyle && styleCache[key]) {\n        style = styleCache[key];\n      } else {\n        // In deferred mode, cells will be initially rendered before we know their size.\n        // Don't interfere with CellMeasurer's measurements by setting an invalid size.\n        if (\n          deferredMeasurementCache &&\n          !deferredMeasurementCache.has(rowIndex, columnIndex)\n        ) {\n          // Position not-yet-measured cells at top/left 0,0,\n          // And give them width/height of 'auto' so they can grow larger than the parent Grid if necessary.\n          // Positioning them further to the right/bottom influences their measured size.\n          style = {\n            height: \"auto\",\n            left: 0,\n            position: \"absolute\",\n            top: 0,\n            width: \"auto\"\n          };\n        } else {\n          style = {\n            height: rowDatum.size,\n            left: columnDatum.offset + horizontalOffsetAdjustment,\n            position: \"absolute\",\n            top: rowDatum.offset + verticalOffsetAdjustment,\n            width: columnDatum.size\n          };\n\n          styleCache[key] = style;\n        }\n      }\n\n      const cellRendererParams: CellRendererParams = {\n        columnIndex,\n        isScrolling,\n        isVisible,\n        key,\n        parent,\n        rowIndex,\n        style\n      };\n\n      let renderedCell: ReturnType<CellRenderer>;\n\n      // Avoid re-creating cells while scrolling.\n      // This can lead to the same cell being created many times and can cause performance issues for \"heavy\" cells.\n      // If a scroll is in progress- cache and reuse cells.\n      // This cache will be thrown away once scrolling completes.\n      // However if we are scaling scroll positions and sizes, we should also avoid caching.\n      // This is because the offset changes slightly as scroll position changes and caching leads to stale values.\n      // For more info refer to issue #395\n      //\n      // If isScrollingOptOut is specified, we always cache cells.\n      // For more info refer to issue #1028\n      if (\n        (isScrollingOptOut || isScrolling) &&\n        !horizontalOffsetAdjustment &&\n        !verticalOffsetAdjustment\n      ) {\n        if (!cellCache[key]) {\n          cellCache[key] = cellRenderer(cellRendererParams);\n        }\n\n        renderedCell = cellCache[key];\n\n        // If the user is no longer scrolling, don't cache cells.\n        // This makes dynamic cell content difficult for users and would also lead to a heavier memory footprint.\n      } else {\n        renderedCell = cellRenderer(cellRendererParams);\n      }\n\n      if (renderedCell == null || renderedCell === false) {\n        continue;\n      }\n\n      const cellElement = renderedCell as ReactElement<CellElementProps>;\n\n      if (process.env.NODE_ENV !== \"production\") {\n        warnAboutMissingStyle(parent, cellElement);\n      }\n\n      if (!cellElement.props.role) {\n        renderedCell = cloneElement(cellElement, { role: \"gridcell\" });\n      }\n\n      renderedCells.push(renderedCell);\n    }\n  }\n\n  return renderedCells;\n}\n\n// Props that Grid reads from rendered cells (React 19's types default element props to unknown)\ntype CellElementProps = {\n  children?: unknown;\n  role?: string;\n  style?: CSSProperties;\n};\n\nfunction warnAboutMissingStyle(\n  parent: CellMeasurerParent & { __warnedAboutMissingStyle?: boolean },\n  renderedCell: ReactElement<CellElementProps>\n) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (renderedCell) {\n      // If the direct child is a CellMeasurer, then we should check its child\n      // See issue #611\n      if (\n        renderedCell.type &&\n        (renderedCell.type as { __internalCellMeasurerFlag?: boolean })\n          .__internalCellMeasurerFlag\n      ) {\n        renderedCell = renderedCell.props\n          .children as ReactElement<CellElementProps>;\n      }\n\n      if (\n        renderedCell &&\n        renderedCell.props &&\n        renderedCell.props.style === undefined &&\n        parent.__warnedAboutMissingStyle !== true\n      ) {\n        parent.__warnedAboutMissingStyle = true;\n\n        console.warn(\n          \"Rendered cell should include style property for positioning.\"\n        );\n      }\n    }\n  }\n}\n","/**\n * Specifies the number of milliseconds during which to disable pointer events while a scroll is in progress.\n * This improves performance and makes scrolling smoother.\n */\nexport const DEFAULT_SCROLLING_RESET_TIME_INTERVAL = 150;\n","import type { OverscanIndices, OverscanIndicesGetterParams } from \"./types\";\n\nexport const SCROLL_DIRECTION_BACKWARD = -1;\nexport const SCROLL_DIRECTION_FORWARD = 1;\n\nexport const SCROLL_DIRECTION_HORIZONTAL = \"horizontal\";\nexport const SCROLL_DIRECTION_VERTICAL = \"vertical\";\n\n/**\n * Calculates the number of cells to overscan before and after a specified range.\n * This function ensures that overscanning doesn't exceed the available cells.\n */\n\nexport function defaultOverscanIndicesGetter({\n  cellCount,\n  overscanCellsCount,\n  scrollDirection,\n  startIndex,\n  stopIndex\n}: OverscanIndicesGetterParams): OverscanIndices {\n  if (scrollDirection === SCROLL_DIRECTION_FORWARD) {\n    return {\n      overscanStartIndex: Math.max(0, startIndex),\n      overscanStopIndex: Math.min(cellCount - 1, stopIndex + overscanCellsCount)\n    };\n  } else {\n    return {\n      overscanStartIndex: Math.max(0, startIndex - overscanCellsCount),\n      overscanStopIndex: Math.min(cellCount - 1, stopIndex)\n    };\n  }\n}\n","import scrollbarSize from \"dom-helpers/scrollbarSize\";\nimport { DEFAULT_SCROLLING_RESET_TIME_INTERVAL } from \"./constants\";\nimport { defaultCellRangeRenderer } from \"./defaultCellRangeRenderer\";\nimport { defaultOverscanIndicesGetter } from \"./defaultOverscanIndicesGetter\";\nimport type { GridProps } from \"./types\";\n\ntype DefaultedPropKeys =\n  | \"aria-label\"\n  | \"aria-readonly\"\n  | \"autoContainerWidth\"\n  | \"cellRangeRenderer\"\n  | \"containerRole\"\n  | \"containerStyle\"\n  | \"estimatedColumnSize\"\n  | \"estimatedRowSize\"\n  | \"getScrollbarSize\"\n  | \"isScrollingOptOut\"\n  | \"noContentRenderer\"\n  | \"onScroll\"\n  | \"onScrollbarPresenceChange\"\n  | \"onSectionRendered\"\n  | \"overscanColumnCount\"\n  | \"overscanIndicesGetter\"\n  | \"overscanRowCount\"\n  | \"role\"\n  | \"scrollingResetTimeInterval\"\n  | \"style\"\n  | \"tabIndex\";\n\nconst noop = () => {};\n\n/**\n * Default values for `Grid`'s optional props.\n * (The PURE annotations let bundlers drop this object if it isn't used.)\n */\nexport const defaultGridProps: Readonly<\n  Required<Pick<GridProps, DefaultedPropKeys>>\n> = /* @__PURE__ */ Object.freeze({\n  \"aria-label\": \"grid\",\n  \"aria-readonly\": true,\n  autoContainerWidth: false,\n  cellRangeRenderer: defaultCellRangeRenderer,\n  containerRole: \"row\",\n  containerStyle: /* @__PURE__ */ Object.freeze({}),\n  estimatedColumnSize: 100,\n  estimatedRowSize: 30,\n  getScrollbarSize: scrollbarSize,\n  isScrollingOptOut: false,\n  noContentRenderer: () => null,\n  onScroll: noop,\n  onScrollbarPresenceChange: noop,\n  onSectionRendered: noop,\n  overscanColumnCount: 0,\n  overscanIndicesGetter: defaultOverscanIndicesGetter,\n  overscanRowCount: 10,\n  role: \"grid\",\n  scrollingResetTimeInterval: DEFAULT_SCROLLING_RESET_TIME_INTERVAL,\n  style: /* @__PURE__ */ Object.freeze({}),\n  tabIndex: 0\n});\n","/**\n * Helper utility that updates the specified callback whenever any of the specified indices have changed.\n */\nexport function createCallbackMemoizer(requireAllKeys = true) {\n  let cachedIndices: Record<string, unknown> = {};\n\n  return <Indices extends object>({\n    callback,\n    indices\n  }: {\n    callback: (indices: Indices) => void;\n    indices: Indices;\n  }) => {\n    const indicesMap = indices as Record<string, unknown>;\n    const keys = Object.keys(indices);\n    const allInitialized =\n      !requireAllKeys ||\n      keys.every((key) => {\n        const value = indicesMap[key];\n        return Array.isArray(value) ? value.length > 0 : (value as number) >= 0;\n      });\n    const indexChanged =\n      keys.length !== Object.keys(cachedIndices).length ||\n      keys.some((key) => {\n        const cachedValue = cachedIndices[key];\n        const value = indicesMap[key];\n\n        return Array.isArray(value)\n          ? (cachedValue as unknown[]).join(\",\") !== value.join(\",\")\n          : cachedValue !== value;\n      });\n\n    cachedIndices = indicesMap;\n\n    if (allInitialized && indexChanged) {\n      callback(indices);\n    }\n  };\n}\n","/**\n * Determines a new offset that ensures a certain cell is visible, given the current offset.\n * If the cell is already visible then the current offset will be returned.\n * If the current offset is too great or small, it will be adjusted just enough to ensure the specified index is visible.\n *\n * @param align Desired alignment within container; one of \"auto\" (default), \"start\", \"end\", or \"center\".\n *   With \"auto\", a cell that is larger than the container is aligned to its start.\n * @param cellOffset Offset (x or y) position for cell\n * @param cellSize Size (width or height) of cell\n * @param containerSize Total size (width or height) of the container\n * @param currentOffset Container's current (x or y) offset\n * @return Offset to use to ensure the specified cell is visible\n */\nexport function getUpdatedOffsetForIndex({\n  align = \"auto\",\n  cellOffset,\n  cellSize,\n  containerSize,\n  currentOffset\n}: {\n  align?: \"auto\" | \"end\" | \"start\" | \"center\";\n  cellOffset: number;\n  cellSize: number;\n  containerSize: number;\n  currentOffset: number;\n}): number {\n  const maxOffset = cellOffset;\n  const minOffset = maxOffset - containerSize + cellSize;\n\n  switch (align) {\n    case \"start\":\n      return maxOffset;\n    case \"end\":\n      return minOffset;\n    case \"center\":\n      return maxOffset - (containerSize - cellSize) / 2;\n    default:\n      // A cell that doesn't fit within the container is aligned to its start, so that its start is visible (#1264)\n      if (cellSize >= containerSize) {\n        return maxOffset;\n      }\n      return Math.max(minOffset, Math.min(maxOffset, currentOffset));\n  }\n}\n","type Callback = (timestamp: number) => void;\ntype CancelAnimationFrame = (requestId: number) => void;\ntype RequestAnimationFrame = (callback: Callback) => number;\n\ntype AnimationFrameHost = {\n  requestAnimationFrame?: RequestAnimationFrame;\n  webkitRequestAnimationFrame?: RequestAnimationFrame;\n  mozRequestAnimationFrame?: RequestAnimationFrame;\n  oRequestAnimationFrame?: RequestAnimationFrame;\n  msRequestAnimationFrame?: RequestAnimationFrame;\n  cancelAnimationFrame?: CancelAnimationFrame;\n  webkitCancelAnimationFrame?: CancelAnimationFrame;\n  mozCancelAnimationFrame?: CancelAnimationFrame;\n  oCancelAnimationFrame?: CancelAnimationFrame;\n  msCancelAnimationFrame?: CancelAnimationFrame;\n  setTimeout: (callback: Callback, delay: number) => number;\n  clearTimeout: (id: number) => void;\n};\n\n// Properly handle server-side rendering.\nlet win: AnimationFrameHost;\nif (typeof window !== \"undefined\") {\n  win = window as unknown as AnimationFrameHost;\n} else if (typeof self !== \"undefined\") {\n  win = self as unknown as AnimationFrameHost;\n} else {\n  win = {} as AnimationFrameHost;\n}\n\n// requestAnimationFrame() shim by Paul Irish\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\nconst request: RequestAnimationFrame =\n  win.requestAnimationFrame ||\n  win.webkitRequestAnimationFrame ||\n  win.mozRequestAnimationFrame ||\n  win.oRequestAnimationFrame ||\n  win.msRequestAnimationFrame ||\n  function (callback: Callback): number {\n    return win.setTimeout(callback, 1000 / 60);\n  };\n\nconst cancel: CancelAnimationFrame =\n  win.cancelAnimationFrame ||\n  win.webkitCancelAnimationFrame ||\n  win.mozCancelAnimationFrame ||\n  win.oCancelAnimationFrame ||\n  win.msCancelAnimationFrame ||\n  function (id: number) {\n    win.clearTimeout(id);\n  };\n\nexport const raf: RequestAnimationFrame = request;\nexport const caf: CancelAnimationFrame = cancel;\n","import { caf, raf } from \"./animationFrame\";\n\nexport type AnimationTimeoutId = {\n  id: number;\n};\n\nexport const cancelAnimationTimeout = (frame: AnimationTimeoutId) =>\n  caf(frame.id);\n\n/**\n * Recursively calls requestAnimationFrame until a specified delay has been met or exceeded.\n * When the delay time has been reached the function you're timing out will be called.\n *\n * Credit: Joe Lambert (https://gist.github.com/joelambert/1002116#file-requesttimeout-js)\n */\nexport const requestAnimationTimeout = (\n  callback: () => void,\n  delay: number\n): AnimationTimeoutId => {\n  let start: number;\n  // wait for end of processing current event handler, because event handler may be long\n  Promise.resolve().then(() => {\n    start = Date.now();\n  });\n\n  const timeout = () => {\n    if (Date.now() - start >= delay) {\n      callback.call(undefined);\n    } else {\n      frame.id = raf(timeout);\n    }\n  };\n\n  const frame: AnimationTimeoutId = {\n    id: raf(timeout)\n  };\n\n  return frame;\n};\n","import { useEffect } from \"react\";\nimport type { ScrollElement } from \"./types\";\n\n/** Warns (in DEV) if a component has neither a `height` nor a `scrollElement` (it then renders nothing). */\nexport function useMissingHeightWarning(\n  componentName: string,\n  height: number | undefined,\n  scrollElement: ScrollElement | null | undefined\n) {\n  const heightMissing = height === undefined && scrollElement === undefined;\n  useEffect(() => {\n    if (process.env.NODE_ENV !== \"production\" && heightMissing) {\n      console.warn(\n        `${componentName} requires a height prop (unless a scrollElement is specified)`\n      );\n    }\n  }, [componentName, heightMissing]);\n}\n","import type { ResolvedScrollElement } from \"./types\";\n\n/**\n * Gets the dimensions of the element, accounting for API differences between\n * `window` and other DOM elements.\n */\n\ntype Dimensions = {\n  height: number;\n  width: number;\n};\n\ntype Offset = {\n  top: number;\n  left: number;\n};\n\nconst isWindow = (element: ResolvedScrollElement): element is Window =>\n  element === window;\n\nconst getBoundingBox = (element: Element) => element.getBoundingClientRect();\n\nexport function getDimensions(\n  scrollElement: ResolvedScrollElement\n): Dimensions {\n  if (isWindow(scrollElement)) {\n    const { innerHeight, innerWidth } = window;\n    return {\n      height: typeof innerHeight === \"number\" ? innerHeight : 0,\n      width: typeof innerWidth === \"number\" ? innerWidth : 0\n    };\n  } else {\n    // Read the fields explicitly; DOMRect fields are prototype getters,\n    // so spreading a DOMRect (e.g. into state) would copy nothing\n    const { height, width } = getBoundingBox(scrollElement);\n    return { height, width };\n  }\n}\n\n/**\n * Gets the vertical and horizontal position of an element within its scroll container.\n * Elements that have been “scrolled past” return negative values.\n * Handles edge-case where a user is navigating back (history) from an already-scrolled page.\n * In this case the body’s top or left position will be a negative number and this element’s top or left will be increased (by that amount).\n */\nexport function getPositionOffset(\n  element: Element,\n  container: ResolvedScrollElement\n): Offset {\n  if (isWindow(container) && document.documentElement) {\n    const containerElement = document.documentElement;\n    const elementRect = getBoundingBox(element);\n    const containerRect = getBoundingBox(containerElement);\n    return {\n      top: elementRect.top - containerRect.top,\n      left: elementRect.left - containerRect.left\n    };\n  } else {\n    const scrollOffset = getScrollOffset(container);\n    const elementRect = getBoundingBox(element);\n    const containerRect = getBoundingBox(container as Element);\n    return {\n      top: elementRect.top + scrollOffset.top - containerRect.top,\n      left: elementRect.left + scrollOffset.left - containerRect.left\n    };\n  }\n}\n\n/**\n * Gets the vertical and horizontal scroll amount of the element, accounting for IE compatibility\n * and API differences between `window` and other DOM elements.\n */\nexport function getScrollOffset(element: ResolvedScrollElement): Offset {\n  if (isWindow(element) && document.documentElement) {\n    return {\n      top:\n        \"scrollY\" in window\n          ? window.scrollY\n          : document.documentElement.scrollTop,\n      left:\n        \"scrollX\" in window\n          ? window.scrollX\n          : document.documentElement.scrollLeft\n    };\n  } else {\n    return {\n      top: (element as Element).scrollTop,\n      left: (element as Element).scrollLeft\n    };\n  }\n}\n","import {\n  requestAnimationTimeout,\n  cancelAnimationTimeout,\n  type AnimationTimeoutId\n} from \"../requestAnimationTimeout\";\nimport type { ResolvedScrollElement } from \"./types\";\n\n/**\n * Stable, per-instance object that a component registers to receive the (shared) scroll events of its scroll element.\n * Its methods read the instance's latest props/state, so the object itself never changes.\n */\nexport type ScrollElementListener = {\n  /** Wait time (in milliseconds) after the last scroll event before `resetIsScrolling()` is called. */\n  getScrollingResetTimeInterval(): number;\n\n  /** Called when the element the listener is registered for scrolls. */\n  handleScrollEvent(): void;\n\n  /** Called once scrolling has stopped (for the longest interval of all registered listeners). */\n  resetIsScrolling(): void;\n};\n\ntype Registration = {\n  listener: ScrollElementListener;\n  element: ResolvedScrollElement;\n};\n\nlet registrations: Registration[] = [];\nlet originalBodyPointerEvents: string | null = null;\nlet disablePointerEventsTimeoutId: AnimationTimeoutId | null = null;\n\nfunction enablePointerEventsIfDisabled() {\n  if (disablePointerEventsTimeoutId) {\n    disablePointerEventsTimeoutId = null;\n\n    if (document.body && originalBodyPointerEvents != null) {\n      document.body.style.pointerEvents = originalBodyPointerEvents;\n    }\n\n    originalBodyPointerEvents = null;\n  }\n}\n\nfunction enablePointerEventsAfterDelayCallback() {\n  enablePointerEventsIfDisabled();\n  registrations.forEach(({ listener }) => listener.resetIsScrolling());\n}\n\nfunction enablePointerEventsAfterDelay() {\n  if (disablePointerEventsTimeoutId) {\n    cancelAnimationTimeout(disablePointerEventsTimeoutId);\n  }\n\n  let maximumTimeout = 0;\n  registrations.forEach(({ listener }) => {\n    maximumTimeout = Math.max(\n      maximumTimeout,\n      listener.getScrollingResetTimeInterval()\n    );\n  });\n\n  disablePointerEventsTimeoutId = requestAnimationTimeout(\n    enablePointerEventsAfterDelayCallback,\n    maximumTimeout\n  );\n}\n\nfunction onScroll(event: Event) {\n  if (\n    event.currentTarget === window &&\n    originalBodyPointerEvents == null &&\n    document.body\n  ) {\n    originalBodyPointerEvents = document.body.style.pointerEvents;\n\n    document.body.style.pointerEvents = \"none\";\n  }\n  enablePointerEventsAfterDelay();\n  registrations.forEach(({ listener, element }) => {\n    if (element === event.currentTarget) {\n      listener.handleScrollEvent();\n    }\n  });\n}\n\nexport function registerScrollListener(\n  listener: ScrollElementListener,\n  element: ResolvedScrollElement\n) {\n  if (\n    registrations.some(\n      (registration) =>\n        registration.listener === listener && registration.element === element\n    )\n  ) {\n    return;\n  }\n\n  if (!registrations.some((registration) => registration.element === element)) {\n    element.addEventListener(\"scroll\", onScroll);\n  }\n  registrations.push({ listener, element });\n}\n\nexport function unregisterScrollListener(\n  listener: ScrollElementListener,\n  element: ResolvedScrollElement\n) {\n  registrations = registrations.filter(\n    (registration) =>\n      registration.listener !== listener || registration.element !== element\n  );\n\n  // Remove the listener once no instance is listening to this element anymore,\n  // even if other instances are still listening to other elements\n  if (!registrations.some((registration) => registration.element === element)) {\n    element.removeEventListener(\"scroll\", onScroll);\n  }\n\n  if (!registrations.length) {\n    if (disablePointerEventsTimeoutId) {\n      cancelAnimationTimeout(disablePointerEventsTimeoutId);\n      enablePointerEventsIfDisabled();\n    }\n  }\n}\n","import { useInsertionEffect, useState } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"../useIsomorphicLayoutEffect\";\nimport {\n  getDimensions,\n  getPositionOffset,\n  getScrollOffset\n} from \"./dimensions\";\nimport {\n  registerScrollListener,\n  unregisterScrollListener,\n  type ScrollElementListener\n} from \"./scrollListeners\";\nimport type {\n  ResolvedScrollElement,\n  ScrollElement,\n  ScrollElementLinkSource,\n  ScrollElementLinkTarget,\n  ScrollElementViewport\n} from \"./types\";\n\ntype Instance = ScrollElementListener & {\n  element: ResolvedScrollElement | null;\n  scrollingResetTimeInterval: number;\n  source: ScrollElementLinkSource;\n  target: ScrollElementLinkTarget;\n  // Most recently provided to the target\n  viewport: ScrollElementViewport;\n\n  // Measures the scroll element and the target's position within it, and provides the target with the resulting viewport (if it changed)\n  update(isScrolling: boolean): void;\n};\n\n/** Resolves the `scrollElement` prop to the object that is listened to (null during server rendering, or if not specified). */\nexport function resolveScrollElement(\n  scrollElement: ScrollElement | null | undefined\n): ResolvedScrollElement | null {\n  if (scrollElement === \"window\") {\n    return typeof window !== \"undefined\" ? window : null;\n  }\n  return scrollElement ?? null;\n}\n\nfunction measureViewport(\n  element: ResolvedScrollElement,\n  target: ScrollElementLinkTarget,\n  isScrolling: boolean\n): ScrollElementViewport {\n  const targetElement = target.getElement();\n  const positionFromTop = targetElement\n    ? getPositionOffset(targetElement, element).top\n    : 0;\n\n  return {\n    height: getDimensions(element).height,\n    isScrolling,\n    scrollTop: getScrollOffset(element).top - positionFromTop\n  };\n}\n\nfunction createInstance(\n  target: ScrollElementLinkTarget,\n  scrollingResetTimeInterval: number\n): Instance {\n  const instance: Instance = {\n    element: null,\n    scrollingResetTimeInterval,\n    target,\n    viewport: { height: 0, isScrolling: false, scrollTop: 0 },\n\n    source: {\n      scrollTo(scrollTop) {\n        const { element } = instance;\n        if (element === null) {\n          return false;\n        }\n\n        // Measure the position again, in case content above the component has changed size since it was last measured\n        const targetElement = instance.target.getElement();\n        const positionFromTop = targetElement\n          ? getPositionOffset(targetElement, element).top\n          : 0;\n\n        const scrollOffset = getScrollOffset(element);\n        const top = scrollTop + positionFromTop;\n        if (Math.abs(scrollOffset.top - top) < 1) {\n          return false;\n        }\n\n        if (typeof element.scrollTo === \"function\") {\n          // Preserve the current horizontal scroll position\n          element.scrollTo(scrollOffset.left, top);\n        } else {\n          (element as Element).scrollTop = top;\n        }\n        return true;\n      }\n    },\n\n    update(isScrolling) {\n      const { element } = instance;\n      if (element === null) {\n        return;\n      }\n\n      const viewport = measureViewport(element, instance.target, isScrolling);\n      const prevViewport = instance.viewport;\n      if (\n        viewport.height !== prevViewport.height ||\n        viewport.isScrolling !== prevViewport.isScrolling ||\n        viewport.scrollTop !== prevViewport.scrollTop\n      ) {\n        instance.viewport = viewport;\n        instance.target.setViewport(viewport);\n      }\n    },\n\n    // ScrollElementListener (called by scrollListeners.ts)\n    getScrollingResetTimeInterval() {\n      return instance.scrollingResetTimeInterval;\n    },\n\n    handleScrollEvent() {\n      instance.update(true);\n    },\n\n    resetIsScrolling() {\n      instance.update(false);\n    }\n  };\n\n  return instance;\n}\n\n// Calls `onResize` when the scroll element is resized: the window (resize event) or an element (ResizeObserver).\n// Returns a function that stops observing it.\nfunction observeResize(element: ResolvedScrollElement, onResize: () => void) {\n  if (element === window) {\n    window.addEventListener(\"resize\", onResize, false);\n    return () => window.removeEventListener(\"resize\", onResize, false);\n  }\n\n  const ResizeObserverImpl =\n    (element as Element).ownerDocument?.defaultView?.ResizeObserver ??\n    (typeof ResizeObserver !== \"undefined\" ? ResizeObserver : undefined);\n  if (!ResizeObserverImpl) {\n    return () => {};\n  }\n\n  const resizeObserver = new ResizeObserverImpl(onResize);\n  resizeObserver.observe(element as Element, { box: \"border-box\" });\n  return () => resizeObserver.disconnect();\n}\n\n/**\n * Links a component (the target) to the element that scrolls it (its `scrollElement` prop): the window or a scrollable element.\n *\n * While the scroll element is available, the target is linked to it (see `ScrollElementLinkTarget`):\n * it is provided with the part of the scroll element that is visible to it (its viewport),\n * which is measured again whenever the scroll element scrolls or is resized, and after every commit of the component\n * (so that its position within the scroll element is current, e.g. if content above it has changed size).\n * The target scrolls the scroll element through the link source it is provided with.\n *\n * The target is unlinked when the scroll element is removed (or changes) and when the component unmounts.\n * (During server rendering, effects don't run, so the target is never linked.)\n */\nexport function useScrollElementLink(\n  scrollElement: ScrollElement | null | undefined,\n  target: ScrollElementLinkTarget,\n  scrollingResetTimeInterval: number\n) {\n  const [instance] = useState(() =>\n    createInstance(target, scrollingResetTimeInterval)\n  );\n\n  useInsertionEffect(() => {\n    instance.scrollingResetTimeInterval = scrollingResetTimeInterval;\n  });\n\n  const element = resolveScrollElement(scrollElement);\n\n  useIsomorphicLayoutEffect(() => {\n    if (element === null) {\n      return;\n    }\n\n    instance.element = element;\n    instance.viewport = measureViewport(element, instance.target, false);\n    instance.target.link(instance.source, instance.viewport);\n\n    registerScrollListener(instance, element);\n    const stopObservingResize = observeResize(element, () =>\n      instance.update(instance.viewport.isScrolling)\n    );\n\n    return () => {\n      unregisterScrollListener(instance, element);\n      stopObservingResize();\n\n      instance.element = null;\n      instance.target.link(null, instance.viewport);\n    };\n  }, [element, instance]);\n\n  // The component's position within the scroll element may have changed (e.g. if content above it has changed size)\n  useIsomorphicLayoutEffect(() => {\n    instance.update(instance.viewport.isScrolling);\n  });\n}\n","import type { Alignment, CellSizeGetter, VisibleCellRange } from \"../types\";\n\ntype CellSizeAndPositionManagerParams = {\n  cellCount: number;\n  cellSizeGetter: CellSizeGetter;\n  estimatedCellSize: number;\n};\n\ntype ConfigureParams = {\n  cellCount: number;\n  estimatedCellSize: number;\n  cellSizeGetter: CellSizeGetter;\n};\n\ntype GetUpdatedOffsetForIndex = {\n  align?: Alignment;\n  containerSize: number;\n  currentOffset: number;\n  targetIndex: number;\n};\n\ntype GetVisibleCellRangeParams = {\n  containerSize: number;\n  offset: number;\n};\n\nexport type SizeAndPositionData = {\n  offset: number;\n  size: number;\n};\n\n/**\n * Just-in-time calculates and caches size and position information for a collection of cells.\n */\n\nexport class CellSizeAndPositionManager {\n  // Cache of size and position data for cells, mapped by cell index.\n  // Note that invalid values may exist in this map so only rely on cells up to this._lastMeasuredIndex\n  _cellSizeAndPositionData: { [index: number]: SizeAndPositionData } = {};\n\n  // Measurements for cells up to this index can be trusted; cells afterward should be estimated.\n  _lastMeasuredIndex = -1;\n\n  // Used in deferred mode to track which cells have been queued for measurement.\n  _lastBatchedIndex = -1;\n\n  _cellCount: number;\n  _cellSizeGetter: CellSizeGetter;\n  _estimatedCellSize: number;\n\n  constructor({\n    cellCount,\n    cellSizeGetter,\n    estimatedCellSize\n  }: CellSizeAndPositionManagerParams) {\n    this._cellSizeGetter = cellSizeGetter;\n    this._cellCount = cellCount;\n    this._estimatedCellSize = estimatedCellSize;\n  }\n\n  areOffsetsAdjusted() {\n    return false;\n  }\n\n  configure({ cellCount, estimatedCellSize, cellSizeGetter }: ConfigureParams) {\n    this._cellCount = cellCount;\n    // Cells beyond the new count are no longer measured\n    // (otherwise the total size, which estimates the size of the unmeasured cells, could even be negative; see #1351)\n    this._lastMeasuredIndex = Math.min(this._lastMeasuredIndex, cellCount - 1);\n    this._estimatedCellSize = estimatedCellSize;\n    this._cellSizeGetter = cellSizeGetter;\n  }\n\n  getCellCount(): number {\n    return this._cellCount;\n  }\n\n  getEstimatedCellSize(): number {\n    return this._estimatedCellSize;\n  }\n\n  getLastMeasuredIndex(): number {\n    return this._lastMeasuredIndex;\n  }\n\n  getOffsetAdjustment() {\n    return 0;\n  }\n\n  /**\n   * This method returns the size and position for the cell at the specified index.\n   * It just-in-time calculates (or used cached values) for cells leading up to the index.\n   */\n  getSizeAndPositionOfCell(index: number): SizeAndPositionData {\n    if (index < 0 || index >= this._cellCount) {\n      throw Error(\n        `Requested index ${index} is outside of range 0..${this._cellCount}`\n      );\n    }\n\n    if (index > this._lastMeasuredIndex) {\n      const lastMeasuredCellSizeAndPosition =\n        this.getSizeAndPositionOfLastMeasuredCell();\n      let offset =\n        lastMeasuredCellSizeAndPosition.offset +\n        lastMeasuredCellSizeAndPosition.size;\n\n      for (let i = this._lastMeasuredIndex + 1; i <= index; i++) {\n        const size = this._cellSizeGetter({ index: i });\n\n        // undefined or NaN probably means a logic error in the size getter.\n        // null means we're using CellMeasurer and haven't yet measured a given index.\n        if (size === undefined || isNaN(size)) {\n          throw Error(`Invalid size returned for cell ${i} of value ${size}`);\n        } else if (size === null) {\n          this._cellSizeAndPositionData[i] = {\n            offset,\n            size: 0\n          };\n\n          this._lastBatchedIndex = index;\n        } else {\n          this._cellSizeAndPositionData[i] = {\n            offset,\n            size\n          };\n\n          offset += size;\n\n          this._lastMeasuredIndex = i;\n        }\n      }\n    }\n\n    return this._cellSizeAndPositionData[index];\n  }\n\n  getSizeAndPositionOfLastMeasuredCell(): SizeAndPositionData {\n    return this._lastMeasuredIndex >= 0\n      ? this._cellSizeAndPositionData[this._lastMeasuredIndex]\n      : {\n          offset: 0,\n          size: 0\n        };\n  }\n\n  /**\n   * Total size of all cells being measured.\n   * This value will be completely estimated initially.\n   * As cells are measured, the estimate will be updated.\n   */\n  getTotalSize(): number {\n    const lastMeasuredCellSizeAndPosition =\n      this.getSizeAndPositionOfLastMeasuredCell();\n    const totalSizeOfMeasuredCells =\n      lastMeasuredCellSizeAndPosition.offset +\n      lastMeasuredCellSizeAndPosition.size;\n    const numUnmeasuredCells = this._cellCount - this._lastMeasuredIndex - 1;\n    const totalSizeOfUnmeasuredCells =\n      numUnmeasuredCells * this._estimatedCellSize;\n    return totalSizeOfMeasuredCells + totalSizeOfUnmeasuredCells;\n  }\n\n  /**\n   * Determines a new offset that ensures a certain cell is visible, given the current offset.\n   * If the cell is already visible then the current offset will be returned.\n   * If the current offset is too great or small, it will be adjusted just enough to ensure the specified index is visible.\n   *\n   * @param align Desired alignment within container; one of \"auto\" (default), \"start\", or \"end\"\n   * @param containerSize Size (width or height) of the container viewport\n   * @param currentOffset Container's current (x or y) offset\n   * @param totalSize Total size (width or height) of all cells\n   * @return Offset to use to ensure the specified cell is visible\n   */\n  getUpdatedOffsetForIndex({\n    align = \"auto\",\n    containerSize,\n    currentOffset,\n    targetIndex\n  }: GetUpdatedOffsetForIndex): number {\n    if (containerSize <= 0) {\n      return 0;\n    }\n\n    const datum = this.getSizeAndPositionOfCell(targetIndex);\n    const maxOffset = datum.offset;\n    const minOffset = maxOffset - containerSize + datum.size;\n\n    let idealOffset: number;\n\n    switch (align) {\n      case \"start\":\n        idealOffset = maxOffset;\n        break;\n      case \"end\":\n        idealOffset = minOffset;\n        break;\n      case \"center\":\n        idealOffset = maxOffset - (containerSize - datum.size) / 2;\n        break;\n      default:\n        // A cell that doesn't fit within the container is aligned to its start, so that its start is visible (#1264)\n        idealOffset =\n          datum.size >= containerSize\n            ? maxOffset\n            : Math.max(minOffset, Math.min(maxOffset, currentOffset));\n        break;\n    }\n\n    const totalSize = this.getTotalSize();\n\n    return Math.max(0, Math.min(totalSize - containerSize, idealOffset));\n  }\n\n  getVisibleCellRange(params: GetVisibleCellRangeParams): VisibleCellRange {\n    const { containerSize } = params;\n    let { offset } = params;\n\n    const totalSize = this.getTotalSize();\n\n    if (totalSize === 0) {\n      return {};\n    }\n\n    const maxOffset = offset + containerSize;\n    const start = this._findNearestCell(offset);\n\n    const datum = this.getSizeAndPositionOfCell(start);\n    offset = datum.offset + datum.size;\n\n    let stop = start;\n\n    while (offset < maxOffset && stop < this._cellCount - 1) {\n      stop++;\n\n      offset += this.getSizeAndPositionOfCell(stop).size;\n    }\n\n    return {\n      start,\n      stop\n    };\n  }\n\n  /**\n   * Clear all cached values for cells after the specified index.\n   * This method should be called for any cell that has changed its size.\n   * It will not immediately perform any calculations; they'll be performed the next time getSizeAndPositionOfCell() is called.\n   */\n  resetCell(index: number): void {\n    this._lastMeasuredIndex = Math.min(this._lastMeasuredIndex, index - 1);\n  }\n\n  _binarySearch(high: number, low: number, offset: number): number {\n    while (low <= high) {\n      const middle = low + Math.floor((high - low) / 2);\n      const currentOffset = this.getSizeAndPositionOfCell(middle).offset;\n\n      if (currentOffset === offset) {\n        return middle;\n      } else if (currentOffset < offset) {\n        low = middle + 1;\n      } else if (currentOffset > offset) {\n        high = middle - 1;\n      }\n    }\n\n    if (low > 0) {\n      return low - 1;\n    } else {\n      return 0;\n    }\n  }\n\n  _exponentialSearch(index: number, offset: number): number {\n    let interval = 1;\n\n    while (\n      index < this._cellCount &&\n      this.getSizeAndPositionOfCell(index).offset < offset\n    ) {\n      index += interval;\n      interval *= 2;\n    }\n\n    return this._binarySearch(\n      Math.min(index, this._cellCount - 1),\n      Math.floor(index / 2),\n      offset\n    );\n  }\n\n  /**\n   * Searches for the cell (index) nearest the specified offset.\n   *\n   * If no exact match is found the next lowest cell index will be returned.\n   * This allows partially visible cells (with offsets just before/above the fold) to be visible.\n   */\n  _findNearestCell(offset: number): number {\n    if (isNaN(offset)) {\n      throw Error(`Invalid offset ${offset} specified`);\n    }\n\n    // Our search algorithms find the nearest match at or below the specified offset.\n    // So make sure the offset is at least 0 or no match will be found.\n    offset = Math.max(0, offset);\n\n    const lastMeasuredCellSizeAndPosition =\n      this.getSizeAndPositionOfLastMeasuredCell();\n    const lastMeasuredIndex = Math.max(0, this._lastMeasuredIndex);\n\n    if (lastMeasuredCellSizeAndPosition.offset >= offset) {\n      // If we've already measured cells within this range just use a binary search as it's faster.\n      return this._binarySearch(lastMeasuredIndex, 0, offset);\n    } else {\n      // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n      // The exponential search avoids pre-computing sizes for the full set of cells as a binary search would.\n      // The overall complexity for this approach is O(log n).\n      return this._exponentialSearch(lastMeasuredIndex, offset);\n    }\n  }\n}\n","// The largest size (in pixels) of the scrollable content; beyond it, scroll offsets are scaled (see ScalingCellSizeAndPositionManager).\n// Modern browsers support at least this size: Chromium and WebKit support taller elements, and Firefox about 17.9M px.\n// (Version 9 used a much smaller 1.5M px limit, required by Internet Explorer, in every browser other than Chrome;\n// React 18+ doesn't support Internet Explorer.)\nconst MAX_ELEMENT_SIZE = 1.67771e7;\n\nexport const getMaxElementSize = (): number => MAX_ELEMENT_SIZE;\n","import type { Alignment, CellSizeGetter, VisibleCellRange } from \"../types\";\n\nimport {\n  CellSizeAndPositionManager,\n  type SizeAndPositionData\n} from \"./CellSizeAndPositionManager\";\nimport { getMaxElementSize } from \"./maxElementSize\";\n\ntype ContainerSizeAndOffset = {\n  containerSize: number;\n  offset: number;\n};\n\n/**\n * Browsers have scroll offset limitations (eg Chrome stops scrolling at ~33.5M pixels where as Edge tops out at ~1.5M pixels).\n * After a certain position, the browser won't allow the user to scroll further (even via JavaScript scroll offset adjustments).\n * This util picks a lower ceiling for max size and artificially adjusts positions within to make it transparent for users.\n */\n\ntype Params = {\n  maxScrollSize?: number;\n  cellCount: number;\n  cellSizeGetter: CellSizeGetter;\n  estimatedCellSize: number;\n};\n\n/**\n * Extends CellSizeAndPositionManager and adds scaling behavior for lists that are too large to fit within a browser's native limits.\n */\nexport class ScalingCellSizeAndPositionManager {\n  _cellSizeAndPositionManager: CellSizeAndPositionManager;\n  _maxScrollSize: number;\n\n  constructor({ maxScrollSize = getMaxElementSize(), ...params }: Params) {\n    // Favor composition over inheritance to simplify IE10 support\n    this._cellSizeAndPositionManager = new CellSizeAndPositionManager(params);\n    this._maxScrollSize = maxScrollSize;\n  }\n\n  areOffsetsAdjusted(): boolean {\n    return (\n      this._cellSizeAndPositionManager.getTotalSize() > this._maxScrollSize\n    );\n  }\n\n  configure(params: {\n    cellCount: number;\n    estimatedCellSize: number;\n    cellSizeGetter: CellSizeGetter;\n  }): void {\n    this._cellSizeAndPositionManager.configure(params);\n  }\n\n  getCellCount(): number {\n    return this._cellSizeAndPositionManager.getCellCount();\n  }\n\n  getEstimatedCellSize(): number {\n    return this._cellSizeAndPositionManager.getEstimatedCellSize();\n  }\n\n  getLastMeasuredIndex(): number {\n    return this._cellSizeAndPositionManager.getLastMeasuredIndex();\n  }\n\n  /**\n   * Number of pixels a cell at the given position (offset) should be shifted in order to fit within the scaled container.\n   * The offset passed to this function is scaled (safe) as well.\n   */\n  getOffsetAdjustment({\n    containerSize,\n    offset // safe\n  }: ContainerSizeAndOffset): number {\n    const totalSize = this._cellSizeAndPositionManager.getTotalSize();\n    const safeTotalSize = this.getTotalSize();\n    const offsetPercentage = this._getOffsetPercentage({\n      containerSize,\n      offset,\n      totalSize: safeTotalSize\n    });\n\n    return Math.round(offsetPercentage * (safeTotalSize - totalSize));\n  }\n\n  getSizeAndPositionOfCell(index: number): SizeAndPositionData {\n    return this._cellSizeAndPositionManager.getSizeAndPositionOfCell(index);\n  }\n\n  getSizeAndPositionOfLastMeasuredCell(): SizeAndPositionData {\n    return this._cellSizeAndPositionManager.getSizeAndPositionOfLastMeasuredCell();\n  }\n\n  /** See CellSizeAndPositionManager#getTotalSize */\n  getTotalSize(): number {\n    return Math.min(\n      this._maxScrollSize,\n      this._cellSizeAndPositionManager.getTotalSize()\n    );\n  }\n\n  /** See CellSizeAndPositionManager#getUpdatedOffsetForIndex */\n  getUpdatedOffsetForIndex({\n    align = \"auto\",\n    containerSize,\n    currentOffset, // safe\n    targetIndex\n  }: {\n    align?: Alignment;\n    containerSize: number;\n    currentOffset: number;\n    targetIndex: number;\n  }): number {\n    currentOffset = this._safeOffsetToOffset({\n      containerSize,\n      offset: currentOffset\n    });\n\n    const offset = this._cellSizeAndPositionManager.getUpdatedOffsetForIndex({\n      align,\n      containerSize,\n      currentOffset,\n      targetIndex\n    });\n\n    return this._offsetToSafeOffset({\n      containerSize,\n      offset\n    });\n  }\n\n  /** See CellSizeAndPositionManager#getVisibleCellRange */\n  getVisibleCellRange({\n    containerSize,\n    offset // safe\n  }: ContainerSizeAndOffset): VisibleCellRange {\n    offset = this._safeOffsetToOffset({\n      containerSize,\n      offset\n    });\n\n    return this._cellSizeAndPositionManager.getVisibleCellRange({\n      containerSize,\n      offset\n    });\n  }\n\n  resetCell(index: number): void {\n    this._cellSizeAndPositionManager.resetCell(index);\n  }\n\n  _getOffsetPercentage({\n    containerSize,\n    offset, // safe\n    totalSize\n  }: {\n    containerSize: number;\n    offset: number;\n    totalSize: number;\n  }): number {\n    return totalSize <= containerSize\n      ? 0\n      : offset / (totalSize - containerSize);\n  }\n\n  _offsetToSafeOffset({\n    containerSize,\n    offset // unsafe\n  }: ContainerSizeAndOffset): number {\n    const totalSize = this._cellSizeAndPositionManager.getTotalSize();\n    const safeTotalSize = this.getTotalSize();\n\n    if (totalSize === safeTotalSize) {\n      return offset;\n    } else {\n      const offsetPercentage = this._getOffsetPercentage({\n        containerSize,\n        offset,\n        totalSize\n      });\n\n      return Math.round(offsetPercentage * (safeTotalSize - containerSize));\n    }\n  }\n\n  _safeOffsetToOffset({\n    containerSize,\n    offset // safe\n  }: ContainerSizeAndOffset): number {\n    const totalSize = this._cellSizeAndPositionManager.getTotalSize();\n    const safeTotalSize = this.getTotalSize();\n\n    if (totalSize === safeTotalSize) {\n      return offset;\n    } else {\n      const offsetPercentage = this._getOffsetPercentage({\n        containerSize,\n        offset,\n        totalSize: safeTotalSize\n      });\n\n      return Math.round(offsetPercentage * (totalSize - containerSize));\n    }\n  }\n}\n","import type { ScalingCellSizeAndPositionManager } from \"./ScalingCellSizeAndPositionManager\";\n\n/**\n * Helper function that ensures that the scroll offset isn't past the last column/row of cells\n * after the size of the Grid (or its number of columns/rows) has decreased.\n */\n\ntype Params = {\n  // Manages size and position metadata of cells\n  cellSizeAndPositionManager: Pick<\n    ScalingCellSizeAndPositionManager,\n    \"getCellCount\" | \"getTotalSize\"\n  >;\n\n  // Previous number of rows or columns\n  previousCellsCount: number;\n\n  // Previous width or height of the virtualized container\n  previousSize: number;\n\n  // Current scrollLeft or scrollTop\n  scrollOffset: number;\n\n  // Width or height of the virtualized container\n  size: number;\n\n  // Callback to invoke with the index of the last cell\n  updateScrollIndexCallback: (index: number) => void;\n};\n\nexport function updateScrollIndexHelper({\n  cellSizeAndPositionManager,\n  previousCellsCount,\n  previousSize,\n  scrollOffset,\n  size,\n  updateScrollIndexCallback\n}: Params) {\n  const cellCount = cellSizeAndPositionManager.getCellCount();\n\n  // If the size or number of children have decreased,\n  // make sure we aren't scrolled too far past the current content.\n  if (\n    cellCount > 0 &&\n    (size < previousSize || cellCount < previousCellsCount)\n  ) {\n    // We need to ensure that the current scroll offset is still within the collection's range.\n    // To do this, we don't need to measure everything; CellMeasurer would perform poorly.\n    // Just check to make sure we're still okay.\n    // Only adjust the scroll position if we've scrolled below the last set of rows.\n    if (scrollOffset > cellSizeAndPositionManager.getTotalSize() - size) {\n      updateScrollIndexCallback(cellCount - 1);\n    }\n  }\n}\n","import clsx from \"clsx\";\nimport {\n  forwardRef,\n  memo,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useInsertionEffect,\n  useReducer,\n  useState,\n  useSyncExternalStore,\n  type CSSProperties,\n  type Dispatch,\n  type MutableRefObject,\n  type ReactNode,\n  type UIEvent\n} from \"react\";\nimport { createCallbackMemoizer } from \"../../utils/createCallbackMemoizer\";\nimport { getUpdatedOffsetForIndex } from \"../../utils/getUpdatedOffsetForIndex\";\nimport {\n  cancelAnimationTimeout,\n  requestAnimationTimeout,\n  type AnimationTimeoutId\n} from \"../../utils/requestAnimationTimeout\";\nimport { useIsomorphicLayoutEffect } from \"../../utils/useIsomorphicLayoutEffect\";\nimport type {\n  ScrollElementLinkSource,\n  ScrollElementLinkTarget,\n  ScrollElementViewport\n} from \"../../utils/scrollElement/types\";\nimport { useMissingHeightWarning } from \"../../utils/scrollElement/useMissingHeightWarning\";\nimport { useScrollElementLink } from \"../../utils/scrollElement/useScrollElementLink\";\nimport { defaultGridProps } from \"./defaultGridProps\";\nimport {\n  SCROLL_DIRECTION_BACKWARD,\n  SCROLL_DIRECTION_FORWARD\n} from \"./defaultOverscanIndicesGetter\";\nimport type {\n  Alignment,\n  CellCache,\n  CellSize,\n  CellSizeGetter,\n  GridImperativeAPI,\n  GridProps,\n  RenderedSection,\n  Scroll,\n  ScrollbarPresenceChange,\n  StyleCache\n} from \"./types\";\nimport { ScalingCellSizeAndPositionManager } from \"./utils/ScalingCellSizeAndPositionManager\";\nimport { updateScrollIndexHelper } from \"./utils/updateScrollIndexHelper\";\n\n/**\n * Controls whether the Grid updates the DOM element's scrollLeft/scrollTop based on the current state or just observes it.\n * This prevents Grid from interrupting mouse-wheel animations (see issue #2).\n */\nconst SCROLL_POSITION_CHANGE_REASONS = {\n  OBSERVED: \"observed\",\n  REQUESTED: \"requested\"\n} as const;\n\ntype ScrollDirection = -1 | 1;\n\ntype ScrollState = {\n  isScrolling: boolean;\n  scrollDirectionHorizontal: ScrollDirection;\n  scrollDirectionVertical: ScrollDirection;\n  scrollLeft: number;\n  scrollTop: number;\n  scrollPositionChangeReason: \"observed\" | \"requested\" | null;\n};\n\nconst INITIAL_SCROLL_STATE: ScrollState = {\n  isScrolling: false,\n  scrollDirectionHorizontal: SCROLL_DIRECTION_FORWARD,\n  scrollDirectionVertical: SCROLL_DIRECTION_FORWARD,\n  scrollLeft: 0,\n  scrollTop: 0,\n  scrollPositionChangeReason: null\n};\n\n// Props read by the imperative methods.\n// They are updated in an insertion effect, so they are current when the methods are called during the commit phase\n// (e.g. by a CellMeasurer cell that mounts before the Grid's own layout effects run).\ntype LatestValues = {\n  columnCount: number;\n  height: number;\n  onScroll: (params: Scroll) => void;\n  rowCount: number;\n  scrollbarSize: number;\n  scrollbarSizeMeasured: boolean;\n  scrollingResetTimeInterval: number;\n  width: number;\n};\n\n// The props that the size managers (and the style/cell caches) were last updated for.\n// This is a render-time cache: it is updated while rendering, alongside the managers it describes,\n// so it is always consistent with them (even if a render is repeated or discarded).\ntype SizeInputs = {\n  columnCount: number;\n  columnSizeGetter: CellSizeGetter;\n  columnWidth: CellSize;\n  estimatedColumnSize: number;\n  estimatedRowSize: number;\n  rowCount: number;\n  rowHeight: CellSize;\n  rowSizeGetter: CellSizeGetter;\n};\n\n// Range of cells (including overscan) rendered by the most recent render; used to retain their cached styles\ntype RenderedRange = {\n  columnStartIndex: number;\n  columnStopIndex: number;\n  rowStartIndex: number;\n  rowStopIndex: number;\n};\n\n// Values of the most recently committed render, compared by the layout effect to detect changes\n// (the equivalent of the \"prevProps\"/\"prevState\" of the 9.x componentDidUpdate).\ntype CommittedValues = {\n  columnCount: number;\n  columnWidth: CellSize;\n  height: number;\n  rowCount: number;\n  rowHeight: CellSize;\n  scrollLeft: number;\n  scrollTop: number;\n  width: number;\n};\n\n// The viewport of the scroll element the Grid is linked to (its scrollElement prop; see useScrollElementLink),\n// and the direction its offset last moved in (for overscanning).\n// While linked, the Grid renders at its full height and is scrolled vertically by the scroll element.\ntype LinkState = {\n  direction: ScrollDirection;\n  viewport: ScrollElementViewport;\n};\n\ntype GridLink = LinkState & {\n  source: ScrollElementLinkSource;\n};\n\n// Mutable, per-instance values (the equivalent of the instance fields of the 9.x class component).\n// Except for the render-time caches (see below), they are only modified by the imperative methods, event handlers and effects.\ntype GridInternals = {\n  // Render-time caches (see SizeInputs); styles and (while scrolling) cells are cached by `${rowIndex}-${columnIndex}`\n  cellCache: CellCache;\n  cellCacheForceUpdateCount: number;\n  cellCacheProps: GridProps | null;\n  columnSizeAndPositionManager: ScalingCellSizeAndPositionManager;\n  renderedRange: RenderedRange | null;\n  rowSizeAndPositionManager: ScalingCellSizeAndPositionManager;\n  sizeInputs: SizeInputs;\n  styleCache: StyleCache;\n\n  committed: CommittedValues | null;\n  deferredInvalidateColumnIndex: number | null;\n  deferredInvalidateRowIndex: number | null;\n  disablePointerEventsTimeoutId: AnimationTimeoutId | null;\n  element: HTMLDivElement | null;\n  latest: LatestValues;\n\n  // The scroll element the Grid is linked to (if any); updated by the link target methods (during commit or event handlers)\n  link: GridLink | null;\n\n  onGridRenderedMemoizer: ReturnType<typeof createCallbackMemoizer>;\n  onScrollMemoizer: ReturnType<typeof createCallbackMemoizer>;\n  scrollbarPresence: { horizontal: number; vertical: number };\n\n  // The most recently requested scroll state (including updates that have not been rendered yet)\n  scrollState: ScrollState;\n  // Dispatches scroll state updates (the setter of the scrollState state); set once the Grid has been committed\n  scrollStateDispatch: Dispatch<ScrollState> | null;\n\n  // The scroll offsets rendered (as a shift of the inner container) during server rendering and hydration\n  // still have to be applied to the scrolling element (see the layout effect)\n  scrollOffsetsPendingHydration: boolean;\n};\n\ntype GridInstance = {\n  handle: GridImperativeAPI;\n  internals: GridInternals;\n  invokeOnScrollMemoizer: (\n    scrollLeft: number,\n    scrollTop: number,\n    totalColumnsWidth: number,\n    totalRowsHeight: number\n  ) => void;\n  onScroll: (event: UIEvent<HTMLDivElement>) => void;\n  setScrollState: (update: Partial<ScrollState>) => void;\n  updateScrollLeftForColumn: (\n    alignment: Alignment,\n    columnIndex: number\n  ) => void;\n  updateScrollTopForRow: (alignment: Alignment, rowIndex: number) => void;\n  linkTarget: ScrollElementLinkTarget;\n};\n\nconst increment = (value: number) => value + 1;\n\nconst subscribeToNothing = () => () => {};\n\n// The scrollbar size can't be measured during server rendering (or hydration)\nconst getServerScrollbarSize = () => undefined;\n\n// Whether the Grid is rendered on the client (true) or is being server-rendered or hydrated (false)\nconst getClientRendered = () => true;\nconst getServerRendered = () => false;\n\nfunction wrapSizeGetter(value: CellSize): CellSizeGetter {\n  return typeof value === \"function\" ? value : () => value;\n}\n\nfunction isNumericSizeChange(prevSize: CellSize, nextSize: CellSize) {\n  // Don't compare cell sizes if they are functions because inline functions would cause infinite loops.\n  // In that event users should use the manual recompute methods to inform of changes.\n  return (\n    (typeof prevSize === \"number\" || typeof nextSize === \"number\") &&\n    prevSize !== nextSize\n  );\n}\n\nfunction createGridInstance(\n  initialProps: Pick<\n    GridProps,\n    | \"columnCount\"\n    | \"columnWidth\"\n    | \"estimatedColumnSize\"\n    | \"estimatedRowSize\"\n    | \"initialScrollLeft\"\n    | \"initialScrollTop\"\n    | \"onScroll\"\n    | \"rowCount\"\n    | \"rowHeight\"\n    | \"scrollingResetTimeInterval\"\n    | \"width\"\n  > &\n    Required<\n      Pick<\n        GridProps,\n        | \"estimatedColumnSize\"\n        | \"estimatedRowSize\"\n        | \"onScroll\"\n        | \"scrollingResetTimeInterval\"\n      >\n    > & {\n      // The height of the Grid (or, for a Grid with a scrollElement, of the scroll element's viewport)\n      height: number;\n    },\n  setLinkState: Dispatch<LinkState | null>,\n  forceUpdate: () => void\n): GridInstance {\n  const {\n    columnCount,\n    columnWidth,\n    estimatedColumnSize,\n    estimatedRowSize,\n    rowCount,\n    rowHeight\n  } = initialProps;\n\n  const columnSizeGetter = wrapSizeGetter(columnWidth);\n  const rowSizeGetter = wrapSizeGetter(rowHeight);\n\n  const internals: GridInternals = {\n    cellCache: {},\n    cellCacheForceUpdateCount: 0,\n    cellCacheProps: null,\n    columnSizeAndPositionManager: new ScalingCellSizeAndPositionManager({\n      cellCount: columnCount,\n      cellSizeGetter: columnSizeGetter,\n      estimatedCellSize:\n        typeof columnWidth === \"number\" ? columnWidth : estimatedColumnSize\n    }),\n    renderedRange: null,\n    rowSizeAndPositionManager: new ScalingCellSizeAndPositionManager({\n      cellCount: rowCount,\n      cellSizeGetter: rowSizeGetter,\n      estimatedCellSize:\n        typeof rowHeight === \"number\" ? rowHeight : estimatedRowSize\n    }),\n    sizeInputs: {\n      columnCount,\n      columnSizeGetter,\n      columnWidth,\n      estimatedColumnSize,\n      estimatedRowSize,\n      rowCount,\n      rowHeight,\n      rowSizeGetter\n    },\n    styleCache: {},\n\n    committed: null,\n    deferredInvalidateColumnIndex: null,\n    deferredInvalidateRowIndex: null,\n    disablePointerEventsTimeoutId: null,\n    element: null,\n    latest: {\n      columnCount,\n      height: initialProps.height,\n      onScroll: initialProps.onScroll,\n      rowCount,\n      scrollbarSize: 0,\n      scrollbarSizeMeasured: false,\n      scrollingResetTimeInterval: initialProps.scrollingResetTimeInterval,\n      width: initialProps.width\n    },\n    link: null,\n    // Invokes onSectionRendered callback only when start/stop row or column indices change\n    onGridRenderedMemoizer: createCallbackMemoizer(),\n    onScrollMemoizer: createCallbackMemoizer(false),\n    scrollbarPresence: { horizontal: 0, vertical: 0 },\n    scrollState: INITIAL_SCROLL_STATE,\n    scrollStateDispatch: null,\n    scrollOffsetsPendingHydration: false\n  };\n\n  // The initial scroll offsets (e.g. for server rendering) are clamped to the scrollable range,\n  // using the estimated sizes of the cells that haven't been measured yet.\n  // (They are applied to the scrolling element when the Grid mounts; see the layout effect.)\n  const { initialScrollLeft = 0, initialScrollTop = 0 } = initialProps;\n  internals.scrollState = {\n    ...INITIAL_SCROLL_STATE,\n    scrollLeft: Math.max(\n      0,\n      Math.min(\n        initialScrollLeft,\n        internals.columnSizeAndPositionManager.getTotalSize() -\n          initialProps.width\n      )\n    ),\n    scrollTop: Math.max(\n      0,\n      Math.min(\n        initialScrollTop,\n        internals.rowSizeAndPositionManager.getTotalSize() - initialProps.height\n      )\n    )\n  };\n\n  const setScrollState = (update: Partial<ScrollState>) => {\n    const prevState = internals.scrollState;\n    let changed = false;\n    for (const key in update) {\n      if (\n        update[key as keyof ScrollState] !== prevState[key as keyof ScrollState]\n      ) {\n        changed = true;\n        break;\n      }\n    }\n    if (changed) {\n      const nextState = { ...prevState, ...update };\n      internals.scrollState = nextState;\n      internals.scrollStateDispatch?.(nextState);\n    }\n  };\n\n  const getCalculatedScrollLeft = (\n    alignment: Alignment,\n    scrollToColumn: number,\n    currentScrollLeft: number\n  ): number => {\n    const { columnCount, height, scrollbarSize, scrollbarSizeMeasured, width } =\n      internals.latest;\n\n    if (columnCount > 0) {\n      const finalColumn = columnCount - 1;\n      const targetIndex =\n        scrollToColumn < 0\n          ? finalColumn\n          : Math.min(finalColumn, scrollToColumn);\n      const totalRowsHeight =\n        internals.rowSizeAndPositionManager.getTotalSize();\n      const scrollBarSize =\n        scrollbarSizeMeasured && totalRowsHeight > height ? scrollbarSize : 0;\n\n      return internals.columnSizeAndPositionManager.getUpdatedOffsetForIndex({\n        align: alignment,\n        containerSize: width - scrollBarSize,\n        currentOffset: currentScrollLeft,\n        targetIndex\n      });\n    }\n    return 0;\n  };\n\n  const getCalculatedScrollTop = (\n    alignment: Alignment,\n    scrollToRow: number,\n    currentScrollTop: number\n  ): number => {\n    const { height, rowCount, scrollbarSize, scrollbarSizeMeasured, width } =\n      internals.latest;\n\n    if (rowCount > 0) {\n      const finalRow = rowCount - 1;\n      const targetIndex =\n        scrollToRow < 0 ? finalRow : Math.min(finalRow, scrollToRow);\n      const totalColumnsWidth =\n        internals.columnSizeAndPositionManager.getTotalSize();\n      const scrollBarSize =\n        scrollbarSizeMeasured && totalColumnsWidth > width ? scrollbarSize : 0;\n      const containerSize = height - scrollBarSize;\n      const rowSizeAndPositionManager = internals.rowSizeAndPositionManager;\n\n      // The viewport of a linked Grid (e.g. the window) may extend beyond the Grid itself (e.g. above or below it),\n      // so its offset may be outside of the Grid's scrollable range (e.g. negative).\n      // The offset isn't limited to the end of the Grid (e.g. so that the last rows can be scrolled to the top of the\n      // viewport when there is content below the Grid); the scroll element limits it to its own scrollable range (#1895).\n      // With \"auto\" alignment, a row that is already visible within the viewport is not scrolled to.\n      if (\n        internals.link !== null &&\n        containerSize > 0 &&\n        !rowSizeAndPositionManager.areOffsetsAdjusted()\n      ) {\n        const { offset, size } =\n          rowSizeAndPositionManager.getSizeAndPositionOfCell(targetIndex);\n        if (\n          alignment === \"auto\" &&\n          offset >= currentScrollTop &&\n          offset + size <= currentScrollTop + containerSize\n        ) {\n          return currentScrollTop;\n        }\n\n        return getUpdatedOffsetForIndex({\n          align: alignment,\n          cellOffset: offset,\n          cellSize: size,\n          containerSize,\n          currentOffset: currentScrollTop\n        });\n      }\n\n      return rowSizeAndPositionManager.getUpdatedOffsetForIndex({\n        align: alignment,\n        containerSize,\n        currentOffset: currentScrollTop,\n        targetIndex\n      });\n    }\n    return 0;\n  };\n\n  // The current vertical scroll offset: the Grid's own, or (if linked) the offset of the scroll element's viewport\n  // (which may be negative; see ScrollElementViewport)\n  const getCurrentScrollTop = () =>\n    internals.link !== null\n      ? internals.link.viewport.scrollTop\n      : internals.scrollState.scrollTop;\n\n  // Scrolls a linked Grid (i.e. its scroll element)\n  const scrollLinkTo = (link: GridLink, scrollTop: number) => {\n    link.source.scrollTo(scrollTop);\n  };\n\n  // Scrolls to the specified column (or to the last column, if the index is negative)\n  const updateScrollLeftForColumn = (\n    alignment: Alignment,\n    columnIndex: number\n  ) => {\n    const { scrollLeft } = internals.scrollState;\n    const calculatedScrollLeft = getCalculatedScrollLeft(\n      alignment,\n      columnIndex,\n      scrollLeft\n    );\n\n    if (calculatedScrollLeft >= 0 && calculatedScrollLeft !== scrollLeft) {\n      setScrollState({\n        scrollDirectionHorizontal:\n          calculatedScrollLeft > scrollLeft\n            ? SCROLL_DIRECTION_FORWARD\n            : SCROLL_DIRECTION_BACKWARD,\n        scrollLeft: calculatedScrollLeft,\n        scrollPositionChangeReason: SCROLL_POSITION_CHANGE_REASONS.REQUESTED\n      });\n    }\n  };\n\n  // Scrolls to the specified row (or to the last row, if the index is negative)\n  const updateScrollTopForRow = (alignment: Alignment, rowIndex: number) => {\n    const scrollTop = getCurrentScrollTop();\n    const calculatedScrollTop = getCalculatedScrollTop(\n      alignment,\n      rowIndex,\n      scrollTop\n    );\n\n    const link = internals.link;\n    if (link !== null) {\n      if (calculatedScrollTop !== scrollTop) {\n        scrollLinkTo(link, calculatedScrollTop);\n      }\n      return;\n    }\n\n    if (calculatedScrollTop >= 0 && calculatedScrollTop !== scrollTop) {\n      setScrollState({\n        scrollDirectionVertical:\n          calculatedScrollTop > scrollTop\n            ? SCROLL_DIRECTION_FORWARD\n            : SCROLL_DIRECTION_BACKWARD,\n        scrollPositionChangeReason: SCROLL_POSITION_CHANGE_REASONS.REQUESTED,\n        scrollTop: calculatedScrollTop\n      });\n    }\n  };\n\n  const invokeOnScrollMemoizer = (\n    scrollLeft: number,\n    scrollTop: number,\n    totalColumnsWidth: number,\n    totalRowsHeight: number\n  ) => {\n    internals.onScrollMemoizer({\n      callback: ({ scrollLeft, scrollTop }) => {\n        const { height, onScroll, width } = internals.latest;\n\n        onScroll({\n          clientHeight: height,\n          clientWidth: width,\n          scrollHeight: totalRowsHeight,\n          scrollLeft,\n          scrollTop,\n          scrollWidth: totalColumnsWidth\n        });\n      },\n      indices: {\n        scrollLeft,\n        scrollTop\n      }\n    });\n  };\n\n  const debounceScrollEndedCallback = () => {\n    internals.disablePointerEventsTimeoutId = null;\n    // isScrolling is used to determine if we reset styleCache\n    setScrollState({ isScrolling: false });\n  };\n\n  /**\n   * Sets an :isScrolling flag for a small window of time.\n   * This flag is used to disable pointer events on the scrollable portion of the Grid.\n   * This prevents jerky/stuttery mouse-wheel scrolling.\n   */\n  const debounceScrollEnded = () => {\n    if (internals.disablePointerEventsTimeoutId) {\n      cancelAnimationTimeout(internals.disablePointerEventsTimeoutId);\n    }\n\n    internals.disablePointerEventsTimeoutId = requestAnimationTimeout(\n      debounceScrollEndedCallback,\n      internals.latest.scrollingResetTimeInterval\n    );\n  };\n\n  const handle: GridImperativeAPI = {\n    forceUpdate() {\n      forceUpdate();\n    },\n\n    getOffsetForCell({\n      alignment = \"auto\",\n      columnIndex = -1,\n      rowIndex = -1\n    } = {}) {\n      const { scrollLeft } = internals.scrollState;\n\n      return {\n        scrollLeft: getCalculatedScrollLeft(alignment, columnIndex, scrollLeft),\n        scrollTop: getCalculatedScrollTop(\n          alignment,\n          rowIndex,\n          getCurrentScrollTop()\n        )\n      };\n    },\n\n    getTotalRowsHeight() {\n      return internals.rowSizeAndPositionManager.getTotalSize();\n    },\n\n    getTotalColumnsWidth() {\n      return internals.columnSizeAndPositionManager.getTotalSize();\n    },\n\n    handleScrollEvent({\n      scrollLeft: scrollLeftParam = 0,\n      scrollTop: scrollTopParam = 0\n    }) {\n      // On iOS, we can arrive at negative offsets by swiping past the start.\n      // To prevent flicker here, we make playing in the negative offset zone cause nothing to happen.\n      if (scrollTopParam < 0) {\n        return;\n      }\n\n      // Prevent pointer events from interrupting a smooth scroll\n      debounceScrollEnded();\n\n      const { height, scrollbarSize, width } = internals.latest;\n      const link = internals.link;\n\n      // When this component is shrunk drastically, React dispatches a series of back-to-back scroll events,\n      // Gradually converging on a scrollTop that is within the bounds of the new, smaller height.\n      // This causes a series of rapid renders that is slow for long lists.\n      // We can avoid that by doing some simple bounds checking to ensure that scroll offsets never exceed their bounds.\n      const totalRowsHeight =\n        internals.rowSizeAndPositionManager.getTotalSize();\n      const totalColumnsWidth =\n        internals.columnSizeAndPositionManager.getTotalSize();\n      const scrollLeft = Math.min(\n        Math.max(0, totalColumnsWidth - width + scrollbarSize),\n        scrollLeftParam\n      );\n      const scrollTop = Math.min(\n        Math.max(0, totalRowsHeight - height + scrollbarSize),\n        scrollTopParam\n      );\n\n      // Certain devices (like Apple touchpad) rapid-fire duplicate events.\n      // Don't force a re-render if this is the case.\n      // The mouse may move faster then the animation frame does.\n      // Use requestAnimationFrame to avoid over-updating.\n      const prevState = internals.scrollState;\n      if (\n        prevState.scrollLeft !== scrollLeft ||\n        prevState.scrollTop !== scrollTop\n      ) {\n        // Track scrolling direction so we can more efficiently overscan rows to reduce empty space around the edges while scrolling.\n        // Don't change direction for an axis unless scroll offset has changed.\n        const scrollDirectionHorizontal =\n          scrollLeft !== prevState.scrollLeft\n            ? scrollLeft > prevState.scrollLeft\n              ? SCROLL_DIRECTION_FORWARD\n              : SCROLL_DIRECTION_BACKWARD\n            : prevState.scrollDirectionHorizontal;\n        const scrollDirectionVertical =\n          scrollTop !== prevState.scrollTop\n            ? scrollTop > prevState.scrollTop\n              ? SCROLL_DIRECTION_FORWARD\n              : SCROLL_DIRECTION_BACKWARD\n            : prevState.scrollDirectionVertical;\n\n        const update: Partial<ScrollState> = {\n          isScrolling: true,\n          scrollDirectionHorizontal,\n          scrollDirectionVertical,\n          scrollPositionChangeReason: SCROLL_POSITION_CHANGE_REASONS.OBSERVED\n        };\n\n        // A linked Grid is scrolled vertically by its scroll element (see setViewport), so the vertical offset is ignored.\n        if (link === null) {\n          update.scrollTop = scrollTop;\n        }\n        update.scrollLeft = scrollLeft;\n\n        setScrollState(update);\n      }\n\n      invokeOnScrollMemoizer(\n        scrollLeft,\n        link !== null ? Math.max(0, link.viewport.scrollTop) : scrollTop,\n        totalColumnsWidth,\n        totalRowsHeight\n      );\n    },\n\n    invalidateCellSizeAfterRender({ columnIndex, rowIndex }) {\n      internals.deferredInvalidateColumnIndex =\n        typeof internals.deferredInvalidateColumnIndex === \"number\"\n          ? Math.min(internals.deferredInvalidateColumnIndex, columnIndex)\n          : columnIndex;\n      internals.deferredInvalidateRowIndex =\n        typeof internals.deferredInvalidateRowIndex === \"number\"\n          ? Math.min(internals.deferredInvalidateRowIndex, rowIndex)\n          : rowIndex;\n    },\n\n    measureAllCells() {\n      const { columnCount, rowCount } = internals.latest;\n      if (columnCount > 0) {\n        internals.columnSizeAndPositionManager.getSizeAndPositionOfCell(\n          columnCount - 1\n        );\n      }\n      if (rowCount > 0) {\n        internals.rowSizeAndPositionManager.getSizeAndPositionOfCell(\n          rowCount - 1\n        );\n      }\n    },\n\n    recomputeGridSize({ columnIndex = 0, rowIndex = 0 } = {}) {\n      internals.columnSizeAndPositionManager.resetCell(columnIndex);\n      internals.rowSizeAndPositionManager.resetCell(rowIndex);\n\n      // Clear cell cache in case we are scrolling;\n      // Invalid row heights likely mean invalid cached content as well.\n      internals.styleCache = {};\n      internals.cellCache = {};\n\n      forceUpdate();\n    },\n\n    scrollToCell({ align = \"auto\", columnIndex, rowIndex }) {\n      const { columnCount, height, width } = internals.latest;\n\n      // This is a one-time scroll: the cell isn't kept in view afterwards (e.g. if cell sizes change).\n      // Nothing is scrolled if the size is 0, since no cells are rendered in that case.\n      if (height <= 0 || width <= 0) {\n        return;\n      }\n\n      // Don't adjust scroll offset for single-column grids (eg List, Table).\n      // This can cause a funky scroll offset because of the vertical scrollbar width.\n      if (columnCount > 1 && columnIndex !== undefined && columnIndex >= 0) {\n        updateScrollLeftForColumn(align, columnIndex);\n      }\n\n      if (rowIndex !== undefined && rowIndex >= 0) {\n        updateScrollTopForRow(align, rowIndex);\n      }\n    },\n\n    scrollToPosition({ scrollLeft, scrollTop }) {\n      const { height, scrollbarSize, width } = internals.latest;\n      const prevState = internals.scrollState;\n      const update: Partial<ScrollState> = {};\n\n      // Offsets are clamped the same way handleScrollEvent() clamps observed offsets,\n      // so that an offset reported by this Grid (e.g. via onScroll) is never changed by passing it back.\n      // (If the browser can't scroll quite as far, the offset is corrected after it has been applied; see the layout effect.)\n      const totalRowsHeight =\n        internals.rowSizeAndPositionManager.getTotalSize();\n      const totalColumnsWidth =\n        internals.columnSizeAndPositionManager.getTotalSize();\n\n      if (typeof scrollLeft === \"number\" && !isNaN(scrollLeft)) {\n        const clampedScrollLeft = Math.max(\n          0,\n          Math.min(scrollLeft, totalColumnsWidth - width + scrollbarSize)\n        );\n        if (clampedScrollLeft !== prevState.scrollLeft) {\n          update.scrollDirectionHorizontal =\n            clampedScrollLeft > prevState.scrollLeft\n              ? SCROLL_DIRECTION_FORWARD\n              : SCROLL_DIRECTION_BACKWARD;\n          update.scrollLeft = clampedScrollLeft;\n        }\n      }\n\n      const link = internals.link;\n      if (typeof scrollTop === \"number\" && !isNaN(scrollTop) && link !== null) {\n        // A linked Grid scrolls its scroll element instead.\n        // The current offset is clamped as well (it is reported that way by onScroll),\n        // so that passing back a reported offset doesn't scroll (e.g. while the Grid is below the top of the viewport).\n        const maxScrollTop = Math.max(0, totalRowsHeight - height);\n        const clampedScrollTop = Math.max(0, Math.min(scrollTop, maxScrollTop));\n        const currentScrollTop = Math.max(\n          0,\n          Math.min(link.viewport.scrollTop, maxScrollTop)\n        );\n        if (clampedScrollTop !== currentScrollTop) {\n          scrollLinkTo(link, clampedScrollTop);\n        }\n      } else if (typeof scrollTop === \"number\" && !isNaN(scrollTop)) {\n        const clampedScrollTop = Math.max(\n          0,\n          Math.min(scrollTop, totalRowsHeight - height + scrollbarSize)\n        );\n        if (clampedScrollTop !== prevState.scrollTop) {\n          update.scrollDirectionVertical =\n            clampedScrollTop > prevState.scrollTop\n              ? SCROLL_DIRECTION_FORWARD\n              : SCROLL_DIRECTION_BACKWARD;\n          update.scrollTop = clampedScrollTop;\n        }\n      }\n\n      // No-op (no state update or render) if the offsets haven't changed\n      if (update.scrollLeft !== undefined || update.scrollTop !== undefined) {\n        update.scrollPositionChangeReason =\n          SCROLL_POSITION_CHANGE_REASONS.REQUESTED;\n        setScrollState(update);\n      }\n    }\n  };\n\n  // Linked to the Grid's scroll element (if it has one) by useScrollElementLink\n  const linkTarget: ScrollElementLinkTarget = {\n    getElement() {\n      return internals.element;\n    },\n\n    link(source, viewport) {\n      if (source === null) {\n        if (internals.link !== null) {\n          internals.link = null;\n          setLinkState(null);\n        }\n        return;\n      }\n\n      const direction = internals.link?.direction ?? SCROLL_DIRECTION_FORWARD;\n      internals.link = { direction, source, viewport };\n      setLinkState({ direction, viewport });\n    },\n\n    setViewport(viewport) {\n      const link = internals.link;\n      if (link === null) {\n        return;\n      }\n\n      const prevViewport = link.viewport;\n      if (\n        prevViewport.height === viewport.height &&\n        prevViewport.isScrolling === viewport.isScrolling &&\n        prevViewport.scrollTop === viewport.scrollTop\n      ) {\n        return;\n      }\n\n      if (viewport.scrollTop !== prevViewport.scrollTop) {\n        // Track the scrolling direction (for overscanning)\n        link.direction =\n          viewport.scrollTop > prevViewport.scrollTop\n            ? SCROLL_DIRECTION_FORWARD\n            : SCROLL_DIRECTION_BACKWARD;\n      }\n\n      link.viewport = viewport;\n      setLinkState({ direction: link.direction, viewport });\n    }\n  };\n\n  const onScroll = (event: UIEvent<HTMLDivElement>) => {\n    // In certain edge-cases React dispatches an onScroll event with an invalid target.scrollLeft / target.scrollTop.\n    // This invalid event can be detected by comparing event.target to this component's scrollable DOM element.\n    // See issue #404 for more information.\n    if (event.target === internals.element) {\n      handle.handleScrollEvent(event.target as HTMLDivElement);\n    }\n  };\n\n  return {\n    handle,\n    internals,\n    linkTarget,\n    invokeOnScrollMemoizer,\n    onScroll,\n    setScrollState,\n    updateScrollLeftForColumn,\n    updateScrollTopForRow\n  };\n}\n\n/**\n * Updates the size managers (and invalidates the style and cell caches) after a size-related prop has changed.\n * This is the render-time part of the 9.x getDerivedStateFromProps.\n */\nfunction updateSizeInputs(internals: GridInternals, next: SizeInputs) {\n  const prev = internals.sizeInputs;\n\n  // Cached styles (and the cells rendered with them) are stale once cell sizes or counts change.\n  // Counts matter too: a size getter may return different values for an index after rows are added or removed (bug #16).\n  if (\n    next.columnWidth !== prev.columnWidth ||\n    next.rowHeight !== prev.rowHeight ||\n    next.columnCount !== prev.columnCount ||\n    next.rowCount !== prev.rowCount\n  ) {\n    internals.styleCache = {};\n    internals.cellCache = {};\n  }\n\n  internals.columnSizeAndPositionManager.configure({\n    cellCount: next.columnCount,\n    estimatedCellSize:\n      typeof next.columnWidth === \"number\"\n        ? next.columnWidth\n        : next.estimatedColumnSize,\n    cellSizeGetter: next.columnSizeGetter\n  });\n  internals.rowSizeAndPositionManager.configure({\n    cellCount: next.rowCount,\n    estimatedCellSize:\n      typeof next.rowHeight === \"number\"\n        ? next.rowHeight\n        : next.estimatedRowSize,\n    cellSizeGetter: next.rowSizeGetter\n  });\n\n  // Cells are (re)measured along an axis whose count (or numeric cell size) has changed;\n  // if either count was 0, along both axes.\n  // (Cells along one axis may have been measured while the other count was 0, e.g. the columns of a MultiGrid quadrant without rows;\n  // so they are also reset if the count stays 0. See #1351.)\n  const eitherCountWasZero = prev.columnCount === 0 || prev.rowCount === 0;\n  if (\n    eitherCountWasZero ||\n    prev.columnCount !== next.columnCount ||\n    isNumericSizeChange(prev.columnWidth, next.columnWidth)\n  ) {\n    internals.columnSizeAndPositionManager.resetCell(0);\n  }\n  if (\n    eitherCountWasZero ||\n    prev.rowCount !== next.rowCount ||\n    isNumericSizeChange(prev.rowHeight, next.rowHeight)\n  ) {\n    internals.rowSizeAndPositionManager.resetCell(0);\n  }\n\n  internals.sizeInputs = next;\n}\n\n// Shallowly compares props\nfunction areCellPropsEqual(prevProps: GridProps, nextProps: GridProps) {\n  if (prevProps === nextProps) {\n    return true;\n  }\n\n  const prev = prevProps as { [key: string]: unknown };\n  const next = nextProps as { [key: string]: unknown };\n  for (const key in prev) {\n    if (prev[key] !== next[key]) {\n      return false;\n    }\n  }\n  for (const key in next) {\n    if (!(key in prev)) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Drops the cached styles (and cells) of cells that were not rendered by the previous render.\n * This keeps the caches from growing too large, while avoiding unnecessary re-renders of the visible cells.\n */\nfunction resetStyleCache(internals: GridInternals, keepCells: boolean) {\n  const { cellCache, renderedRange, styleCache } = internals;\n\n  // Reset cell and style caches once scrolling stops.\n  // This makes Grid simpler to use (since cells commonly change).\n  // And it keeps the caches from growing too large.\n  // Performance is most sensitive when a user is scrolling.\n  // Don't clear visible cells from cellCache if isScrollingOptOut is specified (and the cells are still current).\n  // This keeps the cellCache to a resonable size.\n  const nextCellCache: CellCache = {};\n  const nextStyleCache: StyleCache = {};\n\n  // Copy over the visible cell styles so avoid unnecessary re-render.\n  if (renderedRange !== null) {\n    for (\n      let rowIndex = renderedRange.rowStartIndex;\n      rowIndex <= renderedRange.rowStopIndex;\n      rowIndex++\n    ) {\n      for (\n        let columnIndex = renderedRange.columnStartIndex;\n        columnIndex <= renderedRange.columnStopIndex;\n        columnIndex++\n      ) {\n        const key = `${rowIndex}-${columnIndex}`;\n        const style = styleCache[key];\n        if (style !== undefined) {\n          nextStyleCache[key] = style;\n        }\n\n        if (keepCells) {\n          const cell = cellCache[key];\n          if (cell !== undefined) {\n            nextCellCache[key] = cell;\n          }\n        }\n      }\n    }\n  }\n\n  internals.cellCache = nextCellCache;\n  internals.styleCache = nextStyleCache;\n}\n\n/**\n * Renders tabular data with virtualization along the vertical and horizontal axes.\n * Row heights and column widths must be known ahead of time and specified as properties.\n *\n * Scrolling is done through the imperative handle (`ref`): see `scrollToCell` and `scrollToPosition`.\n */\nexport const Grid = /* @__PURE__ */ memo(\n  /* @__PURE__ */ forwardRef<GridImperativeAPI, GridProps>(\n    function Grid(props, ref) {\n      // (The props object itself is needed as well, to detect prop changes for isScrollingOptOut; see below.)\n      const {\n        \"aria-label\": ariaLabel = defaultGridProps[\"aria-label\"],\n        \"aria-readonly\": ariaReadonly = defaultGridProps[\"aria-readonly\"],\n        autoContainerWidth = defaultGridProps.autoContainerWidth,\n        cellRangeRenderer = defaultGridProps.cellRangeRenderer,\n        cellRenderer,\n        className,\n        columnCount,\n        columnWidth,\n        containerProps,\n        containerRole = defaultGridProps.containerRole,\n        containerStyle = defaultGridProps.containerStyle,\n        deferredMeasurementCache,\n        elementRef,\n        estimatedColumnSize = defaultGridProps.estimatedColumnSize,\n        estimatedRowSize = defaultGridProps.estimatedRowSize,\n        getScrollbarSize = defaultGridProps.getScrollbarSize,\n        height: heightProp,\n        id,\n        initialScrollLeft,\n        initialScrollTop,\n        isScrollingOptOut = defaultGridProps.isScrollingOptOut,\n        noContentRenderer = defaultGridProps.noContentRenderer,\n        onScroll = defaultGridProps.onScroll,\n        onScrollbarPresenceChange = defaultGridProps.onScrollbarPresenceChange,\n        onSectionRendered = defaultGridProps.onSectionRendered,\n        overscanColumnCount = defaultGridProps.overscanColumnCount,\n        overscanIndicesGetter = defaultGridProps.overscanIndicesGetter,\n        overscanRowCount = defaultGridProps.overscanRowCount,\n        role = defaultGridProps.role,\n        rowCount,\n        rowHeight,\n        scrollElement,\n        scrollingResetTimeInterval = defaultGridProps.scrollingResetTimeInterval,\n        style = defaultGridProps.style,\n        tabIndex = defaultGridProps.tabIndex,\n        width\n      } = props;\n\n      const [linkState, setLinkState] = useState<LinkState | null>(null);\n      const [forceUpdateCount, forceUpdate] = useReducer(increment, 0);\n\n      // A Grid with a scrollElement is scrolled vertically by that element (e.g. the window) rather than scrolling itself:\n      // it renders at its full height, and renders the rows within the scroll element's viewport.\n      // (It may still scroll horizontally itself.)\n      // Until the scroll element has been measured (e.g. during server rendering), the height prop is used as the viewport height.\n      const linked = scrollElement !== undefined;\n      const height =\n        linkState !== null ? linkState.viewport.height : (heightProp ?? 0);\n\n      useMissingHeightWarning(\"Grid\", heightProp, scrollElement);\n\n      // The instance (and its stable imperative handle) is created once\n      const [\n        {\n          handle,\n          internals,\n          invokeOnScrollMemoizer,\n          onScroll: onScrollEvent,\n          setScrollState,\n          updateScrollLeftForColumn,\n          updateScrollTopForRow,\n          linkTarget\n        }\n      ] = useState(() =>\n        createGridInstance(\n          {\n            columnCount,\n            columnWidth,\n            estimatedColumnSize,\n            estimatedRowSize,\n            height,\n            initialScrollLeft,\n            // The vertical offset of a Grid with a scrollElement is determined by the scroll element\n            initialScrollTop: linked ? undefined : initialScrollTop,\n            onScroll,\n            rowCount,\n            rowHeight,\n            scrollingResetTimeInterval,\n            width\n          },\n          setLinkState,\n          forceUpdate\n        )\n      );\n\n      // (Initialized with the initial scroll offsets; see createGridInstance)\n      const [scrollState, setScrollStateDispatch] = useState<ScrollState>(\n        () => internals.scrollState\n      );\n\n      useImperativeHandle(ref, () => handle, [handle]);\n\n      useScrollElementLink(\n        scrollElement,\n        linkTarget,\n        scrollingResetTimeInterval\n      );\n\n      // If this component is server-rendered (or hydrated), the scrollbar size is measured after hydration.\n      const measuredScrollbarSize = useSyncExternalStore<number | undefined>(\n        subscribeToNothing,\n        getScrollbarSize,\n        getServerScrollbarSize\n      );\n      const scrollbarSizeMeasured = measuredScrollbarSize !== undefined;\n      const scrollbarSize = measuredScrollbarSize ?? 0;\n\n      const latest: LatestValues = {\n        columnCount,\n        height,\n        onScroll,\n        rowCount,\n        scrollbarSize,\n        scrollbarSizeMeasured,\n        scrollingResetTimeInterval,\n        width\n      };\n      useInsertionEffect(() => {\n        internals.latest = latest;\n        internals.scrollStateDispatch = setScrollStateDispatch;\n      });\n\n      // The browser can't apply a scroll offset before the page has been hydrated.\n      // So if the Grid is server-rendered (or hydrated) with initial scroll offsets,\n      // its inner container is shifted by those offsets instead (so that the rendered cells are visible),\n      // until the offsets have been applied to the scrolling element after hydration (see the layout effect).\n      const clientRendered = useSyncExternalStore(\n        subscribeToNothing,\n        getClientRendered,\n        getServerRendered\n      );\n      const [hydrationShift, setHydrationShift] = useState<{\n        left: number;\n        top: number;\n      } | null>(() =>\n        clientRendered ||\n        (internals.scrollState.scrollLeft === 0 &&\n          internals.scrollState.scrollTop === 0)\n          ? null\n          : {\n              left: internals.scrollState.scrollLeft,\n              top: internals.scrollState.scrollTop\n            }\n      );\n\n      const setScrollingContainerRef = useCallback(\n        (element: HTMLDivElement | null) => {\n          internals.element = element;\n\n          if (typeof elementRef === \"function\") {\n            elementRef(element);\n          } else if (elementRef) {\n            (elementRef as MutableRefObject<HTMLDivElement | null>).current =\n              element;\n          }\n        },\n        [elementRef, internals]\n      );\n\n      // Update cell metadata (and invalidate cached styles) if cell counts or sizes have changed\n      const sizeInputs = internals.sizeInputs;\n      if (\n        columnCount !== sizeInputs.columnCount ||\n        columnWidth !== sizeInputs.columnWidth ||\n        estimatedColumnSize !== sizeInputs.estimatedColumnSize ||\n        rowCount !== sizeInputs.rowCount ||\n        rowHeight !== sizeInputs.rowHeight ||\n        estimatedRowSize !== sizeInputs.estimatedRowSize\n      ) {\n        updateSizeInputs(internals, {\n          columnCount,\n          columnSizeGetter:\n            columnWidth === sizeInputs.columnWidth\n              ? sizeInputs.columnSizeGetter\n              : wrapSizeGetter(columnWidth),\n          columnWidth,\n          estimatedColumnSize,\n          estimatedRowSize,\n          rowCount,\n          rowHeight,\n          rowSizeGetter:\n            rowHeight === sizeInputs.rowHeight\n              ? sizeInputs.rowSizeGetter\n              : wrapSizeGetter(rowHeight)\n        });\n      }\n\n      const { columnSizeAndPositionManager, rowSizeAndPositionManager } =\n        internals;\n\n      const isScrolling =\n        scrollState.isScrolling ||\n        (linkState !== null && linkState.viewport.isScrolling);\n      const scrollLeft = scrollState.scrollLeft;\n      const scrollTop = linked\n        ? Math.max(0, linkState?.viewport.scrollTop ?? 0)\n        : scrollState.scrollTop;\n      const scrollDirectionHorizontal = scrollState.scrollDirectionHorizontal;\n      const scrollDirectionVertical =\n        linkState !== null\n          ? linkState.direction\n          : scrollState.scrollDirectionVertical;\n\n      // Reset the style cache (keeping the styles of the cells rendered last time) once scrolling has stopped.\n      // (For a linked Grid, this includes the scrolling of its scroll element.)\n      if (!isScrolling) {\n        // With isScrollingOptOut, cached cells are kept as well; but only if they are still current (bug #13):\n        // i.e. the props haven't changed (and forceUpdate() hasn't been called) since the cells were cached.\n        const keepCells =\n          isScrollingOptOut &&\n          internals.cellCacheForceUpdateCount === forceUpdateCount &&\n          internals.cellCacheProps !== null &&\n          areCellPropsEqual(internals.cellCacheProps, props);\n\n        resetStyleCache(internals, keepCells);\n\n        internals.cellCacheProps = props;\n        internals.cellCacheForceUpdateCount = forceUpdateCount;\n      }\n\n      let childrenToDisplay: ReactNode[] = [];\n      let renderedSection: Partial<RenderedSection> | null = null;\n\n      // Render only enough columns and rows to cover the visible area of the grid.\n      if (height > 0 && width > 0) {\n        const visibleColumnIndices =\n          columnSizeAndPositionManager.getVisibleCellRange({\n            containerSize: width,\n            offset: scrollLeft\n          });\n        const visibleRowIndices = rowSizeAndPositionManager.getVisibleCellRange(\n          {\n            containerSize: height,\n            offset: scrollTop\n          }\n        );\n\n        const horizontalOffsetAdjustment =\n          columnSizeAndPositionManager.getOffsetAdjustment({\n            containerSize: width,\n            offset: scrollLeft\n          });\n        const verticalOffsetAdjustment =\n          rowSizeAndPositionManager.getOffsetAdjustment({\n            containerSize: height,\n            offset: scrollTop\n          });\n\n        const overscanColumnIndices = overscanIndicesGetter({\n          direction: \"horizontal\",\n          cellCount: columnCount,\n          overscanCellsCount: overscanColumnCount,\n          scrollDirection: scrollDirectionHorizontal,\n          startIndex:\n            typeof visibleColumnIndices.start === \"number\"\n              ? visibleColumnIndices.start\n              : 0,\n          stopIndex:\n            typeof visibleColumnIndices.stop === \"number\"\n              ? visibleColumnIndices.stop\n              : -1\n        });\n\n        const overscanRowIndices = overscanIndicesGetter({\n          direction: \"vertical\",\n          cellCount: rowCount,\n          overscanCellsCount: overscanRowCount,\n          scrollDirection: scrollDirectionVertical,\n          startIndex:\n            typeof visibleRowIndices.start === \"number\"\n              ? visibleRowIndices.start\n              : 0,\n          stopIndex:\n            typeof visibleRowIndices.stop === \"number\"\n              ? visibleRowIndices.stop\n              : -1\n        });\n\n        let columnStartIndex = overscanColumnIndices.overscanStartIndex;\n        let columnStopIndex = overscanColumnIndices.overscanStopIndex;\n        let rowStartIndex = overscanRowIndices.overscanStartIndex;\n        let rowStopIndex = overscanRowIndices.overscanStopIndex;\n\n        // Advanced use-cases (eg CellMeasurer) require batched measurements to determine accurate sizes.\n        if (deferredMeasurementCache) {\n          // If rows have a dynamic height, scan the rows we are about to render.\n          // If any have not yet been measured, then we need to render all columns initially,\n          // Because the height of the row is equal to the tallest cell within that row,\n          // (And so we can't know the height without measuring all column-cells first).\n          if (!deferredMeasurementCache.hasFixedHeight()) {\n            for (\n              let rowIndex = rowStartIndex;\n              rowIndex <= rowStopIndex;\n              rowIndex++\n            ) {\n              if (!deferredMeasurementCache.has(rowIndex, 0)) {\n                columnStartIndex = 0;\n                columnStopIndex = columnCount - 1;\n                break;\n              }\n            }\n          }\n\n          // If columns have a dynamic width, scan the columns we are about to render.\n          // If any have not yet been measured, then we need to render all rows initially,\n          // Because the width of the column is equal to the widest cell within that column,\n          // (And so we can't know the width without measuring all row-cells first).\n          if (!deferredMeasurementCache.hasFixedWidth()) {\n            for (\n              let columnIndex = columnStartIndex;\n              columnIndex <= columnStopIndex;\n              columnIndex++\n            ) {\n              if (!deferredMeasurementCache.has(0, columnIndex)) {\n                rowStartIndex = 0;\n                rowStopIndex = rowCount - 1;\n                break;\n              }\n            }\n          }\n        }\n\n        childrenToDisplay = cellRangeRenderer({\n          cellCache: internals.cellCache,\n          cellRenderer,\n          columnSizeAndPositionManager,\n          columnStartIndex,\n          columnStopIndex,\n          deferredMeasurementCache,\n          horizontalOffsetAdjustment,\n          isScrolling,\n          isScrollingOptOut,\n          parent: handle,\n          rowSizeAndPositionManager,\n          rowStartIndex,\n          rowStopIndex,\n          scrollLeft,\n          scrollTop,\n          styleCache: internals.styleCache,\n          verticalOffsetAdjustment,\n          visibleColumnIndices,\n          visibleRowIndices\n        });\n\n        // Retained by the next resetStyleCache()\n        internals.renderedRange = {\n          columnStartIndex,\n          columnStopIndex,\n          rowStartIndex,\n          rowStopIndex\n        };\n\n        // Reported by onSectionRendered once committed.\n        // Indices may be undefined (if no cells are visible); the memoizer skips the callback in that case.\n        renderedSection = {\n          columnOverscanStartIndex: columnStartIndex,\n          columnOverscanStopIndex: columnStopIndex,\n          columnStartIndex: visibleColumnIndices.start,\n          columnStopIndex: visibleColumnIndices.stop,\n          rowOverscanStartIndex: rowStartIndex,\n          rowOverscanStopIndex: rowStopIndex,\n          rowStartIndex: visibleRowIndices.start,\n          rowStopIndex: visibleRowIndices.stop\n        };\n      }\n\n      const totalColumnsWidth = columnSizeAndPositionManager.getTotalSize();\n      const totalRowsHeight = rowSizeAndPositionManager.getTotalSize();\n\n      // Force browser to hide scrollbars when we know they aren't necessary.\n      // Otherwise once scrollbars appear they may not disappear again.\n      // For more info see issue #116\n      const verticalScrollBarSize =\n        totalRowsHeight > height ? scrollbarSize : 0;\n      const horizontalScrollBarSize =\n        totalColumnsWidth > width ? scrollbarSize : 0;\n\n      // Equivalent of the 9.x componentDidMount/componentDidUpdate\n      useIsomorphicLayoutEffect(() => {\n        const committed = internals.committed;\n        const element = internals.element;\n\n        // If cell sizes have been invalidated (eg we are using CellMeasurer) then reset cached positions.\n        // We must do this at the start of the method as we may calculate and update scroll position below.\n        if (\n          typeof internals.deferredInvalidateColumnIndex === \"number\" &&\n          typeof internals.deferredInvalidateRowIndex === \"number\"\n        ) {\n          const columnIndex = internals.deferredInvalidateColumnIndex;\n          const rowIndex = internals.deferredInvalidateRowIndex;\n\n          internals.deferredInvalidateColumnIndex = null;\n          internals.deferredInvalidateRowIndex = null;\n\n          handle.recomputeGridSize({ columnIndex, rowIndex });\n        }\n\n        if (committed === null && hydrationShift !== null) {\n          // Hydrated with initial scroll offsets (rendered as a shift of the inner container; see above):\n          // remove the shift, then apply the offsets to the scrolling element (on the next commit, before the browser paints).\n          // If the user scrolled before the page was hydrated, the content they see is kept in place.\n          internals.scrollOffsetsPendingHydration = true;\n          setHydrationShift(null);\n          if (element && (element.scrollLeft > 0 || element.scrollTop > 0)) {\n            setScrollState({\n              scrollLeft: hydrationShift.left + element.scrollLeft,\n              scrollTop: hydrationShift.top + element.scrollTop\n            });\n          }\n        } else if (committed === null) {\n          // Mount\n          if (element) {\n            if (element.scrollLeft !== scrollState.scrollLeft) {\n              element.scrollLeft = scrollState.scrollLeft;\n            }\n            if (element.scrollTop !== scrollState.scrollTop) {\n              element.scrollTop = scrollState.scrollTop;\n            }\n          }\n        } else {\n          if (\n            internals.scrollOffsetsPendingHydration &&\n            hydrationShift === null\n          ) {\n            internals.scrollOffsetsPendingHydration = false;\n            if (element) {\n              element.scrollLeft = scrollState.scrollLeft;\n              if (!linked) {\n                element.scrollTop = scrollState.scrollTop;\n              }\n            }\n          }\n\n          // Handle edge case where column or row count has only just increased over 0.\n          // In this case we may have to restore a previously-specified scroll offset.\n          // For more info see bvaughn/react-virtualized/issues/218\n          const columnOrRowCountJustIncreasedFromZero =\n            (columnCount > 0 && committed.columnCount === 0) ||\n            (rowCount > 0 && committed.rowCount === 0);\n\n          // Make sure requested changes to :scrollLeft or :scrollTop get applied.\n          // Assigning to scrollLeft/scrollTop tells the browser to interrupt any running scroll animations,\n          // And to discard any pending async changes to the scroll position that may have happened in the meantime (e.g. on a separate scrolling thread).\n          // So we only set these when we require an adjustment of the scroll position.\n          // See issue #2 for more information.\n          if (\n            element &&\n            scrollState.scrollPositionChangeReason ===\n              SCROLL_POSITION_CHANGE_REASONS.REQUESTED\n          ) {\n            // @TRICKY A linked Grid leaves its vertical scroll offset to its scroll element.\n            // In this case we should avoid checking scrollingContainer.scrollTop since it forces layout/flow.\n            const update: Partial<ScrollState> = {};\n            if (\n              scrollState.scrollLeft >= 0 &&\n              (scrollState.scrollLeft !== element.scrollLeft ||\n                columnOrRowCountJustIncreasedFromZero)\n            ) {\n              element.scrollLeft = scrollState.scrollLeft;\n\n              // If the browser couldn't scroll that far (e.g. its overflow is hidden by a custom style),\n              // no scroll event is dispatched; so update the offset to match.\n              if (Math.abs(element.scrollLeft - scrollState.scrollLeft) >= 1) {\n                update.scrollLeft = element.scrollLeft;\n              }\n            }\n            if (\n              !linked &&\n              scrollState.scrollTop >= 0 &&\n              (scrollState.scrollTop !== element.scrollTop ||\n                columnOrRowCountJustIncreasedFromZero)\n            ) {\n              element.scrollTop = scrollState.scrollTop;\n\n              if (Math.abs(element.scrollTop - scrollState.scrollTop) >= 1) {\n                update.scrollTop = element.scrollTop;\n              }\n            }\n            if (\n              update.scrollLeft !== undefined ||\n              update.scrollTop !== undefined\n            ) {\n              update.scrollPositionChangeReason =\n                SCROLL_POSITION_CHANGE_REASONS.OBSERVED;\n              setScrollState(update);\n            }\n          }\n\n          // If the Grid (or its number of cells) has shrunk, make sure it isn't scrolled past its last cell\n          updateScrollIndexHelper({\n            cellSizeAndPositionManager: columnSizeAndPositionManager,\n            previousCellsCount: committed.columnCount,\n            previousSize: committed.width,\n            scrollOffset: scrollState.scrollLeft,\n            size: width,\n            updateScrollIndexCallback: (columnIndex) =>\n              updateScrollLeftForColumn(\"auto\", columnIndex)\n          });\n          updateScrollIndexHelper({\n            cellSizeAndPositionManager: rowSizeAndPositionManager,\n            previousCellsCount: committed.rowCount,\n            previousSize: committed.height,\n            // The viewport of a linked Grid may extend past its end (e.g. the window may be scrolled past it),\n            // so its offset doesn't need to be corrected when rows are removed\n            scrollOffset: linked ? 0 : scrollState.scrollTop,\n            size: height,\n            updateScrollIndexCallback: (rowIndex) =>\n              updateScrollTopForRow(\"auto\", rowIndex)\n          });\n        }\n\n        // An empty Grid is scrolled back to the start\n        if (\n          (columnCount === 0 && scrollState.scrollLeft !== 0) ||\n          (rowCount === 0 && scrollState.scrollTop !== 0)\n        ) {\n          setScrollState({ scrollLeft: 0, scrollTop: 0 });\n        }\n\n        // Update onSectionRendered callback if start/stop indices have changed\n        if (renderedSection !== null) {\n          internals.onGridRenderedMemoizer({\n            callback: onSectionRendered,\n            indices: renderedSection as RenderedSection\n          });\n        }\n\n        // Initialize onScroll callback (on mount); changes to the scroll offsets should also notify onScroll listeners\n        if (\n          committed === null ||\n          scrollLeft !== committed.scrollLeft ||\n          scrollTop !== committed.scrollTop\n        ) {\n          invokeOnScrollMemoizer(\n            scrollLeft,\n            scrollTop,\n            totalColumnsWidth,\n            totalRowsHeight\n          );\n        }\n\n        const { scrollbarPresence } = internals;\n        if (\n          horizontalScrollBarSize !== scrollbarPresence.horizontal ||\n          verticalScrollBarSize !== scrollbarPresence.vertical\n        ) {\n          internals.scrollbarPresence = {\n            horizontal: horizontalScrollBarSize,\n            vertical: verticalScrollBarSize\n          };\n\n          const params: ScrollbarPresenceChange = {\n            horizontal: horizontalScrollBarSize > 0,\n            size: scrollbarSize,\n            vertical: verticalScrollBarSize > 0\n          };\n          onScrollbarPresenceChange(params);\n        }\n\n        internals.committed = {\n          columnCount,\n          columnWidth,\n          height,\n          rowCount,\n          rowHeight,\n          scrollLeft,\n          scrollTop,\n          width\n        };\n      });\n\n      useEffect(\n        () => () => {\n          if (internals.disablePointerEventsTimeoutId) {\n            cancelAnimationTimeout(internals.disablePointerEventsTimeoutId);\n            internals.disablePointerEventsTimeoutId = null;\n          }\n        },\n        [internals]\n      );\n\n      const gridStyle: CSSProperties = {\n        boxSizing: \"border-box\",\n        direction: \"ltr\",\n        // A linked Grid renders at its full height (it doesn't scroll vertically itself)\n        height: linked ? \"auto\" : height,\n        position: \"relative\",\n        width,\n        WebkitOverflowScrolling: \"touch\",\n        willChange: \"transform\"\n      };\n\n      // Also explicitly init styles to 'auto' if scrollbars are required.\n      // This works around an obscure edge case where external CSS styles have not yet been loaded,\n      // But an initial scroll index of offset is set as an external prop.\n      // Without this style, Grid would render the correct range of cells but would NOT update its internal offset.\n      // This was originally reported via clauderic/react-infinite-calendar/issues/23\n      gridStyle.overflowX =\n        totalColumnsWidth + verticalScrollBarSize <= width ? \"hidden\" : \"auto\";\n      gridStyle.overflowY =\n        totalRowsHeight + horizontalScrollBarSize <= height ? \"hidden\" : \"auto\";\n\n      const showNoContentRenderer =\n        childrenToDisplay.length === 0 && height > 0 && width > 0;\n\n      return (\n        <div\n          ref={setScrollingContainerRef}\n          {...containerProps}\n          aria-label={ariaLabel}\n          aria-readonly={ariaReadonly}\n          className={clsx(\"ReactVirtualized__Grid\", className)}\n          id={id}\n          onScroll={onScrollEvent}\n          role={role}\n          style={{\n            ...gridStyle,\n            ...style\n          }}\n          tabIndex={tabIndex as number | undefined}\n        >\n          {childrenToDisplay.length > 0 && (\n            <div\n              className=\"ReactVirtualized__Grid__innerScrollContainer\"\n              role={containerRole}\n              style={{\n                width: autoContainerWidth ? \"auto\" : totalColumnsWidth,\n                height: totalRowsHeight,\n                maxWidth: totalColumnsWidth,\n                maxHeight: totalRowsHeight,\n                overflow: \"hidden\",\n                pointerEvents: (isScrolling\n                  ? \"none\"\n                  : \"\") as CSSProperties[\"pointerEvents\"],\n                position: \"relative\",\n                ...(hydrationShift !== null && {\n                  marginLeft: -hydrationShift.left,\n                  marginTop: -hydrationShift.top\n                }),\n                ...containerStyle\n              }}\n            >\n              {childrenToDisplay}\n            </div>\n          )}\n          {showNoContentRenderer && noContentRenderer()}\n        </div>\n      );\n    }\n  )\n);\n","import type { InfiniteLoaderProps } from \"./types\";\n\n/**\n * Default values for `InfiniteLoader`'s optional props.\n */\nexport const defaultInfiniteLoaderProps = /* @__PURE__ */ Object.freeze({\n  minimumBatchSize: 10,\n  rowCount: 0,\n  threshold: 15\n} as const satisfies Partial<InfiniteLoaderProps>);\n","import type {\n  IndexRange,\n  InfiniteLoaderChildInstance,\n  InfiniteLoaderProps\n} from \"./types\";\n\n/**\n * Determines if the specified start/stop range is visible based on the most recently rendered range.\n */\nexport function isRangeVisible({\n  lastRenderedStartIndex,\n  lastRenderedStopIndex,\n  startIndex,\n  stopIndex\n}: {\n  lastRenderedStartIndex: number;\n  lastRenderedStopIndex: number;\n  startIndex: number;\n  stopIndex: number;\n}): boolean {\n  return !(\n    startIndex > lastRenderedStopIndex || stopIndex < lastRenderedStartIndex\n  );\n}\n\n/**\n * Returns all of the ranges within a larger range that contain unloaded rows.\n */\nexport function scanForUnloadedRanges({\n  isRowLoaded,\n  minimumBatchSize,\n  rowCount,\n  startIndex,\n  stopIndex\n}: {\n  isRowLoaded: InfiniteLoaderProps[\"isRowLoaded\"];\n  minimumBatchSize: number;\n  rowCount: number;\n  startIndex: number;\n  stopIndex: number;\n}): IndexRange[] {\n  const unloadedRanges: IndexRange[] = [];\n\n  let rangeStartIndex: number | null = null;\n  let rangeStopIndex: number | null = null;\n\n  for (let index = startIndex; index <= stopIndex; index++) {\n    const loaded = isRowLoaded({ index });\n\n    if (!loaded) {\n      rangeStopIndex = index;\n      if (rangeStartIndex === null) {\n        rangeStartIndex = index;\n      }\n    } else if (rangeStopIndex !== null) {\n      unloadedRanges.push({\n        startIndex: rangeStartIndex!,\n        stopIndex: rangeStopIndex\n      });\n\n      rangeStartIndex = rangeStopIndex = null;\n    }\n  }\n\n  // If :rangeStopIndex is not null it means we haven't ran out of unloaded rows.\n  // Scan forward to try filling our :minimumBatchSize.\n  if (rangeStopIndex !== null) {\n    const potentialStopIndex = Math.min(\n      Math.max(rangeStopIndex, rangeStartIndex! + minimumBatchSize - 1),\n      rowCount - 1\n    );\n\n    for (let index = rangeStopIndex + 1; index <= potentialStopIndex; index++) {\n      if (!isRowLoaded({ index })) {\n        rangeStopIndex = index;\n      } else {\n        break;\n      }\n    }\n\n    unloadedRanges.push({\n      startIndex: rangeStartIndex!,\n      stopIndex: rangeStopIndex\n    });\n  }\n\n  // Check to see if our first range ended prematurely.\n  // In this case we should scan backwards to try filling our :minimumBatchSize.\n  if (unloadedRanges.length) {\n    const firstUnloadedRange = unloadedRanges[0];\n\n    while (\n      firstUnloadedRange.stopIndex - firstUnloadedRange.startIndex + 1 <\n        minimumBatchSize &&\n      firstUnloadedRange.startIndex > 0\n    ) {\n      const index = firstUnloadedRange.startIndex - 1;\n\n      if (!isRowLoaded({ index })) {\n        firstUnloadedRange.startIndex = index;\n      } else {\n        break;\n      }\n    }\n  }\n\n  return unloadedRanges;\n}\n\n/**\n * Since RV components skip re-rendering when their props haven't changed (`PureComponent`/`memo`),\n * a render must be forced once rows have loaded (even though props haven't changed).\n * The registered child may be a class instance (e.g. a 9.x-style component) or a function component's imperative handle,\n * and function components have no `forceUpdate()` method; so the first available method below is used:\n *\n * 1. `recomputeGridSize({ rowIndex })` (e.g. `Grid`, `List`, `Table`, `MultiGrid`)\n * 2. `recomputeRowHeights(index)` (e.g. `List`, `Table`)\n * 3. `forceUpdateGrid()` (e.g. `List`, `Table`)\n * 4. `forceUpdate()` (any class component)\n *\n * The recompute methods are preferred because, while a Grid is scrolling, its cells may be cached;\n * so it's important to invalidate that cache by recalculating sizes before forcing a re-render.\n * (Calling `forceUpdate()` on a `List` or `Table` would not re-render the inner `Grid`.)\n */\nexport function forceUpdateReactVirtualizedComponent(\n  component: InfiniteLoaderChildInstance,\n  currentIndex: number = 0\n) {\n  if (typeof component.recomputeGridSize === \"function\") {\n    component.recomputeGridSize({ rowIndex: currentIndex });\n  } else if (typeof component.recomputeRowHeights === \"function\") {\n    component.recomputeRowHeights(currentIndex);\n  } else if (typeof component.forceUpdateGrid === \"function\") {\n    component.forceUpdateGrid();\n  } else if (typeof component.forceUpdate === \"function\") {\n    component.forceUpdate();\n  } else if (process.env.NODE_ENV !== \"production\") {\n    console.warn(\n      \"InfiniteLoader: the registered child does not implement recomputeGridSize(), recomputeRowHeights(), forceUpdateGrid() or forceUpdate(); it can't be re-rendered after rows have loaded.\"\n    );\n  }\n}\n","import {\n  forwardRef,\n  memo,\n  useCallback,\n  useImperativeHandle,\n  useInsertionEffect,\n  useMemo,\n  useRef\n} from \"react\";\nimport { createCallbackMemoizer } from \"../../utils/createCallbackMemoizer\";\nimport type {\n  IndexRange,\n  InfiniteLoaderChildInstance,\n  InfiniteLoaderImperativeAPI,\n  InfiniteLoaderProps\n} from \"./types\";\nimport { defaultInfiniteLoaderProps } from \"./defaultInfiniteLoaderProps\";\nimport {\n  forceUpdateReactVirtualizedComponent,\n  isRangeVisible,\n  scanForUnloadedRanges\n} from \"./utils\";\n\ntype LatestProps = Pick<InfiniteLoaderProps, \"isRowLoaded\" | \"loadMoreRows\"> & {\n  minimumBatchSize: number;\n  rowCount: number;\n  threshold: number;\n};\n\n/**\n * Higher-order component that manages lazy-loading for \"infinite\" data.\n * This component decorates a virtual component and just-in-time prefetches rows as a user scrolls.\n * It is intended as a convenience component; fork it if you'd like finer-grained control over data-loading.\n */\nexport const InfiniteLoader = /* @__PURE__ */ memo(\n  /* @__PURE__ */ forwardRef<InfiniteLoaderImperativeAPI, InfiniteLoaderProps>(\n    function InfiniteLoader(\n      {\n        children,\n        isRowLoaded,\n        loadMoreRows,\n        minimumBatchSize = defaultInfiniteLoaderProps.minimumBatchSize,\n        rowCount = defaultInfiniteLoaderProps.rowCount,\n        threshold = defaultInfiniteLoaderProps.threshold\n      },\n      ref\n    ) {\n      // The registered child calls onRowsRendered from its own commit phase (e.g. componentDidMount/componentDidUpdate),\n      // which runs before this component's layout effects; so the latest props are stored in an insertion effect,\n      // which runs before any layout effects (without mutating anything during render).\n      const latestPropsRef = useRef<LatestProps>({\n        isRowLoaded,\n        loadMoreRows,\n        minimumBatchSize,\n        rowCount,\n        threshold\n      });\n      useInsertionEffect(() => {\n        latestPropsRef.current = {\n          isRowLoaded,\n          loadMoreRows,\n          minimumBatchSize,\n          rowCount,\n          threshold\n        };\n      });\n\n      const lastRenderedRangeRef = useRef<{\n        startIndex: number | undefined;\n        stopIndex: number | undefined;\n      }>({ startIndex: undefined, stopIndex: undefined });\n      const loadMoreRowsMemoizerRef = useRef<ReturnType<\n        typeof createCallbackMemoizer\n      > | null>(null);\n      const registeredChildRef = useRef<InfiniteLoaderChildInstance | null>(\n        null\n      );\n\n      const getLoadMoreRowsMemoizer = useCallback(() => {\n        if (loadMoreRowsMemoizerRef.current === null) {\n          loadMoreRowsMemoizerRef.current = createCallbackMemoizer();\n        }\n        return loadMoreRowsMemoizerRef.current;\n      }, []);\n\n      const loadUnloadedRanges = useCallback((unloadedRanges: IndexRange[]) => {\n        const { loadMoreRows } = latestPropsRef.current;\n\n        unloadedRanges.forEach((unloadedRange) => {\n          const promise = loadMoreRows(unloadedRange);\n          if (promise) {\n            promise.then(() => {\n              // Refresh the visible rows if any of them have just been loaded.\n              // Otherwise they will remain in their unloaded visual state.\n              // (If the child has been unmounted, it is no longer registered and nothing is updated.)\n              const { startIndex, stopIndex } = lastRenderedRangeRef.current;\n              if (\n                isRangeVisible({\n                  lastRenderedStartIndex: startIndex as number,\n                  lastRenderedStopIndex: stopIndex as number,\n                  startIndex: unloadedRange.startIndex,\n                  stopIndex: unloadedRange.stopIndex\n                })\n              ) {\n                const registeredChild = registeredChildRef.current;\n                if (registeredChild) {\n                  forceUpdateReactVirtualizedComponent(\n                    registeredChild,\n                    startIndex\n                  );\n                }\n              }\n            });\n          }\n        });\n      }, []);\n\n      const loadRange = useCallback(\n        (startIndex: number, stopIndex: number) => {\n          const { isRowLoaded, minimumBatchSize, rowCount, threshold } =\n            latestPropsRef.current;\n\n          const unloadedRanges = scanForUnloadedRanges({\n            isRowLoaded,\n            minimumBatchSize,\n            rowCount,\n            startIndex: Math.max(0, startIndex - threshold),\n            stopIndex: Math.min(rowCount - 1, stopIndex + threshold)\n          });\n\n          // For memoize comparison\n          const squashedUnloadedRanges = ([] as number[]).concat(\n            ...unloadedRanges.map(({ startIndex, stopIndex }) => [\n              startIndex,\n              stopIndex\n            ])\n          );\n\n          getLoadMoreRowsMemoizer()({\n            callback: () => {\n              loadUnloadedRanges(unloadedRanges);\n            },\n            indices: { squashedUnloadedRanges }\n          });\n        },\n        [getLoadMoreRowsMemoizer, loadUnloadedRanges]\n      );\n\n      const onRowsRendered = useCallback(\n        ({ startIndex, stopIndex }: IndexRange) => {\n          lastRenderedRangeRef.current = { startIndex, stopIndex };\n\n          loadRange(startIndex, stopIndex);\n        },\n        [loadRange]\n      );\n\n      const registerChild = useCallback(\n        (registeredChild: InfiniteLoaderChildInstance | null) => {\n          registeredChildRef.current = registeredChild;\n        },\n        []\n      );\n\n      // The handle object is created once, so it stays stable even if the ref itself changes.\n      const imperativeHandle = useMemo<InfiniteLoaderImperativeAPI>(\n        () => ({\n          resetLoadMoreRowsCache(autoReload?: boolean) {\n            loadMoreRowsMemoizerRef.current = createCallbackMemoizer();\n\n            if (autoReload) {\n              const { startIndex, stopIndex } = lastRenderedRangeRef.current;\n              loadRange(startIndex as number, stopIndex as number);\n            }\n          }\n        }),\n        [loadRange]\n      );\n      useImperativeHandle(ref, () => imperativeHandle, [imperativeHandle]);\n\n      return children({\n        onRowsRendered,\n        registerChild\n      });\n    }\n  )\n);\n","import { accessibilityOverscanIndicesGetter } from \"../Grid/accessibilityOverscanIndicesGetter\";\nimport type { ListProps } from \"./types\";\n\ntype DefaultedPropKeys =\n  | \"estimatedRowSize\"\n  | \"noRowsRenderer\"\n  | \"onRowsRendered\"\n  | \"onScroll\"\n  | \"overscanIndicesGetter\"\n  | \"overscanRowCount\"\n  | \"role\"\n  | \"style\"\n  | \"tabIndex\";\n\nconst noop = () => {};\n\n/**\n * Default values for `List`'s optional props.\n * (The PURE annotations let bundlers drop this object if it isn't used.)\n */\nexport const defaultListProps: Readonly<\n  Required<Pick<ListProps, DefaultedPropKeys>>\n> = /* @__PURE__ */ Object.freeze({\n  estimatedRowSize: 30,\n  noRowsRenderer: () => null,\n  onRowsRendered: noop,\n  onScroll: noop,\n  overscanIndicesGetter: accessibilityOverscanIndicesGetter,\n  overscanRowCount: 10,\n  role: \"list\",\n  style: /* @__PURE__ */ Object.freeze({}),\n  tabIndex: 0\n});\n","import type { CellPosition, GridImperativeAPI } from \"../components/Grid/types\";\n\nexport type InnerGridRef = {\n  /** The inner Grid's handle (once its ref has been attached). */\n  getGrid: () => GridImperativeAPI | null;\n\n  /** Ref callback for the inner Grid. */\n  setGridRef: (grid: GridImperativeAPI | null) => void;\n\n  /** Calls the Grid's `invalidateCellSizeAfterRender`, or keeps the call until the Grid's ref has been attached. */\n  invalidateCellSizeAfterRender: (cell: CellPosition) => void;\n\n  /** Calls the Grid's `recomputeGridSize`, or keeps the call until the Grid's ref has been attached. */\n  recomputeGridSize: (cell: CellPosition) => void;\n};\n\n// Merges two cell positions into the one that covers both (i.e. the smallest indices)\nconst mergeCellPositions = (\n  prev: CellPosition | null,\n  next: CellPosition\n): CellPosition =>\n  prev === null\n    ? next\n    : {\n        columnIndex: Math.min(prev.columnIndex, next.columnIndex),\n        rowIndex: Math.min(prev.rowIndex, next.rowIndex)\n      };\n\n/**\n * Tracks the inner Grid of a component that wraps one (e.g. List or Table, whose handles delegate to the Grid).\n *\n * When the wrapper mounts, its cells (e.g. CellMeasurer) run their layout effects before the inner Grid's handle\n * is attached to the wrapper's ref (the refs of parents are attached after the effects of their children run).\n * Cell size invalidations and recomputations requested in the meantime are kept (merged to the smallest indices)\n * and passed on to the Grid once its ref has been attached.\n * (The Grid attaches its handle before running its own layout effect, which then processes the invalidations.)\n */\nexport function createInnerGridRef(): InnerGridRef {\n  let grid: GridImperativeAPI | null = null;\n  let pendingInvalidation: CellPosition | null = null;\n  let pendingRecomputation: CellPosition | null = null;\n\n  return {\n    getGrid: () => grid,\n\n    setGridRef(value) {\n      grid = value;\n      if (grid === null) {\n        return;\n      }\n\n      if (pendingRecomputation !== null) {\n        const cell = pendingRecomputation;\n        pendingRecomputation = null;\n        grid.recomputeGridSize(cell);\n      }\n      if (pendingInvalidation !== null) {\n        const cell = pendingInvalidation;\n        pendingInvalidation = null;\n        grid.invalidateCellSizeAfterRender(cell);\n      }\n    },\n\n    invalidateCellSizeAfterRender(cell) {\n      if (grid !== null) {\n        grid.invalidateCellSizeAfterRender(cell);\n      } else {\n        pendingInvalidation = mergeCellPositions(pendingInvalidation, cell);\n      }\n    },\n\n    recomputeGridSize(cell) {\n      if (grid !== null) {\n        grid.recomputeGridSize(cell);\n      } else {\n        pendingRecomputation = mergeCellPositions(pendingRecomputation, cell);\n      }\n    }\n  };\n}\n","import clsx from \"clsx\";\nimport {\n  cloneElement,\n  forwardRef,\n  isValidElement,\n  memo,\n  useCallback,\n  useImperativeHandle,\n  useState,\n  type ReactElement\n} from \"react\";\nimport { createInnerGridRef } from \"../../utils/createInnerGridRef\";\nimport { useMissingHeightWarning } from \"../../utils/scrollElement/useMissingHeightWarning\";\nimport { Grid } from \"../Grid/Grid\";\nimport type {\n  CellRendererParams,\n  GridImperativeAPI,\n  Scroll as GridScroll,\n  RenderedSection\n} from \"../Grid/types\";\nimport { defaultListProps } from \"./defaultListProps\";\nimport type { ListImperativeAPI, ListProps } from \"./types\";\n\n/**\n * It is inefficient to create and manage a large list of DOM elements within a scrolling container\n * if only a few of those elements are visible. The primary purpose of this component is to improve\n * performance by only rendering the DOM nodes that a user is able to see based on their current\n * scroll position.\n *\n * This component renders a virtualized list of elements with either fixed or dynamic heights.\n */\nexport const List = /* @__PURE__ */ memo(\n  /* @__PURE__ */ forwardRef<ListImperativeAPI, ListProps>(\n    function List(props, ref) {\n      const {\n        \"aria-label\": ariaLabel,\n        \"aria-readonly\": ariaReadonly,\n        className,\n        containerRole,\n        estimatedRowSize = defaultListProps.estimatedRowSize,\n        noRowsRenderer = defaultListProps.noRowsRenderer,\n        onRowsRendered = defaultListProps.onRowsRendered,\n        onScroll = defaultListProps.onScroll,\n        overscanIndicesGetter = defaultListProps.overscanIndicesGetter,\n        overscanRowCount = defaultListProps.overscanRowCount,\n        role = defaultListProps.role,\n        rowRenderer,\n        style = defaultListProps.style,\n        tabIndex = defaultListProps.tabIndex,\n        height,\n        scrollElement,\n        width,\n        ...rest\n      } = props;\n\n      // The imperative handle is created once (it reads the inner Grid through a ref)\n      const [{ handle, setGridRef }] = useState(createListInstance);\n\n      useImperativeHandle(ref, () => handle, [handle]);\n\n      useMissingHeightWarning(\"List\", height, scrollElement);\n\n      // With role=\"list\" (the default), the rows are list items within the list (#1657);\n      // otherwise (e.g. role=\"grid\"), the Grid's roles and ARIA defaults apply.\n      const isList = role === \"list\";\n\n      const cellRenderer = useCallback(\n        ({\n          isScrolling,\n          isVisible,\n          key,\n          rowIndex,\n          style: cellStyle\n        }: CellRendererParams) => {\n          // TRICKY The style object is sometimes cached by Grid.\n          // This prevents new style objects from bypassing shallowCompare().\n          // However as of React 16, style props are auto-frozen (at least in dev mode)\n          // Check to make sure we can still modify the style before proceeding.\n          // https://github.com/facebook/react/commit/977357765b44af8ff0cfea327866861073095c12#commitcomment-20648713\n          const widthDescriptor = Object.getOwnPropertyDescriptor(\n            cellStyle,\n            \"width\"\n          );\n          if (widthDescriptor && widthDescriptor.writable) {\n            // By default, List cells should be 100% width.\n            // This prevents them from flowing under a scrollbar (if present).\n            cellStyle.width = \"100%\";\n          }\n\n          const row = rowRenderer({\n            index: rowIndex,\n            isScrolling,\n            isVisible,\n            key,\n            parent: handle,\n            style: cellStyle\n          });\n\n          // (Grid gives a row without a role the \"gridcell\" role)\n          if (\n            isList &&\n            isValidElement<{ role?: string }>(row) &&\n            !row.props.role\n          ) {\n            return cloneElement(row as ReactElement<{ role?: string }>, {\n              role: \"listitem\"\n            });\n          }\n          return row;\n        },\n        [handle, isList, rowRenderer]\n      );\n\n      const onGridScroll = useCallback(\n        ({ clientHeight, scrollHeight, scrollTop }: GridScroll) => {\n          onScroll({ clientHeight, scrollHeight, scrollTop });\n        },\n        [onScroll]\n      );\n\n      const onSectionRendered = useCallback(\n        ({\n          rowOverscanStartIndex,\n          rowOverscanStopIndex,\n          rowStartIndex,\n          rowStopIndex\n        }: RenderedSection) => {\n          onRowsRendered({\n            overscanStartIndex: rowOverscanStartIndex,\n            overscanStopIndex: rowOverscanStopIndex,\n            startIndex: rowStartIndex,\n            stopIndex: rowStopIndex\n          });\n        },\n        [onRowsRendered]\n      );\n\n      return (\n        <Grid\n          {...rest}\n          // null (rather than undefined) so that the Grid's defaults for a grid are not used\n          aria-label={\n            ariaLabel ?? (isList ? (null as unknown as string) : undefined)\n          }\n          aria-readonly={\n            ariaReadonly ?? (isList ? (null as unknown as boolean) : undefined)\n          }\n          autoContainerWidth\n          cellRenderer={cellRenderer}\n          className={clsx(\"ReactVirtualized__List\", className)}\n          columnCount={1}\n          columnWidth={width}\n          containerRole={containerRole ?? (isList ? \"presentation\" : undefined)}\n          estimatedRowSize={estimatedRowSize}\n          // (A missing height is reported by the List itself; see above)\n          height={height ?? (scrollElement === undefined ? 0 : undefined)}\n          noContentRenderer={noRowsRenderer}\n          onScroll={onGridScroll}\n          onSectionRendered={onSectionRendered}\n          overscanIndicesGetter={overscanIndicesGetter}\n          overscanRowCount={overscanRowCount}\n          ref={setGridRef}\n          role={role}\n          scrollElement={scrollElement}\n          style={style}\n          tabIndex={tabIndex}\n          width={width}\n        />\n      );\n    }\n  )\n);\n\ntype ListInstance = {\n  handle: ListImperativeAPI;\n  setGridRef: (grid: GridImperativeAPI | null) => void;\n};\n\n// Creates the (stable) imperative handle of a List (every method delegates to the inner Grid)\n// and the ref callback for the inner Grid.\nfunction createListInstance(): ListInstance {\n  // (Keeps cell size invalidations requested by rows while the List is mounting; see createInnerGridRef)\n  const innerGrid = createInnerGridRef();\n  const { getGrid } = innerGrid;\n\n  const handle: ListImperativeAPI = {\n    forceUpdateGrid() {\n      getGrid()?.forceUpdate();\n    },\n\n    getOffsetForRow({ align, alignment, index } = {}) {\n      const grid = getGrid();\n      if (grid) {\n        const { scrollTop } = grid.getOffsetForCell({\n          alignment: align ?? alignment,\n          columnIndex: 0,\n          rowIndex: index\n        });\n\n        return scrollTop;\n      }\n      return 0;\n    },\n\n    invalidateCellSizeAfterRender({ columnIndex, rowIndex }) {\n      innerGrid.invalidateCellSizeAfterRender({ columnIndex, rowIndex });\n    },\n\n    measureAllRows() {\n      getGrid()?.measureAllCells();\n    },\n\n    recomputeGridSize({ columnIndex = 0, rowIndex = 0 } = {}) {\n      innerGrid.recomputeGridSize({ columnIndex, rowIndex });\n    },\n\n    recomputeRowHeights(index = 0) {\n      innerGrid.recomputeGridSize({ columnIndex: 0, rowIndex: index });\n    },\n\n    scrollToCell({ align, columnIndex, rowIndex }) {\n      getGrid()?.scrollToCell({ align, columnIndex, rowIndex });\n    },\n\n    scrollToPosition({ scrollTop }) {\n      getGrid()?.scrollToPosition({ scrollTop });\n    },\n\n    scrollToRow({ align, index }) {\n      getGrid()?.scrollToCell({ align, columnIndex: 0, rowIndex: index });\n    }\n  };\n\n  return { handle, setGridRef: innerGrid.setGridRef };\n}\n","/**\n * Specifies the number of milliseconds during which to disable pointer events while a scroll is in progress.\n * This improves performance and makes scrolling smoother.\n */\nexport const DEFAULT_SCROLLING_RESET_TIME_INTERVAL = 150;\n","import { DEFAULT_SCROLLING_RESET_TIME_INTERVAL } from \"./constants\";\nimport type { MasonryProps } from \"./types\";\n\ntype DefaultedPropKeys =\n  | \"keyMapper\"\n  | \"onCellsRendered\"\n  | \"onScroll\"\n  | \"overscanByPixels\"\n  | \"role\"\n  | \"rowDirection\"\n  | \"scrollingResetTimeInterval\"\n  | \"style\"\n  | \"tabIndex\";\n\nconst noop = () => {};\n\n/**\n * Default values for `Masonry`'s optional props.\n * (The PURE annotations let bundlers drop this object if it isn't used.)\n */\nexport const defaultMasonryProps: Readonly<{\n  [Key in DefaultedPropKeys]-?: NonNullable<MasonryProps[Key]>;\n}> = /* @__PURE__ */ Object.freeze({\n  keyMapper: (index: number) => index,\n  onCellsRendered: noop,\n  onScroll: noop,\n  overscanByPixels: 20,\n  role: \"grid\",\n  rowDirection: \"ltr\",\n  scrollingResetTimeInterval: DEFAULT_SCROLLING_RESET_TIME_INTERVAL,\n  style: /* @__PURE__ */ Object.freeze({}),\n  tabIndex: 0\n});\n","import type {\n  CellPositioner,\n  CellPositionerResetParams,\n  CreateCellPositionerParams,\n  Position\n} from \"./types\";\n\n/**\n * Creates a simple `Masonry` cell positioner that always inserts a cell into the shortest column.\n */\nexport function createCellPositioner({\n  cellMeasurerCache,\n  columnCount,\n  columnWidth,\n  spacer = 0\n}: CreateCellPositionerParams): CellPositioner {\n  let columnHeights: number[];\n\n  initOrResetDerivedValues();\n\n  function cellPositioner(index: number): Position {\n    // Find the shortest column and use it.\n    let columnIndex = 0;\n    for (let i = 1; i < columnHeights.length; i++) {\n      if (columnHeights[i] < columnHeights[columnIndex]) {\n        columnIndex = i;\n      }\n    }\n\n    const left = columnIndex * (columnWidth + spacer);\n    const top = columnHeights[columnIndex] || 0;\n\n    columnHeights[columnIndex] =\n      top + cellMeasurerCache.getHeight(index) + spacer;\n\n    return {\n      left,\n      top\n    };\n  }\n\n  function initOrResetDerivedValues(): void {\n    // Track the height of each column.\n    // Layout algorithm below always inserts into the shortest column.\n    columnHeights = [];\n    for (let i = 0; i < columnCount; i++) {\n      columnHeights[i] = 0;\n    }\n  }\n\n  function reset(params: CellPositionerResetParams): void {\n    columnCount = params.columnCount;\n    columnWidth = params.columnWidth;\n    spacer = params.spacer ?? 0;\n\n    initOrResetDerivedValues();\n  }\n\n  cellPositioner.reset = reset;\n\n  return cellPositioner;\n}\n","/**\n * Binary Search Bounds\n * https://github.com/mikolalysenko/binary-search-bounds\n * Mikola Lysenko\n *\n * Inlined because of Content Security Policy issue caused by the use of `new Function(...)` syntax.\n * Issue reported here: https://github.com/mikolalysenko/binary-search-bounds/issues/5\n **/\n\ntype Compare<T, Y> = (a: T, b: Y) => number;\n\n/**\n * Searches a sorted array, optionally within the inclusive [lo, hi] index range.\n * Either uses the natural ordering of the values, or the specified comparator.\n */\nexport type BoundsSearch = {\n  <T>(array: ArrayLike<T>, value: T, lo?: number, hi?: number): number;\n  <T, Y>(\n    array: ArrayLike<T>,\n    value: Y,\n    compare: Compare<T, Y>,\n    lo?: number,\n    hi?: number\n  ): number;\n};\n\nfunction _GEA<T>(a: ArrayLike<T>, l: number, h: number, y: T): number {\n  let i = h + 1;\n  while (l <= h) {\n    const m = (l + h) >>> 1,\n      x = a[m];\n    if (x >= y) {\n      i = m;\n      h = m - 1;\n    } else {\n      l = m + 1;\n    }\n  }\n  return i;\n}\nfunction _GEP<T, Y>(\n  a: ArrayLike<T>,\n  l: number,\n  h: number,\n  y: Y,\n  c: Compare<T, Y>\n): number {\n  let i = h + 1;\n  while (l <= h) {\n    const m = (l + h) >>> 1,\n      x = a[m];\n    if (c(x, y) >= 0) {\n      i = m;\n      h = m - 1;\n    } else {\n      l = m + 1;\n    }\n  }\n  return i;\n}\nfunction dispatchBsearchGE<T, Y>(\n  a: ArrayLike<T>,\n  y: T | Y,\n  c?: Compare<T, Y> | number,\n  l?: number,\n  h?: number\n): number {\n  if (typeof c === \"function\") {\n    return _GEP(\n      a,\n      l === void 0 ? 0 : l | 0,\n      h === void 0 ? a.length - 1 : h | 0,\n      y as Y,\n      c\n    );\n  } else {\n    return _GEA(\n      a,\n      c === void 0 ? 0 : c | 0,\n      l === void 0 ? a.length - 1 : l | 0,\n      y as T\n    );\n  }\n}\n\nfunction _GTA<T>(a: ArrayLike<T>, l: number, h: number, y: T): number {\n  let i = h + 1;\n  while (l <= h) {\n    const m = (l + h) >>> 1,\n      x = a[m];\n    if (x > y) {\n      i = m;\n      h = m - 1;\n    } else {\n      l = m + 1;\n    }\n  }\n  return i;\n}\nfunction _GTP<T, Y>(\n  a: ArrayLike<T>,\n  l: number,\n  h: number,\n  y: Y,\n  c: Compare<T, Y>\n): number {\n  let i = h + 1;\n  while (l <= h) {\n    const m = (l + h) >>> 1,\n      x = a[m];\n    if (c(x, y) > 0) {\n      i = m;\n      h = m - 1;\n    } else {\n      l = m + 1;\n    }\n  }\n  return i;\n}\nfunction dispatchBsearchGT<T, Y>(\n  a: ArrayLike<T>,\n  y: T | Y,\n  c?: Compare<T, Y> | number,\n  l?: number,\n  h?: number\n): number {\n  if (typeof c === \"function\") {\n    return _GTP(\n      a,\n      l === void 0 ? 0 : l | 0,\n      h === void 0 ? a.length - 1 : h | 0,\n      y as Y,\n      c\n    );\n  } else {\n    return _GTA(\n      a,\n      c === void 0 ? 0 : c | 0,\n      l === void 0 ? a.length - 1 : l | 0,\n      y as T\n    );\n  }\n}\n\nfunction _LTA<T>(a: ArrayLike<T>, l: number, h: number, y: T): number {\n  let i = l - 1;\n  while (l <= h) {\n    const m = (l + h) >>> 1,\n      x = a[m];\n    if (x < y) {\n      i = m;\n      l = m + 1;\n    } else {\n      h = m - 1;\n    }\n  }\n  return i;\n}\nfunction _LTP<T, Y>(\n  a: ArrayLike<T>,\n  l: number,\n  h: number,\n  y: Y,\n  c: Compare<T, Y>\n): number {\n  let i = l - 1;\n  while (l <= h) {\n    const m = (l + h) >>> 1,\n      x = a[m];\n    if (c(x, y) < 0) {\n      i = m;\n      l = m + 1;\n    } else {\n      h = m - 1;\n    }\n  }\n  return i;\n}\nfunction dispatchBsearchLT<T, Y>(\n  a: ArrayLike<T>,\n  y: T | Y,\n  c?: Compare<T, Y> | number,\n  l?: number,\n  h?: number\n): number {\n  if (typeof c === \"function\") {\n    return _LTP(\n      a,\n      l === void 0 ? 0 : l | 0,\n      h === void 0 ? a.length - 1 : h | 0,\n      y as Y,\n      c\n    );\n  } else {\n    return _LTA(\n      a,\n      c === void 0 ? 0 : c | 0,\n      l === void 0 ? a.length - 1 : l | 0,\n      y as T\n    );\n  }\n}\n\nfunction _LEA<T>(a: ArrayLike<T>, l: number, h: number, y: T): number {\n  let i = l - 1;\n  while (l <= h) {\n    const m = (l + h) >>> 1,\n      x = a[m];\n    if (x <= y) {\n      i = m;\n      l = m + 1;\n    } else {\n      h = m - 1;\n    }\n  }\n  return i;\n}\nfunction _LEP<T, Y>(\n  a: ArrayLike<T>,\n  l: number,\n  h: number,\n  y: Y,\n  c: Compare<T, Y>\n): number {\n  let i = l - 1;\n  while (l <= h) {\n    const m = (l + h) >>> 1,\n      x = a[m];\n    if (c(x, y) <= 0) {\n      i = m;\n      l = m + 1;\n    } else {\n      h = m - 1;\n    }\n  }\n  return i;\n}\nfunction dispatchBsearchLE<T, Y>(\n  a: ArrayLike<T>,\n  y: T | Y,\n  c?: Compare<T, Y> | number,\n  l?: number,\n  h?: number\n): number {\n  if (typeof c === \"function\") {\n    return _LEP(\n      a,\n      l === void 0 ? 0 : l | 0,\n      h === void 0 ? a.length - 1 : h | 0,\n      y as Y,\n      c\n    );\n  } else {\n    return _LEA(\n      a,\n      c === void 0 ? 0 : c | 0,\n      l === void 0 ? a.length - 1 : l | 0,\n      y as T\n    );\n  }\n}\n\nfunction _EQA<T>(a: ArrayLike<T>, l: number, h: number, y: T): number {\n  // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n  l - 1;\n  while (l <= h) {\n    const m = (l + h) >>> 1,\n      x = a[m];\n    if (x === y) {\n      return m;\n    } else if (x <= y) {\n      l = m + 1;\n    } else {\n      h = m - 1;\n    }\n  }\n  return -1;\n}\nfunction _EQP<T, Y>(\n  a: ArrayLike<T>,\n  l: number,\n  h: number,\n  y: Y,\n  c: Compare<T, Y>\n): number {\n  // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n  l - 1;\n  while (l <= h) {\n    const m = (l + h) >>> 1,\n      x = a[m];\n    const p = c(x, y);\n    if (p === 0) {\n      return m;\n    } else if (p <= 0) {\n      l = m + 1;\n    } else {\n      h = m - 1;\n    }\n  }\n  return -1;\n}\nfunction dispatchBsearchEQ<T, Y>(\n  a: ArrayLike<T>,\n  y: T | Y,\n  c?: Compare<T, Y> | number,\n  l?: number,\n  h?: number\n): number {\n  if (typeof c === \"function\") {\n    return _EQP(\n      a,\n      l === void 0 ? 0 : l | 0,\n      h === void 0 ? a.length - 1 : h | 0,\n      y as Y,\n      c\n    );\n  } else {\n    return _EQA(\n      a,\n      c === void 0 ? 0 : c | 0,\n      l === void 0 ? a.length - 1 : l | 0,\n      y as T\n    );\n  }\n}\n\nexport const binarySearchBounds: {\n  ge: BoundsSearch;\n  gt: BoundsSearch;\n  lt: BoundsSearch;\n  le: BoundsSearch;\n  eq: BoundsSearch;\n} = {\n  ge: dispatchBsearchGE,\n  gt: dispatchBsearchGT,\n  lt: dispatchBsearchLT,\n  le: dispatchBsearchLE,\n  eq: dispatchBsearchEQ\n};\n","/**\n * Binary Search Bounds\n * https://github.com/mikolalysenko/interval-tree-1d\n * Mikola Lysenko\n *\n * Inlined because of Content Security Policy issue caused by the use of `new Function(...)` syntax in an upstream dependency.\n * Issue reported here: https://github.com/mikolalysenko/binary-search-bounds/issues/5\n **/\n\nimport { binarySearchBounds as bounds } from \"./binarySearchBounds\";\n\n/** An interval [low, high], optionally followed by additional data (e.g. an index). */\nexport type Interval = [number, number, ...number[]];\n\ntype ResultCode = 0 | 1 | 2;\n\nconst NOT_FOUND: ResultCode = 0;\nconst SUCCESS: ResultCode = 1;\nconst EMPTY: ResultCode = 2;\n\nclass IntervalTreeNode {\n  mid: number;\n  left: IntervalTreeNode | null;\n  right: IntervalTreeNode | null;\n  leftPoints: Interval[];\n  rightPoints: Interval[];\n  count: number;\n\n  constructor(\n    mid: number,\n    left: IntervalTreeNode | null,\n    right: IntervalTreeNode | null,\n    leftPoints: Interval[],\n    rightPoints: Interval[]\n  ) {\n    this.mid = mid;\n    this.left = left;\n    this.right = right;\n    this.leftPoints = leftPoints;\n    this.rightPoints = rightPoints;\n    this.count =\n      (left ? left.count : 0) + (right ? right.count : 0) + leftPoints.length;\n  }\n\n  intervals(result: Interval[]): Interval[] {\n    // eslint-disable-next-line prefer-spread\n    result.push.apply(result, this.leftPoints);\n    if (this.left) {\n      this.left.intervals(result);\n    }\n    if (this.right) {\n      this.right.intervals(result);\n    }\n    return result;\n  }\n\n  insert(interval: Interval): void {\n    const weight = this.count - this.leftPoints.length;\n    this.count += 1;\n    if (interval[1] < this.mid) {\n      if (this.left) {\n        if (4 * (this.left.count + 1) > 3 * (weight + 1)) {\n          rebuildWithInterval(this, interval);\n        } else {\n          this.left.insert(interval);\n        }\n      } else {\n        this.left = createIntervalTreeNode([interval]);\n      }\n    } else if (interval[0] > this.mid) {\n      if (this.right) {\n        if (4 * (this.right.count + 1) > 3 * (weight + 1)) {\n          rebuildWithInterval(this, interval);\n        } else {\n          this.right.insert(interval);\n        }\n      } else {\n        this.right = createIntervalTreeNode([interval]);\n      }\n    } else {\n      const l = bounds.ge(this.leftPoints, interval, compareBegin);\n      const r = bounds.ge(this.rightPoints, interval, compareEnd);\n      this.leftPoints.splice(l, 0, interval);\n      this.rightPoints.splice(r, 0, interval);\n    }\n  }\n\n  remove(interval: Interval): ResultCode {\n    // (Upstream subtracted the leftPoints array itself, which yields NaN and disabled rebalancing)\n    const weight = this.count - this.leftPoints.length;\n    if (interval[1] < this.mid) {\n      if (!this.left) {\n        return NOT_FOUND;\n      }\n      const rw = this.right ? this.right.count : 0;\n      if (4 * rw > 3 * (weight - 1)) {\n        return rebuildWithoutInterval(this, interval);\n      }\n      const r = this.left.remove(interval);\n      if (r === EMPTY) {\n        this.left = null;\n        this.count -= 1;\n        return SUCCESS;\n      } else if (r === SUCCESS) {\n        this.count -= 1;\n      }\n      return r;\n    } else if (interval[0] > this.mid) {\n      if (!this.right) {\n        return NOT_FOUND;\n      }\n      const lw = this.left ? this.left.count : 0;\n      if (4 * lw > 3 * (weight - 1)) {\n        return rebuildWithoutInterval(this, interval);\n      }\n      const r = this.right.remove(interval);\n      if (r === EMPTY) {\n        this.right = null;\n        this.count -= 1;\n        return SUCCESS;\n      } else if (r === SUCCESS) {\n        this.count -= 1;\n      }\n      return r;\n    } else {\n      if (this.count === 1) {\n        if (this.leftPoints[0] === interval) {\n          return EMPTY;\n        } else {\n          return NOT_FOUND;\n        }\n      }\n      if (this.leftPoints.length === 1 && this.leftPoints[0] === interval) {\n        if (this.left && this.right) {\n          // Upstream promoted the rightmost node of the left subtree into this node, which only adjusted the count\n          // of that node's parent, and could leave intervals of the left subtree that span the promoted node's mid point\n          // on the wrong side of it (where searches for them no longer reach); rebuild this subtree instead\n          return rebuildWithoutInterval(this, interval);\n        } else if (this.left) {\n          copy(this, this.left);\n        } else {\n          copy(this, this.right!);\n        }\n        return SUCCESS;\n      }\n      for (\n        let l = bounds.ge(this.leftPoints, interval, compareBegin);\n        l < this.leftPoints.length;\n        ++l\n      ) {\n        if (this.leftPoints[l][0] !== interval[0]) {\n          break;\n        }\n        if (this.leftPoints[l] === interval) {\n          this.count -= 1;\n          this.leftPoints.splice(l, 1);\n          for (\n            let r = bounds.ge(this.rightPoints, interval, compareEnd);\n            r < this.rightPoints.length;\n            ++r\n          ) {\n            if (this.rightPoints[r][1] !== interval[1]) {\n              break;\n            } else if (this.rightPoints[r] === interval) {\n              this.rightPoints.splice(r, 1);\n              return SUCCESS;\n            }\n          }\n        }\n      }\n      return NOT_FOUND;\n    }\n  }\n\n  queryPoint<T>(x: number, cb: (interval: Interval) => T): T | undefined {\n    if (x < this.mid) {\n      if (this.left) {\n        const r = this.left.queryPoint(x, cb);\n        if (r) {\n          return r;\n        }\n      }\n      return reportLeftRange(this.leftPoints, x, cb);\n    } else if (x > this.mid) {\n      if (this.right) {\n        const r = this.right.queryPoint(x, cb);\n        if (r) {\n          return r;\n        }\n      }\n      return reportRightRange(this.rightPoints, x, cb);\n    } else {\n      return reportRange(this.leftPoints, cb);\n    }\n  }\n\n  queryInterval<T>(\n    lo: number,\n    hi: number,\n    cb: (interval: Interval) => T\n  ): T | undefined {\n    if (lo < this.mid && this.left) {\n      const r = this.left.queryInterval(lo, hi, cb);\n      if (r) {\n        return r;\n      }\n    }\n    if (hi > this.mid && this.right) {\n      const r = this.right.queryInterval(lo, hi, cb);\n      if (r) {\n        return r;\n      }\n    }\n    if (hi < this.mid) {\n      return reportLeftRange(this.leftPoints, hi, cb);\n    } else if (lo > this.mid) {\n      return reportRightRange(this.rightPoints, lo, cb);\n    } else {\n      return reportRange(this.leftPoints, cb);\n    }\n  }\n}\n\nfunction copy(a: IntervalTreeNode, b: IntervalTreeNode) {\n  a.mid = b.mid;\n  a.left = b.left;\n  a.right = b.right;\n  a.leftPoints = b.leftPoints;\n  a.rightPoints = b.rightPoints;\n  a.count = b.count;\n}\n\nfunction rebuild(node: IntervalTreeNode, intervals: Interval[]) {\n  // Note: an empty list of intervals results in a null tree (and a TypeError); preserved as-is.\n  const ntree = createIntervalTreeNode(intervals)!;\n  node.mid = ntree.mid;\n  node.left = ntree.left;\n  node.right = ntree.right;\n  node.leftPoints = ntree.leftPoints;\n  node.rightPoints = ntree.rightPoints;\n  node.count = ntree.count;\n}\n\nfunction rebuildWithInterval(node: IntervalTreeNode, interval: Interval) {\n  const intervals = node.intervals([]);\n  intervals.push(interval);\n  rebuild(node, intervals);\n}\n\nfunction rebuildWithoutInterval(\n  node: IntervalTreeNode,\n  interval: Interval\n): ResultCode {\n  const intervals = node.intervals([]);\n  const idx = intervals.indexOf(interval);\n  if (idx < 0) {\n    return NOT_FOUND;\n  }\n  intervals.splice(idx, 1);\n  if (intervals.length === 0) {\n    return EMPTY;\n  }\n  rebuild(node, intervals);\n  return SUCCESS;\n}\n\nfunction reportLeftRange<T>(\n  arr: Interval[],\n  hi: number,\n  cb: (interval: Interval) => T\n): T | undefined {\n  for (let i = 0; i < arr.length && arr[i][0] <= hi; ++i) {\n    const r = cb(arr[i]);\n    if (r) {\n      return r;\n    }\n  }\n}\n\nfunction reportRightRange<T>(\n  arr: Interval[],\n  lo: number,\n  cb: (interval: Interval) => T\n): T | undefined {\n  for (let i = arr.length - 1; i >= 0 && arr[i][1] >= lo; --i) {\n    const r = cb(arr[i]);\n    if (r) {\n      return r;\n    }\n  }\n}\n\nfunction reportRange<T>(\n  arr: Interval[],\n  cb: (interval: Interval) => T\n): T | undefined {\n  for (let i = 0; i < arr.length; ++i) {\n    const r = cb(arr[i]);\n    if (r) {\n      return r;\n    }\n  }\n}\n\nfunction compareNumbers(a: number, b: number) {\n  return a - b;\n}\n\nfunction compareBegin(a: Interval, b: Interval) {\n  const d = a[0] - b[0];\n  if (d) {\n    return d;\n  }\n  return a[1] - b[1];\n}\n\nfunction compareEnd(a: Interval, b: Interval) {\n  const d = a[1] - b[1];\n  if (d) {\n    return d;\n  }\n  return a[0] - b[0];\n}\n\nfunction createIntervalTreeNode(\n  intervals: Interval[]\n): IntervalTreeNode | null {\n  if (intervals.length === 0) {\n    return null;\n  }\n  const pts: number[] = [];\n  for (let i = 0; i < intervals.length; ++i) {\n    pts.push(intervals[i][0], intervals[i][1]);\n  }\n  pts.sort(compareNumbers);\n\n  const mid = pts[pts.length >> 1];\n\n  const leftIntervals: Interval[] = [];\n  const rightIntervals: Interval[] = [];\n  const centerIntervals: Interval[] = [];\n  for (let i = 0; i < intervals.length; ++i) {\n    const s = intervals[i];\n    if (s[1] < mid) {\n      leftIntervals.push(s);\n    } else if (mid < s[0]) {\n      rightIntervals.push(s);\n    } else {\n      centerIntervals.push(s);\n    }\n  }\n\n  //Split center intervals\n  const leftPoints = centerIntervals;\n  const rightPoints = centerIntervals.slice();\n  leftPoints.sort(compareBegin);\n  rightPoints.sort(compareEnd);\n\n  return new IntervalTreeNode(\n    mid,\n    createIntervalTreeNode(leftIntervals),\n    createIntervalTreeNode(rightIntervals),\n    leftPoints,\n    rightPoints\n  );\n}\n\nexport type IntervalTree = {\n  /** Inserts an interval into the tree. */\n  insert(interval: Interval): void;\n\n  /**\n   * Removes an interval (by reference) from the tree.\n   * Returns true if the interval was found and removed.\n   */\n  remove(interval: Interval): boolean;\n\n  /**\n   * Visits every interval containing the point; stops early (and returns the value)\n   * if the callback returns a truthy value.\n   */\n  queryPoint<T>(p: number, cb: (interval: Interval) => T): T | undefined;\n\n  /**\n   * Visits every interval overlapping [lo, hi]; stops early (and returns the value)\n   * if the callback returns a truthy value.\n   */\n  queryInterval<T>(\n    lo: number,\n    hi: number,\n    cb: (interval: Interval) => T\n  ): T | undefined;\n\n  /** Number of intervals in the tree. */\n  readonly count: number;\n\n  /** A (new) list of every interval in the tree. */\n  readonly intervals: Interval[];\n};\n\n//User friendly wrapper that makes it possible to support empty trees\nclass IntervalTreeWrapper implements IntervalTree {\n  root: IntervalTreeNode | null;\n\n  constructor(root: IntervalTreeNode | null) {\n    this.root = root;\n  }\n\n  insert(interval: Interval): void {\n    if (this.root) {\n      this.root.insert(interval);\n    } else {\n      this.root = new IntervalTreeNode(\n        interval[0],\n        null,\n        null,\n        [interval],\n        [interval]\n      );\n    }\n  }\n\n  remove(interval: Interval): boolean {\n    if (this.root) {\n      const r = this.root.remove(interval);\n      if (r === EMPTY) {\n        this.root = null;\n      }\n      return r !== NOT_FOUND;\n    }\n    return false;\n  }\n\n  queryPoint<T>(p: number, cb: (interval: Interval) => T): T | undefined {\n    if (this.root) {\n      return this.root.queryPoint(p, cb);\n    }\n  }\n\n  queryInterval<T>(\n    lo: number,\n    hi: number,\n    cb: (interval: Interval) => T\n  ): T | undefined {\n    if (lo <= hi && this.root) {\n      return this.root.queryInterval(lo, hi, cb);\n    }\n  }\n\n  get count(): number {\n    if (this.root) {\n      return this.root.count;\n    }\n    return 0;\n  }\n\n  get intervals(): Interval[] {\n    if (this.root) {\n      return this.root.intervals([]);\n    }\n    return [];\n  }\n}\n\nexport function createIntervalTree(intervals?: Interval[]): IntervalTree {\n  if (!intervals || intervals.length === 0) {\n    return new IntervalTreeWrapper(null);\n  }\n  return new IntervalTreeWrapper(createIntervalTreeNode(intervals));\n}\n","import { createIntervalTree } from \"../../vendor/intervalTree\";\n\ntype RenderCallback = (index: number, left: number, top: number) => void;\n\n// Position cache requirements:\n//   O(log(n)) lookup of cells to render for a given viewport size\n//   O(1) lookup of shortest measured column (so we know when to enter phase 1)\nexport class PositionCache {\n  // Tracks the height of each column\n  _columnSizeMap: { [x: number]: number } = {};\n\n  // Store tops and bottoms of each cell for fast intersection lookup.\n  _intervalTree = createIntervalTree();\n\n  // Maps cell index to x coordinates for quick lookup.\n  _leftMap: { [index: number]: number } = {};\n\n  // Maps cell index to the y coordinate of its bottom edge.\n  _bottomMap: { [index: number]: number } = {};\n\n  estimateTotalHeight(\n    cellCount: number,\n    columnCount: number,\n    defaultCellHeight: number\n  ): number {\n    const unmeasuredCellCount = cellCount - this.count;\n    if (unmeasuredCellCount < 0) {\n      // Some of the cached cells have since been removed (cellCount shrank);\n      // only the remaining cells (all of which have been positioned) contribute to the height.\n      let size = 0;\n      for (let index = 0; index < cellCount; index++) {\n        const bottom = this._bottomMap[index];\n        if (bottom !== undefined && bottom > size) {\n          size = bottom;\n        }\n      }\n      return size;\n    }\n\n    return (\n      this.tallestColumnSize +\n      Math.ceil(unmeasuredCellCount / columnCount) * defaultCellHeight\n    );\n  }\n\n  // Render all cells visible within the viewport range defined.\n  range(\n    scrollTop: number,\n    clientHeight: number,\n    renderCallback: RenderCallback\n  ): void {\n    this._intervalTree.queryInterval(\n      scrollTop,\n      scrollTop + clientHeight,\n      ([top, , index]) =>\n        renderCallback(index as number, this._leftMap[index as number], top)\n    );\n  }\n\n  setPosition(index: number, left: number, top: number, height: number): void {\n    this._intervalTree.insert([top, top + height, index]);\n    this._leftMap[index] = left;\n    this._bottomMap[index] = top + height;\n\n    const columnSizeMap = this._columnSizeMap;\n    const columnHeight = columnSizeMap[left];\n    if (columnHeight === undefined) {\n      columnSizeMap[left] = top + height;\n    } else {\n      columnSizeMap[left] = Math.max(columnHeight, top + height);\n    }\n  }\n\n  get count(): number {\n    return this._intervalTree.count;\n  }\n\n  get shortestColumnSize(): number {\n    const columnSizeMap = this._columnSizeMap;\n\n    let size = Infinity;\n\n    for (const i in columnSizeMap) {\n      const height = columnSizeMap[i as unknown as number];\n      size = Math.min(size, height);\n    }\n\n    return size === Infinity ? 0 : size;\n  }\n\n  get tallestColumnSize(): number {\n    const columnSizeMap = this._columnSizeMap;\n\n    let size = 0;\n\n    for (const i in columnSizeMap) {\n      const height = columnSizeMap[i as unknown as number];\n      size = Math.max(size, height);\n    }\n\n    return size;\n  }\n}\n","import clsx from \"clsx\";\nimport {\n  forwardRef,\n  memo,\n  useEffect,\n  useImperativeHandle,\n  useInsertionEffect,\n  useReducer,\n  useState,\n  type Dispatch,\n  type ReactNode,\n  type SetStateAction,\n  type UIEvent\n} from \"react\";\nimport {\n  cancelAnimationTimeout,\n  requestAnimationTimeout,\n  type AnimationTimeoutId\n} from \"../../utils/requestAnimationTimeout\";\nimport { useIsomorphicLayoutEffect } from \"../../utils/useIsomorphicLayoutEffect\";\nimport type { ScrollElementLinkTarget } from \"../../utils/scrollElement/types\";\nimport { useMissingHeightWarning } from \"../../utils/scrollElement/useMissingHeightWarning\";\nimport { useScrollElementLink } from \"../../utils/scrollElement/useScrollElementLink\";\nimport { defaultMasonryProps } from \"./defaultMasonryProps\";\nimport { PositionCache } from \"./PositionCache\";\nimport type {\n  MasonryCellMeasurerCache,\n  MasonryImperativeAPI,\n  MasonryProps,\n  Positioner\n} from \"./types\";\n\ntype State = {\n  isScrolling: boolean;\n\n  // Scroll offset of the Masonry's own scrolling container\n  scrollTop: number;\n\n  // The viewport of the scroll element the Masonry is linked to (its scrollElement prop; see useScrollElementLink), or null if not linked.\n  // While linked, the Masonry renders at its full height and is scrolled by the scroll element.\n  linkedViewport: LinkedViewport | null;\n};\n\ntype LinkedViewport = {\n  // Height of the scroll element's viewport\n  height: number;\n  // Scroll offset of the scroll element, relative to the top of the Masonry (and at least 0)\n  scrollTop: number;\n};\n\n// Values from the most recently committed render, used by the (stable) imperative handle and event handlers\ntype LatestValues = {\n  cellCount: number;\n  cellMeasurerCache: MasonryCellMeasurerCache;\n  cellPositioner: Positioner;\n  height: number;\n  scrollingResetTimeInterval: number;\n  width: number;\n};\n\ntype MasonryInternals = {\n  debounceResetIsScrollingId: AnimationTimeoutId | null;\n  element: HTMLDivElement | null;\n  invalidateOnUpdateStartIndex: number | null;\n  invalidateOnUpdateStopIndex: number | null;\n  latest: LatestValues;\n  // Mirrors State.linkedViewport (updated by the link target methods, during commit or event handlers)\n  linkedViewport: LinkedViewport | null;\n  onScrollMemoized: number | undefined;\n  positionCache: PositionCache;\n  startIndexMemoized: number | null;\n  stopIndexMemoized: number | null | undefined;\n};\n\ntype MasonryInstance = {\n  handle: MasonryImperativeAPI;\n  linkTarget: ScrollElementLinkTarget;\n  internals: MasonryInternals;\n  onScroll: (event: UIEvent<HTMLDivElement>) => void;\n  setElementRef: (element: HTMLDivElement | null) => void;\n};\n\nconst increment = (value: number) => value + 1;\n\n/**\n * This component efficiently displays arbitrarily positioned cells using windowing techniques.\n * Cell position is determined by an injected `cellPositioner` property.\n * Windowing is vertical; this component does not support horizontal scrolling.\n *\n * Rendering occurs in two phases:\n * 1) First pass uses estimated cell sizes (provided by the cache) to determine how many cells to measure in a batch.\n *    Batch size is chosen using a fast, naive layout algorithm that stacks images in order until the viewport has been filled.\n *    After measurement is complete (once the render has been committed) this component evaluates positioned cells\n *    in order to determine if another measurement pass is required (eg if actual cell sizes were less than estimated sizes).\n *    All measurements are permanently cached (keyed by `keyMapper`) for performance purposes.\n * 2) Second pass uses the external `cellPositioner` to layout cells.\n *    At this time the positioner has access to cached size measurements for all cells.\n *    The positions it returns are cached by Masonry for fast access later.\n *    Phase one is repeated if the user scrolls beyond the current layout's bounds.\n *    If the layout is invalidated due to eg a resize, cached positions can be cleared using `recomputeCellPositions()`.\n *\n * Animation constraints:\n *   Simple animations are supported (eg translate/slide into place on initial reveal).\n *   More complex animations are not (eg flying from one position to another on resize).\n *\n * Layout constraints:\n *   This component supports multi-column layout.\n *   The height of each item may vary.\n *   The width of each item must not exceed the width of the column it is \"in\".\n *   The left position of all items within a column must align.\n *   (Items may not span multiple columns.)\n */\nexport const Masonry = /* @__PURE__ */ memo(\n  /* @__PURE__ */ forwardRef<MasonryImperativeAPI, MasonryProps>(\n    function Masonry(props, ref) {\n      const {\n        \"aria-label\": ariaLabel,\n        cellCount,\n        cellMeasurerCache,\n        cellPositioner,\n        cellRenderer,\n        className,\n        height: heightProp,\n        id,\n        keyMapper = defaultMasonryProps.keyMapper,\n        onCellsRendered = defaultMasonryProps.onCellsRendered,\n        onScroll = defaultMasonryProps.onScroll,\n        overscanByPixels = defaultMasonryProps.overscanByPixels,\n        role = defaultMasonryProps.role,\n        rowDirection = defaultMasonryProps.rowDirection,\n        scrollElement,\n        scrollingResetTimeInterval = defaultMasonryProps.scrollingResetTimeInterval,\n        style = defaultMasonryProps.style,\n        tabIndex = defaultMasonryProps.tabIndex,\n        width\n      } = props;\n\n      const [state, setState] = useState<State>(() => ({\n        isScrolling: false,\n        linkedViewport: null,\n        scrollTop: 0\n      }));\n      const [, forceUpdate] = useReducer(increment, 0);\n\n      // A Masonry with a scrollElement is scrolled by that element (e.g. the window) rather than scrolling itself:\n      // it renders at its full height, and renders the cells within the scroll element's viewport.\n      // Until the scroll element has been measured (e.g. during server rendering), the height prop is used as the viewport height.\n      const linked = scrollElement !== undefined;\n      const { linkedViewport } = state;\n      const height =\n        linkedViewport !== null ? linkedViewport.height : (heightProp ?? 0);\n\n      // The instance (and its stable imperative handle) is created once\n      const [\n        {\n          handle,\n          internals,\n          linkTarget,\n          onScroll: onScrollEvent,\n          setElementRef\n        }\n      ] = useState(() =>\n        createMasonryInstance(\n          {\n            cellCount,\n            cellMeasurerCache,\n            cellPositioner,\n            height,\n            scrollingResetTimeInterval,\n            width\n          },\n          setState,\n          forceUpdate\n        )\n      );\n\n      useImperativeHandle(ref, () => handle, [handle]);\n\n      useMissingHeightWarning(\"Masonry\", heightProp, scrollElement);\n\n      useScrollElementLink(\n        scrollElement,\n        linkTarget,\n        scrollingResetTimeInterval\n      );\n\n      const latest: LatestValues = {\n        cellCount,\n        cellMeasurerCache,\n        cellPositioner,\n        height,\n        scrollingResetTimeInterval,\n        width\n      };\n      useInsertionEffect(() => {\n        internals.latest = latest;\n      });\n\n      const { isScrolling } = state;\n      const scrollTop = linked\n        ? (linkedViewport?.scrollTop ?? 0)\n        : state.scrollTop;\n\n      const positionCache = internals.positionCache;\n\n      const children: ReactNode[] = [];\n\n      const estimatedTotalHeight = getEstimatedTotalHeight(\n        positionCache,\n        cellCount,\n        cellMeasurerCache,\n        width\n      );\n\n      const shortestColumnSize = positionCache.shortestColumnSize;\n      const measuredCellCount = positionCache.count;\n\n      let startIndex = 0;\n      let stopIndex: number | undefined;\n\n      positionCache.range(\n        Math.max(0, scrollTop - overscanByPixels),\n        height + overscanByPixels * 2,\n        (index: number, left: number, top: number) => {\n          // The position cache may contain cells that have since been removed (cellCount shrank)\n          if (index >= cellCount) {\n            return;\n          }\n\n          if (typeof stopIndex === \"undefined\") {\n            startIndex = index;\n            stopIndex = index;\n          } else {\n            startIndex = Math.min(startIndex, index);\n            stopIndex = Math.max(stopIndex, index);\n          }\n\n          children.push(\n            cellRenderer({\n              index,\n              isScrolling,\n              key: keyMapper(index),\n              parent: handle,\n              style: {\n                height: cellMeasurerCache.getHeight(index),\n                [rowDirection === \"ltr\" ? \"left\" : \"right\"]: left,\n                position: \"absolute\",\n                top,\n                width: cellMeasurerCache.getWidth(index)\n              }\n            })\n          );\n        }\n      );\n\n      // We need to measure additional cells for this layout\n      if (\n        shortestColumnSize < scrollTop + height + overscanByPixels &&\n        measuredCellCount < cellCount\n      ) {\n        const batchSize = Math.min(\n          cellCount - measuredCellCount,\n          Math.ceil(\n            (((scrollTop + height + overscanByPixels - shortestColumnSize) /\n              cellMeasurerCache.defaultHeight) *\n              width) /\n              cellMeasurerCache.defaultWidth\n          )\n        );\n\n        for (\n          let index = measuredCellCount;\n          index < measuredCellCount + batchSize;\n          index++\n        ) {\n          stopIndex = index;\n\n          children.push(\n            cellRenderer({\n              index: index,\n              isScrolling,\n              key: keyMapper(index),\n              parent: handle,\n              style: {\n                width: cellMeasurerCache.getWidth(index)\n              }\n            })\n          );\n        }\n      }\n\n      // Equivalent of the 9.x componentDidMount/componentDidUpdate\n      useIsomorphicLayoutEffect(() => {\n        // Query external layout logic for position of newly-measured cells\n        if (typeof internals.invalidateOnUpdateStartIndex === \"number\") {\n          const invalidateStartIndex = internals.invalidateOnUpdateStartIndex;\n          const invalidateStopIndex = internals.invalidateOnUpdateStopIndex!;\n\n          internals.invalidateOnUpdateStartIndex = null;\n          internals.invalidateOnUpdateStopIndex = null;\n\n          populatePositionCache(\n            internals.positionCache,\n            cellMeasurerCache,\n            cellPositioner,\n            invalidateStartIndex,\n            invalidateStopIndex\n          );\n\n          forceUpdate();\n        }\n\n        if (internals.onScrollMemoized !== scrollTop) {\n          internals.onScrollMemoized = scrollTop;\n\n          if (onScroll) {\n            onScroll({\n              clientHeight: height,\n              scrollHeight: getEstimatedTotalHeight(\n                internals.positionCache,\n                cellCount,\n                cellMeasurerCache,\n                width\n              ),\n              scrollTop\n            });\n          }\n        }\n\n        if (\n          internals.startIndexMemoized !== startIndex ||\n          internals.stopIndexMemoized !== stopIndex\n        ) {\n          internals.startIndexMemoized = startIndex;\n          internals.stopIndexMemoized = stopIndex;\n\n          if (onCellsRendered) {\n            onCellsRendered({ startIndex, stopIndex });\n          }\n        }\n      });\n\n      useEffect(\n        () => () => {\n          if (internals.debounceResetIsScrollingId) {\n            cancelAnimationTimeout(internals.debounceResetIsScrollingId);\n            internals.debounceResetIsScrollingId = null;\n          }\n        },\n        [internals]\n      );\n\n      return (\n        <div\n          aria-label={ariaLabel}\n          className={clsx(\"ReactVirtualized__Masonry\", className)}\n          id={id ?? undefined}\n          onScroll={onScrollEvent}\n          ref={setElementRef}\n          role={role}\n          style={{\n            boxSizing: \"border-box\",\n            direction: \"ltr\",\n            // A linked Masonry renders at its full height (it doesn't scroll itself)\n            height: linked ? \"auto\" : height,\n            overflowX: \"hidden\",\n            overflowY: estimatedTotalHeight < height ? \"hidden\" : \"auto\",\n            position: \"relative\",\n            width,\n            WebkitOverflowScrolling: \"touch\",\n            willChange: \"transform\",\n            ...style\n          }}\n          tabIndex={tabIndex}\n        >\n          <div\n            className=\"ReactVirtualized__Masonry__innerScrollContainer\"\n            style={{\n              width: \"100%\",\n              height: estimatedTotalHeight,\n              maxWidth: \"100%\",\n              maxHeight: estimatedTotalHeight,\n              overflow: \"hidden\",\n              pointerEvents: isScrolling ? \"none\" : (\"\" as \"auto\"),\n              position: \"relative\"\n            }}\n          >\n            {children}\n          </div>\n        </div>\n      );\n    }\n  )\n);\n\nfunction getEstimatedTotalHeight(\n  positionCache: PositionCache,\n  cellCount: number,\n  cellMeasurerCache: MasonryCellMeasurerCache,\n  width: number\n) {\n  const estimatedColumnCount = Math.max(\n    1,\n    Math.floor(width / cellMeasurerCache.defaultWidth)\n  );\n\n  return positionCache.estimateTotalHeight(\n    cellCount,\n    estimatedColumnCount,\n    cellMeasurerCache.defaultHeight\n  );\n}\n\nfunction populatePositionCache(\n  positionCache: PositionCache,\n  cellMeasurerCache: MasonryCellMeasurerCache,\n  cellPositioner: Positioner,\n  startIndex: number,\n  stopIndex: number\n) {\n  for (let index = startIndex; index <= stopIndex; index++) {\n    const { left, top } = cellPositioner(index);\n\n    positionCache.setPosition(\n      index,\n      left,\n      top,\n      cellMeasurerCache.getHeight(index)\n    );\n  }\n}\n\n// Creates the (stable) imperative handle of a Masonry, its scroll event handler and its mutable internals.\nfunction createMasonryInstance(\n  initialValues: LatestValues,\n  setState: Dispatch<SetStateAction<State>>,\n  forceUpdate: () => void\n): MasonryInstance {\n  const internals: MasonryInternals = {\n    debounceResetIsScrollingId: null,\n    element: null,\n    invalidateOnUpdateStartIndex: null,\n    invalidateOnUpdateStopIndex: null,\n    latest: initialValues,\n    linkedViewport: null,\n    onScrollMemoized: undefined,\n    positionCache: new PositionCache(),\n    startIndexMemoized: null,\n    stopIndexMemoized: null\n  };\n\n  const debounceResetIsScrollingCallback = () => {\n    internals.debounceResetIsScrollingId = null;\n\n    setState((prevState) =>\n      prevState.isScrolling ? { ...prevState, isScrolling: false } : prevState\n    );\n  };\n\n  const debounceResetIsScrolling = () => {\n    if (internals.debounceResetIsScrollingId) {\n      cancelAnimationTimeout(internals.debounceResetIsScrollingId);\n    }\n\n    internals.debounceResetIsScrollingId = requestAnimationTimeout(\n      debounceResetIsScrollingCallback,\n      internals.latest.scrollingResetTimeInterval\n    );\n  };\n\n  const onScroll = (event: UIEvent<HTMLDivElement>) => {\n    const { cellCount, cellMeasurerCache, height, width } = internals.latest;\n\n    const eventScrollTop = event.currentTarget.scrollTop;\n\n    // When this component is shrunk drastically, React dispatches a series of back-to-back scroll events,\n    // Gradually converging on a scrollTop that is within the bounds of the new, smaller height.\n    // This causes a series of rapid renders that is slow for long lists.\n    // We can avoid that by doing some simple bounds checking to ensure that scroll offsets never exceed their bounds.\n    const scrollTop = Math.min(\n      Math.max(\n        0,\n        getEstimatedTotalHeight(\n          internals.positionCache,\n          cellCount,\n          cellMeasurerCache,\n          width\n        ) - height\n      ),\n      eventScrollTop\n    );\n\n    // On iOS, we can arrive at negative offsets by swiping past the start or end.\n    // Avoid re-rendering in this case as it can cause problems; see #532 for more.\n    if (eventScrollTop !== scrollTop) {\n      return;\n    }\n\n    // Prevent pointer events from interrupting a smooth scroll\n    debounceResetIsScrolling();\n\n    // Certain devices (like Apple touchpad) rapid-fire duplicate events.\n    // Don't force a re-render if this is the case.\n    setState((prevState) =>\n      prevState.scrollTop !== scrollTop\n        ? { ...prevState, isScrolling: true, scrollTop }\n        : prevState\n    );\n  };\n\n  // Linked to the Masonry's scroll element (if it has one) by useScrollElementLink.\n  // (A Masonry has no scroll methods, so the link source isn't used.)\n  const linkTarget: ScrollElementLinkTarget = {\n    getElement() {\n      return internals.element;\n    },\n\n    link(source, viewport) {\n      const linkedViewport =\n        source !== null\n          ? {\n              height: viewport.height,\n              scrollTop: Math.max(0, viewport.scrollTop)\n            }\n          : null;\n      internals.linkedViewport = linkedViewport;\n      setState((prevState) => ({ ...prevState, linkedViewport }));\n    },\n\n    setViewport(viewport) {\n      const prevViewport = internals.linkedViewport;\n      if (prevViewport === null) {\n        return;\n      }\n\n      const linkedViewport = {\n        height: viewport.height,\n        scrollTop: Math.max(0, viewport.scrollTop)\n      };\n      if (\n        linkedViewport.height === prevViewport.height &&\n        linkedViewport.scrollTop === prevViewport.scrollTop\n      ) {\n        return;\n      }\n      internals.linkedViewport = linkedViewport;\n\n      // A change of the scroll offset marks the Masonry as scrolling (like a scroll event of its own container would)\n      const scrolled = linkedViewport.scrollTop !== prevViewport.scrollTop;\n      if (scrolled) {\n        debounceResetIsScrolling();\n      }\n      setState((prevState) => ({\n        ...prevState,\n        isScrolling: prevState.isScrolling || scrolled,\n        linkedViewport\n      }));\n    }\n  };\n\n  const handle: MasonryImperativeAPI = {\n    clearCellPositions() {\n      internals.positionCache = new PositionCache();\n      forceUpdate();\n    },\n\n    forceUpdate() {\n      forceUpdate();\n    },\n\n    // HACK This method signature was intended for Grid\n    invalidateCellSizeAfterRender({ rowIndex: index }) {\n      if (internals.invalidateOnUpdateStartIndex === null) {\n        internals.invalidateOnUpdateStartIndex = index;\n        internals.invalidateOnUpdateStopIndex = index;\n      } else {\n        internals.invalidateOnUpdateStartIndex = Math.min(\n          internals.invalidateOnUpdateStartIndex,\n          index\n        );\n        internals.invalidateOnUpdateStopIndex = Math.max(\n          internals.invalidateOnUpdateStopIndex!,\n          index\n        );\n      }\n\n      // The invalidated cells are positioned once the (next) render has been committed.\n      // (Within a commit this re-render is batched with the one the layout effect schedules.)\n      forceUpdate();\n    },\n\n    recomputeCellPositions() {\n      const { cellCount, cellMeasurerCache, cellPositioner } = internals.latest;\n\n      // Don't re-populate positions for cells that have been removed (cellCount shrank)\n      const stopIndex = Math.min(internals.positionCache.count, cellCount) - 1;\n\n      const positionCache = new PositionCache();\n      populatePositionCache(\n        positionCache,\n        cellMeasurerCache,\n        cellPositioner,\n        0,\n        stopIndex\n      );\n      internals.positionCache = positionCache;\n\n      forceUpdate();\n    },\n\n    recomputeGridSize() {\n      forceUpdate();\n    }\n  };\n\n  const setElementRef = (element: HTMLDivElement | null) => {\n    internals.element = element;\n  };\n\n  return { handle, internals, linkTarget, onScroll, setElementRef };\n}\n","import type { MultiGridProps } from \"./types\";\n\ntype DefaultedPropKeys =\n  | \"classNameBottomLeftGrid\"\n  | \"classNameBottomRightGrid\"\n  | \"classNameTopLeftGrid\"\n  | \"classNameTopRightGrid\"\n  | \"enableFixedColumnScroll\"\n  | \"enableFixedRowScroll\"\n  | \"fixedColumnCount\"\n  | \"fixedRowCount\"\n  | \"hideBottomLeftGridScrollbar\"\n  | \"hideTopRightGridScrollbar\"\n  | \"style\"\n  | \"styleBottomLeftGrid\"\n  | \"styleBottomRightGrid\"\n  | \"styleTopLeftGrid\"\n  | \"styleTopRightGrid\";\n\n/**\n * Default values for `MultiGrid`'s optional props.\n * (Props that are relayed to the inner `Grid`s default to the values in `defaultGridProps`.)\n */\nexport const defaultMultiGridProps: Readonly<\n  Required<Pick<MultiGridProps, DefaultedPropKeys>>\n> = /* @__PURE__ */ Object.freeze({\n  classNameBottomLeftGrid: \"\",\n  classNameBottomRightGrid: \"\",\n  classNameTopLeftGrid: \"\",\n  classNameTopRightGrid: \"\",\n  enableFixedColumnScroll: false,\n  enableFixedRowScroll: false,\n  fixedColumnCount: 0,\n  fixedRowCount: 0,\n  hideBottomLeftGridScrollbar: false,\n  hideTopRightGridScrollbar: false,\n  style: /* @__PURE__ */ Object.freeze({}),\n  styleBottomLeftGrid: /* @__PURE__ */ Object.freeze({}),\n  styleBottomRightGrid: /* @__PURE__ */ Object.freeze({}),\n  styleTopLeftGrid: /* @__PURE__ */ Object.freeze({}),\n  styleTopRightGrid: /* @__PURE__ */ Object.freeze({})\n});\n","import type { CellMeasurerCache } from \"../CellMeasurer/CellMeasurerCache\";\nimport type { CellMeasureCache } from \"../CellMeasurer/types\";\n\ntype CellMeasurerCacheDecoratorParams = {\n  cellMeasurerCache: CellMeasurerCache;\n  columnIndexOffset?: number;\n  rowIndexOffset?: number;\n};\n\ntype IndexParam = {\n  index: number;\n};\n\n/**\n * Caches measurements for a given cell.\n */\nexport class CellMeasurerCacheDecorator implements CellMeasureCache {\n  _cellMeasurerCache: CellMeasurerCache;\n  _columnIndexOffset: number;\n  _rowIndexOffset: number;\n\n  constructor(\n    params: CellMeasurerCacheDecoratorParams = {} as CellMeasurerCacheDecoratorParams\n  ) {\n    const {\n      cellMeasurerCache,\n      columnIndexOffset = 0,\n      rowIndexOffset = 0\n    } = params;\n\n    this._cellMeasurerCache = cellMeasurerCache;\n    this._columnIndexOffset = columnIndexOffset;\n    this._rowIndexOffset = rowIndexOffset;\n  }\n\n  clear(rowIndex: number, columnIndex: number): void {\n    this._cellMeasurerCache.clear(\n      rowIndex + this._rowIndexOffset,\n      columnIndex + this._columnIndexOffset\n    );\n  }\n\n  clearAll(): void {\n    this._cellMeasurerCache.clearAll();\n  }\n\n  columnWidth = ({ index }: IndexParam): number => {\n    return this._cellMeasurerCache.columnWidth({\n      index: index + this._columnIndexOffset\n    });\n  };\n\n  get defaultHeight(): number {\n    return this._cellMeasurerCache.defaultHeight;\n  }\n\n  get defaultWidth(): number {\n    return this._cellMeasurerCache.defaultWidth;\n  }\n\n  hasFixedHeight(): boolean {\n    return this._cellMeasurerCache.hasFixedHeight();\n  }\n\n  hasFixedWidth(): boolean {\n    return this._cellMeasurerCache.hasFixedWidth();\n  }\n\n  getHeight(rowIndex: number, columnIndex: number = 0): number {\n    return this._cellMeasurerCache.getHeight(\n      rowIndex + this._rowIndexOffset,\n      columnIndex + this._columnIndexOffset\n    );\n  }\n\n  getWidth(rowIndex: number, columnIndex: number = 0): number {\n    return this._cellMeasurerCache.getWidth(\n      rowIndex + this._rowIndexOffset,\n      columnIndex + this._columnIndexOffset\n    );\n  }\n\n  has(rowIndex: number, columnIndex: number = 0): boolean {\n    return this._cellMeasurerCache.has(\n      rowIndex + this._rowIndexOffset,\n      columnIndex + this._columnIndexOffset\n    );\n  }\n\n  rowHeight = ({ index }: IndexParam): number => {\n    return this._cellMeasurerCache.rowHeight({\n      index: index + this._rowIndexOffset\n    });\n  };\n\n  set(\n    rowIndex: number,\n    columnIndex: number,\n    width: number,\n    height: number\n  ): void {\n    this._cellMeasurerCache.set(\n      rowIndex + this._rowIndexOffset,\n      columnIndex + this._columnIndexOffset,\n      width,\n      height\n    );\n  }\n}\n","import {\n  forwardRef,\n  memo,\n  useCallback,\n  useImperativeHandle,\n  useInsertionEffect,\n  useMemo,\n  useReducer,\n  useState,\n  type CSSProperties,\n  type Dispatch,\n  type SetStateAction\n} from \"react\";\nimport { useIsomorphicLayoutEffect } from \"../../utils/useIsomorphicLayoutEffect\";\nimport type { CellMeasurerCache } from \"../CellMeasurer/CellMeasurerCache\";\nimport type { CellMeasureCache } from \"../CellMeasurer/types\";\nimport { Grid } from \"../Grid/Grid\";\nimport type {\n  CellRendererParams,\n  CellSize,\n  GridImperativeAPI,\n  Scroll,\n  ScrollbarPresenceChange\n} from \"../Grid/types\";\nimport { CellMeasurerCacheDecorator } from \"./CellMeasurerCacheDecorator\";\nimport { defaultMultiGridProps } from \"./defaultMultiGridProps\";\nimport type { MultiGridImperativeAPI, MultiGridProps } from \"./types\";\n\nconst SCROLLBAR_SIZE_BUFFER = 20;\n\ntype ScrollInfo = Pick<Scroll, \"scrollLeft\" | \"scrollTop\">;\n\n// Scrollbars of the bottom-right Grid (as reported by its onScrollbarPresenceChange)\ntype ScrollbarState = {\n  scrollbarSize: number;\n  showHorizontalScrollbar: boolean;\n  showVerticalScrollbar: boolean;\n};\n\nconst INITIAL_SCROLLBAR_STATE: ScrollbarState = {\n  scrollbarSize: 0,\n  showHorizontalScrollbar: false,\n  showVerticalScrollbar: false\n};\n\n// Props read by the imperative methods and the inner Grids' callbacks.\n// They are updated in an insertion effect, so they are current when these are called during the commit phase\n// (e.g. by a CellMeasurer cell or an inner Grid, whose effects run before the MultiGrid's own layout effects).\ntype LatestValues = Pick<\n  MultiGridProps,\n  \"onScroll\" | \"onScrollbarPresenceChange\"\n> & {\n  fixedColumnCount: number;\n  fixedRowCount: number;\n};\n\n// Mutable, per-instance values (the equivalent of the instance fields of the 9.x class component).\n// They are only modified by the imperative methods, the inner Grids' callbacks and effects (never during render).\ntype MultiGridInternals = {\n  bottomLeftGrid: GridImperativeAPI | null;\n  bottomRightGrid: GridImperativeAPI | null;\n  topLeftGrid: GridImperativeAPI | null;\n  topRightGrid: GridImperativeAPI | null;\n\n  // Cell sizes of the most recently committed render (to detect numeric size changes)\n  committedSizes: { columnWidth: CellSize; rowHeight: CellSize } | null;\n\n  deferredInvalidateColumnIndex: number | null;\n  deferredInvalidateRowIndex: number | null;\n\n  latest: LatestValues;\n\n  // The most recently requested scrollbar state (including an update that has not been rendered yet)\n  scrollbarState: ScrollbarState;\n\n  // The scroll offsets the quadrants are kept in sync with: the bottom-right Grid's offsets\n  // (or the top-right/bottom-left Grid's, if those are scrolled by the user; see enableFixedRowScroll/enableFixedColumnScroll).\n  // These are updated by scroll events, so they aren't state: changing them doesn't re-render MultiGrid itself;\n  // the quadrants are scrolled through their imperative handles instead.\n  scrollLeft: number;\n  scrollTop: number;\n};\n\ntype MultiGridInstance = {\n  handle: MultiGridImperativeAPI;\n  internals: MultiGridInternals;\n  onCommit: (columnWidth: CellSize, rowHeight: CellSize) => void;\n  onScroll: (scrollInfo: ScrollInfo) => void;\n  onScrollbarPresenceChange: (params: ScrollbarPresenceChange) => void;\n  onScrollLeft: (scrollInfo: ScrollInfo) => void;\n  onScrollTop: (scrollInfo: ScrollInfo) => void;\n  setBottomLeftGrid: (grid: GridImperativeAPI | null) => void;\n  setBottomRightGrid: (grid: GridImperativeAPI | null) => void;\n  setTopLeftGrid: (grid: GridImperativeAPI | null) => void;\n  setTopRightGrid: (grid: GridImperativeAPI | null) => void;\n};\n\nconst increment = (value: number) => value + 1;\n\nfunction isNumericSizeChange(prevSize: CellSize, nextSize: CellSize) {\n  // Function sizes aren't compared (inline functions would cause infinite loops);\n  // in that case the recompute methods should be used to inform of changes (as with Grid).\n  return (\n    (typeof prevSize === \"number\" || typeof nextSize === \"number\") &&\n    prevSize !== nextSize\n  );\n}\n\n// Total size of the first `count` columns (or rows)\nfunction getFixedCellsSize(size: CellSize, count: number): number {\n  if (typeof size === \"function\") {\n    let total = 0;\n    for (let index = 0; index < count; index++) {\n      total += size({ index });\n    }\n    return total;\n  }\n  return size * count;\n}\n\nfunction createMultiGridInstance(\n  initialLatest: LatestValues,\n  setScrollbarState: Dispatch<SetStateAction<ScrollbarState>>,\n  forceUpdate: () => void\n): MultiGridInstance {\n  const internals: MultiGridInternals = {\n    bottomLeftGrid: null,\n    bottomRightGrid: null,\n    topLeftGrid: null,\n    topRightGrid: null,\n    committedSizes: null,\n    deferredInvalidateColumnIndex: null,\n    deferredInvalidateRowIndex: null,\n    latest: initialLatest,\n    scrollbarState: INITIAL_SCROLLBAR_STATE,\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n\n  // Calls recomputeGridSize() on all child Grids (adjusting the indices for the fixed rows and columns)\n  const recomputeGrids = (columnIndex: number, rowIndex: number) => {\n    const { fixedColumnCount, fixedRowCount } = internals.latest;\n\n    const adjustedColumnIndex = Math.max(0, columnIndex - fixedColumnCount);\n    const adjustedRowIndex = Math.max(0, rowIndex - fixedRowCount);\n\n    internals.bottomLeftGrid?.recomputeGridSize({\n      columnIndex,\n      rowIndex: adjustedRowIndex\n    });\n    internals.bottomRightGrid?.recomputeGridSize({\n      columnIndex: adjustedColumnIndex,\n      rowIndex: adjustedRowIndex\n    });\n    internals.topLeftGrid?.recomputeGridSize({\n      columnIndex,\n      rowIndex\n    });\n    internals.topRightGrid?.recomputeGridSize({\n      columnIndex: adjustedColumnIndex,\n      rowIndex\n    });\n  };\n\n  // Scrolls the fixed Grids to the current scroll offsets (horizontally for the top-right Grid, vertically for the bottom-left Grid).\n  // Grid's scrollToPosition() is a no-op for a Grid that is already there.\n  // (The bottom-right Grid is not scrolled here: it reports its own offsets, and may have a pending scroll, e.g. to keep a cell in view.)\n  const syncFixedGridScrollPositions = () => {\n    const { scrollLeft, scrollTop } = internals;\n\n    internals.topRightGrid?.scrollToPosition({ scrollLeft });\n    internals.bottomLeftGrid?.scrollToPosition({ scrollTop });\n  };\n\n  const handle: MultiGridImperativeAPI = {\n    forceUpdateGrids() {\n      internals.bottomLeftGrid?.forceUpdate();\n      internals.bottomRightGrid?.forceUpdate();\n      internals.topLeftGrid?.forceUpdate();\n      internals.topRightGrid?.forceUpdate();\n    },\n\n    invalidateCellSizeAfterRender({ columnIndex = 0, rowIndex = 0 } = {}) {\n      internals.deferredInvalidateColumnIndex =\n        typeof internals.deferredInvalidateColumnIndex === \"number\"\n          ? Math.min(internals.deferredInvalidateColumnIndex, columnIndex)\n          : columnIndex;\n      internals.deferredInvalidateRowIndex =\n        typeof internals.deferredInvalidateRowIndex === \"number\"\n          ? Math.min(internals.deferredInvalidateRowIndex, rowIndex)\n          : rowIndex;\n\n      // The invalidated sizes are recomputed after the MultiGrid's next commit (see onCommit).\n      // The cell may have been rendered by an inner Grid alone (e.g. while scrolling), so schedule a MultiGrid update.\n      // (This is called during the commit phase, so the update is applied before the browser paints.)\n      forceUpdate();\n    },\n\n    measureAllCells() {\n      internals.bottomLeftGrid?.measureAllCells();\n      internals.bottomRightGrid?.measureAllCells();\n      internals.topLeftGrid?.measureAllCells();\n      internals.topRightGrid?.measureAllCells();\n    },\n\n    recomputeGridSize({ columnIndex = 0, rowIndex = 0 } = {}) {\n      recomputeGrids(columnIndex, rowIndex);\n\n      // Re-render the MultiGrid itself, recomputing the size of the fixed rows and columns (bug #7)\n      forceUpdate();\n    },\n\n    scrollToCell({ align, columnIndex, rowIndex }) {\n      const { fixedColumnCount, fixedRowCount } = internals.latest;\n\n      // Fixed cells are always visible (in the corresponding axis)\n      const adjustedColumnIndex =\n        columnIndex !== undefined && columnIndex >= fixedColumnCount\n          ? columnIndex - fixedColumnCount\n          : undefined;\n      const adjustedRowIndex =\n        rowIndex !== undefined && rowIndex >= fixedRowCount\n          ? rowIndex - fixedRowCount\n          : undefined;\n\n      // The other quadrants are synced when the bottom-right Grid reports its new offsets (via onScroll)\n      internals.bottomRightGrid?.scrollToCell({\n        align,\n        columnIndex: adjustedColumnIndex,\n        rowIndex: adjustedRowIndex\n      });\n    },\n\n    scrollToPosition({ scrollLeft, scrollTop }) {\n      internals.bottomRightGrid?.scrollToPosition({ scrollLeft, scrollTop });\n    }\n  };\n\n  // Called after every commit of the MultiGrid (the equivalent of the 9.x componentDidMount/componentDidUpdate)\n  const onCommit = (columnWidth: CellSize, rowHeight: CellSize) => {\n    // Most of the inner Grids receive wrapped (function) cell sizes, which Grid can't compare;\n    // so a change of a numeric size is passed on by recomputing them (as Grid does for its own numeric sizes).\n    const committedSizes = internals.committedSizes;\n    internals.committedSizes = { columnWidth, rowHeight };\n    if (\n      committedSizes !== null &&\n      (isNumericSizeChange(committedSizes.columnWidth, columnWidth) ||\n        isNumericSizeChange(committedSizes.rowHeight, rowHeight))\n    ) {\n      recomputeGrids(0, 0);\n    }\n\n    // Cell sizes invalidated by CellMeasurer (see invalidateCellSizeAfterRender)\n    if (typeof internals.deferredInvalidateColumnIndex === \"number\") {\n      const columnIndex = internals.deferredInvalidateColumnIndex;\n      // Always set alongside the column index (by invalidateCellSizeAfterRender)\n      const rowIndex = internals.deferredInvalidateRowIndex as number;\n\n      internals.deferredInvalidateColumnIndex = null;\n      internals.deferredInvalidateRowIndex = null;\n\n      handle.recomputeGridSize({ columnIndex, rowIndex });\n    }\n\n    // E.g. a fixed Grid that has just been added (because the fixed row or column count changed)\n    syncFixedGridScrollPositions();\n  };\n\n  // The bottom-right Grid has been scrolled\n  const onScroll = (scrollInfo: ScrollInfo) => {\n    const { scrollLeft, scrollTop } = scrollInfo;\n\n    internals.scrollLeft = scrollLeft;\n    internals.scrollTop = scrollTop;\n\n    // Scroll the fixed Grids in the same batch of updates as the one that scrolled (so they don't lag behind).\n    // (This is a no-op for a Grid that reported the new offsets.)\n    syncFixedGridScrollPositions();\n\n    const { onScroll } = internals.latest;\n    if (onScroll) {\n      // The full Scroll object is passed when invoked by the bottom-right Grid;\n      // only scrollLeft and scrollTop are passed when invoked via onScrollLeft or onScrollTop\n      onScroll(scrollInfo as Scroll);\n    }\n  };\n\n  const onScrollbarPresenceChange = ({\n    horizontal,\n    size,\n    vertical\n  }: ScrollbarPresenceChange) => {\n    const { showHorizontalScrollbar, showVerticalScrollbar } =\n      internals.scrollbarState;\n\n    if (\n      horizontal !== showHorizontalScrollbar ||\n      vertical !== showVerticalScrollbar\n    ) {\n      const scrollbarState: ScrollbarState = {\n        scrollbarSize: size,\n        showHorizontalScrollbar: horizontal,\n        showVerticalScrollbar: vertical\n      };\n      internals.scrollbarState = scrollbarState;\n      setScrollbarState(scrollbarState);\n\n      const { onScrollbarPresenceChange } = internals.latest;\n      if (typeof onScrollbarPresenceChange === \"function\") {\n        onScrollbarPresenceChange({\n          horizontal,\n          size,\n          vertical\n        });\n      }\n    }\n  };\n\n  // The top-right Grid has been scrolled by the user (enableFixedRowScroll)\n  const onScrollLeft = ({ scrollLeft }: ScrollInfo) => {\n    internals.bottomRightGrid?.scrollToPosition({ scrollLeft });\n    onScroll({\n      scrollLeft,\n      scrollTop: internals.scrollTop\n    });\n  };\n\n  // The bottom-left Grid has been scrolled by the user (enableFixedColumnScroll)\n  const onScrollTop = ({ scrollTop }: ScrollInfo) => {\n    internals.bottomRightGrid?.scrollToPosition({ scrollTop });\n    onScroll({\n      scrollLeft: internals.scrollLeft,\n      scrollTop\n    });\n  };\n\n  return {\n    handle,\n    internals,\n    onCommit,\n    onScroll,\n    onScrollbarPresenceChange,\n    onScrollLeft,\n    onScrollTop,\n    setBottomLeftGrid: (grid) => {\n      internals.bottomLeftGrid = grid;\n    },\n    setBottomRightGrid: (grid) => {\n      internals.bottomRightGrid = grid;\n    },\n    setTopLeftGrid: (grid) => {\n      internals.topLeftGrid = grid;\n    },\n    setTopRightGrid: (grid) => {\n      internals.topRightGrid = grid;\n    }\n  };\n}\n\n// The CellMeasurerCache (wrapper) used by each of the inner Grids that don't start at the first row and column.\n// (The wrappers translate the inner Grids' indices to indices of the full grid.)\nfunction createDeferredMeasurementCaches(\n  deferredMeasurementCache: CellMeasureCache | undefined,\n  fixedColumnCount: number,\n  fixedRowCount: number\n) {\n  if (!deferredMeasurementCache) {\n    return {\n      bottomLeftGrid: undefined,\n      bottomRightGrid: undefined,\n      topRightGrid: undefined\n    };\n  }\n\n  // CellMeasurerCacheDecorator relies on CellMeasurerCache-specific methods (eg clearAll)\n  const cellMeasurerCache = deferredMeasurementCache as CellMeasurerCache;\n\n  return {\n    bottomLeftGrid:\n      fixedRowCount > 0\n        ? new CellMeasurerCacheDecorator({\n            cellMeasurerCache,\n            columnIndexOffset: 0,\n            rowIndexOffset: fixedRowCount\n          })\n        : deferredMeasurementCache,\n    bottomRightGrid:\n      fixedColumnCount > 0 || fixedRowCount > 0\n        ? new CellMeasurerCacheDecorator({\n            cellMeasurerCache,\n            columnIndexOffset: fixedColumnCount,\n            rowIndexOffset: fixedRowCount\n          })\n        : deferredMeasurementCache,\n    topRightGrid:\n      fixedColumnCount > 0\n        ? new CellMeasurerCacheDecorator({\n            cellMeasurerCache,\n            columnIndexOffset: fixedColumnCount,\n            rowIndexOffset: 0\n          })\n        : deferredMeasurementCache\n  };\n}\n\n/**\n * Renders 1, 2, or 4 Grids depending on configuration.\n * A main (body) Grid will always be rendered.\n * Optionally, 1-2 Grids for sticky header rows will also be rendered.\n * If no sticky columns, only 1 sticky header Grid will be rendered.\n * If sticky columns, 2 sticky header Grids will be rendered.\n *\n * Scrolling is done through the imperative handle (`ref`): see `scrollToCell` and `scrollToPosition`.\n */\nexport const MultiGrid = /* @__PURE__ */ memo(\n  /* @__PURE__ */ forwardRef<MultiGridImperativeAPI, MultiGridProps>(\n    function MultiGrid(props, ref) {\n      const {\n        cellRenderer,\n        classNameBottomLeftGrid = defaultMultiGridProps.classNameBottomLeftGrid,\n        classNameBottomRightGrid = defaultMultiGridProps.classNameBottomRightGrid,\n        classNameTopLeftGrid = defaultMultiGridProps.classNameTopLeftGrid,\n        classNameTopRightGrid = defaultMultiGridProps.classNameTopRightGrid,\n        columnCount,\n        columnWidth,\n        deferredMeasurementCache,\n        enableFixedColumnScroll = defaultMultiGridProps.enableFixedColumnScroll,\n        enableFixedRowScroll = defaultMultiGridProps.enableFixedRowScroll,\n        fixedColumnCount = defaultMultiGridProps.fixedColumnCount,\n        fixedRowCount = defaultMultiGridProps.fixedRowCount,\n        height,\n        hideBottomLeftGridScrollbar = defaultMultiGridProps.hideBottomLeftGridScrollbar,\n        hideTopRightGridScrollbar = defaultMultiGridProps.hideTopRightGridScrollbar,\n        // The initial offsets only apply to the quadrants that scroll along the corresponding axis\n        initialScrollLeft,\n        initialScrollTop,\n        onScroll,\n        onScrollbarPresenceChange,\n        onSectionRendered,\n        rowCount,\n        rowHeight,\n        style = defaultMultiGridProps.style,\n        styleBottomLeftGrid = defaultMultiGridProps.styleBottomLeftGrid,\n        styleBottomRightGrid = defaultMultiGridProps.styleBottomRightGrid,\n        styleTopLeftGrid = defaultMultiGridProps.styleTopLeftGrid,\n        styleTopRightGrid = defaultMultiGridProps.styleTopRightGrid,\n        width,\n        // The remaining (Grid) props are relayed to all of the inner Grids\n        ...gridProps\n      } = props;\n\n      // Incremented to re-render the MultiGrid and recompute the size of its fixed rows and columns (see recomputeGridSize)\n      const [layoutVersion, forceUpdate] = useReducer(increment, 0);\n      const [scrollbarState, setScrollbarState] = useState<ScrollbarState>(\n        INITIAL_SCROLLBAR_STATE\n      );\n\n      const latest: LatestValues = {\n        fixedColumnCount,\n        fixedRowCount,\n        onScroll,\n        onScrollbarPresenceChange\n      };\n\n      // The instance (and its stable imperative handle) is created once\n      const [\n        {\n          handle,\n          internals,\n          onCommit,\n          onScroll: onScrollBottomRightGrid,\n          onScrollbarPresenceChange: onScrollbarPresenceChangeBottomRightGrid,\n          onScrollLeft,\n          onScrollTop,\n          setBottomLeftGrid,\n          setBottomRightGrid,\n          setTopLeftGrid,\n          setTopRightGrid\n        }\n      ] = useState(() =>\n        createMultiGridInstance(latest, setScrollbarState, forceUpdate)\n      );\n\n      useImperativeHandle(ref, () => handle, [handle]);\n\n      useInsertionEffect(() => {\n        internals.latest = latest;\n      });\n\n      const { scrollbarSize, showHorizontalScrollbar, showVerticalScrollbar } =\n        scrollbarState;\n\n      // The size of the fixed columns and rows.\n      // Function sizes are (only) re-read when they change or when recomputeGridSize() is called (see layoutVersion).\n      const leftGridWidth = useMemo(\n        () => getFixedCellsSize(columnWidth, fixedColumnCount),\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n        [columnWidth, fixedColumnCount, layoutVersion]\n      );\n      const topGridHeight = useMemo(\n        () => getFixedCellsSize(rowHeight, fixedRowCount),\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n        [rowHeight, fixedRowCount, layoutVersion]\n      );\n      const bottomGridHeight = height - topGridHeight;\n      const rightGridWidth = width - leftGridWidth;\n\n      // The fixed Grids need some extra room to scroll as far as the bottom-right Grid (which may have scrollbars):\n      // the bottom-left Grid gets an extra row (as tall as the bottom-right Grid's horizontal scrollbar),\n      // and the top-right Grid gets an extra column (as wide as the bottom-right Grid's vertical scrollbar).\n      // (The bottom-right Grid's horizontal scrollbar shortens its scrollable height, and vice versa; bug #29.)\n      // If the bottom-right Grid has no scrollbar, the extra space is overflow:hidden anyway.\n      const additionalRowCount = showHorizontalScrollbar ? 1 : 0;\n      const additionalColumnCount = showVerticalScrollbar ? 1 : 0;\n\n      // Inline styles are memoized so that they don't defeat the inner Grids' memo().\n      const containerOuterStyle = useMemo<CSSProperties>(\n        () => ({\n          height,\n          overflow: \"visible\", // Let :focus outline show through\n          width,\n          ...style\n        }),\n        [height, style, width]\n      );\n      const containerTopStyle = useMemo<CSSProperties>(\n        () => ({\n          height: topGridHeight,\n          position: \"relative\",\n          width\n        }),\n        [topGridHeight, width]\n      );\n      const containerBottomStyle = useMemo<CSSProperties>(\n        () => ({\n          height: bottomGridHeight,\n          overflow: \"visible\", // Let :focus outline show through\n          position: \"relative\",\n          width\n        }),\n        [bottomGridHeight, width]\n      );\n      // (Bug #8: these follow changes to enableFixedColumnScroll and enableFixedRowScroll)\n      const bottomLeftGridStyle = useMemo<CSSProperties>(\n        () => ({\n          left: 0,\n          overflowX: \"hidden\",\n          overflowY: enableFixedColumnScroll ? \"auto\" : \"hidden\",\n          position: \"absolute\",\n          ...styleBottomLeftGrid\n        }),\n        [enableFixedColumnScroll, styleBottomLeftGrid]\n      );\n      const bottomRightGridStyle = useMemo<CSSProperties>(\n        () => ({\n          left: leftGridWidth,\n          position: \"absolute\",\n          ...styleBottomRightGrid\n        }),\n        [leftGridWidth, styleBottomRightGrid]\n      );\n      const topLeftGridStyle = useMemo<CSSProperties>(\n        () => ({\n          left: 0,\n          overflowX: \"hidden\",\n          overflowY: \"hidden\",\n          position: \"absolute\",\n          top: 0,\n          ...styleTopLeftGrid\n        }),\n        [styleTopLeftGrid]\n      );\n      const topRightGridStyle = useMemo<CSSProperties>(\n        () => ({\n          left: leftGridWidth,\n          overflowX: enableFixedRowScroll ? \"auto\" : \"hidden\",\n          overflowY: \"hidden\",\n          position: \"absolute\",\n          top: 0,\n          ...styleTopRightGrid\n        }),\n        [enableFixedRowScroll, leftGridWidth, styleTopRightGrid]\n      );\n      const topRightGridInnerStyle = useMemo<CSSProperties>(\n        () =>\n          hideTopRightGridScrollbar\n            ? { ...topRightGridStyle, left: 0 }\n            : topRightGridStyle,\n        [hideTopRightGridScrollbar, topRightGridStyle]\n      );\n\n      // Bug #20: the wrappers (and their index offsets) follow changes to the cache and the fixed row and column counts\n      const deferredMeasurementCaches = useMemo(\n        () =>\n          createDeferredMeasurementCaches(\n            deferredMeasurementCache,\n            fixedColumnCount,\n            fixedRowCount\n          ),\n        [deferredMeasurementCache, fixedColumnCount, fixedRowCount]\n      );\n\n      // Cell sizes of the right and bottom Grids (whose indices are offset by the fixed columns and rows)\n      const columnWidthRightGrid = useCallback(\n        ({ index }: { index: number }): number => {\n          // The extra column (see additionalColumnCount)\n          if (\n            showVerticalScrollbar &&\n            index === columnCount - fixedColumnCount\n          ) {\n            return scrollbarSize;\n          }\n\n          return typeof columnWidth === \"function\"\n            ? columnWidth({ index: index + fixedColumnCount })\n            : columnWidth;\n        },\n        [\n          columnCount,\n          columnWidth,\n          fixedColumnCount,\n          scrollbarSize,\n          showVerticalScrollbar\n        ]\n      );\n      const rowHeightBottomGrid = useCallback(\n        ({ index }: { index: number }): number => {\n          // The extra row (see additionalRowCount)\n          if (showHorizontalScrollbar && index === rowCount - fixedRowCount) {\n            return scrollbarSize;\n          }\n\n          return typeof rowHeight === \"function\"\n            ? rowHeight({ index: index + fixedRowCount })\n            : rowHeight;\n        },\n        [\n          fixedRowCount,\n          rowCount,\n          rowHeight,\n          scrollbarSize,\n          showHorizontalScrollbar\n        ]\n      );\n\n      // Cell renderers of the inner Grids.\n      // Indices are translated to indices of the full grid, and the MultiGrid's handle is passed as the parent (for CellMeasurer).\n      const cellRendererTopLeftGrid = useCallback(\n        (params: CellRendererParams) =>\n          cellRenderer({\n            ...params,\n            // Bug #21: like the other quadrants (rather than the inner Grid)\n            parent: handle\n          }),\n        [cellRenderer, handle]\n      );\n      const cellRendererTopRightGrid = useCallback(\n        ({ columnIndex, ...rest }: CellRendererParams) => {\n          if (columnIndex === columnCount - fixedColumnCount) {\n            return (\n              <div\n                key={rest.key}\n                style={{\n                  ...rest.style,\n                  width: SCROLLBAR_SIZE_BUFFER\n                }}\n              />\n            );\n          } else {\n            return cellRenderer({\n              ...rest,\n              columnIndex: columnIndex + fixedColumnCount,\n              parent: handle\n            });\n          }\n        },\n        [cellRenderer, columnCount, fixedColumnCount, handle]\n      );\n      const cellRendererBottomLeftGrid = useCallback(\n        ({ rowIndex, ...rest }: CellRendererParams) => {\n          if (rowIndex === rowCount - fixedRowCount) {\n            return (\n              <div\n                key={rest.key}\n                style={{\n                  ...rest.style,\n                  height: SCROLLBAR_SIZE_BUFFER\n                }}\n              />\n            );\n          } else {\n            return cellRenderer({\n              ...rest,\n              parent: handle,\n              rowIndex: rowIndex + fixedRowCount\n            });\n          }\n        },\n        [cellRenderer, fixedRowCount, handle, rowCount]\n      );\n      const cellRendererBottomRightGrid = useCallback(\n        ({ columnIndex, rowIndex, ...rest }: CellRendererParams) =>\n          cellRenderer({\n            ...rest,\n            columnIndex: columnIndex + fixedColumnCount,\n            parent: handle,\n            rowIndex: rowIndex + fixedRowCount\n          }),\n        [cellRenderer, fixedColumnCount, fixedRowCount, handle]\n      );\n\n      // Equivalent of the 9.x componentDidMount/componentDidUpdate\n      useIsomorphicLayoutEffect(() => {\n        onCommit(columnWidth, rowHeight);\n      });\n\n      // Don't render any of our Grids if there are no cells.\n      // This mirrors what Grid does,\n      // And prevents us from recording inaccurate measurements when used with CellMeasurer.\n      if (width === 0 || height === 0) {\n        return null;\n      }\n\n      let topLeftGrid = null;\n      if (fixedColumnCount && fixedRowCount) {\n        topLeftGrid = (\n          <Grid\n            {...gridProps}\n            cellRenderer={cellRendererTopLeftGrid}\n            className={classNameTopLeftGrid}\n            columnCount={fixedColumnCount}\n            columnWidth={columnWidth}\n            deferredMeasurementCache={deferredMeasurementCache}\n            height={topGridHeight}\n            ref={setTopLeftGrid}\n            rowCount={fixedRowCount}\n            rowHeight={rowHeight}\n            style={topLeftGridStyle}\n            tabIndex={null}\n            width={leftGridWidth}\n          />\n        );\n      }\n\n      let topRightGrid = null;\n      if (fixedRowCount) {\n        const additionalHeight = showHorizontalScrollbar ? scrollbarSize : 0;\n\n        topRightGrid = (\n          <Grid\n            {...gridProps}\n            cellRenderer={cellRendererTopRightGrid}\n            className={classNameTopRightGrid}\n            columnCount={\n              Math.max(0, columnCount - fixedColumnCount) +\n              additionalColumnCount\n            }\n            columnWidth={columnWidthRightGrid}\n            deferredMeasurementCache={deferredMeasurementCaches.topRightGrid}\n            height={\n              hideTopRightGridScrollbar\n                ? topGridHeight + additionalHeight\n                : topGridHeight\n            }\n            initialScrollLeft={initialScrollLeft}\n            onScroll={enableFixedRowScroll ? onScrollLeft : undefined}\n            ref={setTopRightGrid}\n            rowCount={fixedRowCount}\n            rowHeight={rowHeight}\n            style={topRightGridInnerStyle}\n            tabIndex={null}\n            width={rightGridWidth}\n          />\n        );\n\n        if (hideTopRightGridScrollbar) {\n          topRightGrid = (\n            <div\n              className=\"TopRightGrid_ScrollWrapper\"\n              style={{\n                ...topRightGridStyle,\n                height: topGridHeight,\n                width: rightGridWidth,\n                overflowX: \"hidden\"\n              }}\n            >\n              {topRightGrid}\n            </div>\n          );\n        }\n      }\n\n      let bottomLeftGrid = null;\n      if (fixedColumnCount) {\n        // The bottom-left Grid's own vertical scrollbar (see enableFixedColumnScroll)\n        const additionalWidth = showVerticalScrollbar ? scrollbarSize : 0;\n\n        bottomLeftGrid = (\n          <Grid\n            {...gridProps}\n            cellRenderer={cellRendererBottomLeftGrid}\n            className={classNameBottomLeftGrid}\n            columnCount={fixedColumnCount}\n            columnWidth={columnWidth}\n            deferredMeasurementCache={deferredMeasurementCaches.bottomLeftGrid}\n            height={bottomGridHeight}\n            initialScrollTop={initialScrollTop}\n            onScroll={enableFixedColumnScroll ? onScrollTop : undefined}\n            ref={setBottomLeftGrid}\n            rowCount={\n              Math.max(0, rowCount - fixedRowCount) + additionalRowCount\n            }\n            rowHeight={rowHeightBottomGrid}\n            style={bottomLeftGridStyle}\n            tabIndex={null}\n            width={\n              hideBottomLeftGridScrollbar\n                ? leftGridWidth + additionalWidth\n                : leftGridWidth\n            }\n          />\n        );\n\n        if (hideBottomLeftGridScrollbar) {\n          bottomLeftGrid = (\n            <div\n              className=\"BottomLeftGrid_ScrollWrapper\"\n              style={{\n                ...bottomLeftGridStyle,\n                height: bottomGridHeight,\n                width: leftGridWidth,\n                overflowY: \"hidden\"\n              }}\n            >\n              {bottomLeftGrid}\n            </div>\n          );\n        }\n      }\n\n      const bottomRightGrid = (\n        <Grid\n          {...gridProps}\n          cellRenderer={cellRendererBottomRightGrid}\n          className={classNameBottomRightGrid}\n          columnCount={Math.max(0, columnCount - fixedColumnCount)}\n          columnWidth={columnWidthRightGrid}\n          deferredMeasurementCache={deferredMeasurementCaches.bottomRightGrid}\n          height={bottomGridHeight}\n          initialScrollLeft={initialScrollLeft}\n          initialScrollTop={initialScrollTop}\n          onScroll={onScrollBottomRightGrid}\n          onScrollbarPresenceChange={onScrollbarPresenceChangeBottomRightGrid}\n          onSectionRendered={onSectionRendered}\n          ref={setBottomRightGrid}\n          rowCount={Math.max(0, rowCount - fixedRowCount)}\n          rowHeight={rowHeightBottomGrid}\n          style={bottomRightGridStyle}\n          width={rightGridWidth}\n        />\n      );\n\n      return (\n        <div style={containerOuterStyle}>\n          <div style={containerTopStyle}>\n            {topLeftGrid}\n            {topRightGrid}\n          </div>\n          <div style={containerBottomStyle}>\n            {bottomLeftGrid}\n            {bottomRightGrid}\n          </div>\n        </div>\n      );\n    }\n  )\n);\n","import { memo, useCallback, useMemo, useRef, useState } from \"react\";\nimport type {\n  ScrollSyncChild,\n  ScrollSyncProps,\n  ScrollSyncScrollParams\n} from \"./types\";\n\ntype ScrollSyncRefCallback = (\n  child: ScrollSyncChild | null\n) => void | (() => void);\n\ntype ScrollOffsets = { scrollLeft: number; scrollTop: number };\n\nconst INITIAL_STATE: ScrollSyncScrollParams = {\n  clientHeight: 0,\n  clientWidth: 0,\n  scrollHeight: 0,\n  scrollLeft: 0,\n  scrollTop: 0,\n  scrollWidth: 0\n};\n\n/**\n * HOC that simplifies the process of synchronizing scrolling between two or more virtualized components.\n */\nexport const ScrollSync = /* @__PURE__ */ memo(function ScrollSync({\n  children\n}: ScrollSyncProps) {\n  const [state, setState] = useState<ScrollSyncScrollParams>(INITIAL_STATE);\n\n  // Registered children, by key\n  const childrenRef = useRef<Map<string, ScrollSyncChild>>(new Map());\n\n  // Stable ref callbacks, by key\n  const refCallbacksRef = useRef<Map<string, ScrollSyncRefCallback>>(new Map());\n\n  // The child most recently registered under each key (not cleared when it is detached)\n  const lastRegisteredRef = useRef<Map<string, ScrollSyncChild>>(new Map());\n\n  // The offsets the registered children have been synced to\n  const syncedRef = useRef<ScrollOffsets>({ scrollLeft: 0, scrollTop: 0 });\n\n  // Whether any registered child has been scrolled by ScrollSync yet\n  const hasSyncedRef = useRef(false);\n\n  const onScroll = useCallback((params: ScrollSyncScrollParams) => {\n    const synced = syncedRef.current;\n    const hasSynced = hasSyncedRef.current;\n\n    // Once children have been synced, a reported offset that matches the synced one is a child echoing the\n    // offset ScrollSync just scrolled it to; ignore it so that its size values don't replace the scrolled child's.\n    if (\n      hasSynced &&\n      params.scrollLeft === synced.scrollLeft &&\n      params.scrollTop === synced.scrollTop\n    ) {\n      return;\n    }\n\n    // A synced child that can't scroll as far as the synced offset (e.g. a header row that only scrolls horizontally)\n    // reports its clamped offset (its maximum) the next time it scrolls; don't propagate that back to the other children.\n    const isClamped = (\n      offset: number,\n      syncedOffset: number,\n      scrollSize: number,\n      clientSize: number\n    ) =>\n      hasSynced && offset < syncedOffset && offset >= scrollSize - clientSize;\n\n    // (List and Table only report a scrollTop)\n    const leftChanged =\n      typeof params.scrollLeft === \"number\" &&\n      params.scrollLeft !== synced.scrollLeft &&\n      !isClamped(\n        params.scrollLeft,\n        synced.scrollLeft,\n        params.scrollWidth,\n        params.clientWidth\n      );\n    const topChanged =\n      typeof params.scrollTop === \"number\" &&\n      params.scrollTop !== synced.scrollTop &&\n      !isClamped(\n        params.scrollTop,\n        synced.scrollTop,\n        params.scrollHeight,\n        params.clientHeight\n      );\n\n    if (hasSynced && !leftChanged && !topChanged) {\n      return;\n    }\n\n    const scrollLeft = leftChanged ? params.scrollLeft : synced.scrollLeft;\n    const scrollTop = topChanged ? params.scrollTop : synced.scrollTop;\n\n    syncedRef.current = { scrollLeft, scrollTop };\n\n    setState({\n      clientHeight: params.clientHeight,\n      clientWidth: params.clientWidth,\n      scrollHeight: params.scrollHeight,\n      scrollLeft,\n      scrollTop,\n      scrollWidth: params.scrollWidth\n    });\n\n    if (leftChanged || topChanged) {\n      const position: { scrollLeft?: number; scrollTop?: number } = {};\n      if (leftChanged) {\n        position.scrollLeft = scrollLeft;\n      }\n      if (topChanged) {\n        position.scrollTop = scrollTop;\n      }\n\n      childrenRef.current.forEach((child) => {\n        hasSyncedRef.current = true;\n\n        // The child that reported this offset is already there, so this is a no-op for it\n        child.scrollToPosition(position);\n      });\n    }\n  }, []);\n\n  const registerChild = useCallback((key: string) => {\n    let refCallback = refCallbacksRef.current.get(key);\n    if (!refCallback) {\n      refCallback = (child: ScrollSyncChild | null) => {\n        const map = childrenRef.current;\n        if (child) {\n          if (typeof child.scrollToPosition !== \"function\") {\n            throw Error(\n              \"Unexpected child type registered; only components with a scrollToPosition() method (e.g. Grid) are supported.\"\n            );\n          }\n\n          map.set(key, child);\n\n          // Bring a child registered after scrolling has happened in line with the others\n          // (unless it's the same child being re-attached, e.g. because of an inline ref callback or StrictMode).\n          const isNewChild = lastRegisteredRef.current.get(key) !== child;\n          lastRegisteredRef.current.set(key, child);\n\n          const { scrollLeft, scrollTop } = syncedRef.current;\n          if (isNewChild && (scrollLeft !== 0 || scrollTop !== 0)) {\n            hasSyncedRef.current = true;\n            child.scrollToPosition({ scrollLeft, scrollTop });\n          }\n\n          // React 19 calls this cleanup function (instead of calling the ref with null) when the child unmounts;\n          // only unregister the child if it hasn't been replaced by another one registered under the same key.\n          return () => {\n            if (map.get(key) === child) {\n              map.delete(key);\n            }\n          };\n        } else {\n          // React 18\n          map.delete(key);\n        }\n      };\n      refCallbacksRef.current.set(key, refCallback);\n    }\n    return refCallback;\n  }, []);\n\n  const childProps = useMemo(\n    () => ({ ...state, onScroll, registerChild }),\n    [onScroll, registerChild, state]\n  );\n\n  return children(childProps);\n});\n","import type { ColumnProps } from \"./types\";\n\n/**\n * Describes the header and cell contents of a table column.\n *\n * This component does not render anything itself;\n * `Table` reads the props of its children to render headers and cells\n * (applying `defaultColumnProps` to each child's props).\n * Components that render a `Column` (e.g. `const MyColumn = (props) => <Column {...props} />`) can be used as `Table` children too;\n * their props are read the same way (the wrapper component itself is never rendered).\n */\nexport function Column(props: ColumnProps): null {\n  void props;\n  return null;\n}\n","import type {\n  MultiSortCallback,\n  MultiSortOptions,\n  MultiSortParams,\n  MultiSortReturn,\n  SortDirectionMap\n} from \"./types\";\n\n/**\n * Creates sort state (and a `sort` function compatible with the `Table` `sort` prop)\n * for sorting a `Table` by multiple fields.\n *\n * - Click sorts by a single field (toggling its direction if it was already sorted).\n * - SHIFT + click appends a field to the existing sort criteria (or toggles its direction).\n * - CONTROL/META + click removes a field from the sort criteria.\n *\n * Whenever the sort criteria change, new `sortBy` and `sortDirection` values are created (previous values are never mutated),\n * so they can be stored in React state (e.g. with `useState`) as passed to `sortCallback`.\n *\n * @param sortCallback Notified (with the updated `sortBy` and `sortDirection` values) whenever the sort criteria change.\n * @param options Optional default sort-by values.\n */\nexport function createMultiSort(\n  sortCallback: MultiSortCallback,\n  { defaultSortBy, defaultSortDirection = {} }: MultiSortOptions = {}\n): MultiSortReturn {\n  if (!sortCallback) {\n    throw Error(`Required parameter \"sortCallback\" not specified`);\n  }\n\n  // The sort criteria are replaced (never mutated) when they change,\n  // so that they can be stored in React state (e.g. with useState) and compared by reference.\n  // (This also leaves the caller's defaultSortBy array unchanged.)\n  let sortBy: string[] = defaultSortBy ? [...defaultSortBy] : [];\n  let sortDirection: SortDirectionMap = {};\n  sortBy.forEach((dataKey) => {\n    sortDirection[dataKey] =\n      defaultSortDirection[dataKey] !== undefined\n        ? defaultSortDirection[dataKey]\n        : \"ASC\";\n  });\n\n  const toggle = (direction: SortDirectionMap[string]) =>\n    direction === \"ASC\" ? \"DESC\" : \"ASC\";\n\n  function sort({\n    defaultSortDirection,\n    event,\n    sortBy: dataKey\n  }: MultiSortParams): void {\n    if (event.shiftKey) {\n      // Shift + click appends a column to existing criteria (or toggles its direction)\n      if (sortDirection[dataKey] !== undefined) {\n        sortDirection = {\n          ...sortDirection,\n          [dataKey]: toggle(sortDirection[dataKey])\n        };\n      } else {\n        sortBy = [...sortBy, dataKey];\n        sortDirection = { ...sortDirection, [dataKey]: defaultSortDirection };\n      }\n    } else if (event.ctrlKey || event.metaKey) {\n      // Control + click removes column from sort (if present)\n      if (sortBy.includes(dataKey)) {\n        sortBy = sortBy.filter((key) => key !== dataKey);\n        sortDirection = { ...sortDirection };\n        delete sortDirection[dataKey];\n      }\n    } else {\n      // Sort by the selected key only.\n      // If it is already selected, reverse its sort direction; else, use the default direction.\n      sortDirection = {\n        [dataKey]:\n          sortDirection[dataKey] !== undefined\n            ? toggle(sortDirection[dataKey])\n            : defaultSortDirection\n      };\n      sortBy = [dataKey];\n    }\n\n    // Notify application code\n    sortCallback({\n      sortBy,\n      sortDirection\n    });\n  }\n\n  return {\n    sort,\n    // (Getters, since the sort criteria are replaced when they change)\n    get sortBy() {\n      return sortBy;\n    },\n    get sortDirection() {\n      return sortDirection;\n    }\n  };\n}\n","import type { TableCellDataGetterParams } from \"./types\";\n\n/**\n * Default accessor for returning a cell value for a given attribute.\n * This function expects to operate on either a vanilla Object or an Immutable Map.\n * You should override the column's cellDataGetter if your data is some other type of object.\n */\nexport function defaultCellDataGetter({\n  dataKey,\n  rowData\n}: Pick<TableCellDataGetterParams, \"dataKey\" | \"rowData\">) {\n  if (typeof rowData.get === \"function\") {\n    return rowData.get(dataKey);\n  } else {\n    return rowData[dataKey];\n  }\n}\n","import type { TableCellProps } from \"./types\";\n\n/**\n * Default cell renderer that displays an attribute as a simple string\n * You should override the column's cellRenderer if your data is some other type of object.\n */\nexport function defaultCellRenderer({\n  cellData\n}: Pick<TableCellProps, \"cellData\">): string {\n  if (cellData == null) {\n    return \"\";\n  } else {\n    return String(cellData);\n  }\n}\n","export type { SortDirectionType } from \"./types\";\n\n/**\n * Specifies which direction `Table` data is currently sorted in.\n */\nexport const SortDirection = {\n  /**\n   * Sort items in ascending order.\n   * This means arranging from the lowest value to the highest (e.g. a-z, 0-9).\n   */\n  ASC: \"ASC\",\n\n  /**\n   * Sort items in descending order.\n   * This means arranging from the highest value to the lowest (e.g. z-a, 9-0).\n   */\n  DESC: \"DESC\"\n} as const;\n","import clsx from \"clsx\";\nimport { SortDirection } from \"./SortDirection\";\nimport type { SortIndicatorProps } from \"./types\";\n\n/**\n * Displayed beside a header to indicate that a Table is currently sorted by this column.\n */\nexport function SortIndicator({ sortDirection }: SortIndicatorProps) {\n  const classNames = clsx(\"ReactVirtualized__Table__sortableHeaderIcon\", {\n    \"ReactVirtualized__Table__sortableHeaderIcon--ASC\":\n      sortDirection === SortDirection.ASC,\n    \"ReactVirtualized__Table__sortableHeaderIcon--DESC\":\n      sortDirection === SortDirection.DESC\n  });\n\n  return (\n    <svg className={classNames} width={18} height={18} viewBox=\"0 0 24 24\">\n      {sortDirection === SortDirection.ASC ? (\n        <path d=\"M7 14l5-5 5 5z\" />\n      ) : (\n        <path d=\"M7 10l5 5 5-5z\" />\n      )}\n      <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n    </svg>\n  );\n}\n","import type { ReactElement } from \"react\";\nimport { SortIndicator } from \"./SortIndicator\";\nimport type { TableHeaderProps } from \"./types\";\n\n/**\n * Default table header renderer.\n */\nexport function defaultHeaderRenderer({\n  dataKey,\n  label,\n  sortBy,\n  sortDirection\n}: Pick<\n  TableHeaderProps,\n  \"dataKey\" | \"label\" | \"sortBy\" | \"sortDirection\"\n>): ReactElement[] {\n  const showSortIndicator = sortBy === dataKey;\n  const children = [\n    <span\n      className=\"ReactVirtualized__Table__headerTruncatedText\"\n      key=\"label\"\n      // null (rather than undefined) is intentional; it matches the original implementation\n      title={(typeof label === \"string\" ? label : null) as string | undefined}\n    >\n      {label}\n    </span>\n  ];\n\n  if (showSortIndicator) {\n    children.push(\n      <SortIndicator key=\"SortIndicator\" sortDirection={sortDirection} />\n    );\n  }\n\n  return children;\n}\n","import { defaultCellDataGetter } from \"./defaultCellDataGetter\";\nimport { defaultCellRenderer } from \"./defaultCellRenderer\";\nimport { defaultHeaderRenderer } from \"./defaultHeaderRenderer\";\nimport { SortDirection } from \"./SortDirection\";\nimport type { ColumnProps } from \"./types\";\n\ntype DefaultedPropKeys =\n  | \"cellDataGetter\"\n  | \"cellRenderer\"\n  | \"defaultSortDirection\"\n  | \"flexGrow\"\n  | \"flexShrink\"\n  | \"headerRenderer\"\n  | \"style\";\n\n/** Column props, with the props that have default values marked as required. */\nexport type ColumnPropsWithDefaults = ColumnProps &\n  Required<Pick<ColumnProps, DefaultedPropKeys>>;\n\n/**\n * Default values for `Column`'s optional props.\n * `Table` applies these to the props of each of its child elements (so wrapper components work as columns too).\n * (The PURE annotations let bundlers drop this object if it isn't used.)\n */\nexport const defaultColumnProps: Readonly<\n  Required<Pick<ColumnProps, DefaultedPropKeys>>\n> = /* @__PURE__ */ Object.freeze({\n  cellDataGetter: defaultCellDataGetter,\n  cellRenderer: defaultCellRenderer,\n  defaultSortDirection: SortDirection.ASC,\n  flexGrow: 0,\n  flexShrink: 1,\n  headerRenderer: defaultHeaderRenderer,\n  style: /* @__PURE__ */ Object.freeze({})\n});\n","import type { TableHeaderRowProps } from \"./types\";\n\n/**\n * Default table header row renderer.\n */\nexport function defaultHeaderRowRenderer({\n  className,\n  columns,\n  style\n}: TableHeaderRowProps) {\n  return (\n    <div className={className} role=\"row\" style={style}>\n      {columns}\n    </div>\n  );\n}\n","import type { HTMLAttributes } from \"react\";\nimport type { TableRowProps } from \"./types\";\n\n/**\n * Default row renderer for Table.\n */\nexport function defaultRowRenderer({\n  className,\n  columns,\n  index,\n  key,\n  onRowClick,\n  onRowDoubleClick,\n  onRowMouseOut,\n  onRowMouseOver,\n  onRowRightClick,\n  rowData,\n  style\n}: TableRowProps) {\n  const a11yProps: HTMLAttributes<HTMLDivElement> = {\n    \"aria-rowindex\": index + 1\n  };\n\n  if (\n    onRowClick ||\n    onRowDoubleClick ||\n    onRowMouseOut ||\n    onRowMouseOver ||\n    onRowRightClick\n  ) {\n    a11yProps[\"aria-label\"] = \"row\";\n    a11yProps.tabIndex = 0;\n\n    if (onRowClick) {\n      a11yProps.onClick = (event) => onRowClick({ event, index, rowData });\n    }\n    if (onRowDoubleClick) {\n      a11yProps.onDoubleClick = (event) =>\n        onRowDoubleClick({ event, index, rowData });\n    }\n    if (onRowMouseOut) {\n      a11yProps.onMouseOut = (event) =>\n        onRowMouseOut({ event, index, rowData });\n    }\n    if (onRowMouseOver) {\n      a11yProps.onMouseOver = (event) =>\n        onRowMouseOver({ event, index, rowData });\n    }\n    if (onRowRightClick) {\n      a11yProps.onContextMenu = (event) =>\n        onRowRightClick({ event, index, rowData });\n    }\n  }\n\n  return (\n    <div\n      {...a11yProps}\n      className={className}\n      key={key}\n      role=\"row\"\n      style={style}\n    >\n      {columns}\n    </div>\n  );\n}\n","import { accessibilityOverscanIndicesGetter } from \"../Grid/accessibilityOverscanIndicesGetter\";\nimport { defaultHeaderRowRenderer } from \"./defaultHeaderRowRenderer\";\nimport { defaultRowRenderer } from \"./defaultRowRenderer\";\nimport type { TableProps } from \"./types\";\n\ntype DefaultedPropKeys =\n  | \"disableHeader\"\n  | \"estimatedRowSize\"\n  | \"headerHeight\"\n  | \"headerRowRenderer\"\n  | \"headerStyle\"\n  | \"noRowsRenderer\"\n  | \"onRowsRendered\"\n  | \"onScroll\"\n  | \"overscanIndicesGetter\"\n  | \"overscanRowCount\"\n  | \"rowRenderer\"\n  | \"rowStyle\"\n  | \"style\";\n\n/**\n * Default values for `Table`'s optional props.\n * (The PURE annotations let bundlers drop this object if it isn't used.)\n */\nexport const defaultTableProps: Readonly<\n  Required<Pick<TableProps, DefaultedPropKeys>>\n> = /* @__PURE__ */ Object.freeze({\n  disableHeader: false,\n  estimatedRowSize: 30,\n  headerHeight: 0,\n  headerRowRenderer: defaultHeaderRowRenderer,\n  headerStyle: /* @__PURE__ */ Object.freeze({}),\n  noRowsRenderer: () => null,\n  onRowsRendered: () => null,\n  onScroll: () => null,\n  overscanIndicesGetter: accessibilityOverscanIndicesGetter,\n  overscanRowCount: 10,\n  rowRenderer: defaultRowRenderer,\n  rowStyle: /* @__PURE__ */ Object.freeze({}),\n  style: /* @__PURE__ */ Object.freeze({})\n});\n","import clsx from \"clsx\";\nimport {\n  Children,\n  forwardRef,\n  isValidElement,\n  memo,\n  useCallback,\n  useImperativeHandle,\n  useInsertionEffect,\n  useMemo,\n  useState,\n  type AriaAttributes,\n  type CSSProperties,\n  type KeyboardEvent,\n  type MouseEvent,\n  type ReactNode\n} from \"react\";\nimport {\n  createInnerGridRef,\n  type InnerGridRef\n} from \"../../utils/createInnerGridRef\";\nimport { useMissingHeightWarning } from \"../../utils/scrollElement/useMissingHeightWarning\";\nimport { useIsomorphicLayoutEffect } from \"../../utils/useIsomorphicLayoutEffect\";\nimport { Grid } from \"../Grid/Grid\";\nimport type {\n  CellRenderer,\n  CellRendererParams,\n  GridProps,\n  RenderedSection,\n  Scroll\n} from \"../Grid/types\";\nimport {\n  defaultColumnProps,\n  type ColumnPropsWithDefaults\n} from \"./defaultColumnProps\";\nimport { defaultTableProps } from \"./defaultTableProps\";\nimport { SortDirection } from \"./SortDirection\";\nimport type {\n  TableImperativeAPI,\n  TableProps,\n  TableRowsRenderedParams,\n  TableScrollParams\n} from \"./types\";\n\n/**\n * Returns a child element's props with `defaultColumnProps` applied (to the props that are undefined).\n *\n * `Table` reads the props of its children without rendering them,\n * so the defaults are applied to any child element (not only `Column` elements);\n * this allows components that wrap `Column` to be used as columns as well.\n */\nfunction getColumnProps(child: ReactNode): ColumnPropsWithDefaults {\n  const props = (\n    isValidElement(child) ? child.props : {}\n  ) as ColumnPropsWithDefaults;\n\n  const resolved: Record<string, unknown> = { ...props };\n  for (const key in defaultColumnProps) {\n    if (resolved[key] === undefined) {\n      resolved[key] =\n        defaultColumnProps[key as keyof typeof defaultColumnProps];\n    }\n  }\n\n  return resolved as ColumnPropsWithDefaults;\n}\n\n/** Determines the flex-shrink, flex-grow, and width values for a cell (header or column). */\nfunction getFlexStyleForColumn(\n  column: ColumnPropsWithDefaults,\n  customStyle: CSSProperties = {}\n): CSSProperties {\n  const flexValue = `${column.flexGrow} ${column.flexShrink} ${column.width}px`;\n\n  const style: CSSProperties = {\n    ...customStyle,\n    flex: flexValue,\n    msFlex: flexValue,\n    WebkitFlex: flexValue\n  };\n\n  if (column.maxWidth) {\n    style.maxWidth = column.maxWidth;\n  }\n\n  if (column.minWidth) {\n    style.minWidth = column.minWidth;\n  }\n\n  return style;\n}\n\n// Callbacks read by the (stable) Grid event handlers.\n// They are updated in an insertion effect, so they are current when the Grid calls them during its commit phase.\ntype LatestCallbacks = {\n  onRowsRendered: (params: TableRowsRenderedParams) => void;\n  onScroll: (params: TableScrollParams) => void;\n};\n\n// Mutable, per-instance values; only modified by effects, ref callbacks, and the Grid's cell renderer (see below).\ntype TableInternals = {\n  // The inner Grid (keeps cell size invalidations requested by cells while the Table is mounting; see createInnerGridRef)\n  innerGrid: InnerGridRef;\n\n  // The inner Grid's scrolling container element\n  gridElement: HTMLDivElement | null;\n\n  latest: LatestCallbacks;\n};\n\nfunction createTableInstance(latest: LatestCallbacks) {\n  const internals: TableInternals = {\n    gridElement: null,\n    innerGrid: createInnerGridRef(),\n    latest\n  };\n\n  const { getGrid } = internals.innerGrid;\n\n  const handle: TableImperativeAPI = {\n    forceUpdateGrid() {\n      getGrid()?.forceUpdate();\n    },\n\n    getOffsetForRow({ align, alignment, index } = {}) {\n      const grid = getGrid();\n      if (grid) {\n        const { scrollTop } = grid.getOffsetForCell({\n          alignment: align ?? alignment,\n          rowIndex: index\n        });\n\n        return scrollTop;\n      }\n      return 0;\n    },\n\n    getScrollbarWidth() {\n      const element = internals.gridElement;\n      if (element) {\n        const clientWidth = element.clientWidth || 0;\n        const offsetWidth = element.offsetWidth || 0;\n        return offsetWidth - clientWidth;\n      }\n\n      return 0;\n    },\n\n    invalidateCellSizeAfterRender({ columnIndex, rowIndex }) {\n      internals.innerGrid.invalidateCellSizeAfterRender({\n        columnIndex,\n        rowIndex\n      });\n    },\n\n    measureAllRows() {\n      getGrid()?.measureAllCells();\n    },\n\n    recomputeGridSize({ columnIndex = 0, rowIndex = 0 } = {}) {\n      internals.innerGrid.recomputeGridSize({ columnIndex, rowIndex });\n    },\n\n    recomputeRowHeights(index = 0) {\n      internals.innerGrid.recomputeGridSize({\n        columnIndex: 0,\n        rowIndex: index\n      });\n    },\n\n    scrollToCell({ align, columnIndex, rowIndex }) {\n      getGrid()?.scrollToCell({ align, columnIndex, rowIndex });\n    },\n\n    scrollToPosition({ scrollTop }) {\n      getGrid()?.scrollToPosition({ scrollTop });\n    },\n\n    scrollToRow({ align, index }) {\n      getGrid()?.scrollToCell({ align, columnIndex: 0, rowIndex: index });\n    }\n  };\n\n  const onScroll = ({ clientHeight, scrollHeight, scrollTop }: Scroll) => {\n    internals.latest.onScroll({ clientHeight, scrollHeight, scrollTop });\n  };\n\n  const onSectionRendered = ({\n    rowOverscanStartIndex,\n    rowOverscanStopIndex,\n    rowStartIndex,\n    rowStopIndex\n  }: RenderedSection) => {\n    internals.latest.onRowsRendered({\n      overscanStartIndex: rowOverscanStartIndex,\n      overscanStopIndex: rowOverscanStopIndex,\n      startIndex: rowStartIndex,\n      stopIndex: rowStopIndex\n    });\n  };\n\n  const setGridRef = internals.innerGrid.setGridRef;\n\n  const setGridElementRef = (element: HTMLDivElement | null) => {\n    internals.gridElement = element;\n  };\n\n  return {\n    handle,\n    internals,\n    onScroll,\n    onSectionRendered,\n    setGridElementRef,\n    setGridRef\n  };\n}\n\n/**\n * Table component with fixed headers and virtualized rows for improved performance with large data sets.\n * This component expects explicit width, height, and padding parameters.\n *\n * Columns are described by `Column` children (or components that render a `Column`).\n * Scrolling is done through the imperative handle (`ref`): see `scrollToRow`, `scrollToCell`, and `scrollToPosition`.\n */\nexport const Table = /* @__PURE__ */ memo(\n  /* @__PURE__ */ forwardRef<TableImperativeAPI, TableProps>(\n    function Table(props, ref) {\n      const {\n        \"aria-label\": ariaLabel,\n        \"aria-labelledby\": ariaLabelledBy,\n        children,\n        className,\n        disableHeader = defaultTableProps.disableHeader,\n        estimatedRowSize = defaultTableProps.estimatedRowSize,\n        gridClassName,\n        gridStyle,\n        headerClassName,\n        headerHeight = defaultTableProps.headerHeight,\n        headerRowRenderer = defaultTableProps.headerRowRenderer,\n        headerStyle = defaultTableProps.headerStyle,\n        height,\n        id,\n        noRowsRenderer = defaultTableProps.noRowsRenderer,\n        onColumnClick,\n        onHeaderClick,\n        onRowClick,\n        onRowDoubleClick,\n        onRowMouseOut,\n        onRowMouseOver,\n        onRowRightClick,\n        onRowsRendered = defaultTableProps.onRowsRendered,\n        onScroll = defaultTableProps.onScroll,\n        overscanIndicesGetter = defaultTableProps.overscanIndicesGetter,\n        overscanRowCount = defaultTableProps.overscanRowCount,\n        rowClassName,\n        rowCount,\n        rowGetter,\n        rowHeight,\n        rowRenderer = defaultTableProps.rowRenderer,\n        rowStyle = defaultTableProps.rowStyle,\n        scrollElement,\n        sort,\n        sortBy,\n        sortDirection,\n        style = defaultTableProps.style,\n        width\n      } = props;\n\n      const [scrollbarWidth, setScrollbarWidth] = useState(0);\n\n      // The instance (and its stable imperative handle) is created once\n      const [\n        {\n          handle,\n          internals,\n          onScroll: onGridScroll,\n          onSectionRendered,\n          setGridElementRef,\n          setGridRef\n        }\n      ] = useState(() => createTableInstance({ onRowsRendered, onScroll }));\n\n      useImperativeHandle(ref, () => handle, [handle]);\n\n      useMissingHeightWarning(\"Table\", height, scrollElement);\n\n      useInsertionEffect(() => {\n        internals.latest = { onRowsRendered, onScroll };\n      });\n\n      // Equivalent of the 9.x componentDidMount/componentDidUpdate:\n      // the header row is padded by the width of the inner Grid's vertical scrollbar (if any).\n      // (Setting the same value again does not re-render.)\n      useIsomorphicLayoutEffect(() => {\n        setScrollbarWidth(handle.getScrollbarWidth());\n      });\n\n      // Column props (with defaults applied) and the cached column flex styles (shared by all rows);\n      // these are recomputed only when the children change.\n      // Header and row cells are keyed by their Column's key (Children.toArray provides a unique key for every child,\n      // based on its own key if it has one), so that the cells of a column move with it when columns are reordered (#1725).\n      const [columns, columnKeys] = useMemo(() => {\n        const columnElements = Children.toArray(children);\n        return [\n          columnElements.map(getColumnProps),\n          columnElements.map((child, index) =>\n            isValidElement(child) && child.key !== null\n              ? String(child.key)\n              : String(index)\n          )\n        ];\n      }, [children]);\n      const cachedColumnStyles = useMemo(\n        () =>\n          columns.map(\n            (column): CSSProperties => ({\n              overflow: \"hidden\",\n              ...getFlexStyleForColumn(\n                column,\n                column.style || defaultColumnProps.style\n              )\n            })\n          ),\n        [columns]\n      );\n\n      const createRow = useCallback(\n        ({\n          rowIndex: index,\n          isScrolling,\n          key,\n          style: cellStyle\n        }: CellRendererParams): ReturnType<CellRenderer> => {\n          const rowClass =\n            typeof rowClassName === \"function\"\n              ? rowClassName({ index })\n              : rowClassName;\n          const rowStyleObject =\n            typeof rowStyle === \"function\" ? rowStyle({ index }) : rowStyle;\n          const rowData = rowGetter({ index });\n\n          const renderedColumns = columns.map((column, columnIndex) => {\n            const {\n              cellDataGetter,\n              cellRenderer,\n              className: columnClassName,\n              columnData,\n              dataKey,\n              id: columnId\n            } = column;\n\n            const cellData = cellDataGetter({ columnData, dataKey, rowData });\n            const renderedCell = cellRenderer({\n              cellData,\n              columnData,\n              columnIndex,\n              dataKey,\n              isScrolling,\n              // CellMeasurer interop: the Table handle delegates to the inner Grid\n              parent: handle,\n              rowData,\n              rowIndex: index\n            });\n\n            const onClick = (event: MouseEvent<HTMLDivElement>) => {\n              if (onColumnClick) {\n                onColumnClick({ columnData, dataKey, event });\n              }\n            };\n\n            const title =\n              typeof renderedCell === \"string\" ? renderedCell : null;\n\n            return (\n              <div\n                aria-colindex={columnIndex + 1}\n                aria-describedby={columnId}\n                className={clsx(\n                  \"ReactVirtualized__Table__rowColumn\",\n                  columnClassName\n                )}\n                key={\"Row\" + index + \"-Col\" + columnKeys[columnIndex]}\n                onClick={onClick}\n                role=\"gridcell\"\n                style={cachedColumnStyles[columnIndex]}\n                title={title as string | undefined}\n              >\n                {renderedCell}\n              </div>\n            );\n          });\n\n          const flattenedStyle = {\n            ...cellStyle,\n            height:\n              typeof rowHeight === \"function\"\n                ? rowHeight({ index })\n                : rowHeight,\n            overflow: \"hidden\",\n            paddingRight: scrollbarWidth,\n            ...rowStyleObject\n          };\n\n          return rowRenderer({\n            className: clsx(\"ReactVirtualized__Table__row\", rowClass),\n            columns: renderedColumns,\n            index,\n            isScrolling,\n            key,\n            onRowClick,\n            onRowDoubleClick,\n            onRowRightClick,\n            onRowMouseOver,\n            onRowMouseOut,\n            rowData,\n            style: flattenedStyle\n          }) as ReturnType<CellRenderer>;\n        },\n        [\n          cachedColumnStyles,\n          columnKeys,\n          columns,\n          handle,\n          onColumnClick,\n          onRowClick,\n          onRowDoubleClick,\n          onRowMouseOut,\n          onRowMouseOver,\n          onRowRightClick,\n          rowClassName,\n          rowGetter,\n          rowHeight,\n          rowRenderer,\n          rowStyle,\n          scrollbarWidth\n        ]\n      );\n\n      const createHeader = (column: ColumnPropsWithDefaults, index: number) => {\n        const {\n          columnData,\n          dataKey,\n          defaultSortDirection,\n          disableSort,\n          headerRenderer,\n          id: columnId,\n          label\n        } = column;\n        const sortEnabled = !disableSort && sort;\n\n        const classNames = clsx(\n          \"ReactVirtualized__Table__headerColumn\",\n          headerClassName,\n          column.headerClassName,\n          {\n            ReactVirtualized__Table__sortableHeaderColumn: sortEnabled\n          }\n        );\n        const headerColumnStyle = getFlexStyleForColumn(column, {\n          ...headerStyle,\n          ...column.headerStyle\n        });\n\n        const renderedHeader = headerRenderer({\n          columnData,\n          dataKey,\n          disableSort,\n          label,\n          sortBy,\n          sortDirection\n        });\n\n        let headerOnClick:\n            | ((\n                event:\n                  | MouseEvent<HTMLDivElement>\n                  | KeyboardEvent<HTMLDivElement>\n              ) => void)\n            | undefined,\n          headerOnKeyDown:\n            | ((event: KeyboardEvent<HTMLDivElement>) => void)\n            | undefined,\n          headerTabIndex: number | undefined,\n          headerAriaSort: AriaAttributes[\"aria-sort\"],\n          headerAriaLabel: string | undefined;\n\n        if (sortEnabled || onHeaderClick) {\n          // If this is a sortable header, clicking it should update the table data's sorting.\n          const isFirstTimeSort = sortBy !== dataKey;\n\n          // If this is the firstTime sort of this column, use the column default sort order.\n          // Otherwise, invert the direction of the sort.\n          const newSortDirection = isFirstTimeSort\n            ? defaultSortDirection\n            : sortDirection === SortDirection.DESC\n              ? SortDirection.ASC\n              : SortDirection.DESC;\n\n          const onClick = (\n            event: MouseEvent<HTMLDivElement> | KeyboardEvent<HTMLDivElement>\n          ) => {\n            if (sortEnabled) {\n              sort({\n                defaultSortDirection,\n                event,\n                sortBy: dataKey,\n                sortDirection: newSortDirection\n              });\n            }\n            if (onHeaderClick) {\n              onHeaderClick({ columnData, dataKey, event });\n            }\n          };\n\n          const onKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n            if (event.key === \"Enter\" || event.key === \" \") {\n              onClick(event);\n            }\n          };\n\n          // Label may be a non-string node; this matches the original implementation.\n          headerAriaLabel = (column[\"aria-label\"] || label || dataKey) as\n            | string\n            | undefined;\n          // Only sortable columns are announced as sortable (\"none\" = sortable, but not sorted) (#1291)\n          if (sortEnabled) {\n            headerAriaSort = \"none\";\n          }\n          headerTabIndex = 0;\n          headerOnClick = onClick;\n          headerOnKeyDown = onKeyDown;\n        }\n\n        // (The data may be sorted by a column even if the user can't change the sort order)\n        if (sortBy === dataKey) {\n          headerAriaSort =\n            sortDirection === SortDirection.ASC ? \"ascending\" : \"descending\";\n        }\n\n        return (\n          <div\n            aria-label={headerAriaLabel}\n            aria-sort={headerAriaSort}\n            className={classNames}\n            id={columnId}\n            key={\"Header-Col\" + columnKeys[index]}\n            onClick={headerOnClick}\n            onKeyDown={headerOnKeyDown}\n            role=\"columnheader\"\n            style={headerColumnStyle}\n            tabIndex={headerTabIndex}\n          >\n            {renderedHeader}\n          </div>\n        );\n      };\n\n      // A Table with a scrollElement is scrolled by the scroll element (e.g. the window), along with its header;\n      // so the rows may fill the whole viewport (whose height is measured by the inner Grid, which receives the scrollElement).\n      const availableRowsHeight =\n        scrollElement !== undefined\n          ? height\n          : disableHeader\n            ? (height ?? 0)\n            : (height ?? 0) - headerHeight;\n\n      const rowClass =\n        typeof rowClassName === \"function\"\n          ? rowClassName({ index: -1 })\n          : rowClassName;\n      const rowStyleObject =\n        typeof rowStyle === \"function\" ? rowStyle({ index: -1 }) : rowStyle;\n\n      // All Table props are passed through to the inner Grid (as in 9.x), including props that have nothing to do with Grid\n      // (e.g. sortBy and sortDirection): Grid is memoized and won't re-render unless its props change,\n      // so any prop that should trigger a re-render of the rows must be specified here to avoid a stale display.\n      // The same goes for scrollbarWidth (which is not a Grid prop).\n      // \"aria-readonly\" is null (not undefined) so that Grid's default value is not used.\n      const gridProps = {\n        ...props,\n        \"aria-readonly\": null,\n        estimatedRowSize,\n        overscanIndicesGetter,\n        overscanRowCount,\n        scrollbarWidth\n      } as unknown as GridProps;\n\n      return (\n        <div\n          aria-label={ariaLabel}\n          aria-labelledby={ariaLabelledBy}\n          aria-colcount={columns.length}\n          aria-rowcount={rowCount}\n          className={clsx(\"ReactVirtualized__Table\", className)}\n          id={id}\n          role=\"grid\"\n          style={style}\n        >\n          {!disableHeader &&\n            headerRowRenderer({\n              className: clsx(\"ReactVirtualized__Table__headerRow\", rowClass),\n              columns: columns.map(createHeader),\n              style: {\n                height: headerHeight,\n                overflow: \"hidden\",\n                paddingRight: scrollbarWidth,\n                width: width,\n                ...rowStyleObject\n              }\n            })}\n\n          <Grid\n            {...gridProps}\n            elementRef={setGridElementRef}\n            autoContainerWidth\n            className={clsx(\"ReactVirtualized__Table__Grid\", gridClassName)}\n            cellRenderer={createRow}\n            columnWidth={width}\n            columnCount={1}\n            height={availableRowsHeight}\n            id={undefined}\n            noContentRenderer={noRowsRenderer}\n            onScroll={onGridScroll}\n            onSectionRendered={onSectionRendered}\n            ref={setGridRef}\n            role=\"rowgroup\"\n            style={{\n              ...gridStyle,\n              overflowX: \"hidden\"\n            }}\n          />\n        </div>\n      );\n    }\n  )\n);\n"],"names":["useLayoutEffect","useEffect","memo","forwardRef","ArrowKeyStepper","useState","useRef","useCallback","scrollToColumn","scrollToRow","useImperativeHandle","jsx","CellMeasurer","useInsertionEffect","element","cloneElement","isValidElement","Fragment","version","ColumnSizer","SCROLL_DIRECTION_FORWARD","DEFAULT_SCROLLING_RESET_TIME_INTERVAL","noop","increment","isNumericSizeChange","columnCount","scrollbarSize","rowCount","scrollLeft","scrollTop","onScroll","Grid","useReducer","useSyncExternalStore","jsxs","InfiniteLoader","loadMoreRows","isRowLoaded","minimumBatchSize","threshold","startIndex","stopIndex","useMemo","List","bounds","Masonry","onScrollbarPresenceChange","MultiGrid","ScrollSync","defaultSortDirection","createElement","Table","Children","rowClass","rowStyleObject"],"mappings":"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"}