@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.
Files changed (196) hide show
  1. package/CHANGELOG.md +161 -48
  2. package/README.md +2 -2
  3. package/RichTreeView/RichTreeView.js +20 -1
  4. package/RichTreeView/RichTreeView.types.d.ts +4 -4
  5. package/SimpleTreeView/SimpleTreeView.js +21 -3
  6. package/TreeItem/TreeItem.d.ts +20 -2
  7. package/TreeItem/TreeItem.js +238 -368
  8. package/TreeItem/TreeItem.types.d.ts +51 -86
  9. package/TreeItem/index.d.ts +1 -4
  10. package/TreeItem/index.js +2 -4
  11. package/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.d.ts +7 -0
  12. package/{modern/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js} +26 -21
  13. package/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.d.ts → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.d.ts} +1 -1
  14. package/TreeItemDragAndDropOverlay/index.d.ts +2 -0
  15. package/TreeItemDragAndDropOverlay/index.js +1 -0
  16. package/{TreeItem2LabelInput → TreeItemDragAndDropOverlay}/package.json +1 -1
  17. package/TreeItemIcon/TreeItemIcon.d.ts +7 -0
  18. package/{TreeItem2Icon/TreeItem2Icon.js → TreeItemIcon/TreeItemIcon.js} +5 -3
  19. package/{TreeItem2Icon/TreeItem2Icon.types.d.ts → TreeItemIcon/TreeItemIcon.types.d.ts} +7 -7
  20. package/TreeItemIcon/index.d.ts +2 -0
  21. package/TreeItemIcon/index.js +1 -0
  22. package/{useTreeItem2 → TreeItemIcon}/package.json +1 -1
  23. package/TreeItemLabelInput/TreeItemLabelInput.d.ts +5 -0
  24. package/{TreeItem2LabelInput/TreeItem2LabelInput.js → TreeItemLabelInput/TreeItemLabelInput.js} +7 -3
  25. package/{TreeItem2LabelInput/TreeItem2LabelInput.types.d.ts → TreeItemLabelInput/TreeItemLabelInput.types.d.ts} +1 -1
  26. package/TreeItemLabelInput/index.d.ts +2 -0
  27. package/TreeItemLabelInput/index.js +1 -0
  28. package/{TreeItem2Provider → TreeItemLabelInput}/package.json +1 -1
  29. package/TreeItemProvider/TreeItemProvider.d.ts +9 -0
  30. package/{modern/TreeItem2Provider/TreeItem2Provider.js → TreeItemProvider/TreeItemProvider.js} +7 -3
  31. package/{TreeItem2Provider/TreeItem2Provider.types.d.ts → TreeItemProvider/TreeItemProvider.types.d.ts} +1 -1
  32. package/TreeItemProvider/index.d.ts +2 -0
  33. package/TreeItemProvider/index.js +1 -0
  34. package/{TreeItem2Icon → TreeItemProvider}/package.json +1 -1
  35. package/hooks/index.d.ts +1 -1
  36. package/hooks/index.js +1 -1
  37. package/hooks/useTreeItemUtils/index.d.ts +1 -0
  38. package/hooks/useTreeItemUtils/index.js +1 -0
  39. package/hooks/{useTreeItem2Utils/useTreeItem2Utils.d.ts → useTreeItemUtils/useTreeItemUtils.d.ts} +11 -11
  40. package/hooks/{useTreeItem2Utils/useTreeItem2Utils.js → useTreeItemUtils/useTreeItemUtils.js} +5 -3
  41. package/index.d.ts +5 -5
  42. package/index.js +6 -6
  43. package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +2 -1
  44. package/internals/components/RichTreeViewItems.d.ts +1 -2
  45. package/internals/index.d.ts +1 -1
  46. package/internals/models/helpers.d.ts +0 -2
  47. package/internals/models/itemPlugin.d.ts +11 -8
  48. package/internals/models/plugin.d.ts +1 -1
  49. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +2 -1
  50. package/internals/plugins/useTreeViewItems/useTreeViewItems.js +2 -4
  51. package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +3 -5
  52. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.d.ts +1 -1
  53. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +6 -5
  54. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.d.ts +2 -0
  55. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +86 -0
  56. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +43 -18
  57. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +33 -3
  58. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +20 -1
  59. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +95 -0
  60. package/models/items.d.ts +4 -0
  61. package/modern/RichTreeView/RichTreeView.js +20 -1
  62. package/modern/SimpleTreeView/SimpleTreeView.js +21 -3
  63. package/modern/TreeItem/TreeItem.js +238 -368
  64. package/modern/TreeItem/index.js +2 -4
  65. package/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js → modern/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js} +26 -21
  66. package/modern/TreeItemDragAndDropOverlay/index.js +1 -0
  67. package/modern/{TreeItem2Icon/TreeItem2Icon.js → TreeItemIcon/TreeItemIcon.js} +5 -3
  68. package/modern/TreeItemIcon/index.js +1 -0
  69. package/modern/{TreeItem2LabelInput/TreeItem2LabelInput.js → TreeItemLabelInput/TreeItemLabelInput.js} +7 -3
  70. package/modern/TreeItemLabelInput/index.js +1 -0
  71. package/{TreeItem2Provider/TreeItem2Provider.js → modern/TreeItemProvider/TreeItemProvider.js} +7 -3
  72. package/modern/TreeItemProvider/index.js +1 -0
  73. package/modern/hooks/index.js +1 -1
  74. package/modern/hooks/useTreeItemUtils/index.js +1 -0
  75. package/modern/hooks/{useTreeItem2Utils/useTreeItem2Utils.js → useTreeItemUtils/useTreeItemUtils.js} +5 -3
  76. package/modern/index.js +6 -6
  77. package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.js +2 -4
  78. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +86 -0
  79. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +43 -18
  80. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +95 -0
  81. package/modern/useTreeItem/index.js +1 -0
  82. package/modern/{useTreeItem2/useTreeItem2.js → useTreeItem/useTreeItem.js} +21 -42
  83. package/node/RichTreeView/RichTreeView.js +20 -1
  84. package/node/SimpleTreeView/SimpleTreeView.js +21 -3
  85. package/node/TreeItem/TreeItem.js +239 -369
  86. package/node/TreeItem/index.js +38 -16
  87. package/node/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js} +26 -22
  88. package/node/TreeItemDragAndDropOverlay/index.js +12 -0
  89. package/node/{TreeItem2Icon/TreeItem2Icon.js → TreeItemIcon/TreeItemIcon.js} +4 -3
  90. package/node/TreeItemIcon/index.js +12 -0
  91. package/node/{TreeItem2LabelInput/TreeItem2LabelInput.js → TreeItemLabelInput/TreeItemLabelInput.js} +6 -3
  92. package/node/TreeItemLabelInput/index.js +12 -0
  93. package/node/{TreeItem2Provider/TreeItem2Provider.js → TreeItemProvider/TreeItemProvider.js} +6 -3
  94. package/node/TreeItemProvider/index.js +12 -0
  95. package/node/hooks/index.js +3 -3
  96. package/node/hooks/useTreeItemUtils/index.js +12 -0
  97. package/node/hooks/{useTreeItem2Utils/useTreeItem2Utils.js → useTreeItemUtils/useTreeItemUtils.js} +6 -5
  98. package/node/index.js +29 -29
  99. package/node/internals/plugins/useTreeViewItems/useTreeViewItems.js +2 -4
  100. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +94 -0
  101. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +42 -17
  102. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +99 -2
  103. package/node/useTreeItem/index.js +12 -0
  104. package/node/{useTreeItem2/useTreeItem2.js → useTreeItem/useTreeItem.js} +22 -44
  105. package/package.json +3 -3
  106. package/themeAugmentation/components.d.ts +0 -10
  107. package/themeAugmentation/overrides.d.ts +0 -3
  108. package/themeAugmentation/props.d.ts +1 -5
  109. package/useTreeItem/index.d.ts +2 -0
  110. package/useTreeItem/index.js +1 -0
  111. package/{TreeItem2 → useTreeItem}/package.json +1 -1
  112. package/useTreeItem/useTreeItem.d.ts +2 -0
  113. package/{useTreeItem2/useTreeItem2.js → useTreeItem/useTreeItem.js} +21 -42
  114. package/{useTreeItem2/useTreeItem2.types.d.ts → useTreeItem/useTreeItem.types.d.ts} +42 -58
  115. package/TreeItem/TreeItemContent.d.ts +0 -61
  116. package/TreeItem/TreeItemContent.js +0 -146
  117. package/TreeItem/useTreeItemState.d.ts +0 -21
  118. package/TreeItem/useTreeItemState.js +0 -143
  119. package/TreeItem2/TreeItem2.d.ts +0 -34
  120. package/TreeItem2/TreeItem2.js +0 -387
  121. package/TreeItem2/TreeItem2.types.d.ts +0 -92
  122. package/TreeItem2/index.d.ts +0 -2
  123. package/TreeItem2/index.js +0 -1
  124. package/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.d.ts +0 -4
  125. package/TreeItem2DragAndDropOverlay/index.d.ts +0 -2
  126. package/TreeItem2DragAndDropOverlay/index.js +0 -1
  127. package/TreeItem2DragAndDropOverlay/package.json +0 -6
  128. package/TreeItem2Icon/TreeItem2Icon.d.ts +0 -7
  129. package/TreeItem2Icon/index.d.ts +0 -2
  130. package/TreeItem2Icon/index.js +0 -1
  131. package/TreeItem2LabelInput/TreeItem2LabelInput.d.ts +0 -2
  132. package/TreeItem2LabelInput/index.d.ts +0 -2
  133. package/TreeItem2LabelInput/index.js +0 -1
  134. package/TreeItem2Provider/TreeItem2Provider.d.ts +0 -6
  135. package/TreeItem2Provider/index.d.ts +0 -2
  136. package/TreeItem2Provider/index.js +0 -1
  137. package/TreeView/TreeView.d.ts +0 -21
  138. package/TreeView/TreeView.js +0 -211
  139. package/TreeView/TreeView.types.d.ts +0 -9
  140. package/TreeView/index.d.ts +0 -3
  141. package/TreeView/index.js +0 -3
  142. package/TreeView/package.json +0 -6
  143. package/TreeView/treeViewClasses.d.ts +0 -7
  144. package/TreeView/treeViewClasses.js +0 -6
  145. package/hooks/useTreeItem2Utils/index.d.ts +0 -1
  146. package/hooks/useTreeItem2Utils/index.js +0 -1
  147. package/modern/TreeItem/TreeItemContent.js +0 -146
  148. package/modern/TreeItem/useTreeItemState.js +0 -143
  149. package/modern/TreeItem2/TreeItem2.js +0 -387
  150. package/modern/TreeItem2/index.js +0 -1
  151. package/modern/TreeItem2DragAndDropOverlay/index.js +0 -1
  152. package/modern/TreeItem2Icon/index.js +0 -1
  153. package/modern/TreeItem2LabelInput/index.js +0 -1
  154. package/modern/TreeItem2Provider/TreeItem2Provider.types.js +0 -1
  155. package/modern/TreeItem2Provider/index.js +0 -1
  156. package/modern/TreeView/TreeView.js +0 -211
  157. package/modern/TreeView/TreeView.types.js +0 -1
  158. package/modern/TreeView/index.js +0 -3
  159. package/modern/TreeView/treeViewClasses.js +0 -6
  160. package/modern/hooks/useTreeItem2Utils/index.js +0 -1
  161. package/modern/useTreeItem2/index.js +0 -4
  162. package/modern/useTreeItem2/useTreeItem2.types.js +0 -1
  163. package/node/TreeItem/TreeItemContent.js +0 -153
  164. package/node/TreeItem/useTreeItemState.js +0 -148
  165. package/node/TreeItem2/TreeItem2.js +0 -394
  166. package/node/TreeItem2/index.js +0 -48
  167. package/node/TreeItem2DragAndDropOverlay/index.js +0 -12
  168. package/node/TreeItem2Icon/index.js +0 -12
  169. package/node/TreeItem2LabelInput/index.js +0 -12
  170. package/node/TreeItem2Provider/index.js +0 -12
  171. package/node/TreeView/TreeView.js +0 -217
  172. package/node/TreeView/TreeView.types.js +0 -5
  173. package/node/TreeView/index.js +0 -27
  174. package/node/TreeView/treeViewClasses.js +0 -14
  175. package/node/hooks/useTreeItem2Utils/index.js +0 -12
  176. package/node/useTreeItem2/index.js +0 -10
  177. package/node/useTreeItem2/useTreeItem2.types.js +0 -5
  178. package/useTreeItem2/index.d.ts +0 -3
  179. package/useTreeItem2/index.js +0 -4
  180. package/useTreeItem2/useTreeItem2.d.ts +0 -2
  181. package/useTreeItem2/useTreeItem2.types.js +0 -1
  182. /package/{TreeItem2/TreeItem2.types.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.js} +0 -0
  183. /package/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js → TreeItemIcon/TreeItemIcon.types.js} +0 -0
  184. /package/{TreeItem2Icon/TreeItem2Icon.types.js → TreeItemLabelInput/TreeItemLabelInput.types.js} +0 -0
  185. /package/{TreeItem2LabelInput/TreeItem2LabelInput.types.js → TreeItemProvider/TreeItemProvider.types.js} +0 -0
  186. /package/{TreeItem2Provider/TreeItem2Provider.types.js → modern/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.js} +0 -0
  187. /package/{TreeView/TreeView.types.js → modern/TreeItemIcon/TreeItemIcon.types.js} +0 -0
  188. /package/modern/{TreeItem2/TreeItem2.types.js → TreeItemLabelInput/TreeItemLabelInput.types.js} +0 -0
  189. /package/modern/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js → TreeItemProvider/TreeItemProvider.types.js} +0 -0
  190. /package/modern/{TreeItem2Icon/TreeItem2Icon.types.js → useTreeItem/useTreeItem.types.js} +0 -0
  191. /package/node/{TreeItem2/TreeItem2.types.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.js} +0 -0
  192. /package/node/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js → TreeItemIcon/TreeItemIcon.types.js} +0 -0
  193. /package/node/{TreeItem2Icon/TreeItem2Icon.types.js → TreeItemLabelInput/TreeItemLabelInput.types.js} +0 -0
  194. /package/node/{TreeItem2LabelInput/TreeItem2LabelInput.types.js → TreeItemProvider/TreeItemProvider.types.js} +0 -0
  195. /package/node/{TreeItem2Provider/TreeItem2Provider.types.js → useTreeItem/useTreeItem.types.js} +0 -0
  196. /package/{modern/TreeItem2LabelInput/TreeItem2LabelInput.types.js → useTreeItem/useTreeItem.types.js} +0 -0
@@ -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 TreeItem2DragAndDropOverlayRoot = styled('div', {
8
- name: 'MuiTreeItem2DragAndDropOverlay',
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.dark} / ${0.15})` : alpha(theme.palette.primary.dark, 0.15)
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: _extends({
38
+ style: {
36
39
  marginLeft: 'calc(var(--TreeView-indentMultiplier) * var(--TreeView-itemDepth))',
37
- borderTop: theme.vars ? `1px solid rgba(${theme.vars.palette.grey[900]} / ${0.6})` : `1px solid ${alpha(theme.palette.grey[900], 0.6)}`
38
- }, theme.applyStyles('dark', {
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: _extends({
46
+ style: {
46
47
  marginLeft: 'calc(var(--TreeView-indentMultiplier) * var(--TreeView-itemDepth))',
47
- borderBottom: theme.vars ? `1px solid rgba(${theme.vars.palette.grey[900]} / ${0.6})` : `1px solid ${alpha(theme.palette.grey[900], 0.6)}`
48
- }, theme.applyStyles('dark', {
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: _extends({
54
+ style: {
56
55
  marginLeft: 'calc(var(--TreeView-indentMultiplier) * calc(var(--TreeView-itemDepth) - 1))',
57
- borderBottom: theme.vars ? `1px solid rgba(${theme.vars.palette.grey[900]} / ${0.6})` : `1px solid ${alpha(theme.palette.grey[900], 0.6)}`
58
- }, theme.applyStyles('dark', {
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 TreeItem2DragAndDropOverlay(props) {
60
+ function TreeItemDragAndDropOverlay(props) {
64
61
  if (props.action == null) {
65
62
  return null;
66
63
  }
67
- return /*#__PURE__*/_jsx(TreeItem2DragAndDropOverlayRoot, _extends({}, props));
64
+ return /*#__PURE__*/_jsx(TreeItemDragAndDropOverlayRoot, _extends({}, props));
68
65
  }
69
- export { TreeItem2DragAndDropOverlay };
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 TreeItem2Icon(props) {
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" ? TreeItem2Icon.propTypes = {
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 { TreeItem2Icon };
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
- const TreeItem2LabelInput = styled('input', {
4
- name: 'MuiTreeItem2',
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 { TreeItem2LabelInput };
24
+ export { TreeItemLabelInput };
@@ -0,0 +1 @@
1
+ export { TreeItemLabelInput } from "./TreeItemLabelInput.js";
@@ -1,6 +1,10 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import { useTreeViewContext } from "../internals/TreeViewProvider/index.js";
3
- function TreeItem2Provider(props) {
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
- TreeItem2Provider.propTypes = {
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 { TreeItem2Provider };
30
+ export { TreeItemProvider };
@@ -0,0 +1 @@
1
+ export { TreeItemProvider } from "./TreeItemProvider.js";
@@ -1,2 +1,2 @@
1
1
  export { useTreeViewApiRef } from "./useTreeViewApiRef.js";
2
- export { useTreeItem2Utils } from "./useTreeItem2Utils/index.js";
2
+ export { useTreeItemUtils } from "./useTreeItemUtils/index.js";
@@ -0,0 +1 @@
1
+ export { useTreeItemUtils } from "./useTreeItemUtils.js";
@@ -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 `useTreeItem2Utils` to work correctly.
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 `useTreeItem2Utils` can use if they are present, but are not required.
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 useTreeItem2Utils = ({
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 v7.22.0
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 "./TreeItem2/index.js";
16
- export * from "./useTreeItem2/index.js";
17
- export * from "./TreeItem2Icon/index.js";
18
- export * from "./TreeItem2Provider/index.js";
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, newSelectedItems) => {
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 addedItems = newSelectedItems.filter(itemId => !instance.isItemSelected(itemId));
27
- const removedItems = models.selectedItems.value.filter(itemId => !newSelectedItems.includes(itemId));
28
- addedItems.forEach(itemId => {
29
- params.onItemSelectionToggle(event, itemId, true);
39
+ const changes = getAddedAndRemovedItems({
40
+ instance,
41
+ newModel: cleanModel,
42
+ oldModel: models.selectedItems.value
30
43
  });
31
- removedItems.forEach(itemId => {
32
- params.onItemSelectionToggle(event, itemId, false);
33
- });
34
- } else if (newSelectedItems !== models.selectedItems.value) {
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 (newSelectedItems != null) {
39
- params.onItemSelectionToggle(event, newSelectedItems, true);
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, newSelectedItems);
62
+ params.onSelectedItemsChange(event, cleanModel);
45
63
  }
46
- models.selectedItems.setControlledValue(newSelectedItems);
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";