@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
@@ -139,7 +139,8 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
139
139
  */
140
140
  apiRef: PropTypes.shape({
141
141
  current: PropTypes.shape({
142
- focusNode: PropTypes.func.isRequired
142
+ focusItem: PropTypes.func.isRequired,
143
+ getItem: PropTypes.func.isRequired
143
144
  })
144
145
  }),
145
146
  /**
@@ -148,17 +149,17 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
148
149
  classes: PropTypes.object,
149
150
  className: PropTypes.string,
150
151
  /**
151
- * Expanded node ids.
152
+ * Expanded item ids.
152
153
  * Used when the item's expansion is not controlled.
153
154
  * @default []
154
155
  */
155
- defaultExpandedNodes: PropTypes.arrayOf(PropTypes.string),
156
+ defaultExpandedItems: PropTypes.arrayOf(PropTypes.string),
156
157
  /**
157
- * Selected node ids. (Uncontrolled)
158
+ * Selected item ids. (Uncontrolled)
158
159
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
159
160
  * @default []
160
161
  */
161
- defaultSelectedNodes: PropTypes.any,
162
+ defaultSelectedItems: PropTypes.any,
162
163
  /**
163
164
  * If `true`, will allow focus on disabled items.
164
165
  * @default false
@@ -170,10 +171,10 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
170
171
  */
171
172
  disableSelection: PropTypes.bool,
172
173
  /**
173
- * Expanded node ids.
174
+ * Expanded item ids.
174
175
  * Used when the item's expansion is controlled.
175
176
  */
176
- expandedNodes: PropTypes.arrayOf(PropTypes.string),
177
+ expandedItems: PropTypes.arrayOf(PropTypes.string),
177
178
  /**
178
179
  * Used to determine the string label for a given item.
179
180
  *
@@ -213,42 +214,42 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
213
214
  /**
214
215
  * Callback fired when tree items are expanded/collapsed.
215
216
  * @param {React.SyntheticEvent} event The event source of the callback.
216
- * @param {array} nodeIds The ids of the expanded nodes.
217
+ * @param {array} itemIds The ids of the expanded items.
217
218
  */
218
- onExpandedNodesChange: PropTypes.func,
219
+ onExpandedItemsChange: PropTypes.func,
219
220
  /**
220
221
  * Callback fired when a tree item is expanded or collapsed.
221
222
  * @param {React.SyntheticEvent} event The event source of the callback.
222
- * @param {array} nodeId The nodeId of the modified node.
223
- * @param {array} isExpanded `true` if the node has just been expanded, `false` if it has just been collapsed.
223
+ * @param {array} itemId The itemId of the modified item.
224
+ * @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
224
225
  */
225
- onNodeExpansionToggle: PropTypes.func,
226
+ onItemExpansionToggle: PropTypes.func,
226
227
  /**
227
228
  * Callback fired when tree items are focused.
228
229
  * @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
229
- * @param {string} nodeId The id of the node focused.
230
- * @param {string} value of the focused node.
230
+ * @param {string} itemId The id of the focused item.
231
+ * @param {string} value of the focused item.
231
232
  */
232
- onNodeFocus: PropTypes.func,
233
+ onItemFocus: PropTypes.func,
233
234
  /**
234
235
  * Callback fired when a tree item is selected or deselected.
235
236
  * @param {React.SyntheticEvent} event The event source of the callback.
236
- * @param {array} nodeId The nodeId of the modified node.
237
- * @param {array} isSelected `true` if the node has just been selected, `false` if it has just been deselected.
237
+ * @param {array} itemId The itemId of the modified item.
238
+ * @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
238
239
  */
239
- onNodeSelectionToggle: PropTypes.func,
240
+ onItemSelectionToggle: PropTypes.func,
240
241
  /**
241
242
  * Callback fired when tree items are selected/deselected.
242
243
  * @param {React.SyntheticEvent} event The event source of the callback
243
- * @param {string[] | string} nodeIds The ids of the selected nodes.
244
+ * @param {string[] | string} itemIds The ids of the selected items.
244
245
  * When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
245
246
  */
246
- onSelectedNodesChange: PropTypes.func,
247
+ onSelectedItemsChange: PropTypes.func,
247
248
  /**
248
- * Selected node ids. (Controlled)
249
+ * Selected item ids. (Controlled)
249
250
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
250
251
  */
251
- selectedNodes: PropTypes.any,
252
+ selectedItems: PropTypes.any,
252
253
  /**
253
254
  * The props used for each component slot.
254
255
  * @default {}
@@ -5,6 +5,7 @@ import { SlotComponentProps } from '@mui/base/utils';
5
5
  import { RichTreeViewClasses } from './richTreeViewClasses';
6
6
  import { DefaultTreeViewPluginParameters, DefaultTreeViewPluginSlotProps, DefaultTreeViewPluginSlots, DefaultTreeViewPlugins } from '../internals/plugins/defaultPlugins';
7
7
  import { TreeItem, TreeItemProps } from '../TreeItem';
8
+ import { TreeItem2Props } from '../TreeItem2';
8
9
  import { TreeViewItemId } from '../models';
9
10
  import { TreeViewPublicAPI } from '../internals/models';
10
11
  interface RichTreeViewItemSlotOwnerState {
@@ -21,7 +22,7 @@ export interface RichTreeViewSlots extends DefaultTreeViewPluginSlots {
21
22
  * Custom component for the item.
22
23
  * @default TreeItem.
23
24
  */
24
- item?: React.JSXElementConstructor<TreeItemProps>;
25
+ item?: React.JSXElementConstructor<TreeItemProps> | React.JSXElementConstructor<TreeItem2Props>;
25
26
  }
26
27
  export interface RichTreeViewSlotProps<R extends {}, Multiple extends boolean | undefined> extends DefaultTreeViewPluginSlotProps {
27
28
  root?: SlotComponentProps<'ul', {}, RichTreeViewProps<R, Multiple>>;
@@ -96,7 +96,8 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
96
96
  */
97
97
  apiRef: PropTypes.shape({
98
98
  current: PropTypes.shape({
99
- focusNode: PropTypes.func.isRequired
99
+ focusItem: PropTypes.func.isRequired,
100
+ getItem: PropTypes.func.isRequired
100
101
  })
101
102
  }),
102
103
  /**
@@ -109,17 +110,17 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
109
110
  classes: PropTypes.object,
110
111
  className: PropTypes.string,
111
112
  /**
112
- * Expanded node ids.
113
+ * Expanded item ids.
113
114
  * Used when the item's expansion is not controlled.
114
115
  * @default []
115
116
  */
116
- defaultExpandedNodes: PropTypes.arrayOf(PropTypes.string),
117
+ defaultExpandedItems: PropTypes.arrayOf(PropTypes.string),
117
118
  /**
118
- * Selected node ids. (Uncontrolled)
119
+ * Selected item ids. (Uncontrolled)
119
120
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
120
121
  * @default []
121
122
  */
122
- defaultSelectedNodes: PropTypes.any,
123
+ defaultSelectedItems: PropTypes.any,
123
124
  /**
124
125
  * If `true`, will allow focus on disabled items.
125
126
  * @default false
@@ -131,10 +132,10 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
131
132
  */
132
133
  disableSelection: PropTypes.bool,
133
134
  /**
134
- * Expanded node ids.
135
+ * Expanded item ids.
135
136
  * Used when the item's expansion is controlled.
136
137
  */
137
- expandedNodes: PropTypes.arrayOf(PropTypes.string),
138
+ expandedItems: PropTypes.arrayOf(PropTypes.string),
138
139
  /**
139
140
  * This prop is used to help implement the accessibility logic.
140
141
  * If you don't provide this prop. It falls back to a randomly generated id.
@@ -148,42 +149,42 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
148
149
  /**
149
150
  * Callback fired when tree items are expanded/collapsed.
150
151
  * @param {React.SyntheticEvent} event The event source of the callback.
151
- * @param {array} nodeIds The ids of the expanded nodes.
152
+ * @param {array} itemIds The ids of the expanded items.
152
153
  */
153
- onExpandedNodesChange: PropTypes.func,
154
+ onExpandedItemsChange: PropTypes.func,
154
155
  /**
155
156
  * Callback fired when a tree item is expanded or collapsed.
156
157
  * @param {React.SyntheticEvent} event The event source of the callback.
157
- * @param {array} nodeId The nodeId of the modified node.
158
- * @param {array} isExpanded `true` if the node has just been expanded, `false` if it has just been collapsed.
158
+ * @param {array} itemId The itemId of the modified item.
159
+ * @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
159
160
  */
160
- onNodeExpansionToggle: PropTypes.func,
161
+ onItemExpansionToggle: PropTypes.func,
161
162
  /**
162
163
  * Callback fired when tree items are focused.
163
164
  * @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
164
- * @param {string} nodeId The id of the node focused.
165
- * @param {string} value of the focused node.
165
+ * @param {string} itemId The id of the focused item.
166
+ * @param {string} value of the focused item.
166
167
  */
167
- onNodeFocus: PropTypes.func,
168
+ onItemFocus: PropTypes.func,
168
169
  /**
169
170
  * Callback fired when a tree item is selected or deselected.
170
171
  * @param {React.SyntheticEvent} event The event source of the callback.
171
- * @param {array} nodeId The nodeId of the modified node.
172
- * @param {array} isSelected `true` if the node has just been selected, `false` if it has just been deselected.
172
+ * @param {array} itemId The itemId of the modified item.
173
+ * @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
173
174
  */
174
- onNodeSelectionToggle: PropTypes.func,
175
+ onItemSelectionToggle: PropTypes.func,
175
176
  /**
176
177
  * Callback fired when tree items are selected/deselected.
177
178
  * @param {React.SyntheticEvent} event The event source of the callback
178
- * @param {string[] | string} nodeIds The ids of the selected nodes.
179
+ * @param {string[] | string} itemIds The ids of the selected items.
179
180
  * When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
180
181
  */
181
- onSelectedNodesChange: PropTypes.func,
182
+ onSelectedItemsChange: PropTypes.func,
182
183
  /**
183
- * Selected node ids. (Controlled)
184
+ * Selected item ids. (Controlled)
184
185
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
185
186
  */
186
- selectedNodes: PropTypes.any,
187
+ selectedItems: PropTypes.any,
187
188
  /**
188
189
  * The props used for each component slot.
189
190
  */
@@ -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,
@@ -135,7 +137,7 @@ const TreeItemGroup = styled(Collapse, {
135
137
  * - [TreeItem API](https://mui.com/x/api/tree-view/tree-item/)
136
138
  */
137
139
  export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps, inRef) {
138
- var _ref, _inSlots$expandIcon, _ref2, _inSlots$collapseIcon, _inSlots$endIcon;
140
+ var _ref, _inSlots$expandIcon, _ref2, _inSlots$collapseIcon, _inSlots$endIcon, _slots$groupTransitio;
139
141
  const {
140
142
  icons: contextIcons,
141
143
  runItemPlugins,
@@ -145,18 +147,10 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
145
147
  disabledItemsFocusable,
146
148
  instance
147
149
  } = useTreeViewContext();
148
- const inPropsWithTheme = useThemeProps({
150
+ const props = useThemeProps({
149
151
  props: inProps,
150
152
  name: 'MuiTreeItem'
151
153
  });
152
- const {
153
- props,
154
- ref,
155
- wrapItem
156
- } = runItemPlugins({
157
- props: inPropsWithTheme,
158
- ref: inRef
159
- });
160
154
  const {
161
155
  children,
162
156
  className,
@@ -168,16 +162,21 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
168
162
  id,
169
163
  label,
170
164
  onClick,
171
- onMouseDown,
172
- TransitionComponent = Collapse,
173
- TransitionProps
165
+ onMouseDown
174
166
  } = props,
175
167
  other = _objectWithoutPropertiesLoose(props, _excluded);
168
+ const {
169
+ contentRef,
170
+ rootRef
171
+ } = runItemPlugins(props);
172
+ const handleRootRef = useForkRef(inRef, rootRef);
173
+ const handleContentRef = useForkRef(ContentProps == null ? void 0 : ContentProps.ref, contentRef);
176
174
  const slots = {
177
175
  expandIcon: (_ref = (_inSlots$expandIcon = inSlots == null ? void 0 : inSlots.expandIcon) != null ? _inSlots$expandIcon : contextIcons.slots.expandIcon) != null ? _ref : TreeViewExpandIcon,
178
176
  collapseIcon: (_ref2 = (_inSlots$collapseIcon = inSlots == null ? void 0 : inSlots.collapseIcon) != null ? _inSlots$collapseIcon : contextIcons.slots.collapseIcon) != null ? _ref2 : TreeViewCollapseIcon,
179
177
  endIcon: (_inSlots$endIcon = inSlots == null ? void 0 : inSlots.endIcon) != null ? _inSlots$endIcon : contextIcons.slots.endIcon,
180
- icon: inSlots == null ? void 0 : inSlots.icon
178
+ icon: inSlots == null ? void 0 : inSlots.icon,
179
+ groupTransition: inSlots == null ? void 0 : inSlots.groupTransition
181
180
  };
182
181
  const isExpandable = reactChildren => {
183
182
  if (Array.isArray(reactChildren)) {
@@ -197,6 +196,19 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
197
196
  disabled
198
197
  });
199
198
  const classes = useUtilityClasses(ownerState);
199
+ const GroupTransition = (_slots$groupTransitio = slots.groupTransition) != null ? _slots$groupTransitio : undefined;
200
+ const groupTransitionProps = useSlotProps({
201
+ elementType: GroupTransition,
202
+ ownerState: {},
203
+ externalSlotProps: inSlotProps == null ? void 0 : inSlotProps.groupTransition,
204
+ additionalProps: {
205
+ unmountOnExit: true,
206
+ in: expanded,
207
+ component: 'ul',
208
+ role: 'group'
209
+ },
210
+ className: classes.groupTransition
211
+ });
200
212
  const ExpansionIcon = expanded ? slots.collapseIcon : slots.expandIcon;
201
213
  const _useSlotProps = useSlotProps({
202
214
  elementType: ExpansionIcon,
@@ -250,55 +262,54 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
250
262
  }
251
263
  const canBeFocused = !disabled || disabledItemsFocusable;
252
264
  if (!focused && canBeFocused && event.currentTarget === event.target) {
253
- instance.focusNode(event, nodeId);
265
+ instance.focusItem(event, nodeId);
254
266
  }
255
267
  }
256
268
  const idAttribute = instance.getTreeItemId(nodeId, id);
257
- const item = /*#__PURE__*/_jsxs(TreeItemRoot, _extends({
258
- className: clsx(classes.root, className),
259
- role: "treeitem",
260
- "aria-expanded": expandable ? expanded : undefined,
261
- "aria-selected": ariaSelected,
262
- "aria-disabled": disabled || undefined,
263
- id: idAttribute,
264
- tabIndex: -1
265
- }, other, {
266
- ownerState: ownerState,
267
- onFocus: handleFocus,
268
- ref: ref,
269
- children: [/*#__PURE__*/_jsx(StyledTreeItemContent, _extends({
270
- as: ContentComponent,
271
- classes: {
272
- root: classes.content,
273
- expanded: classes.expanded,
274
- selected: classes.selected,
275
- focused: classes.focused,
276
- disabled: classes.disabled,
277
- iconContainer: classes.iconContainer,
278
- label: classes.label
279
- },
280
- label: label,
281
- nodeId: nodeId,
282
- onClick: onClick,
283
- onMouseDown: onMouseDown,
284
- icon: icon,
285
- expansionIcon: expansionIcon,
286
- displayIcon: displayIcon,
287
- ownerState: ownerState
288
- }, ContentProps)), children && /*#__PURE__*/_jsx(TreeItemGroup, _extends({
289
- as: TransitionComponent,
290
- unmountOnExit: true,
291
- className: classes.group,
292
- in: expanded,
293
- component: "ul",
294
- role: "group"
295
- }, TransitionProps, {
296
- children: children
297
- }))]
298
- }));
299
- return wrapItem(item);
269
+ return /*#__PURE__*/_jsx(TreeItem2Provider, {
270
+ nodeId: nodeId,
271
+ children: /*#__PURE__*/_jsxs(TreeItemRoot, _extends({
272
+ className: clsx(classes.root, className),
273
+ role: "treeitem",
274
+ "aria-expanded": expandable ? expanded : undefined,
275
+ "aria-selected": ariaSelected,
276
+ "aria-disabled": disabled || undefined,
277
+ id: idAttribute,
278
+ tabIndex: -1
279
+ }, other, {
280
+ ownerState: ownerState,
281
+ onFocus: handleFocus,
282
+ ref: handleRootRef,
283
+ children: [/*#__PURE__*/_jsx(StyledTreeItemContent, _extends({
284
+ as: ContentComponent,
285
+ classes: {
286
+ root: classes.content,
287
+ expanded: classes.expanded,
288
+ selected: classes.selected,
289
+ focused: classes.focused,
290
+ disabled: classes.disabled,
291
+ iconContainer: classes.iconContainer,
292
+ label: classes.label
293
+ },
294
+ label: label,
295
+ nodeId: nodeId,
296
+ onClick: onClick,
297
+ onMouseDown: onMouseDown,
298
+ icon: icon,
299
+ expansionIcon: expansionIcon,
300
+ displayIcon: displayIcon,
301
+ ownerState: ownerState
302
+ }, ContentProps, {
303
+ ref: handleContentRef
304
+ })), children && /*#__PURE__*/_jsx(TreeItemGroup, _extends({
305
+ as: GroupTransition
306
+ }, groupTransitionProps, {
307
+ children: children
308
+ }))]
309
+ }))
310
+ });
300
311
  });
301
- TreeItem.propTypes = {
312
+ process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
302
313
  // ----------------------------- Warning --------------------------------
303
314
  // | These PropTypes are generated from the TypeScript type definitions |
304
315
  // | To update them edit the TypeScript types and run "yarn proptypes" |
@@ -322,12 +333,12 @@ TreeItem.propTypes = {
322
333
  */
323
334
  ContentProps: PropTypes.object,
324
335
  /**
325
- * If `true`, the node is disabled.
336
+ * If `true`, the item is disabled.
326
337
  * @default false
327
338
  */
328
339
  disabled: PropTypes.bool,
329
340
  /**
330
- * The tree node label.
341
+ * The tree item label.
331
342
  */
332
343
  label: PropTypes.node,
333
344
  /**
@@ -336,7 +347,7 @@ TreeItem.propTypes = {
336
347
  nodeId: PropTypes.string.isRequired,
337
348
  /**
338
349
  * This prop isn't supported.
339
- * Use the `onNodeFocus` callback on the tree if you need to monitor a node's focus.
350
+ * Use the `onItemFocus` callback on the tree if you need to monitor a item's focus.
340
351
  */
341
352
  onFocus: unsupportedProp,
342
353
  /**
@@ -352,16 +363,5 @@ TreeItem.propTypes = {
352
363
  /**
353
364
  * The system prop that allows defining system overrides as well as additional CSS styles.
354
365
  */
355
- sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
356
- /**
357
- * The component used for the transition.
358
- * [Follow this guide](/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.
359
- * @default Collapse
360
- */
361
- TransitionComponent: PropTypes.elementType,
362
- /**
363
- * Props applied to the transition element.
364
- * By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.
365
- */
366
- TransitionProps: PropTypes.object
367
- };
366
+ sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
367
+ } : void 0;
@@ -6,29 +6,36 @@ import { SxProps } from '@mui/system';
6
6
  import { TreeItemContentProps } from './TreeItemContent';
7
7
  import { TreeItemClasses } from './treeItemClasses';
8
8
  import { TreeViewItemId } from '../models';
9
+ import { SlotComponentPropsFromProps } from '../internals/models';
9
10
  export interface TreeItemSlots {
10
11
  /**
11
- * The icon used to collapse the node.
12
+ * The icon used to collapse the item.
12
13
  */
13
14
  collapseIcon?: React.ElementType;
14
15
  /**
15
- * The icon used to expand the node.
16
+ * The icon used to expand the item.
16
17
  */
17
18
  expandIcon?: React.ElementType;
18
19
  /**
19
- * The icon displayed next to an end node.
20
+ * The icon displayed next to an end item.
20
21
  */
21
22
  endIcon?: React.ElementType;
22
23
  /**
23
- * The icon to display next to the tree node's label.
24
+ * The icon to display next to the tree item's label.
24
25
  */
25
26
  icon?: React.ElementType;
27
+ /**
28
+ * The component that animates to appearance / disappearance of the item's children.
29
+ * @default TreeItem2Group
30
+ */
31
+ groupTransition?: React.ElementType;
26
32
  }
27
33
  export interface TreeItemSlotProps {
28
34
  collapseIcon?: SlotComponentProps<'svg', {}, {}>;
29
35
  expandIcon?: SlotComponentProps<'svg', {}, {}>;
30
36
  endIcon?: SlotComponentProps<'svg', {}, {}>;
31
37
  icon?: SlotComponentProps<'svg', {}, {}>;
38
+ groupTransition?: SlotComponentPropsFromProps<TransitionProps, {}, {}>;
32
39
  }
33
40
  export interface TreeItemProps extends Omit<React.HTMLAttributes<HTMLLIElement>, 'onFocus'> {
34
41
  /**
@@ -58,36 +65,27 @@ export interface TreeItemProps extends Omit<React.HTMLAttributes<HTMLLIElement>,
58
65
  /**
59
66
  * Props applied to ContentComponent.
60
67
  */
61
- ContentProps?: React.HTMLAttributes<HTMLElement>;
68
+ ContentProps?: React.HTMLAttributes<HTMLElement> & {
69
+ ref?: React.Ref<HTMLElement>;
70
+ };
62
71
  /**
63
- * If `true`, the node is disabled.
72
+ * If `true`, the item is disabled.
64
73
  * @default false
65
74
  */
66
75
  disabled?: boolean;
67
76
  /**
68
77
  * This prop isn't supported.
69
- * Use the `onNodeFocus` callback on the tree if you need to monitor a node's focus.
78
+ * Use the `onItemFocus` callback on the tree if you need to monitor a item's focus.
70
79
  */
71
80
  onFocus?: null;
72
81
  /**
73
- * The tree node label.
82
+ * The tree item label.
74
83
  */
75
84
  label?: React.ReactNode;
76
85
  /**
77
86
  * The id of the node.
78
87
  */
79
88
  nodeId: TreeViewItemId;
80
- /**
81
- * The component used for the transition.
82
- * [Follow this guide](/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.
83
- * @default Collapse
84
- */
85
- TransitionComponent?: React.JSXElementConstructor<TransitionProps>;
86
- /**
87
- * Props applied to the transition element.
88
- * By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.
89
- */
90
- TransitionProps?: TransitionProps;
91
89
  /**
92
90
  * The system prop that allows defining system overrides as well as additional CSS styles.
93
91
  */
@@ -2,7 +2,7 @@ export interface TreeItemClasses {
2
2
  /** Styles applied to the root element. */
3
3
  root: string;
4
4
  /** Styles applied to the transition component. */
5
- group: string;
5
+ groupTransition: string;
6
6
  /** Styles applied to the content element. */
7
7
  content: string;
8
8
  /** State class applied to the content element when expanded. */
@@ -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) {
@@ -0,0 +1,18 @@
1
+ import * as React from 'react';
2
+ import { TreeItem2Props } from './TreeItem2.types';
3
+ export declare const TreeItem2Root: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, Pick<React.DetailedHTMLProps<React.LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>, keyof React.ClassAttributes<HTMLLIElement> | keyof React.LiHTMLAttributes<HTMLLIElement>>, {}>;
4
+ export declare const TreeItem2Content: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
5
+ export declare const TreeItem2Label: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement>>, {}>;
6
+ export declare const TreeItem2IconContainer: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement>>, {}>;
7
+ export declare const TreeItem2GroupTransition: import("@emotion/styled").StyledComponent<Pick<import("@mui/material/Collapse").CollapseProps, keyof import("@mui/material/Collapse").CollapseProps> & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
8
+ /**
9
+ *
10
+ * Demos:
11
+ *
12
+ * - [Tree View](https://mui.com/x/react-tree-view/)
13
+ *
14
+ * API:
15
+ *
16
+ * - [TreeItem2 API](https://mui.com/x/api/tree-view/tree-item-2/)
17
+ */
18
+ export declare const TreeItem2: React.ForwardRefExoticComponent<TreeItem2Props & React.RefAttributes<HTMLLIElement>>;