@mui/x-tree-view 7.22.0 → 8.0.0-alpha.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 +161 -48
- package/README.md +2 -2
- package/RichTreeView/RichTreeView.js +20 -1
- package/RichTreeView/RichTreeView.types.d.ts +4 -4
- package/SimpleTreeView/SimpleTreeView.js +21 -3
- package/TreeItem/TreeItem.d.ts +20 -2
- package/TreeItem/TreeItem.js +238 -368
- package/TreeItem/TreeItem.types.d.ts +51 -86
- package/TreeItem/index.d.ts +1 -4
- package/TreeItem/index.js +2 -4
- package/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.d.ts +7 -0
- package/{modern/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js} +26 -21
- package/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.d.ts → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.d.ts} +1 -1
- package/TreeItemDragAndDropOverlay/index.d.ts +2 -0
- package/TreeItemDragAndDropOverlay/index.js +1 -0
- package/{TreeItem2LabelInput → TreeItemDragAndDropOverlay}/package.json +1 -1
- package/TreeItemIcon/TreeItemIcon.d.ts +7 -0
- package/{TreeItem2Icon/TreeItem2Icon.js → TreeItemIcon/TreeItemIcon.js} +5 -3
- package/{TreeItem2Icon/TreeItem2Icon.types.d.ts → TreeItemIcon/TreeItemIcon.types.d.ts} +7 -7
- package/TreeItemIcon/index.d.ts +2 -0
- package/TreeItemIcon/index.js +1 -0
- package/{useTreeItem2 → TreeItemIcon}/package.json +1 -1
- package/TreeItemLabelInput/TreeItemLabelInput.d.ts +5 -0
- package/{TreeItem2LabelInput/TreeItem2LabelInput.js → TreeItemLabelInput/TreeItemLabelInput.js} +7 -3
- package/{TreeItem2LabelInput/TreeItem2LabelInput.types.d.ts → TreeItemLabelInput/TreeItemLabelInput.types.d.ts} +1 -1
- package/TreeItemLabelInput/index.d.ts +2 -0
- package/TreeItemLabelInput/index.js +1 -0
- package/{TreeItem2Provider → TreeItemLabelInput}/package.json +1 -1
- package/TreeItemProvider/TreeItemProvider.d.ts +9 -0
- package/{modern/TreeItem2Provider/TreeItem2Provider.js → TreeItemProvider/TreeItemProvider.js} +7 -3
- package/{TreeItem2Provider/TreeItem2Provider.types.d.ts → TreeItemProvider/TreeItemProvider.types.d.ts} +1 -1
- package/TreeItemProvider/index.d.ts +2 -0
- package/TreeItemProvider/index.js +1 -0
- package/{TreeItem2Icon → TreeItemProvider}/package.json +1 -1
- package/hooks/index.d.ts +1 -1
- package/hooks/index.js +1 -1
- package/hooks/useTreeItemUtils/index.d.ts +1 -0
- package/hooks/useTreeItemUtils/index.js +1 -0
- package/hooks/{useTreeItem2Utils/useTreeItem2Utils.d.ts → useTreeItemUtils/useTreeItemUtils.d.ts} +11 -11
- package/hooks/{useTreeItem2Utils/useTreeItem2Utils.js → useTreeItemUtils/useTreeItemUtils.js} +5 -3
- package/index.d.ts +5 -5
- package/index.js +6 -6
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +2 -1
- package/internals/components/RichTreeViewItems.d.ts +1 -2
- package/internals/index.d.ts +1 -1
- package/internals/models/helpers.d.ts +0 -2
- package/internals/models/itemPlugin.d.ts +11 -8
- package/internals/models/plugin.d.ts +1 -1
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +2 -1
- package/internals/plugins/useTreeViewItems/useTreeViewItems.js +2 -4
- package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +3 -5
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.d.ts +1 -1
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +6 -5
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.d.ts +2 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +86 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +43 -18
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +33 -3
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +20 -1
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +95 -0
- package/models/items.d.ts +4 -0
- package/modern/RichTreeView/RichTreeView.js +20 -1
- package/modern/SimpleTreeView/SimpleTreeView.js +21 -3
- package/modern/TreeItem/TreeItem.js +238 -368
- package/modern/TreeItem/index.js +2 -4
- package/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js → modern/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js} +26 -21
- package/modern/TreeItemDragAndDropOverlay/index.js +1 -0
- package/modern/{TreeItem2Icon/TreeItem2Icon.js → TreeItemIcon/TreeItemIcon.js} +5 -3
- package/modern/TreeItemIcon/index.js +1 -0
- package/modern/{TreeItem2LabelInput/TreeItem2LabelInput.js → TreeItemLabelInput/TreeItemLabelInput.js} +7 -3
- package/modern/TreeItemLabelInput/index.js +1 -0
- package/{TreeItem2Provider/TreeItem2Provider.js → modern/TreeItemProvider/TreeItemProvider.js} +7 -3
- package/modern/TreeItemProvider/index.js +1 -0
- package/modern/hooks/index.js +1 -1
- package/modern/hooks/useTreeItemUtils/index.js +1 -0
- package/modern/hooks/{useTreeItem2Utils/useTreeItem2Utils.js → useTreeItemUtils/useTreeItemUtils.js} +5 -3
- package/modern/index.js +6 -6
- package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.js +2 -4
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +86 -0
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +43 -18
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +95 -0
- package/modern/useTreeItem/index.js +1 -0
- package/modern/{useTreeItem2/useTreeItem2.js → useTreeItem/useTreeItem.js} +21 -42
- package/node/RichTreeView/RichTreeView.js +20 -1
- package/node/SimpleTreeView/SimpleTreeView.js +21 -3
- package/node/TreeItem/TreeItem.js +239 -369
- package/node/TreeItem/index.js +38 -16
- package/node/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js} +26 -22
- package/node/TreeItemDragAndDropOverlay/index.js +12 -0
- package/node/{TreeItem2Icon/TreeItem2Icon.js → TreeItemIcon/TreeItemIcon.js} +4 -3
- package/node/TreeItemIcon/index.js +12 -0
- package/node/{TreeItem2LabelInput/TreeItem2LabelInput.js → TreeItemLabelInput/TreeItemLabelInput.js} +6 -3
- package/node/TreeItemLabelInput/index.js +12 -0
- package/node/{TreeItem2Provider/TreeItem2Provider.js → TreeItemProvider/TreeItemProvider.js} +6 -3
- package/node/TreeItemProvider/index.js +12 -0
- package/node/hooks/index.js +3 -3
- package/node/hooks/useTreeItemUtils/index.js +12 -0
- package/node/hooks/{useTreeItem2Utils/useTreeItem2Utils.js → useTreeItemUtils/useTreeItemUtils.js} +6 -5
- package/node/index.js +29 -29
- package/node/internals/plugins/useTreeViewItems/useTreeViewItems.js +2 -4
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +94 -0
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +42 -17
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +99 -2
- package/node/useTreeItem/index.js +12 -0
- package/node/{useTreeItem2/useTreeItem2.js → useTreeItem/useTreeItem.js} +22 -44
- package/package.json +3 -3
- package/themeAugmentation/components.d.ts +0 -10
- package/themeAugmentation/overrides.d.ts +0 -3
- package/themeAugmentation/props.d.ts +1 -5
- package/useTreeItem/index.d.ts +2 -0
- package/useTreeItem/index.js +1 -0
- package/{TreeItem2 → useTreeItem}/package.json +1 -1
- package/useTreeItem/useTreeItem.d.ts +2 -0
- package/{useTreeItem2/useTreeItem2.js → useTreeItem/useTreeItem.js} +21 -42
- package/{useTreeItem2/useTreeItem2.types.d.ts → useTreeItem/useTreeItem.types.d.ts} +42 -58
- package/TreeItem/TreeItemContent.d.ts +0 -61
- package/TreeItem/TreeItemContent.js +0 -146
- package/TreeItem/useTreeItemState.d.ts +0 -21
- package/TreeItem/useTreeItemState.js +0 -143
- package/TreeItem2/TreeItem2.d.ts +0 -34
- package/TreeItem2/TreeItem2.js +0 -387
- package/TreeItem2/TreeItem2.types.d.ts +0 -92
- package/TreeItem2/index.d.ts +0 -2
- package/TreeItem2/index.js +0 -1
- package/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.d.ts +0 -4
- package/TreeItem2DragAndDropOverlay/index.d.ts +0 -2
- package/TreeItem2DragAndDropOverlay/index.js +0 -1
- package/TreeItem2DragAndDropOverlay/package.json +0 -6
- package/TreeItem2Icon/TreeItem2Icon.d.ts +0 -7
- package/TreeItem2Icon/index.d.ts +0 -2
- package/TreeItem2Icon/index.js +0 -1
- package/TreeItem2LabelInput/TreeItem2LabelInput.d.ts +0 -2
- package/TreeItem2LabelInput/index.d.ts +0 -2
- package/TreeItem2LabelInput/index.js +0 -1
- package/TreeItem2Provider/TreeItem2Provider.d.ts +0 -6
- package/TreeItem2Provider/index.d.ts +0 -2
- package/TreeItem2Provider/index.js +0 -1
- package/TreeView/TreeView.d.ts +0 -21
- package/TreeView/TreeView.js +0 -211
- package/TreeView/TreeView.types.d.ts +0 -9
- package/TreeView/index.d.ts +0 -3
- package/TreeView/index.js +0 -3
- package/TreeView/package.json +0 -6
- package/TreeView/treeViewClasses.d.ts +0 -7
- package/TreeView/treeViewClasses.js +0 -6
- package/hooks/useTreeItem2Utils/index.d.ts +0 -1
- package/hooks/useTreeItem2Utils/index.js +0 -1
- package/modern/TreeItem/TreeItemContent.js +0 -146
- package/modern/TreeItem/useTreeItemState.js +0 -143
- package/modern/TreeItem2/TreeItem2.js +0 -387
- package/modern/TreeItem2/index.js +0 -1
- package/modern/TreeItem2DragAndDropOverlay/index.js +0 -1
- package/modern/TreeItem2Icon/index.js +0 -1
- package/modern/TreeItem2LabelInput/index.js +0 -1
- package/modern/TreeItem2Provider/TreeItem2Provider.types.js +0 -1
- package/modern/TreeItem2Provider/index.js +0 -1
- package/modern/TreeView/TreeView.js +0 -211
- package/modern/TreeView/TreeView.types.js +0 -1
- package/modern/TreeView/index.js +0 -3
- package/modern/TreeView/treeViewClasses.js +0 -6
- package/modern/hooks/useTreeItem2Utils/index.js +0 -1
- package/modern/useTreeItem2/index.js +0 -4
- package/modern/useTreeItem2/useTreeItem2.types.js +0 -1
- package/node/TreeItem/TreeItemContent.js +0 -153
- package/node/TreeItem/useTreeItemState.js +0 -148
- package/node/TreeItem2/TreeItem2.js +0 -394
- package/node/TreeItem2/index.js +0 -48
- package/node/TreeItem2DragAndDropOverlay/index.js +0 -12
- package/node/TreeItem2Icon/index.js +0 -12
- package/node/TreeItem2LabelInput/index.js +0 -12
- package/node/TreeItem2Provider/index.js +0 -12
- package/node/TreeView/TreeView.js +0 -217
- package/node/TreeView/TreeView.types.js +0 -5
- package/node/TreeView/index.js +0 -27
- package/node/TreeView/treeViewClasses.js +0 -14
- package/node/hooks/useTreeItem2Utils/index.js +0 -12
- package/node/useTreeItem2/index.js +0 -10
- package/node/useTreeItem2/useTreeItem2.types.js +0 -5
- package/useTreeItem2/index.d.ts +0 -3
- package/useTreeItem2/index.js +0 -4
- package/useTreeItem2/useTreeItem2.d.ts +0 -2
- package/useTreeItem2/useTreeItem2.types.js +0 -1
- /package/{TreeItem2/TreeItem2.types.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.js} +0 -0
- /package/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js → TreeItemIcon/TreeItemIcon.types.js} +0 -0
- /package/{TreeItem2Icon/TreeItem2Icon.types.js → TreeItemLabelInput/TreeItemLabelInput.types.js} +0 -0
- /package/{TreeItem2LabelInput/TreeItem2LabelInput.types.js → TreeItemProvider/TreeItemProvider.types.js} +0 -0
- /package/{TreeItem2Provider/TreeItem2Provider.types.js → modern/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.js} +0 -0
- /package/{TreeView/TreeView.types.js → modern/TreeItemIcon/TreeItemIcon.types.js} +0 -0
- /package/modern/{TreeItem2/TreeItem2.types.js → TreeItemLabelInput/TreeItemLabelInput.types.js} +0 -0
- /package/modern/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js → TreeItemProvider/TreeItemProvider.types.js} +0 -0
- /package/modern/{TreeItem2Icon/TreeItem2Icon.types.js → useTreeItem/useTreeItem.types.js} +0 -0
- /package/node/{TreeItem2/TreeItem2.types.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.js} +0 -0
- /package/node/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js → TreeItemIcon/TreeItemIcon.types.js} +0 -0
- /package/node/{TreeItem2Icon/TreeItem2Icon.types.js → TreeItemLabelInput/TreeItemLabelInput.types.js} +0 -0
- /package/node/{TreeItem2LabelInput/TreeItem2LabelInput.types.js → TreeItemProvider/TreeItemProvider.types.js} +0 -0
- /package/node/{TreeItem2Provider/TreeItem2Provider.types.js → useTreeItem/useTreeItem.types.js} +0 -0
- /package/{modern/TreeItem2LabelInput/TreeItem2LabelInput.types.js → useTreeItem/useTreeItem.types.js} +0 -0
package/modern/TreeItem/index.js
CHANGED
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
export { TreeItem } from "./TreeItem.js";
|
|
2
|
-
export * from "./treeItemClasses.js";
|
|
3
|
-
export * from "./useTreeItemState.js";
|
|
4
|
-
export { TreeItemContent } from "./TreeItemContent.js";
|
|
1
|
+
export { TreeItem, TreeItemRoot, TreeItemContent, TreeItemIconContainer, TreeItemGroupTransition, TreeItemCheckbox, TreeItemLabel } from "./TreeItem.js";
|
|
2
|
+
export * from "./treeItemClasses.js";
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
1
3
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
4
|
import * as React from 'react';
|
|
5
|
+
import PropTypes from 'prop-types';
|
|
3
6
|
import { alpha } from '@mui/material/styles';
|
|
4
7
|
import { shouldForwardProp } from '@mui/system';
|
|
5
8
|
import { styled } from "../internals/zero-styled/index.js";
|
|
6
9
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
-
const
|
|
8
|
-
name: '
|
|
10
|
+
const TreeItemDragAndDropOverlayRoot = styled('div', {
|
|
11
|
+
name: 'MuiTreeItemDragAndDropOverlay',
|
|
9
12
|
slot: 'Root',
|
|
10
13
|
overridesResolver: (props, styles) => styles.root,
|
|
11
14
|
shouldForwardProp: prop => shouldForwardProp(prop) && prop !== 'action'
|
|
@@ -26,44 +29,46 @@ const TreeItem2DragAndDropOverlayRoot = styled('div', {
|
|
|
26
29
|
style: {
|
|
27
30
|
marginLeft: 'calc(var(--TreeView-indentMultiplier) * var(--TreeView-itemDepth))',
|
|
28
31
|
borderRadius: theme.shape.borderRadius,
|
|
29
|
-
backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.
|
|
32
|
+
backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.darkChannel} / ${theme.vars.palette.action.focusOpacity})` : alpha(theme.palette.primary.dark, theme.palette.action.focusOpacity)
|
|
30
33
|
}
|
|
31
34
|
}, {
|
|
32
35
|
props: {
|
|
33
36
|
action: 'reorder-above'
|
|
34
37
|
},
|
|
35
|
-
style:
|
|
38
|
+
style: {
|
|
36
39
|
marginLeft: 'calc(var(--TreeView-indentMultiplier) * var(--TreeView-itemDepth))',
|
|
37
|
-
borderTop:
|
|
38
|
-
}
|
|
39
|
-
borderTopColor: theme.vars ? `rgba(${theme.vars.palette.grey[100]} / ${0.6})` : alpha(theme.palette.grey[100], 0.6)
|
|
40
|
-
}))
|
|
40
|
+
borderTop: `1px solid ${(theme.vars || theme).palette.action.active}`
|
|
41
|
+
}
|
|
41
42
|
}, {
|
|
42
43
|
props: {
|
|
43
44
|
action: 'reorder-below'
|
|
44
45
|
},
|
|
45
|
-
style:
|
|
46
|
+
style: {
|
|
46
47
|
marginLeft: 'calc(var(--TreeView-indentMultiplier) * var(--TreeView-itemDepth))',
|
|
47
|
-
borderBottom:
|
|
48
|
-
}
|
|
49
|
-
borderBottomColor: theme.vars ? `rgba(${theme.vars.palette.grey[100]} / ${0.6})` : alpha(theme.palette.grey[100], 0.6)
|
|
50
|
-
}))
|
|
48
|
+
borderBottom: `1px solid ${(theme.vars || theme).palette.action.active}`
|
|
49
|
+
}
|
|
51
50
|
}, {
|
|
52
51
|
props: {
|
|
53
52
|
action: 'move-to-parent'
|
|
54
53
|
},
|
|
55
|
-
style:
|
|
54
|
+
style: {
|
|
56
55
|
marginLeft: 'calc(var(--TreeView-indentMultiplier) * calc(var(--TreeView-itemDepth) - 1))',
|
|
57
|
-
borderBottom:
|
|
58
|
-
}
|
|
59
|
-
borderBottomColor: theme.vars ? `rgba(${theme.vars.palette.grey[100]} / ${0.6})` : alpha(theme.palette.grey[100], 0.6)
|
|
60
|
-
}))
|
|
56
|
+
borderBottom: `1px solid ${(theme.vars || theme).palette.action.active}`
|
|
57
|
+
}
|
|
61
58
|
}]
|
|
62
59
|
}));
|
|
63
|
-
function
|
|
60
|
+
function TreeItemDragAndDropOverlay(props) {
|
|
64
61
|
if (props.action == null) {
|
|
65
62
|
return null;
|
|
66
63
|
}
|
|
67
|
-
return /*#__PURE__*/_jsx(
|
|
64
|
+
return /*#__PURE__*/_jsx(TreeItemDragAndDropOverlayRoot, _extends({}, props));
|
|
68
65
|
}
|
|
69
|
-
|
|
66
|
+
process.env.NODE_ENV !== "production" ? TreeItemDragAndDropOverlay.propTypes = {
|
|
67
|
+
// ----------------------------- Warning --------------------------------
|
|
68
|
+
// | These PropTypes are generated from the TypeScript type definitions |
|
|
69
|
+
// | To update them edit the TypeScript types and run "pnpm proptypes" |
|
|
70
|
+
// ----------------------------------------------------------------------
|
|
71
|
+
action: PropTypes.oneOf(['make-child', 'move-to-parent', 'reorder-above', 'reorder-below']),
|
|
72
|
+
style: PropTypes.object
|
|
73
|
+
} : void 0;
|
|
74
|
+
export { TreeItemDragAndDropOverlay };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { TreeItemDragAndDropOverlay } from "./TreeItemDragAndDropOverlay.js";
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
1
3
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
4
|
import * as React from 'react';
|
|
3
5
|
import PropTypes from 'prop-types';
|
|
@@ -6,7 +8,7 @@ import useSlotProps from '@mui/utils/useSlotProps';
|
|
|
6
8
|
import { useTreeViewContext } from "../internals/TreeViewProvider/index.js";
|
|
7
9
|
import { TreeViewCollapseIcon, TreeViewExpandIcon } from "../icons/index.js";
|
|
8
10
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
-
function
|
|
11
|
+
function TreeItemIcon(props) {
|
|
10
12
|
const {
|
|
11
13
|
slots,
|
|
12
14
|
slotProps,
|
|
@@ -42,7 +44,7 @@ function TreeItem2Icon(props) {
|
|
|
42
44
|
}
|
|
43
45
|
return /*#__PURE__*/_jsx(Icon, _extends({}, iconProps));
|
|
44
46
|
}
|
|
45
|
-
process.env.NODE_ENV !== "production" ?
|
|
47
|
+
process.env.NODE_ENV !== "production" ? TreeItemIcon.propTypes = {
|
|
46
48
|
// ----------------------------- Warning --------------------------------
|
|
47
49
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
48
50
|
// | To update them edit the TypeScript types and run "pnpm proptypes" |
|
|
@@ -67,4 +69,4 @@ process.env.NODE_ENV !== "production" ? TreeItem2Icon.propTypes = {
|
|
|
67
69
|
selected: PropTypes.bool.isRequired
|
|
68
70
|
}).isRequired
|
|
69
71
|
} : void 0;
|
|
70
|
-
export {
|
|
72
|
+
export { TreeItemIcon };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { TreeItemIcon } from "./TreeItemIcon.js";
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import { styled } from "../internals/zero-styled/index.js";
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @ignore - internal component.
|
|
6
|
+
*/
|
|
7
|
+
const TreeItemLabelInput = styled('input', {
|
|
8
|
+
name: 'MuiTreeItem',
|
|
5
9
|
slot: 'LabelInput',
|
|
6
10
|
overridesResolver: (props, styles) => styles.labelInput
|
|
7
11
|
})(({
|
|
@@ -17,4 +21,4 @@ const TreeItem2LabelInput = styled('input', {
|
|
|
17
21
|
outline: `1px solid ${theme.palette.primary.main}`
|
|
18
22
|
}
|
|
19
23
|
}));
|
|
20
|
-
export {
|
|
24
|
+
export { TreeItemLabelInput };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { TreeItemLabelInput } from "./TreeItemLabelInput.js";
|
package/{TreeItem2Provider/TreeItem2Provider.js → modern/TreeItemProvider/TreeItemProvider.js}
RENAMED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import PropTypes from 'prop-types';
|
|
2
2
|
import { useTreeViewContext } from "../internals/TreeViewProvider/index.js";
|
|
3
|
-
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @ignore - internal component.
|
|
6
|
+
*/
|
|
7
|
+
function TreeItemProvider(props) {
|
|
4
8
|
const {
|
|
5
9
|
children,
|
|
6
10
|
itemId
|
|
@@ -15,7 +19,7 @@ function TreeItem2Provider(props) {
|
|
|
15
19
|
instance
|
|
16
20
|
});
|
|
17
21
|
}
|
|
18
|
-
|
|
22
|
+
TreeItemProvider.propTypes = {
|
|
19
23
|
// ----------------------------- Warning --------------------------------
|
|
20
24
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
21
25
|
// | To update them edit the TypeScript types and run "pnpm proptypes" |
|
|
@@ -23,4 +27,4 @@ TreeItem2Provider.propTypes = {
|
|
|
23
27
|
children: PropTypes.node,
|
|
24
28
|
itemId: PropTypes.string.isRequired
|
|
25
29
|
};
|
|
26
|
-
export {
|
|
30
|
+
export { TreeItemProvider };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { TreeItemProvider } from "./TreeItemProvider.js";
|
package/modern/hooks/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { useTreeViewApiRef } from "./useTreeViewApiRef.js";
|
|
2
|
-
export {
|
|
2
|
+
export { useTreeItemUtils } from "./useTreeItemUtils/index.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useTreeItemUtils } from "./useTreeItemUtils.js";
|
package/modern/hooks/{useTreeItem2Utils/useTreeItem2Utils.js → useTreeItemUtils/useTreeItemUtils.js}
RENAMED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
1
3
|
import { useTreeViewContext } from "../../internals/TreeViewProvider/index.js";
|
|
2
4
|
import { useTreeViewLabel } from "../../internals/plugins/useTreeViewLabel/index.js";
|
|
3
5
|
import { hasPlugin } from "../../internals/utils/plugins.js";
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
|
-
* Plugins that need to be present in the Tree View in order for `
|
|
8
|
+
* Plugins that need to be present in the Tree View in order for `useTreeItemUtils` to work correctly.
|
|
7
9
|
*/
|
|
8
10
|
|
|
9
11
|
/**
|
|
10
|
-
* Plugins that `
|
|
12
|
+
* Plugins that `useTreeItemUtils` can use if they are present, but are not required.
|
|
11
13
|
*/
|
|
12
14
|
|
|
13
15
|
const isItemExpandable = reactChildren => {
|
|
@@ -16,7 +18,7 @@ const isItemExpandable = reactChildren => {
|
|
|
16
18
|
}
|
|
17
19
|
return Boolean(reactChildren);
|
|
18
20
|
};
|
|
19
|
-
export const
|
|
21
|
+
export const useTreeItemUtils = ({
|
|
20
22
|
itemId,
|
|
21
23
|
children
|
|
22
24
|
}) => {
|
package/modern/index.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @mui/x-tree-view
|
|
2
|
+
* @mui/x-tree-view v8.0.0-alpha.0
|
|
3
3
|
*
|
|
4
4
|
* @license MIT
|
|
5
5
|
* This source code is licensed under the MIT license found in the
|
|
6
6
|
* LICENSE file in the root directory of this source tree.
|
|
7
7
|
*/
|
|
8
8
|
// Tree View
|
|
9
|
-
export * from "./TreeView/index.js";
|
|
10
9
|
export * from "./SimpleTreeView/index.js";
|
|
11
10
|
export * from "./RichTreeView/index.js";
|
|
12
11
|
|
|
13
12
|
// Tree Item
|
|
14
13
|
export * from "./TreeItem/index.js";
|
|
15
|
-
export * from "./
|
|
16
|
-
export * from "./
|
|
17
|
-
export * from "./
|
|
18
|
-
export * from "./
|
|
14
|
+
export * from "./useTreeItem/index.js";
|
|
15
|
+
export * from "./TreeItemIcon/index.js";
|
|
16
|
+
export * from "./TreeItemProvider/index.js";
|
|
17
|
+
export * from "./TreeItemDragAndDropOverlay/index.js";
|
|
18
|
+
export * from "./TreeItemLabelInput/index.js";
|
|
19
19
|
export { unstable_resetCleanupTracking } from "./internals/hooks/useInstanceEventHandler.js";
|
|
20
20
|
export * from "./models/index.js";
|
|
21
21
|
export * from "./icons/index.js";
|
|
@@ -63,8 +63,7 @@ export const useTreeViewItems = ({
|
|
|
63
63
|
instance,
|
|
64
64
|
params,
|
|
65
65
|
state,
|
|
66
|
-
setState
|
|
67
|
-
experimentalFeatures
|
|
66
|
+
setState
|
|
68
67
|
}) => {
|
|
69
68
|
const getItemMeta = React.useCallback(itemId => state.items.itemMetaMap[itemId], [state.items.itemMetaMap]);
|
|
70
69
|
const getItem = React.useCallback(itemId => state.items.itemMap[itemId], [state.items.itemMap]);
|
|
@@ -191,8 +190,7 @@ export const useTreeViewItems = ({
|
|
|
191
190
|
contextValue: {
|
|
192
191
|
items: {
|
|
193
192
|
onItemClick: params.onItemClick,
|
|
194
|
-
disabledItemsFocusable: params.disabledItemsFocusable
|
|
195
|
-
indentationAtItemLevel: experimentalFeatures.indentationAtItemLevel ?? false
|
|
193
|
+
disabledItemsFocusable: params.disabledItemsFocusable
|
|
196
194
|
}
|
|
197
195
|
}
|
|
198
196
|
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import { useTreeViewContext } from "../../TreeViewProvider/index.js";
|
|
3
|
+
function getCheckboxStatus({
|
|
4
|
+
itemId,
|
|
5
|
+
instance,
|
|
6
|
+
selectionPropagation,
|
|
7
|
+
selected
|
|
8
|
+
}) {
|
|
9
|
+
if (selected) {
|
|
10
|
+
return {
|
|
11
|
+
indeterminate: false,
|
|
12
|
+
checked: true
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
const children = instance.getItemOrderedChildrenIds(itemId);
|
|
16
|
+
if (children.length === 0) {
|
|
17
|
+
return {
|
|
18
|
+
indeterminate: false,
|
|
19
|
+
checked: false
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
let hasSelectedDescendant = false;
|
|
23
|
+
let hasUnSelectedDescendant = false;
|
|
24
|
+
const traverseDescendants = itemToTraverseId => {
|
|
25
|
+
if (itemToTraverseId !== itemId) {
|
|
26
|
+
if (instance.isItemSelected(itemToTraverseId)) {
|
|
27
|
+
hasSelectedDescendant = true;
|
|
28
|
+
} else {
|
|
29
|
+
hasUnSelectedDescendant = true;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
instance.getItemOrderedChildrenIds(itemToTraverseId).forEach(traverseDescendants);
|
|
33
|
+
};
|
|
34
|
+
traverseDescendants(itemId);
|
|
35
|
+
return {
|
|
36
|
+
indeterminate: hasSelectedDescendant && hasUnSelectedDescendant || !hasUnSelectedDescendant && !selected,
|
|
37
|
+
checked: selectionPropagation.parents ? hasSelectedDescendant : selected
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export const useTreeViewSelectionItemPlugin = ({
|
|
41
|
+
props
|
|
42
|
+
}) => {
|
|
43
|
+
const {
|
|
44
|
+
itemId
|
|
45
|
+
} = props;
|
|
46
|
+
const {
|
|
47
|
+
instance,
|
|
48
|
+
selection: {
|
|
49
|
+
disableSelection,
|
|
50
|
+
checkboxSelection,
|
|
51
|
+
selectionPropagation
|
|
52
|
+
}
|
|
53
|
+
} = useTreeViewContext();
|
|
54
|
+
return {
|
|
55
|
+
propsEnhancers: {
|
|
56
|
+
checkbox: ({
|
|
57
|
+
externalEventHandlers,
|
|
58
|
+
interactions,
|
|
59
|
+
status
|
|
60
|
+
}) => {
|
|
61
|
+
const handleChange = event => {
|
|
62
|
+
externalEventHandlers.onChange?.(event);
|
|
63
|
+
if (event.defaultMuiPrevented) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (disableSelection || status.disabled) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
interactions.handleCheckboxSelection(event);
|
|
70
|
+
};
|
|
71
|
+
const checkboxStatus = getCheckboxStatus({
|
|
72
|
+
instance,
|
|
73
|
+
itemId,
|
|
74
|
+
selectionPropagation,
|
|
75
|
+
selected: status.selected
|
|
76
|
+
});
|
|
77
|
+
return _extends({
|
|
78
|
+
visible: checkboxSelection,
|
|
79
|
+
disabled: disableSelection || status.disabled,
|
|
80
|
+
tabIndex: -1,
|
|
81
|
+
onChange: handleChange
|
|
82
|
+
}, checkboxStatus);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
};
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { findOrderInTremauxTree, getAllNavigableItems, getFirstNavigableItem, getLastNavigableItem, getNonDisabledItemsInRange } from "../../utils/tree.js";
|
|
4
|
-
import { convertSelectedItemsToArray, getLookupFromArray } from "./useTreeViewSelection.utils.js";
|
|
4
|
+
import { convertSelectedItemsToArray, propagateSelection, getAddedAndRemovedItems, getLookupFromArray } from "./useTreeViewSelection.utils.js";
|
|
5
|
+
import { useTreeViewSelectionItemPlugin } from "./useTreeViewSelection.itemPlugin.js";
|
|
5
6
|
export const useTreeViewSelection = ({
|
|
6
7
|
instance,
|
|
7
8
|
params,
|
|
@@ -20,30 +21,47 @@ export const useTreeViewSelection = ({
|
|
|
20
21
|
}
|
|
21
22
|
return temp;
|
|
22
23
|
}, [models.selectedItems.value]);
|
|
23
|
-
const setSelectedItems = (event,
|
|
24
|
+
const setSelectedItems = (event, newModel, additionalItemsToPropagate) => {
|
|
25
|
+
let cleanModel;
|
|
26
|
+
if (params.multiSelect && (params.selectionPropagation.descendants || params.selectionPropagation.parents)) {
|
|
27
|
+
cleanModel = propagateSelection({
|
|
28
|
+
instance,
|
|
29
|
+
selectionPropagation: params.selectionPropagation,
|
|
30
|
+
newModel: newModel,
|
|
31
|
+
oldModel: models.selectedItems.value,
|
|
32
|
+
additionalItemsToPropagate
|
|
33
|
+
});
|
|
34
|
+
} else {
|
|
35
|
+
cleanModel = newModel;
|
|
36
|
+
}
|
|
24
37
|
if (params.onItemSelectionToggle) {
|
|
25
38
|
if (params.multiSelect) {
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
39
|
+
const changes = getAddedAndRemovedItems({
|
|
40
|
+
instance,
|
|
41
|
+
newModel: cleanModel,
|
|
42
|
+
oldModel: models.selectedItems.value
|
|
30
43
|
});
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
44
|
+
if (params.onItemSelectionToggle) {
|
|
45
|
+
changes.added.forEach(itemId => {
|
|
46
|
+
params.onItemSelectionToggle(event, itemId, true);
|
|
47
|
+
});
|
|
48
|
+
changes.removed.forEach(itemId => {
|
|
49
|
+
params.onItemSelectionToggle(event, itemId, false);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
} else if (params.onItemSelectionToggle && cleanModel !== models.selectedItems.value) {
|
|
35
53
|
if (models.selectedItems.value != null) {
|
|
36
54
|
params.onItemSelectionToggle(event, models.selectedItems.value, false);
|
|
37
55
|
}
|
|
38
|
-
if (
|
|
39
|
-
params.onItemSelectionToggle(event,
|
|
56
|
+
if (cleanModel != null) {
|
|
57
|
+
params.onItemSelectionToggle(event, cleanModel, true);
|
|
40
58
|
}
|
|
41
59
|
}
|
|
42
60
|
}
|
|
43
61
|
if (params.onSelectedItemsChange) {
|
|
44
|
-
params.onSelectedItemsChange(event,
|
|
62
|
+
params.onSelectedItemsChange(event, cleanModel);
|
|
45
63
|
}
|
|
46
|
-
models.selectedItems.setControlledValue(
|
|
64
|
+
models.selectedItems.setControlledValue(cleanModel);
|
|
47
65
|
};
|
|
48
66
|
const isItemSelected = itemId => selectedItemsMap.has(itemId);
|
|
49
67
|
const selectItem = ({
|
|
@@ -74,7 +92,10 @@ export const useTreeViewSelection = ({
|
|
|
74
92
|
newSelected = params.multiSelect ? [itemId] : itemId;
|
|
75
93
|
}
|
|
76
94
|
}
|
|
77
|
-
setSelectedItems(event, newSelected
|
|
95
|
+
setSelectedItems(event, newSelected,
|
|
96
|
+
// If shouldBeSelected === instance.isItemSelect(itemId), we still want to propagate the select.
|
|
97
|
+
// This is useful when the element is in an indeterminate state.
|
|
98
|
+
[itemId]);
|
|
78
99
|
lastSelectedItem.current = itemId;
|
|
79
100
|
lastSelectedRange.current = {};
|
|
80
101
|
};
|
|
@@ -163,11 +184,13 @@ export const useTreeViewSelection = ({
|
|
|
163
184
|
selection: {
|
|
164
185
|
multiSelect: params.multiSelect,
|
|
165
186
|
checkboxSelection: params.checkboxSelection,
|
|
166
|
-
disableSelection: params.disableSelection
|
|
187
|
+
disableSelection: params.disableSelection,
|
|
188
|
+
selectionPropagation: params.selectionPropagation
|
|
167
189
|
}
|
|
168
190
|
}
|
|
169
191
|
};
|
|
170
192
|
};
|
|
193
|
+
useTreeViewSelection.itemPlugin = useTreeViewSelectionItemPlugin;
|
|
171
194
|
useTreeViewSelection.models = {
|
|
172
195
|
selectedItems: {
|
|
173
196
|
getDefaultValue: params => params.defaultSelectedItems
|
|
@@ -180,7 +203,8 @@ useTreeViewSelection.getDefaultizedParams = ({
|
|
|
180
203
|
disableSelection: params.disableSelection ?? false,
|
|
181
204
|
multiSelect: params.multiSelect ?? false,
|
|
182
205
|
checkboxSelection: params.checkboxSelection ?? false,
|
|
183
|
-
defaultSelectedItems: params.defaultSelectedItems ?? (params.multiSelect ? DEFAULT_SELECTED_ITEMS : null)
|
|
206
|
+
defaultSelectedItems: params.defaultSelectedItems ?? (params.multiSelect ? DEFAULT_SELECTED_ITEMS : null),
|
|
207
|
+
selectionPropagation: params.selectionPropagation ?? {}
|
|
184
208
|
});
|
|
185
209
|
useTreeViewSelection.params = {
|
|
186
210
|
disableSelection: true,
|
|
@@ -189,5 +213,6 @@ useTreeViewSelection.params = {
|
|
|
189
213
|
defaultSelectedItems: true,
|
|
190
214
|
selectedItems: true,
|
|
191
215
|
onSelectedItemsChange: true,
|
|
192
|
-
onItemSelectionToggle: true
|
|
216
|
+
onItemSelectionToggle: true,
|
|
217
|
+
selectionPropagation: true
|
|
193
218
|
};
|
|
@@ -18,4 +18,99 @@ export const getLookupFromArray = array => {
|
|
|
18
18
|
lookup[itemId] = true;
|
|
19
19
|
});
|
|
20
20
|
return lookup;
|
|
21
|
+
};
|
|
22
|
+
export const getAddedAndRemovedItems = ({
|
|
23
|
+
instance,
|
|
24
|
+
oldModel,
|
|
25
|
+
newModel
|
|
26
|
+
}) => {
|
|
27
|
+
const newModelLookup = getLookupFromArray(newModel);
|
|
28
|
+
return {
|
|
29
|
+
added: newModel.filter(itemId => !instance.isItemSelected(itemId)),
|
|
30
|
+
removed: oldModel.filter(itemId => !newModelLookup[itemId])
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
export const propagateSelection = ({
|
|
34
|
+
instance,
|
|
35
|
+
selectionPropagation,
|
|
36
|
+
newModel,
|
|
37
|
+
oldModel,
|
|
38
|
+
additionalItemsToPropagate
|
|
39
|
+
}) => {
|
|
40
|
+
if (!selectionPropagation.descendants && !selectionPropagation.parents) {
|
|
41
|
+
return newModel;
|
|
42
|
+
}
|
|
43
|
+
let shouldRegenerateModel = false;
|
|
44
|
+
const newModelLookup = getLookupFromArray(newModel);
|
|
45
|
+
const changes = getAddedAndRemovedItems({
|
|
46
|
+
instance,
|
|
47
|
+
newModel,
|
|
48
|
+
oldModel
|
|
49
|
+
});
|
|
50
|
+
additionalItemsToPropagate?.forEach(itemId => {
|
|
51
|
+
if (newModelLookup[itemId]) {
|
|
52
|
+
if (!changes.added.includes(itemId)) {
|
|
53
|
+
changes.added.push(itemId);
|
|
54
|
+
}
|
|
55
|
+
} else if (!changes.removed.includes(itemId)) {
|
|
56
|
+
changes.removed.push(itemId);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
changes.added.forEach(addedItemId => {
|
|
60
|
+
if (selectionPropagation.descendants) {
|
|
61
|
+
const selectDescendants = itemId => {
|
|
62
|
+
if (itemId !== addedItemId) {
|
|
63
|
+
shouldRegenerateModel = true;
|
|
64
|
+
newModelLookup[itemId] = true;
|
|
65
|
+
}
|
|
66
|
+
instance.getItemOrderedChildrenIds(itemId).forEach(selectDescendants);
|
|
67
|
+
};
|
|
68
|
+
selectDescendants(addedItemId);
|
|
69
|
+
}
|
|
70
|
+
if (selectionPropagation.parents) {
|
|
71
|
+
const checkAllDescendantsSelected = itemId => {
|
|
72
|
+
if (!newModelLookup[itemId]) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
const children = instance.getItemOrderedChildrenIds(itemId);
|
|
76
|
+
return children.every(checkAllDescendantsSelected);
|
|
77
|
+
};
|
|
78
|
+
const selectParents = itemId => {
|
|
79
|
+
const parentId = instance.getItemMeta(itemId).parentId;
|
|
80
|
+
if (parentId == null) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const siblings = instance.getItemOrderedChildrenIds(parentId);
|
|
84
|
+
if (siblings.every(checkAllDescendantsSelected)) {
|
|
85
|
+
shouldRegenerateModel = true;
|
|
86
|
+
newModelLookup[parentId] = true;
|
|
87
|
+
selectParents(parentId);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
selectParents(addedItemId);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
changes.removed.forEach(removedItemId => {
|
|
94
|
+
if (selectionPropagation.parents) {
|
|
95
|
+
let parentId = instance.getItemMeta(removedItemId).parentId;
|
|
96
|
+
while (parentId != null) {
|
|
97
|
+
if (newModelLookup[parentId]) {
|
|
98
|
+
shouldRegenerateModel = true;
|
|
99
|
+
delete newModelLookup[parentId];
|
|
100
|
+
}
|
|
101
|
+
parentId = instance.getItemMeta(parentId).parentId;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (selectionPropagation.descendants) {
|
|
105
|
+
const deSelectDescendants = itemId => {
|
|
106
|
+
if (itemId !== removedItemId) {
|
|
107
|
+
shouldRegenerateModel = true;
|
|
108
|
+
delete newModelLookup[itemId];
|
|
109
|
+
}
|
|
110
|
+
instance.getItemOrderedChildrenIds(itemId).forEach(deSelectDescendants);
|
|
111
|
+
};
|
|
112
|
+
deSelectDescendants(removedItemId);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
return shouldRegenerateModel ? Object.keys(newModelLookup) : newModel;
|
|
21
116
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useTreeItem } from "./useTreeItem.js";
|