@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
package/TreeItem/TreeItem.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
2
2
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
|
-
const _excluded = ["children", "className", "slots", "slotProps", "ContentComponent", "ContentProps", "
|
|
3
|
+
const _excluded = ["children", "className", "slots", "slotProps", "ContentComponent", "ContentProps", "itemId", "id", "label", "onClick", "onMouseDown", "onFocus", "onBlur", "onKeyDown"],
|
|
4
4
|
_excluded2 = ["ownerState"],
|
|
5
5
|
_excluded3 = ["ownerState"],
|
|
6
6
|
_excluded4 = ["ownerState"];
|
|
@@ -137,7 +137,6 @@ const TreeItemGroup = styled(Collapse, {
|
|
|
137
137
|
* - [TreeItem API](https://mui.com/x/api/tree-view/tree-item/)
|
|
138
138
|
*/
|
|
139
139
|
export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps, inRef) {
|
|
140
|
-
var _ref, _inSlots$expandIcon, _ref2, _inSlots$collapseIcon, _inSlots$endIcon, _slots$groupTransitio;
|
|
141
140
|
const {
|
|
142
141
|
icons: contextIcons,
|
|
143
142
|
runItemPlugins,
|
|
@@ -158,11 +157,13 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
158
157
|
slotProps: inSlotProps,
|
|
159
158
|
ContentComponent = TreeItemContent,
|
|
160
159
|
ContentProps,
|
|
161
|
-
|
|
160
|
+
itemId,
|
|
162
161
|
id,
|
|
163
162
|
label,
|
|
164
163
|
onClick,
|
|
165
|
-
onMouseDown
|
|
164
|
+
onMouseDown,
|
|
165
|
+
onBlur,
|
|
166
|
+
onKeyDown
|
|
166
167
|
} = props,
|
|
167
168
|
other = _objectWithoutPropertiesLoose(props, _excluded);
|
|
168
169
|
const {
|
|
@@ -170,13 +171,13 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
170
171
|
rootRef
|
|
171
172
|
} = runItemPlugins(props);
|
|
172
173
|
const handleRootRef = useForkRef(inRef, rootRef);
|
|
173
|
-
const handleContentRef = useForkRef(ContentProps
|
|
174
|
+
const handleContentRef = useForkRef(ContentProps?.ref, contentRef);
|
|
174
175
|
const slots = {
|
|
175
|
-
expandIcon:
|
|
176
|
-
collapseIcon:
|
|
177
|
-
endIcon:
|
|
178
|
-
icon: inSlots
|
|
179
|
-
groupTransition: inSlots
|
|
176
|
+
expandIcon: inSlots?.expandIcon ?? contextIcons.slots.expandIcon ?? TreeViewExpandIcon,
|
|
177
|
+
collapseIcon: inSlots?.collapseIcon ?? contextIcons.slots.collapseIcon ?? TreeViewCollapseIcon,
|
|
178
|
+
endIcon: inSlots?.endIcon ?? contextIcons.slots.endIcon,
|
|
179
|
+
icon: inSlots?.icon,
|
|
180
|
+
groupTransition: inSlots?.groupTransition
|
|
180
181
|
};
|
|
181
182
|
const isExpandable = reactChildren => {
|
|
182
183
|
if (Array.isArray(reactChildren)) {
|
|
@@ -185,10 +186,10 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
185
186
|
return Boolean(reactChildren);
|
|
186
187
|
};
|
|
187
188
|
const expandable = isExpandable(children);
|
|
188
|
-
const expanded = instance.
|
|
189
|
-
const focused = instance.
|
|
190
|
-
const selected = instance.
|
|
191
|
-
const disabled = instance.
|
|
189
|
+
const expanded = instance.isItemExpanded(itemId);
|
|
190
|
+
const focused = instance.isItemFocused(itemId);
|
|
191
|
+
const selected = instance.isItemSelected(itemId);
|
|
192
|
+
const disabled = instance.isItemDisabled(itemId);
|
|
192
193
|
const ownerState = _extends({}, props, {
|
|
193
194
|
expanded,
|
|
194
195
|
focused,
|
|
@@ -196,11 +197,11 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
196
197
|
disabled
|
|
197
198
|
});
|
|
198
199
|
const classes = useUtilityClasses(ownerState);
|
|
199
|
-
const GroupTransition =
|
|
200
|
+
const GroupTransition = slots.groupTransition ?? undefined;
|
|
200
201
|
const groupTransitionProps = useSlotProps({
|
|
201
202
|
elementType: GroupTransition,
|
|
202
203
|
ownerState: {},
|
|
203
|
-
externalSlotProps: inSlotProps
|
|
204
|
+
externalSlotProps: inSlotProps?.groupTransition,
|
|
204
205
|
additionalProps: {
|
|
205
206
|
unmountOnExit: true,
|
|
206
207
|
in: expanded,
|
|
@@ -215,9 +216,9 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
215
216
|
ownerState: {},
|
|
216
217
|
externalSlotProps: tempOwnerState => {
|
|
217
218
|
if (expanded) {
|
|
218
|
-
return _extends({}, resolveComponentProps(contextIcons.slotProps.collapseIcon, tempOwnerState), resolveComponentProps(inSlotProps
|
|
219
|
+
return _extends({}, resolveComponentProps(contextIcons.slotProps.collapseIcon, tempOwnerState), resolveComponentProps(inSlotProps?.collapseIcon, tempOwnerState));
|
|
219
220
|
}
|
|
220
|
-
return _extends({}, resolveComponentProps(contextIcons.slotProps.expandIcon, tempOwnerState), resolveComponentProps(inSlotProps
|
|
221
|
+
return _extends({}, resolveComponentProps(contextIcons.slotProps.expandIcon, tempOwnerState), resolveComponentProps(inSlotProps?.expandIcon, tempOwnerState));
|
|
221
222
|
}
|
|
222
223
|
}),
|
|
223
224
|
expansionIconProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded2);
|
|
@@ -230,7 +231,7 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
230
231
|
if (expandable) {
|
|
231
232
|
return {};
|
|
232
233
|
}
|
|
233
|
-
return _extends({}, resolveComponentProps(contextIcons.slotProps.endIcon, tempOwnerState), resolveComponentProps(inSlotProps
|
|
234
|
+
return _extends({}, resolveComponentProps(contextIcons.slotProps.endIcon, tempOwnerState), resolveComponentProps(inSlotProps?.endIcon, tempOwnerState));
|
|
234
235
|
}
|
|
235
236
|
}),
|
|
236
237
|
displayIconProps = _objectWithoutPropertiesLoose(_useSlotProps2, _excluded3);
|
|
@@ -239,7 +240,7 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
239
240
|
const _useSlotProps3 = useSlotProps({
|
|
240
241
|
elementType: Icon,
|
|
241
242
|
ownerState: {},
|
|
242
|
-
externalSlotProps: inSlotProps
|
|
243
|
+
externalSlotProps: inSlotProps?.icon
|
|
243
244
|
}),
|
|
244
245
|
iconProps = _objectWithoutPropertiesLoose(_useSlotProps3, _excluded4);
|
|
245
246
|
const icon = Icon ? /*#__PURE__*/_jsx(Icon, _extends({}, iconProps)) : null;
|
|
@@ -250,24 +251,29 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
250
251
|
/* single-selection trees unset aria-selected on un-selected items.
|
|
251
252
|
*
|
|
252
253
|
* If the tree does not support multiple selection, aria-selected
|
|
253
|
-
* is set to true for the selected
|
|
254
|
+
* is set to true for the selected item and it is not present on any other item in the tree.
|
|
254
255
|
* Source: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/
|
|
255
256
|
*/
|
|
256
257
|
ariaSelected = true;
|
|
257
258
|
}
|
|
258
259
|
function handleFocus(event) {
|
|
259
|
-
// DOM focus stays on the tree which manages focus with aria-activedescendant
|
|
260
|
-
if (event.target === event.currentTarget) {
|
|
261
|
-
instance.focusRoot();
|
|
262
|
-
}
|
|
263
260
|
const canBeFocused = !disabled || disabledItemsFocusable;
|
|
264
261
|
if (!focused && canBeFocused && event.currentTarget === event.target) {
|
|
265
|
-
instance.focusItem(event,
|
|
262
|
+
instance.focusItem(event, itemId);
|
|
266
263
|
}
|
|
267
264
|
}
|
|
268
|
-
|
|
265
|
+
function handleBlur(event) {
|
|
266
|
+
onBlur?.(event);
|
|
267
|
+
instance.removeFocusedItem();
|
|
268
|
+
}
|
|
269
|
+
const handleKeyDown = event => {
|
|
270
|
+
onKeyDown?.(event);
|
|
271
|
+
instance.handleItemKeyDown(event, itemId);
|
|
272
|
+
};
|
|
273
|
+
const idAttribute = instance.getTreeItemId(itemId, id);
|
|
274
|
+
const tabIndex = instance.canItemBeTabbed(itemId) ? 0 : -1;
|
|
269
275
|
return /*#__PURE__*/_jsx(TreeItem2Provider, {
|
|
270
|
-
|
|
276
|
+
itemId: itemId,
|
|
271
277
|
children: /*#__PURE__*/_jsxs(TreeItemRoot, _extends({
|
|
272
278
|
className: clsx(classes.root, className),
|
|
273
279
|
role: "treeitem",
|
|
@@ -275,10 +281,12 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
275
281
|
"aria-selected": ariaSelected,
|
|
276
282
|
"aria-disabled": disabled || undefined,
|
|
277
283
|
id: idAttribute,
|
|
278
|
-
tabIndex:
|
|
284
|
+
tabIndex: tabIndex
|
|
279
285
|
}, other, {
|
|
280
286
|
ownerState: ownerState,
|
|
281
287
|
onFocus: handleFocus,
|
|
288
|
+
onBlur: handleBlur,
|
|
289
|
+
onKeyDown: handleKeyDown,
|
|
282
290
|
ref: handleRootRef,
|
|
283
291
|
children: [/*#__PURE__*/_jsx(StyledTreeItemContent, _extends({
|
|
284
292
|
as: ContentComponent,
|
|
@@ -292,7 +300,7 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
292
300
|
label: classes.label
|
|
293
301
|
},
|
|
294
302
|
label: label,
|
|
295
|
-
|
|
303
|
+
itemId: itemId,
|
|
296
304
|
onClick: onClick,
|
|
297
305
|
onMouseDown: onMouseDown,
|
|
298
306
|
icon: icon,
|
|
@@ -324,7 +332,7 @@ process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
|
|
|
324
332
|
classes: PropTypes.object,
|
|
325
333
|
className: PropTypes.string,
|
|
326
334
|
/**
|
|
327
|
-
* The component used
|
|
335
|
+
* The component used to render the content of the item.
|
|
328
336
|
* @default TreeItemContent
|
|
329
337
|
*/
|
|
330
338
|
ContentComponent: elementTypeAcceptingRef,
|
|
@@ -338,13 +346,13 @@ process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
|
|
|
338
346
|
*/
|
|
339
347
|
disabled: PropTypes.bool,
|
|
340
348
|
/**
|
|
341
|
-
* The
|
|
349
|
+
* The id of the item.
|
|
342
350
|
*/
|
|
343
|
-
|
|
351
|
+
itemId: PropTypes.string.isRequired,
|
|
344
352
|
/**
|
|
345
|
-
* The
|
|
353
|
+
* The tree item label.
|
|
346
354
|
*/
|
|
347
|
-
|
|
355
|
+
label: PropTypes.node,
|
|
348
356
|
/**
|
|
349
357
|
* This prop isn't supported.
|
|
350
358
|
* Use the `onItemFocus` callback on the tree if you need to monitor a item's focus.
|
|
@@ -58,7 +58,7 @@ export interface TreeItemProps extends Omit<React.HTMLAttributes<HTMLLIElement>,
|
|
|
58
58
|
*/
|
|
59
59
|
slotProps?: TreeItemSlotProps;
|
|
60
60
|
/**
|
|
61
|
-
* The component used
|
|
61
|
+
* The component used to render the content of the item.
|
|
62
62
|
* @default TreeItemContent
|
|
63
63
|
*/
|
|
64
64
|
ContentComponent?: React.JSXElementConstructor<TreeItemContentProps>;
|
|
@@ -83,9 +83,9 @@ export interface TreeItemProps extends Omit<React.HTMLAttributes<HTMLLIElement>,
|
|
|
83
83
|
*/
|
|
84
84
|
label?: React.ReactNode;
|
|
85
85
|
/**
|
|
86
|
-
* The id of the
|
|
86
|
+
* The id of the item.
|
|
87
87
|
*/
|
|
88
|
-
|
|
88
|
+
itemId: TreeViewItemId;
|
|
89
89
|
/**
|
|
90
90
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
91
91
|
*/
|
|
@@ -15,29 +15,29 @@ export interface TreeItemContentProps extends React.HTMLAttributes<HTMLElement>
|
|
|
15
15
|
focused: string;
|
|
16
16
|
/** State class applied to the element when disabled. */
|
|
17
17
|
disabled: string;
|
|
18
|
-
/** Styles applied to the tree
|
|
18
|
+
/** Styles applied to the tree item icon and collapse/expand icon. */
|
|
19
19
|
iconContainer: string;
|
|
20
20
|
/** Styles applied to the label element. */
|
|
21
21
|
label: string;
|
|
22
22
|
};
|
|
23
23
|
/**
|
|
24
|
-
* The tree
|
|
24
|
+
* The tree item label.
|
|
25
25
|
*/
|
|
26
26
|
label?: React.ReactNode;
|
|
27
27
|
/**
|
|
28
|
-
* The id of the
|
|
28
|
+
* The id of the item.
|
|
29
29
|
*/
|
|
30
|
-
|
|
30
|
+
itemId: string;
|
|
31
31
|
/**
|
|
32
|
-
* The icon to display next to the tree
|
|
32
|
+
* The icon to display next to the tree item's label.
|
|
33
33
|
*/
|
|
34
34
|
icon?: React.ReactNode;
|
|
35
35
|
/**
|
|
36
|
-
* The icon to display next to the tree
|
|
36
|
+
* The icon to display next to the tree item's label. Either an expansion or collapse icon.
|
|
37
37
|
*/
|
|
38
38
|
expansionIcon?: React.ReactNode;
|
|
39
39
|
/**
|
|
40
|
-
* The icon to display next to the tree
|
|
40
|
+
* The icon to display next to the tree item's label. Either a parent or end icon.
|
|
41
41
|
*/
|
|
42
42
|
displayIcon?: React.ReactNode;
|
|
43
43
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
|
-
const _excluded = ["classes", "className", "displayIcon", "expansionIcon", "icon", "label", "
|
|
3
|
+
const _excluded = ["classes", "className", "displayIcon", "expansionIcon", "icon", "label", "itemId", "onClick", "onMouseDown"];
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import PropTypes from 'prop-types';
|
|
6
6
|
import clsx from 'clsx';
|
|
@@ -18,7 +18,7 @@ const TreeItemContent = /*#__PURE__*/React.forwardRef(function TreeItemContent(p
|
|
|
18
18
|
expansionIcon,
|
|
19
19
|
icon: iconProp,
|
|
20
20
|
label,
|
|
21
|
-
|
|
21
|
+
itemId,
|
|
22
22
|
onClick,
|
|
23
23
|
onMouseDown
|
|
24
24
|
} = props,
|
|
@@ -31,7 +31,7 @@ const TreeItemContent = /*#__PURE__*/React.forwardRef(function TreeItemContent(p
|
|
|
31
31
|
handleExpansion,
|
|
32
32
|
handleSelection,
|
|
33
33
|
preventSelection
|
|
34
|
-
} = useTreeItemState(
|
|
34
|
+
} = useTreeItemState(itemId);
|
|
35
35
|
const icon = iconProp || expansionIcon || displayIcon;
|
|
36
36
|
const handleMouseDown = event => {
|
|
37
37
|
preventSelection(event);
|
|
@@ -75,24 +75,24 @@ process.env.NODE_ENV !== "production" ? TreeItemContent.propTypes = {
|
|
|
75
75
|
classes: PropTypes.object.isRequired,
|
|
76
76
|
className: PropTypes.string,
|
|
77
77
|
/**
|
|
78
|
-
* The icon to display next to the tree
|
|
78
|
+
* The icon to display next to the tree item's label. Either a parent or end icon.
|
|
79
79
|
*/
|
|
80
80
|
displayIcon: PropTypes.node,
|
|
81
81
|
/**
|
|
82
|
-
* The icon to display next to the tree
|
|
82
|
+
* The icon to display next to the tree item's label. Either an expansion or collapse icon.
|
|
83
83
|
*/
|
|
84
84
|
expansionIcon: PropTypes.node,
|
|
85
85
|
/**
|
|
86
|
-
* The icon to display next to the tree
|
|
86
|
+
* The icon to display next to the tree item's label.
|
|
87
87
|
*/
|
|
88
88
|
icon: PropTypes.node,
|
|
89
89
|
/**
|
|
90
|
-
* The
|
|
90
|
+
* The id of the item.
|
|
91
91
|
*/
|
|
92
|
-
|
|
92
|
+
itemId: PropTypes.string.isRequired,
|
|
93
93
|
/**
|
|
94
|
-
* The
|
|
94
|
+
* The tree item label.
|
|
95
95
|
*/
|
|
96
|
-
|
|
96
|
+
label: PropTypes.node
|
|
97
97
|
} : void 0;
|
|
98
98
|
export { TreeItemContent };
|
|
@@ -13,7 +13,7 @@ export interface TreeItemClasses {
|
|
|
13
13
|
focused: string;
|
|
14
14
|
/** State class applied to the element when disabled. */
|
|
15
15
|
disabled: string;
|
|
16
|
-
/** Styles applied to the tree
|
|
16
|
+
/** Styles applied to the tree item icon. */
|
|
17
17
|
iconContainer: string;
|
|
18
18
|
/** Styles applied to the label element. */
|
|
19
19
|
label: string;
|
|
@@ -1,45 +1,45 @@
|
|
|
1
1
|
import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
|
|
2
|
-
export function useTreeItemState(
|
|
2
|
+
export function useTreeItemState(itemId) {
|
|
3
3
|
const {
|
|
4
4
|
instance,
|
|
5
5
|
selection: {
|
|
6
6
|
multiSelect
|
|
7
7
|
}
|
|
8
8
|
} = useTreeViewContext();
|
|
9
|
-
const expandable = instance.
|
|
10
|
-
const expanded = instance.
|
|
11
|
-
const focused = instance.
|
|
12
|
-
const selected = instance.
|
|
13
|
-
const disabled = instance.
|
|
9
|
+
const expandable = instance.isItemExpandable(itemId);
|
|
10
|
+
const expanded = instance.isItemExpanded(itemId);
|
|
11
|
+
const focused = instance.isItemFocused(itemId);
|
|
12
|
+
const selected = instance.isItemSelected(itemId);
|
|
13
|
+
const disabled = instance.isItemDisabled(itemId);
|
|
14
14
|
const handleExpansion = event => {
|
|
15
15
|
if (!disabled) {
|
|
16
16
|
if (!focused) {
|
|
17
|
-
instance.focusItem(event,
|
|
17
|
+
instance.focusItem(event, itemId);
|
|
18
18
|
}
|
|
19
19
|
const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
|
|
20
20
|
|
|
21
21
|
// If already expanded and trying to toggle selection don't close
|
|
22
|
-
if (expandable && !(multiple && instance.
|
|
23
|
-
instance.
|
|
22
|
+
if (expandable && !(multiple && instance.isItemExpanded(itemId))) {
|
|
23
|
+
instance.toggleItemExpansion(event, itemId);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
};
|
|
27
27
|
const handleSelection = event => {
|
|
28
28
|
if (!disabled) {
|
|
29
29
|
if (!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
|
if (multiple) {
|
|
34
34
|
if (event.shiftKey) {
|
|
35
35
|
instance.selectRange(event, {
|
|
36
|
-
end:
|
|
36
|
+
end: itemId
|
|
37
37
|
});
|
|
38
38
|
} else {
|
|
39
|
-
instance.
|
|
39
|
+
instance.selectItem(event, itemId, true);
|
|
40
40
|
}
|
|
41
41
|
} else {
|
|
42
|
-
instance.
|
|
42
|
+
instance.selectItem(event, itemId);
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
};
|
package/TreeItem2/TreeItem2.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
2
2
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
|
-
const _excluded = ["id", "
|
|
3
|
+
const _excluded = ["id", "itemId", "label", "disabled", "children", "slots", "slotProps"];
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import PropTypes from 'prop-types';
|
|
6
6
|
import clsx from 'clsx';
|
|
@@ -159,14 +159,13 @@ const useUtilityClasses = ownerState => {
|
|
|
159
159
|
* - [TreeItem2 API](https://mui.com/x/api/tree-view/tree-item-2/)
|
|
160
160
|
*/
|
|
161
161
|
export const TreeItem2 = /*#__PURE__*/React.forwardRef(function TreeItem2(inProps, forwardedRef) {
|
|
162
|
-
var _slots$root, _slots$content, _slots$iconContainer, _slots$label, _slots$groupTransitio;
|
|
163
162
|
const props = useThemeProps({
|
|
164
163
|
props: inProps,
|
|
165
164
|
name: 'MuiTreeItem2'
|
|
166
165
|
});
|
|
167
166
|
const {
|
|
168
167
|
id,
|
|
169
|
-
|
|
168
|
+
itemId,
|
|
170
169
|
label,
|
|
171
170
|
disabled,
|
|
172
171
|
children,
|
|
@@ -183,14 +182,14 @@ export const TreeItem2 = /*#__PURE__*/React.forwardRef(function TreeItem2(inProp
|
|
|
183
182
|
status
|
|
184
183
|
} = useTreeItem2({
|
|
185
184
|
id,
|
|
186
|
-
|
|
185
|
+
itemId,
|
|
187
186
|
children,
|
|
188
187
|
label,
|
|
189
188
|
disabled
|
|
190
189
|
});
|
|
191
190
|
const ownerState = _extends({}, props, status);
|
|
192
191
|
const classes = useUtilityClasses(ownerState);
|
|
193
|
-
const Root =
|
|
192
|
+
const Root = slots.root ?? TreeItem2Root;
|
|
194
193
|
const rootProps = useSlotProps({
|
|
195
194
|
elementType: Root,
|
|
196
195
|
getSlotProps: getRootProps,
|
|
@@ -202,7 +201,7 @@ export const TreeItem2 = /*#__PURE__*/React.forwardRef(function TreeItem2(inProp
|
|
|
202
201
|
ownerState: {},
|
|
203
202
|
className: classes.root
|
|
204
203
|
});
|
|
205
|
-
const Content =
|
|
204
|
+
const Content = slots.content ?? TreeItem2Content;
|
|
206
205
|
const contentProps = useSlotProps({
|
|
207
206
|
elementType: Content,
|
|
208
207
|
getSlotProps: getContentProps,
|
|
@@ -210,7 +209,7 @@ export const TreeItem2 = /*#__PURE__*/React.forwardRef(function TreeItem2(inProp
|
|
|
210
209
|
ownerState: {},
|
|
211
210
|
className: clsx(classes.content, status.expanded && classes.expanded, status.selected && classes.selected, status.focused && classes.focused, status.disabled && classes.disabled)
|
|
212
211
|
});
|
|
213
|
-
const IconContainer =
|
|
212
|
+
const IconContainer = slots.iconContainer ?? TreeItem2IconContainer;
|
|
214
213
|
const iconContainerProps = useSlotProps({
|
|
215
214
|
elementType: IconContainer,
|
|
216
215
|
getSlotProps: getIconContainerProps,
|
|
@@ -218,7 +217,7 @@ export const TreeItem2 = /*#__PURE__*/React.forwardRef(function TreeItem2(inProp
|
|
|
218
217
|
ownerState: {},
|
|
219
218
|
className: classes.iconContainer
|
|
220
219
|
});
|
|
221
|
-
const Label =
|
|
220
|
+
const Label = slots.label ?? TreeItem2Label;
|
|
222
221
|
const labelProps = useSlotProps({
|
|
223
222
|
elementType: Label,
|
|
224
223
|
getSlotProps: getLabelProps,
|
|
@@ -226,7 +225,7 @@ export const TreeItem2 = /*#__PURE__*/React.forwardRef(function TreeItem2(inProp
|
|
|
226
225
|
ownerState: {},
|
|
227
226
|
className: classes.label
|
|
228
227
|
});
|
|
229
|
-
const GroupTransition =
|
|
228
|
+
const GroupTransition = slots.groupTransition ?? undefined;
|
|
230
229
|
const groupTransitionProps = useSlotProps({
|
|
231
230
|
elementType: GroupTransition,
|
|
232
231
|
getSlotProps: getGroupTransitionProps,
|
|
@@ -235,7 +234,7 @@ export const TreeItem2 = /*#__PURE__*/React.forwardRef(function TreeItem2(inProp
|
|
|
235
234
|
className: classes.groupTransition
|
|
236
235
|
});
|
|
237
236
|
return /*#__PURE__*/_jsx(TreeItem2Provider, {
|
|
238
|
-
|
|
237
|
+
itemId: itemId,
|
|
239
238
|
children: /*#__PURE__*/_jsxs(Root, _extends({}, rootProps, {
|
|
240
239
|
children: [/*#__PURE__*/_jsxs(Content, _extends({}, contentProps, {
|
|
241
240
|
children: [/*#__PURE__*/_jsx(IconContainer, _extends({}, iconContainerProps, {
|
|
@@ -266,23 +265,23 @@ process.env.NODE_ENV !== "production" ? TreeItem2.propTypes = {
|
|
|
266
265
|
classes: PropTypes.object,
|
|
267
266
|
className: PropTypes.string,
|
|
268
267
|
/**
|
|
269
|
-
* If `true`, the
|
|
268
|
+
* If `true`, the item is disabled.
|
|
270
269
|
* @default false
|
|
271
270
|
*/
|
|
272
271
|
disabled: PropTypes.bool,
|
|
273
272
|
/**
|
|
274
|
-
* The id attribute of the
|
|
273
|
+
* The id attribute of the item. If not provided, it will be generated.
|
|
275
274
|
*/
|
|
276
275
|
id: PropTypes.string,
|
|
277
276
|
/**
|
|
278
|
-
* The
|
|
277
|
+
* The id of the item.
|
|
278
|
+
* Must be unique.
|
|
279
279
|
*/
|
|
280
|
-
|
|
280
|
+
itemId: PropTypes.string.isRequired,
|
|
281
281
|
/**
|
|
282
|
-
* The
|
|
283
|
-
* Must be unique.
|
|
282
|
+
* The label of the item.
|
|
284
283
|
*/
|
|
285
|
-
|
|
284
|
+
label: PropTypes.node,
|
|
286
285
|
/**
|
|
287
286
|
* This prop isn't supported.
|
|
288
287
|
* Use the `onItemFocus` callback on the tree if you need to monitor a item's focus.
|
|
@@ -6,7 +6,6 @@ import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewCon
|
|
|
6
6
|
import { TreeViewCollapseIcon, TreeViewExpandIcon } from '../icons';
|
|
7
7
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
8
|
function TreeItem2Icon(props) {
|
|
9
|
-
var _context$icons$slots$, _context$icons$slots$2, _slots$iconName;
|
|
10
9
|
const {
|
|
11
10
|
slots,
|
|
12
11
|
slotProps,
|
|
@@ -14,12 +13,12 @@ function TreeItem2Icon(props) {
|
|
|
14
13
|
} = props;
|
|
15
14
|
const context = useTreeViewContext();
|
|
16
15
|
const contextIcons = _extends({}, context.icons.slots, {
|
|
17
|
-
expandIcon:
|
|
18
|
-
collapseIcon:
|
|
16
|
+
expandIcon: context.icons.slots.expandIcon ?? TreeViewExpandIcon,
|
|
17
|
+
collapseIcon: context.icons.slots.collapseIcon ?? TreeViewCollapseIcon
|
|
19
18
|
});
|
|
20
19
|
const contextIconProps = context.icons.slotProps;
|
|
21
20
|
let iconName;
|
|
22
|
-
if (slots
|
|
21
|
+
if (slots?.icon) {
|
|
23
22
|
iconName = 'icon';
|
|
24
23
|
} else if (status.expandable) {
|
|
25
24
|
if (status.expanded) {
|
|
@@ -30,10 +29,10 @@ function TreeItem2Icon(props) {
|
|
|
30
29
|
} else {
|
|
31
30
|
iconName = 'endIcon';
|
|
32
31
|
}
|
|
33
|
-
const Icon =
|
|
32
|
+
const Icon = slots?.[iconName] ?? contextIcons[iconName];
|
|
34
33
|
const iconProps = useSlotProps({
|
|
35
34
|
elementType: Icon,
|
|
36
|
-
externalSlotProps: tempOwnerState => _extends({}, resolveComponentProps(contextIconProps[iconName], tempOwnerState), resolveComponentProps(slotProps
|
|
35
|
+
externalSlotProps: tempOwnerState => _extends({}, resolveComponentProps(contextIconProps[iconName], tempOwnerState), resolveComponentProps(slotProps?.[iconName], tempOwnerState)),
|
|
37
36
|
// TODO: Add proper ownerState
|
|
38
37
|
ownerState: {}
|
|
39
38
|
});
|
|
@@ -3,19 +3,19 @@ import { SlotComponentProps } from '@mui/base/utils';
|
|
|
3
3
|
import { UseTreeItem2Status } from '../useTreeItem2';
|
|
4
4
|
export interface TreeItem2IconSlots {
|
|
5
5
|
/**
|
|
6
|
-
* The icon used to collapse the
|
|
6
|
+
* The icon used to collapse the item.
|
|
7
7
|
*/
|
|
8
8
|
collapseIcon?: React.ElementType;
|
|
9
9
|
/**
|
|
10
|
-
* The icon used to expand the
|
|
10
|
+
* The icon used to expand the item.
|
|
11
11
|
*/
|
|
12
12
|
expandIcon?: React.ElementType;
|
|
13
13
|
/**
|
|
14
|
-
* The icon displayed next to an end
|
|
14
|
+
* The icon displayed next to an end item.
|
|
15
15
|
*/
|
|
16
16
|
endIcon?: React.ElementType;
|
|
17
17
|
/**
|
|
18
|
-
* The icon to display next to the tree
|
|
18
|
+
* The icon to display next to the tree item's label.
|
|
19
19
|
*/
|
|
20
20
|
icon?: React.ElementType;
|
|
21
21
|
}
|
|
@@ -3,14 +3,14 @@ import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewCon
|
|
|
3
3
|
function TreeItem2Provider(props) {
|
|
4
4
|
const {
|
|
5
5
|
children,
|
|
6
|
-
|
|
6
|
+
itemId
|
|
7
7
|
} = props;
|
|
8
8
|
const {
|
|
9
9
|
wrapItem
|
|
10
10
|
} = useTreeViewContext();
|
|
11
11
|
return wrapItem({
|
|
12
12
|
children,
|
|
13
|
-
|
|
13
|
+
itemId
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
16
|
TreeItem2Provider.propTypes = {
|
|
@@ -19,6 +19,6 @@ TreeItem2Provider.propTypes = {
|
|
|
19
19
|
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
20
20
|
// ----------------------------------------------------------------------
|
|
21
21
|
children: PropTypes.node,
|
|
22
|
-
|
|
22
|
+
itemId: PropTypes.string.isRequired
|
|
23
23
|
};
|
|
24
24
|
export { TreeItem2Provider };
|
package/TreeView/TreeView.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ type TreeViewComponent = (<Multiple extends boolean | undefined = undefined>(pro
|
|
|
5
5
|
};
|
|
6
6
|
/**
|
|
7
7
|
* This component has been deprecated in favor of the new `SimpleTreeView` component.
|
|
8
|
-
* You can have a look at how to migrate to the new component in the v7 [migration guide](https://
|
|
8
|
+
* 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)
|
|
9
9
|
*
|
|
10
10
|
* Demos:
|
|
11
11
|
*
|
package/TreeView/TreeView.js
CHANGED
|
@@ -30,7 +30,7 @@ const warn = () => {
|
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
* This component has been deprecated in favor of the new `SimpleTreeView` component.
|
|
33
|
-
* You can have a look at how to migrate to the new component in the v7 [migration guide](https://
|
|
33
|
+
* 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)
|
|
34
34
|
*
|
|
35
35
|
* Demos:
|
|
36
36
|
*
|
|
@@ -8,8 +8,8 @@ interface UseTreeItem2UtilsReturnValue {
|
|
|
8
8
|
interactions: UseTreeItem2Interactions;
|
|
9
9
|
status: UseTreeItem2Status;
|
|
10
10
|
}
|
|
11
|
-
export declare const useTreeItem2Utils: ({
|
|
12
|
-
|
|
11
|
+
export declare const useTreeItem2Utils: ({ itemId, children, }: {
|
|
12
|
+
itemId: string;
|
|
13
13
|
children: React.ReactNode;
|
|
14
14
|
}) => UseTreeItem2UtilsReturnValue;
|
|
15
15
|
export {};
|