@mui/x-tree-view 7.0.0-alpha.1 → 7.0.0-alpha.8

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 (217) hide show
  1. package/CHANGELOG.md +1380 -188
  2. package/README.md +0 -1
  3. package/RichTreeView/RichTreeView.d.ts +20 -0
  4. package/RichTreeView/RichTreeView.js +285 -0
  5. package/RichTreeView/RichTreeView.types.d.ts +55 -0
  6. package/RichTreeView/RichTreeView.types.js +1 -0
  7. package/RichTreeView/index.d.ts +3 -0
  8. package/RichTreeView/index.js +3 -0
  9. package/RichTreeView/package.json +6 -0
  10. package/RichTreeView/richTreeViewClasses.d.ts +7 -0
  11. package/RichTreeView/richTreeViewClasses.js +6 -0
  12. package/SimpleTreeView/SimpleTreeView.d.ts +20 -0
  13. package/SimpleTreeView/SimpleTreeView.js +235 -0
  14. package/SimpleTreeView/SimpleTreeView.plugins.d.ts +6 -0
  15. package/SimpleTreeView/SimpleTreeView.plugins.js +5 -0
  16. package/SimpleTreeView/SimpleTreeView.types.d.ts +38 -0
  17. package/SimpleTreeView/SimpleTreeView.types.js +1 -0
  18. package/SimpleTreeView/index.d.ts +3 -0
  19. package/SimpleTreeView/index.js +3 -0
  20. package/SimpleTreeView/package.json +6 -0
  21. package/SimpleTreeView/simpleTreeViewClasses.d.ts +7 -0
  22. package/SimpleTreeView/simpleTreeViewClasses.js +6 -0
  23. package/TreeItem/TreeItem.js +44 -89
  24. package/TreeItem/TreeItem.types.d.ts +2 -1
  25. package/TreeItem/index.d.ts +2 -2
  26. package/TreeItem/index.js +2 -2
  27. package/TreeItem/useTreeItem.js +5 -5
  28. package/TreeView/TreeView.d.ts +4 -0
  29. package/TreeView/TreeView.js +80 -87
  30. package/TreeView/TreeView.types.d.ts +4 -26
  31. package/TreeView/index.d.ts +1 -1
  32. package/index.d.ts +3 -0
  33. package/index.js +5 -2
  34. package/internals/TreeViewProvider/TreeViewContext.d.ts +1 -2
  35. package/internals/TreeViewProvider/TreeViewContext.js +1 -14
  36. package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -3
  37. package/internals/TreeViewProvider/useTreeViewContext.js +7 -1
  38. package/internals/corePlugins/corePlugins.d.ts +1 -1
  39. package/internals/corePlugins/corePlugins.js +1 -1
  40. package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.d.ts +0 -5
  41. package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +2 -7
  42. package/internals/hooks/useLazyRef.d.ts +2 -0
  43. package/internals/hooks/useLazyRef.js +11 -0
  44. package/internals/hooks/useOnMount.d.ts +2 -0
  45. package/internals/hooks/useOnMount.js +7 -0
  46. package/internals/hooks/useTimeout.d.ts +9 -0
  47. package/internals/hooks/useTimeout.js +28 -0
  48. package/internals/models/MuiCancellableEvent.d.ts +4 -0
  49. package/internals/models/MuiCancellableEvent.js +1 -0
  50. package/internals/models/plugin.d.ts +24 -0
  51. package/internals/models/treeView.d.ts +5 -1
  52. package/internals/plugins/defaultPlugins.d.ts +3 -2
  53. package/internals/plugins/defaultPlugins.js +2 -1
  54. package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +14 -6
  55. package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.d.ts +1 -6
  56. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +32 -17
  57. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +12 -5
  58. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +16 -6
  59. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +4 -1
  60. package/internals/plugins/useTreeViewId/index.d.ts +2 -0
  61. package/internals/plugins/useTreeViewId/index.js +1 -0
  62. package/internals/plugins/useTreeViewId/useTreeViewId.d.ts +3 -0
  63. package/internals/plugins/useTreeViewId/useTreeViewId.js +21 -0
  64. package/internals/plugins/useTreeViewId/useTreeViewId.types.d.ts +17 -0
  65. package/internals/plugins/useTreeViewId/useTreeViewId.types.js +1 -0
  66. package/internals/plugins/useTreeViewJSXNodes/index.d.ts +2 -0
  67. package/internals/plugins/useTreeViewJSXNodes/index.js +1 -0
  68. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.d.ts +3 -0
  69. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +115 -0
  70. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.d.ts +16 -0
  71. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +1 -0
  72. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +175 -121
  73. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +5 -2
  74. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +89 -17
  75. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +48 -5
  76. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.d.ts +1 -1
  77. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +49 -28
  78. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +15 -8
  79. package/internals/useTreeView/useTreeView.js +40 -3
  80. package/internals/useTreeView/useTreeView.types.d.ts +2 -1
  81. package/internals/useTreeView/useTreeViewModels.js +2 -2
  82. package/internals/utils/extractPluginParamsFromProps.d.ts +13 -0
  83. package/internals/utils/extractPluginParamsFromProps.js +27 -0
  84. package/internals/utils/warning.d.ts +1 -0
  85. package/internals/utils/warning.js +14 -0
  86. package/legacy/RichTreeView/RichTreeView.js +279 -0
  87. package/legacy/RichTreeView/RichTreeView.types.js +1 -0
  88. package/legacy/RichTreeView/index.js +3 -0
  89. package/legacy/RichTreeView/richTreeViewClasses.js +6 -0
  90. package/legacy/SimpleTreeView/SimpleTreeView.js +232 -0
  91. package/legacy/SimpleTreeView/SimpleTreeView.plugins.js +6 -0
  92. package/legacy/SimpleTreeView/SimpleTreeView.types.js +1 -0
  93. package/legacy/SimpleTreeView/index.js +3 -0
  94. package/legacy/SimpleTreeView/simpleTreeViewClasses.js +6 -0
  95. package/legacy/TreeItem/TreeItem.js +49 -103
  96. package/legacy/TreeItem/index.js +2 -2
  97. package/legacy/TreeItem/useTreeItem.js +5 -5
  98. package/legacy/TreeView/TreeView.js +80 -82
  99. package/legacy/index.js +5 -2
  100. package/legacy/internals/TreeViewProvider/TreeViewContext.js +1 -14
  101. package/legacy/internals/TreeViewProvider/useTreeViewContext.js +5 -1
  102. package/legacy/internals/corePlugins/corePlugins.js +1 -1
  103. package/legacy/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +2 -7
  104. package/legacy/internals/hooks/useLazyRef.js +11 -0
  105. package/legacy/internals/hooks/useOnMount.js +7 -0
  106. package/legacy/internals/hooks/useTimeout.js +38 -0
  107. package/legacy/internals/models/MuiCancellableEvent.js +1 -0
  108. package/legacy/internals/plugins/defaultPlugins.js +2 -1
  109. package/legacy/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +17 -8
  110. package/legacy/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +32 -17
  111. package/legacy/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +16 -6
  112. package/legacy/internals/plugins/useTreeViewId/index.js +1 -0
  113. package/legacy/internals/plugins/useTreeViewId/useTreeViewId.js +24 -0
  114. package/legacy/internals/plugins/useTreeViewId/useTreeViewId.types.js +1 -0
  115. package/legacy/internals/plugins/useTreeViewJSXNodes/index.js +1 -0
  116. package/legacy/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +121 -0
  117. package/legacy/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +1 -0
  118. package/legacy/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +177 -119
  119. package/legacy/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +96 -20
  120. package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +53 -28
  121. package/legacy/internals/useTreeView/useTreeView.js +39 -3
  122. package/legacy/internals/useTreeView/useTreeViewModels.js +2 -2
  123. package/legacy/internals/utils/extractPluginParamsFromProps.js +27 -0
  124. package/legacy/internals/utils/warning.js +15 -0
  125. package/legacy/models/index.js +1 -0
  126. package/legacy/models/items.js +1 -0
  127. package/models/index.d.ts +1 -0
  128. package/models/index.js +1 -0
  129. package/models/items.d.ts +7 -0
  130. package/models/items.js +1 -0
  131. package/models/package.json +6 -0
  132. package/modern/RichTreeView/RichTreeView.js +283 -0
  133. package/modern/RichTreeView/RichTreeView.types.js +1 -0
  134. package/modern/RichTreeView/index.js +3 -0
  135. package/modern/RichTreeView/richTreeViewClasses.js +6 -0
  136. package/modern/SimpleTreeView/SimpleTreeView.js +234 -0
  137. package/modern/SimpleTreeView/SimpleTreeView.plugins.js +5 -0
  138. package/modern/SimpleTreeView/SimpleTreeView.types.js +1 -0
  139. package/modern/SimpleTreeView/index.js +3 -0
  140. package/modern/SimpleTreeView/simpleTreeViewClasses.js +6 -0
  141. package/modern/TreeItem/TreeItem.js +44 -88
  142. package/modern/TreeItem/index.js +2 -2
  143. package/modern/TreeItem/useTreeItem.js +5 -5
  144. package/modern/TreeView/TreeView.js +80 -87
  145. package/modern/index.js +5 -2
  146. package/modern/internals/TreeViewProvider/TreeViewContext.js +1 -14
  147. package/modern/internals/TreeViewProvider/useTreeViewContext.js +7 -1
  148. package/modern/internals/corePlugins/corePlugins.js +1 -1
  149. package/modern/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +2 -7
  150. package/modern/internals/hooks/useLazyRef.js +11 -0
  151. package/modern/internals/hooks/useOnMount.js +7 -0
  152. package/modern/internals/hooks/useTimeout.js +28 -0
  153. package/modern/internals/models/MuiCancellableEvent.js +1 -0
  154. package/modern/internals/plugins/defaultPlugins.js +2 -1
  155. package/modern/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +14 -6
  156. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +33 -18
  157. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +16 -7
  158. package/modern/internals/plugins/useTreeViewId/index.js +1 -0
  159. package/modern/internals/plugins/useTreeViewId/useTreeViewId.js +21 -0
  160. package/modern/internals/plugins/useTreeViewId/useTreeViewId.types.js +1 -0
  161. package/modern/internals/plugins/useTreeViewJSXNodes/index.js +1 -0
  162. package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +114 -0
  163. package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +1 -0
  164. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +174 -121
  165. package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +88 -17
  166. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +50 -29
  167. package/modern/internals/useTreeView/useTreeView.js +40 -3
  168. package/modern/internals/useTreeView/useTreeViewModels.js +2 -2
  169. package/modern/internals/utils/extractPluginParamsFromProps.js +27 -0
  170. package/modern/internals/utils/warning.js +14 -0
  171. package/modern/models/index.js +1 -0
  172. package/modern/models/items.js +1 -0
  173. package/node/RichTreeView/RichTreeView.js +291 -0
  174. package/node/RichTreeView/RichTreeView.types.js +5 -0
  175. package/node/RichTreeView/index.js +27 -0
  176. package/node/RichTreeView/richTreeViewClasses.js +14 -0
  177. package/node/SimpleTreeView/SimpleTreeView.js +242 -0
  178. package/node/SimpleTreeView/SimpleTreeView.plugins.js +11 -0
  179. package/node/SimpleTreeView/SimpleTreeView.types.js +5 -0
  180. package/node/SimpleTreeView/index.js +27 -0
  181. package/node/SimpleTreeView/simpleTreeViewClasses.js +14 -0
  182. package/node/TreeItem/TreeItem.js +44 -88
  183. package/node/TreeItem/index.js +11 -15
  184. package/node/TreeItem/useTreeItem.js +5 -5
  185. package/node/TreeView/TreeView.js +80 -87
  186. package/node/index.js +38 -2
  187. package/node/internals/TreeViewProvider/TreeViewContext.js +2 -15
  188. package/node/internals/TreeViewProvider/useTreeViewContext.js +7 -1
  189. package/node/internals/corePlugins/corePlugins.js +1 -1
  190. package/node/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +2 -7
  191. package/node/internals/hooks/useLazyRef.js +19 -0
  192. package/node/internals/hooks/useOnMount.js +15 -0
  193. package/node/internals/hooks/useTimeout.js +34 -0
  194. package/node/internals/models/MuiCancellableEvent.js +5 -0
  195. package/node/internals/plugins/defaultPlugins.js +2 -1
  196. package/node/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +15 -8
  197. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +33 -18
  198. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +16 -7
  199. package/node/internals/plugins/useTreeViewId/index.js +12 -0
  200. package/node/internals/plugins/useTreeViewId/useTreeViewId.js +31 -0
  201. package/node/internals/plugins/useTreeViewId/useTreeViewId.types.js +5 -0
  202. package/node/internals/plugins/useTreeViewJSXNodes/index.js +12 -0
  203. package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +124 -0
  204. package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +5 -0
  205. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +174 -121
  206. package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +89 -18
  207. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +50 -29
  208. package/node/internals/useTreeView/useTreeView.js +40 -3
  209. package/node/internals/useTreeView/useTreeViewModels.js +2 -2
  210. package/node/internals/utils/extractPluginParamsFromProps.js +34 -0
  211. package/node/internals/utils/warning.js +21 -0
  212. package/node/models/index.js +16 -0
  213. package/node/models/items.js +5 -0
  214. package/package.json +8 -7
  215. package/themeAugmentation/components.d.ts +14 -4
  216. package/themeAugmentation/overrides.d.ts +8 -4
  217. package/themeAugmentation/props.d.ts +7 -3
@@ -0,0 +1,234 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
+ const _excluded = ["slots", "slotProps"];
4
+ import * as React from 'react';
5
+ import PropTypes from 'prop-types';
6
+ import { styled, useThemeProps } from '@mui/material/styles';
7
+ import composeClasses from '@mui/utils/composeClasses';
8
+ import { useSlotProps } from '@mui/base/utils';
9
+ import { getSimpleTreeViewUtilityClass } from './simpleTreeViewClasses';
10
+ import { useTreeView } from '../internals/useTreeView';
11
+ import { TreeViewProvider } from '../internals/TreeViewProvider';
12
+ import { SIMPLE_TREE_VIEW_PLUGINS } from './SimpleTreeView.plugins';
13
+ import { buildWarning } from '../internals/utils/warning';
14
+ import { extractPluginParamsFromProps } from '../internals/utils/extractPluginParamsFromProps';
15
+ import { jsx as _jsx } from "react/jsx-runtime";
16
+ const useUtilityClasses = ownerState => {
17
+ const {
18
+ classes
19
+ } = ownerState;
20
+ const slots = {
21
+ root: ['root']
22
+ };
23
+ return composeClasses(slots, getSimpleTreeViewUtilityClass, classes);
24
+ };
25
+ export const SimpleTreeViewRoot = styled('ul', {
26
+ name: 'MuiSimpleTreeView',
27
+ slot: 'Root',
28
+ overridesResolver: (props, styles) => styles.root
29
+ })({
30
+ padding: 0,
31
+ margin: 0,
32
+ listStyle: 'none',
33
+ outline: 0
34
+ });
35
+ const EMPTY_ITEMS = [];
36
+ 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/']);
37
+
38
+ /**
39
+ *
40
+ * Demos:
41
+ *
42
+ * - [Tree View](https://mui.com/x/react-tree-view/)
43
+ *
44
+ * API:
45
+ *
46
+ * - [SimpleTreeView API](https://mui.com/x/api/tree-view/simple-tree-view/)
47
+ */
48
+ const SimpleTreeView = /*#__PURE__*/React.forwardRef(function SimpleTreeView(inProps, ref) {
49
+ const props = useThemeProps({
50
+ props: inProps,
51
+ name: 'MuiSimpleTreeView'
52
+ });
53
+ const ownerState = props;
54
+ if (process.env.NODE_ENV !== 'production') {
55
+ if (props.items != null) {
56
+ itemsPropWarning();
57
+ }
58
+ }
59
+ const _extractPluginParamsF = extractPluginParamsFromProps({
60
+ props: _extends({}, props, {
61
+ items: EMPTY_ITEMS
62
+ }),
63
+ plugins: SIMPLE_TREE_VIEW_PLUGINS,
64
+ rootRef: ref
65
+ }),
66
+ {
67
+ pluginParams,
68
+ otherProps: {
69
+ slots
70
+ }
71
+ } = _extractPluginParamsF,
72
+ otherProps = _objectWithoutPropertiesLoose(_extractPluginParamsF.otherProps, _excluded);
73
+ const {
74
+ getRootProps,
75
+ contextValue
76
+ } = useTreeView(pluginParams);
77
+ const classes = useUtilityClasses(props);
78
+ const Root = slots?.root ?? SimpleTreeViewRoot;
79
+ const rootProps = useSlotProps({
80
+ elementType: Root,
81
+ externalSlotProps: {},
82
+ externalForwardedProps: otherProps,
83
+ className: classes.root,
84
+ getSlotProps: getRootProps,
85
+ ownerState
86
+ });
87
+ return /*#__PURE__*/_jsx(TreeViewProvider, {
88
+ value: contextValue,
89
+ children: /*#__PURE__*/_jsx(Root, _extends({}, rootProps))
90
+ });
91
+ });
92
+ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
93
+ // ----------------------------- Warning --------------------------------
94
+ // | These PropTypes are generated from the TypeScript type definitions |
95
+ // | To update them edit the TypeScript types and run "yarn proptypes" |
96
+ // ----------------------------------------------------------------------
97
+ /**
98
+ * The content of the component.
99
+ */
100
+ children: PropTypes.node,
101
+ /**
102
+ * Override or extend the styles applied to the component.
103
+ */
104
+ classes: PropTypes.object,
105
+ /**
106
+ * className applied to the root element.
107
+ */
108
+ className: PropTypes.string,
109
+ /**
110
+ * The default icon used to collapse the node.
111
+ */
112
+ defaultCollapseIcon: PropTypes.node,
113
+ /**
114
+ * The default icon displayed next to a end node. This is applied to all
115
+ * tree nodes and can be overridden by the TreeItem `icon` prop.
116
+ */
117
+ defaultEndIcon: PropTypes.node,
118
+ /**
119
+ * Expanded node ids.
120
+ * Used when the item's expansion is not controlled.
121
+ * @default []
122
+ */
123
+ defaultExpandedNodes: PropTypes.arrayOf(PropTypes.string),
124
+ /**
125
+ * The default icon used to expand the node.
126
+ */
127
+ defaultExpandIcon: PropTypes.node,
128
+ /**
129
+ * The default icon displayed next to a parent node. This is applied to all
130
+ * parent nodes and can be overridden by the TreeItem `icon` prop.
131
+ */
132
+ defaultParentIcon: PropTypes.node,
133
+ /**
134
+ * Selected node ids. (Uncontrolled)
135
+ * When `multiSelect` is true this takes an array of strings; when false (default) a string.
136
+ * @default []
137
+ */
138
+ defaultSelectedNodes: PropTypes.any,
139
+ /**
140
+ * If `true`, will allow focus on disabled items.
141
+ * @default false
142
+ */
143
+ disabledItemsFocusable: PropTypes.bool,
144
+ /**
145
+ * If `true` selection is disabled.
146
+ * @default false
147
+ */
148
+ disableSelection: PropTypes.bool,
149
+ /**
150
+ * Expanded node ids.
151
+ * Used when the item's expansion is controlled.
152
+ */
153
+ expandedNodes: PropTypes.arrayOf(PropTypes.string),
154
+ /**
155
+ * Used to determine the string label for a given item.
156
+ *
157
+ * @template R
158
+ * @param {R} item The item to check.
159
+ * @returns {string} The id of the item.
160
+ * @default `(item) => item.id`
161
+ */
162
+ getItemId: PropTypes.func,
163
+ /**
164
+ * Used to determine the string label for a given item.
165
+ *
166
+ * @template R
167
+ * @param {R} item The item to check.
168
+ * @returns {string} The label of the item.
169
+ * @default `(item) => item.label`
170
+ */
171
+ getItemLabel: PropTypes.func,
172
+ /**
173
+ * This prop is used to help implement the accessibility logic.
174
+ * If you don't provide this prop. It falls back to a randomly generated id.
175
+ */
176
+ id: PropTypes.string,
177
+ /**
178
+ * If true `ctrl` and `shift` will trigger multiselect.
179
+ * @default false
180
+ */
181
+ multiSelect: PropTypes.bool,
182
+ /**
183
+ * Callback fired when tree items are expanded/collapsed.
184
+ * @param {React.SyntheticEvent} event The event source of the callback.
185
+ * @param {array} nodeIds The ids of the expanded nodes.
186
+ */
187
+ onExpandedNodesChange: PropTypes.func,
188
+ /**
189
+ * Callback fired when a tree item is expanded or collapsed.
190
+ * @param {React.SyntheticEvent} event The event source of the callback.
191
+ * @param {array} nodeId The nodeId of the modified node.
192
+ * @param {array} isExpanded `true` if the node has just been expanded, `false` if it has just been collapsed.
193
+ */
194
+ onNodeExpansionToggle: PropTypes.func,
195
+ /**
196
+ * Callback fired when tree items are focused.
197
+ * @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
198
+ * @param {string} nodeId The id of the node focused.
199
+ * @param {string} value of the focused node.
200
+ */
201
+ onNodeFocus: PropTypes.func,
202
+ /**
203
+ * Callback fired when a tree item is selected or deselected.
204
+ * @param {React.SyntheticEvent} event The event source of the callback.
205
+ * @param {array} nodeId The nodeId of the modified node.
206
+ * @param {array} isSelected `true` if the node has just been selected, `false` if it has just been deselected.
207
+ */
208
+ onNodeSelectionToggle: PropTypes.func,
209
+ /**
210
+ * Callback fired when tree items are selected/deselected.
211
+ * @param {React.SyntheticEvent} event The event source of the callback
212
+ * @param {string[] | string} nodeIds The ids of the selected nodes.
213
+ * When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
214
+ */
215
+ onSelectedNodesChange: PropTypes.func,
216
+ /**
217
+ * Selected node ids. (Controlled)
218
+ * When `multiSelect` is true this takes an array of strings; when false (default) a string.
219
+ */
220
+ selectedNodes: PropTypes.any,
221
+ /**
222
+ * The props used for each component slot.
223
+ */
224
+ slotProps: PropTypes.object,
225
+ /**
226
+ * Overridable component slots.
227
+ */
228
+ slots: PropTypes.object,
229
+ /**
230
+ * The system prop that allows defining system overrides as well as additional CSS styles.
231
+ */
232
+ sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
233
+ } : void 0;
234
+ export { SimpleTreeView };
@@ -0,0 +1,5 @@
1
+ import { DEFAULT_TREE_VIEW_PLUGINS } from '../internals/plugins/defaultPlugins';
2
+ import { useTreeViewJSXNodes } from '../internals/plugins/useTreeViewJSXNodes';
3
+ export const SIMPLE_TREE_VIEW_PLUGINS = [...DEFAULT_TREE_VIEW_PLUGINS, useTreeViewJSXNodes];
4
+
5
+ // We can't infer this type from the plugin, otherwise we would lose the generics.
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ export * from './SimpleTreeView';
2
+ export * from './simpleTreeViewClasses';
3
+ export {};
@@ -0,0 +1,6 @@
1
+ import generateUtilityClass from '@mui/utils/generateUtilityClass';
2
+ import generateUtilityClasses from '@mui/utils/generateUtilityClasses';
3
+ export function getSimpleTreeViewUtilityClass(slot) {
4
+ return generateUtilityClass('MuiSimpleTreeView', slot);
5
+ }
6
+ export const simpleTreeViewClasses = generateUtilityClasses('MuiSimpleTreeView', ['root']);
@@ -1,17 +1,14 @@
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", "collapseIcon", "ContentComponent", "ContentProps", "endIcon", "expandIcon", "disabled", "icon", "id", "label", "nodeId", "onClick", "onMouseDown", "TransitionComponent", "TransitionProps"];
3
+ const _excluded = ["children", "className", "collapseIcon", "ContentComponent", "ContentProps", "endIcon", "expandIcon", "icon", "nodeId", "id", "label", "onClick", "onMouseDown", "TransitionComponent", "TransitionProps"];
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import clsx from 'clsx';
7
7
  import Collapse from '@mui/material/Collapse';
8
8
  import { alpha, styled, useThemeProps } from '@mui/material/styles';
9
- import ownerDocument from '@mui/utils/ownerDocument';
10
- import useForkRef from '@mui/utils/useForkRef';
11
9
  import unsupportedProp from '@mui/utils/unsupportedProp';
12
10
  import elementTypeAcceptingRef from '@mui/utils/elementTypeAcceptingRef';
13
11
  import { unstable_composeClasses as composeClasses } from '@mui/base';
14
- import { DescendantProvider, useDescendant } from '../internals/TreeViewProvider/DescendantProvider';
15
12
  import { TreeItemContent } from './TreeItemContent';
16
13
  import { treeItemClasses, getTreeItemUtilityClass } from './treeItemClasses';
17
14
  import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
@@ -132,11 +129,26 @@ const TreeItemGroup = styled(Collapse, {
132
129
  *
133
130
  * - [TreeItem API](https://mui.com/x/api/tree-view/tree-item/)
134
131
  */
135
- export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps, ref) {
136
- const props = useThemeProps({
132
+ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps, inRef) {
133
+ const {
134
+ icons: contextIcons,
135
+ runItemPlugins,
136
+ multiSelect,
137
+ disabledItemsFocusable,
138
+ instance
139
+ } = useTreeViewContext();
140
+ const inPropsWithTheme = useThemeProps({
137
141
  props: inProps,
138
142
  name: 'MuiTreeItem'
139
143
  });
144
+ const {
145
+ props,
146
+ ref,
147
+ wrapItem
148
+ } = runItemPlugins({
149
+ props: inPropsWithTheme,
150
+ ref: inRef
151
+ });
140
152
  const {
141
153
  children,
142
154
  className,
@@ -145,46 +157,21 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
145
157
  ContentProps,
146
158
  endIcon,
147
159
  expandIcon,
148
- disabled: disabledProp,
149
160
  icon,
150
- id: idProp,
151
- label,
152
161
  nodeId,
162
+ id,
163
+ label,
153
164
  onClick,
154
165
  onMouseDown,
155
166
  TransitionComponent = Collapse,
156
167
  TransitionProps
157
168
  } = props,
158
169
  other = _objectWithoutPropertiesLoose(props, _excluded);
159
- const {
160
- icons: contextIcons,
161
- multiSelect,
162
- disabledItemsFocusable,
163
- treeId,
164
- instance
165
- } = useTreeViewContext();
166
- let id;
167
- if (idProp != null) {
168
- id = idProp;
169
- } else if (treeId && nodeId) {
170
- id = `${treeId}-${nodeId}`;
171
- }
172
- const [treeItemElement, setTreeItemElement] = React.useState(null);
173
- const contentRef = React.useRef(null);
174
- const handleRef = useForkRef(setTreeItemElement, ref);
175
- const descendant = React.useMemo(() => ({
176
- element: treeItemElement,
177
- id: nodeId
178
- }), [nodeId, treeItemElement]);
179
- const {
180
- index,
181
- parentId
182
- } = useDescendant(descendant);
183
170
  const expandable = Boolean(Array.isArray(children) ? children.length : children);
184
- const expanded = instance ? instance.isNodeExpanded(nodeId) : false;
185
- const focused = instance ? instance.isNodeFocused(nodeId) : false;
186
- const selected = instance ? instance.isNodeSelected(nodeId) : false;
187
- const disabled = instance ? instance.isNodeDisabled(nodeId) : false;
171
+ const expanded = instance.isNodeExpanded(nodeId);
172
+ const focused = instance.isNodeFocused(nodeId);
173
+ const selected = instance.isNodeSelected(nodeId);
174
+ const disabled = instance.isNodeDisabled(nodeId);
188
175
  const ownerState = _extends({}, props, {
189
176
  expanded,
190
177
  focused,
@@ -206,27 +193,6 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
206
193
  } else {
207
194
  displayIcon = endIcon || contextIcons.defaultEndIcon;
208
195
  }
209
- React.useEffect(() => {
210
- // On the first render a node's index will be -1. We want to wait for the real index.
211
- if (instance && index !== -1) {
212
- instance.updateNode({
213
- id: nodeId,
214
- idAttribute: id,
215
- index,
216
- parentId,
217
- expandable,
218
- disabled: disabledProp
219
- });
220
- return () => instance.removeNode(nodeId);
221
- }
222
- return undefined;
223
- }, [instance, parentId, index, nodeId, expandable, disabledProp, id]);
224
- React.useEffect(() => {
225
- if (instance && label) {
226
- return instance.mapFirstChar(nodeId, (contentRef.current?.textContent ?? '').substring(0, 1).toLowerCase());
227
- }
228
- return undefined;
229
- }, [instance, nodeId, label]);
230
196
  let ariaSelected;
231
197
  if (multiSelect) {
232
198
  ariaSelected = selected;
@@ -242,36 +208,28 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
242
208
  function handleFocus(event) {
243
209
  // DOM focus stays on the tree which manages focus with aria-activedescendant
244
210
  if (event.target === event.currentTarget) {
245
- let rootElement;
246
- if (typeof event.target.getRootNode === 'function') {
247
- rootElement = event.target.getRootNode();
248
- } else {
249
- rootElement = ownerDocument(event.target);
250
- }
251
- rootElement.getElementById(treeId).focus({
252
- preventScroll: true
253
- });
211
+ instance.focusRoot();
254
212
  }
255
- const unfocusable = !disabledItemsFocusable && disabled;
256
- if (instance && !focused && event.currentTarget === event.target && !unfocusable) {
213
+ const canBeFocused = !disabled || disabledItemsFocusable;
214
+ if (!focused && canBeFocused && event.currentTarget === event.target) {
257
215
  instance.focusNode(event, nodeId);
258
216
  }
259
217
  }
260
- return /*#__PURE__*/_jsxs(TreeItemRoot, _extends({
218
+ const idAttribute = instance.getTreeItemId(nodeId, id);
219
+ const item = /*#__PURE__*/_jsxs(TreeItemRoot, _extends({
261
220
  className: clsx(classes.root, className),
262
221
  role: "treeitem",
263
222
  "aria-expanded": expandable ? expanded : undefined,
264
223
  "aria-selected": ariaSelected,
265
224
  "aria-disabled": disabled || undefined,
266
- id: id,
225
+ id: idAttribute,
267
226
  tabIndex: -1
268
227
  }, other, {
269
228
  ownerState: ownerState,
270
229
  onFocus: handleFocus,
271
- ref: handleRef,
230
+ ref: ref,
272
231
  children: [/*#__PURE__*/_jsx(StyledTreeItemContent, _extends({
273
232
  as: ContentComponent,
274
- ref: contentRef,
275
233
  classes: {
276
234
  root: classes.content,
277
235
  expanded: classes.expanded,
@@ -289,22 +247,20 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
289
247
  expansionIcon: expansionIcon,
290
248
  displayIcon: displayIcon,
291
249
  ownerState: ownerState
292
- }, ContentProps)), children && /*#__PURE__*/_jsx(DescendantProvider, {
293
- id: nodeId,
294
- children: /*#__PURE__*/_jsx(TreeItemGroup, _extends({
295
- as: TransitionComponent,
296
- unmountOnExit: true,
297
- className: classes.group,
298
- in: expanded,
299
- component: "ul",
300
- role: "group"
301
- }, TransitionProps, {
302
- children: children
303
- }))
304
- })]
250
+ }, ContentProps)), children && /*#__PURE__*/_jsx(TreeItemGroup, _extends({
251
+ as: TransitionComponent,
252
+ unmountOnExit: true,
253
+ className: classes.group,
254
+ in: expanded,
255
+ component: "ul",
256
+ role: "group"
257
+ }, TransitionProps, {
258
+ children: children
259
+ }))]
305
260
  }));
261
+ return wrapItem(item);
306
262
  });
307
- process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
263
+ TreeItem.propTypes = {
308
264
  // ----------------------------- Warning --------------------------------
309
265
  // | These PropTypes are generated from the TypeScript type definitions |
310
266
  // | To update them edit the TypeScript types and run "yarn proptypes" |
@@ -379,4 +335,4 @@ process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
379
335
  * By default, the element is based on this [`Transition`](http://reactcommunity.org/react-transition-group/transition/) component.
380
336
  */
381
337
  TransitionProps: PropTypes.object
382
- } : void 0;
338
+ };
@@ -1,4 +1,4 @@
1
- export * from './TreeItem';
2
- export * from './useTreeItem';
1
+ export { TreeItem } from './TreeItem';
3
2
  export * from './treeItemClasses';
3
+ export * from './useTreeItem';
4
4
  export { TreeItemContent } from './TreeItemContent';
@@ -4,11 +4,11 @@ export function useTreeItem(nodeId) {
4
4
  instance,
5
5
  multiSelect
6
6
  } = useTreeViewContext();
7
- const expandable = instance ? instance.isNodeExpandable(nodeId) : false;
8
- const expanded = instance ? instance.isNodeExpanded(nodeId) : false;
9
- const focused = instance ? instance.isNodeFocused(nodeId) : false;
10
- const selected = instance ? instance.isNodeSelected(nodeId) : false;
11
- const disabled = instance ? instance.isNodeDisabled(nodeId) : false;
7
+ const expandable = instance.isNodeExpandable(nodeId);
8
+ const expanded = instance.isNodeExpanded(nodeId);
9
+ const focused = instance.isNodeFocused(nodeId);
10
+ const selected = instance.isNodeSelected(nodeId);
11
+ const disabled = instance.isNodeDisabled(nodeId);
12
12
  const handleExpansion = event => {
13
13
  if (instance && !disabled) {
14
14
  if (!focused) {