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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/CHANGELOG.md +508 -30
  2. package/README.md +3 -3
  3. package/RichTreeView/RichTreeView.js +10 -36
  4. package/RichTreeView/RichTreeView.types.d.ts +6 -9
  5. package/RichTreeView/index.d.ts +1 -1
  6. package/SimpleTreeView/SimpleTreeView.js +12 -55
  7. package/SimpleTreeView/SimpleTreeView.plugins.d.ts +5 -3
  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/{modern/TreeItem/useTreeItem.js → TreeItem/useTreeItemState.js} +4 -2
  18. package/TreeView/TreeView.js +0 -39
  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/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.d.ts +3 -2
  31. package/internals/index.d.ts +15 -0
  32. package/internals/index.js +4 -0
  33. package/internals/models/helpers.d.ts +7 -1
  34. package/internals/models/plugin.d.ts +64 -20
  35. package/internals/models/treeView.d.ts +1 -2
  36. package/internals/package.json +6 -0
  37. package/internals/plugins/defaultPlugins.d.ts +6 -4
  38. package/internals/plugins/defaultPlugins.js +2 -2
  39. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +8 -10
  40. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +7 -3
  41. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +0 -6
  42. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +12 -6
  43. package/internals/plugins/useTreeViewIcons/index.d.ts +2 -0
  44. package/internals/plugins/useTreeViewIcons/index.js +1 -0
  45. package/internals/plugins/useTreeViewIcons/useTreeViewIcons.d.ts +3 -0
  46. package/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +22 -0
  47. package/internals/plugins/useTreeViewIcons/useTreeViewIcons.types.d.ts +43 -0
  48. package/internals/plugins/useTreeViewId/useTreeViewId.types.d.ts +6 -2
  49. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +10 -5
  50. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.d.ts +6 -4
  51. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +9 -6
  52. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +14 -0
  53. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +10 -2
  54. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +9 -5
  55. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +15 -5
  56. package/internals/useTreeView/useTreeView.js +7 -3
  57. package/internals/useTreeView/useTreeView.types.d.ts +6 -6
  58. package/internals/useTreeView/useTreeViewModels.js +10 -11
  59. package/internals/utils/extractPluginParamsFromProps.d.ts +8 -5
  60. package/internals/utils/extractPluginParamsFromProps.js +17 -6
  61. package/legacy/RichTreeView/RichTreeView.js +3 -27
  62. package/legacy/SimpleTreeView/SimpleTreeView.js +4 -46
  63. package/legacy/TreeItem/TreeItem.js +63 -39
  64. package/legacy/TreeItem/TreeItemContent.js +9 -12
  65. package/legacy/TreeItem/index.js +1 -1
  66. package/legacy/TreeItem/{useTreeItem.js → useTreeItemState.js} +2 -2
  67. package/legacy/TreeView/TreeView.js +0 -39
  68. package/legacy/icons/icons.js +9 -0
  69. package/legacy/icons/index.js +1 -0
  70. package/legacy/index.js +3 -2
  71. package/legacy/internals/index.js +4 -0
  72. package/legacy/internals/plugins/defaultPlugins.js +2 -2
  73. package/legacy/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +10 -10
  74. package/legacy/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +0 -6
  75. package/legacy/internals/plugins/useTreeViewIcons/index.js +1 -0
  76. package/legacy/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +21 -0
  77. package/legacy/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +3 -0
  78. package/legacy/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +14 -0
  79. package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +12 -6
  80. package/legacy/internals/useTreeView/useTreeView.js +6 -2
  81. package/legacy/internals/useTreeView/useTreeViewModels.js +10 -11
  82. package/legacy/internals/utils/extractPluginParamsFromProps.js +11 -2
  83. package/modern/RichTreeView/RichTreeView.js +10 -36
  84. package/modern/SimpleTreeView/SimpleTreeView.js +12 -55
  85. package/modern/TreeItem/TreeItem.js +61 -39
  86. package/modern/TreeItem/TreeItemContent.js +2 -5
  87. package/modern/TreeItem/index.js +1 -1
  88. package/{TreeItem/useTreeItem.js → modern/TreeItem/useTreeItemState.js} +4 -2
  89. package/modern/TreeView/TreeView.js +0 -39
  90. package/modern/icons/icons.js +9 -0
  91. package/modern/icons/index.js +1 -0
  92. package/modern/index.js +3 -2
  93. package/modern/internals/index.js +4 -0
  94. package/modern/internals/plugins/defaultPlugins.js +2 -2
  95. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +7 -10
  96. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +0 -3
  97. package/modern/internals/plugins/useTreeViewIcons/index.js +1 -0
  98. package/modern/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +22 -0
  99. package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +10 -5
  100. package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +11 -0
  101. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +9 -5
  102. package/modern/internals/useTreeView/useTreeView.js +7 -3
  103. package/modern/internals/useTreeView/useTreeViewModels.js +10 -11
  104. package/modern/internals/utils/extractPluginParamsFromProps.js +17 -6
  105. package/node/RichTreeView/RichTreeView.js +10 -36
  106. package/node/SimpleTreeView/SimpleTreeView.js +12 -55
  107. package/node/TreeItem/TreeItem.js +61 -39
  108. package/node/TreeItem/TreeItemContent.js +2 -5
  109. package/node/TreeItem/index.js +4 -4
  110. package/node/TreeItem/{useTreeItem.js → useTreeItemState.js} +5 -3
  111. package/node/TreeView/TreeView.js +0 -39
  112. package/node/icons/icons.js +17 -0
  113. package/node/icons/index.js +16 -0
  114. package/node/index.js +13 -1
  115. package/node/internals/index.js +33 -0
  116. package/node/internals/plugins/defaultPlugins.js +2 -2
  117. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +7 -10
  118. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +0 -3
  119. package/node/internals/plugins/useTreeViewIcons/index.js +12 -0
  120. package/node/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +29 -0
  121. package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +10 -5
  122. package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +11 -0
  123. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +9 -5
  124. package/node/internals/useTreeView/useTreeView.js +7 -3
  125. package/node/internals/useTreeView/useTreeViewModels.js +10 -11
  126. package/node/internals/utils/extractPluginParamsFromProps.js +18 -6
  127. package/package.json +7 -7
  128. package/themeAugmentation/components.d.ts +4 -4
  129. package/internals/plugins/useTreeViewContextValueBuilder/index.d.ts +0 -2
  130. package/internals/plugins/useTreeViewContextValueBuilder/index.js +0 -1
  131. package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.d.ts +0 -3
  132. package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +0 -32
  133. package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.d.ts +0 -29
  134. package/legacy/internals/plugins/useTreeViewContextValueBuilder/index.js +0 -1
  135. package/legacy/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +0 -34
  136. package/modern/internals/plugins/useTreeViewContextValueBuilder/index.js +0 -1
  137. package/modern/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +0 -32
  138. package/node/internals/plugins/useTreeViewContextValueBuilder/index.js +0 -12
  139. package/node/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +0 -39
  140. /package/internals/plugins/{useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js → useTreeViewIcons/useTreeViewIcons.types.js} +0 -0
  141. /package/legacy/internals/plugins/{useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js → useTreeViewIcons/useTreeViewIcons.types.js} +0 -0
  142. /package/modern/internals/plugins/{useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js → useTreeViewIcons/useTreeViewIcons.types.js} +0 -0
  143. /package/node/internals/plugins/{useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js → useTreeViewIcons/useTreeViewIcons.types.js} +0 -0
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
- # MUI X Tree View
1
+ # MUI X Tree View
2
2
 
3
3
  This package is the community edition of the tree view components.
4
- It's part of [MUI X](https://mui.com/x/), an open-core extension of MUI Core, with advanced components.
4
+ It's part of [MUI X](https://mui.com/x/), an open-core extension of MUI Core, with advanced components.
5
5
 
6
6
  ## Installation
7
7
 
@@ -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 = ["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';
@@ -83,19 +81,16 @@ const RichTreeView = /*#__PURE__*/React.forwardRef(function RichTreeView(inProps
83
81
  childrenWarning();
84
82
  }
85
83
  }
86
- const _extractPluginParamsF = extractPluginParamsFromProps({
87
- props,
88
- plugins: DEFAULT_TREE_VIEW_PLUGINS,
89
- rootRef: ref
90
- }),
91
- {
92
- pluginParams,
93
- otherProps: {
94
- slots,
95
- slotProps
96
- }
97
- } = _extractPluginParamsF,
98
- otherProps = _objectWithoutPropertiesLoose(_extractPluginParamsF.otherProps, _excluded);
84
+ const {
85
+ pluginParams,
86
+ slots,
87
+ slotProps,
88
+ otherProps
89
+ } = extractPluginParamsFromProps({
90
+ props,
91
+ plugins: DEFAULT_TREE_VIEW_PLUGINS,
92
+ rootRef: ref
93
+ });
99
94
  const {
100
95
  getRootProps,
101
96
  contextValue,
@@ -143,34 +138,13 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
143
138
  * Override or extend the styles applied to the component.
144
139
  */
145
140
  classes: PropTypes.object,
146
- /**
147
- * className applied to the root element.
148
- */
149
141
  className: PropTypes.string,
150
- /**
151
- * The default icon used to collapse the node.
152
- */
153
- defaultCollapseIcon: PropTypes.node,
154
- /**
155
- * The default icon displayed next to a end node. This is applied to all
156
- * tree nodes and can be overridden by the TreeItem `icon` prop.
157
- */
158
- defaultEndIcon: PropTypes.node,
159
142
  /**
160
143
  * Expanded node ids.
161
144
  * Used when the item's expansion is not controlled.
162
145
  * @default []
163
146
  */
164
147
  defaultExpandedNodes: PropTypes.arrayOf(PropTypes.string),
165
- /**
166
- * The default icon used to expand the node.
167
- */
168
- defaultExpandIcon: PropTypes.node,
169
- /**
170
- * The default icon displayed next to a parent node. This is applied to all
171
- * parent nodes and can be overridden by the TreeItem `icon` prop.
172
- */
173
- defaultParentIcon: PropTypes.node,
174
148
  /**
175
149
  * Selected node ids. (Uncontrolled)
176
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 = ["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';
@@ -57,20 +55,18 @@ const SimpleTreeView = /*#__PURE__*/React.forwardRef(function SimpleTreeView(inP
57
55
  itemsPropWarning();
58
56
  }
59
57
  }
60
- const _extractPluginParamsF = extractPluginParamsFromProps({
61
- props: _extends({}, props, {
62
- items: EMPTY_ITEMS
63
- }),
64
- plugins: SIMPLE_TREE_VIEW_PLUGINS,
65
- rootRef: ref
58
+ const {
59
+ pluginParams,
60
+ slots,
61
+ slotProps,
62
+ otherProps
63
+ } = extractPluginParamsFromProps({
64
+ props: _extends({}, props, {
65
+ items: EMPTY_ITEMS
66
66
  }),
67
- {
68
- pluginParams,
69
- otherProps: {
70
- slots
71
- }
72
- } = _extractPluginParamsF,
73
- otherProps = _objectWithoutPropertiesLoose(_extractPluginParamsF.otherProps, _excluded);
67
+ plugins: SIMPLE_TREE_VIEW_PLUGINS,
68
+ rootRef: ref
69
+ });
74
70
  const {
75
71
  getRootProps,
76
72
  contextValue
@@ -79,7 +75,7 @@ const SimpleTreeView = /*#__PURE__*/React.forwardRef(function SimpleTreeView(inP
79
75
  const Root = (_slots$root = slots == null ? void 0 : slots.root) != null ? _slots$root : SimpleTreeViewRoot;
80
76
  const rootProps = useSlotProps({
81
77
  elementType: Root,
82
- externalSlotProps: {},
78
+ externalSlotProps: slotProps == null ? void 0 : slotProps.root,
83
79
  externalForwardedProps: otherProps,
84
80
  className: classes.root,
85
81
  getSlotProps: getRootProps,
@@ -103,34 +99,13 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
103
99
  * Override or extend the styles applied to the component.
104
100
  */
105
101
  classes: PropTypes.object,
106
- /**
107
- * className applied to the root element.
108
- */
109
102
  className: PropTypes.string,
110
- /**
111
- * The default icon used to collapse the node.
112
- */
113
- defaultCollapseIcon: PropTypes.node,
114
- /**
115
- * The default icon displayed next to a end node. This is applied to all
116
- * tree nodes and can be overridden by the TreeItem `icon` prop.
117
- */
118
- defaultEndIcon: PropTypes.node,
119
103
  /**
120
104
  * Expanded node ids.
121
105
  * Used when the item's expansion is not controlled.
122
106
  * @default []
123
107
  */
124
108
  defaultExpandedNodes: PropTypes.arrayOf(PropTypes.string),
125
- /**
126
- * The default icon used to expand the node.
127
- */
128
- defaultExpandIcon: PropTypes.node,
129
- /**
130
- * The default icon displayed next to a parent node. This is applied to all
131
- * parent nodes and can be overridden by the TreeItem `icon` prop.
132
- */
133
- defaultParentIcon: PropTypes.node,
134
109
  /**
135
110
  * Selected node ids. (Uncontrolled)
136
111
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
@@ -152,24 +127,6 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
152
127
  * Used when the item's expansion is controlled.
153
128
  */
154
129
  expandedNodes: PropTypes.arrayOf(PropTypes.string),
155
- /**
156
- * Used to determine the string label for a given item.
157
- *
158
- * @template R
159
- * @param {R} item The item to check.
160
- * @returns {string} The id of the item.
161
- * @default `(item) => item.id`
162
- */
163
- getItemId: PropTypes.func,
164
- /**
165
- * Used to determine the string label for a given item.
166
- *
167
- * @template R
168
- * @param {R} item The item to check.
169
- * @returns {string} The label of the item.
170
- * @default `(item) => item.label`
171
- */
172
- getItemLabel: PropTypes.func,
173
130
  /**
174
131
  * This prop is used to help implement the accessibility logic.
175
132
  * If you don't provide this prop. It falls back to a randomly generated id.
@@ -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 interface SimpleTreeViewPluginParameters<Multiple extends boolean | undefined> extends Omit<DefaultTreeViewPluginParameters<any, Multiple>, 'items' | 'isItemDisabled'> {
5
+ export type SimpleTreeViewPluginSlots = DefaultTreeViewPluginSlots;
6
+ export type SimpleTreeViewPluginSlotProps = DefaultTreeViewPluginSlotProps;
7
+ export interface SimpleTreeViewPluginParameters<Multiple extends boolean | undefined> extends Omit<DefaultTreeViewPluginParameters<any, Multiple>, 'items' | 'isItemDisabled' | 'getItemLabel' | 'getItemId'> {
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.
@@ -1,8 +1,5 @@
1
1
  import * as React from 'react';
2
2
  export interface TreeItemContentProps extends React.HTMLAttributes<HTMLElement> {
3
- /**
4
- * className applied to the root element.
5
- */
6
3
  className?: string;
7
4
  /**
8
5
  * Override or extend the styles applied to the component.
@@ -4,7 +4,7 @@ const _excluded = ["classes", "className", "displayIcon", "expansionIcon", "icon
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import clsx from 'clsx';
7
- import { useTreeItem } from './useTreeItem';
7
+ import { useTreeItemState } from './useTreeItemState';
8
8
  import { jsx as _jsx } from "react/jsx-runtime";
9
9
  import { jsxs as _jsxs } from "react/jsx-runtime";
10
10
  /**
@@ -31,7 +31,7 @@ const TreeItemContent = /*#__PURE__*/React.forwardRef(function TreeItemContent(p
31
31
  handleExpansion,
32
32
  handleSelection,
33
33
  preventSelection
34
- } = useTreeItem(nodeId);
34
+ } = useTreeItemState(nodeId);
35
35
  const icon = iconProp || expansionIcon || displayIcon;
36
36
  const handleMouseDown = event => {
37
37
  preventSelection(event);
@@ -73,9 +73,6 @@ process.env.NODE_ENV !== "production" ? TreeItemContent.propTypes = {
73
73
  * Override or extend the styles applied to the component.
74
74
  */
75
75
  classes: PropTypes.object.isRequired,
76
- /**
77
- * className applied to the root element.
78
- */
79
76
  className: PropTypes.string,
80
77
  /**
81
78
  * The icon to display next to the tree node's label. Either a parent or end icon.
@@ -1,6 +1,6 @@
1
1
  export { TreeItem } from './TreeItem';
2
- export type { TreeItemProps } from './TreeItem.types';
2
+ export type { TreeItemProps, TreeItemSlots, TreeItemSlotProps } from './TreeItem.types';
3
3
  export * from './treeItemClasses';
4
- export * from './useTreeItem';
4
+ export * from './useTreeItemState';
5
5
  export { TreeItemContent } from './TreeItemContent';
6
6
  export type { TreeItemContentProps, TreeItemContentClassKey } from './TreeItemContent';
package/TreeItem/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  export { TreeItem } from './TreeItem';
2
2
  export * from './treeItemClasses';
3
- export * from './useTreeItem';
3
+ export * from './useTreeItemState';
4
4
  export { TreeItemContent } from './TreeItemContent';
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- export declare function useTreeItem(nodeId: string): {
2
+ export declare function useTreeItemState(nodeId: string): {
3
3
  disabled: boolean;
4
4
  expanded: boolean;
5
5
  selected: boolean;
@@ -1,8 +1,10 @@
1
1
  import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
2
- export function useTreeItem(nodeId) {
2
+ export function useTreeItemState(nodeId) {
3
3
  const {
4
4
  instance,
5
- multiSelect
5
+ selection: {
6
+ multiSelect
7
+ }
6
8
  } = useTreeViewContext();
7
9
  const expandable = instance.isNodeExpandable(nodeId);
8
10
  const expanded = instance.isNodeExpanded(nodeId);