@tanstack/virtual-core 3.0.0-beta.21 → 3.0.0-beta.22

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.
@@ -173,11 +173,24 @@ class Virtualizer {
173
173
  this.pendingMeasuredCacheIndexes = [];
174
174
  this.scrollDelta = 0;
175
175
  this.measureElementCache = {};
176
- this.ro = new ResizeObserver(entries => {
177
- entries.forEach(entry => {
178
- this._measureElement(entry.target, false);
179
- });
180
- });
176
+
177
+ this.getResizeObserver = (() => {
178
+ let _ro = null;
179
+ return () => {
180
+ if (_ro) {
181
+ return _ro;
182
+ } else if (typeof ResizeObserver !== 'undefined') {
183
+ return _ro = new ResizeObserver(entries => {
184
+ entries.forEach(entry => {
185
+ this._measureElement(entry.target, false);
186
+ });
187
+ });
188
+ } else {
189
+ return null;
190
+ }
191
+ };
192
+ })();
193
+
181
194
  this.range = {
182
195
  startIndex: 0,
183
196
  endIndex: 0
@@ -227,7 +240,9 @@ class Virtualizer {
227
240
 
228
241
  this._didMount = () => {
229
242
  return () => {
230
- this.ro.disconnect();
243
+ var _this$getResizeObserv;
244
+
245
+ (_this$getResizeObserv = this.getResizeObserver()) == null ? void 0 : _this$getResizeObserv.disconnect();
231
246
  this.measureElementCache = {};
232
247
  this.cleanup();
233
248
  };
@@ -356,13 +371,13 @@ class Virtualizer {
356
371
  return;
357
372
  }
358
373
 
359
- const key = String(item.key);
360
- const prevNode = this.measureElementCache[key];
374
+ const prevNode = this.measureElementCache[item.key];
375
+ const ro = this.getResizeObserver();
361
376
 
362
377
  if (!node.isConnected) {
363
378
  if (prevNode) {
364
- this.ro.unobserve(prevNode);
365
- delete this.measureElementCache[key];
379
+ ro == null ? void 0 : ro.unobserve(prevNode);
380
+ delete this.measureElementCache[item.key];
366
381
  }
367
382
 
368
383
  return;
@@ -370,11 +385,11 @@ class Virtualizer {
370
385
 
371
386
  if (!prevNode || prevNode !== node) {
372
387
  if (prevNode) {
373
- this.ro.unobserve(prevNode);
388
+ ro == null ? void 0 : ro.unobserve(prevNode);
374
389
  }
375
390
 
376
- this.measureElementCache[key] = node;
377
- this.ro.observe(node);
391
+ this.measureElementCache[item.key] = node;
392
+ ro == null ? void 0 : ro.observe(node);
378
393
  }
379
394
 
380
395
  const measuredItemSize = this.options.measureElement(node, this);
@@ -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\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\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 = (\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 extends unknown,\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: { 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 indexAttribute?: string\n}\n\nexport class Virtualizer<\n TScrollElement extends unknown,\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 scrollDelta: number = 0\n private destinationOffset: undefined | number\n private scrollCheckFrame!: ReturnType<typeof setTimeout>\n private measureElementCache: Record<string, TItemElement> = {}\n private ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, false)\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 enableSmoothScroll: true,\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.ro.disconnect()\n this.measureElementCache = {}\n\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 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 _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 const key = String(item.key)\n\n const prevNode = this.measureElementCache[key]\n\n if (!node.isConnected) {\n if (prevNode) {\n this.ro.unobserve(prevNode)\n delete this.measureElementCache[key]\n }\n return\n }\n\n if (!prevNode || prevNode !== node) {\n if (prevNode) {\n this.ro.unobserve(prevNode)\n }\n this.measureElementCache[key] = node\n this.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 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 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 {\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: 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","canSmooth","sync","toOffset","scrollTo","behavior","undefined","elementScroll","Virtualizer","constructor","opts","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemMeasurementsCache","pendingMeasuredCacheIndexes","scrollDelta","measureElementCache","ro","forEach","entry","_measureElement","setOptions","Object","key","value","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","enableSmoothScroll","onChange","initialRect","scrollingDelay","indexAttribute","notify","cleanup","filter","Boolean","d","_didMount","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","requested","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","String","prevNode","isConnected","measuredItemSize","itemSize","info","destinationOffset","getVirtualItems","indexes","virtualItems","k","len","measurement","scrollToOffset","align","smoothScroll","scrollToIndex","rest","getTotalSize","scrollCheckFrame","scrollToFn","check","lastOffset","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":";;;;;;;;;;;;;;;;AAuCA;AAEaA,MAAAA,mBAAmB,GAAIC,KAAD,IAAmBA,MAA/C;AAEMC,MAAAA,qBAAqB,GAAIC,KAAD,IAAkB;AACrD,EAAA,MAAMC,KAAK,GAAGC,IAAI,CAACC,GAAL,CAASH,KAAK,CAACI,UAAN,GAAmBJ,KAAK,CAACK,QAAlC,EAA4C,CAA5C,CAAd,CAAA;AACA,EAAA,MAAMC,GAAG,GAAGJ,IAAI,CAACK,GAAL,CAASP,KAAK,CAACQ,QAAN,GAAiBR,KAAK,CAACK,QAAhC,EAA0CL,KAAK,CAACS,KAAN,GAAc,CAAxD,CAAZ,CAAA;EAEA,MAAMC,GAAG,GAAG,EAAZ,CAAA;;EAEA,KAAK,IAAIC,CAAC,GAAGV,KAAb,EAAoBU,CAAC,IAAIL,GAAzB,EAA8BK,CAAC,EAA/B,EAAmC;IACjCD,GAAG,CAACE,IAAJ,CAASD,CAAT,CAAA,CAAA;AACD,GAAA;;AAED,EAAA,OAAOD,GAAP,CAAA;AACD,EAXM;;AAaP,MAAMG,gBAAgB,GAAG,CACvBC,QADuB,EAEvBC,EAFuB,KAGpB;AACH,EAAA,IAAIC,IAAU,GAAG;IAAEC,MAAM,EAAE,CAAC,CAAX;AAAcC,IAAAA,KAAK,EAAE,CAAC,CAAA;GAAvC,CAAA;AAEA,EAAA,OAAQC,IAAD,IAAgB;IACrB,IACEL,QAAQ,CAACM,OAAT,CAAiBC,UAAjB,GACIF,IAAI,CAACD,KAAL,KAAeF,IAAI,CAACE,KADxB,GAEIC,IAAI,CAACF,MAAL,KAAgBD,IAAI,CAACC,MAH3B,EAIE;MACAF,EAAE,CAACI,IAAD,CAAF,CAAA;AACD,KAAA;;AAEDH,IAAAA,IAAI,GAAGG,IAAP,CAAA;GATF,CAAA;AAWD,CAjBD,CAAA;;MAmBaG,kBAAkB,GAAG,CAChCR,QADgC,EAEhCC,EAFgC,KAG7B;AACH,EAAA,MAAMQ,QAAQ,GAAG,IAAIC,cAAJ,CAAoBC,OAAD,IAAa;AAAA,IAAA,IAAA,SAAA,EAAA,UAAA,CAAA;;AAC/CV,IAAAA,EAAE,CAAC;MACDG,KAAK,EAAA,CAAA,SAAA,GAAEO,OAAO,CAAC,CAAD,CAAT,KAAE,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAYC,WAAZ,CAAwBR,KAD9B;MAEDD,MAAM,EAAA,CAAA,UAAA,GAAEQ,OAAO,CAAC,CAAD,CAAT,KAAE,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAYC,WAAZ,CAAwBT,MAAAA;AAF/B,KAAD,CAAF,CAAA;AAID,GALgB,CAAjB,CAAA;;AAOA,EAAA,IAAI,CAACH,QAAQ,CAACa,aAAd,EAA6B;AAC3B,IAAA,OAAA;AACD,GAAA;;AAEDZ,EAAAA,EAAE,CAACD,QAAQ,CAACa,aAAT,CAAuBC,qBAAvB,EAAD,CAAF,CAAA;AAEAL,EAAAA,QAAQ,CAACM,OAAT,CAAiBf,QAAQ,CAACa,aAA1B,CAAA,CAAA;AAEA,EAAA,OAAO,MAAM;AACXJ,IAAAA,QAAQ,CAACO,SAAT,CAAmBhB,QAAQ,CAACa,aAA5B,CAAA,CAAA;GADF,CAAA;AAGD,EAtBM;MAwBMI,iBAAiB,GAAG,CAC/BjB,QAD+B,EAE/BC,EAF+B,KAG5B;AACH,EAAA,MAAMiB,gBAAgB,GAAGnB,gBAAgB,CAACC,QAAD,EAAWC,EAAX,CAAzC,CAAA;;AACA,EAAA,MAAMkB,QAAQ,GAAG,MACfD,gBAAgB,CAAC;AACfd,IAAAA,KAAK,EAAEJ,QAAQ,CAACa,aAAT,CAAuBO,UADf;AAEfjB,IAAAA,MAAM,EAAEH,QAAQ,CAACa,aAAT,CAAuBQ,WAAAA;AAFhB,GAAD,CADlB,CAAA;;AAMA,EAAA,IAAI,CAACrB,QAAQ,CAACa,aAAd,EAA6B;AAC3B,IAAA,OAAA;AACD,GAAA;;EAEDM,QAAQ,EAAA,CAAA;EAERnB,QAAQ,CAACa,aAAT,CAAuBS,gBAAvB,CAAwC,QAAxC,EAAkDH,QAAlD,EAA4D;AAC1DI,IAAAA,OAAO,EAAE,KADiD;AAE1DC,IAAAA,OAAO,EAAE,IAAA;GAFX,CAAA,CAAA;AAKA,EAAA,OAAO,MAAM;AACXxB,IAAAA,QAAQ,CAACa,aAAT,CAAuBY,mBAAvB,CAA2C,QAA3C,EAAqDN,QAArD,CAAA,CAAA;GADF,CAAA;AAGD,EAzBM;AA6BP,MAAMO,WAAW,GAAG;AAClBC,EAAAA,OAAO,EAAE,CAAC,YAAD,EAAe,WAAf,CADS;AAElBC,EAAAA,MAAM,EAAE,CAAC,SAAD,EAAY,SAAZ,CAAA;AAFU,CAApB,CAAA;;AAKA,MAAMC,oBAAoB,GAAIC,IAAD,IAAwB;AACnD,EAAA,OAAO,CAAC9B,QAAD,EAAkCC,EAAlC,KAAmE;AACxE,IAAA,IAAI,CAACD,QAAQ,CAACa,aAAd,EAA6B;AAC3B,MAAA,OAAA;AACD,KAAA;;IAED,MAAMkB,KAAK,GAAGL,WAAW,CAACI,IAAD,CAAX,CAAkB,CAAlB,CAAd,CAAA;IACA,MAAME,KAAK,GAAGN,WAAW,CAACI,IAAD,CAAX,CAAkB,CAAlB,CAAd,CAAA;AAEA,IAAA,IAAIG,KAAa,GAAGjC,QAAQ,CAACa,aAAT,CAAuBkB,KAAvB,CAApB,CAAA;AACA,IAAA,IAAIG,KAAa,GAAGlC,QAAQ,CAACa,aAAT,CAAuBmB,KAAvB,CAApB,CAAA;;IAEA,MAAMG,MAAM,GAAG,MAAM;AACnB,MAAA,MAAMC,MAAM,GACVpC,QAAQ,CAACa,aAAT,CAAuBb,QAAQ,CAACM,OAAT,CAAiBC,UAAjB,GAA8BwB,KAA9B,GAAsCC,KAA7D,CADF,CAAA;AAGA/B,MAAAA,EAAE,CAACb,IAAI,CAACC,GAAL,CAAS,CAAT,EAAY+C,MAAM,GAAGpC,QAAQ,CAACM,OAAT,CAAiB+B,YAAtC,CAAD,CAAF,CAAA;KAJF,CAAA;;IAOAF,MAAM,EAAA,CAAA;;IAEN,MAAMG,QAAQ,GAAIC,CAAD,IAAc;AAC7B,MAAA,MAAMC,MAAM,GAAGD,CAAC,CAACE,aAAjB,CAAA;AACA,MAAA,MAAMC,OAAO,GAAGF,MAAM,CAACT,KAAD,CAAtB,CAAA;AACA,MAAA,MAAMY,OAAO,GAAGH,MAAM,CAACR,KAAD,CAAtB,CAAA;;AAEA,MAAA,IAAIhC,QAAQ,CAACM,OAAT,CAAiBC,UAAjB,GAA8B0B,KAAK,GAAGS,OAAtC,GAAgDR,KAAK,GAAGS,OAA5D,EAAqE;QACnER,MAAM,EAAA,CAAA;AACP,OAAA;;AAEDF,MAAAA,KAAK,GAAGS,OAAR,CAAA;AACAR,MAAAA,KAAK,GAAGS,OAAR,CAAA;KAVF,CAAA;;IAaA3C,QAAQ,CAACa,aAAT,CAAuBS,gBAAvB,CAAwC,QAAxC,EAAkDgB,QAAlD,EAA4D;AAC1Df,MAAAA,OAAO,EAAE,KADiD;AAE1DC,MAAAA,OAAO,EAAE,IAAA;KAFX,CAAA,CAAA;AAKA,IAAA,OAAO,MAAM;AACXxB,MAAAA,QAAQ,CAACa,aAAT,CAAuBY,mBAAvB,CAA2C,QAA3C,EAAqDa,QAArD,CAAA,CAAA;KADF,CAAA;GAtCF,CAAA;AA0CD,CA3CD,CAAA;;MA6CaM,oBAAoB,GAAGf,oBAAoB,CAAC,SAAD,EAAjD;MACMgB,mBAAmB,GAAGhB,oBAAoB,CAAC,QAAD,EAAhD;MAEMiB,cAAc,GAAG,CAC5BnB,OAD4B,EAE5B3B,QAF4B,KAGzB;AACH,EAAA,OAAOZ,IAAI,CAAC2D,KAAL,CACLpB,OAAO,CAACb,qBAAR,EACEd,CAAAA,QAAQ,CAACM,OAAT,CAAiBC,UAAjB,GAA8B,OAA9B,GAAwC,QAD1C,CADK,CAAP,CAAA;AAKD,EATM;MAWMyC,YAAY,GAAG,CAC1BZ,MAD0B,EAAA,IAAA,EAG1BpC,QAH0B,KAIvB;AAAA,EAAA,IAAA,qBAAA,CAAA;;EAAA,IAFH;IAAEiD,SAAF;AAAaC,IAAAA,IAAAA;GAEV,GAAA,IAAA,CAAA;AACH,EAAA,MAAMC,QAAQ,GAAGD,IAAI,GAAGd,MAAH,GAAYA,MAAM,GAAGpC,QAAQ,CAACM,OAAT,CAAiB+B,YAA3D,CAAA;AAEC,EAAA,CAAA,qBAAA,GAACrC,QAAQ,CAACa,aAAV,2CAAoCuC,QAApC,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAoCA,QAApC,CAA+C;IAC9C,CAACpD,QAAQ,CAACM,OAAT,CAAiBC,UAAjB,GAA8B,MAA9B,GAAuC,KAAxC,GAAgD4C,QADF;AAE9CE,IAAAA,QAAQ,EAAEJ,SAAS,GAAG,QAAH,GAAcK,SAAAA;GAFlC,CAAA,CAAA;AAIF,EAXM;MAaMC,aAAa,GAAG,CAC3BnB,MAD2B,EAAA,KAAA,EAG3BpC,QAH2B,KAIxB;AAAA,EAAA,IAAA,sBAAA,CAAA;;EAAA,IAFH;IAAEiD,SAAF;AAAaC,IAAAA,IAAAA;GAEV,GAAA,KAAA,CAAA;AACH,EAAA,MAAMC,QAAQ,GAAGD,IAAI,GAAGd,MAAH,GAAYA,MAAM,GAAGpC,QAAQ,CAACM,OAAT,CAAiB+B,YAA3D,CAAA;AAEC,EAAA,CAAA,sBAAA,GAACrC,QAAQ,CAACa,aAAV,4CAAqCuC,QAArC,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,sBAAA,CAAqCA,QAArC,CAAgD;IAC/C,CAACpD,QAAQ,CAACM,OAAT,CAAiBC,UAAjB,GAA8B,MAA9B,GAAuC,KAAxC,GAAgD4C,QADD;AAE/CE,IAAAA,QAAQ,EAAEJ,SAAS,GAAG,QAAH,GAAcK,SAAAA;GAFlC,CAAA,CAAA;AAIF,EAXM;AA4DA,MAAME,WAAN,CAGL;EAyBAC,WAAW,CAACC,KAAD,EAAyD;AAAA,IAAA,IAAA,KAAA,GAAA,IAAA,CAAA;;IAAA,IAxB5DC,CAAAA,MAwB4D,GAxB1B,EAwB0B,CAAA;IAAA,IAtBpE9C,CAAAA,aAsBoE,GAtB7B,IAsB6B,CAAA;IAAA,IArBpE+C,CAAAA,WAqBoE,GArB7C,KAqB6C,CAAA;IAAA,IApB5DC,CAAAA,oBAoB4D,GApBC,IAoBD,CAAA;IAAA,IAnBpEC,CAAAA,iBAmBoE,GAnBjC,EAmBiC,CAAA;IAAA,IAlB5DC,CAAAA,qBAkB4D,GAlBf,EAkBe,CAAA;IAAA,IAjB5DC,CAAAA,2BAiB4D,GAjBpB,EAiBoB,CAAA;IAAA,IAd5DC,CAAAA,WAc4D,GAdtC,CAcsC,CAAA;IAAA,IAX5DC,CAAAA,mBAW4D,GAXR,EAWQ,CAAA;AAAA,IAAA,IAAA,CAV5DC,EAU4D,GAVvD,IAAIzD,cAAJ,CAAoBC,OAAD,IAAa;AAC3CA,MAAAA,OAAO,CAACyD,OAAR,CAAiBC,KAAD,IAAW;AACzB,QAAA,IAAA,CAAKC,eAAL,CAAqBD,KAAK,CAAC7B,MAA3B,EAAmD,KAAnD,CAAA,CAAA;OADF,CAAA,CAAA;AAGD,KAJY,CAUuD,CAAA;AAAA,IAAA,IAAA,CALpEtD,KAKoE,GALlB;AAChDI,MAAAA,UAAU,EAAE,CADoC;AAEhDI,MAAAA,QAAQ,EAAE,CAAA;KAGwD,CAAA;;IAAA,IAQpE6E,CAAAA,UARoE,GAQtDb,IAAD,IAA4D;AACvEc,MAAAA,MAAM,CAAC7D,OAAP,CAAe+C,IAAf,CAAqBU,CAAAA,OAArB,CAA6B,KAAkB,IAAA;AAAA,QAAA,IAAjB,CAACK,GAAD,EAAMC,KAAN,CAAiB,GAAA,KAAA,CAAA;QAC7C,IAAI,OAAOA,KAAP,KAAiB,WAArB,EAAkC,OAAQhB,IAAD,CAAce,GAAd,CAAP,CAAA;OADpC,CAAA,CAAA;AAIA,MAAA,IAAA,CAAKnE,OAAL,GAAe;AACbqE,QAAAA,KAAK,EAAE,KADM;AAEbC,QAAAA,aAAa,EAAE,CAFF;AAGbrF,QAAAA,QAAQ,EAAE,CAHG;AAIbsF,QAAAA,YAAY,EAAE,CAJD;AAKbC,QAAAA,UAAU,EAAE,CALC;AAMbC,QAAAA,kBAAkB,EAAE,CANP;AAObC,QAAAA,gBAAgB,EAAE,CAPL;AAQbzE,QAAAA,UAAU,EAAE,KARC;AASb0E,QAAAA,UAAU,EAAElG,mBATC;AAUbmG,QAAAA,cAAc,EAAEjG,qBAVH;AAWbkG,QAAAA,kBAAkB,EAAE,IAXP;QAYbC,QAAQ,EAAE,MAAM,EAZH;QAabtC,cAba;AAcbuC,QAAAA,WAAW,EAAE;AAAEjF,UAAAA,KAAK,EAAE,CAAT;AAAYD,UAAAA,MAAM,EAAE,CAAA;SAdpB;AAebkC,QAAAA,YAAY,EAAE,CAfD;AAgBbiD,QAAAA,cAAc,EAAE,GAhBH;AAiBbC,QAAAA,cAAc,EAAE,YAjBH;QAkBb,GAAG7B,IAAAA;OAlBL,CAAA;KAbkE,CAAA;;IAAA,IAmC5D8B,CAAAA,MAnC4D,GAmCnD,MAAM;AAAA,MAAA,IAAA,qBAAA,EAAA,aAAA,CAAA;;AACrB,MAAA,CAAA,qBAAA,GAAA,CAAA,aAAA,GAAA,IAAA,CAAKlF,OAAL,EAAa8E,QAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAA,IAAA,CAAA,aAAA,EAAwB,IAAxB,CAAA,CAAA;KApCkE,CAAA;;IAAA,IAuC5DK,CAAAA,OAvC4D,GAuClD,MAAM;MACtB,IAAK9B,CAAAA,MAAL,CAAY+B,MAAZ,CAAmBC,OAAnB,CAA4BvB,CAAAA,OAA5B,CAAqCwB,CAAD,IAAOA,CAAC,EAA5C,CAAA,CAAA;MACA,IAAKjC,CAAAA,MAAL,GAAc,EAAd,CAAA;MACA,IAAK9C,CAAAA,aAAL,GAAqB,IAArB,CAAA;KA1CkE,CAAA;;IAAA,IA6CpEgF,CAAAA,SA7CoE,GA6CxD,MAAM;AAChB,MAAA,OAAO,MAAM;QACX,IAAK1B,CAAAA,EAAL,CAAQ2B,UAAR,EAAA,CAAA;QACA,IAAK5B,CAAAA,mBAAL,GAA2B,EAA3B,CAAA;AAEA,QAAA,IAAA,CAAKuB,OAAL,EAAA,CAAA;OAJF,CAAA;KA9CkE,CAAA;;IAAA,IAsDpEM,CAAAA,WAtDoE,GAsDtD,MAAM;AAClB,MAAA,MAAMlF,aAAa,GAAG,IAAA,CAAKP,OAAL,CAAa0F,gBAAb,EAAtB,CAAA;;AAEA,MAAA,IAAI,IAAKnF,CAAAA,aAAL,KAAuBA,aAA3B,EAA0C;AACxC,QAAA,IAAA,CAAK4E,OAAL,EAAA,CAAA;QAEA,IAAK5E,CAAAA,aAAL,GAAqBA,aAArB,CAAA;;AACA,QAAA,IAAA,CAAKoF,eAAL,CAAqB,IAAKC,CAAAA,YAA1B,EAAwC;AACtCjD,UAAAA,SAAS,EAAE,KAD2B;AAEtCC,UAAAA,IAAI,EAAE,IAFgC;AAGtCiD,UAAAA,SAAS,EAAE,KAAA;SAHb,CAAA,CAAA;;AAMA,QAAA,IAAA,CAAKxC,MAAL,CAAY7D,IAAZ,CACE,IAAKQ,CAAAA,OAAL,CAAaE,kBAAb,CAAgC,IAAhC,EAAuCH,IAAD,IAAU;UAC9C,IAAK+F,CAAAA,UAAL,GAAkB/F,IAAlB,CAAA;AACA,UAAA,IAAA,CAAKgG,cAAL,EAAA,CAAA;AACD,SAHD,CADF,CAAA,CAAA;AAOA,QAAA,IAAA,CAAK1C,MAAL,CAAY7D,IAAZ,CACE,IAAKQ,CAAAA,OAAL,CAAasC,oBAAb,CAAkC,IAAlC,EAAyCR,MAAD,IAAY;AAClD,UAAA,IAAI,IAAKyB,CAAAA,oBAAL,KAA8B,IAAlC,EAAwC;YACtCyC,YAAY,CAAC,IAAKzC,CAAAA,oBAAN,CAAZ,CAAA;YACA,IAAKA,CAAAA,oBAAL,GAA4B,IAA5B,CAAA;AACD,WAAA;;AAED,UAAA,IAAI,IAAKqC,CAAAA,YAAL,KAAsB9D,MAA1B,EAAkC;YAChC,IAAK8D,CAAAA,YAAL,GAAoB9D,MAApB,CAAA;YACA,IAAKwB,CAAAA,WAAL,GAAmB,IAAnB,CAAA;YACA,IAAKK,CAAAA,WAAL,GAAmB,CAAnB,CAAA;AAEA,YAAA,IAAA,CAAKJ,oBAAL,GAA4B0C,UAAU,CAAC,MAAM;cAC3C,IAAK1C,CAAAA,oBAAL,GAA4B,IAA5B,CAAA;cACA,IAAKD,CAAAA,WAAL,GAAmB,KAAnB,CAAA;AAEA,cAAA,IAAA,CAAK4B,MAAL,EAAA,CAAA;AACD,aALqC,EAKnC,IAAA,CAAKlF,OAAL,CAAagF,cALsB,CAAtC,CAAA;AAMD,WAXD,MAWO;YACL,IAAK1B,CAAAA,WAAL,GAAmB,KAAnB,CAAA;YACA,IAAKK,CAAAA,WAAL,GAAmB,CAAnB,CAAA;AACD,WAAA;;AAED,UAAA,IAAA,CAAKoC,cAAL,EAAA,CAAA;AACD,SAvBD,CADF,CAAA,CAAA;AA0BD,OA3CD,MA2CO,IAAI,CAAC,IAAA,CAAKzC,WAAV,EAAuB;AAC5B,QAAA,IAAA,CAAKyC,cAAL,EAAA,CAAA;AACD,OAAA;KAtGiE,CAAA;;IAAA,IAyG5DG,CAAAA,OAzG4D,GAyGlD,MAAM;MACtB,OAAO,IAAA,CAAKJ,UAAL,CAAgB,IAAK9F,CAAAA,OAAL,CAAaC,UAAb,GAA0B,OAA1B,GAAoC,QAApD,CAAP,CAAA;KA1GkE,CAAA;;AAAA,IAAA,IAAA,CA6G5DkG,eA7G4D,GA6G1CC,UAAI,CAC5B,MAAM,CACJ,IAAA,CAAKpG,OAAL,CAAaX,KADT,EAEJ,IAAKW,CAAAA,OAAL,CAAauE,YAFT,EAGJ,IAAKvE,CAAAA,OAAL,CAAa2E,UAHT,EAIJ,IAAA,CAAKlB,qBAJD,CADsB,EAO5B,CAACpE,KAAD,EAAQkF,YAAR,EAAsBI,UAAtB,EAAkCnB,iBAAlC,KAAwD;AACtD,MAAA,MAAMrE,GAAG,GACP,IAAA,CAAKuE,2BAAL,CAAiC2C,MAAjC,GAA0C,CAA1C,GACIvH,IAAI,CAACK,GAAL,CAAS,GAAG,KAAKuE,2BAAjB,CADJ,GAEI,CAHN,CAAA;MAIA,IAAKA,CAAAA,2BAAL,GAAmC,EAAnC,CAAA;MAEA,MAAM4C,YAAY,GAAG,IAAA,CAAK9C,iBAAL,CAAuB+C,KAAvB,CAA6B,CAA7B,EAAgCpH,GAAhC,CAArB,CAAA;;MAEA,KAAK,IAAII,CAAC,GAAGJ,GAAb,EAAkBI,CAAC,GAAGF,KAAtB,EAA6BE,CAAC,EAA9B,EAAkC;AAChC,QAAA,MAAM4E,GAAG,GAAGQ,UAAU,CAACpF,CAAD,CAAtB,CAAA;AACA,QAAA,MAAMiH,YAAY,GAAGhD,iBAAiB,CAACW,GAAD,CAAtC,CAAA;AACA,QAAA,MAAMtF,KAAK,GAAGyH,YAAY,CAAC/G,CAAC,GAAG,CAAL,CAAZ,GACV+G,YAAY,CAAC/G,CAAC,GAAG,CAAL,CAAZ,CAAqBL,GADX,GAEVqF,YAFJ,CAAA;AAGA,QAAA,MAAMkC,IAAI,GACR,OAAOD,YAAP,KAAwB,QAAxB,GACIA,YADJ,GAEI,KAAKxG,OAAL,CAAa0G,YAAb,CAA0BnH,CAA1B,CAHN,CAAA;AAIA,QAAA,MAAML,GAAG,GAAGL,KAAK,GAAG4H,IAApB,CAAA;QACAH,YAAY,CAAC/G,CAAD,CAAZ,GAAkB;AAAEb,UAAAA,KAAK,EAAEa,CAAT;UAAYV,KAAZ;UAAmB4H,IAAnB;UAAyBvH,GAAzB;AAA8BiF,UAAAA,GAAAA;SAAhD,CAAA;AACD,OAAA;;MAED,IAAKX,CAAAA,iBAAL,GAAyB8C,YAAzB,CAAA;AACA,MAAA,OAAOA,YAAP,CAAA;AACD,KAhC2B,EAiC5B;MACEnC,GAAG,EAAEwC,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,YAAzB,IAAyC,iBADhD;AAEExC,MAAAA,KAAK,EAAE,MAAM,IAAKrE,CAAAA,OAAL,CAAaqE,KAAAA;AAF5B,KAjC4B,CA7GsC,CAAA;IAAA,IAoJpE0B,CAAAA,cApJoE,GAoJnDK,UAAI,CACnB,MAAM,CAAC,IAAKD,CAAAA,eAAL,EAAD,EAAyB,IAAKD,CAAAA,OAAL,EAAzB,EAAyC,IAAA,CAAKN,YAA9C,CADa,EAEnB,CAACU,YAAD,EAAeQ,SAAf,EAA0BlB,YAA1B,KAA2C;MACzC,MAAMhH,KAAK,GAAGmH,cAAc,CAAC;QAC3BO,YAD2B;QAE3BQ,SAF2B;AAG3BlB,QAAAA,YAAAA;AAH2B,OAAD,CAA5B,CAAA;;AAKA,MAAA,IACEhH,KAAK,CAACI,UAAN,KAAqB,IAAA,CAAKJ,KAAL,CAAWI,UAAhC,IACAJ,KAAK,CAACQ,QAAN,KAAmB,KAAKR,KAAL,CAAWQ,QAFhC,EAGE;QACA,IAAKR,CAAAA,KAAL,GAAaA,KAAb,CAAA;AACA,QAAA,IAAA,CAAKsG,MAAL,EAAA,CAAA;AACD,OAAA;;AACD,MAAA,OAAO,KAAKtG,KAAZ,CAAA;AACD,KAhBkB,EAiBnB;MACEuF,GAAG,EAAEwC,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,YAAzB,IAAyC,gBADhD;AAEExC,MAAAA,KAAK,EAAE,MAAM,IAAKrE,CAAAA,OAAL,CAAaqE,KAAAA;AAF5B,KAjBmB,CApJ+C,CAAA;AAAA,IAAA,IAAA,CA2K5D0C,UA3K4D,GA2K/CX,UAAI,CACvB,MAAM,CACJ,IAAA,CAAKpG,OAAL,CAAa4E,cADT,EAEJ,IAAKhG,CAAAA,KAFD,EAGJ,IAAKoB,CAAAA,OAAL,CAAaf,QAHT,EAIJ,IAAA,CAAKe,OAAL,CAAaX,KAJT,CADiB,EAOvB,CAACuF,cAAD,EAAiBhG,KAAjB,EAAwBK,QAAxB,EAAkCI,KAAlC,KAA4C;AAC1C,MAAA,OAAOuF,cAAc,CAAC,EACpB,GAAGhG,KADiB;QAEpBK,QAFoB;AAGpBI,QAAAA,KAAK,EAAEA,KAAAA;AAHa,OAAD,CAArB,CAAA;AAKD,KAbsB,EAcvB;MACE8E,GAAG,EAAEwC,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,YAAzB,IAAyC,YADhD;AAEExC,MAAAA,KAAK,EAAE,MAAM,IAAKrE,CAAAA,OAAL,CAAaqE,KAAAA;AAF5B,KAduB,CA3K2C,CAAA;;IAAA,IA+LpE2C,CAAAA,gBA/LoE,GA+LhDC,IAAD,IAAwB;AACzC,MAAA,MAAMC,aAAa,GAAG,IAAKlH,CAAAA,OAAL,CAAaiF,cAAnC,CAAA;AACA,MAAA,MAAMkC,QAAQ,GAAGF,IAAI,CAACG,YAAL,CAAkBF,aAAlB,CAAjB,CAAA;;MAEA,IAAI,CAACC,QAAL,EAAe;QACbE,OAAO,CAACC,IAAR,CAAA,0BAAA,GAC6BJ,aAD7B,GAAA,gCAAA,CAAA,CAAA;AAGA,QAAA,OAAO,CAAC,CAAR,CAAA;AACD,OAAA;;AAED,MAAA,OAAOK,QAAQ,CAACJ,QAAD,EAAW,EAAX,CAAf,CAAA;KA1MkE,CAAA;;AAAA,IAAA,IAAA,CA6MpEnD,eA7MoE,GA6MlD,CAACiD,IAAD,EAAqBO,KAArB,KAAwC;AAAA,MAAA,IAAA,qBAAA,CAAA;;AACxD,MAAA,MAAM9I,KAAK,GAAG,IAAA,CAAKsI,gBAAL,CAAsBC,IAAtB,CAAd,CAAA;AAEA,MAAA,MAAMQ,IAAI,GAAG,IAAA,CAAKjE,iBAAL,CAAuB9E,KAAvB,CAAb,CAAA;;MACA,IAAI,CAAC+I,IAAL,EAAW;AACT,QAAA,OAAA;AACD,OAAA;;AACD,MAAA,MAAMtD,GAAG,GAAGuD,MAAM,CAACD,IAAI,CAACtD,GAAN,CAAlB,CAAA;AAEA,MAAA,MAAMwD,QAAQ,GAAG,IAAA,CAAK/D,mBAAL,CAAyBO,GAAzB,CAAjB,CAAA;;AAEA,MAAA,IAAI,CAAC8C,IAAI,CAACW,WAAV,EAAuB;AACrB,QAAA,IAAID,QAAJ,EAAc;AACZ,UAAA,IAAA,CAAK9D,EAAL,CAAQnD,SAAR,CAAkBiH,QAAlB,CAAA,CAAA;AACA,UAAA,OAAO,IAAK/D,CAAAA,mBAAL,CAAyBO,GAAzB,CAAP,CAAA;AACD,SAAA;;AACD,QAAA,OAAA;AACD,OAAA;;AAED,MAAA,IAAI,CAACwD,QAAD,IAAaA,QAAQ,KAAKV,IAA9B,EAAoC;AAClC,QAAA,IAAIU,QAAJ,EAAc;AACZ,UAAA,IAAA,CAAK9D,EAAL,CAAQnD,SAAR,CAAkBiH,QAAlB,CAAA,CAAA;AACD,SAAA;;AACD,QAAA,IAAA,CAAK/D,mBAAL,CAAyBO,GAAzB,CAAA,GAAgC8C,IAAhC,CAAA;AACA,QAAA,IAAA,CAAKpD,EAAL,CAAQpD,OAAR,CAAgBwG,IAAhB,CAAA,CAAA;AACD,OAAA;;MAED,MAAMY,gBAAgB,GAAG,IAAA,CAAK7H,OAAL,CAAawC,cAAb,CAA4ByE,IAA5B,EAAkC,IAAlC,CAAzB,CAAA;AAEA,MAAA,MAAMa,QAAQ,GAAA,CAAA,qBAAA,GAAG,IAAKrE,CAAAA,qBAAL,CAA2BgE,IAAI,CAACtD,GAAhC,CAAH,KAAA,IAAA,GAAA,qBAAA,GAA2CsD,IAAI,CAAChB,IAA9D,CAAA;;MAEA,IAAIoB,gBAAgB,KAAKC,QAAzB,EAAmC;AACjC,QAAA,IAAIL,IAAI,CAAC5I,KAAL,GAAa,IAAA,CAAK+G,YAAtB,EAAoC;AAClC,UAAA,IAAIe,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,YAAzB,IAAyC,IAAK7G,CAAAA,OAAL,CAAaqE,KAA1D,EAAiE;AAC/DgD,YAAAA,OAAO,CAACU,IAAR,CAAa,YAAb,EAA2BF,gBAAgB,GAAGC,QAA9C,CAAA,CAAA;AACD,WAAA;;AAED,UAAA,IAAI,IAAKE,CAAAA,iBAAL,KAA2BhF,SAA/B,EAA0C;AACxC,YAAA,IAAA,CAAKW,WAAL,IAAoBkE,gBAAgB,GAAGC,QAAvC,CAAA;;AAEA,YAAA,IAAA,CAAKnC,eAAL,CAAqB,IAAA,CAAKC,YAAL,GAAoB,IAAA,CAAKjC,WAA9C,EAA2D;AACzDhB,cAAAA,SAAS,EAAE,KAD8C;AAEzDC,cAAAA,IAAI,EAAE,KAFmD;AAGzDiD,cAAAA,SAAS,EAAE,KAAA;aAHb,CAAA,CAAA;AAKD,WAAA;AACF,SAAA;;AAED,QAAA,IAAA,CAAKnC,2BAAL,CAAiClE,IAAjC,CAAsCd,KAAtC,CAAA,CAAA;AACA,QAAA,IAAA,CAAK+E,qBAAL,GAA6B,EAC3B,GAAG,KAAKA,qBADmB;UAE3B,CAACgE,IAAI,CAACtD,GAAN,GAAY0D,gBAAAA;SAFd,CAAA;AAIA,QAAA,IAAA,CAAK3C,MAAL,EAAA,CAAA;AACD,OAAA;KAnQiE,CAAA;;IAAA,IAsQpE1C,CAAAA,cAtQoE,GAsQlDyE,IAAD,IAA+B;MAC9C,IAAI,CAACA,IAAL,EAAW;AACT,QAAA,OAAA;AACD,OAAA;;AAED,MAAA,IAAA,CAAKjD,eAAL,CAAqBiD,IAArB,EAA2B,IAA3B,CAAA,CAAA;KA3QkE,CAAA;;AAAA,IAAA,IAAA,CA8QpEgB,eA9QoE,GA8QlD7B,UAAI,CACpB,MAAM,CAAC,KAAKW,UAAL,EAAD,EAAoB,IAAKZ,CAAAA,eAAL,EAApB,CADc,EAEpB,CAAC+B,OAAD,EAAU5B,YAAV,KAA2B;MACzB,MAAM6B,YAA2B,GAAG,EAApC,CAAA;;AAEA,MAAA,KAAK,IAAIC,CAAC,GAAG,CAAR,EAAWC,GAAG,GAAGH,OAAO,CAAC7B,MAA9B,EAAsC+B,CAAC,GAAGC,GAA1C,EAA+CD,CAAC,EAAhD,EAAoD;AAClD,QAAA,MAAM7I,CAAC,GAAG2I,OAAO,CAACE,CAAD,CAAjB,CAAA;AACA,QAAA,MAAME,WAAW,GAAGhC,YAAY,CAAC/G,CAAD,CAAhC,CAAA;QAEA4I,YAAY,CAAC3I,IAAb,CAAkB8I,WAAlB,CAAA,CAAA;AACD,OAAA;;AAED,MAAA,OAAOH,YAAP,CAAA;AACD,KAbmB,EAcpB;MACEhE,GAAG,EAAEwC,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,YAAzB,IAAyC,YADhD;AAEExC,MAAAA,KAAK,EAAE,MAAM,IAAKrE,CAAAA,OAAL,CAAaqE,KAAAA;AAF5B,KAdoB,CA9Q8C,CAAA;;AAAA,IAAA,IAAA,CAkSpEkE,cAlSoE,GAkSnD,UACf1F,QADe,EAMZ,KAAA,EAAA;MAAA,IAJH;AACE2F,QAAAA,KAAK,GAAG,OADV;AAEEC,QAAAA,YAAY,GAAG,KAAI,CAACzI,OAAL,CAAa6E,kBAAAA;AAF9B,OAIG,sBADwB,EACxB,GAAA,KAAA,CAAA;AACH,MAAA,MAAM/C,MAAM,GAAG,KAAI,CAAC8D,YAApB,CAAA;;AACA,MAAA,MAAMa,IAAI,GAAG,KAAI,CAACP,OAAL,EAAb,CAAA;;MAEA,IAAIsC,KAAK,KAAK,MAAd,EAAsB;QACpB,IAAI3F,QAAQ,IAAIf,MAAhB,EAAwB;AACtB0G,UAAAA,KAAK,GAAG,OAAR,CAAA;AACD,SAFD,MAEO,IAAI3F,QAAQ,IAAIf,MAAM,GAAG2E,IAAzB,EAA+B;AACpC+B,UAAAA,KAAK,GAAG,KAAR,CAAA;AACD,SAFM,MAEA;AACLA,UAAAA,KAAK,GAAG,OAAR,CAAA;AACD,SAAA;AACF,OAAA;;AAED,MAAA,MAAMxI,OAAO,GAAG;AACd2C,QAAAA,SAAS,EAAE8F,YADG;AAEd7F,QAAAA,IAAI,EAAE,KAFQ;AAGdiD,QAAAA,SAAS,EAAE,IAAA;OAHb,CAAA;;MAKA,IAAI2C,KAAK,KAAK,OAAd,EAAuB;AACrB,QAAA,KAAI,CAAC7C,eAAL,CAAqB9C,QAArB,EAA+B7C,OAA/B,CAAA,CAAA;AACD,OAFD,MAEO,IAAIwI,KAAK,KAAK,KAAd,EAAqB;AAC1B,QAAA,KAAI,CAAC7C,eAAL,CAAqB9C,QAAQ,GAAG4D,IAAhC,EAAsCzG,OAAtC,CAAA,CAAA;AACD,OAFM,MAEA,IAAIwI,KAAK,KAAK,QAAd,EAAwB;QAC7B,KAAI,CAAC7C,eAAL,CAAqB9C,QAAQ,GAAG4D,IAAI,GAAG,CAAvC,EAA0CzG,OAA1C,CAAA,CAAA;AACD,OAAA;KAjUiE,CAAA;;AAAA,IAAA,IAAA,CAoUpE0I,aApUoE,GAoUpD,UACdhK,KADc,EAOX,MAAA,EAAA;MAAA,IALH;AACE8J,QAAAA,KAAK,GAAG,MADV;AAEEC,QAAAA,YAAY,GAAG,KAAI,CAACzI,OAAL,CAAa6E,kBAF9B;QAGE,GAAG8D,IAAAA;AAHL,OAKG,uBADuB,EACvB,GAAA,MAAA,CAAA;;AACH,MAAA,MAAMrC,YAAY,GAAG,KAAI,CAACH,eAAL,EAArB,CAAA;;AACA,MAAA,MAAMrE,MAAM,GAAG,KAAI,CAAC8D,YAApB,CAAA;;AACA,MAAA,MAAMa,IAAI,GAAG,KAAI,CAACP,OAAL,EAAb,CAAA;;MACA,MAAM;AAAE7G,QAAAA,KAAAA;OAAU,GAAA,KAAI,CAACW,OAAvB,CAAA;MAEA,MAAMsI,WAAW,GAAGhC,YAAY,CAACxH,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYD,IAAI,CAACK,GAAL,CAAST,KAAT,EAAgBW,KAAK,GAAG,CAAxB,CAAZ,CAAD,CAAhC,CAAA;;MAEA,IAAI,CAACiJ,WAAL,EAAkB;AAChB,QAAA,OAAA;AACD,OAAA;;MAED,IAAIE,KAAK,KAAK,MAAd,EAAsB;AACpB,QAAA,IAAIF,WAAW,CAACpJ,GAAZ,IAAmB4C,MAAM,GAAG2E,IAAT,GAAgB,KAAI,CAACzG,OAAL,CAAa0E,gBAApD,EAAsE;AACpE8D,UAAAA,KAAK,GAAG,KAAR,CAAA;AACD,SAFD,MAEO,IACLF,WAAW,CAACzJ,KAAZ,IACAiD,MAAM,GAAG,KAAI,CAAC9B,OAAL,CAAayE,kBAFjB,EAGL;AACA+D,UAAAA,KAAK,GAAG,OAAR,CAAA;AACD,SALM,MAKA;AACL,UAAA,OAAA;AACD,SAAA;AACF,OAAA;;MAED,MAAM3F,QAAQ,GACZ2F,KAAK,KAAK,KAAV,GACIF,WAAW,CAACpJ,GAAZ,GAAkB,KAAI,CAACc,OAAL,CAAa0E,gBADnC,GAEI4D,WAAW,CAACzJ,KAAZ,GAAoB,KAAI,CAACmB,OAAL,CAAayE,kBAHvC,CAAA;;AAKA,MAAA,KAAI,CAAC8D,cAAL,CAAoB1F,QAApB,EAA8B;QAAE2F,KAAF;QAASC,YAAT;QAAuB,GAAGE,IAAAA;OAAxD,CAAA,CAAA;KAzWkE,CAAA;;AAAA,IAAA,IAAA,CA4WpEC,YA5WoE,GA4WrD,MAAA;AAAA,MAAA,IAAA,qBAAA,CAAA;;MAAA,OACb,CAAC,+BAAKzC,eAAL,EAAA,CAAuB,KAAKnG,OAAL,CAAaX,KAAb,GAAqB,CAA5C,4CAAgDH,GAAhD,KACC,KAAKc,OAAL,CAAauE,YADf,IAC+B,IAAA,CAAKvE,OAAL,CAAawE,UAF/B,CAAA;KA5WqD,CAAA;;AAAA,IAAA,IAAA,CAgX5DmB,eAhX4D,GAgX1C,CACxB7D,MADwB,EAOrB,KAAA,KAAA;MAAA,IALH;QACE+D,SADF;QAEElD,SAFF;AAGEC,QAAAA,IAAAA;OAEC,GAAA,KAAA,CAAA;MACHoD,YAAY,CAAC,IAAK6C,CAAAA,gBAAN,CAAZ,CAAA;;AAEA,MAAA,IAAIhD,SAAJ,EAAe;QACb,IAAKmC,CAAAA,iBAAL,GAAyBlG,MAAzB,CAAA;AACD,OAAA;;AACD,MAAA,IAAA,CAAK9B,OAAL,CAAa8I,UAAb,CAAwBhH,MAAxB,EAAgC;QAAEa,SAAF;AAAaC,QAAAA,IAAAA;AAAb,OAAhC,EAAqD,IAArD,CAAA,CAAA;AAEA,MAAA,IAAIiG,gBAAJ,CAAA;;MAEA,MAAME,KAAK,GAAG,MAAM;QAClB,IAAIC,UAAU,GAAG,IAAA,CAAKpD,YAAtB,CAAA;AACA,QAAA,IAAA,CAAKiD,gBAAL,GAAwBA,gBAAgB,GAAG5C,UAAU,CAAC,MAAM;AAC1D,UAAA,IAAI,IAAK4C,CAAAA,gBAAL,KAA0BA,gBAA9B,EAAgD;AAC9C,YAAA,OAAA;AACD,WAAA;;AAED,UAAA,IAAI,IAAKjD,CAAAA,YAAL,KAAsBoD,UAA1B,EAAsC;YACpC,IAAKhB,CAAAA,iBAAL,GAAyBhF,SAAzB,CAAA;AACA,YAAA,OAAA;AACD,WAAA;;UACDgG,UAAU,GAAG,KAAKpD,YAAlB,CAAA;UACAmD,KAAK,EAAA,CAAA;SAV8C,EAWlD,GAXkD,CAArD,CAAA;OAFF,CAAA;;MAgBAA,KAAK,EAAA,CAAA;KAjZ6D,CAAA;;IAAA,IAoZpEE,CAAAA,OApZoE,GAoZ1D,MAAM;MACd,IAAKxF,CAAAA,qBAAL,GAA6B,EAA7B,CAAA;AACA,MAAA,IAAA,CAAKyB,MAAL,EAAA,CAAA;KAtZkE,CAAA;;IAClE,IAAKjB,CAAAA,UAAL,CAAgBb,KAAhB,CAAA,CAAA;AACA,IAAA,IAAA,CAAK0C,UAAL,GAAkB,IAAK9F,CAAAA,OAAL,CAAa+E,WAA/B,CAAA;AACA,IAAA,IAAA,CAAKa,YAAL,GAAoB,IAAK5F,CAAAA,OAAL,CAAasE,aAAjC,CAAA;AAEA,IAAA,IAAA,CAAKyB,cAAL,EAAA,CAAA;AACD,GAAA;;AA/BD,CAAA;;AAmbF,MAAMmD,uBAAuB,GAAG,CAC9BC,GAD8B,EAE9BC,IAF8B,EAG9BC,eAH8B,EAI9BjF,KAJ8B,KAK3B;EACH,OAAO+E,GAAG,IAAIC,IAAd,EAAoB;IAClB,MAAME,MAAM,GAAI,CAACH,GAAG,GAAGC,IAAP,IAAe,CAAhB,GAAqB,CAApC,CAAA;AACA,IAAA,MAAMG,YAAY,GAAGF,eAAe,CAACC,MAAD,CAApC,CAAA;;IAEA,IAAIC,YAAY,GAAGnF,KAAnB,EAA0B;MACxB+E,GAAG,GAAGG,MAAM,GAAG,CAAf,CAAA;AACD,KAFD,MAEO,IAAIC,YAAY,GAAGnF,KAAnB,EAA0B;MAC/BgF,IAAI,GAAGE,MAAM,GAAG,CAAhB,CAAA;AACD,KAFM,MAEA;AACL,MAAA,OAAOA,MAAP,CAAA;AACD,KAAA;AACF,GAAA;;EAED,IAAIH,GAAG,GAAG,CAAV,EAAa;IACX,OAAOA,GAAG,GAAG,CAAb,CAAA;AACD,GAFD,MAEO;AACL,IAAA,OAAO,CAAP,CAAA;AACD,GAAA;AACF,CAxBD,CAAA;;AA0BA,SAASpD,cAAT,CAQG,KAAA,EAAA;EAAA,IARqB;IACtBO,YADsB;IAEtBQ,SAFsB;AAGtBlB,IAAAA,YAAAA;GAKC,GAAA,KAAA,CAAA;AACD,EAAA,MAAMvG,KAAK,GAAGiH,YAAY,CAACD,MAAb,GAAsB,CAApC,CAAA;;EACA,MAAMmD,SAAS,GAAI9K,KAAD,IAAmB4H,YAAY,CAAC5H,KAAD,CAAZ,CAAqBG,KAA1D,CAAA;;EAEA,MAAMG,UAAU,GAAGkK,uBAAuB,CAAC,CAAD,EAAI7J,KAAJ,EAAWmK,SAAX,EAAsB5D,YAAtB,CAA1C,CAAA;EACA,IAAIxG,QAAQ,GAAGJ,UAAf,CAAA;;AAEA,EAAA,OACEI,QAAQ,GAAGC,KAAX,IACAiH,YAAY,CAAClH,QAAD,CAAZ,CAAwBF,GAAxB,GAA8B0G,YAAY,GAAGkB,SAF/C,EAGE;IACA1H,QAAQ,EAAA,CAAA;AACT,GAAA;;EAED,OAAO;IAAEJ,UAAF;AAAcI,IAAAA,QAAAA;GAArB,CAAA;AACD;;;;;;;;;;;;;;"}
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\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\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 = (\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 extends unknown,\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: { 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 indexAttribute?: string\n}\n\nexport class Virtualizer<\n TScrollElement extends unknown,\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 scrollDelta: number = 0\n private destinationOffset: undefined | number\n private scrollCheckFrame!: ReturnType<typeof setTimeout>\n private measureElementCache: Record<Key, TItemElement> = {}\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 enableSmoothScroll: true,\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 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 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 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 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 {\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: 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","canSmooth","sync","toOffset","scrollTo","behavior","undefined","elementScroll","Virtualizer","constructor","opts","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemMeasurementsCache","pendingMeasuredCacheIndexes","scrollDelta","measureElementCache","getResizeObserver","_ro","forEach","entry","_measureElement","setOptions","Object","key","value","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","enableSmoothScroll","onChange","initialRect","scrollingDelay","indexAttribute","notify","cleanup","filter","Boolean","d","_didMount","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","requested","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","info","destinationOffset","getVirtualItems","indexes","virtualItems","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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"}
@@ -208,11 +208,24 @@ class Virtualizer {
208
208
  this.pendingMeasuredCacheIndexes = [];
209
209
  this.scrollDelta = 0;
210
210
  this.measureElementCache = {};
211
- this.ro = new ResizeObserver(entries => {
212
- entries.forEach(entry => {
213
- this._measureElement(entry.target, false);
214
- });
215
- });
211
+
212
+ this.getResizeObserver = (() => {
213
+ let _ro = null;
214
+ return () => {
215
+ if (_ro) {
216
+ return _ro;
217
+ } else if (typeof ResizeObserver !== 'undefined') {
218
+ return _ro = new ResizeObserver(entries => {
219
+ entries.forEach(entry => {
220
+ this._measureElement(entry.target, false);
221
+ });
222
+ });
223
+ } else {
224
+ return null;
225
+ }
226
+ };
227
+ })();
228
+
216
229
  this.range = {
217
230
  startIndex: 0,
218
231
  endIndex: 0
@@ -262,7 +275,9 @@ class Virtualizer {
262
275
 
263
276
  this._didMount = () => {
264
277
  return () => {
265
- this.ro.disconnect();
278
+ var _this$getResizeObserv;
279
+
280
+ (_this$getResizeObserv = this.getResizeObserver()) == null ? void 0 : _this$getResizeObserv.disconnect();
266
281
  this.measureElementCache = {};
267
282
  this.cleanup();
268
283
  };
@@ -391,13 +406,13 @@ class Virtualizer {
391
406
  return;
392
407
  }
393
408
 
394
- const key = String(item.key);
395
- const prevNode = this.measureElementCache[key];
409
+ const prevNode = this.measureElementCache[item.key];
410
+ const ro = this.getResizeObserver();
396
411
 
397
412
  if (!node.isConnected) {
398
413
  if (prevNode) {
399
- this.ro.unobserve(prevNode);
400
- delete this.measureElementCache[key];
414
+ ro == null ? void 0 : ro.unobserve(prevNode);
415
+ delete this.measureElementCache[item.key];
401
416
  }
402
417
 
403
418
  return;
@@ -405,11 +420,11 @@ class Virtualizer {
405
420
 
406
421
  if (!prevNode || prevNode !== node) {
407
422
  if (prevNode) {
408
- this.ro.unobserve(prevNode);
423
+ ro == null ? void 0 : ro.unobserve(prevNode);
409
424
  }
410
425
 
411
- this.measureElementCache[key] = node;
412
- this.ro.observe(node);
426
+ this.measureElementCache[item.key] = node;
427
+ ro == null ? void 0 : ro.observe(node);
413
428
  }
414
429
 
415
430
  const measuredItemSize = this.options.measureElement(node, this);
@@ -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\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 = (\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 extends unknown,\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: { 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 indexAttribute?: string\n}\n\nexport class Virtualizer<\n TScrollElement extends unknown,\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 scrollDelta: number = 0\n private destinationOffset: undefined | number\n private scrollCheckFrame!: ReturnType<typeof setTimeout>\n private measureElementCache: Record<string, TItemElement> = {}\n private ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, false)\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 enableSmoothScroll: true,\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.ro.disconnect()\n this.measureElementCache = {}\n\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 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 _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 const key = String(item.key)\n\n const prevNode = this.measureElementCache[key]\n\n if (!node.isConnected) {\n if (prevNode) {\n this.ro.unobserve(prevNode)\n delete this.measureElementCache[key]\n }\n return\n }\n\n if (!prevNode || prevNode !== node) {\n if (prevNode) {\n this.ro.unobserve(prevNode)\n }\n this.measureElementCache[key] = node\n this.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 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 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 {\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: 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","canSmooth","sync","toOffset","scrollTo","behavior","undefined","elementScroll","Virtualizer","constructor","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemMeasurementsCache","pendingMeasuredCacheIndexes","scrollDelta","measureElementCache","ro","forEach","entry","_measureElement","setOptions","Object","value","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","enableSmoothScroll","initialRect","scrollingDelay","indexAttribute","notify","cleanup","filter","Boolean","d","_didMount","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","requested","scrollRect","calculateRange","clearTimeout","setTimeout","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","process","env","NODE_ENV","outerSize","getIndexes","indexFromElement","node","attributeName","indexStr","getAttribute","warn","parseInt","_sync","item","prevNode","isConnected","measuredItemSize","itemSize","destinationOffset","getVirtualItems","indexes","virtualItems","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\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 = (\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 extends unknown,\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: { 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 indexAttribute?: string\n}\n\nexport class Virtualizer<\n TScrollElement extends unknown,\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 scrollDelta: number = 0\n private destinationOffset: undefined | number\n private scrollCheckFrame!: ReturnType<typeof setTimeout>\n private measureElementCache: Record<Key, TItemElement> = {}\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 enableSmoothScroll: true,\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 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 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 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 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 {\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: 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","canSmooth","sync","toOffset","scrollTo","behavior","undefined","elementScroll","Virtualizer","constructor","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemMeasurementsCache","pendingMeasuredCacheIndexes","scrollDelta","measureElementCache","getResizeObserver","_ro","forEach","entry","_measureElement","setOptions","Object","value","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","enableSmoothScroll","initialRect","scrollingDelay","indexAttribute","notify","cleanup","filter","Boolean","d","_didMount","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","requested","scrollRect","calculateRange","clearTimeout","setTimeout","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","process","env","NODE_ENV","outerSize","getIndexes","indexFromElement","node","attributeName","indexStr","getAttribute","warn","parseInt","_sync","item","prevNode","ro","isConnected","measuredItemSize","itemSize","destinationOffset","getVirtualItems","indexes","virtualItems","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":"de4e-1","name":"utils.ts"},{"uid":"de4e-3","name":"index.ts"}]}]}],"isRoot":true},"nodeParts":{"de4e-1":{"renderedLength":1432,"gzipLength":544,"brotliLength":0,"mainUid":"de4e-0"},"de4e-3":{"renderedLength":16979,"gzipLength":3773,"brotliLength":0,"mainUid":"de4e-2"}},"nodeMetas":{"de4e-0":{"id":"/packages/virtual-core/src/utils.ts","moduleParts":{"index.production.js":"de4e-1"},"imported":[],"importedBy":[{"uid":"de4e-2"}]},"de4e-2":{"id":"/packages/virtual-core/src/index.ts","moduleParts":{"index.production.js":"de4e-3"},"imported":[{"uid":"de4e-0"}],"importedBy":[],"isEntry":true}},"env":{"rollup":"2.75.4"},"options":{"gzip":true,"brotli":false,"sourcemap":false}};
2672
+ const data = {"version":2,"tree":{"name":"root","children":[{"name":"index.production.js","children":[{"name":"packages/virtual-core/src","children":[{"uid":"07ec-1","name":"utils.ts"},{"uid":"07ec-3","name":"index.ts"}]}]}],"isRoot":true},"nodeParts":{"07ec-1":{"renderedLength":1432,"gzipLength":544,"brotliLength":0,"mainUid":"07ec-0"},"07ec-3":{"renderedLength":17482,"gzipLength":3850,"brotliLength":0,"mainUid":"07ec-2"}},"nodeMetas":{"07ec-0":{"id":"/packages/virtual-core/src/utils.ts","moduleParts":{"index.production.js":"07ec-1"},"imported":[],"importedBy":[{"uid":"07ec-2"}]},"07ec-2":{"id":"/packages/virtual-core/src/index.ts","moduleParts":{"index.production.js":"07ec-3"},"imported":[{"uid":"07ec-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;