@mui/x-tree-view 7.0.0-beta.7 → 7.1.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 (136) hide show
  1. package/CHANGELOG.md +266 -12
  2. package/README.md +1 -1
  3. package/RichTreeView/RichTreeView.js +15 -17
  4. package/RichTreeView/RichTreeView.types.d.ts +1 -1
  5. package/SimpleTreeView/SimpleTreeView.js +3 -4
  6. package/SimpleTreeView/SimpleTreeView.plugins.d.ts +1 -1
  7. package/SimpleTreeView/SimpleTreeView.plugins.js +2 -2
  8. package/TreeItem/TreeItem.js +43 -35
  9. package/TreeItem/TreeItem.types.d.ts +3 -3
  10. package/TreeItem/TreeItemContent.d.ts +7 -7
  11. package/TreeItem/TreeItemContent.js +10 -10
  12. package/TreeItem/treeItemClasses.d.ts +1 -1
  13. package/TreeItem/useTreeItemState.d.ts +1 -1
  14. package/TreeItem/useTreeItemState.js +13 -13
  15. package/TreeItem2/TreeItem2.js +16 -17
  16. package/TreeItem2Icon/TreeItem2Icon.js +5 -6
  17. package/TreeItem2Icon/TreeItem2Icon.types.d.ts +4 -4
  18. package/TreeItem2Provider/TreeItem2Provider.js +3 -3
  19. package/TreeItem2Provider/TreeItem2Provider.types.d.ts +1 -1
  20. package/TreeView/TreeView.d.ts +1 -1
  21. package/TreeView/TreeView.js +1 -1
  22. package/hooks/useTreeItem2Utils/useTreeItem2Utils.d.ts +2 -2
  23. package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +12 -12
  24. package/hooks/useTreeViewApiRef.d.ts +1 -1
  25. package/index.js +1 -1
  26. package/internals/TreeViewProvider/DescendantProvider.d.ts +1 -1
  27. package/internals/TreeViewProvider/DescendantProvider.js +1 -1
  28. package/internals/hooks/useInstanceEventHandler.js +5 -10
  29. package/internals/index.d.ts +2 -2
  30. package/internals/models/plugin.d.ts +1 -1
  31. package/internals/plugins/defaultPlugins.d.ts +3 -3
  32. package/internals/plugins/defaultPlugins.js +2 -2
  33. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +17 -24
  34. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +6 -6
  35. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +76 -58
  36. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +9 -8
  37. package/internals/plugins/useTreeViewIcons/useTreeViewIcons.types.d.ts +6 -6
  38. package/internals/plugins/useTreeViewId/useTreeViewId.js +1 -1
  39. package/internals/plugins/useTreeViewId/useTreeViewId.types.d.ts +2 -2
  40. package/internals/plugins/useTreeViewItems/index.d.ts +2 -0
  41. package/internals/plugins/useTreeViewItems/index.js +1 -0
  42. package/internals/plugins/useTreeViewItems/useTreeViewItems.d.ts +3 -0
  43. package/{modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js → internals/plugins/useTreeViewItems/useTreeViewItems.js} +42 -33
  44. package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +99 -0
  45. package/internals/plugins/useTreeViewJSXItems/index.d.ts +2 -0
  46. package/internals/plugins/useTreeViewJSXItems/index.js +1 -0
  47. package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.d.ts +3 -0
  48. package/{modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js → internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js} +41 -40
  49. package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.types.d.ts +18 -0
  50. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +85 -96
  51. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +6 -3
  52. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +44 -47
  53. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +8 -8
  54. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +7 -7
  55. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +5 -5
  56. package/internals/useTreeView/useTreeView.js +5 -6
  57. package/internals/useTreeView/useTreeView.utils.d.ts +5 -5
  58. package/internals/useTreeView/useTreeView.utils.js +18 -18
  59. package/internals/utils/extractPluginParamsFromProps.js +2 -2
  60. package/internals/utils/utils.js +1 -0
  61. package/modern/RichTreeView/RichTreeView.js +11 -11
  62. package/modern/SimpleTreeView/SimpleTreeView.js +1 -1
  63. package/modern/SimpleTreeView/SimpleTreeView.plugins.js +2 -2
  64. package/modern/TreeItem/TreeItem.js +31 -22
  65. package/modern/TreeItem/TreeItemContent.js +10 -10
  66. package/modern/TreeItem/useTreeItemState.js +13 -13
  67. package/modern/TreeItem2/TreeItem2.js +11 -11
  68. package/modern/TreeItem2Provider/TreeItem2Provider.js +3 -3
  69. package/modern/TreeView/TreeView.js +1 -1
  70. package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +12 -12
  71. package/modern/index.js +1 -1
  72. package/modern/internals/TreeViewProvider/DescendantProvider.js +1 -1
  73. package/modern/internals/plugins/defaultPlugins.js +2 -2
  74. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +14 -14
  75. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +74 -53
  76. package/modern/internals/plugins/useTreeViewId/useTreeViewId.js +1 -1
  77. package/modern/internals/plugins/useTreeViewItems/index.js +1 -0
  78. package/{internals/plugins/useTreeViewNodes/useTreeViewNodes.js → modern/internals/plugins/useTreeViewItems/useTreeViewItems.js} +46 -41
  79. package/modern/internals/plugins/useTreeViewJSXItems/index.js +1 -0
  80. package/{internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js → modern/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js} +41 -41
  81. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +85 -94
  82. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +40 -40
  83. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +5 -5
  84. package/modern/internals/useTreeView/useTreeView.js +3 -4
  85. package/modern/internals/useTreeView/useTreeView.utils.js +18 -18
  86. package/modern/internals/utils/utils.js +1 -0
  87. package/modern/useTreeItem2/useTreeItem2.js +23 -12
  88. package/node/RichTreeView/RichTreeView.js +11 -11
  89. package/node/SimpleTreeView/SimpleTreeView.js +1 -1
  90. package/node/SimpleTreeView/SimpleTreeView.plugins.js +2 -2
  91. package/node/TreeItem/TreeItem.js +31 -22
  92. package/node/TreeItem/TreeItemContent.js +10 -10
  93. package/node/TreeItem/useTreeItemState.js +13 -13
  94. package/node/TreeItem2/TreeItem2.js +11 -11
  95. package/node/TreeItem2Provider/TreeItem2Provider.js +3 -3
  96. package/node/TreeView/TreeView.js +1 -1
  97. package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +12 -12
  98. package/node/index.js +1 -1
  99. package/node/internals/TreeViewProvider/DescendantProvider.js +1 -1
  100. package/node/internals/plugins/defaultPlugins.js +2 -2
  101. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +14 -14
  102. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +74 -53
  103. package/node/internals/plugins/useTreeViewId/useTreeViewId.js +1 -1
  104. package/node/internals/plugins/useTreeViewItems/index.js +12 -0
  105. package/node/internals/plugins/{useTreeViewNodes/useTreeViewNodes.js → useTreeViewItems/useTreeViewItems.js} +44 -35
  106. package/node/internals/plugins/useTreeViewJSXItems/index.js +12 -0
  107. package/node/internals/plugins/{useTreeViewJSXNodes/useTreeViewJSXNodes.js → useTreeViewJSXItems/useTreeViewJSXItems.js} +43 -42
  108. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +84 -93
  109. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +39 -39
  110. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +5 -5
  111. package/node/internals/useTreeView/useTreeView.js +3 -4
  112. package/node/internals/useTreeView/useTreeView.utils.js +23 -23
  113. package/node/internals/utils/utils.js +1 -0
  114. package/node/useTreeItem2/useTreeItem2.js +23 -12
  115. package/package.json +5 -5
  116. package/useTreeItem2/useTreeItem2.d.ts +1 -1
  117. package/useTreeItem2/useTreeItem2.js +26 -18
  118. package/useTreeItem2/useTreeItem2.types.d.ts +9 -7
  119. package/internals/plugins/useTreeViewJSXNodes/index.d.ts +0 -2
  120. package/internals/plugins/useTreeViewJSXNodes/index.js +0 -1
  121. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.d.ts +0 -3
  122. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.d.ts +0 -18
  123. package/internals/plugins/useTreeViewNodes/index.d.ts +0 -2
  124. package/internals/plugins/useTreeViewNodes/index.js +0 -1
  125. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.d.ts +0 -3
  126. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +0 -88
  127. package/modern/internals/plugins/useTreeViewJSXNodes/index.js +0 -1
  128. package/modern/internals/plugins/useTreeViewNodes/index.js +0 -1
  129. package/node/internals/plugins/useTreeViewJSXNodes/index.js +0 -12
  130. package/node/internals/plugins/useTreeViewNodes/index.js +0 -12
  131. /package/internals/plugins/{useTreeViewJSXNodes/useTreeViewJSXNodes.types.js → useTreeViewItems/useTreeViewItems.types.js} +0 -0
  132. /package/internals/plugins/{useTreeViewNodes/useTreeViewNodes.types.js → useTreeViewJSXItems/useTreeViewJSXItems.types.js} +0 -0
  133. /package/modern/internals/plugins/{useTreeViewJSXNodes/useTreeViewJSXNodes.types.js → useTreeViewItems/useTreeViewItems.types.js} +0 -0
  134. /package/modern/internals/plugins/{useTreeViewNodes/useTreeViewNodes.types.js → useTreeViewJSXItems/useTreeViewJSXItems.types.js} +0 -0
  135. /package/node/internals/plugins/{useTreeViewJSXNodes/useTreeViewJSXNodes.types.js → useTreeViewItems/useTreeViewItems.types.js} +0 -0
  136. /package/node/internals/plugins/{useTreeViewNodes/useTreeViewNodes.types.js → useTreeViewJSXItems/useTreeViewJSXItems.types.js} +0 -0
@@ -73,10 +73,10 @@ export const useTreeView = inParams => {
73
73
  rootRef: finalRootRef,
74
74
  contentRef: finalContentRef
75
75
  });
76
- if (itemPluginResponse != null && itemPluginResponse.rootRef) {
76
+ if (itemPluginResponse?.rootRef) {
77
77
  finalRootRef = itemPluginResponse.rootRef;
78
78
  }
79
- if (itemPluginResponse != null && itemPluginResponse.contentRef) {
79
+ if (itemPluginResponse?.contentRef) {
80
80
  finalContentRef = itemPluginResponse.contentRef;
81
81
  }
82
82
  });
@@ -87,13 +87,13 @@ export const useTreeView = inParams => {
87
87
  };
88
88
  const itemWrappers = plugins.map(plugin => plugin.wrapItem).filter(wrapItem => !!wrapItem);
89
89
  contextValue.wrapItem = ({
90
- nodeId,
90
+ itemId,
91
91
  children
92
92
  }) => {
93
93
  let finalChildren = children;
94
94
  itemWrappers.forEach(itemWrapper => {
95
95
  finalChildren = itemWrapper({
96
- nodeId,
96
+ itemId,
97
97
  children: finalChildren
98
98
  });
99
99
  });
@@ -101,8 +101,7 @@ export const useTreeView = inParams => {
101
101
  };
102
102
  const getRootProps = (otherHandlers = {}) => {
103
103
  const rootProps = _extends({
104
- role: 'tree',
105
- tabIndex: 0
104
+ role: 'tree'
106
105
  }, otherHandlers, {
107
106
  ref: handleRootRef
108
107
  });
@@ -1,9 +1,9 @@
1
1
  import { TreeViewAnyPluginSignature, TreeViewInstance, TreeViewUsedInstance, TreeViewUsedPublicAPI } from '../models';
2
2
  import type { UseTreeViewExpansionSignature } from '../plugins/useTreeViewExpansion';
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;
6
- export declare const getLastNode: (instance: TreeViewInstance<[UseTreeViewExpansionSignature, UseTreeViewNodesSignature]>) => string;
7
- export declare const getFirstNode: (instance: TreeViewInstance<[UseTreeViewNodesSignature]>) => string;
3
+ import type { UseTreeViewItemsSignature } from '../plugins/useTreeViewItems';
4
+ export declare const getPreviousItem: (instance: TreeViewInstance<[UseTreeViewItemsSignature, UseTreeViewExpansionSignature]>, itemId: string) => string | null;
5
+ export declare const getNextItem: (instance: TreeViewInstance<[UseTreeViewExpansionSignature, UseTreeViewItemsSignature]>, itemId: string) => string | null;
6
+ export declare const getLastItem: (instance: TreeViewInstance<[UseTreeViewExpansionSignature, UseTreeViewItemsSignature]>) => string;
7
+ export declare const getFirstItem: (instance: TreeViewInstance<[UseTreeViewItemsSignature]>) => string;
8
8
  export declare const populateInstance: <T extends TreeViewAnyPluginSignature>(instance: TreeViewUsedInstance<T>, methods: T["instance"]) => void;
9
9
  export declare const populatePublicAPI: <T extends TreeViewAnyPluginSignature>(publicAPI: TreeViewUsedPublicAPI<T>, methods: T["publicAPI"]) => void;
@@ -1,22 +1,22 @@
1
- export const getPreviousNode = (instance, nodeId) => {
2
- const node = instance.getNode(nodeId);
1
+ export const getPreviousItem = (instance, itemId) => {
2
+ const node = instance.getNode(itemId);
3
3
  const siblings = instance.getNavigableChildrenIds(node.parentId);
4
- const nodeIndex = siblings.indexOf(nodeId);
5
- if (nodeIndex === 0) {
4
+ const itemIndex = siblings.indexOf(itemId);
5
+ if (itemIndex === 0) {
6
6
  return node.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.isItemExpanded(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 getNextItem = (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.isItemExpanded(itemId) && instance.getNavigableChildrenIds(itemId).length > 0) {
17
+ return instance.getNavigableChildrenIds(itemId)[0];
18
18
  }
19
- let node = instance.getNode(nodeId);
19
+ let node = instance.getNode(itemId);
20
20
  while (node != null) {
21
21
  // Try to get next sibling
22
22
  const siblings = instance.getNavigableChildrenIds(node.parentId);
@@ -30,14 +30,14 @@ export const getNextNode = (instance, nodeId) => {
30
30
  }
31
31
  return null;
32
32
  };
33
- export const getLastNode = instance => {
34
- let lastNode = instance.getNavigableChildrenIds(null).pop();
35
- while (instance.isNodeExpanded(lastNode)) {
36
- lastNode = instance.getNavigableChildrenIds(lastNode).pop();
33
+ export const getLastItem = instance => {
34
+ let lastItem = instance.getNavigableChildrenIds(null).pop();
35
+ while (instance.isItemExpanded(lastItem)) {
36
+ lastItem = instance.getNavigableChildrenIds(lastItem).pop();
37
37
  }
38
- return lastNode;
38
+ return lastItem;
39
39
  };
40
- export const getFirstNode = instance => instance.getNavigableChildrenIds(null)[0];
40
+ export const getFirstItem = instance => instance.getNavigableChildrenIds(null)[0];
41
41
  export const populateInstance = (instance, methods) => {
42
42
  Object.assign(instance, methods);
43
43
  };
@@ -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
  *
@@ -104,10 +104,10 @@ const RichTreeView = /*#__PURE__*/React.forwardRef(function RichTreeView(inProps
104
104
  getSlotProps: getRootProps,
105
105
  ownerState: props
106
106
  });
107
- const nodesToRender = instance.getNodesToRender();
108
- const renderNode = ({
107
+ const itemsToRender = instance.getItemsToRender();
108
+ const renderItem = ({
109
109
  label,
110
- nodeId,
110
+ itemId,
111
111
  id,
112
112
  children
113
113
  }) => {
@@ -116,14 +116,14 @@ const RichTreeView = /*#__PURE__*/React.forwardRef(function RichTreeView(inProps
116
116
  slotProps: slotProps,
117
117
  label: label,
118
118
  id: id,
119
- nodeId: nodeId,
120
- children: children?.map(renderNode)
121
- }, nodeId);
119
+ itemId: itemId,
120
+ children: children?.map(renderItem)
121
+ }, itemId);
122
122
  };
123
123
  return /*#__PURE__*/_jsx(TreeViewProvider, {
124
124
  value: contextValue,
125
125
  children: /*#__PURE__*/_jsx(Root, _extends({}, rootProps, {
126
- children: nodesToRender.map(renderNode)
126
+ children: itemsToRender.map(renderItem)
127
127
  }))
128
128
  });
129
129
  });
@@ -31,7 +31,7 @@ export const SimpleTreeViewRoot = styled('ul', {
31
31
  outline: 0
32
32
  });
33
33
  const EMPTY_ITEMS = [];
34
- const itemsPropWarning = buildWarning(['MUI X: The `SimpleTreeView` component does not support the `items` prop.', 'If you want to add items, you need to pass them as JSX children.', 'Check the documentation for more details: https://next.mui.com/x/react-tree-view/simple-tree-view/items/']);
34
+ const itemsPropWarning = buildWarning(['MUI X: The `SimpleTreeView` component does not support the `items` prop.', 'If you want to add items, you need to pass them as JSX children.', 'Check the documentation for more details: https://mui.com/x/react-tree-view/simple-tree-view/items/']);
35
35
 
36
36
  /**
37
37
  *
@@ -1,5 +1,5 @@
1
1
  import { DEFAULT_TREE_VIEW_PLUGINS } from '../internals/plugins/defaultPlugins';
2
- import { useTreeViewJSXNodes } from '../internals/plugins/useTreeViewJSXNodes';
3
- export const SIMPLE_TREE_VIEW_PLUGINS = [...DEFAULT_TREE_VIEW_PLUGINS, useTreeViewJSXNodes];
2
+ import { useTreeViewJSXItems } from '../internals/plugins/useTreeViewJSXItems';
3
+ export const SIMPLE_TREE_VIEW_PLUGINS = [...DEFAULT_TREE_VIEW_PLUGINS, useTreeViewJSXItems];
4
4
 
5
5
  // We can't infer this type from the plugin, otherwise we would lose the generics.
@@ -1,6 +1,6 @@
1
1
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
- const _excluded = ["children", "className", "slots", "slotProps", "ContentComponent", "ContentProps", "nodeId", "id", "label", "onClick", "onMouseDown"],
3
+ const _excluded = ["children", "className", "slots", "slotProps", "ContentComponent", "ContentProps", "itemId", "id", "label", "onClick", "onMouseDown", "onFocus", "onBlur", "onKeyDown"],
4
4
  _excluded2 = ["ownerState"],
5
5
  _excluded3 = ["ownerState"],
6
6
  _excluded4 = ["ownerState"];
@@ -157,11 +157,13 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
157
157
  slotProps: inSlotProps,
158
158
  ContentComponent = TreeItemContent,
159
159
  ContentProps,
160
- nodeId,
160
+ itemId,
161
161
  id,
162
162
  label,
163
163
  onClick,
164
- onMouseDown
164
+ onMouseDown,
165
+ onBlur,
166
+ onKeyDown
165
167
  } = props,
166
168
  other = _objectWithoutPropertiesLoose(props, _excluded);
167
169
  const {
@@ -184,10 +186,10 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
184
186
  return Boolean(reactChildren);
185
187
  };
186
188
  const expandable = isExpandable(children);
187
- const expanded = instance.isNodeExpanded(nodeId);
188
- const focused = instance.isNodeFocused(nodeId);
189
- const selected = instance.isNodeSelected(nodeId);
190
- const disabled = instance.isNodeDisabled(nodeId);
189
+ const expanded = instance.isItemExpanded(itemId);
190
+ const focused = instance.isItemFocused(itemId);
191
+ const selected = instance.isItemSelected(itemId);
192
+ const disabled = instance.isItemDisabled(itemId);
191
193
  const ownerState = _extends({}, props, {
192
194
  expanded,
193
195
  focused,
@@ -249,24 +251,29 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
249
251
  /* single-selection trees unset aria-selected on un-selected items.
250
252
  *
251
253
  * If the tree does not support multiple selection, aria-selected
252
- * is set to true for the selected node and it is not present on any other node in the tree.
254
+ * is set to true for the selected item and it is not present on any other item in the tree.
253
255
  * Source: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/
254
256
  */
255
257
  ariaSelected = true;
256
258
  }
257
259
  function handleFocus(event) {
258
- // DOM focus stays on the tree which manages focus with aria-activedescendant
259
- if (event.target === event.currentTarget) {
260
- instance.focusRoot();
261
- }
262
260
  const canBeFocused = !disabled || disabledItemsFocusable;
263
261
  if (!focused && canBeFocused && event.currentTarget === event.target) {
264
- instance.focusItem(event, nodeId);
262
+ instance.focusItem(event, itemId);
265
263
  }
266
264
  }
267
- const idAttribute = instance.getTreeItemId(nodeId, id);
265
+ function handleBlur(event) {
266
+ onBlur?.(event);
267
+ instance.removeFocusedItem();
268
+ }
269
+ const handleKeyDown = event => {
270
+ onKeyDown?.(event);
271
+ instance.handleItemKeyDown(event, itemId);
272
+ };
273
+ const idAttribute = instance.getTreeItemId(itemId, id);
274
+ const tabIndex = instance.canItemBeTabbed(itemId) ? 0 : -1;
268
275
  return /*#__PURE__*/_jsx(TreeItem2Provider, {
269
- nodeId: nodeId,
276
+ itemId: itemId,
270
277
  children: /*#__PURE__*/_jsxs(TreeItemRoot, _extends({
271
278
  className: clsx(classes.root, className),
272
279
  role: "treeitem",
@@ -274,10 +281,12 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
274
281
  "aria-selected": ariaSelected,
275
282
  "aria-disabled": disabled || undefined,
276
283
  id: idAttribute,
277
- tabIndex: -1
284
+ tabIndex: tabIndex
278
285
  }, other, {
279
286
  ownerState: ownerState,
280
287
  onFocus: handleFocus,
288
+ onBlur: handleBlur,
289
+ onKeyDown: handleKeyDown,
281
290
  ref: handleRootRef,
282
291
  children: [/*#__PURE__*/_jsx(StyledTreeItemContent, _extends({
283
292
  as: ContentComponent,
@@ -291,7 +300,7 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
291
300
  label: classes.label
292
301
  },
293
302
  label: label,
294
- nodeId: nodeId,
303
+ itemId: itemId,
295
304
  onClick: onClick,
296
305
  onMouseDown: onMouseDown,
297
306
  icon: icon,
@@ -323,7 +332,7 @@ process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
323
332
  classes: PropTypes.object,
324
333
  className: PropTypes.string,
325
334
  /**
326
- * The component used for the content node.
335
+ * The component used to render the content of the item.
327
336
  * @default TreeItemContent
328
337
  */
329
338
  ContentComponent: elementTypeAcceptingRef,
@@ -337,13 +346,13 @@ process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
337
346
  */
338
347
  disabled: PropTypes.bool,
339
348
  /**
340
- * The tree item label.
349
+ * The id of the item.
341
350
  */
342
- label: PropTypes.node,
351
+ itemId: PropTypes.string.isRequired,
343
352
  /**
344
- * The id of the node.
353
+ * The tree item label.
345
354
  */
346
- nodeId: PropTypes.string.isRequired,
355
+ label: PropTypes.node,
347
356
  /**
348
357
  * This prop isn't supported.
349
358
  * Use the `onItemFocus` callback on the tree if you need to monitor a item's focus.
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- const _excluded = ["classes", "className", "displayIcon", "expansionIcon", "icon", "label", "nodeId", "onClick", "onMouseDown"];
3
+ const _excluded = ["classes", "className", "displayIcon", "expansionIcon", "icon", "label", "itemId", "onClick", "onMouseDown"];
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import clsx from 'clsx';
@@ -18,7 +18,7 @@ const TreeItemContent = /*#__PURE__*/React.forwardRef(function TreeItemContent(p
18
18
  expansionIcon,
19
19
  icon: iconProp,
20
20
  label,
21
- nodeId,
21
+ itemId,
22
22
  onClick,
23
23
  onMouseDown
24
24
  } = props,
@@ -31,7 +31,7 @@ const TreeItemContent = /*#__PURE__*/React.forwardRef(function TreeItemContent(p
31
31
  handleExpansion,
32
32
  handleSelection,
33
33
  preventSelection
34
- } = useTreeItemState(nodeId);
34
+ } = useTreeItemState(itemId);
35
35
  const icon = iconProp || expansionIcon || displayIcon;
36
36
  const handleMouseDown = event => {
37
37
  preventSelection(event);
@@ -75,24 +75,24 @@ process.env.NODE_ENV !== "production" ? TreeItemContent.propTypes = {
75
75
  classes: PropTypes.object.isRequired,
76
76
  className: PropTypes.string,
77
77
  /**
78
- * The icon to display next to the tree node's label. Either a parent or end icon.
78
+ * The icon to display next to the tree item's label. Either a parent or end icon.
79
79
  */
80
80
  displayIcon: PropTypes.node,
81
81
  /**
82
- * The icon to display next to the tree node's label. Either an expansion or collapse icon.
82
+ * The icon to display next to the tree item's label. Either an expansion or collapse icon.
83
83
  */
84
84
  expansionIcon: PropTypes.node,
85
85
  /**
86
- * The icon to display next to the tree node's label.
86
+ * The icon to display next to the tree item's label.
87
87
  */
88
88
  icon: PropTypes.node,
89
89
  /**
90
- * The tree node label.
90
+ * The id of the item.
91
91
  */
92
- label: PropTypes.node,
92
+ itemId: PropTypes.string.isRequired,
93
93
  /**
94
- * The id of the node.
94
+ * The tree item label.
95
95
  */
96
- nodeId: PropTypes.string.isRequired
96
+ label: PropTypes.node
97
97
  } : void 0;
98
98
  export { TreeItemContent };
@@ -1,45 +1,45 @@
1
1
  import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
2
- export function useTreeItemState(nodeId) {
2
+ export function useTreeItemState(itemId) {
3
3
  const {
4
4
  instance,
5
5
  selection: {
6
6
  multiSelect
7
7
  }
8
8
  } = useTreeViewContext();
9
- const expandable = instance.isNodeExpandable(nodeId);
10
- const expanded = instance.isNodeExpanded(nodeId);
11
- const focused = instance.isNodeFocused(nodeId);
12
- const selected = instance.isNodeSelected(nodeId);
13
- const disabled = instance.isNodeDisabled(nodeId);
9
+ const expandable = instance.isItemExpandable(itemId);
10
+ const expanded = instance.isItemExpanded(itemId);
11
+ const focused = instance.isItemFocused(itemId);
12
+ const selected = instance.isItemSelected(itemId);
13
+ const disabled = instance.isItemDisabled(itemId);
14
14
  const handleExpansion = event => {
15
15
  if (!disabled) {
16
16
  if (!focused) {
17
- instance.focusItem(event, nodeId);
17
+ instance.focusItem(event, itemId);
18
18
  }
19
19
  const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
20
20
 
21
21
  // If already expanded and trying to toggle selection don't close
22
- if (expandable && !(multiple && instance.isNodeExpanded(nodeId))) {
23
- instance.toggleNodeExpansion(event, nodeId);
22
+ if (expandable && !(multiple && instance.isItemExpanded(itemId))) {
23
+ instance.toggleItemExpansion(event, itemId);
24
24
  }
25
25
  }
26
26
  };
27
27
  const handleSelection = event => {
28
28
  if (!disabled) {
29
29
  if (!focused) {
30
- instance.focusItem(event, nodeId);
30
+ instance.focusItem(event, itemId);
31
31
  }
32
32
  const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
33
33
  if (multiple) {
34
34
  if (event.shiftKey) {
35
35
  instance.selectRange(event, {
36
- end: nodeId
36
+ end: itemId
37
37
  });
38
38
  } else {
39
- instance.selectNode(event, nodeId, true);
39
+ instance.selectItem(event, itemId, true);
40
40
  }
41
41
  } else {
42
- instance.selectNode(event, nodeId);
42
+ instance.selectItem(event, itemId);
43
43
  }
44
44
  }
45
45
  };
@@ -1,6 +1,6 @@
1
1
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
- const _excluded = ["id", "nodeId", "label", "disabled", "children", "slots", "slotProps"];
3
+ const _excluded = ["id", "itemId", "label", "disabled", "children", "slots", "slotProps"];
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import clsx from 'clsx';
@@ -165,7 +165,7 @@ export const TreeItem2 = /*#__PURE__*/React.forwardRef(function TreeItem2(inProp
165
165
  });
166
166
  const {
167
167
  id,
168
- nodeId,
168
+ itemId,
169
169
  label,
170
170
  disabled,
171
171
  children,
@@ -182,7 +182,7 @@ export const TreeItem2 = /*#__PURE__*/React.forwardRef(function TreeItem2(inProp
182
182
  status
183
183
  } = useTreeItem2({
184
184
  id,
185
- nodeId,
185
+ itemId,
186
186
  children,
187
187
  label,
188
188
  disabled
@@ -234,7 +234,7 @@ export const TreeItem2 = /*#__PURE__*/React.forwardRef(function TreeItem2(inProp
234
234
  className: classes.groupTransition
235
235
  });
236
236
  return /*#__PURE__*/_jsx(TreeItem2Provider, {
237
- nodeId: nodeId,
237
+ itemId: itemId,
238
238
  children: /*#__PURE__*/_jsxs(Root, _extends({}, rootProps, {
239
239
  children: [/*#__PURE__*/_jsxs(Content, _extends({}, contentProps, {
240
240
  children: [/*#__PURE__*/_jsx(IconContainer, _extends({}, iconContainerProps, {
@@ -265,23 +265,23 @@ process.env.NODE_ENV !== "production" ? TreeItem2.propTypes = {
265
265
  classes: PropTypes.object,
266
266
  className: PropTypes.string,
267
267
  /**
268
- * If `true`, the node is disabled.
268
+ * If `true`, the item is disabled.
269
269
  * @default false
270
270
  */
271
271
  disabled: PropTypes.bool,
272
272
  /**
273
- * The id attribute of the node. If not provided, it will be generated.
273
+ * The id attribute of the item. If not provided, it will be generated.
274
274
  */
275
275
  id: PropTypes.string,
276
276
  /**
277
- * The label of the node.
277
+ * The id of the item.
278
+ * Must be unique.
278
279
  */
279
- label: PropTypes.node,
280
+ itemId: PropTypes.string.isRequired,
280
281
  /**
281
- * The id of the node.
282
- * Must be unique.
282
+ * The label of the item.
283
283
  */
284
- nodeId: PropTypes.string.isRequired,
284
+ label: PropTypes.node,
285
285
  /**
286
286
  * This prop isn't supported.
287
287
  * Use the `onItemFocus` callback on the tree if you need to monitor a item's focus.
@@ -3,14 +3,14 @@ import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewCon
3
3
  function TreeItem2Provider(props) {
4
4
  const {
5
5
  children,
6
- nodeId
6
+ itemId
7
7
  } = props;
8
8
  const {
9
9
  wrapItem
10
10
  } = useTreeViewContext();
11
11
  return wrapItem({
12
12
  children,
13
- nodeId
13
+ itemId
14
14
  });
15
15
  }
16
16
  TreeItem2Provider.propTypes = {
@@ -19,6 +19,6 @@ TreeItem2Provider.propTypes = {
19
19
  // | To update them edit the TypeScript types and run "yarn proptypes" |
20
20
  // ----------------------------------------------------------------------
21
21
  children: PropTypes.node,
22
- nodeId: PropTypes.string.isRequired
22
+ itemId: PropTypes.string.isRequired
23
23
  };
24
24
  export { TreeItem2Provider };
@@ -30,7 +30,7 @@ const warn = () => {
30
30
 
31
31
  /**
32
32
  * This component has been deprecated in favor of the new `SimpleTreeView` component.
33
- * You can have a look at how to migrate to the new component in the v7 [migration guide](https://next.mui.com/x/migration/migration-tree-view-v6/#use-simpletreeview-instead-of-treeview)
33
+ * You can have a look at how to migrate to the new component in the v7 [migration guide](https://mui.com/x/migration/migration-tree-view-v6/#use-simpletreeview-instead-of-treeview)
34
34
  *
35
35
  * Demos:
36
36
  *
@@ -1,6 +1,6 @@
1
1
  import { useTreeViewContext } from '../../internals/TreeViewProvider/useTreeViewContext';
2
2
  export const useTreeItem2Utils = ({
3
- nodeId,
3
+ itemId,
4
4
  children
5
5
  }) => {
6
6
  const {
@@ -11,23 +11,23 @@ export const useTreeItem2Utils = ({
11
11
  } = useTreeViewContext();
12
12
  const status = {
13
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)
14
+ expanded: instance.isItemExpanded(itemId),
15
+ focused: instance.isItemFocused(itemId),
16
+ selected: instance.isItemSelected(itemId),
17
+ disabled: instance.isItemDisabled(itemId)
18
18
  };
19
19
  const handleExpansion = event => {
20
20
  if (status.disabled) {
21
21
  return;
22
22
  }
23
23
  if (!status.focused) {
24
- instance.focusItem(event, nodeId);
24
+ instance.focusItem(event, itemId);
25
25
  }
26
26
  const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
27
27
 
28
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);
29
+ if (status.expandable && !(multiple && instance.isItemExpanded(itemId))) {
30
+ instance.toggleItemExpansion(event, itemId);
31
31
  }
32
32
  };
33
33
  const handleSelection = event => {
@@ -35,19 +35,19 @@ export const useTreeItem2Utils = ({
35
35
  return;
36
36
  }
37
37
  if (!status.focused) {
38
- instance.focusItem(event, nodeId);
38
+ instance.focusItem(event, itemId);
39
39
  }
40
40
  const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
41
41
  if (multiple) {
42
42
  if (event.shiftKey) {
43
43
  instance.selectRange(event, {
44
- end: nodeId
44
+ end: itemId
45
45
  });
46
46
  } else {
47
- instance.selectNode(event, nodeId, true);
47
+ instance.selectItem(event, itemId, true);
48
48
  }
49
49
  } else {
50
- instance.selectNode(event, nodeId);
50
+ instance.selectItem(event, itemId);
51
51
  }
52
52
  };
53
53
  const interactions = {
package/modern/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-tree-view v7.0.0-beta.7
2
+ * @mui/x-tree-view v7.1.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -46,7 +46,7 @@ const noop = () => {};
46
46
  * We use this for focus management, keyboard navigation, and typeahead
47
47
  * functionality for some components.
48
48
  *
49
- * The hook accepts the element node
49
+ * The hook accepts the element item
50
50
  *
51
51
  * Our main goals with this are:
52
52
  * 1) maximum composability,
@@ -1,10 +1,10 @@
1
1
  import { useTreeViewId } from './useTreeViewId';
2
- import { useTreeViewNodes } from './useTreeViewNodes';
2
+ import { useTreeViewItems } from './useTreeViewItems';
3
3
  import { useTreeViewExpansion } from './useTreeViewExpansion';
4
4
  import { useTreeViewSelection } from './useTreeViewSelection';
5
5
  import { useTreeViewFocus } from './useTreeViewFocus';
6
6
  import { useTreeViewKeyboardNavigation } from './useTreeViewKeyboardNavigation';
7
7
  import { useTreeViewIcons } from './useTreeViewIcons';
8
- export const DEFAULT_TREE_VIEW_PLUGINS = [useTreeViewId, useTreeViewNodes, useTreeViewExpansion, useTreeViewSelection, useTreeViewFocus, useTreeViewKeyboardNavigation, useTreeViewIcons];
8
+ export const DEFAULT_TREE_VIEW_PLUGINS = [useTreeViewId, useTreeViewItems, useTreeViewExpansion, useTreeViewSelection, useTreeViewFocus, useTreeViewKeyboardNavigation, useTreeViewIcons];
9
9
 
10
10
  // We can't infer this type from the plugin, otherwise we would lose the generics.