@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
@@ -69,7 +69,7 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
69
69
  */
70
70
  apiRef: PropTypes.shape({
71
71
  current: PropTypes.shape({
72
- focusNode: PropTypes.func.isRequired,
72
+ focusItem: PropTypes.func.isRequired,
73
73
  getItem: PropTypes.func.isRequired
74
74
  })
75
75
  }),
@@ -83,17 +83,17 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
83
83
  classes: PropTypes.object,
84
84
  className: PropTypes.string,
85
85
  /**
86
- * Expanded node ids.
86
+ * Expanded item ids.
87
87
  * Used when the item's expansion is not controlled.
88
88
  * @default []
89
89
  */
90
- defaultExpandedNodes: PropTypes.arrayOf(PropTypes.string),
90
+ defaultExpandedItems: PropTypes.arrayOf(PropTypes.string),
91
91
  /**
92
- * Selected node ids. (Uncontrolled)
92
+ * Selected item ids. (Uncontrolled)
93
93
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
94
94
  * @default []
95
95
  */
96
- defaultSelectedNodes: PropTypes.any,
96
+ defaultSelectedItems: PropTypes.any,
97
97
  /**
98
98
  * If `true`, will allow focus on disabled items.
99
99
  * @default false
@@ -105,10 +105,10 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
105
105
  */
106
106
  disableSelection: PropTypes.bool,
107
107
  /**
108
- * Expanded node ids.
108
+ * Expanded item ids.
109
109
  * Used when the item's expansion is controlled.
110
110
  */
111
- expandedNodes: PropTypes.arrayOf(PropTypes.string),
111
+ expandedItems: PropTypes.arrayOf(PropTypes.string),
112
112
  /**
113
113
  * This prop is used to help implement the accessibility logic.
114
114
  * If you don't provide this prop. It falls back to a randomly generated id.
@@ -122,42 +122,42 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
122
122
  /**
123
123
  * Callback fired when tree items are expanded/collapsed.
124
124
  * @param {React.SyntheticEvent} event The event source of the callback.
125
- * @param {array} nodeIds The ids of the expanded nodes.
125
+ * @param {array} itemIds The ids of the expanded items.
126
126
  */
127
- onExpandedNodesChange: PropTypes.func,
127
+ onExpandedItemsChange: PropTypes.func,
128
128
  /**
129
129
  * Callback fired when a tree item is expanded or collapsed.
130
130
  * @param {React.SyntheticEvent} event The event source of the callback.
131
- * @param {array} nodeId The nodeId of the modified node.
132
- * @param {array} isExpanded `true` if the node has just been expanded, `false` if it has just been collapsed.
131
+ * @param {array} itemId The itemId of the modified item.
132
+ * @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
133
133
  */
134
- onNodeExpansionToggle: PropTypes.func,
134
+ onItemExpansionToggle: PropTypes.func,
135
135
  /**
136
136
  * Callback fired when tree items are focused.
137
137
  * @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
138
- * @param {string} nodeId The id of the node focused.
139
- * @param {string} value of the focused node.
138
+ * @param {string} itemId The id of the focused item.
139
+ * @param {string} value of the focused item.
140
140
  */
141
- onNodeFocus: PropTypes.func,
141
+ onItemFocus: PropTypes.func,
142
142
  /**
143
143
  * Callback fired when a tree item is selected or deselected.
144
144
  * @param {React.SyntheticEvent} event The event source of the callback.
145
- * @param {array} nodeId The nodeId of the modified node.
146
- * @param {array} isSelected `true` if the node has just been selected, `false` if it has just been deselected.
145
+ * @param {array} itemId The itemId of the modified item.
146
+ * @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
147
147
  */
148
- onNodeSelectionToggle: PropTypes.func,
148
+ onItemSelectionToggle: PropTypes.func,
149
149
  /**
150
150
  * Callback fired when tree items are selected/deselected.
151
151
  * @param {React.SyntheticEvent} event The event source of the callback
152
- * @param {string[] | string} nodeIds The ids of the selected nodes.
152
+ * @param {string[] | string} itemIds The ids of the selected items.
153
153
  * When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
154
154
  */
155
- onSelectedNodesChange: PropTypes.func,
155
+ onSelectedItemsChange: PropTypes.func,
156
156
  /**
157
- * Selected node ids. (Controlled)
157
+ * Selected item ids. (Controlled)
158
158
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
159
159
  */
160
- selectedNodes: PropTypes.any,
160
+ selectedItems: PropTypes.any,
161
161
  /**
162
162
  * The props used for each component slot.
163
163
  */
@@ -1 +1,2 @@
1
- export { useTreeViewApiRef } from './useTreeViewApiRef';
1
+ export { useTreeViewApiRef } from './useTreeViewApiRef';
2
+ export { useTreeItem2Utils } from './useTreeItem2Utils';
@@ -0,0 +1 @@
1
+ export { useTreeItem2Utils } from './useTreeItem2Utils';
@@ -0,0 +1,61 @@
1
+ import { useTreeViewContext } from '../../internals/TreeViewProvider/useTreeViewContext';
2
+ export const useTreeItem2Utils = ({
3
+ nodeId,
4
+ children
5
+ }) => {
6
+ const {
7
+ instance,
8
+ selection: {
9
+ multiSelect
10
+ }
11
+ } = useTreeViewContext();
12
+ const status = {
13
+ expandable: Boolean(Array.isArray(children) ? children.length : children),
14
+ expanded: instance.isNodeExpanded(nodeId),
15
+ focused: instance.isNodeFocused(nodeId),
16
+ selected: instance.isNodeSelected(nodeId),
17
+ disabled: instance.isNodeDisabled(nodeId)
18
+ };
19
+ const handleExpansion = event => {
20
+ if (status.disabled) {
21
+ return;
22
+ }
23
+ if (!status.focused) {
24
+ instance.focusItem(event, nodeId);
25
+ }
26
+ const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
27
+
28
+ // If already expanded and trying to toggle selection don't close
29
+ if (status.expandable && !(multiple && instance.isNodeExpanded(nodeId))) {
30
+ instance.toggleNodeExpansion(event, nodeId);
31
+ }
32
+ };
33
+ const handleSelection = event => {
34
+ if (status.disabled) {
35
+ return;
36
+ }
37
+ if (!status.focused) {
38
+ instance.focusItem(event, nodeId);
39
+ }
40
+ const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
41
+ if (multiple) {
42
+ if (event.shiftKey) {
43
+ instance.selectRange(event, {
44
+ end: nodeId
45
+ });
46
+ } else {
47
+ instance.selectNode(event, nodeId, true);
48
+ }
49
+ } else {
50
+ instance.selectNode(event, nodeId);
51
+ }
52
+ };
53
+ const interactions = {
54
+ handleExpansion,
55
+ handleSelection
56
+ };
57
+ return {
58
+ interactions,
59
+ status
60
+ };
61
+ };
package/modern/index.js CHANGED
@@ -1,14 +1,21 @@
1
1
  /**
2
- * @mui/x-tree-view v7.0.0-beta.6
2
+ * @mui/x-tree-view v7.0.0-beta.7
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
- export * from './TreeItem';
8
+ // Tree View
9
9
  export * from './TreeView';
10
10
  export * from './SimpleTreeView';
11
11
  export * from './RichTreeView';
12
+
13
+ // Tree Item
14
+ export * from './TreeItem';
15
+ export * from './TreeItem2';
16
+ export * from './useTreeItem2';
17
+ export * from './TreeItem2Icon';
18
+ export * from './TreeItem2Provider';
12
19
  export { unstable_resetCleanupTracking } from './internals/hooks/useInstanceEventHandler';
13
20
  export * from './models';
14
21
  export * from './icons';
@@ -1,11 +1 @@
1
- import * as React from 'react';
2
- const UNINITIALIZED = {};
3
-
4
- // See https://github.com/facebook/react/issues/14490 for when to use this.
5
- export function useLazyRef(init, initArg) {
6
- const ref = React.useRef(UNINITIALIZED);
7
- if (ref.current === UNINITIALIZED) {
8
- ref.current = init(initArg);
9
- }
10
- return ref;
11
- }
1
+ export { default as useLazyRef } from '@mui/utils/useLazyRef';
@@ -1,7 +1 @@
1
- import * as React from 'react';
2
- const EMPTY = [];
3
- export function useOnMount(fn) {
4
- /* eslint-disable react-hooks/exhaustive-deps */
5
- React.useEffect(fn, EMPTY);
6
- /* eslint-enable react-hooks/exhaustive-deps */
7
- }
1
+ export { default as useOnMount } from '@mui/utils/useOnMount';
@@ -1,36 +1 @@
1
- 'use client';
2
-
3
- import { useLazyRef } from './useLazyRef';
4
- import { useOnMount } from './useOnMount';
5
- export class Timeout {
6
- constructor() {
7
- this.currentId = null;
8
- this.clear = () => {
9
- if (this.currentId !== null) {
10
- clearTimeout(this.currentId);
11
- this.currentId = null;
12
- }
13
- };
14
- this.disposeEffect = () => {
15
- return this.clear;
16
- };
17
- }
18
- static create() {
19
- return new Timeout();
20
- }
21
- /**
22
- * Executes `fn` after `delay`, clearing any previously scheduled call.
23
- */
24
- start(delay, fn) {
25
- this.clear();
26
- this.currentId = setTimeout(() => {
27
- this.currentId = null;
28
- fn();
29
- }, delay);
30
- }
31
- }
32
- export function useTimeout() {
33
- const timeout = useLazyRef(Timeout.create).current;
34
- useOnMount(timeout.disposeEffect);
35
- return timeout;
36
- }
1
+ export { default as useTimeout } from '@mui/utils/useTimeout';
@@ -7,42 +7,42 @@ export const useTreeViewExpansion = ({
7
7
  params,
8
8
  models
9
9
  }) => {
10
- const setExpandedNodes = (event, value) => {
11
- params.onExpandedNodesChange?.(event, value);
12
- models.expandedNodes.setControlledValue(value);
10
+ const setExpandedItems = (event, value) => {
11
+ params.onExpandedItemsChange?.(event, value);
12
+ models.expandedItems.setControlledValue(value);
13
13
  };
14
14
  const isNodeExpanded = React.useCallback(nodeId => {
15
- return Array.isArray(models.expandedNodes.value) ? models.expandedNodes.value.indexOf(nodeId) !== -1 : false;
16
- }, [models.expandedNodes.value]);
15
+ return Array.isArray(models.expandedItems.value) ? models.expandedItems.value.indexOf(nodeId) !== -1 : false;
16
+ }, [models.expandedItems.value]);
17
17
  const isNodeExpandable = React.useCallback(nodeId => !!instance.getNode(nodeId)?.expandable, [instance]);
18
- const toggleNodeExpansion = useEventCallback((event, nodeId) => {
19
- if (nodeId == null) {
18
+ const toggleNodeExpansion = useEventCallback((event, itemId) => {
19
+ if (itemId == null) {
20
20
  return;
21
21
  }
22
- const isExpandedBefore = models.expandedNodes.value.indexOf(nodeId) !== -1;
22
+ const isExpandedBefore = models.expandedItems.value.indexOf(itemId) !== -1;
23
23
  let newExpanded;
24
24
  if (isExpandedBefore) {
25
- newExpanded = models.expandedNodes.value.filter(id => id !== nodeId);
25
+ newExpanded = models.expandedItems.value.filter(id => id !== itemId);
26
26
  } else {
27
- newExpanded = [nodeId].concat(models.expandedNodes.value);
27
+ newExpanded = [itemId].concat(models.expandedItems.value);
28
28
  }
29
- if (params.onNodeExpansionToggle) {
30
- params.onNodeExpansionToggle(event, nodeId, !isExpandedBefore);
29
+ if (params.onItemExpansionToggle) {
30
+ params.onItemExpansionToggle(event, itemId, !isExpandedBefore);
31
31
  }
32
- setExpandedNodes(event, newExpanded);
32
+ setExpandedItems(event, newExpanded);
33
33
  });
34
34
  const expandAllSiblings = (event, nodeId) => {
35
35
  const node = instance.getNode(nodeId);
36
36
  const siblings = instance.getChildrenIds(node.parentId);
37
37
  const diff = siblings.filter(child => instance.isNodeExpandable(child) && !instance.isNodeExpanded(child));
38
- const newExpanded = models.expandedNodes.value.concat(diff);
38
+ const newExpanded = models.expandedItems.value.concat(diff);
39
39
  if (diff.length > 0) {
40
- if (params.onNodeExpansionToggle) {
40
+ if (params.onItemExpansionToggle) {
41
41
  diff.forEach(newlyExpandedNodeId => {
42
- params.onNodeExpansionToggle(event, newlyExpandedNodeId, true);
42
+ params.onItemExpansionToggle(event, newlyExpandedNodeId, true);
43
43
  });
44
44
  }
45
- setExpandedNodes(event, newExpanded);
45
+ setExpandedItems(event, newExpanded);
46
46
  }
47
47
  };
48
48
  populateInstance(instance, {
@@ -53,17 +53,17 @@ export const useTreeViewExpansion = ({
53
53
  });
54
54
  };
55
55
  useTreeViewExpansion.models = {
56
- expandedNodes: {
57
- getDefaultValue: params => params.defaultExpandedNodes
56
+ expandedItems: {
57
+ getDefaultValue: params => params.defaultExpandedItems
58
58
  }
59
59
  };
60
60
  const DEFAULT_EXPANDED_NODES = [];
61
61
  useTreeViewExpansion.getDefaultizedParams = params => _extends({}, params, {
62
- defaultExpandedNodes: params.defaultExpandedNodes ?? DEFAULT_EXPANDED_NODES
62
+ defaultExpandedItems: params.defaultExpandedItems ?? DEFAULT_EXPANDED_NODES
63
63
  });
64
64
  useTreeViewExpansion.params = {
65
- expandedNodes: true,
66
- defaultExpandedNodes: true,
67
- onExpandedNodesChange: true,
68
- onNodeExpansionToggle: true
65
+ expandedItems: true,
66
+ defaultExpandedItems: true,
67
+ onExpandedItemsChange: true,
68
+ onItemExpansionToggle: true
69
69
  };
@@ -28,31 +28,31 @@ export const useTreeViewFocus = ({
28
28
  const node = instance.getNode(nodeId);
29
29
  return node && (node.parentId == null || instance.isNodeExpanded(node.parentId));
30
30
  };
31
- const focusNode = useEventCallback((event, nodeId) => {
31
+ const focusItem = useEventCallback((event, nodeId) => {
32
32
  // if we receive a nodeId, and it is visible, the focus will be set to it
33
33
  if (nodeId && isNodeVisible(nodeId)) {
34
34
  if (!isTreeViewFocused()) {
35
35
  instance.focusRoot();
36
36
  }
37
37
  setFocusedNodeId(nodeId);
38
- if (params.onNodeFocus) {
39
- params.onNodeFocus(event, nodeId);
38
+ if (params.onItemFocus) {
39
+ params.onItemFocus(event, nodeId);
40
40
  }
41
41
  }
42
42
  });
43
43
  const focusDefaultNode = useEventCallback(event => {
44
44
  let nodeToFocusId;
45
- if (Array.isArray(models.selectedNodes.value)) {
46
- nodeToFocusId = models.selectedNodes.value.find(isNodeVisible);
47
- } else if (models.selectedNodes.value != null && isNodeVisible(models.selectedNodes.value)) {
48
- nodeToFocusId = models.selectedNodes.value;
45
+ if (Array.isArray(models.selectedItems.value)) {
46
+ nodeToFocusId = models.selectedItems.value.find(isNodeVisible);
47
+ } else if (models.selectedItems.value != null && isNodeVisible(models.selectedItems.value)) {
48
+ nodeToFocusId = models.selectedItems.value;
49
49
  }
50
50
  if (nodeToFocusId == null) {
51
51
  nodeToFocusId = instance.getNavigableChildrenIds(null)[0];
52
52
  }
53
53
  setFocusedNodeId(nodeToFocusId);
54
- if (params.onNodeFocus) {
55
- params.onNodeFocus(event, nodeToFocusId);
54
+ if (params.onItemFocus) {
55
+ params.onItemFocus(event, nodeToFocusId);
56
56
  }
57
57
  });
58
58
  const focusRoot = useEventCallback(() => {
@@ -62,12 +62,12 @@ export const useTreeViewFocus = ({
62
62
  });
63
63
  populateInstance(instance, {
64
64
  isNodeFocused,
65
- focusNode,
65
+ focusItem,
66
66
  focusRoot,
67
67
  focusDefaultNode
68
68
  });
69
69
  populatePublicAPI(publicAPI, {
70
- focusNode
70
+ focusItem
71
71
  });
72
72
  useInstanceEventHandler(instance, 'removeNode', ({
73
73
  id
@@ -104,5 +104,5 @@ useTreeViewFocus.getInitialState = () => ({
104
104
  focusedNodeId: null
105
105
  });
106
106
  useTreeViewFocus.params = {
107
- onNodeFocus: true
107
+ onItemFocus: true
108
108
  };
@@ -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,22 +119,21 @@ const useTreeViewJSXNodesItemPlugin = ({
118
119
  }, [instance, parentId, index, nodeId, expandable, disabled, id]);
119
120
  React.useEffect(() => {
120
121
  if (label) {
121
- return instance.mapFirstCharFromJSX(nodeId, (contentRef.current?.textContent ?? '').substring(0, 1).toLowerCase());
122
+ return instance.mapFirstCharFromJSX(nodeId, (pluginContentRef.current?.textContent ?? '').substring(0, 1).toLowerCase());
122
123
  }
123
124
  return undefined;
124
125
  }, [instance, nodeId, label]);
125
126
  return {
126
- props: _extends({}, props, {
127
- ContentProps: _extends({}, inContentProps, {
128
- ref: contentRef
129
- })
130
- }),
131
- ref: handleRef,
132
- wrapItem: item => /*#__PURE__*/_jsx(DescendantProvider, {
133
- id: nodeId,
134
- children: item
135
- })
127
+ contentRef: handleContentRef,
128
+ rootRef: handleRootRef
136
129
  };
137
130
  };
138
131
  useTreeViewJSXNodes.itemPlugin = useTreeViewJSXNodesItemPlugin;
132
+ useTreeViewJSXNodes.wrapItem = ({
133
+ children,
134
+ nodeId
135
+ }) => /*#__PURE__*/_jsx(DescendantProvider, {
136
+ id: nodeId,
137
+ children: children
138
+ });
139
139
  useTreeViewJSXNodes.params = {};
@@ -81,7 +81,9 @@ export const useTreeViewKeyboardNavigation = ({
81
81
  return null;
82
82
  };
83
83
  const canToggleNodeSelection = nodeId => !params.disableSelection && !instance.isNodeDisabled(nodeId);
84
- const canToggleNodeExpansion = nodeId => !instance.isNodeDisabled(nodeId) && instance.isNodeExpandable(nodeId);
84
+ const canToggleNodeExpansion = nodeId => {
85
+ return !instance.isNodeDisabled(nodeId) && instance.isNodeExpandable(nodeId);
86
+ };
85
87
 
86
88
  // ARIA specification: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/#keyboardinteraction
87
89
  const createHandleKeyDown = otherHandlers => event => {
@@ -90,7 +92,7 @@ export const useTreeViewKeyboardNavigation = ({
90
92
  return;
91
93
  }
92
94
 
93
- // If the tree is empty there will be no focused node
95
+ // If the tree is empty, there will be no focused node
94
96
  if (event.altKey || event.currentTarget !== event.target || state.focusedNodeId == null) {
95
97
  return;
96
98
  }
@@ -140,7 +142,7 @@ export const useTreeViewKeyboardNavigation = ({
140
142
  const nextNode = getNextNode(instance, state.focusedNodeId);
141
143
  if (nextNode) {
142
144
  event.preventDefault();
143
- instance.focusNode(event, nextNode);
145
+ instance.focusItem(event, nextNode);
144
146
 
145
147
  // Multi select behavior when pressing Shift + ArrowDown
146
148
  // Toggles the selection state of the next node
@@ -160,7 +162,7 @@ export const useTreeViewKeyboardNavigation = ({
160
162
  const previousNode = getPreviousNode(instance, state.focusedNodeId);
161
163
  if (previousNode) {
162
164
  event.preventDefault();
163
- instance.focusNode(event, previousNode);
165
+ instance.focusItem(event, previousNode);
164
166
 
165
167
  // Multi select behavior when pressing Shift + ArrowUp
166
168
  // Toggles the selection state of the previous node
@@ -179,7 +181,7 @@ export const useTreeViewKeyboardNavigation = ({
179
181
  case key === 'ArrowRight' && !isRTL || key === 'ArrowLeft' && isRTL:
180
182
  {
181
183
  if (instance.isNodeExpanded(state.focusedNodeId)) {
182
- instance.focusNode(event, getNextNode(instance, state.focusedNodeId));
184
+ instance.focusItem(event, getNextNode(instance, state.focusedNodeId));
183
185
  event.preventDefault();
184
186
  } else if (canToggleNodeExpansion(state.focusedNodeId)) {
185
187
  instance.toggleNodeExpansion(event, state.focusedNodeId);
@@ -198,7 +200,7 @@ export const useTreeViewKeyboardNavigation = ({
198
200
  } else {
199
201
  const parent = instance.getNode(state.focusedNodeId).parentId;
200
202
  if (parent) {
201
- instance.focusNode(event, parent);
203
+ instance.focusItem(event, parent);
202
204
  event.preventDefault();
203
205
  }
204
206
  }
@@ -208,7 +210,7 @@ export const useTreeViewKeyboardNavigation = ({
208
210
  // Focuses the first node in the tree
209
211
  case key === 'Home':
210
212
  {
211
- instance.focusNode(event, getFirstNode(instance));
213
+ instance.focusItem(event, getFirstNode(instance));
212
214
 
213
215
  // Multi select behavior when pressing Ctrl + Shift + Home
214
216
  // Selects the focused node and all nodes up to the first node.
@@ -222,7 +224,7 @@ export const useTreeViewKeyboardNavigation = ({
222
224
  // Focuses the last node in the tree
223
225
  case key === 'End':
224
226
  {
225
- instance.focusNode(event, getLastNode(instance));
227
+ instance.focusItem(event, getLastNode(instance));
226
228
 
227
229
  // Multi select behavior when pressing Ctrl + Shirt + End
228
230
  // Selects the focused node and all the nodes down to the last node.
@@ -259,7 +261,7 @@ export const useTreeViewKeyboardNavigation = ({
259
261
  {
260
262
  const matchingNode = getFirstMatchingNode(state.focusedNodeId, key);
261
263
  if (matchingNode != null) {
262
- instance.focusNode(event, matchingNode);
264
+ instance.focusItem(event, matchingNode);
263
265
  event.preventDefault();
264
266
  }
265
267
  break;
@@ -103,7 +103,7 @@ export const useTreeViewNodes = ({
103
103
  });
104
104
  });
105
105
  }, [instance, setState, params.items, params.isItemDisabled, params.getItemId, params.getItemLabel]);
106
- const getNodesToRender = useEventCallback(() => {
106
+ const getNodesToRender = () => {
107
107
  const getPropsFromNodeId = ({
108
108
  id,
109
109
  children
@@ -117,7 +117,7 @@ export const useTreeViewNodes = ({
117
117
  };
118
118
  };
119
119
  return state.nodes.nodeTree.map(getPropsFromNodeId);
120
- });
120
+ };
121
121
  populateInstance(instance, {
122
122
  getNode,
123
123
  getItem,