@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
@@ -10,51 +10,51 @@ 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;
39
- const selectNode = (event, nodeId, multiple = false) => {
38
+ const isNodeSelected = itemId => Array.isArray(models.selectedItems.value) ? models.selectedItems.value.indexOf(itemId) !== -1 : models.selectedItems.value === itemId;
39
+ const selectNode = (event, itemId, 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(itemId) !== -1) {
47
+ newSelected = models.selectedItems.value.filter(id => id !== itemId);
48
48
  } else {
49
- newSelected = [nodeId].concat(models.selectedNodes.value);
49
+ newSelected = [itemId].concat(models.selectedItems.value);
50
50
  }
51
- setSelectedNodes(event, newSelected);
51
+ setSelectedItems(event, newSelected);
52
52
  }
53
53
  } else {
54
- const newSelected = params.multiSelect ? [nodeId] : nodeId;
55
- setSelectedNodes(event, newSelected);
54
+ const newSelected = params.multiSelect ? [itemId] : itemId;
55
+ setSelectedItems(event, newSelected);
56
56
  }
57
- lastSelectedNode.current = nodeId;
57
+ lastSelectedNode.current = itemId;
58
58
  lastSelectionWasRange.current = false;
59
59
  currentRangeSelection.current = [];
60
60
  };
@@ -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) {
@@ -135,21 +135,21 @@ export const useTreeViewSelection = ({
135
135
  }
136
136
  lastSelectionWasRange.current = true;
137
137
  };
138
- const rangeSelectToFirst = (event, nodeId) => {
138
+ const rangeSelectToFirst = (event, itemId) => {
139
139
  if (!lastSelectedNode.current) {
140
- lastSelectedNode.current = nodeId;
140
+ lastSelectedNode.current = itemId;
141
141
  }
142
- const start = lastSelectionWasRange.current ? lastSelectedNode.current : nodeId;
142
+ const start = lastSelectionWasRange.current ? lastSelectedNode.current : itemId;
143
143
  instance.selectRange(event, {
144
144
  start,
145
145
  end: getFirstNode(instance)
146
146
  });
147
147
  };
148
- const rangeSelectToLast = (event, nodeId) => {
148
+ const rangeSelectToLast = (event, itemId) => {
149
149
  if (!lastSelectedNode.current) {
150
- lastSelectedNode.current = nodeId;
150
+ lastSelectedNode.current = itemId;
151
151
  }
152
- const start = lastSelectionWasRange.current ? lastSelectedNode.current : nodeId;
152
+ const start = lastSelectionWasRange.current ? lastSelectedNode.current : itemId;
153
153
  instance.selectRange(event, {
154
154
  start,
155
155
  end: getLastNode(instance)
@@ -174,24 +174,21 @@ 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 = [];
182
- useTreeViewSelection.getDefaultizedParams = params => {
183
- var _params$disableSelect, _params$multiSelect, _params$defaultSelect;
184
- return _extends({}, params, {
185
- disableSelection: (_params$disableSelect = params.disableSelection) != null ? _params$disableSelect : false,
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
188
- });
189
- };
182
+ useTreeViewSelection.getDefaultizedParams = params => _extends({}, params, {
183
+ disableSelection: params.disableSelection ?? false,
184
+ multiSelect: params.multiSelect ?? false,
185
+ defaultSelectedItems: params.defaultSelectedItems ?? (params.multiSelect ? DEFAULT_SELECTED_NODES : null)
186
+ });
190
187
  useTreeViewSelection.params = {
191
188
  disableSelection: true,
192
189
  multiSelect: true,
193
- defaultSelectedNodes: true,
194
- selectedNodes: true,
195
- onSelectedNodesChange: true,
196
- onNodeSelectionToggle: true
190
+ defaultSelectedItems: true,
191
+ selectedItems: true,
192
+ onSelectedItemsChange: true,
193
+ onItemSelectionToggle: true
197
194
  };
@@ -3,11 +3,11 @@ import type { DefaultizedProps, TreeViewItemRange, TreeViewPluginSignature } fro
3
3
  import { UseTreeViewNodesSignature } from '../useTreeViewNodes';
4
4
  import { UseTreeViewExpansionSignature } from '../useTreeViewExpansion';
5
5
  export interface UseTreeViewSelectionInstance {
6
- isNodeSelected: (nodeId: string) => boolean;
7
- selectNode: (event: React.SyntheticEvent, nodeId: string, multiple?: boolean) => void;
6
+ isNodeSelected: (itemId: string) => boolean;
7
+ selectNode: (event: React.SyntheticEvent, itemId: string, multiple?: boolean) => void;
8
8
  selectRange: (event: React.SyntheticEvent, nodes: TreeViewItemRange, stacked?: boolean) => void;
9
- rangeSelectToFirst: (event: React.KeyboardEvent<HTMLUListElement>, nodeId: string) => void;
10
- rangeSelectToLast: (event: React.KeyboardEvent<HTMLUListElement>, nodeId: string) => void;
9
+ rangeSelectToFirst: (event: React.KeyboardEvent, itemId: string) => void;
10
+ rangeSelectToLast: (event: React.KeyboardEvent, itemId: string) => void;
11
11
  }
12
12
  type TreeViewSelectionValue<Multiple extends boolean | undefined> = Multiple extends true ? string[] : string | null;
13
13
  export interface UseTreeViewSelectionParameters<Multiple extends boolean | undefined> {
@@ -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,47 +61,47 @@ 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?.rootRef) {
77
+ finalRootRef = itemPluginResponse.rootRef;
83
78
  }
84
- if (itemPluginResponse != null && itemPluginResponse.wrapItem) {
85
- itemWrappers.push(itemPluginResponse.wrapItem);
79
+ if (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
+ itemId,
91
+ children
92
+ }) => {
93
+ let finalChildren = children;
94
+ itemWrappers.forEach(itemWrapper => {
95
+ finalChildren = itemWrapper({
96
+ itemId,
97
+ children: finalChildren
98
+ });
99
+ });
100
+ return finalChildren;
101
+ };
100
102
  const getRootProps = (otherHandlers = {}) => {
101
103
  const rootProps = _extends({
102
- role: 'tree',
103
- tabIndex: 0
104
+ role: 'tree'
104
105
  }, otherHandlers, {
105
106
  ref: handleRootRef
106
107
  });
@@ -1,8 +1,8 @@
1
1
  import { TreeViewAnyPluginSignature, TreeViewInstance, TreeViewUsedInstance, TreeViewUsedPublicAPI } from '../models';
2
2
  import type { UseTreeViewExpansionSignature } from '../plugins/useTreeViewExpansion';
3
3
  import type { UseTreeViewNodesSignature } from '../plugins/useTreeViewNodes';
4
- export declare const getPreviousNode: (instance: TreeViewInstance<[UseTreeViewNodesSignature, UseTreeViewExpansionSignature]>, nodeId: string) => string | null;
5
- export declare const getNextNode: (instance: TreeViewInstance<[UseTreeViewExpansionSignature, UseTreeViewNodesSignature]>, nodeId: string) => string | null;
4
+ export declare const getPreviousNode: (instance: TreeViewInstance<[UseTreeViewNodesSignature, UseTreeViewExpansionSignature]>, itemId: string) => string | null;
5
+ export declare const getNextNode: (instance: TreeViewInstance<[UseTreeViewExpansionSignature, UseTreeViewNodesSignature]>, itemId: string) => string | null;
6
6
  export declare const getLastNode: (instance: TreeViewInstance<[UseTreeViewExpansionSignature, UseTreeViewNodesSignature]>) => string;
7
7
  export declare const getFirstNode: (instance: TreeViewInstance<[UseTreeViewNodesSignature]>) => string;
8
8
  export declare const populateInstance: <T extends TreeViewAnyPluginSignature>(instance: TreeViewUsedInstance<T>, methods: T["instance"]) => void;
@@ -1,41 +1,41 @@
1
- export const getPreviousNode = (instance, nodeId) => {
2
- const node = instance.getNode(nodeId);
3
- const siblings = instance.getNavigableChildrenIds(node.parentId);
4
- const nodeIndex = siblings.indexOf(nodeId);
5
- if (nodeIndex === 0) {
6
- return node.parentId;
1
+ export const getPreviousNode = (instance, itemId) => {
2
+ const item = instance.getNode(itemId);
3
+ const siblings = instance.getNavigableChildrenIds(item.parentId);
4
+ const itemIndex = siblings.indexOf(itemId);
5
+ if (itemIndex === 0) {
6
+ return item.parentId;
7
7
  }
8
- let currentNode = siblings[nodeIndex - 1];
9
- while (instance.isNodeExpanded(currentNode) && instance.getNavigableChildrenIds(currentNode).length > 0) {
10
- currentNode = instance.getNavigableChildrenIds(currentNode).pop();
8
+ let currentItem = siblings[itemIndex - 1];
9
+ while (instance.isNodeExpanded(currentItem) && instance.getNavigableChildrenIds(currentItem).length > 0) {
10
+ currentItem = instance.getNavigableChildrenIds(currentItem).pop();
11
11
  }
12
- return currentNode;
12
+ return currentItem;
13
13
  };
14
- export const getNextNode = (instance, nodeId) => {
14
+ export const getNextNode = (instance, itemId) => {
15
15
  // If expanded get first child
16
- if (instance.isNodeExpanded(nodeId) && instance.getNavigableChildrenIds(nodeId).length > 0) {
17
- return instance.getNavigableChildrenIds(nodeId)[0];
16
+ if (instance.isNodeExpanded(itemId) && instance.getNavigableChildrenIds(itemId).length > 0) {
17
+ return instance.getNavigableChildrenIds(itemId)[0];
18
18
  }
19
- let node = instance.getNode(nodeId);
20
- while (node != null) {
19
+ let item = instance.getNode(itemId);
20
+ while (item != null) {
21
21
  // Try to get next sibling
22
- const siblings = instance.getNavigableChildrenIds(node.parentId);
23
- const nextSibling = siblings[siblings.indexOf(node.id) + 1];
22
+ const siblings = instance.getNavigableChildrenIds(item.parentId);
23
+ const nextSibling = siblings[siblings.indexOf(item.id) + 1];
24
24
  if (nextSibling) {
25
25
  return nextSibling;
26
26
  }
27
27
 
28
28
  // If the sibling does not exist, go up a level to the parent and try again.
29
- node = instance.getNode(node.parentId);
29
+ item = instance.getNode(item.parentId);
30
30
  }
31
31
  return null;
32
32
  };
33
33
  export const getLastNode = instance => {
34
- let lastNode = instance.getNavigableChildrenIds(null).pop();
35
- while (instance.isNodeExpanded(lastNode)) {
36
- lastNode = instance.getNavigableChildrenIds(lastNode).pop();
34
+ let lastItem = instance.getNavigableChildrenIds(null).pop();
35
+ while (instance.isNodeExpanded(lastItem)) {
36
+ lastItem = instance.getNavigableChildrenIds(lastItem).pop();
37
37
  }
38
- return lastNode;
38
+ return lastItem;
39
39
  };
40
40
  export const getFirstNode = instance => instance.getNavigableChildrenIds(null)[0];
41
41
  export const populateInstance = (instance, methods) => {
@@ -18,8 +18,8 @@ export const extractPluginParamsFromProps = _ref => {
18
18
  const pluginParams = {
19
19
  plugins,
20
20
  rootRef,
21
- slots: slots != null ? slots : {},
22
- slotProps: slotProps != null ? slotProps : {},
21
+ slots: slots ?? {},
22
+ slotProps: slotProps ?? {},
23
23
  apiRef
24
24
  };
25
25
  const otherProps = {};
@@ -1,3 +1,4 @@
1
+ // https://www.abeautifulsite.net/posts/finding-the-active-element-in-a-shadow-root/
1
2
  export const getActiveElement = (root = document) => {
2
3
  const activeEl = root.activeElement;
3
4
  if (!activeEl) {
@@ -36,7 +36,7 @@ function WrappedTreeItem({
36
36
  slotProps,
37
37
  label,
38
38
  id,
39
- nodeId,
39
+ itemId,
40
40
  children
41
41
  }) {
42
42
  const Item = slots?.item ?? TreeItem;
@@ -44,12 +44,12 @@ function WrappedTreeItem({
44
44
  elementType: Item,
45
45
  externalSlotProps: slotProps?.item,
46
46
  additionalProps: {
47
- nodeId,
47
+ itemId,
48
48
  id,
49
49
  label
50
50
  },
51
51
  ownerState: {
52
- nodeId,
52
+ itemId,
53
53
  label
54
54
  }
55
55
  });
@@ -57,7 +57,7 @@ function WrappedTreeItem({
57
57
  children: children
58
58
  }));
59
59
  }
60
- const childrenWarning = buildWarning(['MUI X: The `RichTreeView` component does not support JSX children.', 'If you want to add items, you need to use the `items` prop', 'Check the documentation for more details: https://next.mui.com/x/react-tree-view/rich-tree-view/items/']);
60
+ const childrenWarning = buildWarning(['MUI X: The `RichTreeView` component does not support JSX children.', 'If you want to add items, you need to use the `items` prop', 'Check the documentation for more details: https://mui.com/x/react-tree-view/rich-tree-view/items/']);
61
61
 
62
62
  /**
63
63
  *
@@ -107,7 +107,7 @@ const RichTreeView = /*#__PURE__*/React.forwardRef(function RichTreeView(inProps
107
107
  const nodesToRender = instance.getNodesToRender();
108
108
  const renderNode = ({
109
109
  label,
110
- nodeId,
110
+ itemId,
111
111
  id,
112
112
  children
113
113
  }) => {
@@ -116,9 +116,9 @@ const RichTreeView = /*#__PURE__*/React.forwardRef(function RichTreeView(inProps
116
116
  slotProps: slotProps,
117
117
  label: label,
118
118
  id: id,
119
- nodeId: nodeId,
119
+ itemId: itemId,
120
120
  children: children?.map(renderNode)
121
- }, nodeId);
121
+ }, itemId);
122
122
  };
123
123
  return /*#__PURE__*/_jsx(TreeViewProvider, {
124
124
  value: contextValue,
@@ -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 {}