material-react-table 0.20.0 → 0.21.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -6365,28 +6365,40 @@ var MRT_TableHead = function MRT_TableHead(_ref) {
6365
6365
  }));
6366
6366
  };
6367
6367
 
6368
- /**
6369
- * react-virtual
6370
- *
6371
- * Copyright (c) TanStack
6372
- *
6373
- * This source code is licensed under the MIT license found in the
6374
- * LICENSE.md file in the root directory of this source tree.
6375
- *
6376
- * @license MIT
6377
- */
6368
+ function _extends$1() {
6369
+ _extends$1 = Object.assign || function (target) {
6370
+ for (var i = 1; i < arguments.length; i++) {
6371
+ var source = arguments[i];
6378
6372
 
6379
- /**
6380
- * virtual-core
6381
- *
6382
- * Copyright (c) TanStack
6383
- *
6384
- * This source code is licensed under the MIT license found in the
6385
- * LICENSE.md file in the root directory of this source tree.
6386
- *
6387
- * @license MIT
6388
- */
6389
- var props = ["bottom", "height", "left", "right", "top", "width"];
6373
+ for (var key in source) {
6374
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
6375
+ target[key] = source[key];
6376
+ }
6377
+ }
6378
+ }
6379
+
6380
+ return target;
6381
+ };
6382
+
6383
+ return _extends$1.apply(this, arguments);
6384
+ }
6385
+
6386
+ function _objectWithoutPropertiesLoose$2(source, excluded) {
6387
+ if (source == null) return {};
6388
+ var target = {};
6389
+ var sourceKeys = Object.keys(source);
6390
+ var key, i;
6391
+
6392
+ for (i = 0; i < sourceKeys.length; i++) {
6393
+ key = sourceKeys[i];
6394
+ if (excluded.indexOf(key) >= 0) continue;
6395
+ target[key] = source[key];
6396
+ }
6397
+
6398
+ return target;
6399
+ }
6400
+
6401
+ var props = ['bottom', 'height', 'left', 'right', 'top', 'width'];
6390
6402
 
6391
6403
  var rectChanged = function rectChanged(a, b) {
6392
6404
  if (a === void 0) {
@@ -6456,383 +6468,355 @@ function observeRect(node, cb) {
6456
6468
  };
6457
6469
  }
6458
6470
 
6459
- function memo(getDeps, fn, opts) {
6460
- let deps = [];
6461
- let result;
6462
- return () => {
6463
- let depTime;
6464
- if (opts.key && opts.debug != null && opts.debug()) depTime = Date.now();
6465
- const newDeps = getDeps();
6466
- const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);
6471
+ var useIsomorphicLayoutEffect$1 = typeof window !== 'undefined' ? React__default.useLayoutEffect : React__default.useEffect;
6467
6472
 
6468
- if (!depsChanged) {
6469
- return result;
6470
- }
6471
-
6472
- deps = newDeps;
6473
- let resultTime;
6474
- if (opts.key && opts.debug != null && opts.debug()) resultTime = Date.now();
6475
- result = fn(...newDeps);
6476
- opts == null ? void 0 : opts.onChange == null ? void 0 : opts.onChange(result);
6473
+ function useRect(nodeRef, initialRect) {
6474
+ if (initialRect === void 0) {
6475
+ initialRect = {
6476
+ width: 0,
6477
+ height: 0
6478
+ };
6479
+ }
6477
6480
 
6478
- if (opts.key && opts.debug != null && opts.debug()) {
6479
- const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;
6480
- const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;
6481
- const resultFpsPercentage = resultEndTime / 16;
6481
+ var _React$useState = React__default.useState(nodeRef.current),
6482
+ element = _React$useState[0],
6483
+ setElement = _React$useState[1];
6482
6484
 
6483
- const pad = (str, num) => {
6484
- str = String(str);
6485
+ var _React$useReducer = React__default.useReducer(rectReducer, initialRect),
6486
+ rect = _React$useReducer[0],
6487
+ dispatch = _React$useReducer[1];
6485
6488
 
6486
- while (str.length < num) {
6487
- str = ' ' + str;
6488
- }
6489
+ var initialRectSet = React__default.useRef(false);
6490
+ useIsomorphicLayoutEffect$1(function () {
6491
+ if (nodeRef.current !== element) {
6492
+ setElement(nodeRef.current);
6493
+ }
6494
+ });
6495
+ useIsomorphicLayoutEffect$1(function () {
6496
+ if (element && !initialRectSet.current) {
6497
+ initialRectSet.current = true;
6489
6498
 
6490
- return str;
6491
- };
6499
+ var _rect = element.getBoundingClientRect();
6492
6500
 
6493
- 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);
6501
+ dispatch({
6502
+ rect: _rect
6503
+ });
6504
+ }
6505
+ }, [element]);
6506
+ React__default.useEffect(function () {
6507
+ if (!element) {
6508
+ return;
6494
6509
  }
6495
6510
 
6496
- return result;
6497
- };
6511
+ var observer = observeRect(element, function (rect) {
6512
+ dispatch({
6513
+ rect: rect
6514
+ });
6515
+ });
6516
+ observer.observe();
6517
+ return function () {
6518
+ observer.unobserve();
6519
+ };
6520
+ }, [element]);
6521
+ return rect;
6498
6522
  }
6499
6523
 
6500
- //
6501
- const defaultKeyExtractor = index => index;
6502
- const defaultRangeExtractor = range => {
6503
- const start = Math.max(range.startIndex - range.overscan, 0);
6504
- const end = Math.min(range.endIndex + range.overscan, range.count - 1);
6505
- const arr = [];
6524
+ function rectReducer(state, action) {
6525
+ var rect = action.rect;
6506
6526
 
6507
- for (let i = start; i <= end; i++) {
6508
- arr.push(i);
6527
+ if (state.height !== rect.height || state.width !== rect.width) {
6528
+ return rect;
6509
6529
  }
6510
6530
 
6511
- return arr;
6531
+ return state;
6532
+ }
6533
+
6534
+ var defaultEstimateSize = function defaultEstimateSize() {
6535
+ return 50;
6512
6536
  };
6513
- const observeElementRect = (instance, cb) => {
6514
- const observer = observeRect(instance.scrollElement, rect => {
6515
- cb(rect);
6516
- });
6517
6537
 
6518
- if (!instance.scrollElement) {
6519
- return;
6520
- }
6538
+ var defaultKeyExtractor = function defaultKeyExtractor(index) {
6539
+ return index;
6540
+ };
6521
6541
 
6522
- cb(instance.scrollElement.getBoundingClientRect());
6523
- observer.observe();
6524
- return () => {
6525
- observer.unobserve();
6526
- };
6542
+ var defaultMeasureSize = function defaultMeasureSize(el, horizontal) {
6543
+ var key = horizontal ? 'offsetWidth' : 'offsetHeight';
6544
+ return el[key];
6527
6545
  };
6528
- const observeElementOffset = (instance, cb) => {
6529
- const onScroll = () => cb(instance.scrollElement[instance.options.horizontal ? 'scrollLeft' : 'scrollTop']);
6530
6546
 
6531
- if (!instance.scrollElement) {
6532
- return;
6547
+ var defaultRangeExtractor = function defaultRangeExtractor(range) {
6548
+ var start = Math.max(range.start - range.overscan, 0);
6549
+ var end = Math.min(range.end + range.overscan, range.size - 1);
6550
+ var arr = [];
6551
+
6552
+ for (var i = start; i <= end; i++) {
6553
+ arr.push(i);
6533
6554
  }
6534
6555
 
6535
- onScroll();
6536
- instance.scrollElement.addEventListener('scroll', onScroll, {
6537
- capture: false,
6538
- passive: true
6539
- });
6540
- return () => {
6541
- instance.scrollElement.removeEventListener('scroll', onScroll);
6542
- };
6543
- };
6544
- const measureElement = (element, instance) => {
6545
- return element.getBoundingClientRect()[instance.options.horizontal ? 'width' : 'height'];
6556
+ return arr;
6546
6557
  };
6547
- const elementScroll = (offset, canSmooth, instance) => {
6548
- var _instance$scrollEleme2;
6549
- (_instance$scrollEleme2 = instance.scrollElement) == null ? void 0 : _instance$scrollEleme2.scrollTo({
6550
- [instance.options.horizontal ? 'left' : 'top']: offset,
6551
- behavior: canSmooth ? 'smooth' : undefined
6558
+ function useVirtual(_ref) {
6559
+ var _measurements;
6560
+
6561
+ var _ref$size = _ref.size,
6562
+ size = _ref$size === void 0 ? 0 : _ref$size,
6563
+ _ref$estimateSize = _ref.estimateSize,
6564
+ estimateSize = _ref$estimateSize === void 0 ? defaultEstimateSize : _ref$estimateSize,
6565
+ _ref$overscan = _ref.overscan,
6566
+ overscan = _ref$overscan === void 0 ? 1 : _ref$overscan,
6567
+ _ref$paddingStart = _ref.paddingStart,
6568
+ paddingStart = _ref$paddingStart === void 0 ? 0 : _ref$paddingStart,
6569
+ _ref$paddingEnd = _ref.paddingEnd,
6570
+ paddingEnd = _ref$paddingEnd === void 0 ? 0 : _ref$paddingEnd,
6571
+ parentRef = _ref.parentRef,
6572
+ horizontal = _ref.horizontal,
6573
+ scrollToFn = _ref.scrollToFn,
6574
+ useObserver = _ref.useObserver,
6575
+ initialRect = _ref.initialRect,
6576
+ onScrollElement = _ref.onScrollElement,
6577
+ scrollOffsetFn = _ref.scrollOffsetFn,
6578
+ _ref$keyExtractor = _ref.keyExtractor,
6579
+ keyExtractor = _ref$keyExtractor === void 0 ? defaultKeyExtractor : _ref$keyExtractor,
6580
+ _ref$measureSize = _ref.measureSize,
6581
+ measureSize = _ref$measureSize === void 0 ? defaultMeasureSize : _ref$measureSize,
6582
+ _ref$rangeExtractor = _ref.rangeExtractor,
6583
+ rangeExtractor = _ref$rangeExtractor === void 0 ? defaultRangeExtractor : _ref$rangeExtractor;
6584
+ var sizeKey = horizontal ? 'width' : 'height';
6585
+ var scrollKey = horizontal ? 'scrollLeft' : 'scrollTop';
6586
+ var latestRef = React__default.useRef({
6587
+ scrollOffset: 0,
6588
+ measurements: []
6552
6589
  });
6553
- };
6554
- class Virtualizer {
6555
- constructor(_opts) {
6556
- var _this = this;
6557
-
6558
- this.unsubs = [];
6559
- this.scrollElement = null;
6560
- this.measurementsCache = [];
6561
- this.itemMeasurementsCache = {};
6562
- this.pendingMeasuredCacheIndexes = [];
6563
-
6564
- this.setOptions = opts => {
6565
- Object.entries(opts).forEach(_ref => {
6566
- let [key, value] = _ref;
6567
- if (typeof value === 'undefined') delete opts[key];
6568
- });
6569
- this.options = {
6570
- debug: false,
6571
- initialOffset: 0,
6572
- overscan: 1,
6573
- paddingStart: 0,
6574
- paddingEnd: 0,
6575
- scrollPaddingStart: 0,
6576
- scrollPaddingEnd: 0,
6577
- horizontal: false,
6578
- getItemKey: defaultKeyExtractor,
6579
- rangeExtractor: defaultRangeExtractor,
6580
- enableSmoothScroll: true,
6581
- onChange: () => {},
6582
- measureElement,
6583
- initialRect: {
6584
- width: 0,
6585
- height: 0
6586
- },
6587
- ...opts
6588
- };
6589
- };
6590
6590
 
6591
- this.notify = () => {
6592
- var _this$options$onChang, _this$options;
6591
+ var _React$useState = React__default.useState(0),
6592
+ scrollOffset = _React$useState[0],
6593
+ setScrollOffset = _React$useState[1];
6593
6594
 
6594
- (_this$options$onChang = (_this$options = this.options).onChange) == null ? void 0 : _this$options$onChang.call(_this$options, this);
6595
- };
6595
+ latestRef.current.scrollOffset = scrollOffset;
6596
+ var useMeasureParent = useObserver || useRect;
6596
6597
 
6597
- this.cleanup = () => {
6598
- this.unsubs.filter(Boolean).forEach(d => d());
6599
- this.unsubs = [];
6600
- };
6598
+ var _useMeasureParent = useMeasureParent(parentRef, initialRect),
6599
+ outerSize = _useMeasureParent[sizeKey];
6601
6600
 
6602
- this._didMount = () => {
6603
- return () => {
6604
- this.cleanup();
6605
- };
6606
- };
6601
+ latestRef.current.outerSize = outerSize;
6602
+ var defaultScrollToFn = React__default.useCallback(function (offset) {
6603
+ if (parentRef.current) {
6604
+ parentRef.current[scrollKey] = offset;
6605
+ }
6606
+ }, [parentRef, scrollKey]);
6607
+ var resolvedScrollToFn = scrollToFn || defaultScrollToFn;
6608
+ scrollToFn = React__default.useCallback(function (offset) {
6609
+ resolvedScrollToFn(offset, defaultScrollToFn);
6610
+ }, [defaultScrollToFn, resolvedScrollToFn]);
6607
6611
 
6608
- this._willUpdate = () => {
6609
- const scrollElement = this.options.getScrollElement();
6610
-
6611
- if (this.scrollElement !== scrollElement) {
6612
- this.cleanup();
6613
- this.scrollElement = scrollElement;
6614
- this.unsubs.push(this.options.observeElementRect(this, rect => {
6615
- this.scrollRect = rect;
6616
- this.notify();
6617
- }));
6618
- this.unsubs.push(this.options.observeElementOffset(this, offset => {
6619
- this.scrollOffset = offset;
6620
- this.notify();
6621
- }));
6622
- }
6623
- };
6612
+ var _React$useState2 = React__default.useState({}),
6613
+ measuredCache = _React$useState2[0],
6614
+ setMeasuredCache = _React$useState2[1];
6624
6615
 
6625
- this.getSize = () => {
6626
- return this.scrollRect[this.options.horizontal ? 'width' : 'height'];
6627
- };
6628
-
6629
- this.getMeasurements = memo(() => [this.options.count, this.options.paddingStart, this.options.getItemKey, this.itemMeasurementsCache], (count, paddingStart, getItemKey, measurementsCache) => {
6630
- const min = this.pendingMeasuredCacheIndexes.length > 0 ? Math.min(...this.pendingMeasuredCacheIndexes) : 0;
6631
- this.pendingMeasuredCacheIndexes = [];
6632
- const measurements = this.measurementsCache.slice(0, min);
6633
-
6634
- for (let i = min; i < count; i++) {
6635
- const key = getItemKey(i);
6636
- const measuredSize = measurementsCache[key];
6637
- const start = measurements[i - 1] ? measurements[i - 1].end : paddingStart;
6638
- const size = typeof measuredSize === 'number' ? measuredSize : this.options.estimateSize(i);
6639
- const end = start + size;
6640
- measurements[i] = {
6641
- index: i,
6642
- start,
6643
- size,
6644
- end,
6645
- key
6646
- };
6647
- }
6616
+ var measure = React__default.useCallback(function () {
6617
+ return setMeasuredCache({});
6618
+ }, []);
6619
+ var pendingMeasuredCacheIndexesRef = React__default.useRef([]);
6620
+ var measurements = React__default.useMemo(function () {
6621
+ var min = pendingMeasuredCacheIndexesRef.current.length > 0 ? Math.min.apply(Math, pendingMeasuredCacheIndexesRef.current) : 0;
6622
+ pendingMeasuredCacheIndexesRef.current = [];
6623
+ var measurements = latestRef.current.measurements.slice(0, min);
6648
6624
 
6649
- this.measurementsCache = measurements;
6650
- return measurements;
6651
- }, {
6652
- key: 'getMeasurements',
6653
- debug: () => this.options.debug
6654
- });
6655
- this.calculateRange = memo(() => [this.getMeasurements(), this.getSize(), this.scrollOffset], (measurements, outerSize, scrollOffset) => {
6656
- return calculateRange({
6657
- measurements,
6658
- outerSize,
6659
- scrollOffset
6660
- });
6661
- }, {
6662
- key: 'calculateRange',
6663
- debug: () => this.options.debug
6664
- });
6665
- this.getIndexes = memo(() => [this.options.rangeExtractor, this.calculateRange(), this.options.overscan, this.options.count], (rangeExtractor, range, overscan, count) => {
6666
- return rangeExtractor({ ...range,
6667
- overscan,
6668
- count: count
6669
- });
6670
- }, {
6671
- key: 'getIndexes'
6672
- });
6673
- this.getVirtualItems = memo(() => [this.getIndexes(), this.getMeasurements(), this.options.measureElement], (indexes, measurements, measureElement) => {
6674
- const virtualItems = [];
6675
-
6676
- for (let k = 0, len = indexes.length; k < len; k++) {
6677
- const i = indexes[k];
6678
- const measurement = measurements[i];
6679
- const item = { ...measurement,
6680
- measureElement: measurableItem => {
6681
- if (measurableItem) {
6682
- const measuredItemSize = measureElement(measurableItem, this);
6683
-
6684
- if (measuredItemSize !== item.size) {
6685
- if (item.start < this.scrollOffset) {
6686
- if ( this.options.debug) console.info('correction', measuredItemSize - item.size);
6687
-
6688
- if (!this.destinationOffset) {
6689
- this._scrollToOffset(this.scrollOffset + (measuredItemSize - item.size), false);
6690
- }
6691
- }
6625
+ for (var i = min; i < size; i++) {
6626
+ var key = keyExtractor(i);
6627
+ var measuredSize = measuredCache[key];
6692
6628
 
6693
- this.pendingMeasuredCacheIndexes.push(i);
6694
- this.itemMeasurementsCache = { ...this.itemMeasurementsCache,
6695
- [item.key]: measuredItemSize
6696
- };
6697
- this.notify();
6698
- }
6699
- }
6700
- }
6701
- };
6702
- virtualItems.push(item);
6703
- }
6629
+ var _start = measurements[i - 1] ? measurements[i - 1].end : paddingStart;
6704
6630
 
6705
- return virtualItems;
6706
- }, {
6707
- key: 'getIndexes'
6708
- });
6631
+ var _size = typeof measuredSize === 'number' ? measuredSize : estimateSize(i);
6709
6632
 
6710
- this.scrollToOffset = function (toOffset, _temp) {
6711
- let {
6712
- align
6713
- } = _temp === void 0 ? {
6714
- align: 'start'
6715
- } : _temp;
6716
-
6717
- const attempt = () => {
6718
- const offset = _this.scrollOffset;
6719
-
6720
- const size = _this.getSize();
6721
-
6722
- if (align === 'auto') {
6723
- if (toOffset <= offset) {
6724
- align = 'start';
6725
- } else if (toOffset >= offset + size) {
6726
- align = 'end';
6727
- } else {
6728
- align = 'start';
6729
- }
6730
- }
6633
+ var _end = _start + _size;
6731
6634
 
6732
- if (align === 'start') {
6733
- _this._scrollToOffset(toOffset, true);
6734
- } else if (align === 'end') {
6735
- _this._scrollToOffset(toOffset - size, true);
6736
- } else if (align === 'center') {
6737
- _this._scrollToOffset(toOffset - size / 2, true);
6738
- }
6635
+ measurements[i] = {
6636
+ index: i,
6637
+ start: _start,
6638
+ size: _size,
6639
+ end: _end,
6640
+ key: key
6739
6641
  };
6642
+ }
6740
6643
 
6741
- attempt();
6742
- requestAnimationFrame(() => {
6743
- attempt();
6744
- });
6745
- };
6746
-
6747
- this.scrollToIndex = function (index, _temp2) {
6748
- let {
6749
- align,
6750
- ...rest
6751
- } = _temp2 === void 0 ? {
6752
- align: 'auto'
6753
- } : _temp2;
6754
-
6755
- const measurements = _this.getMeasurements();
6756
-
6757
- const offset = _this.scrollOffset;
6644
+ return measurements;
6645
+ }, [estimateSize, measuredCache, paddingStart, size, keyExtractor]);
6646
+ var totalSize = (((_measurements = measurements[size - 1]) == null ? void 0 : _measurements.end) || paddingStart) + paddingEnd;
6647
+ latestRef.current.measurements = measurements;
6648
+ latestRef.current.totalSize = totalSize;
6649
+ var element = onScrollElement ? onScrollElement.current : parentRef.current;
6650
+ var scrollOffsetFnRef = React__default.useRef(scrollOffsetFn);
6651
+ scrollOffsetFnRef.current = scrollOffsetFn;
6652
+ useIsomorphicLayoutEffect$1(function () {
6653
+ if (!element) {
6654
+ setScrollOffset(0);
6655
+ return;
6656
+ }
6758
6657
 
6759
- const size = _this.getSize();
6658
+ var onScroll = function onScroll(event) {
6659
+ var offset = scrollOffsetFnRef.current ? scrollOffsetFnRef.current(event) : element[scrollKey];
6660
+ setScrollOffset(offset);
6661
+ };
6760
6662
 
6761
- const {
6762
- count
6763
- } = _this.options;
6764
- const measurement = measurements[Math.max(0, Math.min(index, count - 1))];
6663
+ onScroll();
6664
+ element.addEventListener('scroll', onScroll, {
6665
+ capture: false,
6666
+ passive: true
6667
+ });
6668
+ return function () {
6669
+ element.removeEventListener('scroll', onScroll);
6670
+ };
6671
+ }, [element, scrollKey]);
6672
+
6673
+ var _calculateRange = calculateRange(latestRef.current),
6674
+ start = _calculateRange.start,
6675
+ end = _calculateRange.end;
6676
+
6677
+ var indexes = React__default.useMemo(function () {
6678
+ return rangeExtractor({
6679
+ start: start,
6680
+ end: end,
6681
+ overscan: overscan,
6682
+ size: measurements.length
6683
+ });
6684
+ }, [start, end, overscan, measurements.length, rangeExtractor]);
6685
+ var measureSizeRef = React__default.useRef(measureSize);
6686
+ measureSizeRef.current = measureSize;
6687
+ var virtualItems = React__default.useMemo(function () {
6688
+ var virtualItems = [];
6689
+
6690
+ var _loop = function _loop(k, len) {
6691
+ var i = indexes[k];
6692
+ var measurement = measurements[i];
6693
+
6694
+ var item = _extends$1(_extends$1({}, measurement), {}, {
6695
+ measureRef: function measureRef(el) {
6696
+ if (el) {
6697
+ var measuredSize = measureSizeRef.current(el, horizontal);
6698
+
6699
+ if (measuredSize !== item.size) {
6700
+ var _scrollOffset = latestRef.current.scrollOffset;
6701
+
6702
+ if (item.start < _scrollOffset) {
6703
+ defaultScrollToFn(_scrollOffset + (measuredSize - item.size));
6704
+ }
6765
6705
 
6766
- if (!measurement) {
6767
- return;
6768
- }
6706
+ pendingMeasuredCacheIndexesRef.current.push(i);
6707
+ setMeasuredCache(function (old) {
6708
+ var _extends2;
6769
6709
 
6770
- if (align === 'auto') {
6771
- if (measurement.end >= offset + size - _this.options.scrollPaddingEnd) {
6772
- align = 'end';
6773
- } else if (measurement.start <= offset + _this.options.scrollPaddingStart) {
6774
- align = 'start';
6775
- } else {
6776
- return;
6710
+ return _extends$1(_extends$1({}, old), {}, (_extends2 = {}, _extends2[item.key] = measuredSize, _extends2));
6711
+ });
6712
+ }
6713
+ }
6777
6714
  }
6778
- }
6779
-
6780
- const toOffset = align === 'end' ? measurement.end + _this.options.scrollPaddingEnd : measurement.start - _this.options.scrollPaddingStart;
6781
-
6782
- _this.scrollToOffset(toOffset, {
6783
- align,
6784
- ...rest
6785
6715
  });
6716
+
6717
+ virtualItems.push(item);
6786
6718
  };
6787
6719
 
6788
- this.getTotalSize = () => {
6789
- var _this$getMeasurements;
6720
+ for (var k = 0, len = indexes.length; k < len; k++) {
6721
+ _loop(k);
6722
+ }
6790
6723
 
6791
- return (((_this$getMeasurements = this.getMeasurements()[this.options.count - 1]) == null ? void 0 : _this$getMeasurements.end) || this.options.paddingStart) + this.options.paddingEnd;
6792
- };
6724
+ return virtualItems;
6725
+ }, [indexes, defaultScrollToFn, horizontal, measurements]);
6726
+ var mountedRef = React__default.useRef(false);
6727
+ useIsomorphicLayoutEffect$1(function () {
6728
+ if (mountedRef.current) {
6729
+ setMeasuredCache({});
6730
+ }
6793
6731
 
6794
- this._scrollToOffset = (offset, canSmooth) => {
6795
- clearTimeout(this.scrollCheckFrame);
6796
- this.destinationOffset = offset;
6797
- this.options.scrollToFn(offset, this.options.enableSmoothScroll && canSmooth, this);
6798
- let scrollCheckFrame;
6732
+ mountedRef.current = true;
6733
+ }, [estimateSize]);
6734
+ var scrollToOffset = React__default.useCallback(function (toOffset, _temp) {
6735
+ var _ref2 = _temp === void 0 ? {} : _temp,
6736
+ _ref2$align = _ref2.align,
6737
+ align = _ref2$align === void 0 ? 'start' : _ref2$align;
6799
6738
 
6800
- const check = () => {
6801
- let lastOffset = this.scrollOffset;
6802
- this.scrollCheckFrame = scrollCheckFrame = setTimeout(() => {
6803
- if (this.scrollCheckFrame !== scrollCheckFrame) {
6804
- return;
6805
- }
6739
+ var _latestRef$current = latestRef.current,
6740
+ scrollOffset = _latestRef$current.scrollOffset,
6741
+ outerSize = _latestRef$current.outerSize;
6806
6742
 
6807
- if (this.scrollOffset === lastOffset) {
6808
- this.destinationOffset = undefined;
6809
- return;
6810
- }
6743
+ if (align === 'auto') {
6744
+ if (toOffset <= scrollOffset) {
6745
+ align = 'start';
6746
+ } else if (toOffset >= scrollOffset + outerSize) {
6747
+ align = 'end';
6748
+ } else {
6749
+ align = 'start';
6750
+ }
6751
+ }
6811
6752
 
6812
- lastOffset = this.scrollOffset;
6813
- check();
6814
- }, 100);
6815
- };
6753
+ if (align === 'start') {
6754
+ scrollToFn(toOffset);
6755
+ } else if (align === 'end') {
6756
+ scrollToFn(toOffset - outerSize);
6757
+ } else if (align === 'center') {
6758
+ scrollToFn(toOffset - outerSize / 2);
6759
+ }
6760
+ }, [scrollToFn]);
6761
+ var tryScrollToIndex = React__default.useCallback(function (index, _temp2) {
6762
+ var _ref3 = _temp2 === void 0 ? {} : _temp2,
6763
+ _ref3$align = _ref3.align,
6764
+ align = _ref3$align === void 0 ? 'auto' : _ref3$align,
6765
+ rest = _objectWithoutPropertiesLoose$2(_ref3, ["align"]);
6816
6766
 
6817
- check();
6818
- };
6767
+ var _latestRef$current2 = latestRef.current,
6768
+ measurements = _latestRef$current2.measurements,
6769
+ scrollOffset = _latestRef$current2.scrollOffset,
6770
+ outerSize = _latestRef$current2.outerSize;
6771
+ var measurement = measurements[Math.max(0, Math.min(index, size - 1))];
6819
6772
 
6820
- this.measure = () => {
6821
- this.itemMeasurementsCache = {};
6822
- this.notify();
6823
- };
6773
+ if (!measurement) {
6774
+ return;
6775
+ }
6824
6776
 
6825
- this.setOptions(_opts);
6826
- this.scrollRect = this.options.initialRect;
6827
- this.scrollOffset = this.options.initialOffset;
6828
- }
6777
+ if (align === 'auto') {
6778
+ if (measurement.end >= scrollOffset + outerSize) {
6779
+ align = 'end';
6780
+ } else if (measurement.start <= scrollOffset) {
6781
+ align = 'start';
6782
+ } else {
6783
+ return;
6784
+ }
6785
+ }
6829
6786
 
6787
+ var toOffset = align === 'center' ? measurement.start + measurement.size / 2 : align === 'end' ? measurement.end : measurement.start;
6788
+ scrollToOffset(toOffset, _extends$1({
6789
+ align: align
6790
+ }, rest));
6791
+ }, [scrollToOffset, size]);
6792
+ var scrollToIndex = React__default.useCallback(function () {
6793
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
6794
+ args[_key] = arguments[_key];
6795
+ }
6796
+
6797
+ // We do a double request here because of
6798
+ // dynamic sizes which can cause offset shift
6799
+ // and end up in the wrong spot. Unfortunately,
6800
+ // we can't know about those dynamic sizes until
6801
+ // we try and render them. So double down!
6802
+ tryScrollToIndex.apply(void 0, args);
6803
+ requestAnimationFrame(function () {
6804
+ tryScrollToIndex.apply(void 0, args);
6805
+ });
6806
+ }, [tryScrollToIndex]);
6807
+ return {
6808
+ virtualItems: virtualItems,
6809
+ totalSize: totalSize,
6810
+ scrollToOffset: scrollToOffset,
6811
+ scrollToIndex: scrollToIndex,
6812
+ measure: measure
6813
+ };
6830
6814
  }
6831
6815
 
6832
- const findNearestBinarySearch = (low, high, getCurrentValue, value) => {
6816
+ var findNearestBinarySearch = function findNearestBinarySearch(low, high, getCurrentValue, value) {
6833
6817
  while (low <= high) {
6834
- const middle = (low + high) / 2 | 0;
6835
- const currentValue = getCurrentValue(middle);
6818
+ var middle = (low + high) / 2 | 0;
6819
+ var currentValue = getCurrentValue(middle);
6836
6820
 
6837
6821
  if (currentValue < value) {
6838
6822
  low = middle + 1;
@@ -6850,57 +6834,27 @@ const findNearestBinarySearch = (low, high, getCurrentValue, value) => {
6850
6834
  }
6851
6835
  };
6852
6836
 
6853
- function calculateRange(_ref2) {
6854
- let {
6855
- measurements,
6856
- outerSize,
6857
- scrollOffset
6858
- } = _ref2;
6859
- const count = measurements.length - 1;
6837
+ function calculateRange(_ref4) {
6838
+ var measurements = _ref4.measurements,
6839
+ outerSize = _ref4.outerSize,
6840
+ scrollOffset = _ref4.scrollOffset;
6841
+ var size = measurements.length - 1;
6860
6842
 
6861
- const getOffset = index => measurements[index].start;
6843
+ var getOffset = function getOffset(index) {
6844
+ return measurements[index].start;
6845
+ };
6862
6846
 
6863
- const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset);
6864
- let endIndex = startIndex;
6847
+ var start = findNearestBinarySearch(0, size, getOffset, scrollOffset);
6848
+ var end = start;
6865
6849
 
6866
- while (endIndex < count && measurements[endIndex].end < scrollOffset + outerSize) {
6867
- endIndex++;
6850
+ while (end < size && measurements[end].end < scrollOffset + outerSize) {
6851
+ end++;
6868
6852
  }
6869
6853
 
6870
6854
  return {
6871
- startIndex,
6872
- endIndex
6873
- };
6874
- }
6875
-
6876
- const useIsomorphicLayoutEffect$1 = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;
6877
-
6878
- function useVirtualizerBase(options) {
6879
- const rerender = React.useReducer(() => ({}), {})[1];
6880
- const resolvedOptions = { ...options,
6881
- onChange: instance => {
6882
- rerender();
6883
- options.onChange == null ? void 0 : options.onChange(instance);
6884
- }
6855
+ start: start,
6856
+ end: end
6885
6857
  };
6886
- const [instance] = React.useState(() => new Virtualizer(resolvedOptions));
6887
- instance.setOptions(resolvedOptions);
6888
- React.useEffect(() => {
6889
- return instance._didMount();
6890
- }, []);
6891
- useIsomorphicLayoutEffect$1(() => {
6892
- return instance._willUpdate();
6893
- });
6894
- return instance;
6895
- }
6896
-
6897
- function useVirtualizer(options) {
6898
- return useVirtualizerBase({
6899
- observeElementRect: observeElementRect,
6900
- observeElementOffset: observeElementOffset,
6901
- scrollToFn: elementScroll,
6902
- ...options
6903
- });
6904
6858
  }
6905
6859
 
6906
6860
  var MRT_EditCellTextField = function MRT_EditCellTextField(_ref) {
@@ -7308,23 +7262,19 @@ var MRT_TableBody = function MRT_TableBody(_ref) {
7308
7262
 
7309
7263
  return enablePagination ? getRowModel().rows : getPrePaginationRowModel().rows;
7310
7264
  }, [enableGlobalFilterRankedResults, enableGlobalFilterRankedResults && globalFilter || !enablePagination ? getPrePaginationRowModel().rows : getRowModel().rows, globalFilter]);
7311
- var rowVirtualizer = enableRowVirtualization ? useVirtualizer(_extends({
7312
- count: rows.length,
7313
- estimateSize: function estimateSize() {
7314
- return density === 'compact' ? 25 : 50;
7315
- },
7316
- getScrollElement: function getScrollElement() {
7317
- return tableContainerRef.current;
7318
- },
7319
- overscan: density === 'compact' ? 30 : 10
7265
+ var rowVirtualizer = enableRowVirtualization ? useVirtual(_extends({
7266
+ // estimateSize: () => (density === 'compact' ? 25 : 50),
7267
+ overscan: density === 'compact' ? 30 : 10,
7268
+ parentRef: tableContainerRef,
7269
+ size: rows.length
7320
7270
  }, virtualizerProps)) : {};
7321
- var virtualRows = enableRowVirtualization ? rowVirtualizer.getVirtualItems() : [];
7271
+ var virtualRows = enableRowVirtualization ? rowVirtualizer.virtualItems : [];
7322
7272
  var paddingTop = 0;
7323
7273
  var paddingBottom = 0;
7324
7274
 
7325
7275
  if (enableRowVirtualization) {
7326
7276
  paddingTop = virtualRows.length > 0 ? virtualRows[0].start : 0;
7327
- paddingBottom = virtualRows.length > 0 ? rowVirtualizer.getTotalSize() - virtualRows[virtualRows.length - 1].end : 0;
7277
+ paddingBottom = virtualRows.length > 0 ? rowVirtualizer.totalSize - virtualRows[virtualRows.length - 1].end : 0;
7328
7278
  }
7329
7279
 
7330
7280
  return React__default.createElement(material.TableBody, Object.assign({}, tableBodyProps), enableRowVirtualization && paddingTop > 0 && React__default.createElement("tr", null, React__default.createElement("td", {