material-react-table 1.4.0-beta.4 → 1.4.1

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.
Files changed (40) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +4 -2
  3. package/dist/cjs/index.js +30 -598
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/cjs/types/MaterialReactTable.d.ts +6 -2
  6. package/dist/cjs/types/body/MRT_TableDetailPanel.d.ts +4 -1
  7. package/dist/cjs/types/index.d.ts +3 -1
  8. package/dist/cjs/types/table/MRT_TableRoot.d.ts +3 -2
  9. package/dist/cjs/types/toolbar/MRT_ToolbarAlertBanner.d.ts +4 -4
  10. package/dist/cjs/types/toolbar/MRT_ToolbarDropZone.d.ts +4 -4
  11. package/dist/esm/material-react-table.esm.js +333 -885
  12. package/dist/esm/material-react-table.esm.js.map +1 -1
  13. package/dist/esm/types/MaterialReactTable.d.ts +6 -2
  14. package/dist/esm/types/body/MRT_TableDetailPanel.d.ts +4 -1
  15. package/dist/esm/types/index.d.ts +3 -1
  16. package/dist/esm/types/table/MRT_TableRoot.d.ts +3 -2
  17. package/dist/esm/types/toolbar/MRT_ToolbarAlertBanner.d.ts +4 -4
  18. package/dist/esm/types/toolbar/MRT_ToolbarDropZone.d.ts +4 -4
  19. package/dist/index.d.ts +33 -18
  20. package/locales/nl.esm.js +1 -1
  21. package/locales/nl.esm.js.map +1 -1
  22. package/locales/nl.js +1 -1
  23. package/locales/nl.js.map +1 -1
  24. package/locales/ru.esm.js +3 -3
  25. package/locales/ru.esm.js.map +1 -1
  26. package/locales/ru.js +3 -3
  27. package/locales/ru.js.map +1 -1
  28. package/package.json +10 -10
  29. package/src/MaterialReactTable.tsx +11 -3
  30. package/src/_locales/nl.ts +1 -1
  31. package/src/_locales/ru.ts +3 -3
  32. package/src/body/MRT_TableBody.tsx +1 -1
  33. package/src/body/MRT_TableBodyRow.tsx +6 -1
  34. package/src/body/MRT_TableDetailPanel.tsx +32 -5
  35. package/src/head/MRT_TableHead.tsx +2 -8
  36. package/src/index.tsx +4 -0
  37. package/src/table/MRT_Table.tsx +2 -6
  38. package/src/table/MRT_TableContainer.tsx +4 -9
  39. package/src/toolbar/MRT_ToolbarAlertBanner.tsx +5 -5
  40. package/src/toolbar/MRT_ToolbarDropZone.tsx +6 -4
package/dist/cjs/index.js CHANGED
@@ -71,6 +71,7 @@ var TableHead = require('@mui/material/TableHead');
71
71
  var TableRow = require('@mui/material/TableRow');
72
72
  var TableCell = require('@mui/material/TableCell');
73
73
  var TableSortLabel = require('@mui/material/TableSortLabel');
74
+ var reactVirtual = require('@tanstack/react-virtual');
74
75
  var TableBody = require('@mui/material/TableBody');
75
76
  var Skeleton = require('@mui/material/Skeleton');
76
77
  var TableFooter = require('@mui/material/TableFooter');
@@ -81,26 +82,7 @@ var Stack = require('@mui/material/Stack');
81
82
 
82
83
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
83
84
 
84
- function _interopNamespace(e) {
85
- if (e && e.__esModule) return e;
86
- var n = Object.create(null);
87
- if (e) {
88
- Object.keys(e).forEach(function (k) {
89
- if (k !== 'default') {
90
- var d = Object.getOwnPropertyDescriptor(e, k);
91
- Object.defineProperty(n, k, d.get ? d : {
92
- enumerable: true,
93
- get: function () { return e[k]; }
94
- });
95
- }
96
- });
97
- }
98
- n["default"] = e;
99
- return Object.freeze(n);
100
- }
101
-
102
85
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
103
- var React__namespace = /*#__PURE__*/_interopNamespace(React);
104
86
  var ArrowDownwardIcon__default = /*#__PURE__*/_interopDefaultLegacy(ArrowDownwardIcon);
105
87
  var ArrowRightIcon__default = /*#__PURE__*/_interopDefaultLegacy(ArrowRightIcon);
106
88
  var CancelIcon__default = /*#__PURE__*/_interopDefaultLegacy(CancelIcon);
@@ -1392,7 +1374,7 @@ const MRT_ToolbarInternalButtons = ({ table, }) => {
1392
1374
  enableFullScreenToggle && (React__default["default"].createElement(MRT_FullScreenToggleButton, { table: table }))))));
1393
1375
  };
1394
1376
 
1395
- const MRT_ToolbarDropZone = ({ table }) => {
1377
+ const MRT_ToolbarDropZone = ({ table, }) => {
1396
1378
  var _a, _b;
1397
1379
  const { getState, options: { enableGrouping, localization }, setHoveredColumn, } = table;
1398
1380
  const { draggingColumn, hoveredColumn, grouping } = getState();
@@ -2071,580 +2053,17 @@ const MRT_TableHeadRow = ({ headerGroup, table }) => {
2071
2053
  };
2072
2054
 
2073
2055
  const MRT_TableHead = ({ table }) => {
2074
- const { getHeaderGroups, getState, options: { enableRowVirtualization, enableStickyHeader, layoutMode, muiTableHeadProps, }, } = table;
2056
+ const { getHeaderGroups, getState, options: { enableStickyHeader, layoutMode, muiTableHeadProps }, } = table;
2075
2057
  const { isFullScreen } = getState();
2076
2058
  const tableHeadProps = muiTableHeadProps instanceof Function
2077
2059
  ? muiTableHeadProps({ table })
2078
2060
  : muiTableHeadProps;
2079
- const stickyHeader = enableStickyHeader || enableRowVirtualization || isFullScreen;
2061
+ const stickyHeader = enableStickyHeader || isFullScreen;
2080
2062
  return (React__default["default"].createElement(TableHead__default["default"], Object.assign({}, tableHeadProps, { sx: (theme) => (Object.assign({ display: layoutMode === 'grid' ? 'grid' : 'table-row-group', opacity: 0.97, position: stickyHeader ? 'sticky' : 'relative', top: stickyHeader && layoutMode === 'grid' ? 0 : undefined, zIndex: stickyHeader ? 2 : undefined }, ((tableHeadProps === null || tableHeadProps === void 0 ? void 0 : tableHeadProps.sx) instanceof Function
2081
2063
  ? tableHeadProps === null || tableHeadProps === void 0 ? void 0 : tableHeadProps.sx(theme)
2082
2064
  : tableHeadProps === null || tableHeadProps === void 0 ? void 0 : tableHeadProps.sx))) }), getHeaderGroups().map((headerGroup) => (React__default["default"].createElement(MRT_TableHeadRow, { headerGroup: headerGroup, key: headerGroup.id, table: table })))));
2083
2065
  };
2084
2066
 
2085
- /**
2086
- * virtual-core
2087
- *
2088
- * Copyright (c) TanStack
2089
- *
2090
- * This source code is licensed under the MIT license found in the
2091
- * LICENSE.md file in the root directory of this source tree.
2092
- *
2093
- * @license MIT
2094
- */
2095
- function memo(getDeps, fn, opts) {
2096
- let deps = [];
2097
- let result;
2098
- return () => {
2099
- let depTime;
2100
- if (opts.key && opts.debug != null && opts.debug()) depTime = Date.now();
2101
- const newDeps = getDeps();
2102
- const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);
2103
- if (!depsChanged) {
2104
- return result;
2105
- }
2106
- deps = newDeps;
2107
- let resultTime;
2108
- if (opts.key && opts.debug != null && opts.debug()) resultTime = Date.now();
2109
- result = fn(...newDeps);
2110
- opts == null ? void 0 : opts.onChange == null ? void 0 : opts.onChange(result);
2111
- if (opts.key && opts.debug != null && opts.debug()) {
2112
- const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;
2113
- const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;
2114
- const resultFpsPercentage = resultEndTime / 16;
2115
- const pad = (str, num) => {
2116
- str = String(str);
2117
- while (str.length < num) {
2118
- str = ' ' + str;
2119
- }
2120
- return str;
2121
- };
2122
- console.info(`%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`, `
2123
- font-size: .6rem;
2124
- font-weight: bold;
2125
- color: hsl(${Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120))}deg 100% 31%);`, opts == null ? void 0 : opts.key);
2126
- }
2127
- return result;
2128
- };
2129
- }
2130
-
2131
- /**
2132
- * virtual-core
2133
- *
2134
- * Copyright (c) TanStack
2135
- *
2136
- * This source code is licensed under the MIT license found in the
2137
- * LICENSE.md file in the root directory of this source tree.
2138
- *
2139
- * @license MIT
2140
- */
2141
-
2142
- //
2143
-
2144
- //
2145
-
2146
- const defaultKeyExtractor = index => index;
2147
- const defaultRangeExtractor = range => {
2148
- const start = Math.max(range.startIndex - range.overscan, 0);
2149
- const end = Math.min(range.endIndex + range.overscan, range.count - 1);
2150
- const arr = [];
2151
- for (let i = start; i <= end; i++) {
2152
- arr.push(i);
2153
- }
2154
- return arr;
2155
- };
2156
- const observeElementRect = (instance, cb) => {
2157
- const observer = new ResizeObserver(entries => {
2158
- var _entries$, _entries$2;
2159
- cb({
2160
- width: (_entries$ = entries[0]) == null ? void 0 : _entries$.contentRect.width,
2161
- height: (_entries$2 = entries[0]) == null ? void 0 : _entries$2.contentRect.height
2162
- });
2163
- });
2164
- if (!instance.scrollElement) {
2165
- return;
2166
- }
2167
- cb(instance.scrollElement.getBoundingClientRect());
2168
- observer.observe(instance.scrollElement);
2169
- return () => {
2170
- observer.unobserve(instance.scrollElement);
2171
- };
2172
- };
2173
- const scrollProps = {
2174
- element: ['scrollLeft', 'scrollTop'],
2175
- window: ['scrollX', 'scrollY']
2176
- };
2177
- const createOffsetObserver = mode => {
2178
- return (instance, cb) => {
2179
- if (!instance.scrollElement) {
2180
- return;
2181
- }
2182
- const propX = scrollProps[mode][0];
2183
- const propY = scrollProps[mode][1];
2184
- let prevX = instance.scrollElement[propX];
2185
- let prevY = instance.scrollElement[propY];
2186
- const scroll = () => {
2187
- const offset = instance.scrollElement[instance.options.horizontal ? propX : propY];
2188
- cb(Math.max(0, offset - instance.options.scrollMargin));
2189
- };
2190
- scroll();
2191
- const onScroll = e => {
2192
- const target = e.currentTarget;
2193
- const scrollX = target[propX];
2194
- const scrollY = target[propY];
2195
- if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {
2196
- scroll();
2197
- }
2198
- prevX = scrollX;
2199
- prevY = scrollY;
2200
- };
2201
- instance.scrollElement.addEventListener('scroll', onScroll, {
2202
- capture: false,
2203
- passive: true
2204
- });
2205
- return () => {
2206
- instance.scrollElement.removeEventListener('scroll', onScroll);
2207
- };
2208
- };
2209
- };
2210
- const observeElementOffset = createOffsetObserver('element');
2211
- const measureElement = (element, instance) => {
2212
- return Math.round(element.getBoundingClientRect()[instance.options.horizontal ? 'width' : 'height']);
2213
- };
2214
- const elementScroll = (offset, _ref2, instance) => {
2215
- var _instance$scrollEleme2;
2216
- let {
2217
- adjustments,
2218
- behavior,
2219
- sync
2220
- } = _ref2;
2221
- const toOffset = (sync ? offset : offset + instance.options.scrollMargin) + (adjustments ?? 0);
2222
- (_instance$scrollEleme2 = instance.scrollElement) == null ? void 0 : _instance$scrollEleme2.scrollTo == null ? void 0 : _instance$scrollEleme2.scrollTo({
2223
- [instance.options.horizontal ? 'left' : 'top']: toOffset,
2224
- behavior
2225
- });
2226
- };
2227
- class Virtualizer {
2228
- constructor(_opts) {
2229
- var _this = this;
2230
- this.unsubs = [];
2231
- this.scrollElement = null;
2232
- this.isScrolling = false;
2233
- this.isScrollingTimeoutId = null;
2234
- this.measurementsCache = [];
2235
- this.itemMeasurementsCache = {};
2236
- this.pendingMeasuredCacheIndexes = [];
2237
- this.scrollAdjustments = 0;
2238
- this.measureElementCache = {};
2239
- this.pendingScrollToIndexCallback = null;
2240
- this.getResizeObserver = (() => {
2241
- let _ro = null;
2242
- return () => {
2243
- if (_ro) {
2244
- return _ro;
2245
- } else if (typeof ResizeObserver !== 'undefined') {
2246
- return _ro = new ResizeObserver(entries => {
2247
- entries.forEach(entry => {
2248
- this._measureElement(entry.target, false);
2249
- });
2250
- });
2251
- } else {
2252
- return null;
2253
- }
2254
- };
2255
- })();
2256
- this.range = {
2257
- startIndex: 0,
2258
- endIndex: 0
2259
- };
2260
- this.setOptions = opts => {
2261
- Object.entries(opts).forEach(_ref3 => {
2262
- let [key, value] = _ref3;
2263
- if (typeof value === 'undefined') delete opts[key];
2264
- });
2265
- this.options = {
2266
- debug: false,
2267
- initialOffset: 0,
2268
- overscan: 1,
2269
- paddingStart: 0,
2270
- paddingEnd: 0,
2271
- scrollPaddingStart: 0,
2272
- scrollPaddingEnd: 0,
2273
- horizontal: false,
2274
- getItemKey: defaultKeyExtractor,
2275
- rangeExtractor: defaultRangeExtractor,
2276
- onChange: () => {},
2277
- measureElement,
2278
- initialRect: {
2279
- width: 0,
2280
- height: 0
2281
- },
2282
- scrollMargin: 0,
2283
- scrollingDelay: 150,
2284
- indexAttribute: 'data-index',
2285
- ...opts
2286
- };
2287
- };
2288
- this.notify = () => {
2289
- var _this$options$onChang, _this$options;
2290
- (_this$options$onChang = (_this$options = this.options).onChange) == null ? void 0 : _this$options$onChang.call(_this$options, this);
2291
- };
2292
- this.cleanup = () => {
2293
- this.unsubs.filter(Boolean).forEach(d => d());
2294
- this.unsubs = [];
2295
- this.scrollElement = null;
2296
- };
2297
- this._didMount = () => {
2298
- const ro = this.getResizeObserver();
2299
- Object.values(this.measureElementCache).forEach(node => ro == null ? void 0 : ro.observe(node));
2300
- return () => {
2301
- ro == null ? void 0 : ro.disconnect();
2302
- this.cleanup();
2303
- };
2304
- };
2305
- this._willUpdate = () => {
2306
- var _this$pendingScrollTo;
2307
- (_this$pendingScrollTo = this.pendingScrollToIndexCallback) == null ? void 0 : _this$pendingScrollTo.call(this);
2308
- const scrollElement = this.options.getScrollElement();
2309
- if (this.scrollElement !== scrollElement) {
2310
- this.cleanup();
2311
- this.scrollElement = scrollElement;
2312
- this._scrollToOffset(this.scrollOffset, {
2313
- adjustments: undefined,
2314
- behavior: undefined,
2315
- sync: true
2316
- });
2317
- this.unsubs.push(this.options.observeElementRect(this, rect => {
2318
- this.scrollRect = rect;
2319
- this.calculateRange();
2320
- }));
2321
- this.unsubs.push(this.options.observeElementOffset(this, offset => {
2322
- if (this.isScrollingTimeoutId !== null) {
2323
- clearTimeout(this.isScrollingTimeoutId);
2324
- this.isScrollingTimeoutId = null;
2325
- }
2326
- if (this.scrollOffset !== offset) {
2327
- this.scrollOffset = offset;
2328
- this.isScrolling = true;
2329
- this.scrollAdjustments = 0;
2330
- this.isScrollingTimeoutId = setTimeout(() => {
2331
- this.isScrollingTimeoutId = null;
2332
- this.isScrolling = false;
2333
- this.notify();
2334
- }, this.options.scrollingDelay);
2335
- } else {
2336
- this.isScrolling = false;
2337
- this.scrollAdjustments = 0;
2338
- }
2339
- this.calculateRange();
2340
- }));
2341
- } else if (!this.isScrolling) {
2342
- this.calculateRange();
2343
- }
2344
- };
2345
- this.getSize = () => {
2346
- return this.scrollRect[this.options.horizontal ? 'width' : 'height'];
2347
- };
2348
- this.getMeasurements = memo(() => [this.options.count, this.options.paddingStart, this.options.getItemKey, this.itemMeasurementsCache], (count, paddingStart, getItemKey, measurementsCache) => {
2349
- const min = this.pendingMeasuredCacheIndexes.length > 0 ? Math.min(...this.pendingMeasuredCacheIndexes) : 0;
2350
- this.pendingMeasuredCacheIndexes = [];
2351
- const measurements = this.measurementsCache.slice(0, min);
2352
- for (let i = min; i < count; i++) {
2353
- const key = getItemKey(i);
2354
- const measuredSize = measurementsCache[key];
2355
- const start = measurements[i - 1] ? measurements[i - 1].end : paddingStart;
2356
- const size = typeof measuredSize === 'number' ? measuredSize : this.options.estimateSize(i);
2357
- const end = start + size;
2358
- measurements[i] = {
2359
- index: i,
2360
- start,
2361
- size,
2362
- end,
2363
- key
2364
- };
2365
- }
2366
- this.measurementsCache = measurements;
2367
- return measurements;
2368
- }, {
2369
- key: process.env.NODE_ENV !== 'production' && 'getMeasurements',
2370
- debug: () => this.options.debug
2371
- });
2372
- this.calculateRange = memo(() => [this.getMeasurements(), this.getSize(), this.scrollOffset], (measurements, outerSize, scrollOffset) => {
2373
- const range = calculateRange({
2374
- measurements,
2375
- outerSize,
2376
- scrollOffset
2377
- });
2378
- if (range.startIndex !== this.range.startIndex || range.endIndex !== this.range.endIndex) {
2379
- this.range = range;
2380
- this.notify();
2381
- }
2382
- return this.range;
2383
- }, {
2384
- key: process.env.NODE_ENV !== 'production' && 'calculateRange',
2385
- debug: () => this.options.debug
2386
- });
2387
- this.getIndexes = memo(() => [this.options.rangeExtractor, this.range, this.options.overscan, this.options.count], (rangeExtractor, range, overscan, count) => {
2388
- return rangeExtractor({
2389
- ...range,
2390
- overscan,
2391
- count: count
2392
- });
2393
- }, {
2394
- key: process.env.NODE_ENV !== 'production' && 'getIndexes',
2395
- debug: () => this.options.debug
2396
- });
2397
- this.indexFromElement = node => {
2398
- const attributeName = this.options.indexAttribute;
2399
- const indexStr = node.getAttribute(attributeName);
2400
- if (!indexStr) {
2401
- console.warn(`Missing attribute name '${attributeName}={index}' on measured element.`);
2402
- return -1;
2403
- }
2404
- return parseInt(indexStr, 10);
2405
- };
2406
- this._measureElement = (node, _sync) => {
2407
- const index = this.indexFromElement(node);
2408
- const item = this.measurementsCache[index];
2409
- if (!item) {
2410
- return;
2411
- }
2412
- const prevNode = this.measureElementCache[item.key];
2413
- const ro = this.getResizeObserver();
2414
- if (!node.isConnected) {
2415
- if (prevNode) {
2416
- ro == null ? void 0 : ro.unobserve(prevNode);
2417
- delete this.measureElementCache[item.key];
2418
- }
2419
- return;
2420
- }
2421
- if (!prevNode || prevNode !== node) {
2422
- if (prevNode) {
2423
- ro == null ? void 0 : ro.unobserve(prevNode);
2424
- }
2425
- this.measureElementCache[item.key] = node;
2426
- ro == null ? void 0 : ro.observe(node);
2427
- }
2428
- const measuredItemSize = this.options.measureElement(node, this);
2429
- const itemSize = this.itemMeasurementsCache[item.key] ?? item.size;
2430
- const delta = measuredItemSize - itemSize;
2431
- if (delta !== 0) {
2432
- if (item.start < this.scrollOffset && this.isScrolling) {
2433
- if (process.env.NODE_ENV !== 'production' && this.options.debug) {
2434
- console.info('correction', delta);
2435
- }
2436
- this._scrollToOffset(this.scrollOffset, {
2437
- adjustments: this.scrollAdjustments += delta,
2438
- behavior: undefined,
2439
- sync: false
2440
- });
2441
- }
2442
- this.pendingMeasuredCacheIndexes.push(index);
2443
- this.itemMeasurementsCache = {
2444
- ...this.itemMeasurementsCache,
2445
- [item.key]: measuredItemSize
2446
- };
2447
- this.notify();
2448
- }
2449
- };
2450
- this.measureElement = node => {
2451
- if (!node) {
2452
- return;
2453
- }
2454
- this._measureElement(node, true);
2455
- };
2456
- this.getVirtualItems = memo(() => [this.getIndexes(), this.getMeasurements()], (indexes, measurements) => {
2457
- const virtualItems = [];
2458
- for (let k = 0, len = indexes.length; k < len; k++) {
2459
- const i = indexes[k];
2460
- const measurement = measurements[i];
2461
- virtualItems.push(measurement);
2462
- }
2463
- return virtualItems;
2464
- }, {
2465
- key: process.env.NODE_ENV !== 'production' && 'getIndexes',
2466
- debug: () => this.options.debug
2467
- });
2468
- this.scrollToOffset = function (toOffset, _temp) {
2469
- let {
2470
- align = 'start',
2471
- behavior
2472
- } = _temp === void 0 ? {} : _temp;
2473
- const offset = _this.scrollOffset;
2474
- const size = _this.getSize();
2475
- if (align === 'auto') {
2476
- if (toOffset <= offset) {
2477
- align = 'start';
2478
- } else if (toOffset >= offset + size) {
2479
- align = 'end';
2480
- } else {
2481
- align = 'start';
2482
- }
2483
- }
2484
- const options = {
2485
- adjustments: undefined,
2486
- behavior,
2487
- sync: false
2488
- };
2489
- if (align === 'start') {
2490
- _this._scrollToOffset(toOffset, options);
2491
- } else if (align === 'end') {
2492
- _this._scrollToOffset(toOffset - size, options);
2493
- } else if (align === 'center') {
2494
- _this._scrollToOffset(toOffset - size / 2, options);
2495
- }
2496
- };
2497
- this.scrollToIndex = function (index, _temp2) {
2498
- let {
2499
- align = 'auto',
2500
- ...rest
2501
- } = _temp2 === void 0 ? {} : _temp2;
2502
- _this.pendingScrollToIndexCallback = null;
2503
- const measurements = _this.getMeasurements();
2504
- const offset = _this.scrollOffset;
2505
- const size = _this.getSize();
2506
- const {
2507
- count
2508
- } = _this.options;
2509
- const measurement = measurements[Math.max(0, Math.min(index, count - 1))];
2510
- if (!measurement) {
2511
- return;
2512
- }
2513
- if (align === 'auto') {
2514
- if (measurement.end >= offset + size - _this.options.scrollPaddingEnd) {
2515
- align = 'end';
2516
- } else if (measurement.start <= offset + _this.options.scrollPaddingStart) {
2517
- align = 'start';
2518
- } else {
2519
- return;
2520
- }
2521
- }
2522
- const toOffset = align === 'end' ? measurement.end + _this.options.scrollPaddingEnd : measurement.start - _this.options.scrollPaddingStart;
2523
- _this.scrollToOffset(toOffset, {
2524
- align,
2525
- ...rest
2526
- });
2527
- const isDynamic = Object.keys(_this.measureElementCache).length > 0;
2528
- if (isDynamic) {
2529
- const didSeen = () => typeof _this.itemMeasurementsCache[_this.options.getItemKey(index)] === 'number';
2530
- if (!didSeen()) {
2531
- _this.pendingScrollToIndexCallback = () => {
2532
- if (didSeen()) {
2533
- _this.pendingScrollToIndexCallback = null;
2534
- _this.scrollToIndex(index, {
2535
- align,
2536
- ...rest
2537
- });
2538
- }
2539
- };
2540
- }
2541
- }
2542
- };
2543
- this.getTotalSize = () => {
2544
- var _this$getMeasurements;
2545
- return (((_this$getMeasurements = this.getMeasurements()[this.options.count - 1]) == null ? void 0 : _this$getMeasurements.end) || this.options.paddingStart) + this.options.paddingEnd;
2546
- };
2547
- this._scrollToOffset = (offset, _ref4) => {
2548
- let {
2549
- adjustments,
2550
- behavior,
2551
- sync
2552
- } = _ref4;
2553
- this.options.scrollToFn(offset, {
2554
- behavior,
2555
- sync,
2556
- adjustments
2557
- }, this);
2558
- };
2559
- this.measure = () => {
2560
- this.itemMeasurementsCache = {};
2561
- this.notify();
2562
- };
2563
- this.setOptions(_opts);
2564
- this.scrollRect = this.options.initialRect;
2565
- this.scrollOffset = this.options.initialOffset;
2566
- this.calculateRange();
2567
- }
2568
- }
2569
- const findNearestBinarySearch = (low, high, getCurrentValue, value) => {
2570
- while (low <= high) {
2571
- const middle = (low + high) / 2 | 0;
2572
- const currentValue = getCurrentValue(middle);
2573
- if (currentValue < value) {
2574
- low = middle + 1;
2575
- } else if (currentValue > value) {
2576
- high = middle - 1;
2577
- } else {
2578
- return middle;
2579
- }
2580
- }
2581
- if (low > 0) {
2582
- return low - 1;
2583
- } else {
2584
- return 0;
2585
- }
2586
- };
2587
- function calculateRange(_ref5) {
2588
- let {
2589
- measurements,
2590
- outerSize,
2591
- scrollOffset
2592
- } = _ref5;
2593
- const count = measurements.length - 1;
2594
- const getOffset = index => measurements[index].start;
2595
- const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset);
2596
- let endIndex = startIndex;
2597
- while (endIndex < count && measurements[endIndex].end < scrollOffset + outerSize) {
2598
- endIndex++;
2599
- }
2600
- return {
2601
- startIndex,
2602
- endIndex
2603
- };
2604
- }
2605
-
2606
- /**
2607
- * react-virtual
2608
- *
2609
- * Copyright (c) TanStack
2610
- *
2611
- * This source code is licensed under the MIT license found in the
2612
- * LICENSE.md file in the root directory of this source tree.
2613
- *
2614
- * @license MIT
2615
- */
2616
-
2617
- //
2618
-
2619
- const useIsomorphicLayoutEffect$1 = typeof window !== 'undefined' ? React__namespace.useLayoutEffect : React__namespace.useEffect;
2620
- function useVirtualizerBase(options) {
2621
- const rerender = React__namespace.useReducer(() => ({}), {})[1];
2622
- const resolvedOptions = {
2623
- ...options,
2624
- onChange: instance => {
2625
- rerender();
2626
- options.onChange == null ? void 0 : options.onChange(instance);
2627
- }
2628
- };
2629
- const [instance] = React__namespace.useState(() => new Virtualizer(resolvedOptions));
2630
- instance.setOptions(resolvedOptions);
2631
- React__namespace.useEffect(() => {
2632
- return instance._didMount();
2633
- }, []);
2634
- useIsomorphicLayoutEffect$1(() => {
2635
- return instance._willUpdate();
2636
- });
2637
- return instance;
2638
- }
2639
- function useVirtualizer(options) {
2640
- return useVirtualizerBase({
2641
- observeElementRect: observeElementRect,
2642
- observeElementOffset: observeElementOffset,
2643
- scrollToFn: elementScroll,
2644
- ...options
2645
- });
2646
- }
2647
-
2648
2067
  const MRT_EditCellTextField = ({ cell, showLabel, table, }) => {
2649
2068
  var _a;
2650
2069
  const { getState, options: { muiTableBodyCellEditTextFieldProps }, refs: { editInputRefs }, setEditingCell, setEditingRow, } = table;
@@ -2895,19 +2314,28 @@ const MRT_TableBodyCell = ({ cell, enableHover, numRows, rowIndex, rowRef, table
2895
2314
  };
2896
2315
  const Memo_MRT_TableBodyCell = React.memo(MRT_TableBodyCell, (prev, next) => next.cell === prev.cell);
2897
2316
 
2898
- const MRT_TableDetailPanel = ({ row, table }) => {
2317
+ const MRT_TableDetailPanel = ({ parentRowRef, row, table, virtualRow, }) => {
2899
2318
  const { getVisibleLeafColumns, getState, options: { layoutMode, muiTableBodyRowProps, muiTableDetailPanelProps, renderDetailPanel, }, } = table;
2900
2319
  const { isLoading } = getState();
2901
2320
  const tableRowProps = muiTableBodyRowProps instanceof Function
2902
- ? muiTableBodyRowProps({ row, table })
2321
+ ? muiTableBodyRowProps({ isDetailPanel: true, row, table })
2903
2322
  : muiTableBodyRowProps;
2904
2323
  const tableCellProps = muiTableDetailPanelProps instanceof Function
2905
2324
  ? muiTableDetailPanelProps({ row, table })
2906
2325
  : muiTableDetailPanelProps;
2907
- return (React__default["default"].createElement(TableRow__default["default"], Object.assign({ sx: {
2908
- display: layoutMode === 'grid' ? 'flex' : 'table-row',
2909
- } }, tableRowProps),
2910
- React__default["default"].createElement(TableCell__default["default"], Object.assign({ colSpan: getVisibleLeafColumns().length }, tableCellProps, { sx: (theme) => (Object.assign({ borderBottom: !row.getIsExpanded() ? 'none' : undefined, pb: row.getIsExpanded() ? '1rem' : 0, pt: row.getIsExpanded() ? '1rem' : 0, transition: 'all 150ms ease-in-out', width: `${table.getTotalSize()}px` }, ((tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.sx) instanceof Function
2326
+ return (React__default["default"].createElement(TableRow__default["default"], Object.assign({ className: "Mui-TableBodyCell-DetailPanel" }, tableRowProps, { sx: (theme) => {
2327
+ var _a, _b;
2328
+ return (Object.assign({ display: layoutMode === 'grid' ? 'flex' : 'table-row', position: virtualRow ? 'absolute' : undefined, top: virtualRow
2329
+ ? `${(_b = (_a = parentRowRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect()) === null || _b === void 0 ? void 0 : _b.height}px`
2330
+ : undefined, transform: virtualRow
2331
+ ? `translateY(${virtualRow === null || virtualRow === void 0 ? void 0 : virtualRow.start}px)`
2332
+ : undefined, width: '100%', zIndex: virtualRow ? 2 : undefined }, ((tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx) instanceof Function
2333
+ ? tableRowProps.sx(theme)
2334
+ : tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx)));
2335
+ } }),
2336
+ React__default["default"].createElement(TableCell__default["default"], Object.assign({ className: "Mui-TableBodyCell-DetailPanel", colSpan: getVisibleLeafColumns().length }, tableCellProps, { sx: (theme) => (Object.assign({ backgroundColor: virtualRow
2337
+ ? styles.lighten(theme.palette.background.default, 0.06)
2338
+ : undefined, borderBottom: !row.getIsExpanded() ? 'none' : undefined, display: layoutMode === 'grid' ? 'flex' : 'table-cell', pb: row.getIsExpanded() ? '1rem' : 0, pt: row.getIsExpanded() ? '1rem' : 0, transition: 'all 150ms ease-in-out', width: `${table.getTotalSize()}px` }, ((tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.sx) instanceof Function
2911
2339
  ? tableCellProps.sx(theme)
2912
2340
  : tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.sx))) }), renderDetailPanel && (React__default["default"].createElement(Collapse__default["default"], { in: row.getIsExpanded(), mountOnEnter: true, unmountOnExit: true }, !isLoading && renderDetailPanel({ row, table }))))));
2913
2341
  };
@@ -2968,7 +2396,7 @@ const MRT_TableBodyRow = ({ measureElement, numRows, row, rowIndex, table, virtu
2968
2396
  (editingCell === null || editingCell === void 0 ? void 0 : editingCell.id) !== cell.id &&
2969
2397
  (editingRow === null || editingRow === void 0 ? void 0 : editingRow.id) !== row.id ? (React__default["default"].createElement(Memo_MRT_TableBodyCell, Object.assign({}, props))) : (React__default["default"].createElement(MRT_TableBodyCell, Object.assign({}, props)));
2970
2398
  })),
2971
- renderDetailPanel && !row.getIsGrouped() && (React__default["default"].createElement(MRT_TableDetailPanel, { row: row, table: table }))));
2399
+ renderDetailPanel && !row.getIsGrouped() && (React__default["default"].createElement(MRT_TableDetailPanel, { parentRowRef: rowRef, row: row, table: table, virtualRow: virtualRow }))));
2972
2400
  };
2973
2401
  const Memo_MRT_TableBodyRow = React.memo(MRT_TableBodyRow, (prev, next) => prev.row === next.row);
2974
2402
 
@@ -3008,7 +2436,7 @@ const MRT_TableBody = ({ table }) => {
3008
2436
  pagination.pageSize,
3009
2437
  ]);
3010
2438
  const virtualizer = enableRowVirtualization
3011
- ? useVirtualizer(Object.assign({ count: rows.length, estimateSize: () => density === 'compact' ? 37 : density === 'comfortable' ? 58 : 73, getScrollElement: () => tableContainerRef.current, measureElement: (element) => element === null || element === void 0 ? void 0 : element.getBoundingClientRect().height, overscan: 10 }, vProps))
2439
+ ? reactVirtual.useVirtualizer(Object.assign({ count: rows.length, estimateSize: () => density === 'compact' ? 37 : density === 'comfortable' ? 58 : 73, getScrollElement: () => tableContainerRef.current, measureElement: (element) => element === null || element === void 0 ? void 0 : element.getBoundingClientRect().height, overscan: 4 }, vProps))
3012
2440
  : undefined;
3013
2441
  if (virtualizerInstanceRef && virtualizer) {
3014
2442
  virtualizerInstanceRef.current = virtualizer;
@@ -3112,12 +2540,12 @@ const MRT_TableFooter = ({ table }) => {
3112
2540
  };
3113
2541
 
3114
2542
  const MRT_Table = ({ table }) => {
3115
- const { getState, options: { enableColumnResizing, enableRowVirtualization, enableStickyHeader, enableTableFooter, enableTableHead, layoutMode, memoMode, muiTableProps, }, } = table;
2543
+ const { getState, options: { enableColumnResizing, enableStickyHeader, enableTableFooter, enableTableHead, layoutMode, memoMode, muiTableProps, }, } = table;
3116
2544
  const { isFullScreen } = getState();
3117
2545
  const tableProps = muiTableProps instanceof Function
3118
2546
  ? muiTableProps({ table })
3119
2547
  : muiTableProps;
3120
- return (React__default["default"].createElement(Table__default["default"], Object.assign({ stickyHeader: enableStickyHeader || enableRowVirtualization || isFullScreen }, tableProps, { sx: (theme) => (Object.assign({ display: layoutMode === 'grid' ? 'grid' : 'table', tableLayout: enableColumnResizing || enableRowVirtualization ? 'fixed' : 'auto' }, ((tableProps === null || tableProps === void 0 ? void 0 : tableProps.sx) instanceof Function
2548
+ return (React__default["default"].createElement(Table__default["default"], Object.assign({ stickyHeader: enableStickyHeader || isFullScreen }, tableProps, { sx: (theme) => (Object.assign({ display: layoutMode === 'grid' ? 'grid' : 'table', tableLayout: enableColumnResizing ? 'fixed' : 'auto' }, ((tableProps === null || tableProps === void 0 ? void 0 : tableProps.sx) instanceof Function
3121
2549
  ? tableProps.sx(theme)
3122
2550
  : tableProps === null || tableProps === void 0 ? void 0 : tableProps.sx))) }),
3123
2551
  enableTableHead && React__default["default"].createElement(MRT_TableHead, { table: table }),
@@ -3127,7 +2555,7 @@ const MRT_Table = ({ table }) => {
3127
2555
 
3128
2556
  const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;
3129
2557
  const MRT_TableContainer = ({ table }) => {
3130
- const { getState, options: { enableStickyHeader, enableRowVirtualization, muiTableContainerProps, }, refs: { tableContainerRef, bottomToolbarRef, topToolbarRef }, } = table;
2558
+ const { getState, options: { enableStickyHeader, muiTableContainerProps }, refs: { tableContainerRef, bottomToolbarRef, topToolbarRef }, } = table;
3131
2559
  const { isFullScreen } = getState();
3132
2560
  const [totalToolbarHeight, setTotalToolbarHeight] = React.useState(0);
3133
2561
  const tableContainerProps = muiTableContainerProps instanceof Function
@@ -3151,7 +2579,7 @@ const MRT_TableContainer = ({ table }) => {
3151
2579
  tableContainerProps.ref.current = node;
3152
2580
  }
3153
2581
  }
3154
- }, sx: (theme) => (Object.assign({ maxWidth: '100%', maxHeight: enableStickyHeader || enableRowVirtualization
2582
+ }, sx: (theme) => (Object.assign({ maxWidth: '100%', maxHeight: enableStickyHeader
3155
2583
  ? `clamp(350px, calc(100vh - ${totalToolbarHeight}px), 9999px)`
3156
2584
  : undefined, overflow: 'auto' }, ((tableContainerProps === null || tableContainerProps === void 0 ? void 0 : tableContainerProps.sx) instanceof Function
3157
2585
  ? tableContainerProps.sx(theme)
@@ -3477,8 +2905,10 @@ const MaterialReactTable = (_a) => {
3477
2905
  const _sortingFns = React.useMemo(() => (Object.assign(Object.assign({}, MRT_SortingFns), sortingFns)), []);
3478
2906
  const _defaultColumn = React.useMemo(() => (Object.assign(Object.assign({}, MRT_DefaultColumn), defaultColumn)), []);
3479
2907
  const _defaultDisplayColumn = React.useMemo(() => (Object.assign(Object.assign({}, MRT_DefaultDisplayColumn), defaultDisplayColumn)), []);
3480
- if (rest.enableRowVirtualization)
2908
+ if (rest.enableRowVirtualization) {
3481
2909
  layoutMode = 'grid';
2910
+ enableStickyHeader = true;
2911
+ }
3482
2912
  return (React__default["default"].createElement(MRT_TableRoot, Object.assign({ aggregationFns: _aggregationFns, autoResetExpanded: autoResetExpanded, columnResizeMode: columnResizeMode, defaultColumn: _defaultColumn, defaultDisplayColumn: _defaultDisplayColumn, editingMode: editingMode, enableBottomToolbar: enableBottomToolbar, enableColumnActions: enableColumnActions, enableColumnFilters: enableColumnFilters, enableColumnOrdering: enableColumnOrdering, enableColumnResizing: enableColumnResizing, enableDensityToggle: enableDensityToggle, enableExpandAll: enableExpandAll, enableFilters: enableFilters, enableFullScreenToggle: enableFullScreenToggle, enableGlobalFilter: enableGlobalFilter, enableGlobalFilterRankedResults: enableGlobalFilterRankedResults, enableGrouping: enableGrouping, enableHiding: enableHiding, enableMultiRowSelection: enableMultiRowSelection, enableMultiSort: enableMultiSort, enablePagination: enablePagination, enablePinning: enablePinning, enableRowSelection: enableRowSelection, enableSelectAll: enableSelectAll, enableSorting: enableSorting, enableStickyHeader: enableStickyHeader, enableTableFooter: enableTableFooter, enableTableHead: enableTableHead, enableToolbarInternalActions: enableToolbarInternalActions, enableTopToolbar: enableTopToolbar, filterFns: _filterFns, icons: _icons, layoutMode: layoutMode, localization: _localization, positionActionsColumn: positionActionsColumn, positionExpandColumn: positionExpandColumn, positionGlobalFilter: positionGlobalFilter, positionPagination: positionPagination, positionToolbarAlertBanner: positionToolbarAlertBanner, positionToolbarDropZone: positionToolbarDropZone, rowNumberMode: rowNumberMode, selectAllMode: selectAllMode, sortingFns: _sortingFns }, rest)));
3483
2913
  };
3484
2914
 
@@ -3491,6 +2921,8 @@ exports.MRT_TablePagination = MRT_TablePagination;
3491
2921
  exports.MRT_ToggleDensePaddingButton = MRT_ToggleDensePaddingButton;
3492
2922
  exports.MRT_ToggleFiltersButton = MRT_ToggleFiltersButton;
3493
2923
  exports.MRT_ToggleGlobalFilterButton = MRT_ToggleGlobalFilterButton;
2924
+ exports.MRT_ToolbarAlertBanner = MRT_ToolbarAlertBanner;
2925
+ exports.MRT_ToolbarDropZone = MRT_ToolbarDropZone;
3494
2926
  exports.MRT_ToolbarInternalButtons = MRT_ToolbarInternalButtons;
3495
2927
  exports["default"] = MaterialReactTable;
3496
2928
  //# sourceMappingURL=index.js.map