@tanstack/virtual-core 3.0.0-beta.28 → 3.0.0-beta.29
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/index.esm.js +3 -3
- package/build/lib/index.esm.js.map +1 -1
- package/build/lib/index.js +3 -3
- package/build/lib/index.js.map +1 -1
- package/build/lib/index.mjs +3 -3
- package/build/lib/index.mjs.map +1 -1
- package/build/umd/index.development.js +3 -3
- 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 +4 -2
package/build/lib/index.esm.js
CHANGED
|
@@ -211,10 +211,10 @@ class Virtualizer {
|
|
|
211
211
|
this.scrollElement = null;
|
|
212
212
|
};
|
|
213
213
|
this._didMount = () => {
|
|
214
|
+
const ro = this.getResizeObserver();
|
|
215
|
+
Object.values(this.measureElementCache).forEach(node => ro == null ? void 0 : ro.observe(node));
|
|
214
216
|
return () => {
|
|
215
|
-
|
|
216
|
-
(_this$getResizeObserv = this.getResizeObserver()) == null ? void 0 : _this$getResizeObserv.disconnect();
|
|
217
|
-
this.measureElementCache = {};
|
|
217
|
+
ro == null ? void 0 : ro.disconnect();
|
|
218
218
|
this.cleanup();
|
|
219
219
|
};
|
|
220
220
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../src/index.ts"],"sourcesContent":["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 return () => {\n this.getResizeObserver()?.disconnect()\n this.measureElementCache = {}\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 if (this.scrollOffset !== offset) {\n this.scrollOffset = offset\n this.isScrolling = true\n this.scrollAdjustments = 0\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n\n this.notify()\n }, this.options.scrollingDelay)\n } else {\n this.isScrolling = false\n this.scrollAdjustments = 0\n }\n\n this.calculateRange()\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":["defaultKeyExtractor","index","defaultRangeExtractor","range","start","Math","max","startIndex","overscan","end","min","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","round","windowScroll","adjustments","behavior","sync","toOffset","scrollTo","elementScroll","Virtualizer","constructor","opts","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemMeasurementsCache","pendingMeasuredCacheIndexes","scrollAdjustments","measureElementCache","pendingScrollToIndexCallback","getResizeObserver","_ro","forEach","entry","_measureElement","setOptions","Object","key","value","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","onChange","initialRect","scrollingDelay","indexAttribute","notify","cleanup","filter","Boolean","d","_didMount","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","scrollRect","calculateRange","clearTimeout","setTimeout","getSize","getMeasurements","memo","length","measurements","slice","measuredSize","size","estimateSize","process","env","NODE_ENV","outerSize","getIndexes","indexFromElement","node","attributeName","indexStr","getAttribute","console","warn","parseInt","_sync","item","prevNode","ro","isConnected","measuredItemSize","itemSize","delta","info","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.esm.js","sources":["../../src/index.ts"],"sourcesContent":["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 if (this.scrollOffset !== offset) {\n this.scrollOffset = offset\n this.isScrolling = true\n this.scrollAdjustments = 0\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n\n this.notify()\n }, this.options.scrollingDelay)\n } else {\n this.isScrolling = false\n this.scrollAdjustments = 0\n }\n\n this.calculateRange()\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":["defaultKeyExtractor","index","defaultRangeExtractor","range","start","Math","max","startIndex","overscan","end","min","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","round","windowScroll","adjustments","behavior","sync","toOffset","scrollTo","elementScroll","Virtualizer","constructor","opts","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemMeasurementsCache","pendingMeasuredCacheIndexes","scrollAdjustments","measureElementCache","pendingScrollToIndexCallback","getResizeObserver","_ro","forEach","entry","_measureElement","setOptions","Object","key","value","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","onChange","initialRect","scrollingDelay","indexAttribute","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","scrollRect","calculateRange","clearTimeout","setTimeout","getSize","getMeasurements","memo","length","measurements","slice","measuredSize","size","estimateSize","process","env","NODE_ENV","outerSize","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","console","warn","parseInt","_sync","item","prevNode","isConnected","measuredItemSize","itemSize","delta","info","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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"}
|
package/build/lib/index.js
CHANGED
|
@@ -214,10 +214,10 @@ class Virtualizer {
|
|
|
214
214
|
this.scrollElement = null;
|
|
215
215
|
};
|
|
216
216
|
this._didMount = () => {
|
|
217
|
+
const ro = this.getResizeObserver();
|
|
218
|
+
Object.values(this.measureElementCache).forEach(node => ro == null ? void 0 : ro.observe(node));
|
|
217
219
|
return () => {
|
|
218
|
-
|
|
219
|
-
(_this$getResizeObserv = this.getResizeObserver()) == null ? void 0 : _this$getResizeObserv.disconnect();
|
|
220
|
-
this.measureElementCache = {};
|
|
220
|
+
ro == null ? void 0 : ro.disconnect();
|
|
221
221
|
this.cleanup();
|
|
222
222
|
};
|
|
223
223
|
};
|
package/build/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["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 return () => {\n this.getResizeObserver()?.disconnect()\n this.measureElementCache = {}\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 if (this.scrollOffset !== offset) {\n this.scrollOffset = offset\n this.isScrolling = true\n this.scrollAdjustments = 0\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n\n this.notify()\n }, this.options.scrollingDelay)\n } else {\n this.isScrolling = false\n this.scrollAdjustments = 0\n }\n\n this.calculateRange()\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":["defaultKeyExtractor","index","defaultRangeExtractor","range","start","Math","max","startIndex","overscan","end","min","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","round","windowScroll","adjustments","behavior","sync","toOffset","scrollTo","elementScroll","Virtualizer","constructor","opts","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemMeasurementsCache","pendingMeasuredCacheIndexes","scrollAdjustments","measureElementCache","pendingScrollToIndexCallback","getResizeObserver","_ro","forEach","entry","_measureElement","setOptions","Object","key","value","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","onChange","initialRect","scrollingDelay","indexAttribute","notify","cleanup","filter","Boolean","d","_didMount","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","scrollRect","calculateRange","clearTimeout","setTimeout","getSize","getMeasurements","memo","length","measurements","slice","measuredSize","size","estimateSize","process","env","NODE_ENV","outerSize","getIndexes","indexFromElement","node","attributeName","indexStr","getAttribute","console","warn","parseInt","_sync","item","prevNode","ro","isConnected","measuredItemSize","itemSize","delta","info","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.js","sources":["../../src/index.ts"],"sourcesContent":["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 if (this.scrollOffset !== offset) {\n this.scrollOffset = offset\n this.isScrolling = true\n this.scrollAdjustments = 0\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n\n this.notify()\n }, this.options.scrollingDelay)\n } else {\n this.isScrolling = false\n this.scrollAdjustments = 0\n }\n\n this.calculateRange()\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":["defaultKeyExtractor","index","defaultRangeExtractor","range","start","Math","max","startIndex","overscan","end","min","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","round","windowScroll","adjustments","behavior","sync","toOffset","scrollTo","elementScroll","Virtualizer","constructor","opts","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemMeasurementsCache","pendingMeasuredCacheIndexes","scrollAdjustments","measureElementCache","pendingScrollToIndexCallback","getResizeObserver","_ro","forEach","entry","_measureElement","setOptions","Object","key","value","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","onChange","initialRect","scrollingDelay","indexAttribute","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","scrollRect","calculateRange","clearTimeout","setTimeout","getSize","getMeasurements","memo","length","measurements","slice","measuredSize","size","estimateSize","process","env","NODE_ENV","outerSize","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","console","warn","parseInt","_sync","item","prevNode","isConnected","measuredItemSize","itemSize","delta","info","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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"}
|
package/build/lib/index.mjs
CHANGED
|
@@ -211,10 +211,10 @@ class Virtualizer {
|
|
|
211
211
|
this.scrollElement = null;
|
|
212
212
|
};
|
|
213
213
|
this._didMount = () => {
|
|
214
|
+
const ro = this.getResizeObserver();
|
|
215
|
+
Object.values(this.measureElementCache).forEach(node => ro == null ? void 0 : ro.observe(node));
|
|
214
216
|
return () => {
|
|
215
|
-
|
|
216
|
-
(_this$getResizeObserv = this.getResizeObserver()) == null ? void 0 : _this$getResizeObserv.disconnect();
|
|
217
|
-
this.measureElementCache = {};
|
|
217
|
+
ro == null ? void 0 : ro.disconnect();
|
|
218
218
|
this.cleanup();
|
|
219
219
|
};
|
|
220
220
|
};
|
package/build/lib/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../src/index.ts"],"sourcesContent":["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 return () => {\n this.getResizeObserver()?.disconnect()\n this.measureElementCache = {}\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 if (this.scrollOffset !== offset) {\n this.scrollOffset = offset\n this.isScrolling = true\n this.scrollAdjustments = 0\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n\n this.notify()\n }, this.options.scrollingDelay)\n } else {\n this.isScrolling = false\n this.scrollAdjustments = 0\n }\n\n this.calculateRange()\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":["defaultKeyExtractor","index","defaultRangeExtractor","range","start","Math","max","startIndex","overscan","end","min","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","round","windowScroll","adjustments","behavior","sync","toOffset","scrollTo","elementScroll","Virtualizer","constructor","opts","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemMeasurementsCache","pendingMeasuredCacheIndexes","scrollAdjustments","measureElementCache","pendingScrollToIndexCallback","getResizeObserver","_ro","forEach","entry","_measureElement","setOptions","Object","key","value","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","onChange","initialRect","scrollingDelay","indexAttribute","notify","cleanup","filter","Boolean","d","_didMount","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","scrollRect","calculateRange","clearTimeout","setTimeout","getSize","getMeasurements","memo","length","measurements","slice","measuredSize","size","estimateSize","process","env","NODE_ENV","outerSize","getIndexes","indexFromElement","node","attributeName","indexStr","getAttribute","console","warn","parseInt","_sync","item","prevNode","ro","isConnected","measuredItemSize","itemSize","delta","info","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.mjs","sources":["../../src/index.ts"],"sourcesContent":["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 if (this.scrollOffset !== offset) {\n this.scrollOffset = offset\n this.isScrolling = true\n this.scrollAdjustments = 0\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n\n this.notify()\n }, this.options.scrollingDelay)\n } else {\n this.isScrolling = false\n this.scrollAdjustments = 0\n }\n\n this.calculateRange()\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":["defaultKeyExtractor","index","defaultRangeExtractor","range","start","Math","max","startIndex","overscan","end","min","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","round","windowScroll","adjustments","behavior","sync","toOffset","scrollTo","elementScroll","Virtualizer","constructor","opts","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemMeasurementsCache","pendingMeasuredCacheIndexes","scrollAdjustments","measureElementCache","pendingScrollToIndexCallback","getResizeObserver","_ro","forEach","entry","_measureElement","setOptions","Object","key","value","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","onChange","initialRect","scrollingDelay","indexAttribute","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","scrollRect","calculateRange","clearTimeout","setTimeout","getSize","getMeasurements","memo","length","measurements","slice","measuredSize","size","estimateSize","process","env","NODE_ENV","outerSize","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","console","warn","parseInt","_sync","item","prevNode","isConnected","measuredItemSize","itemSize","delta","info","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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"}
|
|
@@ -250,10 +250,10 @@
|
|
|
250
250
|
this.scrollElement = null;
|
|
251
251
|
};
|
|
252
252
|
this._didMount = () => {
|
|
253
|
+
const ro = this.getResizeObserver();
|
|
254
|
+
Object.values(this.measureElementCache).forEach(node => ro == null ? void 0 : ro.observe(node));
|
|
253
255
|
return () => {
|
|
254
|
-
|
|
255
|
-
(_this$getResizeObserv = this.getResizeObserver()) == null ? void 0 : _this$getResizeObserv.disconnect();
|
|
256
|
-
this.measureElementCache = {};
|
|
256
|
+
ro == null ? void 0 : ro.disconnect();
|
|
257
257
|
this.cleanup();
|
|
258
258
|
};
|
|
259
259
|
};
|
|
@@ -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 return () => {\n this.getResizeObserver()?.disconnect()\n this.measureElementCache = {}\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 if (this.scrollOffset !== offset) {\n this.scrollOffset = offset\n this.isScrolling = true\n this.scrollAdjustments = 0\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n\n this.notify()\n }, this.options.scrollingDelay)\n } else {\n this.isScrolling = false\n this.scrollAdjustments = 0\n }\n\n this.calculateRange()\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","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","scrollRect","calculateRange","clearTimeout","setTimeout","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","outerSize","getIndexes","indexFromElement","node","attributeName","indexStr","getAttribute","warn","parseInt","_sync","item","prevNode","ro","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":";;;;;;;;;;;;;;;;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,MAAM;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,MAAMC,OAAO,GAAGV,OAAO,EAAE,CAAA;MAEzB,MAAMW,WAAW,GACfD,OAAO,CAACE,MAAM,KAAKT,IAAI,CAACS,MAAM,IAC9BF,OAAO,CAACG,IAAI,CAAC,CAACC,GAAQ,EAAEC,KAAa,KAAKZ,IAAI,CAACY,KAAK,CAAC,KAAKD,GAAG,CAAC,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,CAAC,GAAGS,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,MAAMW,UAAU,GAAGC,IAAI,CAACC,KAAK,CAAC,CAACZ,IAAI,CAACC,GAAG,EAAE,GAAGJ,OAAQ,IAAI,GAAG,CAAC,GAAG,GAAG,CAAA;EAClE,MAAA,MAAMgB,aAAa,GAAGF,IAAI,CAACC,KAAK,CAAC,CAACZ,IAAI,CAACC,GAAG,EAAE,GAAGO,UAAW,IAAI,GAAG,CAAC,GAAG,GAAG,CAAA;EACxE,MAAA,MAAMM,mBAAmB,GAAGD,aAAa,GAAG,EAAE,CAAA;EAE9C,MAAA,MAAME,GAAG,GAAG,CAACC,GAAoB,EAAEC,GAAW,KAAK;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,CACT,OAAML,GAAG,CAACF,aAAa,EAAE,CAAC,CAAE,CAAA,EAAA,EAAIE,GAAG,CAACL,UAAU,EAAE,CAAC,CAAE,KAAI,EACvD,CAAA;AACT;AACA;AACA,uBAAyBC,EAAAA,IAAI,CAACU,GAAG,CACnB,CAAC,EACDV,IAAI,CAACW,GAAG,CAAC,GAAG,GAAG,GAAG,GAAGR,mBAAmB,EAAE,GAAG,CAAC,CAC9C,CAAA,cAAA,CAAe,EACrBpB,IAAI,IAAJA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,IAAI,CAAEI,GAAG,CACV,CAAA;EACH,KAAA;EAEA,IAAA,OAAOF,MAAM,CAAA;KACd,CAAA;EACH;;EC9DA;;EAqCA;;AAEa2B,QAAAA,mBAAmB,GAAIhB,KAAa,IAAKA,MAAK;AAE9CiB,QAAAA,qBAAqB,GAAIC,KAAY,IAAK;EACrD,EAAA,MAAMC,KAAK,GAAGf,IAAI,CAACU,GAAG,CAACI,KAAK,CAACE,UAAU,GAAGF,KAAK,CAACG,QAAQ,EAAE,CAAC,CAAC,CAAA;EAC5D,EAAA,MAAMC,GAAG,GAAGlB,IAAI,CAACW,GAAG,CAACG,KAAK,CAACK,QAAQ,GAAGL,KAAK,CAACG,QAAQ,EAAEH,KAAK,CAACM,KAAK,GAAG,CAAC,CAAC,CAAA;IAEtE,MAAMC,GAAG,GAAG,EAAE,CAAA;IAEd,KAAK,IAAIC,CAAC,GAAGP,KAAK,EAAEO,CAAC,IAAIJ,GAAG,EAAEI,CAAC,EAAE,EAAE;EACjCD,IAAAA,GAAG,CAACE,IAAI,CAACD,CAAC,CAAC,CAAA;EACb,GAAA;EAEA,EAAA,OAAOD,GAAG,CAAA;EACZ,EAAC;EAED,MAAMG,gBAAgB,GAAG,CACvBC,QAA+B,EAC/BC,EAAwB,KACrB;EACH,EAAA,IAAIC,IAAU,GAAG;MAAEC,MAAM,EAAE,CAAC,CAAC;EAAEC,IAAAA,KAAK,EAAE,CAAC,CAAA;KAAG,CAAA;EAE1C,EAAA,OAAQC,IAAU,IAAK;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;QAEYG,kBAAkB,GAAG,CAChCR,QAA+B,EAC/BC,EAAwB,KACrB;EACH,EAAA,MAAMQ,QAAQ,GAAG,IAAIC,cAAc,CAAEC,OAAO,IAAK;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,MAAM;EACXJ,IAAAA,QAAQ,CAACO,SAAS,CAAChB,QAAQ,CAACa,aAAa,CAAC,CAAA;KAC3C,CAAA;EACH,EAAC;QAEYI,iBAAiB,GAAG,CAC/BjB,QAA+B,EAC/BC,EAAwB,KACrB;EACH,EAAA,MAAMiB,gBAAgB,GAAGnB,gBAAgB,CAACC,QAAQ,EAAEC,EAAE,CAAC,CAAA;EACvD,EAAA,MAAMkB,QAAQ,GAAG,MACfD,gBAAgB,CAAC;EACfd,IAAAA,KAAK,EAAEJ,QAAQ,CAACa,aAAa,CAACO,UAAU;EACxCjB,IAAAA,MAAM,EAAEH,QAAQ,CAACa,aAAa,CAACQ,WAAAA;EACjC,GAAC,CAAC,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,MAAM;MACXxB,QAAQ,CAACa,aAAa,CAACY,mBAAmB,CAAC,QAAQ,EAAEN,QAAQ,CAAC,CAAA;KAC/D,CAAA;EACH,EAAC;EAID,MAAMO,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,MAAMC,oBAAoB,GAAIC,IAAkB,IAAK;EACnD,EAAA,OAAO,CAAC9B,QAA+B,EAAEC,EAA4B,KAAK;EACxE,IAAA,IAAI,CAACD,QAAQ,CAACa,aAAa,EAAE;EAC3B,MAAA,OAAA;EACF,KAAA;MAEA,MAAMkB,KAAK,GAAGL,WAAW,CAACI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;MAClC,MAAME,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;MAEjD,MAAMG,MAAM,GAAG,MAAM;EACnB,MAAA,MAAMC,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;MAER,MAAMG,QAAQ,GAAIC,CAAQ,IAAK;EAC7B,MAAA,MAAMC,MAAM,GAAGD,CAAC,CAACE,aAAqC,CAAA;EACtD,MAAA,MAAMC,OAAO,GAAGF,MAAM,CAACT,KAAK,CAAC,CAAA;EAC7B,MAAA,MAAMY,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,MAAM;QACXxB,QAAQ,CAACa,aAAa,CAACY,mBAAmB,CAAC,QAAQ,EAAEa,QAAQ,CAAC,CAAA;OAC/D,CAAA;KACF,CAAA;EACH,CAAC,CAAA;QAEYM,oBAAoB,GAAGf,oBAAoB,CAAC,SAAS,EAAC;QACtDgB,mBAAmB,GAAGhB,oBAAoB,CAAC,QAAQ,EAAC;QAEpDiB,cAAc,GAAG,CAC5BnB,OAAqB,EACrB3B,QAAwC,KACrC;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;QAEYwC,YAAY,GAAG,CAC1BX,MAAc,EAAA,IAAA,EAMdpC,QAA6B,KAC1B;EAAA,EAAA,IAAA,qBAAA,CAAA;IAAA,IANH;MACEgD,WAAW;MACXC,QAAQ;EACRC,IAAAA,IAAAA;KACmE,GAAA,IAAA,CAAA;EAGrE,EAAA,MAAMC,QAAQ,GACZ,CAACD,IAAI,GAAGd,MAAM,GAAGA,MAAM,GAAGpC,QAAQ,CAACM,OAAO,CAAC+B,YAAY,KACtDW,WAAW,IAAI,CAAC,CAAC,CAAA;IAEpB,CAAAhD,qBAAAA,GAAAA,QAAQ,CAACa,aAAa,KAAA,IAAA,GAAA,KAAA,CAAA,GAAtB,sBAAwBuC,QAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAhC,qBAAwBA,CAAAA,QAAQ,CAAG;MACjC,CAACpD,QAAQ,CAACM,OAAO,CAACC,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG4C,QAAQ;EACxDF,IAAAA,QAAAA;EACF,GAAC,CAAC,CAAA;EACJ,EAAC;QAEYI,aAAa,GAAG,CAC3BjB,MAAc,EAAA,KAAA,EAMdpC,QAA6B,KAC1B;EAAA,EAAA,IAAA,sBAAA,CAAA;IAAA,IANH;MACEgD,WAAW;MACXC,QAAQ;EACRC,IAAAA,IAAAA;KACmE,GAAA,KAAA,CAAA;EAGrE,EAAA,MAAMC,QAAQ,GACZ,CAACD,IAAI,GAAGd,MAAM,GAAGA,MAAM,GAAGpC,QAAQ,CAACM,OAAO,CAAC+B,YAAY,KACtDW,WAAW,IAAI,CAAC,CAAC,CAAA;IAEpB,CAAAhD,sBAAAA,GAAAA,QAAQ,CAACa,aAAa,KAAA,IAAA,GAAA,KAAA,CAAA,GAAtB,uBAAwBuC,QAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAhC,sBAAwBA,CAAAA,QAAQ,CAAG;MACjC,CAACpD,QAAQ,CAACM,OAAO,CAACC,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG4C,QAAQ;EACxDF,IAAAA,QAAAA;EACF,GAAC,CAAC,CAAA;EACJ,EAAC;EAgDM,MAAMK,WAAW,CAGtB;IAoCAC,WAAW,CAACjG,KAAsD,EAAE;EAAA,IAAA,IAAA,KAAA,GAAA,IAAA,CAAA;MAAA,IAnC5DkG,CAAAA,MAAM,GAA4B,EAAE,CAAA;MAAA,IAE5C3C,CAAAA,aAAa,GAA0B,IAAI,CAAA;MAAA,IAC3C4C,CAAAA,WAAW,GAAY,KAAK,CAAA;MAAA,IACpBC,CAAAA,oBAAoB,GAAyC,IAAI,CAAA;MAAA,IACzEC,CAAAA,iBAAiB,GAAkB,EAAE,CAAA;MAAA,IAC7BC,CAAAA,qBAAqB,GAAwB,EAAE,CAAA;MAAA,IAC/CC,CAAAA,2BAA2B,GAAa,EAAE,CAAA;MAAA,IAG1CC,CAAAA,iBAAiB,GAAW,CAAC,CAAA;MAAA,IAC7BC,CAAAA,mBAAmB,GAA8B,EAAE,CAAA;MAAA,IACnDC,CAAAA,4BAA4B,GAAwB,IAAI,CAAA;MAAA,IACxDC,CAAAA,iBAAiB,GAAG,CAAC,MAAM;QACjC,IAAIC,GAA0B,GAAG,IAAI,CAAA;EAErC,MAAA,OAAO,MAAM;EACX,QAAA,IAAIA,GAAG,EAAE;EACP,UAAA,OAAOA,GAAG,CAAA;EACZ,SAAC,MAAM,IAAI,OAAOxD,cAAc,KAAK,WAAW,EAAE;EAChD,UAAA,OAAQwD,GAAG,GAAG,IAAIxD,cAAc,CAAEC,OAAO,IAAK;EAC5CA,YAAAA,OAAO,CAACwD,OAAO,CAAEC,KAAK,IAAK;gBACzB,IAAI,CAACC,eAAe,CAACD,KAAK,CAAC5B,MAAM,EAAkB,KAAK,CAAC,CAAA;EAC3D,aAAC,CAAC,CAAA;EACJ,WAAC,CAAC,CAAA;EACJ,SAAC,MAAM;EACL,UAAA,OAAO,IAAI,CAAA;EACb,SAAA;SACD,CAAA;EACH,KAAC,GAAG,CAAA;EAAA,IAAA,IAAA,CACJnD,KAAK,GAA6C;EAChDE,MAAAA,UAAU,EAAE,CAAC;EACbG,MAAAA,QAAQ,EAAE,CAAA;OACX,CAAA;MAAA,IAUD4E,CAAAA,UAAU,GAAIhH,IAAsD,IAAK;QACvEiH,MAAM,CAAC5D,OAAO,CAACrD,IAAI,CAAC,CAAC6G,OAAO,CAAC,KAAkB,IAAA;EAAA,QAAA,IAAjB,CAACzG,GAAG,EAAE8G,KAAK,CAAC,GAAA,KAAA,CAAA;UACxC,IAAI,OAAOA,KAAK,KAAK,WAAW,EAAE,OAAQlH,IAAI,CAASI,GAAG,CAAC,CAAA;EAC7D,OAAC,CAAC,CAAA;QAEF,IAAI,CAAC4C,OAAO,GAAG;EACb3C,QAAAA,KAAK,EAAE,KAAK;EACZ8G,QAAAA,aAAa,EAAE,CAAC;EAChBjF,QAAAA,QAAQ,EAAE,CAAC;EACXkF,QAAAA,YAAY,EAAE,CAAC;EACfC,QAAAA,UAAU,EAAE,CAAC;EACbC,QAAAA,kBAAkB,EAAE,CAAC;EACrBC,QAAAA,gBAAgB,EAAE,CAAC;EACnBtE,QAAAA,UAAU,EAAE,KAAK;EACjBuE,QAAAA,UAAU,EAAE3F,mBAAmB;EAC/B4F,QAAAA,cAAc,EAAE3F,qBAAqB;UACrCf,QAAQ,EAAE,MAAM,EAAE;UAClByE,cAAc;EACdkC,QAAAA,WAAW,EAAE;EAAE5E,UAAAA,KAAK,EAAE,CAAC;EAAED,UAAAA,MAAM,EAAE,CAAA;WAAG;EACpCkC,QAAAA,YAAY,EAAE,CAAC;EACf4C,QAAAA,cAAc,EAAE,GAAG;EACnBC,QAAAA,cAAc,EAAE,YAAY;UAC5B,GAAG5H,IAAAA;SACJ,CAAA;OACF,CAAA;MAAA,IAEO6H,CAAAA,MAAM,GAAG,MAAM;EAAA,MAAA,IAAA,qBAAA,EAAA,aAAA,CAAA;EACrB,MAAA,CAAA,qBAAA,GAAA,CAAA,aAAA,GAAA,IAAI,CAAC7E,OAAO,EAACjC,QAAQ,KAArB,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAA,IAAA,CAAA,aAAA,EAAwB,IAAI,CAAC,CAAA;OAC9B,CAAA;MAAA,IAEO+G,CAAAA,OAAO,GAAG,MAAM;EACtB,MAAA,IAAI,CAAC5B,MAAM,CAAC6B,MAAM,CAACC,OAAO,CAAC,CAACnB,OAAO,CAAEoB,CAAC,IAAKA,CAAC,EAAG,CAAC,CAAA;QAChD,IAAI,CAAC/B,MAAM,GAAG,EAAE,CAAA;QAChB,IAAI,CAAC3C,aAAa,GAAG,IAAI,CAAA;OAC1B,CAAA;MAAA,IAED2E,CAAAA,SAAS,GAAG,MAAM;EAChB,MAAA,OAAO,MAAM;EAAA,QAAA,IAAA,qBAAA,CAAA;EACX,QAAA,CAAA,qBAAA,GAAA,IAAI,CAACvB,iBAAiB,EAAE,KAAxB,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAA0BwB,UAAU,EAAE,CAAA;EACtC,QAAA,IAAI,CAAC1B,mBAAmB,GAAG,EAAE,CAAA;UAE7B,IAAI,CAACqB,OAAO,EAAE,CAAA;SACf,CAAA;OACF,CAAA;MAAA,IAEDM,CAAAA,WAAW,GAAG,MAAM;EAAA,MAAA,IAAA,qBAAA,CAAA;EAClB,MAAA,CAAA,qBAAA,GAAA,IAAI,CAAC1B,4BAA4B,KAAjC,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAA,IAAA,CAAA,IAAI,CAAiC,CAAA;EAErC,MAAA,MAAMnD,aAAa,GAAG,IAAI,CAACP,OAAO,CAACqF,gBAAgB,EAAE,CAAA;EAErD,MAAA,IAAI,IAAI,CAAC9E,aAAa,KAAKA,aAAa,EAAE;UACxC,IAAI,CAACuE,OAAO,EAAE,CAAA;UAEd,IAAI,CAACvE,aAAa,GAAGA,aAAa,CAAA;EAElC,QAAA,IAAI,CAAC+E,eAAe,CAAC,IAAI,CAACC,YAAY,EAAE;EACtC7C,UAAAA,WAAW,EAAE8C,SAAS;EACtB7C,UAAAA,QAAQ,EAAE6C,SAAS;EACnB5C,UAAAA,IAAI,EAAE,IAAA;EACR,SAAC,CAAC,CAAA;EAEF,QAAA,IAAI,CAACM,MAAM,CAAC1D,IAAI,CACd,IAAI,CAACQ,OAAO,CAACE,kBAAkB,CAAC,IAAI,EAAGH,IAAI,IAAK;YAC9C,IAAI,CAAC0F,UAAU,GAAG1F,IAAI,CAAA;YACtB,IAAI,CAAC2F,cAAc,EAAE,CAAA;EACvB,SAAC,CAAC,CACH,CAAA;EAED,QAAA,IAAI,CAACxC,MAAM,CAAC1D,IAAI,CACd,IAAI,CAACQ,OAAO,CAACsC,oBAAoB,CAAC,IAAI,EAAGR,MAAM,IAAK;EAClD,UAAA,IAAI,IAAI,CAACsB,oBAAoB,KAAK,IAAI,EAAE;EACtCuC,YAAAA,YAAY,CAAC,IAAI,CAACvC,oBAAoB,CAAC,CAAA;cACvC,IAAI,CAACA,oBAAoB,GAAG,IAAI,CAAA;EAClC,WAAA;EAEA,UAAA,IAAI,IAAI,CAACmC,YAAY,KAAKzD,MAAM,EAAE;cAChC,IAAI,CAACyD,YAAY,GAAGzD,MAAM,CAAA;cAC1B,IAAI,CAACqB,WAAW,GAAG,IAAI,CAAA;cACvB,IAAI,CAACK,iBAAiB,GAAG,CAAC,CAAA;EAE1B,YAAA,IAAI,CAACJ,oBAAoB,GAAGwC,UAAU,CAAC,MAAM;gBAC3C,IAAI,CAACxC,oBAAoB,GAAG,IAAI,CAAA;gBAChC,IAAI,CAACD,WAAW,GAAG,KAAK,CAAA;gBAExB,IAAI,CAAC0B,MAAM,EAAE,CAAA;EACf,aAAC,EAAE,IAAI,CAAC7E,OAAO,CAAC2E,cAAc,CAAC,CAAA;EACjC,WAAC,MAAM;cACL,IAAI,CAACxB,WAAW,GAAG,KAAK,CAAA;cACxB,IAAI,CAACK,iBAAiB,GAAG,CAAC,CAAA;EAC5B,WAAA;YAEA,IAAI,CAACkC,cAAc,EAAE,CAAA;EACvB,SAAC,CAAC,CACH,CAAA;EACH,OAAC,MAAM,IAAI,CAAC,IAAI,CAACvC,WAAW,EAAE;UAC5B,IAAI,CAACuC,cAAc,EAAE,CAAA;EACvB,OAAA;OACD,CAAA;MAAA,IAEOG,CAAAA,OAAO,GAAG,MAAM;EACtB,MAAA,OAAO,IAAI,CAACJ,UAAU,CAAC,IAAI,CAACzF,OAAO,CAACC,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAA;OACrE,CAAA;EAAA,IAAA,IAAA,CAEO6F,eAAe,GAAGjJ,IAAI,CAC5B,MAAM,CACJ,IAAI,CAACmD,OAAO,CAACX,KAAK,EAClB,IAAI,CAACW,OAAO,CAACoE,YAAY,EACzB,IAAI,CAACpE,OAAO,CAACwE,UAAU,EACvB,IAAI,CAAClB,qBAAqB,CAC3B,EACD,CAACjE,KAAK,EAAE+E,YAAY,EAAEI,UAAU,EAAEnB,iBAAiB,KAAK;QACtD,MAAMzE,GAAG,GACP,IAAI,CAAC2E,2BAA2B,CAAC7F,MAAM,GAAG,CAAC,GACvCO,IAAI,CAACW,GAAG,CAAC,GAAG,IAAI,CAAC2E,2BAA2B,CAAC,GAC7C,CAAC,CAAA;QACP,IAAI,CAACA,2BAA2B,GAAG,EAAE,CAAA;QAErC,MAAMwC,YAAY,GAAG,IAAI,CAAC1C,iBAAiB,CAAC2C,KAAK,CAAC,CAAC,EAAEpH,GAAG,CAAC,CAAA;QAEzD,KAAK,IAAIW,CAAC,GAAGX,GAAG,EAAEW,CAAC,GAAGF,KAAK,EAAEE,CAAC,EAAE,EAAE;EAChC,QAAA,MAAMnC,GAAG,GAAGoH,UAAU,CAACjF,CAAC,CAAC,CAAA;EACzB,QAAA,MAAM0G,YAAY,GAAG5C,iBAAiB,CAACjG,GAAG,CAAC,CAAA;EAC3C,QAAA,MAAM4B,KAAK,GAAG+G,YAAY,CAACxG,CAAC,GAAG,CAAC,CAAC,GAC7BwG,YAAY,CAACxG,CAAC,GAAG,CAAC,CAAC,CAAEJ,GAAG,GACxBiF,YAAY,CAAA;EAChB,QAAA,MAAM8B,IAAI,GACR,OAAOD,YAAY,KAAK,QAAQ,GAC5BA,YAAY,GACZ,IAAI,CAACjG,OAAO,CAACmG,YAAY,CAAC5G,CAAC,CAAC,CAAA;EAClC,QAAA,MAAMJ,GAAG,GAAGH,KAAK,GAAGkH,IAAI,CAAA;UACxBH,YAAY,CAACxG,CAAC,CAAC,GAAG;EAAE1B,UAAAA,KAAK,EAAE0B,CAAC;YAAEP,KAAK;YAAEkH,IAAI;YAAE/G,GAAG;EAAE/B,UAAAA,GAAAA;WAAK,CAAA;EACvD,OAAA;QAEA,IAAI,CAACiG,iBAAiB,GAAG0C,YAAY,CAAA;EACrC,MAAA,OAAOA,YAAY,CAAA;EACrB,KAAC,EACD;QACE3I,GAAG,EAA2C,iBAAiB;EAC/DC,MAAAA,KAAK,EAAE,MAAM,IAAI,CAAC2C,OAAO,CAAC3C,KAAAA;EAC5B,KAAC,CACF,CAAA;MAAA,IAEDqI,CAAAA,cAAc,GAAG7I,IAAI,CACnB,MAAM,CAAC,IAAI,CAACiJ,eAAe,EAAE,EAAE,IAAI,CAACD,OAAO,EAAE,EAAE,IAAI,CAACN,YAAY,CAAC,EACjE,CAACQ,YAAY,EAAEK,SAAS,EAAEb,YAAY,KAAK;QACzC,MAAMxG,KAAK,GAAG2G,cAAc,CAAC;UAC3BK,YAAY;UACZK,SAAS;EACTb,QAAAA,YAAAA;EACF,OAAC,CAAC,CAAA;EACF,MAAA,IACExG,KAAK,CAACE,UAAU,KAAK,IAAI,CAACF,KAAK,CAACE,UAAU,IAC1CF,KAAK,CAACK,QAAQ,KAAK,IAAI,CAACL,KAAK,CAACK,QAAQ,EACtC;UACA,IAAI,CAACL,KAAK,GAAGA,KAAK,CAAA;UAClB,IAAI,CAAC8F,MAAM,EAAE,CAAA;EACf,OAAA;QACA,OAAO,IAAI,CAAC9F,KAAK,CAAA;EACnB,KAAC,EACD;QACE3B,GAAG,EAA2C,gBAAgB;EAC9DC,MAAAA,KAAK,EAAE,MAAM,IAAI,CAAC2C,OAAO,CAAC3C,KAAAA;EAC5B,KAAC,CACF,CAAA;EAAA,IAAA,IAAA,CAEOgJ,UAAU,GAAGxJ,IAAI,CACvB,MAAM,CACJ,IAAI,CAACmD,OAAO,CAACyE,cAAc,EAC3B,IAAI,CAAC1F,KAAK,EACV,IAAI,CAACiB,OAAO,CAACd,QAAQ,EACrB,IAAI,CAACc,OAAO,CAACX,KAAK,CACnB,EACD,CAACoF,cAAc,EAAE1F,KAAK,EAAEG,QAAQ,EAAEG,KAAK,KAAK;EAC1C,MAAA,OAAOoF,cAAc,CAAC;EACpB,QAAA,GAAG1F,KAAK;UACRG,QAAQ;EACRG,QAAAA,KAAK,EAAEA,KAAAA;EACT,OAAC,CAAC,CAAA;EACJ,KAAC,EACD;QACEjC,GAAG,EAA2C,YAAY;EAC1DC,MAAAA,KAAK,EAAE,MAAM,IAAI,CAAC2C,OAAO,CAAC3C,KAAAA;EAC5B,KAAC,CACF,CAAA;MAAA,IAEDiJ,CAAAA,gBAAgB,GAAIC,IAAkB,IAAK;EACzC,MAAA,MAAMC,aAAa,GAAG,IAAI,CAACxG,OAAO,CAAC4E,cAAc,CAAA;EACjD,MAAA,MAAM6B,QAAQ,GAAGF,IAAI,CAACG,YAAY,CAACF,aAAa,CAAC,CAAA;QAEjD,IAAI,CAACC,QAAQ,EAAE;EACbhI,QAAAA,OAAO,CAACkI,IAAI,CACT,CAA0BH,wBAAAA,EAAAA,aAAc,gCAA+B,CACzE,CAAA;EACD,QAAA,OAAO,CAAC,CAAC,CAAA;EACX,OAAA;EAEA,MAAA,OAAOI,QAAQ,CAACH,QAAQ,EAAE,EAAE,CAAC,CAAA;OAC9B,CAAA;EAAA,IAAA,IAAA,CAEO1C,eAAe,GAAG,CAACwC,IAAkB,EAAEM,KAAc,KAAK;EAChE,MAAA,MAAMhJ,KAAK,GAAG,IAAI,CAACyI,gBAAgB,CAACC,IAAI,CAAC,CAAA;EAEzC,MAAA,MAAMO,IAAI,GAAG,IAAI,CAACzD,iBAAiB,CAACxF,KAAK,CAAC,CAAA;QAC1C,IAAI,CAACiJ,IAAI,EAAE;EACT,QAAA,OAAA;EACF,OAAA;QAEA,MAAMC,QAAQ,GAAG,IAAI,CAACtD,mBAAmB,CAACqD,IAAI,CAAC1J,GAAG,CAAC,CAAA;EAEnD,MAAA,MAAM4J,EAAE,GAAG,IAAI,CAACrD,iBAAiB,EAAE,CAAA;EAEnC,MAAA,IAAI,CAAC4C,IAAI,CAACU,WAAW,EAAE;EACrB,QAAA,IAAIF,QAAQ,EAAE;EACZC,UAAAA,EAAE,oBAAFA,EAAE,CAAEtG,SAAS,CAACqG,QAAQ,CAAC,CAAA;EACvB,UAAA,OAAO,IAAI,CAACtD,mBAAmB,CAACqD,IAAI,CAAC1J,GAAG,CAAC,CAAA;EAC3C,SAAA;EACA,QAAA,OAAA;EACF,OAAA;EAEA,MAAA,IAAI,CAAC2J,QAAQ,IAAIA,QAAQ,KAAKR,IAAI,EAAE;EAClC,QAAA,IAAIQ,QAAQ,EAAE;EACZC,UAAAA,EAAE,oBAAFA,EAAE,CAAEtG,SAAS,CAACqG,QAAQ,CAAC,CAAA;EACzB,SAAA;UACA,IAAI,CAACtD,mBAAmB,CAACqD,IAAI,CAAC1J,GAAG,CAAC,GAAGmJ,IAAI,CAAA;EACzCS,QAAAA,EAAE,oBAAFA,EAAE,CAAEvG,OAAO,CAAC8F,IAAI,CAAC,CAAA;EACnB,OAAA;QAEA,MAAMW,gBAAgB,GAAG,IAAI,CAAClH,OAAO,CAACwC,cAAc,CAAC+D,IAAI,EAAE,IAAI,CAAC,CAAA;EAEhE,MAAA,MAAMY,QAAQ,GAAG,IAAI,CAAC7D,qBAAqB,CAACwD,IAAI,CAAC1J,GAAG,CAAC,IAAI0J,IAAI,CAACZ,IAAI,CAAA;EAElE,MAAA,MAAMkB,KAAK,GAAGF,gBAAgB,GAAGC,QAAQ,CAAA;QAEzC,IAAIC,KAAK,KAAK,CAAC,EAAE;UACf,IAAIN,IAAI,CAAC9H,KAAK,GAAG,IAAI,CAACuG,YAAY,IAAI,IAAI,CAACpC,WAAW,EAAE;EACtD,UAAA,IAA6C,IAAI,CAACnD,OAAO,CAAC3C,KAAK,EAAE;EAC/DoB,YAAAA,OAAO,CAACC,IAAI,CAAC,YAAY,EAAE0I,KAAK,CAAC,CAAA;EACnC,WAAA;EAEA,UAAA,IAAI,CAAC9B,eAAe,CAAC,IAAI,CAACC,YAAY,EAAE;EACtC7C,YAAAA,WAAW,EAAG,IAAI,CAACc,iBAAiB,IAAI4D,KAAM;EAC9CzE,YAAAA,QAAQ,EAAE6C,SAAS;EACnB5C,YAAAA,IAAI,EAAE,KAAA;EACR,WAAC,CAAC,CAAA;EACJ,SAAA;EAEA,QAAA,IAAI,CAACW,2BAA2B,CAAC/D,IAAI,CAAC3B,KAAK,CAAC,CAAA;UAC5C,IAAI,CAACyF,qBAAqB,GAAG;YAC3B,GAAG,IAAI,CAACA,qBAAqB;YAC7B,CAACwD,IAAI,CAAC1J,GAAG,GAAG8J,gBAAAA;WACb,CAAA;UACD,IAAI,CAACrC,MAAM,EAAE,CAAA;EACf,OAAA;OACD,CAAA;MAAA,IAEDrC,CAAAA,cAAc,GAAI+D,IAAyB,IAAK;QAC9C,IAAI,CAACA,IAAI,EAAE;EACT,QAAA,OAAA;EACF,OAAA;EAEA,MAAA,IAAI,CAACxC,eAAe,CAACwC,IAAI,EAAE,IAAI,CAAC,CAAA;OACjC,CAAA;MAAA,IAEDc,CAAAA,eAAe,GAAGxK,IAAI,CACpB,MAAM,CAAC,IAAI,CAACwJ,UAAU,EAAE,EAAE,IAAI,CAACP,eAAe,EAAE,CAAC,EACjD,CAACwB,OAAO,EAAEvB,YAAY,KAAK;QACzB,MAAMwB,YAA2B,GAAG,EAAE,CAAA;EAEtC,MAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAGH,OAAO,CAAC5J,MAAM,EAAE8J,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;EAClD,QAAA,MAAMjI,CAAC,GAAG+H,OAAO,CAACE,CAAC,CAAE,CAAA;EACrB,QAAA,MAAME,WAAW,GAAG3B,YAAY,CAACxG,CAAC,CAAE,CAAA;EAEpCgI,QAAAA,YAAY,CAAC/H,IAAI,CAACkI,WAAW,CAAC,CAAA;EAChC,OAAA;EAEA,MAAA,OAAOH,YAAY,CAAA;EACrB,KAAC,EACD;QACEnK,GAAG,EAA2C,YAAY;EAC1DC,MAAAA,KAAK,EAAE,MAAM,IAAI,CAAC2C,OAAO,CAAC3C,KAAAA;EAC5B,KAAC,CACF,CAAA;EAAA,IAAA,IAAA,CAEDsK,cAAc,GAAG,UACf9E,QAAgB,EAEb,KAAA,EAAA;QAAA,IADH;EAAE+E,QAAAA,KAAK,GAAG,OAAO;EAAEjF,QAAAA,QAAAA;SAAiC,GAAA,KAAA,KAAA,KAAA,CAAA,GAAG,EAAE,GAAA,KAAA,CAAA;EAEzD,MAAA,MAAMb,MAAM,GAAG,KAAI,CAACyD,YAAY,CAAA;EAChC,MAAA,MAAMW,IAAI,GAAG,KAAI,CAACL,OAAO,EAAE,CAAA;QAE3B,IAAI+B,KAAK,KAAK,MAAM,EAAE;UACpB,IAAI/E,QAAQ,IAAIf,MAAM,EAAE;EACtB8F,UAAAA,KAAK,GAAG,OAAO,CAAA;EACjB,SAAC,MAAM,IAAI/E,QAAQ,IAAIf,MAAM,GAAGoE,IAAI,EAAE;EACpC0B,UAAAA,KAAK,GAAG,KAAK,CAAA;EACf,SAAC,MAAM;EACLA,UAAAA,KAAK,GAAG,OAAO,CAAA;EACjB,SAAA;EACF,OAAA;EAEA,MAAA,MAAM5H,OAAO,GAAG;EACd0C,QAAAA,WAAW,EAAE8C,SAAS;UACtB7C,QAAQ;EACRC,QAAAA,IAAI,EAAE,KAAA;SACP,CAAA;QACD,IAAIgF,KAAK,KAAK,OAAO,EAAE;EACrB,QAAA,KAAI,CAACtC,eAAe,CAACzC,QAAQ,EAAE7C,OAAO,CAAC,CAAA;EACzC,OAAC,MAAM,IAAI4H,KAAK,KAAK,KAAK,EAAE;UAC1B,KAAI,CAACtC,eAAe,CAACzC,QAAQ,GAAGqD,IAAI,EAAElG,OAAO,CAAC,CAAA;EAChD,OAAC,MAAM,IAAI4H,KAAK,KAAK,QAAQ,EAAE;UAC7B,KAAI,CAACtC,eAAe,CAACzC,QAAQ,GAAGqD,IAAI,GAAG,CAAC,EAAElG,OAAO,CAAC,CAAA;EACpD,OAAA;OACD,CAAA;EAAA,IAAA,IAAA,CAED6H,aAAa,GAAG,UACdhK,KAAa,EAEV,MAAA,EAAA;QAAA,IADH;EAAE+J,QAAAA,KAAK,GAAG,MAAM;UAAE,GAAGE,IAAAA;SAA4B,GAAA,MAAA,KAAA,KAAA,CAAA,GAAG,EAAE,GAAA,MAAA,CAAA;QAEtD,KAAI,CAACpE,4BAA4B,GAAG,IAAI,CAAA;EAExC,MAAA,MAAMqC,YAAY,GAAG,KAAI,CAACD,eAAe,EAAE,CAAA;EAC3C,MAAA,MAAMhE,MAAM,GAAG,KAAI,CAACyD,YAAY,CAAA;EAChC,MAAA,MAAMW,IAAI,GAAG,KAAI,CAACL,OAAO,EAAE,CAAA;QAC3B,MAAM;EAAExG,QAAAA,KAAAA;SAAO,GAAG,KAAI,CAACW,OAAO,CAAA;QAE9B,MAAM0H,WAAW,GAAG3B,YAAY,CAAC9H,IAAI,CAACU,GAAG,CAAC,CAAC,EAAEV,IAAI,CAACW,GAAG,CAACf,KAAK,EAAEwB,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QAEzE,IAAI,CAACqI,WAAW,EAAE;EAChB,QAAA,OAAA;EACF,OAAA;QAEA,IAAIE,KAAK,KAAK,MAAM,EAAE;EACpB,QAAA,IAAIF,WAAW,CAACvI,GAAG,IAAI2C,MAAM,GAAGoE,IAAI,GAAG,KAAI,CAAClG,OAAO,CAACuE,gBAAgB,EAAE;EACpEqD,UAAAA,KAAK,GAAG,KAAK,CAAA;EACf,SAAC,MAAM,IACLF,WAAW,CAAC1I,KAAK,IACjB8C,MAAM,GAAG,KAAI,CAAC9B,OAAO,CAACsE,kBAAkB,EACxC;EACAsD,UAAAA,KAAK,GAAG,OAAO,CAAA;EACjB,SAAC,MAAM;EACL,UAAA,OAAA;EACF,SAAA;EACF,OAAA;QAEA,MAAM/E,QAAQ,GACZ+E,KAAK,KAAK,KAAK,GACXF,WAAW,CAACvI,GAAG,GAAG,KAAI,CAACa,OAAO,CAACuE,gBAAgB,GAC/CmD,WAAW,CAAC1I,KAAK,GAAG,KAAI,CAACgB,OAAO,CAACsE,kBAAkB,CAAA;EAEzD,MAAA,KAAI,CAACqD,cAAc,CAAC9E,QAAQ,EAAE;UAAE+E,KAAK;UAAE,GAAGE,IAAAA;EAAK,OAAC,CAAC,CAAA;EAEjD,MAAA,MAAMC,SAAS,GAAG9D,MAAM,CAAC+D,IAAI,CAAC,KAAI,CAACvE,mBAAmB,CAAC,CAAC/F,MAAM,GAAG,CAAC,CAAA;EAElE,MAAA,IAAIqK,SAAS,EAAE;EACb,QAAA,MAAME,OAAO,GAAG,MACd,OAAO,KAAI,CAAC3E,qBAAqB,CAAC,KAAI,CAACtD,OAAO,CAACwE,UAAU,CAAC3G,KAAK,CAAC,CAAC,KACjE,QAAQ,CAAA;UAEV,IAAI,CAACoK,OAAO,EAAE,EAAE;YACd,KAAI,CAACvE,4BAA4B,GAAG,MAAM;cACxC,IAAIuE,OAAO,EAAE,EAAE;gBACb,KAAI,CAACvE,4BAA4B,GAAG,IAAI,CAAA;EACxC,cAAA,KAAI,CAACmE,aAAa,CAAChK,KAAK,EAAE;kBAAE+J,KAAK;kBAAE,GAAGE,IAAAA;EAAK,eAAC,CAAC,CAAA;EAC/C,aAAA;aACD,CAAA;EACH,SAAA;EACF,OAAA;OACD,CAAA;EAAA,IAAA,IAAA,CAEDI,YAAY,GAAG,MAAA;EAAA,MAAA,IAAA,qBAAA,CAAA;EAAA,MAAA,OACb,CAAC,CAAA,CAAA,qBAAA,GAAA,IAAI,CAACpC,eAAe,EAAE,CAAC,IAAI,CAAC9F,OAAO,CAACX,KAAK,GAAG,CAAC,CAAC,KAA9C,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAgDF,GAAG,KAClD,IAAI,CAACa,OAAO,CAACoE,YAAY,IAAI,IAAI,CAACpE,OAAO,CAACqE,UAAU,CAAA;EAAA,KAAA,CAAA;EAAA,IAAA,IAAA,CAEhDiB,eAAe,GAAG,CACxBxD,MAAc,EAUX,KAAA,KAAA;QAAA,IATH;UACEY,WAAW;UACXC,QAAQ;EACRC,QAAAA,IAAAA;SAKD,GAAA,KAAA,CAAA;EAED,MAAA,IAAI,CAAC5C,OAAO,CAACmI,UAAU,CAACrG,MAAM,EAAE;UAAEa,QAAQ;UAAEC,IAAI;EAAEF,QAAAA,WAAAA;SAAa,EAAE,IAAI,CAAC,CAAA;OACvE,CAAA;MAAA,IAED0F,CAAAA,OAAO,GAAG,MAAM;EACd,MAAA,IAAI,CAAC9E,qBAAqB,GAAG,EAAE,CAAA;QAC/B,IAAI,CAACuB,MAAM,EAAE,CAAA;OACd,CAAA;EA9YC,IAAA,IAAI,CAACb,UAAU,CAAChH,KAAI,CAAC,CAAA;EACrB,IAAA,IAAI,CAACyI,UAAU,GAAG,IAAI,CAACzF,OAAO,CAAC0E,WAAW,CAAA;EAC1C,IAAA,IAAI,CAACa,YAAY,GAAG,IAAI,CAACvF,OAAO,CAACmE,aAAa,CAAA;MAE9C,IAAI,CAACuB,cAAc,EAAE,CAAA;EACvB,GAAA;EA0YF,CAAA;EAEA,MAAM2C,uBAAuB,GAAG,CAC9BC,GAAW,EACXC,IAAY,EACZC,eAAsC,EACtCtE,KAAa,KACV;IACH,OAAOoE,GAAG,IAAIC,IAAI,EAAE;MAClB,MAAME,MAAM,GAAI,CAACH,GAAG,GAAGC,IAAI,IAAI,CAAC,GAAI,CAAC,CAAA;EACrC,IAAA,MAAMG,YAAY,GAAGF,eAAe,CAACC,MAAM,CAAC,CAAA;MAE5C,IAAIC,YAAY,GAAGxE,KAAK,EAAE;QACxBoE,GAAG,GAAGG,MAAM,GAAG,CAAC,CAAA;EAClB,KAAC,MAAM,IAAIC,YAAY,GAAGxE,KAAK,EAAE;QAC/BqE,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,SAAS5C,cAAc,CAQpB,KAAA,EAAA;IAAA,IARqB;MACtBK,YAAY;MACZK,SAAS;EACTb,IAAAA,YAAAA;KAKD,GAAA,KAAA,CAAA;EACC,EAAA,MAAMlG,KAAK,GAAG0G,YAAY,CAACrI,MAAM,GAAG,CAAC,CAAA;IACrC,MAAMiL,SAAS,GAAI9K,KAAa,IAAKkI,YAAY,CAAClI,KAAK,CAAC,CAAEmB,KAAK,CAAA;IAE/D,MAAMC,UAAU,GAAGoJ,uBAAuB,CAAC,CAAC,EAAEhJ,KAAK,EAAEsJ,SAAS,EAAEpD,YAAY,CAAC,CAAA;IAC7E,IAAInG,QAAQ,GAAGH,UAAU,CAAA;EAEzB,EAAA,OACEG,QAAQ,GAAGC,KAAK,IAChB0G,YAAY,CAAC3G,QAAQ,CAAC,CAAED,GAAG,GAAGoG,YAAY,GAAGa,SAAS,EACtD;EACAhH,IAAAA,QAAQ,EAAE,CAAA;EACZ,GAAA;IAEA,OAAO;MAAEH,UAAU;EAAEG,IAAAA,QAAAA;KAAU,CAAA;EACjC;;;;;;;;;;;;;;;;;;;;"}
|
|
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 if (this.scrollOffset !== offset) {\n this.scrollOffset = offset\n this.isScrolling = true\n this.scrollAdjustments = 0\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n\n this.notify()\n }, this.options.scrollingDelay)\n } else {\n this.isScrolling = false\n this.scrollAdjustments = 0\n }\n\n this.calculateRange()\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","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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"}
|
|
@@ -8,5 +8,5 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @license MIT
|
|
10
10
|
*/
|
|
11
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).VirtualCore={})}(this,(function(e){"use strict";function t(e,t,s){let n,i=[];return()=>{let l;s.key&&null!=s.debug&&s.debug()&&(l=Date.now());const o=e();if(!(o.length!==i.length||o.some(((e,t)=>i[t]!==e))))return n;let r;if(i=o,s.key&&null!=s.debug&&s.debug()&&(r=Date.now()),n=t(...o),null==s||null==s.onChange||s.onChange(n),s.key&&null!=s.debug&&s.debug()){const e=Math.round(100*(Date.now()-l))/100,t=Math.round(100*(Date.now()-r))/100,n=t/16,i=(e,t)=>{for(e=String(e);e.length<t;)e=" "+e;return e};console.info(`%c⏱ ${i(t,5)} /${i(e,5)} ms`,`\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(0,Math.min(120-120*n,120))}deg 100% 31%);`,null==s?void 0:s.key)}return n}}const s=e=>e,n=e=>{const t=Math.max(e.startIndex-e.overscan,0),s=Math.min(e.endIndex+e.overscan,e.count-1),n=[];for(let e=t;e<=s;e++)n.push(e);return n},i={element:["scrollLeft","scrollTop"],window:["scrollX","scrollY"]},l=e=>(t,s)=>{if(!t.scrollElement)return;const n=i[e][0],l=i[e][1];let o=t.scrollElement[n],r=t.scrollElement[l];const a=()=>{const e=t.scrollElement[t.options.horizontal?n:l];s(Math.max(0,e-t.options.scrollMargin))};a();const h=e=>{const s=e.currentTarget,i=s[n],h=s[l];(t.options.horizontal?o-i:r-h)&&a(),o=i,r=h};return t.scrollElement.addEventListener("scroll",h,{capture:!1,passive:!0}),()=>{t.scrollElement.removeEventListener("scroll",h)}},o=l("element"),r=l("window"),a=(e,t)=>Math.round(e.getBoundingClientRect()[t.options.horizontal?"width":"height"]);e.Virtualizer=class{constructor(e){var i=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=(()=>{let e=null;return()=>e||("undefined"!=typeof ResizeObserver?e=new ResizeObserver((e=>{e.forEach((e=>{this._measureElement(e.target,!1)}))})):null)})(),this.range={startIndex:0,endIndex:0},this.setOptions=e=>{Object.entries(e).forEach((t=>{let[s,n]=t;void 0===n&&delete e[s]})),this.options={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:s,rangeExtractor:n,onChange:()=>{},measureElement:a,initialRect:{width:0,height:0},scrollMargin:0,scrollingDelay:150,indexAttribute:"data-index",...e}},this.notify=()=>{var e,t;null==(e=(t=this.options).onChange)||e.call(t,this)},this.cleanup=()=>{this.unsubs.filter(Boolean).forEach((e=>e())),this.unsubs=[],this.scrollElement=null},this._didMount=()=>
|
|
11
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).VirtualCore={})}(this,(function(e){"use strict";function t(e,t,s){let n,i=[];return()=>{let l;s.key&&null!=s.debug&&s.debug()&&(l=Date.now());const o=e();if(!(o.length!==i.length||o.some(((e,t)=>i[t]!==e))))return n;let r;if(i=o,s.key&&null!=s.debug&&s.debug()&&(r=Date.now()),n=t(...o),null==s||null==s.onChange||s.onChange(n),s.key&&null!=s.debug&&s.debug()){const e=Math.round(100*(Date.now()-l))/100,t=Math.round(100*(Date.now()-r))/100,n=t/16,i=(e,t)=>{for(e=String(e);e.length<t;)e=" "+e;return e};console.info(`%c⏱ ${i(t,5)} /${i(e,5)} ms`,`\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(0,Math.min(120-120*n,120))}deg 100% 31%);`,null==s?void 0:s.key)}return n}}const s=e=>e,n=e=>{const t=Math.max(e.startIndex-e.overscan,0),s=Math.min(e.endIndex+e.overscan,e.count-1),n=[];for(let e=t;e<=s;e++)n.push(e);return n},i={element:["scrollLeft","scrollTop"],window:["scrollX","scrollY"]},l=e=>(t,s)=>{if(!t.scrollElement)return;const n=i[e][0],l=i[e][1];let o=t.scrollElement[n],r=t.scrollElement[l];const a=()=>{const e=t.scrollElement[t.options.horizontal?n:l];s(Math.max(0,e-t.options.scrollMargin))};a();const h=e=>{const s=e.currentTarget,i=s[n],h=s[l];(t.options.horizontal?o-i:r-h)&&a(),o=i,r=h};return t.scrollElement.addEventListener("scroll",h,{capture:!1,passive:!0}),()=>{t.scrollElement.removeEventListener("scroll",h)}},o=l("element"),r=l("window"),a=(e,t)=>Math.round(e.getBoundingClientRect()[t.options.horizontal?"width":"height"]);e.Virtualizer=class{constructor(e){var i=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=(()=>{let e=null;return()=>e||("undefined"!=typeof ResizeObserver?e=new ResizeObserver((e=>{e.forEach((e=>{this._measureElement(e.target,!1)}))})):null)})(),this.range={startIndex:0,endIndex:0},this.setOptions=e=>{Object.entries(e).forEach((t=>{let[s,n]=t;void 0===n&&delete e[s]})),this.options={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:s,rangeExtractor:n,onChange:()=>{},measureElement:a,initialRect:{width:0,height:0},scrollMargin:0,scrollingDelay:150,indexAttribute:"data-index",...e}},this.notify=()=>{var e,t;null==(e=(t=this.options).onChange)||e.call(t,this)},this.cleanup=()=>{this.unsubs.filter(Boolean).forEach((e=>e())),this.unsubs=[],this.scrollElement=null},this._didMount=()=>{const e=this.getResizeObserver();return Object.values(this.measureElementCache).forEach((t=>null==e?void 0:e.observe(t))),()=>{null==e||e.disconnect(),this.cleanup()}},this._willUpdate=()=>{var e;null==(e=this.pendingScrollToIndexCallback)||e.call(this);const t=this.options.getScrollElement();this.scrollElement!==t?(this.cleanup(),this.scrollElement=t,this._scrollToOffset(this.scrollOffset,{adjustments:void 0,behavior:void 0,sync:!0}),this.unsubs.push(this.options.observeElementRect(this,(e=>{this.scrollRect=e,this.calculateRange()}))),this.unsubs.push(this.options.observeElementOffset(this,(e=>{null!==this.isScrollingTimeoutId&&(clearTimeout(this.isScrollingTimeoutId),this.isScrollingTimeoutId=null),this.scrollOffset!==e?(this.scrollOffset=e,this.isScrolling=!0,this.scrollAdjustments=0,this.isScrollingTimeoutId=setTimeout((()=>{this.isScrollingTimeoutId=null,this.isScrolling=!1,this.notify()}),this.options.scrollingDelay)):(this.isScrolling=!1,this.scrollAdjustments=0),this.calculateRange()})))):this.isScrolling||this.calculateRange()},this.getSize=()=>this.scrollRect[this.options.horizontal?"width":"height"],this.getMeasurements=t((()=>[this.options.count,this.options.paddingStart,this.options.getItemKey,this.itemMeasurementsCache]),((e,t,s,n)=>{const i=this.pendingMeasuredCacheIndexes.length>0?Math.min(...this.pendingMeasuredCacheIndexes):0;this.pendingMeasuredCacheIndexes=[];const l=this.measurementsCache.slice(0,i);for(let o=i;o<e;o++){const e=s(o),i=n[e],r=l[o-1]?l[o-1].end:t,a="number"==typeof i?i:this.options.estimateSize(o),h=r+a;l[o]={index:o,start:r,size:a,end:h,key:e}}return this.measurementsCache=l,l}),{key:!1,debug:()=>this.options.debug}),this.calculateRange=t((()=>[this.getMeasurements(),this.getSize(),this.scrollOffset]),((e,t,s)=>{const n=function(e){let{measurements:t,outerSize:s,scrollOffset:n}=e;const i=t.length-1,l=((e,t,s,n)=>{for(;e<=t;){const i=(e+t)/2|0,l=s(i);if(l<n)e=i+1;else{if(!(l>n))return i;t=i-1}}return e>0?e-1:0})(0,i,(e=>t[e].start),n);let o=l;for(;o<i&&t[o].end<n+s;)o++;return{startIndex:l,endIndex:o}}({measurements:e,outerSize:t,scrollOffset:s});return n.startIndex===this.range.startIndex&&n.endIndex===this.range.endIndex||(this.range=n,this.notify()),this.range}),{key:!1,debug:()=>this.options.debug}),this.getIndexes=t((()=>[this.options.rangeExtractor,this.range,this.options.overscan,this.options.count]),((e,t,s,n)=>e({...t,overscan:s,count:n})),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=e=>{const t=this.options.indexAttribute,s=e.getAttribute(t);return s?parseInt(s,10):(console.warn(`Missing attribute name '${t}={index}' on measured element.`),-1)},this._measureElement=(e,t)=>{const s=this.indexFromElement(e),n=this.measurementsCache[s];if(!n)return;const i=this.measureElementCache[n.key],l=this.getResizeObserver();if(!e.isConnected)return void(i&&(null==l||l.unobserve(i),delete this.measureElementCache[n.key]));i&&i===e||(i&&(null==l||l.unobserve(i)),this.measureElementCache[n.key]=e,null==l||l.observe(e));const o=this.options.measureElement(e,this),r=o-(this.itemMeasurementsCache[n.key]??n.size);0!==r&&(n.start<this.scrollOffset&&this.isScrolling&&this._scrollToOffset(this.scrollOffset,{adjustments:this.scrollAdjustments+=r,behavior:void 0,sync:!1}),this.pendingMeasuredCacheIndexes.push(s),this.itemMeasurementsCache={...this.itemMeasurementsCache,[n.key]:o},this.notify())},this.measureElement=e=>{e&&this._measureElement(e,!0)},this.getVirtualItems=t((()=>[this.getIndexes(),this.getMeasurements()]),((e,t)=>{const s=[];for(let n=0,i=e.length;n<i;n++){const i=t[e[n]];s.push(i)}return s}),{key:!1,debug:()=>this.options.debug}),this.scrollToOffset=function(e,t){let{align:s="start",behavior:n}=void 0===t?{}:t;const l=i.scrollOffset,o=i.getSize();"auto"===s&&(s=e<=l?"start":e>=l+o?"end":"start");const r={adjustments:void 0,behavior:n,sync:!1};"start"===s?i._scrollToOffset(e,r):"end"===s?i._scrollToOffset(e-o,r):"center"===s&&i._scrollToOffset(e-o/2,r)},this.scrollToIndex=function(e,t){let{align:s="auto",...n}=void 0===t?{}:t;i.pendingScrollToIndexCallback=null;const l=i.getMeasurements(),o=i.scrollOffset,r=i.getSize(),{count:a}=i.options,h=l[Math.max(0,Math.min(e,a-1))];if(!h)return;if("auto"===s)if(h.end>=o+r-i.options.scrollPaddingEnd)s="end";else{if(!(h.start<=o+i.options.scrollPaddingStart))return;s="start"}const c="end"===s?h.end+i.options.scrollPaddingEnd:h.start-i.options.scrollPaddingStart;i.scrollToOffset(c,{align:s,...n});if(Object.keys(i.measureElementCache).length>0){const t=()=>"number"==typeof i.itemMeasurementsCache[i.options.getItemKey(e)];t()||(i.pendingScrollToIndexCallback=()=>{t()&&(i.pendingScrollToIndexCallback=null,i.scrollToIndex(e,{align:s,...n}))})}},this.getTotalSize=()=>{var e;return((null==(e=this.getMeasurements()[this.options.count-1])?void 0:e.end)||this.options.paddingStart)+this.options.paddingEnd},this._scrollToOffset=(e,t)=>{let{adjustments:s,behavior:n,sync:i}=t;this.options.scrollToFn(e,{behavior:n,sync:i,adjustments:s},this)},this.measure=()=>{this.itemMeasurementsCache={},this.notify()},this.setOptions(e),this.scrollRect=this.options.initialRect,this.scrollOffset=this.options.initialOffset,this.calculateRange()}},e.defaultKeyExtractor=s,e.defaultRangeExtractor=n,e.elementScroll=(e,t,s)=>{var n;let{adjustments:i,behavior:l,sync:o}=t;const r=(o?e:e+s.options.scrollMargin)+(i??0);null==(n=s.scrollElement)||null==n.scrollTo||n.scrollTo({[s.options.horizontal?"left":"top"]:r,behavior:l})},e.measureElement=a,e.memo=t,e.observeElementOffset=o,e.observeElementRect=(e,t)=>{const s=new ResizeObserver((e=>{var s,n;t({width:null==(s=e[0])?void 0:s.contentRect.width,height:null==(n=e[0])?void 0:n.contentRect.height})}));if(e.scrollElement)return t(e.scrollElement.getBoundingClientRect()),s.observe(e.scrollElement),()=>{s.unobserve(e.scrollElement)}},e.observeWindowOffset=r,e.observeWindowRect=(e,t)=>{const s=((e,t)=>{let s={height:-1,width:-1};return n=>{(e.options.horizontal?n.width!==s.width:n.height!==s.height)&&t(n),s=n}})(e,t),n=()=>s({width:e.scrollElement.innerWidth,height:e.scrollElement.innerHeight});if(e.scrollElement)return n(),e.scrollElement.addEventListener("resize",n,{capture:!1,passive:!0}),()=>{e.scrollElement.removeEventListener("resize",n)}},e.windowScroll=(e,t,s)=>{var n;let{adjustments:i,behavior:l,sync:o}=t;const r=(o?e:e+s.options.scrollMargin)+(i??0);null==(n=s.scrollElement)||null==n.scrollTo||n.scrollTo({[s.options.horizontal?"left":"top"]:r,behavior:l})},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 return () => {\n this.getResizeObserver()?.disconnect()\n this.measureElementCache = {}\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 if (this.scrollOffset !== offset) {\n this.scrollOffset = offset\n this.isScrolling = true\n this.scrollAdjustments = 0\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n\n this.notify()\n }, this.options.scrollingDelay)\n } else {\n this.isScrolling = false\n this.scrollAdjustments = 0\n }\n\n this.calculateRange()\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","_this$getResizeObserv","disconnect","_willUpdate","_this$pendingScrollTo","getScrollElement","_scrollToOffset","scrollOffset","adjustments","undefined","behavior","sync","observeElementRect","rect","scrollRect","calculateRange","clearTimeout","setTimeout","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","process","outerSize","_ref5","low","high","getCurrentValue","middle","currentValue","findNearestBinarySearch","getIndexes","indexFromElement","node","attributeName","indexStr","getAttribute","parseInt","warn","_sync","item","prevNode","ro","isConnected","unobserve","observe","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 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 if (this.scrollOffset !== offset) {\n this.scrollOffset = offset\n this.isScrolling = true\n this.scrollAdjustments = 0\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n\n this.notify()\n }, this.options.scrollingDelay)\n } else {\n this.isScrolling = false\n this.scrollAdjustments = 0\n }\n\n this.calculateRange()\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","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":";;;;;;;;;;mPAIO,SAASA,EACdC,EACAC,EACAC,GAMA,IACIC,EADAC,EAAc,GAGlB,MAAO,KACL,IAAIC,EACAH,EAAKI,KAAOJ,MAAAA,EAAKK,OAALL,EAAKK,UAAWF,EAAUG,KAAKC,OAE/C,MAAMC,EAAUV,IAMhB,KAHEU,EAAQC,SAAWP,EAAKO,QACxBD,EAAQE,MAAK,CAACC,EAAUC,IAAkBV,EAAKU,KAAWD,KAG1D,OAAOV,EAKT,IAAIY,EAMJ,GARAX,EAAOM,EAGHR,EAAKI,KAAOJ,MAAAA,EAAKK,OAALL,EAAKK,UAAWQ,EAAaP,KAAKC,OAElDN,EAASF,KAAMS,GACX,MAAJR,GAAc,MAAdA,EAAMc,UAANd,EAAMc,SAAWb,GAEbD,EAAKI,KAAiB,MAAVJ,EAAKK,OAALL,EAAKK,QAAW,CAC9B,MAAMU,EAAaC,KAAKC,MAAgC,KAAzBX,KAAKC,MAAQJ,IAAmB,IACzDe,EAAgBF,KAAKC,MAAmC,KAA5BX,KAAKC,MAAQM,IAAsB,IAC/DM,EAAsBD,EAAgB,GAEtCE,EAAM,CAACC,EAAsBC,KAEjC,IADAD,EAAME,OAAOF,GACNA,EAAIZ,OAASa,GAClBD,EAAM,IAAMA,EAEd,OAAOA,CAAG,EAGZG,QAAQC,KACL,OAAML,EAAIF,EAAe,OAAOE,EAAIL,EAAY,QAChD,2FAGgBC,KAAKU,IAChB,EACAV,KAAKW,IAAI,IAAM,IAAMR,EAAqB,sBAEhDnB,MAAAA,OAAAA,EAAAA,EAAMI,IAEV,CAEA,OAAOH,CAAM,CAEjB,CCvBa2B,MAAAA,EAAuBhB,GAAkBA,EAEzCiB,EAAyBC,IACpC,MAAMC,EAAQf,KAAKU,IAAII,EAAME,WAAaF,EAAMG,SAAU,GACpDC,EAAMlB,KAAKW,IAAIG,EAAMK,SAAWL,EAAMG,SAAUH,EAAMM,MAAQ,GAE9DC,EAAM,GAEZ,IAAK,IAAIC,EAAIP,EAAOO,GAAKJ,EAAKI,IAC5BD,EAAIE,KAAKD,GAGX,OAAOD,CAAG,EA2ENG,EAAc,CAClBC,QAAS,CAAC,aAAc,aACxBC,OAAQ,CAAC,UAAW,YAGhBC,EAAwBC,GACrB,CAACC,EAAiCC,KACvC,IAAKD,EAASE,cACZ,OAGF,MAAMC,EAAQR,EAAYI,GAAM,GAC1BK,EAAQT,EAAYI,GAAM,GAEhC,IAAIM,EAAgBL,EAASE,cAAcC,GACvCG,EAAgBN,EAASE,cAAcE,GAE3C,MAAMG,EAAS,KACb,MAAMC,EACJR,EAASE,cAAcF,EAASS,QAAQC,WAAaP,EAAQC,GAE/DH,EAAG9B,KAAKU,IAAI,EAAG2B,EAASR,EAASS,QAAQE,cAAc,EAGzDJ,IAEA,MAAMK,EAAYC,IAChB,MAAMC,EAASD,EAAEE,cACXC,EAAUF,EAAOX,GACjBc,EAAUH,EAAOV,IAEnBJ,EAASS,QAAQC,WAAaL,EAAQW,EAAUV,EAAQW,IAC1DV,IAGFF,EAAQW,EACRV,EAAQW,CAAO,EAQjB,OALAjB,EAASE,cAAcgB,iBAAiB,SAAUN,EAAU,CAC1DO,SAAS,EACTC,SAAS,IAGJ,KACLpB,EAASE,cAAcmB,oBAAoB,SAAUT,EAAS,CAC/D,EAIQU,EAAuBxB,EAAqB,WAC5CyB,EAAsBzB,EAAqB,UAE3C0B,EAAiB,CAC5B5B,EACAI,IAEO7B,KAAKC,MACVwB,EAAQ6B,wBACNzB,EAASS,QAAQC,WAAa,QAAU,yBAyFvC,MAuCLgB,YAAYvE,GAAwD,IAAAwE,EAAAC,KAAAA,KAnC5DC,OAAkC,GAAED,KAE5C1B,cAAuC,KAAI0B,KAC3CE,aAAuB,EAAKF,KACpBG,qBAA6D,KAAIH,KACzEI,kBAAmC,GAAEJ,KAC7BK,sBAA6C,GAAEL,KAC/CM,4BAAwC,GAAEN,KAG1CO,kBAA4B,EAACP,KAC7BQ,oBAAiD,GAAER,KACnDS,6BAAoD,KAAIT,KACxDU,kBAAoB,MAC1B,IAAIC,EAA6B,KAEjC,MAAO,IACDA,IAEiC,oBAAnBC,eACRD,EAAM,IAAIC,gBAAgBC,IAChCA,EAAQC,SAASC,IACff,KAAKgB,gBAAgBD,EAAM7B,QAAwB,EAAM,GACzD,IAGG,KAGZ,EAhB2B,GAgBxBc,KACJ3C,MAAkD,CAChDE,WAAY,EACZG,SAAU,GACXsC,KAUDiB,WAAc1F,IACZ2F,OAAOL,QAAQtF,GAAMuF,SAAQK,IAAkB,IAAhBxF,EAAKyF,GAAMD,OACnB,IAAVC,UAA+B7F,EAAaI,EAAI,IAG7DqE,KAAKnB,QAAU,CACbjD,OAAO,EACPyF,cAAe,EACf7D,SAAU,EACV8D,aAAc,EACdC,WAAY,EACZC,mBAAoB,EACpBC,iBAAkB,EAClB3C,YAAY,EACZ4C,WAAYvE,EACZwE,eAAgBvE,EAChBf,SAAU,OACVuD,iBACAgC,YAAa,CAAEC,MAAO,EAAGC,OAAQ,GACjC/C,aAAc,EACdgD,eAAgB,IAChBC,eAAgB,gBACbzG,EACJ,EACFyE,KAEOiC,OAAS,KAAM,IAAAC,EAAAC,EACrB,OAAAD,GAAAC,EAAAnC,KAAKnB,SAAQxC,WAAb6F,EAAAE,KAAAD,EAAwBnC,KAAK,EAC9BA,KAEOqC,QAAU,KAChBrC,KAAKC,OAAOqC,OAAOC,SAASzB,SAAS0B,GAAMA,MAC3CxC,KAAKC,OAAS,GACdD,KAAK1B,cAAgB,IAAI,EAC1B0B,KAEDyC,UAAY,KACV,MAAMC,EAAK1C,KAAKU,oBAGhB,OAFAQ,OAAOyB,OAAO3C,KAAKQ,qBAAqBM,SAAS8B,SAASF,SAAAA,EAAIG,QAAQD,KAE/D,KACLF,MAAAA,GAAAA,EAAII,aAEJ9C,KAAKqC,SAAS,CACf,EACFrC,KAED+C,YAAc,KAAM,IAAAC,EAClB,OAAAA,EAAAhD,KAAKS,+BAALuC,EAAAZ,KAAApC,MAEA,MAAM1B,EAAgB0B,KAAKnB,QAAQoE,mBAE/BjD,KAAK1B,gBAAkBA,GACzB0B,KAAKqC,UAELrC,KAAK1B,cAAgBA,EAErB0B,KAAKkD,gBAAgBlD,KAAKmD,aAAc,CACtCC,iBAAaC,EACbC,cAAUD,EACVE,MAAM,IAGRvD,KAAKC,OAAOnC,KACVkC,KAAKnB,QAAQ2E,mBAAmBxD,MAAOyD,IACrCzD,KAAK0D,WAAaD,EAClBzD,KAAK2D,gBAAgB,KAIzB3D,KAAKC,OAAOnC,KACVkC,KAAKnB,QAAQa,qBAAqBM,MAAOpB,IACL,OAA9BoB,KAAKG,uBACPyD,aAAa5D,KAAKG,sBAClBH,KAAKG,qBAAuB,MAG1BH,KAAKmD,eAAiBvE,GACxBoB,KAAKmD,aAAevE,EACpBoB,KAAKE,aAAc,EACnBF,KAAKO,kBAAoB,EAEzBP,KAAKG,qBAAuB0D,YAAW,KACrC7D,KAAKG,qBAAuB,KAC5BH,KAAKE,aAAc,EAEnBF,KAAKiC,QAAQ,GACZjC,KAAKnB,QAAQkD,kBAEhB/B,KAAKE,aAAc,EACnBF,KAAKO,kBAAoB,GAG3BP,KAAK2D,gBAAgB,MAGf3D,KAAKE,aACfF,KAAK2D,gBACP,EACD3D,KAEO8D,QAAU,IACT9D,KAAK0D,WAAW1D,KAAKnB,QAAQC,WAAa,QAAU,UAC5DkB,KAEO+D,gBAAkB3I,GACxB,IAAM,CACJ4E,KAAKnB,QAAQlB,MACbqC,KAAKnB,QAAQyC,aACbtB,KAAKnB,QAAQ6C,WACb1B,KAAKK,yBAEP,CAAC1C,EAAO2D,EAAcI,EAAYtB,KAChC,MAAMlD,EACJ8C,KAAKM,4BAA4BtE,OAAS,EACtCO,KAAKW,OAAO8C,KAAKM,6BACjB,EACNN,KAAKM,4BAA8B,GAEnC,MAAM0D,EAAehE,KAAKI,kBAAkB6D,MAAM,EAAG/G,GAErD,IAAK,IAAIW,EAAIX,EAAKW,EAAIF,EAAOE,IAAK,CAChC,MAAMlC,EAAM+F,EAAW7D,GACjBqG,EAAe9D,EAAkBzE,GACjC2B,EAAQ0G,EAAanG,EAAI,GAC3BmG,EAAanG,EAAI,GAAIJ,IACrB6D,EACE6C,EACoB,iBAAjBD,EACHA,EACAlE,KAAKnB,QAAQuF,aAAavG,GAC1BJ,EAAMH,EAAQ6G,EACpBH,EAAanG,GAAK,CAAE1B,MAAO0B,EAAGP,QAAO6G,OAAM1G,MAAK9B,MAClD,CAGA,OADAqE,KAAKI,kBAAoB4D,EAClBA,CAAY,GAErB,CACErI,KAAK0I,EACLzI,MAAO,IAAMoE,KAAKnB,QAAQjD,QAE7BoE,KAED2D,eAAiBvI,GACf,IAAM,CAAC4E,KAAK+D,kBAAmB/D,KAAK8D,UAAW9D,KAAKmD,gBACpD,CAACa,EAAcM,EAAWnB,KACxB,MAAM9F,EAmRZ,SAQGkH,GAAA,IARqBP,aACtBA,EAAYM,UACZA,EAASnB,aACTA,GAKDoB,EACC,MAAM5G,EAAQqG,EAAahI,OAAS,EAG9BuB,EAtCwB,EAC9BiH,EACAC,EACAC,EACAtD,KAEA,KAAOoD,GAAOC,GAAM,CAClB,MAAME,GAAWH,EAAMC,GAAQ,EAAK,EAC9BG,EAAeF,EAAgBC,GAErC,GAAIC,EAAexD,EACjBoD,EAAMG,EAAS,MACV,MAAIC,EAAexD,GAGxB,OAAOuD,EAFPF,EAAOE,EAAS,CAGlB,CACF,CAEA,OAAIH,EAAM,EACDA,EAAM,EAEN,CACT,EAemBK,CAAwB,EAAGlH,GAF3BxB,GAAkB6H,EAAa7H,GAAQmB,OAEM6F,GAChE,IAAIzF,EAAWH,EAEf,KACEG,EAAWC,GACXqG,EAAatG,GAAWD,IAAM0F,EAAemB,GAE7C5G,IAGF,MAAO,CAAEH,aAAYG,WACvB,CA1SoBiG,CAAe,CAC3BK,eACAM,YACAnB,iBASF,OANE9F,EAAME,aAAeyC,KAAK3C,MAAME,YAChCF,EAAMK,WAAasC,KAAK3C,MAAMK,WAE9BsC,KAAK3C,MAAQA,EACb2C,KAAKiC,UAEAjC,KAAK3C,KAAK,GAEnB,CACE1B,KAAK0I,EACLzI,MAAO,IAAMoE,KAAKnB,QAAQjD,QAE7BoE,KAEO8E,WAAa1J,GACnB,IAAM,CACJ4E,KAAKnB,QAAQ8C,eACb3B,KAAK3C,MACL2C,KAAKnB,QAAQrB,SACbwC,KAAKnB,QAAQlB,SAEf,CAACgE,EAAgBtE,EAAOG,EAAUG,IACzBgE,EAAe,IACjBtE,EACHG,WACAG,MAAOA,KAGX,CACEhC,KAAK0I,EACLzI,MAAO,IAAMoE,KAAKnB,QAAQjD,QAE7BoE,KAED+E,iBAAoBnC,IAClB,MAAMoC,EAAgBhF,KAAKnB,QAAQmD,eAC7BiD,EAAWrC,EAAKsC,aAAaF,GAEnC,OAAKC,EAOEE,SAASF,EAAU,KANxBlI,QAAQqI,KACL,2BAA0BJ,oCAErB,EAGmB,EAC9BhF,KAEOgB,gBAAkB,CAAC4B,EAAoByC,KAC7C,MAAMlJ,EAAQ6D,KAAK+E,iBAAiBnC,GAE9B0C,EAAOtF,KAAKI,kBAAkBjE,GACpC,IAAKmJ,EACH,OAGF,MAAMC,EAAWvF,KAAKQ,oBAAoB8E,EAAK3J,KAEzC+G,EAAK1C,KAAKU,oBAEhB,IAAKkC,EAAK4C,YAKR,YAJID,UACF7C,GAAAA,EAAI+C,UAAUF,UACPvF,KAAKQ,oBAAoB8E,EAAK3J,OAKpC4J,GAAYA,IAAa3C,IACxB2C,UACF7C,GAAAA,EAAI+C,UAAUF,IAEhBvF,KAAKQ,oBAAoB8E,EAAK3J,KAAOiH,QACrCF,GAAAA,EAAIG,QAAQD,IAGd,MAAM8C,EAAmB1F,KAAKnB,QAAQe,eAAegD,EAAM5C,MAIrD2F,EAAQD,GAFG1F,KAAKK,sBAAsBiF,EAAK3J,MAAQ2J,EAAKnB,MAIhD,IAAVwB,IACEL,EAAKhI,MAAQ0C,KAAKmD,cAAgBnD,KAAKE,aAKzCF,KAAKkD,gBAAgBlD,KAAKmD,aAAc,CACtCC,YAAcpD,KAAKO,mBAAqBoF,EACxCrC,cAAUD,EACVE,MAAM,IAIVvD,KAAKM,4BAA4BxC,KAAK3B,GACtC6D,KAAKK,sBAAwB,IACxBL,KAAKK,sBACR,CAACiF,EAAK3J,KAAM+J,GAEd1F,KAAKiC,SACP,EACDjC,KAEDJ,eAAkBgD,IACXA,GAIL5C,KAAKgB,gBAAgB4B,GAAM,EAAK,EACjC5C,KAED4F,gBAAkBxK,GAChB,IAAM,CAAC4E,KAAK8E,aAAc9E,KAAK+D,qBAC/B,CAAC8B,EAAS7B,KACR,MAAM8B,EAA8B,GAEpC,IAAK,IAAIC,EAAI,EAAGC,EAAMH,EAAQ7J,OAAQ+J,EAAIC,EAAKD,IAAK,CAClD,MACME,EAAcjC,EADV6B,EAAQE,IAGlBD,EAAahI,KAAKmI,EACpB,CAEA,OAAOH,CAAY,GAErB,CACEnK,KAAK0I,EACLzI,MAAO,IAAMoE,KAAKnB,QAAQjD,QAE7BoE,KAEDkG,eAAiB,SACfC,EAEGC,GAAA,IADHC,MAAEA,EAAQ,QAAO/C,SAAEA,QAAiC,IAAA8C,EAAG,CAAA,EAAEA,EAEzD,MAAMxH,EAASmB,EAAKoD,aACdgB,EAAOpE,EAAK+D,UAEJ,SAAVuC,IAEAA,EADEF,GAAYvH,EACN,QACCuH,GAAYvH,EAASuF,EACtB,MAEA,SAIZ,MAAMtF,EAAU,CACduE,iBAAaC,EACbC,WACAC,MAAM,GAEM,UAAV8C,EACFtG,EAAKmD,gBAAgBiD,EAAUtH,GACZ,QAAVwH,EACTtG,EAAKmD,gBAAgBiD,EAAWhC,EAAMtF,GACnB,WAAVwH,GACTtG,EAAKmD,gBAAgBiD,EAAWhC,EAAO,EAAGtF,IAE7CmB,KAEDsG,cAAgB,SACdnK,EAEGoK,GAAA,IADHF,MAAEA,EAAQ,UAAWG,QAA4B,IAAAD,EAAG,CAAA,EAAEA,EAEtDxG,EAAKU,6BAA+B,KAEpC,MAAMuD,EAAejE,EAAKgE,kBACpBnF,EAASmB,EAAKoD,aACdgB,EAAOpE,EAAK+D,WACZnG,MAAEA,GAAUoC,EAAKlB,QAEjBoH,EAAcjC,EAAazH,KAAKU,IAAI,EAAGV,KAAKW,IAAIf,EAAOwB,EAAQ,KAErE,IAAKsI,EACH,OAGF,GAAc,SAAVI,EACF,GAAIJ,EAAYxI,KAAOmB,EAASuF,EAAOpE,EAAKlB,QAAQ4C,iBAClD4E,EAAQ,UACH,MACLJ,EAAY3I,OACZsB,EAASmB,EAAKlB,QAAQ2C,oBAItB,OAFA6E,EAAQ,OAGV,CAGF,MAAMF,EACM,QAAVE,EACIJ,EAAYxI,IAAMsC,EAAKlB,QAAQ4C,iBAC/BwE,EAAY3I,MAAQyC,EAAKlB,QAAQ2C,mBAEvCzB,EAAKmG,eAAeC,EAAU,CAAEE,WAAUG,IAI1C,GAFkBtF,OAAOuF,KAAK1G,EAAKS,qBAAqBxE,OAAS,EAElD,CACb,MAAM0K,EAAU,IAEd,iBADO3G,EAAKM,sBAAsBN,EAAKlB,QAAQ6C,WAAWvF,IAGvDuK,MACH3G,EAAKU,6BAA+B,KAC9BiG,MACF3G,EAAKU,6BAA+B,KACpCV,EAAKuG,cAAcnK,EAAO,CAAEkK,WAAUG,IACxC,EAGN,GACDxG,KAED2G,aAAe,KAAA,IAAAC,EAAA,QACZ,OAAAA,EAAA5G,KAAK+D,kBAAkB/D,KAAKnB,QAAQlB,MAAQ,SAA5C,EAAAiJ,EAAgDnJ,MAC/CuC,KAAKnB,QAAQyC,cAAgBtB,KAAKnB,QAAQ0C,UAAU,EAAAvB,KAEhDkD,gBAAkB,CACxBtE,EAUGiI,KAAA,IATHzD,YACEA,EAAWE,SACXA,EAAQC,KACRA,GAKDsD,EAED7G,KAAKnB,QAAQiI,WAAWlI,EAAQ,CAAE0E,WAAUC,OAAMH,eAAepD,KAAK,EACvEA,KAED+G,QAAU,KACR/G,KAAKK,sBAAwB,GAC7BL,KAAKiC,QAAQ,EA/YbjC,KAAKiB,WAAW1F,GAChByE,KAAK0D,WAAa1D,KAAKnB,QAAQ+C,YAC/B5B,KAAKmD,aAAenD,KAAKnB,QAAQwC,cAEjCrB,KAAK2D,gBACP,qEA9G2B,CAC3B/E,EAAcoI,EAMd5I,KACG,IAAA6I,EAAA,IANH7D,YACEA,EAAWE,SACXA,EAAQC,KACRA,GACmEyD,EAGrE,MAAMb,GACH5C,EAAO3E,EAASA,EAASR,EAASS,QAAQE,eAC1CqE,GAAe,GAEI,OAAtBhF,EAAAA,EAASE,gBAAuB,MAAhC2I,EAAwBC,UAAxBD,EAAwBC,SAAW,CACjC,CAAC9I,EAASS,QAAQC,WAAa,OAAS,OAAQqH,EAChD7C,YACA,4EAxJ8B,CAChClF,EACAC,KAEA,MAAM8I,EAAW,IAAIvG,gBAAgBC,IAAY,IAAAuG,EAAAC,EAC/ChJ,EAAG,CACDwD,MAAO,OAAFuF,EAAEvG,EAAQ,SAAR,EAAAuG,EAAYE,YAAYzF,MAC/BC,OAAQ,OAAFuF,EAAExG,EAAQ,SAAR,EAAAwG,EAAYC,YAAYxF,QAChC,IAGJ,GAAK1D,EAASE,cAQd,OAJAD,EAAGD,EAASE,cAAcuB,yBAE1BsH,EAAStE,QAAQzE,EAASE,eAEnB,KACL6I,EAAS1B,UAAUrH,EAASE,cAAc,CAC3C,8CAG8B,CAC/BF,EACAC,KAEA,MAAMkJ,EA/CiB,EACvBnJ,EACAC,KAEA,IAAImJ,EAAa,CAAE1F,QAAS,EAAGD,OAAQ,GAEvC,OAAQ4B,KAEJrF,EAASS,QAAQC,WACb2E,EAAK5B,QAAU2F,EAAK3F,MACpB4B,EAAK3B,SAAW0F,EAAK1F,SAEzBzD,EAAGoF,GAGL+D,EAAO/D,CAAI,CACZ,EA+BwBgE,CAAiBrJ,EAAUC,GAC9CqJ,EAAW,IACfH,EAAiB,CACf1F,MAAOzD,EAASE,cAAcqJ,WAC9B7F,OAAQ1D,EAASE,cAAcsJ,cAGnC,GAAKxJ,EAASE,cAWd,OAPAoJ,IAEAtJ,EAASE,cAAcgB,iBAAiB,SAAUoI,EAAU,CAC1DnI,SAAS,EACTC,SAAS,IAGJ,KACLpB,EAASE,cAAcmB,oBAAoB,SAAUiI,EAAS,CAC/D,iBAqEyB,CAC1B9I,EAAciJ,EAMdzJ,KACG,IAAA0J,EAAA,IANH1E,YACEA,EAAWE,SACXA,EAAQC,KACRA,GACmEsE,EAGrE,MAAM1B,GACH5C,EAAO3E,EAASA,EAASR,EAASS,QAAQE,eAC1CqE,GAAe,GAEI,OAAtBhF,EAAAA,EAASE,gBAAuB,MAAhCwJ,EAAwBZ,UAAxBY,EAAwBZ,SAAW,CACjC,CAAC9I,EAASS,QAAQC,WAAa,OAAS,OAAQqH,EAChD7C,YACA"}
|
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.29",
|
|
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",
|
package/src/index.ts
CHANGED
|
@@ -360,9 +360,11 @@ export class Virtualizer<
|
|
|
360
360
|
}
|
|
361
361
|
|
|
362
362
|
_didMount = () => {
|
|
363
|
+
const ro = this.getResizeObserver()
|
|
364
|
+
Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))
|
|
365
|
+
|
|
363
366
|
return () => {
|
|
364
|
-
|
|
365
|
-
this.measureElementCache = {}
|
|
367
|
+
ro?.disconnect()
|
|
366
368
|
|
|
367
369
|
this.cleanup()
|
|
368
370
|
}
|