@mui/x-tree-view 7.0.0-beta.6 → 7.0.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 +311 -12
- package/README.md +1 -1
- package/RichTreeView/RichTreeView.js +34 -36
- package/RichTreeView/RichTreeView.types.d.ts +3 -2
- package/SimpleTreeView/SimpleTreeView.js +25 -26
- package/TreeItem/TreeItem.js +94 -82
- package/TreeItem/TreeItem.types.d.ts +13 -11
- package/TreeItem/TreeItemContent.d.ts +7 -7
- package/TreeItem/TreeItemContent.js +10 -10
- package/TreeItem/useTreeItemState.d.ts +1 -1
- package/TreeItem/useTreeItemState.js +13 -13
- package/TreeItem2/TreeItem2.d.ts +18 -0
- package/TreeItem2/TreeItem2.js +300 -0
- package/TreeItem2/TreeItem2.types.d.ts +64 -0
- package/TreeItem2/TreeItem2.types.js +1 -0
- package/TreeItem2/index.d.ts +2 -0
- package/TreeItem2/index.js +1 -0
- package/TreeItem2/package.json +6 -0
- package/TreeItem2Icon/TreeItem2Icon.d.ts +7 -0
- package/TreeItem2Icon/TreeItem2Icon.js +67 -0
- package/TreeItem2Icon/TreeItem2Icon.types.d.ts +40 -0
- package/TreeItem2Icon/TreeItem2Icon.types.js +1 -0
- package/TreeItem2Icon/index.d.ts +2 -0
- package/TreeItem2Icon/index.js +1 -0
- package/TreeItem2Icon/package.json +6 -0
- package/TreeItem2Provider/TreeItem2Provider.d.ts +7 -0
- package/TreeItem2Provider/TreeItem2Provider.js +24 -0
- package/TreeItem2Provider/TreeItem2Provider.types.d.ts +6 -0
- package/TreeItem2Provider/TreeItem2Provider.types.js +1 -0
- package/TreeItem2Provider/index.d.ts +2 -0
- package/TreeItem2Provider/index.js +1 -0
- package/TreeItem2Provider/package.json +6 -0
- package/TreeView/TreeView.d.ts +1 -1
- package/TreeView/TreeView.js +23 -23
- package/hooks/index.d.ts +1 -0
- package/hooks/index.js +2 -1
- package/hooks/useTreeItem2Utils/index.d.ts +1 -0
- package/hooks/useTreeItem2Utils/index.js +1 -0
- package/hooks/useTreeItem2Utils/useTreeItem2Utils.d.ts +15 -0
- package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +61 -0
- package/index.d.ts +5 -1
- package/index.js +9 -2
- package/internals/TreeViewProvider/TreeViewContext.d.ts +3 -1
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +4 -2
- package/internals/hooks/useInstanceEventHandler.js +5 -10
- package/internals/hooks/useLazyRef.d.ts +1 -2
- package/internals/hooks/useLazyRef.js +1 -11
- package/internals/hooks/useOnMount.d.ts +1 -2
- package/internals/hooks/useOnMount.js +1 -7
- package/internals/hooks/useTimeout.d.ts +1 -11
- package/internals/hooks/useTimeout.js +1 -36
- package/internals/models/plugin.d.ts +19 -16
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +31 -38
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +14 -14
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +67 -51
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +9 -8
- package/internals/plugins/useTreeViewId/useTreeViewId.js +1 -1
- package/internals/plugins/useTreeViewId/useTreeViewId.types.d.ts +1 -1
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +30 -31
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.d.ts +2 -2
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +75 -80
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +4 -1
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +26 -31
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +11 -11
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +47 -50
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +15 -15
- package/internals/useTreeView/useTreeView.js +28 -27
- package/internals/useTreeView/useTreeView.utils.d.ts +2 -2
- package/internals/useTreeView/useTreeView.utils.js +22 -22
- package/internals/utils/extractPluginParamsFromProps.js +2 -2
- package/internals/utils/utils.js +1 -0
- package/modern/RichTreeView/RichTreeView.js +29 -29
- package/modern/SimpleTreeView/SimpleTreeView.js +23 -23
- package/modern/TreeItem/TreeItem.js +83 -70
- package/modern/TreeItem/TreeItemContent.js +10 -10
- package/modern/TreeItem/useTreeItemState.js +13 -13
- package/modern/TreeItem2/TreeItem2.js +300 -0
- package/modern/TreeItem2/TreeItem2.types.js +1 -0
- package/modern/TreeItem2/index.js +1 -0
- package/modern/TreeItem2Icon/TreeItem2Icon.js +67 -0
- package/modern/TreeItem2Icon/TreeItem2Icon.types.js +1 -0
- package/modern/TreeItem2Icon/index.js +1 -0
- package/modern/TreeItem2Provider/TreeItem2Provider.js +24 -0
- package/modern/TreeItem2Provider/TreeItem2Provider.types.js +1 -0
- package/modern/TreeItem2Provider/index.js +1 -0
- package/modern/TreeView/TreeView.js +23 -23
- package/modern/hooks/index.js +2 -1
- package/modern/hooks/useTreeItem2Utils/index.js +1 -0
- package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +61 -0
- package/modern/index.js +9 -2
- package/modern/internals/hooks/useLazyRef.js +1 -11
- package/modern/internals/hooks/useOnMount.js +1 -7
- package/modern/internals/hooks/useTimeout.js +1 -36
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +29 -29
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +65 -46
- package/modern/internals/plugins/useTreeViewId/useTreeViewId.js +1 -1
- package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +30 -30
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +74 -77
- package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +21 -22
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +43 -43
- package/modern/internals/useTreeView/useTreeView.js +28 -27
- package/modern/internals/useTreeView/useTreeView.utils.js +22 -22
- package/modern/internals/utils/utils.js +1 -0
- package/modern/useTreeItem2/index.js +1 -0
- package/modern/useTreeItem2/useTreeItem2.js +146 -0
- package/modern/useTreeItem2/useTreeItem2.types.js +1 -0
- package/node/RichTreeView/RichTreeView.js +29 -29
- package/node/SimpleTreeView/SimpleTreeView.js +23 -23
- package/node/TreeItem/TreeItem.js +83 -70
- package/node/TreeItem/TreeItemContent.js +10 -10
- package/node/TreeItem/useTreeItemState.js +13 -13
- package/node/TreeItem2/TreeItem2.js +308 -0
- package/node/TreeItem2/TreeItem2.types.js +5 -0
- package/node/TreeItem2/index.js +42 -0
- package/node/TreeItem2Icon/TreeItem2Icon.js +75 -0
- package/node/TreeItem2Icon/TreeItem2Icon.types.js +5 -0
- package/node/TreeItem2Icon/index.js +12 -0
- package/node/TreeItem2Provider/TreeItem2Provider.js +30 -0
- package/node/TreeItem2Provider/TreeItem2Provider.types.js +5 -0
- package/node/TreeItem2Provider/index.js +12 -0
- package/node/TreeView/TreeView.js +23 -23
- package/node/hooks/index.js +8 -1
- package/node/hooks/useTreeItem2Utils/index.js +12 -0
- package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +68 -0
- package/node/index.js +61 -13
- package/node/internals/hooks/useLazyRef.js +7 -13
- package/node/internals/hooks/useOnMount.js +8 -10
- package/node/internals/hooks/useTimeout.js +7 -37
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +29 -29
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +65 -46
- package/node/internals/plugins/useTreeViewId/useTreeViewId.js +1 -1
- package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +30 -30
- package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +74 -77
- package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +21 -22
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +43 -43
- package/node/internals/useTreeView/useTreeView.js +28 -27
- package/node/internals/useTreeView/useTreeView.utils.js +22 -22
- package/node/internals/utils/utils.js +1 -0
- package/node/useTreeItem2/index.js +12 -0
- package/node/useTreeItem2/useTreeItem2.js +154 -0
- package/node/useTreeItem2/useTreeItem2.types.js +5 -0
- package/package.json +5 -5
- package/themeAugmentation/components.d.ts +5 -0
- package/themeAugmentation/overrides.d.ts +1 -0
- package/themeAugmentation/props.d.ts +2 -0
- package/useTreeItem2/index.d.ts +2 -0
- package/useTreeItem2/index.js +1 -0
- package/useTreeItem2/package.json +6 -0
- package/useTreeItem2/useTreeItem2.d.ts +2 -0
- package/useTreeItem2/useTreeItem2.js +146 -0
- package/useTreeItem2/useTreeItem2.types.d.ts +115 -0
- package/useTreeItem2/useTreeItem2.types.js +1 -0
|
@@ -31,7 +31,7 @@ export const SimpleTreeViewRoot = styled('ul', {
|
|
|
31
31
|
outline: 0
|
|
32
32
|
});
|
|
33
33
|
const EMPTY_ITEMS = [];
|
|
34
|
-
const itemsPropWarning = 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://
|
|
34
|
+
const itemsPropWarning = 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/']);
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
37
|
*
|
|
@@ -44,7 +44,6 @@ const itemsPropWarning = buildWarning(['MUI X: The `SimpleTreeView` component do
|
|
|
44
44
|
* - [SimpleTreeView API](https://mui.com/x/api/tree-view/simple-tree-view/)
|
|
45
45
|
*/
|
|
46
46
|
const SimpleTreeView = /*#__PURE__*/React.forwardRef(function SimpleTreeView(inProps, ref) {
|
|
47
|
-
var _slots$root;
|
|
48
47
|
const props = useThemeProps({
|
|
49
48
|
props: inProps,
|
|
50
49
|
name: 'MuiSimpleTreeView'
|
|
@@ -72,10 +71,10 @@ const SimpleTreeView = /*#__PURE__*/React.forwardRef(function SimpleTreeView(inP
|
|
|
72
71
|
contextValue
|
|
73
72
|
} = useTreeView(pluginParams);
|
|
74
73
|
const classes = useUtilityClasses(props);
|
|
75
|
-
const Root =
|
|
74
|
+
const Root = slots?.root ?? SimpleTreeViewRoot;
|
|
76
75
|
const rootProps = useSlotProps({
|
|
77
76
|
elementType: Root,
|
|
78
|
-
externalSlotProps: slotProps
|
|
77
|
+
externalSlotProps: slotProps?.root,
|
|
79
78
|
externalForwardedProps: otherProps,
|
|
80
79
|
className: classes.root,
|
|
81
80
|
getSlotProps: getRootProps,
|
|
@@ -96,7 +95,7 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
|
|
|
96
95
|
*/
|
|
97
96
|
apiRef: PropTypes.shape({
|
|
98
97
|
current: PropTypes.shape({
|
|
99
|
-
|
|
98
|
+
focusItem: PropTypes.func.isRequired,
|
|
100
99
|
getItem: PropTypes.func.isRequired
|
|
101
100
|
})
|
|
102
101
|
}),
|
|
@@ -110,17 +109,17 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
|
|
|
110
109
|
classes: PropTypes.object,
|
|
111
110
|
className: PropTypes.string,
|
|
112
111
|
/**
|
|
113
|
-
* Expanded
|
|
112
|
+
* Expanded item ids.
|
|
114
113
|
* Used when the item's expansion is not controlled.
|
|
115
114
|
* @default []
|
|
116
115
|
*/
|
|
117
|
-
|
|
116
|
+
defaultExpandedItems: PropTypes.arrayOf(PropTypes.string),
|
|
118
117
|
/**
|
|
119
|
-
* Selected
|
|
118
|
+
* Selected item ids. (Uncontrolled)
|
|
120
119
|
* When `multiSelect` is true this takes an array of strings; when false (default) a string.
|
|
121
120
|
* @default []
|
|
122
121
|
*/
|
|
123
|
-
|
|
122
|
+
defaultSelectedItems: PropTypes.any,
|
|
124
123
|
/**
|
|
125
124
|
* If `true`, will allow focus on disabled items.
|
|
126
125
|
* @default false
|
|
@@ -132,10 +131,10 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
|
|
|
132
131
|
*/
|
|
133
132
|
disableSelection: PropTypes.bool,
|
|
134
133
|
/**
|
|
135
|
-
* Expanded
|
|
134
|
+
* Expanded item ids.
|
|
136
135
|
* Used when the item's expansion is controlled.
|
|
137
136
|
*/
|
|
138
|
-
|
|
137
|
+
expandedItems: PropTypes.arrayOf(PropTypes.string),
|
|
139
138
|
/**
|
|
140
139
|
* This prop is used to help implement the accessibility logic.
|
|
141
140
|
* If you don't provide this prop. It falls back to a randomly generated id.
|
|
@@ -149,42 +148,42 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
|
|
|
149
148
|
/**
|
|
150
149
|
* Callback fired when tree items are expanded/collapsed.
|
|
151
150
|
* @param {React.SyntheticEvent} event The event source of the callback.
|
|
152
|
-
* @param {array}
|
|
151
|
+
* @param {array} itemIds The ids of the expanded items.
|
|
153
152
|
*/
|
|
154
|
-
|
|
153
|
+
onExpandedItemsChange: PropTypes.func,
|
|
155
154
|
/**
|
|
156
155
|
* Callback fired when a tree item is expanded or collapsed.
|
|
157
156
|
* @param {React.SyntheticEvent} event The event source of the callback.
|
|
158
|
-
* @param {array}
|
|
159
|
-
* @param {array} isExpanded `true` if the
|
|
157
|
+
* @param {array} itemId The itemId of the modified item.
|
|
158
|
+
* @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
|
|
160
159
|
*/
|
|
161
|
-
|
|
160
|
+
onItemExpansionToggle: PropTypes.func,
|
|
162
161
|
/**
|
|
163
162
|
* Callback fired when tree items are focused.
|
|
164
163
|
* @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
|
|
165
|
-
* @param {string}
|
|
166
|
-
* @param {string} value of the focused
|
|
164
|
+
* @param {string} itemId The id of the focused item.
|
|
165
|
+
* @param {string} value of the focused item.
|
|
167
166
|
*/
|
|
168
|
-
|
|
167
|
+
onItemFocus: PropTypes.func,
|
|
169
168
|
/**
|
|
170
169
|
* Callback fired when a tree item is selected or deselected.
|
|
171
170
|
* @param {React.SyntheticEvent} event The event source of the callback.
|
|
172
|
-
* @param {array}
|
|
173
|
-
* @param {array} isSelected `true` if the
|
|
171
|
+
* @param {array} itemId The itemId of the modified item.
|
|
172
|
+
* @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
|
|
174
173
|
*/
|
|
175
|
-
|
|
174
|
+
onItemSelectionToggle: PropTypes.func,
|
|
176
175
|
/**
|
|
177
176
|
* Callback fired when tree items are selected/deselected.
|
|
178
177
|
* @param {React.SyntheticEvent} event The event source of the callback
|
|
179
|
-
* @param {string[] | string}
|
|
178
|
+
* @param {string[] | string} itemIds The ids of the selected items.
|
|
180
179
|
* When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
|
|
181
180
|
*/
|
|
182
|
-
|
|
181
|
+
onSelectedItemsChange: PropTypes.func,
|
|
183
182
|
/**
|
|
184
|
-
* Selected
|
|
183
|
+
* Selected item ids. (Controlled)
|
|
185
184
|
* When `multiSelect` is true this takes an array of strings; when false (default) a string.
|
|
186
185
|
*/
|
|
187
|
-
|
|
186
|
+
selectedItems: PropTypes.any,
|
|
188
187
|
/**
|
|
189
188
|
* The props used for each component slot.
|
|
190
189
|
*/
|
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"];
|
|
@@ -9,6 +9,7 @@ import PropTypes from 'prop-types';
|
|
|
9
9
|
import clsx from 'clsx';
|
|
10
10
|
import Collapse from '@mui/material/Collapse';
|
|
11
11
|
import { resolveComponentProps, useSlotProps } from '@mui/base/utils';
|
|
12
|
+
import useForkRef from '@mui/utils/useForkRef';
|
|
12
13
|
import { alpha, styled, useThemeProps } from '@mui/material/styles';
|
|
13
14
|
import unsupportedProp from '@mui/utils/unsupportedProp';
|
|
14
15
|
import elementTypeAcceptingRef from '@mui/utils/elementTypeAcceptingRef';
|
|
@@ -17,6 +18,7 @@ import { TreeItemContent } from './TreeItemContent';
|
|
|
17
18
|
import { treeItemClasses, getTreeItemUtilityClass } from './treeItemClasses';
|
|
18
19
|
import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
|
|
19
20
|
import { TreeViewCollapseIcon, TreeViewExpandIcon } from '../icons';
|
|
21
|
+
import { TreeItem2Provider } from '../TreeItem2Provider';
|
|
20
22
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
21
23
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
22
24
|
const useUtilityClasses = ownerState => {
|
|
@@ -135,7 +137,6 @@ const TreeItemGroup = styled(Collapse, {
|
|
|
135
137
|
* - [TreeItem API](https://mui.com/x/api/tree-view/tree-item/)
|
|
136
138
|
*/
|
|
137
139
|
export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps, inRef) {
|
|
138
|
-
var _ref, _inSlots$expandIcon, _ref2, _inSlots$collapseIcon, _inSlots$endIcon, _slots$groupTransitio;
|
|
139
140
|
const {
|
|
140
141
|
icons: contextIcons,
|
|
141
142
|
runItemPlugins,
|
|
@@ -145,18 +146,10 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
145
146
|
disabledItemsFocusable,
|
|
146
147
|
instance
|
|
147
148
|
} = useTreeViewContext();
|
|
148
|
-
const
|
|
149
|
+
const props = useThemeProps({
|
|
149
150
|
props: inProps,
|
|
150
151
|
name: 'MuiTreeItem'
|
|
151
152
|
});
|
|
152
|
-
const {
|
|
153
|
-
props,
|
|
154
|
-
ref,
|
|
155
|
-
wrapItem
|
|
156
|
-
} = runItemPlugins({
|
|
157
|
-
props: inPropsWithTheme,
|
|
158
|
-
ref: inRef
|
|
159
|
-
});
|
|
160
153
|
const {
|
|
161
154
|
children,
|
|
162
155
|
className,
|
|
@@ -164,19 +157,27 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
164
157
|
slotProps: inSlotProps,
|
|
165
158
|
ContentComponent = TreeItemContent,
|
|
166
159
|
ContentProps,
|
|
167
|
-
|
|
160
|
+
itemId,
|
|
168
161
|
id,
|
|
169
162
|
label,
|
|
170
163
|
onClick,
|
|
171
|
-
onMouseDown
|
|
164
|
+
onMouseDown,
|
|
165
|
+
onBlur,
|
|
166
|
+
onKeyDown
|
|
172
167
|
} = props,
|
|
173
168
|
other = _objectWithoutPropertiesLoose(props, _excluded);
|
|
169
|
+
const {
|
|
170
|
+
contentRef,
|
|
171
|
+
rootRef
|
|
172
|
+
} = runItemPlugins(props);
|
|
173
|
+
const handleRootRef = useForkRef(inRef, rootRef);
|
|
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.isNodeExpanded(
|
|
189
|
-
const focused = instance.isNodeFocused(
|
|
190
|
-
const selected = instance.isNodeSelected(
|
|
191
|
-
const disabled = instance.isNodeDisabled(
|
|
189
|
+
const expanded = instance.isNodeExpanded(itemId);
|
|
190
|
+
const focused = instance.isNodeFocused(itemId);
|
|
191
|
+
const selected = instance.isNodeSelected(itemId);
|
|
192
|
+
const disabled = instance.isNodeDisabled(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,62 +251,73 @@ 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.
|
|
262
|
+
instance.focusItem(event, itemId);
|
|
266
263
|
}
|
|
267
264
|
}
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
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;
|
|
275
|
+
return /*#__PURE__*/_jsx(TreeItem2Provider, {
|
|
276
|
+
itemId: itemId,
|
|
277
|
+
children: /*#__PURE__*/_jsxs(TreeItemRoot, _extends({
|
|
278
|
+
className: clsx(classes.root, className),
|
|
279
|
+
role: "treeitem",
|
|
280
|
+
"aria-expanded": expandable ? expanded : undefined,
|
|
281
|
+
"aria-selected": ariaSelected,
|
|
282
|
+
"aria-disabled": disabled || undefined,
|
|
283
|
+
id: idAttribute,
|
|
284
|
+
tabIndex: tabIndex
|
|
285
|
+
}, other, {
|
|
286
|
+
ownerState: ownerState,
|
|
287
|
+
onFocus: handleFocus,
|
|
288
|
+
onBlur: handleBlur,
|
|
289
|
+
onKeyDown: handleKeyDown,
|
|
290
|
+
ref: handleRootRef,
|
|
291
|
+
children: [/*#__PURE__*/_jsx(StyledTreeItemContent, _extends({
|
|
292
|
+
as: ContentComponent,
|
|
293
|
+
classes: {
|
|
294
|
+
root: classes.content,
|
|
295
|
+
expanded: classes.expanded,
|
|
296
|
+
selected: classes.selected,
|
|
297
|
+
focused: classes.focused,
|
|
298
|
+
disabled: classes.disabled,
|
|
299
|
+
iconContainer: classes.iconContainer,
|
|
300
|
+
label: classes.label
|
|
301
|
+
},
|
|
302
|
+
label: label,
|
|
303
|
+
itemId: itemId,
|
|
304
|
+
onClick: onClick,
|
|
305
|
+
onMouseDown: onMouseDown,
|
|
306
|
+
icon: icon,
|
|
307
|
+
expansionIcon: expansionIcon,
|
|
308
|
+
displayIcon: displayIcon,
|
|
309
|
+
ownerState: ownerState
|
|
310
|
+
}, ContentProps, {
|
|
311
|
+
ref: handleContentRef
|
|
312
|
+
})), children && /*#__PURE__*/_jsx(TreeItemGroup, _extends({
|
|
313
|
+
as: GroupTransition
|
|
314
|
+
}, groupTransitionProps, {
|
|
315
|
+
children: children
|
|
316
|
+
}))]
|
|
317
|
+
}))
|
|
318
|
+
});
|
|
307
319
|
});
|
|
308
|
-
TreeItem.propTypes = {
|
|
320
|
+
process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
|
|
309
321
|
// ----------------------------- Warning --------------------------------
|
|
310
322
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
311
323
|
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
@@ -320,7 +332,7 @@ TreeItem.propTypes = {
|
|
|
320
332
|
classes: PropTypes.object,
|
|
321
333
|
className: PropTypes.string,
|
|
322
334
|
/**
|
|
323
|
-
* The component used
|
|
335
|
+
* The component used to render the content of the item.
|
|
324
336
|
* @default TreeItemContent
|
|
325
337
|
*/
|
|
326
338
|
ContentComponent: elementTypeAcceptingRef,
|
|
@@ -329,21 +341,21 @@ TreeItem.propTypes = {
|
|
|
329
341
|
*/
|
|
330
342
|
ContentProps: PropTypes.object,
|
|
331
343
|
/**
|
|
332
|
-
* If `true`, the
|
|
344
|
+
* If `true`, the item is disabled.
|
|
333
345
|
* @default false
|
|
334
346
|
*/
|
|
335
347
|
disabled: PropTypes.bool,
|
|
336
348
|
/**
|
|
337
|
-
* The
|
|
349
|
+
* The id of the item.
|
|
338
350
|
*/
|
|
339
|
-
|
|
351
|
+
itemId: PropTypes.string.isRequired,
|
|
340
352
|
/**
|
|
341
|
-
* The
|
|
353
|
+
* The tree item label.
|
|
342
354
|
*/
|
|
343
|
-
|
|
355
|
+
label: PropTypes.node,
|
|
344
356
|
/**
|
|
345
357
|
* This prop isn't supported.
|
|
346
|
-
* Use the `
|
|
358
|
+
* Use the `onItemFocus` callback on the tree if you need to monitor a item's focus.
|
|
347
359
|
*/
|
|
348
360
|
onFocus: unsupportedProp,
|
|
349
361
|
/**
|
|
@@ -360,4 +372,4 @@ TreeItem.propTypes = {
|
|
|
360
372
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
361
373
|
*/
|
|
362
374
|
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
|
|
363
|
-
};
|
|
375
|
+
} : void 0;
|
|
@@ -9,19 +9,19 @@ import { TreeViewItemId } from '../models';
|
|
|
9
9
|
import { SlotComponentPropsFromProps } from '../internals/models';
|
|
10
10
|
export interface TreeItemSlots {
|
|
11
11
|
/**
|
|
12
|
-
* The icon used to collapse the
|
|
12
|
+
* The icon used to collapse the item.
|
|
13
13
|
*/
|
|
14
14
|
collapseIcon?: React.ElementType;
|
|
15
15
|
/**
|
|
16
|
-
* The icon used to expand the
|
|
16
|
+
* The icon used to expand the item.
|
|
17
17
|
*/
|
|
18
18
|
expandIcon?: React.ElementType;
|
|
19
19
|
/**
|
|
20
|
-
* The icon displayed next to an end
|
|
20
|
+
* The icon displayed next to an end item.
|
|
21
21
|
*/
|
|
22
22
|
endIcon?: React.ElementType;
|
|
23
23
|
/**
|
|
24
|
-
* The icon to display next to the tree
|
|
24
|
+
* The icon to display next to the tree item's label.
|
|
25
25
|
*/
|
|
26
26
|
icon?: React.ElementType;
|
|
27
27
|
/**
|
|
@@ -58,32 +58,34 @@ 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>;
|
|
65
65
|
/**
|
|
66
66
|
* Props applied to ContentComponent.
|
|
67
67
|
*/
|
|
68
|
-
ContentProps?: React.HTMLAttributes<HTMLElement
|
|
68
|
+
ContentProps?: React.HTMLAttributes<HTMLElement> & {
|
|
69
|
+
ref?: React.Ref<HTMLElement>;
|
|
70
|
+
};
|
|
69
71
|
/**
|
|
70
|
-
* If `true`, the
|
|
72
|
+
* If `true`, the item is disabled.
|
|
71
73
|
* @default false
|
|
72
74
|
*/
|
|
73
75
|
disabled?: boolean;
|
|
74
76
|
/**
|
|
75
77
|
* This prop isn't supported.
|
|
76
|
-
* Use the `
|
|
78
|
+
* Use the `onItemFocus` callback on the tree if you need to monitor a item's focus.
|
|
77
79
|
*/
|
|
78
80
|
onFocus?: null;
|
|
79
81
|
/**
|
|
80
|
-
* The tree
|
|
82
|
+
* The tree item label.
|
|
81
83
|
*/
|
|
82
84
|
label?: React.ReactNode;
|
|
83
85
|
/**
|
|
84
|
-
* The id of the
|
|
86
|
+
* The id of the item.
|
|
85
87
|
*/
|
|
86
|
-
|
|
88
|
+
itemId: TreeViewItemId;
|
|
87
89
|
/**
|
|
88
90
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
89
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 };
|