@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
@@ -70,15 +70,15 @@ export const useTreeViewJSXNodes = ({
70
70
  };
71
71
  const useTreeViewJSXNodesItemPlugin = ({
72
72
  props,
73
- ref
73
+ rootRef,
74
+ contentRef
74
75
  }) => {
75
76
  const {
76
77
  children,
77
78
  disabled = false,
78
79
  label,
79
80
  nodeId,
80
- id,
81
- ContentProps: inContentProps
81
+ id
82
82
  } = props;
83
83
  const {
84
84
  instance
@@ -91,8 +91,9 @@ const useTreeViewJSXNodesItemPlugin = ({
91
91
  };
92
92
  const expandable = isExpandable(children);
93
93
  const [treeItemElement, setTreeItemElement] = React.useState(null);
94
- const contentRef = React.useRef(null);
95
- const handleRef = useForkRef(setTreeItemElement, ref);
94
+ const pluginContentRef = React.useRef(null);
95
+ const handleRootRef = useForkRef(setTreeItemElement, rootRef);
96
+ const handleContentRef = useForkRef(pluginContentRef, contentRef);
96
97
  const descendant = React.useMemo(() => ({
97
98
  element: treeItemElement,
98
99
  id: nodeId
@@ -118,23 +119,22 @@ const useTreeViewJSXNodesItemPlugin = ({
118
119
  }, [instance, parentId, index, nodeId, expandable, disabled, id]);
119
120
  React.useEffect(() => {
120
121
  if (label) {
121
- var _contentRef$current$t, _contentRef$current;
122
- return instance.mapFirstCharFromJSX(nodeId, ((_contentRef$current$t = (_contentRef$current = contentRef.current) == null ? void 0 : _contentRef$current.textContent) != null ? _contentRef$current$t : '').substring(0, 1).toLowerCase());
122
+ var _pluginContentRef$cur, _pluginContentRef$cur2;
123
+ return instance.mapFirstCharFromJSX(nodeId, ((_pluginContentRef$cur = (_pluginContentRef$cur2 = pluginContentRef.current) == null ? void 0 : _pluginContentRef$cur2.textContent) != null ? _pluginContentRef$cur : '').substring(0, 1).toLowerCase());
123
124
  }
124
125
  return undefined;
125
126
  }, [instance, nodeId, label]);
126
127
  return {
127
- props: _extends({}, props, {
128
- ContentProps: _extends({}, inContentProps, {
129
- ref: contentRef
130
- })
131
- }),
132
- ref: handleRef,
133
- wrapItem: item => /*#__PURE__*/_jsx(DescendantProvider, {
134
- id: nodeId,
135
- children: item
136
- })
128
+ contentRef: handleContentRef,
129
+ rootRef: handleRootRef
137
130
  };
138
131
  };
139
132
  useTreeViewJSXNodes.itemPlugin = useTreeViewJSXNodesItemPlugin;
133
+ useTreeViewJSXNodes.wrapItem = ({
134
+ children,
135
+ nodeId
136
+ }) => /*#__PURE__*/_jsx(DescendantProvider, {
137
+ id: nodeId,
138
+ children: children
139
+ });
140
140
  useTreeViewJSXNodes.params = {};
@@ -82,7 +82,9 @@ export const useTreeViewKeyboardNavigation = ({
82
82
  return null;
83
83
  };
84
84
  const canToggleNodeSelection = nodeId => !params.disableSelection && !instance.isNodeDisabled(nodeId);
85
- const canToggleNodeExpansion = nodeId => !instance.isNodeDisabled(nodeId) && instance.isNodeExpandable(nodeId);
85
+ const canToggleNodeExpansion = nodeId => {
86
+ return !instance.isNodeDisabled(nodeId) && instance.isNodeExpandable(nodeId);
87
+ };
86
88
 
87
89
  // ARIA specification: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/#keyboardinteraction
88
90
  const createHandleKeyDown = otherHandlers => event => {
@@ -92,7 +94,7 @@ export const useTreeViewKeyboardNavigation = ({
92
94
  return;
93
95
  }
94
96
 
95
- // If the tree is empty there will be no focused node
97
+ // If the tree is empty, there will be no focused node
96
98
  if (event.altKey || event.currentTarget !== event.target || state.focusedNodeId == null) {
97
99
  return;
98
100
  }
@@ -142,7 +144,7 @@ export const useTreeViewKeyboardNavigation = ({
142
144
  const nextNode = getNextNode(instance, state.focusedNodeId);
143
145
  if (nextNode) {
144
146
  event.preventDefault();
145
- instance.focusNode(event, nextNode);
147
+ instance.focusItem(event, nextNode);
146
148
 
147
149
  // Multi select behavior when pressing Shift + ArrowDown
148
150
  // Toggles the selection state of the next node
@@ -162,7 +164,7 @@ export const useTreeViewKeyboardNavigation = ({
162
164
  const previousNode = getPreviousNode(instance, state.focusedNodeId);
163
165
  if (previousNode) {
164
166
  event.preventDefault();
165
- instance.focusNode(event, previousNode);
167
+ instance.focusItem(event, previousNode);
166
168
 
167
169
  // Multi select behavior when pressing Shift + ArrowUp
168
170
  // Toggles the selection state of the previous node
@@ -181,7 +183,7 @@ export const useTreeViewKeyboardNavigation = ({
181
183
  case key === 'ArrowRight' && !isRTL || key === 'ArrowLeft' && isRTL:
182
184
  {
183
185
  if (instance.isNodeExpanded(state.focusedNodeId)) {
184
- instance.focusNode(event, getNextNode(instance, state.focusedNodeId));
186
+ instance.focusItem(event, getNextNode(instance, state.focusedNodeId));
185
187
  event.preventDefault();
186
188
  } else if (canToggleNodeExpansion(state.focusedNodeId)) {
187
189
  instance.toggleNodeExpansion(event, state.focusedNodeId);
@@ -200,7 +202,7 @@ export const useTreeViewKeyboardNavigation = ({
200
202
  } else {
201
203
  const parent = instance.getNode(state.focusedNodeId).parentId;
202
204
  if (parent) {
203
- instance.focusNode(event, parent);
205
+ instance.focusItem(event, parent);
204
206
  event.preventDefault();
205
207
  }
206
208
  }
@@ -210,7 +212,7 @@ export const useTreeViewKeyboardNavigation = ({
210
212
  // Focuses the first node in the tree
211
213
  case key === 'Home':
212
214
  {
213
- instance.focusNode(event, getFirstNode(instance));
215
+ instance.focusItem(event, getFirstNode(instance));
214
216
 
215
217
  // Multi select behavior when pressing Ctrl + Shift + Home
216
218
  // Selects the focused node and all nodes up to the first node.
@@ -224,7 +226,7 @@ export const useTreeViewKeyboardNavigation = ({
224
226
  // Focuses the last node in the tree
225
227
  case key === 'End':
226
228
  {
227
- instance.focusNode(event, getLastNode(instance));
229
+ instance.focusItem(event, getLastNode(instance));
228
230
 
229
231
  // Multi select behavior when pressing Ctrl + Shirt + End
230
232
  // Selects the focused node and all the nodes down to the last node.
@@ -261,7 +263,7 @@ export const useTreeViewKeyboardNavigation = ({
261
263
  {
262
264
  const matchingNode = getFirstMatchingNode(state.focusedNodeId, key);
263
265
  if (matchingNode != null) {
264
- instance.focusNode(event, matchingNode);
266
+ instance.focusItem(event, matchingNode);
265
267
  event.preventDefault();
266
268
  }
267
269
  break;
@@ -104,7 +104,7 @@ export const useTreeViewNodes = ({
104
104
  });
105
105
  });
106
106
  }, [instance, setState, params.items, params.isItemDisabled, params.getItemId, params.getItemLabel]);
107
- const getNodesToRender = useEventCallback(() => {
107
+ const getNodesToRender = () => {
108
108
  const getPropsFromNodeId = ({
109
109
  id,
110
110
  children
@@ -118,7 +118,7 @@ export const useTreeViewNodes = ({
118
118
  };
119
119
  };
120
120
  return state.nodes.nodeTree.map(getPropsFromNodeId);
121
- });
121
+ };
122
122
  populateInstance(instance, {
123
123
  getNode,
124
124
  getItem,
@@ -10,49 +10,49 @@ export const useTreeViewSelection = ({
10
10
  const lastSelectedNode = React.useRef(null);
11
11
  const lastSelectionWasRange = React.useRef(false);
12
12
  const currentRangeSelection = React.useRef([]);
13
- const setSelectedNodes = (event, newSelectedNodes) => {
14
- if (params.onNodeSelectionToggle) {
13
+ const setSelectedItems = (event, newSelectedItems) => {
14
+ if (params.onItemSelectionToggle) {
15
15
  if (params.multiSelect) {
16
- const addedNodes = newSelectedNodes.filter(nodeId => !instance.isNodeSelected(nodeId));
17
- const removedNodes = models.selectedNodes.value.filter(nodeId => !newSelectedNodes.includes(nodeId));
18
- addedNodes.forEach(nodeId => {
19
- params.onNodeSelectionToggle(event, nodeId, true);
16
+ const addedItems = newSelectedItems.filter(itemId => !instance.isNodeSelected(itemId));
17
+ const removedItems = models.selectedItems.value.filter(itemId => !newSelectedItems.includes(itemId));
18
+ addedItems.forEach(itemId => {
19
+ params.onItemSelectionToggle(event, itemId, true);
20
20
  });
21
- removedNodes.forEach(nodeId => {
22
- params.onNodeSelectionToggle(event, nodeId, false);
21
+ removedItems.forEach(itemId => {
22
+ params.onItemSelectionToggle(event, itemId, false);
23
23
  });
24
- } else if (newSelectedNodes !== models.selectedNodes.value) {
25
- if (models.selectedNodes.value != null) {
26
- params.onNodeSelectionToggle(event, models.selectedNodes.value, false);
24
+ } else if (newSelectedItems !== models.selectedItems.value) {
25
+ if (models.selectedItems.value != null) {
26
+ params.onItemSelectionToggle(event, models.selectedItems.value, false);
27
27
  }
28
- if (newSelectedNodes != null) {
29
- params.onNodeSelectionToggle(event, newSelectedNodes, true);
28
+ if (newSelectedItems != null) {
29
+ params.onItemSelectionToggle(event, newSelectedItems, true);
30
30
  }
31
31
  }
32
32
  }
33
- if (params.onSelectedNodesChange) {
34
- params.onSelectedNodesChange(event, newSelectedNodes);
33
+ if (params.onSelectedItemsChange) {
34
+ params.onSelectedItemsChange(event, newSelectedItems);
35
35
  }
36
- models.selectedNodes.setControlledValue(newSelectedNodes);
36
+ models.selectedItems.setControlledValue(newSelectedItems);
37
37
  };
38
- const isNodeSelected = nodeId => Array.isArray(models.selectedNodes.value) ? models.selectedNodes.value.indexOf(nodeId) !== -1 : models.selectedNodes.value === nodeId;
38
+ const isNodeSelected = nodeId => Array.isArray(models.selectedItems.value) ? models.selectedItems.value.indexOf(nodeId) !== -1 : models.selectedItems.value === nodeId;
39
39
  const selectNode = (event, nodeId, multiple = false) => {
40
40
  if (params.disableSelection) {
41
41
  return;
42
42
  }
43
43
  if (multiple) {
44
- if (Array.isArray(models.selectedNodes.value)) {
44
+ if (Array.isArray(models.selectedItems.value)) {
45
45
  let newSelected;
46
- if (models.selectedNodes.value.indexOf(nodeId) !== -1) {
47
- newSelected = models.selectedNodes.value.filter(id => id !== nodeId);
46
+ if (models.selectedItems.value.indexOf(nodeId) !== -1) {
47
+ newSelected = models.selectedItems.value.filter(id => id !== nodeId);
48
48
  } else {
49
- newSelected = [nodeId].concat(models.selectedNodes.value);
49
+ newSelected = [nodeId].concat(models.selectedItems.value);
50
50
  }
51
- setSelectedNodes(event, newSelected);
51
+ setSelectedItems(event, newSelected);
52
52
  }
53
53
  } else {
54
54
  const newSelected = params.multiSelect ? [nodeId] : nodeId;
55
- setSelectedNodes(event, newSelected);
55
+ setSelectedItems(event, newSelected);
56
56
  }
57
57
  lastSelectedNode.current = nodeId;
58
58
  lastSelectionWasRange.current = false;
@@ -69,7 +69,7 @@ export const useTreeViewSelection = ({
69
69
  return nodes;
70
70
  };
71
71
  const handleRangeArrowSelect = (event, nodes) => {
72
- let base = models.selectedNodes.value.slice();
72
+ let base = models.selectedItems.value.slice();
73
73
  const {
74
74
  start,
75
75
  next,
@@ -93,10 +93,10 @@ export const useTreeViewSelection = ({
93
93
  base.push(next);
94
94
  currentRangeSelection.current.push(current, next);
95
95
  }
96
- setSelectedNodes(event, base);
96
+ setSelectedItems(event, base);
97
97
  };
98
98
  const handleRangeSelect = (event, nodes) => {
99
- let base = models.selectedNodes.value.slice();
99
+ let base = models.selectedItems.value.slice();
100
100
  const {
101
101
  start,
102
102
  end
@@ -110,7 +110,7 @@ export const useTreeViewSelection = ({
110
110
  currentRangeSelection.current = range;
111
111
  let newSelected = base.concat(range);
112
112
  newSelected = newSelected.filter((id, i) => newSelected.indexOf(id) === i);
113
- setSelectedNodes(event, newSelected);
113
+ setSelectedItems(event, newSelected);
114
114
  };
115
115
  const selectRange = (event, nodes, stacked = false) => {
116
116
  if (params.disableSelection) {
@@ -174,8 +174,8 @@ export const useTreeViewSelection = ({
174
174
  };
175
175
  };
176
176
  useTreeViewSelection.models = {
177
- selectedNodes: {
178
- getDefaultValue: params => params.defaultSelectedNodes
177
+ selectedItems: {
178
+ getDefaultValue: params => params.defaultSelectedItems
179
179
  }
180
180
  };
181
181
  const DEFAULT_SELECTED_NODES = [];
@@ -184,14 +184,14 @@ useTreeViewSelection.getDefaultizedParams = params => {
184
184
  return _extends({}, params, {
185
185
  disableSelection: (_params$disableSelect = params.disableSelection) != null ? _params$disableSelect : false,
186
186
  multiSelect: (_params$multiSelect = params.multiSelect) != null ? _params$multiSelect : false,
187
- defaultSelectedNodes: (_params$defaultSelect = params.defaultSelectedNodes) != null ? _params$defaultSelect : params.multiSelect ? DEFAULT_SELECTED_NODES : null
187
+ defaultSelectedItems: (_params$defaultSelect = params.defaultSelectedItems) != null ? _params$defaultSelect : params.multiSelect ? DEFAULT_SELECTED_NODES : null
188
188
  });
189
189
  };
190
190
  useTreeViewSelection.params = {
191
191
  disableSelection: true,
192
192
  multiSelect: true,
193
- defaultSelectedNodes: true,
194
- selectedNodes: true,
195
- onSelectedNodesChange: true,
196
- onNodeSelectionToggle: true
193
+ defaultSelectedItems: true,
194
+ selectedItems: true,
195
+ onSelectedItemsChange: true,
196
+ onItemSelectionToggle: true
197
197
  };
@@ -17,16 +17,16 @@ export interface UseTreeViewSelectionParameters<Multiple extends boolean | undef
17
17
  */
18
18
  disableSelection?: boolean;
19
19
  /**
20
- * Selected node ids. (Uncontrolled)
20
+ * Selected item ids. (Uncontrolled)
21
21
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
22
22
  * @default []
23
23
  */
24
- defaultSelectedNodes?: TreeViewSelectionValue<Multiple>;
24
+ defaultSelectedItems?: TreeViewSelectionValue<Multiple>;
25
25
  /**
26
- * Selected node ids. (Controlled)
26
+ * Selected item ids. (Controlled)
27
27
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
28
28
  */
29
- selectedNodes?: TreeViewSelectionValue<Multiple>;
29
+ selectedItems?: TreeViewSelectionValue<Multiple>;
30
30
  /**
31
31
  * If true `ctrl` and `shift` will trigger multiselect.
32
32
  * @default false
@@ -35,19 +35,19 @@ export interface UseTreeViewSelectionParameters<Multiple extends boolean | undef
35
35
  /**
36
36
  * Callback fired when tree items are selected/deselected.
37
37
  * @param {React.SyntheticEvent} event The event source of the callback
38
- * @param {string[] | string} nodeIds The ids of the selected nodes.
38
+ * @param {string[] | string} itemIds The ids of the selected items.
39
39
  * When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
40
40
  */
41
- onSelectedNodesChange?: (event: React.SyntheticEvent, nodeIds: TreeViewSelectionValue<Multiple>) => void;
41
+ onSelectedItemsChange?: (event: React.SyntheticEvent, itemIds: TreeViewSelectionValue<Multiple>) => void;
42
42
  /**
43
43
  * Callback fired when a tree item is selected or deselected.
44
44
  * @param {React.SyntheticEvent} event The event source of the callback.
45
- * @param {array} nodeId The nodeId of the modified node.
46
- * @param {array} isSelected `true` if the node has just been selected, `false` if it has just been deselected.
45
+ * @param {array} itemId The itemId of the modified item.
46
+ * @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
47
47
  */
48
- onNodeSelectionToggle?: (event: React.SyntheticEvent, nodeId: string, isSelected: boolean) => void;
48
+ onItemSelectionToggle?: (event: React.SyntheticEvent, itemId: string, isSelected: boolean) => void;
49
49
  }
50
- export type UseTreeViewSelectionDefaultizedParameters<Multiple extends boolean> = DefaultizedProps<UseTreeViewSelectionParameters<Multiple>, 'disableSelection' | 'defaultSelectedNodes' | 'multiSelect'>;
50
+ export type UseTreeViewSelectionDefaultizedParameters<Multiple extends boolean> = DefaultizedProps<UseTreeViewSelectionParameters<Multiple>, 'disableSelection' | 'defaultSelectedItems' | 'multiSelect'>;
51
51
  interface UseTreeViewSelectionContextValue {
52
52
  selection: Pick<UseTreeViewSelectionDefaultizedParameters<boolean>, 'multiSelect'>;
53
53
  }
@@ -56,7 +56,7 @@ export type UseTreeViewSelectionSignature = TreeViewPluginSignature<{
56
56
  defaultizedParams: UseTreeViewSelectionDefaultizedParameters<any>;
57
57
  instance: UseTreeViewSelectionInstance;
58
58
  contextValue: UseTreeViewSelectionContextValue;
59
- modelNames: 'selectedNodes';
59
+ modelNames: 'selectedItems';
60
60
  dependantPlugins: [
61
61
  UseTreeViewNodesSignature,
62
62
  UseTreeViewExpansionSignature,
@@ -38,6 +38,7 @@ export const useTreeView = inParams => {
38
38
  });
39
39
  const rootPropsGetters = [];
40
40
  const contextValue = {
41
+ publicAPI,
41
42
  instance: instance
42
43
  };
43
44
  const runPlugin = plugin => {
@@ -60,43 +61,44 @@ export const useTreeView = inParams => {
60
61
  }
61
62
  };
62
63
  plugins.forEach(runPlugin);
63
- contextValue.runItemPlugins = ({
64
- props,
65
- ref
66
- }) => {
67
- let finalProps = props;
68
- let finalRef = ref;
69
- const itemWrappers = [];
64
+ contextValue.runItemPlugins = itemPluginProps => {
65
+ let finalRootRef = null;
66
+ let finalContentRef = null;
70
67
  plugins.forEach(plugin => {
71
68
  if (!plugin.itemPlugin) {
72
69
  return;
73
70
  }
74
71
  const itemPluginResponse = plugin.itemPlugin({
75
- props: finalProps,
76
- ref: finalRef
72
+ props: itemPluginProps,
73
+ rootRef: finalRootRef,
74
+ contentRef: finalContentRef
77
75
  });
78
- if (itemPluginResponse != null && itemPluginResponse.props) {
79
- finalProps = itemPluginResponse.props;
80
- }
81
- if (itemPluginResponse != null && itemPluginResponse.ref) {
82
- finalRef = itemPluginResponse.ref;
76
+ if (itemPluginResponse != null && itemPluginResponse.rootRef) {
77
+ finalRootRef = itemPluginResponse.rootRef;
83
78
  }
84
- if (itemPluginResponse != null && itemPluginResponse.wrapItem) {
85
- itemWrappers.push(itemPluginResponse.wrapItem);
79
+ if (itemPluginResponse != null && itemPluginResponse.contentRef) {
80
+ finalContentRef = itemPluginResponse.contentRef;
86
81
  }
87
82
  });
88
83
  return {
89
- props: finalProps,
90
- ref: finalRef,
91
- wrapItem: children => {
92
- let finalChildren = children;
93
- itemWrappers.forEach(itemWrapper => {
94
- finalChildren = itemWrapper(finalChildren);
95
- });
96
- return finalChildren;
97
- }
84
+ contentRef: finalContentRef,
85
+ rootRef: finalRootRef
98
86
  };
99
87
  };
88
+ const itemWrappers = plugins.map(plugin => plugin.wrapItem).filter(wrapItem => !!wrapItem);
89
+ contextValue.wrapItem = ({
90
+ nodeId,
91
+ children
92
+ }) => {
93
+ let finalChildren = children;
94
+ itemWrappers.forEach(itemWrapper => {
95
+ finalChildren = itemWrapper({
96
+ nodeId,
97
+ children: finalChildren
98
+ });
99
+ });
100
+ return finalChildren;
101
+ };
100
102
  const getRootProps = (otherHandlers = {}) => {
101
103
  const rootProps = _extends({
102
104
  role: 'tree',
@@ -137,7 +137,7 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
137
137
  */
138
138
  apiRef: PropTypes.shape({
139
139
  current: PropTypes.shape({
140
- focusNode: PropTypes.func.isRequired,
140
+ focusItem: PropTypes.func.isRequired,
141
141
  getItem: PropTypes.func.isRequired
142
142
  })
143
143
  }),
@@ -147,17 +147,17 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
147
147
  classes: PropTypes.object,
148
148
  className: PropTypes.string,
149
149
  /**
150
- * Expanded node ids.
150
+ * Expanded item ids.
151
151
  * Used when the item's expansion is not controlled.
152
152
  * @default []
153
153
  */
154
- defaultExpandedNodes: PropTypes.arrayOf(PropTypes.string),
154
+ defaultExpandedItems: PropTypes.arrayOf(PropTypes.string),
155
155
  /**
156
- * Selected node ids. (Uncontrolled)
156
+ * Selected item ids. (Uncontrolled)
157
157
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
158
158
  * @default []
159
159
  */
160
- defaultSelectedNodes: PropTypes.any,
160
+ defaultSelectedItems: PropTypes.any,
161
161
  /**
162
162
  * If `true`, will allow focus on disabled items.
163
163
  * @default false
@@ -169,10 +169,10 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
169
169
  */
170
170
  disableSelection: PropTypes.bool,
171
171
  /**
172
- * Expanded node ids.
172
+ * Expanded item ids.
173
173
  * Used when the item's expansion is controlled.
174
174
  */
175
- expandedNodes: PropTypes.arrayOf(PropTypes.string),
175
+ expandedItems: PropTypes.arrayOf(PropTypes.string),
176
176
  /**
177
177
  * Used to determine the string label for a given item.
178
178
  *
@@ -212,42 +212,42 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
212
212
  /**
213
213
  * Callback fired when tree items are expanded/collapsed.
214
214
  * @param {React.SyntheticEvent} event The event source of the callback.
215
- * @param {array} nodeIds The ids of the expanded nodes.
215
+ * @param {array} itemIds The ids of the expanded items.
216
216
  */
217
- onExpandedNodesChange: PropTypes.func,
217
+ onExpandedItemsChange: PropTypes.func,
218
218
  /**
219
219
  * Callback fired when a tree item is expanded or collapsed.
220
220
  * @param {React.SyntheticEvent} event The event source of the callback.
221
- * @param {array} nodeId The nodeId of the modified node.
222
- * @param {array} isExpanded `true` if the node has just been expanded, `false` if it has just been collapsed.
221
+ * @param {array} itemId The itemId of the modified item.
222
+ * @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
223
223
  */
224
- onNodeExpansionToggle: PropTypes.func,
224
+ onItemExpansionToggle: PropTypes.func,
225
225
  /**
226
226
  * Callback fired when tree items are focused.
227
227
  * @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
228
- * @param {string} nodeId The id of the node focused.
229
- * @param {string} value of the focused node.
228
+ * @param {string} itemId The id of the focused item.
229
+ * @param {string} value of the focused item.
230
230
  */
231
- onNodeFocus: PropTypes.func,
231
+ onItemFocus: PropTypes.func,
232
232
  /**
233
233
  * Callback fired when a tree item is selected or deselected.
234
234
  * @param {React.SyntheticEvent} event The event source of the callback.
235
- * @param {array} nodeId The nodeId of the modified node.
236
- * @param {array} isSelected `true` if the node has just been selected, `false` if it has just been deselected.
235
+ * @param {array} itemId The itemId of the modified item.
236
+ * @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
237
237
  */
238
- onNodeSelectionToggle: PropTypes.func,
238
+ onItemSelectionToggle: PropTypes.func,
239
239
  /**
240
240
  * Callback fired when tree items are selected/deselected.
241
241
  * @param {React.SyntheticEvent} event The event source of the callback
242
- * @param {string[] | string} nodeIds The ids of the selected nodes.
242
+ * @param {string[] | string} itemIds The ids of the selected items.
243
243
  * When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
244
244
  */
245
- onSelectedNodesChange: PropTypes.func,
245
+ onSelectedItemsChange: PropTypes.func,
246
246
  /**
247
- * Selected node ids. (Controlled)
247
+ * Selected item ids. (Controlled)
248
248
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
249
249
  */
250
- selectedNodes: PropTypes.any,
250
+ selectedItems: PropTypes.any,
251
251
  /**
252
252
  * The props used for each component slot.
253
253
  * @default {}
@@ -95,7 +95,7 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
95
95
  */
96
96
  apiRef: PropTypes.shape({
97
97
  current: PropTypes.shape({
98
- focusNode: PropTypes.func.isRequired,
98
+ focusItem: PropTypes.func.isRequired,
99
99
  getItem: PropTypes.func.isRequired
100
100
  })
101
101
  }),
@@ -109,17 +109,17 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
109
109
  classes: PropTypes.object,
110
110
  className: PropTypes.string,
111
111
  /**
112
- * Expanded node ids.
112
+ * Expanded item ids.
113
113
  * Used when the item's expansion is not controlled.
114
114
  * @default []
115
115
  */
116
- defaultExpandedNodes: PropTypes.arrayOf(PropTypes.string),
116
+ defaultExpandedItems: PropTypes.arrayOf(PropTypes.string),
117
117
  /**
118
- * Selected node ids. (Uncontrolled)
118
+ * Selected item ids. (Uncontrolled)
119
119
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
120
120
  * @default []
121
121
  */
122
- defaultSelectedNodes: PropTypes.any,
122
+ defaultSelectedItems: PropTypes.any,
123
123
  /**
124
124
  * If `true`, will allow focus on disabled items.
125
125
  * @default false
@@ -131,10 +131,10 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
131
131
  */
132
132
  disableSelection: PropTypes.bool,
133
133
  /**
134
- * Expanded node ids.
134
+ * Expanded item ids.
135
135
  * Used when the item's expansion is controlled.
136
136
  */
137
- expandedNodes: PropTypes.arrayOf(PropTypes.string),
137
+ expandedItems: PropTypes.arrayOf(PropTypes.string),
138
138
  /**
139
139
  * This prop is used to help implement the accessibility logic.
140
140
  * If you don't provide this prop. It falls back to a randomly generated id.
@@ -148,42 +148,42 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
148
148
  /**
149
149
  * Callback fired when tree items are expanded/collapsed.
150
150
  * @param {React.SyntheticEvent} event The event source of the callback.
151
- * @param {array} nodeIds The ids of the expanded nodes.
151
+ * @param {array} itemIds The ids of the expanded items.
152
152
  */
153
- onExpandedNodesChange: PropTypes.func,
153
+ onExpandedItemsChange: PropTypes.func,
154
154
  /**
155
155
  * Callback fired when a tree item is expanded or collapsed.
156
156
  * @param {React.SyntheticEvent} event The event source of the callback.
157
- * @param {array} nodeId The nodeId of the modified node.
158
- * @param {array} isExpanded `true` if the node has just been expanded, `false` if it has just been collapsed.
157
+ * @param {array} itemId The itemId of the modified item.
158
+ * @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
159
159
  */
160
- onNodeExpansionToggle: PropTypes.func,
160
+ onItemExpansionToggle: PropTypes.func,
161
161
  /**
162
162
  * Callback fired when tree items are focused.
163
163
  * @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
164
- * @param {string} nodeId The id of the node focused.
165
- * @param {string} value of the focused node.
164
+ * @param {string} itemId The id of the focused item.
165
+ * @param {string} value of the focused item.
166
166
  */
167
- onNodeFocus: PropTypes.func,
167
+ onItemFocus: PropTypes.func,
168
168
  /**
169
169
  * Callback fired when a tree item is selected or deselected.
170
170
  * @param {React.SyntheticEvent} event The event source of the callback.
171
- * @param {array} nodeId The nodeId of the modified node.
172
- * @param {array} isSelected `true` if the node has just been selected, `false` if it has just been deselected.
171
+ * @param {array} itemId The itemId of the modified item.
172
+ * @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
173
173
  */
174
- onNodeSelectionToggle: PropTypes.func,
174
+ onItemSelectionToggle: PropTypes.func,
175
175
  /**
176
176
  * Callback fired when tree items are selected/deselected.
177
177
  * @param {React.SyntheticEvent} event The event source of the callback
178
- * @param {string[] | string} nodeIds The ids of the selected nodes.
178
+ * @param {string[] | string} itemIds The ids of the selected items.
179
179
  * When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
180
180
  */
181
- onSelectedNodesChange: PropTypes.func,
181
+ onSelectedItemsChange: PropTypes.func,
182
182
  /**
183
- * Selected node ids. (Controlled)
183
+ * Selected item ids. (Controlled)
184
184
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
185
185
  */
186
- selectedNodes: PropTypes.any,
186
+ selectedItems: PropTypes.any,
187
187
  /**
188
188
  * The props used for each component slot.
189
189
  */