@mui/x-tree-view 7.22.1 → 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 +143 -92
  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} +8 -6
  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} +3 -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/{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/{modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js → hooks/useTreeItemUtils/useTreeItemUtils.js} +5 -3
  41. package/index.d.ts +5 -7
  42. package/index.js +6 -8
  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} +8 -6
  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} +3 -3
  70. package/modern/TreeItemLabelInput/index.js +1 -0
  71. package/modern/{TreeItem2Provider/TreeItem2Provider.js → 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/{hooks/useTreeItem2Utils/useTreeItem2Utils.js → modern/hooks/useTreeItemUtils/useTreeItemUtils.js} +5 -3
  76. package/modern/index.js +6 -8
  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} +7 -6
  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} +3 -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 +18 -42
  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 -7
  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 -5
  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,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';
@@ -5,8 +7,8 @@ import { alpha } from '@mui/material/styles';
5
7
  import { shouldForwardProp } from '@mui/system';
6
8
  import { styled } from "../internals/zero-styled/index.js";
7
9
  import { jsx as _jsx } from "react/jsx-runtime";
8
- const TreeItem2DragAndDropOverlayRoot = styled('div', {
9
- name: 'MuiTreeItem2DragAndDropOverlay',
10
+ const TreeItemDragAndDropOverlayRoot = styled('div', {
11
+ name: 'MuiTreeItemDragAndDropOverlay',
10
12
  slot: 'Root',
11
13
  overridesResolver: (props, styles) => styles.root,
12
14
  shouldForwardProp: prop => shouldForwardProp(prop) && prop !== 'action'
@@ -55,13 +57,13 @@ const TreeItem2DragAndDropOverlayRoot = styled('div', {
55
57
  }
56
58
  }]
57
59
  }));
58
- function TreeItem2DragAndDropOverlay(props) {
60
+ function TreeItemDragAndDropOverlay(props) {
59
61
  if (props.action == null) {
60
62
  return null;
61
63
  }
62
- return /*#__PURE__*/_jsx(TreeItem2DragAndDropOverlayRoot, _extends({}, props));
64
+ return /*#__PURE__*/_jsx(TreeItemDragAndDropOverlayRoot, _extends({}, props));
63
65
  }
64
- process.env.NODE_ENV !== "production" ? TreeItem2DragAndDropOverlay.propTypes = {
66
+ process.env.NODE_ENV !== "production" ? TreeItemDragAndDropOverlay.propTypes = {
65
67
  // ----------------------------- Warning --------------------------------
66
68
  // | These PropTypes are generated from the TypeScript type definitions |
67
69
  // | To update them edit the TypeScript types and run "pnpm proptypes" |
@@ -69,4 +71,4 @@ process.env.NODE_ENV !== "production" ? TreeItem2DragAndDropOverlay.propTypes =
69
71
  action: PropTypes.oneOf(['make-child', 'move-to-parent', 'reorder-above', 'reorder-below']),
70
72
  style: PropTypes.object
71
73
  } : void 0;
72
- export { TreeItem2DragAndDropOverlay };
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";
@@ -4,8 +4,8 @@ import { styled } from "../internals/zero-styled/index.js";
4
4
  /**
5
5
  * @ignore - internal component.
6
6
  */
7
- const TreeItem2LabelInput = styled('input', {
8
- name: 'MuiTreeItem2',
7
+ const TreeItemLabelInput = styled('input', {
8
+ name: 'MuiTreeItem',
9
9
  slot: 'LabelInput',
10
10
  overridesResolver: (props, styles) => styles.labelInput
11
11
  })(({
@@ -21,4 +21,4 @@ const TreeItem2LabelInput = styled('input', {
21
21
  outline: `1px solid ${theme.palette.primary.main}`
22
22
  }
23
23
  }));
24
- 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,23 +1,21 @@
1
1
  /**
2
- * @mui/x-tree-view v7.22.1
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";
19
- export * from "./TreeItem2DragAndDropOverlay/index.js";
20
- export * from "./TreeItem2LabelInput/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";
21
19
  export { unstable_resetCleanupTracking } from "./internals/hooks/useInstanceEventHandler.js";
22
20
  export * from "./models/index.js";
23
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";
@@ -1,19 +1,20 @@
1
+ 'use client';
2
+
1
3
  import _extends from "@babel/runtime/helpers/esm/extends";
2
4
  import * as React from 'react';
3
5
  import extractEventHandlers from '@mui/utils/extractEventHandlers';
4
6
  import useForkRef from '@mui/utils/useForkRef';
5
7
  import { useTreeViewContext } from "../internals/TreeViewProvider/index.js";
6
- import { useTreeItem2Utils } from "../hooks/useTreeItem2Utils/index.js";
8
+ import { useTreeItemUtils } from "../hooks/useTreeItemUtils/index.js";
7
9
  import { TreeViewItemDepthContext } from "../internals/TreeViewItemDepthContext/index.js";
8
10
  import { isTargetInDescendants } from "../internals/utils/tree.js";
9
11
  import { generateTreeItemIdAttribute } from "../internals/corePlugins/useTreeViewId/useTreeViewId.utils.js";
10
- export const useTreeItem2 = parameters => {
12
+ export const useTreeItem = parameters => {
11
13
  const {
12
14
  runItemPlugins,
13
15
  items: {
14
16
  onItemClick,
15
- disabledItemsFocusable,
16
- indentationAtItemLevel
17
+ disabledItemsFocusable
17
18
  },
18
19
  selection: {
19
20
  disableSelection,
@@ -42,7 +43,7 @@ export const useTreeItem2 = parameters => {
42
43
  const {
43
44
  interactions,
44
45
  status
45
- } = useTreeItem2Utils({
46
+ } = useTreeItemUtils({
46
47
  itemId,
47
48
  children
48
49
  });
@@ -60,7 +61,8 @@ export const useTreeItem2 = parameters => {
60
61
  const sharedPropsEnhancerParams = {
61
62
  rootRefObject,
62
63
  contentRefObject,
63
- interactions
64
+ interactions,
65
+ status
64
66
  };
65
67
  const createRootHandleFocus = otherHandlers => event => {
66
68
  otherHandlers.onFocus?.(event);
@@ -128,16 +130,6 @@ export const useTreeItem2 = parameters => {
128
130
  event.preventDefault();
129
131
  }
130
132
  };
131
- const createCheckboxHandleChange = otherHandlers => event => {
132
- otherHandlers.onChange?.(event);
133
- if (event.defaultMuiPrevented) {
134
- return;
135
- }
136
- if (disableSelection || status.disabled) {
137
- return;
138
- }
139
- interactions.handleCheckboxSelection(event);
140
- };
141
133
  const createIconContainerHandleClick = otherHandlers => event => {
142
134
  otherHandlers.onClick?.(event);
143
135
  if (event.defaultMuiPrevented) {
@@ -171,15 +163,13 @@ export const useTreeItem2 = parameters => {
171
163
  'aria-selected': ariaSelected,
172
164
  'aria-disabled': status.disabled || undefined
173
165
  }, externalProps, {
166
+ style: _extends({}, externalProps.style ?? {}, {
167
+ '--TreeView-itemDepth': typeof depthContext === 'function' ? depthContext(itemId) : depthContext
168
+ }),
174
169
  onFocus: createRootHandleFocus(externalEventHandlers),
175
170
  onBlur: createRootHandleBlur(externalEventHandlers),
176
171
  onKeyDown: createRootHandleKeyDown(externalEventHandlers)
177
172
  });
178
- if (indentationAtItemLevel) {
179
- props.style = {
180
- '--TreeView-itemDepth': typeof depthContext === 'function' ? depthContext(itemId) : depthContext
181
- };
182
- }
183
173
  const enhancedRootProps = propsEnhancers.root?.(_extends({}, sharedPropsEnhancerParams, {
184
174
  externalEventHandlers
185
175
  })) ?? {};
@@ -193,9 +183,6 @@ export const useTreeItem2 = parameters => {
193
183
  onMouseDown: createContentHandleMouseDown(externalEventHandlers),
194
184
  status
195
185
  });
196
- if (indentationAtItemLevel) {
197
- props.indentationAtItemLevel = true;
198
- }
199
186
  const enhancedContentProps = propsEnhancers.content?.(_extends({}, sharedPropsEnhancerParams, {
200
187
  externalEventHandlers
201
188
  })) ?? {};
@@ -203,15 +190,13 @@ export const useTreeItem2 = parameters => {
203
190
  };
204
191
  const getCheckboxProps = (externalProps = {}) => {
205
192
  const externalEventHandlers = extractEventHandlers(externalProps);
206
- return _extends({}, externalEventHandlers, {
207
- visible: checkboxSelection,
208
- ref: checkboxRef,
209
- checked: status.selected,
210
- disabled: disableSelection || status.disabled,
211
- tabIndex: -1
212
- }, externalProps, {
213
- onChange: createCheckboxHandleChange(externalEventHandlers)
214
- });
193
+ const props = _extends({}, externalEventHandlers, {
194
+ ref: checkboxRef
195
+ }, externalProps);
196
+ const enhancedCheckboxProps = propsEnhancers.checkbox?.(_extends({}, sharedPropsEnhancerParams, {
197
+ externalEventHandlers
198
+ })) ?? {};
199
+ return _extends({}, props, enhancedCheckboxProps);
215
200
  };
216
201
  const getLabelProps = (externalProps = {}) => {
217
202
  const externalEventHandlers = _extends({}, extractEventHandlers(externalProps));
@@ -227,12 +212,9 @@ export const useTreeItem2 = parameters => {
227
212
  };
228
213
  const getLabelInputProps = (externalProps = {}) => {
229
214
  const externalEventHandlers = extractEventHandlers(externalProps);
230
- const enhancedLabelInputProps = propsEnhancers.labelInput?.({
231
- rootRefObject,
232
- contentRefObject,
233
- externalEventHandlers,
234
- interactions
235
- }) ?? {};
215
+ const enhancedLabelInputProps = propsEnhancers.labelInput?.(_extends({}, sharedPropsEnhancerParams, {
216
+ externalEventHandlers
217
+ })) ?? {};
236
218
  return _extends({}, externalProps, enhancedLabelInputProps);
237
219
  };
238
220
  const getIconContainerProps = (externalProps = {}) => {
@@ -250,9 +232,6 @@ export const useTreeItem2 = parameters => {
250
232
  in: status.expanded,
251
233
  children
252
234
  }, externalProps);
253
- if (indentationAtItemLevel) {
254
- response.indentationAtItemLevel = true;
255
- }
256
235
  return response;
257
236
  };
258
237
  const getDragAndDropOverlayProps = (externalProps = {}) => {