@mui/x-tree-view 7.20.0 → 7.21.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 +120 -31
- package/RichTreeView/RichTreeView.js +8 -8
- package/SimpleTreeView/SimpleTreeView.js +8 -8
- package/TreeItem/TreeItem.js +15 -14
- package/TreeItem/TreeItem.types.d.ts +6 -6
- package/TreeItem/TreeItemContent.d.ts +5 -5
- package/TreeItem/TreeItemContent.js +4 -4
- package/TreeItem/treeItemClasses.d.ts +1 -1
- package/TreeItem2/TreeItem2.types.d.ts +1 -1
- package/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js +7 -7
- package/TreeItem2Icon/TreeItem2Icon.types.d.ts +1 -1
- package/TreeView/TreeView.d.ts +1 -1
- package/TreeView/TreeView.js +8 -8
- package/index.js +1 -1
- package/internals/corePlugins/corePlugins.d.ts +1 -1
- package/internals/corePlugins/corePlugins.js +1 -1
- package/internals/corePlugins/useTreeViewId/useTreeViewId.js +3 -3
- package/internals/corePlugins/useTreeViewId/useTreeViewId.types.d.ts +1 -1
- package/internals/corePlugins/useTreeViewId/useTreeViewId.utils.d.ts +1 -1
- package/internals/corePlugins/useTreeViewId/useTreeViewId.utils.js +1 -1
- package/internals/models/treeView.d.ts +2 -2
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +2 -2
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +1 -1
- package/internals/plugins/useTreeViewIcons/useTreeViewIcons.types.d.ts +1 -1
- package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +2 -2
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +1 -1
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +3 -3
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +1 -1
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +1 -1
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +3 -3
- package/modern/RichTreeView/RichTreeView.js +8 -8
- package/modern/SimpleTreeView/SimpleTreeView.js +8 -8
- package/modern/TreeItem/TreeItem.js +15 -14
- package/modern/TreeItem/TreeItemContent.js +4 -4
- package/modern/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js +7 -7
- package/modern/TreeView/TreeView.js +8 -8
- package/modern/index.js +1 -1
- package/modern/internals/corePlugins/corePlugins.js +1 -1
- package/modern/internals/corePlugins/useTreeViewId/useTreeViewId.js +3 -3
- package/modern/internals/corePlugins/useTreeViewId/useTreeViewId.utils.js +1 -1
- package/modern/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +1 -1
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +3 -3
- package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +1 -1
- package/modern/useTreeItem2/useTreeItem2.js +11 -11
- package/node/RichTreeView/RichTreeView.js +8 -8
- package/node/SimpleTreeView/SimpleTreeView.js +8 -8
- package/node/TreeItem/TreeItem.js +15 -14
- package/node/TreeItem/TreeItemContent.js +4 -4
- package/node/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js +7 -7
- package/node/TreeView/TreeView.js +8 -8
- package/node/index.js +1 -1
- package/node/internals/corePlugins/corePlugins.js +1 -1
- package/node/internals/corePlugins/useTreeViewId/useTreeViewId.js +3 -3
- package/node/internals/corePlugins/useTreeViewId/useTreeViewId.utils.js +1 -1
- package/node/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +1 -1
- package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +3 -3
- package/node/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +1 -1
- package/node/useTreeItem2/useTreeItem2.js +11 -11
- package/package.json +2 -2
- package/useTreeItem2/useTreeItem2.js +11 -11
- package/useTreeItem2/useTreeItem2.types.d.ts +1 -1
|
@@ -110,7 +110,7 @@ process.env.NODE_ENV !== "production" ? TreeItemContent.propTypes = {
|
|
|
110
110
|
classes: PropTypes.object.isRequired,
|
|
111
111
|
className: PropTypes.string,
|
|
112
112
|
/**
|
|
113
|
-
* The icon to display next to the
|
|
113
|
+
* The icon to display next to the Tree Item's label. Either a parent or end icon.
|
|
114
114
|
*/
|
|
115
115
|
displayIcon: PropTypes.node,
|
|
116
116
|
dragAndDropOverlayProps: PropTypes.shape({
|
|
@@ -118,11 +118,11 @@ process.env.NODE_ENV !== "production" ? TreeItemContent.propTypes = {
|
|
|
118
118
|
style: PropTypes.object
|
|
119
119
|
}),
|
|
120
120
|
/**
|
|
121
|
-
* The icon to display next to the
|
|
121
|
+
* The icon to display next to the Tree Item's label. Either an expansion or collapse icon.
|
|
122
122
|
*/
|
|
123
123
|
expansionIcon: PropTypes.node,
|
|
124
124
|
/**
|
|
125
|
-
* The icon to display next to the
|
|
125
|
+
* The icon to display next to the Tree Item's label.
|
|
126
126
|
*/
|
|
127
127
|
icon: PropTypes.node,
|
|
128
128
|
/**
|
|
@@ -130,7 +130,7 @@ process.env.NODE_ENV !== "production" ? TreeItemContent.propTypes = {
|
|
|
130
130
|
*/
|
|
131
131
|
itemId: PropTypes.string.isRequired,
|
|
132
132
|
/**
|
|
133
|
-
* The
|
|
133
|
+
* The Tree Item label.
|
|
134
134
|
*/
|
|
135
135
|
label: PropTypes.node,
|
|
136
136
|
labelInputProps: PropTypes.shape({
|
|
@@ -26,7 +26,7 @@ const TreeItem2DragAndDropOverlayRoot = styled('div', {
|
|
|
26
26
|
style: {
|
|
27
27
|
marginLeft: 'calc(var(--TreeView-indentMultiplier) * var(--TreeView-itemDepth))',
|
|
28
28
|
borderRadius: theme.shape.borderRadius,
|
|
29
|
-
backgroundColor:
|
|
29
|
+
backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.dark} / ${0.15})` : alpha(theme.palette.primary.dark, 0.15)
|
|
30
30
|
}
|
|
31
31
|
}, {
|
|
32
32
|
props: {
|
|
@@ -34,9 +34,9 @@ const TreeItem2DragAndDropOverlayRoot = styled('div', {
|
|
|
34
34
|
},
|
|
35
35
|
style: _extends({
|
|
36
36
|
marginLeft: 'calc(var(--TreeView-indentMultiplier) * var(--TreeView-itemDepth))',
|
|
37
|
-
borderTop: `1px solid ${
|
|
37
|
+
borderTop: theme.vars ? `1px solid rgba(${theme.vars.palette.grey[900]} / ${0.6})` : `1px solid ${alpha(theme.palette.grey[900], 0.6)}`
|
|
38
38
|
}, theme.applyStyles('dark', {
|
|
39
|
-
borderTopColor:
|
|
39
|
+
borderTopColor: theme.vars ? `rgba(${theme.vars.palette.grey[100]} / ${0.6})` : alpha(theme.palette.grey[100], 0.6)
|
|
40
40
|
}))
|
|
41
41
|
}, {
|
|
42
42
|
props: {
|
|
@@ -44,9 +44,9 @@ const TreeItem2DragAndDropOverlayRoot = styled('div', {
|
|
|
44
44
|
},
|
|
45
45
|
style: _extends({
|
|
46
46
|
marginLeft: 'calc(var(--TreeView-indentMultiplier) * var(--TreeView-itemDepth))',
|
|
47
|
-
borderBottom: `1px solid ${
|
|
47
|
+
borderBottom: theme.vars ? `1px solid rgba(${theme.vars.palette.grey[900]} / ${0.6})` : `1px solid ${alpha(theme.palette.grey[900], 0.6)}`
|
|
48
48
|
}, theme.applyStyles('dark', {
|
|
49
|
-
borderBottomColor:
|
|
49
|
+
borderBottomColor: theme.vars ? `rgba(${theme.vars.palette.grey[100]} / ${0.6})` : alpha(theme.palette.grey[100], 0.6)
|
|
50
50
|
}))
|
|
51
51
|
}, {
|
|
52
52
|
props: {
|
|
@@ -54,9 +54,9 @@ const TreeItem2DragAndDropOverlayRoot = styled('div', {
|
|
|
54
54
|
},
|
|
55
55
|
style: _extends({
|
|
56
56
|
marginLeft: 'calc(var(--TreeView-indentMultiplier) * calc(var(--TreeView-itemDepth) - 1))',
|
|
57
|
-
borderBottom: `1px solid ${
|
|
57
|
+
borderBottom: theme.vars ? `1px solid rgba(${theme.vars.palette.grey[900]} / ${0.6})` : `1px solid ${alpha(theme.palette.grey[900], 0.6)}`
|
|
58
58
|
}, theme.applyStyles('dark', {
|
|
59
|
-
borderBottomColor:
|
|
59
|
+
borderBottomColor: theme.vars ? `rgba(${theme.vars.palette.grey[100]} / ${0.6})` : alpha(theme.palette.grey[100], 0.6)
|
|
60
60
|
}))
|
|
61
61
|
}]
|
|
62
62
|
}));
|
|
@@ -32,7 +32,7 @@ const warn = () => {
|
|
|
32
32
|
};
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
|
-
* This component has been deprecated in favor of the new
|
|
35
|
+
* This component has been deprecated in favor of the new Simple Tree View component.
|
|
36
36
|
* You can have a look at how to migrate to the new component in the v7 [migration guide](https://mui.com/x/migration/migration-tree-view-v6/#use-simpletreeview-instead-of-treeview)
|
|
37
37
|
*
|
|
38
38
|
* Demos:
|
|
@@ -82,7 +82,7 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
|
|
|
82
82
|
})
|
|
83
83
|
}),
|
|
84
84
|
/**
|
|
85
|
-
* If `true`, the
|
|
85
|
+
* If `true`, the Tree View renders a checkbox at the left of its label that allows selecting it.
|
|
86
86
|
* @default false
|
|
87
87
|
*/
|
|
88
88
|
checkboxSelection: PropTypes.bool,
|
|
@@ -152,39 +152,39 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
|
|
|
152
152
|
*/
|
|
153
153
|
multiSelect: PropTypes.bool,
|
|
154
154
|
/**
|
|
155
|
-
* Callback fired when
|
|
155
|
+
* Callback fired when Tree Items are expanded/collapsed.
|
|
156
156
|
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
157
157
|
* @param {array} itemIds The ids of the expanded items.
|
|
158
158
|
*/
|
|
159
159
|
onExpandedItemsChange: PropTypes.func,
|
|
160
160
|
/**
|
|
161
|
-
* Callback fired when the `content` slot of a given
|
|
161
|
+
* Callback fired when the `content` slot of a given Tree Item is clicked.
|
|
162
162
|
* @param {React.MouseEvent} event The DOM event that triggered the change.
|
|
163
163
|
* @param {string} itemId The id of the focused item.
|
|
164
164
|
*/
|
|
165
165
|
onItemClick: PropTypes.func,
|
|
166
166
|
/**
|
|
167
|
-
* Callback fired when a
|
|
167
|
+
* Callback fired when a Tree Item is expanded or collapsed.
|
|
168
168
|
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
169
169
|
* @param {array} itemId The itemId of the modified item.
|
|
170
170
|
* @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
|
|
171
171
|
*/
|
|
172
172
|
onItemExpansionToggle: PropTypes.func,
|
|
173
173
|
/**
|
|
174
|
-
* Callback fired when a given
|
|
174
|
+
* Callback fired when a given Tree Item is focused.
|
|
175
175
|
* @param {React.SyntheticEvent | null} event The DOM event that triggered the change. **Warning**: This is a generic event not a focus event.
|
|
176
176
|
* @param {string} itemId The id of the focused item.
|
|
177
177
|
*/
|
|
178
178
|
onItemFocus: PropTypes.func,
|
|
179
179
|
/**
|
|
180
|
-
* Callback fired when a
|
|
180
|
+
* Callback fired when a Tree Item is selected or deselected.
|
|
181
181
|
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
182
182
|
* @param {array} itemId The itemId of the modified item.
|
|
183
183
|
* @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
|
|
184
184
|
*/
|
|
185
185
|
onItemSelectionToggle: PropTypes.func,
|
|
186
186
|
/**
|
|
187
|
-
* Callback fired when
|
|
187
|
+
* Callback fired when Tree Items are selected/deselected.
|
|
188
188
|
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
189
189
|
* @param {string[] | string} itemIds The ids of the selected items.
|
|
190
190
|
* When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
|
package/modern/index.js
CHANGED
|
@@ -3,6 +3,6 @@ import { useTreeViewOptionalPlugins } from "./useTreeViewOptionalPlugins/index.j
|
|
|
3
3
|
import { useTreeViewId } from "./useTreeViewId/index.js";
|
|
4
4
|
/**
|
|
5
5
|
* Internal plugins that create the tools used by the other plugins.
|
|
6
|
-
* These plugins are used by the
|
|
6
|
+
* These plugins are used by the Tree View components.
|
|
7
7
|
*/
|
|
8
8
|
export const TREE_VIEW_CORE_PLUGINS = [useTreeViewInstanceEvents, useTreeViewOptionalPlugins, useTreeViewId];
|
|
@@ -6,10 +6,9 @@ export const useTreeViewId = ({
|
|
|
6
6
|
state,
|
|
7
7
|
setState
|
|
8
8
|
}) => {
|
|
9
|
-
const treeId = state.id.treeId;
|
|
10
9
|
React.useEffect(() => {
|
|
11
10
|
setState(prevState => {
|
|
12
|
-
if (prevState.id.treeId === params.id) {
|
|
11
|
+
if (prevState.id.treeId === params.id && prevState.id.treeId !== undefined) {
|
|
13
12
|
return prevState;
|
|
14
13
|
}
|
|
15
14
|
return _extends({}, prevState, {
|
|
@@ -19,6 +18,7 @@ export const useTreeViewId = ({
|
|
|
19
18
|
});
|
|
20
19
|
});
|
|
21
20
|
}, [setState, params.id]);
|
|
21
|
+
const treeId = params.id ?? state.id.treeId;
|
|
22
22
|
return {
|
|
23
23
|
getRootProps: () => ({
|
|
24
24
|
id: treeId
|
|
@@ -35,6 +35,6 @@ useTreeViewId.getInitialState = ({
|
|
|
35
35
|
id
|
|
36
36
|
}) => ({
|
|
37
37
|
id: {
|
|
38
|
-
treeId: id ??
|
|
38
|
+
treeId: id ?? undefined
|
|
39
39
|
}
|
|
40
40
|
});
|
|
@@ -5,7 +5,7 @@ export const createTreeViewDefaultId = () => {
|
|
|
5
5
|
};
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* Generate the id attribute (i.e.: the `id` attribute passed to the DOM element) of a
|
|
8
|
+
* Generate the id attribute (i.e.: the `id` attribute passed to the DOM element) of a Tree Item.
|
|
9
9
|
* If the user explicitly defined an id attribute, it will be returned.
|
|
10
10
|
* Otherwise, the method creates a unique id for the item based on the Tree View id attribute and the item `itemId`
|
|
11
11
|
* @param {object} params The parameters to determine the id attribute of the item.
|
|
@@ -25,7 +25,7 @@ export const useTreeViewJSXItems = ({
|
|
|
25
25
|
itemMetaMap: _extends({}, prevState.items.itemMetaMap, {
|
|
26
26
|
[item.id]: item
|
|
27
27
|
}),
|
|
28
|
-
// For
|
|
28
|
+
// For Simple Tree View, we don't have a proper `item` object, so we create a very basic one.
|
|
29
29
|
itemMap: _extends({}, prevState.items.itemMap, {
|
|
30
30
|
[item.id]: {
|
|
31
31
|
id: item.id,
|
package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js
CHANGED
|
@@ -4,7 +4,7 @@ import useEventCallback from '@mui/utils/useEventCallback';
|
|
|
4
4
|
import { getFirstNavigableItem, getLastNavigableItem, getNextNavigableItem, getPreviousNavigableItem, isTargetInDescendants } from "../../utils/tree.js";
|
|
5
5
|
import { hasPlugin } from "../../utils/plugins.js";
|
|
6
6
|
import { useTreeViewLabel } from "../useTreeViewLabel/index.js";
|
|
7
|
-
function
|
|
7
|
+
function isPrintableKey(string) {
|
|
8
8
|
return !!string && string.length === 1 && !!string.match(/\S/);
|
|
9
9
|
}
|
|
10
10
|
export const useTreeViewKeyboardNavigation = ({
|
|
@@ -227,7 +227,7 @@ export const useTreeViewKeyboardNavigation = ({
|
|
|
227
227
|
|
|
228
228
|
// Multi select behavior when pressing Ctrl + a
|
|
229
229
|
// Selects all the items
|
|
230
|
-
case
|
|
230
|
+
case String.fromCharCode(event.keyCode) === 'A' && ctrlPressed && params.multiSelect && !params.disableSelection:
|
|
231
231
|
{
|
|
232
232
|
instance.selectAllNavigableItems(event);
|
|
233
233
|
event.preventDefault();
|
|
@@ -236,7 +236,7 @@ export const useTreeViewKeyboardNavigation = ({
|
|
|
236
236
|
|
|
237
237
|
// Type-ahead
|
|
238
238
|
// TODO: Support typing multiple characters
|
|
239
|
-
case !ctrlPressed && !event.shiftKey &&
|
|
239
|
+
case !ctrlPressed && !event.shiftKey && isPrintableKey(key):
|
|
240
240
|
{
|
|
241
241
|
const matchingItem = getFirstMatchingItem(itemId, key);
|
|
242
242
|
if (matchingItem != null) {
|
|
@@ -73,7 +73,7 @@ useTreeViewLabel.getDefaultizedParams = ({
|
|
|
73
73
|
const canUseFeature = experimentalFeatures?.labelEditing;
|
|
74
74
|
if (process.env.NODE_ENV !== 'production') {
|
|
75
75
|
if (params.isItemEditable && !canUseFeature) {
|
|
76
|
-
warnOnce(['MUI X: The label editing feature requires the `labelEditing` experimental feature to be enabled.', 'You can do it by passing `experimentalFeatures={{ labelEditing: true}}` to the
|
|
76
|
+
warnOnce(['MUI X: The label editing feature requires the `labelEditing` experimental feature to be enabled.', 'You can do it by passing `experimentalFeatures={{ labelEditing: true}}` to the Rich Tree View Pro component.', 'Check the documentation for more details: https://mui.com/x/react-tree-view/rich-tree-view/editing/']);
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
return _extends({}, params, {
|
|
@@ -16,7 +16,6 @@ export const useTreeItem2 = parameters => {
|
|
|
16
16
|
indentationAtItemLevel
|
|
17
17
|
},
|
|
18
18
|
selection: {
|
|
19
|
-
multiSelect,
|
|
20
19
|
disableSelection,
|
|
21
20
|
checkboxSelection
|
|
22
21
|
},
|
|
@@ -84,7 +83,7 @@ export const useTreeItem2 = parameters => {
|
|
|
84
83
|
// the input that triggers the root blur can be either the relatedTarget (when entering editing state) or the target (when exiting editing state)
|
|
85
84
|
// when we enter the editing state, we focus the input -> we don't want to remove the focused item from the state
|
|
86
85
|
if (status.editing ||
|
|
87
|
-
// we can exit the editing state by clicking outside the input (within the
|
|
86
|
+
// we can exit the editing state by clicking outside the input (within the Tree Item) or by pressing Enter or Escape -> we don't want to remove the focused item from the state in these cases
|
|
88
87
|
// we can also exit the editing state by clicking on the root itself -> want to remove the focused item from the state in this case
|
|
89
88
|
event.relatedTarget && isTargetInDescendants(event.relatedTarget, rootElement) && (event.target && event.target?.dataset?.element === 'labelInput' && isTargetInDescendants(event.target, rootElement) || event.relatedTarget?.dataset?.element === 'labelInput')) {
|
|
90
89
|
return;
|
|
@@ -150,17 +149,18 @@ export const useTreeItem2 = parameters => {
|
|
|
150
149
|
};
|
|
151
150
|
const getRootProps = (externalProps = {}) => {
|
|
152
151
|
const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
|
|
152
|
+
|
|
153
|
+
// https://www.w3.org/WAI/ARIA/apg/patterns/treeview/
|
|
153
154
|
let ariaSelected;
|
|
154
|
-
if (
|
|
155
|
-
|
|
156
|
-
} else if (status.selected) {
|
|
157
|
-
/* single-selection trees unset aria-selected on un-selected items.
|
|
158
|
-
*
|
|
159
|
-
* If the tree does not support multiple selection, aria-selected
|
|
160
|
-
* is set to true for the selected item and it is not present on any other item in the tree.
|
|
161
|
-
* Source: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/
|
|
162
|
-
*/
|
|
155
|
+
if (status.selected) {
|
|
156
|
+
// - each selected node has aria-selected set to true.
|
|
163
157
|
ariaSelected = true;
|
|
158
|
+
} else if (disableSelection || status.disabled) {
|
|
159
|
+
// - if the tree contains nodes that are not selectable, aria-selected is not present on those nodes.
|
|
160
|
+
ariaSelected = undefined;
|
|
161
|
+
} else {
|
|
162
|
+
// - all nodes that are selectable but not selected have aria-selected set to false.
|
|
163
|
+
ariaSelected = false;
|
|
164
164
|
}
|
|
165
165
|
const props = _extends({}, externalEventHandlers, {
|
|
166
166
|
ref: handleRootRef,
|
|
@@ -58,7 +58,7 @@ const RichTreeView = exports.RichTreeView = /*#__PURE__*/React.forwardRef(functi
|
|
|
58
58
|
});
|
|
59
59
|
if (process.env.NODE_ENV !== 'production') {
|
|
60
60
|
if (props.children != null) {
|
|
61
|
-
(0, _warning.warnOnce)(['MUI X: The
|
|
61
|
+
(0, _warning.warnOnce)(['MUI X: The Rich Tree View component does not support JSX children.', 'If you want to add items, you need to use the `items` prop.', 'Check the documentation for more details: https://mui.com/x/react-tree-view/rich-tree-view/items/.']);
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
const {
|
|
@@ -115,7 +115,7 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
|
|
|
115
115
|
})
|
|
116
116
|
}),
|
|
117
117
|
/**
|
|
118
|
-
* If `true`, the
|
|
118
|
+
* If `true`, the Tree View renders a checkbox at the left of its label that allows selecting it.
|
|
119
119
|
* @default false
|
|
120
120
|
*/
|
|
121
121
|
checkboxSelection: _propTypes.default.bool,
|
|
@@ -218,26 +218,26 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
|
|
|
218
218
|
*/
|
|
219
219
|
multiSelect: _propTypes.default.bool,
|
|
220
220
|
/**
|
|
221
|
-
* Callback fired when
|
|
221
|
+
* Callback fired when Tree Items are expanded/collapsed.
|
|
222
222
|
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
223
223
|
* @param {array} itemIds The ids of the expanded items.
|
|
224
224
|
*/
|
|
225
225
|
onExpandedItemsChange: _propTypes.default.func,
|
|
226
226
|
/**
|
|
227
|
-
* Callback fired when the `content` slot of a given
|
|
227
|
+
* Callback fired when the `content` slot of a given Tree Item is clicked.
|
|
228
228
|
* @param {React.MouseEvent} event The DOM event that triggered the change.
|
|
229
229
|
* @param {string} itemId The id of the focused item.
|
|
230
230
|
*/
|
|
231
231
|
onItemClick: _propTypes.default.func,
|
|
232
232
|
/**
|
|
233
|
-
* Callback fired when a
|
|
233
|
+
* Callback fired when a Tree Item is expanded or collapsed.
|
|
234
234
|
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
235
235
|
* @param {array} itemId The itemId of the modified item.
|
|
236
236
|
* @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
|
|
237
237
|
*/
|
|
238
238
|
onItemExpansionToggle: _propTypes.default.func,
|
|
239
239
|
/**
|
|
240
|
-
* Callback fired when a given
|
|
240
|
+
* Callback fired when a given Tree Item is focused.
|
|
241
241
|
* @param {React.SyntheticEvent | null} event The DOM event that triggered the change. **Warning**: This is a generic event not a focus event.
|
|
242
242
|
* @param {string} itemId The id of the focused item.
|
|
243
243
|
*/
|
|
@@ -249,14 +249,14 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
|
|
|
249
249
|
*/
|
|
250
250
|
onItemLabelChange: _propTypes.default.func,
|
|
251
251
|
/**
|
|
252
|
-
* Callback fired when a
|
|
252
|
+
* Callback fired when a Tree Item is selected or deselected.
|
|
253
253
|
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
254
254
|
* @param {array} itemId The itemId of the modified item.
|
|
255
255
|
* @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
|
|
256
256
|
*/
|
|
257
257
|
onItemSelectionToggle: _propTypes.default.func,
|
|
258
258
|
/**
|
|
259
|
-
* Callback fired when
|
|
259
|
+
* Callback fired when Tree Items are selected/deselected.
|
|
260
260
|
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
261
261
|
* @param {string[] | string} itemIds The ids of the selected items.
|
|
262
262
|
* When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
|
|
@@ -60,7 +60,7 @@ const SimpleTreeView = exports.SimpleTreeView = /*#__PURE__*/React.forwardRef(fu
|
|
|
60
60
|
const ownerState = props;
|
|
61
61
|
if (process.env.NODE_ENV !== 'production') {
|
|
62
62
|
if (props.items != null) {
|
|
63
|
-
(0, _warning.warnOnce)(['MUI X: The
|
|
63
|
+
(0, _warning.warnOnce)(['MUI X: The Simple Tree View component does not support the `items` prop.', 'If you want to add items, you need to pass them as JSX children.', 'Check the documentation for more details: https://mui.com/x/react-tree-view/simple-tree-view/items/.']);
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
const {
|
|
@@ -111,7 +111,7 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
|
|
|
111
111
|
})
|
|
112
112
|
}),
|
|
113
113
|
/**
|
|
114
|
-
* If `true`, the
|
|
114
|
+
* If `true`, the Tree View renders a checkbox at the left of its label that allows selecting it.
|
|
115
115
|
* @default false
|
|
116
116
|
*/
|
|
117
117
|
checkboxSelection: _propTypes.default.bool,
|
|
@@ -181,39 +181,39 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
|
|
|
181
181
|
*/
|
|
182
182
|
multiSelect: _propTypes.default.bool,
|
|
183
183
|
/**
|
|
184
|
-
* Callback fired when
|
|
184
|
+
* Callback fired when Tree Items are expanded/collapsed.
|
|
185
185
|
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
186
186
|
* @param {array} itemIds The ids of the expanded items.
|
|
187
187
|
*/
|
|
188
188
|
onExpandedItemsChange: _propTypes.default.func,
|
|
189
189
|
/**
|
|
190
|
-
* Callback fired when the `content` slot of a given
|
|
190
|
+
* Callback fired when the `content` slot of a given Tree Item is clicked.
|
|
191
191
|
* @param {React.MouseEvent} event The DOM event that triggered the change.
|
|
192
192
|
* @param {string} itemId The id of the focused item.
|
|
193
193
|
*/
|
|
194
194
|
onItemClick: _propTypes.default.func,
|
|
195
195
|
/**
|
|
196
|
-
* Callback fired when a
|
|
196
|
+
* Callback fired when a Tree Item is expanded or collapsed.
|
|
197
197
|
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
198
198
|
* @param {array} itemId The itemId of the modified item.
|
|
199
199
|
* @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
|
|
200
200
|
*/
|
|
201
201
|
onItemExpansionToggle: _propTypes.default.func,
|
|
202
202
|
/**
|
|
203
|
-
* Callback fired when a given
|
|
203
|
+
* Callback fired when a given Tree Item is focused.
|
|
204
204
|
* @param {React.SyntheticEvent | null} event The DOM event that triggered the change. **Warning**: This is a generic event not a focus event.
|
|
205
205
|
* @param {string} itemId The id of the focused item.
|
|
206
206
|
*/
|
|
207
207
|
onItemFocus: _propTypes.default.func,
|
|
208
208
|
/**
|
|
209
|
-
* Callback fired when a
|
|
209
|
+
* Callback fired when a Tree Item is selected or deselected.
|
|
210
210
|
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
211
211
|
* @param {array} itemId The itemId of the modified item.
|
|
212
212
|
* @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
|
|
213
213
|
*/
|
|
214
214
|
onItemSelectionToggle: _propTypes.default.func,
|
|
215
215
|
/**
|
|
216
|
-
* Callback fired when
|
|
216
|
+
* Callback fired when Tree Items are selected/deselected.
|
|
217
217
|
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
218
218
|
* @param {string[] | string} itemIds The ids of the selected items.
|
|
219
219
|
* When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
|
|
@@ -189,7 +189,7 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
189
189
|
indentationAtItemLevel
|
|
190
190
|
},
|
|
191
191
|
selection: {
|
|
192
|
-
|
|
192
|
+
disableSelection
|
|
193
193
|
},
|
|
194
194
|
expansion: {
|
|
195
195
|
expansionTrigger
|
|
@@ -325,17 +325,18 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
325
325
|
}),
|
|
326
326
|
iconProps = (0, _objectWithoutPropertiesLoose2.default)(_useSlotProps3, _excluded4);
|
|
327
327
|
const icon = Icon ? /*#__PURE__*/(0, _jsxRuntime.jsx)(Icon, (0, _extends2.default)({}, iconProps)) : null;
|
|
328
|
+
|
|
329
|
+
// https://www.w3.org/WAI/ARIA/apg/patterns/treeview/
|
|
328
330
|
let ariaSelected;
|
|
329
|
-
if (
|
|
330
|
-
|
|
331
|
-
} else if (selected) {
|
|
332
|
-
/* single-selection trees unset aria-selected on un-selected items.
|
|
333
|
-
*
|
|
334
|
-
* If the tree does not support multiple selection, aria-selected
|
|
335
|
-
* is set to true for the selected item and it is not present on any other item in the tree.
|
|
336
|
-
* Source: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/
|
|
337
|
-
*/
|
|
331
|
+
if (selected) {
|
|
332
|
+
// - each selected node has aria-selected set to true.
|
|
338
333
|
ariaSelected = true;
|
|
334
|
+
} else if (disableSelection || disabled) {
|
|
335
|
+
// - if the tree contains nodes that are not selectable, aria-selected is not present on those nodes.
|
|
336
|
+
ariaSelected = undefined;
|
|
337
|
+
} else {
|
|
338
|
+
// - all nodes that are selectable but not selected have aria-selected set to false.
|
|
339
|
+
ariaSelected = false;
|
|
339
340
|
}
|
|
340
341
|
function handleFocus(event) {
|
|
341
342
|
const canBeFocused = !disabled || disabledItemsFocusable;
|
|
@@ -346,7 +347,7 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
346
347
|
function handleBlur(event) {
|
|
347
348
|
onBlur?.(event);
|
|
348
349
|
if (editing ||
|
|
349
|
-
// we can exit the editing state by clicking outside the input (within the
|
|
350
|
+
// we can exit the editing state by clicking outside the input (within the Tree Item) or by pressing Enter or Escape -> we don't want to remove the focused item from the state in these cases
|
|
350
351
|
// we can also exit the editing state by clicking on the root itself -> want to remove the focused item from the state in this case
|
|
351
352
|
event.relatedTarget && (0, _tree.isTargetInDescendants)(event.relatedTarget, rootRefObject.current) && (event.target && event.target?.dataset?.element === 'labelInput' && (0, _tree.isTargetInDescendants)(event.target, rootRefObject.current) || event.relatedTarget?.dataset?.element === 'labelInput')) {
|
|
352
353
|
return;
|
|
@@ -459,13 +460,13 @@ process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
|
|
|
459
460
|
className: _propTypes.default.string,
|
|
460
461
|
/**
|
|
461
462
|
* The component used to render the content of the item.
|
|
462
|
-
* @deprecated Consider using the
|
|
463
|
+
* @deprecated Consider using the `<TreeItem2 />` component or the `useTreeItem2` hook instead. For more details, see https://mui.com/x/react-tree-view/tree-item-customization/.
|
|
463
464
|
* @default TreeItemContent
|
|
464
465
|
*/
|
|
465
466
|
ContentComponent: _elementTypeAcceptingRef.default,
|
|
466
467
|
/**
|
|
467
468
|
* Props applied to ContentComponent.
|
|
468
|
-
* @deprecated Consider using the
|
|
469
|
+
* @deprecated Consider using the `<TreeItem2 />` component or the `useTreeItem2` hook instead. For more details, see https://mui.com/x/react-tree-view/tree-item-customization/.
|
|
469
470
|
*/
|
|
470
471
|
ContentProps: _propTypes.default.object,
|
|
471
472
|
/**
|
|
@@ -478,7 +479,7 @@ process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
|
|
|
478
479
|
*/
|
|
479
480
|
itemId: _propTypes.default.string.isRequired,
|
|
480
481
|
/**
|
|
481
|
-
* The
|
|
482
|
+
* The Tree Item label.
|
|
482
483
|
*/
|
|
483
484
|
label: _propTypes.default.node,
|
|
484
485
|
/**
|
|
@@ -118,7 +118,7 @@ process.env.NODE_ENV !== "production" ? TreeItemContent.propTypes = {
|
|
|
118
118
|
classes: _propTypes.default.object.isRequired,
|
|
119
119
|
className: _propTypes.default.string,
|
|
120
120
|
/**
|
|
121
|
-
* The icon to display next to the
|
|
121
|
+
* The icon to display next to the Tree Item's label. Either a parent or end icon.
|
|
122
122
|
*/
|
|
123
123
|
displayIcon: _propTypes.default.node,
|
|
124
124
|
dragAndDropOverlayProps: _propTypes.default.shape({
|
|
@@ -126,11 +126,11 @@ process.env.NODE_ENV !== "production" ? TreeItemContent.propTypes = {
|
|
|
126
126
|
style: _propTypes.default.object
|
|
127
127
|
}),
|
|
128
128
|
/**
|
|
129
|
-
* The icon to display next to the
|
|
129
|
+
* The icon to display next to the Tree Item's label. Either an expansion or collapse icon.
|
|
130
130
|
*/
|
|
131
131
|
expansionIcon: _propTypes.default.node,
|
|
132
132
|
/**
|
|
133
|
-
* The icon to display next to the
|
|
133
|
+
* The icon to display next to the Tree Item's label.
|
|
134
134
|
*/
|
|
135
135
|
icon: _propTypes.default.node,
|
|
136
136
|
/**
|
|
@@ -138,7 +138,7 @@ process.env.NODE_ENV !== "production" ? TreeItemContent.propTypes = {
|
|
|
138
138
|
*/
|
|
139
139
|
itemId: _propTypes.default.string.isRequired,
|
|
140
140
|
/**
|
|
141
|
-
* The
|
|
141
|
+
* The Tree Item label.
|
|
142
142
|
*/
|
|
143
143
|
label: _propTypes.default.node,
|
|
144
144
|
labelInputProps: _propTypes.default.shape({
|
|
@@ -34,7 +34,7 @@ const TreeItem2DragAndDropOverlayRoot = (0, _zeroStyled.styled)('div', {
|
|
|
34
34
|
style: {
|
|
35
35
|
marginLeft: 'calc(var(--TreeView-indentMultiplier) * var(--TreeView-itemDepth))',
|
|
36
36
|
borderRadius: theme.shape.borderRadius,
|
|
37
|
-
backgroundColor: (0, _styles.alpha)(
|
|
37
|
+
backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.dark} / ${0.15})` : (0, _styles.alpha)(theme.palette.primary.dark, 0.15)
|
|
38
38
|
}
|
|
39
39
|
}, {
|
|
40
40
|
props: {
|
|
@@ -42,9 +42,9 @@ const TreeItem2DragAndDropOverlayRoot = (0, _zeroStyled.styled)('div', {
|
|
|
42
42
|
},
|
|
43
43
|
style: (0, _extends2.default)({
|
|
44
44
|
marginLeft: 'calc(var(--TreeView-indentMultiplier) * var(--TreeView-itemDepth))',
|
|
45
|
-
borderTop: `1px solid ${(0, _styles.alpha)(
|
|
45
|
+
borderTop: theme.vars ? `1px solid rgba(${theme.vars.palette.grey[900]} / ${0.6})` : `1px solid ${(0, _styles.alpha)(theme.palette.grey[900], 0.6)}`
|
|
46
46
|
}, theme.applyStyles('dark', {
|
|
47
|
-
borderTopColor: (0, _styles.alpha)(
|
|
47
|
+
borderTopColor: theme.vars ? `rgba(${theme.vars.palette.grey[100]} / ${0.6})` : (0, _styles.alpha)(theme.palette.grey[100], 0.6)
|
|
48
48
|
}))
|
|
49
49
|
}, {
|
|
50
50
|
props: {
|
|
@@ -52,9 +52,9 @@ const TreeItem2DragAndDropOverlayRoot = (0, _zeroStyled.styled)('div', {
|
|
|
52
52
|
},
|
|
53
53
|
style: (0, _extends2.default)({
|
|
54
54
|
marginLeft: 'calc(var(--TreeView-indentMultiplier) * var(--TreeView-itemDepth))',
|
|
55
|
-
borderBottom: `1px solid ${(0, _styles.alpha)(
|
|
55
|
+
borderBottom: theme.vars ? `1px solid rgba(${theme.vars.palette.grey[900]} / ${0.6})` : `1px solid ${(0, _styles.alpha)(theme.palette.grey[900], 0.6)}`
|
|
56
56
|
}, theme.applyStyles('dark', {
|
|
57
|
-
borderBottomColor: (0, _styles.alpha)(
|
|
57
|
+
borderBottomColor: theme.vars ? `rgba(${theme.vars.palette.grey[100]} / ${0.6})` : (0, _styles.alpha)(theme.palette.grey[100], 0.6)
|
|
58
58
|
}))
|
|
59
59
|
}, {
|
|
60
60
|
props: {
|
|
@@ -62,9 +62,9 @@ const TreeItem2DragAndDropOverlayRoot = (0, _zeroStyled.styled)('div', {
|
|
|
62
62
|
},
|
|
63
63
|
style: (0, _extends2.default)({
|
|
64
64
|
marginLeft: 'calc(var(--TreeView-indentMultiplier) * calc(var(--TreeView-itemDepth) - 1))',
|
|
65
|
-
borderBottom: `1px solid ${(0, _styles.alpha)(
|
|
65
|
+
borderBottom: theme.vars ? `1px solid rgba(${theme.vars.palette.grey[900]} / ${0.6})` : `1px solid ${(0, _styles.alpha)(theme.palette.grey[900], 0.6)}`
|
|
66
66
|
}, theme.applyStyles('dark', {
|
|
67
|
-
borderBottomColor: (0, _styles.alpha)(
|
|
67
|
+
borderBottomColor: theme.vars ? `rgba(${theme.vars.palette.grey[100]} / ${0.6})` : (0, _styles.alpha)(theme.palette.grey[100], 0.6)
|
|
68
68
|
}))
|
|
69
69
|
}]
|
|
70
70
|
}));
|
|
@@ -39,7 +39,7 @@ const warn = () => {
|
|
|
39
39
|
};
|
|
40
40
|
|
|
41
41
|
/**
|
|
42
|
-
* This component has been deprecated in favor of the new
|
|
42
|
+
* This component has been deprecated in favor of the new Simple Tree View component.
|
|
43
43
|
* You can have a look at how to migrate to the new component in the v7 [migration guide](https://mui.com/x/migration/migration-tree-view-v6/#use-simpletreeview-instead-of-treeview)
|
|
44
44
|
*
|
|
45
45
|
* Demos:
|
|
@@ -89,7 +89,7 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
|
|
|
89
89
|
})
|
|
90
90
|
}),
|
|
91
91
|
/**
|
|
92
|
-
* If `true`, the
|
|
92
|
+
* If `true`, the Tree View renders a checkbox at the left of its label that allows selecting it.
|
|
93
93
|
* @default false
|
|
94
94
|
*/
|
|
95
95
|
checkboxSelection: _propTypes.default.bool,
|
|
@@ -159,39 +159,39 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
|
|
|
159
159
|
*/
|
|
160
160
|
multiSelect: _propTypes.default.bool,
|
|
161
161
|
/**
|
|
162
|
-
* Callback fired when
|
|
162
|
+
* Callback fired when Tree Items are expanded/collapsed.
|
|
163
163
|
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
164
164
|
* @param {array} itemIds The ids of the expanded items.
|
|
165
165
|
*/
|
|
166
166
|
onExpandedItemsChange: _propTypes.default.func,
|
|
167
167
|
/**
|
|
168
|
-
* Callback fired when the `content` slot of a given
|
|
168
|
+
* Callback fired when the `content` slot of a given Tree Item is clicked.
|
|
169
169
|
* @param {React.MouseEvent} event The DOM event that triggered the change.
|
|
170
170
|
* @param {string} itemId The id of the focused item.
|
|
171
171
|
*/
|
|
172
172
|
onItemClick: _propTypes.default.func,
|
|
173
173
|
/**
|
|
174
|
-
* Callback fired when a
|
|
174
|
+
* Callback fired when a Tree Item is expanded or collapsed.
|
|
175
175
|
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
176
176
|
* @param {array} itemId The itemId of the modified item.
|
|
177
177
|
* @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
|
|
178
178
|
*/
|
|
179
179
|
onItemExpansionToggle: _propTypes.default.func,
|
|
180
180
|
/**
|
|
181
|
-
* Callback fired when a given
|
|
181
|
+
* Callback fired when a given Tree Item is focused.
|
|
182
182
|
* @param {React.SyntheticEvent | null} event The DOM event that triggered the change. **Warning**: This is a generic event not a focus event.
|
|
183
183
|
* @param {string} itemId The id of the focused item.
|
|
184
184
|
*/
|
|
185
185
|
onItemFocus: _propTypes.default.func,
|
|
186
186
|
/**
|
|
187
|
-
* Callback fired when a
|
|
187
|
+
* Callback fired when a Tree Item is selected or deselected.
|
|
188
188
|
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
189
189
|
* @param {array} itemId The itemId of the modified item.
|
|
190
190
|
* @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
|
|
191
191
|
*/
|
|
192
192
|
onItemSelectionToggle: _propTypes.default.func,
|
|
193
193
|
/**
|
|
194
|
-
* Callback fired when
|
|
194
|
+
* Callback fired when Tree Items are selected/deselected.
|
|
195
195
|
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
196
196
|
* @param {string[] | string} itemIds The ids of the selected items.
|
|
197
197
|
* When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
|
package/node/index.js
CHANGED