@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
|
*
|
|
@@ -95,7 +95,7 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
|
|
|
95
95
|
*/
|
|
96
96
|
apiRef: PropTypes.shape({
|
|
97
97
|
current: PropTypes.shape({
|
|
98
|
-
|
|
98
|
+
focusItem: PropTypes.func.isRequired,
|
|
99
99
|
getItem: PropTypes.func.isRequired
|
|
100
100
|
})
|
|
101
101
|
}),
|
|
@@ -109,17 +109,17 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
|
|
|
109
109
|
classes: PropTypes.object,
|
|
110
110
|
className: PropTypes.string,
|
|
111
111
|
/**
|
|
112
|
-
* Expanded
|
|
112
|
+
* Expanded item ids.
|
|
113
113
|
* Used when the item's expansion is not controlled.
|
|
114
114
|
* @default []
|
|
115
115
|
*/
|
|
116
|
-
|
|
116
|
+
defaultExpandedItems: PropTypes.arrayOf(PropTypes.string),
|
|
117
117
|
/**
|
|
118
|
-
* Selected
|
|
118
|
+
* Selected item ids. (Uncontrolled)
|
|
119
119
|
* When `multiSelect` is true this takes an array of strings; when false (default) a string.
|
|
120
120
|
* @default []
|
|
121
121
|
*/
|
|
122
|
-
|
|
122
|
+
defaultSelectedItems: PropTypes.any,
|
|
123
123
|
/**
|
|
124
124
|
* If `true`, will allow focus on disabled items.
|
|
125
125
|
* @default false
|
|
@@ -131,10 +131,10 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
|
|
|
131
131
|
*/
|
|
132
132
|
disableSelection: PropTypes.bool,
|
|
133
133
|
/**
|
|
134
|
-
* Expanded
|
|
134
|
+
* Expanded item ids.
|
|
135
135
|
* Used when the item's expansion is controlled.
|
|
136
136
|
*/
|
|
137
|
-
|
|
137
|
+
expandedItems: PropTypes.arrayOf(PropTypes.string),
|
|
138
138
|
/**
|
|
139
139
|
* This prop is used to help implement the accessibility logic.
|
|
140
140
|
* If you don't provide this prop. It falls back to a randomly generated id.
|
|
@@ -148,42 +148,42 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
|
|
|
148
148
|
/**
|
|
149
149
|
* Callback fired when tree items are expanded/collapsed.
|
|
150
150
|
* @param {React.SyntheticEvent} event The event source of the callback.
|
|
151
|
-
* @param {array}
|
|
151
|
+
* @param {array} itemIds The ids of the expanded items.
|
|
152
152
|
*/
|
|
153
|
-
|
|
153
|
+
onExpandedItemsChange: PropTypes.func,
|
|
154
154
|
/**
|
|
155
155
|
* Callback fired when a tree item is expanded or collapsed.
|
|
156
156
|
* @param {React.SyntheticEvent} event The event source of the callback.
|
|
157
|
-
* @param {array}
|
|
158
|
-
* @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.
|
|
159
159
|
*/
|
|
160
|
-
|
|
160
|
+
onItemExpansionToggle: PropTypes.func,
|
|
161
161
|
/**
|
|
162
162
|
* Callback fired when tree items are focused.
|
|
163
163
|
* @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
|
|
164
|
-
* @param {string}
|
|
165
|
-
* @param {string} value of the focused
|
|
164
|
+
* @param {string} itemId The id of the focused item.
|
|
165
|
+
* @param {string} value of the focused item.
|
|
166
166
|
*/
|
|
167
|
-
|
|
167
|
+
onItemFocus: PropTypes.func,
|
|
168
168
|
/**
|
|
169
169
|
* Callback fired when a tree item is selected or deselected.
|
|
170
170
|
* @param {React.SyntheticEvent} event The event source of the callback.
|
|
171
|
-
* @param {array}
|
|
172
|
-
* @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.
|
|
173
173
|
*/
|
|
174
|
-
|
|
174
|
+
onItemSelectionToggle: PropTypes.func,
|
|
175
175
|
/**
|
|
176
176
|
* Callback fired when tree items are selected/deselected.
|
|
177
177
|
* @param {React.SyntheticEvent} event The event source of the callback
|
|
178
|
-
* @param {string[] | string}
|
|
178
|
+
* @param {string[] | string} itemIds The ids of the selected items.
|
|
179
179
|
* When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
|
|
180
180
|
*/
|
|
181
|
-
|
|
181
|
+
onSelectedItemsChange: PropTypes.func,
|
|
182
182
|
/**
|
|
183
|
-
* Selected
|
|
183
|
+
* Selected item ids. (Controlled)
|
|
184
184
|
* When `multiSelect` is true this takes an array of strings; when false (default) a string.
|
|
185
185
|
*/
|
|
186
|
-
|
|
186
|
+
selectedItems: PropTypes.any,
|
|
187
187
|
/**
|
|
188
188
|
* The props used for each component slot.
|
|
189
189
|
*/
|
|
@@ -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 => {
|
|
@@ -144,18 +146,10 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
144
146
|
disabledItemsFocusable,
|
|
145
147
|
instance
|
|
146
148
|
} = useTreeViewContext();
|
|
147
|
-
const
|
|
149
|
+
const props = useThemeProps({
|
|
148
150
|
props: inProps,
|
|
149
151
|
name: 'MuiTreeItem'
|
|
150
152
|
});
|
|
151
|
-
const {
|
|
152
|
-
props,
|
|
153
|
-
ref,
|
|
154
|
-
wrapItem
|
|
155
|
-
} = runItemPlugins({
|
|
156
|
-
props: inPropsWithTheme,
|
|
157
|
-
ref: inRef
|
|
158
|
-
});
|
|
159
153
|
const {
|
|
160
154
|
children,
|
|
161
155
|
className,
|
|
@@ -163,13 +157,21 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
163
157
|
slotProps: inSlotProps,
|
|
164
158
|
ContentComponent = TreeItemContent,
|
|
165
159
|
ContentProps,
|
|
166
|
-
|
|
160
|
+
itemId,
|
|
167
161
|
id,
|
|
168
162
|
label,
|
|
169
163
|
onClick,
|
|
170
|
-
onMouseDown
|
|
164
|
+
onMouseDown,
|
|
165
|
+
onBlur,
|
|
166
|
+
onKeyDown
|
|
171
167
|
} = props,
|
|
172
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);
|
|
173
175
|
const slots = {
|
|
174
176
|
expandIcon: inSlots?.expandIcon ?? contextIcons.slots.expandIcon ?? TreeViewExpandIcon,
|
|
175
177
|
collapseIcon: inSlots?.collapseIcon ?? contextIcons.slots.collapseIcon ?? TreeViewCollapseIcon,
|
|
@@ -184,10 +186,10 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
184
186
|
return Boolean(reactChildren);
|
|
185
187
|
};
|
|
186
188
|
const expandable = isExpandable(children);
|
|
187
|
-
const expanded = instance.isNodeExpanded(
|
|
188
|
-
const focused = instance.isNodeFocused(
|
|
189
|
-
const selected = instance.isNodeSelected(
|
|
190
|
-
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);
|
|
191
193
|
const ownerState = _extends({}, props, {
|
|
192
194
|
expanded,
|
|
193
195
|
focused,
|
|
@@ -249,62 +251,73 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
249
251
|
/* single-selection trees unset aria-selected on un-selected items.
|
|
250
252
|
*
|
|
251
253
|
* If the tree does not support multiple selection, aria-selected
|
|
252
|
-
* 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.
|
|
253
255
|
* Source: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/
|
|
254
256
|
*/
|
|
255
257
|
ariaSelected = true;
|
|
256
258
|
}
|
|
257
259
|
function handleFocus(event) {
|
|
258
|
-
// DOM focus stays on the tree which manages focus with aria-activedescendant
|
|
259
|
-
if (event.target === event.currentTarget) {
|
|
260
|
-
instance.focusRoot();
|
|
261
|
-
}
|
|
262
260
|
const canBeFocused = !disabled || disabledItemsFocusable;
|
|
263
261
|
if (!focused && canBeFocused && event.currentTarget === event.target) {
|
|
264
|
-
instance.
|
|
262
|
+
instance.focusItem(event, itemId);
|
|
265
263
|
}
|
|
266
264
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
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
|
+
});
|
|
306
319
|
});
|
|
307
|
-
TreeItem.propTypes = {
|
|
320
|
+
process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
|
|
308
321
|
// ----------------------------- Warning --------------------------------
|
|
309
322
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
310
323
|
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
@@ -319,7 +332,7 @@ TreeItem.propTypes = {
|
|
|
319
332
|
classes: PropTypes.object,
|
|
320
333
|
className: PropTypes.string,
|
|
321
334
|
/**
|
|
322
|
-
* The component used
|
|
335
|
+
* The component used to render the content of the item.
|
|
323
336
|
* @default TreeItemContent
|
|
324
337
|
*/
|
|
325
338
|
ContentComponent: elementTypeAcceptingRef,
|
|
@@ -328,21 +341,21 @@ TreeItem.propTypes = {
|
|
|
328
341
|
*/
|
|
329
342
|
ContentProps: PropTypes.object,
|
|
330
343
|
/**
|
|
331
|
-
* If `true`, the
|
|
344
|
+
* If `true`, the item is disabled.
|
|
332
345
|
* @default false
|
|
333
346
|
*/
|
|
334
347
|
disabled: PropTypes.bool,
|
|
335
348
|
/**
|
|
336
|
-
* The
|
|
349
|
+
* The id of the item.
|
|
337
350
|
*/
|
|
338
|
-
|
|
351
|
+
itemId: PropTypes.string.isRequired,
|
|
339
352
|
/**
|
|
340
|
-
* The
|
|
353
|
+
* The tree item label.
|
|
341
354
|
*/
|
|
342
|
-
|
|
355
|
+
label: PropTypes.node,
|
|
343
356
|
/**
|
|
344
357
|
* This prop isn't supported.
|
|
345
|
-
* Use the `
|
|
358
|
+
* Use the `onItemFocus` callback on the tree if you need to monitor a item's focus.
|
|
346
359
|
*/
|
|
347
360
|
onFocus: unsupportedProp,
|
|
348
361
|
/**
|
|
@@ -359,4 +372,4 @@ TreeItem.propTypes = {
|
|
|
359
372
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
360
373
|
*/
|
|
361
374
|
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
|
|
362
|
-
};
|
|
375
|
+
} : void 0;
|
|
@@ -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 };
|
|
@@ -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.isNodeExpandable(
|
|
10
|
-
const expanded = instance.isNodeExpanded(
|
|
11
|
-
const focused = instance.isNodeFocused(
|
|
12
|
-
const selected = instance.isNodeSelected(
|
|
13
|
-
const disabled = instance.isNodeDisabled(
|
|
9
|
+
const expandable = instance.isNodeExpandable(itemId);
|
|
10
|
+
const expanded = instance.isNodeExpanded(itemId);
|
|
11
|
+
const focused = instance.isNodeFocused(itemId);
|
|
12
|
+
const selected = instance.isNodeSelected(itemId);
|
|
13
|
+
const disabled = instance.isNodeDisabled(itemId);
|
|
14
14
|
const handleExpansion = event => {
|
|
15
15
|
if (!disabled) {
|
|
16
16
|
if (!focused) {
|
|
17
|
-
instance.
|
|
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.isNodeExpanded(
|
|
23
|
-
instance.toggleNodeExpansion(event,
|
|
22
|
+
if (expandable && !(multiple && instance.isNodeExpanded(itemId))) {
|
|
23
|
+
instance.toggleNodeExpansion(event, itemId);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
};
|
|
27
27
|
const handleSelection = event => {
|
|
28
28
|
if (!disabled) {
|
|
29
29
|
if (!focused) {
|
|
30
|
-
instance.
|
|
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.selectNode(event,
|
|
39
|
+
instance.selectNode(event, itemId, true);
|
|
40
40
|
}
|
|
41
41
|
} else {
|
|
42
|
-
instance.selectNode(event,
|
|
42
|
+
instance.selectNode(event, itemId);
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
};
|