@mui/x-virtualizer 0.3.3 → 1.0.0-alpha.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.
- package/CHANGELOG.md +591 -3
- package/{esm/features/colspan.d.ts → features/colspan.d.mts} +4 -4
- package/{esm/features/dimensions.d.ts → features/dimensions.d.mts} +2 -2
- package/{esm/features/dimensions.js → features/dimensions.mjs} +1 -1
- package/features/index.d.mts +5 -0
- package/features/index.mjs +5 -0
- package/{esm/features/keyboard.d.ts → features/keyboard.d.mts} +1 -1
- package/{esm/features/keyboard.js → features/keyboard.mjs} +2 -2
- package/{esm/features/rowspan.d.ts → features/rowspan.d.mts} +3 -3
- package/features/virtualization/index.d.mts +2 -0
- package/features/virtualization/index.mjs +2 -0
- package/{esm/features/virtualization/layout.d.ts → features/virtualization/layout.d.mts} +9 -9
- package/features/virtualization/layout.js +60 -4
- package/{esm/features/virtualization/layout.js → features/virtualization/layout.mjs} +61 -4
- package/{esm/features/virtualization/virtualization.d.ts → features/virtualization/virtualization.d.mts} +5 -5
- package/features/virtualization/virtualization.js +10 -25
- package/{esm/features/virtualization/virtualization.js → features/virtualization/virtualization.mjs} +11 -26
- package/index.d.mts +3 -0
- package/index.js +1 -1
- package/{esm/index.js → index.mjs} +4 -4
- package/{esm/models/dimensions.d.ts → models/dimensions.d.mts} +1 -1
- package/models/index.d.mts +4 -0
- package/models/index.mjs +4 -0
- package/{esm/models/rowspan.d.ts → models/rowspan.d.mts} +1 -1
- package/package.json +42 -17
- package/{esm/useVirtualizer.d.ts → useVirtualizer.d.mts} +20 -20
- package/{esm/useVirtualizer.js → useVirtualizer.mjs} +6 -6
- package/utils/useRefCallback.d.mts +1 -0
- package/utils/useRefCallback.d.ts +1 -0
- package/utils/useRefCallback.js +28 -0
- package/utils/useRefCallback.mjs +21 -0
- package/esm/features/index.d.ts +0 -5
- package/esm/features/index.js +0 -5
- package/esm/features/virtualization/index.d.ts +0 -2
- package/esm/features/virtualization/index.js +0 -2
- package/esm/index.d.ts +0 -3
- package/esm/models/index.d.ts +0 -4
- package/esm/models/index.js +0 -4
- package/esm/package.json +0 -1
- /package/{esm/constants.d.ts → constants.d.mts} +0 -0
- /package/{esm/constants.js → constants.mjs} +0 -0
- /package/{esm/features/colspan.js → features/colspan.mjs} +0 -0
- /package/{esm/features/rowspan.js → features/rowspan.mjs} +0 -0
- /package/{esm/models/colspan.d.ts → models/colspan.d.mts} +0 -0
- /package/{esm/models/colspan.js → models/colspan.mjs} +0 -0
- /package/{esm/models/core.d.ts → models/core.d.mts} +0 -0
- /package/{esm/models/core.js → models/core.mjs} +0 -0
- /package/{esm/models/dimensions.js → models/dimensions.mjs} +0 -0
- /package/{esm/models/rowspan.js → models/rowspan.mjs} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Store } from '@mui/x-internals/store';
|
|
2
|
-
import type { BaseState, ParamsWithDefaults } from "../useVirtualizer.
|
|
3
|
-
import type { RowSpanningState } from "../models/rowspan.
|
|
4
|
-
import { Virtualization } from "./virtualization/index.
|
|
2
|
+
import type { BaseState, ParamsWithDefaults } from "../useVirtualizer.mjs";
|
|
3
|
+
import type { RowSpanningState } from "../models/rowspan.mjs";
|
|
4
|
+
import { Virtualization } from "./virtualization/index.mjs";
|
|
5
5
|
export declare const Rowspan: {
|
|
6
6
|
initialize: typeof initializeState;
|
|
7
7
|
use: typeof useRowspan;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { Store } from '@mui/x-internals/store';
|
|
3
|
-
import { Dimensions } from "../dimensions.
|
|
4
|
-
import { Virtualization, type VirtualizationLayoutParams } from "./virtualization.
|
|
5
|
-
import type { BaseState, ParamsWithDefaults } from "../../useVirtualizer.
|
|
3
|
+
import { Dimensions } from "../dimensions.mjs";
|
|
4
|
+
import { Virtualization, type VirtualizationLayoutParams } from "./virtualization.mjs";
|
|
5
|
+
import type { BaseState, ParamsWithDefaults } from "../../useVirtualizer.mjs";
|
|
6
6
|
type RequiredAPI = Dimensions.API;
|
|
7
7
|
type BaseElements = {
|
|
8
8
|
scroller: React.RefObject<HTMLElement | null>;
|
|
@@ -48,18 +48,18 @@ export declare class LayoutDataGrid extends Layout<DataGridElements> {
|
|
|
48
48
|
scrollbarHorizontalProps: (args_0: Virtualization.State<Layout<AnyElements>> & Dimensions.State) => {
|
|
49
49
|
ref: any;
|
|
50
50
|
scrollPosition: {
|
|
51
|
-
current: import("../../models/index.
|
|
51
|
+
current: import("../../models/index.mjs").ScrollPosition;
|
|
52
52
|
};
|
|
53
53
|
};
|
|
54
54
|
scrollbarVerticalProps: (args_0: Virtualization.State<Layout<AnyElements>> & Dimensions.State) => {
|
|
55
55
|
ref: any;
|
|
56
56
|
scrollPosition: {
|
|
57
|
-
current: import("../../models/index.
|
|
57
|
+
current: import("../../models/index.mjs").ScrollPosition;
|
|
58
58
|
};
|
|
59
59
|
};
|
|
60
60
|
scrollAreaProps: (args_0: Virtualization.State<Layout<AnyElements>> & Dimensions.State) => {
|
|
61
61
|
scrollPosition: {
|
|
62
|
-
current: import("../../models/index.
|
|
62
|
+
current: import("../../models/index.mjs").ScrollPosition;
|
|
63
63
|
};
|
|
64
64
|
};
|
|
65
65
|
};
|
|
@@ -90,18 +90,18 @@ export declare class LayoutDataGridLegacy extends LayoutDataGrid {
|
|
|
90
90
|
getScrollbarVerticalProps: () => {
|
|
91
91
|
ref: any;
|
|
92
92
|
scrollPosition: {
|
|
93
|
-
current: import("../../models/index.
|
|
93
|
+
current: import("../../models/index.mjs").ScrollPosition;
|
|
94
94
|
};
|
|
95
95
|
};
|
|
96
96
|
getScrollbarHorizontalProps: () => {
|
|
97
97
|
ref: any;
|
|
98
98
|
scrollPosition: {
|
|
99
|
-
current: import("../../models/index.
|
|
99
|
+
current: import("../../models/index.mjs").ScrollPosition;
|
|
100
100
|
};
|
|
101
101
|
};
|
|
102
102
|
getScrollAreaProps: () => {
|
|
103
103
|
scrollPosition: {
|
|
104
|
-
current: import("../../models/index.
|
|
104
|
+
current: import("../../models/index.mjs").ScrollPosition;
|
|
105
105
|
};
|
|
106
106
|
};
|
|
107
107
|
};
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
'use client';
|
|
2
3
|
|
|
3
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
4
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
5
6
|
Object.defineProperty(exports, "__esModule", {
|
|
6
7
|
value: true
|
|
7
8
|
});
|
|
8
9
|
exports.LayoutList = exports.LayoutDataGridLegacy = exports.LayoutDataGrid = exports.Layout = void 0;
|
|
10
|
+
var React = _interopRequireWildcard(require("react"));
|
|
9
11
|
var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
|
|
10
12
|
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
|
|
11
13
|
var platform = _interopRequireWildcard(require("@mui/x-internals/platform"));
|
|
12
14
|
var _store = require("@mui/x-internals/store");
|
|
13
15
|
var _dimensions = require("../../features/dimensions");
|
|
14
16
|
var _virtualization = require("./virtualization");
|
|
17
|
+
var _useRefCallback = _interopRequireDefault(require("../../utils/useRefCallback"));
|
|
15
18
|
/* eslint-disable react-hooks/rules-of-hooks */
|
|
16
19
|
|
|
17
20
|
class Layout {
|
|
@@ -35,8 +38,8 @@ class LayoutDataGrid extends Layout {
|
|
|
35
38
|
scrollerRef,
|
|
36
39
|
containerRef
|
|
37
40
|
} = layoutParams;
|
|
38
|
-
const scrollbarVerticalRef = (
|
|
39
|
-
const scrollbarHorizontalRef = (
|
|
41
|
+
const scrollbarVerticalRef = useScrollbarRefCallback(this.refs.scroller, this.refSetter('scrollbarVertical'), 'scrollTop');
|
|
42
|
+
const scrollbarHorizontalRef = useScrollbarRefCallback(this.refs.scroller, this.refSetter('scrollbarHorizontal'), 'scrollLeft');
|
|
40
43
|
store.state.virtualization.context = {
|
|
41
44
|
scrollerRef,
|
|
42
45
|
containerRef,
|
|
@@ -51,8 +54,10 @@ class LayoutDataGrid extends Layout {
|
|
|
51
54
|
scrollerProps: (0, _store.createSelectorMemoized)(_virtualization.Virtualization.selectors.context, _dimensions.Dimensions.selectors.autoHeight, _dimensions.Dimensions.selectors.needsHorizontalScrollbar, (context, autoHeight, needsHorizontalScrollbar) => ({
|
|
52
55
|
ref: context.scrollerRef,
|
|
53
56
|
style: {
|
|
57
|
+
// TODO: fall back to overflow: 'auto' if no overflowX or overflowY is set?
|
|
54
58
|
overflowX: !needsHorizontalScrollbar ? 'hidden' : undefined,
|
|
55
59
|
overflowY: autoHeight ? 'hidden' : undefined
|
|
60
|
+
// TODO: should include display: 'flex', flexDirection: 'column' since the Content has flexBasis and flexShrink?
|
|
56
61
|
},
|
|
57
62
|
role: 'presentation',
|
|
58
63
|
// `tabIndex` shouldn't be used along role=presentation, but it fixes a Firefox bug
|
|
@@ -160,4 +165,55 @@ class LayoutList extends Layout {
|
|
|
160
165
|
}))
|
|
161
166
|
};
|
|
162
167
|
}
|
|
163
|
-
exports.LayoutList = LayoutList;
|
|
168
|
+
exports.LayoutList = LayoutList;
|
|
169
|
+
function useScrollbarRefCallback(scrollerRef, refSetter, scrollProperty) {
|
|
170
|
+
const isLocked = React.useRef(false);
|
|
171
|
+
const lastPosition = React.useRef(0);
|
|
172
|
+
const handleScrollerScroll = (0, _useEventCallback.default)(scrollbar => {
|
|
173
|
+
const scroller = scrollerRef.current;
|
|
174
|
+
if (!scroller) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
const scrollerPosition = scroller[scrollProperty];
|
|
178
|
+
if (scrollerPosition === lastPosition.current) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
lastPosition.current = scrollerPosition;
|
|
182
|
+
if (isLocked.current) {
|
|
183
|
+
isLocked.current = false;
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
isLocked.current = true;
|
|
187
|
+
scrollbar[scrollProperty] = scrollerPosition;
|
|
188
|
+
});
|
|
189
|
+
const handleScrollbarScroll = (0, _useEventCallback.default)(scrollbar => {
|
|
190
|
+
const scroller = scrollerRef.current;
|
|
191
|
+
if (!scroller) {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
if (isLocked.current) {
|
|
195
|
+
isLocked.current = false;
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
isLocked.current = true;
|
|
199
|
+
scroller[scrollProperty] = scrollbar[scrollProperty];
|
|
200
|
+
});
|
|
201
|
+
return (0, _useRefCallback.default)(scrollbar => {
|
|
202
|
+
refSetter(scrollbar);
|
|
203
|
+
const scroller = scrollerRef.current;
|
|
204
|
+
if (!scroller) {
|
|
205
|
+
return undefined;
|
|
206
|
+
}
|
|
207
|
+
const onScrollerScroll = () => handleScrollerScroll(scrollbar);
|
|
208
|
+
const onScrollbarScroll = () => handleScrollbarScroll(scrollbar);
|
|
209
|
+
const options = {
|
|
210
|
+
passive: true
|
|
211
|
+
};
|
|
212
|
+
scroller.addEventListener('scroll', onScrollerScroll, options);
|
|
213
|
+
scrollbar.addEventListener('scroll', onScrollbarScroll, options);
|
|
214
|
+
return () => {
|
|
215
|
+
scroller.removeEventListener('scroll', onScrollerScroll);
|
|
216
|
+
scrollbar.removeEventListener('scroll', onScrollbarScroll);
|
|
217
|
+
};
|
|
218
|
+
});
|
|
219
|
+
}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import * as React from 'react';
|
|
1
4
|
import useForkRef from '@mui/utils/useForkRef';
|
|
2
5
|
import useEventCallback from '@mui/utils/useEventCallback';
|
|
3
6
|
import * as platform from '@mui/x-internals/platform';
|
|
4
7
|
import { createSelectorMemoized } from '@mui/x-internals/store';
|
|
5
|
-
import { Dimensions } from "../dimensions.
|
|
6
|
-
import { Virtualization } from "./virtualization.
|
|
8
|
+
import { Dimensions } from "../dimensions.mjs";
|
|
9
|
+
import { Virtualization } from "./virtualization.mjs";
|
|
10
|
+
import useRefCallback from "../../utils/useRefCallback.mjs";
|
|
7
11
|
|
|
8
12
|
/* eslint-disable react-hooks/rules-of-hooks */
|
|
9
13
|
|
|
@@ -27,8 +31,8 @@ export class LayoutDataGrid extends Layout {
|
|
|
27
31
|
scrollerRef,
|
|
28
32
|
containerRef
|
|
29
33
|
} = layoutParams;
|
|
30
|
-
const scrollbarVerticalRef =
|
|
31
|
-
const scrollbarHorizontalRef =
|
|
34
|
+
const scrollbarVerticalRef = useScrollbarRefCallback(this.refs.scroller, this.refSetter('scrollbarVertical'), 'scrollTop');
|
|
35
|
+
const scrollbarHorizontalRef = useScrollbarRefCallback(this.refs.scroller, this.refSetter('scrollbarHorizontal'), 'scrollLeft');
|
|
32
36
|
store.state.virtualization.context = {
|
|
33
37
|
scrollerRef,
|
|
34
38
|
containerRef,
|
|
@@ -43,8 +47,10 @@ export class LayoutDataGrid extends Layout {
|
|
|
43
47
|
scrollerProps: createSelectorMemoized(Virtualization.selectors.context, Dimensions.selectors.autoHeight, Dimensions.selectors.needsHorizontalScrollbar, (context, autoHeight, needsHorizontalScrollbar) => ({
|
|
44
48
|
ref: context.scrollerRef,
|
|
45
49
|
style: {
|
|
50
|
+
// TODO: fall back to overflow: 'auto' if no overflowX or overflowY is set?
|
|
46
51
|
overflowX: !needsHorizontalScrollbar ? 'hidden' : undefined,
|
|
47
52
|
overflowY: autoHeight ? 'hidden' : undefined
|
|
53
|
+
// TODO: should include display: 'flex', flexDirection: 'column' since the Content has flexBasis and flexShrink?
|
|
48
54
|
},
|
|
49
55
|
role: 'presentation',
|
|
50
56
|
// `tabIndex` shouldn't be used along role=presentation, but it fixes a Firefox bug
|
|
@@ -149,4 +155,55 @@ export class LayoutList extends Layout {
|
|
|
149
155
|
}
|
|
150
156
|
}))
|
|
151
157
|
}))();
|
|
158
|
+
}
|
|
159
|
+
function useScrollbarRefCallback(scrollerRef, refSetter, scrollProperty) {
|
|
160
|
+
const isLocked = React.useRef(false);
|
|
161
|
+
const lastPosition = React.useRef(0);
|
|
162
|
+
const handleScrollerScroll = useEventCallback(scrollbar => {
|
|
163
|
+
const scroller = scrollerRef.current;
|
|
164
|
+
if (!scroller) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
const scrollerPosition = scroller[scrollProperty];
|
|
168
|
+
if (scrollerPosition === lastPosition.current) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
lastPosition.current = scrollerPosition;
|
|
172
|
+
if (isLocked.current) {
|
|
173
|
+
isLocked.current = false;
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
isLocked.current = true;
|
|
177
|
+
scrollbar[scrollProperty] = scrollerPosition;
|
|
178
|
+
});
|
|
179
|
+
const handleScrollbarScroll = useEventCallback(scrollbar => {
|
|
180
|
+
const scroller = scrollerRef.current;
|
|
181
|
+
if (!scroller) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
if (isLocked.current) {
|
|
185
|
+
isLocked.current = false;
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
isLocked.current = true;
|
|
189
|
+
scroller[scrollProperty] = scrollbar[scrollProperty];
|
|
190
|
+
});
|
|
191
|
+
return useRefCallback(scrollbar => {
|
|
192
|
+
refSetter(scrollbar);
|
|
193
|
+
const scroller = scrollerRef.current;
|
|
194
|
+
if (!scroller) {
|
|
195
|
+
return undefined;
|
|
196
|
+
}
|
|
197
|
+
const onScrollerScroll = () => handleScrollerScroll(scrollbar);
|
|
198
|
+
const onScrollbarScroll = () => handleScrollbarScroll(scrollbar);
|
|
199
|
+
const options = {
|
|
200
|
+
passive: true
|
|
201
|
+
};
|
|
202
|
+
scroller.addEventListener('scroll', onScrollerScroll, options);
|
|
203
|
+
scrollbar.addEventListener('scroll', onScrollbarScroll, options);
|
|
204
|
+
return () => {
|
|
205
|
+
scroller.removeEventListener('scroll', onScrollerScroll);
|
|
206
|
+
scrollbar.removeEventListener('scroll', onScrollbarScroll);
|
|
207
|
+
};
|
|
208
|
+
});
|
|
152
209
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import type { integer } from '@mui/x-internals/types';
|
|
3
3
|
import { Store } from '@mui/x-internals/store';
|
|
4
|
-
import type { CellColSpanInfo } from "../../models/colspan.
|
|
5
|
-
import { Dimensions } from "../dimensions.
|
|
6
|
-
import type { BaseState, ParamsWithDefaults } from "../../useVirtualizer.
|
|
7
|
-
import type { Layout } from "./layout.
|
|
8
|
-
import { RenderContext, ColumnsRenderContext, ColumnWithWidth, RowId, ScrollPosition } from "../../models/index.
|
|
4
|
+
import type { CellColSpanInfo } from "../../models/colspan.mjs";
|
|
5
|
+
import { Dimensions } from "../dimensions.mjs";
|
|
6
|
+
import type { BaseState, ParamsWithDefaults } from "../../useVirtualizer.mjs";
|
|
7
|
+
import type { Layout } from "./layout.mjs";
|
|
8
|
+
import { RenderContext, ColumnsRenderContext, ColumnWithWidth, RowId, ScrollPosition } from "../../models/index.mjs";
|
|
9
9
|
export type VirtualizationParams = {
|
|
10
10
|
/** @default false */
|
|
11
11
|
isRtl?: boolean;
|
|
@@ -10,6 +10,7 @@ exports.Virtualization = exports.EMPTY_RENDER_CONTEXT = void 0;
|
|
|
10
10
|
exports.areRenderContextsEqual = areRenderContextsEqual;
|
|
11
11
|
exports.computeOffsetLeft = computeOffsetLeft;
|
|
12
12
|
exports.roundToDecimalPlaces = roundToDecimalPlaces;
|
|
13
|
+
var _formatErrorMessage2 = _interopRequireDefault(require("@mui/x-internals/formatErrorMessage"));
|
|
13
14
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
14
15
|
var React = _interopRequireWildcard(require("react"));
|
|
15
16
|
var ReactDOM = _interopRequireWildcard(require("react-dom"));
|
|
@@ -20,7 +21,7 @@ var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedE
|
|
|
20
21
|
var platform = _interopRequireWildcard(require("@mui/x-internals/platform"));
|
|
21
22
|
var _useRunOnce = require("@mui/x-internals/useRunOnce");
|
|
22
23
|
var _store = require("@mui/x-internals/store");
|
|
23
|
-
var
|
|
24
|
+
var _useRefCallback = _interopRequireDefault(require("../../utils/useRefCallback"));
|
|
24
25
|
var _core = require("../../models/core");
|
|
25
26
|
var _dimensions = require("../dimensions");
|
|
26
27
|
var _models = require("../../models");
|
|
@@ -300,11 +301,11 @@ function useVirtualization(store, params, api) {
|
|
|
300
301
|
let virtualRowIndex = -1;
|
|
301
302
|
const focusedVirtualCell = params.focusedVirtualCell?.();
|
|
302
303
|
if (!isPinnedSection && focusedVirtualCell) {
|
|
303
|
-
if (focusedVirtualCell.rowIndex < firstRowToRender) {
|
|
304
|
+
if (focusedVirtualCell.rowIndex < firstRowToRender && focusedVirtualCell.rowIndex >= 0 && focusedVirtualCell.rowIndex < rowModels.length) {
|
|
304
305
|
rowIndexes.unshift(focusedVirtualCell.rowIndex);
|
|
305
306
|
virtualRowIndex = focusedVirtualCell.rowIndex;
|
|
306
307
|
}
|
|
307
|
-
if (focusedVirtualCell.rowIndex > lastRowToRender) {
|
|
308
|
+
if (focusedVirtualCell.rowIndex > lastRowToRender && focusedVirtualCell.rowIndex < rowModels.length) {
|
|
308
309
|
rowIndexes.push(focusedVirtualCell.rowIndex);
|
|
309
310
|
virtualRowIndex = focusedVirtualCell.rowIndex;
|
|
310
311
|
}
|
|
@@ -461,7 +462,7 @@ function useVirtualization(store, params, api) {
|
|
|
461
462
|
}
|
|
462
463
|
}, [layout.refs.scroller, columnsTotalWidth, contentHeight]);
|
|
463
464
|
const isFirstSizing = React.useRef(true);
|
|
464
|
-
const containerRef =
|
|
465
|
+
const containerRef = (0, _useRefCallback.default)(node => {
|
|
465
466
|
layout.refs.container.current = node;
|
|
466
467
|
const unsubscribe = (0, _dimensions.observeRootNode)(node, store, rootSize => {
|
|
467
468
|
if (rootSize.width === 0 && rootSize.height === 0 && store.state.rootSize.height !== 0 && store.state.rootSize.width !== 0) {
|
|
@@ -481,7 +482,7 @@ function useVirtualization(store, params, api) {
|
|
|
481
482
|
layout.refs.container.current = null;
|
|
482
483
|
};
|
|
483
484
|
});
|
|
484
|
-
const scrollerRef =
|
|
485
|
+
const scrollerRef = (0, _useRefCallback.default)(node => {
|
|
485
486
|
layout.refs.scroller.current = node;
|
|
486
487
|
const opts = {
|
|
487
488
|
passive: true
|
|
@@ -513,22 +514,6 @@ function useVirtualization(store, params, api) {
|
|
|
513
514
|
scheduleUpdateRenderContext
|
|
514
515
|
}, createSpanningAPI());
|
|
515
516
|
}
|
|
516
|
-
function useRefCallback(fn) {
|
|
517
|
-
const refCleanup = React.useRef(undefined);
|
|
518
|
-
const refCallback = (0, _useEventCallback.default)(node => {
|
|
519
|
-
if (!node) {
|
|
520
|
-
// Cleanup for R18
|
|
521
|
-
refCleanup.current?.();
|
|
522
|
-
return;
|
|
523
|
-
}
|
|
524
|
-
refCleanup.current = fn(node);
|
|
525
|
-
if (_reactMajor.default >= 19) {
|
|
526
|
-
/* eslint-disable-next-line consistent-return */
|
|
527
|
-
return refCleanup.current;
|
|
528
|
-
}
|
|
529
|
-
});
|
|
530
|
-
return refCallback;
|
|
531
|
-
}
|
|
532
517
|
function inputsSelector(store, params, api, enabledForRows, enabledForColumns) {
|
|
533
518
|
const dimensions = _dimensions.Dimensions.selectors.dimensions(store.state);
|
|
534
519
|
const rows = params.rows;
|
|
@@ -804,7 +789,7 @@ function bufferForDirection(isRtl, direction, rowBufferPx, columnBufferPx, verti
|
|
|
804
789
|
};
|
|
805
790
|
default:
|
|
806
791
|
// eslint unable to figure out enum exhaustiveness
|
|
807
|
-
throw new Error('unreachable');
|
|
792
|
+
throw /* minify-error-disabled */new Error('unreachable');
|
|
808
793
|
}
|
|
809
794
|
}
|
|
810
795
|
function createScrollCache(isRtl, rowBufferPx, columnBufferPx, verticalBuffer, horizontalBuffer) {
|
|
@@ -850,13 +835,13 @@ function getFirstNonSpannedColumnToRender({
|
|
|
850
835
|
/** Placeholder API functions for colspan & rowspan to re-implement */
|
|
851
836
|
function createSpanningAPI() {
|
|
852
837
|
const getCellColSpanInfo = () => {
|
|
853
|
-
throw new Error('Unimplemented: colspan feature is required');
|
|
838
|
+
throw new Error(process.env.NODE_ENV !== "production" ? 'MUI X: Unimplemented: colspan feature is required' : (0, _formatErrorMessage2.default)(200));
|
|
854
839
|
};
|
|
855
840
|
const calculateColSpan = () => {
|
|
856
|
-
throw new Error('Unimplemented: colspan feature is required');
|
|
841
|
+
throw new Error(process.env.NODE_ENV !== "production" ? 'MUI X: Unimplemented: colspan feature is required' : (0, _formatErrorMessage2.default)(200));
|
|
857
842
|
};
|
|
858
843
|
const getHiddenCellsOrigin = () => {
|
|
859
|
-
throw new Error('Unimplemented: rowspan feature is required');
|
|
844
|
+
throw new Error(process.env.NODE_ENV !== "production" ? 'MUI X: Unimplemented: rowspan feature is required' : (0, _formatErrorMessage2.default)(201));
|
|
860
845
|
};
|
|
861
846
|
return {
|
|
862
847
|
getCellColSpanInfo,
|
package/{esm/features/virtualization/virtualization.js → features/virtualization/virtualization.mjs}
RENAMED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
+
import _formatErrorMessage from "@mui/x-internals/formatErrorMessage";
|
|
3
4
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
4
5
|
import * as React from 'react';
|
|
5
6
|
import * as ReactDOM from 'react-dom';
|
|
@@ -10,10 +11,10 @@ import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
|
|
|
10
11
|
import * as platform from '@mui/x-internals/platform';
|
|
11
12
|
import { useRunOnce } from '@mui/x-internals/useRunOnce';
|
|
12
13
|
import { createSelector, useStore, useStoreEffect } from '@mui/x-internals/store';
|
|
13
|
-
import
|
|
14
|
-
import { PinnedRows, PinnedColumns } from "../../models/core.
|
|
15
|
-
import { Dimensions, observeRootNode } from "../dimensions.
|
|
16
|
-
import { ScrollPosition, ScrollDirection } from "../../models/index.
|
|
14
|
+
import useRefCallback from "../../utils/useRefCallback.mjs";
|
|
15
|
+
import { PinnedRows, PinnedColumns } from "../../models/core.mjs";
|
|
16
|
+
import { Dimensions, observeRootNode } from "../dimensions.mjs";
|
|
17
|
+
import { ScrollPosition, ScrollDirection } from "../../models/index.mjs";
|
|
17
18
|
|
|
18
19
|
/* eslint-disable import/export, @typescript-eslint/no-redeclare */
|
|
19
20
|
|
|
@@ -291,11 +292,11 @@ function useVirtualization(store, params, api) {
|
|
|
291
292
|
let virtualRowIndex = -1;
|
|
292
293
|
const focusedVirtualCell = params.focusedVirtualCell?.();
|
|
293
294
|
if (!isPinnedSection && focusedVirtualCell) {
|
|
294
|
-
if (focusedVirtualCell.rowIndex < firstRowToRender) {
|
|
295
|
+
if (focusedVirtualCell.rowIndex < firstRowToRender && focusedVirtualCell.rowIndex >= 0 && focusedVirtualCell.rowIndex < rowModels.length) {
|
|
295
296
|
rowIndexes.unshift(focusedVirtualCell.rowIndex);
|
|
296
297
|
virtualRowIndex = focusedVirtualCell.rowIndex;
|
|
297
298
|
}
|
|
298
|
-
if (focusedVirtualCell.rowIndex > lastRowToRender) {
|
|
299
|
+
if (focusedVirtualCell.rowIndex > lastRowToRender && focusedVirtualCell.rowIndex < rowModels.length) {
|
|
299
300
|
rowIndexes.push(focusedVirtualCell.rowIndex);
|
|
300
301
|
virtualRowIndex = focusedVirtualCell.rowIndex;
|
|
301
302
|
}
|
|
@@ -504,22 +505,6 @@ function useVirtualization(store, params, api) {
|
|
|
504
505
|
scheduleUpdateRenderContext
|
|
505
506
|
}, createSpanningAPI());
|
|
506
507
|
}
|
|
507
|
-
function useRefCallback(fn) {
|
|
508
|
-
const refCleanup = React.useRef(undefined);
|
|
509
|
-
const refCallback = useEventCallback(node => {
|
|
510
|
-
if (!node) {
|
|
511
|
-
// Cleanup for R18
|
|
512
|
-
refCleanup.current?.();
|
|
513
|
-
return;
|
|
514
|
-
}
|
|
515
|
-
refCleanup.current = fn(node);
|
|
516
|
-
if (reactMajor >= 19) {
|
|
517
|
-
/* eslint-disable-next-line consistent-return */
|
|
518
|
-
return refCleanup.current;
|
|
519
|
-
}
|
|
520
|
-
});
|
|
521
|
-
return refCallback;
|
|
522
|
-
}
|
|
523
508
|
function inputsSelector(store, params, api, enabledForRows, enabledForColumns) {
|
|
524
509
|
const dimensions = Dimensions.selectors.dimensions(store.state);
|
|
525
510
|
const rows = params.rows;
|
|
@@ -795,7 +780,7 @@ function bufferForDirection(isRtl, direction, rowBufferPx, columnBufferPx, verti
|
|
|
795
780
|
};
|
|
796
781
|
default:
|
|
797
782
|
// eslint unable to figure out enum exhaustiveness
|
|
798
|
-
throw new Error('unreachable');
|
|
783
|
+
throw /* minify-error-disabled */new Error('unreachable');
|
|
799
784
|
}
|
|
800
785
|
}
|
|
801
786
|
function createScrollCache(isRtl, rowBufferPx, columnBufferPx, verticalBuffer, horizontalBuffer) {
|
|
@@ -841,13 +826,13 @@ function getFirstNonSpannedColumnToRender({
|
|
|
841
826
|
/** Placeholder API functions for colspan & rowspan to re-implement */
|
|
842
827
|
function createSpanningAPI() {
|
|
843
828
|
const getCellColSpanInfo = () => {
|
|
844
|
-
throw new Error('Unimplemented: colspan feature is required');
|
|
829
|
+
throw new Error(process.env.NODE_ENV !== "production" ? 'MUI X: Unimplemented: colspan feature is required' : _formatErrorMessage(200));
|
|
845
830
|
};
|
|
846
831
|
const calculateColSpan = () => {
|
|
847
|
-
throw new Error('Unimplemented: colspan feature is required');
|
|
832
|
+
throw new Error(process.env.NODE_ENV !== "production" ? 'MUI X: Unimplemented: colspan feature is required' : _formatErrorMessage(200));
|
|
848
833
|
};
|
|
849
834
|
const getHiddenCellsOrigin = () => {
|
|
850
|
-
throw new Error('Unimplemented: rowspan feature is required');
|
|
835
|
+
throw new Error(process.env.NODE_ENV !== "production" ? 'MUI X: Unimplemented: rowspan feature is required' : _formatErrorMessage(201));
|
|
851
836
|
};
|
|
852
837
|
return {
|
|
853
838
|
getCellColSpanInfo,
|
package/index.d.mts
ADDED
package/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @mui/x-virtualizer
|
|
2
|
+
* @mui/x-virtualizer v1.0.0-alpha.1
|
|
3
3
|
*
|
|
4
4
|
* @license MIT
|
|
5
5
|
* This source code is licensed under the MIT license found in the
|
|
6
6
|
* LICENSE file in the root directory of this source tree.
|
|
7
7
|
*/
|
|
8
|
-
export * from "./useVirtualizer.
|
|
9
|
-
export * from "./features/index.
|
|
10
|
-
export * from "./constants.
|
|
8
|
+
export * from "./useVirtualizer.mjs";
|
|
9
|
+
export * from "./features/index.mjs";
|
|
10
|
+
export * from "./constants.mjs";
|
package/models/index.mjs
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mui/x-virtualizer",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0-alpha.1",
|
|
4
4
|
"author": "MUI Team",
|
|
5
5
|
"description": "MUI virtualization library",
|
|
6
6
|
"license": "MIT",
|
|
@@ -27,9 +27,9 @@
|
|
|
27
27
|
"directory": "packages/x-virtualizer"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@babel/runtime": "^7.28.
|
|
31
|
-
"@mui/utils": "^7.3.
|
|
32
|
-
"@mui/x-internals": "
|
|
30
|
+
"@babel/runtime": "^7.28.6",
|
|
31
|
+
"@mui/utils": "^7.3.7",
|
|
32
|
+
"@mui/x-internals": "9.0.0-alpha.2"
|
|
33
33
|
},
|
|
34
34
|
"peerDependencies": {
|
|
35
35
|
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
|
@@ -39,40 +39,65 @@
|
|
|
39
39
|
"node": ">=14.0.0"
|
|
40
40
|
},
|
|
41
41
|
"type": "commonjs",
|
|
42
|
-
"main": "./index.js",
|
|
43
|
-
"types": "./index.d.ts",
|
|
44
42
|
"exports": {
|
|
45
43
|
"./package.json": "./package.json",
|
|
46
44
|
".": {
|
|
45
|
+
"import": {
|
|
46
|
+
"types": "./index.d.mts",
|
|
47
|
+
"default": "./index.mjs"
|
|
48
|
+
},
|
|
47
49
|
"require": {
|
|
48
50
|
"types": "./index.d.ts",
|
|
49
51
|
"default": "./index.js"
|
|
50
52
|
},
|
|
51
53
|
"default": {
|
|
52
|
-
"types": "./
|
|
53
|
-
"default": "./
|
|
54
|
+
"types": "./index.d.mts",
|
|
55
|
+
"default": "./index.mjs"
|
|
54
56
|
}
|
|
55
57
|
},
|
|
56
58
|
"./useVirtualizer": {
|
|
59
|
+
"import": {
|
|
60
|
+
"types": "./useVirtualizer.d.mts",
|
|
61
|
+
"default": "./useVirtualizer.mjs"
|
|
62
|
+
},
|
|
57
63
|
"require": {
|
|
58
64
|
"types": "./useVirtualizer.d.ts",
|
|
59
65
|
"default": "./useVirtualizer.js"
|
|
60
66
|
},
|
|
61
67
|
"default": {
|
|
62
|
-
"types": "./
|
|
63
|
-
"default": "./
|
|
68
|
+
"types": "./useVirtualizer.d.mts",
|
|
69
|
+
"default": "./useVirtualizer.mjs"
|
|
64
70
|
}
|
|
65
71
|
},
|
|
66
|
-
"
|
|
72
|
+
"./features": {
|
|
73
|
+
"import": {
|
|
74
|
+
"types": "./features/index.d.mts",
|
|
75
|
+
"default": "./features/index.mjs"
|
|
76
|
+
},
|
|
67
77
|
"require": {
|
|
68
|
-
"types": "
|
|
69
|
-
"default": "
|
|
78
|
+
"types": "./features/index.d.ts",
|
|
79
|
+
"default": "./features/index.js"
|
|
70
80
|
},
|
|
71
81
|
"default": {
|
|
72
|
-
"types": "./
|
|
73
|
-
"default": "./
|
|
82
|
+
"types": "./features/index.d.mts",
|
|
83
|
+
"default": "./features/index.mjs"
|
|
74
84
|
}
|
|
75
85
|
},
|
|
76
|
-
"./
|
|
77
|
-
|
|
86
|
+
"./models": {
|
|
87
|
+
"import": {
|
|
88
|
+
"types": "./models/index.d.mts",
|
|
89
|
+
"default": "./models/index.mjs"
|
|
90
|
+
},
|
|
91
|
+
"require": {
|
|
92
|
+
"types": "./models/index.d.ts",
|
|
93
|
+
"default": "./models/index.js"
|
|
94
|
+
},
|
|
95
|
+
"default": {
|
|
96
|
+
"types": "./models/index.d.mts",
|
|
97
|
+
"default": "./models/index.mjs"
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
"main": "./index.js",
|
|
102
|
+
"types": "./index.d.ts"
|
|
78
103
|
}
|