@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
@@ -16,42 +16,42 @@ const useTreeViewExpansion = ({
16
16
  params,
17
17
  models
18
18
  }) => {
19
- const setExpandedNodes = (event, value) => {
20
- params.onExpandedNodesChange?.(event, value);
21
- models.expandedNodes.setControlledValue(value);
19
+ const setExpandedItems = (event, value) => {
20
+ params.onExpandedItemsChange?.(event, value);
21
+ models.expandedItems.setControlledValue(value);
22
22
  };
23
- const isNodeExpanded = React.useCallback(nodeId => {
24
- return Array.isArray(models.expandedNodes.value) ? models.expandedNodes.value.indexOf(nodeId) !== -1 : false;
25
- }, [models.expandedNodes.value]);
26
- const isNodeExpandable = React.useCallback(nodeId => !!instance.getNode(nodeId)?.expandable, [instance]);
27
- const toggleNodeExpansion = (0, _useEventCallback.default)((event, nodeId) => {
28
- if (nodeId == null) {
23
+ const isNodeExpanded = React.useCallback(itemId => {
24
+ return Array.isArray(models.expandedItems.value) ? models.expandedItems.value.indexOf(itemId) !== -1 : false;
25
+ }, [models.expandedItems.value]);
26
+ const isNodeExpandable = React.useCallback(itemId => !!instance.getNode(itemId)?.expandable, [instance]);
27
+ const toggleNodeExpansion = (0, _useEventCallback.default)((event, itemId) => {
28
+ if (itemId == null) {
29
29
  return;
30
30
  }
31
- const isExpandedBefore = models.expandedNodes.value.indexOf(nodeId) !== -1;
31
+ const isExpandedBefore = models.expandedItems.value.indexOf(itemId) !== -1;
32
32
  let newExpanded;
33
33
  if (isExpandedBefore) {
34
- newExpanded = models.expandedNodes.value.filter(id => id !== nodeId);
34
+ newExpanded = models.expandedItems.value.filter(id => id !== itemId);
35
35
  } else {
36
- newExpanded = [nodeId].concat(models.expandedNodes.value);
36
+ newExpanded = [itemId].concat(models.expandedItems.value);
37
37
  }
38
- if (params.onNodeExpansionToggle) {
39
- params.onNodeExpansionToggle(event, nodeId, !isExpandedBefore);
38
+ if (params.onItemExpansionToggle) {
39
+ params.onItemExpansionToggle(event, itemId, !isExpandedBefore);
40
40
  }
41
- setExpandedNodes(event, newExpanded);
41
+ setExpandedItems(event, newExpanded);
42
42
  });
43
- const expandAllSiblings = (event, nodeId) => {
44
- const node = instance.getNode(nodeId);
43
+ const expandAllSiblings = (event, itemId) => {
44
+ const node = instance.getNode(itemId);
45
45
  const siblings = instance.getChildrenIds(node.parentId);
46
46
  const diff = siblings.filter(child => instance.isNodeExpandable(child) && !instance.isNodeExpanded(child));
47
- const newExpanded = models.expandedNodes.value.concat(diff);
47
+ const newExpanded = models.expandedItems.value.concat(diff);
48
48
  if (diff.length > 0) {
49
- if (params.onNodeExpansionToggle) {
50
- diff.forEach(newlyExpandedNodeId => {
51
- params.onNodeExpansionToggle(event, newlyExpandedNodeId, true);
49
+ if (params.onItemExpansionToggle) {
50
+ diff.forEach(newlyExpandedItemId => {
51
+ params.onItemExpansionToggle(event, newlyExpandedItemId, true);
52
52
  });
53
53
  }
54
- setExpandedNodes(event, newExpanded);
54
+ setExpandedItems(event, newExpanded);
55
55
  }
56
56
  };
57
57
  (0, _useTreeView.populateInstance)(instance, {
@@ -63,17 +63,17 @@ const useTreeViewExpansion = ({
63
63
  };
64
64
  exports.useTreeViewExpansion = useTreeViewExpansion;
65
65
  useTreeViewExpansion.models = {
66
- expandedNodes: {
67
- getDefaultValue: params => params.defaultExpandedNodes
66
+ expandedItems: {
67
+ getDefaultValue: params => params.defaultExpandedItems
68
68
  }
69
69
  };
70
70
  const DEFAULT_EXPANDED_NODES = [];
71
71
  useTreeViewExpansion.getDefaultizedParams = params => (0, _extends2.default)({}, params, {
72
- defaultExpandedNodes: params.defaultExpandedNodes ?? DEFAULT_EXPANDED_NODES
72
+ defaultExpandedItems: params.defaultExpandedItems ?? DEFAULT_EXPANDED_NODES
73
73
  });
74
74
  useTreeViewExpansion.params = {
75
- expandedNodes: true,
76
- defaultExpandedNodes: true,
77
- onExpandedNodesChange: true,
78
- onNodeExpansionToggle: true
75
+ expandedItems: true,
76
+ defaultExpandedItems: true,
77
+ onExpandedItemsChange: true,
78
+ onItemExpansionToggle: true
79
79
  };
@@ -14,6 +14,22 @@ var _useInstanceEventHandler = require("../../hooks/useInstanceEventHandler");
14
14
  var _utils = require("../../utils/utils");
15
15
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
16
16
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
17
+ const useTabbableItemId = (instance, selectedItems) => {
18
+ const isItemVisible = itemId => {
19
+ const node = instance.getNode(itemId);
20
+ return node && (node.parentId == null || instance.isNodeExpanded(node.parentId));
21
+ };
22
+ let tabbableItemId;
23
+ if (Array.isArray(selectedItems)) {
24
+ tabbableItemId = selectedItems.find(isItemVisible);
25
+ } else if (selectedItems != null && isItemVisible(selectedItems)) {
26
+ tabbableItemId = selectedItems;
27
+ }
28
+ if (tabbableItemId == null) {
29
+ tabbableItemId = instance.getNavigableChildrenIds(null)[0];
30
+ }
31
+ return tabbableItemId;
32
+ };
17
33
  const useTreeViewFocus = ({
18
34
  instance,
19
35
  publicAPI,
@@ -23,70 +39,78 @@ const useTreeViewFocus = ({
23
39
  models,
24
40
  rootRef
25
41
  }) => {
26
- const setFocusedNodeId = (0, _useEventCallback.default)(nodeId => {
27
- const cleanNodeId = typeof nodeId === 'function' ? nodeId(state.focusedNodeId) : nodeId;
28
- if (state.focusedNodeId !== cleanNodeId) {
42
+ const tabbableItemId = useTabbableItemId(instance, models.selectedItems.value);
43
+ const setFocusedItemId = (0, _useEventCallback.default)(itemId => {
44
+ const cleanItemId = typeof itemId === 'function' ? itemId(state.focusedNodeId) : itemId;
45
+ if (state.focusedNodeId !== cleanItemId) {
29
46
  setState(prevState => (0, _extends2.default)({}, prevState, {
30
- focusedNodeId: cleanNodeId
47
+ focusedNodeId: cleanItemId
31
48
  }));
32
49
  }
33
50
  });
34
- const isTreeViewFocused = React.useCallback(() => !!rootRef.current && rootRef.current === (0, _utils.getActiveElement)((0, _ownerDocument.default)(rootRef.current)), [rootRef]);
35
- const isNodeFocused = React.useCallback(nodeId => state.focusedNodeId === nodeId && isTreeViewFocused(), [state.focusedNodeId, isTreeViewFocused]);
36
- const isNodeVisible = nodeId => {
37
- const node = instance.getNode(nodeId);
51
+ const isTreeViewFocused = React.useCallback(() => !!rootRef.current && rootRef.current.contains((0, _utils.getActiveElement)((0, _ownerDocument.default)(rootRef.current))), [rootRef]);
52
+ const isNodeFocused = React.useCallback(itemId => state.focusedNodeId === itemId && isTreeViewFocused(), [state.focusedNodeId, isTreeViewFocused]);
53
+ const isNodeVisible = itemId => {
54
+ const node = instance.getNode(itemId);
38
55
  return node && (node.parentId == null || instance.isNodeExpanded(node.parentId));
39
56
  };
40
- const focusNode = (0, _useEventCallback.default)((event, nodeId) => {
41
- // if we receive a nodeId, and it is visible, the focus will be set to it
42
- if (nodeId && isNodeVisible(nodeId)) {
43
- if (!isTreeViewFocused()) {
44
- instance.focusRoot();
45
- }
46
- setFocusedNodeId(nodeId);
47
- if (params.onNodeFocus) {
48
- params.onNodeFocus(event, nodeId);
49
- }
57
+ const innerFocusItem = (event, itemId) => {
58
+ const node = instance.getNode(itemId);
59
+ const itemElement = document.getElementById(instance.getTreeItemId(itemId, node.idAttribute));
60
+ if (itemElement) {
61
+ itemElement.focus();
62
+ }
63
+ setFocusedItemId(itemId);
64
+ if (params.onItemFocus) {
65
+ params.onItemFocus(event, itemId);
66
+ }
67
+ };
68
+ const focusItem = (0, _useEventCallback.default)((event, nodeId) => {
69
+ // If we receive a nodeId, and it is visible, the focus will be set to it
70
+ if (isNodeVisible(nodeId)) {
71
+ innerFocusItem(event, nodeId);
50
72
  }
51
73
  });
52
74
  const focusDefaultNode = (0, _useEventCallback.default)(event => {
53
75
  let nodeToFocusId;
54
- if (Array.isArray(models.selectedNodes.value)) {
55
- nodeToFocusId = models.selectedNodes.value.find(isNodeVisible);
56
- } else if (models.selectedNodes.value != null && isNodeVisible(models.selectedNodes.value)) {
57
- nodeToFocusId = models.selectedNodes.value;
76
+ if (Array.isArray(models.selectedItems.value)) {
77
+ nodeToFocusId = models.selectedItems.value.find(isNodeVisible);
78
+ } else if (models.selectedItems.value != null && isNodeVisible(models.selectedItems.value)) {
79
+ nodeToFocusId = models.selectedItems.value;
58
80
  }
59
81
  if (nodeToFocusId == null) {
60
82
  nodeToFocusId = instance.getNavigableChildrenIds(null)[0];
61
83
  }
62
- setFocusedNodeId(nodeToFocusId);
63
- if (params.onNodeFocus) {
64
- params.onNodeFocus(event, nodeToFocusId);
65
- }
84
+ innerFocusItem(event, nodeToFocusId);
66
85
  });
67
- const focusRoot = (0, _useEventCallback.default)(() => {
68
- rootRef.current?.focus({
69
- preventScroll: true
70
- });
86
+ const removeFocusedItem = (0, _useEventCallback.default)(() => {
87
+ if (state.focusedNodeId == null) {
88
+ return;
89
+ }
90
+ const node = instance.getNode(state.focusedNodeId);
91
+ const itemElement = document.getElementById(instance.getTreeItemId(state.focusedNodeId, node.idAttribute));
92
+ if (itemElement) {
93
+ itemElement.blur();
94
+ }
95
+ setFocusedItemId(null);
71
96
  });
97
+ const canItemBeTabbed = itemId => itemId === tabbableItemId;
72
98
  (0, _useTreeView.populateInstance)(instance, {
73
99
  isNodeFocused,
74
- focusNode,
75
- focusRoot,
76
- focusDefaultNode
100
+ canItemBeTabbed,
101
+ focusItem,
102
+ focusDefaultNode,
103
+ removeFocusedItem
77
104
  });
78
105
  (0, _useTreeView.populatePublicAPI)(publicAPI, {
79
- focusNode
106
+ focusItem
80
107
  });
81
108
  (0, _useInstanceEventHandler.useInstanceEventHandler)(instance, 'removeNode', ({
82
109
  id
83
110
  }) => {
84
- setFocusedNodeId(oldFocusedNodeId => {
85
- if (oldFocusedNodeId === id && rootRef.current === (0, _ownerDocument.default)(rootRef.current).activeElement) {
86
- return instance.getChildrenIds(null)[0];
87
- }
88
- return oldFocusedNodeId;
89
- });
111
+ if (state.focusedNodeId === id) {
112
+ instance.focusDefaultNode(null);
113
+ }
90
114
  });
91
115
  const createHandleFocus = otherHandlers => event => {
92
116
  otherHandlers.onFocus?.(event);
@@ -95,16 +119,11 @@ const useTreeViewFocus = ({
95
119
  instance.focusDefaultNode(event);
96
120
  }
97
121
  };
98
- const createHandleBlur = otherHandlers => event => {
99
- otherHandlers.onBlur?.(event);
100
- setFocusedNodeId(null);
101
- };
102
122
  const focusedNode = instance.getNode(state.focusedNodeId);
103
123
  const activeDescendant = focusedNode ? instance.getTreeItemId(focusedNode.id, focusedNode.idAttribute) : null;
104
124
  return {
105
125
  getRootProps: otherHandlers => ({
106
126
  onFocus: createHandleFocus(otherHandlers),
107
- onBlur: createHandleBlur(otherHandlers),
108
127
  'aria-activedescendant': activeDescendant ?? undefined
109
128
  })
110
129
  };
@@ -114,5 +133,5 @@ useTreeViewFocus.getInitialState = () => ({
114
133
  focusedNodeId: null
115
134
  });
116
135
  useTreeViewFocus.params = {
117
- onNodeFocus: true
136
+ onItemFocus: true
118
137
  };
@@ -15,7 +15,7 @@ const useTreeViewId = ({
15
15
  params
16
16
  }) => {
17
17
  const treeId = (0, _useId.default)(params.id);
18
- const getTreeItemId = React.useCallback((nodeId, idAttribute) => idAttribute ?? `${treeId}-${nodeId}`, [treeId]);
18
+ const getTreeItemId = React.useCallback((itemId, idAttribute) => idAttribute ?? `${treeId}-${itemId}`, [treeId]);
19
19
  (0, _useTreeView.populateInstance)(instance, {
20
20
  getTreeItemId
21
21
  });
@@ -41,12 +41,12 @@ const useTreeViewJSXNodes = ({
41
41
  });
42
42
  });
43
43
  });
44
- const removeJSXNode = (0, _useEventCallback.default)(nodeId => {
44
+ const removeJSXNode = (0, _useEventCallback.default)(itemId => {
45
45
  setState(prevState => {
46
46
  const newNodeMap = (0, _extends2.default)({}, prevState.nodes.nodeMap);
47
47
  const newItemMap = (0, _extends2.default)({}, prevState.nodes.itemMap);
48
- delete newNodeMap[nodeId];
49
- delete newItemMap[nodeId];
48
+ delete newNodeMap[itemId];
49
+ delete newItemMap[itemId];
50
50
  return (0, _extends2.default)({}, prevState, {
51
51
  nodes: (0, _extends2.default)({}, prevState.nodes, {
52
52
  nodeMap: newNodeMap,
@@ -55,18 +55,18 @@ const useTreeViewJSXNodes = ({
55
55
  });
56
56
  });
57
57
  (0, _publishTreeViewEvent.publishTreeViewEvent)(instance, 'removeNode', {
58
- id: nodeId
58
+ id: itemId
59
59
  });
60
60
  });
61
- const mapFirstCharFromJSX = (0, _useEventCallback.default)((nodeId, firstChar) => {
61
+ const mapFirstCharFromJSX = (0, _useEventCallback.default)((itemId, firstChar) => {
62
62
  instance.updateFirstCharMap(firstCharMap => {
63
- firstCharMap[nodeId] = firstChar;
63
+ firstCharMap[itemId] = firstChar;
64
64
  return firstCharMap;
65
65
  });
66
66
  return () => {
67
67
  instance.updateFirstCharMap(firstCharMap => {
68
68
  const newMap = (0, _extends2.default)({}, firstCharMap);
69
- delete newMap[nodeId];
69
+ delete newMap[itemId];
70
70
  return newMap;
71
71
  });
72
72
  };
@@ -80,15 +80,15 @@ const useTreeViewJSXNodes = ({
80
80
  exports.useTreeViewJSXNodes = useTreeViewJSXNodes;
81
81
  const useTreeViewJSXNodesItemPlugin = ({
82
82
  props,
83
- ref
83
+ rootRef,
84
+ contentRef
84
85
  }) => {
85
86
  const {
86
87
  children,
87
88
  disabled = false,
88
89
  label,
89
- nodeId,
90
- id,
91
- ContentProps: inContentProps
90
+ itemId,
91
+ id
92
92
  } = props;
93
93
  const {
94
94
  instance
@@ -101,12 +101,13 @@ const useTreeViewJSXNodesItemPlugin = ({
101
101
  };
102
102
  const expandable = isExpandable(children);
103
103
  const [treeItemElement, setTreeItemElement] = React.useState(null);
104
- const contentRef = React.useRef(null);
105
- const handleRef = (0, _useForkRef.default)(setTreeItemElement, ref);
104
+ const pluginContentRef = React.useRef(null);
105
+ const handleRootRef = (0, _useForkRef.default)(setTreeItemElement, rootRef);
106
+ const handleContentRef = (0, _useForkRef.default)(pluginContentRef, contentRef);
106
107
  const descendant = React.useMemo(() => ({
107
108
  element: treeItemElement,
108
- id: nodeId
109
- }), [nodeId, treeItemElement]);
109
+ id: itemId
110
+ }), [itemId, treeItemElement]);
110
111
  const {
111
112
  index,
112
113
  parentId
@@ -115,35 +116,34 @@ const useTreeViewJSXNodesItemPlugin = ({
115
116
  // On the first render a node's index will be -1. We want to wait for the real index.
116
117
  if (index !== -1) {
117
118
  instance.insertJSXNode({
118
- id: nodeId,
119
+ id: itemId,
119
120
  idAttribute: id,
120
121
  index,
121
122
  parentId,
122
123
  expandable,
123
124
  disabled
124
125
  });
125
- return () => instance.removeJSXNode(nodeId);
126
+ return () => instance.removeJSXNode(itemId);
126
127
  }
127
128
  return undefined;
128
- }, [instance, parentId, index, nodeId, expandable, disabled, id]);
129
+ }, [instance, parentId, index, itemId, expandable, disabled, id]);
129
130
  React.useEffect(() => {
130
131
  if (label) {
131
- return instance.mapFirstCharFromJSX(nodeId, (contentRef.current?.textContent ?? '').substring(0, 1).toLowerCase());
132
+ return instance.mapFirstCharFromJSX(itemId, (pluginContentRef.current?.textContent ?? '').substring(0, 1).toLowerCase());
132
133
  }
133
134
  return undefined;
134
- }, [instance, nodeId, label]);
135
+ }, [instance, itemId, label]);
135
136
  return {
136
- props: (0, _extends2.default)({}, props, {
137
- ContentProps: (0, _extends2.default)({}, inContentProps, {
138
- ref: contentRef
139
- })
140
- }),
141
- ref: handleRef,
142
- wrapItem: item => /*#__PURE__*/(0, _jsxRuntime.jsx)(_DescendantProvider.DescendantProvider, {
143
- id: nodeId,
144
- children: item
145
- })
137
+ contentRef: handleContentRef,
138
+ rootRef: handleRootRef
146
139
  };
147
140
  };
148
141
  useTreeViewJSXNodes.itemPlugin = useTreeViewJSXNodesItemPlugin;
142
+ useTreeViewJSXNodes.wrapItem = ({
143
+ children,
144
+ itemId
145
+ }) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_DescendantProvider.DescendantProvider, {
146
+ id: itemId,
147
+ children: children
148
+ });
149
149
  useTreeViewJSXNodes.params = {};