@mui/x-tree-view 7.0.0-beta.5 → 7.0.0-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +252 -50
- package/RichTreeView/RichTreeView.js +23 -22
- package/RichTreeView/RichTreeView.types.d.ts +2 -1
- package/SimpleTreeView/SimpleTreeView.js +23 -22
- package/TreeItem/TreeItem.js +79 -79
- package/TreeItem/TreeItem.types.d.ts +17 -19
- package/TreeItem/treeItemClasses.d.ts +1 -1
- package/TreeItem/treeItemClasses.js +1 -1
- package/TreeItem/useTreeItemState.js +2 -2
- package/TreeItem2/TreeItem2.d.ts +18 -0
- package/TreeItem2/TreeItem2.js +301 -0
- package/TreeItem2/TreeItem2.types.d.ts +64 -0
- package/TreeItem2/TreeItem2.types.js +1 -0
- package/TreeItem2/index.d.ts +2 -0
- package/TreeItem2/index.js +1 -0
- package/TreeItem2/package.json +6 -0
- package/TreeItem2Icon/TreeItem2Icon.d.ts +7 -0
- package/TreeItem2Icon/TreeItem2Icon.js +68 -0
- package/TreeItem2Icon/TreeItem2Icon.types.d.ts +40 -0
- package/TreeItem2Icon/TreeItem2Icon.types.js +1 -0
- package/TreeItem2Icon/index.d.ts +2 -0
- package/TreeItem2Icon/index.js +1 -0
- package/TreeItem2Icon/package.json +6 -0
- package/TreeItem2Provider/TreeItem2Provider.d.ts +7 -0
- package/TreeItem2Provider/TreeItem2Provider.js +24 -0
- package/TreeItem2Provider/TreeItem2Provider.types.d.ts +6 -0
- package/TreeItem2Provider/TreeItem2Provider.types.js +1 -0
- package/TreeItem2Provider/index.d.ts +2 -0
- package/TreeItem2Provider/index.js +1 -0
- package/TreeItem2Provider/package.json +6 -0
- package/TreeView/TreeView.js +23 -22
- package/hooks/index.d.ts +1 -0
- package/hooks/index.js +2 -1
- package/hooks/useTreeItem2Utils/index.d.ts +1 -0
- package/hooks/useTreeItem2Utils/index.js +1 -0
- package/hooks/useTreeItem2Utils/useTreeItem2Utils.d.ts +15 -0
- package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +61 -0
- package/hooks/useTreeViewApiRef.d.ts +2 -2
- package/index.d.ts +5 -1
- package/index.js +9 -2
- package/internals/TreeViewProvider/TreeViewContext.d.ts +3 -1
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +4 -2
- package/internals/hooks/useLazyRef.d.ts +1 -2
- package/internals/hooks/useLazyRef.js +1 -11
- package/internals/hooks/useOnMount.d.ts +1 -2
- package/internals/hooks/useOnMount.js +1 -7
- package/internals/hooks/useTimeout.d.ts +1 -11
- package/internals/hooks/useTimeout.js +1 -36
- package/internals/models/helpers.d.ts +1 -0
- package/internals/models/plugin.d.ts +19 -16
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +25 -25
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +11 -11
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -12
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +5 -6
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +37 -23
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +11 -9
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +31 -18
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +16 -6
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +11 -11
- package/internals/useTreeView/useTreeView.js +27 -25
- package/modern/RichTreeView/RichTreeView.js +23 -22
- package/modern/SimpleTreeView/SimpleTreeView.js +23 -22
- package/modern/TreeItem/TreeItem.js +78 -78
- package/modern/TreeItem/treeItemClasses.js +1 -1
- package/modern/TreeItem/useTreeItemState.js +2 -2
- package/modern/TreeItem2/TreeItem2.js +300 -0
- package/modern/TreeItem2/TreeItem2.types.js +1 -0
- package/modern/TreeItem2/index.js +1 -0
- package/modern/TreeItem2Icon/TreeItem2Icon.js +67 -0
- package/modern/TreeItem2Icon/TreeItem2Icon.types.js +1 -0
- package/modern/TreeItem2Icon/index.js +1 -0
- package/modern/TreeItem2Provider/TreeItem2Provider.js +24 -0
- package/modern/TreeItem2Provider/TreeItem2Provider.types.js +1 -0
- package/modern/TreeItem2Provider/index.js +1 -0
- package/modern/TreeView/TreeView.js +23 -22
- package/modern/hooks/index.js +2 -1
- package/modern/hooks/useTreeItem2Utils/index.js +1 -0
- package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +61 -0
- package/modern/index.js +9 -2
- package/modern/internals/hooks/useLazyRef.js +1 -11
- package/modern/internals/hooks/useOnMount.js +1 -7
- package/modern/internals/hooks/useTimeout.js +1 -36
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +24 -24
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -12
- package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +36 -22
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +11 -9
- package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +31 -18
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
- package/modern/internals/useTreeView/useTreeView.js +27 -25
- package/modern/useTreeItem2/index.js +1 -0
- package/modern/useTreeItem2/useTreeItem2.js +135 -0
- package/modern/useTreeItem2/useTreeItem2.types.js +1 -0
- package/node/RichTreeView/RichTreeView.js +23 -22
- package/node/SimpleTreeView/SimpleTreeView.js +23 -22
- package/node/TreeItem/TreeItem.js +78 -78
- package/node/TreeItem/treeItemClasses.js +1 -1
- package/node/TreeItem/useTreeItemState.js +2 -2
- package/node/TreeItem2/TreeItem2.js +308 -0
- package/node/TreeItem2/TreeItem2.types.js +5 -0
- package/node/TreeItem2/index.js +42 -0
- package/node/TreeItem2Icon/TreeItem2Icon.js +75 -0
- package/node/TreeItem2Icon/TreeItem2Icon.types.js +5 -0
- package/node/TreeItem2Icon/index.js +12 -0
- package/node/TreeItem2Provider/TreeItem2Provider.js +30 -0
- package/node/TreeItem2Provider/TreeItem2Provider.types.js +5 -0
- package/node/TreeItem2Provider/index.js +12 -0
- package/node/TreeView/TreeView.js +23 -22
- package/node/hooks/index.js +8 -1
- package/node/hooks/useTreeItem2Utils/index.js +12 -0
- package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +68 -0
- package/node/index.js +61 -13
- package/node/internals/hooks/useLazyRef.js +7 -13
- package/node/internals/hooks/useOnMount.js +8 -10
- package/node/internals/hooks/useTimeout.js +7 -37
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +24 -24
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -12
- package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +36 -22
- package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +11 -9
- package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +30 -17
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
- package/node/internals/useTreeView/useTreeView.js +27 -25
- package/node/useTreeItem2/index.js +12 -0
- package/node/useTreeItem2/useTreeItem2.js +143 -0
- package/node/useTreeItem2/useTreeItem2.types.js +5 -0
- package/package.json +2 -2
- package/themeAugmentation/components.d.ts +5 -0
- package/themeAugmentation/overrides.d.ts +1 -0
- package/themeAugmentation/props.d.ts +2 -0
- package/useTreeItem2/index.d.ts +2 -0
- package/useTreeItem2/index.js +1 -0
- package/useTreeItem2/package.json +6 -0
- package/useTreeItem2/useTreeItem2.d.ts +2 -0
- package/useTreeItem2/useTreeItem2.js +138 -0
- package/useTreeItem2/useTreeItem2.types.d.ts +113 -0
- package/useTreeItem2/useTreeItem2.types.js +1 -0
|
@@ -38,6 +38,7 @@ export const useTreeView = inParams => {
|
|
|
38
38
|
});
|
|
39
39
|
const rootPropsGetters = [];
|
|
40
40
|
const contextValue = {
|
|
41
|
+
publicAPI,
|
|
41
42
|
instance: instance
|
|
42
43
|
};
|
|
43
44
|
const runPlugin = plugin => {
|
|
@@ -60,43 +61,44 @@ export const useTreeView = inParams => {
|
|
|
60
61
|
}
|
|
61
62
|
};
|
|
62
63
|
plugins.forEach(runPlugin);
|
|
63
|
-
contextValue.runItemPlugins =
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}) => {
|
|
67
|
-
let finalProps = props;
|
|
68
|
-
let finalRef = ref;
|
|
69
|
-
const itemWrappers = [];
|
|
64
|
+
contextValue.runItemPlugins = itemPluginProps => {
|
|
65
|
+
let finalRootRef = null;
|
|
66
|
+
let finalContentRef = null;
|
|
70
67
|
plugins.forEach(plugin => {
|
|
71
68
|
if (!plugin.itemPlugin) {
|
|
72
69
|
return;
|
|
73
70
|
}
|
|
74
71
|
const itemPluginResponse = plugin.itemPlugin({
|
|
75
|
-
props:
|
|
76
|
-
|
|
72
|
+
props: itemPluginProps,
|
|
73
|
+
rootRef: finalRootRef,
|
|
74
|
+
contentRef: finalContentRef
|
|
77
75
|
});
|
|
78
|
-
if (itemPluginResponse?.
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
if (itemPluginResponse?.ref) {
|
|
82
|
-
finalRef = itemPluginResponse.ref;
|
|
76
|
+
if (itemPluginResponse?.rootRef) {
|
|
77
|
+
finalRootRef = itemPluginResponse.rootRef;
|
|
83
78
|
}
|
|
84
|
-
if (itemPluginResponse?.
|
|
85
|
-
|
|
79
|
+
if (itemPluginResponse?.contentRef) {
|
|
80
|
+
finalContentRef = itemPluginResponse.contentRef;
|
|
86
81
|
}
|
|
87
82
|
});
|
|
88
83
|
return {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
wrapItem: children => {
|
|
92
|
-
let finalChildren = children;
|
|
93
|
-
itemWrappers.forEach(itemWrapper => {
|
|
94
|
-
finalChildren = itemWrapper(finalChildren);
|
|
95
|
-
});
|
|
96
|
-
return finalChildren;
|
|
97
|
-
}
|
|
84
|
+
contentRef: finalContentRef,
|
|
85
|
+
rootRef: finalRootRef
|
|
98
86
|
};
|
|
99
87
|
};
|
|
88
|
+
const itemWrappers = plugins.map(plugin => plugin.wrapItem).filter(wrapItem => !!wrapItem);
|
|
89
|
+
contextValue.wrapItem = ({
|
|
90
|
+
nodeId,
|
|
91
|
+
children
|
|
92
|
+
}) => {
|
|
93
|
+
let finalChildren = children;
|
|
94
|
+
itemWrappers.forEach(itemWrapper => {
|
|
95
|
+
finalChildren = itemWrapper({
|
|
96
|
+
nodeId,
|
|
97
|
+
children: finalChildren
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
return finalChildren;
|
|
101
|
+
};
|
|
100
102
|
const getRootProps = (otherHandlers = {}) => {
|
|
101
103
|
const rootProps = _extends({
|
|
102
104
|
role: 'tree',
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useTreeItem2 as unstable_useTreeItem2 } from './useTreeItem2';
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import { extractEventHandlers } from '@mui/base/utils';
|
|
3
|
+
import useForkRef from '@mui/utils/useForkRef';
|
|
4
|
+
import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
|
|
5
|
+
import { useTreeItem2Utils } from '../hooks/useTreeItem2Utils';
|
|
6
|
+
export const useTreeItem2 = parameters => {
|
|
7
|
+
const {
|
|
8
|
+
runItemPlugins,
|
|
9
|
+
selection: {
|
|
10
|
+
multiSelect
|
|
11
|
+
},
|
|
12
|
+
disabledItemsFocusable,
|
|
13
|
+
instance,
|
|
14
|
+
publicAPI
|
|
15
|
+
} = useTreeViewContext();
|
|
16
|
+
const {
|
|
17
|
+
id,
|
|
18
|
+
nodeId,
|
|
19
|
+
label,
|
|
20
|
+
children,
|
|
21
|
+
rootRef
|
|
22
|
+
} = parameters;
|
|
23
|
+
const {
|
|
24
|
+
rootRef: pluginRootRef,
|
|
25
|
+
contentRef
|
|
26
|
+
} = runItemPlugins(parameters);
|
|
27
|
+
const {
|
|
28
|
+
interactions,
|
|
29
|
+
status
|
|
30
|
+
} = useTreeItem2Utils({
|
|
31
|
+
nodeId,
|
|
32
|
+
children
|
|
33
|
+
});
|
|
34
|
+
const idAttribute = instance.getTreeItemId(nodeId, id);
|
|
35
|
+
const handleRootRef = useForkRef(rootRef, pluginRootRef);
|
|
36
|
+
const createRootHandleFocus = otherHandlers => event => {
|
|
37
|
+
otherHandlers.onFocus?.(event);
|
|
38
|
+
if (event.defaultMuiPrevented) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// DOM focus stays on the tree which manages focus with aria-activedescendant
|
|
43
|
+
if (event.target === event.currentTarget) {
|
|
44
|
+
instance.focusRoot();
|
|
45
|
+
}
|
|
46
|
+
const canBeFocused = !status.disabled || disabledItemsFocusable;
|
|
47
|
+
if (!status.focused && canBeFocused && event.currentTarget === event.target) {
|
|
48
|
+
instance.focusItem(event, nodeId);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
const createContentHandleClick = otherHandlers => event => {
|
|
52
|
+
otherHandlers.onClick?.(event);
|
|
53
|
+
if (event.defaultMuiPrevented) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
interactions.handleExpansion(event);
|
|
57
|
+
interactions.handleSelection(event);
|
|
58
|
+
};
|
|
59
|
+
const createContentHandleMouseDown = otherHandlers => event => {
|
|
60
|
+
otherHandlers.onMouseDown?.(event);
|
|
61
|
+
if (event.defaultMuiPrevented) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Prevent text selection
|
|
66
|
+
if (event.shiftKey || event.ctrlKey || event.metaKey || status.disabled) {
|
|
67
|
+
event.preventDefault();
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
const getRootProps = (externalProps = {}) => {
|
|
71
|
+
const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
|
|
72
|
+
let ariaSelected;
|
|
73
|
+
if (multiSelect) {
|
|
74
|
+
ariaSelected = status.selected;
|
|
75
|
+
} else if (status.selected) {
|
|
76
|
+
/* single-selection trees unset aria-selected on un-selected items.
|
|
77
|
+
*
|
|
78
|
+
* If the tree does not support multiple selection, aria-selected
|
|
79
|
+
* is set to true for the selected node and it is not present on any other node in the tree.
|
|
80
|
+
* Source: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/
|
|
81
|
+
*/
|
|
82
|
+
ariaSelected = true;
|
|
83
|
+
}
|
|
84
|
+
return _extends({}, externalEventHandlers, {
|
|
85
|
+
ref: handleRootRef,
|
|
86
|
+
role: 'treeitem',
|
|
87
|
+
tabIndex: -1,
|
|
88
|
+
id: idAttribute,
|
|
89
|
+
'aria-expanded': status.expandable ? status.expanded : undefined,
|
|
90
|
+
'aria-selected': ariaSelected,
|
|
91
|
+
'aria-disabled': status.disabled || undefined
|
|
92
|
+
}, externalProps, {
|
|
93
|
+
onFocus: createRootHandleFocus(externalEventHandlers)
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
const getContentProps = (externalProps = {}) => {
|
|
97
|
+
const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
|
|
98
|
+
return _extends({}, externalEventHandlers, externalProps, {
|
|
99
|
+
ref: contentRef,
|
|
100
|
+
onClick: createContentHandleClick(externalEventHandlers),
|
|
101
|
+
onMouseDown: createContentHandleMouseDown(externalEventHandlers),
|
|
102
|
+
status
|
|
103
|
+
});
|
|
104
|
+
};
|
|
105
|
+
const getLabelProps = (externalProps = {}) => {
|
|
106
|
+
const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
|
|
107
|
+
return _extends({}, externalEventHandlers, {
|
|
108
|
+
children: label
|
|
109
|
+
}, externalProps);
|
|
110
|
+
};
|
|
111
|
+
const getIconContainerProps = (externalProps = {}) => {
|
|
112
|
+
const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
|
|
113
|
+
return _extends({}, externalEventHandlers, externalProps);
|
|
114
|
+
};
|
|
115
|
+
const getGroupTransitionProps = (externalProps = {}) => {
|
|
116
|
+
const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
|
|
117
|
+
return _extends({}, externalEventHandlers, {
|
|
118
|
+
unmountOnExit: true,
|
|
119
|
+
component: 'ul',
|
|
120
|
+
role: 'group',
|
|
121
|
+
in: status.expanded,
|
|
122
|
+
children
|
|
123
|
+
}, externalProps);
|
|
124
|
+
};
|
|
125
|
+
return {
|
|
126
|
+
getRootProps,
|
|
127
|
+
getContentProps,
|
|
128
|
+
getGroupTransitionProps,
|
|
129
|
+
getIconContainerProps,
|
|
130
|
+
getLabelProps,
|
|
131
|
+
rootRef: handleRootRef,
|
|
132
|
+
status,
|
|
133
|
+
publicAPI
|
|
134
|
+
};
|
|
135
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -146,7 +146,8 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
|
|
|
146
146
|
*/
|
|
147
147
|
apiRef: _propTypes.default.shape({
|
|
148
148
|
current: _propTypes.default.shape({
|
|
149
|
-
|
|
149
|
+
focusItem: _propTypes.default.func.isRequired,
|
|
150
|
+
getItem: _propTypes.default.func.isRequired
|
|
150
151
|
})
|
|
151
152
|
}),
|
|
152
153
|
/**
|
|
@@ -155,17 +156,17 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
|
|
|
155
156
|
classes: _propTypes.default.object,
|
|
156
157
|
className: _propTypes.default.string,
|
|
157
158
|
/**
|
|
158
|
-
* Expanded
|
|
159
|
+
* Expanded item ids.
|
|
159
160
|
* Used when the item's expansion is not controlled.
|
|
160
161
|
* @default []
|
|
161
162
|
*/
|
|
162
|
-
|
|
163
|
+
defaultExpandedItems: _propTypes.default.arrayOf(_propTypes.default.string),
|
|
163
164
|
/**
|
|
164
|
-
* Selected
|
|
165
|
+
* Selected item ids. (Uncontrolled)
|
|
165
166
|
* When `multiSelect` is true this takes an array of strings; when false (default) a string.
|
|
166
167
|
* @default []
|
|
167
168
|
*/
|
|
168
|
-
|
|
169
|
+
defaultSelectedItems: _propTypes.default.any,
|
|
169
170
|
/**
|
|
170
171
|
* If `true`, will allow focus on disabled items.
|
|
171
172
|
* @default false
|
|
@@ -177,10 +178,10 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
|
|
|
177
178
|
*/
|
|
178
179
|
disableSelection: _propTypes.default.bool,
|
|
179
180
|
/**
|
|
180
|
-
* Expanded
|
|
181
|
+
* Expanded item ids.
|
|
181
182
|
* Used when the item's expansion is controlled.
|
|
182
183
|
*/
|
|
183
|
-
|
|
184
|
+
expandedItems: _propTypes.default.arrayOf(_propTypes.default.string),
|
|
184
185
|
/**
|
|
185
186
|
* Used to determine the string label for a given item.
|
|
186
187
|
*
|
|
@@ -220,42 +221,42 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
|
|
|
220
221
|
/**
|
|
221
222
|
* Callback fired when tree items are expanded/collapsed.
|
|
222
223
|
* @param {React.SyntheticEvent} event The event source of the callback.
|
|
223
|
-
* @param {array}
|
|
224
|
+
* @param {array} itemIds The ids of the expanded items.
|
|
224
225
|
*/
|
|
225
|
-
|
|
226
|
+
onExpandedItemsChange: _propTypes.default.func,
|
|
226
227
|
/**
|
|
227
228
|
* Callback fired when a tree item is expanded or collapsed.
|
|
228
229
|
* @param {React.SyntheticEvent} event The event source of the callback.
|
|
229
|
-
* @param {array}
|
|
230
|
-
* @param {array} isExpanded `true` if the
|
|
230
|
+
* @param {array} itemId The itemId of the modified item.
|
|
231
|
+
* @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
|
|
231
232
|
*/
|
|
232
|
-
|
|
233
|
+
onItemExpansionToggle: _propTypes.default.func,
|
|
233
234
|
/**
|
|
234
235
|
* Callback fired when tree items are focused.
|
|
235
236
|
* @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
|
|
236
|
-
* @param {string}
|
|
237
|
-
* @param {string} value of the focused
|
|
237
|
+
* @param {string} itemId The id of the focused item.
|
|
238
|
+
* @param {string} value of the focused item.
|
|
238
239
|
*/
|
|
239
|
-
|
|
240
|
+
onItemFocus: _propTypes.default.func,
|
|
240
241
|
/**
|
|
241
242
|
* Callback fired when a tree item is selected or deselected.
|
|
242
243
|
* @param {React.SyntheticEvent} event The event source of the callback.
|
|
243
|
-
* @param {array}
|
|
244
|
-
* @param {array} isSelected `true` if the
|
|
244
|
+
* @param {array} itemId The itemId of the modified item.
|
|
245
|
+
* @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
|
|
245
246
|
*/
|
|
246
|
-
|
|
247
|
+
onItemSelectionToggle: _propTypes.default.func,
|
|
247
248
|
/**
|
|
248
249
|
* Callback fired when tree items are selected/deselected.
|
|
249
250
|
* @param {React.SyntheticEvent} event The event source of the callback
|
|
250
|
-
* @param {string[] | string}
|
|
251
|
+
* @param {string[] | string} itemIds The ids of the selected items.
|
|
251
252
|
* When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
|
|
252
253
|
*/
|
|
253
|
-
|
|
254
|
+
onSelectedItemsChange: _propTypes.default.func,
|
|
254
255
|
/**
|
|
255
|
-
* Selected
|
|
256
|
+
* Selected item ids. (Controlled)
|
|
256
257
|
* When `multiSelect` is true this takes an array of strings; when false (default) a string.
|
|
257
258
|
*/
|
|
258
|
-
|
|
259
|
+
selectedItems: _propTypes.default.any,
|
|
259
260
|
/**
|
|
260
261
|
* The props used for each component slot.
|
|
261
262
|
* @default {}
|
|
@@ -104,7 +104,8 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
|
|
|
104
104
|
*/
|
|
105
105
|
apiRef: _propTypes.default.shape({
|
|
106
106
|
current: _propTypes.default.shape({
|
|
107
|
-
|
|
107
|
+
focusItem: _propTypes.default.func.isRequired,
|
|
108
|
+
getItem: _propTypes.default.func.isRequired
|
|
108
109
|
})
|
|
109
110
|
}),
|
|
110
111
|
/**
|
|
@@ -117,17 +118,17 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
|
|
|
117
118
|
classes: _propTypes.default.object,
|
|
118
119
|
className: _propTypes.default.string,
|
|
119
120
|
/**
|
|
120
|
-
* Expanded
|
|
121
|
+
* Expanded item ids.
|
|
121
122
|
* Used when the item's expansion is not controlled.
|
|
122
123
|
* @default []
|
|
123
124
|
*/
|
|
124
|
-
|
|
125
|
+
defaultExpandedItems: _propTypes.default.arrayOf(_propTypes.default.string),
|
|
125
126
|
/**
|
|
126
|
-
* Selected
|
|
127
|
+
* Selected item ids. (Uncontrolled)
|
|
127
128
|
* When `multiSelect` is true this takes an array of strings; when false (default) a string.
|
|
128
129
|
* @default []
|
|
129
130
|
*/
|
|
130
|
-
|
|
131
|
+
defaultSelectedItems: _propTypes.default.any,
|
|
131
132
|
/**
|
|
132
133
|
* If `true`, will allow focus on disabled items.
|
|
133
134
|
* @default false
|
|
@@ -139,10 +140,10 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
|
|
|
139
140
|
*/
|
|
140
141
|
disableSelection: _propTypes.default.bool,
|
|
141
142
|
/**
|
|
142
|
-
* Expanded
|
|
143
|
+
* Expanded item ids.
|
|
143
144
|
* Used when the item's expansion is controlled.
|
|
144
145
|
*/
|
|
145
|
-
|
|
146
|
+
expandedItems: _propTypes.default.arrayOf(_propTypes.default.string),
|
|
146
147
|
/**
|
|
147
148
|
* This prop is used to help implement the accessibility logic.
|
|
148
149
|
* If you don't provide this prop. It falls back to a randomly generated id.
|
|
@@ -156,42 +157,42 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
|
|
|
156
157
|
/**
|
|
157
158
|
* Callback fired when tree items are expanded/collapsed.
|
|
158
159
|
* @param {React.SyntheticEvent} event The event source of the callback.
|
|
159
|
-
* @param {array}
|
|
160
|
+
* @param {array} itemIds The ids of the expanded items.
|
|
160
161
|
*/
|
|
161
|
-
|
|
162
|
+
onExpandedItemsChange: _propTypes.default.func,
|
|
162
163
|
/**
|
|
163
164
|
* Callback fired when a tree item is expanded or collapsed.
|
|
164
165
|
* @param {React.SyntheticEvent} event The event source of the callback.
|
|
165
|
-
* @param {array}
|
|
166
|
-
* @param {array} isExpanded `true` if the
|
|
166
|
+
* @param {array} itemId The itemId of the modified item.
|
|
167
|
+
* @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
|
|
167
168
|
*/
|
|
168
|
-
|
|
169
|
+
onItemExpansionToggle: _propTypes.default.func,
|
|
169
170
|
/**
|
|
170
171
|
* Callback fired when tree items are focused.
|
|
171
172
|
* @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
|
|
172
|
-
* @param {string}
|
|
173
|
-
* @param {string} value of the focused
|
|
173
|
+
* @param {string} itemId The id of the focused item.
|
|
174
|
+
* @param {string} value of the focused item.
|
|
174
175
|
*/
|
|
175
|
-
|
|
176
|
+
onItemFocus: _propTypes.default.func,
|
|
176
177
|
/**
|
|
177
178
|
* Callback fired when a tree item is selected or deselected.
|
|
178
179
|
* @param {React.SyntheticEvent} event The event source of the callback.
|
|
179
|
-
* @param {array}
|
|
180
|
-
* @param {array} isSelected `true` if the
|
|
180
|
+
* @param {array} itemId The itemId of the modified item.
|
|
181
|
+
* @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
|
|
181
182
|
*/
|
|
182
|
-
|
|
183
|
+
onItemSelectionToggle: _propTypes.default.func,
|
|
183
184
|
/**
|
|
184
185
|
* Callback fired when tree items are selected/deselected.
|
|
185
186
|
* @param {React.SyntheticEvent} event The event source of the callback
|
|
186
|
-
* @param {string[] | string}
|
|
187
|
+
* @param {string[] | string} itemIds The ids of the selected items.
|
|
187
188
|
* When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
|
|
188
189
|
*/
|
|
189
|
-
|
|
190
|
+
onSelectedItemsChange: _propTypes.default.func,
|
|
190
191
|
/**
|
|
191
|
-
* Selected
|
|
192
|
+
* Selected item ids. (Controlled)
|
|
192
193
|
* When `multiSelect` is true this takes an array of strings; when false (default) a string.
|
|
193
194
|
*/
|
|
194
|
-
|
|
195
|
+
selectedItems: _propTypes.default.any,
|
|
195
196
|
/**
|
|
196
197
|
* The props used for each component slot.
|
|
197
198
|
*/
|
|
@@ -12,6 +12,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
12
12
|
var _clsx = _interopRequireDefault(require("clsx"));
|
|
13
13
|
var _Collapse = _interopRequireDefault(require("@mui/material/Collapse"));
|
|
14
14
|
var _utils = require("@mui/base/utils");
|
|
15
|
+
var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
|
|
15
16
|
var _styles = require("@mui/material/styles");
|
|
16
17
|
var _unsupportedProp = _interopRequireDefault(require("@mui/utils/unsupportedProp"));
|
|
17
18
|
var _elementTypeAcceptingRef = _interopRequireDefault(require("@mui/utils/elementTypeAcceptingRef"));
|
|
@@ -20,8 +21,9 @@ var _TreeItemContent = require("./TreeItemContent");
|
|
|
20
21
|
var _treeItemClasses = require("./treeItemClasses");
|
|
21
22
|
var _useTreeViewContext = require("../internals/TreeViewProvider/useTreeViewContext");
|
|
22
23
|
var _icons = require("../icons");
|
|
24
|
+
var _TreeItem2Provider = require("../TreeItem2Provider");
|
|
23
25
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
24
|
-
const _excluded = ["children", "className", "slots", "slotProps", "ContentComponent", "ContentProps", "nodeId", "id", "label", "onClick", "onMouseDown"
|
|
26
|
+
const _excluded = ["children", "className", "slots", "slotProps", "ContentComponent", "ContentProps", "nodeId", "id", "label", "onClick", "onMouseDown"],
|
|
25
27
|
_excluded2 = ["ownerState"],
|
|
26
28
|
_excluded3 = ["ownerState"],
|
|
27
29
|
_excluded4 = ["ownerState"];
|
|
@@ -40,7 +42,7 @@ const useUtilityClasses = ownerState => {
|
|
|
40
42
|
disabled: ['disabled'],
|
|
41
43
|
iconContainer: ['iconContainer'],
|
|
42
44
|
label: ['label'],
|
|
43
|
-
|
|
45
|
+
groupTransition: ['groupTransition']
|
|
44
46
|
};
|
|
45
47
|
return (0, _base.unstable_composeClasses)(slots, _treeItemClasses.getTreeItemUtilityClass, classes);
|
|
46
48
|
};
|
|
@@ -124,8 +126,8 @@ const StyledTreeItemContent = (0, _styles.styled)(_TreeItemContent.TreeItemConte
|
|
|
124
126
|
}));
|
|
125
127
|
const TreeItemGroup = (0, _styles.styled)(_Collapse.default, {
|
|
126
128
|
name: 'MuiTreeItem',
|
|
127
|
-
slot: '
|
|
128
|
-
overridesResolver: (props, styles) => styles.
|
|
129
|
+
slot: 'GroupTransition',
|
|
130
|
+
overridesResolver: (props, styles) => styles.groupTransition
|
|
129
131
|
})({
|
|
130
132
|
margin: 0,
|
|
131
133
|
padding: 0,
|
|
@@ -152,18 +154,10 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
152
154
|
disabledItemsFocusable,
|
|
153
155
|
instance
|
|
154
156
|
} = (0, _useTreeViewContext.useTreeViewContext)();
|
|
155
|
-
const
|
|
157
|
+
const props = (0, _styles.useThemeProps)({
|
|
156
158
|
props: inProps,
|
|
157
159
|
name: 'MuiTreeItem'
|
|
158
160
|
});
|
|
159
|
-
const {
|
|
160
|
-
props,
|
|
161
|
-
ref,
|
|
162
|
-
wrapItem
|
|
163
|
-
} = runItemPlugins({
|
|
164
|
-
props: inPropsWithTheme,
|
|
165
|
-
ref: inRef
|
|
166
|
-
});
|
|
167
161
|
const {
|
|
168
162
|
children,
|
|
169
163
|
className,
|
|
@@ -175,16 +169,21 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
175
169
|
id,
|
|
176
170
|
label,
|
|
177
171
|
onClick,
|
|
178
|
-
onMouseDown
|
|
179
|
-
TransitionComponent = _Collapse.default,
|
|
180
|
-
TransitionProps
|
|
172
|
+
onMouseDown
|
|
181
173
|
} = props,
|
|
182
174
|
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
|
|
175
|
+
const {
|
|
176
|
+
contentRef,
|
|
177
|
+
rootRef
|
|
178
|
+
} = runItemPlugins(props);
|
|
179
|
+
const handleRootRef = (0, _useForkRef.default)(inRef, rootRef);
|
|
180
|
+
const handleContentRef = (0, _useForkRef.default)(ContentProps?.ref, contentRef);
|
|
183
181
|
const slots = {
|
|
184
182
|
expandIcon: inSlots?.expandIcon ?? contextIcons.slots.expandIcon ?? _icons.TreeViewExpandIcon,
|
|
185
183
|
collapseIcon: inSlots?.collapseIcon ?? contextIcons.slots.collapseIcon ?? _icons.TreeViewCollapseIcon,
|
|
186
184
|
endIcon: inSlots?.endIcon ?? contextIcons.slots.endIcon,
|
|
187
|
-
icon: inSlots?.icon
|
|
185
|
+
icon: inSlots?.icon,
|
|
186
|
+
groupTransition: inSlots?.groupTransition
|
|
188
187
|
};
|
|
189
188
|
const isExpandable = reactChildren => {
|
|
190
189
|
if (Array.isArray(reactChildren)) {
|
|
@@ -204,6 +203,19 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
204
203
|
disabled
|
|
205
204
|
});
|
|
206
205
|
const classes = useUtilityClasses(ownerState);
|
|
206
|
+
const GroupTransition = slots.groupTransition ?? undefined;
|
|
207
|
+
const groupTransitionProps = (0, _utils.useSlotProps)({
|
|
208
|
+
elementType: GroupTransition,
|
|
209
|
+
ownerState: {},
|
|
210
|
+
externalSlotProps: inSlotProps?.groupTransition,
|
|
211
|
+
additionalProps: {
|
|
212
|
+
unmountOnExit: true,
|
|
213
|
+
in: expanded,
|
|
214
|
+
component: 'ul',
|
|
215
|
+
role: 'group'
|
|
216
|
+
},
|
|
217
|
+
className: classes.groupTransition
|
|
218
|
+
});
|
|
207
219
|
const ExpansionIcon = expanded ? slots.collapseIcon : slots.expandIcon;
|
|
208
220
|
const _useSlotProps = (0, _utils.useSlotProps)({
|
|
209
221
|
elementType: ExpansionIcon,
|
|
@@ -257,55 +269,54 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
257
269
|
}
|
|
258
270
|
const canBeFocused = !disabled || disabledItemsFocusable;
|
|
259
271
|
if (!focused && canBeFocused && event.currentTarget === event.target) {
|
|
260
|
-
instance.
|
|
272
|
+
instance.focusItem(event, nodeId);
|
|
261
273
|
}
|
|
262
274
|
}
|
|
263
275
|
const idAttribute = instance.getTreeItemId(nodeId, id);
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
}))
|
|
305
|
-
})
|
|
306
|
-
return wrapItem(item);
|
|
276
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeItem2Provider.TreeItem2Provider, {
|
|
277
|
+
nodeId: nodeId,
|
|
278
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(TreeItemRoot, (0, _extends2.default)({
|
|
279
|
+
className: (0, _clsx.default)(classes.root, className),
|
|
280
|
+
role: "treeitem",
|
|
281
|
+
"aria-expanded": expandable ? expanded : undefined,
|
|
282
|
+
"aria-selected": ariaSelected,
|
|
283
|
+
"aria-disabled": disabled || undefined,
|
|
284
|
+
id: idAttribute,
|
|
285
|
+
tabIndex: -1
|
|
286
|
+
}, other, {
|
|
287
|
+
ownerState: ownerState,
|
|
288
|
+
onFocus: handleFocus,
|
|
289
|
+
ref: handleRootRef,
|
|
290
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(StyledTreeItemContent, (0, _extends2.default)({
|
|
291
|
+
as: ContentComponent,
|
|
292
|
+
classes: {
|
|
293
|
+
root: classes.content,
|
|
294
|
+
expanded: classes.expanded,
|
|
295
|
+
selected: classes.selected,
|
|
296
|
+
focused: classes.focused,
|
|
297
|
+
disabled: classes.disabled,
|
|
298
|
+
iconContainer: classes.iconContainer,
|
|
299
|
+
label: classes.label
|
|
300
|
+
},
|
|
301
|
+
label: label,
|
|
302
|
+
nodeId: nodeId,
|
|
303
|
+
onClick: onClick,
|
|
304
|
+
onMouseDown: onMouseDown,
|
|
305
|
+
icon: icon,
|
|
306
|
+
expansionIcon: expansionIcon,
|
|
307
|
+
displayIcon: displayIcon,
|
|
308
|
+
ownerState: ownerState
|
|
309
|
+
}, ContentProps, {
|
|
310
|
+
ref: handleContentRef
|
|
311
|
+
})), children && /*#__PURE__*/(0, _jsxRuntime.jsx)(TreeItemGroup, (0, _extends2.default)({
|
|
312
|
+
as: GroupTransition
|
|
313
|
+
}, groupTransitionProps, {
|
|
314
|
+
children: children
|
|
315
|
+
}))]
|
|
316
|
+
}))
|
|
317
|
+
});
|
|
307
318
|
});
|
|
308
|
-
TreeItem.propTypes = {
|
|
319
|
+
process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
|
|
309
320
|
// ----------------------------- Warning --------------------------------
|
|
310
321
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
311
322
|
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
@@ -329,12 +340,12 @@ TreeItem.propTypes = {
|
|
|
329
340
|
*/
|
|
330
341
|
ContentProps: _propTypes.default.object,
|
|
331
342
|
/**
|
|
332
|
-
* If `true`, the
|
|
343
|
+
* If `true`, the item is disabled.
|
|
333
344
|
* @default false
|
|
334
345
|
*/
|
|
335
346
|
disabled: _propTypes.default.bool,
|
|
336
347
|
/**
|
|
337
|
-
* The tree
|
|
348
|
+
* The tree item label.
|
|
338
349
|
*/
|
|
339
350
|
label: _propTypes.default.node,
|
|
340
351
|
/**
|
|
@@ -343,7 +354,7 @@ TreeItem.propTypes = {
|
|
|
343
354
|
nodeId: _propTypes.default.string.isRequired,
|
|
344
355
|
/**
|
|
345
356
|
* This prop isn't supported.
|
|
346
|
-
* Use the `
|
|
357
|
+
* Use the `onItemFocus` callback on the tree if you need to monitor a item's focus.
|
|
347
358
|
*/
|
|
348
359
|
onFocus: _unsupportedProp.default,
|
|
349
360
|
/**
|
|
@@ -359,16 +370,5 @@ TreeItem.propTypes = {
|
|
|
359
370
|
/**
|
|
360
371
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
361
372
|
*/
|
|
362
|
-
sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object])
|
|
363
|
-
|
|
364
|
-
* The component used for the transition.
|
|
365
|
-
* [Follow this guide](/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.
|
|
366
|
-
* @default Collapse
|
|
367
|
-
*/
|
|
368
|
-
TransitionComponent: _propTypes.default.elementType,
|
|
369
|
-
/**
|
|
370
|
-
* Props applied to the transition element.
|
|
371
|
-
* By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.
|
|
372
|
-
*/
|
|
373
|
-
TransitionProps: _propTypes.default.object
|
|
374
|
-
};
|
|
373
|
+
sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object])
|
|
374
|
+
} : void 0;
|