@tanstack/virtual-core 3.0.0-beta.56 → 3.0.0-beta.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/index.ts"],"sourcesContent":["import { approxEqual, memo, notUndefined } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n lane: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nexport const observeElementRect = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = (rect: Rect) => {\n const { width, height } = rect\n cb({ width: Math.round(width), height: Math.round(height) })\n }\n\n handler(element.getBoundingClientRect())\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize })\n return\n }\n }\n handler(element.getBoundingClientRect())\n })\n\n observer.observe(element, { box: 'border-box' })\n\n return () => {\n observer.unobserve(element)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<Window, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight })\n }\n handler()\n\n element.addEventListener('resize', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('resize', handler)\n }\n}\n\nexport const observeElementOffset = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollLeft' : 'scrollTop'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const observeWindowOffset = (\n instance: Virtualizer<Window, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollX' : 'scrollY'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<any, TItemElement>,\n) => {\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? 'inlineSize' : 'blockSize'],\n )\n return size\n }\n }\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n elementKeyAttribute?: string\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n lanes?: number\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private scrollToIndexTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache = new Map<Key, number>()\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n measureElementCache = new Map<Key, TItemElement>()\n private observer = (() => {\n let _ro: ResizeObserver | null = null\n\n const get = () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, entry)\n })\n }))\n } else {\n return null\n }\n }\n\n return {\n disconnect: () => get()?.disconnect(),\n observe: (target: Element) =>\n get()?.observe(target, { box: 'border-box' }),\n unobserve: (target: Element) => get()?.unobserve(target),\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size)\n })\n\n this.maybeNotify()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n elementKeyAttribute: 'data-element-key',\n initialMeasurementsCache: [],\n lanes: 1,\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n this.measureElementCache.forEach(this.observer.observe)\n return () => {\n this.observer.disconnect()\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n const prev = this.scrollRect\n this.scrollRect = rect\n if (\n this.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n this.maybeNotify()\n }\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n this.isScrolling = true\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n this.scrollOffset = offset\n\n this.maybeNotify()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n this.scrollDirection = null\n\n this.maybeNotify()\n }, this.options.scrollingDelay)\n }),\n )\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private memoOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n ],\n (count, paddingStart, scrollMargin, getItemKey) => {\n this.pendingMeasuredCacheIndexes = []\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n }\n },\n {\n key: false,\n },\n )\n\n private getFurthestMeasurement = (\n measurements: VirtualItem[],\n index: number,\n ) => {\n const furthestMeasurementsFound = new Map<number, true>()\n const furthestMeasurements = new Map<number, VirtualItem>()\n for (let m = index - 1; m >= 0; m--) {\n const measurement = measurements[m]!\n\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue\n }\n\n const previousFurthestMeasurement = furthestMeasurements.get(\n measurement.lane,\n )\n if (\n previousFurthestMeasurement == null ||\n measurement.end > previousFurthestMeasurement.end\n ) {\n furthestMeasurements.set(measurement.lane, measurement)\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true)\n }\n\n if (furthestMeasurementsFound.size === this.options.lanes) {\n break\n }\n }\n\n return furthestMeasurements.size === this.options.lanes\n ? Array.from(furthestMeasurements.values()).sort(\n (a, b) => a.end - b.end,\n )[0]\n : undefined\n }\n\n private getMeasurements = memo(\n () => [this.memoOptions(), this.itemSizeCache],\n ({ count, paddingStart, scrollMargin, getItemKey }, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n\n const furthestMeasurement =\n this.options.lanes === 1\n ? measurements[i - 1]\n : this.getFurthestMeasurement(measurements, i)\n\n const start = furthestMeasurement\n ? furthestMeasurement.end\n : paddingStart + scrollMargin\n\n const measuredSize = itemSizeCache.get(key)\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n\n const end = start + size\n\n const lane = furthestMeasurement\n ? furthestMeasurement.lane\n : i % this.options.lanes\n\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane,\n }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n return (this.range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n }))\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private maybeNotify = memo(\n () => {\n const range = this.calculateRange()\n\n return [range.startIndex, range.endIndex, this.isScrolling]\n },\n () => {\n this.notify()\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [\n this.range.startIndex,\n this.range.endIndex,\n this.isScrolling,\n ],\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.calculateRange(),\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (\n node: TItemElement,\n entry: ResizeObserverEntry | undefined,\n ) => {\n const index = this.indexFromElement(node)\n\n const item = notUndefined(this.measurementsCache[index])\n\n const elementKey =\n node.getAttribute(this.options.elementKeyAttribute) ?? item.key\n\n const prevNode = this.measureElementCache.get(elementKey)\n\n if (!node.isConnected) {\n this.observer.unobserve(node)\n if (node === prevNode) {\n this.measureElementCache.delete(elementKey)\n }\n return\n }\n\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode)\n }\n this.observer.observe(node)\n this.measureElementCache.set(elementKey, node)\n }\n\n const measuredItemSize = this.options.measureElement(node, entry, this)\n\n this.resizeItem(index, measuredItemSize)\n }\n\n resizeItem = (index: number, size: number) => {\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const itemSize = this.itemSizeCache.get(item.key) ?? item.size\n\n const delta = size - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n\n this.itemSizeCache = new Map(\n this.itemSizeCache.set(item.key, size),\n )\n\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, undefined)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getVirtualItemForOffset = (offset: number) => {\n const measurements = this.getMeasurements()\n\n return notUndefined(\n measurements[\n findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index: number) => notUndefined(measurements[index]).start,\n offset,\n )\n ],\n )\n }\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= this.scrollOffset) {\n align = 'start'\n } else if (toOffset >= this.scrollOffset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n toOffset = toOffset\n } else if (align === 'end') {\n toOffset = toOffset - size\n } else if (align === 'center') {\n toOffset = toOffset - size / 2\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n getOffsetForIndex = (index: number, align: ScrollAlignment = 'auto') => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n const measurement = notUndefined(this.getMeasurements()[index])\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return [this.scrollOffset, align] as const\n }\n }\n\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return [this.getOffsetForAlignment(toOffset, align), align] as const\n }\n\n private isDynamicMode = () => this.measureElementCache.size > 0\n\n private cancelScrollToIndex = () => {\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: undefined,\n behavior,\n })\n }\n\n scrollToIndex = (\n index: number,\n { align: initialAlign = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n const [toOffset, align] = this.getOffsetForIndex(index, initialAlign)\n\n this._scrollToOffset(toOffset, { adjustments: undefined, behavior })\n\n if (behavior !== 'smooth' && this.isDynamicMode()) {\n this.scrollToIndexTimeoutId = setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM = this.measureElementCache.has(\n this.options.getItemKey(index),\n )\n\n if (elementInDOM) {\n const [toOffset] = this.getOffsetForIndex(index, align)\n\n if (!approxEqual(toOffset, this.scrollOffset)) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.scrollOffset + delta, {\n adjustments: undefined,\n behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = new Map()\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["defaultKeyExtractor","index","defaultRangeExtractor","range","start","Math","max","startIndex","overscan","end","min","endIndex","count","arr","i","push","observeElementRect","instance","cb","element","scrollElement","handler","rect","width","height","round","getBoundingClientRect","observer","ResizeObserver","entries","entry","borderBoxSize","box","inlineSize","blockSize","observe","unobserve","observeWindowRect","innerWidth","innerHeight","addEventListener","passive","removeEventListener","observeElementOffset","options","horizontal","observeWindowOffset","measureElement","size","windowScroll","offset","adjustments","behavior","toOffset","scrollTo","elementScroll","Virtualizer","opts","unsubs","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","Map","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","_ro","get","forEach","_measureElement","target","disconnect","setOptions","Object","key","value","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","onChange","initialRect","scrollMargin","scrollingDelay","indexAttribute","elementKeyAttribute","initialMeasurementsCache","lanes","notify","cleanup","filter","Boolean","d","_didMount","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","prev","scrollRect","maybeNotify","clearTimeout","setTimeout","getSize","memoOptions","memo","getFurthestMeasurement","measurements","furthestMeasurementsFound","furthestMeasurements","m","measurement","has","lane","previousFurthestMeasurement","set","Array","from","values","sort","a","b","getMeasurements","length","slice","furthestMeasurement","measuredSize","estimateSize","process","env","NODE_ENV","calculateRange","outerSize","initialDeps","getIndexes","indexFromElement","node","attributeName","indexStr","getAttribute","console","warn","parseInt","item","notUndefined","elementKey","prevNode","isConnected","measuredItemSize","resizeItem","itemSize","delta","info","getVirtualItems","indexes","virtualItems","k","len","getVirtualItemForOffset","findNearestBinarySearch","getOffsetForAlignment","align","scrollSizeProp","scrollSize","document","documentElement","maxOffset","getOffsetForIndex","isDynamicMode","cancelScrollToIndex","scrollToOffset","scrollToIndex","initialAlign","elementInDOM","approxEqual","scrollBy","getTotalSize","scrollToFn","measure","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":";;;;;;;;;;;;;;AAIA;;AAwCA;;IAEaA,mBAAmB,GAAG,SAAtBA,mBAAmB,CAAIC,KAAa,EAAA;AAAA,EAAA,OAAKA,KAAK,CAAA;AAAA,EAAA;IAE9CC,qBAAqB,GAAG,SAAxBA,qBAAqB,CAAIC,KAAY,EAAK;AACrD,EAAA,IAAMC,KAAK,GAAGC,IAAI,CAACC,GAAG,CAACH,KAAK,CAACI,UAAU,GAAGJ,KAAK,CAACK,QAAQ,EAAE,CAAC,CAAC,CAAA;AAC5D,EAAA,IAAMC,GAAG,GAAGJ,IAAI,CAACK,GAAG,CAACP,KAAK,CAACQ,QAAQ,GAAGR,KAAK,CAACK,QAAQ,EAAEL,KAAK,CAACS,KAAK,GAAG,CAAC,CAAC,CAAA;EAEtE,IAAMC,GAAG,GAAG,EAAE,CAAA;EAEd,KAAK,IAAIC,EAAC,GAAGV,KAAK,EAAEU,EAAC,IAAIL,GAAG,EAAEK,EAAC,EAAE,EAAE;AACjCD,IAAAA,GAAG,CAACE,IAAI,CAACD,EAAC,CAAC,CAAA;AACb,GAAA;AAEA,EAAA,OAAOD,GAAG,CAAA;AACZ,EAAC;AAEM,IAAMG,kBAAkB,GAAG,SAArBA,kBAAkB,CAC7BC,QAA6B,EAC7BC,EAAwB,EACrB;AACH,EAAA,IAAMC,OAAO,GAAGF,QAAQ,CAACG,aAAa,CAAA;EACtC,IAAI,CAACD,OAAO,EAAE;AACZ,IAAA,OAAA;AACF,GAAA;AAEA,EAAA,IAAME,OAAO,GAAG,SAAVA,OAAO,CAAIC,IAAU,EAAK;AAC9B,IAAA,IAAQC,KAAK,GAAaD,IAAI,CAAtBC,KAAK;MAAEC,MAAM,GAAKF,IAAI,CAAfE,MAAM,CAAA;AACrBN,IAAAA,EAAE,CAAC;AAAEK,MAAAA,KAAK,EAAElB,IAAI,CAACoB,KAAK,CAACF,KAAK,CAAC;AAAEC,MAAAA,MAAM,EAAEnB,IAAI,CAACoB,KAAK,CAACD,MAAM,CAAA;AAAE,KAAC,CAAC,CAAA;GAC7D,CAAA;AAEDH,EAAAA,OAAO,CAACF,OAAO,CAACO,qBAAqB,EAAE,CAAC,CAAA;AAExC,EAAA,IAAMC,QAAQ,GAAG,IAAIC,cAAc,CAAC,UAACC,OAAO,EAAK;AAC/C,IAAA,IAAMC,KAAK,GAAGD,OAAO,CAAC,CAAC,CAAC,CAAA;AACxB,IAAA,IAAIC,KAAK,IAAA,IAAA,IAALA,KAAK,CAAEC,aAAa,EAAE;AACxB,MAAA,IAAMC,GAAG,GAAGF,KAAK,CAACC,aAAa,CAAC,CAAC,CAAC,CAAA;AAClC,MAAA,IAAIC,GAAG,EAAE;AACPX,QAAAA,OAAO,CAAC;UAAEE,KAAK,EAAES,GAAG,CAACC,UAAU;UAAET,MAAM,EAAEQ,GAAG,CAACE,SAAAA;AAAU,SAAC,CAAC,CAAA;AACzD,QAAA,OAAA;AACF,OAAA;AACF,KAAA;AACAb,IAAAA,OAAO,CAACF,OAAO,CAACO,qBAAqB,EAAE,CAAC,CAAA;AAC1C,GAAC,CAAC,CAAA;AAEFC,EAAAA,QAAQ,CAACQ,OAAO,CAAChB,OAAO,EAAE;AAAEa,IAAAA,GAAG,EAAE,YAAA;AAAa,GAAC,CAAC,CAAA;AAEhD,EAAA,OAAO,YAAM;AACXL,IAAAA,QAAQ,CAACS,SAAS,CAACjB,OAAO,CAAC,CAAA;GAC5B,CAAA;AACH,EAAC;AAEM,IAAMkB,iBAAiB,GAAG,SAApBA,iBAAiB,CAC5BpB,QAAkC,EAClCC,EAAwB,EACrB;AACH,EAAA,IAAMC,OAAO,GAAGF,QAAQ,CAACG,aAAa,CAAA;EACtC,IAAI,CAACD,OAAO,EAAE;AACZ,IAAA,OAAA;AACF,GAAA;AAEA,EAAA,IAAME,OAAO,GAAG,SAAVA,OAAO,GAAS;AACpBH,IAAAA,EAAE,CAAC;MAAEK,KAAK,EAAEJ,OAAO,CAACmB,UAAU;MAAEd,MAAM,EAAEL,OAAO,CAACoB,WAAAA;AAAY,KAAC,CAAC,CAAA;GAC/D,CAAA;AACDlB,EAAAA,OAAO,EAAE,CAAA;AAETF,EAAAA,OAAO,CAACqB,gBAAgB,CAAC,QAAQ,EAAEnB,OAAO,EAAE;AAC1CoB,IAAAA,OAAO,EAAE,IAAA;AACX,GAAC,CAAC,CAAA;AAEF,EAAA,OAAO,YAAM;AACXtB,IAAAA,OAAO,CAACuB,mBAAmB,CAAC,QAAQ,EAAErB,OAAO,CAAC,CAAA;GAC/C,CAAA;AACH,EAAC;AAEM,IAAMsB,oBAAoB,GAAG,SAAvBA,oBAAoB,CAC/B1B,QAA6B,EAC7BC,EAA4B,EACzB;AACH,EAAA,IAAMC,OAAO,GAAGF,QAAQ,CAACG,aAAa,CAAA;EACtC,IAAI,CAACD,OAAO,EAAE;AACZ,IAAA,OAAA;AACF,GAAA;AAEA,EAAA,IAAME,OAAO,GAAG,SAAVA,OAAO,GAAS;AACpBH,IAAAA,EAAE,CAACC,OAAO,CAACF,QAAQ,CAAC2B,OAAO,CAACC,UAAU,GAAG,YAAY,GAAG,WAAW,CAAC,CAAC,CAAA;GACtE,CAAA;AACDxB,EAAAA,OAAO,EAAE,CAAA;AAETF,EAAAA,OAAO,CAACqB,gBAAgB,CAAC,QAAQ,EAAEnB,OAAO,EAAE;AAC1CoB,IAAAA,OAAO,EAAE,IAAA;AACX,GAAC,CAAC,CAAA;AAEF,EAAA,OAAO,YAAM;AACXtB,IAAAA,OAAO,CAACuB,mBAAmB,CAAC,QAAQ,EAAErB,OAAO,CAAC,CAAA;GAC/C,CAAA;AACH,EAAC;AAEM,IAAMyB,mBAAmB,GAAG,SAAtBA,mBAAmB,CAC9B7B,QAAkC,EAClCC,EAA4B,EACzB;AACH,EAAA,IAAMC,OAAO,GAAGF,QAAQ,CAACG,aAAa,CAAA;EACtC,IAAI,CAACD,OAAO,EAAE;AACZ,IAAA,OAAA;AACF,GAAA;AAEA,EAAA,IAAME,OAAO,GAAG,SAAVA,OAAO,GAAS;AACpBH,IAAAA,EAAE,CAACC,OAAO,CAACF,QAAQ,CAAC2B,OAAO,CAACC,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC,CAAA;GACjE,CAAA;AACDxB,EAAAA,OAAO,EAAE,CAAA;AAETF,EAAAA,OAAO,CAACqB,gBAAgB,CAAC,QAAQ,EAAEnB,OAAO,EAAE;AAC1CoB,IAAAA,OAAO,EAAE,IAAA;AACX,GAAC,CAAC,CAAA;AAEF,EAAA,OAAO,YAAM;AACXtB,IAAAA,OAAO,CAACuB,mBAAmB,CAAC,QAAQ,EAAErB,OAAO,CAAC,CAAA;GAC/C,CAAA;AACH,EAAC;AAEM,IAAM0B,cAAc,GAAG,SAAjBA,cAAc,CACzB5B,OAAqB,EACrBW,KAAsC,EACtCb,QAAwC,EACrC;AACH,EAAA,IAAIa,KAAK,IAAA,IAAA,IAALA,KAAK,CAAEC,aAAa,EAAE;AACxB,IAAA,IAAMC,GAAG,GAAGF,KAAK,CAACC,aAAa,CAAC,CAAC,CAAC,CAAA;AAClC,IAAA,IAAIC,GAAG,EAAE;AACP,MAAA,IAAMgB,IAAI,GAAG3C,IAAI,CAACoB,KAAK,CACrBO,GAAG,CAACf,QAAQ,CAAC2B,OAAO,CAACC,UAAU,GAAG,YAAY,GAAG,WAAW,CAAC,CAC9D,CAAA;AACD,MAAA,OAAOG,IAAI,CAAA;AACb,KAAA;AACF,GAAA;AACA,EAAA,OAAO3C,IAAI,CAACoB,KAAK,CACfN,OAAO,CAACO,qBAAqB,EAAE,CAC7BT,QAAQ,CAAC2B,OAAO,CAACC,UAAU,GAAG,OAAO,GAAG,QAAQ,CACjD,CACF,CAAA;AACH,EAAC;AAEM,IAAMI,YAAY,GAAG,SAAfA,YAAY,CACvBC,MAAc,EAKdjC,IAAAA,EAAAA,QAA6B,EAC1B;AAAA,EAAA,IAAA,qBAAA,EAAA,sBAAA,CAAA;AAAA,EAAA,IAAA,gBAAA,GAAA,IAAA,CAJDkC,WAAW;AAAXA,IAAAA,WAAW,iCAAG,CAAC,GAAA,gBAAA;AACfC,IAAAA,QAAQ,QAARA,QAAQ,CAAA;AAIV,EAAA,IAAMC,QAAQ,GAAGH,MAAM,GAAGC,WAAW,CAAA;EAErC,CAAAlC,qBAAAA,GAAAA,QAAQ,CAACG,aAAa,KAAtB,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAwBkC,QAAQ,IAAhC,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAwBA,QAAQ,EAAA,sBAAA,GAAA,EAAA,EAAA,sBAAA,CAC7BrC,QAAQ,CAAC2B,OAAO,CAACC,UAAU,GAAG,MAAM,GAAG,KAAK,CAAGQ,GAAAA,QAAQ,EACxDD,sBAAAA,CAAAA,QAAQ,GAARA,QAAQ,EACR,sBAAA,EAAA,CAAA;AACJ,EAAC;AAEM,IAAMG,aAAa,GAAG,SAAhBA,aAAa,CACxBL,MAAc,EAKdjC,KAAAA,EAAAA,QAA6B,EAC1B;AAAA,EAAA,IAAA,sBAAA,EAAA,sBAAA,CAAA;AAAA,EAAA,IAAA,iBAAA,GAAA,KAAA,CAJDkC,WAAW;AAAXA,IAAAA,WAAW,kCAAG,CAAC,GAAA,iBAAA;AACfC,IAAAA,QAAQ,SAARA,QAAQ,CAAA;AAIV,EAAA,IAAMC,QAAQ,GAAGH,MAAM,GAAGC,WAAW,CAAA;EAErC,CAAAlC,sBAAAA,GAAAA,QAAQ,CAACG,aAAa,KAAtB,IAAA,GAAA,KAAA,CAAA,GAAA,sBAAA,CAAwBkC,QAAQ,IAAhC,IAAA,GAAA,KAAA,CAAA,GAAA,sBAAA,CAAwBA,QAAQ,EAAA,sBAAA,GAAA,EAAA,EAAA,sBAAA,CAC7BrC,QAAQ,CAAC2B,OAAO,CAACC,UAAU,GAAG,MAAM,GAAG,KAAK,CAAGQ,GAAAA,QAAQ,EACxDD,sBAAAA,CAAAA,QAAQ,GAARA,QAAQ,EACR,sBAAA,EAAA,CAAA;AACJ,EAAC;AAoDD,IAAaI,WAAW,GA+CtB,SAAYC,WAAAA,CAAAA,KAAsD,EAAE;AAAA,EAAA,IAAA,KAAA,GAAA,IAAA,CAAA;EAAA,IA3C5DC,CAAAA,MAAM,GAA4B,EAAE,CAAA;EAAA,IAE5CtC,CAAAA,aAAa,GAA0B,IAAI,CAAA;EAAA,IAC3CuC,CAAAA,WAAW,GAAY,KAAK,CAAA;EAAA,IACpBC,CAAAA,oBAAoB,GAAyC,IAAI,CAAA;EAAA,IACjEC,CAAAA,sBAAsB,GAAyC,IAAI,CAAA;EAAA,IAC3EC,CAAAA,iBAAiB,GAAkB,EAAE,CAAA;AAAA,EAAA,IAAA,CAC7BC,aAAa,GAAG,IAAIC,GAAG,EAAe,CAAA;EAAA,IACtCC,CAAAA,2BAA2B,GAAa,EAAE,CAAA;EAAA,IAGlDC,CAAAA,eAAe,GAA2B,IAAI,CAAA;EAAA,IACtCC,CAAAA,iBAAiB,GAAW,CAAC,CAAA;AAAA,EAAA,IAAA,CACrCC,mBAAmB,GAAG,IAAIJ,GAAG,EAAqB,CAAA;EAAA,IAC1CrC,CAAAA,QAAQ,GAAI,YAAM;IACxB,IAAI0C,GAA0B,GAAG,IAAI,CAAA;AAErC,IAAA,IAAMC,GAAG,GAAG,SAANA,GAAG,GAAS;AAChB,MAAA,IAAID,GAAG,EAAE;AACP,QAAA,OAAOA,GAAG,CAAA;AACZ,OAAC,MAAM,IAAI,OAAOzC,cAAc,KAAK,WAAW,EAAE;AAChD,QAAA,OAAQyC,GAAG,GAAG,IAAIzC,cAAc,CAAC,UAACC,OAAO,EAAK;AAC5CA,UAAAA,OAAO,CAAC0C,OAAO,CAAC,UAACzC,KAAK,EAAK;YACzB,KAAI,CAAC0C,eAAe,CAAC1C,KAAK,CAAC2C,MAAM,EAAkB3C,KAAK,CAAC,CAAA;AAC3D,WAAC,CAAC,CAAA;AACJ,SAAC,CAAC,CAAA;AACJ,OAAC,MAAM;AACL,QAAA,OAAO,IAAI,CAAA;AACb,OAAA;KACD,CAAA;IAED,OAAO;AACL4C,MAAAA,UAAU,EAAE,SAAA,UAAA,GAAA;AAAA,QAAA,IAAA,IAAA,CAAA;AAAA,QAAA,OAAA,CAAA,IAAA,GAAMJ,GAAG,EAAE,KAAL,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAOI,UAAU,EAAE,CAAA;AAAA,OAAA;MACrCvC,OAAO,EAAE,iBAACsC,MAAe,EAAA;AAAA,QAAA,IAAA,KAAA,CAAA;AAAA,QAAA,OAAA,CAAA,KAAA,GACvBH,GAAG,EAAE,KAAA,IAAA,GAAA,KAAA,CAAA,GAAL,MAAOnC,OAAO,CAACsC,MAAM,EAAE;AAAEzC,UAAAA,GAAG,EAAE,YAAA;AAAa,SAAC,CAAC,CAAA;AAAA,OAAA;MAC/CI,SAAS,EAAE,mBAACqC,MAAe,EAAA;AAAA,QAAA,IAAA,KAAA,CAAA;AAAA,QAAA,OAAA,CAAA,KAAA,GAAKH,GAAG,EAAE,KAAA,IAAA,GAAA,KAAA,CAAA,GAAL,MAAOlC,SAAS,CAACqC,MAAM,CAAC,CAAA;AAAA,OAAA;KACzD,CAAA;AACH,GAAC,EAAG,CAAA;AAAA,EAAA,IAAA,CACJtE,KAAK,GAA6C;AAChDI,IAAAA,UAAU,EAAE,CAAC;AACbI,IAAAA,QAAQ,EAAE,CAAA;GACX,CAAA;AAAA,EAAA,IAAA,CAcDgE,UAAU,GAAG,UAAClB,IAAsD,EAAK;IACvEmB,MAAM,CAAC/C,OAAO,CAAC4B,IAAI,CAAC,CAACc,OAAO,CAAC,UAAkB,KAAA,EAAA;AAAA,MAAA,IAAhBM,GAAG,GAAA,KAAA,CAAA,CAAA,CAAA;QAAEC,KAAK,GAAA,KAAA,CAAA,CAAA,CAAA,CAAA;MACvC,IAAI,OAAOA,KAAK,KAAK,WAAW,EAAE,OAAQrB,IAAI,CAASoB,GAAG,CAAC,CAAA;AAC7D,KAAC,CAAC,CAAA;AAEF,IAAA,KAAI,CAACjC,OAAO,GAAA,QAAA,CAAA;AACVmC,MAAAA,KAAK,EAAE,KAAK;AACZC,MAAAA,aAAa,EAAE,CAAC;AAChBxE,MAAAA,QAAQ,EAAE,CAAC;AACXyE,MAAAA,YAAY,EAAE,CAAC;AACfC,MAAAA,UAAU,EAAE,CAAC;AACbC,MAAAA,kBAAkB,EAAE,CAAC;AACrBC,MAAAA,gBAAgB,EAAE,CAAC;AACnBvC,MAAAA,UAAU,EAAE,KAAK;AACjBwC,MAAAA,UAAU,EAAErF,mBAAmB;AAC/BsF,MAAAA,cAAc,EAAEpF,qBAAqB;MACrCqF,QAAQ,EAAE,SAAM,QAAA,GAAA,EAAE;AAClBxC,MAAAA,cAAc,EAAdA,cAAc;AACdyC,MAAAA,WAAW,EAAE;AAAEjE,QAAAA,KAAK,EAAE,CAAC;AAAEC,QAAAA,MAAM,EAAE,CAAA;OAAG;AACpCiE,MAAAA,YAAY,EAAE,CAAC;AACfC,MAAAA,cAAc,EAAE,GAAG;AACnBC,MAAAA,cAAc,EAAE,YAAY;AAC5BC,MAAAA,mBAAmB,EAAE,kBAAkB;AACvCC,MAAAA,wBAAwB,EAAE,EAAE;AAC5BC,MAAAA,KAAK,EAAE,CAAA;AAAC,KAAA,EACLrC,IAAI,CACR,CAAA;GACF,CAAA;EAAA,IAEOsC,CAAAA,MAAM,GAAG,YAAM;AACrB,IAAA,KAAI,CAACnD,OAAO,CAAC2C,QAAQ,IAArB,IAAA,GAAA,KAAA,CAAA,GAAA,KAAI,CAAC3C,OAAO,CAAC2C,QAAQ,CAAG,KAAI,CAAC,CAAA;GAC9B,CAAA;EAAA,IAEOS,CAAAA,OAAO,GAAG,YAAM;IACtB,KAAI,CAACtC,MAAM,CAACuC,MAAM,CAACC,OAAO,CAAC,CAAC3B,OAAO,CAAC,UAAC4B,CAAC,EAAA;AAAA,MAAA,OAAKA,CAAC,EAAG,CAAA;KAAC,CAAA,CAAA;IAChD,KAAI,CAACzC,MAAM,GAAG,EAAE,CAAA;IAChB,KAAI,CAACtC,aAAa,GAAG,IAAI,CAAA;GAC1B,CAAA;EAAA,IAEDgF,CAAAA,SAAS,GAAG,YAAM;IAChB,KAAI,CAAChC,mBAAmB,CAACG,OAAO,CAAC,KAAI,CAAC5C,QAAQ,CAACQ,OAAO,CAAC,CAAA;AACvD,IAAA,OAAO,YAAM;AACX,MAAA,KAAI,CAACR,QAAQ,CAAC+C,UAAU,EAAE,CAAA;MAC1B,KAAI,CAACsB,OAAO,EAAE,CAAA;KACf,CAAA;GACF,CAAA;EAAA,IAEDK,CAAAA,WAAW,GAAG,YAAM;AAClB,IAAA,IAAMjF,aAAa,GAAG,KAAI,CAACwB,OAAO,CAAC0D,gBAAgB,EAAE,CAAA;AAErD,IAAA,IAAI,KAAI,CAAClF,aAAa,KAAKA,aAAa,EAAE;MACxC,KAAI,CAAC4E,OAAO,EAAE,CAAA;MAEd,KAAI,CAAC5E,aAAa,GAAGA,aAAa,CAAA;AAElC,MAAA,KAAI,CAACmF,eAAe,CAAC,KAAI,CAACC,YAAY,EAAE;AACtCrD,QAAAA,WAAW,EAAEsD,SAAS;AACtBrD,QAAAA,QAAQ,EAAEqD,SAAAA;AACZ,OAAC,CAAC,CAAA;AAEF,MAAA,KAAI,CAAC/C,MAAM,CAAC3C,IAAI,CACd,KAAI,CAAC6B,OAAO,CAAC5B,kBAAkB,CAAC,KAAI,EAAE,UAACM,IAAI,EAAK;AAC9C,QAAA,IAAMoF,IAAI,GAAG,KAAI,CAACC,UAAU,CAAA;QAC5B,KAAI,CAACA,UAAU,GAAGrF,IAAI,CAAA;QACtB,IACE,KAAI,CAACsB,OAAO,CAACC,UAAU,GACnBvB,IAAI,CAACC,KAAK,KAAKmF,IAAI,CAACnF,KAAK,GACzBD,IAAI,CAACE,MAAM,KAAKkF,IAAI,CAAClF,MAAM,EAC/B;UACA,KAAI,CAACoF,WAAW,EAAE,CAAA;AACpB,SAAA;AACF,OAAC,CAAC,CACH,CAAA;AAED,MAAA,KAAI,CAAClD,MAAM,CAAC3C,IAAI,CACd,KAAI,CAAC6B,OAAO,CAACD,oBAAoB,CAAC,KAAI,EAAE,UAACO,MAAM,EAAK;QAClD,KAAI,CAACiB,iBAAiB,GAAG,CAAC,CAAA;AAE1B,QAAA,IAAI,KAAI,CAACqC,YAAY,KAAKtD,MAAM,EAAE;AAChC,UAAA,OAAA;AACF,SAAA;AAEA,QAAA,IAAI,KAAI,CAACU,oBAAoB,KAAK,IAAI,EAAE;AACtCiD,UAAAA,YAAY,CAAC,KAAI,CAACjD,oBAAoB,CAAC,CAAA;UACvC,KAAI,CAACA,oBAAoB,GAAG,IAAI,CAAA;AAClC,SAAA;QAEA,KAAI,CAACD,WAAW,GAAG,IAAI,CAAA;QACvB,KAAI,CAACO,eAAe,GAClB,KAAI,CAACsC,YAAY,GAAGtD,MAAM,GAAG,SAAS,GAAG,UAAU,CAAA;QACrD,KAAI,CAACsD,YAAY,GAAGtD,MAAM,CAAA;QAE1B,KAAI,CAAC0D,WAAW,EAAE,CAAA;AAElB,QAAA,KAAI,CAAChD,oBAAoB,GAAGkD,UAAU,CAAC,YAAM;UAC3C,KAAI,CAAClD,oBAAoB,GAAG,IAAI,CAAA;UAChC,KAAI,CAACD,WAAW,GAAG,KAAK,CAAA;UACxB,KAAI,CAACO,eAAe,GAAG,IAAI,CAAA;UAE3B,KAAI,CAAC0C,WAAW,EAAE,CAAA;AACpB,SAAC,EAAE,KAAI,CAAChE,OAAO,CAAC8C,cAAc,CAAC,CAAA;AACjC,OAAC,CAAC,CACH,CAAA;AACH,KAAA;GACD,CAAA;EAAA,IAEOqB,CAAAA,OAAO,GAAG,YAAM;AACtB,IAAA,OAAO,KAAI,CAACJ,UAAU,CAAC,KAAI,CAAC/D,OAAO,CAACC,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAA;GACrE,CAAA;EAAA,IAEOmE,CAAAA,WAAW,GAAGC,IAAI,CACxB,YAAA;IAAA,OAAM,CACJ,KAAI,CAACrE,OAAO,CAAChC,KAAK,EAClB,KAAI,CAACgC,OAAO,CAACqC,YAAY,EACzB,KAAI,CAACrC,OAAO,CAAC6C,YAAY,EACzB,KAAI,CAAC7C,OAAO,CAACyC,UAAU,CACxB,CAAA;GACD,EAAA,UAACzE,KAAK,EAAEqE,YAAY,EAAEQ,YAAY,EAAEJ,UAAU,EAAK;IACjD,KAAI,CAACpB,2BAA2B,GAAG,EAAE,CAAA;IACrC,OAAO;AACLrD,MAAAA,KAAK,EAALA,KAAK;AACLqE,MAAAA,YAAY,EAAZA,YAAY;AACZQ,MAAAA,YAAY,EAAZA,YAAY;AACZJ,MAAAA,UAAU,EAAVA,UAAAA;KACD,CAAA;AACH,GAAC,EACD;AACER,IAAAA,GAAG,EAAE,KAAA;AACP,GAAC,CACF,CAAA;AAAA,EAAA,IAAA,CAEOqC,sBAAsB,GAAG,UAC/BC,YAA2B,EAC3BlH,KAAa,EACV;AACH,IAAA,IAAMmH,yBAAyB,GAAG,IAAIpD,GAAG,EAAgB,CAAA;AACzD,IAAA,IAAMqD,oBAAoB,GAAG,IAAIrD,GAAG,EAAuB,CAAA;AAC3D,IAAA,KAAK,IAAIsD,CAAC,GAAGrH,KAAK,GAAG,CAAC,EAAEqH,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;AACnC,MAAA,IAAMC,WAAW,GAAGJ,YAAY,CAACG,CAAC,CAAE,CAAA;MAEpC,IAAIF,yBAAyB,CAACI,GAAG,CAACD,WAAW,CAACE,IAAI,CAAC,EAAE;AACnD,QAAA,SAAA;AACF,OAAA;MAEA,IAAMC,2BAA2B,GAAGL,oBAAoB,CAAC/C,GAAG,CAC1DiD,WAAW,CAACE,IAAI,CACjB,CAAA;MACD,IACEC,2BAA2B,IAAI,IAAI,IACnCH,WAAW,CAAC9G,GAAG,GAAGiH,2BAA2B,CAACjH,GAAG,EACjD;QACA4G,oBAAoB,CAACM,GAAG,CAACJ,WAAW,CAACE,IAAI,EAAEF,WAAW,CAAC,CAAA;OACxD,MAAM,IAAIA,WAAW,CAAC9G,GAAG,GAAGiH,2BAA2B,CAACjH,GAAG,EAAE;QAC5D2G,yBAAyB,CAACO,GAAG,CAACJ,WAAW,CAACE,IAAI,EAAE,IAAI,CAAC,CAAA;AACvD,OAAA;MAEA,IAAIL,yBAAyB,CAACpE,IAAI,KAAK,KAAI,CAACJ,OAAO,CAACkD,KAAK,EAAE;AACzD,QAAA,MAAA;AACF,OAAA;AACF,KAAA;IAEA,OAAOuB,oBAAoB,CAACrE,IAAI,KAAK,KAAI,CAACJ,OAAO,CAACkD,KAAK,GACnD8B,KAAK,CAACC,IAAI,CAACR,oBAAoB,CAACS,MAAM,EAAE,CAAC,CAACC,IAAI,CAC5C,UAACC,CAAC,EAAEC,CAAC,EAAA;AAAA,MAAA,OAAKD,CAAC,CAACvH,GAAG,GAAGwH,CAAC,CAACxH,GAAG,CAAA;AAAA,KAAA,CACxB,CAAC,CAAC,CAAC,GACJgG,SAAS,CAAA;GACd,CAAA;EAAA,IAEOyB,CAAAA,eAAe,GAAGjB,IAAI,CAC5B,YAAA;IAAA,OAAM,CAAC,KAAI,CAACD,WAAW,EAAE,EAAE,KAAI,CAACjD,aAAa,CAAC,CAAA;GAC9C,EAAA,UAAA,KAAA,EAAoDA,aAAa,EAAK;IAAA,IAAnEnD,KAAK,SAALA,KAAK;AAAEqE,MAAAA,YAAY,SAAZA,YAAY;AAAEQ,MAAAA,YAAY,SAAZA,YAAY;AAAEJ,MAAAA,UAAU,SAAVA,UAAU,CAAA;IAC9C,IAAM3E,GAAG,GACP,KAAI,CAACuD,2BAA2B,CAACkE,MAAM,GAAG,CAAC,GACvC9H,IAAI,CAACK,GAAG,OAARL,IAAI,EAAQ,KAAI,CAAC4D,2BAA2B,CAAC,GAC7C,CAAC,CAAA;IACP,KAAI,CAACA,2BAA2B,GAAG,EAAE,CAAA;IAErC,IAAMkD,YAAY,GAAG,KAAI,CAACrD,iBAAiB,CAACsE,KAAK,CAAC,CAAC,EAAE1H,GAAG,CAAC,CAAA;IAEzD,KAAK,IAAII,GAAC,GAAGJ,GAAG,EAAEI,GAAC,GAAGF,KAAK,EAAEE,GAAC,EAAE,EAAE;AAChC,MAAA,IAAM+D,GAAG,GAAGQ,UAAU,CAACvE,GAAC,CAAC,CAAA;MAEzB,IAAMuH,mBAAmB,GACvB,KAAI,CAACzF,OAAO,CAACkD,KAAK,KAAK,CAAC,GACpBqB,YAAY,CAACrG,GAAC,GAAG,CAAC,CAAC,GACnB,KAAI,CAACoG,sBAAsB,CAACC,YAAY,EAAErG,GAAC,CAAC,CAAA;MAElD,IAAMV,KAAK,GAAGiI,mBAAmB,GAC7BA,mBAAmB,CAAC5H,GAAG,GACvBwE,YAAY,GAAGQ,YAAY,CAAA;AAE/B,MAAA,IAAM6C,YAAY,GAAGvE,aAAa,CAACO,GAAG,CAACO,GAAG,CAAC,CAAA;AAC3C,MAAA,IAAM7B,IAAI,GACR,OAAOsF,YAAY,KAAK,QAAQ,GAC5BA,YAAY,GACZ,KAAI,CAAC1F,OAAO,CAAC2F,YAAY,CAACzH,GAAC,CAAC,CAAA;AAElC,MAAA,IAAML,GAAG,GAAGL,KAAK,GAAG4C,IAAI,CAAA;AAExB,MAAA,IAAMyE,IAAI,GAAGY,mBAAmB,GAC5BA,mBAAmB,CAACZ,IAAI,GACxB3G,GAAC,GAAG,KAAI,CAAC8B,OAAO,CAACkD,KAAK,CAAA;MAE1BqB,YAAY,CAACrG,GAAC,CAAC,GAAG;AAChBb,QAAAA,KAAK,EAAEa,GAAC;AACRV,QAAAA,KAAK,EAALA,KAAK;AACL4C,QAAAA,IAAI,EAAJA,IAAI;AACJvC,QAAAA,GAAG,EAAHA,GAAG;AACHoE,QAAAA,GAAG,EAAHA,GAAG;AACH4C,QAAAA,IAAI,EAAJA,IAAAA;OACD,CAAA;AACH,KAAA;IAEA,KAAI,CAAC3D,iBAAiB,GAAGqD,YAAY,CAAA;AAErC,IAAA,OAAOA,YAAY,CAAA;AACrB,GAAC,EACD;IACEtC,GAAG,EAAE2D,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,IAAI,iBAAiB;AAC/D3D,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;AAAA,MAAA,OAAM,KAAI,CAACnC,OAAO,CAACmC,KAAK,CAAA;AAAA,KAAA;AACjC,GAAC,CACF,CAAA;EAAA,IAED4D,CAAAA,cAAc,GAAG1B,IAAI,CACnB,YAAA;AAAA,IAAA,OAAM,CAAC,KAAI,CAACiB,eAAe,EAAE,EAAE,KAAI,CAACnB,OAAO,EAAE,EAAE,KAAI,CAACP,YAAY,CAAC,CAAA;AAAA,GAAA,EACjE,UAACW,YAAY,EAAEyB,SAAS,EAAEpC,YAAY,EAAK;AACzC,IAAA,OAAQ,KAAI,CAACrG,KAAK,GAAGwI,cAAc,CAAC;AAClCxB,MAAAA,YAAY,EAAZA,YAAY;AACZyB,MAAAA,SAAS,EAATA,SAAS;AACTpC,MAAAA,YAAY,EAAZA,YAAAA;AACF,KAAC,CAAC,CAAA;AACJ,GAAC,EACD;IACE3B,GAAG,EAAE2D,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,IAAI,gBAAgB;AAC9D3D,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;AAAA,MAAA,OAAM,KAAI,CAACnC,OAAO,CAACmC,KAAK,CAAA;AAAA,KAAA;AACjC,GAAC,CACF,CAAA;AAAA,EAAA,IAAA,CAEO6B,WAAW,GAAGK,IAAI,CACxB,YAAM;AACJ,IAAA,IAAM9G,KAAK,GAAG,KAAI,CAACwI,cAAc,EAAE,CAAA;AAEnC,IAAA,OAAO,CAACxI,KAAK,CAACI,UAAU,EAAEJ,KAAK,CAACQ,QAAQ,EAAE,KAAI,CAACgD,WAAW,CAAC,CAAA;AAC7D,GAAC,EACD,YAAM;IACJ,KAAI,CAACoC,MAAM,EAAE,CAAA;AACf,GAAC,EACD;IACElB,GAAG,EAAE2D,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,IAAI,aAAa;AAC3D3D,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;AAAA,MAAA,OAAM,KAAI,CAACnC,OAAO,CAACmC,KAAK,CAAA;AAAA,KAAA;AAC/B8D,IAAAA,WAAW,EAAE,CACX,IAAI,CAAC1I,KAAK,CAACI,UAAU,EACrB,IAAI,CAACJ,KAAK,CAACQ,QAAQ,EACnB,IAAI,CAACgD,WAAW,CAAA;AAEpB,GAAC,CACF,CAAA;EAAA,IAEOmF,CAAAA,UAAU,GAAG7B,IAAI,CACvB,YAAA;IAAA,OAAM,CACJ,KAAI,CAACrE,OAAO,CAAC0C,cAAc,EAC3B,KAAI,CAACqD,cAAc,EAAE,EACrB,KAAI,CAAC/F,OAAO,CAACpC,QAAQ,EACrB,KAAI,CAACoC,OAAO,CAAChC,KAAK,CACnB,CAAA;GACD,EAAA,UAAC0E,cAAc,EAAEnF,KAAK,EAAEK,QAAQ,EAAEI,KAAK,EAAK;IAC1C,OAAO0E,cAAc,cAChBnF,KAAK,EAAA;AACRK,MAAAA,QAAQ,EAARA,QAAQ;AACRI,MAAAA,KAAK,EAALA,KAAAA;KACA,CAAA,CAAA,CAAA;AACJ,GAAC,EACD;IACEiE,GAAG,EAAE2D,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,IAAI,YAAY;AAC1D3D,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;AAAA,MAAA,OAAM,KAAI,CAACnC,OAAO,CAACmC,KAAK,CAAA;AAAA,KAAA;AACjC,GAAC,CACF,CAAA;AAAA,EAAA,IAAA,CAEDgE,gBAAgB,GAAG,UAACC,IAAkB,EAAK;AACzC,IAAA,IAAMC,aAAa,GAAG,KAAI,CAACrG,OAAO,CAAC+C,cAAc,CAAA;AACjD,IAAA,IAAMuD,QAAQ,GAAGF,IAAI,CAACG,YAAY,CAACF,aAAa,CAAC,CAAA;IAEjD,IAAI,CAACC,QAAQ,EAAE;AACbE,MAAAA,OAAO,CAACC,IAAI,CACiBJ,0BAAAA,GAAAA,aAAa,GACzC,gCAAA,CAAA,CAAA;AACD,MAAA,OAAO,CAAC,CAAC,CAAA;AACX,KAAA;AAEA,IAAA,OAAOK,QAAQ,CAACJ,QAAQ,EAAE,EAAE,CAAC,CAAA;GAC9B,CAAA;AAAA,EAAA,IAAA,CAEO1E,eAAe,GAAG,UACxBwE,IAAkB,EAClBlH,KAAsC,EACnC;AAAA,IAAA,IAAA,kBAAA,CAAA;AACH,IAAA,IAAM7B,KAAK,GAAG,KAAI,CAAC8I,gBAAgB,CAACC,IAAI,CAAC,CAAA;IAEzC,IAAMO,IAAI,GAAGC,YAAY,CAAC,KAAI,CAAC1F,iBAAiB,CAAC7D,KAAK,CAAC,CAAC,CAAA;AAExD,IAAA,IAAMwJ,UAAU,GAAA,CAAA,kBAAA,GACdT,IAAI,CAACG,YAAY,CAAC,KAAI,CAACvG,OAAO,CAACgD,mBAAmB,CAAC,KAAI2D,IAAAA,GAAAA,kBAAAA,GAAAA,IAAI,CAAC1E,GAAG,CAAA;IAEjE,IAAM6E,QAAQ,GAAG,KAAI,CAACtF,mBAAmB,CAACE,GAAG,CAACmF,UAAU,CAAC,CAAA;AAEzD,IAAA,IAAI,CAACT,IAAI,CAACW,WAAW,EAAE;AACrB,MAAA,KAAI,CAAChI,QAAQ,CAACS,SAAS,CAAC4G,IAAI,CAAC,CAAA;MAC7B,IAAIA,IAAI,KAAKU,QAAQ,EAAE;AACrB,QAAA,KAAI,CAACtF,mBAAmB,CAAO,QAAA,CAAA,CAACqF,UAAU,CAAC,CAAA;AAC7C,OAAA;AACA,MAAA,OAAA;AACF,KAAA;IAEA,IAAIC,QAAQ,KAAKV,IAAI,EAAE;AACrB,MAAA,IAAIU,QAAQ,EAAE;AACZ,QAAA,KAAI,CAAC/H,QAAQ,CAACS,SAAS,CAACsH,QAAQ,CAAC,CAAA;AACnC,OAAA;AACA,MAAA,KAAI,CAAC/H,QAAQ,CAACQ,OAAO,CAAC6G,IAAI,CAAC,CAAA;MAC3B,KAAI,CAAC5E,mBAAmB,CAACuD,GAAG,CAAC8B,UAAU,EAAET,IAAI,CAAC,CAAA;AAChD,KAAA;AAEA,IAAA,IAAMY,gBAAgB,GAAG,KAAI,CAAChH,OAAO,CAACG,cAAc,CAACiG,IAAI,EAAElH,KAAK,EAAE,KAAI,CAAC,CAAA;AAEvE,IAAA,KAAI,CAAC+H,UAAU,CAAC5J,KAAK,EAAE2J,gBAAgB,CAAC,CAAA;GACzC,CAAA;AAAA,EAAA,IAAA,CAEDC,UAAU,GAAG,UAAC5J,KAAa,EAAE+C,IAAY,EAAK;AAAA,IAAA,IAAA,qBAAA,CAAA;AAC5C,IAAA,IAAMuG,IAAI,GAAG,KAAI,CAACzF,iBAAiB,CAAC7D,KAAK,CAAC,CAAA;IAC1C,IAAI,CAACsJ,IAAI,EAAE;AACT,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAMO,QAAQ,GAAA,CAAA,qBAAA,GAAG,KAAI,CAAC/F,aAAa,CAACO,GAAG,CAACiF,IAAI,CAAC1E,GAAG,CAAC,KAAI0E,IAAAA,GAAAA,qBAAAA,GAAAA,IAAI,CAACvG,IAAI,CAAA;AAE9D,IAAA,IAAM+G,KAAK,GAAG/G,IAAI,GAAG8G,QAAQ,CAAA;IAE7B,IAAIC,KAAK,KAAK,CAAC,EAAE;AACf,MAAA,IAAIR,IAAI,CAACnJ,KAAK,GAAG,KAAI,CAACoG,YAAY,EAAE;AAClC,QAAA,IAAIgC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,IAAI,KAAI,CAAC9F,OAAO,CAACmC,KAAK,EAAE;AAC/DqE,UAAAA,OAAO,CAACY,IAAI,CAAC,YAAY,EAAED,KAAK,CAAC,CAAA;AACnC,SAAA;AAEA,QAAA,KAAI,CAACxD,eAAe,CAAC,KAAI,CAACC,YAAY,EAAE;AACtCrD,UAAAA,WAAW,EAAG,KAAI,CAACgB,iBAAiB,IAAI4F,KAAM;AAC9C3G,UAAAA,QAAQ,EAAEqD,SAAAA;AACZ,SAAC,CAAC,CAAA;AACJ,OAAA;AAEA,MAAA,KAAI,CAACxC,2BAA2B,CAAClD,IAAI,CAACd,KAAK,CAAC,CAAA;AAE5C,MAAA,KAAI,CAAC8D,aAAa,GAAG,IAAIC,GAAG,CAC1B,KAAI,CAACD,aAAa,CAAC4D,GAAG,CAAC4B,IAAI,CAAC1E,GAAG,EAAE7B,IAAI,CAAC,CACvC,CAAA;MAED,KAAI,CAAC+C,MAAM,EAAE,CAAA;AACf,KAAA;GACD,CAAA;AAAA,EAAA,IAAA,CAEDhD,cAAc,GAAG,UAACiG,IAAyB,EAAK;IAC9C,IAAI,CAACA,IAAI,EAAE;AACT,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,KAAI,CAACxE,eAAe,CAACwE,IAAI,EAAEvC,SAAS,CAAC,CAAA;GACtC,CAAA;EAAA,IAEDwD,CAAAA,eAAe,GAAGhD,IAAI,CACpB,YAAA;IAAA,OAAM,CAAC,KAAI,CAAC6B,UAAU,EAAE,EAAE,KAAI,CAACZ,eAAe,EAAE,CAAC,CAAA;AAAA,GAAA,EACjD,UAACgC,OAAO,EAAE/C,YAAY,EAAK;IACzB,IAAMgD,YAA2B,GAAG,EAAE,CAAA;AAEtC,IAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAGH,OAAO,CAAC/B,MAAM,EAAEiC,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;AAClD,MAAA,IAAMtJ,GAAC,GAAGoJ,OAAO,CAACE,CAAC,CAAE,CAAA;AACrB,MAAA,IAAM7C,WAAW,GAAGJ,YAAY,CAACrG,GAAC,CAAE,CAAA;AAEpCqJ,MAAAA,YAAY,CAACpJ,IAAI,CAACwG,WAAW,CAAC,CAAA;AAChC,KAAA;AAEA,IAAA,OAAO4C,YAAY,CAAA;AACrB,GAAC,EACD;IACEtF,GAAG,EAAE2D,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,IAAI,YAAY;AAC1D3D,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;AAAA,MAAA,OAAM,KAAI,CAACnC,OAAO,CAACmC,KAAK,CAAA;AAAA,KAAA;AACjC,GAAC,CACF,CAAA;AAAA,EAAA,IAAA,CAEDuF,uBAAuB,GAAG,UAACpH,MAAc,EAAK;AAC5C,IAAA,IAAMiE,YAAY,GAAG,KAAI,CAACe,eAAe,EAAE,CAAA;AAE3C,IAAA,OAAOsB,YAAY,CACjBrC,YAAY,CACVoD,uBAAuB,CACrB,CAAC,EACDpD,YAAY,CAACgB,MAAM,GAAG,CAAC,EACvB,UAAClI,KAAa,EAAA;MAAA,OAAKuJ,YAAY,CAACrC,YAAY,CAAClH,KAAK,CAAC,CAAC,CAACG,KAAK,CAAA;KAC1D8C,EAAAA,MAAM,CACP,CACF,CACF,CAAA;GACF,CAAA;AAAA,EAAA,IAAA,CAEDsH,qBAAqB,GAAG,UAACnH,QAAgB,EAAEoH,KAAsB,EAAK;AACpE,IAAA,IAAMzH,IAAI,GAAG,KAAI,CAAC+D,OAAO,EAAE,CAAA;IAE3B,IAAI0D,KAAK,KAAK,MAAM,EAAE;AACpB,MAAA,IAAIpH,QAAQ,IAAI,KAAI,CAACmD,YAAY,EAAE;AACjCiE,QAAAA,KAAK,GAAG,OAAO,CAAA;OAChB,MAAM,IAAIpH,QAAQ,IAAI,KAAI,CAACmD,YAAY,GAAGxD,IAAI,EAAE;AAC/CyH,QAAAA,KAAK,GAAG,KAAK,CAAA;AACf,OAAC,MAAM;AACLA,QAAAA,KAAK,GAAG,OAAO,CAAA;AACjB,OAAA;AACF,KAAA;IAEA,IAAIA,KAAK,KAAK,OAAO,EAAE;AACrBpH,MAAAA,QAAQ,GAAGA,QAAQ,CAAA;AACrB,KAAC,MAAM,IAAIoH,KAAK,KAAK,KAAK,EAAE;MAC1BpH,QAAQ,GAAGA,QAAQ,GAAGL,IAAI,CAAA;AAC5B,KAAC,MAAM,IAAIyH,KAAK,KAAK,QAAQ,EAAE;AAC7BpH,MAAAA,QAAQ,GAAGA,QAAQ,GAAGL,IAAI,GAAG,CAAC,CAAA;AAChC,KAAA;IAEA,IAAM0H,cAAc,GAAG,KAAI,CAAC9H,OAAO,CAACC,UAAU,GAC1C,aAAa,GACb,cAAc,CAAA;AAClB,IAAA,IAAM8H,UAAU,GAAG,KAAI,CAACvJ,aAAa,GACjC,UAAU,IAAI,KAAI,CAACA,aAAa,GAC9B,KAAI,CAACA,aAAa,CAACwJ,QAAQ,CAACC,eAAe,CAACH,cAAc,CAAC,GAC3D,KAAI,CAACtJ,aAAa,CAACsJ,cAAc,CAAC,GACpC,CAAC,CAAA;AAEL,IAAA,IAAMI,SAAS,GAAGH,UAAU,GAAG,KAAI,CAAC5D,OAAO,EAAE,CAAA;AAE7C,IAAA,OAAO1G,IAAI,CAACC,GAAG,CAACD,IAAI,CAACK,GAAG,CAACoK,SAAS,EAAEzH,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;GAClD,CAAA;AAAA,EAAA,IAAA,CAED0H,iBAAiB,GAAG,UAAC9K,KAAa,EAAEwK,KAAsB,EAAc;AAAA,IAAA,IAApCA,KAAsB,KAAA,KAAA,CAAA,EAAA;AAAtBA,MAAAA,KAAsB,GAAG,MAAM,CAAA;AAAA,KAAA;IACjExK,KAAK,GAAGI,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACK,GAAG,CAACT,KAAK,EAAE,KAAI,CAAC2C,OAAO,CAAChC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;IAE5D,IAAM2G,WAAW,GAAGiC,YAAY,CAAC,KAAI,CAACtB,eAAe,EAAE,CAACjI,KAAK,CAAC,CAAC,CAAA;IAE/D,IAAIwK,KAAK,KAAK,MAAM,EAAE;AACpB,MAAA,IACElD,WAAW,CAAC9G,GAAG,IACf,KAAI,CAAC+F,YAAY,GAAG,KAAI,CAACO,OAAO,EAAE,GAAG,KAAI,CAACnE,OAAO,CAACwC,gBAAgB,EAClE;AACAqF,QAAAA,KAAK,GAAG,KAAK,CAAA;AACf,OAAC,MAAM,IACLlD,WAAW,CAACnH,KAAK,IACjB,KAAI,CAACoG,YAAY,GAAG,KAAI,CAAC5D,OAAO,CAACuC,kBAAkB,EACnD;AACAsF,QAAAA,KAAK,GAAG,OAAO,CAAA;AACjB,OAAC,MAAM;AACL,QAAA,OAAO,CAAC,KAAI,CAACjE,YAAY,EAAEiE,KAAK,CAAC,CAAA;AACnC,OAAA;AACF,KAAA;IAEA,IAAMpH,QAAQ,GACZoH,KAAK,KAAK,KAAK,GACXlD,WAAW,CAAC9G,GAAG,GAAG,KAAI,CAACmC,OAAO,CAACwC,gBAAgB,GAC/CmC,WAAW,CAACnH,KAAK,GAAG,KAAI,CAACwC,OAAO,CAACuC,kBAAkB,CAAA;IAEzD,OAAO,CAAC,KAAI,CAACqF,qBAAqB,CAACnH,QAAQ,EAAEoH,KAAK,CAAC,EAAEA,KAAK,CAAC,CAAA;GAC5D,CAAA;AAAA,EAAA,IAAA,CAEOO,aAAa,GAAG,YAAA;AAAA,IAAA,OAAM,KAAI,CAAC5G,mBAAmB,CAACpB,IAAI,GAAG,CAAC,CAAA;AAAA,GAAA,CAAA;EAAA,IAEvDiI,CAAAA,mBAAmB,GAAG,YAAM;AAClC,IAAA,IAAI,KAAI,CAACpH,sBAAsB,KAAK,IAAI,EAAE;AACxCgD,MAAAA,YAAY,CAAC,KAAI,CAAChD,sBAAsB,CAAC,CAAA;MACzC,KAAI,CAACA,sBAAsB,GAAG,IAAI,CAAA;AACpC,KAAA;GACD,CAAA;AAAA,EAAA,IAAA,CAEDqH,cAAc,GAAG,UACf7H,QAAgB,EAEb,KAAA,EAAA;AAAA,IAAA,IAAA,KAAA,GAAA,KAAA,KAAA,KAAA,CAAA,GADoD,EAAE,GAAA,KAAA;AAAA,MAAA,WAAA,GAAA,KAAA,CAAvDoH,KAAK;AAALA,MAAAA,KAAK,4BAAG,OAAO,GAAA,WAAA;AAAErH,MAAAA,QAAQ,SAARA,QAAQ,CAAA;IAE3B,KAAI,CAAC6H,mBAAmB,EAAE,CAAA;IAE1B,IAAI7H,QAAQ,KAAK,QAAQ,IAAI,KAAI,CAAC4H,aAAa,EAAE,EAAE;AACjD5B,MAAAA,OAAO,CAACC,IAAI,CACV,wEAAwE,CACzE,CAAA;AACH,KAAA;IAEA,KAAI,CAAC9C,eAAe,CAAC,KAAI,CAACiE,qBAAqB,CAACnH,QAAQ,EAAEoH,KAAK,CAAC,EAAE;AAChEtH,MAAAA,WAAW,EAAEsD,SAAS;AACtBrD,MAAAA,QAAQ,EAARA,QAAAA;AACF,KAAC,CAAC,CAAA;GACH,CAAA;AAAA,EAAA,IAAA,CAED+H,aAAa,GAAG,UACdlL,KAAa,EAEV,MAAA,EAAA;AAAA,IAAA,IAAA,KAAA,GAAA,MAAA,KAAA,KAAA,CAAA,GADgE,EAAE,GAAA,MAAA;AAAA,MAAA,WAAA,GAAA,KAAA,CAAnEwK,KAAK;AAAEW,MAAAA,YAAY,4BAAG,MAAM,GAAA,WAAA;AAAEhI,MAAAA,QAAQ,SAARA,QAAQ,CAAA;IAExCnD,KAAK,GAAGI,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACK,GAAG,CAACT,KAAK,EAAE,KAAI,CAAC2C,OAAO,CAAChC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;IAE5D,KAAI,CAACqK,mBAAmB,EAAE,CAAA;IAE1B,IAAI7H,QAAQ,KAAK,QAAQ,IAAI,KAAI,CAAC4H,aAAa,EAAE,EAAE;AACjD5B,MAAAA,OAAO,CAACC,IAAI,CACV,wEAAwE,CACzE,CAAA;AACH,KAAA;AAEA,IAAA,IAAA,qBAAA,GAA0B,KAAI,CAAC0B,iBAAiB,CAAC9K,KAAK,EAAEmL,YAAY,CAAC;MAA9D/H,QAAQ,GAAA,qBAAA,CAAA,CAAA,CAAA;MAAEoH,KAAK,GAAA,qBAAA,CAAA,CAAA,CAAA,CAAA;AAEtB,IAAA,KAAI,CAAClE,eAAe,CAAClD,QAAQ,EAAE;AAAEF,MAAAA,WAAW,EAAEsD,SAAS;AAAErD,MAAAA,QAAQ,EAARA,QAAAA;AAAS,KAAC,CAAC,CAAA;IAEpE,IAAIA,QAAQ,KAAK,QAAQ,IAAI,KAAI,CAAC4H,aAAa,EAAE,EAAE;AACjD,MAAA,KAAI,CAACnH,sBAAsB,GAAGiD,UAAU,CAAC,YAAM;QAC7C,KAAI,CAACjD,sBAAsB,GAAG,IAAI,CAAA;AAElC,QAAA,IAAMwH,YAAY,GAAG,KAAI,CAACjH,mBAAmB,CAACoD,GAAG,CAC/C,KAAI,CAAC5E,OAAO,CAACyC,UAAU,CAACpF,KAAK,CAAC,CAC/B,CAAA;AAED,QAAA,IAAIoL,YAAY,EAAE;AAChB,UAAA,IAAA,sBAAA,GAAmB,KAAI,CAACN,iBAAiB,CAAC9K,KAAK,EAAEwK,KAAK,CAAC;YAAhDpH,SAAQ,GAAA,sBAAA,CAAA,CAAA,CAAA,CAAA;UAEf,IAAI,CAACiI,WAAW,CAACjI,SAAQ,EAAE,KAAI,CAACmD,YAAY,CAAC,EAAE;AAC7C,YAAA,KAAI,CAAC2E,aAAa,CAAClL,KAAK,EAAE;AAAEwK,cAAAA,KAAK,EAALA,KAAK;AAAErH,cAAAA,QAAQ,EAARA,QAAAA;AAAS,aAAC,CAAC,CAAA;AAChD,WAAA;AACF,SAAC,MAAM;AACL,UAAA,KAAI,CAAC+H,aAAa,CAAClL,KAAK,EAAE;AAAEwK,YAAAA,KAAK,EAALA,KAAK;AAAErH,YAAAA,QAAQ,EAARA,QAAAA;AAAS,WAAC,CAAC,CAAA;AAChD,SAAA;AACF,OAAC,CAAC,CAAA;AACJ,KAAA;GACD,CAAA;AAAA,EAAA,IAAA,CAEDmI,QAAQ,GAAG,UAACxB,KAAa,EAA+C,MAAA,EAAA;AAAA,IAAA,IAAA,KAAA,GAAA,MAAA,KAAA,KAAA,CAAA,GAAP,EAAE,GAAA,MAAA;AAAtC3G,MAAAA,QAAQ,SAARA,QAAQ,CAAA;IACnC,KAAI,CAAC6H,mBAAmB,EAAE,CAAA;IAE1B,IAAI7H,QAAQ,KAAK,QAAQ,IAAI,KAAI,CAAC4H,aAAa,EAAE,EAAE;AACjD5B,MAAAA,OAAO,CAACC,IAAI,CACV,wEAAwE,CACzE,CAAA;AACH,KAAA;IAEA,KAAI,CAAC9C,eAAe,CAAC,KAAI,CAACC,YAAY,GAAGuD,KAAK,EAAE;AAC9C5G,MAAAA,WAAW,EAAEsD,SAAS;AACtBrD,MAAAA,QAAQ,EAARA,QAAAA;AACF,KAAC,CAAC,CAAA;GACH,CAAA;AAAA,EAAA,IAAA,CAEDoI,YAAY,GAAG,YAAA;AAAA,IAAA,IAAA,qBAAA,CAAA;AAAA,IAAA,OACb,CAAC,CAAA,CAAA,qBAAA,GAAA,KAAI,CAACtD,eAAe,EAAE,CAAC,KAAI,CAACtF,OAAO,CAAChC,KAAK,GAAG,CAAC,CAAC,qBAA9C,qBAAgDH,CAAAA,GAAG,KAClD,KAAI,CAACmC,OAAO,CAACqC,YAAY,IAC3B,KAAI,CAACrC,OAAO,CAAC6C,YAAY,GACzB,KAAI,CAAC7C,OAAO,CAACsC,UAAU,CAAA;AAAA,GAAA,CAAA;AAAA,EAAA,IAAA,CAEjBqB,eAAe,GAAG,UACxBrD,MAAc,EAQX,KAAA,EAAA;IAAA,IANDC,WAAW,SAAXA,WAAW;AACXC,MAAAA,QAAQ,SAARA,QAAQ,CAAA;AAMV,IAAA,KAAI,CAACR,OAAO,CAAC6I,UAAU,CAACvI,MAAM,EAAE;AAAEE,MAAAA,QAAQ,EAARA,QAAQ;AAAED,MAAAA,WAAW,EAAXA,WAAAA;KAAa,EAAE,KAAI,CAAC,CAAA;GACjE,CAAA;EAAA,IAEDuI,CAAAA,OAAO,GAAG,YAAM;AACd,IAAA,KAAI,CAAC3H,aAAa,GAAG,IAAIC,GAAG,EAAE,CAAA;IAC9B,KAAI,CAAC+B,MAAM,EAAE,CAAA;GACd,CAAA;AAnkBC,EAAA,IAAI,CAACpB,UAAU,CAAClB,KAAI,CAAC,CAAA;AACrB,EAAA,IAAI,CAACkD,UAAU,GAAG,IAAI,CAAC/D,OAAO,CAAC4C,WAAW,CAAA;AAC1C,EAAA,IAAI,CAACgB,YAAY,GAAG,IAAI,CAAC5D,OAAO,CAACoC,aAAa,CAAA;AAC9C,EAAA,IAAI,CAAClB,iBAAiB,GAAG,IAAI,CAAClB,OAAO,CAACiD,wBAAwB,CAAA;AAC9D,EAAA,IAAI,CAAC/B,iBAAiB,CAACS,OAAO,CAAC,UAACgF,IAAI,EAAK;AACvC,IAAA,KAAI,CAACxF,aAAa,CAAC4D,GAAG,CAAC4B,IAAI,CAAC1E,GAAG,EAAE0E,IAAI,CAACvG,IAAI,CAAC,CAAA;AAC7C,GAAC,CAAC,CAAA;EAEF,IAAI,CAAC4D,WAAW,EAAE,CAAA;AACpB,EAAC;AA6jBH,IAAM2D,uBAAuB,GAAG,SAA1BA,uBAAuB,CAC3BoB,GAAW,EACXC,IAAY,EACZC,eAAsC,EACtC/G,KAAa,EACV;EACH,OAAO6G,GAAG,IAAIC,IAAI,EAAE;IAClB,IAAME,MAAM,GAAI,CAACH,GAAG,GAAGC,IAAI,IAAI,CAAC,GAAI,CAAC,CAAA;AACrC,IAAA,IAAMG,YAAY,GAAGF,eAAe,CAACC,MAAM,CAAC,CAAA;IAE5C,IAAIC,YAAY,GAAGjH,KAAK,EAAE;MACxB6G,GAAG,GAAGG,MAAM,GAAG,CAAC,CAAA;AAClB,KAAC,MAAM,IAAIC,YAAY,GAAGjH,KAAK,EAAE;MAC/B8G,IAAI,GAAGE,MAAM,GAAG,CAAC,CAAA;AACnB,KAAC,MAAM;AACL,MAAA,OAAOA,MAAM,CAAA;AACf,KAAA;AACF,GAAA;EAEA,IAAIH,GAAG,GAAG,CAAC,EAAE;IACX,OAAOA,GAAG,GAAG,CAAC,CAAA;AAChB,GAAC,MAAM;AACL,IAAA,OAAO,CAAC,CAAA;AACV,GAAA;AACF,CAAC,CAAA;AAED,SAAShD,cAAc,CAQpB,KAAA,EAAA;EAAA,IAPDxB,YAAY,SAAZA,YAAY;AACZyB,IAAAA,SAAS,SAATA,SAAS;AACTpC,IAAAA,YAAY,SAAZA,YAAY,CAAA;AAMZ,EAAA,IAAM5F,KAAK,GAAGuG,YAAY,CAACgB,MAAM,GAAG,CAAC,CAAA;AACrC,EAAA,IAAM6D,SAAS,GAAG,SAAZA,SAAS,CAAI/L,KAAa,EAAA;AAAA,IAAA,OAAKkH,YAAY,CAAClH,KAAK,CAAC,CAAEG,KAAK,CAAA;AAAA,GAAA,CAAA;EAE/D,IAAMG,UAAU,GAAGgK,uBAAuB,CAAC,CAAC,EAAE3J,KAAK,EAAEoL,SAAS,EAAExF,YAAY,CAAC,CAAA;EAC7E,IAAI7F,QAAQ,GAAGJ,UAAU,CAAA;AAEzB,EAAA,OACEI,QAAQ,GAAGC,KAAK,IAChBuG,YAAY,CAACxG,QAAQ,CAAC,CAAEF,GAAG,GAAG+F,YAAY,GAAGoC,SAAS,EACtD;AACAjI,IAAAA,QAAQ,EAAE,CAAA;AACZ,GAAA;EAEA,OAAO;AAAEJ,IAAAA,UAAU,EAAVA,UAAU;AAAEI,IAAAA,QAAQ,EAARA,QAAAA;GAAU,CAAA;AACjC;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/index.ts"],"sourcesContent":["import { approxEqual, memo, notUndefined } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n lane: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nexport const observeElementRect = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = (rect: Rect) => {\n const { width, height } = rect\n cb({ width: Math.round(width), height: Math.round(height) })\n }\n\n handler(element.getBoundingClientRect())\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize })\n return\n }\n }\n handler(element.getBoundingClientRect())\n })\n\n observer.observe(element, { box: 'border-box' })\n\n return () => {\n observer.unobserve(element)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<Window, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight })\n }\n handler()\n\n element.addEventListener('resize', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('resize', handler)\n }\n}\n\nexport const observeElementOffset = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollLeft' : 'scrollTop'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const observeWindowOffset = (\n instance: Virtualizer<Window, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollX' : 'scrollY'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<any, TItemElement>,\n) => {\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? 'inlineSize' : 'blockSize'],\n )\n return size\n }\n }\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = window.scrollY,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n elementKeyAttribute?: string\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n lanes?: number\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private scrollToIndexTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache = new Map<Key, number>()\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n measureElementCache = new Map<Key, TItemElement>()\n private observer = (() => {\n let _ro: ResizeObserver | null = null\n\n const get = () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, entry)\n })\n }))\n } else {\n return null\n }\n }\n\n return {\n disconnect: () => get()?.disconnect(),\n observe: (target: Element) =>\n get()?.observe(target, { box: 'border-box' }),\n unobserve: (target: Element) => get()?.unobserve(target),\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size)\n })\n\n this.maybeNotify()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n elementKeyAttribute: 'data-element-key',\n initialMeasurementsCache: [],\n lanes: 1,\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n this.measureElementCache.forEach(this.observer.observe)\n return () => {\n this.observer.disconnect()\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n const prev = this.scrollRect\n this.scrollRect = rect\n if (\n this.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n this.maybeNotify()\n }\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n this.isScrolling = true\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n this.scrollOffset = offset\n\n this.maybeNotify()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n this.scrollDirection = null\n\n this.maybeNotify()\n }, this.options.scrollingDelay)\n }),\n )\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private memoOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n ],\n (count, paddingStart, scrollMargin, getItemKey) => {\n this.pendingMeasuredCacheIndexes = []\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n }\n },\n {\n key: false,\n },\n )\n\n private getFurthestMeasurement = (\n measurements: VirtualItem[],\n index: number,\n ) => {\n const furthestMeasurementsFound = new Map<number, true>()\n const furthestMeasurements = new Map<number, VirtualItem>()\n for (let m = index - 1; m >= 0; m--) {\n const measurement = measurements[m]!\n\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue\n }\n\n const previousFurthestMeasurement = furthestMeasurements.get(\n measurement.lane,\n )\n if (\n previousFurthestMeasurement == null ||\n measurement.end > previousFurthestMeasurement.end\n ) {\n furthestMeasurements.set(measurement.lane, measurement)\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true)\n }\n\n if (furthestMeasurementsFound.size === this.options.lanes) {\n break\n }\n }\n\n return furthestMeasurements.size === this.options.lanes\n ? Array.from(furthestMeasurements.values()).sort(\n (a, b) => a.end - b.end,\n )[0]\n : undefined\n }\n\n private getMeasurements = memo(\n () => [this.memoOptions(), this.itemSizeCache],\n ({ count, paddingStart, scrollMargin, getItemKey }, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n\n const furthestMeasurement =\n this.options.lanes === 1\n ? measurements[i - 1]\n : this.getFurthestMeasurement(measurements, i)\n\n const start = furthestMeasurement\n ? furthestMeasurement.end\n : paddingStart + scrollMargin\n\n const measuredSize = itemSizeCache.get(key)\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n\n const end = start + size\n\n const lane = furthestMeasurement\n ? furthestMeasurement.lane\n : i % this.options.lanes\n\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane,\n }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n return (this.range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n }))\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private maybeNotify = memo(\n () => {\n const range = this.calculateRange()\n\n return [range.startIndex, range.endIndex, this.isScrolling]\n },\n () => {\n this.notify()\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [\n this.range.startIndex,\n this.range.endIndex,\n this.isScrolling,\n ],\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.calculateRange(),\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (\n node: TItemElement,\n entry: ResizeObserverEntry | undefined,\n ) => {\n const index = this.indexFromElement(node)\n\n const item = notUndefined(this.measurementsCache[index])\n\n const elementKey =\n node.getAttribute(this.options.elementKeyAttribute) ?? item.key\n\n const prevNode = this.measureElementCache.get(elementKey)\n\n if (!node.isConnected) {\n this.observer.unobserve(node)\n if (node === prevNode) {\n this.measureElementCache.delete(elementKey)\n }\n return\n }\n\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode)\n }\n this.observer.observe(node)\n this.measureElementCache.set(elementKey, node)\n }\n\n const measuredItemSize = this.options.measureElement(node, entry, this)\n\n this.resizeItem(index, measuredItemSize)\n }\n\n resizeItem = (index: number, size: number) => {\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const itemSize = this.itemSizeCache.get(item.key) ?? item.size\n\n const delta = size - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n\n this.itemSizeCache = new Map(\n this.itemSizeCache.set(item.key, size),\n )\n\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, undefined)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getVirtualItemForOffset = (offset: number) => {\n const measurements = this.getMeasurements()\n\n return notUndefined(\n measurements[\n findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index: number) => notUndefined(measurements[index]).start,\n offset,\n )\n ],\n )\n }\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= this.scrollOffset) {\n align = 'start'\n } else if (toOffset >= this.scrollOffset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n toOffset = toOffset\n } else if (align === 'end') {\n toOffset = toOffset - size\n } else if (align === 'center') {\n toOffset = toOffset - size / 2\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n getOffsetForIndex = (index: number, align: ScrollAlignment = 'auto') => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n const measurement = notUndefined(this.getMeasurements()[index])\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return [this.scrollOffset, align] as const\n }\n }\n\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return [this.getOffsetForAlignment(toOffset, align), align] as const\n }\n\n private isDynamicMode = () => this.measureElementCache.size > 0\n\n private cancelScrollToIndex = () => {\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: undefined,\n behavior,\n })\n }\n\n scrollToIndex = (\n index: number,\n { align: initialAlign = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n const [toOffset, align] = this.getOffsetForIndex(index, initialAlign)\n\n this._scrollToOffset(toOffset, { adjustments: undefined, behavior })\n\n if (behavior !== 'smooth' && this.isDynamicMode()) {\n this.scrollToIndexTimeoutId = setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM = this.measureElementCache.has(\n this.options.getItemKey(index),\n )\n\n if (elementInDOM) {\n const [toOffset] = this.getOffsetForIndex(index, align)\n\n if (!approxEqual(toOffset, this.scrollOffset)) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.scrollOffset + delta, {\n adjustments: undefined,\n behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = new Map()\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["defaultKeyExtractor","index","defaultRangeExtractor","range","start","Math","max","startIndex","overscan","end","min","endIndex","count","arr","i","push","observeElementRect","instance","cb","element","scrollElement","handler","rect","width","height","round","getBoundingClientRect","observer","ResizeObserver","entries","entry","borderBoxSize","box","inlineSize","blockSize","observe","unobserve","observeWindowRect","innerWidth","innerHeight","addEventListener","passive","removeEventListener","observeElementOffset","options","horizontal","observeWindowOffset","measureElement","size","windowScroll","offset","adjustments","window","scrollY","behavior","toOffset","scrollTo","elementScroll","Virtualizer","opts","unsubs","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","Map","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","_ro","get","forEach","_measureElement","target","disconnect","setOptions","Object","key","value","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","onChange","initialRect","scrollMargin","scrollingDelay","indexAttribute","elementKeyAttribute","initialMeasurementsCache","lanes","notify","cleanup","filter","Boolean","d","_didMount","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","prev","scrollRect","maybeNotify","clearTimeout","setTimeout","getSize","memoOptions","memo","getFurthestMeasurement","measurements","furthestMeasurementsFound","furthestMeasurements","m","measurement","has","lane","previousFurthestMeasurement","set","Array","from","values","sort","a","b","getMeasurements","length","slice","furthestMeasurement","measuredSize","estimateSize","process","env","NODE_ENV","calculateRange","outerSize","initialDeps","getIndexes","indexFromElement","node","attributeName","indexStr","getAttribute","console","warn","parseInt","item","notUndefined","elementKey","prevNode","isConnected","measuredItemSize","resizeItem","itemSize","delta","info","getVirtualItems","indexes","virtualItems","k","len","getVirtualItemForOffset","findNearestBinarySearch","getOffsetForAlignment","align","scrollSizeProp","scrollSize","document","documentElement","maxOffset","getOffsetForIndex","isDynamicMode","cancelScrollToIndex","scrollToOffset","scrollToIndex","initialAlign","elementInDOM","approxEqual","scrollBy","getTotalSize","scrollToFn","measure","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
@@ -190,7 +190,7 @@
190
190
  var windowScroll = function windowScroll(offset, _ref, instance) {
191
191
  var _instance$scrollEleme, _instance$scrollEleme2;
192
192
  var _ref$adjustments = _ref.adjustments,
193
- adjustments = _ref$adjustments === void 0 ? 0 : _ref$adjustments,
193
+ adjustments = _ref$adjustments === void 0 ? window.scrollY : _ref$adjustments,
194
194
  behavior = _ref.behavior;
195
195
  var toOffset = offset + adjustments;
196
196
  (_instance$scrollEleme = instance.scrollElement) == null ? void 0 : _instance$scrollEleme.scrollTo == null ? void 0 : _instance$scrollEleme.scrollTo((_instance$scrollEleme2 = {}, _instance$scrollEleme2[instance.options.horizontal ? 'left' : 'top'] = toOffset, _instance$scrollEleme2.behavior = behavior, _instance$scrollEleme2));
@@ -1 +1 @@
1
- {"version":3,"file":"index.development.js","sources":["../../src/utils.ts","../../src/index.ts"],"sourcesContent":["export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends readonly any[], TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: false | string\n debug?: () => any\n onChange?: (result: TResult) => void\n initialDeps?: TDeps\n },\n) {\n let deps = opts.initialDeps ?? []\n let result: TResult | undefined\n\n return (): TResult => {\n let depTime: number\n if (opts.key && opts.debug?.()) depTime = Date.now()\n\n const newDeps = getDeps()\n\n const depsChanged =\n newDeps.length !== deps.length ||\n newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n if (!depsChanged) {\n return result!\n }\n\n deps = newDeps\n\n let resultTime: number\n if (opts.key && opts.debug?.()) resultTime = Date.now()\n\n result = fn(...newDeps)\n\n if (opts.key && opts.debug?.()) {\n const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100\n const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100\n const resultFpsPercentage = resultEndTime / 16\n\n const pad = (str: number | string, num: number) => {\n str = String(str)\n while (str.length < num) {\n str = ' ' + str\n }\n return str\n }\n\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120),\n )}deg 100% 31%);`,\n opts?.key,\n )\n }\n\n opts?.onChange?.(result)\n\n return result!\n }\n}\n\nexport function notUndefined<T>(value: T | undefined, msg?: string): T {\n if (value === undefined) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : ''}`)\n } else {\n return value\n }\n}\n\nexport const approxEqual = (a: number, b: number) => Math.abs(a - b) < 1\n","import { approxEqual, memo, notUndefined } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n lane: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nexport const observeElementRect = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = (rect: Rect) => {\n const { width, height } = rect\n cb({ width: Math.round(width), height: Math.round(height) })\n }\n\n handler(element.getBoundingClientRect())\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize })\n return\n }\n }\n handler(element.getBoundingClientRect())\n })\n\n observer.observe(element, { box: 'border-box' })\n\n return () => {\n observer.unobserve(element)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<Window, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight })\n }\n handler()\n\n element.addEventListener('resize', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('resize', handler)\n }\n}\n\nexport const observeElementOffset = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollLeft' : 'scrollTop'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const observeWindowOffset = (\n instance: Virtualizer<Window, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollX' : 'scrollY'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<any, TItemElement>,\n) => {\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? 'inlineSize' : 'blockSize'],\n )\n return size\n }\n }\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n elementKeyAttribute?: string\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n lanes?: number\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private scrollToIndexTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache = new Map<Key, number>()\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n measureElementCache = new Map<Key, TItemElement>()\n private observer = (() => {\n let _ro: ResizeObserver | null = null\n\n const get = () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, entry)\n })\n }))\n } else {\n return null\n }\n }\n\n return {\n disconnect: () => get()?.disconnect(),\n observe: (target: Element) =>\n get()?.observe(target, { box: 'border-box' }),\n unobserve: (target: Element) => get()?.unobserve(target),\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size)\n })\n\n this.maybeNotify()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n elementKeyAttribute: 'data-element-key',\n initialMeasurementsCache: [],\n lanes: 1,\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n this.measureElementCache.forEach(this.observer.observe)\n return () => {\n this.observer.disconnect()\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n const prev = this.scrollRect\n this.scrollRect = rect\n if (\n this.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n this.maybeNotify()\n }\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n this.isScrolling = true\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n this.scrollOffset = offset\n\n this.maybeNotify()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n this.scrollDirection = null\n\n this.maybeNotify()\n }, this.options.scrollingDelay)\n }),\n )\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private memoOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n ],\n (count, paddingStart, scrollMargin, getItemKey) => {\n this.pendingMeasuredCacheIndexes = []\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n }\n },\n {\n key: false,\n },\n )\n\n private getFurthestMeasurement = (\n measurements: VirtualItem[],\n index: number,\n ) => {\n const furthestMeasurementsFound = new Map<number, true>()\n const furthestMeasurements = new Map<number, VirtualItem>()\n for (let m = index - 1; m >= 0; m--) {\n const measurement = measurements[m]!\n\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue\n }\n\n const previousFurthestMeasurement = furthestMeasurements.get(\n measurement.lane,\n )\n if (\n previousFurthestMeasurement == null ||\n measurement.end > previousFurthestMeasurement.end\n ) {\n furthestMeasurements.set(measurement.lane, measurement)\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true)\n }\n\n if (furthestMeasurementsFound.size === this.options.lanes) {\n break\n }\n }\n\n return furthestMeasurements.size === this.options.lanes\n ? Array.from(furthestMeasurements.values()).sort(\n (a, b) => a.end - b.end,\n )[0]\n : undefined\n }\n\n private getMeasurements = memo(\n () => [this.memoOptions(), this.itemSizeCache],\n ({ count, paddingStart, scrollMargin, getItemKey }, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n\n const furthestMeasurement =\n this.options.lanes === 1\n ? measurements[i - 1]\n : this.getFurthestMeasurement(measurements, i)\n\n const start = furthestMeasurement\n ? furthestMeasurement.end\n : paddingStart + scrollMargin\n\n const measuredSize = itemSizeCache.get(key)\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n\n const end = start + size\n\n const lane = furthestMeasurement\n ? furthestMeasurement.lane\n : i % this.options.lanes\n\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane,\n }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n return (this.range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n }))\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private maybeNotify = memo(\n () => {\n const range = this.calculateRange()\n\n return [range.startIndex, range.endIndex, this.isScrolling]\n },\n () => {\n this.notify()\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [\n this.range.startIndex,\n this.range.endIndex,\n this.isScrolling,\n ],\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.calculateRange(),\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (\n node: TItemElement,\n entry: ResizeObserverEntry | undefined,\n ) => {\n const index = this.indexFromElement(node)\n\n const item = notUndefined(this.measurementsCache[index])\n\n const elementKey =\n node.getAttribute(this.options.elementKeyAttribute) ?? item.key\n\n const prevNode = this.measureElementCache.get(elementKey)\n\n if (!node.isConnected) {\n this.observer.unobserve(node)\n if (node === prevNode) {\n this.measureElementCache.delete(elementKey)\n }\n return\n }\n\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode)\n }\n this.observer.observe(node)\n this.measureElementCache.set(elementKey, node)\n }\n\n const measuredItemSize = this.options.measureElement(node, entry, this)\n\n this.resizeItem(index, measuredItemSize)\n }\n\n resizeItem = (index: number, size: number) => {\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const itemSize = this.itemSizeCache.get(item.key) ?? item.size\n\n const delta = size - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n\n this.itemSizeCache = new Map(\n this.itemSizeCache.set(item.key, size),\n )\n\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, undefined)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getVirtualItemForOffset = (offset: number) => {\n const measurements = this.getMeasurements()\n\n return notUndefined(\n measurements[\n findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index: number) => notUndefined(measurements[index]).start,\n offset,\n )\n ],\n )\n }\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= this.scrollOffset) {\n align = 'start'\n } else if (toOffset >= this.scrollOffset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n toOffset = toOffset\n } else if (align === 'end') {\n toOffset = toOffset - size\n } else if (align === 'center') {\n toOffset = toOffset - size / 2\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n getOffsetForIndex = (index: number, align: ScrollAlignment = 'auto') => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n const measurement = notUndefined(this.getMeasurements()[index])\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return [this.scrollOffset, align] as const\n }\n }\n\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return [this.getOffsetForAlignment(toOffset, align), align] as const\n }\n\n private isDynamicMode = () => this.measureElementCache.size > 0\n\n private cancelScrollToIndex = () => {\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: undefined,\n behavior,\n })\n }\n\n scrollToIndex = (\n index: number,\n { align: initialAlign = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n const [toOffset, align] = this.getOffsetForIndex(index, initialAlign)\n\n this._scrollToOffset(toOffset, { adjustments: undefined, behavior })\n\n if (behavior !== 'smooth' && this.isDynamicMode()) {\n this.scrollToIndexTimeoutId = setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM = this.measureElementCache.has(\n this.options.getItemKey(index),\n )\n\n if (elementInDOM) {\n const [toOffset] = this.getOffsetForIndex(index, align)\n\n if (!approxEqual(toOffset, this.scrollOffset)) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.scrollOffset + delta, {\n adjustments: undefined,\n behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = new Map()\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["memo","getDeps","fn","opts","deps","initialDeps","result","depTime","key","debug","Date","now","newDeps","depsChanged","length","some","dep","index","resultTime","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","onChange","notUndefined","value","msg","undefined","Error","approxEqual","a","b","abs","defaultKeyExtractor","defaultRangeExtractor","range","start","startIndex","overscan","end","endIndex","count","arr","i","push","observeElementRect","instance","cb","element","scrollElement","handler","rect","width","height","getBoundingClientRect","observer","ResizeObserver","entries","entry","borderBoxSize","box","inlineSize","blockSize","observe","unobserve","observeWindowRect","innerWidth","innerHeight","addEventListener","passive","removeEventListener","observeElementOffset","options","horizontal","observeWindowOffset","measureElement","size","windowScroll","offset","adjustments","behavior","toOffset","scrollTo","elementScroll","Virtualizer","unsubs","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","Map","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","_ro","get","forEach","_measureElement","target","disconnect","setOptions","Object","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","initialRect","scrollMargin","scrollingDelay","indexAttribute","elementKeyAttribute","initialMeasurementsCache","lanes","notify","cleanup","filter","Boolean","d","_didMount","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","prev","scrollRect","maybeNotify","clearTimeout","setTimeout","getSize","memoOptions","getFurthestMeasurement","measurements","furthestMeasurementsFound","furthestMeasurements","m","measurement","has","lane","previousFurthestMeasurement","set","Array","from","values","sort","getMeasurements","slice","furthestMeasurement","measuredSize","estimateSize","calculateRange","outerSize","getIndexes","indexFromElement","node","attributeName","indexStr","getAttribute","warn","parseInt","item","elementKey","prevNode","isConnected","measuredItemSize","resizeItem","itemSize","delta","getVirtualItems","indexes","virtualItems","k","len","getVirtualItemForOffset","findNearestBinarySearch","getOffsetForAlignment","align","scrollSizeProp","scrollSize","document","documentElement","maxOffset","getOffsetForIndex","isDynamicMode","cancelScrollToIndex","scrollToOffset","scrollToIndex","initialAlign","elementInDOM","scrollBy","getTotalSize","scrollToFn","measure","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
1
+ {"version":3,"file":"index.development.js","sources":["../../src/utils.ts","../../src/index.ts"],"sourcesContent":["export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends readonly any[], TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: false | string\n debug?: () => any\n onChange?: (result: TResult) => void\n initialDeps?: TDeps\n },\n) {\n let deps = opts.initialDeps ?? []\n let result: TResult | undefined\n\n return (): TResult => {\n let depTime: number\n if (opts.key && opts.debug?.()) depTime = Date.now()\n\n const newDeps = getDeps()\n\n const depsChanged =\n newDeps.length !== deps.length ||\n newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n if (!depsChanged) {\n return result!\n }\n\n deps = newDeps\n\n let resultTime: number\n if (opts.key && opts.debug?.()) resultTime = Date.now()\n\n result = fn(...newDeps)\n\n if (opts.key && opts.debug?.()) {\n const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100\n const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100\n const resultFpsPercentage = resultEndTime / 16\n\n const pad = (str: number | string, num: number) => {\n str = String(str)\n while (str.length < num) {\n str = ' ' + str\n }\n return str\n }\n\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120),\n )}deg 100% 31%);`,\n opts?.key,\n )\n }\n\n opts?.onChange?.(result)\n\n return result!\n }\n}\n\nexport function notUndefined<T>(value: T | undefined, msg?: string): T {\n if (value === undefined) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : ''}`)\n } else {\n return value\n }\n}\n\nexport const approxEqual = (a: number, b: number) => Math.abs(a - b) < 1\n","import { approxEqual, memo, notUndefined } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n lane: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nexport const observeElementRect = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = (rect: Rect) => {\n const { width, height } = rect\n cb({ width: Math.round(width), height: Math.round(height) })\n }\n\n handler(element.getBoundingClientRect())\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize })\n return\n }\n }\n handler(element.getBoundingClientRect())\n })\n\n observer.observe(element, { box: 'border-box' })\n\n return () => {\n observer.unobserve(element)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<Window, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight })\n }\n handler()\n\n element.addEventListener('resize', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('resize', handler)\n }\n}\n\nexport const observeElementOffset = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollLeft' : 'scrollTop'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const observeWindowOffset = (\n instance: Virtualizer<Window, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollX' : 'scrollY'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<any, TItemElement>,\n) => {\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? 'inlineSize' : 'blockSize'],\n )\n return size\n }\n }\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = window.scrollY,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n elementKeyAttribute?: string\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n lanes?: number\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private scrollToIndexTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache = new Map<Key, number>()\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n measureElementCache = new Map<Key, TItemElement>()\n private observer = (() => {\n let _ro: ResizeObserver | null = null\n\n const get = () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, entry)\n })\n }))\n } else {\n return null\n }\n }\n\n return {\n disconnect: () => get()?.disconnect(),\n observe: (target: Element) =>\n get()?.observe(target, { box: 'border-box' }),\n unobserve: (target: Element) => get()?.unobserve(target),\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size)\n })\n\n this.maybeNotify()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n elementKeyAttribute: 'data-element-key',\n initialMeasurementsCache: [],\n lanes: 1,\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n this.measureElementCache.forEach(this.observer.observe)\n return () => {\n this.observer.disconnect()\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n const prev = this.scrollRect\n this.scrollRect = rect\n if (\n this.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n this.maybeNotify()\n }\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n this.isScrolling = true\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n this.scrollOffset = offset\n\n this.maybeNotify()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n this.scrollDirection = null\n\n this.maybeNotify()\n }, this.options.scrollingDelay)\n }),\n )\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private memoOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n ],\n (count, paddingStart, scrollMargin, getItemKey) => {\n this.pendingMeasuredCacheIndexes = []\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n }\n },\n {\n key: false,\n },\n )\n\n private getFurthestMeasurement = (\n measurements: VirtualItem[],\n index: number,\n ) => {\n const furthestMeasurementsFound = new Map<number, true>()\n const furthestMeasurements = new Map<number, VirtualItem>()\n for (let m = index - 1; m >= 0; m--) {\n const measurement = measurements[m]!\n\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue\n }\n\n const previousFurthestMeasurement = furthestMeasurements.get(\n measurement.lane,\n )\n if (\n previousFurthestMeasurement == null ||\n measurement.end > previousFurthestMeasurement.end\n ) {\n furthestMeasurements.set(measurement.lane, measurement)\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true)\n }\n\n if (furthestMeasurementsFound.size === this.options.lanes) {\n break\n }\n }\n\n return furthestMeasurements.size === this.options.lanes\n ? Array.from(furthestMeasurements.values()).sort(\n (a, b) => a.end - b.end,\n )[0]\n : undefined\n }\n\n private getMeasurements = memo(\n () => [this.memoOptions(), this.itemSizeCache],\n ({ count, paddingStart, scrollMargin, getItemKey }, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n\n const furthestMeasurement =\n this.options.lanes === 1\n ? measurements[i - 1]\n : this.getFurthestMeasurement(measurements, i)\n\n const start = furthestMeasurement\n ? furthestMeasurement.end\n : paddingStart + scrollMargin\n\n const measuredSize = itemSizeCache.get(key)\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n\n const end = start + size\n\n const lane = furthestMeasurement\n ? furthestMeasurement.lane\n : i % this.options.lanes\n\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane,\n }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n return (this.range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n }))\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private maybeNotify = memo(\n () => {\n const range = this.calculateRange()\n\n return [range.startIndex, range.endIndex, this.isScrolling]\n },\n () => {\n this.notify()\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [\n this.range.startIndex,\n this.range.endIndex,\n this.isScrolling,\n ],\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.calculateRange(),\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (\n node: TItemElement,\n entry: ResizeObserverEntry | undefined,\n ) => {\n const index = this.indexFromElement(node)\n\n const item = notUndefined(this.measurementsCache[index])\n\n const elementKey =\n node.getAttribute(this.options.elementKeyAttribute) ?? item.key\n\n const prevNode = this.measureElementCache.get(elementKey)\n\n if (!node.isConnected) {\n this.observer.unobserve(node)\n if (node === prevNode) {\n this.measureElementCache.delete(elementKey)\n }\n return\n }\n\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode)\n }\n this.observer.observe(node)\n this.measureElementCache.set(elementKey, node)\n }\n\n const measuredItemSize = this.options.measureElement(node, entry, this)\n\n this.resizeItem(index, measuredItemSize)\n }\n\n resizeItem = (index: number, size: number) => {\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const itemSize = this.itemSizeCache.get(item.key) ?? item.size\n\n const delta = size - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n\n this.itemSizeCache = new Map(\n this.itemSizeCache.set(item.key, size),\n )\n\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, undefined)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getVirtualItemForOffset = (offset: number) => {\n const measurements = this.getMeasurements()\n\n return notUndefined(\n measurements[\n findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index: number) => notUndefined(measurements[index]).start,\n offset,\n )\n ],\n )\n }\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= this.scrollOffset) {\n align = 'start'\n } else if (toOffset >= this.scrollOffset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n toOffset = toOffset\n } else if (align === 'end') {\n toOffset = toOffset - size\n } else if (align === 'center') {\n toOffset = toOffset - size / 2\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n getOffsetForIndex = (index: number, align: ScrollAlignment = 'auto') => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n const measurement = notUndefined(this.getMeasurements()[index])\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return [this.scrollOffset, align] as const\n }\n }\n\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return [this.getOffsetForAlignment(toOffset, align), align] as const\n }\n\n private isDynamicMode = () => this.measureElementCache.size > 0\n\n private cancelScrollToIndex = () => {\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: undefined,\n behavior,\n })\n }\n\n scrollToIndex = (\n index: number,\n { align: initialAlign = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n const [toOffset, align] = this.getOffsetForIndex(index, initialAlign)\n\n this._scrollToOffset(toOffset, { adjustments: undefined, behavior })\n\n if (behavior !== 'smooth' && this.isDynamicMode()) {\n this.scrollToIndexTimeoutId = setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM = this.measureElementCache.has(\n this.options.getItemKey(index),\n )\n\n if (elementInDOM) {\n const [toOffset] = this.getOffsetForIndex(index, align)\n\n if (!approxEqual(toOffset, this.scrollOffset)) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.scrollOffset + delta, {\n adjustments: undefined,\n behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = new Map()\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["memo","getDeps","fn","opts","deps","initialDeps","result","depTime","key","debug","Date","now","newDeps","depsChanged","length","some","dep","index","resultTime","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","onChange","notUndefined","value","msg","undefined","Error","approxEqual","a","b","abs","defaultKeyExtractor","defaultRangeExtractor","range","start","startIndex","overscan","end","endIndex","count","arr","i","push","observeElementRect","instance","cb","element","scrollElement","handler","rect","width","height","getBoundingClientRect","observer","ResizeObserver","entries","entry","borderBoxSize","box","inlineSize","blockSize","observe","unobserve","observeWindowRect","innerWidth","innerHeight","addEventListener","passive","removeEventListener","observeElementOffset","options","horizontal","observeWindowOffset","measureElement","size","windowScroll","offset","adjustments","window","scrollY","behavior","toOffset","scrollTo","elementScroll","Virtualizer","unsubs","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","Map","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","_ro","get","forEach","_measureElement","target","disconnect","setOptions","Object","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","initialRect","scrollMargin","scrollingDelay","indexAttribute","elementKeyAttribute","initialMeasurementsCache","lanes","notify","cleanup","filter","Boolean","d","_didMount","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","prev","scrollRect","maybeNotify","clearTimeout","setTimeout","getSize","memoOptions","getFurthestMeasurement","measurements","furthestMeasurementsFound","furthestMeasurements","m","measurement","has","lane","previousFurthestMeasurement","set","Array","from","values","sort","getMeasurements","slice","furthestMeasurement","measuredSize","estimateSize","calculateRange","outerSize","getIndexes","indexFromElement","node","attributeName","indexStr","getAttribute","warn","parseInt","item","elementKey","prevNode","isConnected","measuredItemSize","resizeItem","itemSize","delta","getVirtualItems","indexes","virtualItems","k","len","getVirtualItemForOffset","findNearestBinarySearch","getOffsetForAlignment","align","scrollSizeProp","scrollSize","document","documentElement","maxOffset","getOffsetForIndex","isDynamicMode","cancelScrollToIndex","scrollToOffset","scrollToIndex","initialAlign","elementInDOM","scrollBy","getTotalSize","scrollToFn","measure","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}