@mui/x-tree-view 7.0.0-alpha.7 → 7.0.0-alpha.9

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 (164) hide show
  1. package/CHANGELOG.md +554 -51
  2. package/README.md +1 -1
  3. package/RichTreeView/RichTreeView.js +14 -79
  4. package/RichTreeView/RichTreeView.types.d.ts +6 -9
  5. package/RichTreeView/index.d.ts +1 -1
  6. package/SimpleTreeView/SimpleTreeView.js +17 -75
  7. package/SimpleTreeView/SimpleTreeView.plugins.d.ts +4 -2
  8. package/SimpleTreeView/SimpleTreeView.types.d.ts +8 -7
  9. package/SimpleTreeView/index.d.ts +1 -1
  10. package/TreeItem/TreeItem.js +62 -39
  11. package/TreeItem/TreeItem.types.d.ts +33 -17
  12. package/TreeItem/TreeItemContent.d.ts +0 -3
  13. package/TreeItem/TreeItemContent.js +2 -5
  14. package/TreeItem/index.d.ts +2 -2
  15. package/TreeItem/index.js +1 -1
  16. package/TreeItem/{useTreeItem.d.ts → useTreeItemState.d.ts} +1 -1
  17. package/TreeItem/{useTreeItem.js → useTreeItemState.js} +4 -2
  18. package/TreeView/TreeView.js +1 -22
  19. package/TreeView/TreeView.types.d.ts +5 -1
  20. package/TreeView/index.d.ts +1 -1
  21. package/icons/icons.d.ts +6 -0
  22. package/icons/icons.js +9 -0
  23. package/icons/index.d.ts +1 -0
  24. package/icons/index.js +1 -0
  25. package/icons/package.json +6 -0
  26. package/index.d.ts +1 -0
  27. package/index.js +3 -2
  28. package/internals/TreeViewProvider/TreeViewContext.d.ts +4 -2
  29. package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -11
  30. package/internals/TreeViewProvider/useTreeViewContext.js +1 -1
  31. package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +2 -1
  32. package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.d.ts +3 -2
  33. package/internals/index.d.ts +15 -0
  34. package/internals/index.js +4 -0
  35. package/internals/models/MuiCancellableEvent.d.ts +4 -0
  36. package/internals/models/helpers.d.ts +7 -1
  37. package/internals/models/plugin.d.ts +65 -20
  38. package/internals/models/treeView.d.ts +1 -2
  39. package/internals/package.json +6 -0
  40. package/internals/plugins/defaultPlugins.d.ts +6 -4
  41. package/internals/plugins/defaultPlugins.js +2 -2
  42. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +14 -10
  43. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +7 -3
  44. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +2 -5
  45. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +12 -6
  46. package/internals/plugins/useTreeViewIcons/index.d.ts +2 -0
  47. package/internals/plugins/useTreeViewIcons/index.js +1 -0
  48. package/internals/plugins/useTreeViewIcons/useTreeViewIcons.d.ts +3 -0
  49. package/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +22 -0
  50. package/internals/plugins/useTreeViewIcons/useTreeViewIcons.types.d.ts +43 -0
  51. package/internals/plugins/useTreeViewId/useTreeViewId.js +3 -0
  52. package/internals/plugins/useTreeViewId/useTreeViewId.types.d.ts +6 -2
  53. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +2 -1
  54. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.d.ts +6 -4
  55. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +155 -112
  56. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +9 -6
  57. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +21 -3
  58. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +10 -2
  59. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +17 -5
  60. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +15 -5
  61. package/internals/useTreeView/useTreeView.js +7 -3
  62. package/internals/useTreeView/useTreeView.types.d.ts +6 -6
  63. package/internals/useTreeView/useTreeViewModels.js +12 -13
  64. package/internals/utils/extractPluginParamsFromProps.d.ts +16 -0
  65. package/internals/utils/extractPluginParamsFromProps.js +38 -0
  66. package/legacy/RichTreeView/RichTreeView.js +15 -77
  67. package/legacy/SimpleTreeView/SimpleTreeView.js +14 -70
  68. package/legacy/TreeItem/TreeItem.js +63 -39
  69. package/legacy/TreeItem/TreeItemContent.js +9 -12
  70. package/legacy/TreeItem/index.js +1 -1
  71. package/legacy/TreeItem/{useTreeItem.js → useTreeItemState.js} +2 -2
  72. package/legacy/TreeView/TreeView.js +1 -22
  73. package/legacy/icons/icons.js +9 -0
  74. package/legacy/icons/index.js +1 -0
  75. package/legacy/index.js +3 -2
  76. package/legacy/internals/TreeViewProvider/useTreeViewContext.js +1 -1
  77. package/legacy/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +2 -1
  78. package/legacy/internals/index.js +4 -0
  79. package/legacy/internals/plugins/defaultPlugins.js +2 -2
  80. package/legacy/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +16 -10
  81. package/legacy/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +2 -5
  82. package/legacy/internals/plugins/useTreeViewIcons/index.js +1 -0
  83. package/legacy/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +21 -0
  84. package/legacy/internals/plugins/useTreeViewIcons/useTreeViewIcons.types.js +1 -0
  85. package/legacy/internals/plugins/useTreeViewId/useTreeViewId.js +3 -0
  86. package/legacy/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +2 -1
  87. package/legacy/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +157 -110
  88. package/legacy/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +20 -2
  89. package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +20 -6
  90. package/legacy/internals/useTreeView/useTreeView.js +6 -2
  91. package/legacy/internals/useTreeView/useTreeViewModels.js +12 -13
  92. package/legacy/internals/utils/extractPluginParamsFromProps.js +36 -0
  93. package/modern/RichTreeView/RichTreeView.js +14 -79
  94. package/modern/SimpleTreeView/SimpleTreeView.js +17 -75
  95. package/modern/TreeItem/TreeItem.js +61 -39
  96. package/modern/TreeItem/TreeItemContent.js +2 -5
  97. package/modern/TreeItem/index.js +1 -1
  98. package/modern/TreeItem/{useTreeItem.js → useTreeItemState.js} +4 -2
  99. package/modern/TreeView/TreeView.js +1 -22
  100. package/modern/icons/icons.js +9 -0
  101. package/modern/icons/index.js +1 -0
  102. package/modern/index.js +3 -2
  103. package/modern/internals/TreeViewProvider/useTreeViewContext.js +1 -1
  104. package/modern/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +2 -1
  105. package/modern/internals/index.js +4 -0
  106. package/modern/internals/models/MuiCancellableEvent.js +1 -0
  107. package/modern/internals/plugins/defaultPlugins.js +2 -2
  108. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +14 -11
  109. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +3 -3
  110. package/modern/internals/plugins/useTreeViewIcons/index.js +1 -0
  111. package/modern/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +22 -0
  112. package/modern/internals/plugins/useTreeViewIcons/useTreeViewIcons.types.js +1 -0
  113. package/modern/internals/plugins/useTreeViewId/useTreeViewId.js +3 -0
  114. package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +2 -1
  115. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +155 -112
  116. package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +18 -3
  117. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +18 -6
  118. package/modern/internals/useTreeView/useTreeView.js +7 -3
  119. package/modern/internals/useTreeView/useTreeViewModels.js +12 -13
  120. package/modern/internals/utils/extractPluginParamsFromProps.js +38 -0
  121. package/node/RichTreeView/RichTreeView.js +14 -79
  122. package/node/SimpleTreeView/SimpleTreeView.js +17 -75
  123. package/node/TreeItem/TreeItem.js +61 -39
  124. package/node/TreeItem/TreeItemContent.js +2 -5
  125. package/node/TreeItem/index.js +4 -4
  126. package/node/TreeItem/{useTreeItem.js → useTreeItemState.js} +5 -3
  127. package/node/TreeView/TreeView.js +1 -22
  128. package/node/icons/icons.js +17 -0
  129. package/node/icons/index.js +16 -0
  130. package/node/index.js +13 -1
  131. package/node/internals/TreeViewProvider/useTreeViewContext.js +1 -1
  132. package/node/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +2 -1
  133. package/node/internals/index.js +33 -0
  134. package/node/internals/plugins/defaultPlugins.js +2 -2
  135. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +14 -11
  136. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +3 -3
  137. package/node/internals/plugins/useTreeViewIcons/index.js +12 -0
  138. package/node/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +29 -0
  139. package/node/internals/plugins/useTreeViewIcons/useTreeViewIcons.types.js +5 -0
  140. package/node/internals/plugins/useTreeViewId/useTreeViewId.js +4 -1
  141. package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +2 -1
  142. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +155 -112
  143. package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +18 -3
  144. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +18 -6
  145. package/node/internals/useTreeView/useTreeView.js +7 -3
  146. package/node/internals/useTreeView/useTreeViewModels.js +12 -13
  147. package/node/internals/utils/extractPluginParamsFromProps.js +46 -0
  148. package/package.json +7 -7
  149. package/themeAugmentation/components.d.ts +4 -4
  150. package/internals/plugins/useTreeViewContextValueBuilder/index.d.ts +0 -2
  151. package/internals/plugins/useTreeViewContextValueBuilder/index.js +0 -1
  152. package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.d.ts +0 -3
  153. package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +0 -26
  154. package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.d.ts +0 -29
  155. package/legacy/internals/plugins/useTreeViewContextValueBuilder/index.js +0 -1
  156. package/legacy/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +0 -28
  157. package/modern/internals/plugins/useTreeViewContextValueBuilder/index.js +0 -1
  158. package/modern/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +0 -26
  159. package/node/internals/plugins/useTreeViewContextValueBuilder/index.js +0 -12
  160. package/node/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +0 -33
  161. /package/internals/{plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js → models/MuiCancellableEvent.js} +0 -0
  162. /package/{legacy/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js → internals/plugins/useTreeViewIcons/useTreeViewIcons.types.js} +0 -0
  163. /package/{modern/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js → legacy/internals/models/MuiCancellableEvent.js} +0 -0
  164. /package/node/internals/{plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js → models/MuiCancellableEvent.js} +0 -0
package/README.md CHANGED
@@ -15,7 +15,7 @@ This component has the following peer dependencies that you will need to install
15
15
 
16
16
  ```json
17
17
  "peerDependencies": {
18
- "@mui/material": "^5.8.6",
18
+ "@mui/material": "^5.15.0",
19
19
  "react": "^17.0.0 || ^18.0.0",
20
20
  "react-dom": "^17.0.0 || ^18.0.0"
21
21
  },
@@ -1,6 +1,4 @@
1
- import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
1
  import _extends from "@babel/runtime/helpers/esm/extends";
3
- const _excluded = ["disabledItemsFocusable", "expandedNodes", "defaultExpandedNodes", "onExpandedNodesChange", "onNodeExpansionToggle", "onNodeFocus", "disableSelection", "defaultSelectedNodes", "selectedNodes", "multiSelect", "onSelectedNodesChange", "onNodeSelectionToggle", "id", "defaultCollapseIcon", "defaultEndIcon", "defaultExpandIcon", "defaultParentIcon", "items", "getItemId", "getItemLabel", "isItemDisabled", "slots", "slotProps"];
4
2
  import * as React from 'react';
5
3
  import PropTypes from 'prop-types';
6
4
  import { styled, useThemeProps } from '@mui/material/styles';
@@ -12,6 +10,7 @@ import { TreeViewProvider } from '../internals/TreeViewProvider';
12
10
  import { DEFAULT_TREE_VIEW_PLUGINS } from '../internals/plugins';
13
11
  import { TreeItem } from '../TreeItem';
14
12
  import { buildWarning } from '../internals/utils/warning';
13
+ import { extractPluginParamsFromProps } from '../internals/utils/extractPluginParamsFromProps';
15
14
  import { jsx as _jsx } from "react/jsx-runtime";
16
15
  const useUtilityClasses = ownerState => {
17
16
  const {
@@ -59,7 +58,7 @@ function WrappedTreeItem({
59
58
  children: children
60
59
  }));
61
60
  }
62
- const childrenWarning = buildWarning(['MUI: The `RichTreeView` component does not support JSX children.', 'If you want to add items, you need to use the `items` prop', 'Check the documentation for more details: https://next.mui.com/x/react-tree-view/rich-tree-view/items/']);
61
+ const childrenWarning = buildWarning(['MUI X: The `RichTreeView` component does not support JSX children.', 'If you want to add items, you need to use the `items` prop', 'Check the documentation for more details: https://next.mui.com/x/react-tree-view/rich-tree-view/items/']);
63
62
 
64
63
  /**
65
64
  *
@@ -77,75 +76,32 @@ const RichTreeView = /*#__PURE__*/React.forwardRef(function RichTreeView(inProps
77
76
  props: inProps,
78
77
  name: 'MuiRichTreeView'
79
78
  });
80
- const _ref = props,
81
- {
82
- // Headless implementation
83
- disabledItemsFocusable,
84
- expandedNodes,
85
- defaultExpandedNodes,
86
- onExpandedNodesChange,
87
- onNodeExpansionToggle,
88
- onNodeFocus,
89
- disableSelection,
90
- defaultSelectedNodes,
91
- selectedNodes,
92
- multiSelect,
93
- onSelectedNodesChange,
94
- onNodeSelectionToggle,
95
- id: treeId,
96
- defaultCollapseIcon,
97
- defaultEndIcon,
98
- defaultExpandIcon,
99
- defaultParentIcon,
100
- items,
101
- getItemId,
102
- getItemLabel,
103
- isItemDisabled,
104
- // Component implementation
105
- slots,
106
- slotProps
107
- } = _ref,
108
- other = _objectWithoutPropertiesLoose(_ref, _excluded);
109
79
  if (process.env.NODE_ENV !== 'production') {
110
80
  if (props.children != null) {
111
81
  childrenWarning();
112
82
  }
113
83
  }
114
84
  const {
115
- getRootProps,
116
- contextValue,
117
- instance
118
- } = useTreeView({
119
- disabledItemsFocusable,
120
- expandedNodes,
121
- defaultExpandedNodes,
122
- onExpandedNodesChange,
123
- onNodeExpansionToggle,
124
- onNodeFocus,
125
- disableSelection,
126
- defaultSelectedNodes,
127
- selectedNodes,
128
- multiSelect,
129
- onSelectedNodesChange,
130
- onNodeSelectionToggle,
131
- id: treeId,
132
- defaultCollapseIcon,
133
- defaultEndIcon,
134
- defaultExpandIcon,
135
- defaultParentIcon,
136
- items,
137
- getItemId,
138
- getItemLabel,
139
- isItemDisabled,
85
+ pluginParams,
86
+ slots,
87
+ slotProps,
88
+ otherProps
89
+ } = extractPluginParamsFromProps({
90
+ props,
140
91
  plugins: DEFAULT_TREE_VIEW_PLUGINS,
141
92
  rootRef: ref
142
93
  });
94
+ const {
95
+ getRootProps,
96
+ contextValue,
97
+ instance
98
+ } = useTreeView(pluginParams);
143
99
  const classes = useUtilityClasses(props);
144
100
  const Root = (_slots$root = slots == null ? void 0 : slots.root) != null ? _slots$root : RichTreeViewRoot;
145
101
  const rootProps = useSlotProps({
146
102
  elementType: Root,
147
103
  externalSlotProps: slotProps == null ? void 0 : slotProps.root,
148
- externalForwardedProps: other,
104
+ externalForwardedProps: otherProps,
149
105
  className: classes.root,
150
106
  getSlotProps: getRootProps,
151
107
  ownerState: props
@@ -182,34 +138,13 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
182
138
  * Override or extend the styles applied to the component.
183
139
  */
184
140
  classes: PropTypes.object,
185
- /**
186
- * className applied to the root element.
187
- */
188
141
  className: PropTypes.string,
189
- /**
190
- * The default icon used to collapse the node.
191
- */
192
- defaultCollapseIcon: PropTypes.node,
193
- /**
194
- * The default icon displayed next to a end node. This is applied to all
195
- * tree nodes and can be overridden by the TreeItem `icon` prop.
196
- */
197
- defaultEndIcon: PropTypes.node,
198
142
  /**
199
143
  * Expanded node ids.
200
144
  * Used when the item's expansion is not controlled.
201
145
  * @default []
202
146
  */
203
147
  defaultExpandedNodes: PropTypes.arrayOf(PropTypes.string),
204
- /**
205
- * The default icon used to expand the node.
206
- */
207
- defaultExpandIcon: PropTypes.node,
208
- /**
209
- * The default icon displayed next to a parent node. This is applied to all
210
- * parent nodes and can be overridden by the TreeItem `icon` prop.
211
- */
212
- defaultParentIcon: PropTypes.node,
213
148
  /**
214
149
  * Selected node ids. (Uncontrolled)
215
150
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
@@ -3,17 +3,17 @@ import { Theme } from '@mui/material/styles';
3
3
  import { SxProps } from '@mui/system';
4
4
  import { SlotComponentProps } from '@mui/base/utils';
5
5
  import { RichTreeViewClasses } from './richTreeViewClasses';
6
- import { DefaultTreeViewPluginParameters } from '../internals/plugins/defaultPlugins';
6
+ import { DefaultTreeViewPluginParameters, DefaultTreeViewPluginSlotProps, DefaultTreeViewPluginSlots } from '../internals/plugins/defaultPlugins';
7
7
  import { TreeItem, TreeItemProps } from '../TreeItem';
8
8
  import { TreeViewItemId } from '../models';
9
9
  interface RichTreeViewItemSlotOwnerState {
10
10
  nodeId: TreeViewItemId;
11
11
  label: string;
12
12
  }
13
- export interface RichTreeViewSlotsComponent {
13
+ export interface RichTreeViewSlots extends DefaultTreeViewPluginSlots {
14
14
  /**
15
15
  * Element rendered at the root.
16
- * @default TreeViewRoot
16
+ * @default RichTreeViewRoot
17
17
  */
18
18
  root?: React.ElementType;
19
19
  /**
@@ -22,14 +22,11 @@ export interface RichTreeViewSlotsComponent {
22
22
  */
23
23
  item?: React.JSXElementConstructor<TreeItemProps>;
24
24
  }
25
- export interface RichTreeViewSlotsComponentsProps<R extends {}, Multiple extends boolean | undefined> {
25
+ export interface RichTreeViewSlotProps<R extends {}, Multiple extends boolean | undefined> extends DefaultTreeViewPluginSlotProps {
26
26
  root?: SlotComponentProps<'ul', {}, RichTreeViewProps<R, Multiple>>;
27
27
  item?: SlotComponentProps<typeof TreeItem, {}, RichTreeViewItemSlotOwnerState>;
28
28
  }
29
29
  export interface RichTreeViewPropsBase extends React.HTMLAttributes<HTMLUListElement> {
30
- /**
31
- * className applied to the root element.
32
- */
33
30
  className?: string;
34
31
  /**
35
32
  * Override or extend the styles applied to the component.
@@ -45,11 +42,11 @@ export interface RichTreeViewProps<R extends {}, Multiple extends boolean | unde
45
42
  * Overridable component slots.
46
43
  * @default {}
47
44
  */
48
- slots?: RichTreeViewSlotsComponent;
45
+ slots?: RichTreeViewSlots;
49
46
  /**
50
47
  * The props used for each component slot.
51
48
  * @default {}
52
49
  */
53
- slotProps?: RichTreeViewSlotsComponentsProps<R, Multiple>;
50
+ slotProps?: RichTreeViewSlotProps<R, Multiple>;
54
51
  }
55
52
  export {};
@@ -1,3 +1,3 @@
1
1
  export * from './RichTreeView';
2
2
  export * from './richTreeViewClasses';
3
- export type { RichTreeViewProps, RichTreeViewPropsBase } from './RichTreeView.types';
3
+ export type { RichTreeViewProps, RichTreeViewPropsBase, RichTreeViewSlots, RichTreeViewSlotProps, } from './RichTreeView.types';
@@ -1,6 +1,4 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- const _excluded = ["disabledItemsFocusable", "expandedNodes", "defaultExpandedNodes", "onExpandedNodesChange", "onNodeExpansionToggle", "onNodeFocus", "disableSelection", "defaultSelectedNodes", "selectedNodes", "multiSelect", "onSelectedNodesChange", "onNodeSelectionToggle", "id", "defaultCollapseIcon", "defaultEndIcon", "defaultExpandIcon", "defaultParentIcon", "children", "slots", "slotProps"];
4
2
  import * as React from 'react';
5
3
  import PropTypes from 'prop-types';
6
4
  import { styled, useThemeProps } from '@mui/material/styles';
@@ -11,6 +9,7 @@ import { useTreeView } from '../internals/useTreeView';
11
9
  import { TreeViewProvider } from '../internals/TreeViewProvider';
12
10
  import { SIMPLE_TREE_VIEW_PLUGINS } from './SimpleTreeView.plugins';
13
11
  import { buildWarning } from '../internals/utils/warning';
12
+ import { extractPluginParamsFromProps } from '../internals/utils/extractPluginParamsFromProps';
14
13
  import { jsx as _jsx } from "react/jsx-runtime";
15
14
  const useUtilityClasses = ownerState => {
16
15
  const {
@@ -32,7 +31,7 @@ export const SimpleTreeViewRoot = styled('ul', {
32
31
  outline: 0
33
32
  });
34
33
  const EMPTY_ITEMS = [];
35
- const itemsPropWarning = buildWarning(['MUI: 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://next.mui.com/x/react-tree-view/simple-tree-view/items/']);
36
35
 
37
36
  /**
38
37
  *
@@ -51,76 +50,40 @@ const SimpleTreeView = /*#__PURE__*/React.forwardRef(function SimpleTreeView(inP
51
50
  name: 'MuiSimpleTreeView'
52
51
  });
53
52
  const ownerState = props;
54
- const _ref = props,
55
- {
56
- // Headless implementation
57
- disabledItemsFocusable,
58
- expandedNodes,
59
- defaultExpandedNodes,
60
- onExpandedNodesChange,
61
- onNodeExpansionToggle,
62
- onNodeFocus,
63
- disableSelection,
64
- defaultSelectedNodes,
65
- selectedNodes,
66
- multiSelect,
67
- onSelectedNodesChange,
68
- onNodeSelectionToggle,
69
- id,
70
- defaultCollapseIcon,
71
- defaultEndIcon,
72
- defaultExpandIcon,
73
- defaultParentIcon,
74
- // Component implementation
75
- children,
76
- slots
77
- } = _ref,
78
- other = _objectWithoutPropertiesLoose(_ref, _excluded);
79
53
  if (process.env.NODE_ENV !== 'production') {
80
54
  if (props.items != null) {
81
55
  itemsPropWarning();
82
56
  }
83
57
  }
84
58
  const {
85
- getRootProps,
86
- contextValue
87
- } = useTreeView({
88
- disabledItemsFocusable,
89
- expandedNodes,
90
- defaultExpandedNodes,
91
- onExpandedNodesChange,
92
- onNodeExpansionToggle,
93
- onNodeFocus,
94
- disableSelection,
95
- defaultSelectedNodes,
96
- selectedNodes,
97
- multiSelect,
98
- onSelectedNodesChange,
99
- onNodeSelectionToggle,
100
- id,
101
- defaultCollapseIcon,
102
- defaultEndIcon,
103
- defaultExpandIcon,
104
- defaultParentIcon,
105
- items: EMPTY_ITEMS,
59
+ pluginParams,
60
+ slots,
61
+ slotProps,
62
+ otherProps
63
+ } = extractPluginParamsFromProps({
64
+ props: _extends({}, props, {
65
+ items: EMPTY_ITEMS
66
+ }),
106
67
  plugins: SIMPLE_TREE_VIEW_PLUGINS,
107
68
  rootRef: ref
108
69
  });
70
+ const {
71
+ getRootProps,
72
+ contextValue
73
+ } = useTreeView(pluginParams);
109
74
  const classes = useUtilityClasses(props);
110
75
  const Root = (_slots$root = slots == null ? void 0 : slots.root) != null ? _slots$root : SimpleTreeViewRoot;
111
76
  const rootProps = useSlotProps({
112
77
  elementType: Root,
113
- externalSlotProps: {},
114
- externalForwardedProps: other,
78
+ externalSlotProps: slotProps == null ? void 0 : slotProps.root,
79
+ externalForwardedProps: otherProps,
115
80
  className: classes.root,
116
81
  getSlotProps: getRootProps,
117
82
  ownerState
118
83
  });
119
84
  return /*#__PURE__*/_jsx(TreeViewProvider, {
120
85
  value: contextValue,
121
- children: /*#__PURE__*/_jsx(Root, _extends({}, rootProps, {
122
- children: children
123
- }))
86
+ children: /*#__PURE__*/_jsx(Root, _extends({}, rootProps))
124
87
  });
125
88
  });
126
89
  process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
@@ -136,34 +99,13 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
136
99
  * Override or extend the styles applied to the component.
137
100
  */
138
101
  classes: PropTypes.object,
139
- /**
140
- * className applied to the root element.
141
- */
142
102
  className: PropTypes.string,
143
- /**
144
- * The default icon used to collapse the node.
145
- */
146
- defaultCollapseIcon: PropTypes.node,
147
- /**
148
- * The default icon displayed next to a end node. This is applied to all
149
- * tree nodes and can be overridden by the TreeItem `icon` prop.
150
- */
151
- defaultEndIcon: PropTypes.node,
152
103
  /**
153
104
  * Expanded node ids.
154
105
  * Used when the item's expansion is not controlled.
155
106
  * @default []
156
107
  */
157
108
  defaultExpandedNodes: PropTypes.arrayOf(PropTypes.string),
158
- /**
159
- * The default icon used to expand the node.
160
- */
161
- defaultExpandIcon: PropTypes.node,
162
- /**
163
- * The default icon displayed next to a parent node. This is applied to all
164
- * parent nodes and can be overridden by the TreeItem `icon` prop.
165
- */
166
- defaultParentIcon: PropTypes.node,
167
109
  /**
168
110
  * Selected node ids. (Uncontrolled)
169
111
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
@@ -1,6 +1,8 @@
1
- import { DefaultTreeViewPluginParameters } from '../internals/plugins/defaultPlugins';
1
+ import { DefaultTreeViewPluginParameters, DefaultTreeViewPluginSlotProps, DefaultTreeViewPluginSlots } from '../internals/plugins/defaultPlugins';
2
2
  import { ConvertPluginsIntoSignatures } from '../internals/models';
3
- export declare const SIMPLE_TREE_VIEW_PLUGINS: readonly [import("../internals/models").TreeViewPlugin<import("../internals/plugins/useTreeViewId").UseTreeViewIdSignature>, import("../internals/models").TreeViewPlugin<import("../internals/plugins/useTreeViewNodes").UseTreeViewNodesSignature>, import("../internals/models").TreeViewPlugin<import("../internals/plugins/useTreeViewExpansion").UseTreeViewExpansionSignature>, import("../internals/models").TreeViewPlugin<import("../internals/plugins/useTreeViewSelection").UseTreeViewSelectionSignature>, import("../internals/models").TreeViewPlugin<import("../internals/plugins/useTreeViewFocus").UseTreeViewFocusSignature>, import("../internals/models").TreeViewPlugin<import("../internals/plugins/useTreeViewKeyboardNavigation").UseTreeViewKeyboardNavigationSignature>, import("../internals/models").TreeViewPlugin<import("../internals/plugins/useTreeViewContextValueBuilder").UseTreeViewContextValueBuilderSignature>, import("../internals/models").TreeViewPlugin<import("../internals/plugins/useTreeViewJSXNodes").UseTreeViewJSXNodesSignature>];
3
+ export declare const SIMPLE_TREE_VIEW_PLUGINS: readonly [import("../internals/models").TreeViewPlugin<import("../internals").UseTreeViewIdSignature>, import("../internals/models").TreeViewPlugin<import("../internals").UseTreeViewNodesSignature>, import("../internals/models").TreeViewPlugin<import("../internals").UseTreeViewExpansionSignature>, import("../internals/models").TreeViewPlugin<import("../internals").UseTreeViewSelectionSignature>, import("../internals/models").TreeViewPlugin<import("../internals").UseTreeViewFocusSignature>, import("../internals/models").TreeViewPlugin<import("../internals").UseTreeViewKeyboardNavigationSignature>, import("../internals/models").TreeViewPlugin<import("../internals").UseTreeViewIconsSignature>, import("../internals/models").TreeViewPlugin<import("../internals/plugins/useTreeViewJSXNodes").UseTreeViewJSXNodesSignature>];
4
4
  export type SimpleTreeViewPlugins = ConvertPluginsIntoSignatures<typeof SIMPLE_TREE_VIEW_PLUGINS>;
5
+ export type SimpleTreeViewPluginSlots = DefaultTreeViewPluginSlots;
6
+ export type SimpleTreeViewPluginSlotProps = DefaultTreeViewPluginSlotProps;
5
7
  export interface SimpleTreeViewPluginParameters<Multiple extends boolean | undefined> extends Omit<DefaultTreeViewPluginParameters<any, Multiple>, 'items' | 'isItemDisabled'> {
6
8
  }
@@ -3,11 +3,15 @@ import { Theme } from '@mui/material/styles';
3
3
  import { SlotComponentProps } from '@mui/base/utils';
4
4
  import { SxProps } from '@mui/system';
5
5
  import { SimpleTreeViewClasses } from './simpleTreeViewClasses';
6
- import { SimpleTreeViewPluginParameters } from './SimpleTreeView.plugins';
7
- export interface SimpleTreeViewSlots {
8
- root: React.ElementType;
6
+ import { SimpleTreeViewPluginParameters, SimpleTreeViewPluginSlotProps, SimpleTreeViewPluginSlots } from './SimpleTreeView.plugins';
7
+ export interface SimpleTreeViewSlots extends SimpleTreeViewPluginSlots {
8
+ /**
9
+ * Element rendered at the root.
10
+ * @default SimpleTreeViewRoot
11
+ */
12
+ root?: React.ElementType;
9
13
  }
10
- export interface SimpleTreeViewSlotProps {
14
+ export interface SimpleTreeViewSlotProps extends SimpleTreeViewPluginSlotProps {
11
15
  root?: SlotComponentProps<'ul', {}, {}>;
12
16
  }
13
17
  export interface SimpleTreeViewProps<Multiple extends boolean | undefined> extends SimpleTreeViewPluginParameters<Multiple>, React.HTMLAttributes<HTMLUListElement> {
@@ -23,9 +27,6 @@ export interface SimpleTreeViewProps<Multiple extends boolean | undefined> exten
23
27
  * The props used for each component slot.
24
28
  */
25
29
  slotProps?: SimpleTreeViewSlotProps;
26
- /**
27
- * className applied to the root element.
28
- */
29
30
  className?: string;
30
31
  /**
31
32
  * Override or extend the styles applied to the component.
@@ -1,3 +1,3 @@
1
1
  export * from './SimpleTreeView';
2
2
  export * from './simpleTreeViewClasses';
3
- export type { SimpleTreeViewProps } from './SimpleTreeView.types';
3
+ export type { SimpleTreeViewProps, SimpleTreeViewSlots, SimpleTreeViewSlotProps, } from './SimpleTreeView.types';
@@ -1,10 +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", "icon", "nodeId", "id", "label", "onClick", "onMouseDown", "TransitionComponent", "TransitionProps"];
3
+ const _excluded = ["children", "className", "slots", "slotProps", "ContentComponent", "ContentProps", "nodeId", "id", "label", "onClick", "onMouseDown", "TransitionComponent", "TransitionProps"],
4
+ _excluded2 = ["ownerState"],
5
+ _excluded3 = ["ownerState"],
6
+ _excluded4 = ["ownerState"];
4
7
  import * as React from 'react';
5
8
  import PropTypes from 'prop-types';
6
9
  import clsx from 'clsx';
7
10
  import Collapse from '@mui/material/Collapse';
11
+ import { resolveComponentProps, useSlotProps } from '@mui/base/utils';
8
12
  import { alpha, styled, useThemeProps } from '@mui/material/styles';
9
13
  import unsupportedProp from '@mui/utils/unsupportedProp';
10
14
  import elementTypeAcceptingRef from '@mui/utils/elementTypeAcceptingRef';
@@ -12,6 +16,7 @@ import { unstable_composeClasses as composeClasses } from '@mui/base';
12
16
  import { TreeItemContent } from './TreeItemContent';
13
17
  import { treeItemClasses, getTreeItemUtilityClass } from './treeItemClasses';
14
18
  import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
19
+ import { TreeViewCollapseIcon, TreeViewExpandIcon } from '../icons';
15
20
  import { jsx as _jsx } from "react/jsx-runtime";
16
21
  import { jsxs as _jsxs } from "react/jsx-runtime";
17
22
  const useUtilityClasses = ownerState => {
@@ -130,10 +135,13 @@ const TreeItemGroup = styled(Collapse, {
130
135
  * - [TreeItem API](https://mui.com/x/api/tree-view/tree-item/)
131
136
  */
132
137
  export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps, inRef) {
138
+ var _ref, _inSlots$expandIcon, _ref2, _inSlots$collapseIcon, _inSlots$endIcon;
133
139
  const {
134
140
  icons: contextIcons,
135
141
  runItemPlugins,
136
- multiSelect,
142
+ selection: {
143
+ multiSelect
144
+ },
137
145
  disabledItemsFocusable,
138
146
  instance
139
147
  } = useTreeViewContext();
@@ -152,12 +160,10 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
152
160
  const {
153
161
  children,
154
162
  className,
155
- collapseIcon,
163
+ slots: inSlots,
164
+ slotProps: inSlotProps,
156
165
  ContentComponent = TreeItemContent,
157
166
  ContentProps,
158
- endIcon,
159
- expandIcon,
160
- icon,
161
167
  nodeId,
162
168
  id,
163
169
  label,
@@ -167,6 +173,12 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
167
173
  TransitionProps
168
174
  } = props,
169
175
  other = _objectWithoutPropertiesLoose(props, _excluded);
176
+ const slots = {
177
+ expandIcon: (_ref = (_inSlots$expandIcon = inSlots == null ? void 0 : inSlots.expandIcon) != null ? _inSlots$expandIcon : contextIcons.slots.expandIcon) != null ? _ref : TreeViewExpandIcon,
178
+ collapseIcon: (_ref2 = (_inSlots$collapseIcon = inSlots == null ? void 0 : inSlots.collapseIcon) != null ? _inSlots$collapseIcon : contextIcons.slots.collapseIcon) != null ? _ref2 : TreeViewCollapseIcon,
179
+ endIcon: (_inSlots$endIcon = inSlots == null ? void 0 : inSlots.endIcon) != null ? _inSlots$endIcon : contextIcons.slots.endIcon,
180
+ icon: inSlots == null ? void 0 : inSlots.icon
181
+ };
170
182
  const expandable = Boolean(Array.isArray(children) ? children.length : children);
171
183
  const expanded = instance.isNodeExpanded(nodeId);
172
184
  const focused = instance.isNodeFocused(nodeId);
@@ -179,20 +191,40 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
179
191
  disabled
180
192
  });
181
193
  const classes = useUtilityClasses(ownerState);
182
- let displayIcon;
183
- let expansionIcon;
184
- if (expandable) {
185
- if (!expanded) {
186
- expansionIcon = expandIcon || contextIcons.defaultExpandIcon;
187
- } else {
188
- expansionIcon = collapseIcon || contextIcons.defaultCollapseIcon;
189
- }
190
- }
191
- if (expandable) {
192
- displayIcon = contextIcons.defaultParentIcon;
193
- } else {
194
- displayIcon = endIcon || contextIcons.defaultEndIcon;
195
- }
194
+ const ExpansionIcon = expanded ? slots.collapseIcon : slots.expandIcon;
195
+ const _useSlotProps = useSlotProps({
196
+ elementType: ExpansionIcon,
197
+ ownerState: {},
198
+ externalSlotProps: tempOwnerState => {
199
+ if (expanded) {
200
+ return _extends({}, resolveComponentProps(contextIcons.slotProps.collapseIcon, tempOwnerState), resolveComponentProps(inSlotProps == null ? void 0 : inSlotProps.collapseIcon, tempOwnerState));
201
+ }
202
+ return _extends({}, resolveComponentProps(contextIcons.slotProps.expandIcon, tempOwnerState), resolveComponentProps(inSlotProps == null ? void 0 : inSlotProps.expandIcon, tempOwnerState));
203
+ }
204
+ }),
205
+ expansionIconProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded2);
206
+ const expansionIcon = expandable && !!ExpansionIcon ? /*#__PURE__*/_jsx(ExpansionIcon, _extends({}, expansionIconProps)) : null;
207
+ const DisplayIcon = expandable ? undefined : slots.endIcon;
208
+ const _useSlotProps2 = useSlotProps({
209
+ elementType: DisplayIcon,
210
+ ownerState: {},
211
+ externalSlotProps: tempOwnerState => {
212
+ if (expandable) {
213
+ return {};
214
+ }
215
+ return _extends({}, resolveComponentProps(contextIcons.slotProps.endIcon, tempOwnerState), resolveComponentProps(inSlotProps == null ? void 0 : inSlotProps.endIcon, tempOwnerState));
216
+ }
217
+ }),
218
+ displayIconProps = _objectWithoutPropertiesLoose(_useSlotProps2, _excluded3);
219
+ const displayIcon = DisplayIcon ? /*#__PURE__*/_jsx(DisplayIcon, _extends({}, displayIconProps)) : null;
220
+ const Icon = slots.icon;
221
+ const _useSlotProps3 = useSlotProps({
222
+ elementType: Icon,
223
+ ownerState: {},
224
+ externalSlotProps: inSlotProps == null ? void 0 : inSlotProps.icon
225
+ }),
226
+ iconProps = _objectWithoutPropertiesLoose(_useSlotProps3, _excluded4);
227
+ const icon = Icon ? /*#__PURE__*/_jsx(Icon, _extends({}, iconProps)) : null;
196
228
  let ariaSelected;
197
229
  if (multiSelect) {
198
230
  ariaSelected = selected;
@@ -273,14 +305,7 @@ TreeItem.propTypes = {
273
305
  * Override or extend the styles applied to the component.
274
306
  */
275
307
  classes: PropTypes.object,
276
- /**
277
- * className applied to the root element.
278
- */
279
308
  className: PropTypes.string,
280
- /**
281
- * The icon used to collapse the node.
282
- */
283
- collapseIcon: PropTypes.node,
284
309
  /**
285
310
  * The component used for the content node.
286
311
  * @default TreeItemContent
@@ -295,18 +320,6 @@ TreeItem.propTypes = {
295
320
  * @default false
296
321
  */
297
322
  disabled: PropTypes.bool,
298
- /**
299
- * The icon displayed next to an end node.
300
- */
301
- endIcon: PropTypes.node,
302
- /**
303
- * The icon used to expand the node.
304
- */
305
- expandIcon: PropTypes.node,
306
- /**
307
- * The icon to display next to the tree node's label.
308
- */
309
- icon: PropTypes.node,
310
323
  /**
311
324
  * The tree node label.
312
325
  */
@@ -320,6 +333,16 @@ TreeItem.propTypes = {
320
333
  * Use the `onNodeFocus` callback on the tree if you need to monitor a node's focus.
321
334
  */
322
335
  onFocus: unsupportedProp,
336
+ /**
337
+ * The props used for each component slot.
338
+ * @default {}
339
+ */
340
+ slotProps: PropTypes.object,
341
+ /**
342
+ * Overridable component slots.
343
+ * @default {}
344
+ */
345
+ slots: PropTypes.object,
323
346
  /**
324
347
  * The system prop that allows defining system overrides as well as additional CSS styles.
325
348
  */
@@ -1,27 +1,55 @@
1
1
  import * as React from 'react';
2
2
  import { Theme } from '@mui/material/styles';
3
+ import { SlotComponentProps } from '@mui/base/utils';
3
4
  import { TransitionProps } from '@mui/material/transitions';
4
5
  import { SxProps } from '@mui/system';
5
6
  import { TreeItemContentProps } from './TreeItemContent';
6
7
  import { TreeItemClasses } from './treeItemClasses';
7
8
  import { TreeViewItemId } from '../models';
9
+ export interface TreeItemSlots {
10
+ /**
11
+ * The icon used to collapse the node.
12
+ */
13
+ collapseIcon?: React.ElementType;
14
+ /**
15
+ * The icon used to expand the node.
16
+ */
17
+ expandIcon?: React.ElementType;
18
+ /**
19
+ * The icon displayed next to an end node.
20
+ */
21
+ endIcon?: React.ElementType;
22
+ /**
23
+ * The icon to display next to the tree node's label.
24
+ */
25
+ icon?: React.ElementType;
26
+ }
27
+ export interface TreeItemSlotProps {
28
+ collapseIcon?: SlotComponentProps<'svg', {}, {}>;
29
+ expandIcon?: SlotComponentProps<'svg', {}, {}>;
30
+ endIcon?: SlotComponentProps<'svg', {}, {}>;
31
+ icon?: SlotComponentProps<'svg', {}, {}>;
32
+ }
8
33
  export interface TreeItemProps extends Omit<React.HTMLAttributes<HTMLLIElement>, 'onFocus'> {
9
34
  /**
10
35
  * The content of the component.
11
36
  */
12
37
  children?: React.ReactNode;
13
- /**
14
- * className applied to the root element.
15
- */
16
38
  className?: string;
17
39
  /**
18
40
  * Override or extend the styles applied to the component.
19
41
  */
20
42
  classes?: Partial<TreeItemClasses>;
21
43
  /**
22
- * The icon used to collapse the node.
44
+ * Overridable component slots.
45
+ * @default {}
23
46
  */
24
- collapseIcon?: React.ReactNode;
47
+ slots?: TreeItemSlots;
48
+ /**
49
+ * The props used for each component slot.
50
+ * @default {}
51
+ */
52
+ slotProps?: TreeItemSlotProps;
25
53
  /**
26
54
  * The component used for the content node.
27
55
  * @default TreeItemContent
@@ -36,18 +64,6 @@ export interface TreeItemProps extends Omit<React.HTMLAttributes<HTMLLIElement>,
36
64
  * @default false
37
65
  */
38
66
  disabled?: boolean;
39
- /**
40
- * The icon displayed next to an end node.
41
- */
42
- endIcon?: React.ReactNode;
43
- /**
44
- * The icon used to expand the node.
45
- */
46
- expandIcon?: React.ReactNode;
47
- /**
48
- * The icon to display next to the tree node's label.
49
- */
50
- icon?: React.ReactNode;
51
67
  /**
52
68
  * This prop isn't supported.
53
69
  * Use the `onNodeFocus` callback on the tree if you need to monitor a node's focus.