@mui/x-tree-view 7.0.0-beta.5 → 7.0.0-beta.7

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 (136) hide show
  1. package/CHANGELOG.md +252 -50
  2. package/RichTreeView/RichTreeView.js +23 -22
  3. package/RichTreeView/RichTreeView.types.d.ts +2 -1
  4. package/SimpleTreeView/SimpleTreeView.js +23 -22
  5. package/TreeItem/TreeItem.js +79 -79
  6. package/TreeItem/TreeItem.types.d.ts +17 -19
  7. package/TreeItem/treeItemClasses.d.ts +1 -1
  8. package/TreeItem/treeItemClasses.js +1 -1
  9. package/TreeItem/useTreeItemState.js +2 -2
  10. package/TreeItem2/TreeItem2.d.ts +18 -0
  11. package/TreeItem2/TreeItem2.js +301 -0
  12. package/TreeItem2/TreeItem2.types.d.ts +64 -0
  13. package/TreeItem2/TreeItem2.types.js +1 -0
  14. package/TreeItem2/index.d.ts +2 -0
  15. package/TreeItem2/index.js +1 -0
  16. package/TreeItem2/package.json +6 -0
  17. package/TreeItem2Icon/TreeItem2Icon.d.ts +7 -0
  18. package/TreeItem2Icon/TreeItem2Icon.js +68 -0
  19. package/TreeItem2Icon/TreeItem2Icon.types.d.ts +40 -0
  20. package/TreeItem2Icon/TreeItem2Icon.types.js +1 -0
  21. package/TreeItem2Icon/index.d.ts +2 -0
  22. package/TreeItem2Icon/index.js +1 -0
  23. package/TreeItem2Icon/package.json +6 -0
  24. package/TreeItem2Provider/TreeItem2Provider.d.ts +7 -0
  25. package/TreeItem2Provider/TreeItem2Provider.js +24 -0
  26. package/TreeItem2Provider/TreeItem2Provider.types.d.ts +6 -0
  27. package/TreeItem2Provider/TreeItem2Provider.types.js +1 -0
  28. package/TreeItem2Provider/index.d.ts +2 -0
  29. package/TreeItem2Provider/index.js +1 -0
  30. package/TreeItem2Provider/package.json +6 -0
  31. package/TreeView/TreeView.js +23 -22
  32. package/hooks/index.d.ts +1 -0
  33. package/hooks/index.js +2 -1
  34. package/hooks/useTreeItem2Utils/index.d.ts +1 -0
  35. package/hooks/useTreeItem2Utils/index.js +1 -0
  36. package/hooks/useTreeItem2Utils/useTreeItem2Utils.d.ts +15 -0
  37. package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +61 -0
  38. package/hooks/useTreeViewApiRef.d.ts +2 -2
  39. package/index.d.ts +5 -1
  40. package/index.js +9 -2
  41. package/internals/TreeViewProvider/TreeViewContext.d.ts +3 -1
  42. package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +4 -2
  43. package/internals/hooks/useLazyRef.d.ts +1 -2
  44. package/internals/hooks/useLazyRef.js +1 -11
  45. package/internals/hooks/useOnMount.d.ts +1 -2
  46. package/internals/hooks/useOnMount.js +1 -7
  47. package/internals/hooks/useTimeout.d.ts +1 -11
  48. package/internals/hooks/useTimeout.js +1 -36
  49. package/internals/models/helpers.d.ts +1 -0
  50. package/internals/models/plugin.d.ts +19 -16
  51. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +25 -25
  52. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +11 -11
  53. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -12
  54. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +5 -6
  55. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +37 -23
  56. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +11 -9
  57. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +31 -18
  58. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +16 -6
  59. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
  60. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +11 -11
  61. package/internals/useTreeView/useTreeView.js +27 -25
  62. package/modern/RichTreeView/RichTreeView.js +23 -22
  63. package/modern/SimpleTreeView/SimpleTreeView.js +23 -22
  64. package/modern/TreeItem/TreeItem.js +78 -78
  65. package/modern/TreeItem/treeItemClasses.js +1 -1
  66. package/modern/TreeItem/useTreeItemState.js +2 -2
  67. package/modern/TreeItem2/TreeItem2.js +300 -0
  68. package/modern/TreeItem2/TreeItem2.types.js +1 -0
  69. package/modern/TreeItem2/index.js +1 -0
  70. package/modern/TreeItem2Icon/TreeItem2Icon.js +67 -0
  71. package/modern/TreeItem2Icon/TreeItem2Icon.types.js +1 -0
  72. package/modern/TreeItem2Icon/index.js +1 -0
  73. package/modern/TreeItem2Provider/TreeItem2Provider.js +24 -0
  74. package/modern/TreeItem2Provider/TreeItem2Provider.types.js +1 -0
  75. package/modern/TreeItem2Provider/index.js +1 -0
  76. package/modern/TreeView/TreeView.js +23 -22
  77. package/modern/hooks/index.js +2 -1
  78. package/modern/hooks/useTreeItem2Utils/index.js +1 -0
  79. package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +61 -0
  80. package/modern/index.js +9 -2
  81. package/modern/internals/hooks/useLazyRef.js +1 -11
  82. package/modern/internals/hooks/useOnMount.js +1 -7
  83. package/modern/internals/hooks/useTimeout.js +1 -36
  84. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +24 -24
  85. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -12
  86. package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +36 -22
  87. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +11 -9
  88. package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +31 -18
  89. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
  90. package/modern/internals/useTreeView/useTreeView.js +27 -25
  91. package/modern/useTreeItem2/index.js +1 -0
  92. package/modern/useTreeItem2/useTreeItem2.js +135 -0
  93. package/modern/useTreeItem2/useTreeItem2.types.js +1 -0
  94. package/node/RichTreeView/RichTreeView.js +23 -22
  95. package/node/SimpleTreeView/SimpleTreeView.js +23 -22
  96. package/node/TreeItem/TreeItem.js +78 -78
  97. package/node/TreeItem/treeItemClasses.js +1 -1
  98. package/node/TreeItem/useTreeItemState.js +2 -2
  99. package/node/TreeItem2/TreeItem2.js +308 -0
  100. package/node/TreeItem2/TreeItem2.types.js +5 -0
  101. package/node/TreeItem2/index.js +42 -0
  102. package/node/TreeItem2Icon/TreeItem2Icon.js +75 -0
  103. package/node/TreeItem2Icon/TreeItem2Icon.types.js +5 -0
  104. package/node/TreeItem2Icon/index.js +12 -0
  105. package/node/TreeItem2Provider/TreeItem2Provider.js +30 -0
  106. package/node/TreeItem2Provider/TreeItem2Provider.types.js +5 -0
  107. package/node/TreeItem2Provider/index.js +12 -0
  108. package/node/TreeView/TreeView.js +23 -22
  109. package/node/hooks/index.js +8 -1
  110. package/node/hooks/useTreeItem2Utils/index.js +12 -0
  111. package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +68 -0
  112. package/node/index.js +61 -13
  113. package/node/internals/hooks/useLazyRef.js +7 -13
  114. package/node/internals/hooks/useOnMount.js +8 -10
  115. package/node/internals/hooks/useTimeout.js +7 -37
  116. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +24 -24
  117. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -12
  118. package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +36 -22
  119. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +11 -9
  120. package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +30 -17
  121. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
  122. package/node/internals/useTreeView/useTreeView.js +27 -25
  123. package/node/useTreeItem2/index.js +12 -0
  124. package/node/useTreeItem2/useTreeItem2.js +143 -0
  125. package/node/useTreeItem2/useTreeItem2.types.js +5 -0
  126. package/package.json +2 -2
  127. package/themeAugmentation/components.d.ts +5 -0
  128. package/themeAugmentation/overrides.d.ts +1 -0
  129. package/themeAugmentation/props.d.ts +2 -0
  130. package/useTreeItem2/index.d.ts +2 -0
  131. package/useTreeItem2/index.js +1 -0
  132. package/useTreeItem2/package.json +6 -0
  133. package/useTreeItem2/useTreeItem2.d.ts +2 -0
  134. package/useTreeItem2/useTreeItem2.js +138 -0
  135. package/useTreeItem2/useTreeItem2.types.d.ts +113 -0
  136. package/useTreeItem2/useTreeItem2.types.js +1 -0
@@ -38,6 +38,7 @@ export const useTreeView = inParams => {
38
38
  });
39
39
  const rootPropsGetters = [];
40
40
  const contextValue = {
41
+ publicAPI,
41
42
  instance: instance
42
43
  };
43
44
  const runPlugin = plugin => {
@@ -60,43 +61,44 @@ export const useTreeView = inParams => {
60
61
  }
61
62
  };
62
63
  plugins.forEach(runPlugin);
63
- contextValue.runItemPlugins = ({
64
- props,
65
- ref
66
- }) => {
67
- let finalProps = props;
68
- let finalRef = ref;
69
- const itemWrappers = [];
64
+ contextValue.runItemPlugins = itemPluginProps => {
65
+ let finalRootRef = null;
66
+ let finalContentRef = null;
70
67
  plugins.forEach(plugin => {
71
68
  if (!plugin.itemPlugin) {
72
69
  return;
73
70
  }
74
71
  const itemPluginResponse = plugin.itemPlugin({
75
- props: finalProps,
76
- ref: finalRef
72
+ props: itemPluginProps,
73
+ rootRef: finalRootRef,
74
+ contentRef: finalContentRef
77
75
  });
78
- if (itemPluginResponse != null && itemPluginResponse.props) {
79
- finalProps = itemPluginResponse.props;
80
- }
81
- if (itemPluginResponse != null && itemPluginResponse.ref) {
82
- finalRef = itemPluginResponse.ref;
76
+ if (itemPluginResponse != null && itemPluginResponse.rootRef) {
77
+ finalRootRef = itemPluginResponse.rootRef;
83
78
  }
84
- if (itemPluginResponse != null && itemPluginResponse.wrapItem) {
85
- itemWrappers.push(itemPluginResponse.wrapItem);
79
+ if (itemPluginResponse != null && itemPluginResponse.contentRef) {
80
+ finalContentRef = itemPluginResponse.contentRef;
86
81
  }
87
82
  });
88
83
  return {
89
- props: finalProps,
90
- ref: finalRef,
91
- wrapItem: children => {
92
- let finalChildren = children;
93
- itemWrappers.forEach(itemWrapper => {
94
- finalChildren = itemWrapper(finalChildren);
95
- });
96
- return finalChildren;
97
- }
84
+ contentRef: finalContentRef,
85
+ rootRef: finalRootRef
98
86
  };
99
87
  };
88
+ const itemWrappers = plugins.map(plugin => plugin.wrapItem).filter(wrapItem => !!wrapItem);
89
+ contextValue.wrapItem = ({
90
+ nodeId,
91
+ children
92
+ }) => {
93
+ let finalChildren = children;
94
+ itemWrappers.forEach(itemWrapper => {
95
+ finalChildren = itemWrapper({
96
+ nodeId,
97
+ children: finalChildren
98
+ });
99
+ });
100
+ return finalChildren;
101
+ };
100
102
  const getRootProps = (otherHandlers = {}) => {
101
103
  const rootProps = _extends({
102
104
  role: 'tree',
@@ -137,7 +137,8 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
137
137
  */
138
138
  apiRef: PropTypes.shape({
139
139
  current: PropTypes.shape({
140
- focusNode: PropTypes.func.isRequired
140
+ focusItem: PropTypes.func.isRequired,
141
+ getItem: PropTypes.func.isRequired
141
142
  })
142
143
  }),
143
144
  /**
@@ -146,17 +147,17 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
146
147
  classes: PropTypes.object,
147
148
  className: PropTypes.string,
148
149
  /**
149
- * Expanded node ids.
150
+ * Expanded item ids.
150
151
  * Used when the item's expansion is not controlled.
151
152
  * @default []
152
153
  */
153
- defaultExpandedNodes: PropTypes.arrayOf(PropTypes.string),
154
+ defaultExpandedItems: PropTypes.arrayOf(PropTypes.string),
154
155
  /**
155
- * Selected node ids. (Uncontrolled)
156
+ * Selected item ids. (Uncontrolled)
156
157
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
157
158
  * @default []
158
159
  */
159
- defaultSelectedNodes: PropTypes.any,
160
+ defaultSelectedItems: PropTypes.any,
160
161
  /**
161
162
  * If `true`, will allow focus on disabled items.
162
163
  * @default false
@@ -168,10 +169,10 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
168
169
  */
169
170
  disableSelection: PropTypes.bool,
170
171
  /**
171
- * Expanded node ids.
172
+ * Expanded item ids.
172
173
  * Used when the item's expansion is controlled.
173
174
  */
174
- expandedNodes: PropTypes.arrayOf(PropTypes.string),
175
+ expandedItems: PropTypes.arrayOf(PropTypes.string),
175
176
  /**
176
177
  * Used to determine the string label for a given item.
177
178
  *
@@ -211,42 +212,42 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
211
212
  /**
212
213
  * Callback fired when tree items are expanded/collapsed.
213
214
  * @param {React.SyntheticEvent} event The event source of the callback.
214
- * @param {array} nodeIds The ids of the expanded nodes.
215
+ * @param {array} itemIds The ids of the expanded items.
215
216
  */
216
- onExpandedNodesChange: PropTypes.func,
217
+ onExpandedItemsChange: PropTypes.func,
217
218
  /**
218
219
  * Callback fired when a tree item is expanded or collapsed.
219
220
  * @param {React.SyntheticEvent} event The event source of the callback.
220
- * @param {array} nodeId The nodeId of the modified node.
221
- * @param {array} isExpanded `true` if the node has just been expanded, `false` if it has just been collapsed.
221
+ * @param {array} itemId The itemId of the modified item.
222
+ * @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
222
223
  */
223
- onNodeExpansionToggle: PropTypes.func,
224
+ onItemExpansionToggle: PropTypes.func,
224
225
  /**
225
226
  * Callback fired when tree items are focused.
226
227
  * @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
227
- * @param {string} nodeId The id of the node focused.
228
- * @param {string} value of the focused node.
228
+ * @param {string} itemId The id of the focused item.
229
+ * @param {string} value of the focused item.
229
230
  */
230
- onNodeFocus: PropTypes.func,
231
+ onItemFocus: PropTypes.func,
231
232
  /**
232
233
  * Callback fired when a tree item is selected or deselected.
233
234
  * @param {React.SyntheticEvent} event The event source of the callback.
234
- * @param {array} nodeId The nodeId of the modified node.
235
- * @param {array} isSelected `true` if the node has just been selected, `false` if it has just been deselected.
235
+ * @param {array} itemId The itemId of the modified item.
236
+ * @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
236
237
  */
237
- onNodeSelectionToggle: PropTypes.func,
238
+ onItemSelectionToggle: PropTypes.func,
238
239
  /**
239
240
  * Callback fired when tree items are selected/deselected.
240
241
  * @param {React.SyntheticEvent} event The event source of the callback
241
- * @param {string[] | string} nodeIds The ids of the selected nodes.
242
+ * @param {string[] | string} itemIds The ids of the selected items.
242
243
  * When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
243
244
  */
244
- onSelectedNodesChange: PropTypes.func,
245
+ onSelectedItemsChange: PropTypes.func,
245
246
  /**
246
- * Selected node ids. (Controlled)
247
+ * Selected item ids. (Controlled)
247
248
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
248
249
  */
249
- selectedNodes: PropTypes.any,
250
+ selectedItems: PropTypes.any,
250
251
  /**
251
252
  * The props used for each component slot.
252
253
  * @default {}
@@ -95,7 +95,8 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
95
95
  */
96
96
  apiRef: PropTypes.shape({
97
97
  current: PropTypes.shape({
98
- focusNode: PropTypes.func.isRequired
98
+ focusItem: PropTypes.func.isRequired,
99
+ getItem: PropTypes.func.isRequired
99
100
  })
100
101
  }),
101
102
  /**
@@ -108,17 +109,17 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
108
109
  classes: PropTypes.object,
109
110
  className: PropTypes.string,
110
111
  /**
111
- * Expanded node ids.
112
+ * Expanded item ids.
112
113
  * Used when the item's expansion is not controlled.
113
114
  * @default []
114
115
  */
115
- defaultExpandedNodes: PropTypes.arrayOf(PropTypes.string),
116
+ defaultExpandedItems: PropTypes.arrayOf(PropTypes.string),
116
117
  /**
117
- * Selected node ids. (Uncontrolled)
118
+ * Selected item ids. (Uncontrolled)
118
119
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
119
120
  * @default []
120
121
  */
121
- defaultSelectedNodes: PropTypes.any,
122
+ defaultSelectedItems: PropTypes.any,
122
123
  /**
123
124
  * If `true`, will allow focus on disabled items.
124
125
  * @default false
@@ -130,10 +131,10 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
130
131
  */
131
132
  disableSelection: PropTypes.bool,
132
133
  /**
133
- * Expanded node ids.
134
+ * Expanded item ids.
134
135
  * Used when the item's expansion is controlled.
135
136
  */
136
- expandedNodes: PropTypes.arrayOf(PropTypes.string),
137
+ expandedItems: PropTypes.arrayOf(PropTypes.string),
137
138
  /**
138
139
  * This prop is used to help implement the accessibility logic.
139
140
  * If you don't provide this prop. It falls back to a randomly generated id.
@@ -147,42 +148,42 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
147
148
  /**
148
149
  * Callback fired when tree items are expanded/collapsed.
149
150
  * @param {React.SyntheticEvent} event The event source of the callback.
150
- * @param {array} nodeIds The ids of the expanded nodes.
151
+ * @param {array} itemIds The ids of the expanded items.
151
152
  */
152
- onExpandedNodesChange: PropTypes.func,
153
+ onExpandedItemsChange: PropTypes.func,
153
154
  /**
154
155
  * Callback fired when a tree item is expanded or collapsed.
155
156
  * @param {React.SyntheticEvent} event The event source of the callback.
156
- * @param {array} nodeId The nodeId of the modified node.
157
- * @param {array} isExpanded `true` if the node has just been expanded, `false` if it has just been collapsed.
157
+ * @param {array} itemId The itemId of the modified item.
158
+ * @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
158
159
  */
159
- onNodeExpansionToggle: PropTypes.func,
160
+ onItemExpansionToggle: PropTypes.func,
160
161
  /**
161
162
  * Callback fired when tree items are focused.
162
163
  * @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
163
- * @param {string} nodeId The id of the node focused.
164
- * @param {string} value of the focused node.
164
+ * @param {string} itemId The id of the focused item.
165
+ * @param {string} value of the focused item.
165
166
  */
166
- onNodeFocus: PropTypes.func,
167
+ onItemFocus: PropTypes.func,
167
168
  /**
168
169
  * Callback fired when a tree item is selected or deselected.
169
170
  * @param {React.SyntheticEvent} event The event source of the callback.
170
- * @param {array} nodeId The nodeId of the modified node.
171
- * @param {array} isSelected `true` if the node has just been selected, `false` if it has just been deselected.
171
+ * @param {array} itemId The itemId of the modified item.
172
+ * @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
172
173
  */
173
- onNodeSelectionToggle: PropTypes.func,
174
+ onItemSelectionToggle: PropTypes.func,
174
175
  /**
175
176
  * Callback fired when tree items are selected/deselected.
176
177
  * @param {React.SyntheticEvent} event The event source of the callback
177
- * @param {string[] | string} nodeIds The ids of the selected nodes.
178
+ * @param {string[] | string} itemIds The ids of the selected items.
178
179
  * When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
179
180
  */
180
- onSelectedNodesChange: PropTypes.func,
181
+ onSelectedItemsChange: PropTypes.func,
181
182
  /**
182
- * Selected node ids. (Controlled)
183
+ * Selected item ids. (Controlled)
183
184
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
184
185
  */
185
- selectedNodes: PropTypes.any,
186
+ selectedItems: PropTypes.any,
186
187
  /**
187
188
  * The props used for each component slot.
188
189
  */
@@ -1,6 +1,6 @@
1
1
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
- const _excluded = ["children", "className", "slots", "slotProps", "ContentComponent", "ContentProps", "nodeId", "id", "label", "onClick", "onMouseDown", "TransitionComponent", "TransitionProps"],
3
+ const _excluded = ["children", "className", "slots", "slotProps", "ContentComponent", "ContentProps", "nodeId", "id", "label", "onClick", "onMouseDown"],
4
4
  _excluded2 = ["ownerState"],
5
5
  _excluded3 = ["ownerState"],
6
6
  _excluded4 = ["ownerState"];
@@ -9,6 +9,7 @@ import PropTypes from 'prop-types';
9
9
  import clsx from 'clsx';
10
10
  import Collapse from '@mui/material/Collapse';
11
11
  import { resolveComponentProps, useSlotProps } from '@mui/base/utils';
12
+ import useForkRef from '@mui/utils/useForkRef';
12
13
  import { alpha, styled, useThemeProps } from '@mui/material/styles';
13
14
  import unsupportedProp from '@mui/utils/unsupportedProp';
14
15
  import elementTypeAcceptingRef from '@mui/utils/elementTypeAcceptingRef';
@@ -17,6 +18,7 @@ import { TreeItemContent } from './TreeItemContent';
17
18
  import { treeItemClasses, getTreeItemUtilityClass } from './treeItemClasses';
18
19
  import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
19
20
  import { TreeViewCollapseIcon, TreeViewExpandIcon } from '../icons';
21
+ import { TreeItem2Provider } from '../TreeItem2Provider';
20
22
  import { jsx as _jsx } from "react/jsx-runtime";
21
23
  import { jsxs as _jsxs } from "react/jsx-runtime";
22
24
  const useUtilityClasses = ownerState => {
@@ -32,7 +34,7 @@ const useUtilityClasses = ownerState => {
32
34
  disabled: ['disabled'],
33
35
  iconContainer: ['iconContainer'],
34
36
  label: ['label'],
35
- group: ['group']
37
+ groupTransition: ['groupTransition']
36
38
  };
37
39
  return composeClasses(slots, getTreeItemUtilityClass, classes);
38
40
  };
@@ -116,8 +118,8 @@ const StyledTreeItemContent = styled(TreeItemContent, {
116
118
  }));
117
119
  const TreeItemGroup = styled(Collapse, {
118
120
  name: 'MuiTreeItem',
119
- slot: 'Group',
120
- overridesResolver: (props, styles) => styles.group
121
+ slot: 'GroupTransition',
122
+ overridesResolver: (props, styles) => styles.groupTransition
121
123
  })({
122
124
  margin: 0,
123
125
  padding: 0,
@@ -144,18 +146,10 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
144
146
  disabledItemsFocusable,
145
147
  instance
146
148
  } = useTreeViewContext();
147
- const inPropsWithTheme = useThemeProps({
149
+ const props = useThemeProps({
148
150
  props: inProps,
149
151
  name: 'MuiTreeItem'
150
152
  });
151
- const {
152
- props,
153
- ref,
154
- wrapItem
155
- } = runItemPlugins({
156
- props: inPropsWithTheme,
157
- ref: inRef
158
- });
159
153
  const {
160
154
  children,
161
155
  className,
@@ -167,16 +161,21 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
167
161
  id,
168
162
  label,
169
163
  onClick,
170
- onMouseDown,
171
- TransitionComponent = Collapse,
172
- TransitionProps
164
+ onMouseDown
173
165
  } = props,
174
166
  other = _objectWithoutPropertiesLoose(props, _excluded);
167
+ const {
168
+ contentRef,
169
+ rootRef
170
+ } = runItemPlugins(props);
171
+ const handleRootRef = useForkRef(inRef, rootRef);
172
+ const handleContentRef = useForkRef(ContentProps?.ref, contentRef);
175
173
  const slots = {
176
174
  expandIcon: inSlots?.expandIcon ?? contextIcons.slots.expandIcon ?? TreeViewExpandIcon,
177
175
  collapseIcon: inSlots?.collapseIcon ?? contextIcons.slots.collapseIcon ?? TreeViewCollapseIcon,
178
176
  endIcon: inSlots?.endIcon ?? contextIcons.slots.endIcon,
179
- icon: inSlots?.icon
177
+ icon: inSlots?.icon,
178
+ groupTransition: inSlots?.groupTransition
180
179
  };
181
180
  const isExpandable = reactChildren => {
182
181
  if (Array.isArray(reactChildren)) {
@@ -196,6 +195,19 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
196
195
  disabled
197
196
  });
198
197
  const classes = useUtilityClasses(ownerState);
198
+ const GroupTransition = slots.groupTransition ?? undefined;
199
+ const groupTransitionProps = useSlotProps({
200
+ elementType: GroupTransition,
201
+ ownerState: {},
202
+ externalSlotProps: inSlotProps?.groupTransition,
203
+ additionalProps: {
204
+ unmountOnExit: true,
205
+ in: expanded,
206
+ component: 'ul',
207
+ role: 'group'
208
+ },
209
+ className: classes.groupTransition
210
+ });
199
211
  const ExpansionIcon = expanded ? slots.collapseIcon : slots.expandIcon;
200
212
  const _useSlotProps = useSlotProps({
201
213
  elementType: ExpansionIcon,
@@ -249,55 +261,54 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
249
261
  }
250
262
  const canBeFocused = !disabled || disabledItemsFocusable;
251
263
  if (!focused && canBeFocused && event.currentTarget === event.target) {
252
- instance.focusNode(event, nodeId);
264
+ instance.focusItem(event, nodeId);
253
265
  }
254
266
  }
255
267
  const idAttribute = instance.getTreeItemId(nodeId, id);
256
- const item = /*#__PURE__*/_jsxs(TreeItemRoot, _extends({
257
- className: clsx(classes.root, className),
258
- role: "treeitem",
259
- "aria-expanded": expandable ? expanded : undefined,
260
- "aria-selected": ariaSelected,
261
- "aria-disabled": disabled || undefined,
262
- id: idAttribute,
263
- tabIndex: -1
264
- }, other, {
265
- ownerState: ownerState,
266
- onFocus: handleFocus,
267
- ref: ref,
268
- children: [/*#__PURE__*/_jsx(StyledTreeItemContent, _extends({
269
- as: ContentComponent,
270
- classes: {
271
- root: classes.content,
272
- expanded: classes.expanded,
273
- selected: classes.selected,
274
- focused: classes.focused,
275
- disabled: classes.disabled,
276
- iconContainer: classes.iconContainer,
277
- label: classes.label
278
- },
279
- label: label,
280
- nodeId: nodeId,
281
- onClick: onClick,
282
- onMouseDown: onMouseDown,
283
- icon: icon,
284
- expansionIcon: expansionIcon,
285
- displayIcon: displayIcon,
286
- ownerState: ownerState
287
- }, ContentProps)), children && /*#__PURE__*/_jsx(TreeItemGroup, _extends({
288
- as: TransitionComponent,
289
- unmountOnExit: true,
290
- className: classes.group,
291
- in: expanded,
292
- component: "ul",
293
- role: "group"
294
- }, TransitionProps, {
295
- children: children
296
- }))]
297
- }));
298
- return wrapItem(item);
268
+ return /*#__PURE__*/_jsx(TreeItem2Provider, {
269
+ nodeId: nodeId,
270
+ children: /*#__PURE__*/_jsxs(TreeItemRoot, _extends({
271
+ className: clsx(classes.root, className),
272
+ role: "treeitem",
273
+ "aria-expanded": expandable ? expanded : undefined,
274
+ "aria-selected": ariaSelected,
275
+ "aria-disabled": disabled || undefined,
276
+ id: idAttribute,
277
+ tabIndex: -1
278
+ }, other, {
279
+ ownerState: ownerState,
280
+ onFocus: handleFocus,
281
+ ref: handleRootRef,
282
+ children: [/*#__PURE__*/_jsx(StyledTreeItemContent, _extends({
283
+ as: ContentComponent,
284
+ classes: {
285
+ root: classes.content,
286
+ expanded: classes.expanded,
287
+ selected: classes.selected,
288
+ focused: classes.focused,
289
+ disabled: classes.disabled,
290
+ iconContainer: classes.iconContainer,
291
+ label: classes.label
292
+ },
293
+ label: label,
294
+ nodeId: nodeId,
295
+ onClick: onClick,
296
+ onMouseDown: onMouseDown,
297
+ icon: icon,
298
+ expansionIcon: expansionIcon,
299
+ displayIcon: displayIcon,
300
+ ownerState: ownerState
301
+ }, ContentProps, {
302
+ ref: handleContentRef
303
+ })), children && /*#__PURE__*/_jsx(TreeItemGroup, _extends({
304
+ as: GroupTransition
305
+ }, groupTransitionProps, {
306
+ children: children
307
+ }))]
308
+ }))
309
+ });
299
310
  });
300
- TreeItem.propTypes = {
311
+ process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
301
312
  // ----------------------------- Warning --------------------------------
302
313
  // | These PropTypes are generated from the TypeScript type definitions |
303
314
  // | To update them edit the TypeScript types and run "yarn proptypes" |
@@ -321,12 +332,12 @@ TreeItem.propTypes = {
321
332
  */
322
333
  ContentProps: PropTypes.object,
323
334
  /**
324
- * If `true`, the node is disabled.
335
+ * If `true`, the item is disabled.
325
336
  * @default false
326
337
  */
327
338
  disabled: PropTypes.bool,
328
339
  /**
329
- * The tree node label.
340
+ * The tree item label.
330
341
  */
331
342
  label: PropTypes.node,
332
343
  /**
@@ -335,7 +346,7 @@ TreeItem.propTypes = {
335
346
  nodeId: PropTypes.string.isRequired,
336
347
  /**
337
348
  * This prop isn't supported.
338
- * Use the `onNodeFocus` callback on the tree if you need to monitor a node's focus.
349
+ * Use the `onItemFocus` callback on the tree if you need to monitor a item's focus.
339
350
  */
340
351
  onFocus: unsupportedProp,
341
352
  /**
@@ -351,16 +362,5 @@ TreeItem.propTypes = {
351
362
  /**
352
363
  * The system prop that allows defining system overrides as well as additional CSS styles.
353
364
  */
354
- sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
355
- /**
356
- * The component used for the transition.
357
- * [Follow this guide](/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.
358
- * @default Collapse
359
- */
360
- TransitionComponent: PropTypes.elementType,
361
- /**
362
- * Props applied to the transition element.
363
- * By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.
364
- */
365
- TransitionProps: PropTypes.object
366
- };
365
+ sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
366
+ } : void 0;
@@ -3,4 +3,4 @@ import generateUtilityClasses from '@mui/utils/generateUtilityClasses';
3
3
  export function getTreeItemUtilityClass(slot) {
4
4
  return generateUtilityClass('MuiTreeItem', slot);
5
5
  }
6
- export const treeItemClasses = generateUtilityClasses('MuiTreeItem', ['root', 'group', 'content', 'expanded', 'selected', 'focused', 'disabled', 'iconContainer', 'label']);
6
+ export const treeItemClasses = generateUtilityClasses('MuiTreeItem', ['root', 'groupTransition', 'content', 'expanded', 'selected', 'focused', 'disabled', 'iconContainer', 'label']);
@@ -14,7 +14,7 @@ export function useTreeItemState(nodeId) {
14
14
  const handleExpansion = event => {
15
15
  if (!disabled) {
16
16
  if (!focused) {
17
- instance.focusNode(event, nodeId);
17
+ instance.focusItem(event, nodeId);
18
18
  }
19
19
  const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
20
20
 
@@ -27,7 +27,7 @@ export function useTreeItemState(nodeId) {
27
27
  const handleSelection = event => {
28
28
  if (!disabled) {
29
29
  if (!focused) {
30
- instance.focusNode(event, nodeId);
30
+ instance.focusItem(event, nodeId);
31
31
  }
32
32
  const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
33
33
  if (multiple) {