{"version":3,"file":"index.dev.mjs","sources":["../../src/fixed-hooks.ts","../../src/utils.ts","../../src/fixed.tsx","../../src/dynamic-hooks.ts","../../src/dynamic.tsx","../../src/use-size.ts","../../src/use-scroller.ts"],"sourcesContent":["import type { ListItemProps } from \"./types\";\n\nexport function useList<Item>({\n  items,\n  width,\n  height,\n  overscanBy = 2,\n  scrollTop,\n  itemHeight,\n  itemGap = 0,\n}: UseListOptions<Item>) {\n  const totalItemHeight = itemHeight + itemGap;\n  overscanBy = height * overscanBy;\n  let index = Math.floor(\n    Math.max(0, scrollTop - overscanBy / 2) / totalItemHeight\n  );\n  const stopIndex = Math.min(\n    items.length,\n    Math.ceil((scrollTop + overscanBy) / totalItemHeight)\n  );\n  const childProps: ListItemProps<Item>[] = [];\n\n  for (; index < stopIndex; index++) {\n    childProps.push({\n      index,\n      data: items[index],\n      width,\n      height,\n      style: {\n        position: \"absolute\",\n        width: \"100%\",\n        top: itemGap * index + index * itemHeight,\n        left: 0,\n      },\n    });\n  }\n\n  return childProps;\n}\n\nexport interface UseListOptions<Item> {\n  items: Item[];\n  width: number;\n  height: number;\n  itemHeight: number;\n  itemGap?: number;\n  overscanBy?: number;\n  scrollTop: number;\n}\n","import memoizeOne from \"@essentials/memoize-one\";\n\nexport const getContainerStyle = memoizeOne(\n  (isScrolling: boolean | undefined, estimatedHeight: number) => ({\n    position: \"relative\",\n    width: \"100%\",\n    maxWidth: \"100%\",\n    height: Math.ceil(estimatedHeight),\n    maxHeight: Math.ceil(estimatedHeight),\n    willChange: isScrolling ? \"contents,height\" : void 0,\n    pointerEvents: isScrolling ? \"none\" : void 0,\n  })\n);\n\nexport const defaultGetItemKey = (_: any[], i: number): number => i;\n","import * as React from \"react\";\nimport { useList } from \"./fixed-hooks\";\nimport { getContainerStyle, defaultGetItemKey } from \"./utils\";\nimport type { ListPropsBase, ListItemProps } from \"./types\";\n\nexport function List<Item>({\n  items,\n  width,\n  height,\n  overscanBy = 2,\n  scrollTop,\n  itemHeight,\n  itemGap = 0,\n  as: Container = \"div\",\n  id,\n  className,\n  style,\n  role = \"list\",\n  tabIndex,\n  itemAs: WrapperComponent = \"div\",\n  itemKey = defaultGetItemKey,\n  isScrolling,\n  onRender,\n  innerRef,\n  render: RenderComponent,\n}: ListProps<Item>) {\n  const children: (\n    | ListItemProps<Item>\n    | React.ReactElement<ListItemProps<Item>>\n  )[] = useList({\n    items,\n    width,\n    height,\n    overscanBy,\n    scrollTop,\n    itemHeight,\n    itemGap,\n  });\n  const itemRole = role && role + \"item\";\n  const startIndex = children[0]\n    ? (children[0] as ListItemProps<Item>).index\n    : 0;\n  let stopIndex: number | undefined;\n  let i = 0;\n\n  for (; i < children.length; i++) {\n    const child = children[i] as ListItemProps<Item>;\n    stopIndex = child.index;\n    children[i] = (\n      <WrapperComponent\n        key={itemKey(child.data, child.index)}\n        role={itemRole}\n        style={child.style}\n      >\n        <RenderComponent\n          index={child.index}\n          data={child.data}\n          width={child.width}\n          height={child.height}\n        />\n      </WrapperComponent>\n    );\n  }\n\n  // Calls the onRender callback if the rendered indices changed\n  React.useEffect(() => {\n    if (typeof onRender === \"function\" && stopIndex !== void 0)\n      onRender(startIndex, stopIndex, items);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [onRender, items, startIndex, stopIndex]);\n\n  const containerStyle = getContainerStyle(\n    isScrolling,\n    (itemHeight + itemGap) * items.length - itemGap\n  );\n\n  return (\n    <Container\n      id={id}\n      className={className}\n      style={\n        style !== void 0\n          ? Object.assign({}, containerStyle, style)\n          : containerStyle\n      }\n      role={role}\n      tabIndex={tabIndex}\n      ref={innerRef}\n      children={children}\n    />\n  );\n}\n\nexport interface ListProps<Item> extends ListPropsBase<Item> {\n  readonly itemHeight: number;\n  readonly render: React.ComponentType<ListRenderProps<Item>>;\n}\n\nexport interface ListRenderProps<Item> {\n  index: number;\n  data: Item;\n  width: number;\n  [prop: string]: any;\n}\n","import { useEffect, useState, useRef } from \"react\";\nimport useLayoutEffect from \"@react-hook/passive-layout-effect\";\nimport type { ListItemProps } from \"./types\";\n\nexport function useDynamicList<Item>({\n  items,\n  width,\n  height,\n  overscanBy = 2,\n  scrollTop,\n  itemHeightEstimate = 32,\n  positioner,\n}: UseDynamicListOptions<Item>) {\n  const itemCount = items.length;\n  const measuredCount = positioner.size();\n  overscanBy = height * overscanBy;\n  const childProps: ListItemProps<Item>[] = [];\n\n  positioner.range(\n    Math.max(0, scrollTop - overscanBy / 2),\n    scrollTop + overscanBy,\n    ({ height, top }, index) =>\n      childProps.push({\n        index,\n        data: items[index],\n        width,\n        height,\n        style: {\n          position: \"absolute\",\n          width: \"100%\",\n          top,\n          left: 0,\n        },\n      })\n  );\n\n  const currentHeight = positioner.height();\n  const needsFreshBatch =\n    currentHeight <= scrollTop + overscanBy && measuredCount < itemCount;\n\n  if (needsFreshBatch) {\n    const batchSize =\n      measuredCount +\n      Math.min(\n        itemCount - measuredCount,\n        Math.ceil((scrollTop + overscanBy - currentHeight) / itemHeightEstimate)\n      );\n\n    for (let index = measuredCount; index < batchSize; index++)\n      childProps.push({\n        index,\n        data: items[index],\n        width,\n        height: -1,\n        style: prerenderItemStyle,\n      });\n  }\n\n  return childProps;\n}\n\nexport interface UseDynamicListOptions<Item> {\n  positioner: Positioner;\n  items: Item[];\n  width: number;\n  height: number;\n  itemHeightEstimate?: number;\n  overscanBy?: number;\n  scrollTop: number;\n}\n\nconst prerenderItemStyle: React.CSSProperties = {\n  position: \"absolute\",\n  width: \"100%\",\n  zIndex: -1000,\n  visibility: \"hidden\",\n};\n\nexport const usePositioner = (\n  itemGap = 0,\n  deps: React.DependencyList = emptyArr\n) => {\n  const didMount = useRef(0);\n  const initPositioner = () => createPositioner(itemGap);\n  const [positioner, setPositioner] = useState(initPositioner);\n  // Create a new positioner when the dependencies change\n  useEffect(() => {\n    if (didMount.current) setPositioner(initPositioner());\n    didMount.current = 1;\n    // eslint-disable-next-line\n  }, deps);\n  // Sets a new item positioner if the row gutter changes\n  useLayoutEffect(() => {\n    if (didMount.current) {\n      const cacheSize = positioner.size();\n      const nextPositioner = initPositioner();\n      let index = 0;\n\n      for (; index < cacheSize; index++) {\n        const pos = positioner.get(index);\n        nextPositioner.set(index, pos !== void 0 ? pos.height : 0);\n      }\n\n      setPositioner(nextPositioner);\n      didMount.current = 1;\n    }\n    // eslint-disable-next-line\n  }, [itemGap]);\n\n  return positioner;\n};\n\nconst createPositioner = (itemGap = 0): Positioner => {\n  let listHeight = 0;\n  const tops: number[] = [];\n  const items: PositionerItem[] = [];\n\n  return {\n    set: (index, height = 0) => {\n      items[index] = { top: tops[index] = listHeight, height };\n      listHeight += height + itemGap;\n      return items[index];\n    },\n    // This only updates the items in the list that exist beyond the index\n    // whose dimesions changed\n    update: (index, height) => {\n      const updatedItem = items[index++];\n      const diff = height - updatedItem.height;\n      listHeight += diff;\n      updatedItem.height = height;\n\n      for (; index < items.length; ++index)\n        tops[index] = items[index].top += diff;\n    },\n    get: (index) => items[index],\n    remove: (index) => {\n      const removed = items.splice(index, 1)?.[0];\n      if (removed) {\n        tops.splice(index, 1);\n        const diff = removed.height + itemGap;\n        listHeight -= diff;\n\n        for (; index < items.length; index++) {\n          const item = items[index];\n          tops[index] = item.top -= diff;\n        }\n      }\n    },\n    est: (itemCount, defaultItemHeight) =>\n      itemCount === 0\n        ? 0\n        : itemCount === items.length\n        ? listHeight - itemGap\n        : listHeight +\n          Math.ceil(itemCount - items.length) * (defaultItemHeight + itemGap) -\n          itemGap,\n    range: (lo, hi, cb) => {\n      const count = items.length;\n      if (count > 0) {\n        let i = binarySearchGE(tops, lo);\n        for (; i < count; i++) {\n          const item = items[i];\n          if (item.top > hi) break;\n          cb(item, i);\n        }\n      }\n    },\n    height: () => listHeight,\n    size: () => tops.length,\n  };\n};\n\nexport interface Positioner {\n  set: (index: number, height: number) => PositionerItem;\n  update: (index: number, height: number) => void;\n  get: (index: number) => PositionerItem;\n  remove: (index: number) => void;\n  est: (itemCount: number, defaultItemHeight: number) => number;\n  range: (\n    lo: number,\n    hi: number,\n    cb: (item: PositionerItem, i: number) => void\n  ) => void;\n  height: () => number;\n  size: () => number;\n}\n\nexport interface PositionerItem {\n  top: number;\n  height: number;\n}\n\nconst emptyArr: [] = [];\n\nconst binarySearchGE = (a: number[], value: number, lo = 0) => {\n  let hi = a.length - 1;\n  let i = hi + 1;\n\n  while (lo <= hi) {\n    const m = (lo + hi) >>> 1;\n    const x = a[m];\n\n    if (x >= value) {\n      hi = m - 1;\n      i = m;\n    } else {\n      lo = m + 1;\n    }\n  }\n\n  return i;\n};\n","import * as React from \"react\";\nimport { useDynamicList, usePositioner } from \"./dynamic-hooks\";\nimport { getContainerStyle, defaultGetItemKey } from \"./utils\";\nimport type { ListPropsBase, ListItemProps } from \"./types\";\nimport type { Positioner } from \"./dynamic-hooks\";\n\nexport function useDynamicListItems<Item>({\n  items,\n  width,\n  height,\n  overscanBy = 2,\n  scrollTop,\n  itemHeightEstimate = 32,\n  positioner,\n  innerRef,\n  as: Container = \"div\",\n  id,\n  className,\n  style,\n  role = \"list\",\n  tabIndex,\n  itemAs: WrapperComponent = \"div\",\n  itemKey = defaultGetItemKey,\n  isScrolling,\n  onRender,\n  render: RenderComponent,\n}: UseDynamicListItemsOptions<Item>) {\n  const children: (\n    | ListItemProps<Item>\n    | React.ReactElement<ListItemProps<Item>>\n  )[] = useDynamicList({\n    items,\n    width,\n    height,\n    overscanBy,\n    scrollTop,\n    itemHeightEstimate,\n    positioner,\n  });\n  const forceUpdate_ = useForceUpdate();\n  const updating = React.useRef(false);\n  // batches calls to force update\n  updating.current = false;\n  const forceUpdate = () => {\n    if (!updating.current) {\n      updating.current = true;\n      forceUpdate_();\n    }\n  };\n  const itemRole = role && role + \"item\";\n  let needsFreshBatch = false;\n  let startIndex = 0;\n  let stopIndex: number | undefined;\n  let i = 0;\n\n  for (; i < children.length; i++) {\n    const child = children[i] as ListItemProps<Item>;\n    needsFreshBatch = needsFreshBatch || child.height === -1;\n\n    if (child.height !== -1) {\n      startIndex = stopIndex === void 0 ? child.index : startIndex;\n      stopIndex = child.index;\n    }\n\n    children[i] = (\n      <DynamicListItem\n        key={itemKey(child.data, child.index)}\n        role={itemRole}\n        style={child.style}\n        index={child.index}\n        data={child.data}\n        width={child.width}\n        height={child.height === -1 ? child.height : void 0}\n        as={WrapperComponent}\n        meas={forceUpdate}\n        pos={positioner}\n        render={RenderComponent}\n      />\n    ) as React.ReactElement<ListItemProps<Item>>;\n  }\n\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]);\n  // Calls the onRender callback if the rendered indices changed\n  React.useEffect(() => {\n    if (typeof onRender === \"function\" && stopIndex !== void 0)\n      onRender(startIndex, stopIndex, items);\n    // Resets the container key for SSR hydration\n    didEverMount = \"1\";\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [onRender, items, startIndex, stopIndex]);\n\n  const containerStyle = getContainerStyle(\n    isScrolling,\n    positioner.est(items.length, itemHeightEstimate)\n  );\n\n  return (\n    <Container\n      id={id}\n      className={className}\n      style={\n        style !== void 0\n          ? Object.assign({}, containerStyle, style)\n          : containerStyle\n      }\n      role={role}\n      tabIndex={tabIndex}\n      ref={innerRef}\n      children={children}\n      key={didEverMount}\n    />\n  );\n}\n\nexport interface UseDynamicListItemsOptions<Item>\n  extends Omit<ListPropsBase<Item>, \"itemGap\"> {\n  readonly positioner: Positioner;\n  readonly itemHeightEstimate?: number;\n  readonly render: React.ComponentType<DynamicListRenderProps<Item>>;\n}\n\nexport function DynamicList<Item>(props: DynamicListProps<Item>) {\n  const positioner = usePositioner(props.itemGap);\n  return useDynamicListItems(Object.assign({ positioner }, props));\n}\n\nlet didEverMount = \"0\";\n\nexport interface DynamicListProps<Item> extends ListPropsBase<Item> {\n  readonly itemHeightEstimate?: number;\n  readonly render: React.ComponentType<DynamicListRenderProps<Item>>;\n}\n\nfunction DynamicListItem<Item>({\n  role,\n  style,\n  index,\n  data,\n  width,\n  height,\n  as: WrapperComponent,\n  meas,\n  pos,\n  render: RenderComponent,\n}: DynamicListItemProps<Item> & {\n  as: keyof JSX.IntrinsicElements | React.ComponentType<any>;\n}) {\n  const ref = React.useRef<HTMLElement | null>(null);\n  const measure = React.useCallback(() => {\n    const current = ref.current;\n    if (current) {\n      pos.update(index, current.offsetHeight);\n      meas();\n    }\n    // eslint-disable-next-line\n  }, [pos]);\n\n  return (\n    <WrapperComponent\n      role={role}\n      style={style}\n      ref={(el: HTMLElement | null) => {\n        if (el) {\n          ref.current = el.firstChild as HTMLElement;\n          pos.get(index) === void 0 && pos.set(index, el.offsetHeight);\n        }\n      }}\n    >\n      <RenderComponent\n        index={index}\n        data={data}\n        width={width}\n        height={height}\n        measure={measure}\n      />\n    </WrapperComponent>\n  );\n}\n\ninterface DynamicListItemProps<Item> {\n  as: DynamicListProps<Item>[\"itemAs\"];\n  role: string;\n  style: React.CSSProperties;\n  index: number;\n  data: Item;\n  width: number;\n  height: number | undefined;\n  render: React.ComponentType<DynamicListRenderProps<Item>>;\n  pos: Positioner;\n  meas: () => void;\n}\n\nexport interface DynamicListRenderProps<Item> {\n  index: number;\n  data: Item;\n  width: number;\n  height: number | undefined;\n  measure: () => void;\n  [prop: string]: any;\n}\n\nconst useForceUpdate = (): (() => void) => {\n  const setState = React.useState(emptyObj)[1];\n  return React.useRef(() => setState({})).current;\n};\n\nconst emptyObj = {};\n","import * as React from \"react\";\nimport useLayoutEffect from \"@react-hook/passive-layout-effect\";\nimport useEvent from \"@react-hook/event\";\n\nexport function useSize<T extends HTMLElement>(\n  ref: React.MutableRefObject<T | null>\n): { width: number; height: number } {\n  const getSize = () => {\n    const { current } = ref;\n    if (current) {\n      const computedStyle = getComputedStyle(current);\n      const float = parseFloat;\n      return {\n        width:\n          current.clientWidth -\n          float(computedStyle.paddingTop) -\n          float(computedStyle.paddingBottom),\n        height:\n          current.clientHeight -\n          float(computedStyle.paddingLeft) -\n          float(computedStyle.paddingRight),\n      };\n    }\n\n    return { width: 0, height: 0 };\n  };\n  const [size, setSize] = React.useState<{ width: number; height: number }>(\n    getSize\n  );\n\n  const handleResize = () => setSize(getSize());\n\n  useEvent(\n    typeof window !== \"undefined\" ? window : null,\n    \"resize\",\n    handleResize\n  );\n\n  useEvent(\n    typeof window !== \"undefined\" ? window : null,\n    \"orientationchange\",\n    handleResize\n  );\n\n  useLayoutEffect(() => {\n    setSize(getSize());\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  return size;\n}\n","import * as React from \"react\";\nimport useLayoutEffect from \"@react-hook/passive-layout-effect\";\nimport {\n  requestTimeout,\n  clearRequestTimeout,\n} from \"@essentials/request-timeout\";\nimport { useThrottle } from \"@react-hook/throttle\";\n\nexport function useScroller<T extends HTMLElement>(\n  ref: Window | React.MutableRefObject<T | null> | T | null,\n  options: UseScrollerOptions = {}\n): { scrollTop: number; isScrolling: boolean } {\n  const { offset = 0, fps = 12 } = options;\n  const current = ref && \"current\" in ref ? ref.current : ref;\n  const getScrollPos = () =>\n    !current\n      ? 0\n      : \"scrollTop\" in current\n      ? current.scrollTop\n      : current.pageYOffset || current.scrollY;\n  const [scrollTop, setScrollTop] = useThrottle(getScrollPos, fps);\n  const [isScrolling, setIsScrolling] = React.useState(false);\n\n  useLayoutEffect(() => {\n    if (current) {\n      let didUnmount = false;\n      let to: ReturnType<typeof requestTimeout> | undefined;\n      const clearTo = () => to && clearRequestTimeout(to);\n      const handleScroll = () => {\n        if (didUnmount) return;\n        setScrollTop(getScrollPos());\n        setIsScrolling(true);\n        clearTo();\n        to = requestTimeout(() => {\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        }, 1000 / fps);\n      };\n\n      current.addEventListener(\"scroll\", handleScroll);\n      return () => {\n        current.removeEventListener(\"scroll\", handleScroll);\n        clearTo();\n        didUnmount = true;\n      };\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [current, fps]);\n\n  return { scrollTop: Math.max(0, scrollTop - offset), isScrolling };\n}\n\nexport interface UseScrollerOptions {\n  offset?: number;\n  fps?: number;\n}\n"],"names":["useList","items","width","height","overscanBy","scrollTop","itemHeight","itemGap","totalItemHeight","index","Math","floor","max","stopIndex","min","length","ceil","childProps","push","data","style","position","top","left","getContainerStyle","memoizeOne","isScrolling","estimatedHeight","maxWidth","maxHeight","willChange","pointerEvents","defaultGetItemKey","_","i","List","as","Container","id","className","role","tabIndex","itemAs","WrapperComponent","itemKey","onRender","innerRef","render","RenderComponent","children","itemRole","startIndex","child","React","containerStyle","Object","assign","useDynamicList","itemHeightEstimate","positioner","itemCount","measuredCount","size","range","currentHeight","needsFreshBatch","batchSize","prerenderItemStyle","zIndex","visibility","usePositioner","deps","emptyArr","didMount","useRef","initPositioner","createPositioner","useState","setPositioner","useEffect","current","useLayoutEffect","cacheSize","nextPositioner","pos","get","set","listHeight","tops","update","updatedItem","diff","remove","removed","splice","item","est","defaultItemHeight","lo","hi","cb","count","binarySearchGE","a","value","m","x","useDynamicListItems","forceUpdate_","useForceUpdate","updating","forceUpdate","__reactCreateElement__","didEverMount","DynamicList","props","DynamicListItem","meas","ref","measure","offsetHeight","el","firstChild","setState","emptyObj","useSize","getSize","computedStyle","getComputedStyle","float","parseFloat","clientWidth","paddingTop","paddingBottom","clientHeight","paddingLeft","paddingRight","setSize","handleResize","useEvent","window","useScroller","options","offset","fps","getScrollPos","pageYOffset","scrollY","setScrollTop","useThrottle","setIsScrolling","didUnmount","to","clearTo","clearRequestTimeout","handleScroll","requestTimeout","addEventListener","removeEventListener"],"mappings":"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"}