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

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.
@@ -8,61 +8,23 @@
8
8
  *
9
9
  * @license MIT
10
10
  */
11
- function memo(getDeps, fn, opts) {
12
- let deps = [];
13
- let result;
14
- return () => {
15
- let depTime;
16
- if (opts.key && opts.debug != null && opts.debug()) depTime = Date.now();
17
- const newDeps = getDeps();
18
- const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);
19
-
20
- if (!depsChanged) {
21
- return result;
22
- }
23
-
24
- deps = newDeps;
25
- let resultTime;
26
- if (opts.key && opts.debug != null && opts.debug()) resultTime = Date.now();
27
- result = fn(...newDeps);
28
- opts == null ? void 0 : opts.onChange == null ? void 0 : opts.onChange(result);
29
-
30
- if (opts.key && opts.debug != null && opts.debug()) {
31
- const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;
32
- const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;
33
- const resultFpsPercentage = resultEndTime / 16;
34
-
35
- const pad = (str, num) => {
36
- str = String(str);
37
-
38
- while (str.length < num) {
39
- str = ' ' + str;
40
- }
11
+ import { memo } from './utils.esm.js';
12
+ export { memo } from './utils.esm.js';
41
13
 
42
- return str;
43
- };
44
-
45
- 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);
46
- }
47
-
48
- return result;
49
- };
50
- }
14
+ //
51
15
 
52
16
  //
17
+
53
18
  const defaultKeyExtractor = index => index;
54
19
  const defaultRangeExtractor = range => {
55
20
  const start = Math.max(range.startIndex - range.overscan, 0);
56
21
  const end = Math.min(range.endIndex + range.overscan, range.count - 1);
57
22
  const arr = [];
58
-
59
23
  for (let i = start; i <= end; i++) {
60
24
  arr.push(i);
61
25
  }
62
-
63
26
  return arr;
64
27
  };
65
-
66
28
  const memoRectCallback = (instance, cb) => {
67
29
  let prev = {
68
30
  height: -1,
@@ -72,25 +34,20 @@ const memoRectCallback = (instance, cb) => {
72
34
  if (instance.options.horizontal ? rect.width !== prev.width : rect.height !== prev.height) {
73
35
  cb(rect);
74
36
  }
75
-
76
37
  prev = rect;
77
38
  };
78
39
  };
79
-
80
40
  const observeElementRect = (instance, cb) => {
81
41
  const observer = new ResizeObserver(entries => {
82
42
  var _entries$, _entries$2;
83
-
84
43
  cb({
85
44
  width: (_entries$ = entries[0]) == null ? void 0 : _entries$.contentRect.width,
86
45
  height: (_entries$2 = entries[0]) == null ? void 0 : _entries$2.contentRect.height
87
46
  });
88
47
  });
89
-
90
48
  if (!instance.scrollElement) {
91
49
  return;
92
50
  }
93
-
94
51
  cb(instance.scrollElement.getBoundingClientRect());
95
52
  observer.observe(instance.scrollElement);
96
53
  return () => {
@@ -99,16 +56,13 @@ const observeElementRect = (instance, cb) => {
99
56
  };
100
57
  const observeWindowRect = (instance, cb) => {
101
58
  const memoizedCallback = memoRectCallback(instance, cb);
102
-
103
59
  const onResize = () => memoizedCallback({
104
60
  width: instance.scrollElement.innerWidth,
105
61
  height: instance.scrollElement.innerHeight
106
62
  });
107
-
108
63
  if (!instance.scrollElement) {
109
64
  return;
110
65
  }
111
-
112
66
  onResize();
113
67
  instance.scrollElement.addEventListener('resize', onResize, {
114
68
  capture: false,
@@ -122,38 +76,30 @@ const scrollProps = {
122
76
  element: ['scrollLeft', 'scrollTop'],
123
77
  window: ['scrollX', 'scrollY']
124
78
  };
125
-
126
79
  const createOffsetObserver = mode => {
127
80
  return (instance, cb) => {
128
81
  if (!instance.scrollElement) {
129
82
  return;
130
83
  }
131
-
132
84
  const propX = scrollProps[mode][0];
133
85
  const propY = scrollProps[mode][1];
134
86
  let prevX = instance.scrollElement[propX];
135
87
  let prevY = instance.scrollElement[propY];
136
-
137
88
  const scroll = () => {
138
89
  const offset = instance.scrollElement[instance.options.horizontal ? propX : propY];
139
90
  cb(Math.max(0, offset - instance.options.scrollMargin));
140
91
  };
141
-
142
92
  scroll();
143
-
144
93
  const onScroll = e => {
145
94
  const target = e.currentTarget;
146
95
  const scrollX = target[propX];
147
96
  const scrollY = target[propY];
148
-
149
97
  if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {
150
98
  scroll();
151
99
  }
152
-
153
100
  prevX = scrollX;
154
101
  prevY = scrollY;
155
102
  };
156
-
157
103
  instance.scrollElement.addEventListener('scroll', onScroll, {
158
104
  capture: false,
159
105
  passive: true
@@ -163,7 +109,6 @@ const createOffsetObserver = mode => {
163
109
  };
164
110
  };
165
111
  };
166
-
167
112
  const observeElementOffset = createOffsetObserver('element');
168
113
  const observeWindowOffset = createOffsetObserver('window');
169
114
  const measureElement = (element, instance) => {
@@ -171,34 +116,33 @@ const measureElement = (element, instance) => {
171
116
  };
172
117
  const windowScroll = (offset, _ref, instance) => {
173
118
  var _instance$scrollEleme;
174
-
175
119
  let {
176
- canSmooth,
120
+ adjustments,
121
+ behavior,
177
122
  sync
178
123
  } = _ref;
179
- const toOffset = sync ? offset : offset + instance.options.scrollMargin;
124
+ const toOffset = (sync ? offset : offset + instance.options.scrollMargin) + (adjustments ?? 0);
180
125
  (_instance$scrollEleme = instance.scrollElement) == null ? void 0 : _instance$scrollEleme.scrollTo == null ? void 0 : _instance$scrollEleme.scrollTo({
181
126
  [instance.options.horizontal ? 'left' : 'top']: toOffset,
182
- behavior: canSmooth ? 'smooth' : undefined
127
+ behavior
183
128
  });
184
129
  };
185
130
  const elementScroll = (offset, _ref2, instance) => {
186
131
  var _instance$scrollEleme2;
187
-
188
132
  let {
189
- canSmooth,
133
+ adjustments,
134
+ behavior,
190
135
  sync
191
136
  } = _ref2;
192
- const toOffset = sync ? offset : offset + instance.options.scrollMargin;
137
+ const toOffset = (sync ? offset : offset + instance.options.scrollMargin) + (adjustments ?? 0);
193
138
  (_instance$scrollEleme2 = instance.scrollElement) == null ? void 0 : _instance$scrollEleme2.scrollTo == null ? void 0 : _instance$scrollEleme2.scrollTo({
194
139
  [instance.options.horizontal ? 'left' : 'top']: toOffset,
195
- behavior: canSmooth ? 'smooth' : undefined
140
+ behavior
196
141
  });
197
142
  };
198
143
  class Virtualizer {
199
144
  constructor(_opts) {
200
145
  var _this = this;
201
-
202
146
  this.unsubs = [];
203
147
  this.scrollElement = null;
204
148
  this.isScrolling = false;
@@ -206,9 +150,9 @@ class Virtualizer {
206
150
  this.measurementsCache = [];
207
151
  this.itemMeasurementsCache = {};
208
152
  this.pendingMeasuredCacheIndexes = [];
209
- this.scrollDelta = 0;
153
+ this.scrollAdjustments = 0;
210
154
  this.measureElementCache = {};
211
-
155
+ this.pendingScrollToIndexCallback = null;
212
156
  this.getResizeObserver = (() => {
213
157
  let _ro = null;
214
158
  return () => {
@@ -225,12 +169,10 @@ class Virtualizer {
225
169
  }
226
170
  };
227
171
  })();
228
-
229
172
  this.range = {
230
173
  startIndex: 0,
231
174
  endIndex: 0
232
175
  };
233
-
234
176
  this.setOptions = opts => {
235
177
  Object.entries(opts).forEach(_ref3 => {
236
178
  let [key, value] = _ref3;
@@ -247,7 +189,6 @@ class Virtualizer {
247
189
  horizontal: false,
248
190
  getItemKey: defaultKeyExtractor,
249
191
  rangeExtractor: defaultRangeExtractor,
250
- enableSmoothScroll: true,
251
192
  onChange: () => {},
252
193
  measureElement,
253
194
  initialRect: {
@@ -260,42 +201,35 @@ class Virtualizer {
260
201
  ...opts
261
202
  };
262
203
  };
263
-
264
204
  this.notify = () => {
265
205
  var _this$options$onChang, _this$options;
266
-
267
206
  (_this$options$onChang = (_this$options = this.options).onChange) == null ? void 0 : _this$options$onChang.call(_this$options, this);
268
207
  };
269
-
270
208
  this.cleanup = () => {
271
209
  this.unsubs.filter(Boolean).forEach(d => d());
272
210
  this.unsubs = [];
273
211
  this.scrollElement = null;
274
212
  };
275
-
276
213
  this._didMount = () => {
277
214
  return () => {
278
215
  var _this$getResizeObserv;
279
-
280
216
  (_this$getResizeObserv = this.getResizeObserver()) == null ? void 0 : _this$getResizeObserv.disconnect();
281
217
  this.measureElementCache = {};
282
218
  this.cleanup();
283
219
  };
284
220
  };
285
-
286
221
  this._willUpdate = () => {
222
+ var _this$pendingScrollTo;
223
+ (_this$pendingScrollTo = this.pendingScrollToIndexCallback) == null ? void 0 : _this$pendingScrollTo.call(this);
287
224
  const scrollElement = this.options.getScrollElement();
288
-
289
225
  if (this.scrollElement !== scrollElement) {
290
226
  this.cleanup();
291
227
  this.scrollElement = scrollElement;
292
-
293
228
  this._scrollToOffset(this.scrollOffset, {
294
- canSmooth: false,
295
- sync: true,
296
- requested: false
229
+ adjustments: undefined,
230
+ behavior: undefined,
231
+ sync: true
297
232
  });
298
-
299
233
  this.unsubs.push(this.options.observeElementRect(this, rect => {
300
234
  this.scrollRect = rect;
301
235
  this.calculateRange();
@@ -305,11 +239,10 @@ class Virtualizer {
305
239
  clearTimeout(this.isScrollingTimeoutId);
306
240
  this.isScrollingTimeoutId = null;
307
241
  }
308
-
309
242
  if (this.scrollOffset !== offset) {
310
243
  this.scrollOffset = offset;
311
244
  this.isScrolling = true;
312
- this.scrollDelta = 0;
245
+ this.scrollAdjustments = 0;
313
246
  this.isScrollingTimeoutId = setTimeout(() => {
314
247
  this.isScrollingTimeoutId = null;
315
248
  this.isScrolling = false;
@@ -317,25 +250,21 @@ class Virtualizer {
317
250
  }, this.options.scrollingDelay);
318
251
  } else {
319
252
  this.isScrolling = false;
320
- this.scrollDelta = 0;
253
+ this.scrollAdjustments = 0;
321
254
  }
322
-
323
255
  this.calculateRange();
324
256
  }));
325
257
  } else if (!this.isScrolling) {
326
258
  this.calculateRange();
327
259
  }
328
260
  };
329
-
330
261
  this.getSize = () => {
331
262
  return this.scrollRect[this.options.horizontal ? 'width' : 'height'];
332
263
  };
333
-
334
264
  this.getMeasurements = memo(() => [this.options.count, this.options.paddingStart, this.options.getItemKey, this.itemMeasurementsCache], (count, paddingStart, getItemKey, measurementsCache) => {
335
265
  const min = this.pendingMeasuredCacheIndexes.length > 0 ? Math.min(...this.pendingMeasuredCacheIndexes) : 0;
336
266
  this.pendingMeasuredCacheIndexes = [];
337
267
  const measurements = this.measurementsCache.slice(0, min);
338
-
339
268
  for (let i = min; i < count; i++) {
340
269
  const key = getItemKey(i);
341
270
  const measuredSize = measurementsCache[key];
@@ -350,7 +279,6 @@ class Virtualizer {
350
279
  key
351
280
  };
352
281
  }
353
-
354
282
  this.measurementsCache = measurements;
355
283
  return measurements;
356
284
  }, {
@@ -363,19 +291,18 @@ class Virtualizer {
363
291
  outerSize,
364
292
  scrollOffset
365
293
  });
366
-
367
294
  if (range.startIndex !== this.range.startIndex || range.endIndex !== this.range.endIndex) {
368
295
  this.range = range;
369
296
  this.notify();
370
297
  }
371
-
372
298
  return this.range;
373
299
  }, {
374
300
  key: process.env.NODE_ENV !== 'production' && 'calculateRange',
375
301
  debug: () => this.options.debug
376
302
  });
377
303
  this.getIndexes = memo(() => [this.options.rangeExtractor, this.range, this.options.overscan, this.options.count], (rangeExtractor, range, overscan, count) => {
378
- return rangeExtractor({ ...range,
304
+ return rangeExtractor({
305
+ ...range,
379
306
  overscan,
380
307
  count: count
381
308
  });
@@ -383,109 +310,84 @@ class Virtualizer {
383
310
  key: process.env.NODE_ENV !== 'production' && 'getIndexes',
384
311
  debug: () => this.options.debug
385
312
  });
386
-
387
313
  this.indexFromElement = node => {
388
314
  const attributeName = this.options.indexAttribute;
389
315
  const indexStr = node.getAttribute(attributeName);
390
-
391
316
  if (!indexStr) {
392
- console.warn("Missing attribute name '" + attributeName + "={index}' on measured element.");
317
+ console.warn(`Missing attribute name '${attributeName}={index}' on measured element.`);
393
318
  return -1;
394
319
  }
395
-
396
320
  return parseInt(indexStr, 10);
397
321
  };
398
-
399
322
  this._measureElement = (node, _sync) => {
400
- var _this$itemMeasurement;
401
-
402
323
  const index = this.indexFromElement(node);
403
324
  const item = this.measurementsCache[index];
404
-
405
325
  if (!item) {
406
326
  return;
407
327
  }
408
-
409
328
  const prevNode = this.measureElementCache[item.key];
410
329
  const ro = this.getResizeObserver();
411
-
412
330
  if (!node.isConnected) {
413
331
  if (prevNode) {
414
332
  ro == null ? void 0 : ro.unobserve(prevNode);
415
333
  delete this.measureElementCache[item.key];
416
334
  }
417
-
418
335
  return;
419
336
  }
420
-
421
337
  if (!prevNode || prevNode !== node) {
422
338
  if (prevNode) {
423
339
  ro == null ? void 0 : ro.unobserve(prevNode);
424
340
  }
425
-
426
341
  this.measureElementCache[item.key] = node;
427
342
  ro == null ? void 0 : ro.observe(node);
428
343
  }
429
-
430
344
  const measuredItemSize = this.options.measureElement(node, this);
431
- const itemSize = (_this$itemMeasurement = this.itemMeasurementsCache[item.key]) != null ? _this$itemMeasurement : item.size;
345
+ const itemSize = this.itemMeasurementsCache[item.key] ?? item.size;
432
346
  const delta = measuredItemSize - itemSize;
433
-
434
347
  if (delta !== 0) {
435
- if (item.start < this.scrollOffset && this.isScrolling && this.destinationOffset === undefined) {
348
+ if (item.start < this.scrollOffset && this.isScrolling) {
436
349
  if (process.env.NODE_ENV !== 'production' && this.options.debug) {
437
350
  console.info('correction', delta);
438
351
  }
439
-
440
- this.scrollDelta += delta;
441
-
442
- this._scrollToOffset(this.scrollOffset + this.scrollDelta, {
443
- canSmooth: false,
444
- sync: false,
445
- requested: false
352
+ this._scrollToOffset(this.scrollOffset, {
353
+ adjustments: this.scrollAdjustments += delta,
354
+ behavior: undefined,
355
+ sync: false
446
356
  });
447
357
  }
448
-
449
358
  this.pendingMeasuredCacheIndexes.push(index);
450
- this.itemMeasurementsCache = { ...this.itemMeasurementsCache,
359
+ this.itemMeasurementsCache = {
360
+ ...this.itemMeasurementsCache,
451
361
  [item.key]: measuredItemSize
452
362
  };
453
363
  this.notify();
454
364
  }
455
365
  };
456
-
457
366
  this.measureElement = node => {
458
367
  if (!node) {
459
368
  return;
460
369
  }
461
-
462
370
  this._measureElement(node, true);
463
371
  };
464
-
465
372
  this.getVirtualItems = memo(() => [this.getIndexes(), this.getMeasurements()], (indexes, measurements) => {
466
373
  const virtualItems = [];
467
-
468
374
  for (let k = 0, len = indexes.length; k < len; k++) {
469
375
  const i = indexes[k];
470
376
  const measurement = measurements[i];
471
377
  virtualItems.push(measurement);
472
378
  }
473
-
474
379
  return virtualItems;
475
380
  }, {
476
381
  key: process.env.NODE_ENV !== 'production' && 'getIndexes',
477
382
  debug: () => this.options.debug
478
383
  });
479
-
480
384
  this.scrollToOffset = function (toOffset, _temp) {
481
385
  let {
482
386
  align = 'start',
483
- smoothScroll = _this.options.enableSmoothScroll
387
+ behavior
484
388
  } = _temp === void 0 ? {} : _temp;
485
389
  const offset = _this.scrollOffset;
486
-
487
390
  const size = _this.getSize();
488
-
489
391
  if (align === 'auto') {
490
392
  if (toOffset <= offset) {
491
393
  align = 'start';
@@ -495,13 +397,11 @@ class Virtualizer {
495
397
  align = 'start';
496
398
  }
497
399
  }
498
-
499
400
  const options = {
500
- canSmooth: smoothScroll,
501
- sync: false,
502
- requested: true
401
+ adjustments: undefined,
402
+ behavior,
403
+ sync: false
503
404
  };
504
-
505
405
  if (align === 'start') {
506
406
  _this._scrollToOffset(toOffset, options);
507
407
  } else if (align === 'end') {
@@ -510,29 +410,22 @@ class Virtualizer {
510
410
  _this._scrollToOffset(toOffset - size / 2, options);
511
411
  }
512
412
  };
513
-
514
413
  this.scrollToIndex = function (index, _temp2) {
515
414
  let {
516
415
  align = 'auto',
517
- smoothScroll = _this.options.enableSmoothScroll,
518
416
  ...rest
519
417
  } = _temp2 === void 0 ? {} : _temp2;
520
-
418
+ _this.pendingScrollToIndexCallback = null;
521
419
  const measurements = _this.getMeasurements();
522
-
523
420
  const offset = _this.scrollOffset;
524
-
525
421
  const size = _this.getSize();
526
-
527
422
  const {
528
423
  count
529
424
  } = _this.options;
530
425
  const measurement = measurements[Math.max(0, Math.min(index, count - 1))];
531
-
532
426
  if (!measurement) {
533
427
  return;
534
428
  }
535
-
536
429
  if (align === 'auto') {
537
430
  if (measurement.end >= offset + size - _this.options.scrollPaddingEnd) {
538
431
  align = 'end';
@@ -542,78 +435,57 @@ class Virtualizer {
542
435
  return;
543
436
  }
544
437
  }
545
-
546
438
  const toOffset = align === 'end' ? measurement.end + _this.options.scrollPaddingEnd : measurement.start - _this.options.scrollPaddingStart;
547
-
548
439
  _this.scrollToOffset(toOffset, {
549
440
  align,
550
- smoothScroll,
551
441
  ...rest
552
442
  });
443
+ const isDynamic = Object.keys(_this.measureElementCache).length > 0;
444
+ if (isDynamic) {
445
+ const didSeen = () => typeof _this.itemMeasurementsCache[_this.options.getItemKey(index)] === 'number';
446
+ if (!didSeen()) {
447
+ _this.pendingScrollToIndexCallback = () => {
448
+ if (didSeen()) {
449
+ _this.pendingScrollToIndexCallback = null;
450
+ _this.scrollToIndex(index, {
451
+ align,
452
+ ...rest
453
+ });
454
+ }
455
+ };
456
+ }
457
+ }
553
458
  };
554
-
555
459
  this.getTotalSize = () => {
556
460
  var _this$getMeasurements;
557
-
558
461
  return (((_this$getMeasurements = this.getMeasurements()[this.options.count - 1]) == null ? void 0 : _this$getMeasurements.end) || this.options.paddingStart) + this.options.paddingEnd;
559
462
  };
560
-
561
463
  this._scrollToOffset = (offset, _ref4) => {
562
464
  let {
563
- requested,
564
- canSmooth,
465
+ adjustments,
466
+ behavior,
565
467
  sync
566
468
  } = _ref4;
567
- clearTimeout(this.scrollCheckFrame);
568
-
569
- if (requested) {
570
- this.destinationOffset = offset;
571
- }
572
-
573
469
  this.options.scrollToFn(offset, {
574
- canSmooth,
575
- sync
470
+ behavior,
471
+ sync,
472
+ adjustments
576
473
  }, this);
577
- let scrollCheckFrame;
578
-
579
- const check = () => {
580
- let lastOffset = this.scrollOffset;
581
- this.scrollCheckFrame = scrollCheckFrame = setTimeout(() => {
582
- if (this.scrollCheckFrame !== scrollCheckFrame) {
583
- return;
584
- }
585
-
586
- if (this.scrollOffset === lastOffset) {
587
- this.destinationOffset = undefined;
588
- return;
589
- }
590
-
591
- lastOffset = this.scrollOffset;
592
- check();
593
- }, 100);
594
- };
595
-
596
- check();
597
474
  };
598
-
599
475
  this.measure = () => {
600
476
  this.itemMeasurementsCache = {};
601
477
  this.notify();
602
478
  };
603
-
604
479
  this.setOptions(_opts);
605
480
  this.scrollRect = this.options.initialRect;
606
481
  this.scrollOffset = this.options.initialOffset;
607
482
  this.calculateRange();
608
483
  }
609
-
610
484
  }
611
-
612
485
  const findNearestBinarySearch = (low, high, getCurrentValue, value) => {
613
486
  while (low <= high) {
614
487
  const middle = (low + high) / 2 | 0;
615
488
  const currentValue = getCurrentValue(middle);
616
-
617
489
  if (currentValue < value) {
618
490
  low = middle + 1;
619
491
  } else if (currentValue > value) {
@@ -622,14 +494,12 @@ const findNearestBinarySearch = (low, high, getCurrentValue, value) => {
622
494
  return middle;
623
495
  }
624
496
  }
625
-
626
497
  if (low > 0) {
627
498
  return low - 1;
628
499
  } else {
629
500
  return 0;
630
501
  }
631
502
  };
632
-
633
503
  function calculateRange(_ref5) {
634
504
  let {
635
505
  measurements,
@@ -637,21 +507,17 @@ function calculateRange(_ref5) {
637
507
  scrollOffset
638
508
  } = _ref5;
639
509
  const count = measurements.length - 1;
640
-
641
510
  const getOffset = index => measurements[index].start;
642
-
643
511
  const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset);
644
512
  let endIndex = startIndex;
645
-
646
513
  while (endIndex < count && measurements[endIndex].end < scrollOffset + outerSize) {
647
514
  endIndex++;
648
515
  }
649
-
650
516
  return {
651
517
  startIndex,
652
518
  endIndex
653
519
  };
654
520
  }
655
521
 
656
- export { Virtualizer, defaultKeyExtractor, defaultRangeExtractor, elementScroll, measureElement, memo, observeElementOffset, observeElementRect, observeWindowOffset, observeWindowRect, windowScroll };
657
- //# sourceMappingURL=index.js.map
522
+ export { Virtualizer, defaultKeyExtractor, defaultRangeExtractor, elementScroll, measureElement, observeElementOffset, observeElementRect, observeWindowOffset, observeWindowRect, windowScroll };
523
+ //# sourceMappingURL=index.esm.js.map