@mui/x-tree-view 8.21.0 → 8.23.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.
Files changed (80) hide show
  1. package/CHANGELOG.md +339 -1
  2. package/RichTreeView/RichTreeView.js +8 -1
  3. package/RichTreeView/RichTreeView.types.d.ts +1 -1
  4. package/SimpleTreeView/SimpleTreeView.js +1 -1
  5. package/SimpleTreeView/SimpleTreeView.plugins.d.ts +1 -1
  6. package/SimpleTreeView/SimpleTreeView.types.d.ts +1 -1
  7. package/TreeItem/TreeItem.js +9 -2
  8. package/esm/RichTreeView/RichTreeView.js +8 -1
  9. package/esm/RichTreeView/RichTreeView.types.d.ts +1 -1
  10. package/esm/SimpleTreeView/SimpleTreeView.js +1 -1
  11. package/esm/SimpleTreeView/SimpleTreeView.plugins.d.ts +1 -1
  12. package/esm/SimpleTreeView/SimpleTreeView.types.d.ts +1 -1
  13. package/esm/TreeItem/TreeItem.js +9 -2
  14. package/esm/hooks/index.d.ts +4 -2
  15. package/esm/hooks/index.js +4 -2
  16. package/esm/hooks/useApplyPropagationToSelectedItemsOnMount.js +1 -1
  17. package/esm/hooks/useRichTreeViewApiRef.d.ts +8 -0
  18. package/esm/hooks/useRichTreeViewApiRef.js +7 -0
  19. package/esm/hooks/useSimpleTreeViewApiRef.d.ts +8 -0
  20. package/esm/hooks/useSimpleTreeViewApiRef.js +7 -0
  21. package/esm/hooks/useTreeItemUtils/useTreeItemUtils.js +1 -1
  22. package/esm/hooks/useTreeViewApiRef.d.ts +1 -0
  23. package/esm/hooks/useTreeViewApiRef.js +1 -0
  24. package/esm/index.js +1 -1
  25. package/esm/internals/models/treeView.d.ts +1 -0
  26. package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +6 -6
  27. package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +4 -4
  28. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.js +13 -8
  29. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +4 -0
  30. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +5 -1
  31. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +7 -0
  32. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.utils.d.ts +1 -1
  33. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.utils.js +1 -0
  34. package/esm/internals/plugins/useTreeViewJSXItems/itemPlugin.js +6 -4
  35. package/esm/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +3 -3
  36. package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +4 -4
  37. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +1 -1
  38. package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +2 -2
  39. package/esm/internals/plugins/useTreeViewSelection/itemPlugin.js +5 -5
  40. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +3 -2
  41. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +6 -1
  42. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +7 -2
  43. package/esm/internals/useTreeView/useTreeView.js +2 -2
  44. package/esm/models/items.d.ts +4 -1
  45. package/esm/useTreeItem/useTreeItem.js +1 -1
  46. package/esm/useTreeItem/useTreeItem.types.d.ts +5 -0
  47. package/hooks/index.d.ts +4 -2
  48. package/hooks/index.js +16 -2
  49. package/hooks/useApplyPropagationToSelectedItemsOnMount.js +1 -1
  50. package/hooks/useRichTreeViewApiRef.d.ts +8 -0
  51. package/hooks/useRichTreeViewApiRef.js +14 -0
  52. package/hooks/useSimpleTreeViewApiRef.d.ts +8 -0
  53. package/hooks/useSimpleTreeViewApiRef.js +14 -0
  54. package/hooks/useTreeItemUtils/useTreeItemUtils.js +1 -1
  55. package/hooks/useTreeViewApiRef.d.ts +1 -0
  56. package/hooks/useTreeViewApiRef.js +1 -0
  57. package/index.js +1 -1
  58. package/internals/models/treeView.d.ts +1 -0
  59. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +6 -6
  60. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +4 -4
  61. package/internals/plugins/useTreeViewItems/useTreeViewItems.js +13 -8
  62. package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +4 -0
  63. package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +5 -1
  64. package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +7 -0
  65. package/internals/plugins/useTreeViewItems/useTreeViewItems.utils.d.ts +1 -1
  66. package/internals/plugins/useTreeViewItems/useTreeViewItems.utils.js +1 -0
  67. package/internals/plugins/useTreeViewJSXItems/itemPlugin.js +6 -4
  68. package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +3 -3
  69. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +4 -4
  70. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +1 -1
  71. package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +2 -2
  72. package/internals/plugins/useTreeViewSelection/itemPlugin.js +5 -5
  73. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +3 -2
  74. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +6 -1
  75. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +7 -2
  76. package/internals/useTreeView/useTreeView.js +2 -2
  77. package/models/items.d.ts +4 -1
  78. package/package.json +3 -3
  79. package/useTreeItem/useTreeItem.js +1 -1
  80. package/useTreeItem/useTreeItem.types.d.ts +5 -0
package/CHANGELOG.md CHANGED
@@ -5,6 +5,344 @@
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.23.0
9
+
10
+ _Dec 23, 2025_
11
+
12
+ We'd like to extend a big thank you to the 12 contributors who made this release possible. Here are some highlights ✨:
13
+
14
+ - 🧮 Support Data Grid `size`, `size(true)`, and `size(false)` [aggregations for `'boolean'` column type](https://mui.com/x/react-data-grid/aggregation/#usage-with-row-grouping)
15
+ - 🔎 Allow zooming a heatmap
16
+
17
+ Special thanks go out to these community members for their valuable contributions:
18
+ @henkerik, @sai6855
19
+
20
+ The following team members contributed to this release:
21
+ @alelthomas, @alexfauquette, @arminmeh, @bernardobelchior, @brijeshb42, @flaviendelangle, @JCQuintas, @mapache-salvaje, @MBilalShafi, @siriwatknp
22
+
23
+ ### Data Grid
24
+
25
+ #### `@mui/x-data-grid@8.23.0`
26
+
27
+ - [DataGrid] Fix columns state and columns prop sync issue (#20703) @arminmeh
28
+ - [DataGrid] Fix filter datetime with seconds (#20557) @siriwatknp
29
+ - [DataGrid] Add new `includeHeaderFilters` flag to include header filters when autosizing columns (#20510) @siriwatknp
30
+ - [DataGrid] Prevent default on `Enter` key down when starting editing (#20751) @siriwatknp
31
+ - [l10n] Improve Portuguese from Portugal (pt-PT) locale (#20722) @Copilot
32
+
33
+ #### `@mui/x-data-grid-pro@8.23.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
34
+
35
+ Same changes as in `@mui/x-data-grid@8.23.0`, plus:
36
+
37
+ - [DataGridPro] Fix crash on rows change in tree data with pagination (#20215) @Copilot
38
+
39
+ #### `@mui/x-data-grid-premium@8.23.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
40
+
41
+ Same changes as in `@mui/x-data-grid-pro@8.23.0`, plus:
42
+
43
+ - [DataGridPremium] Add aggregation for `'boolean'` column type (#20683) @arminmeh
44
+ - [DataGridPremium] Fix strategy value computation with row grouping (#20725) @MBilalShafi
45
+ - [DataGridPremium] Handle `isRowSelectable()` checks for the rows missing due to `keepNonExistentRowsSelected` (#20668) @arminmeh
46
+
47
+ ### Date and Time Pickers
48
+
49
+ #### `@mui/x-date-pickers@8.23.0`
50
+
51
+ Internal changes.
52
+
53
+ #### `@mui/x-date-pickers-pro@8.23.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
54
+
55
+ Same changes as in `@mui/x-date-pickers@8.23.0`.
56
+
57
+ ### Charts
58
+
59
+ #### `@mui/x-charts@8.23.0`
60
+
61
+ - [charts] Custom stack functions implementation (#20679) @JCQuintas
62
+ - [charts] Extract keyboard focus navigation to the series config (#20693) @alexfauquette
63
+ - [charts] Fix demo not wrapping in mobile (#20713) @JCQuintas
64
+ - [charts] Fix missing dependencies in `x-charts-vendor` (#20685) @henkerik
65
+ - [charts] Remove webkit test differences (#20707) @JCQuintas
66
+
67
+ #### `@mui/x-charts-pro@8.23.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-charts@8.23.0`, plus:
70
+
71
+ - [charts-pro] Allow registering preview plots from higher tier packages (#20716) @bernardobelchior
72
+ - [charts-pro] Fix erroneous behavior when adding/removing pointers from zoom&pan gestures (#20698) @JCQuintas
73
+ - [charts-pro] Move heatmap highlight handling to plot component (#20701) @bernardobelchior
74
+ - [charts-pro] Add zoom to heatmap (#20708) @bernardobelchior
75
+
76
+ #### `@mui/x-charts-premium@8.23.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
77
+
78
+ Same changes as in `@mui/x-charts-pro@8.23.0`.
79
+
80
+ ### Tree View
81
+
82
+ #### `@mui/x-tree-view@8.23.0`
83
+
84
+ - [tree view] Add new APIs to disable selection feature for tree view item (#20666) @siriwatknp
85
+
86
+ #### `@mui/x-tree-view-pro@8.23.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
87
+
88
+ Same changes as in `@mui/x-tree-view@8.23.0`.
89
+
90
+ ### Codemod
91
+
92
+ #### `@mui/x-codemod@8.23.0`
93
+
94
+ Internal changes.
95
+
96
+ ### Docs
97
+
98
+ - [docs] Clarify feature availability and relationship between Community and Pro/Premium docs (#20714) @mapache-salvaje
99
+ - [docs] Copyedit Tree View docs and apply new component style rules (DX-19) (#20652) @mapache-salvaje
100
+ - [docs] Fix `ColumnPinningDynamicRowHeight` demo (#20750) @sai6855
101
+ - [docs] Clean up Charts docs sidebar (DX-97) (#20700) @alelthomas
102
+ - [docs] Fix tick labels not being shown on a demo (#20718) @sai6855
103
+
104
+ ### Core
105
+
106
+ - [code-infra] Bump prettier to 3.7.4 (#20709) @JCQuintas
107
+ - [code-infra] Fix contributor generation logic in changelog script (#20705) @brijeshb42
108
+
109
+ ## 8.22.1
110
+
111
+ _Dec 17, 2025_
112
+
113
+ We'd like to extend a big thank you to the 13 contributors who made this release possible. Here are some highlights ✨:
114
+
115
+ - 🌎 Improve Swedish (sv-SE) locale on the Data Grid
116
+ - 🐞 Bugfixes
117
+
118
+ Special thanks go out to the community members for their valuable contributions:
119
+ @KyeongJooni, @VismaAndreasIvarsson
120
+
121
+ The following team members contributed to this release:
122
+ @alelthomas, @alexfauquette, @arminmeh, @bernardobelchior, @Janpot, @JCQuintas, @mapache-salvaje, @michelengelen, @mj12albert, @prakhargupta1, @romgrk, @siriwatknp
123
+
124
+ ### Data Grid
125
+
126
+ #### `@mui/x-data-grid@8.22.1`
127
+
128
+ - [data grid] Fix column menu keyboard shortcut (#20621) @mj12albert
129
+ - [data grid] Fix row checkbox disabled state on first render and keep cell focusable (ARIA) (#20641) @michelengelen
130
+ - [data grid] Fix tree data selection bug (#20528) @michelengelen
131
+ - [data grid] Prevent clear cell selection on edit mode (#20544) @siriwatknp
132
+ - [data grid] Refactor column merge logic to prioritize defined properties only (#20640) @michelengelen
133
+ - [data grid] Reset row spanning on row expansion change (#20661) @siriwatknp
134
+ - [data grid] Resize newly added rows while resize action is happening (#20676)
135
+ - [l10n] Improve Swedish (sv-SE) locale (#20682) @VismaAndreasIvarsson
136
+
137
+ #### `@mui/x-data-grid-pro@8.22.1` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
138
+
139
+ Same changes as in `@mui/x-data-grid@8.22.1`.
140
+
141
+ #### `@mui/x-data-grid-premium@8.22.1` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
142
+
143
+ Same changes as in `@mui/x-data-grid-pro@8.22.1`, plus:
144
+
145
+ - [DataGridPremium] Import `useId()` from `@mui/utils` to maintain React 17 compatibility (#20635) @arminmeh
146
+
147
+ ### Date and Time Pickers
148
+
149
+ #### `@mui/x-date-pickers@8.22.1`
150
+
151
+ - [pickers] Add minutesStep validation test (#20672) @KyeongJooni
152
+ - [pickers] Fix `onAccept()` returning wrong year after selecting year then month (#20639) @michelengelen
153
+
154
+ #### `@mui/x-date-pickers-pro@8.22.1` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
155
+
156
+ Same changes as in `@mui/x-date-pickers@8.22.1`.
157
+
158
+ ### Charts
159
+
160
+ #### `@mui/x-charts@8.22.1`
161
+
162
+ - [charts] Extract `FocusedPieArc` from `PieArcPlot` (#20613) @alexfauquette
163
+ - [charts] Fix regression on the highlight control (#20627) @alexfauquette
164
+ - [charts] Refactor: `useSelector()` => `store.use()` (#20681) @romgrk
165
+ - [charts] Remove duplicated types (#20694) @alexfauquette
166
+ - [charts] Remove unused generics from bar charts (#20642) @bernardobelchior
167
+ - [charts] Simplify tooltip position getter for pie chart (#20625) @alexfauquette
168
+
169
+ #### `@mui/x-charts-pro@8.22.1` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
170
+
171
+ Same changes as in `@mui/x-charts@8.22.1`, plus:
172
+
173
+ - [charts-pro] Add heatmap performance benchmark (#20695) @bernardobelchior
174
+
175
+ #### `@mui/x-charts-premium@8.22.1` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
176
+
177
+ Same changes as in `@mui/x-charts-pro@8.22.1`, plus:
178
+
179
+ - [charts-premium] Create `BarChartPremium` (#20643) @bernardobelchior
180
+
181
+ ### Tree View
182
+
183
+ #### `@mui/x-tree-view@8.22.1`
184
+
185
+ Internal changes.
186
+
187
+ #### `@mui/x-tree-view-pro@8.22.1` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
188
+
189
+ Same changes as in `@mui/x-tree-view@8.22.1`.
190
+
191
+ ### Codemod
192
+
193
+ #### `@mui/x-codemod@8.22.1`
194
+
195
+ Internal changes.
196
+
197
+ ### Docs
198
+
199
+ - [docs] Add button to GitHub source code for the Data Grid advanced demos (DX-50) (#20633) @alelthomas
200
+ - [docs] Remove `seriesConfig` to prevent future confusion (#20678) @alexfauquette
201
+ - [docs] Revise the Data Grid's API object doc for clarity and style (#20649) @mapache-salvaje
202
+ - [docs] Update list of charts (#20479) @prakhargupta1
203
+
204
+ ### Core
205
+
206
+ - [code-infra] Regression tests improvements (#20441) @Janpot
207
+ - [code-infra] Test utils upgrade (#20592) @Janpot
208
+ - [code-infra] Try to fix the Tree View flacky tests (#20573) @JCQuintas
209
+
210
+ ## 8.22.0
211
+
212
+ _Dec 11, 2025_
213
+
214
+ We'd like to extend a big thank you to the 11 contributors who made this release possible. Here are some highlights ✨:
215
+
216
+ - Each Tree View component now exposes its own hook to initialize the `apiRef` object with accurate typing:
217
+
218
+ ```diff
219
+ -import { useTreeViewApiRef } from '@mui/x-tree-view/hooks';
220
+ +import { useSimpleTreeViewApiRef } from '@mui/x-tree-view/hooks';
221
+ -const apiRef = useTreeViewApiRef();
222
+ +const apiRef = useSimpleTreeViewApiRef();
223
+
224
+ -import { useTreeViewApiRef } from '@mui/x-tree-view/hooks';
225
+ +import { useRichTreeViewApiRef } from '@mui/x-tree-view/hooks';
226
+ -const apiRef = useTreeViewApiRef();
227
+ +const apiRef = useRichTreeViewApiRef();
228
+
229
+ -import { useTreeViewApiRef } from '@mui/x-tree-view/hooks';
230
+ +import { useRichTreeViewProApiRef } from '@mui/x-tree-view-pro/hooks';
231
+ -const apiRef = useTreeViewApiRef();
232
+ +const apiRef = useRichTreeViewProApiRef();
233
+ ```
234
+
235
+ - 📚 [Tutorial](https://mui.com/x/react-data-grid/tutorials/server-side-data/) on building a Data Grid with server-side data
236
+ - 🐞 Bugfixes
237
+
238
+ Special thanks go out to this community member for their valuable contributions:
239
+ @kzhgit
240
+
241
+ The following team members contributed to this release:
242
+ @alexfauquette, @arminmeh, @bernardobelchior, @cherniavskii, @flaviendelangle, @JCQuintas, @mapache-salvaje, @michelengelen, @noraleonte, @oliviertassinari
243
+
244
+ ### Data Grid
245
+
246
+ #### `@mui/x-data-grid@8.22.0`
247
+
248
+ - [DataGrid] Sync component props with theme defaults (#20590) @michelengelen
249
+ - [DataGrid] Add fallback for CSS `color-mix` if it is unsupported (#20597) @cherniavskii
250
+ - [DataGrid] Use `baseTooltip` slot for column header sort icon (#20460) @kzhgit
251
+
252
+ #### `@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')
253
+
254
+ Same changes as in `@mui/x-data-grid@8.22.0`.
255
+
256
+ #### `@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')
257
+
258
+ Same changes as in `@mui/x-data-grid-pro@8.22.0`, plus:
259
+
260
+ - [DataGridPremium] Handle pivoting column name generation for empty strings (#20608) @arminmeh
261
+ - [DataGridPremium] Pass a row with aggregated value to the custom aggregation function `valueFormatter` (#20607) @arminmeh
262
+
263
+ ### Date and Time Pickers
264
+
265
+ #### `@mui/x-date-pickers@8.22.0`
266
+
267
+ - [pickers] Fix invalid date tests (#20606) @michelengelen
268
+
269
+ #### `@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')
270
+
271
+ Same changes as in `@mui/x-date-pickers@8.22.0`.
272
+
273
+ ### Charts
274
+
275
+ #### `@mui/x-charts@8.22.0`
276
+
277
+ - [charts] Add consistent animation duration and timing (#20564) @JCQuintas
278
+ - [charts] Extract a tooltip plugin from the interaction one (#20591) @alexfauquette
279
+ - [charts] General type improvements (#20565) @JCQuintas
280
+ - [charts] Place ordinal ticks according to a continuous scale (#19808) @alexfauquette
281
+ - [charts] Remove layout data from the tooltip internals (#20548) @alexfauquette
282
+ - [charts] Remove usage of focus outline for item highlight (#19856) @alexfauquette
283
+ - [charts] Simplify `MarkPlot` by moving calculation to `useMarkPlotData` (#20570) @JCQuintas
284
+ - [charts] Use `store.state` over `store.getSnapshot()` (#20616) @bernardobelchior
285
+ - [charts] Vendor flatqueue (#20610) @bernardobelchior
286
+ - [charts] Extract pie layout computation (#20611) @alexfauquette
287
+ - [charts][infra] Enable `@typescript-eslint/consistent-type-imports` eslint rules (#20560) @JCQuintas
288
+ - [charts][infra] Enable `import/no-cycle` eslint rules (#20554) @JCQuintas
289
+
290
+ #### `@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')
291
+
292
+ Same changes as in `@mui/x-charts@8.22.0`, plus:
293
+
294
+ - [charts-pro] Display sankey labels on top of nodes (#20569) @alexfauquette
295
+
296
+ #### `@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')
297
+
298
+ Same changes as in `@mui/x-charts-pro@8.22.0`.
299
+
300
+ ### Tree View
301
+
302
+ #### `@mui/x-tree-view@8.22.0`
303
+
304
+ - [tree view] Expose one hook per component to initialize the `apiRef` (#20235) @flaviendelangle
305
+ - [tree view] Update the typing of `updateItemChildren()` to accept `null` (#20483) @noraleonte
306
+
307
+ #### `@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')
308
+
309
+ Same changes as in `@mui/x-tree-view@8.22.0`.
310
+
311
+ ### Codemod
312
+
313
+ #### `@mui/x-codemod@8.22.0`
314
+
315
+ Internal changes.
316
+
317
+ ### Docs
318
+
319
+ - [docs] Add tutorial on building a Data Grid with server-side data (DX-22) (#19782) @mapache-salvaje
320
+ - [docs] Modify the default value for the stacking demo (#20596) @alexfauquette
321
+ - [docs] Revise the Charts Custom Components doc (#19793) @mapache-salvaje
322
+ - [docs] Remove copy-pasted `aria-label` (#20620) @alexfauquette
323
+
324
+ ### Core
325
+
326
+ - [internal] Remove unsafe dependency version from range (#20574) @oliviertassinari
327
+
328
+ ### Miscellaneous
329
+
330
+ - Bump `@mui/monorepo` digest to `800638d` (#20337) @renovate[bot]
331
+ - Bump `@next/eslint-plugin-next` to `15.5.7` (#20575) @renovate[bot]
332
+ - Bump GitHub Actions (#20577) @renovate[bot]
333
+ - Bump Tanstack query to `^5.90.12` (#20582) @renovate[bot]
334
+ - Bump Vite & Vitest (#20583) @renovate[bot]
335
+ - Bump `eslint` to `^8.48.1` (#20576) @renovate[bot]
336
+ - Bump `markdown-to-jsx` to `^9.3.2` (#20507) @renovate[bot]
337
+ - Bump `motion` to `^12.23.25` (#20579) @renovate[bot]
338
+ - Bump react monorepo to `19.2.1` (#20581) @renovate[bot]
339
+ - Bump `react-hook-form` to `^7.68.0` (#20584) @renovate[bot]
340
+ - Bump `react-router` to `^7.10.1` (#20341) @renovate[bot]
341
+ - Bump `tsx` to `^4.21.0` (#20585) @renovate[bot]
342
+ - Bump MUI infra packages (#20478) @renovate[bot]
343
+ - [infra] Automatically add teams to release PRs (#20558) @JCQuintas
344
+ - [infra] Fix codeowners typo (#20562) @JCQuintas
345
+
8
346
  ## 8.21.0
9
347
 
10
348
  _Dec 3, 2025_
@@ -115,7 +453,7 @@ Internal changes.
115
453
  - Bump react-hook-form to ^7.66.1 (#20497) @renovate[bot]
116
454
  - Bump rimraf to ^6.1.2 (#20498) @renovate[bot]
117
455
  - Bump webpack-bundle-analyzer to ^5.0.1 (#20508) @renovate[bot]
118
- - Bump next to ^15.5.6 [SECURITY] (#20555) @renovate[bot]
456
+ - Bump next to ^15.5.7 [SECURITY] (#20555) @renovate[bot]
119
457
 
120
458
  ## 8.20.0
121
459
 
@@ -132,7 +132,7 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
132
132
  // | To update them edit the TypeScript types and run "pnpm proptypes" |
133
133
  // ----------------------------------------------------------------------
134
134
  /**
135
- * The ref object that allows Tree View manipulation. Can be instantiated with `useTreeViewApiRef()`.
135
+ * The ref object that allows Tree View manipulation. Can be instantiated with `useRichTreeViewApiRef()`.
136
136
  */
137
137
  apiRef: _propTypes.default.shape({
138
138
  current: _propTypes.default.shape({
@@ -239,6 +239,13 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
239
239
  * @default () => false
240
240
  */
241
241
  isItemEditable: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.bool]),
242
+ /**
243
+ * Used to determine if a given item should have selection disabled.
244
+ * @template R
245
+ * @param {R} item The item to check.
246
+ * @returns {boolean} `true` if the item should have selection disabled.
247
+ */
248
+ isItemSelectionDisabled: _propTypes.default.func,
242
249
  /**
243
250
  * Horizontal indentation between an item and its children.
244
251
  * Examples: 24, "24px", "2rem", "2em".
@@ -41,7 +41,7 @@ export interface RichTreeViewProps<R extends {}, Multiple extends boolean | unde
41
41
  */
42
42
  slotProps?: RichTreeViewSlotProps<R, Multiple>;
43
43
  /**
44
- * The ref object that allows Tree View manipulation. Can be instantiated with `useTreeViewApiRef()`.
44
+ * The ref object that allows Tree View manipulation. Can be instantiated with `useRichTreeViewApiRef()`.
45
45
  */
46
46
  apiRef?: RichTreeViewApiRef;
47
47
  }
@@ -113,7 +113,7 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
113
113
  // | To update them edit the TypeScript types and run "pnpm proptypes" |
114
114
  // ----------------------------------------------------------------------
115
115
  /**
116
- * The ref object that allows Tree View manipulation. Can be instantiated with `useTreeViewApiRef()`.
116
+ * The ref object that allows Tree View manipulation. Can be instantiated with `useSimpleTreeViewApiRef()`.
117
117
  */
118
118
  apiRef: _propTypes.default.shape({
119
119
  current: _propTypes.default.shape({
@@ -6,4 +6,4 @@ import { UseTreeViewFocusParameters } from "../internals/plugins/useTreeViewFocu
6
6
  import { ConvertPluginsIntoSignatures } from "../internals/models/index.js";
7
7
  export declare const SIMPLE_TREE_VIEW_PLUGINS: readonly [import("../internals/index.js").TreeViewPlugin<import("../internals/index.js").UseTreeViewItemsSignature>, import("../internals/index.js").TreeViewPlugin<import("../internals/index.js").UseTreeViewExpansionSignature>, import("../internals/index.js").TreeViewPlugin<import("../internals/index.js").UseTreeViewSelectionSignature>, import("../internals/index.js").TreeViewPlugin<import("../internals/index.js").UseTreeViewFocusSignature>, import("../internals/index.js").TreeViewPlugin<import("../internals/index.js").UseTreeViewKeyboardNavigationSignature>, import("../internals/index.js").TreeViewPlugin<import("../internals/index.js").UseTreeViewJSXItemsSignature>];
8
8
  export type SimpleTreeViewPluginSignatures = ConvertPluginsIntoSignatures<typeof SIMPLE_TREE_VIEW_PLUGINS>;
9
- export interface SimpleTreeViewPluginParameters<Multiple extends boolean | undefined> extends TreeViewCorePluginParameters, Omit<UseTreeViewItemsParameters<any>, 'items' | 'isItemDisabled' | 'getItemLabel' | 'getItemChildren' | 'getItemId'>, UseTreeViewExpansionParameters, UseTreeViewFocusParameters, UseTreeViewSelectionParameters<Multiple> {}
9
+ export interface SimpleTreeViewPluginParameters<Multiple extends boolean | undefined> extends TreeViewCorePluginParameters, Omit<UseTreeViewItemsParameters<any>, 'items' | 'isItemDisabled' | 'isItemSelectionDisabled' | 'getItemLabel' | 'getItemChildren' | 'getItemId'>, UseTreeViewExpansionParameters, UseTreeViewFocusParameters, UseTreeViewSelectionParameters<Multiple> {}
@@ -40,7 +40,7 @@ export interface SimpleTreeViewProps<Multiple extends boolean | undefined> exten
40
40
  */
41
41
  sx?: SxProps<Theme>;
42
42
  /**
43
- * The ref object that allows Tree View manipulation. Can be instantiated with `useTreeViewApiRef()`.
43
+ * The ref object that allows Tree View manipulation. Can be instantiated with `useSimpleTreeViewApiRef()`.
44
44
  */
45
45
  apiRef?: SimpleTreeViewApiRef;
46
46
  }
@@ -30,7 +30,7 @@ var _TreeItemLabelInput = require("../TreeItemLabelInput");
30
30
  var _TreeViewStyleContext = require("../internals/TreeViewProvider/TreeViewStyleContext");
31
31
  var _jsxRuntime = require("react/jsx-runtime");
32
32
  const _excluded = ["visible"],
33
- _excluded2 = ["id", "itemId", "label", "disabled", "children", "slots", "slotProps", "classes"];
33
+ _excluded2 = ["id", "itemId", "label", "disabled", "disableSelection", "children", "slots", "slotProps", "classes"];
34
34
  const useThemeProps = (0, _zeroStyled.createUseThemeProps)('MuiTreeItem');
35
35
  const TreeItemRoot = exports.TreeItemRoot = (0, _zeroStyled.styled)('li', {
36
36
  name: 'MuiTreeItem',
@@ -226,6 +226,7 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
226
226
  itemId,
227
227
  label,
228
228
  disabled,
229
+ disableSelection,
229
230
  children,
230
231
  slots = {},
231
232
  slotProps = {},
@@ -250,7 +251,8 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
250
251
  itemId,
251
252
  children,
252
253
  label,
253
- disabled
254
+ disabled,
255
+ disableSelection
254
256
  });
255
257
  const classes = useUtilityClasses(classesProp);
256
258
  const Root = slots.root ?? TreeItemRoot;
@@ -373,6 +375,11 @@ process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
373
375
  * @default false
374
376
  */
375
377
  disabled: _propTypes.default.bool,
378
+ /**
379
+ * If `true`, the item cannot be selected.
380
+ * @default false
381
+ */
382
+ disableSelection: _propTypes.default.bool,
376
383
  /**
377
384
  * The id attribute of the item. If not provided, it will be generated.
378
385
  */
@@ -125,7 +125,7 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
125
125
  // | To update them edit the TypeScript types and run "pnpm proptypes" |
126
126
  // ----------------------------------------------------------------------
127
127
  /**
128
- * The ref object that allows Tree View manipulation. Can be instantiated with `useTreeViewApiRef()`.
128
+ * The ref object that allows Tree View manipulation. Can be instantiated with `useRichTreeViewApiRef()`.
129
129
  */
130
130
  apiRef: PropTypes.shape({
131
131
  current: PropTypes.shape({
@@ -232,6 +232,13 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
232
232
  * @default () => false
233
233
  */
234
234
  isItemEditable: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),
235
+ /**
236
+ * Used to determine if a given item should have selection disabled.
237
+ * @template R
238
+ * @param {R} item The item to check.
239
+ * @returns {boolean} `true` if the item should have selection disabled.
240
+ */
241
+ isItemSelectionDisabled: PropTypes.func,
235
242
  /**
236
243
  * Horizontal indentation between an item and its children.
237
244
  * Examples: 24, "24px", "2rem", "2em".
@@ -41,7 +41,7 @@ export interface RichTreeViewProps<R extends {}, Multiple extends boolean | unde
41
41
  */
42
42
  slotProps?: RichTreeViewSlotProps<R, Multiple>;
43
43
  /**
44
- * The ref object that allows Tree View manipulation. Can be instantiated with `useTreeViewApiRef()`.
44
+ * The ref object that allows Tree View manipulation. Can be instantiated with `useRichTreeViewApiRef()`.
45
45
  */
46
46
  apiRef?: RichTreeViewApiRef;
47
47
  }
@@ -106,7 +106,7 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
106
106
  // | To update them edit the TypeScript types and run "pnpm proptypes" |
107
107
  // ----------------------------------------------------------------------
108
108
  /**
109
- * The ref object that allows Tree View manipulation. Can be instantiated with `useTreeViewApiRef()`.
109
+ * The ref object that allows Tree View manipulation. Can be instantiated with `useSimpleTreeViewApiRef()`.
110
110
  */
111
111
  apiRef: PropTypes.shape({
112
112
  current: PropTypes.shape({
@@ -6,4 +6,4 @@ import { UseTreeViewFocusParameters } from "../internals/plugins/useTreeViewFocu
6
6
  import { ConvertPluginsIntoSignatures } from "../internals/models/index.js";
7
7
  export declare const SIMPLE_TREE_VIEW_PLUGINS: readonly [import("../internals/index.js").TreeViewPlugin<import("../internals/index.js").UseTreeViewItemsSignature>, import("../internals/index.js").TreeViewPlugin<import("../internals/index.js").UseTreeViewExpansionSignature>, import("../internals/index.js").TreeViewPlugin<import("../internals/index.js").UseTreeViewSelectionSignature>, import("../internals/index.js").TreeViewPlugin<import("../internals/index.js").UseTreeViewFocusSignature>, import("../internals/index.js").TreeViewPlugin<import("../internals/index.js").UseTreeViewKeyboardNavigationSignature>, import("../internals/index.js").TreeViewPlugin<import("../internals/index.js").UseTreeViewJSXItemsSignature>];
8
8
  export type SimpleTreeViewPluginSignatures = ConvertPluginsIntoSignatures<typeof SIMPLE_TREE_VIEW_PLUGINS>;
9
- export interface SimpleTreeViewPluginParameters<Multiple extends boolean | undefined> extends TreeViewCorePluginParameters, Omit<UseTreeViewItemsParameters<any>, 'items' | 'isItemDisabled' | 'getItemLabel' | 'getItemChildren' | 'getItemId'>, UseTreeViewExpansionParameters, UseTreeViewFocusParameters, UseTreeViewSelectionParameters<Multiple> {}
9
+ export interface SimpleTreeViewPluginParameters<Multiple extends boolean | undefined> extends TreeViewCorePluginParameters, Omit<UseTreeViewItemsParameters<any>, 'items' | 'isItemDisabled' | 'isItemSelectionDisabled' | 'getItemLabel' | 'getItemChildren' | 'getItemId'>, UseTreeViewExpansionParameters, UseTreeViewFocusParameters, UseTreeViewSelectionParameters<Multiple> {}
@@ -40,7 +40,7 @@ export interface SimpleTreeViewProps<Multiple extends boolean | undefined> exten
40
40
  */
41
41
  sx?: SxProps<Theme>;
42
42
  /**
43
- * The ref object that allows Tree View manipulation. Can be instantiated with `useTreeViewApiRef()`.
43
+ * The ref object that allows Tree View manipulation. Can be instantiated with `useSimpleTreeViewApiRef()`.
44
44
  */
45
45
  apiRef?: SimpleTreeViewApiRef;
46
46
  }
@@ -3,7 +3,7 @@
3
3
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
4
4
  import _extends from "@babel/runtime/helpers/esm/extends";
5
5
  const _excluded = ["visible"],
6
- _excluded2 = ["id", "itemId", "label", "disabled", "children", "slots", "slotProps", "classes"];
6
+ _excluded2 = ["id", "itemId", "label", "disabled", "disableSelection", "children", "slots", "slotProps", "classes"];
7
7
  import * as React from 'react';
8
8
  import PropTypes from 'prop-types';
9
9
  import clsx from 'clsx';
@@ -219,6 +219,7 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
219
219
  itemId,
220
220
  label,
221
221
  disabled,
222
+ disableSelection,
222
223
  children,
223
224
  slots = {},
224
225
  slotProps = {},
@@ -243,7 +244,8 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
243
244
  itemId,
244
245
  children,
245
246
  label,
246
- disabled
247
+ disabled,
248
+ disableSelection
247
249
  });
248
250
  const classes = useUtilityClasses(classesProp);
249
251
  const Root = slots.root ?? TreeItemRoot;
@@ -366,6 +368,11 @@ process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
366
368
  * @default false
367
369
  */
368
370
  disabled: PropTypes.bool,
371
+ /**
372
+ * If `true`, the item cannot be selected.
373
+ * @default false
374
+ */
375
+ disableSelection: PropTypes.bool,
369
376
  /**
370
377
  * The id attribute of the item. If not provided, it will be generated.
371
378
  */
@@ -1,4 +1,6 @@
1
- export { useTreeViewApiRef } from "./useTreeViewApiRef.js";
2
1
  export { useTreeItemUtils } from "./useTreeItemUtils/index.js";
3
2
  export { useTreeItemModel } from "./useTreeItemModel.js";
4
- export { useApplyPropagationToSelectedItemsOnMount } from "./useApplyPropagationToSelectedItemsOnMount.js";
3
+ export { useApplyPropagationToSelectedItemsOnMount } from "./useApplyPropagationToSelectedItemsOnMount.js";
4
+ export { useTreeViewApiRef } from "./useTreeViewApiRef.js";
5
+ export { useRichTreeViewApiRef } from "./useRichTreeViewApiRef.js";
6
+ export { useSimpleTreeViewApiRef } from "./useSimpleTreeViewApiRef.js";
@@ -1,4 +1,6 @@
1
- export { useTreeViewApiRef } from "./useTreeViewApiRef.js";
2
1
  export { useTreeItemUtils } from "./useTreeItemUtils/index.js";
3
2
  export { useTreeItemModel } from "./useTreeItemModel.js";
4
- export { useApplyPropagationToSelectedItemsOnMount } from "./useApplyPropagationToSelectedItemsOnMount.js";
3
+ export { useApplyPropagationToSelectedItemsOnMount } from "./useApplyPropagationToSelectedItemsOnMount.js";
4
+ export { useTreeViewApiRef } from "./useTreeViewApiRef.js";
5
+ export { useRichTreeViewApiRef } from "./useRichTreeViewApiRef.js";
6
+ export { useSimpleTreeViewApiRef } from "./useSimpleTreeViewApiRef.js";
@@ -1,4 +1,4 @@
1
- import { useRefWithInit } from '@base-ui-components/utils/useRefWithInit';
1
+ import { useRefWithInit } from '@base-ui/utils/useRefWithInit';
2
2
  import { getLookupFromArray } from "../internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js";
3
3
  const defaultGetItemId = item => item.id;
4
4
  const defaultGetItemChildren = item => item.children;
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ import { TreeViewDefaultItemModelProperties, TreeViewValidItem } from "../models/index.js";
3
+ import { TreeViewPublicAPI } from "../internals/models/index.js";
4
+ import { RichTreeViewPluginSignatures } from "../RichTreeView/RichTreeView.plugins.js";
5
+ /**
6
+ * Creates the ref to pass to the `apiRef` prop of the `RichTreeView` component.
7
+ */
8
+ export declare function useRichTreeViewApiRef<R extends TreeViewValidItem<R> = TreeViewDefaultItemModelProperties>(): React.RefObject<TreeViewPublicAPI<RichTreeViewPluginSignatures> | undefined>;
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ /**
3
+ * Creates the ref to pass to the `apiRef` prop of the `RichTreeView` component.
4
+ */
5
+ export function useRichTreeViewApiRef() {
6
+ return React.useRef(undefined);
7
+ }
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ import { TreeViewDefaultItemModelProperties, TreeViewValidItem } from "../models/index.js";
3
+ import { TreeViewPublicAPI } from "../internals/models/index.js";
4
+ import { SimpleTreeViewPluginSignatures } from "../SimpleTreeView/SimpleTreeView.plugins.js";
5
+ /**
6
+ * Creates the ref to pass to the `apiRef` prop of the `SimpleTreeView` component.
7
+ */
8
+ export declare function useSimpleTreeViewApiRef<R extends TreeViewValidItem<R> = TreeViewDefaultItemModelProperties>(): React.RefObject<TreeViewPublicAPI<SimpleTreeViewPluginSignatures> | undefined>;
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ /**
3
+ * Creates the ref to pass to the `apiRef` prop of the `SimpleTreeView` component.
4
+ */
5
+ export function useSimpleTreeViewApiRef() {
6
+ return React.useRef(undefined);
7
+ }
@@ -74,7 +74,7 @@ export const useTreeItemUtils = ({
74
74
  }
75
75
  };
76
76
  const handleSelection = event => {
77
- if (status.disabled) {
77
+ if (!selectionSelectors.canItemBeSelected(store.state, itemId)) {
78
78
  return;
79
79
  }
80
80
  if (!status.focused && !status.editing) {
@@ -3,5 +3,6 @@ import { TreeViewAnyPluginSignature, TreeViewPublicAPI } from "../internals/mode
3
3
  import { RichTreeViewPluginSignatures } from "../RichTreeView/RichTreeView.plugins.js";
4
4
  /**
5
5
  * Hook that instantiates a [[TreeViewApiRef]].
6
+ * @deprecated Use `useRichTreeViewApiRef()`, `useRichTreeViewProApiRef()` or `useSimpleTreeViewApiRef()` instead.
6
7
  */
7
8
  export declare const useTreeViewApiRef: <TSignatures extends readonly TreeViewAnyPluginSignature[] = RichTreeViewPluginSignatures>() => React.RefObject<TreeViewPublicAPI<TSignatures> | undefined>;
@@ -3,5 +3,6 @@
3
3
  import * as React from 'react';
4
4
  /**
5
5
  * Hook that instantiates a [[TreeViewApiRef]].
6
+ * @deprecated Use `useRichTreeViewApiRef()`, `useRichTreeViewProApiRef()` or `useSimpleTreeViewApiRef()` instead.
6
7
  */
7
8
  export const useTreeViewApiRef = () => React.useRef(undefined);
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-tree-view v8.21.0
2
+ * @mui/x-tree-view v8.23.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the