@tanstack/virtual-core 3.0.0-beta.42 → 3.0.0-beta.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/index.d.ts +7 -3
- package/build/lib/index.esm.js +80 -77
- package/build/lib/index.esm.js.map +1 -1
- package/build/lib/index.js +80 -77
- package/build/lib/index.js.map +1 -1
- package/build/lib/index.mjs +80 -77
- package/build/lib/index.mjs.map +1 -1
- package/build/lib/utils.d.ts +3 -2
- package/build/lib/utils.esm.js +4 -6
- package/build/lib/utils.esm.js.map +1 -1
- package/build/lib/utils.js +4 -6
- package/build/lib/utils.js.map +1 -1
- package/build/lib/utils.mjs +4 -6
- package/build/lib/utils.mjs.map +1 -1
- package/build/umd/index.development.js +84 -83
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +75 -85
- package/src/utils.ts +8 -10
package/build/lib/utils.mjs
CHANGED
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
* @license MIT
|
|
10
10
|
*/
|
|
11
11
|
function memo(getDeps, fn, opts) {
|
|
12
|
-
var
|
|
12
|
+
var _opts$initialDeps;
|
|
13
|
+
var deps = (_opts$initialDeps = opts.initialDeps) != null ? _opts$initialDeps : [];
|
|
13
14
|
var result;
|
|
14
15
|
return function () {
|
|
15
16
|
var depTime;
|
|
@@ -24,11 +25,7 @@ function memo(getDeps, fn, opts) {
|
|
|
24
25
|
deps = newDeps;
|
|
25
26
|
var resultTime;
|
|
26
27
|
if (opts.key && opts.debug != null && opts.debug()) resultTime = Date.now();
|
|
27
|
-
|
|
28
|
-
fArgs[_key] = arguments[_key];
|
|
29
|
-
}
|
|
30
|
-
result = fn.apply(void 0, newDeps.concat([fArgs]));
|
|
31
|
-
opts == null ? void 0 : opts.onChange == null ? void 0 : opts.onChange(result);
|
|
28
|
+
result = fn.apply(void 0, newDeps);
|
|
32
29
|
if (opts.key && opts.debug != null && opts.debug()) {
|
|
33
30
|
var depEndTime = Math.round((Date.now() - depTime) * 100) / 100;
|
|
34
31
|
var resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;
|
|
@@ -42,6 +39,7 @@ function memo(getDeps, fn, opts) {
|
|
|
42
39
|
};
|
|
43
40
|
console.info("%c\u23F1 " + pad(resultEndTime, 5) + " /" + pad(depEndTime, 5) + " ms", "\n font-size: .6rem;\n font-weight: bold;\n color: hsl(" + Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120)) + "deg 100% 31%);", opts == null ? void 0 : opts.key);
|
|
44
41
|
}
|
|
42
|
+
opts == null ? void 0 : opts.onChange == null ? void 0 : opts.onChange(result);
|
|
45
43
|
return result;
|
|
46
44
|
};
|
|
47
45
|
}
|
package/build/lib/utils.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.mjs","sources":["../../src/utils.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
|
|
1
|
+
{"version":3,"file":"utils.mjs","sources":["../../src/utils.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 initialDeps?: TDeps\n },\n) {\n let deps = opts.initialDeps ?? []\n let result: TResult | undefined\n\n return (): TResult => {\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\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 opts?.onChange?.(result)\n\n return result!\n }\n}\n\nexport function notUndefined<T>(value: T | undefined, msg?: string): T {\n if (value === undefined) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : ''}`)\n } else {\n return value\n }\n}\n\nexport const approxEqual = (a: number, b: number) => Math.abs(a - b) < 1\n"],"names":["memo","getDeps","fn","opts","deps","initialDeps","result","depTime","key","debug","Date","now","newDeps","depsChanged","length","some","dep","index","resultTime","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","onChange","notUndefined","value","msg","undefined","Error","approxEqual","a","b","abs"],"mappings":"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"}
|
|
@@ -30,7 +30,8 @@
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
function memo(getDeps, fn, opts) {
|
|
33
|
-
var
|
|
33
|
+
var _opts$initialDeps;
|
|
34
|
+
var deps = (_opts$initialDeps = opts.initialDeps) != null ? _opts$initialDeps : [];
|
|
34
35
|
var result;
|
|
35
36
|
return function () {
|
|
36
37
|
var depTime;
|
|
@@ -45,11 +46,7 @@
|
|
|
45
46
|
deps = newDeps;
|
|
46
47
|
var resultTime;
|
|
47
48
|
if (opts.key && opts.debug != null && opts.debug()) resultTime = Date.now();
|
|
48
|
-
|
|
49
|
-
fArgs[_key] = arguments[_key];
|
|
50
|
-
}
|
|
51
|
-
result = fn.apply(void 0, newDeps.concat([fArgs]));
|
|
52
|
-
opts == null ? void 0 : opts.onChange == null ? void 0 : opts.onChange(result);
|
|
49
|
+
result = fn.apply(void 0, newDeps);
|
|
53
50
|
if (opts.key && opts.debug != null && opts.debug()) {
|
|
54
51
|
var depEndTime = Math.round((Date.now() - depTime) * 100) / 100;
|
|
55
52
|
var resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;
|
|
@@ -63,6 +60,7 @@
|
|
|
63
60
|
};
|
|
64
61
|
console.info("%c\u23F1 " + pad(resultEndTime, 5) + " /" + pad(depEndTime, 5) + " ms", "\n font-size: .6rem;\n font-weight: bold;\n color: hsl(" + Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120)) + "deg 100% 31%);", opts == null ? void 0 : opts.key);
|
|
65
62
|
}
|
|
63
|
+
opts == null ? void 0 : opts.onChange == null ? void 0 : opts.onChange(result);
|
|
66
64
|
return result;
|
|
67
65
|
};
|
|
68
66
|
}
|
|
@@ -303,7 +301,7 @@
|
|
|
303
301
|
});
|
|
304
302
|
_this.unsubs.push(_this.options.observeElementRect(_this, function (rect) {
|
|
305
303
|
_this.scrollRect = rect;
|
|
306
|
-
_this.
|
|
304
|
+
_this.maybeNotify();
|
|
307
305
|
}));
|
|
308
306
|
_this.unsubs.push(_this.options.observeElementOffset(_this, function (offset) {
|
|
309
307
|
_this.scrollAdjustments = 0;
|
|
@@ -314,20 +312,15 @@
|
|
|
314
312
|
clearTimeout(_this.isScrollingTimeoutId);
|
|
315
313
|
_this.isScrollingTimeoutId = null;
|
|
316
314
|
}
|
|
317
|
-
|
|
318
|
-
if (_this.isScrolling !== isScrolling) {
|
|
319
|
-
_this.isScrolling = isScrolling;
|
|
320
|
-
_this.notify();
|
|
321
|
-
}
|
|
322
|
-
};
|
|
315
|
+
_this.isScrolling = true;
|
|
323
316
|
_this.scrollDirection = _this.scrollOffset < offset ? 'forward' : 'backward';
|
|
324
317
|
_this.scrollOffset = offset;
|
|
325
|
-
_this.
|
|
326
|
-
onIsScrollingChange(true);
|
|
318
|
+
_this.maybeNotify();
|
|
327
319
|
_this.isScrollingTimeoutId = setTimeout(function () {
|
|
328
320
|
_this.isScrollingTimeoutId = null;
|
|
321
|
+
_this.isScrolling = false;
|
|
329
322
|
_this.scrollDirection = null;
|
|
330
|
-
|
|
323
|
+
_this.maybeNotify();
|
|
331
324
|
}, _this.options.scrollingDelay);
|
|
332
325
|
}));
|
|
333
326
|
}
|
|
@@ -365,29 +358,31 @@
|
|
|
365
358
|
});
|
|
366
359
|
this.calculateRange = memo(function () {
|
|
367
360
|
return [_this.getMeasurements(), _this.getSize(), _this.scrollOffset];
|
|
368
|
-
}, function (measurements, outerSize, scrollOffset
|
|
369
|
-
|
|
370
|
-
flush = _ref4$ === void 0 ? true : _ref4$;
|
|
371
|
-
var range = calculateRange({
|
|
361
|
+
}, function (measurements, outerSize, scrollOffset) {
|
|
362
|
+
return _this.range = calculateRange({
|
|
372
363
|
measurements: measurements,
|
|
373
364
|
outerSize: outerSize,
|
|
374
365
|
scrollOffset: scrollOffset
|
|
375
366
|
});
|
|
376
|
-
if (range.startIndex !== _this.range.startIndex || range.endIndex !== _this.range.endIndex) {
|
|
377
|
-
_this.range = range;
|
|
378
|
-
if (flush) {
|
|
379
|
-
_this.notify();
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
return _this.range;
|
|
383
367
|
}, {
|
|
384
368
|
key: 'calculateRange',
|
|
385
369
|
debug: function debug() {
|
|
386
370
|
return _this.options.debug;
|
|
387
371
|
}
|
|
388
372
|
});
|
|
373
|
+
this.maybeNotify = memo(function () {
|
|
374
|
+
return [].concat(Object.values(_this.calculateRange()), [_this.isScrolling]);
|
|
375
|
+
}, function () {
|
|
376
|
+
_this.notify();
|
|
377
|
+
}, {
|
|
378
|
+
key: 'maybeNotify',
|
|
379
|
+
debug: function debug() {
|
|
380
|
+
return _this.options.debug;
|
|
381
|
+
},
|
|
382
|
+
initialDeps: [].concat(Object.values(this.range), [this.isScrolling])
|
|
383
|
+
});
|
|
389
384
|
this.getIndexes = memo(function () {
|
|
390
|
-
return [_this.options.rangeExtractor, _this.calculateRange(
|
|
385
|
+
return [_this.options.rangeExtractor, _this.calculateRange(), _this.options.overscan, _this.options.count];
|
|
391
386
|
}, function (rangeExtractor, range, overscan, count) {
|
|
392
387
|
return rangeExtractor(_extends({}, range, {
|
|
393
388
|
overscan: overscan,
|
|
@@ -500,38 +495,11 @@
|
|
|
500
495
|
var maxOffset = scrollSize - _this.getSize();
|
|
501
496
|
return Math.max(Math.min(maxOffset, toOffset), 0);
|
|
502
497
|
};
|
|
503
|
-
this.
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
align = _ref5$align === void 0 ? 'start' : _ref5$align,
|
|
507
|
-
behavior = _ref5.behavior;
|
|
508
|
-
var isDynamic = Object.keys(_this.measureElementCache).length > 0;
|
|
509
|
-
if (isDynamic && behavior === 'smooth') {
|
|
510
|
-
console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
|
|
511
|
-
return;
|
|
498
|
+
this.getOffsetForIndex = function (index, align) {
|
|
499
|
+
if (align === void 0) {
|
|
500
|
+
align = 'auto';
|
|
512
501
|
}
|
|
513
|
-
var options = {
|
|
514
|
-
adjustments: undefined,
|
|
515
|
-
behavior: behavior,
|
|
516
|
-
sync: false
|
|
517
|
-
};
|
|
518
|
-
_this._scrollToOffset(_this.getOffsetForAlignment(toOffset, align), options);
|
|
519
|
-
};
|
|
520
|
-
this.scrollToIndex = function (index, _temp2) {
|
|
521
|
-
var _ref6 = _temp2 === void 0 ? {} : _temp2,
|
|
522
|
-
_ref6$align = _ref6.align,
|
|
523
|
-
align = _ref6$align === void 0 ? 'auto' : _ref6$align,
|
|
524
|
-
behavior = _ref6.behavior;
|
|
525
502
|
index = Math.max(0, Math.min(index, _this.options.count - 1));
|
|
526
|
-
if (_this.scrollToIndexTimeoutId !== null) {
|
|
527
|
-
clearTimeout(_this.scrollToIndexTimeoutId);
|
|
528
|
-
_this.scrollToIndexTimeoutId = null;
|
|
529
|
-
}
|
|
530
|
-
var isDynamic = Object.keys(_this.measureElementCache).length > 0;
|
|
531
|
-
if (isDynamic && behavior === 'smooth') {
|
|
532
|
-
console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
|
|
533
|
-
return;
|
|
534
|
-
}
|
|
535
503
|
var measurement = notUndefined(_this.getMeasurements()[index]);
|
|
536
504
|
if (align === 'auto') {
|
|
537
505
|
if (measurement.end >= _this.scrollOffset + _this.getSize() - _this.options.scrollPaddingEnd) {
|
|
@@ -539,25 +507,59 @@
|
|
|
539
507
|
} else if (measurement.start <= _this.scrollOffset + _this.options.scrollPaddingStart) {
|
|
540
508
|
align = 'start';
|
|
541
509
|
} else {
|
|
542
|
-
return;
|
|
510
|
+
return [_this.scrollOffset, align];
|
|
543
511
|
}
|
|
544
512
|
}
|
|
545
|
-
var
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
513
|
+
var toOffset = align === 'end' ? measurement.end + _this.options.scrollPaddingEnd : measurement.start - _this.options.scrollPaddingStart;
|
|
514
|
+
return [_this.getOffsetForAlignment(toOffset, align), align];
|
|
515
|
+
};
|
|
516
|
+
this.isDynamicMode = function () {
|
|
517
|
+
return Object.keys(_this.measureElementCache).length > 0;
|
|
518
|
+
};
|
|
519
|
+
this.cancelScrollToIndex = function () {
|
|
520
|
+
if (_this.scrollToIndexTimeoutId !== null) {
|
|
521
|
+
clearTimeout(_this.scrollToIndexTimeoutId);
|
|
522
|
+
_this.scrollToIndexTimeoutId = null;
|
|
523
|
+
}
|
|
524
|
+
};
|
|
525
|
+
this.scrollToOffset = function (toOffset, _temp) {
|
|
526
|
+
var _ref4 = _temp === void 0 ? {} : _temp,
|
|
527
|
+
_ref4$align = _ref4.align,
|
|
528
|
+
align = _ref4$align === void 0 ? 'start' : _ref4$align,
|
|
529
|
+
behavior = _ref4.behavior;
|
|
530
|
+
_this.cancelScrollToIndex();
|
|
531
|
+
if (behavior === 'smooth' && _this.isDynamicMode()) {
|
|
532
|
+
console.warn('The `smooth` scroll behavior is not fully supported with dynamic size.');
|
|
533
|
+
}
|
|
534
|
+
_this._scrollToOffset(_this.getOffsetForAlignment(toOffset, align), {
|
|
551
535
|
adjustments: undefined,
|
|
552
536
|
behavior: behavior
|
|
553
|
-
};
|
|
554
|
-
|
|
555
|
-
|
|
537
|
+
});
|
|
538
|
+
};
|
|
539
|
+
this.scrollToIndex = function (index, _temp2) {
|
|
540
|
+
var _ref5 = _temp2 === void 0 ? {} : _temp2,
|
|
541
|
+
_ref5$align = _ref5.align,
|
|
542
|
+
initialAlign = _ref5$align === void 0 ? 'auto' : _ref5$align,
|
|
543
|
+
behavior = _ref5.behavior;
|
|
544
|
+
index = Math.max(0, Math.min(index, _this.options.count - 1));
|
|
545
|
+
_this.cancelScrollToIndex();
|
|
546
|
+
if (behavior === 'smooth' && _this.isDynamicMode()) {
|
|
547
|
+
console.warn('The `smooth` scroll behavior is not fully supported with dynamic size.');
|
|
548
|
+
}
|
|
549
|
+
var _this$getOffsetForInd = _this.getOffsetForIndex(index, initialAlign),
|
|
550
|
+
toOffset = _this$getOffsetForInd[0],
|
|
551
|
+
align = _this$getOffsetForInd[1];
|
|
552
|
+
_this._scrollToOffset(toOffset, {
|
|
553
|
+
adjustments: undefined,
|
|
554
|
+
behavior: behavior
|
|
555
|
+
});
|
|
556
|
+
if (behavior !== 'smooth' && _this.isDynamicMode()) {
|
|
556
557
|
_this.scrollToIndexTimeoutId = setTimeout(function () {
|
|
557
558
|
_this.scrollToIndexTimeoutId = null;
|
|
558
559
|
var elementInDOM = !!_this.measureElementCache[_this.options.getItemKey(index)];
|
|
559
560
|
if (elementInDOM) {
|
|
560
|
-
var
|
|
561
|
+
var _this$getOffsetForInd2 = _this.getOffsetForIndex(index, align),
|
|
562
|
+
_toOffset = _this$getOffsetForInd2[0];
|
|
561
563
|
if (!approxEqual(_toOffset, _this.scrollOffset)) {
|
|
562
564
|
_this.scrollToIndex(index, {
|
|
563
565
|
align: align,
|
|
@@ -574,12 +576,11 @@
|
|
|
574
576
|
}
|
|
575
577
|
};
|
|
576
578
|
this.scrollBy = function (delta, _temp3) {
|
|
577
|
-
var
|
|
578
|
-
behavior =
|
|
579
|
-
|
|
580
|
-
if (
|
|
581
|
-
console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
|
|
582
|
-
return;
|
|
579
|
+
var _ref6 = _temp3 === void 0 ? {} : _temp3,
|
|
580
|
+
behavior = _ref6.behavior;
|
|
581
|
+
_this.cancelScrollToIndex();
|
|
582
|
+
if (behavior === 'smooth' && _this.isDynamicMode()) {
|
|
583
|
+
console.warn('The `smooth` scroll behavior is not fully supported with dynamic size.');
|
|
583
584
|
}
|
|
584
585
|
_this._scrollToOffset(_this.scrollOffset + delta, {
|
|
585
586
|
adjustments: undefined,
|
|
@@ -590,9 +591,9 @@
|
|
|
590
591
|
var _this$getMeasurements;
|
|
591
592
|
return (((_this$getMeasurements = _this.getMeasurements()[_this.options.count - 1]) == null ? void 0 : _this$getMeasurements.end) || _this.options.paddingStart) - _this.options.scrollMargin + _this.options.paddingEnd;
|
|
592
593
|
};
|
|
593
|
-
this._scrollToOffset = function (offset,
|
|
594
|
-
var adjustments =
|
|
595
|
-
behavior =
|
|
594
|
+
this._scrollToOffset = function (offset, _ref7) {
|
|
595
|
+
var adjustments = _ref7.adjustments,
|
|
596
|
+
behavior = _ref7.behavior;
|
|
596
597
|
_this.options.scrollToFn(offset, {
|
|
597
598
|
behavior: behavior,
|
|
598
599
|
adjustments: adjustments
|
|
@@ -609,7 +610,7 @@
|
|
|
609
610
|
this.measurementsCache.forEach(function (item) {
|
|
610
611
|
_this.itemSizeCache[item.key] = item.size;
|
|
611
612
|
});
|
|
612
|
-
this.
|
|
613
|
+
this.maybeNotify();
|
|
613
614
|
};
|
|
614
615
|
var findNearestBinarySearch = function findNearestBinarySearch(low, high, getCurrentValue, value) {
|
|
615
616
|
while (low <= high) {
|
|
@@ -629,10 +630,10 @@
|
|
|
629
630
|
return 0;
|
|
630
631
|
}
|
|
631
632
|
};
|
|
632
|
-
function calculateRange(
|
|
633
|
-
var measurements =
|
|
634
|
-
outerSize =
|
|
635
|
-
scrollOffset =
|
|
633
|
+
function calculateRange(_ref8) {
|
|
634
|
+
var measurements = _ref8.measurements,
|
|
635
|
+
outerSize = _ref8.outerSize,
|
|
636
|
+
scrollOffset = _ref8.scrollOffset;
|
|
636
637
|
var count = measurements.length - 1;
|
|
637
638
|
var getOffset = function getOffset(index) {
|
|
638
639
|
return measurements[index].start;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.development.js","sources":["../../src/utils.ts","../../src/index.ts"],"sourcesContent":["export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<\n TDeps extends readonly any[],\n TResult,\n FArgs extends readonly any[],\n>(\n getDeps: () => [...TDeps],\n fn: (...args: [...TDeps, FArgs]) => TResult,\n opts: {\n key: any\n debug?: () => any\n onChange?: (result: TResult) => void\n },\n) {\n let deps: any[] = []\n let result: TResult | undefined\n\n return (...fArgs: FArgs): TResult => {\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, fArgs)\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\nexport function notUndefined<T>(value: T | undefined, msg?: string): T {\n if (value === undefined) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : ''}`)\n } else {\n return value\n }\n}\n\nexport const approxEqual = (a: number, b: number) => Math.abs(a - b) < 1\n","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.calculateRange()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n 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.calculateRange()\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 const onIsScrollingChange = (isScrolling: boolean) => {\n if (this.isScrolling !== isScrolling) {\n this.isScrolling = isScrolling\n this.notify()\n }\n }\n\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n\n this.scrollOffset = offset\n\n this.calculateRange()\n\n onIsScrollingChange(true)\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.scrollDirection = null\n onIsScrollingChange(false)\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, [flush = true]: [boolean?]) => {\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 if (flush) {\n this.notify()\n }\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.calculateRange(false),\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 scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic && behavior === 'smooth') {\n console.warn(\n 'The `smooth` scroll behavior is not supported with dynamic size.',\n )\n return\n }\n\n const options = {\n adjustments: undefined,\n behavior,\n sync: false,\n }\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), options)\n }\n\n scrollToIndex = (\n index: number,\n { align = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic && behavior === 'smooth') {\n console.warn(\n 'The `smooth` scroll behavior is not supported with dynamic size.',\n )\n return\n }\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\n }\n }\n\n const getOffsetForIndexAndAlignment = (measurement: VirtualItem) => {\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)\n }\n\n const toOffset = getOffsetForIndexAndAlignment(measurement)\n\n const options = {\n adjustments: undefined,\n behavior,\n }\n this._scrollToOffset(toOffset, options)\n\n if (isDynamic) {\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 = getOffsetForIndexAndAlignment(\n notUndefined(this.getMeasurements()[index]),\n )\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 const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic && behavior === 'smooth') {\n console.warn(\n 'The `smooth` scroll behavior is not supported with dynamic size.',\n )\n return\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":["memo","getDeps","fn","opts","deps","result","depTime","key","debug","Date","now","newDeps","depsChanged","length","some","dep","index","resultTime","fArgs","onChange","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","notUndefined","value","msg","undefined","Error","approxEqual","a","b","abs","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","entry","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","onScroll","e","target","currentTarget","scrollX","scrollY","observeElementOffset","observeWindowOffset","measureElement","windowScroll","adjustments","behavior","toOffset","scrollTo","elementScroll","Virtualizer","unsubs","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","getResizeObserver","_ro","forEach","_measureElement","setOptions","Object","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","initialRect","scrollMargin","scrollingDelay","indexAttribute","initialMeasurementsCache","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","scrollRect","calculateRange","clearTimeout","onIsScrollingChange","setTimeout","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","outerSize","flush","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","warn","parseInt","sync","item","prevNode","isConnected","__virtualizerSkipFirstNotSync","measuredItemSize","itemSize","delta","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","align","scrollSizeProp","scrollSize","document","documentElement","maxOffset","scrollToOffset","isDynamic","keys","scrollToIndex","getOffsetForIndexAndAlignment","elementInDOM","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.development.js","sources":["../../src/utils.ts","../../src/index.ts"],"sourcesContent":["export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends readonly any[], TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: any\n debug?: () => any\n onChange?: (result: TResult) => void\n initialDeps?: TDeps\n },\n) {\n let deps = opts.initialDeps ?? []\n let result: TResult | undefined\n\n return (): TResult => {\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\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 opts?.onChange?.(result)\n\n return result!\n }\n}\n\nexport function notUndefined<T>(value: T | undefined, msg?: string): T {\n if (value === undefined) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : ''}`)\n } else {\n return value\n }\n}\n\nexport const approxEqual = (a: number, b: number) => Math.abs(a - b) < 1\n","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":["memo","getDeps","fn","opts","deps","initialDeps","result","depTime","key","debug","Date","now","newDeps","depsChanged","length","some","dep","index","resultTime","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","onChange","notUndefined","value","msg","undefined","Error","approxEqual","a","b","abs","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","entry","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","onScroll","e","target","currentTarget","scrollX","scrollY","observeElementOffset","observeWindowOffset","measureElement","windowScroll","adjustments","behavior","toOffset","scrollTo","elementScroll","Virtualizer","unsubs","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","getResizeObserver","_ro","forEach","_measureElement","setOptions","Object","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","initialRect","scrollMargin","scrollingDelay","indexAttribute","initialMeasurementsCache","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","scrollRect","maybeNotify","clearTimeout","setTimeout","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","calculateRange","outerSize","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","warn","parseInt","sync","item","prevNode","isConnected","__virtualizerSkipFirstNotSync","measuredItemSize","itemSize","delta","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","align","scrollSizeProp","scrollSize","document","documentElement","maxOffset","getOffsetForIndex","isDynamicMode","keys","cancelScrollToIndex","scrollToOffset","scrollToIndex","initialAlign","elementInDOM","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
|