@mui/x-tree-view 7.0.0-beta.6 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/CHANGELOG.md +311 -12
  2. package/README.md +1 -1
  3. package/RichTreeView/RichTreeView.js +34 -36
  4. package/RichTreeView/RichTreeView.types.d.ts +3 -2
  5. package/SimpleTreeView/SimpleTreeView.js +25 -26
  6. package/TreeItem/TreeItem.js +94 -82
  7. package/TreeItem/TreeItem.types.d.ts +13 -11
  8. package/TreeItem/TreeItemContent.d.ts +7 -7
  9. package/TreeItem/TreeItemContent.js +10 -10
  10. package/TreeItem/useTreeItemState.d.ts +1 -1
  11. package/TreeItem/useTreeItemState.js +13 -13
  12. package/TreeItem2/TreeItem2.d.ts +18 -0
  13. package/TreeItem2/TreeItem2.js +300 -0
  14. package/TreeItem2/TreeItem2.types.d.ts +64 -0
  15. package/TreeItem2/TreeItem2.types.js +1 -0
  16. package/TreeItem2/index.d.ts +2 -0
  17. package/TreeItem2/index.js +1 -0
  18. package/TreeItem2/package.json +6 -0
  19. package/TreeItem2Icon/TreeItem2Icon.d.ts +7 -0
  20. package/TreeItem2Icon/TreeItem2Icon.js +67 -0
  21. package/TreeItem2Icon/TreeItem2Icon.types.d.ts +40 -0
  22. package/TreeItem2Icon/TreeItem2Icon.types.js +1 -0
  23. package/TreeItem2Icon/index.d.ts +2 -0
  24. package/TreeItem2Icon/index.js +1 -0
  25. package/TreeItem2Icon/package.json +6 -0
  26. package/TreeItem2Provider/TreeItem2Provider.d.ts +7 -0
  27. package/TreeItem2Provider/TreeItem2Provider.js +24 -0
  28. package/TreeItem2Provider/TreeItem2Provider.types.d.ts +6 -0
  29. package/TreeItem2Provider/TreeItem2Provider.types.js +1 -0
  30. package/TreeItem2Provider/index.d.ts +2 -0
  31. package/TreeItem2Provider/index.js +1 -0
  32. package/TreeItem2Provider/package.json +6 -0
  33. package/TreeView/TreeView.d.ts +1 -1
  34. package/TreeView/TreeView.js +23 -23
  35. package/hooks/index.d.ts +1 -0
  36. package/hooks/index.js +2 -1
  37. package/hooks/useTreeItem2Utils/index.d.ts +1 -0
  38. package/hooks/useTreeItem2Utils/index.js +1 -0
  39. package/hooks/useTreeItem2Utils/useTreeItem2Utils.d.ts +15 -0
  40. package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +61 -0
  41. package/index.d.ts +5 -1
  42. package/index.js +9 -2
  43. package/internals/TreeViewProvider/TreeViewContext.d.ts +3 -1
  44. package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +4 -2
  45. package/internals/hooks/useInstanceEventHandler.js +5 -10
  46. package/internals/hooks/useLazyRef.d.ts +1 -2
  47. package/internals/hooks/useLazyRef.js +1 -11
  48. package/internals/hooks/useOnMount.d.ts +1 -2
  49. package/internals/hooks/useOnMount.js +1 -7
  50. package/internals/hooks/useTimeout.d.ts +1 -11
  51. package/internals/hooks/useTimeout.js +1 -36
  52. package/internals/models/plugin.d.ts +19 -16
  53. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +31 -38
  54. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +14 -14
  55. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +67 -51
  56. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +9 -8
  57. package/internals/plugins/useTreeViewId/useTreeViewId.js +1 -1
  58. package/internals/plugins/useTreeViewId/useTreeViewId.types.d.ts +1 -1
  59. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +30 -31
  60. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.d.ts +2 -2
  61. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +75 -80
  62. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +4 -1
  63. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +26 -31
  64. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +11 -11
  65. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +47 -50
  66. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +15 -15
  67. package/internals/useTreeView/useTreeView.js +28 -27
  68. package/internals/useTreeView/useTreeView.utils.d.ts +2 -2
  69. package/internals/useTreeView/useTreeView.utils.js +22 -22
  70. package/internals/utils/extractPluginParamsFromProps.js +2 -2
  71. package/internals/utils/utils.js +1 -0
  72. package/modern/RichTreeView/RichTreeView.js +29 -29
  73. package/modern/SimpleTreeView/SimpleTreeView.js +23 -23
  74. package/modern/TreeItem/TreeItem.js +83 -70
  75. package/modern/TreeItem/TreeItemContent.js +10 -10
  76. package/modern/TreeItem/useTreeItemState.js +13 -13
  77. package/modern/TreeItem2/TreeItem2.js +300 -0
  78. package/modern/TreeItem2/TreeItem2.types.js +1 -0
  79. package/modern/TreeItem2/index.js +1 -0
  80. package/modern/TreeItem2Icon/TreeItem2Icon.js +67 -0
  81. package/modern/TreeItem2Icon/TreeItem2Icon.types.js +1 -0
  82. package/modern/TreeItem2Icon/index.js +1 -0
  83. package/modern/TreeItem2Provider/TreeItem2Provider.js +24 -0
  84. package/modern/TreeItem2Provider/TreeItem2Provider.types.js +1 -0
  85. package/modern/TreeItem2Provider/index.js +1 -0
  86. package/modern/TreeView/TreeView.js +23 -23
  87. package/modern/hooks/index.js +2 -1
  88. package/modern/hooks/useTreeItem2Utils/index.js +1 -0
  89. package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +61 -0
  90. package/modern/index.js +9 -2
  91. package/modern/internals/hooks/useLazyRef.js +1 -11
  92. package/modern/internals/hooks/useOnMount.js +1 -7
  93. package/modern/internals/hooks/useTimeout.js +1 -36
  94. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +29 -29
  95. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +65 -46
  96. package/modern/internals/plugins/useTreeViewId/useTreeViewId.js +1 -1
  97. package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +30 -30
  98. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +74 -77
  99. package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +21 -22
  100. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +43 -43
  101. package/modern/internals/useTreeView/useTreeView.js +28 -27
  102. package/modern/internals/useTreeView/useTreeView.utils.js +22 -22
  103. package/modern/internals/utils/utils.js +1 -0
  104. package/modern/useTreeItem2/index.js +1 -0
  105. package/modern/useTreeItem2/useTreeItem2.js +146 -0
  106. package/modern/useTreeItem2/useTreeItem2.types.js +1 -0
  107. package/node/RichTreeView/RichTreeView.js +29 -29
  108. package/node/SimpleTreeView/SimpleTreeView.js +23 -23
  109. package/node/TreeItem/TreeItem.js +83 -70
  110. package/node/TreeItem/TreeItemContent.js +10 -10
  111. package/node/TreeItem/useTreeItemState.js +13 -13
  112. package/node/TreeItem2/TreeItem2.js +308 -0
  113. package/node/TreeItem2/TreeItem2.types.js +5 -0
  114. package/node/TreeItem2/index.js +42 -0
  115. package/node/TreeItem2Icon/TreeItem2Icon.js +75 -0
  116. package/node/TreeItem2Icon/TreeItem2Icon.types.js +5 -0
  117. package/node/TreeItem2Icon/index.js +12 -0
  118. package/node/TreeItem2Provider/TreeItem2Provider.js +30 -0
  119. package/node/TreeItem2Provider/TreeItem2Provider.types.js +5 -0
  120. package/node/TreeItem2Provider/index.js +12 -0
  121. package/node/TreeView/TreeView.js +23 -23
  122. package/node/hooks/index.js +8 -1
  123. package/node/hooks/useTreeItem2Utils/index.js +12 -0
  124. package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +68 -0
  125. package/node/index.js +61 -13
  126. package/node/internals/hooks/useLazyRef.js +7 -13
  127. package/node/internals/hooks/useOnMount.js +8 -10
  128. package/node/internals/hooks/useTimeout.js +7 -37
  129. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +29 -29
  130. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +65 -46
  131. package/node/internals/plugins/useTreeViewId/useTreeViewId.js +1 -1
  132. package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +30 -30
  133. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +74 -77
  134. package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +21 -22
  135. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +43 -43
  136. package/node/internals/useTreeView/useTreeView.js +28 -27
  137. package/node/internals/useTreeView/useTreeView.utils.js +22 -22
  138. package/node/internals/utils/utils.js +1 -0
  139. package/node/useTreeItem2/index.js +12 -0
  140. package/node/useTreeItem2/useTreeItem2.js +154 -0
  141. package/node/useTreeItem2/useTreeItem2.types.js +5 -0
  142. package/package.json +5 -5
  143. package/themeAugmentation/components.d.ts +5 -0
  144. package/themeAugmentation/overrides.d.ts +1 -0
  145. package/themeAugmentation/props.d.ts +2 -0
  146. package/useTreeItem2/index.d.ts +2 -0
  147. package/useTreeItem2/index.js +1 -0
  148. package/useTreeItem2/package.json +6 -0
  149. package/useTreeItem2/useTreeItem2.d.ts +2 -0
  150. package/useTreeItem2/useTreeItem2.js +146 -0
  151. package/useTreeItem2/useTreeItem2.types.d.ts +115 -0
  152. package/useTreeItem2/useTreeItem2.types.js +1 -0
@@ -4,46 +4,46 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.populatePublicAPI = exports.populateInstance = exports.getPreviousNode = exports.getNextNode = exports.getLastNode = exports.getFirstNode = void 0;
7
- const getPreviousNode = (instance, nodeId) => {
8
- const node = instance.getNode(nodeId);
9
- const siblings = instance.getNavigableChildrenIds(node.parentId);
10
- const nodeIndex = siblings.indexOf(nodeId);
11
- if (nodeIndex === 0) {
12
- return node.parentId;
7
+ const getPreviousNode = (instance, itemId) => {
8
+ const item = instance.getNode(itemId);
9
+ const siblings = instance.getNavigableChildrenIds(item.parentId);
10
+ const itemIndex = siblings.indexOf(itemId);
11
+ if (itemIndex === 0) {
12
+ return item.parentId;
13
13
  }
14
- let currentNode = siblings[nodeIndex - 1];
15
- while (instance.isNodeExpanded(currentNode) && instance.getNavigableChildrenIds(currentNode).length > 0) {
16
- currentNode = instance.getNavigableChildrenIds(currentNode).pop();
14
+ let currentItem = siblings[itemIndex - 1];
15
+ while (instance.isNodeExpanded(currentItem) && instance.getNavigableChildrenIds(currentItem).length > 0) {
16
+ currentItem = instance.getNavigableChildrenIds(currentItem).pop();
17
17
  }
18
- return currentNode;
18
+ return currentItem;
19
19
  };
20
20
  exports.getPreviousNode = getPreviousNode;
21
- const getNextNode = (instance, nodeId) => {
21
+ const getNextNode = (instance, itemId) => {
22
22
  // If expanded get first child
23
- if (instance.isNodeExpanded(nodeId) && instance.getNavigableChildrenIds(nodeId).length > 0) {
24
- return instance.getNavigableChildrenIds(nodeId)[0];
23
+ if (instance.isNodeExpanded(itemId) && instance.getNavigableChildrenIds(itemId).length > 0) {
24
+ return instance.getNavigableChildrenIds(itemId)[0];
25
25
  }
26
- let node = instance.getNode(nodeId);
27
- while (node != null) {
26
+ let item = instance.getNode(itemId);
27
+ while (item != null) {
28
28
  // Try to get next sibling
29
- const siblings = instance.getNavigableChildrenIds(node.parentId);
30
- const nextSibling = siblings[siblings.indexOf(node.id) + 1];
29
+ const siblings = instance.getNavigableChildrenIds(item.parentId);
30
+ const nextSibling = siblings[siblings.indexOf(item.id) + 1];
31
31
  if (nextSibling) {
32
32
  return nextSibling;
33
33
  }
34
34
 
35
35
  // If the sibling does not exist, go up a level to the parent and try again.
36
- node = instance.getNode(node.parentId);
36
+ item = instance.getNode(item.parentId);
37
37
  }
38
38
  return null;
39
39
  };
40
40
  exports.getNextNode = getNextNode;
41
41
  const getLastNode = instance => {
42
- let lastNode = instance.getNavigableChildrenIds(null).pop();
43
- while (instance.isNodeExpanded(lastNode)) {
44
- lastNode = instance.getNavigableChildrenIds(lastNode).pop();
42
+ let lastItem = instance.getNavigableChildrenIds(null).pop();
43
+ while (instance.isNodeExpanded(lastItem)) {
44
+ lastItem = instance.getNavigableChildrenIds(lastItem).pop();
45
45
  }
46
- return lastNode;
46
+ return lastItem;
47
47
  };
48
48
  exports.getLastNode = getLastNode;
49
49
  const getFirstNode = instance => instance.getNavigableChildrenIds(null)[0];
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.getActiveElement = void 0;
7
+ // https://www.abeautifulsite.net/posts/finding-the-active-element-in-a-shadow-root/
7
8
  const getActiveElement = (root = document) => {
8
9
  const activeEl = root.activeElement;
9
10
  if (!activeEl) {
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "unstable_useTreeItem2", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _useTreeItem.useTreeItem2;
10
+ }
11
+ });
12
+ var _useTreeItem = require("./useTreeItem2");
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useTreeItem2 = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _utils = require("@mui/base/utils");
10
+ var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
11
+ var _useTreeViewContext = require("../internals/TreeViewProvider/useTreeViewContext");
12
+ var _useTreeItem2Utils = require("../hooks/useTreeItem2Utils");
13
+ const useTreeItem2 = parameters => {
14
+ const {
15
+ runItemPlugins,
16
+ selection: {
17
+ multiSelect
18
+ },
19
+ disabledItemsFocusable,
20
+ instance,
21
+ publicAPI
22
+ } = (0, _useTreeViewContext.useTreeViewContext)();
23
+ const {
24
+ id,
25
+ itemId,
26
+ label,
27
+ children,
28
+ rootRef
29
+ } = parameters;
30
+ const {
31
+ rootRef: pluginRootRef,
32
+ contentRef
33
+ } = runItemPlugins(parameters);
34
+ const {
35
+ interactions,
36
+ status
37
+ } = (0, _useTreeItem2Utils.useTreeItem2Utils)({
38
+ itemId,
39
+ children
40
+ });
41
+ const idAttribute = instance.getTreeItemId(itemId, id);
42
+ const handleRootRef = (0, _useForkRef.default)(rootRef, pluginRootRef);
43
+ const createRootHandleFocus = otherHandlers => event => {
44
+ otherHandlers.onFocus?.(event);
45
+ if (event.defaultMuiPrevented) {
46
+ return;
47
+ }
48
+ const canBeFocused = !status.disabled || disabledItemsFocusable;
49
+ if (!status.focused && canBeFocused && event.currentTarget === event.target) {
50
+ instance.focusItem(event, itemId);
51
+ }
52
+ };
53
+ const createRootHandleBlur = otherHandlers => event => {
54
+ otherHandlers.onBlur?.(event);
55
+ if (event.defaultMuiPrevented) {
56
+ return;
57
+ }
58
+ instance.removeFocusedItem();
59
+ };
60
+ const createRootHandleKeyDown = otherHandlers => event => {
61
+ otherHandlers.onKeyDown?.(event);
62
+ if (event.defaultMuiPrevented) {
63
+ return;
64
+ }
65
+ instance.handleItemKeyDown(event, itemId);
66
+ };
67
+ const createContentHandleClick = otherHandlers => event => {
68
+ otherHandlers.onClick?.(event);
69
+ if (event.defaultMuiPrevented) {
70
+ return;
71
+ }
72
+ interactions.handleExpansion(event);
73
+ interactions.handleSelection(event);
74
+ };
75
+ const createContentHandleMouseDown = otherHandlers => event => {
76
+ otherHandlers.onMouseDown?.(event);
77
+ if (event.defaultMuiPrevented) {
78
+ return;
79
+ }
80
+
81
+ // Prevent text selection
82
+ if (event.shiftKey || event.ctrlKey || event.metaKey || status.disabled) {
83
+ event.preventDefault();
84
+ }
85
+ };
86
+ const getRootProps = (externalProps = {}) => {
87
+ const externalEventHandlers = (0, _extends2.default)({}, (0, _utils.extractEventHandlers)(parameters), (0, _utils.extractEventHandlers)(externalProps));
88
+ let ariaSelected;
89
+ if (multiSelect) {
90
+ ariaSelected = status.selected;
91
+ } else if (status.selected) {
92
+ /* single-selection trees unset aria-selected on un-selected items.
93
+ *
94
+ * If the tree does not support multiple selection, aria-selected
95
+ * is set to true for the selected item and it is not present on any other item in the tree.
96
+ * Source: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/
97
+ */
98
+ ariaSelected = true;
99
+ }
100
+ return (0, _extends2.default)({}, externalEventHandlers, {
101
+ ref: handleRootRef,
102
+ role: 'treeitem',
103
+ tabIndex: instance.canItemBeTabbed(itemId) ? 0 : -1,
104
+ id: idAttribute,
105
+ 'aria-expanded': status.expandable ? status.expanded : undefined,
106
+ 'aria-selected': ariaSelected,
107
+ 'aria-disabled': status.disabled || undefined
108
+ }, externalProps, {
109
+ onFocus: createRootHandleFocus(externalEventHandlers),
110
+ onBlur: createRootHandleBlur(externalEventHandlers),
111
+ onKeyDown: createRootHandleKeyDown(externalEventHandlers)
112
+ });
113
+ };
114
+ const getContentProps = (externalProps = {}) => {
115
+ const externalEventHandlers = (0, _extends2.default)({}, (0, _utils.extractEventHandlers)(parameters), (0, _utils.extractEventHandlers)(externalProps));
116
+ return (0, _extends2.default)({}, externalEventHandlers, externalProps, {
117
+ ref: contentRef,
118
+ onClick: createContentHandleClick(externalEventHandlers),
119
+ onMouseDown: createContentHandleMouseDown(externalEventHandlers),
120
+ status
121
+ });
122
+ };
123
+ const getLabelProps = (externalProps = {}) => {
124
+ const externalEventHandlers = (0, _extends2.default)({}, (0, _utils.extractEventHandlers)(parameters), (0, _utils.extractEventHandlers)(externalProps));
125
+ return (0, _extends2.default)({}, externalEventHandlers, {
126
+ children: label
127
+ }, externalProps);
128
+ };
129
+ const getIconContainerProps = (externalProps = {}) => {
130
+ const externalEventHandlers = (0, _extends2.default)({}, (0, _utils.extractEventHandlers)(parameters), (0, _utils.extractEventHandlers)(externalProps));
131
+ return (0, _extends2.default)({}, externalEventHandlers, externalProps);
132
+ };
133
+ const getGroupTransitionProps = (externalProps = {}) => {
134
+ const externalEventHandlers = (0, _extends2.default)({}, (0, _utils.extractEventHandlers)(parameters), (0, _utils.extractEventHandlers)(externalProps));
135
+ return (0, _extends2.default)({}, externalEventHandlers, {
136
+ unmountOnExit: true,
137
+ component: 'ul',
138
+ role: 'group',
139
+ in: status.expanded,
140
+ children
141
+ }, externalProps);
142
+ };
143
+ return {
144
+ getRootProps,
145
+ getContentProps,
146
+ getGroupTransitionProps,
147
+ getIconContainerProps,
148
+ getLabelProps,
149
+ rootRef: handleRootRef,
150
+ status,
151
+ publicAPI
152
+ };
153
+ };
154
+ exports.useTreeItem2 = useTreeItem2;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-tree-view",
3
- "version": "7.0.0-beta.6",
3
+ "version": "7.0.0",
4
4
  "description": "The community edition of the tree view components (MUI X).",
5
5
  "author": "MUI Team",
6
6
  "main": "./node/index.js",
@@ -33,9 +33,9 @@
33
33
  },
34
34
  "dependencies": {
35
35
  "@babel/runtime": "^7.24.0",
36
- "@mui/base": "^5.0.0-beta.36",
37
- "@mui/system": "^5.15.9",
38
- "@mui/utils": "^5.15.9",
36
+ "@mui/base": "^5.0.0-beta.40",
37
+ "@mui/system": "^5.15.14",
38
+ "@mui/utils": "^5.15.14",
39
39
  "@types/react-transition-group": "^4.4.10",
40
40
  "clsx": "^2.1.0",
41
41
  "prop-types": "^15.8.1",
@@ -44,7 +44,7 @@
44
44
  "peerDependencies": {
45
45
  "@emotion/react": "^11.9.0",
46
46
  "@emotion/styled": "^11.8.1",
47
- "@mui/material": "^5.15.0",
47
+ "@mui/material": "^5.15.14",
48
48
  "react": "^17.0.0 || ^18.0.0",
49
49
  "react-dom": "^17.0.0 || ^18.0.0"
50
50
  },
@@ -21,6 +21,11 @@ export interface TreeViewComponents<Theme = unknown> {
21
21
  styleOverrides?: ComponentsOverrides<Theme>['MuiTreeItem'];
22
22
  variants?: ComponentsVariants<Theme>['MuiTreeItem'];
23
23
  };
24
+ MuiTreeItem2?: {
25
+ defaultProps?: ComponentsProps['MuiTreeItem2'];
26
+ styleOverrides?: ComponentsOverrides<Theme>['MuiTreeItem2'];
27
+ variants?: ComponentsVariants<Theme>['MuiTreeItem2'];
28
+ };
24
29
  }
25
30
 
26
31
  declare module '@mui/material/styles' {
@@ -9,6 +9,7 @@ export interface TreeViewComponentNameToClassKey {
9
9
  MuiRichTreeView: RichTreeViewClassKey;
10
10
  MuiTreeView: TreeViewClassKey;
11
11
  MuiTreeItem: TreeItemClassKey;
12
+ MuiTreeItem2: TreeItemClassKey;
12
13
  }
13
14
 
14
15
  declare module '@mui/material/styles' {
@@ -2,12 +2,14 @@ import { TreeItemProps } from '../TreeItem';
2
2
  import { TreeViewProps } from '../TreeView';
3
3
  import { SimpleTreeViewProps } from '../SimpleTreeView';
4
4
  import { RichTreeViewProps } from '../RichTreeView';
5
+ import { TreeItem2Props } from '../TreeItem2';
5
6
 
6
7
  export interface TreeViewComponentsPropsList {
7
8
  MuiSimpleTreeView: SimpleTreeViewProps<any>;
8
9
  MuiRichTreeView: RichTreeViewProps<any, any>;
9
10
  MuiTreeView: TreeViewProps<any>;
10
11
  MuiTreeItem: TreeItemProps;
12
+ MuiTreeItem2: TreeItem2Props;
11
13
  }
12
14
 
13
15
  declare module '@mui/material/styles' {
@@ -0,0 +1,2 @@
1
+ export { useTreeItem2 as unstable_useTreeItem2 } from './useTreeItem2';
2
+ export type { UseTreeItem2Parameters, UseTreeItem2ReturnValue, UseTreeItem2Status, UseTreeItem2ContentSlotOwnProps, } from './useTreeItem2.types';
@@ -0,0 +1 @@
1
+ export { useTreeItem2 as unstable_useTreeItem2 } from './useTreeItem2';
@@ -0,0 +1,6 @@
1
+ {
2
+ "sideEffects": false,
3
+ "module": "./index.js",
4
+ "main": "../node/useTreeItem2/index.js",
5
+ "types": "./index.d.ts"
6
+ }
@@ -0,0 +1,2 @@
1
+ import { UseTreeItem2Parameters, UseTreeItem2ReturnValue } from './useTreeItem2.types';
2
+ export declare const useTreeItem2: <TPlugins extends [import("../internals").UseTreeViewIdSignature, import("../internals").UseTreeViewNodesSignature, import("../internals").UseTreeViewExpansionSignature, import("../internals").UseTreeViewSelectionSignature, import("../internals").UseTreeViewFocusSignature, import("../internals").UseTreeViewKeyboardNavigationSignature, import("../internals").UseTreeViewIconsSignature] = [import("../internals").UseTreeViewIdSignature, import("../internals").UseTreeViewNodesSignature, import("../internals").UseTreeViewExpansionSignature, import("../internals").UseTreeViewSelectionSignature, import("../internals").UseTreeViewFocusSignature, import("../internals").UseTreeViewKeyboardNavigationSignature, import("../internals").UseTreeViewIconsSignature]>(parameters: UseTreeItem2Parameters) => UseTreeItem2ReturnValue<TPlugins>;
@@ -0,0 +1,146 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import { extractEventHandlers } from '@mui/base/utils';
3
+ import useForkRef from '@mui/utils/useForkRef';
4
+ import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
5
+ import { useTreeItem2Utils } from '../hooks/useTreeItem2Utils';
6
+ export const useTreeItem2 = parameters => {
7
+ const {
8
+ runItemPlugins,
9
+ selection: {
10
+ multiSelect
11
+ },
12
+ disabledItemsFocusable,
13
+ instance,
14
+ publicAPI
15
+ } = useTreeViewContext();
16
+ const {
17
+ id,
18
+ itemId,
19
+ label,
20
+ children,
21
+ rootRef
22
+ } = parameters;
23
+ const {
24
+ rootRef: pluginRootRef,
25
+ contentRef
26
+ } = runItemPlugins(parameters);
27
+ const {
28
+ interactions,
29
+ status
30
+ } = useTreeItem2Utils({
31
+ itemId,
32
+ children
33
+ });
34
+ const idAttribute = instance.getTreeItemId(itemId, id);
35
+ const handleRootRef = useForkRef(rootRef, pluginRootRef);
36
+ const createRootHandleFocus = otherHandlers => event => {
37
+ otherHandlers.onFocus?.(event);
38
+ if (event.defaultMuiPrevented) {
39
+ return;
40
+ }
41
+ const canBeFocused = !status.disabled || disabledItemsFocusable;
42
+ if (!status.focused && canBeFocused && event.currentTarget === event.target) {
43
+ instance.focusItem(event, itemId);
44
+ }
45
+ };
46
+ const createRootHandleBlur = otherHandlers => event => {
47
+ otherHandlers.onBlur?.(event);
48
+ if (event.defaultMuiPrevented) {
49
+ return;
50
+ }
51
+ instance.removeFocusedItem();
52
+ };
53
+ const createRootHandleKeyDown = otherHandlers => event => {
54
+ otherHandlers.onKeyDown?.(event);
55
+ if (event.defaultMuiPrevented) {
56
+ return;
57
+ }
58
+ instance.handleItemKeyDown(event, itemId);
59
+ };
60
+ const createContentHandleClick = otherHandlers => event => {
61
+ otherHandlers.onClick?.(event);
62
+ if (event.defaultMuiPrevented) {
63
+ return;
64
+ }
65
+ interactions.handleExpansion(event);
66
+ interactions.handleSelection(event);
67
+ };
68
+ const createContentHandleMouseDown = otherHandlers => event => {
69
+ otherHandlers.onMouseDown?.(event);
70
+ if (event.defaultMuiPrevented) {
71
+ return;
72
+ }
73
+
74
+ // Prevent text selection
75
+ if (event.shiftKey || event.ctrlKey || event.metaKey || status.disabled) {
76
+ event.preventDefault();
77
+ }
78
+ };
79
+ const getRootProps = (externalProps = {}) => {
80
+ const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
81
+ let ariaSelected;
82
+ if (multiSelect) {
83
+ ariaSelected = status.selected;
84
+ } else if (status.selected) {
85
+ /* single-selection trees unset aria-selected on un-selected items.
86
+ *
87
+ * If the tree does not support multiple selection, aria-selected
88
+ * is set to true for the selected item and it is not present on any other item in the tree.
89
+ * Source: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/
90
+ */
91
+ ariaSelected = true;
92
+ }
93
+ return _extends({}, externalEventHandlers, {
94
+ ref: handleRootRef,
95
+ role: 'treeitem',
96
+ tabIndex: instance.canItemBeTabbed(itemId) ? 0 : -1,
97
+ id: idAttribute,
98
+ 'aria-expanded': status.expandable ? status.expanded : undefined,
99
+ 'aria-selected': ariaSelected,
100
+ 'aria-disabled': status.disabled || undefined
101
+ }, externalProps, {
102
+ onFocus: createRootHandleFocus(externalEventHandlers),
103
+ onBlur: createRootHandleBlur(externalEventHandlers),
104
+ onKeyDown: createRootHandleKeyDown(externalEventHandlers)
105
+ });
106
+ };
107
+ const getContentProps = (externalProps = {}) => {
108
+ const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
109
+ return _extends({}, externalEventHandlers, externalProps, {
110
+ ref: contentRef,
111
+ onClick: createContentHandleClick(externalEventHandlers),
112
+ onMouseDown: createContentHandleMouseDown(externalEventHandlers),
113
+ status
114
+ });
115
+ };
116
+ const getLabelProps = (externalProps = {}) => {
117
+ const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
118
+ return _extends({}, externalEventHandlers, {
119
+ children: label
120
+ }, externalProps);
121
+ };
122
+ const getIconContainerProps = (externalProps = {}) => {
123
+ const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
124
+ return _extends({}, externalEventHandlers, externalProps);
125
+ };
126
+ const getGroupTransitionProps = (externalProps = {}) => {
127
+ const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
128
+ return _extends({}, externalEventHandlers, {
129
+ unmountOnExit: true,
130
+ component: 'ul',
131
+ role: 'group',
132
+ in: status.expanded,
133
+ children
134
+ }, externalProps);
135
+ };
136
+ return {
137
+ getRootProps,
138
+ getContentProps,
139
+ getGroupTransitionProps,
140
+ getIconContainerProps,
141
+ getLabelProps,
142
+ rootRef: handleRootRef,
143
+ status,
144
+ publicAPI
145
+ };
146
+ };
@@ -0,0 +1,115 @@
1
+ import * as React from 'react';
2
+ import { TreeViewItemId } from '../models';
3
+ import { MuiCancellableEventHandler } from '../internals/models/MuiCancellableEvent';
4
+ import { TreeViewAnyPluginSignature, TreeViewPublicAPI } from '../internals/models';
5
+ export interface UseTreeItem2Parameters {
6
+ /**
7
+ * The id attribute of the item. If not provided, it will be generated.
8
+ */
9
+ id?: string;
10
+ /**
11
+ * If `true`, the item is disabled.
12
+ * @default false
13
+ */
14
+ disabled?: boolean;
15
+ /**
16
+ * The id of the item.
17
+ * Must be unique.
18
+ */
19
+ itemId: TreeViewItemId;
20
+ /**
21
+ * The label of the item.
22
+ */
23
+ label?: React.ReactNode;
24
+ rootRef?: React.Ref<HTMLLIElement>;
25
+ /**
26
+ * The content of the component.
27
+ */
28
+ children?: React.ReactNode;
29
+ }
30
+ export interface UseTreeItem2RootSlotOwnProps {
31
+ role: 'treeitem';
32
+ tabIndex: 0 | -1;
33
+ id: string;
34
+ 'aria-expanded': React.AriaAttributes['aria-expanded'];
35
+ 'aria-selected': React.AriaAttributes['aria-selected'];
36
+ 'aria-disabled': React.AriaAttributes['aria-disabled'];
37
+ onFocus: MuiCancellableEventHandler<React.FocusEvent<HTMLElement>>;
38
+ onBlur: MuiCancellableEventHandler<React.FocusEvent<HTMLElement>>;
39
+ onKeyDown: MuiCancellableEventHandler<React.KeyboardEvent<HTMLElement>>;
40
+ ref: React.RefCallback<HTMLLIElement>;
41
+ }
42
+ export type UseTreeItem2RootSlotProps<ExternalProps = {}> = ExternalProps & UseTreeItem2RootSlotOwnProps;
43
+ export interface UseTreeItem2ContentSlotOwnProps {
44
+ onClick: MuiCancellableEventHandler<React.MouseEvent>;
45
+ onMouseDown: MuiCancellableEventHandler<React.MouseEvent>;
46
+ ref: React.RefCallback<HTMLDivElement> | null;
47
+ status: UseTreeItem2Status;
48
+ }
49
+ export type UseTreeItem2ContentSlotProps<ExternalProps = {}> = ExternalProps & UseTreeItem2ContentSlotOwnProps;
50
+ export interface UseTreeItem2IconContainerSlotOwnProps {
51
+ }
52
+ export type UseTreeItemIconContainerSlotProps<ExternalProps = {}> = ExternalProps & UseTreeItem2IconContainerSlotOwnProps;
53
+ export interface UseTreeItem2LabelSlotOwnProps {
54
+ children: React.ReactNode;
55
+ }
56
+ export type UseTreeItem2LabelSlotProps<ExternalProps = {}> = ExternalProps & UseTreeItem2LabelSlotOwnProps;
57
+ export interface UseTreeItem2GroupTransitionSlotOwnProps {
58
+ unmountOnExit: boolean;
59
+ in: boolean;
60
+ component: 'ul';
61
+ role: 'group';
62
+ children: React.ReactNode;
63
+ }
64
+ export type UseTreeItem2GroupTransitionSlotProps<ExternalProps = {}> = ExternalProps & UseTreeItem2GroupTransitionSlotOwnProps;
65
+ export interface UseTreeItem2Status {
66
+ expandable: boolean;
67
+ expanded: boolean;
68
+ focused: boolean;
69
+ selected: boolean;
70
+ disabled: boolean;
71
+ }
72
+ export interface UseTreeItem2ReturnValue<TPlugins extends readonly TreeViewAnyPluginSignature[]> {
73
+ /**
74
+ * Resolver for the root slot's props.
75
+ * @param {ExternalProps} externalProps Additional props for the root slot
76
+ * @returns {UseTreeItem2RootSlotProps<ExternalProps>} Props that should be spread on the root slot
77
+ */
78
+ getRootProps: <ExternalProps extends Record<string, any> = {}>(externalProps?: ExternalProps) => UseTreeItem2RootSlotProps<ExternalProps>;
79
+ /**
80
+ * Resolver for the content slot's props.
81
+ * @param {ExternalProps} externalProps Additional props for the content slot
82
+ * @returns {UseTreeItem2ContentSlotProps<ExternalProps>} Props that should be spread on the content slot
83
+ */
84
+ getContentProps: <ExternalProps extends Record<string, any> = {}>(externalProps?: ExternalProps) => UseTreeItem2ContentSlotProps<ExternalProps>;
85
+ /**
86
+ * Resolver for the label slot's props.
87
+ * @param {ExternalProps} externalProps Additional props for the label slot
88
+ * @returns {UseTreeItem2LabelSlotProps<ExternalProps>} Props that should be spread on the label slot
89
+ */
90
+ getLabelProps: <ExternalProps extends Record<string, any> = {}>(externalProps?: ExternalProps) => UseTreeItem2LabelSlotProps<ExternalProps>;
91
+ /**
92
+ * Resolver for the iconContainer slot's props.
93
+ * @param {ExternalProps} externalProps Additional props for the iconContainer slot
94
+ * @returns {UseTreeItemIconContainerSlotProps<ExternalProps>} Props that should be spread on the iconContainer slot
95
+ */
96
+ getIconContainerProps: <ExternalProps extends Record<string, any> = {}>(externalProps?: ExternalProps) => UseTreeItemIconContainerSlotProps<ExternalProps>;
97
+ /**
98
+ * Resolver for the GroupTransition slot's props.
99
+ * @param {ExternalProps} externalProps Additional props for the GroupTransition slot
100
+ * @returns {UseTreeItem2GroupTransitionSlotProps<ExternalProps>} Props that should be spread on the GroupTransition slot
101
+ */
102
+ getGroupTransitionProps: <ExternalProps extends Record<string, any> = {}>(externalProps?: ExternalProps) => UseTreeItem2GroupTransitionSlotProps<ExternalProps>;
103
+ /**
104
+ * A ref to the component's root DOM element.
105
+ */
106
+ rootRef: React.RefCallback<HTMLLIElement> | null;
107
+ /**
108
+ * Current status of the item.
109
+ */
110
+ status: UseTreeItem2Status;
111
+ /**
112
+ * The object the allows Tree View manipulation.
113
+ */
114
+ publicAPI: TreeViewPublicAPI<TPlugins>;
115
+ }
@@ -0,0 +1 @@
1
+ export {};