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