@mui/x-tree-view 6.17.0 → 7.0.0-alpha.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 (203) hide show
  1. package/CHANGELOG.md +1748 -6
  2. package/README.md +0 -1
  3. package/RichTreeView/RichTreeView.d.ts +20 -0
  4. package/RichTreeView/RichTreeView.js +324 -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 +268 -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 +0 -6
  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/plugin.d.ts +23 -0
  49. package/internals/models/treeView.d.ts +5 -1
  50. package/internals/plugins/defaultPlugins.d.ts +3 -2
  51. package/internals/plugins/defaultPlugins.js +2 -1
  52. package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +8 -6
  53. package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.d.ts +1 -6
  54. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +26 -17
  55. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +12 -5
  56. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +13 -6
  57. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +4 -1
  58. package/internals/plugins/useTreeViewId/index.d.ts +2 -0
  59. package/internals/plugins/useTreeViewId/index.js +1 -0
  60. package/internals/plugins/useTreeViewId/useTreeViewId.d.ts +3 -0
  61. package/internals/plugins/useTreeViewId/useTreeViewId.js +18 -0
  62. package/internals/plugins/useTreeViewId/useTreeViewId.types.d.ts +17 -0
  63. package/internals/plugins/useTreeViewId/useTreeViewId.types.js +1 -0
  64. package/internals/plugins/useTreeViewJSXNodes/index.d.ts +2 -0
  65. package/internals/plugins/useTreeViewJSXNodes/index.js +1 -0
  66. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.d.ts +3 -0
  67. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +114 -0
  68. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.d.ts +16 -0
  69. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +1 -0
  70. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +20 -9
  71. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +5 -2
  72. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +83 -18
  73. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +48 -5
  74. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.d.ts +1 -1
  75. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +41 -28
  76. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +15 -8
  77. package/internals/useTreeView/useTreeView.js +40 -3
  78. package/internals/useTreeView/useTreeView.types.d.ts +2 -1
  79. package/internals/utils/warning.d.ts +1 -0
  80. package/internals/utils/warning.js +14 -0
  81. package/legacy/RichTreeView/RichTreeView.js +317 -0
  82. package/legacy/RichTreeView/RichTreeView.types.js +1 -0
  83. package/legacy/RichTreeView/index.js +3 -0
  84. package/legacy/RichTreeView/richTreeViewClasses.js +6 -0
  85. package/legacy/SimpleTreeView/SimpleTreeView.js +264 -0
  86. package/legacy/SimpleTreeView/SimpleTreeView.plugins.js +6 -0
  87. package/legacy/SimpleTreeView/SimpleTreeView.types.js +1 -0
  88. package/legacy/SimpleTreeView/index.js +3 -0
  89. package/legacy/SimpleTreeView/simpleTreeViewClasses.js +6 -0
  90. package/legacy/TreeItem/TreeItem.js +49 -103
  91. package/legacy/TreeItem/index.js +2 -2
  92. package/legacy/TreeItem/useTreeItem.js +5 -5
  93. package/legacy/TreeView/TreeView.js +80 -82
  94. package/legacy/index.js +5 -2
  95. package/legacy/internals/TreeViewProvider/TreeViewContext.js +1 -14
  96. package/legacy/internals/TreeViewProvider/useTreeViewContext.js +5 -1
  97. package/legacy/internals/corePlugins/corePlugins.js +1 -1
  98. package/legacy/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +0 -6
  99. package/legacy/internals/hooks/useLazyRef.js +11 -0
  100. package/legacy/internals/hooks/useOnMount.js +7 -0
  101. package/legacy/internals/hooks/useTimeout.js +38 -0
  102. package/legacy/internals/plugins/defaultPlugins.js +2 -1
  103. package/legacy/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +11 -8
  104. package/legacy/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +26 -17
  105. package/legacy/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +13 -6
  106. package/legacy/internals/plugins/useTreeViewId/index.js +1 -0
  107. package/legacy/internals/plugins/useTreeViewId/useTreeViewId.js +21 -0
  108. package/legacy/internals/plugins/useTreeViewId/useTreeViewId.types.js +1 -0
  109. package/legacy/internals/plugins/useTreeViewJSXNodes/index.js +1 -0
  110. package/legacy/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +120 -0
  111. package/legacy/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +1 -0
  112. package/legacy/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +20 -9
  113. package/legacy/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +89 -20
  114. package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +45 -28
  115. package/legacy/internals/useTreeView/useTreeView.js +39 -3
  116. package/legacy/internals/utils/warning.js +15 -0
  117. package/legacy/models/index.js +1 -0
  118. package/legacy/models/items.js +1 -0
  119. package/models/index.d.ts +1 -0
  120. package/models/index.js +1 -0
  121. package/models/items.d.ts +7 -0
  122. package/models/items.js +1 -0
  123. package/models/package.json +6 -0
  124. package/modern/RichTreeView/RichTreeView.js +322 -0
  125. package/modern/RichTreeView/RichTreeView.types.js +1 -0
  126. package/modern/RichTreeView/index.js +3 -0
  127. package/modern/RichTreeView/richTreeViewClasses.js +6 -0
  128. package/modern/SimpleTreeView/SimpleTreeView.js +267 -0
  129. package/modern/SimpleTreeView/SimpleTreeView.plugins.js +5 -0
  130. package/modern/SimpleTreeView/SimpleTreeView.types.js +1 -0
  131. package/modern/SimpleTreeView/index.js +3 -0
  132. package/modern/SimpleTreeView/simpleTreeViewClasses.js +6 -0
  133. package/modern/TreeItem/TreeItem.js +44 -88
  134. package/modern/TreeItem/index.js +2 -2
  135. package/modern/TreeItem/useTreeItem.js +5 -5
  136. package/modern/TreeView/TreeView.js +80 -87
  137. package/modern/index.js +5 -2
  138. package/modern/internals/TreeViewProvider/TreeViewContext.js +1 -14
  139. package/modern/internals/TreeViewProvider/useTreeViewContext.js +7 -1
  140. package/modern/internals/corePlugins/corePlugins.js +1 -1
  141. package/modern/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +0 -6
  142. package/modern/internals/hooks/useLazyRef.js +11 -0
  143. package/modern/internals/hooks/useOnMount.js +7 -0
  144. package/modern/internals/hooks/useTimeout.js +28 -0
  145. package/modern/internals/plugins/defaultPlugins.js +2 -1
  146. package/modern/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +8 -6
  147. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +26 -17
  148. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -6
  149. package/modern/internals/plugins/useTreeViewId/index.js +1 -0
  150. package/modern/internals/plugins/useTreeViewId/useTreeViewId.js +18 -0
  151. package/modern/internals/plugins/useTreeViewId/useTreeViewId.types.js +1 -0
  152. package/modern/internals/plugins/useTreeViewJSXNodes/index.js +1 -0
  153. package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +113 -0
  154. package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +1 -0
  155. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +19 -9
  156. package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +82 -18
  157. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +41 -28
  158. package/modern/internals/useTreeView/useTreeView.js +40 -3
  159. package/modern/internals/utils/warning.js +14 -0
  160. package/modern/models/index.js +1 -0
  161. package/modern/models/items.js +1 -0
  162. package/node/RichTreeView/RichTreeView.js +330 -0
  163. package/node/RichTreeView/RichTreeView.types.js +5 -0
  164. package/node/RichTreeView/index.js +27 -0
  165. package/node/RichTreeView/richTreeViewClasses.js +14 -0
  166. package/node/SimpleTreeView/SimpleTreeView.js +275 -0
  167. package/node/SimpleTreeView/SimpleTreeView.plugins.js +11 -0
  168. package/node/SimpleTreeView/SimpleTreeView.types.js +5 -0
  169. package/node/SimpleTreeView/index.js +27 -0
  170. package/node/SimpleTreeView/simpleTreeViewClasses.js +14 -0
  171. package/node/TreeItem/TreeItem.js +44 -88
  172. package/node/TreeItem/index.js +11 -15
  173. package/node/TreeItem/useTreeItem.js +5 -5
  174. package/node/TreeView/TreeView.js +80 -87
  175. package/node/index.js +38 -2
  176. package/node/internals/TreeViewProvider/TreeViewContext.js +2 -15
  177. package/node/internals/TreeViewProvider/useTreeViewContext.js +7 -1
  178. package/node/internals/corePlugins/corePlugins.js +1 -1
  179. package/node/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +0 -6
  180. package/node/internals/hooks/useLazyRef.js +19 -0
  181. package/node/internals/hooks/useOnMount.js +15 -0
  182. package/node/internals/hooks/useTimeout.js +34 -0
  183. package/node/internals/plugins/defaultPlugins.js +2 -1
  184. package/node/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +8 -7
  185. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +26 -17
  186. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -6
  187. package/node/internals/plugins/useTreeViewId/index.js +12 -0
  188. package/node/internals/plugins/useTreeViewId/useTreeViewId.js +28 -0
  189. package/node/internals/plugins/useTreeViewId/useTreeViewId.types.js +5 -0
  190. package/node/internals/plugins/useTreeViewJSXNodes/index.js +12 -0
  191. package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +123 -0
  192. package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +5 -0
  193. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +19 -9
  194. package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +82 -18
  195. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +41 -28
  196. package/node/internals/useTreeView/useTreeView.js +40 -3
  197. package/node/internals/utils/warning.js +21 -0
  198. package/node/models/index.js +16 -0
  199. package/node/models/items.js +5 -0
  200. package/package.json +8 -7
  201. package/themeAugmentation/components.d.ts +14 -4
  202. package/themeAugmentation/overrides.d.ts +8 -4
  203. package/themeAugmentation/props.d.ts +7 -3
@@ -1,15 +1,10 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
3
- var _excluded = ["disabledItemsFocusable", "expanded", "defaultExpanded", "onNodeToggle", "onNodeFocus", "disableSelection", "defaultSelected", "selected", "multiSelect", "onNodeSelect", "id", "defaultCollapseIcon", "defaultEndIcon", "defaultExpandIcon", "defaultParentIcon", "children"];
4
2
  import * as React from 'react';
5
3
  import PropTypes from 'prop-types';
6
4
  import { styled, useThemeProps } from '@mui/material/styles';
7
5
  import composeClasses from '@mui/utils/composeClasses';
8
- import { useSlotProps } from '@mui/base/utils';
9
6
  import { getTreeViewUtilityClass } from './treeViewClasses';
10
- import { useTreeView } from '../internals/useTreeView';
11
- import { TreeViewProvider } from '../internals/TreeViewProvider';
12
- import { DEFAULT_TREE_VIEW_PLUGINS } from '../internals/plugins';
7
+ import { SimpleTreeView, SimpleTreeViewRoot } from '../SimpleTreeView';
13
8
  import { jsx as _jsx } from "react/jsx-runtime";
14
9
  var useUtilityClasses = function useUtilityClasses(ownerState) {
15
10
  var classes = ownerState.classes;
@@ -18,19 +13,24 @@ var useUtilityClasses = function useUtilityClasses(ownerState) {
18
13
  };
19
14
  return composeClasses(slots, getTreeViewUtilityClass, classes);
20
15
  };
21
- var TreeViewRoot = styled('ul', {
16
+ var TreeViewRoot = styled(SimpleTreeViewRoot, {
22
17
  name: 'MuiTreeView',
23
18
  slot: 'Root',
24
19
  overridesResolver: function overridesResolver(props, styles) {
25
20
  return styles.root;
26
21
  }
27
- })({
28
- padding: 0,
29
- margin: 0,
30
- listStyle: 'none',
31
- outline: 0
32
- });
22
+ })({});
23
+ var warnedOnce = false;
24
+ var warn = function warn() {
25
+ if (!warnedOnce) {
26
+ console.warn(['MUI: The TreeView component was renamed SimpleTreeView.', 'The component with the old naming will be removed in the version v8.0.0.', '', "You should use `import { SimpleTreeView } from '@mui/x-tree-view'`", "or `import { SimpleTreeView } from '@mui/x-tree-view/TreeView'`"].join('\n'));
27
+ warnedOnce = true;
28
+ }
29
+ };
30
+
33
31
  /**
32
+ * This component has been deprecated in favor of the new `SimpleTreeView` component.
33
+ * You can have a look at how to migrate to the new component in the v7 [migration guide](https://next.mui.com/x/migration/migration-tree-view-v6/#use-simpletreeview-instead-of-treeview)
34
34
  *
35
35
  * Demos:
36
36
  *
@@ -39,67 +39,25 @@ var TreeViewRoot = styled('ul', {
39
39
  * API:
40
40
  *
41
41
  * - [TreeView API](https://mui.com/x/api/tree-view/tree-view/)
42
+ *
43
+ * @deprecated
42
44
  */
43
45
  var TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
44
- var themeProps = useThemeProps({
46
+ if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') {
47
+ warn();
48
+ }
49
+ var props = useThemeProps({
45
50
  props: inProps,
46
51
  name: 'MuiTreeView'
47
52
  });
48
- var ownerState = themeProps;
49
- var _ref = themeProps,
50
- disabledItemsFocusable = _ref.disabledItemsFocusable,
51
- expanded = _ref.expanded,
52
- defaultExpanded = _ref.defaultExpanded,
53
- onNodeToggle = _ref.onNodeToggle,
54
- onNodeFocus = _ref.onNodeFocus,
55
- disableSelection = _ref.disableSelection,
56
- defaultSelected = _ref.defaultSelected,
57
- selected = _ref.selected,
58
- multiSelect = _ref.multiSelect,
59
- onNodeSelect = _ref.onNodeSelect,
60
- id = _ref.id,
61
- defaultCollapseIcon = _ref.defaultCollapseIcon,
62
- defaultEndIcon = _ref.defaultEndIcon,
63
- defaultExpandIcon = _ref.defaultExpandIcon,
64
- defaultParentIcon = _ref.defaultParentIcon,
65
- children = _ref.children,
66
- other = _objectWithoutProperties(_ref, _excluded);
67
- var _useTreeView = useTreeView({
68
- disabledItemsFocusable: disabledItemsFocusable,
69
- expanded: expanded,
70
- defaultExpanded: defaultExpanded,
71
- onNodeToggle: onNodeToggle,
72
- onNodeFocus: onNodeFocus,
73
- disableSelection: disableSelection,
74
- defaultSelected: defaultSelected,
75
- selected: selected,
76
- multiSelect: multiSelect,
77
- onNodeSelect: onNodeSelect,
78
- id: id,
79
- defaultCollapseIcon: defaultCollapseIcon,
80
- defaultEndIcon: defaultEndIcon,
81
- defaultExpandIcon: defaultExpandIcon,
82
- defaultParentIcon: defaultParentIcon,
83
- plugins: DEFAULT_TREE_VIEW_PLUGINS,
84
- rootRef: ref
85
- }),
86
- getRootProps = _useTreeView.getRootProps,
87
- contextValue = _useTreeView.contextValue;
88
- var classes = useUtilityClasses(themeProps);
89
- var rootProps = useSlotProps({
90
- elementType: TreeViewRoot,
91
- externalSlotProps: {},
92
- externalForwardedProps: other,
93
- className: classes.root,
94
- getSlotProps: getRootProps,
95
- ownerState: ownerState
96
- });
97
- return /*#__PURE__*/_jsx(TreeViewProvider, {
98
- value: contextValue,
99
- children: /*#__PURE__*/_jsx(TreeViewRoot, _extends({}, rootProps, {
100
- children: children
101
- }))
102
- });
53
+ var classes = useUtilityClasses(props);
54
+ return /*#__PURE__*/_jsx(SimpleTreeView, _extends({}, props, {
55
+ ref: ref,
56
+ classes: classes,
57
+ slots: _extends({
58
+ root: TreeViewRoot
59
+ }, props.slots)
60
+ }));
103
61
  });
104
62
  process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
105
63
  // ----------------------------- Warning --------------------------------
@@ -132,7 +90,7 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
132
90
  * Used when the item's expansion is not controlled.
133
91
  * @default []
134
92
  */
135
- defaultExpanded: PropTypes.arrayOf(PropTypes.string),
93
+ defaultExpandedNodes: PropTypes.arrayOf(PropTypes.string),
136
94
  /**
137
95
  * The default icon used to expand the node.
138
96
  */
@@ -147,7 +105,7 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
147
105
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
148
106
  * @default []
149
107
  */
150
- defaultSelected: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.string]),
108
+ defaultSelectedNodes: PropTypes.any,
151
109
  /**
152
110
  * If `true`, will allow focus on disabled items.
153
111
  * @default false
@@ -162,7 +120,25 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
162
120
  * Expanded node ids.
163
121
  * Used when the item's expansion is controlled.
164
122
  */
165
- expanded: PropTypes.arrayOf(PropTypes.string),
123
+ expandedNodes: PropTypes.arrayOf(PropTypes.string),
124
+ /**
125
+ * Used to determine the string label for a given item.
126
+ *
127
+ * @template R
128
+ * @param {R} item The item to check.
129
+ * @returns {string} The id of the item.
130
+ * @default `(item) => item.id`
131
+ */
132
+ getItemId: PropTypes.func,
133
+ /**
134
+ * Used to determine the string label for a given item.
135
+ *
136
+ * @template R
137
+ * @param {R} item The item to check.
138
+ * @returns {string} The label of the item.
139
+ * @default `(item) => item.label`
140
+ */
141
+ getItemLabel: PropTypes.func,
166
142
  /**
167
143
  * This prop is used to help implement the accessibility logic.
168
144
  * If you don't provide this prop. It falls back to a randomly generated id.
@@ -173,6 +149,19 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
173
149
  * @default false
174
150
  */
175
151
  multiSelect: PropTypes.bool,
152
+ /**
153
+ * Callback fired when tree items are expanded/collapsed.
154
+ * @param {React.SyntheticEvent} event The event source of the callback.
155
+ * @param {array} nodeIds The ids of the expanded nodes.
156
+ */
157
+ onExpandedNodesChange: PropTypes.func,
158
+ /**
159
+ * Callback fired when a tree item is expanded or collapsed.
160
+ * @param {React.SyntheticEvent} event The event source of the callback.
161
+ * @param {array} nodeId The nodeId of the modified node.
162
+ * @param {array} isExpanded `true` if the node has just been expanded, `false` if it has just been collapsed.
163
+ */
164
+ onNodeExpansionToggle: PropTypes.func,
176
165
  /**
177
166
  * Callback fired when tree items are focused.
178
167
  * @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
@@ -181,23 +170,32 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
181
170
  */
182
171
  onNodeFocus: PropTypes.func,
183
172
  /**
184
- * Callback fired when tree items are selected/unselected.
185
- * @param {React.SyntheticEvent} event The event source of the callback
186
- * @param {string[] | string} nodeIds Ids of the selected nodes. When `multiSelect` is true
187
- * this is an array of strings; when false (default) a string.
173
+ * Callback fired when a tree item is selected or deselected.
174
+ * @param {React.SyntheticEvent} event The event source of the callback.
175
+ * @param {array} nodeId The nodeId of the modified node.
176
+ * @param {array} isSelected `true` if the node has just been selected, `false` if it has just been deselected.
188
177
  */
189
- onNodeSelect: PropTypes.func,
178
+ onNodeSelectionToggle: PropTypes.func,
190
179
  /**
191
- * Callback fired when tree items are expanded/collapsed.
192
- * @param {React.SyntheticEvent} event The event source of the callback.
193
- * @param {array} nodeIds The ids of the expanded nodes.
180
+ * Callback fired when tree items are selected/deselected.
181
+ * @param {React.SyntheticEvent} event The event source of the callback
182
+ * @param {string[] | string} nodeIds The ids of the selected nodes.
183
+ * When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
194
184
  */
195
- onNodeToggle: PropTypes.func,
185
+ onSelectedNodesChange: PropTypes.func,
196
186
  /**
197
187
  * Selected node ids. (Controlled)
198
188
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
199
189
  */
200
- selected: PropTypes.any,
190
+ selectedNodes: PropTypes.any,
191
+ /**
192
+ * The props used for each component slot.
193
+ */
194
+ slotProps: PropTypes.object,
195
+ /**
196
+ * Overridable component slots.
197
+ */
198
+ slots: PropTypes.object,
201
199
  /**
202
200
  * The system prop that allows defining system overrides as well as additional CSS styles.
203
201
  */
package/legacy/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-tree-view v6.17.0
2
+ * @mui/x-tree-view v7.0.0-alpha.7
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -7,4 +7,7 @@
7
7
  */
8
8
  export * from './TreeItem';
9
9
  export * from './TreeView';
10
- export { unstable_resetCleanupTracking } from './internals/hooks/useInstanceEventHandler';
10
+ export * from './SimpleTreeView';
11
+ export * from './RichTreeView';
12
+ export { unstable_resetCleanupTracking } from './internals/hooks/useInstanceEventHandler';
13
+ export * from './models';
@@ -1,21 +1,8 @@
1
1
  import * as React from 'react';
2
- export var DEFAULT_TREE_VIEW_CONTEXT_VALUE = {
3
- instance: null,
4
- multiSelect: false,
5
- disabledItemsFocusable: false,
6
- treeId: undefined,
7
- icons: {
8
- defaultCollapseIcon: null,
9
- defaultExpandIcon: null,
10
- defaultParentIcon: null,
11
- defaultEndIcon: null
12
- }
13
- };
14
-
15
2
  /**
16
3
  * @ignore - internal component.
17
4
  */
18
- export var TreeViewContext = /*#__PURE__*/React.createContext(DEFAULT_TREE_VIEW_CONTEXT_VALUE);
5
+ export var TreeViewContext = /*#__PURE__*/React.createContext(null);
19
6
  if (process.env.NODE_ENV !== 'production') {
20
7
  TreeViewContext.displayName = 'TreeViewContext';
21
8
  }
@@ -1,5 +1,9 @@
1
1
  import * as React from 'react';
2
2
  import { TreeViewContext } from './TreeViewContext';
3
3
  export var useTreeViewContext = function useTreeViewContext() {
4
- return React.useContext(TreeViewContext);
4
+ var context = React.useContext(TreeViewContext);
5
+ if (context == null) {
6
+ throw new Error(['MUI: Could not find the Tree View context.', 'It looks like you rendered your component outside of a SimpleTreeView or RichTreeView parent component.', 'This can also happen if you are bundling multiple versions of the Tree View.'].join('\n'));
7
+ }
8
+ return context;
5
9
  };
@@ -1,6 +1,6 @@
1
1
  import { useTreeViewInstanceEvents } from './useTreeViewInstanceEvents';
2
2
  /**
3
- * Internal plugins that creates the tools used by the other plugins.
3
+ * Internal plugins that create the tools used by the other plugins.
4
4
  * These plugins are used by the tree view components.
5
5
  */
6
6
  export var TREE_VIEW_CORE_PLUGINS = [useTreeViewInstanceEvents];
@@ -5,12 +5,6 @@ import { populateInstance } from '../../useTreeView/useTreeView.utils';
5
5
  var isSyntheticEvent = function isSyntheticEvent(event) {
6
6
  return event.isPropagationStopped !== undefined;
7
7
  };
8
-
9
- /**
10
- * Plugin responsible for the registration of the nodes defined as JSX children of the TreeView.
11
- * When we will have both a SimpleTreeView using JSX children and a TreeView using a data prop,
12
- * this plugin will only be used by SimpleTreeView.
13
- */
14
8
  export var useTreeViewInstanceEvents = function useTreeViewInstanceEvents(_ref) {
15
9
  var instance = _ref.instance;
16
10
  var _React$useState = React.useState(function () {
@@ -0,0 +1,11 @@
1
+ import * as React from 'react';
2
+ var UNINITIALIZED = {};
3
+
4
+ // See https://github.com/facebook/react/issues/14490 for when to use this.
5
+ export function useLazyRef(init, initArg) {
6
+ var ref = React.useRef(UNINITIALIZED);
7
+ if (ref.current === UNINITIALIZED) {
8
+ ref.current = init(initArg);
9
+ }
10
+ return ref;
11
+ }
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ var EMPTY = [];
3
+ export function useOnMount(fn) {
4
+ /* eslint-disable react-hooks/exhaustive-deps */
5
+ React.useEffect(fn, EMPTY);
6
+ /* eslint-enable react-hooks/exhaustive-deps */
7
+ }
@@ -0,0 +1,38 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
3
+ import { useLazyRef } from './useLazyRef';
4
+ import { useOnMount } from './useOnMount';
5
+ var Timeout = /*#__PURE__*/function () {
6
+ function Timeout() {
7
+ var _this = this;
8
+ _classCallCheck(this, Timeout);
9
+ this.currentId = 0;
10
+ this.clear = function () {
11
+ if (_this.currentId !== 0) {
12
+ clearTimeout(_this.currentId);
13
+ _this.currentId = 0;
14
+ }
15
+ };
16
+ this.disposeEffect = function () {
17
+ return _this.clear;
18
+ };
19
+ }
20
+ _createClass(Timeout, [{
21
+ key: "start",
22
+ value: function start(delay, fn) {
23
+ this.clear();
24
+ this.currentId = setTimeout(fn, delay);
25
+ }
26
+ }], [{
27
+ key: "create",
28
+ value: function create() {
29
+ return new Timeout();
30
+ }
31
+ }]);
32
+ return Timeout;
33
+ }();
34
+ export function useTimeout() {
35
+ var timeout = useLazyRef(Timeout.create).current;
36
+ useOnMount(timeout.disposeEffect);
37
+ return timeout;
38
+ }
@@ -1,9 +1,10 @@
1
+ import { useTreeViewId } from './useTreeViewId';
1
2
  import { useTreeViewNodes } from './useTreeViewNodes';
2
3
  import { useTreeViewExpansion } from './useTreeViewExpansion';
3
4
  import { useTreeViewSelection } from './useTreeViewSelection';
4
5
  import { useTreeViewFocus } from './useTreeViewFocus';
5
6
  import { useTreeViewKeyboardNavigation } from './useTreeViewKeyboardNavigation';
6
7
  import { useTreeViewContextValueBuilder } from './useTreeViewContextValueBuilder';
7
- export var DEFAULT_TREE_VIEW_PLUGINS = [useTreeViewNodes, useTreeViewExpansion, useTreeViewSelection, useTreeViewFocus, useTreeViewKeyboardNavigation, useTreeViewContextValueBuilder];
8
+ export var DEFAULT_TREE_VIEW_PLUGINS = [useTreeViewId, useTreeViewNodes, useTreeViewExpansion, useTreeViewSelection, useTreeViewFocus, useTreeViewKeyboardNavigation, useTreeViewContextValueBuilder];
8
9
 
9
10
  // We can't infer this type from the plugin, otherwise we would lose the generics.
@@ -1,18 +1,21 @@
1
- import useId from '@mui/utils/useId';
2
1
  export var useTreeViewContextValueBuilder = function useTreeViewContextValueBuilder(_ref) {
3
2
  var instance = _ref.instance,
4
3
  params = _ref.params;
5
- var treeId = useId(params.id);
6
4
  return {
7
- getRootProps: function getRootProps() {
8
- return {
9
- id: treeId
10
- };
11
- },
12
5
  contextValue: {
13
- treeId: treeId,
14
6
  instance: instance,
15
7
  multiSelect: params.multiSelect,
8
+ runItemPlugins: function runItemPlugins(_ref2) {
9
+ var props = _ref2.props,
10
+ ref = _ref2.ref;
11
+ return {
12
+ props: props,
13
+ ref: ref,
14
+ wrapItem: function wrapItem(children) {
15
+ return children;
16
+ }
17
+ };
18
+ },
16
19
  disabledItemsFocusable: params.disabledItemsFocusable,
17
20
  icons: {
18
21
  defaultCollapseIcon: params.defaultCollapseIcon,
@@ -7,8 +7,8 @@ export var useTreeViewExpansion = function useTreeViewExpansion(_ref) {
7
7
  params = _ref.params,
8
8
  models = _ref.models;
9
9
  var isNodeExpanded = React.useCallback(function (nodeId) {
10
- return Array.isArray(models.expanded.value) ? models.expanded.value.indexOf(nodeId) !== -1 : false;
11
- }, [models.expanded.value]);
10
+ return Array.isArray(models.expandedNodes.value) ? models.expandedNodes.value.indexOf(nodeId) !== -1 : false;
11
+ }, [models.expandedNodes.value]);
12
12
  var isNodeExpandable = React.useCallback(function (nodeId) {
13
13
  var _instance$getNode;
14
14
  return !!((_instance$getNode = instance.getNode(nodeId)) != null && _instance$getNode.expandable);
@@ -17,18 +17,22 @@ export var useTreeViewExpansion = function useTreeViewExpansion(_ref) {
17
17
  if (nodeId == null) {
18
18
  return;
19
19
  }
20
+ var isExpandedBefore = models.expandedNodes.value.indexOf(nodeId) !== -1;
20
21
  var newExpanded;
21
- if (models.expanded.value.indexOf(nodeId) !== -1) {
22
- newExpanded = models.expanded.value.filter(function (id) {
22
+ if (isExpandedBefore) {
23
+ newExpanded = models.expandedNodes.value.filter(function (id) {
23
24
  return id !== nodeId;
24
25
  });
25
26
  } else {
26
- newExpanded = [nodeId].concat(models.expanded.value);
27
+ newExpanded = [nodeId].concat(models.expandedNodes.value);
27
28
  }
28
- if (params.onNodeToggle) {
29
- params.onNodeToggle(event, newExpanded);
29
+ if (params.onNodeExpansionToggle) {
30
+ params.onNodeExpansionToggle(event, nodeId, !isExpandedBefore);
30
31
  }
31
- models.expanded.setValue(newExpanded);
32
+ if (params.onExpandedNodesChange) {
33
+ params.onExpandedNodesChange(event, newExpanded);
34
+ }
35
+ models.expandedNodes.setValue(newExpanded);
32
36
  });
33
37
  var expandAllSiblings = function expandAllSiblings(event, nodeId) {
34
38
  var node = instance.getNode(nodeId);
@@ -36,12 +40,17 @@ export var useTreeViewExpansion = function useTreeViewExpansion(_ref) {
36
40
  var diff = siblings.filter(function (child) {
37
41
  return instance.isNodeExpandable(child) && !instance.isNodeExpanded(child);
38
42
  });
39
- var newExpanded = models.expanded.value.concat(diff);
43
+ var newExpanded = models.expandedNodes.value.concat(diff);
40
44
  if (diff.length > 0) {
41
- models.expanded.setValue(newExpanded);
42
- if (params.onNodeToggle) {
43
- params.onNodeToggle(event, newExpanded);
45
+ if (params.onNodeExpansionToggle) {
46
+ diff.forEach(function (newlyExpandedNodeId) {
47
+ params.onNodeExpansionToggle(event, newlyExpandedNodeId, true);
48
+ });
49
+ }
50
+ if (params.onExpandedNodesChange) {
51
+ params.onExpandedNodesChange(event, newExpanded);
44
52
  }
53
+ models.expandedNodes.setValue(newExpanded);
45
54
  }
46
55
  };
47
56
  populateInstance(instance, {
@@ -52,15 +61,15 @@ export var useTreeViewExpansion = function useTreeViewExpansion(_ref) {
52
61
  });
53
62
  };
54
63
  useTreeViewExpansion.models = {
55
- expanded: {
56
- controlledProp: 'expanded',
57
- defaultProp: 'defaultExpanded'
64
+ expandedNodes: {
65
+ controlledProp: 'expandedNodes',
66
+ defaultProp: 'defaultExpandedNodes'
58
67
  }
59
68
  };
60
- var DEFAULT_EXPANDED = [];
69
+ var DEFAULT_EXPANDED_NODES = [];
61
70
  useTreeViewExpansion.getDefaultizedParams = function (params) {
62
71
  var _params$defaultExpand;
63
72
  return _extends({}, params, {
64
- defaultExpanded: (_params$defaultExpand = params.defaultExpanded) != null ? _params$defaultExpand : DEFAULT_EXPANDED
73
+ defaultExpandedNodes: (_params$defaultExpand = params.defaultExpandedNodes) != null ? _params$defaultExpand : DEFAULT_EXPANDED_NODES
65
74
  });
66
75
  };
@@ -30,9 +30,16 @@ export var useTreeViewFocus = function useTreeViewFocus(_ref) {
30
30
  }
31
31
  }
32
32
  });
33
+ var focusRoot = useEventCallback(function () {
34
+ var _rootRef$current;
35
+ (_rootRef$current = rootRef.current) == null || _rootRef$current.focus({
36
+ preventScroll: true
37
+ });
38
+ });
33
39
  populateInstance(instance, {
34
40
  isNodeFocused: isNodeFocused,
35
- focusNode: focusNode
41
+ focusNode: focusNode,
42
+ focusRoot: focusRoot
36
43
  });
37
44
  useInstanceEventHandler(instance, 'removeNode', function (_ref2) {
38
45
  var id = _ref2.id;
@@ -55,10 +62,10 @@ export var useTreeViewFocus = function useTreeViewFocus(_ref) {
55
62
  return node && (node.parentId == null || instance.isNodeExpanded(node.parentId));
56
63
  };
57
64
  var nodeToFocusId;
58
- if (Array.isArray(models.selected.value)) {
59
- nodeToFocusId = models.selected.value.find(isNodeVisible);
60
- } else if (models.selected.value != null && isNodeVisible(models.selected.value)) {
61
- nodeToFocusId = models.selected.value;
65
+ if (Array.isArray(models.selectedNodes.value)) {
66
+ nodeToFocusId = models.selectedNodes.value.find(isNodeVisible);
67
+ } else if (models.selectedNodes.value != null && isNodeVisible(models.selectedNodes.value)) {
68
+ nodeToFocusId = models.selectedNodes.value;
62
69
  }
63
70
  if (nodeToFocusId == null) {
64
71
  nodeToFocusId = instance.getNavigableChildrenIds(null)[0];
@@ -75,7 +82,7 @@ export var useTreeViewFocus = function useTreeViewFocus(_ref) {
75
82
  };
76
83
  };
77
84
  var focusedNode = instance.getNode(state.focusedNodeId);
78
- var activeDescendant = focusedNode ? focusedNode.idAttribute : null;
85
+ var activeDescendant = focusedNode ? instance.getTreeItemId(focusedNode.id, focusedNode.idAttribute) : null;
79
86
  return {
80
87
  getRootProps: function getRootProps(otherHandlers) {
81
88
  return {
@@ -0,0 +1 @@
1
+ export { useTreeViewId } from './useTreeViewId';
@@ -0,0 +1,21 @@
1
+ import * as React from 'react';
2
+ import useId from '@mui/utils/useId';
3
+ import { populateInstance } from '../../useTreeView/useTreeView.utils';
4
+ export var useTreeViewId = function useTreeViewId(_ref) {
5
+ var instance = _ref.instance,
6
+ params = _ref.params;
7
+ var treeId = useId(params.id);
8
+ var getTreeItemId = React.useCallback(function (nodeId, idAttribute) {
9
+ return idAttribute != null ? idAttribute : "".concat(treeId, "-").concat(nodeId);
10
+ }, [treeId]);
11
+ populateInstance(instance, {
12
+ getTreeItemId: getTreeItemId
13
+ });
14
+ return {
15
+ getRootProps: function getRootProps() {
16
+ return {
17
+ id: treeId
18
+ };
19
+ }
20
+ };
21
+ };
@@ -0,0 +1 @@
1
+ export { useTreeViewJSXNodes } from './useTreeViewJSXNodes';