@mui/x-tree-view 7.0.0-beta.6 → 7.0.0-beta.7
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 +117 -1
- package/RichTreeView/RichTreeView.js +22 -22
- package/RichTreeView/RichTreeView.types.d.ts +2 -1
- package/SimpleTreeView/SimpleTreeView.js +22 -22
- package/TreeItem/TreeItem.js +57 -53
- package/TreeItem/TreeItem.types.d.ts +10 -8
- package/TreeItem/useTreeItemState.js +2 -2
- package/TreeItem2/TreeItem2.d.ts +18 -0
- package/TreeItem2/TreeItem2.js +301 -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 +68 -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.js +22 -22
- 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/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 +25 -25
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +11 -11
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -12
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +5 -5
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +17 -17
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +11 -9
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +2 -2
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +11 -11
- package/internals/useTreeView/useTreeView.js +27 -25
- package/modern/RichTreeView/RichTreeView.js +22 -22
- package/modern/SimpleTreeView/SimpleTreeView.js +22 -22
- package/modern/TreeItem/TreeItem.js +57 -53
- package/modern/TreeItem/useTreeItemState.js +2 -2
- 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 +22 -22
- 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 +24 -24
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -12
- package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +16 -16
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +11 -9
- package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +2 -2
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
- package/modern/internals/useTreeView/useTreeView.js +27 -25
- package/modern/useTreeItem2/index.js +1 -0
- package/modern/useTreeItem2/useTreeItem2.js +135 -0
- package/modern/useTreeItem2/useTreeItem2.types.js +1 -0
- package/node/RichTreeView/RichTreeView.js +22 -22
- package/node/SimpleTreeView/SimpleTreeView.js +22 -22
- package/node/TreeItem/TreeItem.js +57 -53
- package/node/TreeItem/useTreeItemState.js +2 -2
- 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 +22 -22
- 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 +24 -24
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -12
- package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +16 -16
- package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +11 -9
- package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +2 -2
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
- package/node/internals/useTreeView/useTreeView.js +27 -25
- package/node/useTreeItem2/index.js +12 -0
- package/node/useTreeItem2/useTreeItem2.js +143 -0
- package/node/useTreeItem2/useTreeItem2.types.js +5 -0
- package/package.json +1 -1
- 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 +138 -0
- package/useTreeItem2/useTreeItem2.types.d.ts +113 -0
- package/useTreeItem2/useTreeItem2.types.js +1 -0
|
@@ -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,
|
|
@@ -170,6 +164,12 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
170
164
|
onMouseDown
|
|
171
165
|
} = props,
|
|
172
166
|
other = _objectWithoutPropertiesLoose(props, _excluded);
|
|
167
|
+
const {
|
|
168
|
+
contentRef,
|
|
169
|
+
rootRef
|
|
170
|
+
} = runItemPlugins(props);
|
|
171
|
+
const handleRootRef = useForkRef(inRef, rootRef);
|
|
172
|
+
const handleContentRef = useForkRef(ContentProps?.ref, contentRef);
|
|
173
173
|
const slots = {
|
|
174
174
|
expandIcon: inSlots?.expandIcon ?? contextIcons.slots.expandIcon ?? TreeViewExpandIcon,
|
|
175
175
|
collapseIcon: inSlots?.collapseIcon ?? contextIcons.slots.collapseIcon ?? TreeViewCollapseIcon,
|
|
@@ -261,50 +261,54 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
261
261
|
}
|
|
262
262
|
const canBeFocused = !disabled || disabledItemsFocusable;
|
|
263
263
|
if (!focused && canBeFocused && event.currentTarget === event.target) {
|
|
264
|
-
instance.
|
|
264
|
+
instance.focusItem(event, nodeId);
|
|
265
265
|
}
|
|
266
266
|
}
|
|
267
267
|
const idAttribute = instance.getTreeItemId(nodeId, id);
|
|
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
|
-
|
|
268
|
+
return /*#__PURE__*/_jsx(TreeItem2Provider, {
|
|
269
|
+
nodeId: nodeId,
|
|
270
|
+
children: /*#__PURE__*/_jsxs(TreeItemRoot, _extends({
|
|
271
|
+
className: clsx(classes.root, className),
|
|
272
|
+
role: "treeitem",
|
|
273
|
+
"aria-expanded": expandable ? expanded : undefined,
|
|
274
|
+
"aria-selected": ariaSelected,
|
|
275
|
+
"aria-disabled": disabled || undefined,
|
|
276
|
+
id: idAttribute,
|
|
277
|
+
tabIndex: -1
|
|
278
|
+
}, other, {
|
|
279
|
+
ownerState: ownerState,
|
|
280
|
+
onFocus: handleFocus,
|
|
281
|
+
ref: handleRootRef,
|
|
282
|
+
children: [/*#__PURE__*/_jsx(StyledTreeItemContent, _extends({
|
|
283
|
+
as: ContentComponent,
|
|
284
|
+
classes: {
|
|
285
|
+
root: classes.content,
|
|
286
|
+
expanded: classes.expanded,
|
|
287
|
+
selected: classes.selected,
|
|
288
|
+
focused: classes.focused,
|
|
289
|
+
disabled: classes.disabled,
|
|
290
|
+
iconContainer: classes.iconContainer,
|
|
291
|
+
label: classes.label
|
|
292
|
+
},
|
|
293
|
+
label: label,
|
|
294
|
+
nodeId: nodeId,
|
|
295
|
+
onClick: onClick,
|
|
296
|
+
onMouseDown: onMouseDown,
|
|
297
|
+
icon: icon,
|
|
298
|
+
expansionIcon: expansionIcon,
|
|
299
|
+
displayIcon: displayIcon,
|
|
300
|
+
ownerState: ownerState
|
|
301
|
+
}, ContentProps, {
|
|
302
|
+
ref: handleContentRef
|
|
303
|
+
})), children && /*#__PURE__*/_jsx(TreeItemGroup, _extends({
|
|
304
|
+
as: GroupTransition
|
|
305
|
+
}, groupTransitionProps, {
|
|
306
|
+
children: children
|
|
307
|
+
}))]
|
|
308
|
+
}))
|
|
309
|
+
});
|
|
306
310
|
});
|
|
307
|
-
TreeItem.propTypes = {
|
|
311
|
+
process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
|
|
308
312
|
// ----------------------------- Warning --------------------------------
|
|
309
313
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
310
314
|
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
@@ -328,12 +332,12 @@ TreeItem.propTypes = {
|
|
|
328
332
|
*/
|
|
329
333
|
ContentProps: PropTypes.object,
|
|
330
334
|
/**
|
|
331
|
-
* If `true`, the
|
|
335
|
+
* If `true`, the item is disabled.
|
|
332
336
|
* @default false
|
|
333
337
|
*/
|
|
334
338
|
disabled: PropTypes.bool,
|
|
335
339
|
/**
|
|
336
|
-
* The tree
|
|
340
|
+
* The tree item label.
|
|
337
341
|
*/
|
|
338
342
|
label: PropTypes.node,
|
|
339
343
|
/**
|
|
@@ -342,7 +346,7 @@ TreeItem.propTypes = {
|
|
|
342
346
|
nodeId: PropTypes.string.isRequired,
|
|
343
347
|
/**
|
|
344
348
|
* This prop isn't supported.
|
|
345
|
-
* Use the `
|
|
349
|
+
* Use the `onItemFocus` callback on the tree if you need to monitor a item's focus.
|
|
346
350
|
*/
|
|
347
351
|
onFocus: unsupportedProp,
|
|
348
352
|
/**
|
|
@@ -359,4 +363,4 @@ TreeItem.propTypes = {
|
|
|
359
363
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
360
364
|
*/
|
|
361
365
|
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
|
|
362
|
-
};
|
|
366
|
+
} : void 0;
|
|
@@ -14,7 +14,7 @@ export function useTreeItemState(nodeId) {
|
|
|
14
14
|
const handleExpansion = event => {
|
|
15
15
|
if (!disabled) {
|
|
16
16
|
if (!focused) {
|
|
17
|
-
instance.
|
|
17
|
+
instance.focusItem(event, nodeId);
|
|
18
18
|
}
|
|
19
19
|
const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
|
|
20
20
|
|
|
@@ -27,7 +27,7 @@ export function useTreeItemState(nodeId) {
|
|
|
27
27
|
const handleSelection = event => {
|
|
28
28
|
if (!disabled) {
|
|
29
29
|
if (!focused) {
|
|
30
|
-
instance.
|
|
30
|
+
instance.focusItem(event, nodeId);
|
|
31
31
|
}
|
|
32
32
|
const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
|
|
33
33
|
if (multiple) {
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
2
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
|
+
const _excluded = ["id", "nodeId", "label", "disabled", "children", "slots", "slotProps"];
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import PropTypes from 'prop-types';
|
|
6
|
+
import clsx from 'clsx';
|
|
7
|
+
import unsupportedProp from '@mui/utils/unsupportedProp';
|
|
8
|
+
import { alpha, styled, useThemeProps } from '@mui/material/styles';
|
|
9
|
+
import Collapse from '@mui/material/Collapse';
|
|
10
|
+
import { useSlotProps } from '@mui/base/utils';
|
|
11
|
+
import { shouldForwardProp } from '@mui/system';
|
|
12
|
+
import composeClasses from '@mui/utils/composeClasses';
|
|
13
|
+
import { unstable_useTreeItem2 as useTreeItem2 } from '../useTreeItem2';
|
|
14
|
+
import { getTreeItemUtilityClass, treeItemClasses } from '../TreeItem';
|
|
15
|
+
import { TreeItem2Icon } from '../TreeItem2Icon';
|
|
16
|
+
import { TreeItem2Provider } from '../TreeItem2Provider';
|
|
17
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
18
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
19
|
+
export const TreeItem2Root = styled('li', {
|
|
20
|
+
name: 'MuiTreeItem2',
|
|
21
|
+
slot: 'Root',
|
|
22
|
+
overridesResolver: (props, styles) => styles.root
|
|
23
|
+
})({
|
|
24
|
+
listStyle: 'none',
|
|
25
|
+
margin: 0,
|
|
26
|
+
padding: 0,
|
|
27
|
+
outline: 0
|
|
28
|
+
});
|
|
29
|
+
export const TreeItem2Content = styled('div', {
|
|
30
|
+
name: 'MuiTreeItem2',
|
|
31
|
+
slot: 'Content',
|
|
32
|
+
overridesResolver: (props, styles) => styles.content,
|
|
33
|
+
shouldForwardProp: prop => shouldForwardProp(prop) && prop !== 'status'
|
|
34
|
+
})(({
|
|
35
|
+
theme
|
|
36
|
+
}) => ({
|
|
37
|
+
padding: theme.spacing(0.5, 1),
|
|
38
|
+
borderRadius: theme.shape.borderRadius,
|
|
39
|
+
width: '100%',
|
|
40
|
+
boxSizing: 'border-box',
|
|
41
|
+
// prevent width + padding to overflow
|
|
42
|
+
display: 'flex',
|
|
43
|
+
alignItems: 'center',
|
|
44
|
+
gap: theme.spacing(1),
|
|
45
|
+
cursor: 'pointer',
|
|
46
|
+
WebkitTapHighlightColor: 'transparent',
|
|
47
|
+
'&:hover': {
|
|
48
|
+
backgroundColor: (theme.vars || theme).palette.action.hover,
|
|
49
|
+
// Reset on touch devices, it doesn't add specificity
|
|
50
|
+
'@media (hover: none)': {
|
|
51
|
+
backgroundColor: 'transparent'
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
[`& .${treeItemClasses.groupTransition}`]: {
|
|
55
|
+
margin: 0,
|
|
56
|
+
padding: 0,
|
|
57
|
+
paddingLeft: 12
|
|
58
|
+
},
|
|
59
|
+
variants: [{
|
|
60
|
+
props: ({
|
|
61
|
+
status
|
|
62
|
+
}) => status.disabled,
|
|
63
|
+
style: {
|
|
64
|
+
opacity: (theme.vars || theme).palette.action.disabledOpacity,
|
|
65
|
+
backgroundColor: 'transparent'
|
|
66
|
+
}
|
|
67
|
+
}, {
|
|
68
|
+
props: ({
|
|
69
|
+
status
|
|
70
|
+
}) => status.focused,
|
|
71
|
+
style: {
|
|
72
|
+
backgroundColor: (theme.vars || theme).palette.action.focus
|
|
73
|
+
}
|
|
74
|
+
}, {
|
|
75
|
+
props: ({
|
|
76
|
+
status
|
|
77
|
+
}) => status.selected,
|
|
78
|
+
style: {
|
|
79
|
+
backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity),
|
|
80
|
+
'&:hover': {
|
|
81
|
+
backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.hoverOpacity}))` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity),
|
|
82
|
+
// Reset on touch devices, it doesn't add specificity
|
|
83
|
+
'@media (hover: none)': {
|
|
84
|
+
backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity)
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}, {
|
|
89
|
+
props: ({
|
|
90
|
+
status
|
|
91
|
+
}) => status.selected && status.focused,
|
|
92
|
+
style: {
|
|
93
|
+
backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.focusOpacity}))` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.focusOpacity)
|
|
94
|
+
}
|
|
95
|
+
}]
|
|
96
|
+
}));
|
|
97
|
+
export const TreeItem2Label = styled('div', {
|
|
98
|
+
name: 'MuiTreeItem2',
|
|
99
|
+
slot: 'Label',
|
|
100
|
+
overridesResolver: (props, styles) => styles.label
|
|
101
|
+
})(({
|
|
102
|
+
theme
|
|
103
|
+
}) => _extends({
|
|
104
|
+
width: '100%',
|
|
105
|
+
boxSizing: 'border-box',
|
|
106
|
+
// prevent width + padding to overflow
|
|
107
|
+
// fixes overflow - see https://github.com/mui/material-ui/issues/27372
|
|
108
|
+
minWidth: 0,
|
|
109
|
+
position: 'relative'
|
|
110
|
+
}, theme.typography.body1));
|
|
111
|
+
export const TreeItem2IconContainer = styled('div', {
|
|
112
|
+
name: 'MuiTreeItem2',
|
|
113
|
+
slot: 'IconContainer',
|
|
114
|
+
overridesResolver: (props, styles) => styles.iconContainer
|
|
115
|
+
})({
|
|
116
|
+
width: 16,
|
|
117
|
+
display: 'flex',
|
|
118
|
+
flexShrink: 0,
|
|
119
|
+
justifyContent: 'center',
|
|
120
|
+
'& svg': {
|
|
121
|
+
fontSize: 18
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
export const TreeItem2GroupTransition = styled(Collapse, {
|
|
125
|
+
name: 'MuiTreeItem2GroupTransition',
|
|
126
|
+
slot: 'GroupTransition',
|
|
127
|
+
overridesResolver: (props, styles) => styles.groupTransition
|
|
128
|
+
})({
|
|
129
|
+
margin: 0,
|
|
130
|
+
padding: 0,
|
|
131
|
+
paddingLeft: 12
|
|
132
|
+
});
|
|
133
|
+
const useUtilityClasses = ownerState => {
|
|
134
|
+
const {
|
|
135
|
+
classes
|
|
136
|
+
} = ownerState;
|
|
137
|
+
const slots = {
|
|
138
|
+
root: ['root'],
|
|
139
|
+
content: ['content'],
|
|
140
|
+
expanded: ['expanded'],
|
|
141
|
+
selected: ['selected'],
|
|
142
|
+
focused: ['focused'],
|
|
143
|
+
disabled: ['disabled'],
|
|
144
|
+
iconContainer: ['iconContainer'],
|
|
145
|
+
label: ['label'],
|
|
146
|
+
groupTransition: ['groupTransition']
|
|
147
|
+
};
|
|
148
|
+
return composeClasses(slots, getTreeItemUtilityClass, classes);
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
*
|
|
153
|
+
* Demos:
|
|
154
|
+
*
|
|
155
|
+
* - [Tree View](https://mui.com/x/react-tree-view/)
|
|
156
|
+
*
|
|
157
|
+
* API:
|
|
158
|
+
*
|
|
159
|
+
* - [TreeItem2 API](https://mui.com/x/api/tree-view/tree-item-2/)
|
|
160
|
+
*/
|
|
161
|
+
export const TreeItem2 = /*#__PURE__*/React.forwardRef(function TreeItem2(inProps, forwardedRef) {
|
|
162
|
+
const props = useThemeProps({
|
|
163
|
+
props: inProps,
|
|
164
|
+
name: 'MuiTreeItem2'
|
|
165
|
+
});
|
|
166
|
+
const {
|
|
167
|
+
id,
|
|
168
|
+
nodeId,
|
|
169
|
+
label,
|
|
170
|
+
disabled,
|
|
171
|
+
children,
|
|
172
|
+
slots = {},
|
|
173
|
+
slotProps = {}
|
|
174
|
+
} = props,
|
|
175
|
+
other = _objectWithoutPropertiesLoose(props, _excluded);
|
|
176
|
+
const {
|
|
177
|
+
getRootProps,
|
|
178
|
+
getContentProps,
|
|
179
|
+
getIconContainerProps,
|
|
180
|
+
getLabelProps,
|
|
181
|
+
getGroupTransitionProps,
|
|
182
|
+
status
|
|
183
|
+
} = useTreeItem2({
|
|
184
|
+
id,
|
|
185
|
+
nodeId,
|
|
186
|
+
children,
|
|
187
|
+
label,
|
|
188
|
+
disabled
|
|
189
|
+
});
|
|
190
|
+
const ownerState = _extends({}, props, status);
|
|
191
|
+
const classes = useUtilityClasses(ownerState);
|
|
192
|
+
const Root = slots.root ?? TreeItem2Root;
|
|
193
|
+
const rootProps = useSlotProps({
|
|
194
|
+
elementType: Root,
|
|
195
|
+
getSlotProps: getRootProps,
|
|
196
|
+
externalForwardedProps: other,
|
|
197
|
+
externalSlotProps: slotProps.root,
|
|
198
|
+
additionalProps: {
|
|
199
|
+
ref: forwardedRef
|
|
200
|
+
},
|
|
201
|
+
ownerState: {},
|
|
202
|
+
className: classes.root
|
|
203
|
+
});
|
|
204
|
+
const Content = slots.content ?? TreeItem2Content;
|
|
205
|
+
const contentProps = useSlotProps({
|
|
206
|
+
elementType: Content,
|
|
207
|
+
getSlotProps: getContentProps,
|
|
208
|
+
externalSlotProps: slotProps.content,
|
|
209
|
+
ownerState: {},
|
|
210
|
+
className: clsx(classes.content, status.expanded && classes.expanded, status.selected && classes.selected, status.focused && classes.focused, status.disabled && classes.disabled)
|
|
211
|
+
});
|
|
212
|
+
const IconContainer = slots.iconContainer ?? TreeItem2IconContainer;
|
|
213
|
+
const iconContainerProps = useSlotProps({
|
|
214
|
+
elementType: IconContainer,
|
|
215
|
+
getSlotProps: getIconContainerProps,
|
|
216
|
+
externalSlotProps: slotProps.iconContainer,
|
|
217
|
+
ownerState: {},
|
|
218
|
+
className: classes.iconContainer
|
|
219
|
+
});
|
|
220
|
+
const Label = slots.label ?? TreeItem2Label;
|
|
221
|
+
const labelProps = useSlotProps({
|
|
222
|
+
elementType: Label,
|
|
223
|
+
getSlotProps: getLabelProps,
|
|
224
|
+
externalSlotProps: slotProps.label,
|
|
225
|
+
ownerState: {},
|
|
226
|
+
className: classes.label
|
|
227
|
+
});
|
|
228
|
+
const GroupTransition = slots.groupTransition ?? undefined;
|
|
229
|
+
const groupTransitionProps = useSlotProps({
|
|
230
|
+
elementType: GroupTransition,
|
|
231
|
+
getSlotProps: getGroupTransitionProps,
|
|
232
|
+
externalSlotProps: slotProps.groupTransition,
|
|
233
|
+
ownerState: {},
|
|
234
|
+
className: classes.groupTransition
|
|
235
|
+
});
|
|
236
|
+
return /*#__PURE__*/_jsx(TreeItem2Provider, {
|
|
237
|
+
nodeId: nodeId,
|
|
238
|
+
children: /*#__PURE__*/_jsxs(Root, _extends({}, rootProps, {
|
|
239
|
+
children: [/*#__PURE__*/_jsxs(Content, _extends({}, contentProps, {
|
|
240
|
+
children: [/*#__PURE__*/_jsx(IconContainer, _extends({}, iconContainerProps, {
|
|
241
|
+
children: /*#__PURE__*/_jsx(TreeItem2Icon, {
|
|
242
|
+
status: status,
|
|
243
|
+
slots: slots,
|
|
244
|
+
slotProps: slotProps
|
|
245
|
+
})
|
|
246
|
+
})), /*#__PURE__*/_jsx(Label, _extends({}, labelProps))]
|
|
247
|
+
})), children && /*#__PURE__*/_jsx(TreeItem2GroupTransition, _extends({
|
|
248
|
+
as: GroupTransition
|
|
249
|
+
}, groupTransitionProps))]
|
|
250
|
+
}))
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
process.env.NODE_ENV !== "production" ? TreeItem2.propTypes = {
|
|
254
|
+
// ----------------------------- Warning --------------------------------
|
|
255
|
+
// | These PropTypes are generated from the TypeScript type definitions |
|
|
256
|
+
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
257
|
+
// ----------------------------------------------------------------------
|
|
258
|
+
/**
|
|
259
|
+
* The content of the component.
|
|
260
|
+
*/
|
|
261
|
+
children: PropTypes.node,
|
|
262
|
+
/**
|
|
263
|
+
* Override or extend the styles applied to the component.
|
|
264
|
+
*/
|
|
265
|
+
classes: PropTypes.object,
|
|
266
|
+
className: PropTypes.string,
|
|
267
|
+
/**
|
|
268
|
+
* If `true`, the node is disabled.
|
|
269
|
+
* @default false
|
|
270
|
+
*/
|
|
271
|
+
disabled: PropTypes.bool,
|
|
272
|
+
/**
|
|
273
|
+
* The id attribute of the node. If not provided, it will be generated.
|
|
274
|
+
*/
|
|
275
|
+
id: PropTypes.string,
|
|
276
|
+
/**
|
|
277
|
+
* The label of the node.
|
|
278
|
+
*/
|
|
279
|
+
label: PropTypes.node,
|
|
280
|
+
/**
|
|
281
|
+
* The id of the node.
|
|
282
|
+
* Must be unique.
|
|
283
|
+
*/
|
|
284
|
+
nodeId: PropTypes.string.isRequired,
|
|
285
|
+
/**
|
|
286
|
+
* This prop isn't supported.
|
|
287
|
+
* Use the `onItemFocus` callback on the tree if you need to monitor a item's focus.
|
|
288
|
+
*/
|
|
289
|
+
onFocus: unsupportedProp,
|
|
290
|
+
/**
|
|
291
|
+
* The props used for each component slot.
|
|
292
|
+
* @default {}
|
|
293
|
+
*/
|
|
294
|
+
slotProps: PropTypes.object,
|
|
295
|
+
/**
|
|
296
|
+
* Overridable component slots.
|
|
297
|
+
* @default {}
|
|
298
|
+
*/
|
|
299
|
+
slots: PropTypes.object
|
|
300
|
+
} : void 0;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { TreeItem2, TreeItem2Root, TreeItem2Content, TreeItem2IconContainer, TreeItem2GroupTransition, TreeItem2Label } from './TreeItem2';
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import PropTypes from 'prop-types';
|
|
4
|
+
import { resolveComponentProps, useSlotProps } from '@mui/base/utils';
|
|
5
|
+
import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
|
|
6
|
+
import { TreeViewCollapseIcon, TreeViewExpandIcon } from '../icons';
|
|
7
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
+
function TreeItem2Icon(props) {
|
|
9
|
+
const {
|
|
10
|
+
slots,
|
|
11
|
+
slotProps,
|
|
12
|
+
status
|
|
13
|
+
} = props;
|
|
14
|
+
const context = useTreeViewContext();
|
|
15
|
+
const contextIcons = _extends({}, context.icons.slots, {
|
|
16
|
+
expandIcon: context.icons.slots.expandIcon ?? TreeViewExpandIcon,
|
|
17
|
+
collapseIcon: context.icons.slots.collapseIcon ?? TreeViewCollapseIcon
|
|
18
|
+
});
|
|
19
|
+
const contextIconProps = context.icons.slotProps;
|
|
20
|
+
let iconName;
|
|
21
|
+
if (slots?.icon) {
|
|
22
|
+
iconName = 'icon';
|
|
23
|
+
} else if (status.expandable) {
|
|
24
|
+
if (status.expanded) {
|
|
25
|
+
iconName = 'collapseIcon';
|
|
26
|
+
} else {
|
|
27
|
+
iconName = 'expandIcon';
|
|
28
|
+
}
|
|
29
|
+
} else {
|
|
30
|
+
iconName = 'endIcon';
|
|
31
|
+
}
|
|
32
|
+
const Icon = slots?.[iconName] ?? contextIcons[iconName];
|
|
33
|
+
const iconProps = useSlotProps({
|
|
34
|
+
elementType: Icon,
|
|
35
|
+
externalSlotProps: tempOwnerState => _extends({}, resolveComponentProps(contextIconProps[iconName], tempOwnerState), resolveComponentProps(slotProps?.[iconName], tempOwnerState)),
|
|
36
|
+
// TODO: Add proper ownerState
|
|
37
|
+
ownerState: {}
|
|
38
|
+
});
|
|
39
|
+
if (!Icon) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
return /*#__PURE__*/_jsx(Icon, _extends({}, iconProps));
|
|
43
|
+
}
|
|
44
|
+
process.env.NODE_ENV !== "production" ? TreeItem2Icon.propTypes = {
|
|
45
|
+
// ----------------------------- Warning --------------------------------
|
|
46
|
+
// | These PropTypes are generated from the TypeScript type definitions |
|
|
47
|
+
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
48
|
+
// ----------------------------------------------------------------------
|
|
49
|
+
/**
|
|
50
|
+
* The props used for each component slot.
|
|
51
|
+
* @default {}
|
|
52
|
+
*/
|
|
53
|
+
slotProps: PropTypes.object,
|
|
54
|
+
/**
|
|
55
|
+
* Overridable component slots.
|
|
56
|
+
* @default {}
|
|
57
|
+
*/
|
|
58
|
+
slots: PropTypes.object,
|
|
59
|
+
status: PropTypes.shape({
|
|
60
|
+
disabled: PropTypes.bool.isRequired,
|
|
61
|
+
expandable: PropTypes.bool.isRequired,
|
|
62
|
+
expanded: PropTypes.bool.isRequired,
|
|
63
|
+
focused: PropTypes.bool.isRequired,
|
|
64
|
+
selected: PropTypes.bool.isRequired
|
|
65
|
+
}).isRequired
|
|
66
|
+
} : void 0;
|
|
67
|
+
export { TreeItem2Icon };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { TreeItem2Icon } from './TreeItem2Icon';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import PropTypes from 'prop-types';
|
|
2
|
+
import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
|
|
3
|
+
function TreeItem2Provider(props) {
|
|
4
|
+
const {
|
|
5
|
+
children,
|
|
6
|
+
nodeId
|
|
7
|
+
} = props;
|
|
8
|
+
const {
|
|
9
|
+
wrapItem
|
|
10
|
+
} = useTreeViewContext();
|
|
11
|
+
return wrapItem({
|
|
12
|
+
children,
|
|
13
|
+
nodeId
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
TreeItem2Provider.propTypes = {
|
|
17
|
+
// ----------------------------- Warning --------------------------------
|
|
18
|
+
// | These PropTypes are generated from the TypeScript type definitions |
|
|
19
|
+
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
20
|
+
// ----------------------------------------------------------------------
|
|
21
|
+
children: PropTypes.node,
|
|
22
|
+
nodeId: PropTypes.string.isRequired
|
|
23
|
+
};
|
|
24
|
+
export { TreeItem2Provider };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { TreeItem2Provider } from './TreeItem2Provider';
|