@mui/x-tree-view 7.0.0-beta.6 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/CHANGELOG.md +311 -12
  2. package/README.md +1 -1
  3. package/RichTreeView/RichTreeView.js +34 -36
  4. package/RichTreeView/RichTreeView.types.d.ts +3 -2
  5. package/SimpleTreeView/SimpleTreeView.js +25 -26
  6. package/TreeItem/TreeItem.js +94 -82
  7. package/TreeItem/TreeItem.types.d.ts +13 -11
  8. package/TreeItem/TreeItemContent.d.ts +7 -7
  9. package/TreeItem/TreeItemContent.js +10 -10
  10. package/TreeItem/useTreeItemState.d.ts +1 -1
  11. package/TreeItem/useTreeItemState.js +13 -13
  12. package/TreeItem2/TreeItem2.d.ts +18 -0
  13. package/TreeItem2/TreeItem2.js +300 -0
  14. package/TreeItem2/TreeItem2.types.d.ts +64 -0
  15. package/TreeItem2/TreeItem2.types.js +1 -0
  16. package/TreeItem2/index.d.ts +2 -0
  17. package/TreeItem2/index.js +1 -0
  18. package/TreeItem2/package.json +6 -0
  19. package/TreeItem2Icon/TreeItem2Icon.d.ts +7 -0
  20. package/TreeItem2Icon/TreeItem2Icon.js +67 -0
  21. package/TreeItem2Icon/TreeItem2Icon.types.d.ts +40 -0
  22. package/TreeItem2Icon/TreeItem2Icon.types.js +1 -0
  23. package/TreeItem2Icon/index.d.ts +2 -0
  24. package/TreeItem2Icon/index.js +1 -0
  25. package/TreeItem2Icon/package.json +6 -0
  26. package/TreeItem2Provider/TreeItem2Provider.d.ts +7 -0
  27. package/TreeItem2Provider/TreeItem2Provider.js +24 -0
  28. package/TreeItem2Provider/TreeItem2Provider.types.d.ts +6 -0
  29. package/TreeItem2Provider/TreeItem2Provider.types.js +1 -0
  30. package/TreeItem2Provider/index.d.ts +2 -0
  31. package/TreeItem2Provider/index.js +1 -0
  32. package/TreeItem2Provider/package.json +6 -0
  33. package/TreeView/TreeView.d.ts +1 -1
  34. package/TreeView/TreeView.js +23 -23
  35. package/hooks/index.d.ts +1 -0
  36. package/hooks/index.js +2 -1
  37. package/hooks/useTreeItem2Utils/index.d.ts +1 -0
  38. package/hooks/useTreeItem2Utils/index.js +1 -0
  39. package/hooks/useTreeItem2Utils/useTreeItem2Utils.d.ts +15 -0
  40. package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +61 -0
  41. package/index.d.ts +5 -1
  42. package/index.js +9 -2
  43. package/internals/TreeViewProvider/TreeViewContext.d.ts +3 -1
  44. package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +4 -2
  45. package/internals/hooks/useInstanceEventHandler.js +5 -10
  46. package/internals/hooks/useLazyRef.d.ts +1 -2
  47. package/internals/hooks/useLazyRef.js +1 -11
  48. package/internals/hooks/useOnMount.d.ts +1 -2
  49. package/internals/hooks/useOnMount.js +1 -7
  50. package/internals/hooks/useTimeout.d.ts +1 -11
  51. package/internals/hooks/useTimeout.js +1 -36
  52. package/internals/models/plugin.d.ts +19 -16
  53. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +31 -38
  54. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +14 -14
  55. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +67 -51
  56. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +9 -8
  57. package/internals/plugins/useTreeViewId/useTreeViewId.js +1 -1
  58. package/internals/plugins/useTreeViewId/useTreeViewId.types.d.ts +1 -1
  59. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +30 -31
  60. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.d.ts +2 -2
  61. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +75 -80
  62. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +4 -1
  63. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +26 -31
  64. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +11 -11
  65. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +47 -50
  66. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +15 -15
  67. package/internals/useTreeView/useTreeView.js +28 -27
  68. package/internals/useTreeView/useTreeView.utils.d.ts +2 -2
  69. package/internals/useTreeView/useTreeView.utils.js +22 -22
  70. package/internals/utils/extractPluginParamsFromProps.js +2 -2
  71. package/internals/utils/utils.js +1 -0
  72. package/modern/RichTreeView/RichTreeView.js +29 -29
  73. package/modern/SimpleTreeView/SimpleTreeView.js +23 -23
  74. package/modern/TreeItem/TreeItem.js +83 -70
  75. package/modern/TreeItem/TreeItemContent.js +10 -10
  76. package/modern/TreeItem/useTreeItemState.js +13 -13
  77. package/modern/TreeItem2/TreeItem2.js +300 -0
  78. package/modern/TreeItem2/TreeItem2.types.js +1 -0
  79. package/modern/TreeItem2/index.js +1 -0
  80. package/modern/TreeItem2Icon/TreeItem2Icon.js +67 -0
  81. package/modern/TreeItem2Icon/TreeItem2Icon.types.js +1 -0
  82. package/modern/TreeItem2Icon/index.js +1 -0
  83. package/modern/TreeItem2Provider/TreeItem2Provider.js +24 -0
  84. package/modern/TreeItem2Provider/TreeItem2Provider.types.js +1 -0
  85. package/modern/TreeItem2Provider/index.js +1 -0
  86. package/modern/TreeView/TreeView.js +23 -23
  87. package/modern/hooks/index.js +2 -1
  88. package/modern/hooks/useTreeItem2Utils/index.js +1 -0
  89. package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +61 -0
  90. package/modern/index.js +9 -2
  91. package/modern/internals/hooks/useLazyRef.js +1 -11
  92. package/modern/internals/hooks/useOnMount.js +1 -7
  93. package/modern/internals/hooks/useTimeout.js +1 -36
  94. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +29 -29
  95. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +65 -46
  96. package/modern/internals/plugins/useTreeViewId/useTreeViewId.js +1 -1
  97. package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +30 -30
  98. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +74 -77
  99. package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +21 -22
  100. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +43 -43
  101. package/modern/internals/useTreeView/useTreeView.js +28 -27
  102. package/modern/internals/useTreeView/useTreeView.utils.js +22 -22
  103. package/modern/internals/utils/utils.js +1 -0
  104. package/modern/useTreeItem2/index.js +1 -0
  105. package/modern/useTreeItem2/useTreeItem2.js +146 -0
  106. package/modern/useTreeItem2/useTreeItem2.types.js +1 -0
  107. package/node/RichTreeView/RichTreeView.js +29 -29
  108. package/node/SimpleTreeView/SimpleTreeView.js +23 -23
  109. package/node/TreeItem/TreeItem.js +83 -70
  110. package/node/TreeItem/TreeItemContent.js +10 -10
  111. package/node/TreeItem/useTreeItemState.js +13 -13
  112. package/node/TreeItem2/TreeItem2.js +308 -0
  113. package/node/TreeItem2/TreeItem2.types.js +5 -0
  114. package/node/TreeItem2/index.js +42 -0
  115. package/node/TreeItem2Icon/TreeItem2Icon.js +75 -0
  116. package/node/TreeItem2Icon/TreeItem2Icon.types.js +5 -0
  117. package/node/TreeItem2Icon/index.js +12 -0
  118. package/node/TreeItem2Provider/TreeItem2Provider.js +30 -0
  119. package/node/TreeItem2Provider/TreeItem2Provider.types.js +5 -0
  120. package/node/TreeItem2Provider/index.js +12 -0
  121. package/node/TreeView/TreeView.js +23 -23
  122. package/node/hooks/index.js +8 -1
  123. package/node/hooks/useTreeItem2Utils/index.js +12 -0
  124. package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +68 -0
  125. package/node/index.js +61 -13
  126. package/node/internals/hooks/useLazyRef.js +7 -13
  127. package/node/internals/hooks/useOnMount.js +8 -10
  128. package/node/internals/hooks/useTimeout.js +7 -37
  129. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +29 -29
  130. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +65 -46
  131. package/node/internals/plugins/useTreeViewId/useTreeViewId.js +1 -1
  132. package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +30 -30
  133. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +74 -77
  134. package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +21 -22
  135. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +43 -43
  136. package/node/internals/useTreeView/useTreeView.js +28 -27
  137. package/node/internals/useTreeView/useTreeView.utils.js +22 -22
  138. package/node/internals/utils/utils.js +1 -0
  139. package/node/useTreeItem2/index.js +12 -0
  140. package/node/useTreeItem2/useTreeItem2.js +154 -0
  141. package/node/useTreeItem2/useTreeItem2.types.js +5 -0
  142. package/package.json +5 -5
  143. package/themeAugmentation/components.d.ts +5 -0
  144. package/themeAugmentation/overrides.d.ts +1 -0
  145. package/themeAugmentation/props.d.ts +2 -0
  146. package/useTreeItem2/index.d.ts +2 -0
  147. package/useTreeItem2/index.js +1 -0
  148. package/useTreeItem2/package.json +6 -0
  149. package/useTreeItem2/useTreeItem2.d.ts +2 -0
  150. package/useTreeItem2/useTreeItem2.js +146 -0
  151. package/useTreeItem2/useTreeItem2.types.d.ts +115 -0
  152. package/useTreeItem2/useTreeItem2.types.js +1 -0
@@ -31,7 +31,7 @@ export const SimpleTreeViewRoot = styled('ul', {
31
31
  outline: 0
32
32
  });
33
33
  const EMPTY_ITEMS = [];
34
- const itemsPropWarning = buildWarning(['MUI X: The `SimpleTreeView` component does not support the `items` prop.', 'If you want to add items, you need to pass them as JSX children.', 'Check the documentation for more details: https://next.mui.com/x/react-tree-view/simple-tree-view/items/']);
34
+ const itemsPropWarning = buildWarning(['MUI X: The `SimpleTreeView` component does not support the `items` prop.', 'If you want to add items, you need to pass them as JSX children.', 'Check the documentation for more details: https://mui.com/x/react-tree-view/simple-tree-view/items/']);
35
35
 
36
36
  /**
37
37
  *
@@ -44,7 +44,6 @@ const itemsPropWarning = buildWarning(['MUI X: The `SimpleTreeView` component do
44
44
  * - [SimpleTreeView API](https://mui.com/x/api/tree-view/simple-tree-view/)
45
45
  */
46
46
  const SimpleTreeView = /*#__PURE__*/React.forwardRef(function SimpleTreeView(inProps, ref) {
47
- var _slots$root;
48
47
  const props = useThemeProps({
49
48
  props: inProps,
50
49
  name: 'MuiSimpleTreeView'
@@ -72,10 +71,10 @@ const SimpleTreeView = /*#__PURE__*/React.forwardRef(function SimpleTreeView(inP
72
71
  contextValue
73
72
  } = useTreeView(pluginParams);
74
73
  const classes = useUtilityClasses(props);
75
- const Root = (_slots$root = slots == null ? void 0 : slots.root) != null ? _slots$root : SimpleTreeViewRoot;
74
+ const Root = slots?.root ?? SimpleTreeViewRoot;
76
75
  const rootProps = useSlotProps({
77
76
  elementType: Root,
78
- externalSlotProps: slotProps == null ? void 0 : slotProps.root,
77
+ externalSlotProps: slotProps?.root,
79
78
  externalForwardedProps: otherProps,
80
79
  className: classes.root,
81
80
  getSlotProps: getRootProps,
@@ -96,7 +95,7 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
96
95
  */
97
96
  apiRef: PropTypes.shape({
98
97
  current: PropTypes.shape({
99
- focusNode: PropTypes.func.isRequired,
98
+ focusItem: PropTypes.func.isRequired,
100
99
  getItem: PropTypes.func.isRequired
101
100
  })
102
101
  }),
@@ -110,17 +109,17 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
110
109
  classes: PropTypes.object,
111
110
  className: PropTypes.string,
112
111
  /**
113
- * Expanded node ids.
112
+ * Expanded item ids.
114
113
  * Used when the item's expansion is not controlled.
115
114
  * @default []
116
115
  */
117
- defaultExpandedNodes: PropTypes.arrayOf(PropTypes.string),
116
+ defaultExpandedItems: PropTypes.arrayOf(PropTypes.string),
118
117
  /**
119
- * Selected node ids. (Uncontrolled)
118
+ * Selected item ids. (Uncontrolled)
120
119
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
121
120
  * @default []
122
121
  */
123
- defaultSelectedNodes: PropTypes.any,
122
+ defaultSelectedItems: PropTypes.any,
124
123
  /**
125
124
  * If `true`, will allow focus on disabled items.
126
125
  * @default false
@@ -132,10 +131,10 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
132
131
  */
133
132
  disableSelection: PropTypes.bool,
134
133
  /**
135
- * Expanded node ids.
134
+ * Expanded item ids.
136
135
  * Used when the item's expansion is controlled.
137
136
  */
138
- expandedNodes: PropTypes.arrayOf(PropTypes.string),
137
+ expandedItems: PropTypes.arrayOf(PropTypes.string),
139
138
  /**
140
139
  * This prop is used to help implement the accessibility logic.
141
140
  * If you don't provide this prop. It falls back to a randomly generated id.
@@ -149,42 +148,42 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
149
148
  /**
150
149
  * Callback fired when tree items are expanded/collapsed.
151
150
  * @param {React.SyntheticEvent} event The event source of the callback.
152
- * @param {array} nodeIds The ids of the expanded nodes.
151
+ * @param {array} itemIds The ids of the expanded items.
153
152
  */
154
- onExpandedNodesChange: PropTypes.func,
153
+ onExpandedItemsChange: PropTypes.func,
155
154
  /**
156
155
  * Callback fired when a tree item is expanded or collapsed.
157
156
  * @param {React.SyntheticEvent} event The event source of the callback.
158
- * @param {array} nodeId The nodeId of the modified node.
159
- * @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.
160
159
  */
161
- onNodeExpansionToggle: PropTypes.func,
160
+ onItemExpansionToggle: PropTypes.func,
162
161
  /**
163
162
  * Callback fired when tree items are focused.
164
163
  * @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
165
- * @param {string} nodeId The id of the node focused.
166
- * @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.
167
166
  */
168
- onNodeFocus: PropTypes.func,
167
+ onItemFocus: PropTypes.func,
169
168
  /**
170
169
  * Callback fired when a tree item is selected or deselected.
171
170
  * @param {React.SyntheticEvent} event The event source of the callback.
172
- * @param {array} nodeId The nodeId of the modified node.
173
- * @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.
174
173
  */
175
- onNodeSelectionToggle: PropTypes.func,
174
+ onItemSelectionToggle: PropTypes.func,
176
175
  /**
177
176
  * Callback fired when tree items are selected/deselected.
178
177
  * @param {React.SyntheticEvent} event The event source of the callback
179
- * @param {string[] | string} nodeIds The ids of the selected nodes.
178
+ * @param {string[] | string} itemIds The ids of the selected items.
180
179
  * When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
181
180
  */
182
- onSelectedNodesChange: PropTypes.func,
181
+ onSelectedItemsChange: PropTypes.func,
183
182
  /**
184
- * Selected node ids. (Controlled)
183
+ * Selected item ids. (Controlled)
185
184
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
186
185
  */
187
- selectedNodes: PropTypes.any,
186
+ selectedItems: PropTypes.any,
188
187
  /**
189
188
  * The props used for each component slot.
190
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"],
3
+ const _excluded = ["children", "className", "slots", "slotProps", "ContentComponent", "ContentProps", "itemId", "id", "label", "onClick", "onMouseDown", "onFocus", "onBlur", "onKeyDown"],
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 => {
@@ -135,7 +137,6 @@ 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, _slots$groupTransitio;
139
140
  const {
140
141
  icons: contextIcons,
141
142
  runItemPlugins,
@@ -145,18 +146,10 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
145
146
  disabledItemsFocusable,
146
147
  instance
147
148
  } = useTreeViewContext();
148
- const inPropsWithTheme = useThemeProps({
149
+ const props = useThemeProps({
149
150
  props: inProps,
150
151
  name: 'MuiTreeItem'
151
152
  });
152
- const {
153
- props,
154
- ref,
155
- wrapItem
156
- } = runItemPlugins({
157
- props: inPropsWithTheme,
158
- ref: inRef
159
- });
160
153
  const {
161
154
  children,
162
155
  className,
@@ -164,19 +157,27 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
164
157
  slotProps: inSlotProps,
165
158
  ContentComponent = TreeItemContent,
166
159
  ContentProps,
167
- nodeId,
160
+ itemId,
168
161
  id,
169
162
  label,
170
163
  onClick,
171
- onMouseDown
164
+ onMouseDown,
165
+ onBlur,
166
+ onKeyDown
172
167
  } = props,
173
168
  other = _objectWithoutPropertiesLoose(props, _excluded);
169
+ const {
170
+ contentRef,
171
+ rootRef
172
+ } = runItemPlugins(props);
173
+ const handleRootRef = useForkRef(inRef, rootRef);
174
+ const handleContentRef = useForkRef(ContentProps?.ref, contentRef);
174
175
  const slots = {
175
- expandIcon: (_ref = (_inSlots$expandIcon = inSlots == null ? void 0 : inSlots.expandIcon) != null ? _inSlots$expandIcon : contextIcons.slots.expandIcon) != null ? _ref : TreeViewExpandIcon,
176
- collapseIcon: (_ref2 = (_inSlots$collapseIcon = inSlots == null ? void 0 : inSlots.collapseIcon) != null ? _inSlots$collapseIcon : contextIcons.slots.collapseIcon) != null ? _ref2 : TreeViewCollapseIcon,
177
- endIcon: (_inSlots$endIcon = inSlots == null ? void 0 : inSlots.endIcon) != null ? _inSlots$endIcon : contextIcons.slots.endIcon,
178
- icon: inSlots == null ? void 0 : inSlots.icon,
179
- groupTransition: inSlots == null ? void 0 : inSlots.groupTransition
176
+ expandIcon: inSlots?.expandIcon ?? contextIcons.slots.expandIcon ?? TreeViewExpandIcon,
177
+ collapseIcon: inSlots?.collapseIcon ?? contextIcons.slots.collapseIcon ?? TreeViewCollapseIcon,
178
+ endIcon: inSlots?.endIcon ?? contextIcons.slots.endIcon,
179
+ icon: inSlots?.icon,
180
+ groupTransition: inSlots?.groupTransition
180
181
  };
181
182
  const isExpandable = reactChildren => {
182
183
  if (Array.isArray(reactChildren)) {
@@ -185,10 +186,10 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
185
186
  return Boolean(reactChildren);
186
187
  };
187
188
  const expandable = isExpandable(children);
188
- const expanded = instance.isNodeExpanded(nodeId);
189
- const focused = instance.isNodeFocused(nodeId);
190
- const selected = instance.isNodeSelected(nodeId);
191
- const disabled = instance.isNodeDisabled(nodeId);
189
+ const expanded = instance.isNodeExpanded(itemId);
190
+ const focused = instance.isNodeFocused(itemId);
191
+ const selected = instance.isNodeSelected(itemId);
192
+ const disabled = instance.isNodeDisabled(itemId);
192
193
  const ownerState = _extends({}, props, {
193
194
  expanded,
194
195
  focused,
@@ -196,11 +197,11 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
196
197
  disabled
197
198
  });
198
199
  const classes = useUtilityClasses(ownerState);
199
- const GroupTransition = (_slots$groupTransitio = slots.groupTransition) != null ? _slots$groupTransitio : undefined;
200
+ const GroupTransition = slots.groupTransition ?? undefined;
200
201
  const groupTransitionProps = useSlotProps({
201
202
  elementType: GroupTransition,
202
203
  ownerState: {},
203
- externalSlotProps: inSlotProps == null ? void 0 : inSlotProps.groupTransition,
204
+ externalSlotProps: inSlotProps?.groupTransition,
204
205
  additionalProps: {
205
206
  unmountOnExit: true,
206
207
  in: expanded,
@@ -215,9 +216,9 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
215
216
  ownerState: {},
216
217
  externalSlotProps: tempOwnerState => {
217
218
  if (expanded) {
218
- return _extends({}, resolveComponentProps(contextIcons.slotProps.collapseIcon, tempOwnerState), resolveComponentProps(inSlotProps == null ? void 0 : inSlotProps.collapseIcon, tempOwnerState));
219
+ return _extends({}, resolveComponentProps(contextIcons.slotProps.collapseIcon, tempOwnerState), resolveComponentProps(inSlotProps?.collapseIcon, tempOwnerState));
219
220
  }
220
- return _extends({}, resolveComponentProps(contextIcons.slotProps.expandIcon, tempOwnerState), resolveComponentProps(inSlotProps == null ? void 0 : inSlotProps.expandIcon, tempOwnerState));
221
+ return _extends({}, resolveComponentProps(contextIcons.slotProps.expandIcon, tempOwnerState), resolveComponentProps(inSlotProps?.expandIcon, tempOwnerState));
221
222
  }
222
223
  }),
223
224
  expansionIconProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded2);
@@ -230,7 +231,7 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
230
231
  if (expandable) {
231
232
  return {};
232
233
  }
233
- return _extends({}, resolveComponentProps(contextIcons.slotProps.endIcon, tempOwnerState), resolveComponentProps(inSlotProps == null ? void 0 : inSlotProps.endIcon, tempOwnerState));
234
+ return _extends({}, resolveComponentProps(contextIcons.slotProps.endIcon, tempOwnerState), resolveComponentProps(inSlotProps?.endIcon, tempOwnerState));
234
235
  }
235
236
  }),
236
237
  displayIconProps = _objectWithoutPropertiesLoose(_useSlotProps2, _excluded3);
@@ -239,7 +240,7 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
239
240
  const _useSlotProps3 = useSlotProps({
240
241
  elementType: Icon,
241
242
  ownerState: {},
242
- externalSlotProps: inSlotProps == null ? void 0 : inSlotProps.icon
243
+ externalSlotProps: inSlotProps?.icon
243
244
  }),
244
245
  iconProps = _objectWithoutPropertiesLoose(_useSlotProps3, _excluded4);
245
246
  const icon = Icon ? /*#__PURE__*/_jsx(Icon, _extends({}, iconProps)) : null;
@@ -250,62 +251,73 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
250
251
  /* single-selection trees unset aria-selected on un-selected items.
251
252
  *
252
253
  * If the tree does not support multiple selection, aria-selected
253
- * is set to true for the selected node and it is not present on any other node in the tree.
254
+ * is set to true for the selected item and it is not present on any other item in the tree.
254
255
  * Source: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/
255
256
  */
256
257
  ariaSelected = true;
257
258
  }
258
259
  function handleFocus(event) {
259
- // DOM focus stays on the tree which manages focus with aria-activedescendant
260
- if (event.target === event.currentTarget) {
261
- instance.focusRoot();
262
- }
263
260
  const canBeFocused = !disabled || disabledItemsFocusable;
264
261
  if (!focused && canBeFocused && event.currentTarget === event.target) {
265
- instance.focusNode(event, nodeId);
262
+ instance.focusItem(event, itemId);
266
263
  }
267
264
  }
268
- const idAttribute = instance.getTreeItemId(nodeId, id);
269
- const item = /*#__PURE__*/_jsxs(TreeItemRoot, _extends({
270
- className: clsx(classes.root, className),
271
- role: "treeitem",
272
- "aria-expanded": expandable ? expanded : undefined,
273
- "aria-selected": ariaSelected,
274
- "aria-disabled": disabled || undefined,
275
- id: idAttribute,
276
- tabIndex: -1
277
- }, other, {
278
- ownerState: ownerState,
279
- onFocus: handleFocus,
280
- ref: ref,
281
- children: [/*#__PURE__*/_jsx(StyledTreeItemContent, _extends({
282
- as: ContentComponent,
283
- classes: {
284
- root: classes.content,
285
- expanded: classes.expanded,
286
- selected: classes.selected,
287
- focused: classes.focused,
288
- disabled: classes.disabled,
289
- iconContainer: classes.iconContainer,
290
- label: classes.label
291
- },
292
- label: label,
293
- nodeId: nodeId,
294
- onClick: onClick,
295
- onMouseDown: onMouseDown,
296
- icon: icon,
297
- expansionIcon: expansionIcon,
298
- displayIcon: displayIcon,
299
- ownerState: ownerState
300
- }, ContentProps)), children && /*#__PURE__*/_jsx(TreeItemGroup, _extends({
301
- as: GroupTransition
302
- }, groupTransitionProps, {
303
- children: children
304
- }))]
305
- }));
306
- return wrapItem(item);
265
+ function handleBlur(event) {
266
+ onBlur?.(event);
267
+ instance.removeFocusedItem();
268
+ }
269
+ const handleKeyDown = event => {
270
+ onKeyDown?.(event);
271
+ instance.handleItemKeyDown(event, itemId);
272
+ };
273
+ const idAttribute = instance.getTreeItemId(itemId, id);
274
+ const tabIndex = instance.canItemBeTabbed(itemId) ? 0 : -1;
275
+ return /*#__PURE__*/_jsx(TreeItem2Provider, {
276
+ itemId: itemId,
277
+ children: /*#__PURE__*/_jsxs(TreeItemRoot, _extends({
278
+ className: clsx(classes.root, className),
279
+ role: "treeitem",
280
+ "aria-expanded": expandable ? expanded : undefined,
281
+ "aria-selected": ariaSelected,
282
+ "aria-disabled": disabled || undefined,
283
+ id: idAttribute,
284
+ tabIndex: tabIndex
285
+ }, other, {
286
+ ownerState: ownerState,
287
+ onFocus: handleFocus,
288
+ onBlur: handleBlur,
289
+ onKeyDown: handleKeyDown,
290
+ ref: handleRootRef,
291
+ children: [/*#__PURE__*/_jsx(StyledTreeItemContent, _extends({
292
+ as: ContentComponent,
293
+ classes: {
294
+ root: classes.content,
295
+ expanded: classes.expanded,
296
+ selected: classes.selected,
297
+ focused: classes.focused,
298
+ disabled: classes.disabled,
299
+ iconContainer: classes.iconContainer,
300
+ label: classes.label
301
+ },
302
+ label: label,
303
+ itemId: itemId,
304
+ onClick: onClick,
305
+ onMouseDown: onMouseDown,
306
+ icon: icon,
307
+ expansionIcon: expansionIcon,
308
+ displayIcon: displayIcon,
309
+ ownerState: ownerState
310
+ }, ContentProps, {
311
+ ref: handleContentRef
312
+ })), children && /*#__PURE__*/_jsx(TreeItemGroup, _extends({
313
+ as: GroupTransition
314
+ }, groupTransitionProps, {
315
+ children: children
316
+ }))]
317
+ }))
318
+ });
307
319
  });
308
- TreeItem.propTypes = {
320
+ process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
309
321
  // ----------------------------- Warning --------------------------------
310
322
  // | These PropTypes are generated from the TypeScript type definitions |
311
323
  // | To update them edit the TypeScript types and run "yarn proptypes" |
@@ -320,7 +332,7 @@ TreeItem.propTypes = {
320
332
  classes: PropTypes.object,
321
333
  className: PropTypes.string,
322
334
  /**
323
- * The component used for the content node.
335
+ * The component used to render the content of the item.
324
336
  * @default TreeItemContent
325
337
  */
326
338
  ContentComponent: elementTypeAcceptingRef,
@@ -329,21 +341,21 @@ TreeItem.propTypes = {
329
341
  */
330
342
  ContentProps: PropTypes.object,
331
343
  /**
332
- * If `true`, the node is disabled.
344
+ * If `true`, the item is disabled.
333
345
  * @default false
334
346
  */
335
347
  disabled: PropTypes.bool,
336
348
  /**
337
- * The tree node label.
349
+ * The id of the item.
338
350
  */
339
- label: PropTypes.node,
351
+ itemId: PropTypes.string.isRequired,
340
352
  /**
341
- * The id of the node.
353
+ * The tree item label.
342
354
  */
343
- nodeId: PropTypes.string.isRequired,
355
+ label: PropTypes.node,
344
356
  /**
345
357
  * This prop isn't supported.
346
- * Use the `onNodeFocus` callback on the tree if you need to monitor a node's focus.
358
+ * Use the `onItemFocus` callback on the tree if you need to monitor a item's focus.
347
359
  */
348
360
  onFocus: unsupportedProp,
349
361
  /**
@@ -360,4 +372,4 @@ TreeItem.propTypes = {
360
372
  * The system prop that allows defining system overrides as well as additional CSS styles.
361
373
  */
362
374
  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
363
- };
375
+ } : void 0;
@@ -9,19 +9,19 @@ import { TreeViewItemId } from '../models';
9
9
  import { SlotComponentPropsFromProps } from '../internals/models';
10
10
  export interface TreeItemSlots {
11
11
  /**
12
- * The icon used to collapse the node.
12
+ * The icon used to collapse the item.
13
13
  */
14
14
  collapseIcon?: React.ElementType;
15
15
  /**
16
- * The icon used to expand the node.
16
+ * The icon used to expand the item.
17
17
  */
18
18
  expandIcon?: React.ElementType;
19
19
  /**
20
- * The icon displayed next to an end node.
20
+ * The icon displayed next to an end item.
21
21
  */
22
22
  endIcon?: React.ElementType;
23
23
  /**
24
- * The icon to display next to the tree node's label.
24
+ * The icon to display next to the tree item's label.
25
25
  */
26
26
  icon?: React.ElementType;
27
27
  /**
@@ -58,32 +58,34 @@ export interface TreeItemProps extends Omit<React.HTMLAttributes<HTMLLIElement>,
58
58
  */
59
59
  slotProps?: TreeItemSlotProps;
60
60
  /**
61
- * The component used for the content node.
61
+ * The component used to render the content of the item.
62
62
  * @default TreeItemContent
63
63
  */
64
64
  ContentComponent?: React.JSXElementConstructor<TreeItemContentProps>;
65
65
  /**
66
66
  * Props applied to ContentComponent.
67
67
  */
68
- ContentProps?: React.HTMLAttributes<HTMLElement>;
68
+ ContentProps?: React.HTMLAttributes<HTMLElement> & {
69
+ ref?: React.Ref<HTMLElement>;
70
+ };
69
71
  /**
70
- * If `true`, the node is disabled.
72
+ * If `true`, the item is disabled.
71
73
  * @default false
72
74
  */
73
75
  disabled?: boolean;
74
76
  /**
75
77
  * This prop isn't supported.
76
- * 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.
77
79
  */
78
80
  onFocus?: null;
79
81
  /**
80
- * The tree node label.
82
+ * The tree item label.
81
83
  */
82
84
  label?: React.ReactNode;
83
85
  /**
84
- * The id of the node.
86
+ * The id of the item.
85
87
  */
86
- nodeId: TreeViewItemId;
88
+ itemId: TreeViewItemId;
87
89
  /**
88
90
  * The system prop that allows defining system overrides as well as additional CSS styles.
89
91
  */
@@ -15,29 +15,29 @@ export interface TreeItemContentProps extends React.HTMLAttributes<HTMLElement>
15
15
  focused: string;
16
16
  /** State class applied to the element when disabled. */
17
17
  disabled: string;
18
- /** Styles applied to the tree node icon and collapse/expand icon. */
18
+ /** Styles applied to the tree item icon and collapse/expand icon. */
19
19
  iconContainer: string;
20
20
  /** Styles applied to the label element. */
21
21
  label: string;
22
22
  };
23
23
  /**
24
- * The tree node label.
24
+ * The tree item label.
25
25
  */
26
26
  label?: React.ReactNode;
27
27
  /**
28
- * The id of the node.
28
+ * The id of the item.
29
29
  */
30
- nodeId: string;
30
+ itemId: string;
31
31
  /**
32
- * The icon to display next to the tree node's label.
32
+ * The icon to display next to the tree item's label.
33
33
  */
34
34
  icon?: React.ReactNode;
35
35
  /**
36
- * The icon to display next to the tree node's label. Either an expansion or collapse icon.
36
+ * The icon to display next to the tree item's label. Either an expansion or collapse icon.
37
37
  */
38
38
  expansionIcon?: React.ReactNode;
39
39
  /**
40
- * The icon to display next to the tree node's label. Either a parent or end icon.
40
+ * The icon to display next to the tree item's label. Either a parent or end icon.
41
41
  */
42
42
  displayIcon?: React.ReactNode;
43
43
  }
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- const _excluded = ["classes", "className", "displayIcon", "expansionIcon", "icon", "label", "nodeId", "onClick", "onMouseDown"];
3
+ const _excluded = ["classes", "className", "displayIcon", "expansionIcon", "icon", "label", "itemId", "onClick", "onMouseDown"];
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import clsx from 'clsx';
@@ -18,7 +18,7 @@ const TreeItemContent = /*#__PURE__*/React.forwardRef(function TreeItemContent(p
18
18
  expansionIcon,
19
19
  icon: iconProp,
20
20
  label,
21
- nodeId,
21
+ itemId,
22
22
  onClick,
23
23
  onMouseDown
24
24
  } = props,
@@ -31,7 +31,7 @@ const TreeItemContent = /*#__PURE__*/React.forwardRef(function TreeItemContent(p
31
31
  handleExpansion,
32
32
  handleSelection,
33
33
  preventSelection
34
- } = useTreeItemState(nodeId);
34
+ } = useTreeItemState(itemId);
35
35
  const icon = iconProp || expansionIcon || displayIcon;
36
36
  const handleMouseDown = event => {
37
37
  preventSelection(event);
@@ -75,24 +75,24 @@ process.env.NODE_ENV !== "production" ? TreeItemContent.propTypes = {
75
75
  classes: PropTypes.object.isRequired,
76
76
  className: PropTypes.string,
77
77
  /**
78
- * The icon to display next to the tree node's label. Either a parent or end icon.
78
+ * The icon to display next to the tree item's label. Either a parent or end icon.
79
79
  */
80
80
  displayIcon: PropTypes.node,
81
81
  /**
82
- * The icon to display next to the tree node's label. Either an expansion or collapse icon.
82
+ * The icon to display next to the tree item's label. Either an expansion or collapse icon.
83
83
  */
84
84
  expansionIcon: PropTypes.node,
85
85
  /**
86
- * The icon to display next to the tree node's label.
86
+ * The icon to display next to the tree item's label.
87
87
  */
88
88
  icon: PropTypes.node,
89
89
  /**
90
- * The tree node label.
90
+ * The id of the item.
91
91
  */
92
- label: PropTypes.node,
92
+ itemId: PropTypes.string.isRequired,
93
93
  /**
94
- * The id of the node.
94
+ * The tree item label.
95
95
  */
96
- nodeId: PropTypes.string.isRequired
96
+ label: PropTypes.node
97
97
  } : void 0;
98
98
  export { TreeItemContent };
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- export declare function useTreeItemState(nodeId: string): {
2
+ export declare function useTreeItemState(itemId: string): {
3
3
  disabled: boolean;
4
4
  expanded: boolean;
5
5
  selected: boolean;