@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.
- package/CHANGELOG.md +508 -30
- package/README.md +3 -3
- package/RichTreeView/RichTreeView.js +10 -36
- package/RichTreeView/RichTreeView.types.d.ts +6 -9
- package/RichTreeView/index.d.ts +1 -1
- package/SimpleTreeView/SimpleTreeView.js +12 -55
- package/SimpleTreeView/SimpleTreeView.plugins.d.ts +5 -3
- package/SimpleTreeView/SimpleTreeView.types.d.ts +8 -7
- package/SimpleTreeView/index.d.ts +1 -1
- package/TreeItem/TreeItem.js +62 -39
- package/TreeItem/TreeItem.types.d.ts +33 -17
- package/TreeItem/TreeItemContent.d.ts +0 -3
- package/TreeItem/TreeItemContent.js +2 -5
- package/TreeItem/index.d.ts +2 -2
- package/TreeItem/index.js +1 -1
- package/TreeItem/{useTreeItem.d.ts → useTreeItemState.d.ts} +1 -1
- package/{modern/TreeItem/useTreeItem.js → TreeItem/useTreeItemState.js} +4 -2
- package/TreeView/TreeView.js +0 -39
- package/TreeView/TreeView.types.d.ts +5 -1
- package/TreeView/index.d.ts +1 -1
- package/icons/icons.d.ts +6 -0
- package/icons/icons.js +9 -0
- package/icons/index.d.ts +1 -0
- package/icons/index.js +1 -0
- package/icons/package.json +6 -0
- package/index.d.ts +1 -0
- package/index.js +3 -2
- package/internals/TreeViewProvider/TreeViewContext.d.ts +4 -2
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -11
- package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.d.ts +3 -2
- package/internals/index.d.ts +15 -0
- package/internals/index.js +4 -0
- package/internals/models/helpers.d.ts +7 -1
- package/internals/models/plugin.d.ts +64 -20
- package/internals/models/treeView.d.ts +1 -2
- package/internals/package.json +6 -0
- package/internals/plugins/defaultPlugins.d.ts +6 -4
- package/internals/plugins/defaultPlugins.js +2 -2
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +8 -10
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +7 -3
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +0 -6
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +12 -6
- package/internals/plugins/useTreeViewIcons/index.d.ts +2 -0
- package/internals/plugins/useTreeViewIcons/index.js +1 -0
- package/internals/plugins/useTreeViewIcons/useTreeViewIcons.d.ts +3 -0
- package/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +22 -0
- package/internals/plugins/useTreeViewIcons/useTreeViewIcons.types.d.ts +43 -0
- package/internals/plugins/useTreeViewId/useTreeViewId.types.d.ts +6 -2
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +10 -5
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.d.ts +6 -4
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +9 -6
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +14 -0
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +10 -2
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +9 -5
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +15 -5
- package/internals/useTreeView/useTreeView.js +7 -3
- package/internals/useTreeView/useTreeView.types.d.ts +6 -6
- package/internals/useTreeView/useTreeViewModels.js +10 -11
- package/internals/utils/extractPluginParamsFromProps.d.ts +8 -5
- package/internals/utils/extractPluginParamsFromProps.js +17 -6
- package/legacy/RichTreeView/RichTreeView.js +3 -27
- package/legacy/SimpleTreeView/SimpleTreeView.js +4 -46
- package/legacy/TreeItem/TreeItem.js +63 -39
- package/legacy/TreeItem/TreeItemContent.js +9 -12
- package/legacy/TreeItem/index.js +1 -1
- package/legacy/TreeItem/{useTreeItem.js → useTreeItemState.js} +2 -2
- package/legacy/TreeView/TreeView.js +0 -39
- package/legacy/icons/icons.js +9 -0
- package/legacy/icons/index.js +1 -0
- package/legacy/index.js +3 -2
- package/legacy/internals/index.js +4 -0
- package/legacy/internals/plugins/defaultPlugins.js +2 -2
- package/legacy/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +10 -10
- package/legacy/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +0 -6
- package/legacy/internals/plugins/useTreeViewIcons/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +21 -0
- package/legacy/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +3 -0
- package/legacy/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +14 -0
- package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +12 -6
- package/legacy/internals/useTreeView/useTreeView.js +6 -2
- package/legacy/internals/useTreeView/useTreeViewModels.js +10 -11
- package/legacy/internals/utils/extractPluginParamsFromProps.js +11 -2
- package/modern/RichTreeView/RichTreeView.js +10 -36
- package/modern/SimpleTreeView/SimpleTreeView.js +12 -55
- package/modern/TreeItem/TreeItem.js +61 -39
- package/modern/TreeItem/TreeItemContent.js +2 -5
- package/modern/TreeItem/index.js +1 -1
- package/{TreeItem/useTreeItem.js → modern/TreeItem/useTreeItemState.js} +4 -2
- package/modern/TreeView/TreeView.js +0 -39
- package/modern/icons/icons.js +9 -0
- package/modern/icons/index.js +1 -0
- package/modern/index.js +3 -2
- package/modern/internals/index.js +4 -0
- package/modern/internals/plugins/defaultPlugins.js +2 -2
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +7 -10
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +0 -3
- package/modern/internals/plugins/useTreeViewIcons/index.js +1 -0
- package/modern/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +22 -0
- package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +10 -5
- package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +11 -0
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +9 -5
- package/modern/internals/useTreeView/useTreeView.js +7 -3
- package/modern/internals/useTreeView/useTreeViewModels.js +10 -11
- package/modern/internals/utils/extractPluginParamsFromProps.js +17 -6
- package/node/RichTreeView/RichTreeView.js +10 -36
- package/node/SimpleTreeView/SimpleTreeView.js +12 -55
- package/node/TreeItem/TreeItem.js +61 -39
- package/node/TreeItem/TreeItemContent.js +2 -5
- package/node/TreeItem/index.js +4 -4
- package/node/TreeItem/{useTreeItem.js → useTreeItemState.js} +5 -3
- package/node/TreeView/TreeView.js +0 -39
- package/node/icons/icons.js +17 -0
- package/node/icons/index.js +16 -0
- package/node/index.js +13 -1
- package/node/internals/index.js +33 -0
- package/node/internals/plugins/defaultPlugins.js +2 -2
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +7 -10
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +0 -3
- package/node/internals/plugins/useTreeViewIcons/index.js +12 -0
- package/node/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +29 -0
- package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +10 -5
- package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +11 -0
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +9 -5
- package/node/internals/useTreeView/useTreeView.js +7 -3
- package/node/internals/useTreeView/useTreeViewModels.js +10 -11
- package/node/internals/utils/extractPluginParamsFromProps.js +18 -6
- package/package.json +7 -7
- package/themeAugmentation/components.d.ts +4 -4
- package/internals/plugins/useTreeViewContextValueBuilder/index.d.ts +0 -2
- package/internals/plugins/useTreeViewContextValueBuilder/index.js +0 -1
- package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.d.ts +0 -3
- package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +0 -32
- package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.d.ts +0 -29
- package/legacy/internals/plugins/useTreeViewContextValueBuilder/index.js +0 -1
- package/legacy/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +0 -34
- package/modern/internals/plugins/useTreeViewContextValueBuilder/index.js +0 -1
- package/modern/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +0 -32
- package/node/internals/plugins/useTreeViewContextValueBuilder/index.js +0 -12
- package/node/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +0 -39
- /package/internals/plugins/{useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js → useTreeViewIcons/useTreeViewIcons.types.js} +0 -0
- /package/legacy/internals/plugins/{useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js → useTreeViewIcons/useTreeViewIcons.types.js} +0 -0
- /package/modern/internals/plugins/{useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js → useTreeViewIcons/useTreeViewIcons.types.js} +0 -0
- /package/node/internals/plugins/{useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js → useTreeViewIcons/useTreeViewIcons.types.js} +0 -0
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
# MUI
|
|
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
|
|
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.
|
|
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
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
|
13
|
+
export interface RichTreeViewSlots extends DefaultTreeViewPluginSlots {
|
|
14
14
|
/**
|
|
15
15
|
* Element rendered at the root.
|
|
16
|
-
* @default
|
|
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
|
|
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?:
|
|
45
|
+
slots?: RichTreeViewSlots;
|
|
49
46
|
/**
|
|
50
47
|
* The props used for each component slot.
|
|
51
48
|
* @default {}
|
|
52
49
|
*/
|
|
53
|
-
slotProps?:
|
|
50
|
+
slotProps?: RichTreeViewSlotProps<R, Multiple>;
|
|
54
51
|
}
|
|
55
52
|
export {};
|
package/RichTreeView/index.d.ts
CHANGED
|
@@ -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
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
58
|
+
const {
|
|
59
|
+
pluginParams,
|
|
60
|
+
slots,
|
|
61
|
+
slotProps,
|
|
62
|
+
otherProps
|
|
63
|
+
} = extractPluginParamsFromProps({
|
|
64
|
+
props: _extends({}, props, {
|
|
65
|
+
items: EMPTY_ITEMS
|
|
66
66
|
}),
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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.
|
package/TreeItem/TreeItem.js
CHANGED
|
@@ -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", "
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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
|
-
*
|
|
44
|
+
* Overridable component slots.
|
|
45
|
+
* @default {}
|
|
23
46
|
*/
|
|
24
|
-
|
|
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.
|
|
@@ -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 {
|
|
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
|
-
} =
|
|
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.
|
package/TreeItem/index.d.ts
CHANGED
|
@@ -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 './
|
|
4
|
+
export * from './useTreeItemState';
|
|
5
5
|
export { TreeItemContent } from './TreeItemContent';
|
|
6
6
|
export type { TreeItemContentProps, TreeItemContentClassKey } from './TreeItemContent';
|
package/TreeItem/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
|
|
2
|
-
export function
|
|
2
|
+
export function useTreeItemState(nodeId) {
|
|
3
3
|
const {
|
|
4
4
|
instance,
|
|
5
|
-
|
|
5
|
+
selection: {
|
|
6
|
+
multiSelect
|
|
7
|
+
}
|
|
6
8
|
} = useTreeViewContext();
|
|
7
9
|
const expandable = instance.isNodeExpandable(nodeId);
|
|
8
10
|
const expanded = instance.isNodeExpanded(nodeId);
|