@mui/x-tree-view 7.0.0-alpha.8 → 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.
- package/CHANGELOG.md +379 -2
- package/README.md +1 -1
- 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 -37
- package/SimpleTreeView/SimpleTreeView.plugins.d.ts +4 -2
- 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 -21
- 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.types.d.ts +6 -4
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +9 -6
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +11 -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 -28
- 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 -21
- 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/useTreeViewNodes/useTreeViewNodes.js +11 -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 -37
- 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 -21
- 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/useTreeViewNodes/useTreeViewNodes.js +8 -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 -37
- 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 -21
- 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/useTreeViewNodes/useTreeViewNodes.js +8 -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
|
@@ -31,11 +31,15 @@ export var useTreeView = function useTreeView(inParams) {
|
|
|
31
31
|
state = _React$useState2[0],
|
|
32
32
|
setState = _React$useState2[1];
|
|
33
33
|
var rootPropsGetters = [];
|
|
34
|
-
var contextValue = {
|
|
34
|
+
var contextValue = {
|
|
35
|
+
instance: instance
|
|
36
|
+
};
|
|
35
37
|
var runPlugin = function runPlugin(plugin) {
|
|
36
38
|
var pluginResponse = plugin({
|
|
37
39
|
instance: instance,
|
|
38
40
|
params: params,
|
|
41
|
+
slots: params.slots,
|
|
42
|
+
slotProps: params.slotProps,
|
|
39
43
|
state: state,
|
|
40
44
|
setState: setState,
|
|
41
45
|
rootRef: innerRootRef,
|
|
@@ -45,7 +49,7 @@ export var useTreeView = function useTreeView(inParams) {
|
|
|
45
49
|
rootPropsGetters.push(pluginResponse.getRootProps);
|
|
46
50
|
}
|
|
47
51
|
if (pluginResponse.contextValue) {
|
|
48
|
-
contextValue
|
|
52
|
+
_extends(contextValue, pluginResponse.contextValue);
|
|
49
53
|
}
|
|
50
54
|
};
|
|
51
55
|
plugins.forEach(runPlugin);
|
|
@@ -15,13 +15,12 @@ export var useTreeViewModels = function useTreeViewModels(plugins, props) {
|
|
|
15
15
|
Object.entries(plugin.models).forEach(function (_ref) {
|
|
16
16
|
var _ref2 = _slicedToArray(_ref, 2),
|
|
17
17
|
modelName = _ref2[0],
|
|
18
|
-
|
|
18
|
+
modelInitializer = _ref2[1];
|
|
19
19
|
modelsRef.current[modelName] = {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
isControlled: props[model.controlledProp] !== undefined
|
|
20
|
+
isControlled: props[modelName] !== undefined,
|
|
21
|
+
getDefaultValue: modelInitializer.getDefaultValue
|
|
23
22
|
};
|
|
24
|
-
initialState[modelName] = props
|
|
23
|
+
initialState[modelName] = modelInitializer.getDefaultValue(props);
|
|
25
24
|
});
|
|
26
25
|
}
|
|
27
26
|
});
|
|
@@ -34,10 +33,10 @@ export var useTreeViewModels = function useTreeViewModels(plugins, props) {
|
|
|
34
33
|
var _ref4 = _slicedToArray(_ref3, 2),
|
|
35
34
|
modelName = _ref4[0],
|
|
36
35
|
model = _ref4[1];
|
|
37
|
-
var value = model.isControlled ? props[
|
|
36
|
+
var value = model.isControlled ? props[modelName] : modelsState[modelName];
|
|
38
37
|
return [modelName, {
|
|
39
38
|
value: value,
|
|
40
|
-
|
|
39
|
+
setControlledValue: function setControlledValue(newValue) {
|
|
41
40
|
if (!model.isControlled) {
|
|
42
41
|
setModelsState(function (prevState) {
|
|
43
42
|
return _extends({}, prevState, _defineProperty({}, modelName, newValue));
|
|
@@ -54,17 +53,17 @@ export var useTreeViewModels = function useTreeViewModels(plugins, props) {
|
|
|
54
53
|
var _ref6 = _slicedToArray(_ref5, 2),
|
|
55
54
|
modelName = _ref6[0],
|
|
56
55
|
model = _ref6[1];
|
|
57
|
-
var controlled = props[
|
|
58
|
-
var
|
|
56
|
+
var controlled = props[modelName];
|
|
57
|
+
var newDefaultValue = model.getDefaultValue(props);
|
|
59
58
|
React.useEffect(function () {
|
|
60
59
|
if (model.isControlled !== (controlled !== undefined)) {
|
|
61
60
|
console.error(["MUI X: A component is changing the ".concat(model.isControlled ? '' : 'un', "controlled ").concat(modelName, " state of TreeView to be ").concat(model.isControlled ? 'un' : '', "controlled."), 'Elements should not switch from uncontrolled to controlled (or vice versa).', "Decide between using a controlled or uncontrolled ".concat(modelName, " ") + 'element for the lifetime of the component.', "The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.", 'More info: https://fb.me/react-controlled-components'].join('\n'));
|
|
62
61
|
}
|
|
63
62
|
}, [controlled]);
|
|
64
|
-
var _React$useRef = React.useRef(
|
|
63
|
+
var _React$useRef = React.useRef(newDefaultValue),
|
|
65
64
|
defaultValue = _React$useRef.current;
|
|
66
65
|
React.useEffect(function () {
|
|
67
|
-
if (!model.isControlled && defaultValue !==
|
|
66
|
+
if (!model.isControlled && defaultValue !== newDefaultValue) {
|
|
68
67
|
console.error(["MUI X: A component is changing the default ".concat(modelName, " state of an uncontrolled TreeView after being initialized. ") + "To suppress this warning opt to use a controlled TreeView."].join('\n'));
|
|
69
68
|
}
|
|
70
69
|
}, [JSON.stringify(defaultValue)]);
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
3
|
+
var _excluded = ["slots", "slotProps"];
|
|
2
4
|
export var extractPluginParamsFromProps = function extractPluginParamsFromProps(_ref) {
|
|
3
|
-
var props = _ref.props,
|
|
5
|
+
var _ref$props = _ref.props,
|
|
6
|
+
slots = _ref$props.slots,
|
|
7
|
+
slotProps = _ref$props.slotProps,
|
|
8
|
+
props = _objectWithoutProperties(_ref$props, _excluded),
|
|
4
9
|
plugins = _ref.plugins,
|
|
5
10
|
rootRef = _ref.rootRef;
|
|
6
11
|
var paramsLookup = {};
|
|
@@ -9,7 +14,9 @@ export var extractPluginParamsFromProps = function extractPluginParamsFromProps(
|
|
|
9
14
|
});
|
|
10
15
|
var pluginParams = {
|
|
11
16
|
plugins: plugins,
|
|
12
|
-
rootRef: rootRef
|
|
17
|
+
rootRef: rootRef,
|
|
18
|
+
slots: slots != null ? slots : {},
|
|
19
|
+
slotProps: slotProps != null ? slotProps : {}
|
|
13
20
|
};
|
|
14
21
|
var otherProps = {};
|
|
15
22
|
Object.keys(props).forEach(function (propName) {
|
|
@@ -22,6 +29,8 @@ export var extractPluginParamsFromProps = function extractPluginParamsFromProps(
|
|
|
22
29
|
});
|
|
23
30
|
return {
|
|
24
31
|
pluginParams: pluginParams,
|
|
32
|
+
slots: slots,
|
|
33
|
+
slotProps: slotProps,
|
|
25
34
|
otherProps: otherProps
|
|
26
35
|
};
|
|
27
36
|
};
|
|
@@ -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';
|
|
@@ -81,19 +79,16 @@ const RichTreeView = /*#__PURE__*/React.forwardRef(function RichTreeView(inProps
|
|
|
81
79
|
childrenWarning();
|
|
82
80
|
}
|
|
83
81
|
}
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}
|
|
95
|
-
} = _extractPluginParamsF,
|
|
96
|
-
otherProps = _objectWithoutPropertiesLoose(_extractPluginParamsF.otherProps, _excluded);
|
|
82
|
+
const {
|
|
83
|
+
pluginParams,
|
|
84
|
+
slots,
|
|
85
|
+
slotProps,
|
|
86
|
+
otherProps
|
|
87
|
+
} = extractPluginParamsFromProps({
|
|
88
|
+
props,
|
|
89
|
+
plugins: DEFAULT_TREE_VIEW_PLUGINS,
|
|
90
|
+
rootRef: ref
|
|
91
|
+
});
|
|
97
92
|
const {
|
|
98
93
|
getRootProps,
|
|
99
94
|
contextValue,
|
|
@@ -141,34 +136,13 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
|
|
|
141
136
|
* Override or extend the styles applied to the component.
|
|
142
137
|
*/
|
|
143
138
|
classes: PropTypes.object,
|
|
144
|
-
/**
|
|
145
|
-
* className applied to the root element.
|
|
146
|
-
*/
|
|
147
139
|
className: PropTypes.string,
|
|
148
|
-
/**
|
|
149
|
-
* The default icon used to collapse the node.
|
|
150
|
-
*/
|
|
151
|
-
defaultCollapseIcon: PropTypes.node,
|
|
152
|
-
/**
|
|
153
|
-
* The default icon displayed next to a end node. This is applied to all
|
|
154
|
-
* tree nodes and can be overridden by the TreeItem `icon` prop.
|
|
155
|
-
*/
|
|
156
|
-
defaultEndIcon: PropTypes.node,
|
|
157
140
|
/**
|
|
158
141
|
* Expanded node ids.
|
|
159
142
|
* Used when the item's expansion is not controlled.
|
|
160
143
|
* @default []
|
|
161
144
|
*/
|
|
162
145
|
defaultExpandedNodes: PropTypes.arrayOf(PropTypes.string),
|
|
163
|
-
/**
|
|
164
|
-
* The default icon used to expand the node.
|
|
165
|
-
*/
|
|
166
|
-
defaultExpandIcon: PropTypes.node,
|
|
167
|
-
/**
|
|
168
|
-
* The default icon displayed next to a parent node. This is applied to all
|
|
169
|
-
* parent nodes and can be overridden by the TreeItem `icon` prop.
|
|
170
|
-
*/
|
|
171
|
-
defaultParentIcon: PropTypes.node,
|
|
172
146
|
/**
|
|
173
147
|
* Selected node ids. (Uncontrolled)
|
|
174
148
|
* When `multiSelect` is true this takes an array of strings; when false (default) a string.
|
|
@@ -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';
|
|
@@ -56,20 +54,18 @@ const SimpleTreeView = /*#__PURE__*/React.forwardRef(function SimpleTreeView(inP
|
|
|
56
54
|
itemsPropWarning();
|
|
57
55
|
}
|
|
58
56
|
}
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
57
|
+
const {
|
|
58
|
+
pluginParams,
|
|
59
|
+
slots,
|
|
60
|
+
slotProps,
|
|
61
|
+
otherProps
|
|
62
|
+
} = extractPluginParamsFromProps({
|
|
63
|
+
props: _extends({}, props, {
|
|
64
|
+
items: EMPTY_ITEMS
|
|
65
65
|
}),
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
slots
|
|
70
|
-
}
|
|
71
|
-
} = _extractPluginParamsF,
|
|
72
|
-
otherProps = _objectWithoutPropertiesLoose(_extractPluginParamsF.otherProps, _excluded);
|
|
66
|
+
plugins: SIMPLE_TREE_VIEW_PLUGINS,
|
|
67
|
+
rootRef: ref
|
|
68
|
+
});
|
|
73
69
|
const {
|
|
74
70
|
getRootProps,
|
|
75
71
|
contextValue
|
|
@@ -78,7 +74,7 @@ const SimpleTreeView = /*#__PURE__*/React.forwardRef(function SimpleTreeView(inP
|
|
|
78
74
|
const Root = slots?.root ?? SimpleTreeViewRoot;
|
|
79
75
|
const rootProps = useSlotProps({
|
|
80
76
|
elementType: Root,
|
|
81
|
-
externalSlotProps:
|
|
77
|
+
externalSlotProps: slotProps?.root,
|
|
82
78
|
externalForwardedProps: otherProps,
|
|
83
79
|
className: classes.root,
|
|
84
80
|
getSlotProps: getRootProps,
|
|
@@ -102,34 +98,13 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
|
|
|
102
98
|
* Override or extend the styles applied to the component.
|
|
103
99
|
*/
|
|
104
100
|
classes: PropTypes.object,
|
|
105
|
-
/**
|
|
106
|
-
* className applied to the root element.
|
|
107
|
-
*/
|
|
108
101
|
className: PropTypes.string,
|
|
109
|
-
/**
|
|
110
|
-
* The default icon used to collapse the node.
|
|
111
|
-
*/
|
|
112
|
-
defaultCollapseIcon: PropTypes.node,
|
|
113
|
-
/**
|
|
114
|
-
* The default icon displayed next to a end node. This is applied to all
|
|
115
|
-
* tree nodes and can be overridden by the TreeItem `icon` prop.
|
|
116
|
-
*/
|
|
117
|
-
defaultEndIcon: PropTypes.node,
|
|
118
102
|
/**
|
|
119
103
|
* Expanded node ids.
|
|
120
104
|
* Used when the item's expansion is not controlled.
|
|
121
105
|
* @default []
|
|
122
106
|
*/
|
|
123
107
|
defaultExpandedNodes: PropTypes.arrayOf(PropTypes.string),
|
|
124
|
-
/**
|
|
125
|
-
* The default icon used to expand the node.
|
|
126
|
-
*/
|
|
127
|
-
defaultExpandIcon: PropTypes.node,
|
|
128
|
-
/**
|
|
129
|
-
* The default icon displayed next to a parent node. This is applied to all
|
|
130
|
-
* parent nodes and can be overridden by the TreeItem `icon` prop.
|
|
131
|
-
*/
|
|
132
|
-
defaultParentIcon: PropTypes.node,
|
|
133
108
|
/**
|
|
134
109
|
* Selected node ids. (Uncontrolled)
|
|
135
110
|
* When `multiSelect` is true this takes an array of strings; when false (default) a string.
|
|
@@ -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 => {
|
|
@@ -133,7 +138,9 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
133
138
|
const {
|
|
134
139
|
icons: contextIcons,
|
|
135
140
|
runItemPlugins,
|
|
136
|
-
|
|
141
|
+
selection: {
|
|
142
|
+
multiSelect
|
|
143
|
+
},
|
|
137
144
|
disabledItemsFocusable,
|
|
138
145
|
instance
|
|
139
146
|
} = useTreeViewContext();
|
|
@@ -152,12 +159,10 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
152
159
|
const {
|
|
153
160
|
children,
|
|
154
161
|
className,
|
|
155
|
-
|
|
162
|
+
slots: inSlots,
|
|
163
|
+
slotProps: inSlotProps,
|
|
156
164
|
ContentComponent = TreeItemContent,
|
|
157
165
|
ContentProps,
|
|
158
|
-
endIcon,
|
|
159
|
-
expandIcon,
|
|
160
|
-
icon,
|
|
161
166
|
nodeId,
|
|
162
167
|
id,
|
|
163
168
|
label,
|
|
@@ -167,6 +172,12 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
167
172
|
TransitionProps
|
|
168
173
|
} = props,
|
|
169
174
|
other = _objectWithoutPropertiesLoose(props, _excluded);
|
|
175
|
+
const slots = {
|
|
176
|
+
expandIcon: inSlots?.expandIcon ?? contextIcons.slots.expandIcon ?? TreeViewExpandIcon,
|
|
177
|
+
collapseIcon: inSlots?.collapseIcon ?? contextIcons.slots.collapseIcon ?? TreeViewCollapseIcon,
|
|
178
|
+
endIcon: inSlots?.endIcon ?? contextIcons.slots.endIcon,
|
|
179
|
+
icon: inSlots?.icon
|
|
180
|
+
};
|
|
170
181
|
const expandable = Boolean(Array.isArray(children) ? children.length : children);
|
|
171
182
|
const expanded = instance.isNodeExpanded(nodeId);
|
|
172
183
|
const focused = instance.isNodeFocused(nodeId);
|
|
@@ -179,20 +190,40 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
179
190
|
disabled
|
|
180
191
|
});
|
|
181
192
|
const classes = useUtilityClasses(ownerState);
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
193
|
+
const ExpansionIcon = expanded ? slots.collapseIcon : slots.expandIcon;
|
|
194
|
+
const _useSlotProps = useSlotProps({
|
|
195
|
+
elementType: ExpansionIcon,
|
|
196
|
+
ownerState: {},
|
|
197
|
+
externalSlotProps: tempOwnerState => {
|
|
198
|
+
if (expanded) {
|
|
199
|
+
return _extends({}, resolveComponentProps(contextIcons.slotProps.collapseIcon, tempOwnerState), resolveComponentProps(inSlotProps?.collapseIcon, tempOwnerState));
|
|
200
|
+
}
|
|
201
|
+
return _extends({}, resolveComponentProps(contextIcons.slotProps.expandIcon, tempOwnerState), resolveComponentProps(inSlotProps?.expandIcon, tempOwnerState));
|
|
202
|
+
}
|
|
203
|
+
}),
|
|
204
|
+
expansionIconProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded2);
|
|
205
|
+
const expansionIcon = expandable && !!ExpansionIcon ? /*#__PURE__*/_jsx(ExpansionIcon, _extends({}, expansionIconProps)) : null;
|
|
206
|
+
const DisplayIcon = expandable ? undefined : slots.endIcon;
|
|
207
|
+
const _useSlotProps2 = useSlotProps({
|
|
208
|
+
elementType: DisplayIcon,
|
|
209
|
+
ownerState: {},
|
|
210
|
+
externalSlotProps: tempOwnerState => {
|
|
211
|
+
if (expandable) {
|
|
212
|
+
return {};
|
|
213
|
+
}
|
|
214
|
+
return _extends({}, resolveComponentProps(contextIcons.slotProps.endIcon, tempOwnerState), resolveComponentProps(inSlotProps?.endIcon, tempOwnerState));
|
|
215
|
+
}
|
|
216
|
+
}),
|
|
217
|
+
displayIconProps = _objectWithoutPropertiesLoose(_useSlotProps2, _excluded3);
|
|
218
|
+
const displayIcon = DisplayIcon ? /*#__PURE__*/_jsx(DisplayIcon, _extends({}, displayIconProps)) : null;
|
|
219
|
+
const Icon = slots.icon;
|
|
220
|
+
const _useSlotProps3 = useSlotProps({
|
|
221
|
+
elementType: Icon,
|
|
222
|
+
ownerState: {},
|
|
223
|
+
externalSlotProps: inSlotProps?.icon
|
|
224
|
+
}),
|
|
225
|
+
iconProps = _objectWithoutPropertiesLoose(_useSlotProps3, _excluded4);
|
|
226
|
+
const icon = Icon ? /*#__PURE__*/_jsx(Icon, _extends({}, iconProps)) : null;
|
|
196
227
|
let ariaSelected;
|
|
197
228
|
if (multiSelect) {
|
|
198
229
|
ariaSelected = selected;
|
|
@@ -273,14 +304,7 @@ TreeItem.propTypes = {
|
|
|
273
304
|
* Override or extend the styles applied to the component.
|
|
274
305
|
*/
|
|
275
306
|
classes: PropTypes.object,
|
|
276
|
-
/**
|
|
277
|
-
* className applied to the root element.
|
|
278
|
-
*/
|
|
279
307
|
className: PropTypes.string,
|
|
280
|
-
/**
|
|
281
|
-
* The icon used to collapse the node.
|
|
282
|
-
*/
|
|
283
|
-
collapseIcon: PropTypes.node,
|
|
284
308
|
/**
|
|
285
309
|
* The component used for the content node.
|
|
286
310
|
* @default TreeItemContent
|
|
@@ -295,18 +319,6 @@ TreeItem.propTypes = {
|
|
|
295
319
|
* @default false
|
|
296
320
|
*/
|
|
297
321
|
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
322
|
/**
|
|
311
323
|
* The tree node label.
|
|
312
324
|
*/
|
|
@@ -320,6 +332,16 @@ TreeItem.propTypes = {
|
|
|
320
332
|
* Use the `onNodeFocus` callback on the tree if you need to monitor a node's focus.
|
|
321
333
|
*/
|
|
322
334
|
onFocus: unsupportedProp,
|
|
335
|
+
/**
|
|
336
|
+
* The props used for each component slot.
|
|
337
|
+
* @default {}
|
|
338
|
+
*/
|
|
339
|
+
slotProps: PropTypes.object,
|
|
340
|
+
/**
|
|
341
|
+
* Overridable component slots.
|
|
342
|
+
* @default {}
|
|
343
|
+
*/
|
|
344
|
+
slots: PropTypes.object,
|
|
323
345
|
/**
|
|
324
346
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
325
347
|
*/
|
|
@@ -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/modern/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);
|
|
@@ -72,34 +72,13 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
|
|
|
72
72
|
* Override or extend the styles applied to the component.
|
|
73
73
|
*/
|
|
74
74
|
classes: PropTypes.object,
|
|
75
|
-
/**
|
|
76
|
-
* className applied to the root element.
|
|
77
|
-
*/
|
|
78
75
|
className: PropTypes.string,
|
|
79
|
-
/**
|
|
80
|
-
* The default icon used to collapse the node.
|
|
81
|
-
*/
|
|
82
|
-
defaultCollapseIcon: PropTypes.node,
|
|
83
|
-
/**
|
|
84
|
-
* The default icon displayed next to a end node. This is applied to all
|
|
85
|
-
* tree nodes and can be overridden by the TreeItem `icon` prop.
|
|
86
|
-
*/
|
|
87
|
-
defaultEndIcon: PropTypes.node,
|
|
88
76
|
/**
|
|
89
77
|
* Expanded node ids.
|
|
90
78
|
* Used when the item's expansion is not controlled.
|
|
91
79
|
* @default []
|
|
92
80
|
*/
|
|
93
81
|
defaultExpandedNodes: PropTypes.arrayOf(PropTypes.string),
|
|
94
|
-
/**
|
|
95
|
-
* The default icon used to expand the node.
|
|
96
|
-
*/
|
|
97
|
-
defaultExpandIcon: PropTypes.node,
|
|
98
|
-
/**
|
|
99
|
-
* The default icon displayed next to a parent node. This is applied to all
|
|
100
|
-
* parent nodes and can be overridden by the TreeItem `icon` prop.
|
|
101
|
-
*/
|
|
102
|
-
defaultParentIcon: PropTypes.node,
|
|
103
82
|
/**
|
|
104
83
|
* Selected node ids. (Uncontrolled)
|
|
105
84
|
* When `multiSelect` is true this takes an array of strings; when false (default) a string.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createSvgIcon } from '@mui/material/utils';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
4
|
+
export const TreeViewExpandIcon = createSvgIcon( /*#__PURE__*/_jsx("path", {
|
|
5
|
+
d: "M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"
|
|
6
|
+
}), 'TreeViewExpandIcon');
|
|
7
|
+
export const TreeViewCollapseIcon = createSvgIcon( /*#__PURE__*/_jsx("path", {
|
|
8
|
+
d: "M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z"
|
|
9
|
+
}), 'TreeViewCollapseIcon');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './icons';
|
package/modern/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @mui/x-tree-view v7.0.0-alpha.
|
|
2
|
+
* @mui/x-tree-view v7.0.0-alpha.9
|
|
3
3
|
*
|
|
4
4
|
* @license MIT
|
|
5
5
|
* This source code is licensed under the MIT license found in the
|
|
@@ -10,4 +10,5 @@ export * from './TreeView';
|
|
|
10
10
|
export * from './SimpleTreeView';
|
|
11
11
|
export * from './RichTreeView';
|
|
12
12
|
export { unstable_resetCleanupTracking } from './internals/hooks/useInstanceEventHandler';
|
|
13
|
-
export * from './models';
|
|
13
|
+
export * from './models';
|
|
14
|
+
export * from './icons';
|
|
@@ -4,7 +4,7 @@ import { useTreeViewExpansion } from './useTreeViewExpansion';
|
|
|
4
4
|
import { useTreeViewSelection } from './useTreeViewSelection';
|
|
5
5
|
import { useTreeViewFocus } from './useTreeViewFocus';
|
|
6
6
|
import { useTreeViewKeyboardNavigation } from './useTreeViewKeyboardNavigation';
|
|
7
|
-
import {
|
|
8
|
-
export const DEFAULT_TREE_VIEW_PLUGINS = [useTreeViewId, useTreeViewNodes, useTreeViewExpansion, useTreeViewSelection, useTreeViewFocus, useTreeViewKeyboardNavigation,
|
|
7
|
+
import { useTreeViewIcons } from './useTreeViewIcons';
|
|
8
|
+
export const DEFAULT_TREE_VIEW_PLUGINS = [useTreeViewId, useTreeViewNodes, useTreeViewExpansion, useTreeViewSelection, useTreeViewFocus, useTreeViewKeyboardNavigation, useTreeViewIcons];
|
|
9
9
|
|
|
10
10
|
// We can't infer this type from the plugin, otherwise we would lose the generics.
|
|
@@ -7,6 +7,10 @@ export const useTreeViewExpansion = ({
|
|
|
7
7
|
params,
|
|
8
8
|
models
|
|
9
9
|
}) => {
|
|
10
|
+
const setExpandedNodes = (event, value) => {
|
|
11
|
+
params.onExpandedNodesChange?.(event, value);
|
|
12
|
+
models.expandedNodes.setControlledValue(value);
|
|
13
|
+
};
|
|
10
14
|
const isNodeExpanded = React.useCallback(nodeId => {
|
|
11
15
|
return Array.isArray(models.expandedNodes.value) ? models.expandedNodes.value.indexOf(nodeId) !== -1 : false;
|
|
12
16
|
}, [models.expandedNodes.value]);
|
|
@@ -25,10 +29,7 @@ export const useTreeViewExpansion = ({
|
|
|
25
29
|
if (params.onNodeExpansionToggle) {
|
|
26
30
|
params.onNodeExpansionToggle(event, nodeId, !isExpandedBefore);
|
|
27
31
|
}
|
|
28
|
-
|
|
29
|
-
params.onExpandedNodesChange(event, newExpanded);
|
|
30
|
-
}
|
|
31
|
-
models.expandedNodes.setValue(newExpanded);
|
|
32
|
+
setExpandedNodes(event, newExpanded);
|
|
32
33
|
});
|
|
33
34
|
const expandAllSiblings = (event, nodeId) => {
|
|
34
35
|
const node = instance.getNode(nodeId);
|
|
@@ -41,10 +42,7 @@ export const useTreeViewExpansion = ({
|
|
|
41
42
|
params.onNodeExpansionToggle(event, newlyExpandedNodeId, true);
|
|
42
43
|
});
|
|
43
44
|
}
|
|
44
|
-
|
|
45
|
-
params.onExpandedNodesChange(event, newExpanded);
|
|
46
|
-
}
|
|
47
|
-
models.expandedNodes.setValue(newExpanded);
|
|
45
|
+
setExpandedNodes(event, newExpanded);
|
|
48
46
|
}
|
|
49
47
|
};
|
|
50
48
|
populateInstance(instance, {
|
|
@@ -56,8 +54,7 @@ export const useTreeViewExpansion = ({
|
|
|
56
54
|
};
|
|
57
55
|
useTreeViewExpansion.models = {
|
|
58
56
|
expandedNodes: {
|
|
59
|
-
|
|
60
|
-
defaultProp: 'defaultExpandedNodes'
|
|
57
|
+
getDefaultValue: params => params.defaultExpandedNodes
|
|
61
58
|
}
|
|
62
59
|
};
|
|
63
60
|
const DEFAULT_EXPANDED_NODES = [];
|
|
@@ -85,9 +85,6 @@ export const useTreeViewFocus = ({
|
|
|
85
85
|
useTreeViewFocus.getInitialState = () => ({
|
|
86
86
|
focusedNodeId: null
|
|
87
87
|
});
|
|
88
|
-
useTreeViewFocus.getDefaultizedParams = params => _extends({}, params, {
|
|
89
|
-
disabledItemsFocusable: params.disabledItemsFocusable ?? false
|
|
90
|
-
});
|
|
91
88
|
useTreeViewFocus.params = {
|
|
92
89
|
onNodeFocus: true
|
|
93
90
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useTreeViewIcons } from './useTreeViewIcons';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const useTreeViewIcons = ({
|
|
2
|
+
slots,
|
|
3
|
+
slotProps
|
|
4
|
+
}) => {
|
|
5
|
+
return {
|
|
6
|
+
contextValue: {
|
|
7
|
+
icons: {
|
|
8
|
+
slots: {
|
|
9
|
+
collapseIcon: slots.collapseIcon,
|
|
10
|
+
expandIcon: slots.expandIcon,
|
|
11
|
+
endIcon: slots.endIcon
|
|
12
|
+
},
|
|
13
|
+
slotProps: {
|
|
14
|
+
collapseIcon: slotProps.collapseIcon,
|
|
15
|
+
expandIcon: slotProps.expandIcon,
|
|
16
|
+
endIcon: slotProps.endIcon
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
useTreeViewIcons.params = {};
|