{"version":3,"file":"index.dev.mjs","sources":["../../src/interval-tree.ts","../../src/elements-cache.ts","../../src/use-force-update.ts","../../src/use-masonry.tsx","../../src/use-scroller.ts","../../src/masonry-scroller.tsx","../../src/use-container-position.ts","../../src/use-positioner.ts","../../src/use-resize-observer.ts","../../src/use-scroll-to-index.ts","../../src/masonry.tsx","../../src/list.tsx","../../src/use-infinite-loader.ts"],"sourcesContent":["type Color = 0 | 1 | 2;\nconst RED = 0;\nconst BLACK = 1;\nconst NIL = 2;\n\nconst DELETE = 0;\nconst KEEP = 1;\n\ntype ListNode = {\n  index: number;\n  high: number;\n  next: ListNode | null;\n};\n\ninterface TreeNode {\n  max: number;\n  low: number;\n  high: number;\n  // color\n  C: Color;\n  // P\n  P: TreeNode;\n  // right\n  R: TreeNode;\n  // left\n  L: TreeNode;\n  list: ListNode;\n}\n\ninterface Tree {\n  root: TreeNode;\n  size: number;\n}\n\nfunction addInterval(treeNode: TreeNode, high: number, index: number): boolean {\n  let node: ListNode | null = treeNode.list;\n  let prevNode: ListNode | undefined;\n\n  while (node) {\n    if (node.index === index) return false;\n    if (high > node.high) break;\n    prevNode = node;\n    node = node.next;\n  }\n\n  if (!prevNode) treeNode.list = { index, high, next: node };\n  if (prevNode) prevNode.next = { index, high, next: prevNode.next };\n\n  return true;\n}\n\nfunction removeInterval(treeNode: TreeNode, index: number) {\n  let node: ListNode | null = treeNode.list;\n  if (node.index === index) {\n    if (node.next === null) return DELETE;\n    treeNode.list = node.next;\n    return KEEP;\n  }\n\n  let prevNode: ListNode | undefined = node;\n  node = node.next;\n\n  while (node !== null) {\n    if (node.index === index) {\n      prevNode.next = node.next;\n      return KEEP;\n    }\n    prevNode = node;\n    node = node.next;\n  }\n}\n\nconst NULL_NODE: TreeNode = {\n  low: 0,\n  max: 0,\n  high: 0,\n  C: NIL,\n  // @ts-expect-error\n  P: undefined,\n  // @ts-expect-error\n  R: undefined,\n  // @ts-expect-error\n  L: undefined,\n  // @ts-expect-error\n  list: undefined,\n};\n\nNULL_NODE.P = NULL_NODE;\nNULL_NODE.L = NULL_NODE;\nNULL_NODE.R = NULL_NODE;\n\nfunction updateMax(node: TreeNode) {\n  const max = node.high;\n  if (node.L === NULL_NODE && node.R === NULL_NODE) node.max = max;\n  else if (node.L === NULL_NODE) node.max = Math.max(node.R.max, max);\n  else if (node.R === NULL_NODE) node.max = Math.max(node.L.max, max);\n  else node.max = Math.max(Math.max(node.L.max, node.R.max), max);\n}\n\nfunction updateMaxUp(node: TreeNode) {\n  let x = node;\n\n  while (x.P !== NULL_NODE) {\n    updateMax(x.P);\n    x = x.P;\n  }\n}\n\nfunction rotateLeft(tree: Tree, x: TreeNode) {\n  if (x.R === NULL_NODE) return;\n  const y = x.R;\n  x.R = y.L;\n  if (y.L !== NULL_NODE) y.L.P = x;\n  y.P = x.P;\n\n  if (x.P === NULL_NODE) tree.root = y;\n  else if (x === x.P.L) x.P.L = y;\n  else x.P.R = y;\n\n  y.L = x;\n  x.P = y;\n\n  updateMax(x);\n  updateMax(y);\n}\n\nfunction rotateRight(tree: Tree, x: TreeNode) {\n  if (x.L === NULL_NODE) return;\n  const y = x.L;\n  x.L = y.R;\n  if (y.R !== NULL_NODE) y.R.P = x;\n  y.P = x.P;\n\n  if (x.P === NULL_NODE) tree.root = y;\n  else if (x === x.P.R) x.P.R = y;\n  else x.P.L = y;\n\n  y.R = x;\n  x.P = y;\n\n  updateMax(x);\n  updateMax(y);\n}\n\nfunction replaceNode(tree: Tree, x: TreeNode, y: TreeNode) {\n  if (x.P === NULL_NODE) tree.root = y;\n  else if (x === x.P.L) x.P.L = y;\n  else x.P.R = y;\n  y.P = x.P;\n}\n\nfunction fixRemove(tree: Tree, x: TreeNode) {\n  let w;\n\n  while (x !== NULL_NODE && x.C === BLACK) {\n    if (x === x.P.L) {\n      w = x.P.R;\n\n      if (w.C === RED) {\n        w.C = BLACK;\n        x.P.C = RED;\n        rotateLeft(tree, x.P);\n        w = x.P.R;\n      }\n\n      if (w.L.C === BLACK && w.R.C === BLACK) {\n        w.C = RED;\n        x = x.P;\n      } else {\n        if (w.R.C === BLACK) {\n          w.L.C = BLACK;\n          w.C = RED;\n          rotateRight(tree, w);\n          w = x.P.R;\n        }\n\n        w.C = x.P.C;\n        x.P.C = BLACK;\n        w.R.C = BLACK;\n        rotateLeft(tree, x.P);\n        x = tree.root;\n      }\n    } else {\n      w = x.P.L;\n\n      if (w.C === RED) {\n        w.C = BLACK;\n        x.P.C = RED;\n        rotateRight(tree, x.P);\n        w = x.P.L;\n      }\n\n      if (w.R.C === BLACK && w.L.C === BLACK) {\n        w.C = RED;\n        x = x.P;\n      } else {\n        if (w.L.C === BLACK) {\n          w.R.C = BLACK;\n          w.C = RED;\n          rotateLeft(tree, w);\n          w = x.P.L;\n        }\n\n        w.C = x.P.C;\n        x.P.C = BLACK;\n        w.L.C = BLACK;\n        rotateRight(tree, x.P);\n        x = tree.root;\n      }\n    }\n  }\n\n  x.C = BLACK;\n}\n\nfunction minimumTree(x: TreeNode) {\n  while (x.L !== NULL_NODE) x = x.L;\n  return x;\n}\n\nfunction fixInsert(tree: Tree, z: TreeNode) {\n  let y: TreeNode;\n  while (z.P.C === RED) {\n    if (z.P === z.P.P.L) {\n      y = z.P.P.R;\n\n      if (y.C === RED) {\n        z.P.C = BLACK;\n        y.C = BLACK;\n        z.P.P.C = RED;\n        z = z.P.P;\n      } else {\n        if (z === z.P.R) {\n          z = z.P;\n          rotateLeft(tree, z);\n        }\n\n        z.P.C = BLACK;\n        z.P.P.C = RED;\n        rotateRight(tree, z.P.P);\n      }\n    } else {\n      y = z.P.P.L;\n\n      if (y.C === RED) {\n        z.P.C = BLACK;\n        y.C = BLACK;\n        z.P.P.C = RED;\n        z = z.P.P;\n      } else {\n        if (z === z.P.L) {\n          z = z.P;\n          rotateRight(tree, z);\n        }\n\n        z.P.C = BLACK;\n        z.P.P.C = RED;\n        rotateLeft(tree, z.P.P);\n      }\n    }\n  }\n  tree.root.C = BLACK;\n}\n\nexport interface IIntervalTree {\n  insert(low: number, high: number, index: number): void;\n  remove(index: number): void;\n  search(\n    low: number,\n    high: number,\n    callback: (index: number, low: number) => any\n  ): void;\n  size: number;\n}\n\nexport function createIntervalTree(): IIntervalTree {\n  const tree = {\n    root: NULL_NODE,\n    size: 0,\n  };\n  // we know these indexes are a consistent, safe way to make look ups\n  // for our case so it's a solid O(1) alternative to\n  // the O(log n) searchNode() in typical interval trees\n  const indexMap: Record<number, TreeNode> = {};\n\n  return {\n    insert(low, high, index) {\n      let x: TreeNode = tree.root;\n      let y: TreeNode = NULL_NODE;\n\n      while (x !== NULL_NODE) {\n        y = x;\n        if (low === y.low) break;\n        if (low < x.low) x = x.L;\n        else x = x.R;\n      }\n\n      if (low === y.low && y !== NULL_NODE) {\n        if (!addInterval(y, high, index)) return;\n        y.high = Math.max(y.high, high);\n        updateMax(y);\n        updateMaxUp(y);\n        indexMap[index] = y;\n        tree.size++;\n        return;\n      }\n\n      const z: TreeNode = {\n        low,\n        high,\n        max: high,\n        C: RED,\n        P: y,\n        L: NULL_NODE,\n        R: NULL_NODE,\n        list: { index, high, next: null },\n      };\n\n      if (y === NULL_NODE) {\n        tree.root = z;\n      } else {\n        if (z.low < y.low) y.L = z;\n        else y.R = z;\n        updateMaxUp(z);\n      }\n\n      fixInsert(tree, z);\n      indexMap[index] = z;\n      tree.size++;\n    },\n\n    remove(index) {\n      const z = indexMap[index];\n      if (z === void 0) return;\n      delete indexMap[index];\n\n      const intervalResult = removeInterval(z, index);\n      if (intervalResult === void 0) return;\n      if (intervalResult === KEEP) {\n        z.high = z.list.high;\n        updateMax(z);\n        updateMaxUp(z);\n        tree.size--;\n        return;\n      }\n\n      let y = z;\n      let originalYColor = y.C;\n      let x: TreeNode;\n\n      if (z.L === NULL_NODE) {\n        x = z.R;\n        replaceNode(tree, z, z.R);\n      } else if (z.R === NULL_NODE) {\n        x = z.L;\n        replaceNode(tree, z, z.L);\n      } else {\n        y = minimumTree(z.R);\n        originalYColor = y.C;\n        x = y.R;\n\n        if (y.P === z) {\n          x.P = y;\n        } else {\n          replaceNode(tree, y, y.R);\n          y.R = z.R;\n          y.R.P = y;\n        }\n\n        replaceNode(tree, z, y);\n        y.L = z.L;\n        y.L.P = y;\n        y.C = z.C;\n      }\n\n      updateMax(x);\n      updateMaxUp(x);\n\n      if (originalYColor === BLACK) fixRemove(tree, x);\n      tree.size--;\n    },\n\n    search(low, high, callback) {\n      const stack = [tree.root];\n      while (stack.length !== 0) {\n        const node = stack.pop() as TreeNode;\n        if (node === NULL_NODE || low > node.max) continue;\n        if (node.L !== NULL_NODE) stack.push(node.L);\n        if (node.R !== NULL_NODE) stack.push(node.R);\n        if (node.low <= high && node.high >= low) {\n          let curr: ListNode | null = node.list;\n          while (curr !== null) {\n            if (curr.high >= low) callback(curr.index, node.low);\n            curr = curr.next;\n          }\n        }\n      }\n    },\n\n    get size() {\n      return tree.size;\n    },\n  };\n}\n","export const elementsCache: WeakMap<Element, number> = new WeakMap();\n","import * as React from \"react\";\n\nexport function useForceUpdate() {\n  const setState = React.useState(emptyObj)[1];\n  return React.useRef(() => setState({})).current;\n}\n\nconst emptyObj = {};\n","import memoizeOne from \"@essentials/memoize-one\";\nimport OneKeyMap from \"@essentials/one-key-map\";\nimport useLatest from \"@react-hook/latest\";\nimport * as React from \"react\";\nimport trieMemoize from \"trie-memoize\";\nimport { elementsCache } from \"./elements-cache\";\nimport { useForceUpdate } from \"./use-force-update\";\nimport type { Positioner } from \"./use-positioner\";\n\n/**\n * This hook handles the render phases of the masonry layout and returns the grid as a React element.\n *\n * @param options - Options for configuring the masonry layout renderer. See `UseMasonryOptions`.\n * @param options.positioner\n * @param options.resizeObserver\n * @param options.items\n * @param options.as\n * @param options.id\n * @param options.className\n * @param options.style\n * @param options.role\n * @param options.tabIndex\n * @param options.containerRef\n * @param options.itemAs\n * @param options.itemStyle\n * @param options.itemHeightEstimate\n * @param options.itemKey\n * @param options.overscanBy\n * @param options.scrollTop\n * @param options.isScrolling\n * @param options.height\n * @param options.render\n * @param options.onRender\n */\nexport function useMasonry<Item>({\n  // Measurement and layout\n  positioner,\n  resizeObserver,\n  // Grid items\n  items,\n  // Container props\n  as: ContainerComponent = \"div\",\n  id,\n  className,\n  style,\n  role = \"grid\",\n  tabIndex = 0,\n  containerRef,\n  // Item props\n  itemAs: ItemComponent = \"div\",\n  itemStyle,\n  itemHeightEstimate = 300,\n  itemKey = defaultGetItemKey,\n  // Rendering props\n  overscanBy = 2,\n  scrollTop,\n  isScrolling,\n  height,\n  render: RenderComponent,\n  onRender,\n}: UseMasonryOptions<Item>) {\n  let startIndex = 0;\n  let stopIndex: number | undefined;\n  const forceUpdate = useForceUpdate();\n  const setItemRef = getRefSetter(positioner, resizeObserver);\n  const itemCount = items.length;\n  const {\n    columnWidth,\n    columnCount,\n    range,\n    estimateHeight,\n    size,\n    shortestColumn,\n  } = positioner;\n  const measuredCount = size();\n  const shortestColumnSize = shortestColumn();\n  const children: React.ReactElement[] = [];\n  const itemRole =\n    role === \"list\" ? \"listitem\" : role === \"grid\" ? \"gridcell\" : undefined;\n  const storedOnRender = useLatest(onRender);\n\n  overscanBy = height * overscanBy;\n  const rangeEnd = scrollTop + overscanBy;\n  const needsFreshBatch =\n    shortestColumnSize < rangeEnd && measuredCount < itemCount;\n\n  range(\n    // We overscan in both directions because users scroll both ways,\n    // though one must admit scrolling down is more common and thus\n    // we only overscan by half the downward overscan amount\n    Math.max(0, scrollTop - overscanBy / 2),\n    rangeEnd,\n    (index, left, top) => {\n      const data = items[index];\n      const key = itemKey(data, index);\n      const phaseTwoStyle: React.CSSProperties = {\n        top,\n        left,\n        width: columnWidth,\n        writingMode: \"horizontal-tb\",\n        position: \"absolute\",\n      };\n\n      /* istanbul ignore next */\n      if (\n        typeof process !== \"undefined\" &&\n        process.env.NODE_ENV !== \"production\"\n      ) {\n        throwWithoutData(data, index);\n      }\n\n      children.push(\n        <ItemComponent\n          key={key}\n          ref={setItemRef(index)}\n          role={itemRole}\n          style={\n            typeof itemStyle === \"object\" && itemStyle !== null\n              ? Object.assign({}, phaseTwoStyle, itemStyle)\n              : phaseTwoStyle\n          }\n        >\n          {createRenderElement(RenderComponent, index, data, columnWidth)}\n        </ItemComponent>\n      );\n\n      if (stopIndex === void 0) {\n        startIndex = index;\n        stopIndex = index;\n      } else {\n        startIndex = Math.min(startIndex, index);\n        stopIndex = Math.max(stopIndex, index);\n      }\n    }\n  );\n\n  if (needsFreshBatch) {\n    const batchSize = Math.min(\n      itemCount - measuredCount,\n      Math.ceil(\n        ((scrollTop + overscanBy - shortestColumnSize) / itemHeightEstimate) *\n          columnCount\n      )\n    );\n\n    let index = measuredCount;\n    const phaseOneStyle = getCachedSize(columnWidth);\n\n    for (; index < measuredCount + batchSize; index++) {\n      const data = items[index];\n      const key = itemKey(data, index);\n\n      /* istanbul ignore next */\n      if (\n        typeof process !== \"undefined\" &&\n        process.env.NODE_ENV !== \"production\"\n      ) {\n        throwWithoutData(data, index);\n      }\n\n      children.push(\n        <ItemComponent\n          key={key}\n          ref={setItemRef(index)}\n          role={itemRole}\n          style={\n            typeof itemStyle === \"object\"\n              ? Object.assign({}, phaseOneStyle, itemStyle)\n              : phaseOneStyle\n          }\n        >\n          {createRenderElement(RenderComponent, index, data, columnWidth)}\n        </ItemComponent>\n      );\n    }\n  }\n\n  // Calls the onRender callback if the rendered indices changed\n  React.useEffect(() => {\n    if (typeof storedOnRender.current === \"function\" && stopIndex !== void 0)\n      storedOnRender.current(startIndex, stopIndex, items);\n\n    didEverMount = \"1\";\n  }, [startIndex, stopIndex, items, storedOnRender]);\n  // If we needed a fresh batch we should reload our components with the measured\n  // sizes\n  React.useEffect(() => {\n    if (needsFreshBatch) forceUpdate();\n    // eslint-disable-next-line\n  }, [needsFreshBatch, positioner]);\n\n  // gets the container style object based upon the estimated height and whether or not\n  // the page is being scrolled\n  const containerStyle = getContainerStyle(\n    isScrolling,\n    estimateHeight(itemCount, itemHeightEstimate)\n  );\n\n  return (\n    <ContainerComponent\n      ref={containerRef}\n      key={didEverMount}\n      id={id}\n      role={role}\n      className={className}\n      tabIndex={tabIndex}\n      style={\n        typeof style === \"object\"\n          ? assignUserStyle(containerStyle, style)\n          : containerStyle\n      }\n      children={children}\n    />\n  );\n}\n\n/* istanbul ignore next */\nfunction throwWithoutData(data: any, index: number) {\n  if (!data) {\n    throw new Error(\n      `No data was found at index: ${index}\\n\\n` +\n        `This usually happens when you've mutated or changed the \"items\" array in a ` +\n        `way that makes it shorter than the previous \"items\" array. Masonic knows nothing ` +\n        `about your underlying data and when it caches cell positions, it assumes you aren't ` +\n        `mutating the underlying \"items\".\\n\\n` +\n        `See https://codesandbox.io/s/masonic-w-react-router-example-2b5f9?file=/src/index.js for ` +\n        `an example that gets around this limitations. For advanced implementations, see ` +\n        `https://codesandbox.io/s/masonic-w-react-router-and-advanced-config-example-8em42?file=/src/index.js\\n\\n` +\n        `If this was the result of your removing an item from your \"items\", see this issue: ` +\n        `https://github.com/jaredLunde/masonic/issues/12`\n    );\n  }\n}\n\n// This is for triggering a remount after SSR has loaded in the client w/ hydrate()\nlet didEverMount = \"0\";\n\nexport interface UseMasonryOptions<Item> {\n  /**\n   * An array containing the data used by the grid items.\n   */\n  items: Item[];\n  /**\n   * A grid cell positioner and cache created by the `usePositioner()` hook or\n   * the `createPositioner` utility.\n   */\n  positioner: Positioner;\n  /**\n   * A resize observer that tracks mutations to the grid cells and forces the\n   * Masonry grid to recalculate its layout if any cells affect column heights\n   * change. Check out the `useResizeObserver()` hook.\n   */\n  resizeObserver?: {\n    observe: ResizeObserver[\"observe\"];\n    disconnect: ResizeObserver[\"observe\"];\n    unobserve: ResizeObserver[\"unobserve\"];\n  };\n  /**\n   * This is the type of element the grid container will be rendered as.\n   *\n   * @default \"div\"`\n   */\n  as?: keyof JSX.IntrinsicElements | React.ComponentType<any>;\n  /**\n   * Optionally gives the grid container an `id` prop.\n   */\n  id?: string;\n  /**\n   * Optionally gives the grid container a `className` prop.\n   */\n  className?: string;\n  /**\n   * Adds extra `style` attributes to the container in addition to those\n   * created by the `useMasonry()` hook.\n   */\n  style?: React.CSSProperties;\n  /**\n   * Optionally swap out the accessibility `role` prop of the container and its items.\n   *\n   * @default \"grid\"\n   */\n  role?: \"grid\" | \"list\";\n  /**\n   * Change the `tabIndex` of the grid container.\n   *\n   * @default 0\n   */\n  tabIndex?: number;\n  /**\n   * Forwards a React ref to the grid container.\n   */\n  containerRef?:\n    | ((element: HTMLElement) => void)\n    | React.MutableRefObject<HTMLElement | null>;\n  /**\n   * This is the type of element the grid items will be rendered as.\n   *\n   * @default \"div\"\n   */\n  itemAs?: keyof JSX.IntrinsicElements | React.ComponentType<any>;\n  /**\n   * Adds extra `style` attributes to the grid items in addition to those\n   * created by the `useMasonry()` hook.\n   */\n  itemStyle?: React.CSSProperties;\n  /**\n   * This value is used for estimating the initial height of the masonry grid. It is important for\n   * the UX of the scrolling behavior and in determining how many `items` to render in a batch, so it's\n   * wise to set this value with some level accuracy, though it doesn't need to be perfect.\n   *\n   * @default 300\n   */\n  itemHeightEstimate?: number;\n  /**\n   * The value returned here must be unique to the item. By default, the key is the item's index. This is ok\n   * if your collection of items is never modified. Setting this property ensures that the component in `render`\n   * is reused each time the masonry grid is reflowed. A common pattern would be to return the item's database\n   * ID here if there is one, e.g. `data => data.id`\n   *\n   * @default (data, index) => index`\n   */\n  itemKey?: (data: Item, index: number) => string | number;\n  /**\n   * This number is used for determining the number of grid cells outside of the visible window to render.\n   * The default value is `2` which means \"render 2 windows worth (2 * `height`) of content before and after\n   * the items in the visible window\". A value of `3` would be 3 windows worth of grid cells, so it's a\n   * linear relationship.\n   *\n   * Overscanning is important for preventing tearing when scrolling through items in the grid, but setting\n   * too high of a vaimport { useForceUpdate } from './use-force-update';\nlue may create too much work for React to handle, so it's best that you tune this\n   * value accordingly.\n   *\n   * @default 2\n   */\n  overscanBy?: number;\n\n  /**\n   * This is the height of the window. If you're rendering the grid relative to the browser `window`,\n   * the current `document.documentElement.clientHeight` is the value you'll want to set here. If you're\n   * rendering the grid inside of another HTML element, you'll want to provide the current `element.offsetHeight`\n   * here.\n   */\n  height: number;\n  /**\n   * The current scroll progress in pixel of the window the grid is rendered in. If you're rendering\n   * the grid relative to the browser `window`, you'll want the most current `window.scrollY` here.\n   * If you're rendering the grid inside of another HTML element, you'll want the current `element.scrollTop`\n   * value here. The `useScroller()` hook and `<MasonryScroller>` components will help you if you're\n   * rendering the grid relative to the browser `window`.\n   */\n  scrollTop: number;\n  /**\n   * This property is used for determining whether or not the grid container should add styles that\n   * dramatically increase scroll performance. That is, turning off `pointer-events` and adding a\n   * `will-change: contents;` value to the style string. You can forgo using this prop, but I would\n   * not recommend that. The `useScroller()` hook and `<MasonryScroller>` components will help you if\n   * you're rendering the grid relative to the browser `window`.\n   *\n   * @default false\n   */\n  isScrolling?: boolean;\n  /**\n   * This component is rendered for each item of your `items` prop array. It should accept three props:\n   * `index`, `width`, and `data`. See RenderComponentProps.\n   */\n  render: React.ComponentType<RenderComponentProps<Item>>;\n  /**\n   * This callback is invoked any time the items currently being rendered by the grid change.\n   */\n  onRender?: (startIndex: number, stopIndex: number, items: Item[]) => void;\n}\n\nexport interface RenderComponentProps<Item> {\n  /**\n   * The index of the cell in the `items` prop array.\n   */\n  index: number;\n  /**\n   * The rendered width of the cell's column.\n   */\n  width: number;\n  /**\n   * The data at `items[index]` of your `items` prop array.\n   */\n  data: Item;\n}\n\n//\n// Render-phase utilities\n\n// ~5.5x faster than createElement without the memo\nconst createRenderElement = trieMemoize(\n  [OneKeyMap, {}, WeakMap, OneKeyMap],\n  (RenderComponent, index, data, columnWidth) => (\n    <RenderComponent index={index} data={data} width={columnWidth} />\n  )\n);\n\nconst getContainerStyle = memoizeOne(\n  (isScrolling: boolean | undefined, estimateHeight: number) => ({\n    position: \"relative\",\n    width: \"100%\",\n    maxWidth: \"100%\",\n    height: Math.ceil(estimateHeight),\n    maxHeight: Math.ceil(estimateHeight),\n    willChange: isScrolling ? \"contents\" : void 0,\n    pointerEvents: isScrolling ? \"none\" : void 0,\n  })\n);\n\nconst cmp2 = (args: IArguments, pargs: IArguments | any[]): boolean =>\n  args[0] === pargs[0] && args[1] === pargs[1];\n\nconst assignUserStyle = memoizeOne(\n  (containerStyle, userStyle) => Object.assign({}, containerStyle, userStyle),\n  // @ts-expect-error\n  cmp2\n);\n\nfunction defaultGetItemKey<Item>(_: Item, i: number) {\n  return i;\n}\n\n// the below memoizations for for ensuring shallow equal is reliable for pure\n// component children\nconst getCachedSize = memoizeOne(\n  (width: number): React.CSSProperties => ({\n    width,\n    zIndex: -1000,\n    visibility: \"hidden\",\n    position: \"absolute\",\n    writingMode: \"horizontal-tb\",\n  }),\n  (args, pargs) => args[0] === pargs[0]\n);\n\nconst getRefSetter = memoizeOne(\n  (\n      positioner: Positioner,\n      resizeObserver?: UseMasonryOptions<any>[\"resizeObserver\"]\n    ) =>\n    (index: number) =>\n    (el: HTMLElement | null): void => {\n      if (el === null) return;\n      if (resizeObserver) {\n        resizeObserver.observe(el);\n        elementsCache.set(el, index);\n      }\n      if (positioner.get(index) === void 0)\n        positioner.set(index, el.offsetHeight);\n    },\n  // @ts-expect-error\n  cmp2\n);\n","import {\n  clearRequestTimeout,\n  requestTimeout,\n} from \"@essentials/request-timeout\";\nimport useScrollPosition from \"@react-hook/window-scroll\";\nimport * as React from \"react\";\n\n/**\n * A hook for tracking whether the `window` is currently being scrolled and it's scroll position on\n * the y-axis. These values are used for determining which grid cells to render and when\n * to add styles to the masonry container that maximize scroll performance.\n *\n * @param offset - The vertical space in pixels between the top of the grid container and the top\n *  of the browser `document.documentElement`.\n * @param fps - This determines how often (in frames per second) to update the scroll position of the\n *  browser `window` in state, and as a result the rate the masonry grid recalculates its visible cells.\n *  The default value of `12` has been very reasonable in my own testing, but if you have particularly\n *  heavy `render` components it may be prudent to reduce this number.\n */\nexport function useScroller(\n  offset = 0,\n  fps = 12\n): { scrollTop: number; isScrolling: boolean } {\n  const scrollTop = useScrollPosition(fps);\n  const [isScrolling, setIsScrolling] = React.useState(false);\n  const didMount = React.useRef(0);\n\n  React.useEffect(() => {\n    if (didMount.current === 1) setIsScrolling(true);\n    let didUnsubscribe = false;\n    const to = requestTimeout(() => {\n      if (didUnsubscribe) return;\n      // This is here to prevent premature bail outs while maintaining high resolution\n      // unsets. Without it there will always bee a lot of unnecessary DOM writes to style.\n      setIsScrolling(false);\n    }, 40 + 1000 / fps);\n    didMount.current = 1;\n    return () => {\n      didUnsubscribe = true;\n      clearRequestTimeout(to);\n    };\n  }, [fps, scrollTop]);\n\n  return { scrollTop: Math.max(0, scrollTop - offset), isScrolling };\n}\n","import { useMasonry } from \"./use-masonry\";\nimport type { UseMasonryOptions } from \"./use-masonry\";\nimport { useScroller } from \"./use-scroller\";\n/**\n * A heavily-optimized component that updates `useMasonry()` when the scroll position of the browser `window`\n * changes. This bare-metal component is used by `<Masonry>` under the hood.\n *\n * @param props\n */\nexport function MasonryScroller<Item>(props: MasonryScrollerProps<Item>) {\n  // We put this in its own layer because it's the thing that will trigger the most updates\n  // and we don't want to slower ourselves by cycling through all the functions, objects, and effects\n  // of other hooks\n  const { scrollTop, isScrolling } = useScroller(props.offset, props.scrollFps);\n  // This is an update-heavy phase and while we could just Object.assign here,\n  // it is way faster to inline and there's a relatively low hit to he bundle\n  // size.\n  return useMasonry<Item>({\n    scrollTop,\n    isScrolling,\n    positioner: props.positioner,\n    resizeObserver: props.resizeObserver,\n    items: props.items,\n    onRender: props.onRender,\n    as: props.as,\n    id: props.id,\n    className: props.className,\n    style: props.style,\n    role: props.role,\n    tabIndex: props.tabIndex,\n    containerRef: props.containerRef,\n    itemAs: props.itemAs,\n    itemStyle: props.itemStyle,\n    itemHeightEstimate: props.itemHeightEstimate,\n    itemKey: props.itemKey,\n    overscanBy: props.overscanBy,\n    height: props.height,\n    render: props.render,\n  });\n}\n\nexport interface MasonryScrollerProps<Item>\n  extends Omit<UseMasonryOptions<Item>, \"scrollTop\" | \"isScrolling\"> {\n  /**\n   * This determines how often (in frames per second) to update the scroll position of the\n   * browser `window` in state, and as a result the rate the masonry grid recalculates its visible cells.\n   * The default value of `12` has been very reasonable in my own testing, but if you have particularly\n   * heavy `render` components it may be prudent to reduce this number.\n   *\n   * @default 12\n   */\n  scrollFps?: number;\n  /**\n   * The vertical space in pixels between the top of the grid container and the top\n   * of the browser `document.documentElement`.\n   *\n   * @default 0\n   */\n  offset?: number;\n}\n\nif (typeof process !== \"undefined\" && process.env.NODE_ENV !== \"production\") {\n  MasonryScroller.displayName = \"MasonryScroller\";\n}\n","import useLayoutEffect from \"@react-hook/passive-layout-effect\";\nimport * as React from \"react\";\n\n/**\n * A hook for measuring the width of the grid container, as well as its distance\n * from the top of the document. These values are necessary to correctly calculate the number/width\n * of columns to render, as well as the number of rows to render.\n *\n * @param elementRef - A `ref` object created by `React.useRef()`. That ref should be provided to the\n *   `containerRef` property in `useMasonry()`.\n * @param deps - You can force this hook to recalculate the `offset` and `width` whenever this\n *   dependencies list changes. A common dependencies list might look like `[windowWidth, windowHeight]`,\n *   which would force the hook to recalculate any time the size of the browser `window` changed.\n */\nexport function useContainerPosition(\n  elementRef: React.MutableRefObject<HTMLElement | null>,\n  deps: React.DependencyList = emptyArr\n): ContainerPosition {\n  const [containerPosition, setContainerPosition] =\n    React.useState<ContainerPosition>({ offset: 0, width: 0 });\n\n  useLayoutEffect(() => {\n    const { current } = elementRef;\n    if (current !== null) {\n      let offset = 0;\n      let el = current;\n\n      do {\n        offset += el.offsetTop || 0;\n        el = el.offsetParent as HTMLElement;\n      } while (el);\n\n      if (\n        offset !== containerPosition.offset ||\n        current.offsetWidth !== containerPosition.width\n      ) {\n        setContainerPosition({\n          offset,\n          width: current.offsetWidth,\n        });\n      }\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, deps);\n\n  return containerPosition;\n}\n\nexport interface ContainerPosition {\n  /**\n   * The distance in pixels between the top of the element in `elementRef` and the top of\n   * the `document.documentElement`.\n   */\n  offset: number;\n  /**\n   * The `offsetWidth` of the element in `elementRef`.\n   */\n  width: number;\n}\n\nconst emptyArr: [] = [];\n","import * as React from \"react\";\nimport { createIntervalTree } from \"./interval-tree\";\n\n/**\n * This hook creates the grid cell positioner and cache required by `useMasonry()`. This is\n * the meat of the grid's layout algorithm, determining which cells to render at a given scroll\n * position, as well as where to place new items in the grid.\n *\n * @param options - Properties that determine the number of columns in the grid, as well\n *  as their widths.\n * @param options.columnWidth\n * @param options.width\n * @param deps - This hook will create a new positioner, clearing all existing cached positions,\n *  whenever the dependencies in this list change.\n * @param options.columnGutter\n * @param options.rowGutter\n * @param options.columnCount\n * @param options.maxColumnCount\n * @param options.maxColumnWidth\n */\nexport function usePositioner(\n  {\n    width,\n    columnWidth = 200,\n    columnGutter = 0,\n    rowGutter,\n    columnCount,\n    maxColumnCount,\n    maxColumnWidth,\n  }: UsePositionerOptions,\n  deps: React.DependencyList = emptyArr\n): Positioner {\n  const initPositioner = (): Positioner => {\n    const [computedColumnWidth, computedColumnCount] = getColumns(\n      width,\n      columnWidth,\n      columnGutter,\n      columnCount,\n      maxColumnCount,\n      maxColumnWidth\n    );\n    return createPositioner(\n      computedColumnCount,\n      computedColumnWidth,\n      columnGutter,\n      rowGutter ?? columnGutter\n    );\n  };\n  const positionerRef = React.useRef<Positioner>();\n  if (positionerRef.current === undefined)\n    positionerRef.current = initPositioner();\n\n  const prevDeps = React.useRef(deps);\n  const opts = [\n    width,\n    columnWidth,\n    columnGutter,\n    rowGutter,\n    columnCount,\n    maxColumnCount,\n    maxColumnWidth,\n  ];\n  const prevOpts = React.useRef(opts);\n  const optsChanged = !opts.every((item, i) => prevOpts.current[i] === item);\n\n  if (typeof process !== \"undefined\" && process.env.NODE_ENV !== \"production\") {\n    if (deps.length !== prevDeps.current.length) {\n      throw new Error(\n        \"usePositioner(): The length of your dependencies array changed.\"\n      );\n    }\n  }\n\n  // Create a new positioner when the dependencies or sizes change\n  // Thanks to https://github.com/khmm12 for pointing this out\n  // https://github.com/jaredLunde/masonic/pull/41\n  if (optsChanged || !deps.every((item, i) => prevDeps.current[i] === item)) {\n    const prevPositioner = positionerRef.current;\n    const positioner = initPositioner();\n    prevDeps.current = deps;\n    prevOpts.current = opts;\n\n    if (optsChanged) {\n      const cacheSize = prevPositioner.size();\n      for (let index = 0; index < cacheSize; index++) {\n        const pos = prevPositioner.get(index);\n        positioner.set(index, pos !== void 0 ? pos.height : 0);\n      }\n    }\n\n    positionerRef.current = positioner;\n  }\n\n  return positionerRef.current;\n}\n\nexport interface UsePositionerOptions {\n  /**\n   * The width of the container you're rendering the grid within, i.e. the container\n   * element's `element.offsetWidth`\n   */\n  width: number;\n  /**\n   * The minimum column width. The `usePositioner()` hook will automatically size the\n   * columns to fill their container based upon the `columnWidth` and `columnGutter` values.\n   * It will never render anything smaller than this width unless its container itself is\n   * smaller than its value. This property is optional if you're using a static `columnCount`.\n   *\n   * @default 200\n   */\n  columnWidth?: number;\n  /**\n   * The maximum column width. Calculated column widths will be capped at this value.\n   */\n  maxColumnWidth?: number;\n  /**\n   * This sets the horizontal space between grid columns in pixels. If `rowGutter` is not set, this\n   * also sets the vertical space between cells within a column in pixels.\n   *\n   * @default 0\n   */\n  columnGutter?: number;\n  /**\n   * This sets the vertical space between cells within a column in pixels. If not set, the value of\n   * `columnGutter` is used instead.\n   */\n  rowGutter?: number;\n  /**\n   * By default, `usePositioner()` derives the column count from the `columnWidth`, `columnGutter`,\n   * and `width` props. However, in some situations it is nice to be able to override that behavior\n   * (e.g. creating a `List` component).\n   */\n  columnCount?: number;\n  /**\n   * The upper bound of column count. This property won't work if `columnCount` is set.\n   */\n  maxColumnCount?: number;\n}\n\n/**\n * Creates a cell positioner for the `useMasonry()` hook. The `usePositioner()` hook uses\n * this utility under the hood.\n *\n * @param columnCount - The number of columns in the grid\n * @param columnWidth - The width of each column in the grid\n * @param columnGutter - The amount of horizontal space between columns in pixels.\n * @param rowGutter - The amount of vertical space between cells within a column in pixels (falls back\n * to `columnGutter`).\n */\nexport const createPositioner = (\n  columnCount: number,\n  columnWidth: number,\n  columnGutter = 0,\n  rowGutter = columnGutter\n): Positioner => {\n  // O(log(n)) lookup of cells to render for a given viewport size\n  // Store tops and bottoms of each cell for fast intersection lookup.\n  const intervalTree = createIntervalTree();\n  // Track the height of each column.\n  // Layout algorithm below always inserts into the shortest column.\n  const columnHeights: number[] = new Array(columnCount);\n  // Used for O(1) item access\n  const items: PositionerItem[] = [];\n  // Tracks the item indexes within an individual column\n  const columnItems: number[][] = new Array(columnCount);\n\n  for (let i = 0; i < columnCount; i++) {\n    columnHeights[i] = 0;\n    columnItems[i] = [];\n  }\n\n  return {\n    columnCount,\n    columnWidth,\n    set: (index, height = 0) => {\n      let column = 0;\n\n      // finds the shortest column and uses it\n      for (let i = 1; i < columnHeights.length; i++) {\n        if (columnHeights[i] < columnHeights[column]) column = i;\n      }\n\n      const top = columnHeights[column] || 0;\n      columnHeights[column] = top + height + rowGutter;\n      columnItems[column].push(index);\n      items[index] = {\n        left: column * (columnWidth + columnGutter),\n        top,\n        height,\n        column,\n      };\n      intervalTree.insert(top, top + height, index);\n    },\n    get: (index) => items[index],\n    // This only updates items in the specific columns that have changed, on and after the\n    // specific items that have changed\n    update: (updates) => {\n      const columns: number[] = new Array(columnCount);\n      let i = 0,\n        j = 0;\n\n      // determines which columns have items that changed, as well as the minimum index\n      // changed in that column, as all items after that index will have their positions\n      // affected by the change\n      for (; i < updates.length - 1; i++) {\n        const index = updates[i];\n        const item = items[index];\n        item.height = updates[++i];\n        intervalTree.remove(index);\n        intervalTree.insert(item.top, item.top + item.height, index);\n        columns[item.column] =\n          columns[item.column] === void 0\n            ? index\n            : Math.min(index, columns[item.column]);\n      }\n\n      for (i = 0; i < columns.length; i++) {\n        // bails out if the column didn't change\n        if (columns[i] === void 0) continue;\n        const itemsInColumn = columnItems[i];\n        // the index order is sorted with certainty so binary search is a great solution\n        // here as opposed to Array.indexOf()\n        const startIndex = binarySearch(itemsInColumn, columns[i]);\n        const index = columnItems[i][startIndex];\n        const startItem = items[index];\n        columnHeights[i] = startItem.top + startItem.height + rowGutter;\n\n        for (j = startIndex + 1; j < itemsInColumn.length; j++) {\n          const index = itemsInColumn[j];\n          const item = items[index];\n          item.top = columnHeights[i];\n          columnHeights[i] = item.top + item.height + rowGutter;\n          intervalTree.remove(index);\n          intervalTree.insert(item.top, item.top + item.height, index);\n        }\n      }\n    },\n    // Render all cells visible within the viewport range defined.\n    range: (lo, hi, renderCallback) =>\n      intervalTree.search(lo, hi, (index, top) =>\n        renderCallback(index, items[index].left, top)\n      ),\n    estimateHeight: (itemCount, defaultItemHeight): number => {\n      const tallestColumn = Math.max(0, Math.max.apply(null, columnHeights));\n\n      return itemCount === intervalTree.size\n        ? tallestColumn\n        : tallestColumn +\n            Math.ceil((itemCount - intervalTree.size) / columnCount) *\n              defaultItemHeight;\n    },\n    shortestColumn: () => {\n      if (columnHeights.length > 1) return Math.min.apply(null, columnHeights);\n      return columnHeights[0] || 0;\n    },\n    size(): number {\n      return intervalTree.size;\n    },\n    all(): PositionerItem[] {\n      return items;\n    },\n  };\n};\n\nexport interface Positioner {\n  /**\n   * The number of columns in the grid\n   */\n  columnCount: number;\n  /**\n   * The width of each column in the grid\n   */\n  columnWidth: number;\n  /**\n   * Sets the position for the cell at `index` based upon the cell's height\n   */\n  set: (index: number, height: number) => void;\n  /**\n   * Gets the `PositionerItem` for the cell at `index`\n   */\n  get: (index: number) => PositionerItem | undefined;\n  /**\n   * Updates cells based on their indexes and heights\n   * positioner.update([index, height, index, height, index, height...])\n   */\n  update: (updates: number[]) => void;\n  /**\n   * Searches the interval tree for grid cells with a `top` value in\n   * betwen `lo` and `hi` and invokes the callback for each item that\n   * is discovered\n   */\n  range: (\n    lo: number,\n    hi: number,\n    renderCallback: (index: number, left: number, top: number) => void\n  ) => void;\n  /**\n   * Returns the number of grid cells in the cache\n   */\n\n  size: () => number;\n  /**\n   * Estimates the total height of the grid\n   */\n\n  estimateHeight: (itemCount: number, defaultItemHeight: number) => number;\n  /**\n   * Returns the height of the shortest column in the grid\n   */\n\n  shortestColumn: () => number;\n  /**\n   * Returns all `PositionerItem` items\n   */\n  all: () => PositionerItem[];\n}\n\nexport interface PositionerItem {\n  /**\n   * This is how far from the top edge of the grid container in pixels the\n   * item is placed\n   */\n  top: number;\n  /**\n   * This is how far from the left edge of the grid container in pixels the\n   * item is placed\n   */\n  left: number;\n  /**\n   * This is the height of the grid cell\n   */\n  height: number;\n  /**\n   * This is the column number containing the grid cell\n   */\n  column: number;\n}\n\n/* istanbul ignore next */\nconst binarySearch = (a: number[], y: number): number => {\n  let l = 0;\n  let h = a.length - 1;\n\n  while (l <= h) {\n    const m = (l + h) >>> 1;\n    const x = a[m];\n    if (x === y) return m;\n    else if (x <= y) l = m + 1;\n    else h = m - 1;\n  }\n\n  return -1;\n};\n\nconst getColumns = (\n  width = 0,\n  minimumWidth = 0,\n  gutter = 8,\n  columnCount?: number,\n  maxColumnCount?: number,\n  maxColumnWidth?: number\n): [number, number] => {\n  columnCount =\n    columnCount ||\n    Math.min(\n      Math.floor((width + gutter) / (minimumWidth + gutter)),\n      maxColumnCount || Infinity\n    ) ||\n    1;\n  let columnWidth = Math.floor(\n    (width - gutter * (columnCount - 1)) / columnCount\n  );\n\n  // Cap the column width if maxColumnWidth is specified\n  if (maxColumnWidth !== undefined && columnWidth > maxColumnWidth) {\n    columnWidth = maxColumnWidth;\n  }\n\n  return [columnWidth, columnCount];\n};\n\nconst emptyArr: [] = [];\n","import rafSchd from \"raf-schd\";\nimport * as React from \"react\";\nimport trieMemoize from \"trie-memoize\";\nimport { elementsCache } from \"./elements-cache\";\nimport { useForceUpdate } from \"./use-force-update\";\nimport type { Positioner } from \"./use-positioner\";\n\n/**\n * Creates a resize observer that forces updates to the grid cell positions when mutations are\n * made to cells affecting their height.\n *\n * @param positioner - The masonry cell positioner created by the `usePositioner()` hook.\n */\nexport function useResizeObserver(positioner: Positioner) {\n  const forceUpdate = useForceUpdate();\n  const resizeObserver = createResizeObserver(positioner, forceUpdate);\n  // Cleans up the resize observers when they change or the\n  // component unmounts\n  React.useEffect(() => () => resizeObserver.disconnect(), [resizeObserver]);\n  return resizeObserver;\n}\n\nconst _handlerForType = rafSchd((target: HTMLElement) => {});\n\ntype IHandler = typeof _handlerForType;\n\n/**\n * Creates a resize observer that fires an `updater` callback whenever the height of\n * one or many cells change. The `useResizeObserver()` hook is using this under the hood.\n *\n * @param positioner - A cell positioner created by the `usePositioner()` hook or the `createPositioner()` utility\n * @param updater - A callback that fires whenever one or many cell heights change.\n */\nexport const createResizeObserver = trieMemoize(\n  [WeakMap],\n  // TODO: figure out a way to test this\n  /* istanbul ignore next */\n  (positioner: Positioner, updater: (updates: number[]) => void) => {\n    const updates: number[] = [];\n\n    const update = rafSchd(() => {\n      if (updates.length > 0) {\n        // Updates the size/positions of the cell with the resize\n        // observer updates\n        positioner.update(updates);\n        updater(updates);\n      }\n      updates.length = 0;\n    });\n\n    const commonHandler = (target: HTMLElement) => {\n      const height = target.offsetHeight;\n      if (height > 0) {\n        const index = elementsCache.get(target);\n        if (index !== void 0) {\n          const position = positioner.get(index);\n          if (position !== void 0 && height !== position.height)\n            updates.push(index, height);\n        }\n      }\n      update();\n    };\n\n    const handlers = new Map<number, IHandler>();\n    const handleEntries: ResizeObserverCallback = (entries) => {\n      let i = 0;\n\n      for (; i < entries.length; i++) {\n        const entry = entries[i];\n        const index = elementsCache.get(entry.target);\n\n        if (index === void 0) continue;\n        let handler = handlers.get(index);\n        if (!handler) {\n          handler = rafSchd(commonHandler);\n          handlers.set(index, handler);\n        }\n        handler(entry.target as HTMLElement);\n      }\n    };\n\n    const ro = new ResizeObserver(handleEntries);\n    // Overrides the original disconnect to include cancelling handling the entries.\n    // Ideally this would be its own method but that would result in a breaking\n    // change.\n    const disconnect = ro.disconnect.bind(ro);\n    ro.disconnect = () => {\n      disconnect();\n      handlers.forEach((handler) => {\n        handler.cancel();\n      });\n    };\n\n    return ro;\n  }\n);\n","import useEvent from \"@react-hook/event\";\nimport useLatest from \"@react-hook/latest\";\nimport { useThrottleCallback } from \"@react-hook/throttle\";\nimport * as React from \"react\";\nimport type { Positioner, PositionerItem } from \"./use-positioner\";\n\n/**\n * A hook that creates a callback for scrolling to a specific index in\n * the \"items\" array.\n *\n * @param positioner - A positioner created by the `usePositioner()` hook\n * @param options - Configuration options\n */\nexport function useScrollToIndex(\n  positioner: Positioner,\n  options: UseScrollToIndexOptions\n) {\n  const {\n    align = \"top\",\n    element = typeof window !== \"undefined\" && window,\n    offset = 0,\n    height = typeof window !== \"undefined\" ? window.innerHeight : 0,\n  } = options;\n  const latestOptions = useLatest({\n    positioner,\n    element,\n    align,\n    offset,\n    height,\n  } as const);\n  const getTarget = React.useRef(() => {\n    const latestElement = latestOptions.current.element;\n    return latestElement && \"current\" in latestElement\n      ? latestElement.current\n      : latestElement;\n  }).current;\n  const [state, dispatch] = React.useReducer(\n    (\n      state: {\n        position: PositionerItem | undefined;\n        index: number | undefined;\n        prevTop: number | undefined;\n      },\n      action:\n        | { type: \"scrollToIndex\"; value: number | undefined }\n        | { type: \"setPosition\"; value: PositionerItem | undefined }\n        | { type: \"setPrevTop\"; value: number | undefined }\n        | { type: \"reset\" }\n    ) => {\n      const nextState = {\n        position: state.position,\n        index: state.index,\n        prevTop: state.prevTop,\n      };\n\n      /* istanbul ignore next */\n      if (action.type === \"scrollToIndex\") {\n        return {\n          position: latestOptions.current.positioner.get(action.value ?? -1),\n          index: action.value,\n          prevTop: void 0,\n        };\n      } else if (action.type === \"setPosition\") {\n        nextState.position = action.value;\n      } else if (action.type === \"setPrevTop\") {\n        nextState.prevTop = action.value;\n      } else if (action.type === \"reset\") {\n        return defaultState;\n      }\n\n      return nextState;\n    },\n    defaultState\n  );\n  const throttledDispatch = useThrottleCallback(dispatch, 15);\n\n  // If we find the position along the way we can immediately take off\n  // to the correct spot.\n  useEvent(getTarget() as Window, \"scroll\", () => {\n    if (!state.position && state.index) {\n      const position = latestOptions.current.positioner.get(state.index);\n\n      if (position) {\n        dispatch({ type: \"setPosition\", value: position });\n      }\n    }\n  });\n\n  // If the top changes out from under us in the case of dynamic cells, we\n  // want to keep following it.\n  const currentTop =\n    state.index !== void 0 &&\n    latestOptions.current.positioner.get(state.index)?.top;\n\n  React.useEffect(() => {\n    const target = getTarget();\n    if (!target) return;\n    const { height, align, offset, positioner } = latestOptions.current;\n\n    if (state.position) {\n      let scrollTop = state.position.top;\n\n      if (align === \"bottom\") {\n        scrollTop = scrollTop - height + state.position.height;\n      } else if (align === \"center\") {\n        scrollTop -= (height - state.position.height) / 2;\n      }\n\n      target.scrollTo(0, Math.max(0, (scrollTop += offset)));\n      // Resets state after 400ms, an arbitrary time I determined to be\n      // still visually pleasing if there is a slow network reply in dynamic\n      // cells\n      let didUnsubscribe = false;\n      const timeout = setTimeout(\n        () => !didUnsubscribe && dispatch({ type: \"reset\" }),\n        400\n      );\n      return () => {\n        didUnsubscribe = true;\n        clearTimeout(timeout);\n      };\n    } else if (state.index !== void 0) {\n      // Estimates the top based upon the average height of current cells\n      let estimatedTop =\n        (positioner.shortestColumn() / positioner.size()) * state.index;\n      if (state.prevTop)\n        estimatedTop = Math.max(estimatedTop, state.prevTop + height);\n      target.scrollTo(0, estimatedTop);\n      throttledDispatch({ type: \"setPrevTop\", value: estimatedTop });\n    }\n  }, [currentTop, state, latestOptions, getTarget, throttledDispatch]);\n\n  return React.useRef((index: number) => {\n    dispatch({ type: \"scrollToIndex\", value: index });\n  }).current;\n}\n\nconst defaultState = {\n  index: void 0,\n  position: void 0,\n  prevTop: void 0,\n} as const;\n\nexport type UseScrollToIndexOptions = {\n  /**\n   * The window element or a React ref for the window element. That is,\n   * this is the grid container.\n   *\n   * @default window\n   */\n  element?: Window | HTMLElement | React.RefObject<HTMLElement> | null;\n  /**\n   * Sets the vertical alignment of the cell within the grid container.\n   *\n   * @default \"top\"\n   */\n  align?: \"center\" | \"top\" | \"bottom\";\n  /**\n   * The height of the grid.\n   *\n   * @default window.innerHeight\n   */\n  height?: number;\n  /**\n   * The vertical space in pixels between the top of the grid container and the top\n   * of the window.\n   *\n   * @default 0\n   */\n  offset?: number;\n};\n","import { useWindowSize } from \"@react-hook/window-size\";\nimport * as React from \"react\";\nimport { MasonryScroller } from \"./masonry-scroller\";\nimport type { MasonryScrollerProps } from \"./masonry-scroller\";\nimport { useContainerPosition } from \"./use-container-position\";\nimport { usePositioner } from \"./use-positioner\";\nimport type { UsePositionerOptions } from \"./use-positioner\";\nimport { useResizeObserver } from \"./use-resize-observer\";\nimport { useScrollToIndex } from \"./use-scroll-to-index\";\nimport type { UseScrollToIndexOptions } from \"./use-scroll-to-index\";\n\n/**\n * A \"batteries included\" masonry grid which includes all of the implementation details below. This component is the\n * easiest way to get off and running in your app, before switching to more advanced implementations, if necessary.\n * It will change its column count to fit its container's width and will decide how many rows to render based upon\n * the height of the browser `window`.\n *\n * @param props\n */\nexport function Masonry<Item>(props: MasonryProps<Item>) {\n  const containerRef = React.useRef<null | HTMLElement>(null);\n  const windowSize = useWindowSize({\n    initialWidth: props.ssrWidth,\n    initialHeight: props.ssrHeight,\n  });\n  const containerPos = useContainerPosition(containerRef, windowSize);\n  const nextProps = Object.assign(\n    {\n      offset: containerPos.offset,\n      width: containerPos.width || windowSize[0],\n      height: windowSize[1],\n      containerRef,\n    },\n    props\n  ) as any;\n  nextProps.positioner = usePositioner(nextProps);\n  nextProps.resizeObserver = useResizeObserver(nextProps.positioner);\n  const scrollToIndex = useScrollToIndex(nextProps.positioner, {\n    height: nextProps.height,\n    offset: containerPos.offset,\n    align:\n      typeof props.scrollToIndex === \"object\"\n        ? props.scrollToIndex.align\n        : void 0,\n  });\n  const index =\n    props.scrollToIndex &&\n    (typeof props.scrollToIndex === \"number\"\n      ? props.scrollToIndex\n      : props.scrollToIndex.index);\n\n  React.useEffect(() => {\n    if (index !== void 0) scrollToIndex(index);\n  }, [index, scrollToIndex]);\n\n  return React.createElement(MasonryScroller, nextProps);\n}\n\nexport interface MasonryProps<Item>\n  extends Omit<\n      MasonryScrollerProps<Item>,\n      \"offset\" | \"width\" | \"height\" | \"containerRef\" | \"positioner\"\n    >,\n    Pick<\n      UsePositionerOptions,\n      | \"columnWidth\"\n      | \"columnGutter\"\n      | \"rowGutter\"\n      | \"columnCount\"\n      | \"maxColumnCount\"\n      | \"maxColumnWidth\"\n    > {\n  /**\n   * Scrolls to a given index within the grid. The grid will re-scroll\n   * any time the index changes.\n   */\n  scrollToIndex?:\n    | number\n    | {\n        index: number;\n        align: UseScrollToIndexOptions[\"align\"];\n      };\n  /**\n   * This is the width that will be used for the browser `window` when rendering this component in SSR.\n   * This prop isn't relevant for client-side only apps.\n   */\n  ssrWidth?: number;\n  /**\n   * This is the height that will be used for the browser `window` when rendering this component in SSR.\n   * This prop isn't relevant for client-side only apps.\n   */\n  ssrHeight?: number;\n  /**\n   * This determines how often (in frames per second) to update the scroll position of the\n   * browser `window` in state, and as a result the rate the masonry grid recalculates its visible cells.\n   * The default value of `12` has been very reasonable in my own testing, but if you have particularly\n   * heavy `render` components it may be prudent to reduce this number.\n   *\n   * @default 12\n   */\n  scrollFps?: number;\n}\n\nif (typeof process !== \"undefined\" && process.env.NODE_ENV !== \"production\") {\n  Masonry.displayName = \"Masonry\";\n}\n","import * as React from \"react\";\nimport { Masonry } from \"./masonry\";\nimport type { MasonryProps } from \"./masonry\";\n\n/**\n * This is just a single-column `<Masonry>` component without column-specific props.\n *\n * @param props\n */\nexport function List<Item>(props: ListProps<Item>) {\n  return (\n    <Masonry<Item>\n      role=\"list\"\n      rowGutter={props.rowGutter}\n      columnCount={1}\n      columnWidth={1}\n      {...props}\n    />\n  );\n}\n\nexport interface ListProps<Item>\n  extends Omit<\n    MasonryProps<Item>,\n    \"columGutter\" | \"columnCount\" | \"columnWidth\"\n  > {\n  /**\n   * The amount of vertical space in pixels to add between the list cells.\n   *\n   * @default 0\n   */\n  rowGutter?: number;\n}\n\nif (typeof process !== \"undefined\" && process.env.NODE_ENV !== \"production\") {\n  List.displayName = \"List\";\n}\n","import useLatest from \"@react-hook/latest\";\nimport * as React from \"react\";\n\n/**\n * A utility hook for seamlessly adding infinite scroll behavior to the `useMasonry()` hook. This\n * hook invokes a callback each time the last rendered index surpasses the total number of items\n * in your items array or the number defined in the `totalItems` option.\n *\n * @param loadMoreItems - This callback is invoked when more rows must be loaded. It will be used to\n *  determine when to refresh the list with the newly-loaded data. This callback may be called multiple\n *  times in reaction to a single scroll event, so it's important to memoize its arguments. If you're\n *  creating this callback inside of a functional component, make sure you wrap it in `React.useCallback()`,\n *  as well.\n * @param options\n */\nexport function useInfiniteLoader<Item, T extends LoadMoreItemsCallback<Item>>(\n  loadMoreItems: T,\n  options: UseInfiniteLoaderOptions<Item> = emptyObj\n): LoadMoreItemsCallback<Item> {\n  const {\n    isItemLoaded,\n    minimumBatchSize = 16,\n    threshold = 16,\n    totalItems = 9e9,\n  } = options;\n  const storedLoadMoreItems = useLatest(loadMoreItems);\n  const storedIsItemLoaded = useLatest(isItemLoaded);\n\n  return React.useCallback(\n    (startIndex, stopIndex, items) => {\n      const unloadedRanges = scanForUnloadedRanges(\n        storedIsItemLoaded.current,\n        minimumBatchSize,\n        items,\n        totalItems,\n        Math.max(0, startIndex - threshold),\n        Math.min(totalItems - 1, (stopIndex || 0) + threshold)\n      );\n      // The user is responsible for memoizing their loadMoreItems() function\n      // because we don't want to make assumptions about how they want to deal\n      // with `items`\n      for (let i = 0; i < unloadedRanges.length - 1; ++i)\n        storedLoadMoreItems.current(\n          unloadedRanges[i],\n          unloadedRanges[++i],\n          items\n        );\n    },\n    [\n      totalItems,\n      minimumBatchSize,\n      threshold,\n      storedLoadMoreItems,\n      storedIsItemLoaded,\n    ]\n  );\n}\n\n/**\n * Returns all of the ranges within a larger range that contain unloaded rows.\n *\n * @param isItemLoaded\n * @param minimumBatchSize\n * @param items\n * @param totalItems\n * @param startIndex\n * @param stopIndex\n */\nfunction scanForUnloadedRanges<Item>(\n  isItemLoaded: UseInfiniteLoaderOptions<Item>[\"isItemLoaded\"] = defaultIsItemLoaded,\n  minimumBatchSize: UseInfiniteLoaderOptions<Item>[\"minimumBatchSize\"] = 16,\n  items: any[],\n  totalItems: UseInfiniteLoaderOptions<Item>[\"totalItems\"] = 9e9,\n  startIndex: number,\n  stopIndex: number\n): number[] {\n  const unloadedRanges: number[] = [];\n  let rangeStartIndex: number | undefined,\n    rangeStopIndex: number | undefined,\n    index = startIndex;\n\n  /* istanbul ignore next */\n  for (; index <= stopIndex; index++) {\n    if (!isItemLoaded(index, items)) {\n      rangeStopIndex = index;\n      if (rangeStartIndex === void 0) rangeStartIndex = index;\n    } else if (rangeStartIndex !== void 0 && rangeStopIndex !== void 0) {\n      unloadedRanges.push(rangeStartIndex, rangeStopIndex);\n      rangeStartIndex = rangeStopIndex = void 0;\n    }\n  }\n\n  // If :rangeStopIndex is not null it means we haven't run out of unloaded rows.\n  // Scan forward to try filling our :minimumBatchSize.\n  if (rangeStartIndex !== void 0 && rangeStopIndex !== void 0) {\n    const potentialStopIndex = Math.min(\n      Math.max(rangeStopIndex, rangeStartIndex + minimumBatchSize - 1),\n      totalItems - 1\n    );\n\n    /* istanbul ignore next */\n    for (index = rangeStopIndex + 1; index <= potentialStopIndex; index++) {\n      if (!isItemLoaded(index, items)) {\n        rangeStopIndex = index;\n      } else {\n        break;\n      }\n    }\n\n    unloadedRanges.push(rangeStartIndex, rangeStopIndex);\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  /* istanbul ignore next */\n  if (unloadedRanges.length) {\n    let firstUnloadedStart = unloadedRanges[0];\n    const firstUnloadedStop = unloadedRanges[1];\n\n    while (\n      firstUnloadedStop - firstUnloadedStart + 1 < minimumBatchSize &&\n      firstUnloadedStart > 0\n    ) {\n      const index = firstUnloadedStart - 1;\n\n      if (!isItemLoaded(index, items)) {\n        unloadedRanges[0] = firstUnloadedStart = index;\n      } else {\n        break;\n      }\n    }\n  }\n\n  return unloadedRanges;\n}\n\nconst defaultIsItemLoaded = <Item>(index: number, items: Item[]): boolean =>\n  items[index] !== void 0;\n\nexport interface UseInfiniteLoaderOptions<Item> {\n  /**\n   *  A callback responsible for determining the loaded state of each item. Should return `true`\n   * if the item has already been loaded and `false` if not.\n   *\n   * @default (index: number, items: any[]) => boolean\n   */\n  isItemLoaded?: (index: number, items: Item[]) => boolean;\n  /**\n   * The minimum number of new items to be loaded at a time.  This property can be used to\n   * batch requests and reduce HTTP requests.\n   *\n   * @default 16\n   */\n  minimumBatchSize?: number;\n  /**\n   * The threshold at which to pre-fetch data. A threshold X means that new data should start\n   * loading when a user scrolls within X cells of the end of your `items` array.\n   *\n   * @default 16\n   */\n  threshold?: number;\n  /**\n   * The total number of items you'll need to eventually load (if known). This can\n   * be arbitrarily high if not known.\n   *\n   * @default 9e9\n   */\n  totalItems?: number;\n}\n\nexport type LoadMoreItemsCallback<Item> = (\n  startIndex: number,\n  stopIndex: number,\n  items: Item[]\n) => any;\n\nconst emptyObj = {};\n"],"names":["RED","BLACK","NIL","DELETE","KEEP","addInterval","treeNode","high","index","node","list","prevNode","next","removeInterval","NULL_NODE","low","max","C","P","undefined","R","L","updateMax","Math","updateMaxUp","x","rotateLeft","tree","y","root","rotateRight","replaceNode","fixRemove","w","minimumTree","fixInsert","z","createIntervalTree","size","indexMap","insert","remove","intervalResult","originalYColor","search","callback","stack","length","pop","push","curr","elementsCache","WeakMap","useForceUpdate","setState","React","useState","emptyObj","useRef","current","useMasonry","positioner","resizeObserver","items","as","ContainerComponent","id","className","style","role","tabIndex","containerRef","itemAs","ItemComponent","itemStyle","itemHeightEstimate","itemKey","defaultGetItemKey","overscanBy","scrollTop","isScrolling","height","render","RenderComponent","onRender","startIndex","stopIndex","forceUpdate","setItemRef","getRefSetter","itemCount","columnWidth","columnCount","range","estimateHeight","shortestColumn","measuredCount","shortestColumnSize","children","itemRole","storedOnRender","useLatest","rangeEnd","needsFreshBatch","left","top","data","key","phaseTwoStyle","width","writingMode","position","process","throwWithoutData","__reactCreateElement__","Object","assign","createRenderElement","min","batchSize","ceil","phaseOneStyle","getCachedSize","useEffect","didEverMount","containerStyle","getContainerStyle","assignUserStyle","Error","trieMemoize","OneKeyMap","memoizeOne","maxWidth","maxHeight","willChange","pointerEvents","cmp2","args","pargs","userStyle","_","i","zIndex","visibility","el","observe","set","get","offsetHeight","useScroller","offset","fps","useScrollPosition","setIsScrolling","didMount","didUnsubscribe","to","requestTimeout","clearRequestTimeout","MasonryScroller","props","scrollFps","displayName","useContainerPosition","elementRef","deps","emptyArr","containerPosition","setContainerPosition","useLayoutEffect","offsetTop","offsetParent","offsetWidth","usePositioner","columnGutter","rowGutter","maxColumnCount","maxColumnWidth","initPositioner","computedColumnWidth","computedColumnCount","getColumns","createPositioner","positionerRef","prevDeps","opts","prevOpts","optsChanged","every","item","prevPositioner","cacheSize","pos","intervalTree","columnHeights","Array","columnItems","column","update","updates","columns","j","itemsInColumn","binarySearch","startItem","lo","hi","renderCallback","defaultItemHeight","tallestColumn","apply","all","a","l","h","m","minimumWidth","gutter","floor","Infinity","useResizeObserver","createResizeObserver","disconnect","handler","cancel","updater","rafSchd","commonHandler","target","handlers","Map","handleEntries","entries","entry","ro","ResizeObserver","bind","forEach","useScrollToIndex","options","align","element","window","innerHeight","latestOptions","getTarget","latestElement","state","dispatch","useReducer","action","nextState","prevTop","type","value","defaultState","throttledDispatch","useThrottleCallback","useEvent","currentTop","clearTimeout","timeout","scrollTo","setTimeout","estimatedTop","Masonry","windowSize","useWindowSize","initialWidth","ssrWidth","initialHeight","ssrHeight","containerPos","nextProps","scrollToIndex","List","useInfiniteLoader","loadMoreItems","isItemLoaded","minimumBatchSize","threshold","totalItems","storedLoadMoreItems","storedIsItemLoaded","useCallback","unloadedRanges","scanForUnloadedRanges","defaultIsItemLoaded","rangeStartIndex","rangeStopIndex","potentialStopIndex","firstUnloadedStart","firstUnloadedStop"],"mappings":"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"}