@tanstack/virtual-core 3.0.0-beta.23 → 3.0.0-beta.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/index.ts CHANGED
@@ -6,9 +6,11 @@ export * from './utils'
6
6
 
7
7
  type ScrollAlignment = 'start' | 'center' | 'end' | 'auto'
8
8
 
9
+ type ScrollBehavior = 'auto' | 'smooth'
10
+
9
11
  export interface ScrollToOptions {
10
12
  align?: ScrollAlignment
11
- smoothScroll?: boolean
13
+ behavior?: ScrollBehavior
12
14
  }
13
15
 
14
16
  type ScrollToOffsetOptions = ScrollToOptions
@@ -190,34 +192,46 @@ export const measureElement = <TItemElement extends Element>(
190
192
  )
191
193
  }
192
194
 
193
- export const windowScroll = (
195
+ export const windowScroll = <T extends Window>(
194
196
  offset: number,
195
- { canSmooth, sync }: { canSmooth: boolean; sync: boolean },
196
- instance: Virtualizer<any, any>,
197
+ {
198
+ adjustments,
199
+ behavior,
200
+ sync,
201
+ }: { adjustments?: number; behavior?: ScrollBehavior; sync: boolean },
202
+ instance: Virtualizer<T, any>,
197
203
  ) => {
198
- const toOffset = sync ? offset : offset + instance.options.scrollMargin
204
+ const toOffset =
205
+ (sync ? offset : offset + instance.options.scrollMargin) +
206
+ (adjustments ?? 0)
199
207
 
200
- ;(instance.scrollElement as Window)?.scrollTo?.({
208
+ instance.scrollElement?.scrollTo?.({
201
209
  [instance.options.horizontal ? 'left' : 'top']: toOffset,
202
- behavior: canSmooth ? 'smooth' : undefined,
210
+ behavior,
203
211
  })
204
212
  }
205
213
 
206
- export const elementScroll = (
214
+ export const elementScroll = <T extends Element>(
207
215
  offset: number,
208
- { canSmooth, sync }: { canSmooth: boolean; sync: boolean },
209
- instance: Virtualizer<any, any>,
216
+ {
217
+ adjustments,
218
+ behavior,
219
+ sync,
220
+ }: { adjustments?: number; behavior?: ScrollBehavior; sync: boolean },
221
+ instance: Virtualizer<T, any>,
210
222
  ) => {
211
- const toOffset = sync ? offset : offset + instance.options.scrollMargin
223
+ const toOffset =
224
+ (sync ? offset : offset + instance.options.scrollMargin) +
225
+ (adjustments ?? 0)
212
226
 
213
- ;(instance.scrollElement as Element)?.scrollTo?.({
227
+ instance.scrollElement?.scrollTo?.({
214
228
  [instance.options.horizontal ? 'left' : 'top']: toOffset,
215
- behavior: canSmooth ? 'smooth' : undefined,
229
+ behavior,
216
230
  })
217
231
  }
218
232
 
219
233
  export interface VirtualizerOptions<
220
- TScrollElement extends unknown,
234
+ TScrollElement extends Element | Window,
221
235
  TItemElement extends Element,
222
236
  > {
223
237
  // Required from the user
@@ -228,7 +242,7 @@ export interface VirtualizerOptions<
228
242
  // Required from the framework adapter (but can be overridden)
229
243
  scrollToFn: (
230
244
  offset: number,
231
- options: { canSmooth: boolean; sync: boolean },
245
+ options: { adjustments?: number; behavior?: ScrollBehavior; sync: boolean },
232
246
  instance: Virtualizer<TScrollElement, TItemElement>,
233
247
  ) => void
234
248
  observeElementRect: (
@@ -257,14 +271,13 @@ export interface VirtualizerOptions<
257
271
  initialOffset?: number
258
272
  getItemKey?: (index: number) => Key
259
273
  rangeExtractor?: (range: Range) => number[]
260
- enableSmoothScroll?: boolean
261
274
  scrollMargin?: number
262
275
  scrollingDelay?: number
263
276
  indexAttribute?: string
264
277
  }
265
278
 
266
279
  export class Virtualizer<
267
- TScrollElement extends unknown,
280
+ TScrollElement extends Element | Window,
268
281
  TItemElement extends Element,
269
282
  > {
270
283
  private unsubs: (void | (() => void))[] = []
@@ -277,9 +290,7 @@ export class Virtualizer<
277
290
  private pendingMeasuredCacheIndexes: number[] = []
278
291
  private scrollRect: Rect
279
292
  private scrollOffset: number
280
- private scrollDelta: number = 0
281
- private destinationOffset: undefined | number
282
- private scrollCheckFrame!: ReturnType<typeof setTimeout>
293
+ private scrollAdjustments: number = 0
283
294
  private measureElementCache: Record<Key, TItemElement> = {}
284
295
  private getResizeObserver = (() => {
285
296
  let _ro: ResizeObserver | null = null
@@ -327,7 +338,6 @@ export class Virtualizer<
327
338
  horizontal: false,
328
339
  getItemKey: defaultKeyExtractor,
329
340
  rangeExtractor: defaultRangeExtractor,
330
- enableSmoothScroll: true,
331
341
  onChange: () => {},
332
342
  measureElement,
333
343
  initialRect: { width: 0, height: 0 },
@@ -364,10 +374,11 @@ export class Virtualizer<
364
374
  this.cleanup()
365
375
 
366
376
  this.scrollElement = scrollElement
377
+
367
378
  this._scrollToOffset(this.scrollOffset, {
368
- canSmooth: false,
379
+ adjustments: undefined,
380
+ behavior: undefined,
369
381
  sync: true,
370
- requested: false,
371
382
  })
372
383
 
373
384
  this.unsubs.push(
@@ -387,7 +398,7 @@ export class Virtualizer<
387
398
  if (this.scrollOffset !== offset) {
388
399
  this.scrollOffset = offset
389
400
  this.isScrolling = true
390
- this.scrollDelta = 0
401
+ this.scrollAdjustments = 0
391
402
 
392
403
  this.isScrollingTimeoutId = setTimeout(() => {
393
404
  this.isScrollingTimeoutId = null
@@ -397,7 +408,7 @@ export class Virtualizer<
397
408
  }, this.options.scrollingDelay)
398
409
  } else {
399
410
  this.isScrolling = false
400
- this.scrollDelta = 0
411
+ this.scrollAdjustments = 0
401
412
  }
402
413
 
403
414
  this.calculateRange()
@@ -543,20 +554,15 @@ export class Virtualizer<
543
554
  const delta = measuredItemSize - itemSize
544
555
 
545
556
  if (delta !== 0) {
546
- if (
547
- item.start < this.scrollOffset &&
548
- this.isScrolling &&
549
- this.destinationOffset === undefined
550
- ) {
557
+ if (item.start < this.scrollOffset && this.isScrolling) {
551
558
  if (process.env.NODE_ENV !== 'production' && this.options.debug) {
552
559
  console.info('correction', delta)
553
560
  }
554
- this.scrollDelta += delta
555
561
 
556
- this._scrollToOffset(this.scrollOffset + this.scrollDelta, {
557
- canSmooth: false,
562
+ this._scrollToOffset(this.scrollOffset, {
563
+ adjustments: (this.scrollAdjustments += delta),
564
+ behavior: undefined,
558
565
  sync: false,
559
- requested: false,
560
566
  })
561
567
  }
562
568
 
@@ -599,10 +605,7 @@ export class Virtualizer<
599
605
 
600
606
  scrollToOffset = (
601
607
  toOffset: number,
602
- {
603
- align = 'start',
604
- smoothScroll = this.options.enableSmoothScroll,
605
- }: ScrollToOffsetOptions = {},
608
+ { align = 'start', behavior }: ScrollToOffsetOptions = {},
606
609
  ) => {
607
610
  const offset = this.scrollOffset
608
611
  const size = this.getSize()
@@ -618,9 +621,9 @@ export class Virtualizer<
618
621
  }
619
622
 
620
623
  const options = {
621
- canSmooth: smoothScroll,
624
+ adjustments: undefined,
625
+ behavior,
622
626
  sync: false,
623
- requested: true,
624
627
  }
625
628
  if (align === 'start') {
626
629
  this._scrollToOffset(toOffset, options)
@@ -633,11 +636,7 @@ export class Virtualizer<
633
636
 
634
637
  scrollToIndex = (
635
638
  index: number,
636
- {
637
- align = 'auto',
638
- smoothScroll = this.options.enableSmoothScroll,
639
- ...rest
640
- }: ScrollToIndexOptions = {},
639
+ { align = 'auto', ...rest }: ScrollToIndexOptions = {},
641
640
  ) => {
642
641
  const measurements = this.getMeasurements()
643
642
  const offset = this.scrollOffset
@@ -668,7 +667,7 @@ export class Virtualizer<
668
667
  ? measurement.end + this.options.scrollPaddingEnd
669
668
  : measurement.start - this.options.scrollPaddingStart
670
669
 
671
- this.scrollToOffset(toOffset, { align, smoothScroll, ...rest })
670
+ this.scrollToOffset(toOffset, { align, ...rest })
672
671
  }
673
672
 
674
673
  getTotalSize = () =>
@@ -678,37 +677,16 @@ export class Virtualizer<
678
677
  private _scrollToOffset = (
679
678
  offset: number,
680
679
  {
681
- requested,
682
- canSmooth,
680
+ adjustments,
681
+ behavior,
683
682
  sync,
684
- }: { canSmooth: boolean; sync: boolean; requested: boolean },
683
+ }: {
684
+ adjustments: number | undefined
685
+ behavior: ScrollBehavior | undefined
686
+ sync: boolean
687
+ },
685
688
  ) => {
686
- clearTimeout(this.scrollCheckFrame)
687
-
688
- if (requested) {
689
- this.destinationOffset = offset
690
- }
691
- this.options.scrollToFn(offset, { canSmooth, sync }, this)
692
-
693
- let scrollCheckFrame: ReturnType<typeof setTimeout>
694
-
695
- const check = () => {
696
- let lastOffset = this.scrollOffset
697
- this.scrollCheckFrame = scrollCheckFrame = setTimeout(() => {
698
- if (this.scrollCheckFrame !== scrollCheckFrame) {
699
- return
700
- }
701
-
702
- if (this.scrollOffset === lastOffset) {
703
- this.destinationOffset = undefined
704
- return
705
- }
706
- lastOffset = this.scrollOffset
707
- check()
708
- }, 100)
709
- }
710
-
711
- check()
689
+ this.options.scrollToFn(offset, { behavior, sync, adjustments }, this)
712
690
  }
713
691
 
714
692
  measure = () => {
@@ -1 +0,0 @@
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 const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (\n item.start < this.scrollOffset &&\n this.isScrolling &&\n this.destinationOffset === undefined\n ) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n this.scrollDelta += delta\n\n this._scrollToOffset(this.scrollOffset + this.scrollDelta, {\n canSmooth: false,\n sync: false,\n requested: false,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemMeasurementsCache = {\n ...this.itemMeasurementsCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n scrollToOffset = (\n toOffset: number,\n {\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","delta","destinationOffset","info","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;EAqCAC,WAAW,CAACC,KAAD,EAAyD;AAAA,IAAA,IAAA,KAAA,GAAA,IAAA,CAAA;;IAAA,IApC5DC,CAAAA,MAoC4D,GApC1B,EAoC0B,CAAA;IAAA,IAlCpE9C,CAAAA,aAkCoE,GAlC7B,IAkC6B,CAAA;IAAA,IAjCpE+C,CAAAA,WAiCoE,GAjC7C,KAiC6C,CAAA;IAAA,IAhC5DC,CAAAA,oBAgC4D,GAhCC,IAgCD,CAAA;IAAA,IA/BpEC,CAAAA,iBA+BoE,GA/BjC,EA+BiC,CAAA;IAAA,IA9B5DC,CAAAA,qBA8B4D,GA9Bf,EA8Be,CAAA;IAAA,IA7B5DC,CAAAA,2BA6B4D,GA7BpB,EA6BoB,CAAA;IAAA,IA1B5DC,CAAAA,WA0B4D,GA1BtC,CA0BsC,CAAA;IAAA,IAvB5DC,CAAAA,mBAuB4D,GAvBX,EAuBW,CAAA;;IAAA,IAtB5DC,CAAAA,iBAsB4D,GAtBxC,CAAC,MAAM;MACjC,IAAIC,GAA0B,GAAG,IAAjC,CAAA;AAEA,MAAA,OAAO,MAAM;AACX,QAAA,IAAIA,GAAJ,EAAS;AACP,UAAA,OAAOA,GAAP,CAAA;AACD,SAFD,MAEO,IAAI,OAAO1D,cAAP,KAA0B,WAA9B,EAA2C;AAChD,UAAA,OAAQ0D,GAAG,GAAG,IAAI1D,cAAJ,CAAoBC,OAAD,IAAa;AAC5CA,YAAAA,OAAO,CAAC0D,OAAR,CAAiBC,KAAD,IAAW;AACzB,cAAA,IAAA,CAAKC,eAAL,CAAqBD,KAAK,CAAC9B,MAA3B,EAAmD,KAAnD,CAAA,CAAA;aADF,CAAA,CAAA;AAGD,WAJa,CAAd,CAAA;AAKD,SANM,MAMA;AACL,UAAA,OAAO,IAAP,CAAA;AACD,SAAA;OAXH,CAAA;AAaD,KAhB2B,GAsBwC,CAAA;;AAAA,IAAA,IAAA,CALpEtD,KAKoE,GALlB;AAChDI,MAAAA,UAAU,EAAE,CADoC;AAEhDI,MAAAA,QAAQ,EAAE,CAAA;KAGwD,CAAA;;IAAA,IAQpE8E,CAAAA,UARoE,GAQtDd,IAAD,IAA4D;AACvEe,MAAAA,MAAM,CAAC9D,OAAP,CAAe+C,IAAf,CAAqBW,CAAAA,OAArB,CAA6B,KAAkB,IAAA;AAAA,QAAA,IAAjB,CAACK,GAAD,EAAMC,KAAN,CAAiB,GAAA,KAAA,CAAA;QAC7C,IAAI,OAAOA,KAAP,KAAiB,WAArB,EAAkC,OAAQjB,IAAD,CAAcgB,GAAd,CAAP,CAAA;OADpC,CAAA,CAAA;AAIA,MAAA,IAAA,CAAKpE,OAAL,GAAe;AACbsE,QAAAA,KAAK,EAAE,KADM;AAEbC,QAAAA,aAAa,EAAE,CAFF;AAGbtF,QAAAA,QAAQ,EAAE,CAHG;AAIbuF,QAAAA,YAAY,EAAE,CAJD;AAKbC,QAAAA,UAAU,EAAE,CALC;AAMbC,QAAAA,kBAAkB,EAAE,CANP;AAObC,QAAAA,gBAAgB,EAAE,CAPL;AAQb1E,QAAAA,UAAU,EAAE,KARC;AASb2E,QAAAA,UAAU,EAAEnG,mBATC;AAUboG,QAAAA,cAAc,EAAElG,qBAVH;AAWbmG,QAAAA,kBAAkB,EAAE,IAXP;QAYbC,QAAQ,EAAE,MAAM,EAZH;QAabvC,cAba;AAcbwC,QAAAA,WAAW,EAAE;AAAElF,UAAAA,KAAK,EAAE,CAAT;AAAYD,UAAAA,MAAM,EAAE,CAAA;SAdpB;AAebkC,QAAAA,YAAY,EAAE,CAfD;AAgBbkD,QAAAA,cAAc,EAAE,GAhBH;AAiBbC,QAAAA,cAAc,EAAE,YAjBH;QAkBb,GAAG9B,IAAAA;OAlBL,CAAA;KAbkE,CAAA;;IAAA,IAmC5D+B,CAAAA,MAnC4D,GAmCnD,MAAM;AAAA,MAAA,IAAA,qBAAA,EAAA,aAAA,CAAA;;AACrB,MAAA,CAAA,qBAAA,GAAA,CAAA,aAAA,GAAA,IAAA,CAAKnF,OAAL,EAAa+E,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,IAAK/B,CAAAA,MAAL,CAAYgC,MAAZ,CAAmBC,OAAnB,CAA4BvB,CAAAA,OAA5B,CAAqCwB,CAAD,IAAOA,CAAC,EAA5C,CAAA,CAAA;MACA,IAAKlC,CAAAA,MAAL,GAAc,EAAd,CAAA;MACA,IAAK9C,CAAAA,aAAL,GAAqB,IAArB,CAAA;KA1CkE,CAAA;;IAAA,IA6CpEiF,CAAAA,SA7CoE,GA6CxD,MAAM;AAChB,MAAA,OAAO,MAAM;AAAA,QAAA,IAAA,qBAAA,CAAA;;QACX,CAAK3B,qBAAAA,GAAAA,IAAAA,CAAAA,iBAAL,6CAA0B4B,UAA1B,EAAA,CAAA;QACA,IAAK7B,CAAAA,mBAAL,GAA2B,EAA3B,CAAA;AAEA,QAAA,IAAA,CAAKwB,OAAL,EAAA,CAAA;OAJF,CAAA;KA9CkE,CAAA;;IAAA,IAsDpEM,CAAAA,WAtDoE,GAsDtD,MAAM;AAClB,MAAA,MAAMnF,aAAa,GAAG,IAAA,CAAKP,OAAL,CAAa2F,gBAAb,EAAtB,CAAA;;AAEA,MAAA,IAAI,IAAKpF,CAAAA,aAAL,KAAuBA,aAA3B,EAA0C;AACxC,QAAA,IAAA,CAAK6E,OAAL,EAAA,CAAA;QAEA,IAAK7E,CAAAA,aAAL,GAAqBA,aAArB,CAAA;;AACA,QAAA,IAAA,CAAKqF,eAAL,CAAqB,IAAKC,CAAAA,YAA1B,EAAwC;AACtClD,UAAAA,SAAS,EAAE,KAD2B;AAEtCC,UAAAA,IAAI,EAAE,IAFgC;AAGtCkD,UAAAA,SAAS,EAAE,KAAA;SAHb,CAAA,CAAA;;AAMA,QAAA,IAAA,CAAKzC,MAAL,CAAY7D,IAAZ,CACE,IAAKQ,CAAAA,OAAL,CAAaE,kBAAb,CAAgC,IAAhC,EAAuCH,IAAD,IAAU;UAC9C,IAAKgG,CAAAA,UAAL,GAAkBhG,IAAlB,CAAA;AACA,UAAA,IAAA,CAAKiG,cAAL,EAAA,CAAA;AACD,SAHD,CADF,CAAA,CAAA;AAOA,QAAA,IAAA,CAAK3C,MAAL,CAAY7D,IAAZ,CACE,IAAKQ,CAAAA,OAAL,CAAasC,oBAAb,CAAkC,IAAlC,EAAyCR,MAAD,IAAY;AAClD,UAAA,IAAI,IAAKyB,CAAAA,oBAAL,KAA8B,IAAlC,EAAwC;YACtC0C,YAAY,CAAC,IAAK1C,CAAAA,oBAAN,CAAZ,CAAA;YACA,IAAKA,CAAAA,oBAAL,GAA4B,IAA5B,CAAA;AACD,WAAA;;AAED,UAAA,IAAI,IAAKsC,CAAAA,YAAL,KAAsB/D,MAA1B,EAAkC;YAChC,IAAK+D,CAAAA,YAAL,GAAoB/D,MAApB,CAAA;YACA,IAAKwB,CAAAA,WAAL,GAAmB,IAAnB,CAAA;YACA,IAAKK,CAAAA,WAAL,GAAmB,CAAnB,CAAA;AAEA,YAAA,IAAA,CAAKJ,oBAAL,GAA4B2C,UAAU,CAAC,MAAM;cAC3C,IAAK3C,CAAAA,oBAAL,GAA4B,IAA5B,CAAA;cACA,IAAKD,CAAAA,WAAL,GAAmB,KAAnB,CAAA;AAEA,cAAA,IAAA,CAAK6B,MAAL,EAAA,CAAA;AACD,aALqC,EAKnC,IAAA,CAAKnF,OAAL,CAAaiF,cALsB,CAAtC,CAAA;AAMD,WAXD,MAWO;YACL,IAAK3B,CAAAA,WAAL,GAAmB,KAAnB,CAAA;YACA,IAAKK,CAAAA,WAAL,GAAmB,CAAnB,CAAA;AACD,WAAA;;AAED,UAAA,IAAA,CAAKqC,cAAL,EAAA,CAAA;AACD,SAvBD,CADF,CAAA,CAAA;AA0BD,OA3CD,MA2CO,IAAI,CAAC,IAAA,CAAK1C,WAAV,EAAuB;AAC5B,QAAA,IAAA,CAAK0C,cAAL,EAAA,CAAA;AACD,OAAA;KAtGiE,CAAA;;IAAA,IAyG5DG,CAAAA,OAzG4D,GAyGlD,MAAM;MACtB,OAAO,IAAA,CAAKJ,UAAL,CAAgB,IAAK/F,CAAAA,OAAL,CAAaC,UAAb,GAA0B,OAA1B,GAAoC,QAApD,CAAP,CAAA;KA1GkE,CAAA;;AAAA,IAAA,IAAA,CA6G5DmG,eA7G4D,GA6G1CC,UAAI,CAC5B,MAAM,CACJ,IAAA,CAAKrG,OAAL,CAAaX,KADT,EAEJ,IAAKW,CAAAA,OAAL,CAAawE,YAFT,EAGJ,IAAKxE,CAAAA,OAAL,CAAa4E,UAHT,EAIJ,IAAA,CAAKnB,qBAJD,CADsB,EAO5B,CAACpE,KAAD,EAAQmF,YAAR,EAAsBI,UAAtB,EAAkCpB,iBAAlC,KAAwD;AACtD,MAAA,MAAMrE,GAAG,GACP,IAAA,CAAKuE,2BAAL,CAAiC4C,MAAjC,GAA0C,CAA1C,GACIxH,IAAI,CAACK,GAAL,CAAS,GAAG,KAAKuE,2BAAjB,CADJ,GAEI,CAHN,CAAA;MAIA,IAAKA,CAAAA,2BAAL,GAAmC,EAAnC,CAAA;MAEA,MAAM6C,YAAY,GAAG,IAAA,CAAK/C,iBAAL,CAAuBgD,KAAvB,CAA6B,CAA7B,EAAgCrH,GAAhC,CAArB,CAAA;;MAEA,KAAK,IAAII,CAAC,GAAGJ,GAAb,EAAkBI,CAAC,GAAGF,KAAtB,EAA6BE,CAAC,EAA9B,EAAkC;AAChC,QAAA,MAAM6E,GAAG,GAAGQ,UAAU,CAACrF,CAAD,CAAtB,CAAA;AACA,QAAA,MAAMkH,YAAY,GAAGjD,iBAAiB,CAACY,GAAD,CAAtC,CAAA;AACA,QAAA,MAAMvF,KAAK,GAAG0H,YAAY,CAAChH,CAAC,GAAG,CAAL,CAAZ,GACVgH,YAAY,CAAChH,CAAC,GAAG,CAAL,CAAZ,CAAqBL,GADX,GAEVsF,YAFJ,CAAA;AAGA,QAAA,MAAMkC,IAAI,GACR,OAAOD,YAAP,KAAwB,QAAxB,GACIA,YADJ,GAEI,KAAKzG,OAAL,CAAa2G,YAAb,CAA0BpH,CAA1B,CAHN,CAAA;AAIA,QAAA,MAAML,GAAG,GAAGL,KAAK,GAAG6H,IAApB,CAAA;QACAH,YAAY,CAAChH,CAAD,CAAZ,GAAkB;AAAEb,UAAAA,KAAK,EAAEa,CAAT;UAAYV,KAAZ;UAAmB6H,IAAnB;UAAyBxH,GAAzB;AAA8BkF,UAAAA,GAAAA;SAAhD,CAAA;AACD,OAAA;;MAED,IAAKZ,CAAAA,iBAAL,GAAyB+C,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,IAAKtE,CAAAA,OAAL,CAAasE,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,MAAMjH,KAAK,GAAGoH,cAAc,CAAC;QAC3BO,YAD2B;QAE3BQ,SAF2B;AAG3BlB,QAAAA,YAAAA;AAH2B,OAAD,CAA5B,CAAA;;AAKA,MAAA,IACEjH,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,CAAKuG,MAAL,EAAA,CAAA;AACD,OAAA;;AACD,MAAA,OAAO,KAAKvG,KAAZ,CAAA;AACD,KAhBkB,EAiBnB;MACEwF,GAAG,EAAEwC,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,YAAzB,IAAyC,gBADhD;AAEExC,MAAAA,KAAK,EAAE,MAAM,IAAKtE,CAAAA,OAAL,CAAasE,KAAAA;AAF5B,KAjBmB,CApJ+C,CAAA;AAAA,IAAA,IAAA,CA2K5D0C,UA3K4D,GA2K/CX,UAAI,CACvB,MAAM,CACJ,IAAA,CAAKrG,OAAL,CAAa6E,cADT,EAEJ,IAAKjG,CAAAA,KAFD,EAGJ,IAAKoB,CAAAA,OAAL,CAAaf,QAHT,EAIJ,IAAA,CAAKe,OAAL,CAAaX,KAJT,CADiB,EAOvB,CAACwF,cAAD,EAAiBjG,KAAjB,EAAwBK,QAAxB,EAAkCI,KAAlC,KAA4C;AAC1C,MAAA,OAAOwF,cAAc,CAAC,EACpB,GAAGjG,KADiB;QAEpBK,QAFoB;AAGpBI,QAAAA,KAAK,EAAEA,KAAAA;AAHa,OAAD,CAArB,CAAA;AAKD,KAbsB,EAcvB;MACE+E,GAAG,EAAEwC,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,YAAzB,IAAyC,YADhD;AAEExC,MAAAA,KAAK,EAAE,MAAM,IAAKtE,CAAAA,OAAL,CAAasE,KAAAA;AAF5B,KAduB,CA3K2C,CAAA;;IAAA,IA+LpE2C,CAAAA,gBA/LoE,GA+LhDC,IAAD,IAAwB;AACzC,MAAA,MAAMC,aAAa,GAAG,IAAKnH,CAAAA,OAAL,CAAakF,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,CA6M5DnD,eA7M4D,GA6M1C,CAACiD,IAAD,EAAqBO,KAArB,KAAwC;AAAA,MAAA,IAAA,qBAAA,CAAA;;AAChE,MAAA,MAAM/I,KAAK,GAAG,IAAA,CAAKuI,gBAAL,CAAsBC,IAAtB,CAAd,CAAA;AAEA,MAAA,MAAMQ,IAAI,GAAG,IAAA,CAAKlE,iBAAL,CAAuB9E,KAAvB,CAAb,CAAA;;MACA,IAAI,CAACgJ,IAAL,EAAW;AACT,QAAA,OAAA;AACD,OAAA;;MAED,MAAMC,QAAQ,GAAG,IAAK/D,CAAAA,mBAAL,CAAyB8D,IAAI,CAACtD,GAA9B,CAAjB,CAAA;AAEA,MAAA,MAAMwD,EAAE,GAAG,IAAK/D,CAAAA,iBAAL,EAAX,CAAA;;AAEA,MAAA,IAAI,CAACqD,IAAI,CAACW,WAAV,EAAuB;AACrB,QAAA,IAAIF,QAAJ,EAAc;AACZC,UAAAA,EAAE,QAAF,GAAAA,KAAAA,CAAAA,GAAAA,EAAE,CAAElH,SAAJ,CAAciH,QAAd,CAAA,CAAA;AACA,UAAA,OAAO,KAAK/D,mBAAL,CAAyB8D,IAAI,CAACtD,GAA9B,CAAP,CAAA;AACD,SAAA;;AACD,QAAA,OAAA;AACD,OAAA;;AAED,MAAA,IAAI,CAACuD,QAAD,IAAaA,QAAQ,KAAKT,IAA9B,EAAoC;AAClC,QAAA,IAAIS,QAAJ,EAAc;AACZC,UAAAA,EAAE,QAAF,GAAAA,KAAAA,CAAAA,GAAAA,EAAE,CAAElH,SAAJ,CAAciH,QAAd,CAAA,CAAA;AACD,SAAA;;AACD,QAAA,IAAA,CAAK/D,mBAAL,CAAyB8D,IAAI,CAACtD,GAA9B,IAAqC8C,IAArC,CAAA;AACAU,QAAAA,EAAE,QAAF,GAAAA,KAAAA,CAAAA,GAAAA,EAAE,CAAEnH,OAAJ,CAAYyG,IAAZ,CAAA,CAAA;AACD,OAAA;;MAED,MAAMY,gBAAgB,GAAG,IAAA,CAAK9H,OAAL,CAAawC,cAAb,CAA4B0E,IAA5B,EAAkC,IAAlC,CAAzB,CAAA;AAEA,MAAA,MAAMa,QAAQ,GAAA,CAAA,qBAAA,GAAG,IAAKtE,CAAAA,qBAAL,CAA2BiE,IAAI,CAACtD,GAAhC,CAAH,KAAA,IAAA,GAAA,qBAAA,GAA2CsD,IAAI,CAAChB,IAA9D,CAAA;AAEA,MAAA,MAAMsB,KAAK,GAAGF,gBAAgB,GAAGC,QAAjC,CAAA;;MAEA,IAAIC,KAAK,KAAK,CAAd,EAAiB;AACf,QAAA,IACEN,IAAI,CAAC7I,KAAL,GAAa,KAAKgH,YAAlB,IACA,IAAKvC,CAAAA,WADL,IAEA,IAAA,CAAK2E,iBAAL,KAA2BjF,SAH7B,EAIE;AACA,UAAA,IAAI4D,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,YAAzB,IAAyC,IAAK9G,CAAAA,OAAL,CAAasE,KAA1D,EAAiE;AAC/DgD,YAAAA,OAAO,CAACY,IAAR,CAAa,YAAb,EAA2BF,KAA3B,CAAA,CAAA;AACD,WAAA;;UACD,IAAKrE,CAAAA,WAAL,IAAoBqE,KAApB,CAAA;;AAEA,UAAA,IAAA,CAAKpC,eAAL,CAAqB,IAAA,CAAKC,YAAL,GAAoB,IAAA,CAAKlC,WAA9C,EAA2D;AACzDhB,YAAAA,SAAS,EAAE,KAD8C;AAEzDC,YAAAA,IAAI,EAAE,KAFmD;AAGzDkD,YAAAA,SAAS,EAAE,KAAA;WAHb,CAAA,CAAA;AAKD,SAAA;;AAED,QAAA,IAAA,CAAKpC,2BAAL,CAAiClE,IAAjC,CAAsCd,KAAtC,CAAA,CAAA;AACA,QAAA,IAAA,CAAK+E,qBAAL,GAA6B,EAC3B,GAAG,KAAKA,qBADmB;UAE3B,CAACiE,IAAI,CAACtD,GAAN,GAAY0D,gBAAAA;SAFd,CAAA;AAIA,QAAA,IAAA,CAAK3C,MAAL,EAAA,CAAA;AACD,OAAA;KAvQiE,CAAA;;IAAA,IA0QpE3C,CAAAA,cA1QoE,GA0QlD0E,IAAD,IAA+B;MAC9C,IAAI,CAACA,IAAL,EAAW;AACT,QAAA,OAAA;AACD,OAAA;;AAED,MAAA,IAAA,CAAKjD,eAAL,CAAqBiD,IAArB,EAA2B,IAA3B,CAAA,CAAA;KA/QkE,CAAA;;AAAA,IAAA,IAAA,CAkRpEiB,eAlRoE,GAkRlD9B,UAAI,CACpB,MAAM,CAAC,KAAKW,UAAL,EAAD,EAAoB,IAAKZ,CAAAA,eAAL,EAApB,CADc,EAEpB,CAACgC,OAAD,EAAU7B,YAAV,KAA2B;MACzB,MAAM8B,YAA2B,GAAG,EAApC,CAAA;;AAEA,MAAA,KAAK,IAAIC,CAAC,GAAG,CAAR,EAAWC,GAAG,GAAGH,OAAO,CAAC9B,MAA9B,EAAsCgC,CAAC,GAAGC,GAA1C,EAA+CD,CAAC,EAAhD,EAAoD;AAClD,QAAA,MAAM/I,CAAC,GAAG6I,OAAO,CAACE,CAAD,CAAjB,CAAA;AACA,QAAA,MAAME,WAAW,GAAGjC,YAAY,CAAChH,CAAD,CAAhC,CAAA;QAEA8I,YAAY,CAAC7I,IAAb,CAAkBgJ,WAAlB,CAAA,CAAA;AACD,OAAA;;AAED,MAAA,OAAOH,YAAP,CAAA;AACD,KAbmB,EAcpB;MACEjE,GAAG,EAAEwC,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,YAAzB,IAAyC,YADhD;AAEExC,MAAAA,KAAK,EAAE,MAAM,IAAKtE,CAAAA,OAAL,CAAasE,KAAAA;AAF5B,KAdoB,CAlR8C,CAAA;;AAAA,IAAA,IAAA,CAsSpEmE,cAtSoE,GAsSnD,UACf5F,QADe,EAMZ,KAAA,EAAA;MAAA,IAJH;AACE6F,QAAAA,KAAK,GAAG,OADV;AAEEC,QAAAA,YAAY,GAAG,KAAI,CAAC3I,OAAL,CAAa8E,kBAAAA;AAF9B,OAIG,sBADwB,EACxB,GAAA,KAAA,CAAA;AACH,MAAA,MAAMhD,MAAM,GAAG,KAAI,CAAC+D,YAApB,CAAA;;AACA,MAAA,MAAMa,IAAI,GAAG,KAAI,CAACP,OAAL,EAAb,CAAA;;MAEA,IAAIuC,KAAK,KAAK,MAAd,EAAsB;QACpB,IAAI7F,QAAQ,IAAIf,MAAhB,EAAwB;AACtB4G,UAAAA,KAAK,GAAG,OAAR,CAAA;AACD,SAFD,MAEO,IAAI7F,QAAQ,IAAIf,MAAM,GAAG4E,IAAzB,EAA+B;AACpCgC,UAAAA,KAAK,GAAG,KAAR,CAAA;AACD,SAFM,MAEA;AACLA,UAAAA,KAAK,GAAG,OAAR,CAAA;AACD,SAAA;AACF,OAAA;;AAED,MAAA,MAAM1I,OAAO,GAAG;AACd2C,QAAAA,SAAS,EAAEgG,YADG;AAEd/F,QAAAA,IAAI,EAAE,KAFQ;AAGdkD,QAAAA,SAAS,EAAE,IAAA;OAHb,CAAA;;MAKA,IAAI4C,KAAK,KAAK,OAAd,EAAuB;AACrB,QAAA,KAAI,CAAC9C,eAAL,CAAqB/C,QAArB,EAA+B7C,OAA/B,CAAA,CAAA;AACD,OAFD,MAEO,IAAI0I,KAAK,KAAK,KAAd,EAAqB;AAC1B,QAAA,KAAI,CAAC9C,eAAL,CAAqB/C,QAAQ,GAAG6D,IAAhC,EAAsC1G,OAAtC,CAAA,CAAA;AACD,OAFM,MAEA,IAAI0I,KAAK,KAAK,QAAd,EAAwB;QAC7B,KAAI,CAAC9C,eAAL,CAAqB/C,QAAQ,GAAG6D,IAAI,GAAG,CAAvC,EAA0C1G,OAA1C,CAAA,CAAA;AACD,OAAA;KArUiE,CAAA;;AAAA,IAAA,IAAA,CAwUpE4I,aAxUoE,GAwUpD,UACdlK,KADc,EAOX,MAAA,EAAA;MAAA,IALH;AACEgK,QAAAA,KAAK,GAAG,MADV;AAEEC,QAAAA,YAAY,GAAG,KAAI,CAAC3I,OAAL,CAAa8E,kBAF9B;QAGE,GAAG+D,IAAAA;AAHL,OAKG,uBADuB,EACvB,GAAA,MAAA,CAAA;;AACH,MAAA,MAAMtC,YAAY,GAAG,KAAI,CAACH,eAAL,EAArB,CAAA;;AACA,MAAA,MAAMtE,MAAM,GAAG,KAAI,CAAC+D,YAApB,CAAA;;AACA,MAAA,MAAMa,IAAI,GAAG,KAAI,CAACP,OAAL,EAAb,CAAA;;MACA,MAAM;AAAE9G,QAAAA,KAAAA;OAAU,GAAA,KAAI,CAACW,OAAvB,CAAA;MAEA,MAAMwI,WAAW,GAAGjC,YAAY,CAACzH,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYD,IAAI,CAACK,GAAL,CAAST,KAAT,EAAgBW,KAAK,GAAG,CAAxB,CAAZ,CAAD,CAAhC,CAAA;;MAEA,IAAI,CAACmJ,WAAL,EAAkB;AAChB,QAAA,OAAA;AACD,OAAA;;MAED,IAAIE,KAAK,KAAK,MAAd,EAAsB;AACpB,QAAA,IAAIF,WAAW,CAACtJ,GAAZ,IAAmB4C,MAAM,GAAG4E,IAAT,GAAgB,KAAI,CAAC1G,OAAL,CAAa2E,gBAApD,EAAsE;AACpE+D,UAAAA,KAAK,GAAG,KAAR,CAAA;AACD,SAFD,MAEO,IACLF,WAAW,CAAC3J,KAAZ,IACAiD,MAAM,GAAG,KAAI,CAAC9B,OAAL,CAAa0E,kBAFjB,EAGL;AACAgE,UAAAA,KAAK,GAAG,OAAR,CAAA;AACD,SALM,MAKA;AACL,UAAA,OAAA;AACD,SAAA;AACF,OAAA;;MAED,MAAM7F,QAAQ,GACZ6F,KAAK,KAAK,KAAV,GACIF,WAAW,CAACtJ,GAAZ,GAAkB,KAAI,CAACc,OAAL,CAAa2E,gBADnC,GAEI6D,WAAW,CAAC3J,KAAZ,GAAoB,KAAI,CAACmB,OAAL,CAAa0E,kBAHvC,CAAA;;AAKA,MAAA,KAAI,CAAC+D,cAAL,CAAoB5F,QAApB,EAA8B;QAAE6F,KAAF;QAASC,YAAT;QAAuB,GAAGE,IAAAA;OAAxD,CAAA,CAAA;KA7WkE,CAAA;;AAAA,IAAA,IAAA,CAgXpEC,YAhXoE,GAgXrD,MAAA;AAAA,MAAA,IAAA,qBAAA,CAAA;;MAAA,OACb,CAAC,+BAAK1C,eAAL,EAAA,CAAuB,KAAKpG,OAAL,CAAaX,KAAb,GAAqB,CAA5C,4CAAgDH,GAAhD,KACC,KAAKc,OAAL,CAAawE,YADf,IAC+B,IAAA,CAAKxE,OAAL,CAAayE,UAF/B,CAAA;KAhXqD,CAAA;;AAAA,IAAA,IAAA,CAoX5DmB,eApX4D,GAoX1C,CACxB9D,MADwB,EAOrB,KAAA,KAAA;MAAA,IALH;QACEgE,SADF;QAEEnD,SAFF;AAGEC,QAAAA,IAAAA;OAEC,GAAA,KAAA,CAAA;MACHqD,YAAY,CAAC,IAAK8C,CAAAA,gBAAN,CAAZ,CAAA;;AAEA,MAAA,IAAIjD,SAAJ,EAAe;QACb,IAAKmC,CAAAA,iBAAL,GAAyBnG,MAAzB,CAAA;AACD,OAAA;;AACD,MAAA,IAAA,CAAK9B,OAAL,CAAagJ,UAAb,CAAwBlH,MAAxB,EAAgC;QAAEa,SAAF;AAAaC,QAAAA,IAAAA;AAAb,OAAhC,EAAqD,IAArD,CAAA,CAAA;AAEA,MAAA,IAAImG,gBAAJ,CAAA;;MAEA,MAAME,KAAK,GAAG,MAAM;QAClB,IAAIC,UAAU,GAAG,IAAA,CAAKrD,YAAtB,CAAA;AACA,QAAA,IAAA,CAAKkD,gBAAL,GAAwBA,gBAAgB,GAAG7C,UAAU,CAAC,MAAM;AAC1D,UAAA,IAAI,IAAK6C,CAAAA,gBAAL,KAA0BA,gBAA9B,EAAgD;AAC9C,YAAA,OAAA;AACD,WAAA;;AAED,UAAA,IAAI,IAAKlD,CAAAA,YAAL,KAAsBqD,UAA1B,EAAsC;YACpC,IAAKjB,CAAAA,iBAAL,GAAyBjF,SAAzB,CAAA;AACA,YAAA,OAAA;AACD,WAAA;;UACDkG,UAAU,GAAG,KAAKrD,YAAlB,CAAA;UACAoD,KAAK,EAAA,CAAA;SAV8C,EAWlD,GAXkD,CAArD,CAAA;OAFF,CAAA;;MAgBAA,KAAK,EAAA,CAAA;KArZ6D,CAAA;;IAAA,IAwZpEE,CAAAA,OAxZoE,GAwZ1D,MAAM;MACd,IAAK1F,CAAAA,qBAAL,GAA6B,EAA7B,CAAA;AACA,MAAA,IAAA,CAAK0B,MAAL,EAAA,CAAA;KA1ZkE,CAAA;;IAClE,IAAKjB,CAAAA,UAAL,CAAgBd,KAAhB,CAAA,CAAA;AACA,IAAA,IAAA,CAAK2C,UAAL,GAAkB,IAAK/F,CAAAA,OAAL,CAAagF,WAA/B,CAAA;AACA,IAAA,IAAA,CAAKa,YAAL,GAAoB,IAAK7F,CAAAA,OAAL,CAAauE,aAAjC,CAAA;AAEA,IAAA,IAAA,CAAKyB,cAAL,EAAA,CAAA;AACD,GAAA;;AA3CD,CAAA;;AAmcF,MAAMoD,uBAAuB,GAAG,CAC9BC,GAD8B,EAE9BC,IAF8B,EAG9BC,eAH8B,EAI9BlF,KAJ8B,KAK3B;EACH,OAAOgF,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,GAAGpF,KAAnB,EAA0B;MACxBgF,GAAG,GAAGG,MAAM,GAAG,CAAf,CAAA;AACD,KAFD,MAEO,IAAIC,YAAY,GAAGpF,KAAnB,EAA0B;MAC/BiF,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,SAASrD,cAAT,CAQG,KAAA,EAAA;EAAA,IARqB;IACtBO,YADsB;IAEtBQ,SAFsB;AAGtBlB,IAAAA,YAAAA;GAKC,GAAA,KAAA,CAAA;AACD,EAAA,MAAMxG,KAAK,GAAGkH,YAAY,CAACD,MAAb,GAAsB,CAApC,CAAA;;EACA,MAAMoD,SAAS,GAAIhL,KAAD,IAAmB6H,YAAY,CAAC7H,KAAD,CAAZ,CAAqBG,KAA1D,CAAA;;EAEA,MAAMG,UAAU,GAAGoK,uBAAuB,CAAC,CAAD,EAAI/J,KAAJ,EAAWqK,SAAX,EAAsB7D,YAAtB,CAA1C,CAAA;EACA,IAAIzG,QAAQ,GAAGJ,UAAf,CAAA;;AAEA,EAAA,OACEI,QAAQ,GAAGC,KAAX,IACAkH,YAAY,CAACnH,QAAD,CAAZ,CAAwBF,GAAxB,GAA8B2G,YAAY,GAAGkB,SAF/C,EAGE;IACA3H,QAAQ,EAAA,CAAA;AACT,GAAA;;EAED,OAAO;IAAEJ,UAAF;AAAcI,IAAAA,QAAAA;GAArB,CAAA;AACD;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
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 const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (\n item.start < this.scrollOffset &&\n this.isScrolling &&\n this.destinationOffset === undefined\n ) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n this.scrollDelta += delta\n\n this._scrollToOffset(this.scrollOffset + this.scrollDelta, {\n canSmooth: false,\n sync: false,\n requested: false,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemMeasurementsCache = {\n ...this.itemMeasurementsCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n scrollToOffset = (\n toOffset: number,\n {\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","delta","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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"}