@tanstack/virtual-core 3.0.0-beta.30 → 3.0.0-beta.32
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.
- package/build/lib/_virtual/_rollupPluginBabelHelpers.esm.js +27 -0
- package/build/lib/_virtual/_rollupPluginBabelHelpers.esm.js.map +1 -0
- package/build/lib/_virtual/_rollupPluginBabelHelpers.js +31 -0
- package/build/lib/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
- package/build/lib/_virtual/_rollupPluginBabelHelpers.mjs +27 -0
- package/build/lib/_virtual/_rollupPluginBabelHelpers.mjs.map +1 -0
- package/build/lib/index.d.ts +6 -2
- package/build/lib/index.esm.js +418 -399
- package/build/lib/index.esm.js.map +1 -1
- package/build/lib/index.js +418 -399
- package/build/lib/index.js.map +1 -1
- package/build/lib/index.mjs +418 -399
- package/build/lib/index.mjs.map +1 -1
- package/build/lib/utils.esm.js +15 -16
- package/build/lib/utils.esm.js.map +1 -1
- package/build/lib/utils.js +15 -16
- package/build/lib/utils.js.map +1 -1
- package/build/lib/utils.mjs +15 -16
- package/build/lib/utils.mjs.map +1 -1
- package/build/umd/index.development.js +447 -415
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +50 -31
|
@@ -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: any\n debug?: () => any\n onChange?: (result: TResult) => void\n },\n): () => TResult {\n let deps: any[] = []\n let result: TResult | undefined\n\n return () => {\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 opts?.onChange?.(result)\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 return result!\n }\n}\n","import { memo } from './utils'\n\nexport * from './utils'\n\n//\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}\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\nconst memoRectCallback = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n let prev: Rect = { height: -1, width: -1 }\n\n return (rect: Rect) => {\n if (\n instance.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n cb(rect)\n }\n\n prev = rect\n }\n}\n\nexport const observeElementRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const observer = new ResizeObserver((entries) => {\n cb({\n width: entries[0]?.contentRect.width as number,\n height: entries[0]?.contentRect.height as number,\n })\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe(instance.scrollElement)\n\n return () => {\n observer.unobserve(instance.scrollElement)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const memoizedCallback = memoRectCallback(instance, cb)\n const onResize = () =>\n memoizedCallback({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n onResize()\n\n instance.scrollElement.addEventListener('resize', onResize, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('resize', onResize)\n }\n}\n\ntype ObserverMode = 'element' | 'window'\n\nconst scrollProps = {\n element: ['scrollLeft', 'scrollTop'],\n window: ['scrollX', 'scrollY'],\n} as const\n\nconst createOffsetObserver = (mode: ObserverMode) => {\n return (instance: Virtualizer<any, any>, cb: (offset: number) => void) => {\n if (!instance.scrollElement) {\n return\n }\n\n const propX = scrollProps[mode][0]\n const propY = scrollProps[mode][1]\n\n let prevX: number = instance.scrollElement[propX]\n let prevY: number = instance.scrollElement[propY]\n\n const scroll = () => {\n const offset =\n instance.scrollElement[instance.options.horizontal ? propX : propY]\n\n cb(Math.max(0, offset - instance.options.scrollMargin))\n }\n\n scroll()\n\n const onScroll = (e: Event) => {\n const target = e.currentTarget as HTMLElement & Window\n const scrollX = target[propX]\n const scrollY = target[propY]\n\n if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {\n scroll()\n }\n\n prevX = scrollX\n prevY = scrollY\n }\n\n instance.scrollElement.addEventListener('scroll', onScroll, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll)\n }\n }\n}\n\nexport const observeElementOffset = createOffsetObserver('element')\nexport const observeWindowOffset = createOffsetObserver('window')\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\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,\n behavior,\n sync,\n }: { adjustments?: number; behavior?: ScrollBehavior; sync: boolean },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset =\n (sync ? offset : offset + instance.options.scrollMargin) +\n (adjustments ?? 0)\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,\n behavior,\n sync,\n }: { adjustments?: number; behavior?: ScrollBehavior; sync: boolean },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset =\n (sync ? offset : offset + instance.options.scrollMargin) +\n (adjustments ?? 0)\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; sync: boolean },\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 el: TItemElement,\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 indexAttribute?: string\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 measurementsCache: VirtualItem[] = []\n private itemMeasurementsCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n private scrollOffset: number\n private scrollAdjustments: number = 0\n private measureElementCache: Record<Key, TItemElement> = {}\n private pendingScrollToIndexCallback: (() => void) | null = null\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\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, false)\n })\n }))\n } else {\n return null\n }\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\n this.calculateRange()\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 ...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 const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n this.pendingScrollToIndexCallback?.()\n\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 sync: true,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.calculateRange()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n const onIsScrollingChange = (isScrolling: boolean) => {\n if (this.isScrolling !== isScrolling) {\n this.isScrolling = isScrolling\n this.notify()\n }\n }\n\n this.scrollAdjustments = 0\n\n if (this.scrollOffset !== offset) {\n this.scrollOffset = offset\n onIsScrollingChange(true)\n }\n\n this.calculateRange()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n onIsScrollingChange(false)\n }, this.options.scrollingDelay)\n }),\n )\n } else if (!this.isScrolling) {\n this.calculateRange()\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.getItemKey,\n this.itemMeasurementsCache,\n ],\n (count, paddingStart, getItemKey, measurementsCache) => {\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 const measuredSize = measurementsCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\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 const range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n })\n if (\n range.startIndex !== this.range.startIndex ||\n range.endIndex !== this.range.endIndex\n ) {\n this.range = range\n this.notify()\n }\n return this.range\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.range,\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count: 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 = (node: TItemElement, _sync: boolean) => {\n const index = this.indexFromElement(node)\n\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const prevNode = this.measureElementCache[item.key]\n\n const ro = this.getResizeObserver()\n\n if (!node.isConnected) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (!prevNode || prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n this.measureElementCache[item.key] = node\n ro?.observe(node)\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemMeasurementsCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset && this.isScrolling) {\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 sync: false,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemMeasurementsCache = {\n ...this.itemMeasurementsCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\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 scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n const offset = this.scrollOffset\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= offset) {\n align = 'start'\n } else if (toOffset >= offset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n const options = {\n adjustments: undefined,\n behavior,\n sync: false,\n }\n if (align === 'start') {\n this._scrollToOffset(toOffset, options)\n } else if (align === 'end') {\n this._scrollToOffset(toOffset - size, options)\n } else if (align === 'center') {\n this._scrollToOffset(toOffset - size / 2, options)\n }\n }\n\n scrollToIndex = (\n index: number,\n { align = 'auto', ...rest }: ScrollToIndexOptions = {},\n ) => {\n this.pendingScrollToIndexCallback = null\n\n const measurements = this.getMeasurements()\n const offset = this.scrollOffset\n const size = this.getSize()\n const { count } = this.options\n\n const measurement = measurements[Math.max(0, Math.min(index, count - 1))]\n\n if (!measurement) {\n return\n }\n\n if (align === 'auto') {\n if (measurement.end >= offset + size - this.options.scrollPaddingEnd) {\n align = 'end'\n } else if (\n measurement.start <=\n offset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return\n }\n }\n\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n this.scrollToOffset(toOffset, { align, ...rest })\n\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic) {\n const didSeen = () =>\n typeof this.itemMeasurementsCache[this.options.getItemKey(index)] ===\n 'number'\n\n if (!didSeen()) {\n this.pendingScrollToIndexCallback = () => {\n if (didSeen()) {\n this.pendingScrollToIndexCallback = null\n this.scrollToIndex(index, { align, ...rest })\n }\n }\n }\n }\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) + this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n sync,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n sync: boolean\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, sync, adjustments }, this)\n }\n\n measure = () => {\n this.itemMeasurementsCache = {}\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","result","depTime","key","debug","Date","now","newDeps","depsChanged","length","some","dep","index","resultTime","onChange","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","defaultKeyExtractor","defaultRangeExtractor","range","start","startIndex","overscan","end","endIndex","count","arr","i","push","memoRectCallback","instance","cb","prev","height","width","rect","options","horizontal","observeElementRect","observer","ResizeObserver","entries","contentRect","scrollElement","getBoundingClientRect","observe","unobserve","observeWindowRect","memoizedCallback","onResize","innerWidth","innerHeight","addEventListener","capture","passive","removeEventListener","scrollProps","element","window","createOffsetObserver","mode","propX","propY","prevX","prevY","scroll","offset","scrollMargin","onScroll","e","target","currentTarget","scrollX","scrollY","observeElementOffset","observeWindowOffset","measureElement","windowScroll","adjustments","behavior","sync","toOffset","scrollTo","elementScroll","Virtualizer","constructor","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemMeasurementsCache","pendingMeasuredCacheIndexes","scrollAdjustments","measureElementCache","pendingScrollToIndexCallback","getResizeObserver","_ro","forEach","entry","_measureElement","setOptions","Object","value","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","initialRect","scrollingDelay","indexAttribute","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","scrollRect","calculateRange","clearTimeout","onIsScrollingChange","setTimeout","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","outerSize","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","warn","parseInt","_sync","item","prevNode","isConnected","measuredItemSize","itemSize","delta","getVirtualItems","indexes","virtualItems","k","len","measurement","scrollToOffset","align","scrollToIndex","rest","isDynamic","keys","didSeen","getTotalSize","scrollToFn","measure","findNearestBinarySearch","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: any\n debug?: () => any\n onChange?: (result: TResult) => void\n },\n): () => TResult {\n let deps: any[] = []\n let result: TResult | undefined\n\n return () => {\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 opts?.onChange?.(result)\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 return result!\n }\n}\n","import { memo } from './utils'\n\nexport * from './utils'\n\n//\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}\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\nconst memoRectCallback = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n let prev: Rect = { height: -1, width: -1 }\n\n return (rect: Rect) => {\n if (\n instance.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n cb(rect)\n }\n\n prev = rect\n }\n}\n\nexport const observeElementRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const observer = new ResizeObserver((entries) => {\n cb({\n width: entries[0]?.contentRect.width as number,\n height: entries[0]?.contentRect.height as number,\n })\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe(instance.scrollElement)\n\n return () => {\n observer.unobserve(instance.scrollElement)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const memoizedCallback = memoRectCallback(instance, cb)\n const onResize = () =>\n memoizedCallback({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n onResize()\n\n instance.scrollElement.addEventListener('resize', onResize, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('resize', onResize)\n }\n}\n\ntype ObserverMode = 'element' | 'window'\n\nconst scrollProps = {\n element: ['scrollLeft', 'scrollTop'],\n window: ['scrollX', 'scrollY'],\n} as const\n\nconst createOffsetObserver = (mode: ObserverMode) => {\n return (instance: Virtualizer<any, any>, cb: (offset: number) => void) => {\n if (!instance.scrollElement) {\n return\n }\n\n const propX = scrollProps[mode][0]\n const propY = scrollProps[mode][1]\n\n let prevX: number = instance.scrollElement[propX]\n let prevY: number = instance.scrollElement[propY]\n\n const scroll = () => {\n const offset =\n instance.scrollElement[instance.options.horizontal ? propX : propY]\n\n cb(Math.max(0, offset - instance.options.scrollMargin))\n }\n\n scroll()\n\n const onScroll = (e: Event) => {\n const target = e.currentTarget as HTMLElement & Window\n const scrollX = target[propX]\n const scrollY = target[propY]\n\n if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {\n scroll()\n }\n\n prevX = scrollX\n prevY = scrollY\n }\n\n instance.scrollElement.addEventListener('scroll', onScroll, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll)\n }\n }\n}\n\nexport const observeElementOffset = createOffsetObserver('element')\nexport const observeWindowOffset = createOffsetObserver('window')\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\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,\n behavior,\n sync,\n }: { adjustments?: number; behavior?: ScrollBehavior; sync: boolean },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset =\n (sync ? offset : offset + instance.options.scrollMargin) +\n (adjustments ?? 0)\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,\n behavior,\n sync,\n }: { adjustments?: number; behavior?: ScrollBehavior; sync: boolean },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset =\n (sync ? offset : offset + instance.options.scrollMargin) +\n (adjustments ?? 0)\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; sync: boolean },\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 el: TItemElement,\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 indexAttribute?: string\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 measurementsCache: VirtualItem[] = []\n private itemMeasurementsCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n private scrollAdjustments: number = 0\n private measureElementCache: Record<Key, TItemElement> = {}\n private pendingScrollToIndexCallback: (() => void) | null = null\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\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, false)\n })\n }))\n } else {\n return null\n }\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\n this.calculateRange()\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 ...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 const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n this.pendingScrollToIndexCallback?.()\n\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 sync: true,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.calculateRange()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n const onIsScrollingChange = (isScrolling: boolean) => {\n if (this.isScrolling !== isScrolling) {\n this.isScrolling = isScrolling\n this.notify()\n }\n }\n\n this.scrollAdjustments = 0\n\n if (this.scrollOffset !== offset) {\n this.scrollOffset = offset\n onIsScrollingChange(true)\n }\n\n this.calculateRange()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n onIsScrollingChange(false)\n }, this.options.scrollingDelay)\n }),\n )\n } else if (!this.isScrolling) {\n this.calculateRange()\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.getItemKey,\n this.itemMeasurementsCache,\n ],\n (count, paddingStart, getItemKey, measurementsCache) => {\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 const measuredSize = measurementsCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\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 const range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n })\n if (\n range.startIndex !== this.range.startIndex ||\n range.endIndex !== this.range.endIndex\n ) {\n this.range = range\n this.notify()\n }\n return this.range\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.range,\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count: 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 = (node: TItemElement, _sync: boolean) => {\n const index = this.indexFromElement(node)\n\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const prevNode = this.measureElementCache[item.key]\n\n const ro = this.getResizeObserver()\n\n if (!node.isConnected) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (!prevNode || prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n this.measureElementCache[item.key] = node\n ro?.observe(node)\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemMeasurementsCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset && this.isScrolling) {\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 sync: false,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemMeasurementsCache = {\n ...this.itemMeasurementsCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\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 getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const offset = this.scrollOffset\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= offset) {\n align = 'start'\n } else if (toOffset >= offset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n return toOffset\n } else if (align === 'end') {\n return toOffset - size\n } else if (align === 'center') {\n return toOffset - size / 2\n }\n return toOffset\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n const options = {\n adjustments: undefined,\n behavior,\n sync: false,\n }\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), options)\n }\n\n scrollToIndex = (\n index: number,\n { align = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n this.pendingScrollToIndexCallback = null\n\n const offset = this.scrollOffset\n const size = this.getSize()\n const { count } = this.options\n\n const measurements = this.getMeasurements()\n const measurement = measurements[Math.max(0, Math.min(index, count - 1))]\n\n if (!measurement) {\n throw new Error(`VirtualItem not found for index = ${index}`)\n }\n\n if (align === 'auto') {\n if (measurement.end >= offset + size - this.options.scrollPaddingEnd) {\n align = 'end'\n } else if (\n measurement.start <=\n offset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return\n }\n }\n\n const getOffsetForIndexAndAlignment = (measurement: VirtualItem) => {\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)\n }\n\n const toOffset = getOffsetForIndexAndAlignment(measurement)\n\n if (toOffset === offset) {\n return\n }\n\n const options = {\n adjustments: undefined,\n behavior,\n sync: false,\n }\n this._scrollToOffset(toOffset, options)\n\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic) {\n this.pendingScrollToIndexCallback = () => {\n this.scrollToIndex(index, { align, behavior })\n }\n }\n }\n\n scrollBy = (adjustments: number, options?: { behavior: ScrollBehavior }) => {\n this._scrollToOffset(this.scrollOffset, {\n adjustments,\n behavior: options?.behavior,\n sync: false,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) + this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n sync,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n sync: boolean\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, sync, adjustments }, this)\n }\n\n measure = () => {\n this.itemMeasurementsCache = {}\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","result","depTime","key","debug","Date","now","newDeps","depsChanged","length","some","dep","index","resultTime","onChange","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","defaultKeyExtractor","defaultRangeExtractor","range","start","startIndex","overscan","end","endIndex","count","arr","i","push","memoRectCallback","instance","cb","prev","height","width","rect","options","horizontal","observeElementRect","observer","ResizeObserver","entries","contentRect","scrollElement","getBoundingClientRect","observe","unobserve","observeWindowRect","memoizedCallback","onResize","innerWidth","innerHeight","addEventListener","capture","passive","removeEventListener","scrollProps","element","window","createOffsetObserver","mode","propX","propY","prevX","prevY","scroll","offset","scrollMargin","onScroll","e","target","currentTarget","scrollX","scrollY","observeElementOffset","observeWindowOffset","measureElement","windowScroll","adjustments","behavior","sync","toOffset","scrollTo","elementScroll","Virtualizer","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemMeasurementsCache","pendingMeasuredCacheIndexes","scrollAdjustments","measureElementCache","pendingScrollToIndexCallback","getResizeObserver","_ro","forEach","entry","_measureElement","setOptions","Object","value","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","initialRect","scrollingDelay","indexAttribute","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","scrollRect","calculateRange","clearTimeout","onIsScrollingChange","setTimeout","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","outerSize","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","warn","parseInt","_sync","item","prevNode","isConnected","measuredItemSize","itemSize","delta","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","align","scrollToOffset","scrollToIndex","Error","getOffsetForIndexAndAlignment","isDynamic","keys","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIO,SAASA,IAAI,CAClBC,OAAyB,EACzBC,EAA6C,EAC7CC,IAIC,EACc;IACf,IAAIC,IAAW,GAAG,EAAE,CAAA;EACpB,EAAA,IAAIC,MAA2B,CAAA;EAE/B,EAAA,OAAO,YAAM;EACX,IAAA,IAAIC,OAAe,CAAA;EACnB,IAAA,IAAIH,IAAI,CAACI,GAAG,IAAIJ,IAAI,CAACK,KAAK,IAAVL,IAAAA,IAAAA,IAAI,CAACK,KAAK,EAAI,EAAEF,OAAO,GAAGG,IAAI,CAACC,GAAG,EAAE,CAAA;MAEpD,IAAMC,OAAO,GAAGV,OAAO,EAAE,CAAA;EAEzB,IAAA,IAAMW,WAAW,GACfD,OAAO,CAACE,MAAM,KAAKT,IAAI,CAACS,MAAM,IAC9BF,OAAO,CAACG,IAAI,CAAC,UAACC,GAAQ,EAAEC,KAAa,EAAA;EAAA,MAAA,OAAKZ,IAAI,CAACY,KAAK,CAAC,KAAKD,GAAG,CAAA;OAAC,CAAA,CAAA;MAEhE,IAAI,CAACH,WAAW,EAAE;EAChB,MAAA,OAAOP,MAAM,CAAA;EACf,KAAA;EAEAD,IAAAA,IAAI,GAAGO,OAAO,CAAA;EAEd,IAAA,IAAIM,UAAkB,CAAA;EACtB,IAAA,IAAId,IAAI,CAACI,GAAG,IAAIJ,IAAI,CAACK,KAAK,IAAVL,IAAAA,IAAAA,IAAI,CAACK,KAAK,EAAI,EAAES,UAAU,GAAGR,IAAI,CAACC,GAAG,EAAE,CAAA;EAEvDL,IAAAA,MAAM,GAAGH,EAAE,CAAIS,KAAAA,CAAAA,KAAAA,CAAAA,EAAAA,OAAO,CAAC,CAAA;MACvBR,IAAI,IAAA,IAAA,GAAA,KAAA,CAAA,GAAJA,IAAI,CAAEe,QAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAdf,IAAI,CAAEe,QAAQ,CAAGb,MAAM,CAAC,CAAA;EAExB,IAAA,IAAIF,IAAI,CAACI,GAAG,IAAIJ,IAAI,CAACK,KAAK,IAAA,IAAA,IAAVL,IAAI,CAACK,KAAK,EAAI,EAAE;EAC9B,MAAA,IAAMW,UAAU,GAAGC,IAAI,CAACC,KAAK,CAAC,CAACZ,IAAI,CAACC,GAAG,EAAE,GAAGJ,OAAQ,IAAI,GAAG,CAAC,GAAG,GAAG,CAAA;EAClE,MAAA,IAAMgB,aAAa,GAAGF,IAAI,CAACC,KAAK,CAAC,CAACZ,IAAI,CAACC,GAAG,EAAE,GAAGO,UAAW,IAAI,GAAG,CAAC,GAAG,GAAG,CAAA;EACxE,MAAA,IAAMM,mBAAmB,GAAGD,aAAa,GAAG,EAAE,CAAA;QAE9C,IAAME,GAAG,GAAG,SAANA,GAAG,CAAIC,GAAoB,EAAEC,GAAW,EAAK;EACjDD,QAAAA,GAAG,GAAGE,MAAM,CAACF,GAAG,CAAC,CAAA;EACjB,QAAA,OAAOA,GAAG,CAACZ,MAAM,GAAGa,GAAG,EAAE;YACvBD,GAAG,GAAG,GAAG,GAAGA,GAAG,CAAA;EACjB,SAAA;EACA,QAAA,OAAOA,GAAG,CAAA;SACX,CAAA;EAEDG,MAAAA,OAAO,CAACC,IAAI,CAAA,WAAA,GACHL,GAAG,CAACF,aAAa,EAAE,CAAC,CAAC,UAAKE,GAAG,CAACL,UAAU,EAAE,CAAC,CAAC,GAIlCC,KAAAA,EAAAA,0FAAAA,GAAAA,IAAI,CAACU,GAAG,CACnB,CAAC,EACDV,IAAI,CAACW,GAAG,CAAC,GAAG,GAAG,GAAG,GAAGR,mBAAmB,EAAE,GAAG,CAAC,CAC/C,GACLpB,gBAAAA,EAAAA,IAAI,oBAAJA,IAAI,CAAEI,GAAG,CACV,CAAA;EACH,KAAA;EAEA,IAAA,OAAOF,MAAM,CAAA;KACd,CAAA;EACH;;EC9DA;;EAqCA;;MAEa2B,mBAAmB,GAAG,SAAtBA,mBAAmB,CAAIhB,KAAa,EAAA;EAAA,EAAA,OAAKA,KAAK,CAAA;EAAA,EAAA;MAE9CiB,qBAAqB,GAAG,SAAxBA,qBAAqB,CAAIC,KAAY,EAAK;EACrD,EAAA,IAAMC,KAAK,GAAGf,IAAI,CAACU,GAAG,CAACI,KAAK,CAACE,UAAU,GAAGF,KAAK,CAACG,QAAQ,EAAE,CAAC,CAAC,CAAA;EAC5D,EAAA,IAAMC,GAAG,GAAGlB,IAAI,CAACW,GAAG,CAACG,KAAK,CAACK,QAAQ,GAAGL,KAAK,CAACG,QAAQ,EAAEH,KAAK,CAACM,KAAK,GAAG,CAAC,CAAC,CAAA;IAEtE,IAAMC,GAAG,GAAG,EAAE,CAAA;IAEd,KAAK,IAAIC,EAAC,GAAGP,KAAK,EAAEO,EAAC,IAAIJ,GAAG,EAAEI,EAAC,EAAE,EAAE;EACjCD,IAAAA,GAAG,CAACE,IAAI,CAACD,EAAC,CAAC,CAAA;EACb,GAAA;EAEA,EAAA,OAAOD,GAAG,CAAA;EACZ,EAAC;EAED,IAAMG,gBAAgB,GAAG,SAAnBA,gBAAgB,CACpBC,QAA+B,EAC/BC,EAAwB,EACrB;EACH,EAAA,IAAIC,IAAU,GAAG;MAAEC,MAAM,EAAE,CAAC,CAAC;EAAEC,IAAAA,KAAK,EAAE,CAAC,CAAA;KAAG,CAAA;IAE1C,OAAO,UAACC,IAAU,EAAK;MACrB,IACEL,QAAQ,CAACM,OAAO,CAACC,UAAU,GACvBF,IAAI,CAACD,KAAK,KAAKF,IAAI,CAACE,KAAK,GACzBC,IAAI,CAACF,MAAM,KAAKD,IAAI,CAACC,MAAM,EAC/B;QACAF,EAAE,CAACI,IAAI,CAAC,CAAA;EACV,KAAA;EAEAH,IAAAA,IAAI,GAAGG,IAAI,CAAA;KACZ,CAAA;EACH,CAAC,CAAA;AAEM,MAAMG,kBAAkB,GAAG,SAArBA,kBAAkB,CAC7BR,QAA+B,EAC/BC,EAAwB,EACrB;EACH,EAAA,IAAMQ,QAAQ,GAAG,IAAIC,cAAc,CAAC,UAACC,OAAO,EAAK;EAAA,IAAA,IAAA,SAAA,EAAA,UAAA,CAAA;EAC/CV,IAAAA,EAAE,CAAC;QACDG,KAAK,EAAA,CAAA,SAAA,GAAEO,OAAO,CAAC,CAAC,CAAC,KAAV,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAYC,WAAW,CAACR,KAAe;QAC9CD,MAAM,EAAA,CAAA,UAAA,GAAEQ,OAAO,CAAC,CAAC,CAAC,KAAV,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAYC,WAAW,CAACT,MAAAA;EAClC,KAAC,CAAC,CAAA;EACJ,GAAC,CAAC,CAAA;EAEF,EAAA,IAAI,CAACH,QAAQ,CAACa,aAAa,EAAE;EAC3B,IAAA,OAAA;EACF,GAAA;EAEAZ,EAAAA,EAAE,CAACD,QAAQ,CAACa,aAAa,CAACC,qBAAqB,EAAE,CAAC,CAAA;EAElDL,EAAAA,QAAQ,CAACM,OAAO,CAACf,QAAQ,CAACa,aAAa,CAAC,CAAA;EAExC,EAAA,OAAO,YAAM;EACXJ,IAAAA,QAAQ,CAACO,SAAS,CAAChB,QAAQ,CAACa,aAAa,CAAC,CAAA;KAC3C,CAAA;EACH,EAAC;AAEM,MAAMI,iBAAiB,GAAG,SAApBA,iBAAiB,CAC5BjB,QAA+B,EAC/BC,EAAwB,EACrB;EACH,EAAA,IAAMiB,gBAAgB,GAAGnB,gBAAgB,CAACC,QAAQ,EAAEC,EAAE,CAAC,CAAA;IACvD,IAAMkB,QAAQ,GAAG,SAAXA,QAAQ,GAAA;EAAA,IAAA,OACZD,gBAAgB,CAAC;EACfd,MAAAA,KAAK,EAAEJ,QAAQ,CAACa,aAAa,CAACO,UAAU;EACxCjB,MAAAA,MAAM,EAAEH,QAAQ,CAACa,aAAa,CAACQ,WAAAA;EACjC,KAAC,CAAC,CAAA;EAAA,GAAA,CAAA;EAEJ,EAAA,IAAI,CAACrB,QAAQ,CAACa,aAAa,EAAE;EAC3B,IAAA,OAAA;EACF,GAAA;EAEAM,EAAAA,QAAQ,EAAE,CAAA;IAEVnB,QAAQ,CAACa,aAAa,CAACS,gBAAgB,CAAC,QAAQ,EAAEH,QAAQ,EAAE;EAC1DI,IAAAA,OAAO,EAAE,KAAK;EACdC,IAAAA,OAAO,EAAE,IAAA;EACX,GAAC,CAAC,CAAA;EAEF,EAAA,OAAO,YAAM;MACXxB,QAAQ,CAACa,aAAa,CAACY,mBAAmB,CAAC,QAAQ,EAAEN,QAAQ,CAAC,CAAA;KAC/D,CAAA;EACH,EAAC;EAID,IAAMO,WAAW,GAAG;EAClBC,EAAAA,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC;EACpCC,EAAAA,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAA;EAC/B,CAAU,CAAA;EAEV,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAoB,CAAIC,IAAkB,EAAK;EACnD,EAAA,OAAO,UAAC9B,QAA+B,EAAEC,EAA4B,EAAK;EACxE,IAAA,IAAI,CAACD,QAAQ,CAACa,aAAa,EAAE;EAC3B,MAAA,OAAA;EACF,KAAA;MAEA,IAAMkB,KAAK,GAAGL,WAAW,CAACI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;MAClC,IAAME,KAAK,GAAGN,WAAW,CAACI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;EAElC,IAAA,IAAIG,KAAa,GAAGjC,QAAQ,CAACa,aAAa,CAACkB,KAAK,CAAC,CAAA;EACjD,IAAA,IAAIG,KAAa,GAAGlC,QAAQ,CAACa,aAAa,CAACmB,KAAK,CAAC,CAAA;EAEjD,IAAA,IAAMG,MAAM,GAAG,SAATA,MAAM,GAAS;EACnB,MAAA,IAAMC,MAAM,GACVpC,QAAQ,CAACa,aAAa,CAACb,QAAQ,CAACM,OAAO,CAACC,UAAU,GAAGwB,KAAK,GAAGC,KAAK,CAAC,CAAA;EAErE/B,MAAAA,EAAE,CAAC1B,IAAI,CAACU,GAAG,CAAC,CAAC,EAAEmD,MAAM,GAAGpC,QAAQ,CAACM,OAAO,CAAC+B,YAAY,CAAC,CAAC,CAAA;OACxD,CAAA;EAEDF,IAAAA,MAAM,EAAE,CAAA;EAER,IAAA,IAAMG,QAAQ,GAAG,SAAXA,QAAQ,CAAIC,CAAQ,EAAK;EAC7B,MAAA,IAAMC,MAAM,GAAGD,CAAC,CAACE,aAAqC,CAAA;EACtD,MAAA,IAAMC,OAAO,GAAGF,MAAM,CAACT,KAAK,CAAC,CAAA;EAC7B,MAAA,IAAMY,OAAO,GAAGH,MAAM,CAACR,KAAK,CAAC,CAAA;EAE7B,MAAA,IAAIhC,QAAQ,CAACM,OAAO,CAACC,UAAU,GAAG0B,KAAK,GAAGS,OAAO,GAAGR,KAAK,GAAGS,OAAO,EAAE;EACnER,QAAAA,MAAM,EAAE,CAAA;EACV,OAAA;EAEAF,MAAAA,KAAK,GAAGS,OAAO,CAAA;EACfR,MAAAA,KAAK,GAAGS,OAAO,CAAA;OAChB,CAAA;MAED3C,QAAQ,CAACa,aAAa,CAACS,gBAAgB,CAAC,QAAQ,EAAEgB,QAAQ,EAAE;EAC1Df,MAAAA,OAAO,EAAE,KAAK;EACdC,MAAAA,OAAO,EAAE,IAAA;EACX,KAAC,CAAC,CAAA;EAEF,IAAA,OAAO,YAAM;QACXxB,QAAQ,CAACa,aAAa,CAACY,mBAAmB,CAAC,QAAQ,EAAEa,QAAQ,CAAC,CAAA;OAC/D,CAAA;KACF,CAAA;EACH,CAAC,CAAA;MAEYM,oBAAoB,GAAGf,oBAAoB,CAAC,SAAS,EAAC;MACtDgB,mBAAmB,GAAGhB,oBAAoB,CAAC,QAAQ,EAAC;AAE1D,MAAMiB,cAAc,GAAG,SAAjBA,cAAc,CACzBnB,OAAqB,EACrB3B,QAAwC,EACrC;EACH,EAAA,OAAOzB,IAAI,CAACC,KAAK,CACfmD,OAAO,CAACb,qBAAqB,EAAE,CAC7Bd,QAAQ,CAACM,OAAO,CAACC,UAAU,GAAG,OAAO,GAAG,QAAQ,CACjD,CACF,CAAA;EACH,EAAC;AAEM,MAAMwC,YAAY,GAAG,SAAfA,YAAY,CACvBX,MAAc,EAMdpC,IAAAA,EAAAA,QAA6B,EAC1B;EAAA,EAAA,IAAA,qBAAA,EAAA,sBAAA,CAAA;IAAA,IALDgD,WAAW,QAAXA,WAAW;EACXC,IAAAA,QAAQ,QAARA,QAAQ;EACRC,IAAAA,IAAI,QAAJA,IAAI,CAAA;IAIN,IAAMC,QAAQ,GACZ,CAACD,IAAI,GAAGd,MAAM,GAAGA,MAAM,GAAGpC,QAAQ,CAACM,OAAO,CAAC+B,YAAY,KACtDW,WAAW,WAAXA,WAAW,GAAI,CAAC,CAAC,CAAA;IAEpB,CAAAhD,qBAAAA,GAAAA,QAAQ,CAACa,aAAa,KAAtB,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAwBuC,QAAQ,IAAhC,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAwBA,QAAQ,EAAA,sBAAA,GAAA,EAAA,EAAA,sBAAA,CAC7BpD,QAAQ,CAACM,OAAO,CAACC,UAAU,GAAG,MAAM,GAAG,KAAK,CAAG4C,GAAAA,QAAQ,EACxDF,sBAAAA,CAAAA,QAAQ,GAARA,QAAQ,EACR,sBAAA,EAAA,CAAA;EACJ,EAAC;AAEM,MAAMI,aAAa,GAAG,SAAhBA,aAAa,CACxBjB,MAAc,EAMdpC,KAAAA,EAAAA,QAA6B,EAC1B;EAAA,EAAA,IAAA,sBAAA,EAAA,sBAAA,CAAA;IAAA,IALDgD,WAAW,SAAXA,WAAW;EACXC,IAAAA,QAAQ,SAARA,QAAQ;EACRC,IAAAA,IAAI,SAAJA,IAAI,CAAA;IAIN,IAAMC,QAAQ,GACZ,CAACD,IAAI,GAAGd,MAAM,GAAGA,MAAM,GAAGpC,QAAQ,CAACM,OAAO,CAAC+B,YAAY,KACtDW,WAAW,WAAXA,WAAW,GAAI,CAAC,CAAC,CAAA;IAEpB,CAAAhD,sBAAAA,GAAAA,QAAQ,CAACa,aAAa,KAAtB,IAAA,GAAA,KAAA,CAAA,GAAA,sBAAA,CAAwBuC,QAAQ,IAAhC,IAAA,GAAA,KAAA,CAAA,GAAA,sBAAA,CAAwBA,QAAQ,EAAA,sBAAA,GAAA,EAAA,EAAA,sBAAA,CAC7BpD,QAAQ,CAACM,OAAO,CAACC,UAAU,GAAG,MAAM,GAAG,KAAK,CAAG4C,GAAAA,QAAQ,EACxDF,sBAAAA,CAAAA,QAAQ,GAARA,QAAQ,EACR,sBAAA,EAAA,CAAA;EACJ,EAAC;AAgDD,MAAaK,WAAW,GAuCtB,SAAYhG,WAAAA,CAAAA,KAAsD,EAAE;EAAA,EAAA,IAAA,KAAA,GAAA,IAAA,CAAA;IAAA,IAnC5DiG,CAAAA,MAAM,GAA4B,EAAE,CAAA;IAAA,IAE5C1C,CAAAA,aAAa,GAA0B,IAAI,CAAA;IAAA,IAC3C2C,CAAAA,WAAW,GAAY,KAAK,CAAA;IAAA,IACpBC,CAAAA,oBAAoB,GAAyC,IAAI,CAAA;IAAA,IACzEC,CAAAA,iBAAiB,GAAkB,EAAE,CAAA;IAAA,IAC7BC,CAAAA,qBAAqB,GAAwB,EAAE,CAAA;IAAA,IAC/CC,CAAAA,2BAA2B,GAAa,EAAE,CAAA;IAAA,IAG1CC,CAAAA,iBAAiB,GAAW,CAAC,CAAA;IAAA,IAC7BC,CAAAA,mBAAmB,GAA8B,EAAE,CAAA;IAAA,IACnDC,CAAAA,4BAA4B,GAAwB,IAAI,CAAA;IAAA,IACxDC,CAAAA,iBAAiB,GAAI,YAAM;MACjC,IAAIC,GAA0B,GAAG,IAAI,CAAA;EAErC,IAAA,OAAO,YAAM;EACX,MAAA,IAAIA,GAAG,EAAE;EACP,QAAA,OAAOA,GAAG,CAAA;EACZ,OAAC,MAAM,IAAI,OAAOvD,cAAc,KAAK,WAAW,EAAE;EAChD,QAAA,OAAQuD,GAAG,GAAG,IAAIvD,cAAc,CAAC,UAACC,OAAO,EAAK;EAC5CA,UAAAA,OAAO,CAACuD,OAAO,CAAC,UAACC,KAAK,EAAK;cACzB,KAAI,CAACC,eAAe,CAACD,KAAK,CAAC3B,MAAM,EAAkB,KAAK,CAAC,CAAA;EAC3D,WAAC,CAAC,CAAA;EACJ,SAAC,CAAC,CAAA;EACJ,OAAC,MAAM;EACL,QAAA,OAAO,IAAI,CAAA;EACb,OAAA;OACD,CAAA;EACH,GAAC,EAAG,CAAA;EAAA,EAAA,IAAA,CACJnD,KAAK,GAA6C;EAChDE,IAAAA,UAAU,EAAE,CAAC;EACbG,IAAAA,QAAQ,EAAE,CAAA;KACX,CAAA;EAAA,EAAA,IAAA,CAUD2E,UAAU,GAAG,UAAC/G,IAAsD,EAAK;MACvEgH,MAAM,CAAC3D,OAAO,CAACrD,IAAI,CAAC,CAAC4G,OAAO,CAAC,UAAkB,KAAA,EAAA;EAAA,MAAA,IAAhBxG,GAAG,GAAA,KAAA,CAAA,CAAA,CAAA;UAAE6G,KAAK,GAAA,KAAA,CAAA,CAAA,CAAA,CAAA;QACvC,IAAI,OAAOA,KAAK,KAAK,WAAW,EAAE,OAAQjH,IAAI,CAASI,GAAG,CAAC,CAAA;EAC7D,KAAC,CAAC,CAAA;EAEF,IAAA,KAAI,CAAC4C,OAAO,GAAA,QAAA,CAAA;EACV3C,MAAAA,KAAK,EAAE,KAAK;EACZ6G,MAAAA,aAAa,EAAE,CAAC;EAChBhF,MAAAA,QAAQ,EAAE,CAAC;EACXiF,MAAAA,YAAY,EAAE,CAAC;EACfC,MAAAA,UAAU,EAAE,CAAC;EACbC,MAAAA,kBAAkB,EAAE,CAAC;EACrBC,MAAAA,gBAAgB,EAAE,CAAC;EACnBrE,MAAAA,UAAU,EAAE,KAAK;EACjBsE,MAAAA,UAAU,EAAE1F,mBAAmB;EAC/B2F,MAAAA,cAAc,EAAE1F,qBAAqB;QACrCf,QAAQ,EAAE,SAAM,QAAA,GAAA,EAAE;EAClByE,MAAAA,cAAc,EAAdA,cAAc;EACdiC,MAAAA,WAAW,EAAE;EAAE3E,QAAAA,KAAK,EAAE,CAAC;EAAED,QAAAA,MAAM,EAAE,CAAA;SAAG;EACpCkC,MAAAA,YAAY,EAAE,CAAC;EACf2C,MAAAA,cAAc,EAAE,GAAG;EACnBC,MAAAA,cAAc,EAAE,YAAA;EAAY,KAAA,EACzB3H,IAAI,CACR,CAAA;KACF,CAAA;IAAA,IAEO4H,CAAAA,MAAM,GAAG,YAAM;EACrB,IAAA,KAAI,CAAC5E,OAAO,CAACjC,QAAQ,IAArB,IAAA,GAAA,KAAA,CAAA,GAAA,KAAI,CAACiC,OAAO,CAACjC,QAAQ,CAAG,KAAI,CAAC,CAAA;KAC9B,CAAA;IAAA,IAEO8G,CAAAA,OAAO,GAAG,YAAM;MACtB,KAAI,CAAC5B,MAAM,CAAC6B,MAAM,CAACC,OAAO,CAAC,CAACnB,OAAO,CAAC,UAACoB,CAAC,EAAA;EAAA,MAAA,OAAKA,CAAC,EAAG,CAAA;OAAC,CAAA,CAAA;MAChD,KAAI,CAAC/B,MAAM,GAAG,EAAE,CAAA;MAChB,KAAI,CAAC1C,aAAa,GAAG,IAAI,CAAA;KAC1B,CAAA;IAAA,IAED0E,CAAAA,SAAS,GAAG,YAAM;EAChB,IAAA,IAAMC,EAAE,GAAG,KAAI,CAACxB,iBAAiB,EAAE,CAAA;MACnCM,MAAM,CAACmB,MAAM,CAAC,KAAI,CAAC3B,mBAAmB,CAAC,CAACI,OAAO,CAAC,UAACwB,IAAI,EAAA;EAAA,MAAA,OAAKF,EAAE,IAAFA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,EAAE,CAAEzE,OAAO,CAAC2E,IAAI,CAAC,CAAA;OAAC,CAAA,CAAA;EAE5E,IAAA,OAAO,YAAM;EACXF,MAAAA,EAAE,IAAFA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,EAAE,CAAEG,UAAU,EAAE,CAAA;QAEhB,KAAI,CAACR,OAAO,EAAE,CAAA;OACf,CAAA;KACF,CAAA;IAAA,IAEDS,CAAAA,WAAW,GAAG,YAAM;EAClB,IAAA,KAAI,CAAC7B,4BAA4B,IAAA,IAAA,GAAA,KAAA,CAAA,GAAjC,KAAI,CAACA,4BAA4B,EAAI,CAAA;EAErC,IAAA,IAAMlD,aAAa,GAAG,KAAI,CAACP,OAAO,CAACuF,gBAAgB,EAAE,CAAA;EAErD,IAAA,IAAI,KAAI,CAAChF,aAAa,KAAKA,aAAa,EAAE;QACxC,KAAI,CAACsE,OAAO,EAAE,CAAA;QAEd,KAAI,CAACtE,aAAa,GAAGA,aAAa,CAAA;EAElC,MAAA,KAAI,CAACiF,eAAe,CAAC,KAAI,CAACC,YAAY,EAAE;EACtC/C,QAAAA,WAAW,EAAEgD,SAAS;EACtB/C,QAAAA,QAAQ,EAAE+C,SAAS;EACnB9C,QAAAA,IAAI,EAAE,IAAA;EACR,OAAC,CAAC,CAAA;EAEF,MAAA,KAAI,CAACK,MAAM,CAACzD,IAAI,CACd,KAAI,CAACQ,OAAO,CAACE,kBAAkB,CAAC,KAAI,EAAE,UAACH,IAAI,EAAK;UAC9C,KAAI,CAAC4F,UAAU,GAAG5F,IAAI,CAAA;UACtB,KAAI,CAAC6F,cAAc,EAAE,CAAA;EACvB,OAAC,CAAC,CACH,CAAA;EAED,MAAA,KAAI,CAAC3C,MAAM,CAACzD,IAAI,CACd,KAAI,CAACQ,OAAO,CAACsC,oBAAoB,CAAC,KAAI,EAAE,UAACR,MAAM,EAAK;EAClD,QAAA,IAAI,KAAI,CAACqB,oBAAoB,KAAK,IAAI,EAAE;EACtC0C,UAAAA,YAAY,CAAC,KAAI,CAAC1C,oBAAoB,CAAC,CAAA;YACvC,KAAI,CAACA,oBAAoB,GAAG,IAAI,CAAA;EAClC,SAAA;EAEA,QAAA,IAAM2C,mBAAmB,GAAG,SAAtBA,mBAAmB,CAAI5C,WAAoB,EAAK;EACpD,UAAA,IAAI,KAAI,CAACA,WAAW,KAAKA,WAAW,EAAE;cACpC,KAAI,CAACA,WAAW,GAAGA,WAAW,CAAA;cAC9B,KAAI,CAAC0B,MAAM,EAAE,CAAA;EACf,WAAA;WACD,CAAA;UAED,KAAI,CAACrB,iBAAiB,GAAG,CAAC,CAAA;EAE1B,QAAA,IAAI,KAAI,CAACkC,YAAY,KAAK3D,MAAM,EAAE;YAChC,KAAI,CAAC2D,YAAY,GAAG3D,MAAM,CAAA;YAC1BgE,mBAAmB,CAAC,IAAI,CAAC,CAAA;EAC3B,SAAA;UAEA,KAAI,CAACF,cAAc,EAAE,CAAA;EAErB,QAAA,KAAI,CAACzC,oBAAoB,GAAG4C,UAAU,CAAC,YAAM;YAC3C,KAAI,CAAC5C,oBAAoB,GAAG,IAAI,CAAA;YAChC2C,mBAAmB,CAAC,KAAK,CAAC,CAAA;EAC5B,SAAC,EAAE,KAAI,CAAC9F,OAAO,CAAC0E,cAAc,CAAC,CAAA;EACjC,OAAC,CAAC,CACH,CAAA;EACH,KAAC,MAAM,IAAI,CAAC,KAAI,CAACxB,WAAW,EAAE;QAC5B,KAAI,CAAC0C,cAAc,EAAE,CAAA;EACvB,KAAA;KACD,CAAA;IAAA,IAEOI,CAAAA,OAAO,GAAG,YAAM;EACtB,IAAA,OAAO,KAAI,CAACL,UAAU,CAAC,KAAI,CAAC3F,OAAO,CAACC,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAA;KACrE,CAAA;IAAA,IAEOgG,CAAAA,eAAe,GAAGpJ,IAAI,CAC5B,YAAA;MAAA,OAAM,CACJ,KAAI,CAACmD,OAAO,CAACX,KAAK,EAClB,KAAI,CAACW,OAAO,CAACmE,YAAY,EACzB,KAAI,CAACnE,OAAO,CAACuE,UAAU,EACvB,KAAI,CAAClB,qBAAqB,CAC3B,CAAA;KACD,EAAA,UAAChE,KAAK,EAAE8E,YAAY,EAAEI,UAAU,EAAEnB,iBAAiB,EAAK;MACtD,IAAMxE,GAAG,GACP,KAAI,CAAC0E,2BAA2B,CAAC5F,MAAM,GAAG,CAAC,GACvCO,IAAI,CAACW,GAAG,OAARX,IAAI,EAAQ,KAAI,CAACqF,2BAA2B,CAAC,GAC7C,CAAC,CAAA;MACP,KAAI,CAACA,2BAA2B,GAAG,EAAE,CAAA;MAErC,IAAM4C,YAAY,GAAG,KAAI,CAAC9C,iBAAiB,CAAC+C,KAAK,CAAC,CAAC,EAAEvH,GAAG,CAAC,CAAA;MAEzD,KAAK,IAAIW,GAAC,GAAGX,GAAG,EAAEW,GAAC,GAAGF,KAAK,EAAEE,GAAC,EAAE,EAAE;EAChC,MAAA,IAAMnC,GAAG,GAAGmH,UAAU,CAAChF,GAAC,CAAC,CAAA;EACzB,MAAA,IAAM6G,YAAY,GAAGhD,iBAAiB,CAAChG,GAAG,CAAC,CAAA;EAC3C,MAAA,IAAM4B,KAAK,GAAGkH,YAAY,CAAC3G,GAAC,GAAG,CAAC,CAAC,GAC7B2G,YAAY,CAAC3G,GAAC,GAAG,CAAC,CAAC,CAAEJ,GAAG,GACxBgF,YAAY,CAAA;EAChB,MAAA,IAAMkC,IAAI,GACR,OAAOD,YAAY,KAAK,QAAQ,GAC5BA,YAAY,GACZ,KAAI,CAACpG,OAAO,CAACsG,YAAY,CAAC/G,GAAC,CAAC,CAAA;EAClC,MAAA,IAAMJ,GAAG,GAAGH,KAAK,GAAGqH,IAAI,CAAA;QACxBH,YAAY,CAAC3G,GAAC,CAAC,GAAG;EAAE1B,QAAAA,KAAK,EAAE0B,GAAC;EAAEP,QAAAA,KAAK,EAALA,KAAK;EAAEqH,QAAAA,IAAI,EAAJA,IAAI;EAAElH,QAAAA,GAAG,EAAHA,GAAG;EAAE/B,QAAAA,GAAG,EAAHA,GAAAA;SAAK,CAAA;EACvD,KAAA;MAEA,KAAI,CAACgG,iBAAiB,GAAG8C,YAAY,CAAA;EACrC,IAAA,OAAOA,YAAY,CAAA;EACrB,GAAC,EACD;MACE9I,GAAG,EAA2C,iBAAiB;EAC/DC,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;EAAA,MAAA,OAAM,KAAI,CAAC2C,OAAO,CAAC3C,KAAK,CAAA;EAAA,KAAA;EACjC,GAAC,CACF,CAAA;IAAA,IAEDuI,CAAAA,cAAc,GAAG/I,IAAI,CACnB,YAAA;EAAA,IAAA,OAAM,CAAC,KAAI,CAACoJ,eAAe,EAAE,EAAE,KAAI,CAACD,OAAO,EAAE,EAAE,KAAI,CAACP,YAAY,CAAC,CAAA;EAAA,GAAA,EACjE,UAACS,YAAY,EAAEK,SAAS,EAAEd,YAAY,EAAK;MACzC,IAAM1G,KAAK,GAAG6G,cAAc,CAAC;EAC3BM,MAAAA,YAAY,EAAZA,YAAY;EACZK,MAAAA,SAAS,EAATA,SAAS;EACTd,MAAAA,YAAY,EAAZA,YAAAA;EACF,KAAC,CAAC,CAAA;EACF,IAAA,IACE1G,KAAK,CAACE,UAAU,KAAK,KAAI,CAACF,KAAK,CAACE,UAAU,IAC1CF,KAAK,CAACK,QAAQ,KAAK,KAAI,CAACL,KAAK,CAACK,QAAQ,EACtC;QACA,KAAI,CAACL,KAAK,GAAGA,KAAK,CAAA;QAClB,KAAI,CAAC6F,MAAM,EAAE,CAAA;EACf,KAAA;MACA,OAAO,KAAI,CAAC7F,KAAK,CAAA;EACnB,GAAC,EACD;MACE3B,GAAG,EAA2C,gBAAgB;EAC9DC,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;EAAA,MAAA,OAAM,KAAI,CAAC2C,OAAO,CAAC3C,KAAK,CAAA;EAAA,KAAA;EACjC,GAAC,CACF,CAAA;IAAA,IAEOmJ,CAAAA,UAAU,GAAG3J,IAAI,CACvB,YAAA;MAAA,OAAM,CACJ,KAAI,CAACmD,OAAO,CAACwE,cAAc,EAC3B,KAAI,CAACzF,KAAK,EACV,KAAI,CAACiB,OAAO,CAACd,QAAQ,EACrB,KAAI,CAACc,OAAO,CAACX,KAAK,CACnB,CAAA;KACD,EAAA,UAACmF,cAAc,EAAEzF,KAAK,EAAEG,QAAQ,EAAEG,KAAK,EAAK;MAC1C,OAAOmF,cAAc,cAChBzF,KAAK,EAAA;EACRG,MAAAA,QAAQ,EAARA,QAAQ;EACRG,MAAAA,KAAK,EAAEA,KAAAA;OACP,CAAA,CAAA,CAAA;EACJ,GAAC,EACD;MACEjC,GAAG,EAA2C,YAAY;EAC1DC,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;EAAA,MAAA,OAAM,KAAI,CAAC2C,OAAO,CAAC3C,KAAK,CAAA;EAAA,KAAA;EACjC,GAAC,CACF,CAAA;EAAA,EAAA,IAAA,CAEDoJ,gBAAgB,GAAG,UAACrB,IAAkB,EAAK;EACzC,IAAA,IAAMsB,aAAa,GAAG,KAAI,CAAC1G,OAAO,CAAC2E,cAAc,CAAA;EACjD,IAAA,IAAMgC,QAAQ,GAAGvB,IAAI,CAACwB,YAAY,CAACF,aAAa,CAAC,CAAA;MAEjD,IAAI,CAACC,QAAQ,EAAE;EACblI,MAAAA,OAAO,CAACoI,IAAI,CACiBH,0BAAAA,GAAAA,aAAa,GACzC,gCAAA,CAAA,CAAA;EACD,MAAA,OAAO,CAAC,CAAC,CAAA;EACX,KAAA;EAEA,IAAA,OAAOI,QAAQ,CAACH,QAAQ,EAAE,EAAE,CAAC,CAAA;KAC9B,CAAA;EAAA,EAAA,IAAA,CAEO7C,eAAe,GAAG,UAACsB,IAAkB,EAAE2B,KAAc,EAAK;EAAA,IAAA,IAAA,qBAAA,CAAA;EAChE,IAAA,IAAMlJ,KAAK,GAAG,KAAI,CAAC4I,gBAAgB,CAACrB,IAAI,CAAC,CAAA;EAEzC,IAAA,IAAM4B,IAAI,GAAG,KAAI,CAAC5D,iBAAiB,CAACvF,KAAK,CAAC,CAAA;MAC1C,IAAI,CAACmJ,IAAI,EAAE;EACT,MAAA,OAAA;EACF,KAAA;MAEA,IAAMC,QAAQ,GAAG,KAAI,CAACzD,mBAAmB,CAACwD,IAAI,CAAC5J,GAAG,CAAC,CAAA;EAEnD,IAAA,IAAM8H,EAAE,GAAG,KAAI,CAACxB,iBAAiB,EAAE,CAAA;EAEnC,IAAA,IAAI,CAAC0B,IAAI,CAAC8B,WAAW,EAAE;EACrB,MAAA,IAAID,QAAQ,EAAE;EACZ/B,QAAAA,EAAE,oBAAFA,EAAE,CAAExE,SAAS,CAACuG,QAAQ,CAAC,CAAA;EACvB,QAAA,OAAO,KAAI,CAACzD,mBAAmB,CAACwD,IAAI,CAAC5J,GAAG,CAAC,CAAA;EAC3C,OAAA;EACA,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,IAAI,CAAC6J,QAAQ,IAAIA,QAAQ,KAAK7B,IAAI,EAAE;EAClC,MAAA,IAAI6B,QAAQ,EAAE;EACZ/B,QAAAA,EAAE,oBAAFA,EAAE,CAAExE,SAAS,CAACuG,QAAQ,CAAC,CAAA;EACzB,OAAA;QACA,KAAI,CAACzD,mBAAmB,CAACwD,IAAI,CAAC5J,GAAG,CAAC,GAAGgI,IAAI,CAAA;EACzCF,MAAAA,EAAE,oBAAFA,EAAE,CAAEzE,OAAO,CAAC2E,IAAI,CAAC,CAAA;EACnB,KAAA;MAEA,IAAM+B,gBAAgB,GAAG,KAAI,CAACnH,OAAO,CAACwC,cAAc,CAAC4C,IAAI,EAAE,KAAI,CAAC,CAAA;EAEhE,IAAA,IAAMgC,QAAQ,GAAA,CAAA,qBAAA,GAAG,KAAI,CAAC/D,qBAAqB,CAAC2D,IAAI,CAAC5J,GAAG,CAAC,KAAI4J,IAAAA,GAAAA,qBAAAA,GAAAA,IAAI,CAACX,IAAI,CAAA;EAElE,IAAA,IAAMgB,KAAK,GAAGF,gBAAgB,GAAGC,QAAQ,CAAA;MAEzC,IAAIC,KAAK,KAAK,CAAC,EAAE;EAAA,MAAA,IAAA,SAAA,CAAA;QACf,IAAIL,IAAI,CAAChI,KAAK,GAAG,KAAI,CAACyG,YAAY,IAAI,KAAI,CAACvC,WAAW,EAAE;EACtD,QAAA,IAA6C,KAAI,CAAClD,OAAO,CAAC3C,KAAK,EAAE;EAC/DoB,UAAAA,OAAO,CAACC,IAAI,CAAC,YAAY,EAAE2I,KAAK,CAAC,CAAA;EACnC,SAAA;EAEA,QAAA,KAAI,CAAC7B,eAAe,CAAC,KAAI,CAACC,YAAY,EAAE;EACtC/C,UAAAA,WAAW,EAAG,KAAI,CAACa,iBAAiB,IAAI8D,KAAM;EAC9C1E,UAAAA,QAAQ,EAAE+C,SAAS;EACnB9C,UAAAA,IAAI,EAAE,KAAA;EACR,SAAC,CAAC,CAAA;EACJ,OAAA;EAEA,MAAA,KAAI,CAACU,2BAA2B,CAAC9D,IAAI,CAAC3B,KAAK,CAAC,CAAA;EAC5C,MAAA,KAAI,CAACwF,qBAAqB,GACrB,QAAA,CAAA,EAAA,EAAA,KAAI,CAACA,qBAAqB,GAC5B2D,SAAAA,GAAAA,EAAAA,EAAAA,SAAAA,CAAAA,IAAI,CAAC5J,GAAG,CAAG+J,GAAAA,gBAAgB,EAC7B,SAAA,EAAA,CAAA;QACD,KAAI,CAACvC,MAAM,EAAE,CAAA;EACf,KAAA;KACD,CAAA;EAAA,EAAA,IAAA,CAEDpC,cAAc,GAAG,UAAC4C,IAAyB,EAAK;MAC9C,IAAI,CAACA,IAAI,EAAE;EACT,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,KAAI,CAACtB,eAAe,CAACsB,IAAI,EAAE,IAAI,CAAC,CAAA;KACjC,CAAA;IAAA,IAEDkC,CAAAA,eAAe,GAAGzK,IAAI,CACpB,YAAA;MAAA,OAAM,CAAC,KAAI,CAAC2J,UAAU,EAAE,EAAE,KAAI,CAACP,eAAe,EAAE,CAAC,CAAA;EAAA,GAAA,EACjD,UAACsB,OAAO,EAAErB,YAAY,EAAK;MACzB,IAAMsB,YAA2B,GAAG,EAAE,CAAA;EAEtC,IAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAGH,OAAO,CAAC7J,MAAM,EAAE+J,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;EAClD,MAAA,IAAMlI,GAAC,GAAGgI,OAAO,CAACE,CAAC,CAAE,CAAA;EACrB,MAAA,IAAME,WAAW,GAAGzB,YAAY,CAAC3G,GAAC,CAAE,CAAA;EAEpCiI,MAAAA,YAAY,CAAChI,IAAI,CAACmI,WAAW,CAAC,CAAA;EAChC,KAAA;EAEA,IAAA,OAAOH,YAAY,CAAA;EACrB,GAAC,EACD;MACEpK,GAAG,EAA2C,YAAY;EAC1DC,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;EAAA,MAAA,OAAM,KAAI,CAAC2C,OAAO,CAAC3C,KAAK,CAAA;EAAA,KAAA;EACjC,GAAC,CACF,CAAA;EAAA,EAAA,IAAA,CAEDuK,qBAAqB,GAAG,UAAC/E,QAAgB,EAAEgF,KAAsB,EAAK;EACpE,IAAA,IAAM/F,MAAM,GAAG,KAAI,CAAC2D,YAAY,CAAA;EAChC,IAAA,IAAMY,IAAI,GAAG,KAAI,CAACL,OAAO,EAAE,CAAA;MAE3B,IAAI6B,KAAK,KAAK,MAAM,EAAE;QACpB,IAAIhF,QAAQ,IAAIf,MAAM,EAAE;EACtB+F,QAAAA,KAAK,GAAG,OAAO,CAAA;EACjB,OAAC,MAAM,IAAIhF,QAAQ,IAAIf,MAAM,GAAGuE,IAAI,EAAE;EACpCwB,QAAAA,KAAK,GAAG,KAAK,CAAA;EACf,OAAC,MAAM;EACLA,QAAAA,KAAK,GAAG,OAAO,CAAA;EACjB,OAAA;EACF,KAAA;MAEA,IAAIA,KAAK,KAAK,OAAO,EAAE;EACrB,MAAA,OAAOhF,QAAQ,CAAA;EACjB,KAAC,MAAM,IAAIgF,KAAK,KAAK,KAAK,EAAE;QAC1B,OAAOhF,QAAQ,GAAGwD,IAAI,CAAA;EACxB,KAAC,MAAM,IAAIwB,KAAK,KAAK,QAAQ,EAAE;EAC7B,MAAA,OAAOhF,QAAQ,GAAGwD,IAAI,GAAG,CAAC,CAAA;EAC5B,KAAA;EACA,IAAA,OAAOxD,QAAQ,CAAA;KAChB,CAAA;EAAA,EAAA,IAAA,CAEDiF,cAAc,GAAG,UACfjF,QAAgB,EAEb,KAAA,EAAA;EAAA,IAAA,IAAA,KAAA,GAAA,KAAA,KAAA,KAAA,CAAA,GADoD,EAAE,GAAA,KAAA;EAAA,MAAA,WAAA,GAAA,KAAA,CAAvDgF,KAAK;EAALA,MAAAA,KAAK,4BAAG,OAAO,GAAA,WAAA;EAAElF,MAAAA,QAAQ,SAARA,QAAQ,CAAA;EAE3B,IAAA,IAAM3C,OAAO,GAAG;EACd0C,MAAAA,WAAW,EAAEgD,SAAS;EACtB/C,MAAAA,QAAQ,EAARA,QAAQ;EACRC,MAAAA,IAAI,EAAE,KAAA;OACP,CAAA;EACD,IAAA,KAAI,CAAC4C,eAAe,CAAC,KAAI,CAACoC,qBAAqB,CAAC/E,QAAQ,EAAEgF,KAAK,CAAC,EAAE7H,OAAO,CAAC,CAAA;KAC3E,CAAA;EAAA,EAAA,IAAA,CAED+H,aAAa,GAAG,UACdlK,KAAa,EAEV,MAAA,EAAA;EAAA,IAAA,IAAA,KAAA,GAAA,MAAA,KAAA,KAAA,CAAA,GADkD,EAAE,GAAA,MAAA;EAAA,MAAA,WAAA,GAAA,KAAA,CAArDgK,KAAK;EAALA,MAAAA,KAAK,4BAAG,MAAM,GAAA,WAAA;EAAElF,MAAAA,QAAQ,SAARA,QAAQ,CAAA;MAE1B,KAAI,CAACc,4BAA4B,GAAG,IAAI,CAAA;EAExC,IAAA,IAAM3B,MAAM,GAAG,KAAI,CAAC2D,YAAY,CAAA;EAChC,IAAA,IAAMY,IAAI,GAAG,KAAI,CAACL,OAAO,EAAE,CAAA;EAC3B,IAAA,IAAQ3G,KAAK,GAAK,KAAI,CAACW,OAAO,CAAtBX,KAAK,CAAA;EAEb,IAAA,IAAM6G,YAAY,GAAG,KAAI,CAACD,eAAe,EAAE,CAAA;MAC3C,IAAM0B,WAAW,GAAGzB,YAAY,CAACjI,IAAI,CAACU,GAAG,CAAC,CAAC,EAAEV,IAAI,CAACW,GAAG,CAACf,KAAK,EAAEwB,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;MAEzE,IAAI,CAACsI,WAAW,EAAE;EAChB,MAAA,MAAM,IAAIK,KAAK,CAAsCnK,oCAAAA,GAAAA,KAAK,CAAG,CAAA;EAC/D,KAAA;MAEA,IAAIgK,KAAK,KAAK,MAAM,EAAE;EACpB,MAAA,IAAIF,WAAW,CAACxI,GAAG,IAAI2C,MAAM,GAAGuE,IAAI,GAAG,KAAI,CAACrG,OAAO,CAACsE,gBAAgB,EAAE;EACpEuD,QAAAA,KAAK,GAAG,KAAK,CAAA;EACf,OAAC,MAAM,IACLF,WAAW,CAAC3I,KAAK,IACjB8C,MAAM,GAAG,KAAI,CAAC9B,OAAO,CAACqE,kBAAkB,EACxC;EACAwD,QAAAA,KAAK,GAAG,OAAO,CAAA;EACjB,OAAC,MAAM;EACL,QAAA,OAAA;EACF,OAAA;EACF,KAAA;EAEA,IAAA,IAAMI,6BAA6B,GAAG,SAAhCA,6BAA6B,CAAIN,WAAwB,EAAK;QAClE,IAAM9E,QAAQ,GACZgF,KAAK,KAAK,KAAK,GACXF,WAAW,CAACxI,GAAG,GAAG,KAAI,CAACa,OAAO,CAACsE,gBAAgB,GAC/CqD,WAAW,CAAC3I,KAAK,GAAG,KAAI,CAACgB,OAAO,CAACqE,kBAAkB,CAAA;EAEzD,MAAA,OAAO,KAAI,CAACuD,qBAAqB,CAAC/E,QAAQ,EAAEgF,KAAK,CAAC,CAAA;OACnD,CAAA;EAED,IAAA,IAAMhF,QAAQ,GAAGoF,6BAA6B,CAACN,WAAW,CAAC,CAAA;MAE3D,IAAI9E,QAAQ,KAAKf,MAAM,EAAE;EACvB,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,IAAM9B,OAAO,GAAG;EACd0C,MAAAA,WAAW,EAAEgD,SAAS;EACtB/C,MAAAA,QAAQ,EAARA,QAAQ;EACRC,MAAAA,IAAI,EAAE,KAAA;OACP,CAAA;EACD,IAAA,KAAI,CAAC4C,eAAe,CAAC3C,QAAQ,EAAE7C,OAAO,CAAC,CAAA;EAEvC,IAAA,IAAMkI,SAAS,GAAGlE,MAAM,CAACmE,IAAI,CAAC,KAAI,CAAC3E,mBAAmB,CAAC,CAAC9F,MAAM,GAAG,CAAC,CAAA;EAElE,IAAA,IAAIwK,SAAS,EAAE;QACb,KAAI,CAACzE,4BAA4B,GAAG,YAAM;EACxC,QAAA,KAAI,CAACsE,aAAa,CAAClK,KAAK,EAAE;EAAEgK,UAAAA,KAAK,EAALA,KAAK;EAAElF,UAAAA,QAAQ,EAARA,QAAAA;EAAS,SAAC,CAAC,CAAA;SAC/C,CAAA;EACH,KAAA;KACD,CAAA;EAAA,EAAA,IAAA,CAEDyF,QAAQ,GAAG,UAAC1F,WAAmB,EAAE1C,OAAsC,EAAK;EAC1E,IAAA,KAAI,CAACwF,eAAe,CAAC,KAAI,CAACC,YAAY,EAAE;EACtC/C,MAAAA,WAAW,EAAXA,WAAW;EACXC,MAAAA,QAAQ,EAAE3C,OAAO,IAAPA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,OAAO,CAAE2C,QAAQ;EAC3BC,MAAAA,IAAI,EAAE,KAAA;EACR,KAAC,CAAC,CAAA;KACH,CAAA;EAAA,EAAA,IAAA,CAEDyF,YAAY,GAAG,YAAA;EAAA,IAAA,IAAA,qBAAA,CAAA;EAAA,IAAA,OACb,CAAC,CAAA,CAAA,qBAAA,GAAA,KAAI,CAACpC,eAAe,EAAE,CAAC,KAAI,CAACjG,OAAO,CAACX,KAAK,GAAG,CAAC,CAAC,KAA9C,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAgDF,GAAG,KAClD,KAAI,CAACa,OAAO,CAACmE,YAAY,IAAI,KAAI,CAACnE,OAAO,CAACoE,UAAU,CAAA;EAAA,GAAA,CAAA;EAAA,EAAA,IAAA,CAEhDoB,eAAe,GAAG,UACxB1D,MAAc,EAUX,KAAA,EAAA;MAAA,IARDY,WAAW,SAAXA,WAAW;EACXC,MAAAA,QAAQ,SAARA,QAAQ;EACRC,MAAAA,IAAI,SAAJA,IAAI,CAAA;EAON,IAAA,KAAI,CAAC5C,OAAO,CAACsI,UAAU,CAACxG,MAAM,EAAE;EAAEa,MAAAA,QAAQ,EAARA,QAAQ;EAAEC,MAAAA,IAAI,EAAJA,IAAI;EAAEF,MAAAA,WAAW,EAAXA,WAAAA;OAAa,EAAE,KAAI,CAAC,CAAA;KACvE,CAAA;IAAA,IAED6F,CAAAA,OAAO,GAAG,YAAM;EACd,IAAA,KAAI,CAAClF,qBAAqB,GAAG,EAAE,CAAA;MAC/B,KAAI,CAACuB,MAAM,EAAE,CAAA;KACd,CAAA;EAtaC,EAAA,IAAI,CAACb,UAAU,CAAC/G,KAAI,CAAC,CAAA;EACrB,EAAA,IAAI,CAAC2I,UAAU,GAAG,IAAI,CAAC3F,OAAO,CAACyE,WAAW,CAAA;EAC1C,EAAA,IAAI,CAACgB,YAAY,GAAG,IAAI,CAACzF,OAAO,CAACkE,aAAa,CAAA;IAE9C,IAAI,CAAC0B,cAAc,EAAE,CAAA;EACvB,EAAC;EAoaH,IAAM4C,uBAAuB,GAAG,SAA1BA,uBAAuB,CAC3BC,GAAW,EACXC,IAAY,EACZC,eAAsC,EACtC1E,KAAa,EACV;IACH,OAAOwE,GAAG,IAAIC,IAAI,EAAE;MAClB,IAAME,MAAM,GAAI,CAACH,GAAG,GAAGC,IAAI,IAAI,CAAC,GAAI,CAAC,CAAA;EACrC,IAAA,IAAMG,YAAY,GAAGF,eAAe,CAACC,MAAM,CAAC,CAAA;MAE5C,IAAIC,YAAY,GAAG5E,KAAK,EAAE;QACxBwE,GAAG,GAAGG,MAAM,GAAG,CAAC,CAAA;EAClB,KAAC,MAAM,IAAIC,YAAY,GAAG5E,KAAK,EAAE;QAC/ByE,IAAI,GAAGE,MAAM,GAAG,CAAC,CAAA;EACnB,KAAC,MAAM;EACL,MAAA,OAAOA,MAAM,CAAA;EACf,KAAA;EACF,GAAA;IAEA,IAAIH,GAAG,GAAG,CAAC,EAAE;MACX,OAAOA,GAAG,GAAG,CAAC,CAAA;EAChB,GAAC,MAAM;EACL,IAAA,OAAO,CAAC,CAAA;EACV,GAAA;EACF,CAAC,CAAA;EAED,SAAS7C,cAAc,CAQpB,KAAA,EAAA;IAAA,IAPDM,YAAY,SAAZA,YAAY;EACZK,IAAAA,SAAS,SAATA,SAAS;EACTd,IAAAA,YAAY,SAAZA,YAAY,CAAA;EAMZ,EAAA,IAAMpG,KAAK,GAAG6G,YAAY,CAACxI,MAAM,GAAG,CAAC,CAAA;EACrC,EAAA,IAAMoL,SAAS,GAAG,SAAZA,SAAS,CAAIjL,KAAa,EAAA;EAAA,IAAA,OAAKqI,YAAY,CAACrI,KAAK,CAAC,CAAEmB,KAAK,CAAA;EAAA,GAAA,CAAA;IAE/D,IAAMC,UAAU,GAAGuJ,uBAAuB,CAAC,CAAC,EAAEnJ,KAAK,EAAEyJ,SAAS,EAAErD,YAAY,CAAC,CAAA;IAC7E,IAAIrG,QAAQ,GAAGH,UAAU,CAAA;EAEzB,EAAA,OACEG,QAAQ,GAAGC,KAAK,IAChB6G,YAAY,CAAC9G,QAAQ,CAAC,CAAED,GAAG,GAAGsG,YAAY,GAAGc,SAAS,EACtD;EACAnH,IAAAA,QAAQ,EAAE,CAAA;EACZ,GAAA;IAEA,OAAO;EAAEH,IAAAA,UAAU,EAAVA,UAAU;EAAEG,IAAAA,QAAQ,EAARA,QAAAA;KAAU,CAAA;EACjC;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -8,5 +8,5 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @license MIT
|
|
10
10
|
*/
|
|
11
|
-
!function(e,
|
|
11
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).VirtualCore={})}(this,(function(e){"use strict";function n(){return n=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])}return e},n.apply(this,arguments)}function t(e,n,t){var o,r=[];return function(){var i;t.key&&null!=t.debug&&t.debug()&&(i=Date.now());var s,l=e();if(!(l.length!==r.length||l.some((function(e,n){return r[n]!==e}))))return o;if(r=l,t.key&&null!=t.debug&&t.debug()&&(s=Date.now()),o=n.apply(void 0,l),null==t||null==t.onChange||t.onChange(o),t.key&&null!=t.debug&&t.debug()){var a=Math.round(100*(Date.now()-i))/100,u=Math.round(100*(Date.now()-s))/100,c=u/16,d=function(e,n){for(e=String(e);e.length<n;)e=" "+e;return e};console.info("%c⏱ "+d(u,5)+" /"+d(a,5)+" ms","\n font-size: .6rem;\n font-weight: bold;\n color: hsl("+Math.max(0,Math.min(120-120*c,120))+"deg 100% 31%);",null==t?void 0:t.key)}return o}}var o=function(e){return e},r=function(e){for(var n=Math.max(e.startIndex-e.overscan,0),t=Math.min(e.endIndex+e.overscan,e.count-1),o=[],r=n;r<=t;r++)o.push(r);return o},i={element:["scrollLeft","scrollTop"],window:["scrollX","scrollY"]},s=function(e){return function(n,t){if(n.scrollElement){var o=i[e][0],r=i[e][1],s=n.scrollElement[o],l=n.scrollElement[r],a=function(){var e=n.scrollElement[n.options.horizontal?o:r];t(Math.max(0,e-n.options.scrollMargin))};a();var u=function(e){var t=e.currentTarget,i=t[o],u=t[r];(n.options.horizontal?s-i:l-u)&&a(),s=i,l=u};return n.scrollElement.addEventListener("scroll",u,{capture:!1,passive:!0}),function(){n.scrollElement.removeEventListener("scroll",u)}}}},l=s("element"),a=s("window"),u=function(e,n){return Math.round(e.getBoundingClientRect()[n.options.horizontal?"width":"height"])};e.Virtualizer=function(e){var i,s=this;this.unsubs=[],this.scrollElement=null,this.isScrolling=!1,this.isScrollingTimeoutId=null,this.measurementsCache=[],this.itemMeasurementsCache={},this.pendingMeasuredCacheIndexes=[],this.scrollAdjustments=0,this.measureElementCache={},this.pendingScrollToIndexCallback=null,this.getResizeObserver=(i=null,function(){return i||("undefined"!=typeof ResizeObserver?i=new ResizeObserver((function(e){e.forEach((function(e){s._measureElement(e.target,!1)}))})):null)}),this.range={startIndex:0,endIndex:0},this.setOptions=function(e){Object.entries(e).forEach((function(n){var t=n[0];void 0===n[1]&&delete e[t]})),s.options=n({debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:o,rangeExtractor:r,onChange:function(){},measureElement:u,initialRect:{width:0,height:0},scrollMargin:0,scrollingDelay:150,indexAttribute:"data-index"},e)},this.notify=function(){null==s.options.onChange||s.options.onChange(s)},this.cleanup=function(){s.unsubs.filter(Boolean).forEach((function(e){return e()})),s.unsubs=[],s.scrollElement=null},this._didMount=function(){var e=s.getResizeObserver();return Object.values(s.measureElementCache).forEach((function(n){return null==e?void 0:e.observe(n)})),function(){null==e||e.disconnect(),s.cleanup()}},this._willUpdate=function(){null==s.pendingScrollToIndexCallback||s.pendingScrollToIndexCallback();var e=s.options.getScrollElement();s.scrollElement!==e?(s.cleanup(),s.scrollElement=e,s._scrollToOffset(s.scrollOffset,{adjustments:void 0,behavior:void 0,sync:!0}),s.unsubs.push(s.options.observeElementRect(s,(function(e){s.scrollRect=e,s.calculateRange()}))),s.unsubs.push(s.options.observeElementOffset(s,(function(e){null!==s.isScrollingTimeoutId&&(clearTimeout(s.isScrollingTimeoutId),s.isScrollingTimeoutId=null);var n=function(e){s.isScrolling!==e&&(s.isScrolling=e,s.notify())};s.scrollAdjustments=0,s.scrollOffset!==e&&(s.scrollOffset=e,n(!0)),s.calculateRange(),s.isScrollingTimeoutId=setTimeout((function(){s.isScrollingTimeoutId=null,n(!1)}),s.options.scrollingDelay)})))):s.isScrolling||s.calculateRange()},this.getSize=function(){return s.scrollRect[s.options.horizontal?"width":"height"]},this.getMeasurements=t((function(){return[s.options.count,s.options.paddingStart,s.options.getItemKey,s.itemMeasurementsCache]}),(function(e,n,t,o){var r=s.pendingMeasuredCacheIndexes.length>0?Math.min.apply(Math,s.pendingMeasuredCacheIndexes):0;s.pendingMeasuredCacheIndexes=[];for(var i=s.measurementsCache.slice(0,r),l=r;l<e;l++){var a=t(l),u=o[a],c=i[l-1]?i[l-1].end:n,d="number"==typeof u?u:s.options.estimateSize(l),f=c+d;i[l]={index:l,start:c,size:d,end:f,key:a}}return s.measurementsCache=i,i}),{key:!1,debug:function(){return s.options.debug}}),this.calculateRange=t((function(){return[s.getMeasurements(),s.getSize(),s.scrollOffset]}),(function(e,n,t){var o=function(e){var n=e.measurements,t=e.outerSize,o=e.scrollOffset,r=n.length-1,i=function(e,n,t,o){for(;e<=n;){var r=(e+n)/2|0,i=t(r);if(i<o)e=r+1;else{if(!(i>o))return r;n=r-1}}return e>0?e-1:0}(0,r,(function(e){return n[e].start}),o),s=i;for(;s<r&&n[s].end<o+t;)s++;return{startIndex:i,endIndex:s}}({measurements:e,outerSize:n,scrollOffset:t});return o.startIndex===s.range.startIndex&&o.endIndex===s.range.endIndex||(s.range=o,s.notify()),s.range}),{key:!1,debug:function(){return s.options.debug}}),this.getIndexes=t((function(){return[s.options.rangeExtractor,s.range,s.options.overscan,s.options.count]}),(function(e,t,o,r){return e(n({},t,{overscan:o,count:r}))}),{key:!1,debug:function(){return s.options.debug}}),this.indexFromElement=function(e){var n=s.options.indexAttribute,t=e.getAttribute(n);return t?parseInt(t,10):(console.warn("Missing attribute name '"+n+"={index}' on measured element."),-1)},this._measureElement=function(e,t){var o,r=s.indexFromElement(e),i=s.measurementsCache[r];if(i){var l=s.measureElementCache[i.key],a=s.getResizeObserver();if(e.isConnected){l&&l===e||(l&&(null==a||a.unobserve(l)),s.measureElementCache[i.key]=e,null==a||a.observe(e));var u,c=s.options.measureElement(e,s),d=c-(null!=(o=s.itemMeasurementsCache[i.key])?o:i.size);if(0!==d)i.start<s.scrollOffset&&s.isScrolling&&s._scrollToOffset(s.scrollOffset,{adjustments:s.scrollAdjustments+=d,behavior:void 0,sync:!1}),s.pendingMeasuredCacheIndexes.push(r),s.itemMeasurementsCache=n({},s.itemMeasurementsCache,((u={})[i.key]=c,u)),s.notify()}else l&&(null==a||a.unobserve(l),delete s.measureElementCache[i.key])}},this.measureElement=function(e){e&&s._measureElement(e,!0)},this.getVirtualItems=t((function(){return[s.getIndexes(),s.getMeasurements()]}),(function(e,n){for(var t=[],o=0,r=e.length;o<r;o++){var i=n[e[o]];t.push(i)}return t}),{key:!1,debug:function(){return s.options.debug}}),this.getOffsetForAlignment=function(e,n){var t=s.scrollOffset,o=s.getSize();return"auto"===n&&(n=e<=t?"start":e>=t+o?"end":"start"),"start"===n?e:"end"===n?e-o:"center"===n?e-o/2:e},this.scrollToOffset=function(e,n){var t=void 0===n?{}:n,o=t.align,r=void 0===o?"start":o,i={adjustments:void 0,behavior:t.behavior,sync:!1};s._scrollToOffset(s.getOffsetForAlignment(e,r),i)},this.scrollToIndex=function(e,n){var t=void 0===n?{}:n,o=t.align,r=void 0===o?"auto":o,i=t.behavior;s.pendingScrollToIndexCallback=null;var l=s.scrollOffset,a=s.getSize(),u=s.options.count,c=s.getMeasurements()[Math.max(0,Math.min(e,u-1))];if(!c)throw new Error("VirtualItem not found for index = "+e);if("auto"===r)if(c.end>=l+a-s.options.scrollPaddingEnd)r="end";else{if(!(c.start<=l+s.options.scrollPaddingStart))return;r="start"}var d=function(e){var n="end"===r?e.end+s.options.scrollPaddingEnd:e.start-s.options.scrollPaddingStart;return s.getOffsetForAlignment(n,r)}(c);if(d!==l){var f={adjustments:void 0,behavior:i,sync:!1};s._scrollToOffset(d,f),Object.keys(s.measureElementCache).length>0&&(s.pendingScrollToIndexCallback=function(){s.scrollToIndex(e,{align:r,behavior:i})})}},this.scrollBy=function(e,n){s._scrollToOffset(s.scrollOffset,{adjustments:e,behavior:null==n?void 0:n.behavior,sync:!1})},this.getTotalSize=function(){var e;return((null==(e=s.getMeasurements()[s.options.count-1])?void 0:e.end)||s.options.paddingStart)+s.options.paddingEnd},this._scrollToOffset=function(e,n){var t=n.adjustments,o=n.behavior,r=n.sync;s.options.scrollToFn(e,{behavior:o,sync:r,adjustments:t},s)},this.measure=function(){s.itemMeasurementsCache={},s.notify()},this.setOptions(e),this.scrollRect=this.options.initialRect,this.scrollOffset=this.options.initialOffset,this.calculateRange()},e.defaultKeyExtractor=o,e.defaultRangeExtractor=r,e.elementScroll=function(e,n,t){var o,r,i=n.adjustments,s=n.behavior,l=(n.sync?e:e+t.options.scrollMargin)+(null!=i?i:0);null==(o=t.scrollElement)||null==o.scrollTo||o.scrollTo(((r={})[t.options.horizontal?"left":"top"]=l,r.behavior=s,r))},e.measureElement=u,e.memo=t,e.observeElementOffset=l,e.observeElementRect=function(e,n){var t=new ResizeObserver((function(e){var t,o;n({width:null==(t=e[0])?void 0:t.contentRect.width,height:null==(o=e[0])?void 0:o.contentRect.height})}));if(e.scrollElement)return n(e.scrollElement.getBoundingClientRect()),t.observe(e.scrollElement),function(){t.unobserve(e.scrollElement)}},e.observeWindowOffset=a,e.observeWindowRect=function(e,n){var t=function(e,n){var t={height:-1,width:-1};return function(o){(e.options.horizontal?o.width!==t.width:o.height!==t.height)&&n(o),t=o}}(e,n),o=function(){return t({width:e.scrollElement.innerWidth,height:e.scrollElement.innerHeight})};if(e.scrollElement)return o(),e.scrollElement.addEventListener("resize",o,{capture:!1,passive:!0}),function(){e.scrollElement.removeEventListener("resize",o)}},e.windowScroll=function(e,n,t){var o,r,i=n.adjustments,s=n.behavior,l=(n.sync?e:e+t.options.scrollMargin)+(null!=i?i:0);null==(o=t.scrollElement)||null==o.scrollTo||o.scrollTo(((r={})[t.options.horizontal?"left":"top"]=l,r.behavior=s,r))},Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
12
12
|
//# sourceMappingURL=index.production.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.production.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: any\n debug?: () => any\n onChange?: (result: TResult) => void\n },\n): () => TResult {\n let deps: any[] = []\n let result: TResult | undefined\n\n return () => {\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 opts?.onChange?.(result)\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 return result!\n }\n}\n","import { memo } from './utils'\n\nexport * from './utils'\n\n//\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}\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\nconst memoRectCallback = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n let prev: Rect = { height: -1, width: -1 }\n\n return (rect: Rect) => {\n if (\n instance.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n cb(rect)\n }\n\n prev = rect\n }\n}\n\nexport const observeElementRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const observer = new ResizeObserver((entries) => {\n cb({\n width: entries[0]?.contentRect.width as number,\n height: entries[0]?.contentRect.height as number,\n })\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe(instance.scrollElement)\n\n return () => {\n observer.unobserve(instance.scrollElement)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const memoizedCallback = memoRectCallback(instance, cb)\n const onResize = () =>\n memoizedCallback({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n onResize()\n\n instance.scrollElement.addEventListener('resize', onResize, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('resize', onResize)\n }\n}\n\ntype ObserverMode = 'element' | 'window'\n\nconst scrollProps = {\n element: ['scrollLeft', 'scrollTop'],\n window: ['scrollX', 'scrollY'],\n} as const\n\nconst createOffsetObserver = (mode: ObserverMode) => {\n return (instance: Virtualizer<any, any>, cb: (offset: number) => void) => {\n if (!instance.scrollElement) {\n return\n }\n\n const propX = scrollProps[mode][0]\n const propY = scrollProps[mode][1]\n\n let prevX: number = instance.scrollElement[propX]\n let prevY: number = instance.scrollElement[propY]\n\n const scroll = () => {\n const offset =\n instance.scrollElement[instance.options.horizontal ? propX : propY]\n\n cb(Math.max(0, offset - instance.options.scrollMargin))\n }\n\n scroll()\n\n const onScroll = (e: Event) => {\n const target = e.currentTarget as HTMLElement & Window\n const scrollX = target[propX]\n const scrollY = target[propY]\n\n if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {\n scroll()\n }\n\n prevX = scrollX\n prevY = scrollY\n }\n\n instance.scrollElement.addEventListener('scroll', onScroll, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll)\n }\n }\n}\n\nexport const observeElementOffset = createOffsetObserver('element')\nexport const observeWindowOffset = createOffsetObserver('window')\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\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,\n behavior,\n sync,\n }: { adjustments?: number; behavior?: ScrollBehavior; sync: boolean },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset =\n (sync ? offset : offset + instance.options.scrollMargin) +\n (adjustments ?? 0)\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,\n behavior,\n sync,\n }: { adjustments?: number; behavior?: ScrollBehavior; sync: boolean },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset =\n (sync ? offset : offset + instance.options.scrollMargin) +\n (adjustments ?? 0)\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; sync: boolean },\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 el: TItemElement,\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 indexAttribute?: string\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 measurementsCache: VirtualItem[] = []\n private itemMeasurementsCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n private scrollOffset: number\n private scrollAdjustments: number = 0\n private measureElementCache: Record<Key, TItemElement> = {}\n private pendingScrollToIndexCallback: (() => void) | null = null\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\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, false)\n })\n }))\n } else {\n return null\n }\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\n this.calculateRange()\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 ...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 const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n this.pendingScrollToIndexCallback?.()\n\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 sync: true,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.calculateRange()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n const onIsScrollingChange = (isScrolling: boolean) => {\n if (this.isScrolling !== isScrolling) {\n this.isScrolling = isScrolling\n this.notify()\n }\n }\n\n this.scrollAdjustments = 0\n\n if (this.scrollOffset !== offset) {\n this.scrollOffset = offset\n onIsScrollingChange(true)\n }\n\n this.calculateRange()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n onIsScrollingChange(false)\n }, this.options.scrollingDelay)\n }),\n )\n } else if (!this.isScrolling) {\n this.calculateRange()\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.getItemKey,\n this.itemMeasurementsCache,\n ],\n (count, paddingStart, getItemKey, measurementsCache) => {\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 const measuredSize = measurementsCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\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 const range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n })\n if (\n range.startIndex !== this.range.startIndex ||\n range.endIndex !== this.range.endIndex\n ) {\n this.range = range\n this.notify()\n }\n return this.range\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.range,\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count: 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 = (node: TItemElement, _sync: boolean) => {\n const index = this.indexFromElement(node)\n\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const prevNode = this.measureElementCache[item.key]\n\n const ro = this.getResizeObserver()\n\n if (!node.isConnected) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (!prevNode || prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n this.measureElementCache[item.key] = node\n ro?.observe(node)\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemMeasurementsCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset && this.isScrolling) {\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 sync: false,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemMeasurementsCache = {\n ...this.itemMeasurementsCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\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 scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n const offset = this.scrollOffset\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= offset) {\n align = 'start'\n } else if (toOffset >= offset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n const options = {\n adjustments: undefined,\n behavior,\n sync: false,\n }\n if (align === 'start') {\n this._scrollToOffset(toOffset, options)\n } else if (align === 'end') {\n this._scrollToOffset(toOffset - size, options)\n } else if (align === 'center') {\n this._scrollToOffset(toOffset - size / 2, options)\n }\n }\n\n scrollToIndex = (\n index: number,\n { align = 'auto', ...rest }: ScrollToIndexOptions = {},\n ) => {\n this.pendingScrollToIndexCallback = null\n\n const measurements = this.getMeasurements()\n const offset = this.scrollOffset\n const size = this.getSize()\n const { count } = this.options\n\n const measurement = measurements[Math.max(0, Math.min(index, count - 1))]\n\n if (!measurement) {\n return\n }\n\n if (align === 'auto') {\n if (measurement.end >= offset + size - this.options.scrollPaddingEnd) {\n align = 'end'\n } else if (\n measurement.start <=\n offset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return\n }\n }\n\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n this.scrollToOffset(toOffset, { align, ...rest })\n\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic) {\n const didSeen = () =>\n typeof this.itemMeasurementsCache[this.options.getItemKey(index)] ===\n 'number'\n\n if (!didSeen()) {\n this.pendingScrollToIndexCallback = () => {\n if (didSeen()) {\n this.pendingScrollToIndexCallback = null\n this.scrollToIndex(index, { align, ...rest })\n }\n }\n }\n }\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) + this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n sync,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n sync: boolean\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, sync, adjustments }, this)\n }\n\n measure = () => {\n this.itemMeasurementsCache = {}\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","result","deps","depTime","key","debug","Date","now","newDeps","length","some","dep","index","resultTime","onChange","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","defaultKeyExtractor","defaultRangeExtractor","range","start","startIndex","overscan","end","endIndex","count","arr","i","push","scrollProps","element","window","createOffsetObserver","mode","instance","cb","scrollElement","propX","propY","prevX","prevY","scroll","offset","options","horizontal","scrollMargin","onScroll","e","target","currentTarget","scrollX","scrollY","addEventListener","capture","passive","removeEventListener","observeElementOffset","observeWindowOffset","measureElement","getBoundingClientRect","constructor","_this","this","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemMeasurementsCache","pendingMeasuredCacheIndexes","scrollAdjustments","measureElementCache","pendingScrollToIndexCallback","getResizeObserver","_ro","ResizeObserver","entries","forEach","entry","_measureElement","setOptions","Object","_ref3","value","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","initialRect","width","height","scrollingDelay","indexAttribute","notify","_this$options$onChang","_this$options","call","cleanup","filter","Boolean","d","_didMount","ro","values","node","observe","disconnect","_willUpdate","_this$pendingScrollTo","getScrollElement","_scrollToOffset","scrollOffset","adjustments","undefined","behavior","sync","observeElementRect","rect","scrollRect","calculateRange","clearTimeout","onIsScrollingChange","setTimeout","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","process","outerSize","_ref5","low","high","getCurrentValue","middle","currentValue","findNearestBinarySearch","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","parseInt","warn","_sync","item","prevNode","isConnected","unobserve","measuredItemSize","delta","getVirtualItems","indexes","virtualItems","k","len","measurement","scrollToOffset","toOffset","_temp","align","scrollToIndex","_temp2","rest","keys","didSeen","getTotalSize","_this$getMeasurements","_ref4","scrollToFn","measure","_ref2","_instance$scrollEleme2","scrollTo","observer","_entries$","_entries$2","contentRect","memoizedCallback","prev","memoRectCallback","onResize","innerWidth","innerHeight","_ref","_instance$scrollEleme"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.production.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: any\n debug?: () => any\n onChange?: (result: TResult) => void\n },\n): () => TResult {\n let deps: any[] = []\n let result: TResult | undefined\n\n return () => {\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 opts?.onChange?.(result)\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 return result!\n }\n}\n","import { memo } from './utils'\n\nexport * from './utils'\n\n//\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}\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\nconst memoRectCallback = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n let prev: Rect = { height: -1, width: -1 }\n\n return (rect: Rect) => {\n if (\n instance.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n cb(rect)\n }\n\n prev = rect\n }\n}\n\nexport const observeElementRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const observer = new ResizeObserver((entries) => {\n cb({\n width: entries[0]?.contentRect.width as number,\n height: entries[0]?.contentRect.height as number,\n })\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe(instance.scrollElement)\n\n return () => {\n observer.unobserve(instance.scrollElement)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const memoizedCallback = memoRectCallback(instance, cb)\n const onResize = () =>\n memoizedCallback({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n onResize()\n\n instance.scrollElement.addEventListener('resize', onResize, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('resize', onResize)\n }\n}\n\ntype ObserverMode = 'element' | 'window'\n\nconst scrollProps = {\n element: ['scrollLeft', 'scrollTop'],\n window: ['scrollX', 'scrollY'],\n} as const\n\nconst createOffsetObserver = (mode: ObserverMode) => {\n return (instance: Virtualizer<any, any>, cb: (offset: number) => void) => {\n if (!instance.scrollElement) {\n return\n }\n\n const propX = scrollProps[mode][0]\n const propY = scrollProps[mode][1]\n\n let prevX: number = instance.scrollElement[propX]\n let prevY: number = instance.scrollElement[propY]\n\n const scroll = () => {\n const offset =\n instance.scrollElement[instance.options.horizontal ? propX : propY]\n\n cb(Math.max(0, offset - instance.options.scrollMargin))\n }\n\n scroll()\n\n const onScroll = (e: Event) => {\n const target = e.currentTarget as HTMLElement & Window\n const scrollX = target[propX]\n const scrollY = target[propY]\n\n if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {\n scroll()\n }\n\n prevX = scrollX\n prevY = scrollY\n }\n\n instance.scrollElement.addEventListener('scroll', onScroll, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll)\n }\n }\n}\n\nexport const observeElementOffset = createOffsetObserver('element')\nexport const observeWindowOffset = createOffsetObserver('window')\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\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,\n behavior,\n sync,\n }: { adjustments?: number; behavior?: ScrollBehavior; sync: boolean },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset =\n (sync ? offset : offset + instance.options.scrollMargin) +\n (adjustments ?? 0)\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,\n behavior,\n sync,\n }: { adjustments?: number; behavior?: ScrollBehavior; sync: boolean },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset =\n (sync ? offset : offset + instance.options.scrollMargin) +\n (adjustments ?? 0)\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; sync: boolean },\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 el: TItemElement,\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 indexAttribute?: string\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 measurementsCache: VirtualItem[] = []\n private itemMeasurementsCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n private scrollAdjustments: number = 0\n private measureElementCache: Record<Key, TItemElement> = {}\n private pendingScrollToIndexCallback: (() => void) | null = null\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\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, false)\n })\n }))\n } else {\n return null\n }\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\n this.calculateRange()\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 ...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 const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n this.pendingScrollToIndexCallback?.()\n\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 sync: true,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.calculateRange()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n const onIsScrollingChange = (isScrolling: boolean) => {\n if (this.isScrolling !== isScrolling) {\n this.isScrolling = isScrolling\n this.notify()\n }\n }\n\n this.scrollAdjustments = 0\n\n if (this.scrollOffset !== offset) {\n this.scrollOffset = offset\n onIsScrollingChange(true)\n }\n\n this.calculateRange()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n onIsScrollingChange(false)\n }, this.options.scrollingDelay)\n }),\n )\n } else if (!this.isScrolling) {\n this.calculateRange()\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.getItemKey,\n this.itemMeasurementsCache,\n ],\n (count, paddingStart, getItemKey, measurementsCache) => {\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 const measuredSize = measurementsCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\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 const range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n })\n if (\n range.startIndex !== this.range.startIndex ||\n range.endIndex !== this.range.endIndex\n ) {\n this.range = range\n this.notify()\n }\n return this.range\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.range,\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count: 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 = (node: TItemElement, _sync: boolean) => {\n const index = this.indexFromElement(node)\n\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const prevNode = this.measureElementCache[item.key]\n\n const ro = this.getResizeObserver()\n\n if (!node.isConnected) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (!prevNode || prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n this.measureElementCache[item.key] = node\n ro?.observe(node)\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemMeasurementsCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset && this.isScrolling) {\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 sync: false,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemMeasurementsCache = {\n ...this.itemMeasurementsCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\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 getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const offset = this.scrollOffset\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= offset) {\n align = 'start'\n } else if (toOffset >= offset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n return toOffset\n } else if (align === 'end') {\n return toOffset - size\n } else if (align === 'center') {\n return toOffset - size / 2\n }\n return toOffset\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n const options = {\n adjustments: undefined,\n behavior,\n sync: false,\n }\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), options)\n }\n\n scrollToIndex = (\n index: number,\n { align = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n this.pendingScrollToIndexCallback = null\n\n const offset = this.scrollOffset\n const size = this.getSize()\n const { count } = this.options\n\n const measurements = this.getMeasurements()\n const measurement = measurements[Math.max(0, Math.min(index, count - 1))]\n\n if (!measurement) {\n throw new Error(`VirtualItem not found for index = ${index}`)\n }\n\n if (align === 'auto') {\n if (measurement.end >= offset + size - this.options.scrollPaddingEnd) {\n align = 'end'\n } else if (\n measurement.start <=\n offset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return\n }\n }\n\n const getOffsetForIndexAndAlignment = (measurement: VirtualItem) => {\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)\n }\n\n const toOffset = getOffsetForIndexAndAlignment(measurement)\n\n if (toOffset === offset) {\n return\n }\n\n const options = {\n adjustments: undefined,\n behavior,\n sync: false,\n }\n this._scrollToOffset(toOffset, options)\n\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic) {\n this.pendingScrollToIndexCallback = () => {\n this.scrollToIndex(index, { align, behavior })\n }\n }\n }\n\n scrollBy = (adjustments: number, options?: { behavior: ScrollBehavior }) => {\n this._scrollToOffset(this.scrollOffset, {\n adjustments,\n behavior: options?.behavior,\n sync: false,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) + this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n sync,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n sync: boolean\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, sync, adjustments }, this)\n }\n\n measure = () => {\n this.itemMeasurementsCache = {}\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","result","deps","depTime","key","debug","Date","now","resultTime","newDeps","length","some","dep","index","onChange","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","defaultKeyExtractor","defaultRangeExtractor","range","start","startIndex","overscan","end","endIndex","count","arr","i","push","scrollProps","element","window","createOffsetObserver","mode","instance","cb","scrollElement","propX","propY","prevX","prevY","scroll","offset","options","horizontal","scrollMargin","onScroll","e","target","currentTarget","scrollX","scrollY","addEventListener","capture","passive","removeEventListener","observeElementOffset","observeWindowOffset","measureElement","getBoundingClientRect","_ro","_this","this","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemMeasurementsCache","pendingMeasuredCacheIndexes","scrollAdjustments","measureElementCache","pendingScrollToIndexCallback","getResizeObserver","ResizeObserver","entries","forEach","entry","_measureElement","setOptions","Object","_ref3","_extends","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","initialRect","width","height","scrollingDelay","indexAttribute","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","observe","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","adjustments","undefined","behavior","sync","observeElementRect","rect","scrollRect","calculateRange","clearTimeout","onIsScrollingChange","setTimeout","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","process","outerSize","_ref7","low","high","getCurrentValue","value","middle","currentValue","findNearestBinarySearch","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","parseInt","warn","_sync","_this$itemMeasurement","item","prevNode","isConnected","unobserve","_extends2","measuredItemSize","delta","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","toOffset","align","scrollToOffset","_temp","_ref4","_ref4$align","scrollToIndex","_temp2","_ref5","_ref5$align","Error","getOffsetForIndexAndAlignment","keys","scrollBy","getTotalSize","_this$getMeasurements","_ref6","scrollToFn","measure","_instance$scrollEleme3","_instance$scrollEleme4","scrollTo","observer","_entries$","_entries$2","contentRect","memoizedCallback","prev","memoRectCallback","onResize","innerWidth","innerHeight","_instance$scrollEleme","_instance$scrollEleme2"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/virtual-core",
|
|
3
3
|
"author": "Tanner Linsley",
|
|
4
|
-
"version": "3.0.0-beta.
|
|
4
|
+
"version": "3.0.0-beta.32",
|
|
5
5
|
"description": "Headless UI for virtualizing scrollable elements in TS/JS + Frameworks",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"homepage": "https://github.com/tanstack/virtual#readme",
|