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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/CHANGELOG.md +117 -1
  2. package/RichTreeView/RichTreeView.js +22 -22
  3. package/RichTreeView/RichTreeView.types.d.ts +2 -1
  4. package/SimpleTreeView/SimpleTreeView.js +22 -22
  5. package/TreeItem/TreeItem.js +57 -53
  6. package/TreeItem/TreeItem.types.d.ts +10 -8
  7. package/TreeItem/useTreeItemState.js +2 -2
  8. package/TreeItem2/TreeItem2.d.ts +18 -0
  9. package/TreeItem2/TreeItem2.js +301 -0
  10. package/TreeItem2/TreeItem2.types.d.ts +64 -0
  11. package/TreeItem2/TreeItem2.types.js +1 -0
  12. package/TreeItem2/index.d.ts +2 -0
  13. package/TreeItem2/index.js +1 -0
  14. package/TreeItem2/package.json +6 -0
  15. package/TreeItem2Icon/TreeItem2Icon.d.ts +7 -0
  16. package/TreeItem2Icon/TreeItem2Icon.js +68 -0
  17. package/TreeItem2Icon/TreeItem2Icon.types.d.ts +40 -0
  18. package/TreeItem2Icon/TreeItem2Icon.types.js +1 -0
  19. package/TreeItem2Icon/index.d.ts +2 -0
  20. package/TreeItem2Icon/index.js +1 -0
  21. package/TreeItem2Icon/package.json +6 -0
  22. package/TreeItem2Provider/TreeItem2Provider.d.ts +7 -0
  23. package/TreeItem2Provider/TreeItem2Provider.js +24 -0
  24. package/TreeItem2Provider/TreeItem2Provider.types.d.ts +6 -0
  25. package/TreeItem2Provider/TreeItem2Provider.types.js +1 -0
  26. package/TreeItem2Provider/index.d.ts +2 -0
  27. package/TreeItem2Provider/index.js +1 -0
  28. package/TreeItem2Provider/package.json +6 -0
  29. package/TreeView/TreeView.js +22 -22
  30. package/hooks/index.d.ts +1 -0
  31. package/hooks/index.js +2 -1
  32. package/hooks/useTreeItem2Utils/index.d.ts +1 -0
  33. package/hooks/useTreeItem2Utils/index.js +1 -0
  34. package/hooks/useTreeItem2Utils/useTreeItem2Utils.d.ts +15 -0
  35. package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +61 -0
  36. package/index.d.ts +5 -1
  37. package/index.js +9 -2
  38. package/internals/TreeViewProvider/TreeViewContext.d.ts +3 -1
  39. package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +4 -2
  40. package/internals/hooks/useLazyRef.d.ts +1 -2
  41. package/internals/hooks/useLazyRef.js +1 -11
  42. package/internals/hooks/useOnMount.d.ts +1 -2
  43. package/internals/hooks/useOnMount.js +1 -7
  44. package/internals/hooks/useTimeout.d.ts +1 -11
  45. package/internals/hooks/useTimeout.js +1 -36
  46. package/internals/models/plugin.d.ts +19 -16
  47. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +25 -25
  48. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +11 -11
  49. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -12
  50. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +5 -5
  51. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +17 -17
  52. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +11 -9
  53. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +2 -2
  54. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
  55. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +11 -11
  56. package/internals/useTreeView/useTreeView.js +27 -25
  57. package/modern/RichTreeView/RichTreeView.js +22 -22
  58. package/modern/SimpleTreeView/SimpleTreeView.js +22 -22
  59. package/modern/TreeItem/TreeItem.js +57 -53
  60. package/modern/TreeItem/useTreeItemState.js +2 -2
  61. package/modern/TreeItem2/TreeItem2.js +300 -0
  62. package/modern/TreeItem2/TreeItem2.types.js +1 -0
  63. package/modern/TreeItem2/index.js +1 -0
  64. package/modern/TreeItem2Icon/TreeItem2Icon.js +67 -0
  65. package/modern/TreeItem2Icon/TreeItem2Icon.types.js +1 -0
  66. package/modern/TreeItem2Icon/index.js +1 -0
  67. package/modern/TreeItem2Provider/TreeItem2Provider.js +24 -0
  68. package/modern/TreeItem2Provider/TreeItem2Provider.types.js +1 -0
  69. package/modern/TreeItem2Provider/index.js +1 -0
  70. package/modern/TreeView/TreeView.js +22 -22
  71. package/modern/hooks/index.js +2 -1
  72. package/modern/hooks/useTreeItem2Utils/index.js +1 -0
  73. package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +61 -0
  74. package/modern/index.js +9 -2
  75. package/modern/internals/hooks/useLazyRef.js +1 -11
  76. package/modern/internals/hooks/useOnMount.js +1 -7
  77. package/modern/internals/hooks/useTimeout.js +1 -36
  78. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +24 -24
  79. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -12
  80. package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +16 -16
  81. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +11 -9
  82. package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +2 -2
  83. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
  84. package/modern/internals/useTreeView/useTreeView.js +27 -25
  85. package/modern/useTreeItem2/index.js +1 -0
  86. package/modern/useTreeItem2/useTreeItem2.js +135 -0
  87. package/modern/useTreeItem2/useTreeItem2.types.js +1 -0
  88. package/node/RichTreeView/RichTreeView.js +22 -22
  89. package/node/SimpleTreeView/SimpleTreeView.js +22 -22
  90. package/node/TreeItem/TreeItem.js +57 -53
  91. package/node/TreeItem/useTreeItemState.js +2 -2
  92. package/node/TreeItem2/TreeItem2.js +308 -0
  93. package/node/TreeItem2/TreeItem2.types.js +5 -0
  94. package/node/TreeItem2/index.js +42 -0
  95. package/node/TreeItem2Icon/TreeItem2Icon.js +75 -0
  96. package/node/TreeItem2Icon/TreeItem2Icon.types.js +5 -0
  97. package/node/TreeItem2Icon/index.js +12 -0
  98. package/node/TreeItem2Provider/TreeItem2Provider.js +30 -0
  99. package/node/TreeItem2Provider/TreeItem2Provider.types.js +5 -0
  100. package/node/TreeItem2Provider/index.js +12 -0
  101. package/node/TreeView/TreeView.js +22 -22
  102. package/node/hooks/index.js +8 -1
  103. package/node/hooks/useTreeItem2Utils/index.js +12 -0
  104. package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +68 -0
  105. package/node/index.js +61 -13
  106. package/node/internals/hooks/useLazyRef.js +7 -13
  107. package/node/internals/hooks/useOnMount.js +8 -10
  108. package/node/internals/hooks/useTimeout.js +7 -37
  109. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +24 -24
  110. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -12
  111. package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +16 -16
  112. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +11 -9
  113. package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +2 -2
  114. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
  115. package/node/internals/useTreeView/useTreeView.js +27 -25
  116. package/node/useTreeItem2/index.js +12 -0
  117. package/node/useTreeItem2/useTreeItem2.js +143 -0
  118. package/node/useTreeItem2/useTreeItem2.types.js +5 -0
  119. package/package.json +1 -1
  120. package/themeAugmentation/components.d.ts +5 -0
  121. package/themeAugmentation/overrides.d.ts +1 -0
  122. package/themeAugmentation/props.d.ts +2 -0
  123. package/useTreeItem2/index.d.ts +2 -0
  124. package/useTreeItem2/index.js +1 -0
  125. package/useTreeItem2/package.json +6 -0
  126. package/useTreeItem2/useTreeItem2.d.ts +2 -0
  127. package/useTreeItem2/useTreeItem2.js +138 -0
  128. package/useTreeItem2/useTreeItem2.types.d.ts +113 -0
  129. package/useTreeItem2/useTreeItem2.types.js +1 -0
@@ -90,7 +90,9 @@ const useTreeViewKeyboardNavigation = ({
90
90
  return null;
91
91
  };
92
92
  const canToggleNodeSelection = nodeId => !params.disableSelection && !instance.isNodeDisabled(nodeId);
93
- const canToggleNodeExpansion = nodeId => !instance.isNodeDisabled(nodeId) && instance.isNodeExpandable(nodeId);
93
+ const canToggleNodeExpansion = nodeId => {
94
+ return !instance.isNodeDisabled(nodeId) && instance.isNodeExpandable(nodeId);
95
+ };
94
96
 
95
97
  // ARIA specification: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/#keyboardinteraction
96
98
  const createHandleKeyDown = otherHandlers => event => {
@@ -99,7 +101,7 @@ const useTreeViewKeyboardNavigation = ({
99
101
  return;
100
102
  }
101
103
 
102
- // If the tree is empty there will be no focused node
104
+ // If the tree is empty, there will be no focused node
103
105
  if (event.altKey || event.currentTarget !== event.target || state.focusedNodeId == null) {
104
106
  return;
105
107
  }
@@ -149,7 +151,7 @@ const useTreeViewKeyboardNavigation = ({
149
151
  const nextNode = (0, _useTreeView.getNextNode)(instance, state.focusedNodeId);
150
152
  if (nextNode) {
151
153
  event.preventDefault();
152
- instance.focusNode(event, nextNode);
154
+ instance.focusItem(event, nextNode);
153
155
 
154
156
  // Multi select behavior when pressing Shift + ArrowDown
155
157
  // Toggles the selection state of the next node
@@ -169,7 +171,7 @@ const useTreeViewKeyboardNavigation = ({
169
171
  const previousNode = (0, _useTreeView.getPreviousNode)(instance, state.focusedNodeId);
170
172
  if (previousNode) {
171
173
  event.preventDefault();
172
- instance.focusNode(event, previousNode);
174
+ instance.focusItem(event, previousNode);
173
175
 
174
176
  // Multi select behavior when pressing Shift + ArrowUp
175
177
  // Toggles the selection state of the previous node
@@ -188,7 +190,7 @@ const useTreeViewKeyboardNavigation = ({
188
190
  case key === 'ArrowRight' && !isRTL || key === 'ArrowLeft' && isRTL:
189
191
  {
190
192
  if (instance.isNodeExpanded(state.focusedNodeId)) {
191
- instance.focusNode(event, (0, _useTreeView.getNextNode)(instance, state.focusedNodeId));
193
+ instance.focusItem(event, (0, _useTreeView.getNextNode)(instance, state.focusedNodeId));
192
194
  event.preventDefault();
193
195
  } else if (canToggleNodeExpansion(state.focusedNodeId)) {
194
196
  instance.toggleNodeExpansion(event, state.focusedNodeId);
@@ -207,7 +209,7 @@ const useTreeViewKeyboardNavigation = ({
207
209
  } else {
208
210
  const parent = instance.getNode(state.focusedNodeId).parentId;
209
211
  if (parent) {
210
- instance.focusNode(event, parent);
212
+ instance.focusItem(event, parent);
211
213
  event.preventDefault();
212
214
  }
213
215
  }
@@ -217,7 +219,7 @@ const useTreeViewKeyboardNavigation = ({
217
219
  // Focuses the first node in the tree
218
220
  case key === 'Home':
219
221
  {
220
- instance.focusNode(event, (0, _useTreeView.getFirstNode)(instance));
222
+ instance.focusItem(event, (0, _useTreeView.getFirstNode)(instance));
221
223
 
222
224
  // Multi select behavior when pressing Ctrl + Shift + Home
223
225
  // Selects the focused node and all nodes up to the first node.
@@ -231,7 +233,7 @@ const useTreeViewKeyboardNavigation = ({
231
233
  // Focuses the last node in the tree
232
234
  case key === 'End':
233
235
  {
234
- instance.focusNode(event, (0, _useTreeView.getLastNode)(instance));
236
+ instance.focusItem(event, (0, _useTreeView.getLastNode)(instance));
235
237
 
236
238
  // Multi select behavior when pressing Ctrl + Shirt + End
237
239
  // Selects the focused node and all the nodes down to the last node.
@@ -268,7 +270,7 @@ const useTreeViewKeyboardNavigation = ({
268
270
  {
269
271
  const matchingNode = getFirstMatchingNode(state.focusedNodeId, key);
270
272
  if (matchingNode != null) {
271
- instance.focusNode(event, matchingNode);
273
+ instance.focusItem(event, matchingNode);
272
274
  event.preventDefault();
273
275
  }
274
276
  break;
@@ -112,7 +112,7 @@ const useTreeViewNodes = ({
112
112
  });
113
113
  });
114
114
  }, [instance, setState, params.items, params.isItemDisabled, params.getItemId, params.getItemLabel]);
115
- const getNodesToRender = (0, _useEventCallback.default)(() => {
115
+ const getNodesToRender = () => {
116
116
  const getPropsFromNodeId = ({
117
117
  id,
118
118
  children
@@ -126,7 +126,7 @@ const useTreeViewNodes = ({
126
126
  };
127
127
  };
128
128
  return state.nodes.nodeTree.map(getPropsFromNodeId);
129
- });
129
+ };
130
130
  (0, _useTreeView.populateInstance)(instance, {
131
131
  getNode,
132
132
  getItem,
@@ -19,49 +19,49 @@ const useTreeViewSelection = ({
19
19
  const lastSelectedNode = React.useRef(null);
20
20
  const lastSelectionWasRange = React.useRef(false);
21
21
  const currentRangeSelection = React.useRef([]);
22
- const setSelectedNodes = (event, newSelectedNodes) => {
23
- if (params.onNodeSelectionToggle) {
22
+ const setSelectedItems = (event, newSelectedItems) => {
23
+ if (params.onItemSelectionToggle) {
24
24
  if (params.multiSelect) {
25
- const addedNodes = newSelectedNodes.filter(nodeId => !instance.isNodeSelected(nodeId));
26
- const removedNodes = models.selectedNodes.value.filter(nodeId => !newSelectedNodes.includes(nodeId));
27
- addedNodes.forEach(nodeId => {
28
- params.onNodeSelectionToggle(event, nodeId, true);
25
+ const addedItems = newSelectedItems.filter(itemId => !instance.isNodeSelected(itemId));
26
+ const removedItems = models.selectedItems.value.filter(itemId => !newSelectedItems.includes(itemId));
27
+ addedItems.forEach(itemId => {
28
+ params.onItemSelectionToggle(event, itemId, true);
29
29
  });
30
- removedNodes.forEach(nodeId => {
31
- params.onNodeSelectionToggle(event, nodeId, false);
30
+ removedItems.forEach(itemId => {
31
+ params.onItemSelectionToggle(event, itemId, false);
32
32
  });
33
- } else if (newSelectedNodes !== models.selectedNodes.value) {
34
- if (models.selectedNodes.value != null) {
35
- params.onNodeSelectionToggle(event, models.selectedNodes.value, false);
33
+ } else if (newSelectedItems !== models.selectedItems.value) {
34
+ if (models.selectedItems.value != null) {
35
+ params.onItemSelectionToggle(event, models.selectedItems.value, false);
36
36
  }
37
- if (newSelectedNodes != null) {
38
- params.onNodeSelectionToggle(event, newSelectedNodes, true);
37
+ if (newSelectedItems != null) {
38
+ params.onItemSelectionToggle(event, newSelectedItems, true);
39
39
  }
40
40
  }
41
41
  }
42
- if (params.onSelectedNodesChange) {
43
- params.onSelectedNodesChange(event, newSelectedNodes);
42
+ if (params.onSelectedItemsChange) {
43
+ params.onSelectedItemsChange(event, newSelectedItems);
44
44
  }
45
- models.selectedNodes.setControlledValue(newSelectedNodes);
45
+ models.selectedItems.setControlledValue(newSelectedItems);
46
46
  };
47
- const isNodeSelected = nodeId => Array.isArray(models.selectedNodes.value) ? models.selectedNodes.value.indexOf(nodeId) !== -1 : models.selectedNodes.value === nodeId;
47
+ const isNodeSelected = nodeId => Array.isArray(models.selectedItems.value) ? models.selectedItems.value.indexOf(nodeId) !== -1 : models.selectedItems.value === nodeId;
48
48
  const selectNode = (event, nodeId, multiple = false) => {
49
49
  if (params.disableSelection) {
50
50
  return;
51
51
  }
52
52
  if (multiple) {
53
- if (Array.isArray(models.selectedNodes.value)) {
53
+ if (Array.isArray(models.selectedItems.value)) {
54
54
  let newSelected;
55
- if (models.selectedNodes.value.indexOf(nodeId) !== -1) {
56
- newSelected = models.selectedNodes.value.filter(id => id !== nodeId);
55
+ if (models.selectedItems.value.indexOf(nodeId) !== -1) {
56
+ newSelected = models.selectedItems.value.filter(id => id !== nodeId);
57
57
  } else {
58
- newSelected = [nodeId].concat(models.selectedNodes.value);
58
+ newSelected = [nodeId].concat(models.selectedItems.value);
59
59
  }
60
- setSelectedNodes(event, newSelected);
60
+ setSelectedItems(event, newSelected);
61
61
  }
62
62
  } else {
63
63
  const newSelected = params.multiSelect ? [nodeId] : nodeId;
64
- setSelectedNodes(event, newSelected);
64
+ setSelectedItems(event, newSelected);
65
65
  }
66
66
  lastSelectedNode.current = nodeId;
67
67
  lastSelectionWasRange.current = false;
@@ -78,7 +78,7 @@ const useTreeViewSelection = ({
78
78
  return nodes;
79
79
  };
80
80
  const handleRangeArrowSelect = (event, nodes) => {
81
- let base = models.selectedNodes.value.slice();
81
+ let base = models.selectedItems.value.slice();
82
82
  const {
83
83
  start,
84
84
  next,
@@ -102,10 +102,10 @@ const useTreeViewSelection = ({
102
102
  base.push(next);
103
103
  currentRangeSelection.current.push(current, next);
104
104
  }
105
- setSelectedNodes(event, base);
105
+ setSelectedItems(event, base);
106
106
  };
107
107
  const handleRangeSelect = (event, nodes) => {
108
- let base = models.selectedNodes.value.slice();
108
+ let base = models.selectedItems.value.slice();
109
109
  const {
110
110
  start,
111
111
  end
@@ -119,7 +119,7 @@ const useTreeViewSelection = ({
119
119
  currentRangeSelection.current = range;
120
120
  let newSelected = base.concat(range);
121
121
  newSelected = newSelected.filter((id, i) => newSelected.indexOf(id) === i);
122
- setSelectedNodes(event, newSelected);
122
+ setSelectedItems(event, newSelected);
123
123
  };
124
124
  const selectRange = (event, nodes, stacked = false) => {
125
125
  if (params.disableSelection) {
@@ -184,21 +184,21 @@ const useTreeViewSelection = ({
184
184
  };
185
185
  exports.useTreeViewSelection = useTreeViewSelection;
186
186
  useTreeViewSelection.models = {
187
- selectedNodes: {
188
- getDefaultValue: params => params.defaultSelectedNodes
187
+ selectedItems: {
188
+ getDefaultValue: params => params.defaultSelectedItems
189
189
  }
190
190
  };
191
191
  const DEFAULT_SELECTED_NODES = [];
192
192
  useTreeViewSelection.getDefaultizedParams = params => (0, _extends2.default)({}, params, {
193
193
  disableSelection: params.disableSelection ?? false,
194
194
  multiSelect: params.multiSelect ?? false,
195
- defaultSelectedNodes: params.defaultSelectedNodes ?? (params.multiSelect ? DEFAULT_SELECTED_NODES : null)
195
+ defaultSelectedItems: params.defaultSelectedItems ?? (params.multiSelect ? DEFAULT_SELECTED_NODES : null)
196
196
  });
197
197
  useTreeViewSelection.params = {
198
198
  disableSelection: true,
199
199
  multiSelect: true,
200
- defaultSelectedNodes: true,
201
- selectedNodes: true,
202
- onSelectedNodesChange: true,
203
- onNodeSelectionToggle: true
200
+ defaultSelectedItems: true,
201
+ selectedItems: true,
202
+ onSelectedItemsChange: true,
203
+ onItemSelectionToggle: true
204
204
  };
@@ -48,6 +48,7 @@ const useTreeView = inParams => {
48
48
  });
49
49
  const rootPropsGetters = [];
50
50
  const contextValue = {
51
+ publicAPI,
51
52
  instance: instance
52
53
  };
53
54
  const runPlugin = plugin => {
@@ -70,43 +71,44 @@ const useTreeView = inParams => {
70
71
  }
71
72
  };
72
73
  plugins.forEach(runPlugin);
73
- contextValue.runItemPlugins = ({
74
- props,
75
- ref
76
- }) => {
77
- let finalProps = props;
78
- let finalRef = ref;
79
- const itemWrappers = [];
74
+ contextValue.runItemPlugins = itemPluginProps => {
75
+ let finalRootRef = null;
76
+ let finalContentRef = null;
80
77
  plugins.forEach(plugin => {
81
78
  if (!plugin.itemPlugin) {
82
79
  return;
83
80
  }
84
81
  const itemPluginResponse = plugin.itemPlugin({
85
- props: finalProps,
86
- ref: finalRef
82
+ props: itemPluginProps,
83
+ rootRef: finalRootRef,
84
+ contentRef: finalContentRef
87
85
  });
88
- if (itemPluginResponse?.props) {
89
- finalProps = itemPluginResponse.props;
90
- }
91
- if (itemPluginResponse?.ref) {
92
- finalRef = itemPluginResponse.ref;
86
+ if (itemPluginResponse?.rootRef) {
87
+ finalRootRef = itemPluginResponse.rootRef;
93
88
  }
94
- if (itemPluginResponse?.wrapItem) {
95
- itemWrappers.push(itemPluginResponse.wrapItem);
89
+ if (itemPluginResponse?.contentRef) {
90
+ finalContentRef = itemPluginResponse.contentRef;
96
91
  }
97
92
  });
98
93
  return {
99
- props: finalProps,
100
- ref: finalRef,
101
- wrapItem: children => {
102
- let finalChildren = children;
103
- itemWrappers.forEach(itemWrapper => {
104
- finalChildren = itemWrapper(finalChildren);
105
- });
106
- return finalChildren;
107
- }
94
+ contentRef: finalContentRef,
95
+ rootRef: finalRootRef
108
96
  };
109
97
  };
98
+ const itemWrappers = plugins.map(plugin => plugin.wrapItem).filter(wrapItem => !!wrapItem);
99
+ contextValue.wrapItem = ({
100
+ nodeId,
101
+ children
102
+ }) => {
103
+ let finalChildren = children;
104
+ itemWrappers.forEach(itemWrapper => {
105
+ finalChildren = itemWrapper({
106
+ nodeId,
107
+ children: finalChildren
108
+ });
109
+ });
110
+ return finalChildren;
111
+ };
110
112
  const getRootProps = (otherHandlers = {}) => {
111
113
  const rootProps = (0, _extends2.default)({
112
114
  role: 'tree',
@@ -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,143 @@
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
+ nodeId,
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
+ nodeId,
39
+ children
40
+ });
41
+ const idAttribute = instance.getTreeItemId(nodeId, 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
+
49
+ // DOM focus stays on the tree which manages focus with aria-activedescendant
50
+ if (event.target === event.currentTarget) {
51
+ instance.focusRoot();
52
+ }
53
+ const canBeFocused = !status.disabled || disabledItemsFocusable;
54
+ if (!status.focused && canBeFocused && event.currentTarget === event.target) {
55
+ instance.focusItem(event, nodeId);
56
+ }
57
+ };
58
+ const createContentHandleClick = otherHandlers => event => {
59
+ otherHandlers.onClick?.(event);
60
+ if (event.defaultMuiPrevented) {
61
+ return;
62
+ }
63
+ interactions.handleExpansion(event);
64
+ interactions.handleSelection(event);
65
+ };
66
+ const createContentHandleMouseDown = otherHandlers => event => {
67
+ otherHandlers.onMouseDown?.(event);
68
+ if (event.defaultMuiPrevented) {
69
+ return;
70
+ }
71
+
72
+ // Prevent text selection
73
+ if (event.shiftKey || event.ctrlKey || event.metaKey || status.disabled) {
74
+ event.preventDefault();
75
+ }
76
+ };
77
+ const getRootProps = (externalProps = {}) => {
78
+ const externalEventHandlers = (0, _extends2.default)({}, (0, _utils.extractEventHandlers)(parameters), (0, _utils.extractEventHandlers)(externalProps));
79
+ let ariaSelected;
80
+ if (multiSelect) {
81
+ ariaSelected = status.selected;
82
+ } else if (status.selected) {
83
+ /* single-selection trees unset aria-selected on un-selected items.
84
+ *
85
+ * If the tree does not support multiple selection, aria-selected
86
+ * is set to true for the selected node and it is not present on any other node in the tree.
87
+ * Source: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/
88
+ */
89
+ ariaSelected = true;
90
+ }
91
+ return (0, _extends2.default)({}, externalEventHandlers, {
92
+ ref: handleRootRef,
93
+ role: 'treeitem',
94
+ tabIndex: -1,
95
+ id: idAttribute,
96
+ 'aria-expanded': status.expandable ? status.expanded : undefined,
97
+ 'aria-selected': ariaSelected,
98
+ 'aria-disabled': status.disabled || undefined
99
+ }, externalProps, {
100
+ onFocus: createRootHandleFocus(externalEventHandlers)
101
+ });
102
+ };
103
+ const getContentProps = (externalProps = {}) => {
104
+ const externalEventHandlers = (0, _extends2.default)({}, (0, _utils.extractEventHandlers)(parameters), (0, _utils.extractEventHandlers)(externalProps));
105
+ return (0, _extends2.default)({}, externalEventHandlers, externalProps, {
106
+ ref: contentRef,
107
+ onClick: createContentHandleClick(externalEventHandlers),
108
+ onMouseDown: createContentHandleMouseDown(externalEventHandlers),
109
+ status
110
+ });
111
+ };
112
+ const getLabelProps = (externalProps = {}) => {
113
+ const externalEventHandlers = (0, _extends2.default)({}, (0, _utils.extractEventHandlers)(parameters), (0, _utils.extractEventHandlers)(externalProps));
114
+ return (0, _extends2.default)({}, externalEventHandlers, {
115
+ children: label
116
+ }, externalProps);
117
+ };
118
+ const getIconContainerProps = (externalProps = {}) => {
119
+ const externalEventHandlers = (0, _extends2.default)({}, (0, _utils.extractEventHandlers)(parameters), (0, _utils.extractEventHandlers)(externalProps));
120
+ return (0, _extends2.default)({}, externalEventHandlers, externalProps);
121
+ };
122
+ const getGroupTransitionProps = (externalProps = {}) => {
123
+ const externalEventHandlers = (0, _extends2.default)({}, (0, _utils.extractEventHandlers)(parameters), (0, _utils.extractEventHandlers)(externalProps));
124
+ return (0, _extends2.default)({}, externalEventHandlers, {
125
+ unmountOnExit: true,
126
+ component: 'ul',
127
+ role: 'group',
128
+ in: status.expanded,
129
+ children
130
+ }, externalProps);
131
+ };
132
+ return {
133
+ getRootProps,
134
+ getContentProps,
135
+ getGroupTransitionProps,
136
+ getIconContainerProps,
137
+ getLabelProps,
138
+ rootRef: handleRootRef,
139
+ status,
140
+ publicAPI
141
+ };
142
+ };
143
+ 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-beta.7",
4
4
  "description": "The community edition of the tree view components (MUI X).",
5
5
  "author": "MUI Team",
6
6
  "main": "./node/index.js",
@@ -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>;