@mui/x-tree-view 7.0.0-beta.7 → 7.1.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 +266 -12
- package/README.md +1 -1
- package/RichTreeView/RichTreeView.js +15 -17
- package/RichTreeView/RichTreeView.types.d.ts +1 -1
- package/SimpleTreeView/SimpleTreeView.js +3 -4
- package/SimpleTreeView/SimpleTreeView.plugins.d.ts +1 -1
- package/SimpleTreeView/SimpleTreeView.plugins.js +2 -2
- package/TreeItem/TreeItem.js +43 -35
- package/TreeItem/TreeItem.types.d.ts +3 -3
- package/TreeItem/TreeItemContent.d.ts +7 -7
- package/TreeItem/TreeItemContent.js +10 -10
- package/TreeItem/treeItemClasses.d.ts +1 -1
- package/TreeItem/useTreeItemState.d.ts +1 -1
- package/TreeItem/useTreeItemState.js +13 -13
- package/TreeItem2/TreeItem2.js +16 -17
- package/TreeItem2Icon/TreeItem2Icon.js +5 -6
- package/TreeItem2Icon/TreeItem2Icon.types.d.ts +4 -4
- package/TreeItem2Provider/TreeItem2Provider.js +3 -3
- package/TreeItem2Provider/TreeItem2Provider.types.d.ts +1 -1
- package/TreeView/TreeView.d.ts +1 -1
- package/TreeView/TreeView.js +1 -1
- package/hooks/useTreeItem2Utils/useTreeItem2Utils.d.ts +2 -2
- package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +12 -12
- package/hooks/useTreeViewApiRef.d.ts +1 -1
- package/index.js +1 -1
- package/internals/TreeViewProvider/DescendantProvider.d.ts +1 -1
- package/internals/TreeViewProvider/DescendantProvider.js +1 -1
- package/internals/hooks/useInstanceEventHandler.js +5 -10
- package/internals/index.d.ts +2 -2
- package/internals/models/plugin.d.ts +1 -1
- package/internals/plugins/defaultPlugins.d.ts +3 -3
- package/internals/plugins/defaultPlugins.js +2 -2
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +17 -24
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +6 -6
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +76 -58
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +9 -8
- package/internals/plugins/useTreeViewIcons/useTreeViewIcons.types.d.ts +6 -6
- package/internals/plugins/useTreeViewId/useTreeViewId.js +1 -1
- package/internals/plugins/useTreeViewId/useTreeViewId.types.d.ts +2 -2
- package/internals/plugins/useTreeViewItems/index.d.ts +2 -0
- package/internals/plugins/useTreeViewItems/index.js +1 -0
- package/internals/plugins/useTreeViewItems/useTreeViewItems.d.ts +3 -0
- package/{modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js → internals/plugins/useTreeViewItems/useTreeViewItems.js} +42 -33
- package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +99 -0
- package/internals/plugins/useTreeViewJSXItems/index.d.ts +2 -0
- package/internals/plugins/useTreeViewJSXItems/index.js +1 -0
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.d.ts +3 -0
- package/{modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js → internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js} +41 -40
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.types.d.ts +18 -0
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +85 -96
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +6 -3
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +44 -47
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +8 -8
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +7 -7
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +5 -5
- package/internals/useTreeView/useTreeView.js +5 -6
- package/internals/useTreeView/useTreeView.utils.d.ts +5 -5
- package/internals/useTreeView/useTreeView.utils.js +18 -18
- package/internals/utils/extractPluginParamsFromProps.js +2 -2
- package/internals/utils/utils.js +1 -0
- package/modern/RichTreeView/RichTreeView.js +11 -11
- package/modern/SimpleTreeView/SimpleTreeView.js +1 -1
- package/modern/SimpleTreeView/SimpleTreeView.plugins.js +2 -2
- package/modern/TreeItem/TreeItem.js +31 -22
- package/modern/TreeItem/TreeItemContent.js +10 -10
- package/modern/TreeItem/useTreeItemState.js +13 -13
- package/modern/TreeItem2/TreeItem2.js +11 -11
- package/modern/TreeItem2Provider/TreeItem2Provider.js +3 -3
- package/modern/TreeView/TreeView.js +1 -1
- package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +12 -12
- package/modern/index.js +1 -1
- package/modern/internals/TreeViewProvider/DescendantProvider.js +1 -1
- package/modern/internals/plugins/defaultPlugins.js +2 -2
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +14 -14
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +74 -53
- package/modern/internals/plugins/useTreeViewId/useTreeViewId.js +1 -1
- package/modern/internals/plugins/useTreeViewItems/index.js +1 -0
- package/{internals/plugins/useTreeViewNodes/useTreeViewNodes.js → modern/internals/plugins/useTreeViewItems/useTreeViewItems.js} +46 -41
- package/modern/internals/plugins/useTreeViewJSXItems/index.js +1 -0
- package/{internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js → modern/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js} +41 -41
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +85 -94
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +40 -40
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +5 -5
- package/modern/internals/useTreeView/useTreeView.js +3 -4
- package/modern/internals/useTreeView/useTreeView.utils.js +18 -18
- package/modern/internals/utils/utils.js +1 -0
- package/modern/useTreeItem2/useTreeItem2.js +23 -12
- package/node/RichTreeView/RichTreeView.js +11 -11
- package/node/SimpleTreeView/SimpleTreeView.js +1 -1
- package/node/SimpleTreeView/SimpleTreeView.plugins.js +2 -2
- package/node/TreeItem/TreeItem.js +31 -22
- package/node/TreeItem/TreeItemContent.js +10 -10
- package/node/TreeItem/useTreeItemState.js +13 -13
- package/node/TreeItem2/TreeItem2.js +11 -11
- package/node/TreeItem2Provider/TreeItem2Provider.js +3 -3
- package/node/TreeView/TreeView.js +1 -1
- package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +12 -12
- package/node/index.js +1 -1
- package/node/internals/TreeViewProvider/DescendantProvider.js +1 -1
- package/node/internals/plugins/defaultPlugins.js +2 -2
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +14 -14
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +74 -53
- package/node/internals/plugins/useTreeViewId/useTreeViewId.js +1 -1
- package/node/internals/plugins/useTreeViewItems/index.js +12 -0
- package/node/internals/plugins/{useTreeViewNodes/useTreeViewNodes.js → useTreeViewItems/useTreeViewItems.js} +44 -35
- package/node/internals/plugins/useTreeViewJSXItems/index.js +12 -0
- package/node/internals/plugins/{useTreeViewJSXNodes/useTreeViewJSXNodes.js → useTreeViewJSXItems/useTreeViewJSXItems.js} +43 -42
- package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +84 -93
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +39 -39
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +5 -5
- package/node/internals/useTreeView/useTreeView.js +3 -4
- package/node/internals/useTreeView/useTreeView.utils.js +23 -23
- package/node/internals/utils/utils.js +1 -0
- package/node/useTreeItem2/useTreeItem2.js +23 -12
- package/package.json +5 -5
- package/useTreeItem2/useTreeItem2.d.ts +1 -1
- package/useTreeItem2/useTreeItem2.js +26 -18
- package/useTreeItem2/useTreeItem2.types.d.ts +9 -7
- package/internals/plugins/useTreeViewJSXNodes/index.d.ts +0 -2
- package/internals/plugins/useTreeViewJSXNodes/index.js +0 -1
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.d.ts +0 -3
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.d.ts +0 -18
- package/internals/plugins/useTreeViewNodes/index.d.ts +0 -2
- package/internals/plugins/useTreeViewNodes/index.js +0 -1
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.d.ts +0 -3
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +0 -88
- package/modern/internals/plugins/useTreeViewJSXNodes/index.js +0 -1
- package/modern/internals/plugins/useTreeViewNodes/index.js +0 -1
- package/node/internals/plugins/useTreeViewJSXNodes/index.js +0 -12
- package/node/internals/plugins/useTreeViewNodes/index.js +0 -12
- /package/internals/plugins/{useTreeViewJSXNodes/useTreeViewJSXNodes.types.js → useTreeViewItems/useTreeViewItems.types.js} +0 -0
- /package/internals/plugins/{useTreeViewNodes/useTreeViewNodes.types.js → useTreeViewJSXItems/useTreeViewJSXItems.types.js} +0 -0
- /package/modern/internals/plugins/{useTreeViewJSXNodes/useTreeViewJSXNodes.types.js → useTreeViewItems/useTreeViewItems.types.js} +0 -0
- /package/modern/internals/plugins/{useTreeViewNodes/useTreeViewNodes.types.js → useTreeViewJSXItems/useTreeViewJSXItems.types.js} +0 -0
- /package/node/internals/plugins/{useTreeViewJSXNodes/useTreeViewJSXNodes.types.js → useTreeViewItems/useTreeViewItems.types.js} +0 -0
- /package/node/internals/plugins/{useTreeViewNodes/useTreeViewNodes.types.js → useTreeViewJSXItems/useTreeViewJSXItems.types.js} +0 -0
|
@@ -15,7 +15,7 @@ export const useTreeItem2 = parameters => {
|
|
|
15
15
|
} = useTreeViewContext();
|
|
16
16
|
const {
|
|
17
17
|
id,
|
|
18
|
-
|
|
18
|
+
itemId,
|
|
19
19
|
label,
|
|
20
20
|
children,
|
|
21
21
|
rootRef
|
|
@@ -28,25 +28,34 @@ export const useTreeItem2 = parameters => {
|
|
|
28
28
|
interactions,
|
|
29
29
|
status
|
|
30
30
|
} = useTreeItem2Utils({
|
|
31
|
-
|
|
31
|
+
itemId,
|
|
32
32
|
children
|
|
33
33
|
});
|
|
34
|
-
const idAttribute = instance.getTreeItemId(
|
|
34
|
+
const idAttribute = instance.getTreeItemId(itemId, id);
|
|
35
35
|
const handleRootRef = useForkRef(rootRef, pluginRootRef);
|
|
36
36
|
const createRootHandleFocus = otherHandlers => event => {
|
|
37
37
|
otherHandlers.onFocus?.(event);
|
|
38
38
|
if (event.defaultMuiPrevented) {
|
|
39
39
|
return;
|
|
40
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
41
|
const canBeFocused = !status.disabled || disabledItemsFocusable;
|
|
47
42
|
if (!status.focused && canBeFocused && event.currentTarget === event.target) {
|
|
48
|
-
instance.focusItem(event,
|
|
43
|
+
instance.focusItem(event, itemId);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const createRootHandleBlur = otherHandlers => event => {
|
|
47
|
+
otherHandlers.onBlur?.(event);
|
|
48
|
+
if (event.defaultMuiPrevented) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
instance.removeFocusedItem();
|
|
52
|
+
};
|
|
53
|
+
const createRootHandleKeyDown = otherHandlers => event => {
|
|
54
|
+
otherHandlers.onKeyDown?.(event);
|
|
55
|
+
if (event.defaultMuiPrevented) {
|
|
56
|
+
return;
|
|
49
57
|
}
|
|
58
|
+
instance.handleItemKeyDown(event, itemId);
|
|
50
59
|
};
|
|
51
60
|
const createContentHandleClick = otherHandlers => event => {
|
|
52
61
|
otherHandlers.onClick?.(event);
|
|
@@ -76,7 +85,7 @@ export const useTreeItem2 = parameters => {
|
|
|
76
85
|
/* single-selection trees unset aria-selected on un-selected items.
|
|
77
86
|
*
|
|
78
87
|
* If the tree does not support multiple selection, aria-selected
|
|
79
|
-
* is set to true for the selected
|
|
88
|
+
* is set to true for the selected item and it is not present on any other item in the tree.
|
|
80
89
|
* Source: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/
|
|
81
90
|
*/
|
|
82
91
|
ariaSelected = true;
|
|
@@ -84,13 +93,15 @@ export const useTreeItem2 = parameters => {
|
|
|
84
93
|
return _extends({}, externalEventHandlers, {
|
|
85
94
|
ref: handleRootRef,
|
|
86
95
|
role: 'treeitem',
|
|
87
|
-
tabIndex: -1,
|
|
96
|
+
tabIndex: instance.canItemBeTabbed(itemId) ? 0 : -1,
|
|
88
97
|
id: idAttribute,
|
|
89
98
|
'aria-expanded': status.expandable ? status.expanded : undefined,
|
|
90
99
|
'aria-selected': ariaSelected,
|
|
91
100
|
'aria-disabled': status.disabled || undefined
|
|
92
101
|
}, externalProps, {
|
|
93
|
-
onFocus: createRootHandleFocus(externalEventHandlers)
|
|
102
|
+
onFocus: createRootHandleFocus(externalEventHandlers),
|
|
103
|
+
onBlur: createRootHandleBlur(externalEventHandlers),
|
|
104
|
+
onKeyDown: createRootHandleKeyDown(externalEventHandlers)
|
|
94
105
|
});
|
|
95
106
|
};
|
|
96
107
|
const getContentProps = (externalProps = {}) => {
|
|
@@ -45,7 +45,7 @@ function WrappedTreeItem({
|
|
|
45
45
|
slotProps,
|
|
46
46
|
label,
|
|
47
47
|
id,
|
|
48
|
-
|
|
48
|
+
itemId,
|
|
49
49
|
children
|
|
50
50
|
}) {
|
|
51
51
|
const Item = slots?.item ?? _TreeItem.TreeItem;
|
|
@@ -53,12 +53,12 @@ function WrappedTreeItem({
|
|
|
53
53
|
elementType: Item,
|
|
54
54
|
externalSlotProps: slotProps?.item,
|
|
55
55
|
additionalProps: {
|
|
56
|
-
|
|
56
|
+
itemId,
|
|
57
57
|
id,
|
|
58
58
|
label
|
|
59
59
|
},
|
|
60
60
|
ownerState: {
|
|
61
|
-
|
|
61
|
+
itemId,
|
|
62
62
|
label
|
|
63
63
|
}
|
|
64
64
|
});
|
|
@@ -66,7 +66,7 @@ function WrappedTreeItem({
|
|
|
66
66
|
children: children
|
|
67
67
|
}));
|
|
68
68
|
}
|
|
69
|
-
const childrenWarning = (0, _warning.buildWarning)(['MUI X: The `RichTreeView` 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://
|
|
69
|
+
const childrenWarning = (0, _warning.buildWarning)(['MUI X: The `RichTreeView` 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/']);
|
|
70
70
|
|
|
71
71
|
/**
|
|
72
72
|
*
|
|
@@ -113,10 +113,10 @@ const RichTreeView = exports.RichTreeView = /*#__PURE__*/React.forwardRef(functi
|
|
|
113
113
|
getSlotProps: getRootProps,
|
|
114
114
|
ownerState: props
|
|
115
115
|
});
|
|
116
|
-
const
|
|
117
|
-
const
|
|
116
|
+
const itemsToRender = instance.getItemsToRender();
|
|
117
|
+
const renderItem = ({
|
|
118
118
|
label,
|
|
119
|
-
|
|
119
|
+
itemId,
|
|
120
120
|
id,
|
|
121
121
|
children
|
|
122
122
|
}) => {
|
|
@@ -125,14 +125,14 @@ const RichTreeView = exports.RichTreeView = /*#__PURE__*/React.forwardRef(functi
|
|
|
125
125
|
slotProps: slotProps,
|
|
126
126
|
label: label,
|
|
127
127
|
id: id,
|
|
128
|
-
|
|
129
|
-
children: children?.map(
|
|
130
|
-
},
|
|
128
|
+
itemId: itemId,
|
|
129
|
+
children: children?.map(renderItem)
|
|
130
|
+
}, itemId);
|
|
131
131
|
};
|
|
132
132
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewProvider.TreeViewProvider, {
|
|
133
133
|
value: contextValue,
|
|
134
134
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Root, (0, _extends2.default)({}, rootProps, {
|
|
135
|
-
children:
|
|
135
|
+
children: itemsToRender.map(renderItem)
|
|
136
136
|
}))
|
|
137
137
|
});
|
|
138
138
|
});
|
|
@@ -40,7 +40,7 @@ const SimpleTreeViewRoot = exports.SimpleTreeViewRoot = (0, _styles.styled)('ul'
|
|
|
40
40
|
outline: 0
|
|
41
41
|
});
|
|
42
42
|
const EMPTY_ITEMS = [];
|
|
43
|
-
const itemsPropWarning = (0, _warning.buildWarning)(['MUI X: The `SimpleTreeView` 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://
|
|
43
|
+
const itemsPropWarning = (0, _warning.buildWarning)(['MUI X: The `SimpleTreeView` 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/']);
|
|
44
44
|
|
|
45
45
|
/**
|
|
46
46
|
*
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.SIMPLE_TREE_VIEW_PLUGINS = void 0;
|
|
7
7
|
var _defaultPlugins = require("../internals/plugins/defaultPlugins");
|
|
8
|
-
var
|
|
9
|
-
const SIMPLE_TREE_VIEW_PLUGINS = exports.SIMPLE_TREE_VIEW_PLUGINS = [..._defaultPlugins.DEFAULT_TREE_VIEW_PLUGINS,
|
|
8
|
+
var _useTreeViewJSXItems = require("../internals/plugins/useTreeViewJSXItems");
|
|
9
|
+
const SIMPLE_TREE_VIEW_PLUGINS = exports.SIMPLE_TREE_VIEW_PLUGINS = [..._defaultPlugins.DEFAULT_TREE_VIEW_PLUGINS, _useTreeViewJSXItems.useTreeViewJSXItems];
|
|
10
10
|
|
|
11
11
|
// We can't infer this type from the plugin, otherwise we would lose the generics.
|
|
@@ -23,7 +23,7 @@ var _useTreeViewContext = require("../internals/TreeViewProvider/useTreeViewCont
|
|
|
23
23
|
var _icons = require("../icons");
|
|
24
24
|
var _TreeItem2Provider = require("../TreeItem2Provider");
|
|
25
25
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
26
|
-
const _excluded = ["children", "className", "slots", "slotProps", "ContentComponent", "ContentProps", "
|
|
26
|
+
const _excluded = ["children", "className", "slots", "slotProps", "ContentComponent", "ContentProps", "itemId", "id", "label", "onClick", "onMouseDown", "onFocus", "onBlur", "onKeyDown"],
|
|
27
27
|
_excluded2 = ["ownerState"],
|
|
28
28
|
_excluded3 = ["ownerState"],
|
|
29
29
|
_excluded4 = ["ownerState"];
|
|
@@ -165,11 +165,13 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
165
165
|
slotProps: inSlotProps,
|
|
166
166
|
ContentComponent = _TreeItemContent.TreeItemContent,
|
|
167
167
|
ContentProps,
|
|
168
|
-
|
|
168
|
+
itemId,
|
|
169
169
|
id,
|
|
170
170
|
label,
|
|
171
171
|
onClick,
|
|
172
|
-
onMouseDown
|
|
172
|
+
onMouseDown,
|
|
173
|
+
onBlur,
|
|
174
|
+
onKeyDown
|
|
173
175
|
} = props,
|
|
174
176
|
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
|
|
175
177
|
const {
|
|
@@ -192,10 +194,10 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
192
194
|
return Boolean(reactChildren);
|
|
193
195
|
};
|
|
194
196
|
const expandable = isExpandable(children);
|
|
195
|
-
const expanded = instance.
|
|
196
|
-
const focused = instance.
|
|
197
|
-
const selected = instance.
|
|
198
|
-
const disabled = instance.
|
|
197
|
+
const expanded = instance.isItemExpanded(itemId);
|
|
198
|
+
const focused = instance.isItemFocused(itemId);
|
|
199
|
+
const selected = instance.isItemSelected(itemId);
|
|
200
|
+
const disabled = instance.isItemDisabled(itemId);
|
|
199
201
|
const ownerState = (0, _extends2.default)({}, props, {
|
|
200
202
|
expanded,
|
|
201
203
|
focused,
|
|
@@ -257,24 +259,29 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
257
259
|
/* single-selection trees unset aria-selected on un-selected items.
|
|
258
260
|
*
|
|
259
261
|
* If the tree does not support multiple selection, aria-selected
|
|
260
|
-
* is set to true for the selected
|
|
262
|
+
* is set to true for the selected item and it is not present on any other item in the tree.
|
|
261
263
|
* Source: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/
|
|
262
264
|
*/
|
|
263
265
|
ariaSelected = true;
|
|
264
266
|
}
|
|
265
267
|
function handleFocus(event) {
|
|
266
|
-
// DOM focus stays on the tree which manages focus with aria-activedescendant
|
|
267
|
-
if (event.target === event.currentTarget) {
|
|
268
|
-
instance.focusRoot();
|
|
269
|
-
}
|
|
270
268
|
const canBeFocused = !disabled || disabledItemsFocusable;
|
|
271
269
|
if (!focused && canBeFocused && event.currentTarget === event.target) {
|
|
272
|
-
instance.focusItem(event,
|
|
270
|
+
instance.focusItem(event, itemId);
|
|
273
271
|
}
|
|
274
272
|
}
|
|
275
|
-
|
|
273
|
+
function handleBlur(event) {
|
|
274
|
+
onBlur?.(event);
|
|
275
|
+
instance.removeFocusedItem();
|
|
276
|
+
}
|
|
277
|
+
const handleKeyDown = event => {
|
|
278
|
+
onKeyDown?.(event);
|
|
279
|
+
instance.handleItemKeyDown(event, itemId);
|
|
280
|
+
};
|
|
281
|
+
const idAttribute = instance.getTreeItemId(itemId, id);
|
|
282
|
+
const tabIndex = instance.canItemBeTabbed(itemId) ? 0 : -1;
|
|
276
283
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeItem2Provider.TreeItem2Provider, {
|
|
277
|
-
|
|
284
|
+
itemId: itemId,
|
|
278
285
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(TreeItemRoot, (0, _extends2.default)({
|
|
279
286
|
className: (0, _clsx.default)(classes.root, className),
|
|
280
287
|
role: "treeitem",
|
|
@@ -282,10 +289,12 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
282
289
|
"aria-selected": ariaSelected,
|
|
283
290
|
"aria-disabled": disabled || undefined,
|
|
284
291
|
id: idAttribute,
|
|
285
|
-
tabIndex:
|
|
292
|
+
tabIndex: tabIndex
|
|
286
293
|
}, other, {
|
|
287
294
|
ownerState: ownerState,
|
|
288
295
|
onFocus: handleFocus,
|
|
296
|
+
onBlur: handleBlur,
|
|
297
|
+
onKeyDown: handleKeyDown,
|
|
289
298
|
ref: handleRootRef,
|
|
290
299
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(StyledTreeItemContent, (0, _extends2.default)({
|
|
291
300
|
as: ContentComponent,
|
|
@@ -299,7 +308,7 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
299
308
|
label: classes.label
|
|
300
309
|
},
|
|
301
310
|
label: label,
|
|
302
|
-
|
|
311
|
+
itemId: itemId,
|
|
303
312
|
onClick: onClick,
|
|
304
313
|
onMouseDown: onMouseDown,
|
|
305
314
|
icon: icon,
|
|
@@ -331,7 +340,7 @@ process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
|
|
|
331
340
|
classes: _propTypes.default.object,
|
|
332
341
|
className: _propTypes.default.string,
|
|
333
342
|
/**
|
|
334
|
-
* The component used
|
|
343
|
+
* The component used to render the content of the item.
|
|
335
344
|
* @default TreeItemContent
|
|
336
345
|
*/
|
|
337
346
|
ContentComponent: _elementTypeAcceptingRef.default,
|
|
@@ -345,13 +354,13 @@ process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
|
|
|
345
354
|
*/
|
|
346
355
|
disabled: _propTypes.default.bool,
|
|
347
356
|
/**
|
|
348
|
-
* The
|
|
357
|
+
* The id of the item.
|
|
349
358
|
*/
|
|
350
|
-
|
|
359
|
+
itemId: _propTypes.default.string.isRequired,
|
|
351
360
|
/**
|
|
352
|
-
* The
|
|
361
|
+
* The tree item label.
|
|
353
362
|
*/
|
|
354
|
-
|
|
363
|
+
label: _propTypes.default.node,
|
|
355
364
|
/**
|
|
356
365
|
* This prop isn't supported.
|
|
357
366
|
* Use the `onItemFocus` callback on the tree if you need to monitor a item's focus.
|
|
@@ -12,7 +12,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
12
12
|
var _clsx = _interopRequireDefault(require("clsx"));
|
|
13
13
|
var _useTreeItemState = require("./useTreeItemState");
|
|
14
14
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
|
-
const _excluded = ["classes", "className", "displayIcon", "expansionIcon", "icon", "label", "
|
|
15
|
+
const _excluded = ["classes", "className", "displayIcon", "expansionIcon", "icon", "label", "itemId", "onClick", "onMouseDown"];
|
|
16
16
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
17
17
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
18
18
|
/**
|
|
@@ -26,7 +26,7 @@ const TreeItemContent = exports.TreeItemContent = /*#__PURE__*/React.forwardRef(
|
|
|
26
26
|
expansionIcon,
|
|
27
27
|
icon: iconProp,
|
|
28
28
|
label,
|
|
29
|
-
|
|
29
|
+
itemId,
|
|
30
30
|
onClick,
|
|
31
31
|
onMouseDown
|
|
32
32
|
} = props,
|
|
@@ -39,7 +39,7 @@ const TreeItemContent = exports.TreeItemContent = /*#__PURE__*/React.forwardRef(
|
|
|
39
39
|
handleExpansion,
|
|
40
40
|
handleSelection,
|
|
41
41
|
preventSelection
|
|
42
|
-
} = (0, _useTreeItemState.useTreeItemState)(
|
|
42
|
+
} = (0, _useTreeItemState.useTreeItemState)(itemId);
|
|
43
43
|
const icon = iconProp || expansionIcon || displayIcon;
|
|
44
44
|
const handleMouseDown = event => {
|
|
45
45
|
preventSelection(event);
|
|
@@ -83,23 +83,23 @@ process.env.NODE_ENV !== "production" ? TreeItemContent.propTypes = {
|
|
|
83
83
|
classes: _propTypes.default.object.isRequired,
|
|
84
84
|
className: _propTypes.default.string,
|
|
85
85
|
/**
|
|
86
|
-
* The icon to display next to the tree
|
|
86
|
+
* The icon to display next to the tree item's label. Either a parent or end icon.
|
|
87
87
|
*/
|
|
88
88
|
displayIcon: _propTypes.default.node,
|
|
89
89
|
/**
|
|
90
|
-
* The icon to display next to the tree
|
|
90
|
+
* The icon to display next to the tree item's label. Either an expansion or collapse icon.
|
|
91
91
|
*/
|
|
92
92
|
expansionIcon: _propTypes.default.node,
|
|
93
93
|
/**
|
|
94
|
-
* The icon to display next to the tree
|
|
94
|
+
* The icon to display next to the tree item's label.
|
|
95
95
|
*/
|
|
96
96
|
icon: _propTypes.default.node,
|
|
97
97
|
/**
|
|
98
|
-
* The
|
|
98
|
+
* The id of the item.
|
|
99
99
|
*/
|
|
100
|
-
|
|
100
|
+
itemId: _propTypes.default.string.isRequired,
|
|
101
101
|
/**
|
|
102
|
-
* The
|
|
102
|
+
* The tree item label.
|
|
103
103
|
*/
|
|
104
|
-
|
|
104
|
+
label: _propTypes.default.node
|
|
105
105
|
} : void 0;
|
|
@@ -5,47 +5,47 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.useTreeItemState = useTreeItemState;
|
|
7
7
|
var _useTreeViewContext = require("../internals/TreeViewProvider/useTreeViewContext");
|
|
8
|
-
function useTreeItemState(
|
|
8
|
+
function useTreeItemState(itemId) {
|
|
9
9
|
const {
|
|
10
10
|
instance,
|
|
11
11
|
selection: {
|
|
12
12
|
multiSelect
|
|
13
13
|
}
|
|
14
14
|
} = (0, _useTreeViewContext.useTreeViewContext)();
|
|
15
|
-
const expandable = instance.
|
|
16
|
-
const expanded = instance.
|
|
17
|
-
const focused = instance.
|
|
18
|
-
const selected = instance.
|
|
19
|
-
const disabled = instance.
|
|
15
|
+
const expandable = instance.isItemExpandable(itemId);
|
|
16
|
+
const expanded = instance.isItemExpanded(itemId);
|
|
17
|
+
const focused = instance.isItemFocused(itemId);
|
|
18
|
+
const selected = instance.isItemSelected(itemId);
|
|
19
|
+
const disabled = instance.isItemDisabled(itemId);
|
|
20
20
|
const handleExpansion = event => {
|
|
21
21
|
if (!disabled) {
|
|
22
22
|
if (!focused) {
|
|
23
|
-
instance.focusItem(event,
|
|
23
|
+
instance.focusItem(event, itemId);
|
|
24
24
|
}
|
|
25
25
|
const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
|
|
26
26
|
|
|
27
27
|
// If already expanded and trying to toggle selection don't close
|
|
28
|
-
if (expandable && !(multiple && instance.
|
|
29
|
-
instance.
|
|
28
|
+
if (expandable && !(multiple && instance.isItemExpanded(itemId))) {
|
|
29
|
+
instance.toggleItemExpansion(event, itemId);
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
};
|
|
33
33
|
const handleSelection = event => {
|
|
34
34
|
if (!disabled) {
|
|
35
35
|
if (!focused) {
|
|
36
|
-
instance.focusItem(event,
|
|
36
|
+
instance.focusItem(event, itemId);
|
|
37
37
|
}
|
|
38
38
|
const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
|
|
39
39
|
if (multiple) {
|
|
40
40
|
if (event.shiftKey) {
|
|
41
41
|
instance.selectRange(event, {
|
|
42
|
-
end:
|
|
42
|
+
end: itemId
|
|
43
43
|
});
|
|
44
44
|
} else {
|
|
45
|
-
instance.
|
|
45
|
+
instance.selectItem(event, itemId, true);
|
|
46
46
|
}
|
|
47
47
|
} else {
|
|
48
|
-
instance.
|
|
48
|
+
instance.selectItem(event, itemId);
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
};
|
|
@@ -21,7 +21,7 @@ var _TreeItem = require("../TreeItem");
|
|
|
21
21
|
var _TreeItem2Icon = require("../TreeItem2Icon");
|
|
22
22
|
var _TreeItem2Provider = require("../TreeItem2Provider");
|
|
23
23
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
24
|
-
const _excluded = ["id", "
|
|
24
|
+
const _excluded = ["id", "itemId", "label", "disabled", "children", "slots", "slotProps"];
|
|
25
25
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
26
26
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
27
27
|
const TreeItem2Root = exports.TreeItem2Root = (0, _styles.styled)('li', {
|
|
@@ -173,7 +173,7 @@ const TreeItem2 = exports.TreeItem2 = /*#__PURE__*/React.forwardRef(function Tre
|
|
|
173
173
|
});
|
|
174
174
|
const {
|
|
175
175
|
id,
|
|
176
|
-
|
|
176
|
+
itemId,
|
|
177
177
|
label,
|
|
178
178
|
disabled,
|
|
179
179
|
children,
|
|
@@ -190,7 +190,7 @@ const TreeItem2 = exports.TreeItem2 = /*#__PURE__*/React.forwardRef(function Tre
|
|
|
190
190
|
status
|
|
191
191
|
} = (0, _useTreeItem.unstable_useTreeItem2)({
|
|
192
192
|
id,
|
|
193
|
-
|
|
193
|
+
itemId,
|
|
194
194
|
children,
|
|
195
195
|
label,
|
|
196
196
|
disabled
|
|
@@ -242,7 +242,7 @@ const TreeItem2 = exports.TreeItem2 = /*#__PURE__*/React.forwardRef(function Tre
|
|
|
242
242
|
className: classes.groupTransition
|
|
243
243
|
});
|
|
244
244
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeItem2Provider.TreeItem2Provider, {
|
|
245
|
-
|
|
245
|
+
itemId: itemId,
|
|
246
246
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(Root, (0, _extends2.default)({}, rootProps, {
|
|
247
247
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(Content, (0, _extends2.default)({}, contentProps, {
|
|
248
248
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(IconContainer, (0, _extends2.default)({}, iconContainerProps, {
|
|
@@ -273,23 +273,23 @@ process.env.NODE_ENV !== "production" ? TreeItem2.propTypes = {
|
|
|
273
273
|
classes: _propTypes.default.object,
|
|
274
274
|
className: _propTypes.default.string,
|
|
275
275
|
/**
|
|
276
|
-
* If `true`, the
|
|
276
|
+
* If `true`, the item is disabled.
|
|
277
277
|
* @default false
|
|
278
278
|
*/
|
|
279
279
|
disabled: _propTypes.default.bool,
|
|
280
280
|
/**
|
|
281
|
-
* The id attribute of the
|
|
281
|
+
* The id attribute of the item. If not provided, it will be generated.
|
|
282
282
|
*/
|
|
283
283
|
id: _propTypes.default.string,
|
|
284
284
|
/**
|
|
285
|
-
* The
|
|
285
|
+
* The id of the item.
|
|
286
|
+
* Must be unique.
|
|
286
287
|
*/
|
|
287
|
-
|
|
288
|
+
itemId: _propTypes.default.string.isRequired,
|
|
288
289
|
/**
|
|
289
|
-
* The
|
|
290
|
-
* Must be unique.
|
|
290
|
+
* The label of the item.
|
|
291
291
|
*/
|
|
292
|
-
|
|
292
|
+
label: _propTypes.default.node,
|
|
293
293
|
/**
|
|
294
294
|
* This prop isn't supported.
|
|
295
295
|
* Use the `onItemFocus` callback on the tree if you need to monitor a item's focus.
|
|
@@ -10,14 +10,14 @@ var _useTreeViewContext = require("../internals/TreeViewProvider/useTreeViewCont
|
|
|
10
10
|
function TreeItem2Provider(props) {
|
|
11
11
|
const {
|
|
12
12
|
children,
|
|
13
|
-
|
|
13
|
+
itemId
|
|
14
14
|
} = props;
|
|
15
15
|
const {
|
|
16
16
|
wrapItem
|
|
17
17
|
} = (0, _useTreeViewContext.useTreeViewContext)();
|
|
18
18
|
return wrapItem({
|
|
19
19
|
children,
|
|
20
|
-
|
|
20
|
+
itemId
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
TreeItem2Provider.propTypes = {
|
|
@@ -26,5 +26,5 @@ TreeItem2Provider.propTypes = {
|
|
|
26
26
|
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
27
27
|
// ----------------------------------------------------------------------
|
|
28
28
|
children: _propTypes.default.node,
|
|
29
|
-
|
|
29
|
+
itemId: _propTypes.default.string.isRequired
|
|
30
30
|
};
|
|
@@ -39,7 +39,7 @@ const warn = () => {
|
|
|
39
39
|
|
|
40
40
|
/**
|
|
41
41
|
* This component has been deprecated in favor of the new `SimpleTreeView` component.
|
|
42
|
-
* You can have a look at how to migrate to the new component in the v7 [migration guide](https://
|
|
42
|
+
* 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)
|
|
43
43
|
*
|
|
44
44
|
* Demos:
|
|
45
45
|
*
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.useTreeItem2Utils = void 0;
|
|
7
7
|
var _useTreeViewContext = require("../../internals/TreeViewProvider/useTreeViewContext");
|
|
8
8
|
const useTreeItem2Utils = ({
|
|
9
|
-
|
|
9
|
+
itemId,
|
|
10
10
|
children
|
|
11
11
|
}) => {
|
|
12
12
|
const {
|
|
@@ -17,23 +17,23 @@ const useTreeItem2Utils = ({
|
|
|
17
17
|
} = (0, _useTreeViewContext.useTreeViewContext)();
|
|
18
18
|
const status = {
|
|
19
19
|
expandable: Boolean(Array.isArray(children) ? children.length : children),
|
|
20
|
-
expanded: instance.
|
|
21
|
-
focused: instance.
|
|
22
|
-
selected: instance.
|
|
23
|
-
disabled: instance.
|
|
20
|
+
expanded: instance.isItemExpanded(itemId),
|
|
21
|
+
focused: instance.isItemFocused(itemId),
|
|
22
|
+
selected: instance.isItemSelected(itemId),
|
|
23
|
+
disabled: instance.isItemDisabled(itemId)
|
|
24
24
|
};
|
|
25
25
|
const handleExpansion = event => {
|
|
26
26
|
if (status.disabled) {
|
|
27
27
|
return;
|
|
28
28
|
}
|
|
29
29
|
if (!status.focused) {
|
|
30
|
-
instance.focusItem(event,
|
|
30
|
+
instance.focusItem(event, itemId);
|
|
31
31
|
}
|
|
32
32
|
const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
|
|
33
33
|
|
|
34
34
|
// If already expanded and trying to toggle selection don't close
|
|
35
|
-
if (status.expandable && !(multiple && instance.
|
|
36
|
-
instance.
|
|
35
|
+
if (status.expandable && !(multiple && instance.isItemExpanded(itemId))) {
|
|
36
|
+
instance.toggleItemExpansion(event, itemId);
|
|
37
37
|
}
|
|
38
38
|
};
|
|
39
39
|
const handleSelection = event => {
|
|
@@ -41,19 +41,19 @@ const useTreeItem2Utils = ({
|
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
43
43
|
if (!status.focused) {
|
|
44
|
-
instance.focusItem(event,
|
|
44
|
+
instance.focusItem(event, itemId);
|
|
45
45
|
}
|
|
46
46
|
const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
|
|
47
47
|
if (multiple) {
|
|
48
48
|
if (event.shiftKey) {
|
|
49
49
|
instance.selectRange(event, {
|
|
50
|
-
end:
|
|
50
|
+
end: itemId
|
|
51
51
|
});
|
|
52
52
|
} else {
|
|
53
|
-
instance.
|
|
53
|
+
instance.selectItem(event, itemId, true);
|
|
54
54
|
}
|
|
55
55
|
} else {
|
|
56
|
-
instance.
|
|
56
|
+
instance.selectItem(event, itemId);
|
|
57
57
|
}
|
|
58
58
|
};
|
|
59
59
|
const interactions = {
|
package/node/index.js
CHANGED
|
@@ -55,7 +55,7 @@ const noop = () => {};
|
|
|
55
55
|
* We use this for focus management, keyboard navigation, and typeahead
|
|
56
56
|
* functionality for some components.
|
|
57
57
|
*
|
|
58
|
-
* The hook accepts the element
|
|
58
|
+
* The hook accepts the element item
|
|
59
59
|
*
|
|
60
60
|
* Our main goals with this are:
|
|
61
61
|
* 1) maximum composability,
|
|
@@ -5,12 +5,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.DEFAULT_TREE_VIEW_PLUGINS = void 0;
|
|
7
7
|
var _useTreeViewId = require("./useTreeViewId");
|
|
8
|
-
var
|
|
8
|
+
var _useTreeViewItems = require("./useTreeViewItems");
|
|
9
9
|
var _useTreeViewExpansion = require("./useTreeViewExpansion");
|
|
10
10
|
var _useTreeViewSelection = require("./useTreeViewSelection");
|
|
11
11
|
var _useTreeViewFocus = require("./useTreeViewFocus");
|
|
12
12
|
var _useTreeViewKeyboardNavigation = require("./useTreeViewKeyboardNavigation");
|
|
13
13
|
var _useTreeViewIcons = require("./useTreeViewIcons");
|
|
14
|
-
const DEFAULT_TREE_VIEW_PLUGINS = exports.DEFAULT_TREE_VIEW_PLUGINS = [_useTreeViewId.useTreeViewId,
|
|
14
|
+
const DEFAULT_TREE_VIEW_PLUGINS = exports.DEFAULT_TREE_VIEW_PLUGINS = [_useTreeViewId.useTreeViewId, _useTreeViewItems.useTreeViewItems, _useTreeViewExpansion.useTreeViewExpansion, _useTreeViewSelection.useTreeViewSelection, _useTreeViewFocus.useTreeViewFocus, _useTreeViewKeyboardNavigation.useTreeViewKeyboardNavigation, _useTreeViewIcons.useTreeViewIcons];
|
|
15
15
|
|
|
16
16
|
// We can't infer this type from the plugin, otherwise we would lose the generics.
|