@tanstack/virtual-core 3.0.0-beta.44 → 3.0.0-beta.47

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.
@@ -31,105 +31,100 @@ var defaultRangeExtractor = function defaultRangeExtractor(range) {
31
31
  }
32
32
  return arr;
33
33
  };
34
- var memoRectCallback = function memoRectCallback(instance, cb) {
35
- var prev = {
36
- height: -1,
37
- width: -1
38
- };
39
- return function (rect) {
40
- if (instance.options.horizontal ? rect.width !== prev.width : rect.height !== prev.height) {
41
- cb(rect);
42
- }
43
- prev = rect;
44
- };
45
- };
46
34
  var observeElementRect = function observeElementRect(instance, cb) {
35
+ var element = instance.scrollElement;
36
+ if (!element) {
37
+ return;
38
+ }
39
+ var handler = function handler(rect) {
40
+ var width = rect.width,
41
+ height = rect.height;
42
+ cb({
43
+ width: Math.round(width),
44
+ height: Math.round(height)
45
+ });
46
+ };
47
+ handler(element.getBoundingClientRect());
47
48
  var observer = new ResizeObserver(function (entries) {
48
49
  var entry = entries[0];
49
50
  if (entry) {
50
- var _entry$contentRect = entry.contentRect,
51
- width = _entry$contentRect.width,
52
- height = _entry$contentRect.height;
53
- cb({
54
- width: Math.round(width),
55
- height: Math.round(height)
56
- });
57
- } else {
58
- cb({
59
- width: 0,
60
- height: 0
61
- });
51
+ var box = entry.borderBoxSize[0];
52
+ if (box) {
53
+ handler({
54
+ width: box.inlineSize,
55
+ height: box.blockSize
56
+ });
57
+ return;
58
+ }
62
59
  }
60
+ handler(element.getBoundingClientRect());
61
+ });
62
+ observer.observe(element, {
63
+ box: 'border-box'
63
64
  });
64
- if (!instance.scrollElement) {
65
- return;
66
- }
67
- cb(instance.scrollElement.getBoundingClientRect());
68
- observer.observe(instance.scrollElement);
69
65
  return function () {
70
- observer.unobserve(instance.scrollElement);
66
+ observer.unobserve(element);
71
67
  };
72
68
  };
73
69
  var observeWindowRect = function observeWindowRect(instance, cb) {
74
- var memoizedCallback = memoRectCallback(instance, cb);
75
- var onResize = function onResize() {
76
- return memoizedCallback({
77
- width: instance.scrollElement.innerWidth,
78
- height: instance.scrollElement.innerHeight
70
+ var element = instance.scrollElement;
71
+ if (!element) {
72
+ return;
73
+ }
74
+ var handler = function handler() {
75
+ cb({
76
+ width: element.innerWidth,
77
+ height: element.innerHeight
79
78
  });
80
79
  };
81
- if (!instance.scrollElement) {
80
+ handler();
81
+ element.addEventListener('resize', handler, {
82
+ passive: true
83
+ });
84
+ return function () {
85
+ element.removeEventListener('resize', handler);
86
+ };
87
+ };
88
+ var observeElementOffset = function observeElementOffset(instance, cb) {
89
+ var element = instance.scrollElement;
90
+ if (!element) {
82
91
  return;
83
92
  }
84
- onResize();
85
- instance.scrollElement.addEventListener('resize', onResize, {
86
- capture: false,
93
+ var handler = function handler() {
94
+ cb(element[instance.options.horizontal ? 'scrollLeft' : 'scrollTop']);
95
+ };
96
+ handler();
97
+ element.addEventListener('scroll', handler, {
87
98
  passive: true
88
99
  });
89
100
  return function () {
90
- instance.scrollElement.removeEventListener('resize', onResize);
101
+ element.removeEventListener('scroll', handler);
91
102
  };
92
103
  };
93
- var scrollProps = {
94
- element: ['scrollLeft', 'scrollTop'],
95
- window: ['scrollX', 'scrollY']
96
- };
97
- var createOffsetObserver = function createOffsetObserver(mode) {
98
- return function (instance, cb) {
99
- if (!instance.scrollElement) {
100
- return;
101
- }
102
- var propX = scrollProps[mode][0];
103
- var propY = scrollProps[mode][1];
104
- var prevX = instance.scrollElement[propX];
105
- var prevY = instance.scrollElement[propY];
106
- var scroll = function scroll() {
107
- var offset = instance.scrollElement[instance.options.horizontal ? propX : propY];
108
- cb(offset);
109
- };
110
- scroll();
111
- var onScroll = function onScroll(e) {
112
- var target = e.currentTarget;
113
- var scrollX = target[propX];
114
- var scrollY = target[propY];
115
- if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {
116
- scroll();
117
- }
118
- prevX = scrollX;
119
- prevY = scrollY;
120
- };
121
- instance.scrollElement.addEventListener('scroll', onScroll, {
122
- capture: false,
123
- passive: true
124
- });
125
- return function () {
126
- instance.scrollElement.removeEventListener('scroll', onScroll);
127
- };
104
+ var observeWindowOffset = function observeWindowOffset(instance, cb) {
105
+ var element = instance.scrollElement;
106
+ if (!element) {
107
+ return;
108
+ }
109
+ var handler = function handler() {
110
+ cb(element[instance.options.horizontal ? 'scrollX' : 'scrollY']);
111
+ };
112
+ handler();
113
+ element.addEventListener('scroll', handler, {
114
+ passive: true
115
+ });
116
+ return function () {
117
+ element.removeEventListener('scroll', handler);
128
118
  };
129
119
  };
130
- var observeElementOffset = createOffsetObserver('element');
131
- var observeWindowOffset = createOffsetObserver('window');
132
- var measureElement = function measureElement(element, instance) {
120
+ var measureElement = function measureElement(element, entry, instance) {
121
+ if (entry) {
122
+ var box = entry.borderBoxSize[0];
123
+ if (box) {
124
+ var size = Math.round(box[instance.options.horizontal ? 'inlineSize' : 'blockSize']);
125
+ return size;
126
+ }
127
+ }
133
128
  return Math.round(element.getBoundingClientRect()[instance.options.horizontal ? 'width' : 'height']);
134
129
  };
135
130
  var windowScroll = function windowScroll(offset, _ref, instance) {
@@ -156,26 +151,42 @@ var Virtualizer = function Virtualizer(_opts) {
156
151
  this.isScrollingTimeoutId = null;
157
152
  this.scrollToIndexTimeoutId = null;
158
153
  this.measurementsCache = [];
159
- this.itemSizeCache = {};
154
+ this.itemSizeCache = new Map();
160
155
  this.pendingMeasuredCacheIndexes = [];
161
156
  this.scrollDirection = null;
162
157
  this.scrollAdjustments = 0;
163
- this.measureElementCache = {};
164
- this.getResizeObserver = function () {
158
+ this.measureElementCache = new Map();
159
+ this.observer = function () {
165
160
  var _ro = null;
166
- return function () {
161
+ var get = function get() {
167
162
  if (_ro) {
168
163
  return _ro;
169
164
  } else if (typeof ResizeObserver !== 'undefined') {
170
165
  return _ro = new ResizeObserver(function (entries) {
171
166
  entries.forEach(function (entry) {
172
- _this._measureElement(entry.target, false);
167
+ _this._measureElement(entry.target, entry);
173
168
  });
174
169
  });
175
170
  } else {
176
171
  return null;
177
172
  }
178
173
  };
174
+ return {
175
+ disconnect: function disconnect() {
176
+ var _get;
177
+ return (_get = get()) == null ? void 0 : _get.disconnect();
178
+ },
179
+ observe: function observe(target) {
180
+ var _get2;
181
+ return (_get2 = get()) == null ? void 0 : _get2.observe(target, {
182
+ box: 'border-box'
183
+ });
184
+ },
185
+ unobserve: function unobserve(target) {
186
+ var _get3;
187
+ return (_get3 = get()) == null ? void 0 : _get3.unobserve(target);
188
+ }
189
+ };
179
190
  }();
180
191
  this.range = {
181
192
  startIndex: 0,
@@ -221,12 +232,9 @@ var Virtualizer = function Virtualizer(_opts) {
221
232
  _this.scrollElement = null;
222
233
  };
223
234
  this._didMount = function () {
224
- var ro = _this.getResizeObserver();
225
- Object.values(_this.measureElementCache).forEach(function (node) {
226
- return ro == null ? void 0 : ro.observe(node);
227
- });
235
+ _this.measureElementCache.forEach(_this.observer.observe);
228
236
  return function () {
229
- ro == null ? void 0 : ro.disconnect();
237
+ _this.observer.disconnect();
230
238
  _this.cleanup();
231
239
  };
232
240
  };
@@ -240,8 +248,11 @@ var Virtualizer = function Virtualizer(_opts) {
240
248
  behavior: undefined
241
249
  });
242
250
  _this.unsubs.push(_this.options.observeElementRect(_this, function (rect) {
251
+ var prev = _this.scrollRect;
243
252
  _this.scrollRect = rect;
244
- _this.maybeNotify();
253
+ if (_this.options.horizontal ? rect.width !== prev.width : rect.height !== prev.height) {
254
+ _this.maybeNotify();
255
+ }
245
256
  }));
246
257
  _this.unsubs.push(_this.options.observeElementOffset(_this, function (offset) {
247
258
  _this.scrollAdjustments = 0;
@@ -276,7 +287,7 @@ var Virtualizer = function Virtualizer(_opts) {
276
287
  var measurements = _this.measurementsCache.slice(0, min);
277
288
  for (var _i2 = min; _i2 < count; _i2++) {
278
289
  var key = getItemKey(_i2);
279
- var measuredSize = itemSizeCache[key];
290
+ var measuredSize = itemSizeCache.get(key);
280
291
  var start = measurements[_i2 - 1] ? measurements[_i2 - 1].end : paddingStart + scrollMargin;
281
292
  var size = typeof measuredSize === 'number' ? measuredSize : _this.options.estimateSize(_i2);
282
293
  var end = start + size;
@@ -343,39 +354,32 @@ var Virtualizer = function Virtualizer(_opts) {
343
354
  }
344
355
  return parseInt(indexStr, 10);
345
356
  };
346
- this._measureElement = function (node, sync) {
347
- var _this$itemSizeCache$i;
357
+ this._measureElement = function (node, entry) {
358
+ var _this$itemSizeCache$g;
348
359
  var index = _this.indexFromElement(node);
349
360
  var item = _this.measurementsCache[index];
350
361
  if (!item) {
351
362
  return;
352
363
  }
353
- var prevNode = _this.measureElementCache[item.key];
354
- var ro = _this.getResizeObserver();
364
+ var prevNode = _this.measureElementCache.get(item.key);
355
365
  if (!node.isConnected) {
356
- ro == null ? void 0 : ro.unobserve(node);
366
+ _this.observer.unobserve(node);
357
367
  if (node === prevNode) {
358
- delete _this.measureElementCache[item.key];
368
+ _this.measureElementCache["delete"](item.key);
359
369
  }
360
370
  return;
361
371
  }
362
372
  if (prevNode !== node) {
363
373
  if (prevNode) {
364
- ro == null ? void 0 : ro.unobserve(prevNode);
365
- }
366
- ro == null ? void 0 : ro.observe(node);
367
- _this.measureElementCache[item.key] = node;
368
- } else {
369
- if (!sync && !prevNode.__virtualizerSkipFirstNotSync) {
370
- prevNode.__virtualizerSkipFirstNotSync = true;
371
- return;
374
+ _this.observer.unobserve(prevNode);
372
375
  }
376
+ _this.observer.observe(node);
377
+ _this.measureElementCache.set(item.key, node);
373
378
  }
374
- var measuredItemSize = _this.options.measureElement(node, _this);
375
- var itemSize = (_this$itemSizeCache$i = _this.itemSizeCache[item.key]) != null ? _this$itemSizeCache$i : item.size;
379
+ var measuredItemSize = _this.options.measureElement(node, entry, _this);
380
+ var itemSize = (_this$itemSizeCache$g = _this.itemSizeCache.get(item.key)) != null ? _this$itemSizeCache$g : item.size;
376
381
  var delta = measuredItemSize - itemSize;
377
382
  if (delta !== 0) {
378
- var _extends2;
379
383
  if (item.start < _this.scrollOffset) {
380
384
  if (process.env.NODE_ENV !== 'production' && _this.options.debug) {
381
385
  console.info('correction', delta);
@@ -386,7 +390,7 @@ var Virtualizer = function Virtualizer(_opts) {
386
390
  });
387
391
  }
388
392
  _this.pendingMeasuredCacheIndexes.push(index);
389
- _this.itemSizeCache = _rollupPluginBabelHelpers["extends"]({}, _this.itemSizeCache, (_extends2 = {}, _extends2[item.key] = measuredItemSize, _extends2));
393
+ _this.itemSizeCache = new Map(_this.itemSizeCache.set(item.key, measuredItemSize));
390
394
  _this.notify();
391
395
  }
392
396
  };
@@ -394,7 +398,7 @@ var Virtualizer = function Virtualizer(_opts) {
394
398
  if (!node) {
395
399
  return;
396
400
  }
397
- _this._measureElement(node, true);
401
+ _this._measureElement(node, undefined);
398
402
  };
399
403
  this.getVirtualItems = utils.memo(function () {
400
404
  return [_this.getIndexes(), _this.getMeasurements()];
@@ -454,7 +458,7 @@ var Virtualizer = function Virtualizer(_opts) {
454
458
  return [_this.getOffsetForAlignment(toOffset, align), align];
455
459
  };
456
460
  this.isDynamicMode = function () {
457
- return Object.keys(_this.measureElementCache).length > 0;
461
+ return _this.measureElementCache.size > 0;
458
462
  };
459
463
  this.cancelScrollToIndex = function () {
460
464
  if (_this.scrollToIndexTimeoutId !== null) {
@@ -496,7 +500,7 @@ var Virtualizer = function Virtualizer(_opts) {
496
500
  if (behavior !== 'smooth' && _this.isDynamicMode()) {
497
501
  _this.scrollToIndexTimeoutId = setTimeout(function () {
498
502
  _this.scrollToIndexTimeoutId = null;
499
- var elementInDOM = !!_this.measureElementCache[_this.options.getItemKey(index)];
503
+ var elementInDOM = _this.measureElementCache.has(_this.options.getItemKey(index));
500
504
  if (elementInDOM) {
501
505
  var _this$getOffsetForInd2 = _this.getOffsetForIndex(index, align),
502
506
  _toOffset = _this$getOffsetForInd2[0];
@@ -540,7 +544,7 @@ var Virtualizer = function Virtualizer(_opts) {
540
544
  }, _this);
541
545
  };
542
546
  this.measure = function () {
543
- _this.itemSizeCache = {};
547
+ _this.itemSizeCache = new Map();
544
548
  _this.notify();
545
549
  };
546
550
  this.setOptions(_opts);
@@ -548,7 +552,7 @@ var Virtualizer = function Virtualizer(_opts) {
548
552
  this.scrollOffset = this.options.initialOffset;
549
553
  this.measurementsCache = this.options.initialMeasurementsCache;
550
554
  this.measurementsCache.forEach(function (item) {
551
- _this.itemSizeCache[item.key] = item.size;
555
+ _this.itemSizeCache.set(item.key, item.size);
552
556
  });
553
557
  this.maybeNotify();
554
558
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { approxEqual, memo, notUndefined } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nconst memoRectCallback = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n let prev: Rect = { height: -1, width: -1 }\n\n return (rect: Rect) => {\n if (\n instance.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n cb(rect)\n }\n\n prev = rect\n }\n}\n\nexport const observeElementRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry) {\n const { width, height } = entry.contentRect\n cb({\n width: Math.round(width),\n height: Math.round(height),\n })\n } else {\n cb({ width: 0, height: 0 })\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(offset)\n }\n\n scroll()\n\n const onScroll = (e: Event) => {\n const target = e.currentTarget as HTMLElement & Window\n const scrollX = target[propX]\n const scrollY = target[propY]\n\n if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {\n scroll()\n }\n\n prevX = scrollX\n prevY = scrollY\n }\n\n instance.scrollElement.addEventListener('scroll', onScroll, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll)\n }\n }\n}\n\nexport const observeElementOffset = createOffsetObserver('element')\nexport const observeWindowOffset = createOffsetObserver('window')\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\n) => {\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n el: TItemElement,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private scrollToIndexTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n private measureElementCache: Record<\n Key,\n TItemElement & { __virtualizerSkipFirstNotSync?: boolean }\n > = {}\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 this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache[item.key] = item.size\n })\n\n this.maybeNotify()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.maybeNotify()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n this.isScrolling = true\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n this.scrollOffset = offset\n\n this.maybeNotify()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n this.scrollDirection = null\n\n this.maybeNotify()\n }, this.options.scrollingDelay)\n }),\n )\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.scrollMargin,\n this.options.getItemKey,\n this.itemSizeCache,\n ],\n (count, paddingStart, scrollMargin, getItemKey, itemSizeCache) => {\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 = itemSizeCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart + scrollMargin\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\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 return (this.range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n }))\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private maybeNotify = memo(\n () => [...Object.values(this.calculateRange()), this.isScrolling],\n () => {\n this.notify()\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [...Object.values(this.range), this.isScrolling],\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.calculateRange(),\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n 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 ro?.unobserve(node)\n if (node === prevNode) {\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n ro?.observe(node)\n this.measureElementCache[item.key] = node\n } else {\n if (!sync && !prevNode.__virtualizerSkipFirstNotSync) {\n prevNode.__virtualizerSkipFirstNotSync = true\n return\n }\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemSizeCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemSizeCache = {\n ...this.itemSizeCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= this.scrollOffset) {\n align = 'start'\n } else if (toOffset >= this.scrollOffset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n toOffset = toOffset\n } else if (align === 'end') {\n toOffset = toOffset - size\n } else if (align === 'center') {\n toOffset = toOffset - size / 2\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n getOffsetForIndex = (index: number, align: ScrollAlignment = 'auto') => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n const measurement = notUndefined(this.getMeasurements()[index])\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return [this.scrollOffset, align] as const\n }\n }\n\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return [this.getOffsetForAlignment(toOffset, align), align] as const\n }\n\n private isDynamicMode = () => Object.keys(this.measureElementCache).length > 0\n\n private cancelScrollToIndex = () => {\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: undefined,\n behavior,\n })\n }\n\n scrollToIndex = (\n index: number,\n { align: initialAlign = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n const [toOffset, align] = this.getOffsetForIndex(index, initialAlign)\n\n this._scrollToOffset(toOffset, { adjustments: undefined, behavior })\n\n if (behavior !== 'smooth' && this.isDynamicMode()) {\n this.scrollToIndexTimeoutId = setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM =\n !!this.measureElementCache[this.options.getItemKey(index)]\n\n if (elementInDOM) {\n const [toOffset] = this.getOffsetForIndex(index, align)\n\n if (!approxEqual(toOffset, this.scrollOffset)) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.scrollOffset + delta, {\n adjustments: undefined,\n behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = {}\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","entry","contentRect","round","scrollElement","getBoundingClientRect","observe","unobserve","observeWindowRect","memoizedCallback","onResize","innerWidth","innerHeight","addEventListener","capture","passive","removeEventListener","scrollProps","element","window","createOffsetObserver","mode","propX","propY","prevX","prevY","scroll","offset","onScroll","e","target","currentTarget","scrollX","scrollY","observeElementOffset","observeWindowOffset","measureElement","windowScroll","adjustments","behavior","toOffset","scrollTo","elementScroll","Virtualizer","opts","unsubs","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","getResizeObserver","_ro","forEach","_measureElement","setOptions","Object","key","value","_extends","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","onChange","initialRect","scrollMargin","scrollingDelay","indexAttribute","initialMeasurementsCache","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","scrollRect","maybeNotify","clearTimeout","setTimeout","getSize","getMeasurements","memo","length","measurements","slice","measuredSize","size","estimateSize","process","env","NODE_ENV","calculateRange","outerSize","initialDeps","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","console","warn","parseInt","sync","item","prevNode","isConnected","__virtualizerSkipFirstNotSync","measuredItemSize","itemSize","delta","info","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","align","scrollSizeProp","scrollSize","document","documentElement","maxOffset","getOffsetForIndex","notUndefined","isDynamicMode","keys","cancelScrollToIndex","scrollToOffset","scrollToIndex","initialAlign","elementInDOM","approxEqual","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { approxEqual, memo, notUndefined } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nexport const observeElementRect = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = (rect: { width: number; height: number }) => {\n const { width, height } = rect\n cb({ width: Math.round(width), height: Math.round(height) })\n }\n\n handler(element.getBoundingClientRect())\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry) {\n const box = entry.borderBoxSize[0]\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize })\n return\n }\n }\n handler(element.getBoundingClientRect())\n })\n\n observer.observe(element, { box: 'border-box' })\n\n return () => {\n observer.unobserve(element)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<Window, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight })\n }\n handler()\n\n element.addEventListener('resize', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('resize', handler)\n }\n}\n\nexport const observeElementOffset = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollLeft' : 'scrollTop'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const observeWindowOffset = (\n instance: Virtualizer<Window, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollX' : 'scrollY'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<any, TItemElement>,\n) => {\n if (entry) {\n const box = entry.borderBoxSize[0]\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? 'inlineSize' : 'blockSize'],\n )\n return size\n }\n }\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\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 element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private scrollToIndexTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache = new Map<Key, number>()\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n measureElementCache = new Map<Key, TItemElement>()\n private observer = (() => {\n let _ro: ResizeObserver | null = null\n\n const get = () => {\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, entry)\n })\n }))\n } else {\n return null\n }\n }\n\n return {\n disconnect: () => get()?.disconnect(),\n observe: (target: Element) =>\n get()?.observe(target, { box: 'border-box' }),\n unobserve: (target: Element) => get()?.unobserve(target),\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 this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size)\n })\n\n this.maybeNotify()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\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 this.measureElementCache.forEach(this.observer.observe)\n return () => {\n this.observer.disconnect()\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\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n const prev = this.scrollRect\n this.scrollRect = rect\n if (\n this.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n this.maybeNotify()\n }\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n this.isScrolling = true\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n this.scrollOffset = offset\n\n this.maybeNotify()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n this.scrollDirection = null\n\n this.maybeNotify()\n }, this.options.scrollingDelay)\n }),\n )\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.scrollMargin,\n this.options.getItemKey,\n this.itemSizeCache,\n ],\n (count, paddingStart, scrollMargin, getItemKey, itemSizeCache) => {\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 = itemSizeCache.get(key)\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart + scrollMargin\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\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 return (this.range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n }))\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private maybeNotify = memo(\n () => [...Object.values(this.calculateRange()), this.isScrolling],\n () => {\n this.notify()\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [...Object.values(this.range), this.isScrolling],\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.calculateRange(),\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n 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 = (\n node: TItemElement,\n entry: ResizeObserverEntry | undefined,\n ) => {\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.get(item.key)\n\n if (!node.isConnected) {\n this.observer.unobserve(node)\n if (node === prevNode) {\n this.measureElementCache.delete(item.key)\n }\n return\n }\n\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode)\n }\n this.observer.observe(node)\n this.measureElementCache.set(item.key, node)\n }\n\n const measuredItemSize = this.options.measureElement(node, entry, this)\n\n const itemSize = this.itemSizeCache.get(item.key) ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n\n this.itemSizeCache = new Map(\n this.itemSizeCache.set(item.key, measuredItemSize),\n )\n\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, undefined)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= this.scrollOffset) {\n align = 'start'\n } else if (toOffset >= this.scrollOffset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n toOffset = toOffset\n } else if (align === 'end') {\n toOffset = toOffset - size\n } else if (align === 'center') {\n toOffset = toOffset - size / 2\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n getOffsetForIndex = (index: number, align: ScrollAlignment = 'auto') => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n const measurement = notUndefined(this.getMeasurements()[index])\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return [this.scrollOffset, align] as const\n }\n }\n\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return [this.getOffsetForAlignment(toOffset, align), align] as const\n }\n\n private isDynamicMode = () => this.measureElementCache.size > 0\n\n private cancelScrollToIndex = () => {\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: undefined,\n behavior,\n })\n }\n\n scrollToIndex = (\n index: number,\n { align: initialAlign = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n const [toOffset, align] = this.getOffsetForIndex(index, initialAlign)\n\n this._scrollToOffset(toOffset, { adjustments: undefined, behavior })\n\n if (behavior !== 'smooth' && this.isDynamicMode()) {\n this.scrollToIndexTimeoutId = setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM = this.measureElementCache.has(\n this.options.getItemKey(index),\n )\n\n if (elementInDOM) {\n const [toOffset] = this.getOffsetForIndex(index, align)\n\n if (!approxEqual(toOffset, this.scrollOffset)) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.scrollOffset + delta, {\n adjustments: undefined,\n behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = new Map()\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","observeElementRect","instance","cb","element","scrollElement","handler","rect","width","height","round","getBoundingClientRect","observer","ResizeObserver","entries","entry","box","borderBoxSize","inlineSize","blockSize","observe","unobserve","observeWindowRect","innerWidth","innerHeight","addEventListener","passive","removeEventListener","observeElementOffset","options","horizontal","observeWindowOffset","measureElement","size","windowScroll","offset","adjustments","behavior","toOffset","scrollTo","elementScroll","Virtualizer","opts","unsubs","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","Map","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","_ro","get","forEach","_measureElement","target","disconnect","setOptions","Object","key","value","_extends","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","onChange","initialRect","scrollMargin","scrollingDelay","indexAttribute","initialMeasurementsCache","notify","cleanup","filter","Boolean","d","_didMount","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","prev","scrollRect","maybeNotify","clearTimeout","setTimeout","getSize","getMeasurements","memo","length","measurements","slice","measuredSize","estimateSize","process","env","NODE_ENV","calculateRange","outerSize","values","initialDeps","getIndexes","indexFromElement","node","attributeName","indexStr","getAttribute","console","warn","parseInt","item","prevNode","isConnected","set","measuredItemSize","itemSize","delta","info","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","align","scrollSizeProp","scrollSize","document","documentElement","maxOffset","getOffsetForIndex","notUndefined","isDynamicMode","cancelScrollToIndex","scrollToOffset","scrollToIndex","initialAlign","elementInDOM","has","approxEqual","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":";;;;;;;;;;;;;;;;;AAIA;;AAuCA;;IAEaA,mBAAmB,GAAG,SAAtBA,mBAAmB,CAAIC,KAAa,EAAA;AAAA,EAAA,OAAKA,KAAK,CAAA;AAAA,EAAA;IAE9CC,qBAAqB,GAAG,SAAxBA,qBAAqB,CAAIC,KAAY,EAAK;AACrD,EAAA,IAAMC,KAAK,GAAGC,IAAI,CAACC,GAAG,CAACH,KAAK,CAACI,UAAU,GAAGJ,KAAK,CAACK,QAAQ,EAAE,CAAC,CAAC,CAAA;AAC5D,EAAA,IAAMC,GAAG,GAAGJ,IAAI,CAACK,GAAG,CAACP,KAAK,CAACQ,QAAQ,GAAGR,KAAK,CAACK,QAAQ,EAAEL,KAAK,CAACS,KAAK,GAAG,CAAC,CAAC,CAAA;EAEtE,IAAMC,GAAG,GAAG,EAAE,CAAA;EAEd,KAAK,IAAIC,EAAC,GAAGV,KAAK,EAAEU,EAAC,IAAIL,GAAG,EAAEK,EAAC,EAAE,EAAE;AACjCD,IAAAA,GAAG,CAACE,IAAI,CAACD,EAAC,CAAC,CAAA;AACb,GAAA;AAEA,EAAA,OAAOD,GAAG,CAAA;AACZ,EAAC;AAEM,IAAMG,kBAAkB,GAAG,SAArBA,kBAAkB,CAC7BC,QAA6B,EAC7BC,EAAwB,EACrB;AACH,EAAA,IAAMC,OAAO,GAAGF,QAAQ,CAACG,aAAa,CAAA;EACtC,IAAI,CAACD,OAAO,EAAE;AACZ,IAAA,OAAA;AACF,GAAA;AAEA,EAAA,IAAME,OAAO,GAAG,SAAVA,OAAO,CAAIC,IAAuC,EAAK;AAC3D,IAAA,IAAQC,KAAK,GAAaD,IAAI,CAAtBC,KAAK;MAAEC,MAAM,GAAKF,IAAI,CAAfE,MAAM,CAAA;AACrBN,IAAAA,EAAE,CAAC;AAAEK,MAAAA,KAAK,EAAElB,IAAI,CAACoB,KAAK,CAACF,KAAK,CAAC;AAAEC,MAAAA,MAAM,EAAEnB,IAAI,CAACoB,KAAK,CAACD,MAAM,CAAA;AAAE,KAAC,CAAC,CAAA;GAC7D,CAAA;AAEDH,EAAAA,OAAO,CAACF,OAAO,CAACO,qBAAqB,EAAE,CAAC,CAAA;AAExC,EAAA,IAAMC,QAAQ,GAAG,IAAIC,cAAc,CAAC,UAACC,OAAO,EAAK;AAC/C,IAAA,IAAMC,KAAK,GAAGD,OAAO,CAAC,CAAC,CAAC,CAAA;AACxB,IAAA,IAAIC,KAAK,EAAE;AACT,MAAA,IAAMC,GAAG,GAAGD,KAAK,CAACE,aAAa,CAAC,CAAC,CAAC,CAAA;AAClC,MAAA,IAAID,GAAG,EAAE;AACPV,QAAAA,OAAO,CAAC;UAAEE,KAAK,EAAEQ,GAAG,CAACE,UAAU;UAAET,MAAM,EAAEO,GAAG,CAACG,SAAAA;AAAU,SAAC,CAAC,CAAA;AACzD,QAAA,OAAA;AACF,OAAA;AACF,KAAA;AACAb,IAAAA,OAAO,CAACF,OAAO,CAACO,qBAAqB,EAAE,CAAC,CAAA;AAC1C,GAAC,CAAC,CAAA;AAEFC,EAAAA,QAAQ,CAACQ,OAAO,CAAChB,OAAO,EAAE;AAAEY,IAAAA,GAAG,EAAE,YAAA;AAAa,GAAC,CAAC,CAAA;AAEhD,EAAA,OAAO,YAAM;AACXJ,IAAAA,QAAQ,CAACS,SAAS,CAACjB,OAAO,CAAC,CAAA;GAC5B,CAAA;AACH,EAAC;AAEM,IAAMkB,iBAAiB,GAAG,SAApBA,iBAAiB,CAC5BpB,QAAkC,EAClCC,EAAwB,EACrB;AACH,EAAA,IAAMC,OAAO,GAAGF,QAAQ,CAACG,aAAa,CAAA;EACtC,IAAI,CAACD,OAAO,EAAE;AACZ,IAAA,OAAA;AACF,GAAA;AAEA,EAAA,IAAME,OAAO,GAAG,SAAVA,OAAO,GAAS;AACpBH,IAAAA,EAAE,CAAC;MAAEK,KAAK,EAAEJ,OAAO,CAACmB,UAAU;MAAEd,MAAM,EAAEL,OAAO,CAACoB,WAAAA;AAAY,KAAC,CAAC,CAAA;GAC/D,CAAA;AACDlB,EAAAA,OAAO,EAAE,CAAA;AAETF,EAAAA,OAAO,CAACqB,gBAAgB,CAAC,QAAQ,EAAEnB,OAAO,EAAE;AAC1CoB,IAAAA,OAAO,EAAE,IAAA;AACX,GAAC,CAAC,CAAA;AAEF,EAAA,OAAO,YAAM;AACXtB,IAAAA,OAAO,CAACuB,mBAAmB,CAAC,QAAQ,EAAErB,OAAO,CAAC,CAAA;GAC/C,CAAA;AACH,EAAC;AAEM,IAAMsB,oBAAoB,GAAG,SAAvBA,oBAAoB,CAC/B1B,QAA6B,EAC7BC,EAA4B,EACzB;AACH,EAAA,IAAMC,OAAO,GAAGF,QAAQ,CAACG,aAAa,CAAA;EACtC,IAAI,CAACD,OAAO,EAAE;AACZ,IAAA,OAAA;AACF,GAAA;AAEA,EAAA,IAAME,OAAO,GAAG,SAAVA,OAAO,GAAS;AACpBH,IAAAA,EAAE,CAACC,OAAO,CAACF,QAAQ,CAAC2B,OAAO,CAACC,UAAU,GAAG,YAAY,GAAG,WAAW,CAAC,CAAC,CAAA;GACtE,CAAA;AACDxB,EAAAA,OAAO,EAAE,CAAA;AAETF,EAAAA,OAAO,CAACqB,gBAAgB,CAAC,QAAQ,EAAEnB,OAAO,EAAE;AAC1CoB,IAAAA,OAAO,EAAE,IAAA;AACX,GAAC,CAAC,CAAA;AAEF,EAAA,OAAO,YAAM;AACXtB,IAAAA,OAAO,CAACuB,mBAAmB,CAAC,QAAQ,EAAErB,OAAO,CAAC,CAAA;GAC/C,CAAA;AACH,EAAC;AAEM,IAAMyB,mBAAmB,GAAG,SAAtBA,mBAAmB,CAC9B7B,QAAkC,EAClCC,EAA4B,EACzB;AACH,EAAA,IAAMC,OAAO,GAAGF,QAAQ,CAACG,aAAa,CAAA;EACtC,IAAI,CAACD,OAAO,EAAE;AACZ,IAAA,OAAA;AACF,GAAA;AAEA,EAAA,IAAME,OAAO,GAAG,SAAVA,OAAO,GAAS;AACpBH,IAAAA,EAAE,CAACC,OAAO,CAACF,QAAQ,CAAC2B,OAAO,CAACC,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC,CAAA;GACjE,CAAA;AACDxB,EAAAA,OAAO,EAAE,CAAA;AAETF,EAAAA,OAAO,CAACqB,gBAAgB,CAAC,QAAQ,EAAEnB,OAAO,EAAE;AAC1CoB,IAAAA,OAAO,EAAE,IAAA;AACX,GAAC,CAAC,CAAA;AAEF,EAAA,OAAO,YAAM;AACXtB,IAAAA,OAAO,CAACuB,mBAAmB,CAAC,QAAQ,EAAErB,OAAO,CAAC,CAAA;GAC/C,CAAA;AACH,EAAC;AAEM,IAAM0B,cAAc,GAAG,SAAjBA,cAAc,CACzB5B,OAAqB,EACrBW,KAAsC,EACtCb,QAAwC,EACrC;AACH,EAAA,IAAIa,KAAK,EAAE;AACT,IAAA,IAAMC,GAAG,GAAGD,KAAK,CAACE,aAAa,CAAC,CAAC,CAAC,CAAA;AAClC,IAAA,IAAID,GAAG,EAAE;AACP,MAAA,IAAMiB,IAAI,GAAG3C,IAAI,CAACoB,KAAK,CACrBM,GAAG,CAACd,QAAQ,CAAC2B,OAAO,CAACC,UAAU,GAAG,YAAY,GAAG,WAAW,CAAC,CAC9D,CAAA;AACD,MAAA,OAAOG,IAAI,CAAA;AACb,KAAA;AACF,GAAA;AACA,EAAA,OAAO3C,IAAI,CAACoB,KAAK,CACfN,OAAO,CAACO,qBAAqB,EAAE,CAC7BT,QAAQ,CAAC2B,OAAO,CAACC,UAAU,GAAG,OAAO,GAAG,QAAQ,CACjD,CACF,CAAA;AACH,EAAC;AAEM,IAAMI,YAAY,GAAG,SAAfA,YAAY,CACvBC,MAAc,EAKdjC,IAAAA,EAAAA,QAA6B,EAC1B;AAAA,EAAA,IAAA,qBAAA,EAAA,sBAAA,CAAA;AAAA,EAAA,IAAA,gBAAA,GAAA,IAAA,CAJDkC,WAAW;AAAXA,IAAAA,WAAW,iCAAG,CAAC,GAAA,gBAAA;AACfC,IAAAA,QAAQ,QAARA,QAAQ,CAAA;AAIV,EAAA,IAAMC,QAAQ,GAAGH,MAAM,GAAGC,WAAW,CAAA;EAErC,CAAAlC,qBAAAA,GAAAA,QAAQ,CAACG,aAAa,KAAtB,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAwBkC,QAAQ,IAAhC,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAwBA,QAAQ,EAAA,sBAAA,GAAA,EAAA,EAAA,sBAAA,CAC7BrC,QAAQ,CAAC2B,OAAO,CAACC,UAAU,GAAG,MAAM,GAAG,KAAK,CAAGQ,GAAAA,QAAQ,EACxDD,sBAAAA,CAAAA,QAAQ,GAARA,QAAQ,EACR,sBAAA,EAAA,CAAA;AACJ,EAAC;AAEM,IAAMG,aAAa,GAAG,SAAhBA,aAAa,CACxBL,MAAc,EAKdjC,KAAAA,EAAAA,QAA6B,EAC1B;AAAA,EAAA,IAAA,sBAAA,EAAA,sBAAA,CAAA;AAAA,EAAA,IAAA,iBAAA,GAAA,KAAA,CAJDkC,WAAW;AAAXA,IAAAA,WAAW,kCAAG,CAAC,GAAA,iBAAA;AACfC,IAAAA,QAAQ,SAARA,QAAQ,CAAA;AAIV,EAAA,IAAMC,QAAQ,GAAGH,MAAM,GAAGC,WAAW,CAAA;EAErC,CAAAlC,sBAAAA,GAAAA,QAAQ,CAACG,aAAa,KAAtB,IAAA,GAAA,KAAA,CAAA,GAAA,sBAAA,CAAwBkC,QAAQ,IAAhC,IAAA,GAAA,KAAA,CAAA,GAAA,sBAAA,CAAwBA,QAAQ,EAAA,sBAAA,GAAA,EAAA,EAAA,sBAAA,CAC7BrC,QAAQ,CAAC2B,OAAO,CAACC,UAAU,GAAG,MAAM,GAAG,KAAK,CAAGQ,GAAAA,QAAQ,EACxDD,sBAAAA,CAAAA,QAAQ,GAARA,QAAQ,EACR,sBAAA,EAAA,CAAA;AACJ,EAAC;AAkDD,IAAaI,WAAW,GA+CtB,SAAYC,WAAAA,CAAAA,KAAsD,EAAE;AAAA,EAAA,IAAA,KAAA,GAAA,IAAA,CAAA;EAAA,IA3C5DC,CAAAA,MAAM,GAA4B,EAAE,CAAA;EAAA,IAE5CtC,CAAAA,aAAa,GAA0B,IAAI,CAAA;EAAA,IAC3CuC,CAAAA,WAAW,GAAY,KAAK,CAAA;EAAA,IACpBC,CAAAA,oBAAoB,GAAyC,IAAI,CAAA;EAAA,IACjEC,CAAAA,sBAAsB,GAAyC,IAAI,CAAA;EAAA,IAC3EC,CAAAA,iBAAiB,GAAkB,EAAE,CAAA;AAAA,EAAA,IAAA,CAC7BC,aAAa,GAAG,IAAIC,GAAG,EAAe,CAAA;EAAA,IACtCC,CAAAA,2BAA2B,GAAa,EAAE,CAAA;EAAA,IAGlDC,CAAAA,eAAe,GAA2B,IAAI,CAAA;EAAA,IACtCC,CAAAA,iBAAiB,GAAW,CAAC,CAAA;AAAA,EAAA,IAAA,CACrCC,mBAAmB,GAAG,IAAIJ,GAAG,EAAqB,CAAA;EAAA,IAC1CrC,CAAAA,QAAQ,GAAI,YAAM;IACxB,IAAI0C,GAA0B,GAAG,IAAI,CAAA;AAErC,IAAA,IAAMC,GAAG,GAAG,SAANA,GAAG,GAAS;AAChB,MAAA,IAAID,GAAG,EAAE;AACP,QAAA,OAAOA,GAAG,CAAA;AACZ,OAAC,MAAM,IAAI,OAAOzC,cAAc,KAAK,WAAW,EAAE;AAChD,QAAA,OAAQyC,GAAG,GAAG,IAAIzC,cAAc,CAAC,UAACC,OAAO,EAAK;AAC5CA,UAAAA,OAAO,CAAC0C,OAAO,CAAC,UAACzC,KAAK,EAAK;YACzB,KAAI,CAAC0C,eAAe,CAAC1C,KAAK,CAAC2C,MAAM,EAAkB3C,KAAK,CAAC,CAAA;AAC3D,WAAC,CAAC,CAAA;AACJ,SAAC,CAAC,CAAA;AACJ,OAAC,MAAM;AACL,QAAA,OAAO,IAAI,CAAA;AACb,OAAA;KACD,CAAA;IAED,OAAO;AACL4C,MAAAA,UAAU,EAAE,SAAA,UAAA,GAAA;AAAA,QAAA,IAAA,IAAA,CAAA;AAAA,QAAA,OAAA,CAAA,IAAA,GAAMJ,GAAG,EAAE,KAAL,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAOI,UAAU,EAAE,CAAA;AAAA,OAAA;MACrCvC,OAAO,EAAE,iBAACsC,MAAe,EAAA;AAAA,QAAA,IAAA,KAAA,CAAA;AAAA,QAAA,OAAA,CAAA,KAAA,GACvBH,GAAG,EAAE,KAAA,IAAA,GAAA,KAAA,CAAA,GAAL,MAAOnC,OAAO,CAACsC,MAAM,EAAE;AAAE1C,UAAAA,GAAG,EAAE,YAAA;AAAa,SAAC,CAAC,CAAA;AAAA,OAAA;MAC/CK,SAAS,EAAE,mBAACqC,MAAe,EAAA;AAAA,QAAA,IAAA,KAAA,CAAA;AAAA,QAAA,OAAA,CAAA,KAAA,GAAKH,GAAG,EAAE,KAAA,IAAA,GAAA,KAAA,CAAA,GAAL,MAAOlC,SAAS,CAACqC,MAAM,CAAC,CAAA;AAAA,OAAA;KACzD,CAAA;AACH,GAAC,EAAG,CAAA;AAAA,EAAA,IAAA,CACJtE,KAAK,GAA6C;AAChDI,IAAAA,UAAU,EAAE,CAAC;AACbI,IAAAA,QAAQ,EAAE,CAAA;GACX,CAAA;AAAA,EAAA,IAAA,CAcDgE,UAAU,GAAG,UAAClB,IAAsD,EAAK;IACvEmB,MAAM,CAAC/C,OAAO,CAAC4B,IAAI,CAAC,CAACc,OAAO,CAAC,UAAkB,KAAA,EAAA;AAAA,MAAA,IAAhBM,GAAG,GAAA,KAAA,CAAA,CAAA,CAAA;QAAEC,KAAK,GAAA,KAAA,CAAA,CAAA,CAAA,CAAA;MACvC,IAAI,OAAOA,KAAK,KAAK,WAAW,EAAE,OAAQrB,IAAI,CAASoB,GAAG,CAAC,CAAA;AAC7D,KAAC,CAAC,CAAA;AAEF,IAAA,KAAI,CAACjC,OAAO,GAAAmC,oCAAA,CAAA;AACVC,MAAAA,KAAK,EAAE,KAAK;AACZC,MAAAA,aAAa,EAAE,CAAC;AAChBzE,MAAAA,QAAQ,EAAE,CAAC;AACX0E,MAAAA,YAAY,EAAE,CAAC;AACfC,MAAAA,UAAU,EAAE,CAAC;AACbC,MAAAA,kBAAkB,EAAE,CAAC;AACrBC,MAAAA,gBAAgB,EAAE,CAAC;AACnBxC,MAAAA,UAAU,EAAE,KAAK;AACjByC,MAAAA,UAAU,EAAEtF,mBAAmB;AAC/BuF,MAAAA,cAAc,EAAErF,qBAAqB;MACrCsF,QAAQ,EAAE,SAAM,QAAA,GAAA,EAAE;AAClBzC,MAAAA,cAAc,EAAdA,cAAc;AACd0C,MAAAA,WAAW,EAAE;AAAElE,QAAAA,KAAK,EAAE,CAAC;AAAEC,QAAAA,MAAM,EAAE,CAAA;OAAG;AACpCkE,MAAAA,YAAY,EAAE,CAAC;AACfC,MAAAA,cAAc,EAAE,GAAG;AACnBC,MAAAA,cAAc,EAAE,YAAY;AAC5BC,MAAAA,wBAAwB,EAAE,EAAA;AAAE,KAAA,EACzBpC,IAAI,CACR,CAAA;GACF,CAAA;EAAA,IAEOqC,CAAAA,MAAM,GAAG,YAAM;AACrB,IAAA,KAAI,CAAClD,OAAO,CAAC4C,QAAQ,IAArB,IAAA,GAAA,KAAA,CAAA,GAAA,KAAI,CAAC5C,OAAO,CAAC4C,QAAQ,CAAG,KAAI,CAAC,CAAA;GAC9B,CAAA;EAAA,IAEOO,CAAAA,OAAO,GAAG,YAAM;IACtB,KAAI,CAACrC,MAAM,CAACsC,MAAM,CAACC,OAAO,CAAC,CAAC1B,OAAO,CAAC,UAAC2B,CAAC,EAAA;AAAA,MAAA,OAAKA,CAAC,EAAG,CAAA;KAAC,CAAA,CAAA;IAChD,KAAI,CAACxC,MAAM,GAAG,EAAE,CAAA;IAChB,KAAI,CAACtC,aAAa,GAAG,IAAI,CAAA;GAC1B,CAAA;EAAA,IAED+E,CAAAA,SAAS,GAAG,YAAM;IAChB,KAAI,CAAC/B,mBAAmB,CAACG,OAAO,CAAC,KAAI,CAAC5C,QAAQ,CAACQ,OAAO,CAAC,CAAA;AACvD,IAAA,OAAO,YAAM;AACX,MAAA,KAAI,CAACR,QAAQ,CAAC+C,UAAU,EAAE,CAAA;MAC1B,KAAI,CAACqB,OAAO,EAAE,CAAA;KACf,CAAA;GACF,CAAA;EAAA,IAEDK,CAAAA,WAAW,GAAG,YAAM;AAClB,IAAA,IAAMhF,aAAa,GAAG,KAAI,CAACwB,OAAO,CAACyD,gBAAgB,EAAE,CAAA;AAErD,IAAA,IAAI,KAAI,CAACjF,aAAa,KAAKA,aAAa,EAAE;MACxC,KAAI,CAAC2E,OAAO,EAAE,CAAA;MAEd,KAAI,CAAC3E,aAAa,GAAGA,aAAa,CAAA;AAElC,MAAA,KAAI,CAACkF,eAAe,CAAC,KAAI,CAACC,YAAY,EAAE;AACtCpD,QAAAA,WAAW,EAAEqD,SAAS;AACtBpD,QAAAA,QAAQ,EAAEoD,SAAAA;AACZ,OAAC,CAAC,CAAA;AAEF,MAAA,KAAI,CAAC9C,MAAM,CAAC3C,IAAI,CACd,KAAI,CAAC6B,OAAO,CAAC5B,kBAAkB,CAAC,KAAI,EAAE,UAACM,IAAI,EAAK;AAC9C,QAAA,IAAMmF,IAAI,GAAG,KAAI,CAACC,UAAU,CAAA;QAC5B,KAAI,CAACA,UAAU,GAAGpF,IAAI,CAAA;QACtB,IACE,KAAI,CAACsB,OAAO,CAACC,UAAU,GACnBvB,IAAI,CAACC,KAAK,KAAKkF,IAAI,CAAClF,KAAK,GACzBD,IAAI,CAACE,MAAM,KAAKiF,IAAI,CAACjF,MAAM,EAC/B;UACA,KAAI,CAACmF,WAAW,EAAE,CAAA;AACpB,SAAA;AACF,OAAC,CAAC,CACH,CAAA;AAED,MAAA,KAAI,CAACjD,MAAM,CAAC3C,IAAI,CACd,KAAI,CAAC6B,OAAO,CAACD,oBAAoB,CAAC,KAAI,EAAE,UAACO,MAAM,EAAK;QAClD,KAAI,CAACiB,iBAAiB,GAAG,CAAC,CAAA;AAE1B,QAAA,IAAI,KAAI,CAACoC,YAAY,KAAKrD,MAAM,EAAE;AAChC,UAAA,OAAA;AACF,SAAA;AAEA,QAAA,IAAI,KAAI,CAACU,oBAAoB,KAAK,IAAI,EAAE;AACtCgD,UAAAA,YAAY,CAAC,KAAI,CAAChD,oBAAoB,CAAC,CAAA;UACvC,KAAI,CAACA,oBAAoB,GAAG,IAAI,CAAA;AAClC,SAAA;QAEA,KAAI,CAACD,WAAW,GAAG,IAAI,CAAA;QACvB,KAAI,CAACO,eAAe,GAClB,KAAI,CAACqC,YAAY,GAAGrD,MAAM,GAAG,SAAS,GAAG,UAAU,CAAA;QACrD,KAAI,CAACqD,YAAY,GAAGrD,MAAM,CAAA;QAE1B,KAAI,CAACyD,WAAW,EAAE,CAAA;AAElB,QAAA,KAAI,CAAC/C,oBAAoB,GAAGiD,UAAU,CAAC,YAAM;UAC3C,KAAI,CAACjD,oBAAoB,GAAG,IAAI,CAAA;UAChC,KAAI,CAACD,WAAW,GAAG,KAAK,CAAA;UACxB,KAAI,CAACO,eAAe,GAAG,IAAI,CAAA;UAE3B,KAAI,CAACyC,WAAW,EAAE,CAAA;AACpB,SAAC,EAAE,KAAI,CAAC/D,OAAO,CAAC+C,cAAc,CAAC,CAAA;AACjC,OAAC,CAAC,CACH,CAAA;AACH,KAAA;GACD,CAAA;EAAA,IAEOmB,CAAAA,OAAO,GAAG,YAAM;AACtB,IAAA,OAAO,KAAI,CAACJ,UAAU,CAAC,KAAI,CAAC9D,OAAO,CAACC,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAA;GACrE,CAAA;EAAA,IAEOkE,CAAAA,eAAe,GAAGC,UAAI,CAC5B,YAAA;AAAA,IAAA,OAAM,CACJ,KAAI,CAACpE,OAAO,CAAChC,KAAK,EAClB,KAAI,CAACgC,OAAO,CAACsC,YAAY,EACzB,KAAI,CAACtC,OAAO,CAAC8C,YAAY,EACzB,KAAI,CAAC9C,OAAO,CAAC0C,UAAU,EACvB,KAAI,CAACvB,aAAa,CACnB,CAAA;GACD,EAAA,UAACnD,KAAK,EAAEsE,YAAY,EAAEQ,YAAY,EAAEJ,UAAU,EAAEvB,aAAa,EAAK;IAChE,IAAMrD,GAAG,GACP,KAAI,CAACuD,2BAA2B,CAACgD,MAAM,GAAG,CAAC,GACvC5G,IAAI,CAACK,GAAG,OAARL,IAAI,EAAQ,KAAI,CAAC4D,2BAA2B,CAAC,GAC7C,CAAC,CAAA;IACP,KAAI,CAACA,2BAA2B,GAAG,EAAE,CAAA;IAErC,IAAMiD,YAAY,GAAG,KAAI,CAACpD,iBAAiB,CAACqD,KAAK,CAAC,CAAC,EAAEzG,GAAG,CAAC,CAAA;IAEzD,KAAK,IAAII,GAAC,GAAGJ,GAAG,EAAEI,GAAC,GAAGF,KAAK,EAAEE,GAAC,EAAE,EAAE;AAChC,MAAA,IAAM+D,GAAG,GAAGS,UAAU,CAACxE,GAAC,CAAC,CAAA;AACzB,MAAA,IAAMsG,YAAY,GAAGrD,aAAa,CAACO,GAAG,CAACO,GAAG,CAAC,CAAA;MAC3C,IAAMzE,KAAK,GAAG8G,YAAY,CAACpG,GAAC,GAAG,CAAC,CAAC,GAC7BoG,YAAY,CAACpG,GAAC,GAAG,CAAC,CAAC,CAAEL,GAAG,GACxByE,YAAY,GAAGQ,YAAY,CAAA;AAC/B,MAAA,IAAM1C,IAAI,GACR,OAAOoE,YAAY,KAAK,QAAQ,GAC5BA,YAAY,GACZ,KAAI,CAACxE,OAAO,CAACyE,YAAY,CAACvG,GAAC,CAAC,CAAA;AAClC,MAAA,IAAML,GAAG,GAAGL,KAAK,GAAG4C,IAAI,CAAA;MACxBkE,YAAY,CAACpG,GAAC,CAAC,GAAG;AAAEb,QAAAA,KAAK,EAAEa,GAAC;AAAEV,QAAAA,KAAK,EAALA,KAAK;AAAE4C,QAAAA,IAAI,EAAJA,IAAI;AAAEvC,QAAAA,GAAG,EAAHA,GAAG;AAAEoE,QAAAA,GAAG,EAAHA,GAAAA;OAAK,CAAA;AACvD,KAAA;IAEA,KAAI,CAACf,iBAAiB,GAAGoD,YAAY,CAAA;AAErC,IAAA,OAAOA,YAAY,CAAA;AACrB,GAAC,EACD;IACErC,GAAG,EAAEyC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,IAAI,iBAAiB;AAC/DxC,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;AAAA,MAAA,OAAM,KAAI,CAACpC,OAAO,CAACoC,KAAK,CAAA;AAAA,KAAA;AACjC,GAAC,CACF,CAAA;EAAA,IAEDyC,CAAAA,cAAc,GAAGT,UAAI,CACnB,YAAA;AAAA,IAAA,OAAM,CAAC,KAAI,CAACD,eAAe,EAAE,EAAE,KAAI,CAACD,OAAO,EAAE,EAAE,KAAI,CAACP,YAAY,CAAC,CAAA;AAAA,GAAA,EACjE,UAACW,YAAY,EAAEQ,SAAS,EAAEnB,YAAY,EAAK;AACzC,IAAA,OAAQ,KAAI,CAACpG,KAAK,GAAGsH,cAAc,CAAC;AAClCP,MAAAA,YAAY,EAAZA,YAAY;AACZQ,MAAAA,SAAS,EAATA,SAAS;AACTnB,MAAAA,YAAY,EAAZA,YAAAA;AACF,KAAC,CAAC,CAAA;AACJ,GAAC,EACD;IACE1B,GAAG,EAAEyC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,IAAI,gBAAgB;AAC9DxC,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;AAAA,MAAA,OAAM,KAAI,CAACpC,OAAO,CAACoC,KAAK,CAAA;AAAA,KAAA;AACjC,GAAC,CACF,CAAA;EAAA,IAEO2B,CAAAA,WAAW,GAAGK,UAAI,CACxB,YAAA;AAAA,IAAA,OAAA,EAAA,CAAA,MAAA,CAAUpC,MAAM,CAAC+C,MAAM,CAAC,KAAI,CAACF,cAAc,EAAE,CAAC,EAAA,CAAE,KAAI,CAAC9D,WAAW,CAAA,CAAA,CAAA;AAAA,GAAC,EACjE,YAAM;IACJ,KAAI,CAACmC,MAAM,EAAE,CAAA;AACf,GAAC,EACD;IACEjB,GAAG,EAAEyC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,IAAI,aAAa;AAC3DxC,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;AAAA,MAAA,OAAM,KAAI,CAACpC,OAAO,CAACoC,KAAK,CAAA;AAAA,KAAA;AAC/B4C,IAAAA,WAAW,EAAMhD,EAAAA,CAAAA,MAAAA,CAAAA,MAAM,CAAC+C,MAAM,CAAC,IAAI,CAACxH,KAAK,CAAC,EAAA,CAAE,IAAI,CAACwD,WAAW,CAAA,CAAA;AAC9D,GAAC,CACF,CAAA;EAAA,IAEOkE,CAAAA,UAAU,GAAGb,UAAI,CACvB,YAAA;IAAA,OAAM,CACJ,KAAI,CAACpE,OAAO,CAAC2C,cAAc,EAC3B,KAAI,CAACkC,cAAc,EAAE,EACrB,KAAI,CAAC7E,OAAO,CAACpC,QAAQ,EACrB,KAAI,CAACoC,OAAO,CAAChC,KAAK,CACnB,CAAA;GACD,EAAA,UAAC2E,cAAc,EAAEpF,KAAK,EAAEK,QAAQ,EAAEI,KAAK,EAAK;IAC1C,OAAO2E,cAAc,0CAChBpF,KAAK,EAAA;AACRK,MAAAA,QAAQ,EAARA,QAAQ;AACRI,MAAAA,KAAK,EAALA,KAAAA;KACA,CAAA,CAAA,CAAA;AACJ,GAAC,EACD;IACEiE,GAAG,EAAEyC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,IAAI,YAAY;AAC1DxC,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;AAAA,MAAA,OAAM,KAAI,CAACpC,OAAO,CAACoC,KAAK,CAAA;AAAA,KAAA;AACjC,GAAC,CACF,CAAA;AAAA,EAAA,IAAA,CAED8C,gBAAgB,GAAG,UAACC,IAAkB,EAAK;AACzC,IAAA,IAAMC,aAAa,GAAG,KAAI,CAACpF,OAAO,CAACgD,cAAc,CAAA;AACjD,IAAA,IAAMqC,QAAQ,GAAGF,IAAI,CAACG,YAAY,CAACF,aAAa,CAAC,CAAA;IAEjD,IAAI,CAACC,QAAQ,EAAE;AACbE,MAAAA,OAAO,CAACC,IAAI,CACiBJ,0BAAAA,GAAAA,aAAa,GACzC,gCAAA,CAAA,CAAA;AACD,MAAA,OAAO,CAAC,CAAC,CAAA;AACX,KAAA;AAEA,IAAA,OAAOK,QAAQ,CAACJ,QAAQ,EAAE,EAAE,CAAC,CAAA;GAC9B,CAAA;AAAA,EAAA,IAAA,CAEOzD,eAAe,GAAG,UACxBuD,IAAkB,EAClBjG,KAAsC,EACnC;AAAA,IAAA,IAAA,qBAAA,CAAA;AACH,IAAA,IAAM7B,KAAK,GAAG,KAAI,CAAC6H,gBAAgB,CAACC,IAAI,CAAC,CAAA;AAEzC,IAAA,IAAMO,IAAI,GAAG,KAAI,CAACxE,iBAAiB,CAAC7D,KAAK,CAAC,CAAA;IAC1C,IAAI,CAACqI,IAAI,EAAE;AACT,MAAA,OAAA;AACF,KAAA;IAEA,IAAMC,QAAQ,GAAG,KAAI,CAACnE,mBAAmB,CAACE,GAAG,CAACgE,IAAI,CAACzD,GAAG,CAAC,CAAA;AAEvD,IAAA,IAAI,CAACkD,IAAI,CAACS,WAAW,EAAE;AACrB,MAAA,KAAI,CAAC7G,QAAQ,CAACS,SAAS,CAAC2F,IAAI,CAAC,CAAA;MAC7B,IAAIA,IAAI,KAAKQ,QAAQ,EAAE;AACrB,QAAA,KAAI,CAACnE,mBAAmB,CAAA,QAAA,CAAO,CAACkE,IAAI,CAACzD,GAAG,CAAC,CAAA;AAC3C,OAAA;AACA,MAAA,OAAA;AACF,KAAA;IAEA,IAAI0D,QAAQ,KAAKR,IAAI,EAAE;AACrB,MAAA,IAAIQ,QAAQ,EAAE;AACZ,QAAA,KAAI,CAAC5G,QAAQ,CAACS,SAAS,CAACmG,QAAQ,CAAC,CAAA;AACnC,OAAA;AACA,MAAA,KAAI,CAAC5G,QAAQ,CAACQ,OAAO,CAAC4F,IAAI,CAAC,CAAA;MAC3B,KAAI,CAAC3D,mBAAmB,CAACqE,GAAG,CAACH,IAAI,CAACzD,GAAG,EAAEkD,IAAI,CAAC,CAAA;AAC9C,KAAA;AAEA,IAAA,IAAMW,gBAAgB,GAAG,KAAI,CAAC9F,OAAO,CAACG,cAAc,CAACgF,IAAI,EAAEjG,KAAK,EAAE,KAAI,CAAC,CAAA;AAEvE,IAAA,IAAM6G,QAAQ,GAAA,CAAA,qBAAA,GAAG,KAAI,CAAC5E,aAAa,CAACO,GAAG,CAACgE,IAAI,CAACzD,GAAG,CAAC,KAAIyD,IAAAA,GAAAA,qBAAAA,GAAAA,IAAI,CAACtF,IAAI,CAAA;AAE9D,IAAA,IAAM4F,KAAK,GAAGF,gBAAgB,GAAGC,QAAQ,CAAA;IAEzC,IAAIC,KAAK,KAAK,CAAC,EAAE;AACf,MAAA,IAAIN,IAAI,CAAClI,KAAK,GAAG,KAAI,CAACmG,YAAY,EAAE;AAClC,QAAA,IAAIe,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,IAAI,KAAI,CAAC5E,OAAO,CAACoC,KAAK,EAAE;AAC/DmD,UAAAA,OAAO,CAACU,IAAI,CAAC,YAAY,EAAED,KAAK,CAAC,CAAA;AACnC,SAAA;AAEA,QAAA,KAAI,CAACtC,eAAe,CAAC,KAAI,CAACC,YAAY,EAAE;AACtCpD,UAAAA,WAAW,EAAG,KAAI,CAACgB,iBAAiB,IAAIyE,KAAM;AAC9CxF,UAAAA,QAAQ,EAAEoD,SAAAA;AACZ,SAAC,CAAC,CAAA;AACJ,OAAA;AAEA,MAAA,KAAI,CAACvC,2BAA2B,CAAClD,IAAI,CAACd,KAAK,CAAC,CAAA;AAE5C,MAAA,KAAI,CAAC8D,aAAa,GAAG,IAAIC,GAAG,CAC1B,KAAI,CAACD,aAAa,CAAC0E,GAAG,CAACH,IAAI,CAACzD,GAAG,EAAE6D,gBAAgB,CAAC,CACnD,CAAA;MAED,KAAI,CAAC5C,MAAM,EAAE,CAAA;AACf,KAAA;GACD,CAAA;AAAA,EAAA,IAAA,CAED/C,cAAc,GAAG,UAACgF,IAAyB,EAAK;IAC9C,IAAI,CAACA,IAAI,EAAE;AACT,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,KAAI,CAACvD,eAAe,CAACuD,IAAI,EAAEvB,SAAS,CAAC,CAAA;GACtC,CAAA;EAAA,IAEDsC,CAAAA,eAAe,GAAG9B,UAAI,CACpB,YAAA;IAAA,OAAM,CAAC,KAAI,CAACa,UAAU,EAAE,EAAE,KAAI,CAACd,eAAe,EAAE,CAAC,CAAA;AAAA,GAAA,EACjD,UAACgC,OAAO,EAAE7B,YAAY,EAAK;IACzB,IAAM8B,YAA2B,GAAG,EAAE,CAAA;AAEtC,IAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAGH,OAAO,CAAC9B,MAAM,EAAEgC,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;AAClD,MAAA,IAAMnI,GAAC,GAAGiI,OAAO,CAACE,CAAC,CAAE,CAAA;AACrB,MAAA,IAAME,WAAW,GAAGjC,YAAY,CAACpG,GAAC,CAAE,CAAA;AAEpCkI,MAAAA,YAAY,CAACjI,IAAI,CAACoI,WAAW,CAAC,CAAA;AAChC,KAAA;AAEA,IAAA,OAAOH,YAAY,CAAA;AACrB,GAAC,EACD;IACEnE,GAAG,EAAEyC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,IAAI,YAAY;AAC1DxC,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;AAAA,MAAA,OAAM,KAAI,CAACpC,OAAO,CAACoC,KAAK,CAAA;AAAA,KAAA;AACjC,GAAC,CACF,CAAA;AAAA,EAAA,IAAA,CAEDoE,qBAAqB,GAAG,UAAC/F,QAAgB,EAAEgG,KAAsB,EAAK;AACpE,IAAA,IAAMrG,IAAI,GAAG,KAAI,CAAC8D,OAAO,EAAE,CAAA;IAE3B,IAAIuC,KAAK,KAAK,MAAM,EAAE;AACpB,MAAA,IAAIhG,QAAQ,IAAI,KAAI,CAACkD,YAAY,EAAE;AACjC8C,QAAAA,KAAK,GAAG,OAAO,CAAA;OAChB,MAAM,IAAIhG,QAAQ,IAAI,KAAI,CAACkD,YAAY,GAAGvD,IAAI,EAAE;AAC/CqG,QAAAA,KAAK,GAAG,KAAK,CAAA;AACf,OAAC,MAAM;AACLA,QAAAA,KAAK,GAAG,OAAO,CAAA;AACjB,OAAA;AACF,KAAA;IAEA,IAAIA,KAAK,KAAK,OAAO,EAAE;AACrBhG,MAAAA,QAAQ,GAAGA,QAAQ,CAAA;AACrB,KAAC,MAAM,IAAIgG,KAAK,KAAK,KAAK,EAAE;MAC1BhG,QAAQ,GAAGA,QAAQ,GAAGL,IAAI,CAAA;AAC5B,KAAC,MAAM,IAAIqG,KAAK,KAAK,QAAQ,EAAE;AAC7BhG,MAAAA,QAAQ,GAAGA,QAAQ,GAAGL,IAAI,GAAG,CAAC,CAAA;AAChC,KAAA;IAEA,IAAMsG,cAAc,GAAG,KAAI,CAAC1G,OAAO,CAACC,UAAU,GAC1C,aAAa,GACb,cAAc,CAAA;AAClB,IAAA,IAAM0G,UAAU,GAAG,KAAI,CAACnI,aAAa,GACjC,UAAU,IAAI,KAAI,CAACA,aAAa,GAC9B,KAAI,CAACA,aAAa,CAACoI,QAAQ,CAACC,eAAe,CAACH,cAAc,CAAC,GAC3D,KAAI,CAAClI,aAAa,CAACkI,cAAc,CAAC,GACpC,CAAC,CAAA;AAEL,IAAA,IAAMI,SAAS,GAAGH,UAAU,GAAG,KAAI,CAACzC,OAAO,EAAE,CAAA;AAE7C,IAAA,OAAOzG,IAAI,CAACC,GAAG,CAACD,IAAI,CAACK,GAAG,CAACgJ,SAAS,EAAErG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;GAClD,CAAA;AAAA,EAAA,IAAA,CAEDsG,iBAAiB,GAAG,UAAC1J,KAAa,EAAEoJ,KAAsB,EAAc;AAAA,IAAA,IAApCA,KAAsB,KAAA,KAAA,CAAA,EAAA;AAAtBA,MAAAA,KAAsB,GAAG,MAAM,CAAA;AAAA,KAAA;IACjEpJ,KAAK,GAAGI,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACK,GAAG,CAACT,KAAK,EAAE,KAAI,CAAC2C,OAAO,CAAChC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;IAE5D,IAAMuI,WAAW,GAAGS,kBAAY,CAAC,KAAI,CAAC7C,eAAe,EAAE,CAAC9G,KAAK,CAAC,CAAC,CAAA;IAE/D,IAAIoJ,KAAK,KAAK,MAAM,EAAE;AACpB,MAAA,IACEF,WAAW,CAAC1I,GAAG,IACf,KAAI,CAAC8F,YAAY,GAAG,KAAI,CAACO,OAAO,EAAE,GAAG,KAAI,CAAClE,OAAO,CAACyC,gBAAgB,EAClE;AACAgE,QAAAA,KAAK,GAAG,KAAK,CAAA;AACf,OAAC,MAAM,IACLF,WAAW,CAAC/I,KAAK,IACjB,KAAI,CAACmG,YAAY,GAAG,KAAI,CAAC3D,OAAO,CAACwC,kBAAkB,EACnD;AACAiE,QAAAA,KAAK,GAAG,OAAO,CAAA;AACjB,OAAC,MAAM;AACL,QAAA,OAAO,CAAC,KAAI,CAAC9C,YAAY,EAAE8C,KAAK,CAAC,CAAA;AACnC,OAAA;AACF,KAAA;IAEA,IAAMhG,QAAQ,GACZgG,KAAK,KAAK,KAAK,GACXF,WAAW,CAAC1I,GAAG,GAAG,KAAI,CAACmC,OAAO,CAACyC,gBAAgB,GAC/C8D,WAAW,CAAC/I,KAAK,GAAG,KAAI,CAACwC,OAAO,CAACwC,kBAAkB,CAAA;IAEzD,OAAO,CAAC,KAAI,CAACgE,qBAAqB,CAAC/F,QAAQ,EAAEgG,KAAK,CAAC,EAAEA,KAAK,CAAC,CAAA;GAC5D,CAAA;AAAA,EAAA,IAAA,CAEOQ,aAAa,GAAG,YAAA;AAAA,IAAA,OAAM,KAAI,CAACzF,mBAAmB,CAACpB,IAAI,GAAG,CAAC,CAAA;AAAA,GAAA,CAAA;EAAA,IAEvD8G,CAAAA,mBAAmB,GAAG,YAAM;AAClC,IAAA,IAAI,KAAI,CAACjG,sBAAsB,KAAK,IAAI,EAAE;AACxC+C,MAAAA,YAAY,CAAC,KAAI,CAAC/C,sBAAsB,CAAC,CAAA;MACzC,KAAI,CAACA,sBAAsB,GAAG,IAAI,CAAA;AACpC,KAAA;GACD,CAAA;AAAA,EAAA,IAAA,CAEDkG,cAAc,GAAG,UACf1G,QAAgB,EAEb,KAAA,EAAA;AAAA,IAAA,IAAA,KAAA,GAAA,KAAA,KAAA,KAAA,CAAA,GADoD,EAAE,GAAA,KAAA;AAAA,MAAA,WAAA,GAAA,KAAA,CAAvDgG,KAAK;AAALA,MAAAA,KAAK,4BAAG,OAAO,GAAA,WAAA;AAAEjG,MAAAA,QAAQ,SAARA,QAAQ,CAAA;IAE3B,KAAI,CAAC0G,mBAAmB,EAAE,CAAA;IAE1B,IAAI1G,QAAQ,KAAK,QAAQ,IAAI,KAAI,CAACyG,aAAa,EAAE,EAAE;AACjD1B,MAAAA,OAAO,CAACC,IAAI,CACV,wEAAwE,CACzE,CAAA;AACH,KAAA;IAEA,KAAI,CAAC9B,eAAe,CAAC,KAAI,CAAC8C,qBAAqB,CAAC/F,QAAQ,EAAEgG,KAAK,CAAC,EAAE;AAChElG,MAAAA,WAAW,EAAEqD,SAAS;AACtBpD,MAAAA,QAAQ,EAARA,QAAAA;AACF,KAAC,CAAC,CAAA;GACH,CAAA;AAAA,EAAA,IAAA,CAED4G,aAAa,GAAG,UACd/J,KAAa,EAEV,MAAA,EAAA;AAAA,IAAA,IAAA,KAAA,GAAA,MAAA,KAAA,KAAA,CAAA,GADgE,EAAE,GAAA,MAAA;AAAA,MAAA,WAAA,GAAA,KAAA,CAAnEoJ,KAAK;AAAEY,MAAAA,YAAY,4BAAG,MAAM,GAAA,WAAA;AAAE7G,MAAAA,QAAQ,SAARA,QAAQ,CAAA;IAExCnD,KAAK,GAAGI,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACK,GAAG,CAACT,KAAK,EAAE,KAAI,CAAC2C,OAAO,CAAChC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;IAE5D,KAAI,CAACkJ,mBAAmB,EAAE,CAAA;IAE1B,IAAI1G,QAAQ,KAAK,QAAQ,IAAI,KAAI,CAACyG,aAAa,EAAE,EAAE;AACjD1B,MAAAA,OAAO,CAACC,IAAI,CACV,wEAAwE,CACzE,CAAA;AACH,KAAA;AAEA,IAAA,IAAA,qBAAA,GAA0B,KAAI,CAACuB,iBAAiB,CAAC1J,KAAK,EAAEgK,YAAY,CAAC;MAA9D5G,QAAQ,GAAA,qBAAA,CAAA,CAAA,CAAA;MAAEgG,KAAK,GAAA,qBAAA,CAAA,CAAA,CAAA,CAAA;AAEtB,IAAA,KAAI,CAAC/C,eAAe,CAACjD,QAAQ,EAAE;AAAEF,MAAAA,WAAW,EAAEqD,SAAS;AAAEpD,MAAAA,QAAQ,EAARA,QAAAA;AAAS,KAAC,CAAC,CAAA;IAEpE,IAAIA,QAAQ,KAAK,QAAQ,IAAI,KAAI,CAACyG,aAAa,EAAE,EAAE;AACjD,MAAA,KAAI,CAAChG,sBAAsB,GAAGgD,UAAU,CAAC,YAAM;QAC7C,KAAI,CAAChD,sBAAsB,GAAG,IAAI,CAAA;AAElC,QAAA,IAAMqG,YAAY,GAAG,KAAI,CAAC9F,mBAAmB,CAAC+F,GAAG,CAC/C,KAAI,CAACvH,OAAO,CAAC0C,UAAU,CAACrF,KAAK,CAAC,CAC/B,CAAA;AAED,QAAA,IAAIiK,YAAY,EAAE;AAChB,UAAA,IAAA,sBAAA,GAAmB,KAAI,CAACP,iBAAiB,CAAC1J,KAAK,EAAEoJ,KAAK,CAAC;YAAhDhG,SAAQ,GAAA,sBAAA,CAAA,CAAA,CAAA,CAAA;UAEf,IAAI,CAAC+G,iBAAW,CAAC/G,SAAQ,EAAE,KAAI,CAACkD,YAAY,CAAC,EAAE;AAC7C,YAAA,KAAI,CAACyD,aAAa,CAAC/J,KAAK,EAAE;AAAEoJ,cAAAA,KAAK,EAALA,KAAK;AAAEjG,cAAAA,QAAQ,EAARA,QAAAA;AAAS,aAAC,CAAC,CAAA;AAChD,WAAA;AACF,SAAC,MAAM;AACL,UAAA,KAAI,CAAC4G,aAAa,CAAC/J,KAAK,EAAE;AAAEoJ,YAAAA,KAAK,EAALA,KAAK;AAAEjG,YAAAA,QAAQ,EAARA,QAAAA;AAAS,WAAC,CAAC,CAAA;AAChD,SAAA;AACF,OAAC,CAAC,CAAA;AACJ,KAAA;GACD,CAAA;AAAA,EAAA,IAAA,CAEDiH,QAAQ,GAAG,UAACzB,KAAa,EAA+C,MAAA,EAAA;AAAA,IAAA,IAAA,KAAA,GAAA,MAAA,KAAA,KAAA,CAAA,GAAP,EAAE,GAAA,MAAA;AAAtCxF,MAAAA,QAAQ,SAARA,QAAQ,CAAA;IACnC,KAAI,CAAC0G,mBAAmB,EAAE,CAAA;IAE1B,IAAI1G,QAAQ,KAAK,QAAQ,IAAI,KAAI,CAACyG,aAAa,EAAE,EAAE;AACjD1B,MAAAA,OAAO,CAACC,IAAI,CACV,wEAAwE,CACzE,CAAA;AACH,KAAA;IAEA,KAAI,CAAC9B,eAAe,CAAC,KAAI,CAACC,YAAY,GAAGqC,KAAK,EAAE;AAC9CzF,MAAAA,WAAW,EAAEqD,SAAS;AACtBpD,MAAAA,QAAQ,EAARA,QAAAA;AACF,KAAC,CAAC,CAAA;GACH,CAAA;AAAA,EAAA,IAAA,CAEDkH,YAAY,GAAG,YAAA;AAAA,IAAA,IAAA,qBAAA,CAAA;AAAA,IAAA,OACb,CAAC,CAAA,CAAA,qBAAA,GAAA,KAAI,CAACvD,eAAe,EAAE,CAAC,KAAI,CAACnE,OAAO,CAAChC,KAAK,GAAG,CAAC,CAAC,qBAA9C,qBAAgDH,CAAAA,GAAG,KAClD,KAAI,CAACmC,OAAO,CAACsC,YAAY,IAC3B,KAAI,CAACtC,OAAO,CAAC8C,YAAY,GACzB,KAAI,CAAC9C,OAAO,CAACuC,UAAU,CAAA;AAAA,GAAA,CAAA;AAAA,EAAA,IAAA,CAEjBmB,eAAe,GAAG,UACxBpD,MAAc,EAQX,KAAA,EAAA;IAAA,IANDC,WAAW,SAAXA,WAAW;AACXC,MAAAA,QAAQ,SAARA,QAAQ,CAAA;AAMV,IAAA,KAAI,CAACR,OAAO,CAAC2H,UAAU,CAACrH,MAAM,EAAE;AAAEE,MAAAA,QAAQ,EAARA,QAAQ;AAAED,MAAAA,WAAW,EAAXA,WAAAA;KAAa,EAAE,KAAI,CAAC,CAAA;GACjE,CAAA;EAAA,IAEDqH,CAAAA,OAAO,GAAG,YAAM;AACd,IAAA,KAAI,CAACzG,aAAa,GAAG,IAAIC,GAAG,EAAE,CAAA;IAC9B,KAAI,CAAC8B,MAAM,EAAE,CAAA;GACd,CAAA;AAzdC,EAAA,IAAI,CAACnB,UAAU,CAAClB,KAAI,CAAC,CAAA;AACrB,EAAA,IAAI,CAACiD,UAAU,GAAG,IAAI,CAAC9D,OAAO,CAAC6C,WAAW,CAAA;AAC1C,EAAA,IAAI,CAACc,YAAY,GAAG,IAAI,CAAC3D,OAAO,CAACqC,aAAa,CAAA;AAC9C,EAAA,IAAI,CAACnB,iBAAiB,GAAG,IAAI,CAAClB,OAAO,CAACiD,wBAAwB,CAAA;AAC9D,EAAA,IAAI,CAAC/B,iBAAiB,CAACS,OAAO,CAAC,UAAC+D,IAAI,EAAK;AACvC,IAAA,KAAI,CAACvE,aAAa,CAAC0E,GAAG,CAACH,IAAI,CAACzD,GAAG,EAAEyD,IAAI,CAACtF,IAAI,CAAC,CAAA;AAC7C,GAAC,CAAC,CAAA;EAEF,IAAI,CAAC2D,WAAW,EAAE,CAAA;AACpB,EAAC;AAmdH,IAAM8D,uBAAuB,GAAG,SAA1BA,uBAAuB,CAC3BC,GAAW,EACXC,IAAY,EACZC,eAAsC,EACtC9F,KAAa,EACV;EACH,OAAO4F,GAAG,IAAIC,IAAI,EAAE;IAClB,IAAME,MAAM,GAAI,CAACH,GAAG,GAAGC,IAAI,IAAI,CAAC,GAAI,CAAC,CAAA;AACrC,IAAA,IAAMG,YAAY,GAAGF,eAAe,CAACC,MAAM,CAAC,CAAA;IAE5C,IAAIC,YAAY,GAAGhG,KAAK,EAAE;MACxB4F,GAAG,GAAGG,MAAM,GAAG,CAAC,CAAA;AAClB,KAAC,MAAM,IAAIC,YAAY,GAAGhG,KAAK,EAAE;MAC/B6F,IAAI,GAAGE,MAAM,GAAG,CAAC,CAAA;AACnB,KAAC,MAAM;AACL,MAAA,OAAOA,MAAM,CAAA;AACf,KAAA;AACF,GAAA;EAEA,IAAIH,GAAG,GAAG,CAAC,EAAE;IACX,OAAOA,GAAG,GAAG,CAAC,CAAA;AAChB,GAAC,MAAM;AACL,IAAA,OAAO,CAAC,CAAA;AACV,GAAA;AACF,CAAC,CAAA;AAED,SAASjD,cAAc,CAQpB,KAAA,EAAA;EAAA,IAPDP,YAAY,SAAZA,YAAY;AACZQ,IAAAA,SAAS,SAATA,SAAS;AACTnB,IAAAA,YAAY,SAAZA,YAAY,CAAA;AAMZ,EAAA,IAAM3F,KAAK,GAAGsG,YAAY,CAACD,MAAM,GAAG,CAAC,CAAA;AACrC,EAAA,IAAM8D,SAAS,GAAG,SAAZA,SAAS,CAAI9K,KAAa,EAAA;AAAA,IAAA,OAAKiH,YAAY,CAACjH,KAAK,CAAC,CAAEG,KAAK,CAAA;AAAA,GAAA,CAAA;EAE/D,IAAMG,UAAU,GAAGkK,uBAAuB,CAAC,CAAC,EAAE7J,KAAK,EAAEmK,SAAS,EAAExE,YAAY,CAAC,CAAA;EAC7E,IAAI5F,QAAQ,GAAGJ,UAAU,CAAA;AAEzB,EAAA,OACEI,QAAQ,GAAGC,KAAK,IAChBsG,YAAY,CAACvG,QAAQ,CAAC,CAAEF,GAAG,GAAG8F,YAAY,GAAGmB,SAAS,EACtD;AACA/G,IAAAA,QAAQ,EAAE,CAAA;AACZ,GAAA;EAEA,OAAO;AAAEJ,IAAAA,UAAU,EAAVA,UAAU;AAAEI,IAAAA,QAAQ,EAARA,QAAAA;GAAU,CAAA;AACjC;;;;;;;;;;;;;;;;"}