@tanstack/solid-virtual 3.0.0-beta.12 → 3.0.0-beta.13

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.
@@ -0,0 +1,615 @@
1
+ /**
2
+ * solid-virtual
3
+ *
4
+ * Copyright (c) TanStack
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE.md file in the root directory of this source tree.
8
+ *
9
+ * @license MIT
10
+ */
11
+ 'use strict';
12
+
13
+ Object.defineProperty(exports, '__esModule', { value: true });
14
+
15
+ /**
16
+ * virtual-core
17
+ *
18
+ * Copyright (c) TanStack
19
+ *
20
+ * This source code is licensed under the MIT license found in the
21
+ * LICENSE.md file in the root directory of this source tree.
22
+ *
23
+ * @license MIT
24
+ */
25
+ var props = ["bottom", "height", "left", "right", "top", "width"];
26
+
27
+ var rectChanged = function rectChanged(a, b) {
28
+ if (a === void 0) {
29
+ a = {};
30
+ }
31
+
32
+ if (b === void 0) {
33
+ b = {};
34
+ }
35
+
36
+ return props.some(function (prop) {
37
+ return a[prop] !== b[prop];
38
+ });
39
+ };
40
+
41
+ var observedNodes = /*#__PURE__*/new Map();
42
+ var rafId;
43
+
44
+ var run = function run() {
45
+ var changedStates = [];
46
+ observedNodes.forEach(function (state, node) {
47
+ var newRect = node.getBoundingClientRect();
48
+
49
+ if (rectChanged(newRect, state.rect)) {
50
+ state.rect = newRect;
51
+ changedStates.push(state);
52
+ }
53
+ });
54
+ changedStates.forEach(function (state) {
55
+ state.callbacks.forEach(function (cb) {
56
+ return cb(state.rect);
57
+ });
58
+ });
59
+ rafId = window.requestAnimationFrame(run);
60
+ };
61
+
62
+ function observeRect(node, cb) {
63
+ return {
64
+ observe: function observe() {
65
+ var wasEmpty = observedNodes.size === 0;
66
+
67
+ if (observedNodes.has(node)) {
68
+ observedNodes.get(node).callbacks.push(cb);
69
+ } else {
70
+ observedNodes.set(node, {
71
+ rect: undefined,
72
+ hasRectChanged: false,
73
+ callbacks: [cb]
74
+ });
75
+ }
76
+
77
+ if (wasEmpty) run();
78
+ },
79
+ unobserve: function unobserve() {
80
+ var state = observedNodes.get(node);
81
+
82
+ if (state) {
83
+ // Remove the callback
84
+ var index = state.callbacks.indexOf(cb);
85
+ if (index >= 0) state.callbacks.splice(index, 1); // Remove the node reference
86
+
87
+ if (!state.callbacks.length) observedNodes["delete"](node); // Stop the loop
88
+
89
+ if (!observedNodes.size) cancelAnimationFrame(rafId);
90
+ }
91
+ }
92
+ };
93
+ }
94
+
95
+ function memo(getDeps, fn, opts) {
96
+ let deps = [];
97
+ let result;
98
+ return () => {
99
+ let depTime;
100
+ if (opts.key && opts.debug != null && opts.debug()) depTime = Date.now();
101
+ const newDeps = getDeps();
102
+ const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);
103
+
104
+ if (!depsChanged) {
105
+ return result;
106
+ }
107
+
108
+ deps = newDeps;
109
+ let resultTime;
110
+ if (opts.key && opts.debug != null && opts.debug()) resultTime = Date.now();
111
+ result = fn(...newDeps);
112
+ opts == null ? void 0 : opts.onChange == null ? void 0 : opts.onChange(result);
113
+
114
+ if (opts.key && opts.debug != null && opts.debug()) {
115
+ const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;
116
+ const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;
117
+ const resultFpsPercentage = resultEndTime / 16;
118
+
119
+ const pad = (str, num) => {
120
+ str = String(str);
121
+
122
+ while (str.length < num) {
123
+ str = ' ' + str;
124
+ }
125
+
126
+ return str;
127
+ };
128
+
129
+ 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);
130
+ }
131
+
132
+ return result;
133
+ };
134
+ }
135
+
136
+ //
137
+ const defaultKeyExtractor = index => index;
138
+ const defaultRangeExtractor = range => {
139
+ const start = Math.max(range.startIndex - range.overscan, 0);
140
+ const end = Math.min(range.endIndex + range.overscan, range.count - 1);
141
+ const arr = [];
142
+
143
+ for (let i = start; i <= end; i++) {
144
+ arr.push(i);
145
+ }
146
+
147
+ return arr;
148
+ };
149
+
150
+ const memoRectCallback = (instance, cb) => {
151
+ let prev = {
152
+ height: -1,
153
+ width: -1
154
+ };
155
+ return rect => {
156
+ if (instance.options.horizontal ? rect.width !== prev.width : rect.height !== prev.height) {
157
+ cb(rect);
158
+ }
159
+
160
+ prev = rect;
161
+ };
162
+ };
163
+
164
+ const observeElementRect = (instance, cb) => {
165
+ const onResize = memoRectCallback(instance, cb);
166
+ const observer = observeRect(instance.scrollElement, rect => {
167
+ onResize(rect);
168
+ });
169
+
170
+ if (!instance.scrollElement) {
171
+ return;
172
+ }
173
+
174
+ onResize(instance.scrollElement.getBoundingClientRect());
175
+ observer.observe();
176
+ return () => {
177
+ observer.unobserve();
178
+ };
179
+ };
180
+ const observeWindowRect = (instance, cb) => {
181
+ const memoizedCallback = memoRectCallback(instance, cb);
182
+
183
+ const onResize = () => memoizedCallback({
184
+ width: instance.scrollElement.innerWidth,
185
+ height: instance.scrollElement.innerHeight
186
+ });
187
+
188
+ if (!instance.scrollElement) {
189
+ return;
190
+ }
191
+
192
+ onResize();
193
+ instance.scrollElement.addEventListener('resize', onResize, {
194
+ capture: false,
195
+ passive: true
196
+ });
197
+ return () => {
198
+ instance.scrollElement.removeEventListener('resize', onResize);
199
+ };
200
+ };
201
+ const scrollProps = {
202
+ element: ['scrollLeft', 'scrollTop'],
203
+ window: ['scrollX', 'scrollY']
204
+ };
205
+
206
+ const createOffsetObserver = mode => {
207
+ return (instance, cb) => {
208
+ if (!instance.scrollElement) {
209
+ return;
210
+ }
211
+
212
+ const propX = scrollProps[mode][0];
213
+ const propY = scrollProps[mode][1];
214
+ let prevX = instance.scrollElement[propX];
215
+ let prevY = instance.scrollElement[propY];
216
+
217
+ const scroll = () => {
218
+ cb(instance.scrollElement[instance.options.horizontal ? propX : propY]);
219
+ };
220
+
221
+ scroll();
222
+
223
+ const onScroll = e => {
224
+ const target = e.currentTarget;
225
+ const scrollX = target[propX];
226
+ const scrollY = target[propY];
227
+
228
+ if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {
229
+ scroll();
230
+ }
231
+
232
+ prevX = scrollX;
233
+ prevY = scrollY;
234
+ };
235
+
236
+ instance.scrollElement.addEventListener('scroll', onScroll, {
237
+ capture: false,
238
+ passive: true
239
+ });
240
+ return () => {
241
+ instance.scrollElement.removeEventListener('scroll', onScroll);
242
+ };
243
+ };
244
+ };
245
+
246
+ const observeElementOffset = createOffsetObserver('element');
247
+ const observeWindowOffset = createOffsetObserver('window');
248
+ const measureElement = (element, instance) => {
249
+ return element.getBoundingClientRect()[instance.options.horizontal ? 'width' : 'height'];
250
+ };
251
+ const windowScroll = (offset, canSmooth, instance) => {
252
+ var _instance$scrollEleme;
253
+ (_instance$scrollEleme = instance.scrollElement) == null ? void 0 : _instance$scrollEleme.scrollTo({
254
+ [instance.options.horizontal ? 'left' : 'top']: offset,
255
+ behavior: canSmooth ? 'smooth' : undefined
256
+ });
257
+ };
258
+ const elementScroll = (offset, canSmooth, instance) => {
259
+ var _instance$scrollEleme2;
260
+ (_instance$scrollEleme2 = instance.scrollElement) == null ? void 0 : _instance$scrollEleme2.scrollTo({
261
+ [instance.options.horizontal ? 'left' : 'top']: offset,
262
+ behavior: canSmooth ? 'smooth' : undefined
263
+ });
264
+ };
265
+ class Virtualizer {
266
+ constructor(_opts) {
267
+ var _this = this;
268
+
269
+ this.unsubs = [];
270
+ this.scrollElement = null;
271
+ this.measurementsCache = [];
272
+ this.itemMeasurementsCache = {};
273
+ this.pendingMeasuredCacheIndexes = [];
274
+ this.measureElementCache = {};
275
+
276
+ this.setOptions = opts => {
277
+ Object.entries(opts).forEach(_ref => {
278
+ let [key, value] = _ref;
279
+ if (typeof value === 'undefined') delete opts[key];
280
+ });
281
+ this.options = {
282
+ debug: false,
283
+ initialOffset: 0,
284
+ overscan: 1,
285
+ paddingStart: 0,
286
+ paddingEnd: 0,
287
+ scrollPaddingStart: 0,
288
+ scrollPaddingEnd: 0,
289
+ horizontal: false,
290
+ getItemKey: defaultKeyExtractor,
291
+ rangeExtractor: defaultRangeExtractor,
292
+ enableSmoothScroll: true,
293
+ onChange: () => {},
294
+ measureElement,
295
+ initialRect: {
296
+ width: 0,
297
+ height: 0
298
+ },
299
+ ...opts
300
+ };
301
+ };
302
+
303
+ this.notify = () => {
304
+ var _this$options$onChang, _this$options;
305
+
306
+ (_this$options$onChang = (_this$options = this.options).onChange) == null ? void 0 : _this$options$onChang.call(_this$options, this);
307
+ };
308
+
309
+ this.cleanup = () => {
310
+ this.unsubs.filter(Boolean).forEach(d => d());
311
+ this.unsubs = [];
312
+ this.scrollElement = null;
313
+ };
314
+
315
+ this._didMount = () => {
316
+ return () => {
317
+ this.cleanup();
318
+ };
319
+ };
320
+
321
+ this._willUpdate = () => {
322
+ const scrollElement = this.options.getScrollElement();
323
+
324
+ if (this.scrollElement !== scrollElement) {
325
+ this.cleanup();
326
+ this.scrollElement = scrollElement;
327
+ this.unsubs.push(this.options.observeElementRect(this, rect => {
328
+ this.scrollRect = rect;
329
+ this.notify();
330
+ }));
331
+ this.unsubs.push(this.options.observeElementOffset(this, offset => {
332
+ this.scrollOffset = offset;
333
+ this.notify();
334
+ }));
335
+ }
336
+ };
337
+
338
+ this.getSize = () => {
339
+ return this.scrollRect[this.options.horizontal ? 'width' : 'height'];
340
+ };
341
+
342
+ this.getMeasurements = memo(() => [this.options.count, this.options.paddingStart, this.options.getItemKey, this.itemMeasurementsCache], (count, paddingStart, getItemKey, measurementsCache) => {
343
+ const min = this.pendingMeasuredCacheIndexes.length > 0 ? Math.min(...this.pendingMeasuredCacheIndexes) : 0;
344
+ this.pendingMeasuredCacheIndexes = [];
345
+ const measurements = this.measurementsCache.slice(0, min);
346
+
347
+ for (let i = min; i < count; i++) {
348
+ const key = getItemKey(i);
349
+ const measuredSize = measurementsCache[key];
350
+ const start = measurements[i - 1] ? measurements[i - 1].end : paddingStart;
351
+ const size = typeof measuredSize === 'number' ? measuredSize : this.options.estimateSize(i);
352
+ const end = start + size;
353
+ measurements[i] = {
354
+ index: i,
355
+ start,
356
+ size,
357
+ end,
358
+ key
359
+ };
360
+ }
361
+
362
+ this.measurementsCache = measurements;
363
+ return measurements;
364
+ }, {
365
+ key: process.env.NODE_ENV === 'development' && 'getMeasurements',
366
+ debug: () => this.options.debug
367
+ });
368
+ this.calculateRange = memo(() => [this.getMeasurements(), this.getSize(), this.scrollOffset], (measurements, outerSize, scrollOffset) => {
369
+ return calculateRange({
370
+ measurements,
371
+ outerSize,
372
+ scrollOffset
373
+ });
374
+ }, {
375
+ key: process.env.NODE_ENV === 'development' && 'calculateRange',
376
+ debug: () => this.options.debug
377
+ });
378
+ this.getIndexes = memo(() => [this.options.rangeExtractor, this.calculateRange(), this.options.overscan, this.options.count], (rangeExtractor, range, overscan, count) => {
379
+ return rangeExtractor({ ...range,
380
+ overscan,
381
+ count: count
382
+ });
383
+ }, {
384
+ key: process.env.NODE_ENV === 'development' && 'getIndexes'
385
+ });
386
+ this.getVirtualItems = memo(() => [this.getIndexes(), this.getMeasurements(), this.options.measureElement], (indexes, measurements, measureElement) => {
387
+ const makeMeasureElement = index => measurableItem => {
388
+ var _this$itemMeasurement;
389
+
390
+ const item = this.measurementsCache[index];
391
+
392
+ if (!measurableItem) {
393
+ return;
394
+ }
395
+
396
+ const measuredItemSize = measureElement(measurableItem, this);
397
+ const itemSize = (_this$itemMeasurement = this.itemMeasurementsCache[item.key]) != null ? _this$itemMeasurement : item.size;
398
+
399
+ if (measuredItemSize !== itemSize) {
400
+ if (item.start < this.scrollOffset) {
401
+ if (process.env.NODE_ENV === 'development' && this.options.debug) {
402
+ console.info('correction', measuredItemSize - itemSize);
403
+ }
404
+
405
+ if (!this.destinationOffset) {
406
+ this._scrollToOffset(this.scrollOffset + (measuredItemSize - itemSize), false);
407
+ }
408
+ }
409
+
410
+ this.pendingMeasuredCacheIndexes.push(index);
411
+ this.itemMeasurementsCache = { ...this.itemMeasurementsCache,
412
+ [item.key]: measuredItemSize
413
+ };
414
+ this.notify();
415
+ }
416
+ };
417
+
418
+ const virtualItems = [];
419
+ const currentMeasureElements = {};
420
+
421
+ for (let k = 0, len = indexes.length; k < len; k++) {
422
+ var _this$measureElementC;
423
+
424
+ const i = indexes[k];
425
+ const measurement = measurements[i];
426
+ const item = { ...measurement,
427
+ measureElement: currentMeasureElements[i] = (_this$measureElementC = this.measureElementCache[i]) != null ? _this$measureElementC : makeMeasureElement(i)
428
+ };
429
+ virtualItems.push(item);
430
+ }
431
+
432
+ this.measureElementCache = currentMeasureElements;
433
+ return virtualItems;
434
+ }, {
435
+ key: process.env.NODE_ENV === 'development' && 'getIndexes'
436
+ });
437
+
438
+ this.scrollToOffset = function (toOffset, _temp) {
439
+ let {
440
+ align
441
+ } = _temp === void 0 ? {
442
+ align: 'start'
443
+ } : _temp;
444
+
445
+ const attempt = () => {
446
+ const offset = _this.scrollOffset;
447
+
448
+ const size = _this.getSize();
449
+
450
+ if (align === 'auto') {
451
+ if (toOffset <= offset) {
452
+ align = 'start';
453
+ } else if (toOffset >= offset + size) {
454
+ align = 'end';
455
+ } else {
456
+ align = 'start';
457
+ }
458
+ }
459
+
460
+ if (align === 'start') {
461
+ _this._scrollToOffset(toOffset, true);
462
+ } else if (align === 'end') {
463
+ _this._scrollToOffset(toOffset - size, true);
464
+ } else if (align === 'center') {
465
+ _this._scrollToOffset(toOffset - size / 2, true);
466
+ }
467
+ };
468
+
469
+ attempt();
470
+ requestAnimationFrame(() => {
471
+ attempt();
472
+ });
473
+ };
474
+
475
+ this.scrollToIndex = function (index, _temp2) {
476
+ let {
477
+ align,
478
+ ...rest
479
+ } = _temp2 === void 0 ? {
480
+ align: 'auto'
481
+ } : _temp2;
482
+
483
+ const measurements = _this.getMeasurements();
484
+
485
+ const offset = _this.scrollOffset;
486
+
487
+ const size = _this.getSize();
488
+
489
+ const {
490
+ count
491
+ } = _this.options;
492
+ const measurement = measurements[Math.max(0, Math.min(index, count - 1))];
493
+
494
+ if (!measurement) {
495
+ return;
496
+ }
497
+
498
+ if (align === 'auto') {
499
+ if (measurement.end >= offset + size - _this.options.scrollPaddingEnd) {
500
+ align = 'end';
501
+ } else if (measurement.start <= offset + _this.options.scrollPaddingStart) {
502
+ align = 'start';
503
+ } else {
504
+ return;
505
+ }
506
+ }
507
+
508
+ const toOffset = align === 'end' ? measurement.end + _this.options.scrollPaddingEnd : measurement.start - _this.options.scrollPaddingStart;
509
+
510
+ _this.scrollToOffset(toOffset, {
511
+ align,
512
+ ...rest
513
+ });
514
+ };
515
+
516
+ this.getTotalSize = () => {
517
+ var _this$getMeasurements;
518
+
519
+ return (((_this$getMeasurements = this.getMeasurements()[this.options.count - 1]) == null ? void 0 : _this$getMeasurements.end) || this.options.paddingStart) + this.options.paddingEnd;
520
+ };
521
+
522
+ this._scrollToOffset = (offset, canSmooth) => {
523
+ clearTimeout(this.scrollCheckFrame);
524
+ this.destinationOffset = offset;
525
+ this.options.scrollToFn(offset, this.options.enableSmoothScroll && canSmooth, this);
526
+ let scrollCheckFrame;
527
+
528
+ const check = () => {
529
+ let lastOffset = this.scrollOffset;
530
+ this.scrollCheckFrame = scrollCheckFrame = setTimeout(() => {
531
+ if (this.scrollCheckFrame !== scrollCheckFrame) {
532
+ return;
533
+ }
534
+
535
+ if (this.scrollOffset === lastOffset) {
536
+ this.destinationOffset = undefined;
537
+ return;
538
+ }
539
+
540
+ lastOffset = this.scrollOffset;
541
+ check();
542
+ }, 100);
543
+ };
544
+
545
+ check();
546
+ };
547
+
548
+ this.measure = () => {
549
+ this.itemMeasurementsCache = {};
550
+ this.notify();
551
+ };
552
+
553
+ this.setOptions(_opts);
554
+ this.scrollRect = this.options.initialRect;
555
+ this.scrollOffset = this.options.initialOffset;
556
+ }
557
+
558
+ }
559
+
560
+ const findNearestBinarySearch = (low, high, getCurrentValue, value) => {
561
+ while (low <= high) {
562
+ const middle = (low + high) / 2 | 0;
563
+ const currentValue = getCurrentValue(middle);
564
+
565
+ if (currentValue < value) {
566
+ low = middle + 1;
567
+ } else if (currentValue > value) {
568
+ high = middle - 1;
569
+ } else {
570
+ return middle;
571
+ }
572
+ }
573
+
574
+ if (low > 0) {
575
+ return low - 1;
576
+ } else {
577
+ return 0;
578
+ }
579
+ };
580
+
581
+ function calculateRange(_ref2) {
582
+ let {
583
+ measurements,
584
+ outerSize,
585
+ scrollOffset
586
+ } = _ref2;
587
+ const count = measurements.length - 1;
588
+
589
+ const getOffset = index => measurements[index].start;
590
+
591
+ const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset);
592
+ let endIndex = startIndex;
593
+
594
+ while (endIndex < count && measurements[endIndex].end < scrollOffset + outerSize) {
595
+ endIndex++;
596
+ }
597
+
598
+ return {
599
+ startIndex,
600
+ endIndex
601
+ };
602
+ }
603
+
604
+ exports.Virtualizer = Virtualizer;
605
+ exports.defaultKeyExtractor = defaultKeyExtractor;
606
+ exports.defaultRangeExtractor = defaultRangeExtractor;
607
+ exports.elementScroll = elementScroll;
608
+ exports.measureElement = measureElement;
609
+ exports.memo = memo;
610
+ exports.observeElementOffset = observeElementOffset;
611
+ exports.observeElementRect = observeElementRect;
612
+ exports.observeWindowOffset = observeWindowOffset;
613
+ exports.observeWindowRect = observeWindowRect;
614
+ exports.windowScroll = windowScroll;
615
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../../virtual-core/build/esm/index.js"],"sourcesContent":["/**\n * virtual-core\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nvar props = [\"bottom\", \"height\", \"left\", \"right\", \"top\", \"width\"];\n\nvar rectChanged = function rectChanged(a, b) {\n if (a === void 0) {\n a = {};\n }\n\n if (b === void 0) {\n b = {};\n }\n\n return props.some(function (prop) {\n return a[prop] !== b[prop];\n });\n};\n\nvar observedNodes = /*#__PURE__*/new Map();\nvar rafId;\n\nvar run = function run() {\n var changedStates = [];\n observedNodes.forEach(function (state, node) {\n var newRect = node.getBoundingClientRect();\n\n if (rectChanged(newRect, state.rect)) {\n state.rect = newRect;\n changedStates.push(state);\n }\n });\n changedStates.forEach(function (state) {\n state.callbacks.forEach(function (cb) {\n return cb(state.rect);\n });\n });\n rafId = window.requestAnimationFrame(run);\n};\n\nfunction observeRect(node, cb) {\n return {\n observe: function observe() {\n var wasEmpty = observedNodes.size === 0;\n\n if (observedNodes.has(node)) {\n observedNodes.get(node).callbacks.push(cb);\n } else {\n observedNodes.set(node, {\n rect: undefined,\n hasRectChanged: false,\n callbacks: [cb]\n });\n }\n\n if (wasEmpty) run();\n },\n unobserve: function unobserve() {\n var state = observedNodes.get(node);\n\n if (state) {\n // Remove the callback\n var index = state.callbacks.indexOf(cb);\n if (index >= 0) state.callbacks.splice(index, 1); // Remove the node reference\n\n if (!state.callbacks.length) observedNodes[\"delete\"](node); // Stop the loop\n\n if (!observedNodes.size) cancelAnimationFrame(rafId);\n }\n }\n };\n}\n\nfunction memo(getDeps, fn, opts) {\n let deps = [];\n let result;\n return () => {\n let depTime;\n if (opts.key && opts.debug != null && opts.debug()) depTime = Date.now();\n const newDeps = getDeps();\n const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n\n if (!depsChanged) {\n return result;\n }\n\n deps = newDeps;\n let resultTime;\n if (opts.key && opts.debug != null && opts.debug()) resultTime = Date.now();\n result = fn(...newDeps);\n opts == null ? void 0 : opts.onChange == null ? void 0 : opts.onChange(result);\n\n if (opts.key && opts.debug != null && 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, num) => {\n str = String(str);\n\n while (str.length < num) {\n str = ' ' + str;\n }\n\n return str;\n };\n\n 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);\n }\n\n return result;\n };\n}\n\n//\nconst defaultKeyExtractor = index => index;\nconst defaultRangeExtractor = range => {\n const start = Math.max(range.startIndex - range.overscan, 0);\n const end = Math.min(range.endIndex + range.overscan, range.count - 1);\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 = (instance, cb) => {\n let prev = {\n height: -1,\n width: -1\n };\n return rect => {\n if (instance.options.horizontal ? rect.width !== prev.width : rect.height !== prev.height) {\n cb(rect);\n }\n\n prev = rect;\n };\n};\n\nconst observeElementRect = (instance, cb) => {\n const onResize = memoRectCallback(instance, cb);\n const observer = observeRect(instance.scrollElement, rect => {\n onResize(rect);\n });\n\n if (!instance.scrollElement) {\n return;\n }\n\n onResize(instance.scrollElement.getBoundingClientRect());\n observer.observe();\n return () => {\n observer.unobserve();\n };\n};\nconst observeWindowRect = (instance, cb) => {\n const memoizedCallback = memoRectCallback(instance, cb);\n\n const onResize = () => memoizedCallback({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight\n });\n\n if (!instance.scrollElement) {\n return;\n }\n\n onResize();\n instance.scrollElement.addEventListener('resize', onResize, {\n capture: false,\n passive: true\n });\n return () => {\n instance.scrollElement.removeEventListener('resize', onResize);\n };\n};\nconst scrollProps = {\n element: ['scrollLeft', 'scrollTop'],\n window: ['scrollX', 'scrollY']\n};\n\nconst createOffsetObserver = mode => {\n return (instance, cb) => {\n if (!instance.scrollElement) {\n return;\n }\n\n const propX = scrollProps[mode][0];\n const propY = scrollProps[mode][1];\n let prevX = instance.scrollElement[propX];\n let prevY = instance.scrollElement[propY];\n\n const scroll = () => {\n cb(instance.scrollElement[instance.options.horizontal ? propX : propY]);\n };\n\n scroll();\n\n const onScroll = e => {\n const target = e.currentTarget;\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 return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll);\n };\n };\n};\n\nconst observeElementOffset = createOffsetObserver('element');\nconst observeWindowOffset = createOffsetObserver('window');\nconst measureElement = (element, instance) => {\n return element.getBoundingClientRect()[instance.options.horizontal ? 'width' : 'height'];\n};\nconst windowScroll = (offset, canSmooth, instance) => {\n var _instance$scrollEleme;\n (_instance$scrollEleme = instance.scrollElement) == null ? void 0 : _instance$scrollEleme.scrollTo({\n [instance.options.horizontal ? 'left' : 'top']: offset,\n behavior: canSmooth ? 'smooth' : undefined\n });\n};\nconst elementScroll = (offset, canSmooth, instance) => {\n var _instance$scrollEleme2;\n (_instance$scrollEleme2 = instance.scrollElement) == null ? void 0 : _instance$scrollEleme2.scrollTo({\n [instance.options.horizontal ? 'left' : 'top']: offset,\n behavior: canSmooth ? 'smooth' : undefined\n });\n};\nclass Virtualizer {\n constructor(_opts) {\n var _this = this;\n\n this.unsubs = [];\n this.scrollElement = null;\n this.measurementsCache = [];\n this.itemMeasurementsCache = {};\n this.pendingMeasuredCacheIndexes = [];\n this.measureElementCache = {};\n\n this.setOptions = opts => {\n Object.entries(opts).forEach(_ref => {\n let [key, value] = _ref;\n if (typeof value === 'undefined') delete opts[key];\n });\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n enableSmoothScroll: true,\n onChange: () => {},\n measureElement,\n initialRect: {\n width: 0,\n height: 0\n },\n ...opts\n };\n };\n\n this.notify = () => {\n var _this$options$onChang, _this$options;\n\n (_this$options$onChang = (_this$options = this.options).onChange) == null ? void 0 : _this$options$onChang.call(_this$options, this);\n };\n\n this.cleanup = () => {\n this.unsubs.filter(Boolean).forEach(d => d());\n this.unsubs = [];\n this.scrollElement = null;\n };\n\n this._didMount = () => {\n return () => {\n this.cleanup();\n };\n };\n\n this._willUpdate = () => {\n const scrollElement = this.options.getScrollElement();\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup();\n this.scrollElement = scrollElement;\n this.unsubs.push(this.options.observeElementRect(this, rect => {\n this.scrollRect = rect;\n this.notify();\n }));\n this.unsubs.push(this.options.observeElementOffset(this, offset => {\n this.scrollOffset = offset;\n this.notify();\n }));\n }\n };\n\n this.getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height'];\n };\n\n this.getMeasurements = memo(() => [this.options.count, this.options.paddingStart, this.options.getItemKey, this.itemMeasurementsCache], (count, paddingStart, getItemKey, measurementsCache) => {\n const min = this.pendingMeasuredCacheIndexes.length > 0 ? Math.min(...this.pendingMeasuredCacheIndexes) : 0;\n this.pendingMeasuredCacheIndexes = [];\n const measurements = this.measurementsCache.slice(0, min);\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i);\n const measuredSize = measurementsCache[key];\n const start = measurements[i - 1] ? measurements[i - 1].end : paddingStart;\n const size = typeof measuredSize === 'number' ? measuredSize : this.options.estimateSize(i);\n const end = start + size;\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key\n };\n }\n\n this.measurementsCache = measurements;\n return measurements;\n }, {\n key: process.env.NODE_ENV === 'development' && 'getMeasurements',\n debug: () => this.options.debug\n });\n this.calculateRange = memo(() => [this.getMeasurements(), this.getSize(), this.scrollOffset], (measurements, outerSize, scrollOffset) => {\n return calculateRange({\n measurements,\n outerSize,\n scrollOffset\n });\n }, {\n key: process.env.NODE_ENV === 'development' && 'calculateRange',\n debug: () => this.options.debug\n });\n this.getIndexes = memo(() => [this.options.rangeExtractor, this.calculateRange(), this.options.overscan, this.options.count], (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({ ...range,\n overscan,\n count: count\n });\n }, {\n key: process.env.NODE_ENV === 'development' && 'getIndexes'\n });\n this.getVirtualItems = memo(() => [this.getIndexes(), this.getMeasurements(), this.options.measureElement], (indexes, measurements, measureElement) => {\n const makeMeasureElement = index => measurableItem => {\n var _this$itemMeasurement;\n\n const item = this.measurementsCache[index];\n\n if (!measurableItem) {\n return;\n }\n\n const measuredItemSize = measureElement(measurableItem, this);\n const itemSize = (_this$itemMeasurement = this.itemMeasurementsCache[item.key]) != null ? _this$itemMeasurement : item.size;\n\n if (measuredItemSize !== itemSize) {\n if (item.start < this.scrollOffset) {\n if (process.env.NODE_ENV === 'development' && this.options.debug) {\n console.info('correction', measuredItemSize - itemSize);\n }\n\n if (!this.destinationOffset) {\n this._scrollToOffset(this.scrollOffset + (measuredItemSize - itemSize), false);\n }\n }\n\n this.pendingMeasuredCacheIndexes.push(index);\n this.itemMeasurementsCache = { ...this.itemMeasurementsCache,\n [item.key]: measuredItemSize\n };\n this.notify();\n }\n };\n\n const virtualItems = [];\n const currentMeasureElements = {};\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n var _this$measureElementC;\n\n const i = indexes[k];\n const measurement = measurements[i];\n const item = { ...measurement,\n measureElement: currentMeasureElements[i] = (_this$measureElementC = this.measureElementCache[i]) != null ? _this$measureElementC : makeMeasureElement(i)\n };\n virtualItems.push(item);\n }\n\n this.measureElementCache = currentMeasureElements;\n return virtualItems;\n }, {\n key: process.env.NODE_ENV === 'development' && 'getIndexes'\n });\n\n this.scrollToOffset = function (toOffset, _temp) {\n let {\n align\n } = _temp === void 0 ? {\n align: 'start'\n } : _temp;\n\n const attempt = () => {\n const offset = _this.scrollOffset;\n\n const size = _this.getSize();\n\n if (align === 'auto') {\n if (toOffset <= offset) {\n align = 'start';\n } else if (toOffset >= offset + size) {\n align = 'end';\n } else {\n align = 'start';\n }\n }\n\n if (align === 'start') {\n _this._scrollToOffset(toOffset, true);\n } else if (align === 'end') {\n _this._scrollToOffset(toOffset - size, true);\n } else if (align === 'center') {\n _this._scrollToOffset(toOffset - size / 2, true);\n }\n };\n\n attempt();\n requestAnimationFrame(() => {\n attempt();\n });\n };\n\n this.scrollToIndex = function (index, _temp2) {\n let {\n align,\n ...rest\n } = _temp2 === void 0 ? {\n align: 'auto'\n } : _temp2;\n\n const measurements = _this.getMeasurements();\n\n const offset = _this.scrollOffset;\n\n const size = _this.getSize();\n\n const {\n count\n } = _this.options;\n const measurement = measurements[Math.max(0, Math.min(index, count - 1))];\n\n if (!measurement) {\n return;\n }\n\n if (align === 'auto') {\n if (measurement.end >= offset + size - _this.options.scrollPaddingEnd) {\n align = 'end';\n } else if (measurement.start <= offset + _this.options.scrollPaddingStart) {\n align = 'start';\n } else {\n return;\n }\n }\n\n const toOffset = align === 'end' ? measurement.end + _this.options.scrollPaddingEnd : measurement.start - _this.options.scrollPaddingStart;\n\n _this.scrollToOffset(toOffset, {\n align,\n ...rest\n });\n };\n\n this.getTotalSize = () => {\n var _this$getMeasurements;\n\n return (((_this$getMeasurements = this.getMeasurements()[this.options.count - 1]) == null ? void 0 : _this$getMeasurements.end) || this.options.paddingStart) + this.options.paddingEnd;\n };\n\n this._scrollToOffset = (offset, canSmooth) => {\n clearTimeout(this.scrollCheckFrame);\n this.destinationOffset = offset;\n this.options.scrollToFn(offset, this.options.enableSmoothScroll && canSmooth, this);\n let scrollCheckFrame;\n\n const check = () => {\n let lastOffset = this.scrollOffset;\n this.scrollCheckFrame = scrollCheckFrame = setTimeout(() => {\n if (this.scrollCheckFrame !== scrollCheckFrame) {\n return;\n }\n\n if (this.scrollOffset === lastOffset) {\n this.destinationOffset = undefined;\n return;\n }\n\n lastOffset = this.scrollOffset;\n check();\n }, 100);\n };\n\n check();\n };\n\n this.measure = () => {\n this.itemMeasurementsCache = {};\n this.notify();\n };\n\n this.setOptions(_opts);\n this.scrollRect = this.options.initialRect;\n this.scrollOffset = this.options.initialOffset;\n }\n\n}\n\nconst findNearestBinarySearch = (low, high, getCurrentValue, value) => {\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(_ref2) {\n let {\n measurements,\n outerSize,\n scrollOffset\n } = _ref2;\n const count = measurements.length - 1;\n\n const getOffset = index => measurements[index].start;\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset);\n let endIndex = startIndex;\n\n while (endIndex < count && measurements[endIndex].end < scrollOffset + outerSize) {\n endIndex++;\n }\n\n return {\n startIndex,\n endIndex\n };\n}\n\nexport { Virtualizer, defaultKeyExtractor, defaultRangeExtractor, elementScroll, measureElement, memo, observeElementOffset, observeElementRect, observeWindowOffset, observeWindowRect, windowScroll };\n//# sourceMappingURL=index.js.map\n"],"names":[],"mappings":"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"}
package/build/stats.html CHANGED
@@ -2669,7 +2669,7 @@ var drawChart = (function (exports) {
2669
2669
  </script>
2670
2670
  <script>
2671
2671
  /*<!--*/
2672
- const data = {"version":2,"tree":{"name":"root","children":[{"name":"index.production.js","children":[{"name":"packages","children":[{"name":"virtual-core/build/esm/index.js","uid":"b160-23"},{"name":"solid-virtual/src/index.tsx","uid":"b160-25"}]}]}],"isRoot":true},"nodeParts":{"b160-23":{"renderedLength":17104,"gzipLength":4206,"brotliLength":0,"mainUid":"b160-22"},"b160-25":{"renderedLength":1957,"gzipLength":617,"brotliLength":0,"mainUid":"b160-24"}},"nodeMetas":{"b160-22":{"id":"/packages/virtual-core/build/esm/index.js","moduleParts":{"index.production.js":"b160-23"},"imported":[],"importedBy":[{"uid":"b160-24"}]},"b160-24":{"id":"/packages/solid-virtual/src/index.tsx","moduleParts":{"index.production.js":"b160-25"},"imported":[{"uid":"b160-22"},{"uid":"b160-26"},{"uid":"b160-27"}],"importedBy":[],"isEntry":true},"b160-26":{"id":"solid-js","moduleParts":{},"imported":[],"importedBy":[{"uid":"b160-24"}],"isExternal":true},"b160-27":{"id":"solid-js/store","moduleParts":{},"imported":[],"importedBy":[{"uid":"b160-24"}],"isExternal":true}},"env":{"rollup":"2.75.4"},"options":{"gzip":true,"brotli":false,"sourcemap":false}};
2672
+ const data = {"version":2,"tree":{"name":"root","children":[{"name":"index.production.js","children":[{"name":"packages","children":[{"name":"virtual-core/build/esm/index.js","uid":"a984-23"},{"name":"solid-virtual/src/index.tsx","uid":"a984-25"}]}]}],"isRoot":true},"nodeParts":{"a984-23":{"renderedLength":17104,"gzipLength":4206,"brotliLength":0,"mainUid":"a984-22"},"a984-25":{"renderedLength":1957,"gzipLength":617,"brotliLength":0,"mainUid":"a984-24"}},"nodeMetas":{"a984-22":{"id":"/packages/virtual-core/build/esm/index.js","moduleParts":{"index.production.js":"a984-23"},"imported":[],"importedBy":[{"uid":"a984-24"}]},"a984-24":{"id":"/packages/solid-virtual/src/index.tsx","moduleParts":{"index.production.js":"a984-25"},"imported":[{"uid":"a984-22"},{"uid":"a984-26"},{"uid":"a984-27"}],"importedBy":[],"isEntry":true},"a984-26":{"id":"solid-js","moduleParts":{},"imported":[],"importedBy":[{"uid":"a984-24"}],"isExternal":true},"a984-27":{"id":"solid-js/store","moduleParts":{},"imported":[],"importedBy":[{"uid":"a984-24"}],"isExternal":true}},"env":{"rollup":"2.75.4"},"options":{"gzip":true,"brotli":false,"sourcemap":false}};
2673
2673
 
2674
2674
  const run = () => {
2675
2675
  const width = window.innerWidth;
package/build/stats.json CHANGED
@@ -11,11 +11,11 @@
11
11
  "children": [
12
12
  {
13
13
  "name": "virtual-core/build/esm/index.js",
14
- "uid": "b160-29"
14
+ "uid": "a984-29"
15
15
  },
16
16
  {
17
17
  "name": "solid-virtual/src/index.tsx",
18
- "uid": "b160-31"
18
+ "uid": "a984-31"
19
19
  }
20
20
  ]
21
21
  }
@@ -25,69 +25,69 @@
25
25
  "isRoot": true
26
26
  },
27
27
  "nodeParts": {
28
- "b160-29": {
28
+ "a984-29": {
29
29
  "renderedLength": 17104,
30
30
  "gzipLength": 4206,
31
31
  "brotliLength": 0,
32
- "mainUid": "b160-28"
32
+ "mainUid": "a984-28"
33
33
  },
34
- "b160-31": {
34
+ "a984-31": {
35
35
  "renderedLength": 1957,
36
36
  "gzipLength": 617,
37
37
  "brotliLength": 0,
38
- "mainUid": "b160-30"
38
+ "mainUid": "a984-30"
39
39
  }
40
40
  },
41
41
  "nodeMetas": {
42
- "b160-28": {
42
+ "a984-28": {
43
43
  "id": "/packages/virtual-core/build/esm/index.js",
44
44
  "moduleParts": {
45
- "index.production.js": "b160-29"
45
+ "index.production.js": "a984-29"
46
46
  },
47
47
  "imported": [],
48
48
  "importedBy": [
49
49
  {
50
- "uid": "b160-30"
50
+ "uid": "a984-30"
51
51
  }
52
52
  ]
53
53
  },
54
- "b160-30": {
54
+ "a984-30": {
55
55
  "id": "/packages/solid-virtual/src/index.tsx",
56
56
  "moduleParts": {
57
- "index.production.js": "b160-31"
57
+ "index.production.js": "a984-31"
58
58
  },
59
59
  "imported": [
60
60
  {
61
- "uid": "b160-28"
61
+ "uid": "a984-28"
62
62
  },
63
63
  {
64
- "uid": "b160-32"
64
+ "uid": "a984-32"
65
65
  },
66
66
  {
67
- "uid": "b160-33"
67
+ "uid": "a984-33"
68
68
  }
69
69
  ],
70
70
  "importedBy": [],
71
71
  "isEntry": true
72
72
  },
73
- "b160-32": {
73
+ "a984-32": {
74
74
  "id": "solid-js",
75
75
  "moduleParts": {},
76
76
  "imported": [],
77
77
  "importedBy": [
78
78
  {
79
- "uid": "b160-30"
79
+ "uid": "a984-30"
80
80
  }
81
81
  ],
82
82
  "isExternal": true
83
83
  },
84
- "b160-33": {
84
+ "a984-33": {
85
85
  "id": "solid-js/store",
86
86
  "moduleParts": {},
87
87
  "imported": [],
88
88
  "importedBy": [
89
89
  {
90
- "uid": "b160-30"
90
+ "uid": "a984-30"
91
91
  }
92
92
  ],
93
93
  "isExternal": true
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tanstack/solid-virtual",
3
3
  "author": "Tanner Linsley",
4
- "version": "3.0.0-beta.12",
4
+ "version": "3.0.0-beta.13",
5
5
  "description": "Headless UI for virtualizing scrollable elements in Solid",
6
6
  "license": "MIT",
7
7
  "homepage": "https://github.com/tanstack/virtual#readme",
@@ -33,11 +33,11 @@
33
33
  "node": ">=12"
34
34
  },
35
35
  "files": [
36
- "build/*",
36
+ "build/**",
37
37
  "src"
38
38
  ],
39
39
  "dependencies": {
40
40
  "@reach/observe-rect": "^1.1.0",
41
- "@tanstack/virtual-core": "3.0.0-beta.12"
41
+ "@tanstack/virtual-core": "3.0.0-beta.13"
42
42
  }
43
43
  }