@mui/x-data-grid-pro 9.0.0-alpha.4 → 9.0.0-rc.0

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 CHANGED
@@ -1,5 +1,265 @@
1
1
  # Changelog
2
2
 
3
+ ## 9.0.0-rc.0
4
+
5
+ <!-- generated comparing v9.0.0-beta.0..master -->
6
+
7
+ _Apr 7, 2026_
8
+
9
+ We'd like to extend a big thank you to the 18 contributors who made this release possible.
10
+
11
+ Special thanks go out to these community members for their valuable contributions:
12
+ @mixelburg, @sibananda485, @youjin-hong
13
+
14
+ The following team members contributed to this release:
15
+ @aemartos, @alexfauquette, @arminmeh, @brijeshb42, @flaviendelangle, @JCQuintas, @LukasTy, @mapache-salvaje, @MBilalShafi, @michelengelen, @noraleonte, @rita-codes, @romgrk, @siriwatknp, @ZeeshanTamboli
16
+
17
+ ### Data Grid
18
+
19
+ #### `@mui/x-data-grid@9.0.0-rc.0`
20
+
21
+ - [DataGrid] Rename filter panel `Columns` label to singular `Column` (#21935) @youjin-hong
22
+ - [DataGrid] Export `GridColumnUnsortedIconProps` for custom column icon slots (#21658) @mixelburg
23
+ - [DataGrid] Remove `x-virtualizer`'s `virtualScroller` from public API (#21936) @romgrk
24
+ - [DataGrid][virtualizer] Scrolling without render gaps (#21616) @romgrk
25
+
26
+ #### `@mui/x-data-grid-pro@9.0.0-rc.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
27
+
28
+ Same changes as in `@mui/x-data-grid@9.0.0-rc.0`, plus:
29
+
30
+ - [DataGridPro] Improve trigger for nested row reordering (#21642) @MBilalShafi
31
+ - [DataGridPro] Undeprecate `onRowsScrollEnd` prop (#21912) @MBilalShafi
32
+
33
+ #### `@mui/x-data-grid-premium@9.0.0-rc.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
34
+
35
+ Same changes as in `@mui/x-data-grid-pro@9.0.0-rc.0`, plus:
36
+
37
+ - [DataGridPremium] Fix clipboard paste issue in portal (#21931) @sibananda485
38
+
39
+ ### Date and Time Pickers
40
+
41
+ #### Breaking changes
42
+
43
+ - Accessible DOM structure is now the only default. [Read more](https://next.mui.com/x/migration/migration-pickers-v8/#accessible-dom-structure-is-now-the-default)
44
+ - The `PickerDay2` and `DateRangePickerDay2` components were propagated to stable while removing the previous defaults. [Read more](https://next.mui.com/x/migration/migration-pickers-v8/#day-slot)
45
+
46
+ #### `@mui/x-date-pickers@9.0.0-rc.0`
47
+
48
+ - [pickers] Remove `PickersDay` and `DateRangePickerDay` and promote their `2` versions as replacements (#21739) @michelengelen
49
+
50
+ #### `@mui/x-date-pickers-pro@9.0.0-rc.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
51
+
52
+ Same changes as in `@mui/x-date-pickers@9.0.0-rc.0`.
53
+
54
+ ### Charts
55
+
56
+ #### `@mui/x-charts@9.0.0-rc.0.0`
57
+
58
+ - [charts] Make line visibility toggle start from the baseline (#21893) @alexfauquette
59
+ - [charts] Remove the container overflow (#21955) @alexfauquette
60
+ - [charts] Revert `theme.alpha` for non-channel token (#21965) @siriwatknp
61
+
62
+ #### `@mui/x-charts-pro@9.0.0-rc.0.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
63
+
64
+ Same changes as in `@mui/x-charts@9.0.0-rc.0.0`, plus:
65
+
66
+ - [charts-pro] Zoom slider touch improvements (#21832) @JCQuintas
67
+ - [charts-pro] Add `seriesIds` filter to zoom slider preview (#21933) @JCQuintas
68
+ - [charts-pro] Fix zoom slider preview with discard filter mode (#21883) @JCQuintas
69
+
70
+ #### `@mui/x-charts-premium@9.0.0-rc.0.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
71
+
72
+ Same changes as in `@mui/x-charts-pro@9.0.0-rc.0.0`, plus:
73
+
74
+ - [charts-premium] Add series `valueFormatter` to candlestick chart (#21905) @JCQuintas
75
+ - [charts-premium] Add zoom slider preview support for candlestick charts (#21914) @JCQuintas
76
+ - [charts-premium] Allow color customization in `Candlestick` chart (#21838) @JCQuintas
77
+ - [charts-premium] Support hide/show for OHLC (candlestick) series (#21807) @Copilot
78
+ - [charts-premium] Add `dataset` support to `Candlestick` chart (#21872) @JCQuintas
79
+ - [charts-premium] Add candlestick page to sidebar navigation (#21834) @JCQuintas
80
+
81
+ ### Tree View
82
+
83
+ #### `@mui/x-tree-view@9.0.0-rc.0`
84
+
85
+ Internal changes.
86
+
87
+ #### `@mui/x-tree-view-pro@9.0.0-rc.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
88
+
89
+ Same changes as in `@mui/x-tree-view@9.0.0-rc.0`, plus:
90
+
91
+ - [RichTreeViewPro] Allow to auto-expand lazy loaded items (#21759) @flaviendelangle
92
+
93
+ ### Scheduler
94
+
95
+ #### `@mui/x-scheduler@9.0.0-alpha.0`
96
+
97
+ - [scheduler] Add locale files, adapt l10n scripts, and add localization table to docs (#21870) @rita-codes
98
+ - [scheduler] Add planned features to the docs (#21705) @rita-codes
99
+ - [scheduler] Add scheduler to docs introduction (#21845) @rita-codes
100
+ - [scheduler] Add wide docs to scheduler (#21860) @noraleonte
101
+ - [scheduler] All day event bugfixes (#21884) @noraleonte
102
+ - [scheduler] Autofocus title field (#21947) @noraleonte
103
+ - [scheduler] Change default event creation trigger to single click (#21979) @rita-codes
104
+ - [scheduler] Change order of the views on the view selector (#21904) @rita-codes
105
+ - [scheduler] Disabled border color for the repeat day picker in dark mode (#21987) @rita-codes
106
+ - [scheduler] Drop unused dependency (#21956) @flaviendelangle
107
+ - [scheduler] Fix all-day event shifting to previous day in negative UTC offsets (#21994) @rita-codes
108
+ - [scheduler] Fix dark theme localization demos (#21992) @noraleonte
109
+ - [scheduler] Fix licensing confusion in docs (#21939) @rita-codes
110
+ - [scheduler] Fix preferences menu width shift when toggling options + Improve preferences menu accessibility (#21902) @rita-codes
111
+ - [scheduler] Prepare for the alpha launch (#21859) @rita-codes
112
+ - [scheduler] Sync Base UI internals and apply good practices (#21946) @flaviendelangle
113
+ - [scheduler] Update close modal aria label translation (#21940) @rita-codes
114
+ - [scheduler] Add Spanish (es-ES) locale (#21900) @rita-codes
115
+ - [scheduler] Improve French (fr-FR) locale (#21941) @rita-codes
116
+ - [scheduler] Improve Romanian (ro-RO) locale (#21942) @rita-codes
117
+
118
+ #### `@mui/x-scheduler-premium@9.0.0-alpha.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
119
+
120
+ Same changes as in `@mui/x-scheduler@9.0.0-alpha.0`.
121
+
122
+ ### Codemod
123
+
124
+ #### `@mui/x-codemod@9.0.0-rc.0`
125
+
126
+ Internal changes.
127
+
128
+ ### Docs
129
+
130
+ - [docs] Fix JSDOM → jsdom casing (#21907) @JCQuintas
131
+ - [docs] Remove Joy UI references and dependency (#21937) @siriwatknp
132
+ - [docs] Remove none generated files (#21886) @alexfauquette
133
+ - [docs] Remove unused interactive demo code (#21945) @LukasTy
134
+ - [docs] Revise the Funnel doc (#21677) @mapache-salvaje
135
+ - [docs] Revise the Line chart docs (#21554) @mapache-salvaje
136
+ - [docs] Revise the Radar doc (#21674) @mapache-salvaje
137
+ - [docs] Revise the Sankey doc (#21678) @mapache-salvaje
138
+ - [docs] Revise the Scatter chart docs (#21564) @mapache-salvaje
139
+
140
+ ### Core
141
+
142
+ - [docs-infra] Update to the latest monorepo (#21971) @brijeshb42
143
+ - [internal] Remove checks for `materialVersion >= 6` (#21975) @LukasTy
144
+
145
+ ### Miscellaneous
146
+
147
+ - [core] Bump @mui/material to v9.0.0-beta.1 (#21858) @siriwatknp
148
+ - [core] Update browserslistrc (#21974) @siriwatknp
149
+ - [deps] Bump minimum core packages to 7.3.0 to adopt theme color manipulator (#21892) @siriwatknp
150
+ - [telemetry] Prefer upstream remote over origin for `projectId` (#21882) @aemartos
151
+ - [telemetry] Send `repoHash`, `[x]packageNameHash`, and `rootPathHash` alongside `projectId` (#21896) @aemartos
152
+ - [test] Exclude flaky `DataGrid` argos test (#21977) @MBilalShafi
153
+ - [test] Fix flaky `DataGrid` test (#22000) @arminmeh
154
+ - [test] Remove `componentsProp` test from `describeConformance` (#21897) @ZeeshanTamboli
155
+ - [x-license] Change `orderId` type from `number` to `string` (#21885) @aemartos
156
+
157
+ ## 9.0.0-beta.0
158
+
159
+ <!-- generated comparing v9.0.0-alpha.4..master -->
160
+
161
+ _Mar 27, 2026_
162
+
163
+ We'd like to extend a big thank you to the 10 contributors who made this release possible. Here are some highlights ✨:
164
+
165
+ - 🔊 New Charts voiceover component for improved screen reader support
166
+ - ⌨️ Charts keyboard navigation improvements: axis tooltip now shows when navigating with the keyboard
167
+ - 📊 Charts axes now can be set to automatically resize to fit their content
168
+ - 📝 New `rowCheckbox` slot in Data Grid for easier checkbox column customization
169
+ - ⚡️ `fetchRows()` API in Data Grid Pro now defaults `start` and `end` based on scroll position with lazy loading
170
+ - 🐞 Bugfixes and internal improvements
171
+
172
+ The following team members contributed to this release:
173
+ @aemartos, @alexfauquette, @arminmeh, @cherniavskii, @Janpot, @JCQuintas, @mapache-salvaje, @michelengelen, @noraleonte, @rita-codes
174
+
175
+ ### Data Grid
176
+
177
+ #### `@mui/x-data-grid@9.0.0-beta.0`
178
+
179
+ - [DataGrid] Add `rowCheckbox` slot for easier customization (#21797) @michelengelen
180
+ - [DataGrid] Prevent repeated `hasScrollbar` state updates (#21820) @arminmeh
181
+
182
+ #### `@mui/x-data-grid-pro@9.0.0-beta.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
183
+
184
+ Same changes as in `@mui/x-data-grid@9.0.0-beta.0`, plus:
185
+
186
+ - [DataGridPro] `fetchRows()` API's default `start` and `end` params based on scroll position with lazy loading (#21742) @arminmeh
187
+
188
+ #### `@mui/x-data-grid-premium@9.0.0-beta.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
189
+
190
+ Same changes as in `@mui/x-data-grid-pro@9.0.0-beta.0`.
191
+
192
+ ### Date and Time Pickers
193
+
194
+ #### `@mui/x-date-pickers@9.0.0-beta.0`
195
+
196
+ Internal changes.
197
+
198
+ #### `@mui/x-date-pickers-pro@9.0.0-beta.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
199
+
200
+ Same changes as in `@mui/x-date-pickers@9.0.0-beta.0`.
201
+
202
+ ### Charts
203
+
204
+ #### `@mui/x-charts@9.0.0-beta.0`
205
+
206
+ - [charts] Add `className` prop to Pro chart plot components (#21793) @JCQuintas
207
+ - [charts] Add experimental position-based pointer interaction for line series (#21809) @JCQuintas
208
+ - [charts] Add l10n to the bar accessibility (#21815) @alexfauquette
209
+ - [charts] Add localization for the basic charts (#21822) @alexfauquette
210
+ - [charts] Add voiceover component (#21344) @alexfauquette
211
+ - [charts] Allow axes to automatically resize to content (#21087) @JCQuintas
212
+ - [charts] Document multiple use-cases for references (#21768) @alexfauquette
213
+ - [charts] Remove compatibility layer for React vs native events (#21780) @JCQuintas
214
+ - [charts] Remove deprecated `barLabel` props (#21783) @alexfauquette
215
+ - [charts] Show axis tooltip when navigating with keyboard (#21689) @Copilot
216
+
217
+ #### `@mui/x-charts-pro@9.0.0-beta.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
218
+
219
+ Same changes as in `@mui/x-charts@9.0.0-beta.0`.
220
+
221
+ #### `@mui/x-charts-premium@9.0.0-beta.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
222
+
223
+ Same changes as in `@mui/x-charts-pro@9.0.0-beta.0`.
224
+
225
+ ### Tree View
226
+
227
+ #### `@mui/x-tree-view@9.0.0-alpha.4`
228
+
229
+ Internal changes.
230
+
231
+ #### `@mui/x-tree-view-pro@9.0.0-alpha.4` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
232
+
233
+ Same changes as in `@mui/x-tree-view@9.0.0-alpha.4`.
234
+
235
+ ### Codemod
236
+
237
+ #### `@mui/x-codemod@9.0.0-alpha.4`
238
+
239
+ Internal changes.
240
+
241
+ ### Docs
242
+
243
+ - [docs] Document how to customize voiceover announcement (#21833) @alexfauquette
244
+ - [docs] Remove Discord mention from docs (#21855) @mapache-salvaje
245
+ - [docs] Remove stabilized experimental feature from demo (#21869) @JCQuintas
246
+ - [docs] Update telemetry guide to reflect pseudonymous data collection and license compliance (#21812) @aemartos
247
+ - [docs] Revise the Sparkline doc (#21614) @mapache-salvaje
248
+ - [docs] Revise the Gauge doc (#21673) @mapache-salvaje
249
+ - [docs] Revise the Heatmap doc (#21676) @mapache-salvaje
250
+
251
+ ### Core
252
+
253
+ - [code-infra] Remove unused deps and unify es-toolkit via catalog (#21840) @Janpot
254
+ - [code-infra] Update @mui/internal-bundle-size-checker to canary.68 (#21836) @Janpot
255
+ - [code-infra] Update next (#21837) @Janpot
256
+ - [internal] Remove headless data grid packages (#21843) @cherniavskii
257
+
258
+ ### Miscellaneous
259
+
260
+ - Add @romgrk to CODEOWNERS for `x-virtualizer` and `x-internals` (#21819) @Copilot
261
+ - [x-license] add 2022 plan version (#21814) @aemartos
262
+
3
263
  ## 9.0.0-alpha.4
4
264
 
5
265
  _Mar 19, 2026_
@@ -59,7 +319,7 @@ Same changes as in `@mui/x-date-pickers@9.0.0-alpha.4`.
59
319
  - [charts] Remove deprecated `useMouseTracker()` (#21787) @alexfauquette
60
320
  - [charts] Remove deprecated classes (#21775) @alexfauquette
61
321
  - [charts] Remove deprecated props from PieArcLabel animation (#21789) @alexfauquette
62
- - [charts] Remove get*UtilityClass from public exports (#21769) @JCQuintas
322
+ - [charts] Remove get\*UtilityClass from public exports (#21769) @JCQuintas
63
323
  - [charts] Remove the deprecated `disableHover` property (#21785) @alexfauquette
64
324
  - [charts] Remove the deprecated `message` prop (#21784) @alexfauquette
65
325
  - [charts] Remove deprecated props about voronoi (#21796) @alexfauquette
@@ -207,7 +467,7 @@ Same changes as in `@mui/x-charts-pro@9.0.0-alpha.3`, plus:
207
467
  - Remove deprecated CSS state classes from `treeItemClasses`: `expanded`, `selected`, `focused`, `disabled`, `editable`, `editing` (use `[data-expanded]`, `[data-selected]`, etc.)
208
468
  - The `<RichTreeViewPro />` component has now virtualization enabled by default.
209
469
  - The items used inside the `<RichTreeViewPro />` now have a default height of `32px`.
210
- - The events of the `<RichTreeViewPro />` are now rendered as a flat list instead of a nested tree.
470
+ - The items of the `<RichTreeViewPro />` are now rendered as a flat list instead of a nested tree.
211
471
 
212
472
  #### `@mui/x-tree-view@9.0.0-alpha.3`
213
473
 
@@ -35,8 +35,8 @@ const configuration = {
35
35
  }
36
36
  };
37
37
  const packageInfo = {
38
- releaseDate: "MTc3Mzk2NDgwMDAwMA==",
39
- version: "9.0.0-alpha.4",
38
+ releaseDate: "MTc3NTUyMDAwMDAwMA==",
39
+ version: "9.0.0-rc.0",
40
40
  name: 'x-data-grid-pro'
41
41
  };
42
42
  const watermark = /*#__PURE__*/(0, _jsxRuntime.jsx)(_internals.Watermark, {
@@ -382,6 +382,7 @@ DataGridProRaw.propTypes = {
382
382
  * For each feature, if the flag is not explicitly set to `true`, the feature will be fully disabled and any property / method call will not have any effect.
383
383
  */
384
384
  experimentalFeatures: _propTypes.default.shape({
385
+ virtualizerLayoutMode: _propTypes.default.oneOf(['controlled', 'uncontrolled']),
385
386
  warnIfFocusStateIsNotSynced: _propTypes.default.bool
386
387
  }),
387
388
  /**
@@ -905,7 +906,7 @@ DataGridProRaw.propTypes = {
905
906
  * @param {GridRowScrollEndParams} params With all properties from [[GridRowScrollEndParams]].
906
907
  * @param {MuiEvent<{}>} event The event object.
907
908
  * @param {GridCallbackDetails} details Additional details for this callback.
908
- * @deprecated Use the {@link https://mui.com/x/react-data-grid/server-side-data/lazy-loading/#infinite-loading Server-side data-Infinite loading} instead.
909
+ * Prefer to use {@link https://mui.com/x/react-data-grid/server-side-data/lazy-loading/#infinite-loading Server-side data-Infinite loading} unless it doesn't fulfill your needs.
909
910
  */
910
911
  onRowsScrollEnd: _propTypes.default.func,
911
912
  /**
@@ -28,8 +28,8 @@ const configuration = {
28
28
  }
29
29
  };
30
30
  const packageInfo = {
31
- releaseDate: "MTc3Mzk2NDgwMDAwMA==",
32
- version: "9.0.0-alpha.4",
31
+ releaseDate: "MTc3NTUyMDAwMDAwMA==",
32
+ version: "9.0.0-rc.0",
33
33
  name: 'x-data-grid-pro'
34
34
  };
35
35
  const watermark = /*#__PURE__*/_jsx(Watermark, {
@@ -375,6 +375,7 @@ DataGridProRaw.propTypes = {
375
375
  * For each feature, if the flag is not explicitly set to `true`, the feature will be fully disabled and any property / method call will not have any effect.
376
376
  */
377
377
  experimentalFeatures: PropTypes.shape({
378
+ virtualizerLayoutMode: PropTypes.oneOf(['controlled', 'uncontrolled']),
378
379
  warnIfFocusStateIsNotSynced: PropTypes.bool
379
380
  }),
380
381
  /**
@@ -898,7 +899,7 @@ DataGridProRaw.propTypes = {
898
899
  * @param {GridRowScrollEndParams} params With all properties from [[GridRowScrollEndParams]].
899
900
  * @param {MuiEvent<{}>} event The event object.
900
901
  * @param {GridCallbackDetails} details Additional details for this callback.
901
- * @deprecated Use the {@link https://mui.com/x/react-data-grid/server-side-data/lazy-loading/#infinite-loading Server-side data-Infinite loading} instead.
902
+ * Prefer to use {@link https://mui.com/x/react-data-grid/server-side-data/lazy-loading/#infinite-loading Server-side data-Infinite loading} unless it doesn't fulfill your needs.
902
903
  */
903
904
  onRowsScrollEnd: PropTypes.func,
904
905
  /**
@@ -29,14 +29,12 @@ function GridDetailPanels(props) {
29
29
  }
30
30
  return /*#__PURE__*/React.createElement(GridDetailPanelsImpl, props);
31
31
  }
32
- function GridDetailPanelsImpl({
33
- virtualScroller
34
- }) {
32
+ function GridDetailPanelsImpl(_props) {
35
33
  const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
36
34
  const classes = useUtilityClasses();
37
35
  const {
38
36
  setPanels
39
- } = virtualScroller;
37
+ } = apiRef.current.virtualizer.api.getters;
40
38
  const expandedRowIds = (0, _xDataGrid.useGridSelector)(apiRef, _detailPanel.gridDetailPanelExpandedRowIdsSelector);
41
39
  const detailPanelsContent = (0, _xDataGrid.useGridSelector)(apiRef, _detailPanel.gridDetailPanelExpandedRowsContentCacheSelector);
42
40
  const detailPanelsHeights = (0, _xDataGrid.useGridSelector)(apiRef, _gridDetailPanelSelector.gridDetailPanelRawHeightCacheSelector);
@@ -22,14 +22,12 @@ export function GridDetailPanels(props) {
22
22
  }
23
23
  return /*#__PURE__*/React.createElement(GridDetailPanelsImpl, props);
24
24
  }
25
- function GridDetailPanelsImpl({
26
- virtualScroller
27
- }) {
25
+ function GridDetailPanelsImpl(_props) {
28
26
  const apiRef = useGridPrivateApiContext();
29
27
  const classes = useUtilityClasses();
30
28
  const {
31
29
  setPanels
32
- } = virtualScroller;
30
+ } = apiRef.current.virtualizer.api.getters;
33
31
  const expandedRowIds = useGridSelector(apiRef, gridDetailPanelExpandedRowIdsSelector);
34
32
  const detailPanelsContent = useGridSelector(apiRef, gridDetailPanelExpandedRowsContentCacheSelector);
35
33
  const detailPanelsHeights = useGridSelector(apiRef, gridDetailPanelRawHeightCacheSelector);
@@ -1,5 +1,4 @@
1
1
  import { type GridPinnedRowsProps } from '@mui/x-data-grid/internals';
2
2
  export declare function GridPinnedRows({
3
- position,
4
- virtualScroller
3
+ position
5
4
  }: GridPinnedRowsProps): import("react/jsx-runtime").JSX.Element | null;
@@ -1,5 +1,4 @@
1
1
  import { type GridPinnedRowsProps } from '@mui/x-data-grid/internals';
2
2
  export declare function GridPinnedRows({
3
- position,
4
- virtualScroller
3
+ position
5
4
  }: GridPinnedRowsProps): import("react/jsx-runtime").JSX.Element | null;
@@ -19,8 +19,7 @@ const useUtilityClasses = () => {
19
19
  return (0, _composeClasses.default)(slots, _xDataGrid.getDataGridUtilityClass, {});
20
20
  };
21
21
  function GridPinnedRows({
22
- position,
23
- virtualScroller
22
+ position
24
23
  }) {
25
24
  const classes = useUtilityClasses();
26
25
  const apiRef = (0, _internals.useGridPrivateApiContext)();
@@ -28,7 +27,7 @@ function GridPinnedRows({
28
27
  const rows = pinnedRowsData[position];
29
28
  const {
30
29
  getRows
31
- } = virtualScroller;
30
+ } = apiRef.current.virtualizer.api.getters;
32
31
  const pinnedRenderContext = React.useMemo(() => ({
33
32
  firstRowIndex: 0,
34
33
  lastRowIndex: rows.length,
@@ -11,8 +11,7 @@ const useUtilityClasses = () => {
11
11
  return composeClasses(slots, getDataGridUtilityClass, {});
12
12
  };
13
13
  export function GridPinnedRows({
14
- position,
15
- virtualScroller
14
+ position
16
15
  }) {
17
16
  const classes = useUtilityClasses();
18
17
  const apiRef = useGridPrivateApiContext();
@@ -20,7 +19,7 @@ export function GridPinnedRows({
20
19
  const rows = pinnedRowsData[position];
21
20
  const {
22
21
  getRows
23
- } = virtualScroller;
22
+ } = apiRef.current.virtualizer.api.getters;
24
23
  const pinnedRenderContext = React.useMemo(() => ({
25
24
  firstRowIndex: 0,
26
25
  lastRowIndex: rows.length,
@@ -246,12 +246,13 @@ const GridHeaderFilterCell = (0, _forwardRef.forwardRef)((props, ref) => {
246
246
  onClick: clearFilterItem,
247
247
  disabled: isFilterReadOnly
248
248
  }) : null;
249
+ const pinnedScrollOffset = (0, _internals.usePinnedScrollOffset)(apiRef, pinnedPosition);
249
250
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", (0, _extends2.default)({
250
251
  className: (0, _clsx.default)(classes.root, headerClassName),
251
252
  style: (0, _internals.attachPinnedStyle)((0, _extends2.default)({
252
253
  height,
253
254
  width
254
- }, styleProp), isRtl, pinnedPosition, pinnedOffset),
255
+ }, styleProp), isRtl, pinnedPosition, pinnedOffset !== undefined ? pinnedOffset + pinnedScrollOffset : undefined),
255
256
  role: "columnheader",
256
257
  "aria-colindex": colIndex + 1,
257
258
  "aria-label": headerFilterComponent == null ? colDef.headerName ?? colDef.field : undefined
@@ -13,7 +13,7 @@ import composeClasses from '@mui/utils/composeClasses';
13
13
  import capitalize from '@mui/utils/capitalize';
14
14
  import { fastMemo } from '@mui/x-internals/fastMemo';
15
15
  import { gridVisibleColumnFieldsSelector, getDataGridUtilityClass, useGridSelector, GridFilterInputValue, GridFilterInputDate, GridFilterInputBoolean, GridFilterInputSingleSelect, gridFilterModelSelector, gridFilterableColumnLookupSelector, gridClasses } from '@mui/x-data-grid';
16
- import { PinnedColumnPosition, useGridPrivateApiContext, gridHeaderFilteringEditFieldSelector, gridHeaderFilteringMenuSelector, isNavigationKey, attachPinnedStyle, vars } from '@mui/x-data-grid/internals';
16
+ import { PinnedColumnPosition, useGridPrivateApiContext, gridHeaderFilteringEditFieldSelector, gridHeaderFilteringMenuSelector, isNavigationKey, attachPinnedStyle, usePinnedScrollOffset, vars } from '@mui/x-data-grid/internals';
17
17
  import { useRtl } from '@mui/system/RtlProvider';
18
18
  import { forwardRef } from '@mui/x-internals/forwardRef';
19
19
  import { inputBaseClasses } from '@mui/material/InputBase';
@@ -239,12 +239,13 @@ const GridHeaderFilterCell = forwardRef((props, ref) => {
239
239
  onClick: clearFilterItem,
240
240
  disabled: isFilterReadOnly
241
241
  }) : null;
242
+ const pinnedScrollOffset = usePinnedScrollOffset(apiRef, pinnedPosition);
242
243
  return /*#__PURE__*/_jsxs("div", _extends({
243
244
  className: clsx(classes.root, headerClassName),
244
245
  style: attachPinnedStyle(_extends({
245
246
  height,
246
247
  width
247
- }, styleProp), isRtl, pinnedPosition, pinnedOffset),
248
+ }, styleProp), isRtl, pinnedPosition, pinnedOffset !== undefined ? pinnedOffset + pinnedScrollOffset : undefined),
248
249
  role: "columnheader",
249
250
  "aria-colindex": colIndex + 1,
250
251
  "aria-label": headerFilterComponent == null ? colDef.headerName ?? colDef.field : undefined
@@ -15,9 +15,9 @@ export let RequestStatus = /*#__PURE__*/function (RequestStatus) {
15
15
  * Uses `GridRowId` to uniquely identify a request
16
16
  */
17
17
  export class NestedDataManager {
18
- pendingRequests = (() => new Set())();
19
- queuedRequests = (() => new Set())();
20
- settledRequests = (() => new Set())();
18
+ pendingRequests = new Set();
19
+ queuedRequests = new Set();
20
+ settledRequests = new Set();
21
21
  constructor(privateApiRef, maxConcurrentRequests = MAX_CONCURRENT_REQUESTS) {
22
22
  this.api = privateApiRef.current;
23
23
  this.maxConcurrentRequests = maxConcurrentRequests;
@@ -193,10 +193,10 @@ export function handleProcessRowUpdateError(error, onProcessRowUpdateError) {
193
193
  * ```
194
194
  */
195
195
  export class BatchRowUpdater {
196
- rowsToUpdate = (() => new Map())();
197
- originalRows = (() => new Map())();
198
- successfulRowIds = (() => new Set())();
199
- failedRowIds = (() => new Set())();
196
+ rowsToUpdate = new Map();
197
+ originalRows = new Map();
198
+ successfulRowIds = new Set();
199
+ failedRowIds = new Set();
200
200
  pendingRowUpdates = [];
201
201
  constructor(apiRef, processRowUpdate, onProcessRowUpdateError) {
202
202
  this.apiRef = apiRef;
@@ -1,7 +1,7 @@
1
1
  import type { RefObject } from '@mui/x-internals/types';
2
2
  import type { GridPrivateApiPro } from "../../../models/gridApiPro.mjs";
3
3
  import type { DataGridProProcessedProps } from "../../../models/dataGridProProps.mjs";
4
- export declare const useGridRowsOverridableMethods: (apiRef: RefObject<GridPrivateApiPro>, props: Pick<DataGridProProcessedProps, "processRowUpdate" | "onProcessRowUpdateError" | "setTreeDataPath">) => {
5
- setRowIndex: (rowId: import("@mui/x-data-grid").GridRowId, targetIndex: number) => void;
4
+ export declare const useGridRowsOverridableMethods: (apiRef: RefObject<GridPrivateApiPro>, props: Pick<DataGridProProcessedProps, "processRowUpdate" | "onProcessRowUpdateError" | "setTreeDataPath" | "treeData">) => {
5
+ setRowIndex: (rowId: import("@mui/x-data-grid").GridRowId, targetIndex: number) => void | Promise<void>;
6
6
  setRowPosition: (sourceRowId: import("@mui/x-data-grid").GridRowId, targetRowId: import("@mui/x-data-grid").GridRowId, position: import("@mui/x-data-grid/internals").RowReorderDropPosition) => void | Promise<void>;
7
7
  };
@@ -1,7 +1,7 @@
1
1
  import type { RefObject } from '@mui/x-internals/types';
2
2
  import type { GridPrivateApiPro } from "../../../models/gridApiPro.js";
3
3
  import type { DataGridProProcessedProps } from "../../../models/dataGridProProps.js";
4
- export declare const useGridRowsOverridableMethods: (apiRef: RefObject<GridPrivateApiPro>, props: Pick<DataGridProProcessedProps, "processRowUpdate" | "onProcessRowUpdateError" | "setTreeDataPath">) => {
5
- setRowIndex: (rowId: import("@mui/x-data-grid").GridRowId, targetIndex: number) => void;
4
+ export declare const useGridRowsOverridableMethods: (apiRef: RefObject<GridPrivateApiPro>, props: Pick<DataGridProProcessedProps, "processRowUpdate" | "onProcessRowUpdateError" | "setTreeDataPath" | "treeData">) => {
5
+ setRowIndex: (rowId: import("@mui/x-data-grid").GridRowId, targetIndex: number) => void | Promise<void>;
6
6
  setRowPosition: (sourceRowId: import("@mui/x-data-grid").GridRowId, targetRowId: import("@mui/x-data-grid").GridRowId, position: import("@mui/x-data-grid/internals").RowReorderDropPosition) => void | Promise<void>;
7
7
  };
@@ -15,13 +15,13 @@ const useGridRowsOverridableMethods = (apiRef, props) => {
15
15
  const {
16
16
  processRowUpdate,
17
17
  onProcessRowUpdateError,
18
- setTreeDataPath
18
+ setTreeDataPath,
19
+ treeData
19
20
  } = props;
20
21
  const {
21
22
  setRowIndex: setRowIndexFlat,
22
23
  setRowPosition: setRowPositionFlat
23
24
  } = (0, _internals.useGridRowsOverridableMethodsCommunity)(apiRef);
24
- const flatTree = (0, _xDataGrid.useGridSelector)(apiRef, _xDataGrid.gridRowMaximumTreeDepthSelector) === 1;
25
25
  const setRowPosition = React.useCallback(async (sourceRowId, targetRowId, position) => {
26
26
  const sortedFilteredRowIds = (0, _xDataGrid.gridExpandedSortedRowIdsSelector)(apiRef);
27
27
  const sortedFilteredRowIndexLookup = (0, _xDataGrid.gridExpandedSortedRowIndexLookupSelector)(apiRef);
@@ -62,8 +62,8 @@ const useGridRowsOverridableMethods = (apiRef, props) => {
62
62
  throw new Error(process.env.NODE_ENV !== "production" ? 'MUI X Data Grid: setRowIndex() is not supported for tree data. ' + 'Tree data uses hierarchical positioning which requires setRowPosition(). ' + 'Use setRowPosition() instead to reorder rows in tree data mode.' : (0, _formatErrorMessage2.default)(132));
63
63
  }, []);
64
64
  return {
65
- setRowIndex: flatTree ? setRowIndexFlat : setRowIndex,
66
- setRowPosition: flatTree ? setRowPositionFlat : setRowPosition
65
+ setRowIndex: treeData ? setRowIndex : setRowIndexFlat,
66
+ setRowPosition: treeData ? setRowPosition : setRowPositionFlat
67
67
  };
68
68
  };
69
69
  exports.useGridRowsOverridableMethods = useGridRowsOverridableMethods;
@@ -1,19 +1,19 @@
1
1
  import _formatErrorMessage from "@mui/x-internals/formatErrorMessage";
2
2
  import * as React from 'react';
3
- import { gridRowTreeSelector, gridExpandedSortedRowIdsSelector, gridRowNodeSelector, useGridSelector, gridRowMaximumTreeDepthSelector, gridExpandedSortedRowIndexLookupSelector } from '@mui/x-data-grid';
3
+ import { gridRowTreeSelector, gridExpandedSortedRowIdsSelector, gridRowNodeSelector, gridExpandedSortedRowIndexLookupSelector } from '@mui/x-data-grid';
4
4
  import { useGridRowsOverridableMethodsCommunity } from '@mui/x-data-grid/internals';
5
5
  import { treeDataReorderExecutor } from "../treeData/treeDataReorderExecutor.mjs";
6
6
  export const useGridRowsOverridableMethods = (apiRef, props) => {
7
7
  const {
8
8
  processRowUpdate,
9
9
  onProcessRowUpdateError,
10
- setTreeDataPath
10
+ setTreeDataPath,
11
+ treeData
11
12
  } = props;
12
13
  const {
13
14
  setRowIndex: setRowIndexFlat,
14
15
  setRowPosition: setRowPositionFlat
15
16
  } = useGridRowsOverridableMethodsCommunity(apiRef);
16
- const flatTree = useGridSelector(apiRef, gridRowMaximumTreeDepthSelector) === 1;
17
17
  const setRowPosition = React.useCallback(async (sourceRowId, targetRowId, position) => {
18
18
  const sortedFilteredRowIds = gridExpandedSortedRowIdsSelector(apiRef);
19
19
  const sortedFilteredRowIndexLookup = gridExpandedSortedRowIndexLookupSelector(apiRef);
@@ -54,7 +54,7 @@ export const useGridRowsOverridableMethods = (apiRef, props) => {
54
54
  throw new Error(process.env.NODE_ENV !== "production" ? 'MUI X Data Grid: setRowIndex() is not supported for tree data. ' + 'Tree data uses hierarchical positioning which requires setRowPosition(). ' + 'Use setRowPosition() instead to reorder rows in tree data mode.' : _formatErrorMessage(132));
55
55
  }, []);
56
56
  return {
57
- setRowIndex: flatTree ? setRowIndexFlat : setRowIndex,
58
- setRowPosition: flatTree ? setRowPositionFlat : setRowPosition
57
+ setRowIndex: treeData ? setRowIndex : setRowIndexFlat,
58
+ setRowPosition: treeData ? setRowPosition : setRowPositionFlat
59
59
  };
60
60
  };
@@ -463,6 +463,34 @@ const useGridDataSourceLazyLoader = (privateApiRef, props) => {
463
463
  const handleStrategyActivityChange = React.useCallback(() => {
464
464
  setLazyLoadingRowsUpdateStrategyActive(privateApiRef.current.getActiveStrategy(_internals.GridStrategyGroup.DataSource) === _internals.DataSourceRowsUpdateStrategy.LazyLoading);
465
465
  }, [privateApiRef]);
466
+
467
+ // Provide render context based start/end for lazy loading so that
468
+ // `apiRef.current.dataSource.fetchRows()` without params
469
+ // re-fetches the currently visible range instead of always using the
470
+ // pagination-model state.
471
+ const addGetRowsParams = React.useCallback(params => {
472
+ if (!lazyLoadingRowsUpdateStrategyActive) {
473
+ return params;
474
+ }
475
+ const renderContext = (0, _internals.gridRenderContextSelector)(privateApiRef);
476
+ // On initial load the grid hasn't rendered yet — keep the defaults.
477
+ if (renderContext.lastRowIndex === 0) {
478
+ return params;
479
+ }
480
+ const paginationModel = (0, _xDataGrid.gridPaginationModelSelector)(privateApiRef);
481
+ const adjustedParams = (0, _utils.adjustRowParams)({
482
+ start: renderContext.firstRowIndex,
483
+ end: renderContext.lastRowIndex - 1
484
+ }, {
485
+ pageSize: paginationModel.pageSize,
486
+ rowCount: privateApiRef.current.state.pagination.rowCount
487
+ });
488
+ return (0, _extends2.default)({}, params, {
489
+ start: adjustedParams.start,
490
+ end: adjustedParams.end
491
+ });
492
+ }, [privateApiRef, lazyLoadingRowsUpdateStrategyActive]);
493
+ (0, _internals.useGridRegisterPipeProcessor)(privateApiRef, 'getRowsParams', addGetRowsParams);
466
494
  (0, _internals.useGridRegisterStrategyProcessor)(privateApiRef, _internals.DataSourceRowsUpdateStrategy.LazyLoading, 'dataSourceRowsUpdate', handleDataUpdate);
467
495
  (0, _xDataGrid.useGridEvent)(privateApiRef, 'strategyAvailabilityChange', handleStrategyActivityChange);
468
496
  (0, _xDataGrid.useGridEvent)(privateApiRef, 'rowCountChange', (0, _internals.runIf)(lazyLoadingRowsUpdateStrategyActive, handleRowCountChange));
@@ -7,7 +7,7 @@ import { isDeepEqual } from '@mui/x-internals/isDeepEqual';
7
7
  import useEventCallback from '@mui/utils/useEventCallback';
8
8
  import debounce from '@mui/utils/debounce';
9
9
  import { useGridEvent, gridSortModelSelector, gridFilterModelSelector, GRID_ROOT_GROUP_ID, gridPaginationModelSelector, gridFilteredSortedRowIdsSelector, gridRowIdSelector } from '@mui/x-data-grid';
10
- import { getVisibleRows, gridRenderContextSelector, GridStrategyGroup, useGridRegisterStrategyProcessor, runIf, DataSourceRowsUpdateStrategy } from '@mui/x-data-grid/internals';
10
+ import { getVisibleRows, gridRenderContextSelector, GridStrategyGroup, useGridRegisterStrategyProcessor, useGridRegisterPipeProcessor, runIf, DataSourceRowsUpdateStrategy } from '@mui/x-data-grid/internals';
11
11
  import { findSkeletonRowsSection, adjustRowParams } from "../lazyLoader/utils.mjs";
12
12
  import { GRID_SKELETON_ROW_ROOT_ID } from "../lazyLoader/useGridLazyLoaderPreProcessors.mjs";
13
13
  var LoadingTrigger = /*#__PURE__*/function (LoadingTrigger) {
@@ -456,6 +456,34 @@ export const useGridDataSourceLazyLoader = (privateApiRef, props) => {
456
456
  const handleStrategyActivityChange = React.useCallback(() => {
457
457
  setLazyLoadingRowsUpdateStrategyActive(privateApiRef.current.getActiveStrategy(GridStrategyGroup.DataSource) === DataSourceRowsUpdateStrategy.LazyLoading);
458
458
  }, [privateApiRef]);
459
+
460
+ // Provide render context based start/end for lazy loading so that
461
+ // `apiRef.current.dataSource.fetchRows()` without params
462
+ // re-fetches the currently visible range instead of always using the
463
+ // pagination-model state.
464
+ const addGetRowsParams = React.useCallback(params => {
465
+ if (!lazyLoadingRowsUpdateStrategyActive) {
466
+ return params;
467
+ }
468
+ const renderContext = gridRenderContextSelector(privateApiRef);
469
+ // On initial load the grid hasn't rendered yet — keep the defaults.
470
+ if (renderContext.lastRowIndex === 0) {
471
+ return params;
472
+ }
473
+ const paginationModel = gridPaginationModelSelector(privateApiRef);
474
+ const adjustedParams = adjustRowParams({
475
+ start: renderContext.firstRowIndex,
476
+ end: renderContext.lastRowIndex - 1
477
+ }, {
478
+ pageSize: paginationModel.pageSize,
479
+ rowCount: privateApiRef.current.state.pagination.rowCount
480
+ });
481
+ return _extends({}, params, {
482
+ start: adjustedParams.start,
483
+ end: adjustedParams.end
484
+ });
485
+ }, [privateApiRef, lazyLoadingRowsUpdateStrategyActive]);
486
+ useGridRegisterPipeProcessor(privateApiRef, 'getRowsParams', addGetRowsParams);
459
487
  useGridRegisterStrategyProcessor(privateApiRef, DataSourceRowsUpdateStrategy.LazyLoading, 'dataSourceRowsUpdate', handleDataUpdate);
460
488
  useGridEvent(privateApiRef, 'strategyAvailabilityChange', handleStrategyActivityChange);
461
489
  useGridEvent(privateApiRef, 'rowCountChange', runIf(lazyLoadingRowsUpdateStrategyActive, handleRowCountChange));
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid-pro v9.0.0-alpha.4
2
+ * @mui/x-data-grid-pro v9.0.0-rc.0
3
3
  *
4
4
  * @license SEE LICENSE IN LICENSE
5
5
  * This source code is licensed under the SEE LICENSE IN LICENSE license found in the
package/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid-pro v9.0.0-alpha.4
2
+ * @mui/x-data-grid-pro v9.0.0-rc.0
3
3
  *
4
4
  * @license SEE LICENSE IN LICENSE
5
5
  * This source code is licensed under the SEE LICENSE IN LICENSE license found in the
@@ -160,7 +160,7 @@ export interface DataGridProPropsWithoutDefaultValue<R extends GridValidRowModel
160
160
  * @param {GridRowScrollEndParams} params With all properties from [[GridRowScrollEndParams]].
161
161
  * @param {MuiEvent<{}>} event The event object.
162
162
  * @param {GridCallbackDetails} details Additional details for this callback.
163
- * @deprecated Use the {@link https://mui.com/x/react-data-grid/server-side-data/lazy-loading/#infinite-loading Server-side data-Infinite loading} instead.
163
+ * Prefer to use {@link https://mui.com/x/react-data-grid/server-side-data/lazy-loading/#infinite-loading Server-side data-Infinite loading} unless it doesn't fulfill your needs.
164
164
  */
165
165
  onRowsScrollEnd?: GridEventListener<'rowsScrollEnd'>;
166
166
  /**
@@ -160,7 +160,7 @@ export interface DataGridProPropsWithoutDefaultValue<R extends GridValidRowModel
160
160
  * @param {GridRowScrollEndParams} params With all properties from [[GridRowScrollEndParams]].
161
161
  * @param {MuiEvent<{}>} event The event object.
162
162
  * @param {GridCallbackDetails} details Additional details for this callback.
163
- * @deprecated Use the {@link https://mui.com/x/react-data-grid/server-side-data/lazy-loading/#infinite-loading Server-side data-Infinite loading} instead.
163
+ * Prefer to use {@link https://mui.com/x/react-data-grid/server-side-data/lazy-loading/#infinite-loading Server-side data-Infinite loading} unless it doesn't fulfill your needs.
164
164
  */
165
165
  onRowsScrollEnd?: GridEventListener<'rowsScrollEnd'>;
166
166
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-data-grid-pro",
3
- "version": "9.0.0-alpha.4",
3
+ "version": "9.0.0-rc.0",
4
4
  "author": "MUI Team",
5
5
  "description": "The Pro plan edition of the MUI X Data Grid components.",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -34,18 +34,18 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "@babel/runtime": "^7.28.6",
37
- "@mui/utils": "^7.3.7",
37
+ "@mui/utils": "9.0.0-beta.1",
38
38
  "clsx": "^2.1.1",
39
39
  "prop-types": "^15.8.1",
40
- "@mui/x-internals": "9.0.0-alpha.4",
41
- "@mui/x-data-grid": "9.0.0-alpha.4",
42
- "@mui/x-license": "9.0.0-alpha.4"
40
+ "@mui/x-data-grid": "9.0.0-rc.0",
41
+ "@mui/x-internals": "9.0.0-rc.0",
42
+ "@mui/x-license": "9.0.0-rc.0"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "@emotion/react": "^11.9.0",
46
46
  "@emotion/styled": "^11.8.1",
47
- "@mui/material": "^5.15.14 || ^6.0.0 || ^7.0.0",
48
- "@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0",
47
+ "@mui/material": "^7.3.0 || ^9.0.0-beta.0 || ^9.0.0",
48
+ "@mui/system": "^7.3.0 || ^9.0.0-beta.1",
49
49
  "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
50
50
  "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
51
51
  },