@tanstack/virtual-core 3.0.0-beta.19 → 3.0.0-beta.20
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/cjs/index.js +33 -11
- package/build/cjs/index.js.map +1 -1
- package/build/esm/index.js +33 -11
- package/build/esm/index.js.map +1 -1
- package/build/stats.html +1 -1
- package/build/stats.json +14 -14
- package/build/types/index.d.ts +2 -1
- package/build/umd/index.development.js +33 -11
- 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 +29 -14
package/build/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.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\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n smoothScroll?: boolean\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\ninterface Item {\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\nexport interface VirtualItem<TItemElement> extends Item {\n measureElement: (el: TItemElement | null) => void\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 = (\n element: unknown,\n instance: Virtualizer<any, any>,\n) => {\n return (element as Element).getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ]\n}\n\nexport const windowScroll = (\n offset: number,\n { canSmooth, sync }: { canSmooth: boolean; sync: boolean },\n instance: Virtualizer<any, any>,\n) => {\n const toOffset = sync ? offset : offset + instance.options.scrollMargin\n\n ;(instance.scrollElement as Window)?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior: canSmooth ? 'smooth' : undefined,\n })\n}\n\nexport const elementScroll = (\n offset: number,\n { canSmooth, sync }: { canSmooth: boolean; sync: boolean },\n instance: Virtualizer<any, any>,\n) => {\n const toOffset = sync ? offset : offset + instance.options.scrollMargin\n\n ;(instance.scrollElement as Element)?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior: canSmooth ? 'smooth' : undefined,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement = unknown,\n TItemElement = unknown,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { canSmooth: boolean; 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 enableSmoothScroll?: boolean\n scrollMargin?: number\n scrollingDelay?: number\n}\n\nexport class Virtualizer<TScrollElement = unknown, TItemElement = unknown> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private measurementsCache: Item[] = []\n private itemMeasurementsCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n private scrollOffset: number\n private destinationOffset: undefined | number\n private scrollCheckFrame!: ReturnType<typeof setTimeout>\n private measureElementCache: Record<\n number,\n (measurableItem: TItemElement | null) => void\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 enableSmoothScroll: true,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\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.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n this._scrollToOffset(this.scrollOffset, {\n canSmooth: false,\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.isScrolling = true\n this.scrollOffset = offset\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 }\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 getVirtualItems = memo(\n () => [\n this.getIndexes(),\n this.getMeasurements(),\n this.options.measureElement,\n ],\n (indexes, measurements, measureElement) => {\n const makeMeasureElement =\n (index: number) => (measurableItem: TItemElement | null) => {\n const item = this.measurementsCache[index]!\n\n if (!measurableItem) {\n return\n }\n\n const measuredItemSize = measureElement(measurableItem, this)\n const itemSize = this.itemMeasurementsCache[item.key] ?? item.size\n\n if (measuredItemSize !== itemSize) {\n if (item.start < this.scrollOffset) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', measuredItemSize - itemSize)\n }\n\n if (!this.destinationOffset) {\n this._scrollToOffset(\n this.scrollOffset + (measuredItemSize - itemSize),\n {\n canSmooth: false,\n sync: false,\n },\n )\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 const virtualItems: VirtualItem<TItemElement>[] = []\n\n const currentMeasureElements: typeof this.measureElementCache = {}\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n const item = {\n ...measurement,\n measureElement: (currentMeasureElements[i] =\n this.measureElementCache[i] ?? makeMeasureElement(i)),\n }\n virtualItems.push(item)\n }\n\n this.measureElementCache = currentMeasureElements\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 {\n align = 'start',\n smoothScroll = this.options.enableSmoothScroll,\n }: 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 canSmooth: smoothScroll,\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 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\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 options: { canSmooth: boolean; sync: boolean },\n ) => {\n clearTimeout(this.scrollCheckFrame)\n\n this.destinationOffset = offset\n this.options.scrollToFn(offset, options, this)\n\n let scrollCheckFrame: ReturnType<typeof setTimeout>\n\n const check = () => {\n let lastOffset = this.scrollOffset\n this.scrollCheckFrame = scrollCheckFrame = setTimeout(() => {\n if (this.scrollCheckFrame !== scrollCheckFrame) {\n return\n }\n\n if (this.scrollOffset === lastOffset) {\n this.destinationOffset = undefined\n return\n }\n lastOffset = this.scrollOffset\n check()\n }, 100)\n }\n\n check()\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: Item[]\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","canSmooth","sync","toOffset","scrollTo","behavior","undefined","elementScroll","Virtualizer","constructor","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemMeasurementsCache","pendingMeasuredCacheIndexes","measureElementCache","setOptions","Object","forEach","value","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","enableSmoothScroll","initialRect","scrollingDelay","notify","cleanup","filter","Boolean","d","_didMount","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","scrollRect","calculateRange","clearTimeout","setTimeout","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","process","env","NODE_ENV","outerSize","getIndexes","getVirtualItems","indexes","makeMeasureElement","measurableItem","item","measuredItemSize","itemSize","destinationOffset","virtualItems","currentMeasureElements","k","len","measurement","scrollToOffset","align","smoothScroll","scrollToIndex","rest","getTotalSize","scrollCheckFrame","scrollToFn","check","lastOffset","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.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\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n smoothScroll?: boolean\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\ninterface Item {\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\nexport interface VirtualItem<TItemElement> extends Item {\n measureElement: (el: TItemElement | null) => void\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 = (\n element: unknown,\n instance: Virtualizer<any, any>,\n) => {\n return (element as Element).getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ]\n}\n\nexport const windowScroll = (\n offset: number,\n { canSmooth, sync }: { canSmooth: boolean; sync: boolean },\n instance: Virtualizer<any, any>,\n) => {\n const toOffset = sync ? offset : offset + instance.options.scrollMargin\n\n ;(instance.scrollElement as Window)?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior: canSmooth ? 'smooth' : undefined,\n })\n}\n\nexport const elementScroll = (\n offset: number,\n { canSmooth, sync }: { canSmooth: boolean; sync: boolean },\n instance: Virtualizer<any, any>,\n) => {\n const toOffset = sync ? offset : offset + instance.options.scrollMargin\n\n ;(instance.scrollElement as Element)?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior: canSmooth ? 'smooth' : undefined,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement = unknown,\n TItemElement = unknown,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { canSmooth: boolean; 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 enableSmoothScroll?: boolean\n scrollMargin?: number\n scrollingDelay?: number\n}\n\nexport class Virtualizer<TScrollElement = unknown, TItemElement = unknown> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private measurementsCache: Item[] = []\n private itemMeasurementsCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n private scrollOffset: number\n private scrollDelta: number = 0\n private destinationOffset: undefined | number\n private scrollCheckFrame!: ReturnType<typeof setTimeout>\n private measureElementCache: Record<\n number,\n (measurableItem: TItemElement | null) => void\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 enableSmoothScroll: true,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\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.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n this._scrollToOffset(this.scrollOffset, {\n canSmooth: false,\n sync: true,\n requested: false,\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.scrollDelta = 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.scrollDelta = 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 getVirtualItems = memo(\n () => [\n this.getIndexes(),\n this.getMeasurements(),\n this.options.measureElement,\n ],\n (indexes, measurements, measureElement) => {\n const makeMeasureElement =\n (index: number) => (measurableItem: TItemElement | null) => {\n const item = this.measurementsCache[index]!\n\n if (!measurableItem) {\n return\n }\n\n const measuredItemSize = measureElement(measurableItem, this)\n const itemSize = this.itemMeasurementsCache[item.key] ?? item.size\n\n if (measuredItemSize !== itemSize) {\n if (item.start < this.scrollOffset) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', measuredItemSize - itemSize)\n }\n\n if (this.destinationOffset === undefined) {\n this.scrollDelta += measuredItemSize - itemSize\n\n this._scrollToOffset(this.scrollOffset + this.scrollDelta, {\n canSmooth: false,\n sync: false,\n requested: false,\n })\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 const virtualItems: VirtualItem<TItemElement>[] = []\n\n const currentMeasureElements: typeof this.measureElementCache = {}\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n const item = {\n ...measurement,\n measureElement: (currentMeasureElements[i] =\n this.measureElementCache[i] ?? makeMeasureElement(i)),\n }\n virtualItems.push(item)\n }\n\n this.measureElementCache = currentMeasureElements\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 {\n align = 'start',\n smoothScroll = this.options.enableSmoothScroll,\n }: 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 canSmooth: smoothScroll,\n sync: false,\n requested: true,\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 {\n align = 'auto',\n smoothScroll = this.options.enableSmoothScroll,\n ...rest\n }: ScrollToIndexOptions = {},\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, smoothScroll, ...rest })\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 requested,\n canSmooth,\n sync,\n }: { canSmooth: boolean; sync: boolean; requested: boolean },\n ) => {\n clearTimeout(this.scrollCheckFrame)\n\n if (requested) {\n this.destinationOffset = offset\n }\n this.options.scrollToFn(offset, { canSmooth, sync }, this)\n\n let scrollCheckFrame: ReturnType<typeof setTimeout>\n\n const check = () => {\n let lastOffset = this.scrollOffset\n this.scrollCheckFrame = scrollCheckFrame = setTimeout(() => {\n if (this.scrollCheckFrame !== scrollCheckFrame) {\n return\n }\n\n if (this.scrollOffset === lastOffset) {\n this.destinationOffset = undefined\n return\n }\n lastOffset = this.scrollOffset\n check()\n }, 100)\n }\n\n check()\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: Item[]\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","canSmooth","sync","toOffset","scrollTo","behavior","undefined","elementScroll","Virtualizer","constructor","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemMeasurementsCache","pendingMeasuredCacheIndexes","scrollDelta","measureElementCache","setOptions","Object","forEach","value","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","enableSmoothScroll","initialRect","scrollingDelay","notify","cleanup","filter","Boolean","d","_didMount","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","requested","scrollRect","calculateRange","clearTimeout","setTimeout","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","process","env","NODE_ENV","outerSize","getIndexes","getVirtualItems","indexes","makeMeasureElement","measurableItem","item","measuredItemSize","itemSize","destinationOffset","virtualItems","currentMeasureElements","k","len","measurement","scrollToOffset","align","smoothScroll","scrollToIndex","rest","getTotalSize","scrollCheckFrame","scrollToFn","check","lastOffset","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
|
package/build/stats.html
CHANGED
|
@@ -2669,7 +2669,7 @@ var drawChart = (function (exports) {
|
|
|
2669
2669
|
</script>
|
|
2670
2670
|
<script>
|
|
2671
2671
|
/*<!--*/
|
|
2672
|
-
const data = {"version":2,"tree":{"name":"root","children":[{"name":"index.production.js","children":[{"name":"packages/virtual-core/src","children":[{"uid":"
|
|
2672
|
+
const data = {"version":2,"tree":{"name":"root","children":[{"name":"index.production.js","children":[{"name":"packages/virtual-core/src","children":[{"uid":"aa12-1","name":"utils.ts"},{"uid":"aa12-3","name":"index.ts"}]}]}],"isRoot":true},"nodeParts":{"aa12-1":{"renderedLength":1432,"gzipLength":544,"brotliLength":0,"mainUid":"aa12-0"},"aa12-3":{"renderedLength":16102,"gzipLength":3547,"brotliLength":0,"mainUid":"aa12-2"}},"nodeMetas":{"aa12-0":{"id":"/packages/virtual-core/src/utils.ts","moduleParts":{"index.production.js":"aa12-1"},"imported":[],"importedBy":[{"uid":"aa12-2"}]},"aa12-2":{"id":"/packages/virtual-core/src/index.ts","moduleParts":{"index.production.js":"aa12-3"},"imported":[{"uid":"aa12-0"}],"importedBy":[],"isEntry":true}},"env":{"rollup":"2.75.4"},"options":{"gzip":true,"brotli":false,"sourcemap":false}};
|
|
2673
2673
|
|
|
2674
2674
|
const run = () => {
|
|
2675
2675
|
const width = window.innerWidth;
|
package/build/stats.json
CHANGED
|
@@ -10,11 +10,11 @@
|
|
|
10
10
|
"name": "packages/virtual-core/src",
|
|
11
11
|
"children": [
|
|
12
12
|
{
|
|
13
|
-
"uid": "
|
|
13
|
+
"uid": "aa12-5",
|
|
14
14
|
"name": "utils.ts"
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
|
-
"uid": "
|
|
17
|
+
"uid": "aa12-7",
|
|
18
18
|
"name": "index.ts"
|
|
19
19
|
}
|
|
20
20
|
]
|
|
@@ -25,40 +25,40 @@
|
|
|
25
25
|
"isRoot": true
|
|
26
26
|
},
|
|
27
27
|
"nodeParts": {
|
|
28
|
-
"
|
|
28
|
+
"aa12-5": {
|
|
29
29
|
"renderedLength": 1432,
|
|
30
30
|
"gzipLength": 544,
|
|
31
31
|
"brotliLength": 0,
|
|
32
|
-
"mainUid": "
|
|
32
|
+
"mainUid": "aa12-4"
|
|
33
33
|
},
|
|
34
|
-
"
|
|
35
|
-
"renderedLength":
|
|
36
|
-
"gzipLength":
|
|
34
|
+
"aa12-7": {
|
|
35
|
+
"renderedLength": 16102,
|
|
36
|
+
"gzipLength": 3547,
|
|
37
37
|
"brotliLength": 0,
|
|
38
|
-
"mainUid": "
|
|
38
|
+
"mainUid": "aa12-6"
|
|
39
39
|
}
|
|
40
40
|
},
|
|
41
41
|
"nodeMetas": {
|
|
42
|
-
"
|
|
42
|
+
"aa12-4": {
|
|
43
43
|
"id": "/packages/virtual-core/src/utils.ts",
|
|
44
44
|
"moduleParts": {
|
|
45
|
-
"index.production.js": "
|
|
45
|
+
"index.production.js": "aa12-5"
|
|
46
46
|
},
|
|
47
47
|
"imported": [],
|
|
48
48
|
"importedBy": [
|
|
49
49
|
{
|
|
50
|
-
"uid": "
|
|
50
|
+
"uid": "aa12-6"
|
|
51
51
|
}
|
|
52
52
|
]
|
|
53
53
|
},
|
|
54
|
-
"
|
|
54
|
+
"aa12-6": {
|
|
55
55
|
"id": "/packages/virtual-core/src/index.ts",
|
|
56
56
|
"moduleParts": {
|
|
57
|
-
"index.production.js": "
|
|
57
|
+
"index.production.js": "aa12-7"
|
|
58
58
|
},
|
|
59
59
|
"imported": [
|
|
60
60
|
{
|
|
61
|
-
"uid": "
|
|
61
|
+
"uid": "aa12-4"
|
|
62
62
|
}
|
|
63
63
|
],
|
|
64
64
|
"importedBy": [],
|
package/build/types/index.d.ts
CHANGED
|
@@ -97,6 +97,7 @@ declare class Virtualizer<TScrollElement = unknown, TItemElement = unknown> {
|
|
|
97
97
|
private pendingMeasuredCacheIndexes;
|
|
98
98
|
private scrollRect;
|
|
99
99
|
private scrollOffset;
|
|
100
|
+
private scrollDelta;
|
|
100
101
|
private destinationOffset;
|
|
101
102
|
private scrollCheckFrame;
|
|
102
103
|
private measureElementCache;
|
|
@@ -119,7 +120,7 @@ declare class Virtualizer<TScrollElement = unknown, TItemElement = unknown> {
|
|
|
119
120
|
private getIndexes;
|
|
120
121
|
getVirtualItems: () => VirtualItem<TItemElement>[];
|
|
121
122
|
scrollToOffset: (toOffset: number, { align, smoothScroll, }?: ScrollToOffsetOptions) => void;
|
|
122
|
-
scrollToIndex: (index: number, { align, ...rest }?: ScrollToIndexOptions) => void;
|
|
123
|
+
scrollToIndex: (index: number, { align, smoothScroll, ...rest }?: ScrollToIndexOptions) => void;
|
|
123
124
|
getTotalSize: () => number;
|
|
124
125
|
private _scrollToOffset;
|
|
125
126
|
measure: () => void;
|
|
@@ -212,6 +212,7 @@
|
|
|
212
212
|
this.measurementsCache = [];
|
|
213
213
|
this.itemMeasurementsCache = {};
|
|
214
214
|
this.pendingMeasuredCacheIndexes = [];
|
|
215
|
+
this.scrollDelta = 0;
|
|
215
216
|
this.measureElementCache = {};
|
|
216
217
|
this.range = {
|
|
217
218
|
startIndex: 0,
|
|
@@ -274,7 +275,8 @@
|
|
|
274
275
|
|
|
275
276
|
this._scrollToOffset(this.scrollOffset, {
|
|
276
277
|
canSmooth: false,
|
|
277
|
-
sync: true
|
|
278
|
+
sync: true,
|
|
279
|
+
requested: false
|
|
278
280
|
});
|
|
279
281
|
|
|
280
282
|
this.unsubs.push(this.options.observeElementRect(this, rect => {
|
|
@@ -288,8 +290,9 @@
|
|
|
288
290
|
}
|
|
289
291
|
|
|
290
292
|
if (this.scrollOffset !== offset) {
|
|
291
|
-
this.isScrolling = true;
|
|
292
293
|
this.scrollOffset = offset;
|
|
294
|
+
this.isScrolling = true;
|
|
295
|
+
this.scrollDelta = 0;
|
|
293
296
|
this.isScrollingTimeoutId = setTimeout(() => {
|
|
294
297
|
this.isScrollingTimeoutId = null;
|
|
295
298
|
this.isScrolling = false;
|
|
@@ -297,6 +300,7 @@
|
|
|
297
300
|
}, this.options.scrollingDelay);
|
|
298
301
|
} else {
|
|
299
302
|
this.isScrolling = false;
|
|
303
|
+
this.scrollDelta = 0;
|
|
300
304
|
}
|
|
301
305
|
|
|
302
306
|
this.calculateRange();
|
|
@@ -381,10 +385,13 @@
|
|
|
381
385
|
console.info('correction', measuredItemSize - itemSize);
|
|
382
386
|
}
|
|
383
387
|
|
|
384
|
-
if (
|
|
385
|
-
this.
|
|
388
|
+
if (this.destinationOffset === undefined) {
|
|
389
|
+
this.scrollDelta += measuredItemSize - itemSize;
|
|
390
|
+
|
|
391
|
+
this._scrollToOffset(this.scrollOffset + this.scrollDelta, {
|
|
386
392
|
canSmooth: false,
|
|
387
|
-
sync: false
|
|
393
|
+
sync: false,
|
|
394
|
+
requested: false
|
|
388
395
|
});
|
|
389
396
|
}
|
|
390
397
|
}
|
|
@@ -439,7 +446,8 @@
|
|
|
439
446
|
|
|
440
447
|
const options = {
|
|
441
448
|
canSmooth: smoothScroll,
|
|
442
|
-
sync: false
|
|
449
|
+
sync: false,
|
|
450
|
+
requested: true
|
|
443
451
|
};
|
|
444
452
|
|
|
445
453
|
if (align === 'start') {
|
|
@@ -454,6 +462,7 @@
|
|
|
454
462
|
this.scrollToIndex = function (index, _temp2) {
|
|
455
463
|
let {
|
|
456
464
|
align = 'auto',
|
|
465
|
+
smoothScroll = _this.options.enableSmoothScroll,
|
|
457
466
|
...rest
|
|
458
467
|
} = _temp2 === void 0 ? {} : _temp2;
|
|
459
468
|
|
|
@@ -486,6 +495,7 @@
|
|
|
486
495
|
|
|
487
496
|
_this.scrollToOffset(toOffset, {
|
|
488
497
|
align,
|
|
498
|
+
smoothScroll,
|
|
489
499
|
...rest
|
|
490
500
|
});
|
|
491
501
|
};
|
|
@@ -496,10 +506,22 @@
|
|
|
496
506
|
return (((_this$getMeasurements = this.getMeasurements()[this.options.count - 1]) == null ? void 0 : _this$getMeasurements.end) || this.options.paddingStart) + this.options.paddingEnd;
|
|
497
507
|
};
|
|
498
508
|
|
|
499
|
-
this._scrollToOffset = (offset,
|
|
509
|
+
this._scrollToOffset = (offset, _ref4) => {
|
|
510
|
+
let {
|
|
511
|
+
requested,
|
|
512
|
+
canSmooth,
|
|
513
|
+
sync
|
|
514
|
+
} = _ref4;
|
|
500
515
|
clearTimeout(this.scrollCheckFrame);
|
|
501
|
-
|
|
502
|
-
|
|
516
|
+
|
|
517
|
+
if (requested) {
|
|
518
|
+
this.destinationOffset = offset;
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
this.options.scrollToFn(offset, {
|
|
522
|
+
canSmooth,
|
|
523
|
+
sync
|
|
524
|
+
}, this);
|
|
503
525
|
let scrollCheckFrame;
|
|
504
526
|
|
|
505
527
|
const check = () => {
|
|
@@ -556,12 +578,12 @@
|
|
|
556
578
|
}
|
|
557
579
|
};
|
|
558
580
|
|
|
559
|
-
function calculateRange(
|
|
581
|
+
function calculateRange(_ref5) {
|
|
560
582
|
let {
|
|
561
583
|
measurements,
|
|
562
584
|
outerSize,
|
|
563
585
|
scrollOffset
|
|
564
|
-
} =
|
|
586
|
+
} = _ref5;
|
|
565
587
|
const count = measurements.length - 1;
|
|
566
588
|
|
|
567
589
|
const getOffset = index => measurements[index].start;
|