@mui/x-data-grid-pro 8.27.3 → 8.27.5

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
@@ -5,6 +5,127 @@
5
5
  All notable changes to this project will be documented in this file.
6
6
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
7
7
 
8
+ ## 8.27.5
9
+
10
+ _Mar 11, 2026_
11
+
12
+ We'd like to extend a big thank you to the 7 contributors who made this release possible. Here are some highlights ✨:
13
+
14
+ - 🐞 Bugfixes
15
+
16
+ The following team members contributed to this release:
17
+ @bernardobelchior, @JCQuintas, @MBilalShafi, @michelengelen, @mj12albert, @sai6855, @siriwatknp
18
+
19
+ ### Data Grid
20
+
21
+ #### `@mui/x-data-grid@8.27.5`
22
+
23
+ - [DataGrid] Fix crash when `rows` and `rowModesModel` are updated simultaneously (#21684) @michelengelen
24
+ - [DataGrid] Forward rest props in `GridFilterInputMultipleValue` (#21444) @siriwatknp
25
+ - [DataGrid] Remove double rtl inversion logic for columns pinning (#21443) @siriwatknp
26
+ - [DataGrid] Add missing `resizablePanelHandle` classes to `gridClasses` object (#21632) @sai6855
27
+ - [DataGrid] Refactor `headerAlign` style calls (#21633) @sai6855
28
+ - [DataGrid] Fix keyboard navigation with single-row checkbox selection (#21529) @mj12albert
29
+
30
+ #### `@mui/x-data-grid-pro@8.27.5` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
31
+
32
+ Same changes as in `@mui/x-data-grid@8.27.5`, plus:
33
+
34
+ - [DataGridPro] Add `role="presentation"` to detail panel toggle header content (#21691) @michelengelen
35
+ - [DataGridPro] Fix sorting not reflected in nested server-side data (#21641) @MBilalShafi
36
+
37
+ #### `@mui/x-data-grid-premium@8.27.5` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
38
+
39
+ Same changes as in `@mui/x-data-grid-pro@8.27.5`.
40
+
41
+ ### Charts
42
+
43
+ #### `@mui/x-charts@8.27.5`
44
+
45
+ - [charts] Refactor `BarChart` classes structure (#21601) (#21644) @JCQuintas
46
+ - [charts] Refactor `LineChart` classes structure (#21672) @JCQuintas
47
+ - [charts] Refactor `ScatterChart` classes structure (#21706) @JCQuintas
48
+
49
+ #### `@mui/x-charts-pro@8.27.5` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
50
+
51
+ Same changes as in `@mui/x-charts@8.27.5`, plus:
52
+
53
+ - [charts-pro] Fix image export truncated when page is zoomed out (#21696) @bernardobelchior
54
+
55
+ #### `@mui/x-charts-premium@8.27.5` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
56
+
57
+ Same changes as in `@mui/x-charts-pro@8.27.5`.
58
+
59
+ ### Docs
60
+
61
+ - [docs] Fix `AssistantWithDataSource` demo crashing (#21631) @sai6855
62
+ - [docs] Move Range Bar Chart to existing charts (#21122) @bernardobelchior
63
+
64
+ ### Core
65
+
66
+ - [code-infra] Fix datagrid test flakyness (#21657) @JCQuintas
67
+ - [code-infra] Removed `getTeamMembers` function and usage from the release script (#21608) @michelengelen
68
+
69
+ ### Miscellaneous
70
+
71
+ - [test] Add missing tests for forwarding props to filter operators in DataGrid (#21700) @siriwatknp
72
+
73
+ ## 8.27.4
74
+
75
+ _Mar 5, 2026_
76
+
77
+ We'd like to extend a big thank you to the 6 contributors who made this release possible. Here are some highlights ✨:
78
+
79
+ - 🐞 Bugfixes
80
+ - 🌎 Improve Ukrainian (uk-UA) locale
81
+
82
+ Special thanks go out to this community member for their valuable contribution:
83
+ @lion1963
84
+
85
+ The following team members contributed to this release:
86
+ @arminmeh, @brijeshb42, @dav-is, @JCQuintas, @sai6855
87
+
88
+ ### Data Grid
89
+
90
+ #### `@mui/x-data-grid@8.27.4`
91
+
92
+ - [DataGrid] Prevent unnecessary row selection checkbox rerendering (#21571) @arminmeh
93
+ - [DataGrid] Make `GridScrollArea` overrides resolver dynamic (#21612) @sai6855
94
+ - [l10n] Improve Ukrainian (uk-UA) locale (#21381) @lion1963
95
+
96
+ #### `@mui/x-data-grid-pro@8.27.4` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
97
+
98
+ Same changes as in `@mui/x-data-grid@8.27.4`, plus:
99
+
100
+ - [DataGridPro] Use `getRowId` prop to calculate the tree data row update (#21544) @arminmeh
101
+
102
+ #### `@mui/x-data-grid-premium@8.27.4` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
103
+
104
+ Same changes as in `@mui/x-data-grid-pro@8.27.4`.
105
+
106
+ ### Charts
107
+
108
+ #### `@mui/x-charts@8.27.4`
109
+
110
+ - [charts] Deprecate `ChartDataProvider` in favour of `ChartsDataProvider` (#21549) @JCQuintas
111
+ - [charts] Rename `ChartContainer` to `ChartsContainer` (#21186) @JCQuintas
112
+ - [charts] Rename `ChartZoomSlider` to `ChartsZoomSlider` (#21572) @JCQuintas
113
+
114
+ #### `@mui/x-charts-pro@8.27.4` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
115
+
116
+ Same changes as in `@mui/x-charts@8.27.4`.
117
+
118
+ #### `@mui/x-charts-premium@8.27.4` [![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-charts-pro@8.27.4`.
121
+
122
+ ### Core
123
+
124
+ - [code-infra] Add eslint rule to prevent `Math.random` in docs (#21505) (#21563) @JCQuintas
125
+ - [code-infra] V8 Dedupe (#21561) @JCQuintas
126
+ - [docs-infra] Apply Cookie Banner to v8.x Branch (#21448) @dav-is
127
+ - [code-infra] Setup checkout to do full clone for non master branches (#21624) @brijeshb42
128
+
8
129
  ## 8.27.3
9
130
 
10
131
  _Feb 25, 2026_
@@ -34,7 +34,7 @@ const configuration = {
34
34
  useFilterValueGetter: apiRef => apiRef.current.getRowValue
35
35
  }
36
36
  };
37
- const releaseInfo = "MTc3MTk3NzYwMDAwMA==";
37
+ const releaseInfo = "MTc3MzE4NzIwMDAwMA==";
38
38
  const watermark = /*#__PURE__*/(0, _jsxRuntime.jsx)(_xLicense.Watermark, {
39
39
  packageName: "x-data-grid-pro",
40
40
  releaseInfo: releaseInfo
@@ -68,7 +68,7 @@ const useUtilityClasses = ownerState => {
68
68
  pinnedPosition
69
69
  } = ownerState;
70
70
  const slots = {
71
- root: ['columnHeader', 'columnHeader--filter', colDef.headerAlign === 'left' && 'columnHeader--alignLeft', colDef.headerAlign === 'center' && 'columnHeader--alignCenter', colDef.headerAlign === 'right' && 'columnHeader--alignRight', 'withBorderColor', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', pinnedPosition === _internals.PinnedColumnPosition.LEFT && 'columnHeader--pinnedLeft', pinnedPosition === _internals.PinnedColumnPosition.RIGHT && 'columnHeader--pinnedRight'],
71
+ root: ['columnHeader', 'columnHeader--filter', colDef.headerAlign && `columnHeader--align${(0, _capitalize.default)(colDef.headerAlign)}`, 'withBorderColor', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', pinnedPosition === _internals.PinnedColumnPosition.LEFT && 'columnHeader--pinnedLeft', pinnedPosition === _internals.PinnedColumnPosition.RIGHT && 'columnHeader--pinnedRight'],
72
72
  input: ['columnHeaderFilterInput'],
73
73
  operatorLabel: ['columnHeaderFilterOperatorLabel']
74
74
  };
@@ -27,7 +27,7 @@ const configuration = {
27
27
  useFilterValueGetter: apiRef => apiRef.current.getRowValue
28
28
  }
29
29
  };
30
- const releaseInfo = "MTc3MTk3NzYwMDAwMA==";
30
+ const releaseInfo = "MTc3MzE4NzIwMDAwMA==";
31
31
  const watermark = /*#__PURE__*/_jsx(Watermark, {
32
32
  packageName: "x-data-grid-pro",
33
33
  releaseInfo: releaseInfo
@@ -61,7 +61,7 @@ const useUtilityClasses = ownerState => {
61
61
  pinnedPosition
62
62
  } = ownerState;
63
63
  const slots = {
64
- root: ['columnHeader', 'columnHeader--filter', colDef.headerAlign === 'left' && 'columnHeader--alignLeft', colDef.headerAlign === 'center' && 'columnHeader--alignCenter', colDef.headerAlign === 'right' && 'columnHeader--alignRight', 'withBorderColor', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', pinnedPosition === PinnedColumnPosition.LEFT && 'columnHeader--pinnedLeft', pinnedPosition === PinnedColumnPosition.RIGHT && 'columnHeader--pinnedRight'],
64
+ root: ['columnHeader', 'columnHeader--filter', colDef.headerAlign && `columnHeader--align${capitalize(colDef.headerAlign)}`, 'withBorderColor', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', pinnedPosition === PinnedColumnPosition.LEFT && 'columnHeader--pinnedLeft', pinnedPosition === PinnedColumnPosition.RIGHT && 'columnHeader--pinnedRight'],
65
65
  input: ['columnHeaderFilterInput'],
66
66
  operatorLabel: ['columnHeaderFilterOperatorLabel']
67
67
  };
@@ -4,7 +4,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
4
4
  import * as React from 'react';
5
5
  import { isDeepEqual } from '@mui/x-internals/isDeepEqual';
6
6
  import useLazyRef from '@mui/utils/useLazyRef';
7
- import { useGridSelector, GridGetRowsError, gridRowIdSelector, gridRowNodeSelector, gridRowTreeSelector, GRID_ROOT_GROUP_ID } from '@mui/x-data-grid';
7
+ import { useGridSelector, GridGetRowsError, gridRowIdSelector, gridRowNodeSelector, gridRowTreeSelector, GRID_ROOT_GROUP_ID, gridRowsLookupSelector } from '@mui/x-data-grid';
8
8
  import { gridRowGroupsToFetchSelector, useGridDataSourceBase, CacheChunkManager, gridGetRowsParamsSelector, DataSourceRowsUpdateStrategy, GridStrategyGroup, getTreeNodeDescendants } from '@mui/x-data-grid/internals';
9
9
  import { warnOnce } from '@mui/x-internals/warning';
10
10
  import { NestedDataManager, RequestStatus, getGroupKeys } from "./utils.js";
@@ -56,6 +56,7 @@ export const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
56
56
  const onDataSourceErrorProp = props.onDataSourceError;
57
57
  const replaceGroupRows = React.useCallback((groupId, groupPath, rows) => {
58
58
  const tree = gridRowTreeSelector(apiRef);
59
+ const rowsLookup = gridRowsLookupSelector(apiRef);
59
60
  const fetchedRowIds = new Set(rows.map(row => gridRowIdSelector(apiRef, row)));
60
61
  const currentGroupRows = getTreeNodeDescendants(tree, groupId, false, true);
61
62
  const rowsToDelete = [];
@@ -69,15 +70,13 @@ export const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
69
70
  if (fetchedRowIds.has(descendantId)) {
70
71
  continue;
71
72
  }
72
- rowsToDelete.push({
73
- id: descendantId,
73
+ rowsToDelete.push(_extends({}, rowsLookup[descendantId], {
74
74
  _action: 'delete'
75
- });
75
+ }));
76
76
  }
77
- rowsToDelete.push({
78
- id: rowId,
77
+ rowsToDelete.push(_extends({}, rowsLookup[rowId], {
79
78
  _action: 'delete'
80
- });
79
+ }));
81
80
  });
82
81
  if (rowsToDelete.length > 0) {
83
82
  apiRef.current.updateNestedRows(rowsToDelete, groupPath);
@@ -200,6 +199,7 @@ export const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
200
199
  });
201
200
  }, [apiRef]);
202
201
  const removeChildrenRows = React.useCallback(parentId => {
202
+ const rowsLookup = gridRowsLookupSelector(apiRef);
203
203
  const rowNode = gridRowNodeSelector(apiRef, parentId);
204
204
  if (!rowNode || rowNode.type !== 'group' || rowNode.children.length === 0) {
205
205
  return;
@@ -213,10 +213,9 @@ export const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
213
213
  if (node.type === 'group' && node.children.length > 0) {
214
214
  node.children.forEach(traverse);
215
215
  }
216
- removedRows.push({
217
- id: nodeId,
216
+ removedRows.push(_extends({}, rowsLookup[nodeId], {
218
217
  _action: 'delete'
219
- });
218
+ }));
220
219
  };
221
220
  rowNode.children.forEach(traverse);
222
221
  if (removedRows.length > 0) {
@@ -241,6 +240,7 @@ export const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
241
240
  apiRef.current.setRows(response.rows);
242
241
  } else {
243
242
  const tree = gridRowTreeSelector(apiRef);
243
+ const rowsLookup = gridRowsLookupSelector(apiRef);
244
244
  // Remove existing outdated rows before setting the new ones
245
245
  // Create a set of the current root rows
246
246
  const parentRowsToDelete = new Set(getTreeNodeDescendants(tree, GRID_ROOT_GROUP_ID, false, true));
@@ -254,15 +254,13 @@ export const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
254
254
  const descendants = getTreeNodeDescendants(tree, parentRowId, false, false);
255
255
  for (let i = descendants.length - 1; i >= 0; i -= 1) {
256
256
  // delete deepest descendants first
257
- rowsToDelete.push({
258
- id: descendants[i],
257
+ rowsToDelete.push(_extends({}, rowsLookup[descendants[i]], {
259
258
  _action: 'delete'
260
- });
259
+ }));
261
260
  }
262
- rowsToDelete.push({
263
- id: parentRowId,
261
+ rowsToDelete.push(_extends({}, rowsLookup[parentRowId], {
264
262
  _action: 'delete'
265
- });
263
+ }));
266
264
  });
267
265
  }
268
266
  apiRef.current.updateRows(response.rows.concat(rowsToDelete));
@@ -30,6 +30,7 @@ export const GRID_DETAIL_PANEL_TOGGLE_COL_DEF = _extends({}, GRID_STRING_COL_DEF
30
30
  renderHeader: ({
31
31
  colDef
32
32
  }) => /*#__PURE__*/_jsx("div", {
33
- "aria-label": colDef.headerName
33
+ "aria-label": colDef.headerName,
34
+ role: "presentation"
34
35
  })
35
36
  });
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid-pro v8.27.3
2
+ * @mui/x-data-grid-pro v8.27.5
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
@@ -63,6 +63,7 @@ const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
63
63
  const onDataSourceErrorProp = props.onDataSourceError;
64
64
  const replaceGroupRows = React.useCallback((groupId, groupPath, rows) => {
65
65
  const tree = (0, _xDataGrid.gridRowTreeSelector)(apiRef);
66
+ const rowsLookup = (0, _xDataGrid.gridRowsLookupSelector)(apiRef);
66
67
  const fetchedRowIds = new Set(rows.map(row => (0, _xDataGrid.gridRowIdSelector)(apiRef, row)));
67
68
  const currentGroupRows = (0, _internals.getTreeNodeDescendants)(tree, groupId, false, true);
68
69
  const rowsToDelete = [];
@@ -76,15 +77,13 @@ const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
76
77
  if (fetchedRowIds.has(descendantId)) {
77
78
  continue;
78
79
  }
79
- rowsToDelete.push({
80
- id: descendantId,
80
+ rowsToDelete.push((0, _extends2.default)({}, rowsLookup[descendantId], {
81
81
  _action: 'delete'
82
- });
82
+ }));
83
83
  }
84
- rowsToDelete.push({
85
- id: rowId,
84
+ rowsToDelete.push((0, _extends2.default)({}, rowsLookup[rowId], {
86
85
  _action: 'delete'
87
- });
86
+ }));
88
87
  });
89
88
  if (rowsToDelete.length > 0) {
90
89
  apiRef.current.updateNestedRows(rowsToDelete, groupPath);
@@ -207,6 +206,7 @@ const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
207
206
  });
208
207
  }, [apiRef]);
209
208
  const removeChildrenRows = React.useCallback(parentId => {
209
+ const rowsLookup = (0, _xDataGrid.gridRowsLookupSelector)(apiRef);
210
210
  const rowNode = (0, _xDataGrid.gridRowNodeSelector)(apiRef, parentId);
211
211
  if (!rowNode || rowNode.type !== 'group' || rowNode.children.length === 0) {
212
212
  return;
@@ -220,10 +220,9 @@ const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
220
220
  if (node.type === 'group' && node.children.length > 0) {
221
221
  node.children.forEach(traverse);
222
222
  }
223
- removedRows.push({
224
- id: nodeId,
223
+ removedRows.push((0, _extends2.default)({}, rowsLookup[nodeId], {
225
224
  _action: 'delete'
226
- });
225
+ }));
227
226
  };
228
227
  rowNode.children.forEach(traverse);
229
228
  if (removedRows.length > 0) {
@@ -248,6 +247,7 @@ const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
248
247
  apiRef.current.setRows(response.rows);
249
248
  } else {
250
249
  const tree = (0, _xDataGrid.gridRowTreeSelector)(apiRef);
250
+ const rowsLookup = (0, _xDataGrid.gridRowsLookupSelector)(apiRef);
251
251
  // Remove existing outdated rows before setting the new ones
252
252
  // Create a set of the current root rows
253
253
  const parentRowsToDelete = new Set((0, _internals.getTreeNodeDescendants)(tree, _xDataGrid.GRID_ROOT_GROUP_ID, false, true));
@@ -261,15 +261,13 @@ const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
261
261
  const descendants = (0, _internals.getTreeNodeDescendants)(tree, parentRowId, false, false);
262
262
  for (let i = descendants.length - 1; i >= 0; i -= 1) {
263
263
  // delete deepest descendants first
264
- rowsToDelete.push({
265
- id: descendants[i],
264
+ rowsToDelete.push((0, _extends2.default)({}, rowsLookup[descendants[i]], {
266
265
  _action: 'delete'
267
- });
266
+ }));
268
267
  }
269
- rowsToDelete.push({
270
- id: parentRowId,
268
+ rowsToDelete.push((0, _extends2.default)({}, rowsLookup[parentRowId], {
271
269
  _action: 'delete'
272
- });
270
+ }));
273
271
  });
274
272
  }
275
273
  apiRef.current.updateRows(response.rows.concat(rowsToDelete));
@@ -42,6 +42,7 @@ const GRID_DETAIL_PANEL_TOGGLE_COL_DEF = exports.GRID_DETAIL_PANEL_TOGGLE_COL_DE
42
42
  renderHeader: ({
43
43
  colDef
44
44
  }) => /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
45
- "aria-label": colDef.headerName
45
+ "aria-label": colDef.headerName,
46
+ role: "presentation"
46
47
  })
47
48
  });
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid-pro v8.27.3
2
+ * @mui/x-data-grid-pro v8.27.5
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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-data-grid-pro",
3
- "version": "8.27.3",
3
+ "version": "8.27.5",
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",
@@ -37,9 +37,9 @@
37
37
  "@mui/utils": "^7.3.5",
38
38
  "clsx": "^2.1.1",
39
39
  "prop-types": "^15.8.1",
40
- "@mui/x-data-grid": "8.27.3",
41
- "@mui/x-internals": "8.26.0",
42
- "@mui/x-license": "8.26.0"
40
+ "@mui/x-license": "8.26.0",
41
+ "@mui/x-data-grid": "8.27.5",
42
+ "@mui/x-internals": "8.26.0"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "@emotion/react": "^11.9.0",