@mui/x-data-grid-premium 8.20.0 → 8.22.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
@@ -5,6 +5,254 @@
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.22.0
9
+
10
+ _Dec 11, 2025_
11
+
12
+ We'd like to extend a big thank you to the 11 contributors who made this release possible. Here are some highlights ✨:
13
+
14
+ - Each Tree View component now exposes its own hook to initialize the `apiRef` object with accurate typing:
15
+
16
+ ```diff
17
+ -import { useTreeViewApiRef } from '@mui/x-tree-view/hooks';
18
+ +import { useSimpleTreeViewApiRef } from '@mui/x-tree-view/hooks';
19
+ -const apiRef = useTreeViewApiRef();
20
+ +const apiRef = useSimpleTreeViewApiRef();
21
+
22
+ -import { useTreeViewApiRef } from '@mui/x-tree-view/hooks';
23
+ +import { useRichTreeViewApiRef } from '@mui/x-tree-view/hooks';
24
+ -const apiRef = useTreeViewApiRef();
25
+ +const apiRef = useRichTreeViewApiRef();
26
+
27
+ -import { useTreeViewApiRef } from '@mui/x-tree-view/hooks';
28
+ +import { useRichTreeViewProApiRef } from '@mui/x-tree-view-pro/hooks';
29
+ -const apiRef = useTreeViewApiRef();
30
+ +const apiRef = useRichTreeViewProApiRef();
31
+ ```
32
+
33
+ - 📚 [Tutorial](https://mui.com/x/react-data-grid/tutorials/server-side-data/) on building a Data Grid with server-side data
34
+ - 🐞 Bugfixes
35
+
36
+ Special thanks go out to this community member for their valuable contributions:
37
+ @kzhgit
38
+
39
+ The following team members contributed to this release:
40
+ @alexfauquette, @arminmeh, @bernardobelchior, @cherniavskii, @flaviendelangle, @JCQuintas, @mapache-salvaje, @michelengelen, @noraleonte, @oliviertassinari
41
+
42
+ ### Data Grid
43
+
44
+ #### `@mui/x-data-grid@8.22.0`
45
+
46
+ - [DataGrid] Sync component props with theme defaults (#20590) @michelengelen
47
+ - [DataGrid] Add fallback for CSS `color-mix` if it is unsupported (#20597) @cherniavskii
48
+ - [DataGrid] Use `baseTooltip` slot for column header sort icon (#20460) @kzhgit
49
+
50
+ #### `@mui/x-data-grid-pro@8.22.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-data-grid@8.22.0`.
53
+
54
+ #### `@mui/x-data-grid-premium@8.22.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
55
+
56
+ Same changes as in `@mui/x-data-grid-pro@8.22.0`, plus:
57
+
58
+ - [DataGridPremium] Handle pivoting column name generation for empty strings (#20608) @arminmeh
59
+ - [DataGridPremium] Pass a row with aggregated value to the custom aggregation function `valueFormatter` (#20607) @arminmeh
60
+
61
+ ### Date and Time Pickers
62
+
63
+ #### `@mui/x-date-pickers@8.22.0`
64
+
65
+ - [pickers] Fix invalid date tests (#20606) @michelengelen
66
+
67
+ #### `@mui/x-date-pickers-pro@8.22.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
68
+
69
+ Same changes as in `@mui/x-date-pickers@8.22.0`.
70
+
71
+ ### Charts
72
+
73
+ #### `@mui/x-charts@8.22.0`
74
+
75
+ - [charts] Add consistent animation duration and timing (#20564) @JCQuintas
76
+ - [charts] Extract a tooltip plugin from the interaction one (#20591) @alexfauquette
77
+ - [charts] General type improvements (#20565) @JCQuintas
78
+ - [charts] Place ordinal ticks according to a continuous scale (#19808) @alexfauquette
79
+ - [charts] Remove layout data from the tooltip internals (#20548) @alexfauquette
80
+ - [charts] Remove usage of focus outline for item highlight (#19856) @alexfauquette
81
+ - [charts] Simplify `MarkPlot` by moving calculation to `useMarkPlotData` (#20570) @JCQuintas
82
+ - [charts] Use `store.state` over `store.getSnapshot()` (#20616) @bernardobelchior
83
+ - [charts] Vendor flatqueue (#20610) @bernardobelchior
84
+ - [charts] Extract pie layout computation (#20611) @alexfauquette
85
+ - [charts][infra] Enable `@typescript-eslint/consistent-type-imports` eslint rules (#20560) @JCQuintas
86
+ - [charts][infra] Enable `import/no-cycle` eslint rules (#20554) @JCQuintas
87
+
88
+ #### `@mui/x-charts-pro@8.22.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
89
+
90
+ Same changes as in `@mui/x-charts@8.22.0`, plus:
91
+
92
+ - [charts-pro] Display sankey labels on top of nodes (#20569) @alexfauquette
93
+
94
+ #### `@mui/x-charts-premium@8.22.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
95
+
96
+ Same changes as in `@mui/x-charts-pro@8.22.0`.
97
+
98
+ ### Tree View
99
+
100
+ #### `@mui/x-tree-view@8.22.0`
101
+
102
+ - [tree view] Expose one hook per component to initialize the `apiRef` (#20235) @flaviendelangle
103
+ - [tree view] Update the typing of `updateItemChildren()` to accept `null` (#20483) @noraleonte
104
+
105
+ #### `@mui/x-tree-view-pro@8.22.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
106
+
107
+ Same changes as in `@mui/x-tree-view@8.22.0`.
108
+
109
+ ### Codemod
110
+
111
+ #### `@mui/x-codemod@8.22.0`
112
+
113
+ Internal changes.
114
+
115
+ ### Docs
116
+
117
+ - [docs] Add tutorial on building a Data Grid with server-side data (DX-22) (#19782) @mapache-salvaje
118
+ - [docs] Modify the default value for the stacking demo (#20596) @alexfauquette
119
+ - [docs] Revise the Charts Custom Components doc (#19793) @mapache-salvaje
120
+ - [docs] Remove copy-pasted `aria-label` (#20620) @alexfauquette
121
+
122
+ ### Core
123
+
124
+ - [internal] Remove unsafe dependency version from range (#20574) @oliviertassinari
125
+
126
+ ### Miscellaneous
127
+
128
+ - Bump `@mui/monorepo` digest to `800638d` (#20337) @renovate[bot]
129
+ - Bump `@next/eslint-plugin-next` to `15.5.7` (#20575) @renovate[bot]
130
+ - Bump GitHub Actions (#20577) @renovate[bot]
131
+ - Bump Tanstack query to `^5.90.12` (#20582) @renovate[bot]
132
+ - Bump Vite & Vitest (#20583) @renovate[bot]
133
+ - Bump `eslint` to `^8.48.1` (#20576) @renovate[bot]
134
+ - Bump `markdown-to-jsx` to `^9.3.2` (#20507) @renovate[bot]
135
+ - Bump `motion` to `^12.23.25` (#20579) @renovate[bot]
136
+ - Bump react monorepo to `19.2.1` (#20581) @renovate[bot]
137
+ - Bump `react-hook-form` to `^7.68.0` (#20584) @renovate[bot]
138
+ - Bump `react-router` to `^7.10.1` (#20341) @renovate[bot]
139
+ - Bump `tsx` to `^4.21.0` (#20585) @renovate[bot]
140
+ - Bump MUI infra packages (#20478) @renovate[bot]
141
+ - [infra] Automatically add teams to release PRs (#20558) @JCQuintas
142
+ - [infra] Fix codeowners typo (#20562) @JCQuintas
143
+
144
+ ## 8.21.0
145
+
146
+ _Dec 3, 2025_
147
+
148
+ We'd like to extend a big thank you to the 8 contributors who made this release possible. Here are some highlights ✨:
149
+
150
+ - ✨ Add [tick spacing property](https://mui.com/x/react-charts/axis/#tick-spacing) to charts axis to control the distance between ticks.
151
+
152
+ The following team members contributed to this release:
153
+ @alexfauquette, @bernardobelchior, @ElliottMiller, @Janpot, @JCQuintas, @romgrk, @sai6855, @siriwatknp
154
+
155
+ ### Data Grid
156
+
157
+ #### `@mui/x-data-grid@8.21.0`
158
+
159
+ - [DataGrid] Fix autosizing header width calculation (#20323) @siriwatknp
160
+ - [DataGrid] Virtualizer refactor (#19465) @romgrk
161
+
162
+ #### `@mui/x-data-grid-pro@8.21.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
163
+
164
+ Same changes as in `@mui/x-data-grid@8.21.0`.
165
+
166
+ #### `@mui/x-data-grid-premium@8.21.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
167
+
168
+ Same changes as in `@mui/x-data-grid-pro@8.21.0`, plus:
169
+
170
+ - [DataGridPremium] Prevent pasting to non-editable cells (#20333) @ElliottMiller
171
+
172
+ ### Date and Time Pickers
173
+
174
+ #### `@mui/x-date-pickers@8.21.0`
175
+
176
+ Internal changes.
177
+
178
+ #### `@mui/x-date-pickers-pro@8.21.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
179
+
180
+ Same changes as in `@mui/x-date-pickers@8.21.0`.
181
+
182
+ ### Charts
183
+
184
+ #### `@mui/x-charts@8.21.0`
185
+
186
+ - [charts] Fix string measuring types (#20454) @bernardobelchior
187
+ - [charts] Fix typo in performance note for CustomLineMarks demo (#20529) @sai6855
188
+ - [charts] Introduce the notion of series with positions (#20461) @alexfauquette
189
+ - [charts] Migrate from sinon to Vitest mocking utilities for x-charts\* packages (#20444) @Copilot
190
+ - [charts] Move series-level values to series computed data in bar plot (#20467) @bernardobelchior
191
+ - [charts] Refactor bar chart components in preparation for range bar chart (#20521) @bernardobelchior
192
+ - [charts] Remove unnecessary `any` types (#20527) @sai6855
193
+ - [charts] Remove unused `drawingArea` from `findClosestPoints` (#20471) @bernardobelchior
194
+ - [charts] Revert `useIsHydrated` to default=false (#20511) @JCQuintas
195
+ - [charts] Support tooltip anchor position for radar (#20422) @alexfauquette
196
+ - [charts] Add tick spacing property (#20282) @bernardobelchior
197
+ - [charts] Fix Vitest lint error (#20550) @bernardobelchior
198
+ - [charts] Fix infinite loop when highlighting pie slices or scatter points (#20549) @bernardobelchior
199
+
200
+ #### `@mui/x-charts-pro@8.21.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
201
+
202
+ Same changes as in `@mui/x-charts@8.21.0`, plus:
203
+
204
+ - [charts-pro] Add support for `anchor="node"` on Sankey tooltip (#20462) @alexfauquette
205
+
206
+ #### `@mui/x-charts-premium@8.21.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
207
+
208
+ Same changes as in `@mui/x-charts-pro@8.21.0`.
209
+
210
+ ### Tree View
211
+
212
+ #### `@mui/x-tree-view@8.21.0`
213
+
214
+ Internal changes.
215
+
216
+ #### `@mui/x-tree-view-pro@8.21.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
217
+
218
+ Same changes as in `@mui/x-tree-view@8.21.0`.
219
+
220
+ ### Codemod
221
+
222
+ #### `@mui/x-codemod@8.21.0`
223
+
224
+ Internal changes.
225
+
226
+ ### Docs
227
+
228
+ - [docs] Migrate to `next/font` for fonts loading (#20407) @Copilot
229
+
230
+ ### Core
231
+
232
+ - [code-infra] Enable vitest eslint plugin (#20530) @Janpot
233
+ - [code-infra] Fix missing font loading for local fonts (#20480) @Janpot
234
+ - [internal] Performance: use raw `useSyncExternalStore` (#20447) @romgrk
235
+ - [code-infra] Enable `vitest/expect-expect` and `vitest/no-standalone-expect` rules for x-charts packages (#20535) @Copilot
236
+
237
+ ### Miscellaneous
238
+
239
+ - Bump @types/d3-sankey to ^0.12.5 (#20489) @renovate[bot]
240
+ - Bump @types/react to 19.2.7 (#20490) @renovate[bot]
241
+ - Bump @types/yargs to ^17.0.35 (#20491) @renovate[bot]
242
+ - Bump Vite & Vitest to ^4.0.14 (#20500) @renovate[bot]
243
+ - Bump csstype to ^3.2.3 (#20493) @renovate[bot]
244
+ - Bump es-toolkit to ^1.42.0 (#20494) @renovate[bot]
245
+ - Bump eslint to ^8.48.0 (#20495) @renovate[bot]
246
+ - Bump lerna to ^9.0.3 (#20496) @renovate[bot]
247
+ - Bump lucide-react to ^0.555.0 (#20502) @renovate[bot]
248
+ - Bump playwright monorepo (#20503) @renovate[bot]
249
+ - Bump pnpm to 10.24.0 (#20504) @renovate[bot]
250
+ - Bump react monorepo (#20340) @renovate[bot]
251
+ - Bump react-hook-form to ^7.66.1 (#20497) @renovate[bot]
252
+ - Bump rimraf to ^6.1.2 (#20498) @renovate[bot]
253
+ - Bump webpack-bundle-analyzer to ^5.0.1 (#20508) @renovate[bot]
254
+ - Bump next to ^15.5.7 [SECURITY] (#20555) @renovate[bot]
255
+
8
256
  ## 8.20.0
9
257
 
10
258
  _Nov 26, 2025_
@@ -50,7 +50,7 @@ const configuration = {
50
50
  useGridParamsOverridableMethods: _useGridParamsOverridableMethods.useGridParamsOverridableMethods
51
51
  }
52
52
  };
53
- const releaseInfo = "MTc2NDExNTIwMDAwMA==";
53
+ const releaseInfo = "MTc2NTQxMTIwMDAwMA==";
54
54
  const watermark = /*#__PURE__*/(0, _jsxRuntime.jsx)(_xLicense.Watermark, {
55
55
  packageName: "x-data-grid-premium",
56
56
  releaseInfo: releaseInfo
@@ -43,7 +43,7 @@ const configuration = {
43
43
  useGridParamsOverridableMethods
44
44
  }
45
45
  };
46
- const releaseInfo = "MTc2NDExNTIwMDAwMA==";
46
+ const releaseInfo = "MTc2NTQxMTIwMDAwMA==";
47
47
  const watermark = /*#__PURE__*/_jsx(Watermark, {
48
48
  packageName: "x-data-grid-premium",
49
49
  releaseInfo: releaseInfo
@@ -73,7 +73,13 @@ const getGroupAggregatedValue = (groupId, apiRef, aggregationRowsScope, aggregat
73
73
  groupId,
74
74
  field: aggregatedField // Added per user request in https://github.com/mui/mui-x/issues/6995#issuecomment-1327423455
75
75
  }, publicApi);
76
- const formattedValue = aggregationFunction.valueFormatter ? aggregationFunction.valueFormatter(value, rowLookup[groupId], columnsLookup[aggregatedField], apiRef) : undefined;
76
+
77
+ // Use the actual row from rowLookup if it exists, otherwise pass a new autogenerated row
78
+ const rowForFormatter = rowLookup[groupId] || {
79
+ id: groupId,
80
+ [aggregatedField]: value
81
+ };
82
+ const formattedValue = aggregationFunction.valueFormatter ? aggregationFunction.valueFormatter(value, rowForFormatter, columnsLookup[aggregatedField], apiRef) : undefined;
77
83
 
78
84
  // Only add to groupAggregationLookup if position is not null
79
85
  if (position !== null) {
@@ -78,6 +78,12 @@ class CellValueUpdater {
78
78
  if (!row) {
79
79
  return;
80
80
  }
81
+
82
+ // Check if the cell is editable using the API method, which respects the isCellEditable prop
83
+ const cellParams = apiRef.current.getCellParams(rowId, field);
84
+ if (!apiRef.current.isCellEditable(cellParams)) {
85
+ return;
86
+ }
81
87
  let parsedValue = pastedCellValue;
82
88
  if (colDef.pastedValueParser) {
83
89
  parsedValue = colDef.pastedValueParser(pastedCellValue, row, colDef, apiRef);
@@ -167,7 +167,13 @@ export const createPivotPropsFromRows = ({
167
167
  if (!column) {
168
168
  continue;
169
169
  }
170
- let colValue = apiRef.current.getRowValue(row, column) ?? '(No value)';
170
+ const noValueString = '(No value)';
171
+ let colValue = apiRef.current.getRowValue(row, column) ?? noValueString;
172
+ // Handle empty strings to prevent issues with column grouping model
173
+ // https://github.com/mui/mui-x/issues/20552
174
+ if (colValue === '') {
175
+ colValue = noValueString;
176
+ }
171
177
  if (column.type === 'singleSelect') {
172
178
  const singleSelectColumn = column;
173
179
  if (singleSelectColumn.getOptionLabel) {
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid-premium v8.20.0
2
+ * @mui/x-data-grid-premium v8.22.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
@@ -80,7 +80,13 @@ const getGroupAggregatedValue = (groupId, apiRef, aggregationRowsScope, aggregat
80
80
  groupId,
81
81
  field: aggregatedField // Added per user request in https://github.com/mui/mui-x/issues/6995#issuecomment-1327423455
82
82
  }, publicApi);
83
- const formattedValue = aggregationFunction.valueFormatter ? aggregationFunction.valueFormatter(value, rowLookup[groupId], columnsLookup[aggregatedField], apiRef) : undefined;
83
+
84
+ // Use the actual row from rowLookup if it exists, otherwise pass a new autogenerated row
85
+ const rowForFormatter = rowLookup[groupId] || {
86
+ id: groupId,
87
+ [aggregatedField]: value
88
+ };
89
+ const formattedValue = aggregationFunction.valueFormatter ? aggregationFunction.valueFormatter(value, rowForFormatter, columnsLookup[aggregatedField], apiRef) : undefined;
84
90
 
85
91
  // Only add to groupAggregationLookup if position is not null
86
92
  if (position !== null) {
@@ -86,6 +86,12 @@ class CellValueUpdater {
86
86
  if (!row) {
87
87
  return;
88
88
  }
89
+
90
+ // Check if the cell is editable using the API method, which respects the isCellEditable prop
91
+ const cellParams = apiRef.current.getCellParams(rowId, field);
92
+ if (!apiRef.current.isCellEditable(cellParams)) {
93
+ return;
94
+ }
89
95
  let parsedValue = pastedCellValue;
90
96
  if (colDef.pastedValueParser) {
91
97
  parsedValue = colDef.pastedValueParser(pastedCellValue, row, colDef, apiRef);
@@ -177,7 +177,13 @@ const createPivotPropsFromRows = ({
177
177
  if (!column) {
178
178
  continue;
179
179
  }
180
- let colValue = apiRef.current.getRowValue(row, column) ?? '(No value)';
180
+ const noValueString = '(No value)';
181
+ let colValue = apiRef.current.getRowValue(row, column) ?? noValueString;
182
+ // Handle empty strings to prevent issues with column grouping model
183
+ // https://github.com/mui/mui-x/issues/20552
184
+ if (colValue === '') {
185
+ colValue = noValueString;
186
+ }
181
187
  if (column.type === 'singleSelect') {
182
188
  const singleSelectColumn = column;
183
189
  if (singleSelectColumn.getOptionLabel) {
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid-premium v8.20.0
2
+ * @mui/x-data-grid-premium v8.22.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-data-grid-premium",
3
- "version": "8.20.0",
3
+ "version": "8.22.0",
4
4
  "author": "MUI Team",
5
5
  "description": "The Premium plan edition of the MUI X Data Grid Components.",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -38,10 +38,10 @@
38
38
  "@mui/x-internal-exceljs-fork": "4.4.3",
39
39
  "clsx": "^2.1.1",
40
40
  "prop-types": "^15.8.1",
41
- "@mui/x-data-grid": "8.20.0",
42
- "@mui/x-data-grid-pro": "8.20.0",
43
- "@mui/x-internals": "8.19.0",
44
- "@mui/x-license": "8.19.0"
41
+ "@mui/x-data-grid": "8.22.0",
42
+ "@mui/x-data-grid-pro": "8.22.0",
43
+ "@mui/x-internals": "8.22.0",
44
+ "@mui/x-license": "8.22.0"
45
45
  },
46
46
  "peerDependencies": {
47
47
  "@emotion/react": "^11.9.0",