@mui/x-tree-view 6.0.0-alpha.3 → 6.0.0-alpha.4

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 (265) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/TreeItem/TreeItem.js +18 -31
  3. package/TreeItem/useTreeItem.js +18 -27
  4. package/TreeView/TreeView.d.ts +4 -1
  5. package/TreeView/TreeView.js +65 -708
  6. package/TreeView/TreeView.types.d.ts +4 -147
  7. package/index.d.ts +1 -0
  8. package/index.js +3 -2
  9. package/{TreeView/descendants.d.ts → internals/TreeViewProvider/DescendantProvider.d.ts} +1 -5
  10. package/internals/TreeViewProvider/TreeViewContext.d.ts +7 -0
  11. package/{TreeView → internals/TreeViewProvider}/TreeViewContext.js +8 -18
  12. package/internals/TreeViewProvider/TreeViewProvider.d.ts +9 -0
  13. package/internals/TreeViewProvider/TreeViewProvider.js +21 -0
  14. package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +18 -0
  15. package/internals/TreeViewProvider/index.d.ts +2 -0
  16. package/internals/TreeViewProvider/index.js +1 -0
  17. package/internals/TreeViewProvider/useTreeViewContext.d.ts +3 -0
  18. package/internals/TreeViewProvider/useTreeViewContext.js +3 -0
  19. package/internals/corePlugins/corePlugins.d.ts +7 -0
  20. package/internals/corePlugins/corePlugins.js +6 -0
  21. package/internals/corePlugins/index.d.ts +2 -0
  22. package/internals/corePlugins/index.js +1 -0
  23. package/internals/corePlugins/useTreeViewInstanceEvents/index.d.ts +2 -0
  24. package/internals/corePlugins/useTreeViewInstanceEvents/index.js +1 -0
  25. package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.d.ts +8 -0
  26. package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +35 -0
  27. package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.d.ts +21 -0
  28. package/internals/hooks/useInstanceEventHandler.d.ts +15 -0
  29. package/internals/hooks/useInstanceEventHandler.js +82 -0
  30. package/internals/models/events.d.ts +9 -0
  31. package/internals/models/helpers.d.ts +13 -0
  32. package/internals/models/helpers.js +1 -0
  33. package/internals/models/index.d.ts +3 -0
  34. package/internals/models/index.js +3 -0
  35. package/internals/models/plugin.d.ts +69 -0
  36. package/internals/models/plugin.js +1 -0
  37. package/internals/models/treeView.d.ts +23 -0
  38. package/internals/models/treeView.js +1 -0
  39. package/internals/plugins/defaultPlugins.d.ts +10 -0
  40. package/internals/plugins/defaultPlugins.js +9 -0
  41. package/internals/plugins/index.d.ts +2 -0
  42. package/internals/plugins/index.js +1 -0
  43. package/internals/plugins/useTreeViewContextValueBuilder/index.d.ts +2 -0
  44. package/internals/plugins/useTreeViewContextValueBuilder/index.js +1 -0
  45. package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.d.ts +3 -0
  46. package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +24 -0
  47. package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.d.ts +34 -0
  48. package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js +1 -0
  49. package/internals/plugins/useTreeViewExpansion/index.d.ts +2 -0
  50. package/internals/plugins/useTreeViewExpansion/index.js +1 -0
  51. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.d.ts +3 -0
  52. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +63 -0
  53. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +32 -0
  54. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +1 -0
  55. package/internals/plugins/useTreeViewFocus/index.d.ts +2 -0
  56. package/internals/plugins/useTreeViewFocus/index.js +1 -0
  57. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.d.ts +3 -0
  58. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +77 -0
  59. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +25 -0
  60. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +1 -0
  61. package/internals/plugins/useTreeViewKeyboardNavigation/index.d.ts +2 -0
  62. package/internals/plugins/useTreeViewKeyboardNavigation/index.js +1 -0
  63. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.d.ts +3 -0
  64. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +223 -0
  65. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +14 -0
  66. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +1 -0
  67. package/internals/plugins/useTreeViewNodes/index.d.ts +2 -0
  68. package/internals/plugins/useTreeViewNodes/index.js +1 -0
  69. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.d.ts +3 -0
  70. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +60 -0
  71. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +27 -0
  72. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.js +1 -0
  73. package/internals/plugins/useTreeViewSelection/index.d.ts +2 -0
  74. package/internals/plugins/useTreeViewSelection/index.js +1 -0
  75. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.d.ts +3 -0
  76. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +172 -0
  77. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +49 -0
  78. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +1 -0
  79. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +17 -0
  80. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +55 -0
  81. package/internals/useTreeView/index.d.ts +2 -0
  82. package/internals/useTreeView/index.js +1 -0
  83. package/internals/useTreeView/useTreeView.d.ts +3 -0
  84. package/internals/useTreeView/useTreeView.js +65 -0
  85. package/internals/useTreeView/useTreeView.types.d.ts +20 -0
  86. package/internals/useTreeView/useTreeView.types.js +1 -0
  87. package/internals/useTreeView/useTreeView.utils.d.ts +8 -0
  88. package/internals/useTreeView/useTreeView.utils.js +43 -0
  89. package/internals/useTreeView/useTreeViewModels.d.ts +6 -0
  90. package/internals/useTreeView/useTreeViewModels.js +63 -0
  91. package/internals/utils/EventManager.d.ts +29 -0
  92. package/internals/utils/EventManager.js +69 -0
  93. package/internals/utils/cleanupTracking/CleanupTracking.d.ts +9 -0
  94. package/internals/utils/cleanupTracking/CleanupTracking.js +1 -0
  95. package/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.d.ts +7 -0
  96. package/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +18 -0
  97. package/internals/utils/cleanupTracking/TimerBasedCleanupTracking.d.ts +10 -0
  98. package/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +38 -0
  99. package/internals/utils/publishTreeViewEvent.d.ts +5 -0
  100. package/internals/utils/publishTreeViewEvent.js +3 -0
  101. package/legacy/TreeItem/TreeItem.js +21 -32
  102. package/legacy/TreeItem/useTreeItem.js +18 -27
  103. package/legacy/TreeView/TreeView.js +65 -766
  104. package/legacy/index.js +3 -2
  105. package/legacy/internals/TreeViewProvider/TreeViewContext.js +21 -0
  106. package/legacy/internals/TreeViewProvider/TreeViewProvider.js +19 -0
  107. package/legacy/internals/TreeViewProvider/TreeViewProvider.types.js +1 -0
  108. package/legacy/internals/TreeViewProvider/index.js +1 -0
  109. package/legacy/internals/TreeViewProvider/useTreeViewContext.js +5 -0
  110. package/legacy/internals/corePlugins/corePlugins.js +6 -0
  111. package/legacy/internals/corePlugins/index.js +1 -0
  112. package/legacy/internals/corePlugins/useTreeViewInstanceEvents/index.js +1 -0
  113. package/legacy/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +45 -0
  114. package/legacy/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js +1 -0
  115. package/legacy/internals/hooks/useInstanceEventHandler.js +87 -0
  116. package/legacy/internals/models/events.js +1 -0
  117. package/legacy/internals/models/helpers.js +1 -0
  118. package/legacy/internals/models/index.js +3 -0
  119. package/legacy/internals/models/plugin.js +1 -0
  120. package/legacy/internals/models/treeView.js +1 -0
  121. package/legacy/internals/plugins/defaultPlugins.js +9 -0
  122. package/legacy/internals/plugins/index.js +1 -0
  123. package/legacy/internals/plugins/useTreeViewContextValueBuilder/index.js +1 -0
  124. package/legacy/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +25 -0
  125. package/legacy/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js +1 -0
  126. package/legacy/internals/plugins/useTreeViewExpansion/index.js +1 -0
  127. package/legacy/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +66 -0
  128. package/legacy/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +1 -0
  129. package/legacy/internals/plugins/useTreeViewFocus/index.js +1 -0
  130. package/legacy/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +87 -0
  131. package/legacy/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +1 -0
  132. package/legacy/internals/plugins/useTreeViewKeyboardNavigation/index.js +1 -0
  133. package/legacy/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +226 -0
  134. package/legacy/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +1 -0
  135. package/legacy/internals/plugins/useTreeViewNodes/index.js +1 -0
  136. package/legacy/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +71 -0
  137. package/legacy/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.js +1 -0
  138. package/legacy/internals/plugins/useTreeViewSelection/index.js +1 -0
  139. package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +188 -0
  140. package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +1 -0
  141. package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +55 -0
  142. package/legacy/internals/useTreeView/index.js +1 -0
  143. package/legacy/internals/useTreeView/useTreeView.js +71 -0
  144. package/legacy/internals/useTreeView/useTreeView.types.js +1 -0
  145. package/legacy/internals/useTreeView/useTreeView.utils.js +46 -0
  146. package/legacy/internals/useTreeView/useTreeViewModels.js +76 -0
  147. package/legacy/internals/utils/EventManager.js +91 -0
  148. package/legacy/internals/utils/cleanupTracking/CleanupTracking.js +1 -0
  149. package/legacy/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +29 -0
  150. package/legacy/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +52 -0
  151. package/legacy/internals/utils/publishTreeViewEvent.js +3 -0
  152. package/modern/TreeItem/TreeItem.js +18 -31
  153. package/modern/TreeItem/useTreeItem.js +18 -27
  154. package/modern/TreeView/TreeView.js +65 -707
  155. package/modern/index.js +3 -2
  156. package/modern/{TreeView → internals/TreeViewProvider}/TreeViewContext.js +8 -18
  157. package/modern/internals/TreeViewProvider/TreeViewProvider.js +21 -0
  158. package/modern/internals/TreeViewProvider/TreeViewProvider.types.js +1 -0
  159. package/modern/internals/TreeViewProvider/index.js +1 -0
  160. package/modern/internals/TreeViewProvider/useTreeViewContext.js +3 -0
  161. package/modern/internals/corePlugins/corePlugins.js +6 -0
  162. package/modern/internals/corePlugins/index.js +1 -0
  163. package/modern/internals/corePlugins/useTreeViewInstanceEvents/index.js +1 -0
  164. package/modern/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +35 -0
  165. package/modern/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js +1 -0
  166. package/modern/internals/hooks/useInstanceEventHandler.js +77 -0
  167. package/modern/internals/models/events.js +1 -0
  168. package/modern/internals/models/helpers.js +1 -0
  169. package/modern/internals/models/index.js +3 -0
  170. package/modern/internals/models/plugin.js +1 -0
  171. package/modern/internals/models/treeView.js +1 -0
  172. package/modern/internals/plugins/defaultPlugins.js +9 -0
  173. package/modern/internals/plugins/index.js +1 -0
  174. package/modern/internals/plugins/useTreeViewContextValueBuilder/index.js +1 -0
  175. package/modern/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +24 -0
  176. package/modern/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js +1 -0
  177. package/modern/internals/plugins/useTreeViewExpansion/index.js +1 -0
  178. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +57 -0
  179. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +1 -0
  180. package/modern/internals/plugins/useTreeViewFocus/index.js +1 -0
  181. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +72 -0
  182. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +1 -0
  183. package/modern/internals/plugins/useTreeViewKeyboardNavigation/index.js +1 -0
  184. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +222 -0
  185. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +1 -0
  186. package/modern/internals/plugins/useTreeViewNodes/index.js +1 -0
  187. package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +60 -0
  188. package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.js +1 -0
  189. package/modern/internals/plugins/useTreeViewSelection/index.js +1 -0
  190. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +169 -0
  191. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +1 -0
  192. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +55 -0
  193. package/modern/internals/useTreeView/index.js +1 -0
  194. package/modern/internals/useTreeView/useTreeView.js +65 -0
  195. package/modern/internals/useTreeView/useTreeView.types.js +1 -0
  196. package/modern/internals/useTreeView/useTreeView.utils.js +43 -0
  197. package/modern/internals/useTreeView/useTreeViewModels.js +63 -0
  198. package/modern/internals/utils/EventManager.js +69 -0
  199. package/modern/internals/utils/cleanupTracking/CleanupTracking.js +1 -0
  200. package/modern/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +18 -0
  201. package/modern/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +38 -0
  202. package/modern/internals/utils/publishTreeViewEvent.js +3 -0
  203. package/node/TreeItem/TreeItem.js +20 -33
  204. package/node/TreeItem/useTreeItem.js +18 -29
  205. package/node/TreeView/TreeView.js +65 -707
  206. package/node/index.js +14 -2
  207. package/node/{TreeView → internals/TreeViewProvider}/TreeViewContext.js +10 -19
  208. package/node/internals/TreeViewProvider/TreeViewProvider.js +29 -0
  209. package/node/internals/TreeViewProvider/index.js +12 -0
  210. package/node/internals/TreeViewProvider/useTreeViewContext.js +12 -0
  211. package/node/internals/corePlugins/corePlugins.js +13 -0
  212. package/node/internals/corePlugins/index.js +12 -0
  213. package/node/internals/corePlugins/useTreeViewInstanceEvents/index.js +12 -0
  214. package/node/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +44 -0
  215. package/node/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js +5 -0
  216. package/node/internals/hooks/useInstanceEventHandler.js +88 -0
  217. package/node/internals/models/events.js +5 -0
  218. package/node/internals/models/helpers.js +5 -0
  219. package/node/internals/models/index.js +38 -0
  220. package/node/internals/models/plugin.js +5 -0
  221. package/node/internals/models/treeView.js +5 -0
  222. package/node/internals/plugins/defaultPlugins.js +16 -0
  223. package/node/internals/plugins/index.js +12 -0
  224. package/node/internals/plugins/useTreeViewContextValueBuilder/index.js +12 -0
  225. package/node/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +32 -0
  226. package/node/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js +5 -0
  227. package/node/internals/plugins/useTreeViewExpansion/index.js +12 -0
  228. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +67 -0
  229. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +5 -0
  230. package/node/internals/plugins/useTreeViewFocus/index.js +12 -0
  231. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +82 -0
  232. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +5 -0
  233. package/node/internals/plugins/useTreeViewKeyboardNavigation/index.js +12 -0
  234. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +232 -0
  235. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +5 -0
  236. package/node/internals/plugins/useTreeViewNodes/index.js +12 -0
  237. package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +70 -0
  238. package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.js +5 -0
  239. package/node/internals/plugins/useTreeViewSelection/index.js +12 -0
  240. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +179 -0
  241. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +5 -0
  242. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +62 -0
  243. package/node/internals/useTreeView/index.js +12 -0
  244. package/node/internals/useTreeView/useTreeView.js +75 -0
  245. package/node/internals/useTreeView/useTreeView.types.js +5 -0
  246. package/node/internals/useTreeView/useTreeView.utils.js +54 -0
  247. package/node/internals/useTreeView/useTreeViewModels.js +73 -0
  248. package/node/internals/utils/EventManager.js +76 -0
  249. package/node/internals/utils/cleanupTracking/CleanupTracking.js +5 -0
  250. package/node/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +25 -0
  251. package/node/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +45 -0
  252. package/node/internals/utils/publishTreeViewEvent.js +10 -0
  253. package/package.json +1 -1
  254. package/themeAugmentation/props.d.ts +1 -1
  255. package/TreeView/TreeViewContext.d.ts +0 -6
  256. package/internals/models.d.ts +0 -1
  257. package/legacy/TreeView/TreeViewContext.js +0 -41
  258. /package/{TreeView/descendants.js → internals/TreeViewProvider/DescendantProvider.js} +0 -0
  259. /package/internals/{models.js → TreeViewProvider/TreeViewProvider.types.js} +0 -0
  260. /package/{legacy/internals/models.js → internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js} +0 -0
  261. /package/{modern/internals/models.js → internals/models/events.js} +0 -0
  262. /package/legacy/{TreeView/descendants.js → internals/TreeViewProvider/DescendantProvider.js} +0 -0
  263. /package/modern/{TreeView/descendants.js → internals/TreeViewProvider/DescendantProvider.js} +0 -0
  264. /package/node/{TreeView/descendants.js → internals/TreeViewProvider/DescendantProvider.js} +0 -0
  265. /package/node/internals/{models.js → TreeViewProvider/TreeViewProvider.types.js} +0 -0
@@ -1,18 +1,15 @@
1
- import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
1
  import _extends from "@babel/runtime/helpers/esm/extends";
3
- const _excluded = ["children", "className", "defaultCollapseIcon", "defaultEndIcon", "defaultExpanded", "defaultExpandIcon", "defaultParentIcon", "defaultSelected", "disabledItemsFocusable", "disableSelection", "expanded", "id", "multiSelect", "onBlur", "onFocus", "onKeyDown", "onNodeFocus", "onNodeSelect", "onNodeToggle", "selected"];
2
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
+ const _excluded = ["disabledItemsFocusable", "expanded", "defaultExpanded", "onNodeToggle", "onNodeFocus", "disableSelection", "defaultSelected", "selected", "multiSelect", "onNodeSelect", "id", "defaultCollapseIcon", "defaultEndIcon", "defaultExpandIcon", "defaultParentIcon", "children"];
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
6
- import clsx from 'clsx';
7
- import { styled, useTheme, useThemeProps } from '@mui/material/styles';
8
- import { unstable_composeClasses as composeClasses } from '@mui/base';
9
- import useControlled from '@mui/utils/useControlled';
10
- import useForkRef from '@mui/utils/useForkRef';
11
- import ownerDocument from '@mui/utils/ownerDocument';
12
- import useId from '@mui/utils/useId';
13
- import { TreeViewContext } from './TreeViewContext';
14
- import { DescendantProvider } from './descendants';
6
+ import { styled, useThemeProps } from '@mui/material/styles';
7
+ import composeClasses from '@mui/utils/composeClasses';
8
+ import { useSlotProps } from '@mui/base/utils';
15
9
  import { getTreeViewUtilityClass } from './treeViewClasses';
10
+ import { useTreeView } from '../internals/useTreeView';
11
+ import { TreeViewProvider } from '../internals/TreeViewProvider';
12
+ import { DEFAULT_TREE_VIEW_PLUGINS } from '../internals/plugins';
16
13
  import { jsx as _jsx } from "react/jsx-runtime";
17
14
  const useUtilityClasses = ownerState => {
18
15
  const {
@@ -33,23 +30,6 @@ const TreeViewRoot = styled('ul', {
33
30
  listStyle: 'none',
34
31
  outline: 0
35
32
  });
36
- function isPrintableCharacter(string) {
37
- return string && string.length === 1 && string.match(/\S/);
38
- }
39
- function findNextFirstChar(firstChars, startIndex, char) {
40
- for (let i = startIndex; i < firstChars.length; i += 1) {
41
- if (char === firstChars[i]) {
42
- return i;
43
- }
44
- }
45
- return -1;
46
- }
47
- function noopSelection() {
48
- return false;
49
- }
50
- const defaultDefaultExpanded = [];
51
- const defaultDefaultSelected = [];
52
-
53
33
  /**
54
34
  *
55
35
  * Demos:
@@ -61,692 +41,69 @@ const defaultDefaultSelected = [];
61
41
  * - [TreeView API](https://mui.com/x/api/tree-view/tree-view/)
62
42
  */
63
43
  const TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
64
- var _themeProps$disabledI, _themeProps$disableSe, _themeProps$multiSele, _themeProps$defaultEx, _themeProps$defaultSe;
65
44
  const themeProps = useThemeProps({
66
45
  props: inProps,
67
46
  name: 'MuiTreeView'
68
47
  });
69
- const props = _extends({}, themeProps, {
70
- disabledItemsFocusable: (_themeProps$disabledI = themeProps.disabledItemsFocusable) != null ? _themeProps$disabledI : false,
71
- disableSelection: (_themeProps$disableSe = themeProps.disableSelection) != null ? _themeProps$disableSe : false,
72
- multiSelect: (_themeProps$multiSele = themeProps.multiSelect) != null ? _themeProps$multiSele : false,
73
- defaultExpanded: (_themeProps$defaultEx = themeProps.defaultExpanded) != null ? _themeProps$defaultEx : defaultDefaultExpanded,
74
- defaultSelected: (_themeProps$defaultSe = themeProps.defaultSelected) != null ? _themeProps$defaultSe : defaultDefaultSelected
75
- });
76
- const {
77
- children,
78
- className,
79
- defaultCollapseIcon,
80
- defaultEndIcon,
81
- defaultExpanded,
82
- defaultExpandIcon,
83
- defaultParentIcon,
84
- defaultSelected,
48
+ const ownerState = themeProps;
49
+ const _ref = themeProps,
50
+ {
51
+ // Headless implementation
85
52
  disabledItemsFocusable,
53
+ expanded,
54
+ defaultExpanded,
55
+ onNodeToggle,
56
+ onNodeFocus,
86
57
  disableSelection,
87
- expanded: expandedProp,
88
- id: idProp,
58
+ defaultSelected,
59
+ selected,
89
60
  multiSelect,
90
- onBlur,
91
- onFocus,
92
- onKeyDown,
93
- onNodeFocus,
94
61
  onNodeSelect,
95
- onNodeToggle,
96
- selected: selectedProp
97
- } = props,
98
- other = _objectWithoutPropertiesLoose(props, _excluded);
99
- const theme = useTheme();
100
- const isRtl = theme.direction === 'rtl';
101
- const classes = useUtilityClasses(props);
102
- const treeId = useId(idProp);
103
- const treeRef = React.useRef(null);
104
- const handleRef = useForkRef(treeRef, ref);
105
- const [focusedNodeId, setFocusedNodeId] = React.useState(null);
106
- const nodeMap = React.useRef({});
107
- const firstCharMap = React.useRef({});
108
- const [expanded, setExpandedState] = useControlled({
109
- controlled: expandedProp,
110
- default: defaultExpanded,
111
- name: 'TreeView',
112
- state: 'expanded'
62
+ id,
63
+ defaultCollapseIcon,
64
+ defaultEndIcon,
65
+ defaultExpandIcon,
66
+ defaultParentIcon,
67
+ // Component implementation
68
+ children
69
+ } = _ref,
70
+ other = _objectWithoutPropertiesLoose(_ref, _excluded);
71
+ const {
72
+ getRootProps,
73
+ contextValue
74
+ } = useTreeView({
75
+ disabledItemsFocusable,
76
+ expanded,
77
+ defaultExpanded,
78
+ onNodeToggle,
79
+ onNodeFocus,
80
+ disableSelection,
81
+ defaultSelected,
82
+ selected,
83
+ multiSelect,
84
+ onNodeSelect,
85
+ id,
86
+ defaultCollapseIcon,
87
+ defaultEndIcon,
88
+ defaultExpandIcon,
89
+ defaultParentIcon,
90
+ plugins: DEFAULT_TREE_VIEW_PLUGINS,
91
+ rootRef: ref
113
92
  });
114
- const [selected, setSelectedState] = useControlled({
115
- controlled: selectedProp,
116
- default: defaultSelected,
117
- name: 'TreeView',
118
- state: 'selected'
93
+ const classes = useUtilityClasses(themeProps);
94
+ const rootProps = useSlotProps({
95
+ elementType: TreeViewRoot,
96
+ externalSlotProps: {},
97
+ externalForwardedProps: other,
98
+ className: classes.root,
99
+ getSlotProps: getRootProps,
100
+ ownerState
119
101
  });
120
-
121
- /*
122
- * Status Helpers
123
- */
124
- const isExpanded = React.useCallback(nodeId => Array.isArray(expanded) ? expanded.indexOf(nodeId) !== -1 : false, [expanded]);
125
- const isExpandable = React.useCallback(nodeId => nodeMap.current[nodeId] && nodeMap.current[nodeId].expandable, []);
126
- const isSelected = React.useCallback(nodeId => Array.isArray(selected) ? selected.indexOf(nodeId) !== -1 : selected === nodeId, [selected]);
127
- const isDisabled = React.useCallback(nodeId => {
128
- if (nodeId == null) {
129
- return false;
130
- }
131
- let node = nodeMap.current[nodeId];
132
-
133
- // This can be called before the node has been added to the node map.
134
- if (!node) {
135
- return false;
136
- }
137
- if (node.disabled) {
138
- return true;
139
- }
140
- while (node.parentId != null) {
141
- node = nodeMap.current[node.parentId];
142
- if (node.disabled) {
143
- return true;
144
- }
145
- }
146
- return false;
147
- }, []);
148
- const isFocused = nodeId => focusedNodeId === nodeId;
149
-
150
- /*
151
- * Child Helpers
152
- */
153
-
154
- // Using Object.keys -> .map to mimic Object.values we should replace with Object.values() once we stop IE11 support.
155
- const getChildrenIds = nodeId => Object.keys(nodeMap.current).map(key => {
156
- return nodeMap.current[key];
157
- }).filter(node => node.parentId === nodeId).sort((a, b) => a.index - b.index).map(child => child.id);
158
- const getNavigableChildrenIds = nodeId => {
159
- let childrenIds = getChildrenIds(nodeId);
160
- if (!disabledItemsFocusable) {
161
- childrenIds = childrenIds.filter(node => !isDisabled(node));
162
- }
163
- return childrenIds;
164
- };
165
-
166
- /*
167
- * Node Helpers
168
- */
169
-
170
- const getNextNode = nodeId => {
171
- // If expanded get first child
172
- if (isExpanded(nodeId) && getNavigableChildrenIds(nodeId).length > 0) {
173
- return getNavigableChildrenIds(nodeId)[0];
174
- }
175
- let node = nodeMap.current[nodeId];
176
- while (node != null) {
177
- // Try to get next sibling
178
- const siblings = getNavigableChildrenIds(node.parentId);
179
- const nextSibling = siblings[siblings.indexOf(node.id) + 1];
180
- if (nextSibling) {
181
- return nextSibling;
182
- }
183
-
184
- // If the sibling does not exist, go up a level to the parent and try again.
185
- node = nodeMap.current[node.parentId];
186
- }
187
- return null;
188
- };
189
- const getPreviousNode = nodeId => {
190
- const node = nodeMap.current[nodeId];
191
- const siblings = getNavigableChildrenIds(node.parentId);
192
- const nodeIndex = siblings.indexOf(nodeId);
193
- if (nodeIndex === 0) {
194
- return node.parentId;
195
- }
196
- let currentNode = siblings[nodeIndex - 1];
197
- while (isExpanded(currentNode) && getNavigableChildrenIds(currentNode).length > 0) {
198
- currentNode = getNavigableChildrenIds(currentNode).pop();
199
- }
200
- return currentNode;
201
- };
202
- const getLastNode = () => {
203
- let lastNode = getNavigableChildrenIds(null).pop();
204
- while (isExpanded(lastNode)) {
205
- lastNode = getNavigableChildrenIds(lastNode).pop();
206
- }
207
- return lastNode;
208
- };
209
- const getFirstNode = () => getNavigableChildrenIds(null)[0];
210
- const getParent = nodeId => nodeMap.current[nodeId].parentId;
211
-
212
- /**
213
- * This is used to determine the start and end of a selection range so
214
- * we can get the nodes between the two border nodes.
215
- *
216
- * It finds the nodes' common ancestor using
217
- * a naive implementation of a lowest common ancestor algorithm
218
- * (https://en.wikipedia.org/wiki/Lowest_common_ancestor).
219
- * Then compares the ancestor's 2 children that are ancestors of nodeA and NodeB
220
- * so we can compare their indexes to work out which node comes first in a depth first search.
221
- * (https://en.wikipedia.org/wiki/Depth-first_search)
222
- *
223
- * Another way to put it is which node is shallower in a trémaux tree
224
- * https://en.wikipedia.org/wiki/Tr%C3%A9maux_tree
225
- */
226
- const findOrderInTremauxTree = (nodeAId, nodeBId) => {
227
- if (nodeAId === nodeBId) {
228
- return [nodeAId, nodeBId];
229
- }
230
- const nodeA = nodeMap.current[nodeAId];
231
- const nodeB = nodeMap.current[nodeBId];
232
- if (nodeA.parentId === nodeB.id || nodeB.parentId === nodeA.id) {
233
- return nodeB.parentId === nodeA.id ? [nodeA.id, nodeB.id] : [nodeB.id, nodeA.id];
234
- }
235
- const aFamily = [nodeA.id];
236
- const bFamily = [nodeB.id];
237
- let aAncestor = nodeA.parentId;
238
- let bAncestor = nodeB.parentId;
239
- let aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;
240
- let bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;
241
- let continueA = true;
242
- let continueB = true;
243
- while (!bAncestorIsCommon && !aAncestorIsCommon) {
244
- if (continueA) {
245
- aFamily.push(aAncestor);
246
- aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;
247
- continueA = aAncestor !== null;
248
- if (!aAncestorIsCommon && continueA) {
249
- aAncestor = nodeMap.current[aAncestor].parentId;
250
- }
251
- }
252
- if (continueB && !aAncestorIsCommon) {
253
- bFamily.push(bAncestor);
254
- bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;
255
- continueB = bAncestor !== null;
256
- if (!bAncestorIsCommon && continueB) {
257
- bAncestor = nodeMap.current[bAncestor].parentId;
258
- }
259
- }
260
- }
261
- const commonAncestor = aAncestorIsCommon ? aAncestor : bAncestor;
262
- const ancestorFamily = getChildrenIds(commonAncestor);
263
- const aSide = aFamily[aFamily.indexOf(commonAncestor) - 1];
264
- const bSide = bFamily[bFamily.indexOf(commonAncestor) - 1];
265
- return ancestorFamily.indexOf(aSide) < ancestorFamily.indexOf(bSide) ? [nodeAId, nodeBId] : [nodeBId, nodeAId];
266
- };
267
- const getNodesInRange = (nodeAId, nodeBId) => {
268
- const [first, last] = findOrderInTremauxTree(nodeAId, nodeBId);
269
- const nodes = [first];
270
- let current = first;
271
- while (current !== last) {
272
- current = getNextNode(current);
273
- nodes.push(current);
274
- }
275
- return nodes;
276
- };
277
-
278
- /*
279
- * Focus Helpers
280
- */
281
-
282
- const focus = (event, nodeId) => {
283
- if (nodeId) {
284
- setFocusedNodeId(nodeId);
285
- if (onNodeFocus) {
286
- onNodeFocus(event, nodeId);
287
- }
288
- }
289
- };
290
- const focusNextNode = (event, nodeId) => focus(event, getNextNode(nodeId));
291
- const focusPreviousNode = (event, nodeId) => focus(event, getPreviousNode(nodeId));
292
- const focusFirstNode = event => focus(event, getFirstNode());
293
- const focusLastNode = event => focus(event, getLastNode());
294
- const focusByFirstCharacter = (event, nodeId, firstChar) => {
295
- let start;
296
- let index;
297
- const lowercaseChar = firstChar.toLowerCase();
298
- const firstCharIds = [];
299
- const firstChars = [];
300
- // This really only works since the ids are strings
301
- Object.keys(firstCharMap.current).forEach(mapNodeId => {
302
- const map = nodeMap.current[mapNodeId];
303
- const visible = map.parentId ? isExpanded(map.parentId) : true;
304
- const shouldBeSkipped = disabledItemsFocusable ? false : isDisabled(mapNodeId);
305
- if (visible && !shouldBeSkipped) {
306
- firstCharIds.push(mapNodeId);
307
- firstChars.push(firstCharMap.current[mapNodeId]);
308
- }
309
- });
310
-
311
- // Get start index for search based on position of currentItem
312
- start = firstCharIds.indexOf(nodeId) + 1;
313
- if (start >= firstCharIds.length) {
314
- start = 0;
315
- }
316
-
317
- // Check remaining slots in the menu
318
- index = findNextFirstChar(firstChars, start, lowercaseChar);
319
-
320
- // If not found in remaining slots, check from beginning
321
- if (index === -1) {
322
- index = findNextFirstChar(firstChars, 0, lowercaseChar);
323
- }
324
-
325
- // If match was found...
326
- if (index > -1) {
327
- focus(event, firstCharIds[index]);
328
- }
329
- };
330
-
331
- /*
332
- * Expansion Helpers
333
- */
334
-
335
- const toggleExpansion = (event, value = focusedNodeId) => {
336
- if (value == null) {
337
- return;
338
- }
339
- let newExpanded;
340
- if (expanded.indexOf(value) !== -1) {
341
- newExpanded = expanded.filter(id => id !== value);
342
- } else {
343
- newExpanded = [value].concat(expanded);
344
- }
345
- if (onNodeToggle) {
346
- onNodeToggle(event, newExpanded);
347
- }
348
- setExpandedState(newExpanded);
349
- };
350
- const expandAllSiblings = (event, nodeId) => {
351
- const map = nodeMap.current[nodeId];
352
- const siblings = getChildrenIds(map.parentId);
353
- const diff = siblings.filter(child => isExpandable(child) && !isExpanded(child));
354
- const newExpanded = expanded.concat(diff);
355
- if (diff.length > 0) {
356
- setExpandedState(newExpanded);
357
- if (onNodeToggle) {
358
- onNodeToggle(event, newExpanded);
359
- }
360
- }
361
- };
362
-
363
- /*
364
- * Selection Helpers
365
- */
366
-
367
- const lastSelectedNode = React.useRef(null);
368
- const lastSelectionWasRange = React.useRef(false);
369
- const currentRangeSelection = React.useRef([]);
370
- const handleRangeArrowSelect = (event, nodes) => {
371
- let base = selected.slice();
372
- const {
373
- start,
374
- next,
375
- current
376
- } = nodes;
377
- if (!next || !current) {
378
- return;
379
- }
380
- if (currentRangeSelection.current.indexOf(current) === -1) {
381
- currentRangeSelection.current = [];
382
- }
383
- if (lastSelectionWasRange.current) {
384
- if (currentRangeSelection.current.indexOf(next) !== -1) {
385
- base = base.filter(id => id === start || id !== current);
386
- currentRangeSelection.current = currentRangeSelection.current.filter(id => id === start || id !== current);
387
- } else {
388
- base.push(next);
389
- currentRangeSelection.current.push(next);
390
- }
391
- } else {
392
- base.push(next);
393
- currentRangeSelection.current.push(current, next);
394
- }
395
- if (onNodeSelect) {
396
- onNodeSelect(event, base);
397
- }
398
- setSelectedState(base);
399
- };
400
- const handleRangeSelect = (event, nodes) => {
401
- let base = selected.slice();
402
- const {
403
- start,
404
- end
405
- } = nodes;
406
- // If last selection was a range selection ignore nodes that were selected.
407
- if (lastSelectionWasRange.current) {
408
- base = base.filter(id => currentRangeSelection.current.indexOf(id) === -1);
409
- }
410
- let range = getNodesInRange(start, end);
411
- range = range.filter(node => !isDisabled(node));
412
- currentRangeSelection.current = range;
413
- let newSelected = base.concat(range);
414
- newSelected = newSelected.filter((id, i) => newSelected.indexOf(id) === i);
415
- if (onNodeSelect) {
416
- onNodeSelect(event, newSelected);
417
- }
418
- setSelectedState(newSelected);
419
- };
420
- const handleMultipleSelect = (event, nodeId) => {
421
- if (!Array.isArray(selected)) {
422
- return;
423
- }
424
- let newSelected;
425
- if (selected.indexOf(nodeId) !== -1) {
426
- newSelected = selected.filter(id => id !== nodeId);
427
- } else {
428
- newSelected = [nodeId].concat(selected);
429
- }
430
- if (onNodeSelect) {
431
- onNodeSelect(event, newSelected);
432
- }
433
- setSelectedState(newSelected);
434
- };
435
- const handleSingleSelect = (event, nodeId) => {
436
- const newSelected = multiSelect ? [nodeId] : nodeId;
437
- if (onNodeSelect) {
438
- onNodeSelect(event, newSelected);
439
- }
440
- setSelectedState(newSelected);
441
- };
442
- const selectNode = (event, nodeId, multiple = false) => {
443
- if (nodeId) {
444
- if (multiple) {
445
- handleMultipleSelect(event, nodeId);
446
- } else {
447
- handleSingleSelect(event, nodeId);
448
- }
449
- lastSelectedNode.current = nodeId;
450
- lastSelectionWasRange.current = false;
451
- currentRangeSelection.current = [];
452
- return true;
453
- }
454
- return false;
455
- };
456
- const selectRange = (event, nodes, stacked = false) => {
457
- const {
458
- start = lastSelectedNode.current,
459
- end,
460
- current
461
- } = nodes;
462
- if (stacked) {
463
- handleRangeArrowSelect(event, {
464
- start,
465
- next: end,
466
- current
467
- });
468
- } else if (start != null && end != null) {
469
- handleRangeSelect(event, {
470
- start,
471
- end
472
- });
473
- }
474
- lastSelectionWasRange.current = true;
475
- };
476
- const rangeSelectToFirst = (event, id) => {
477
- if (!lastSelectedNode.current) {
478
- lastSelectedNode.current = id;
479
- }
480
- const start = lastSelectionWasRange.current ? lastSelectedNode.current : id;
481
- selectRange(event, {
482
- start,
483
- end: getFirstNode()
484
- });
485
- };
486
- const rangeSelectToLast = (event, id) => {
487
- if (!lastSelectedNode.current) {
488
- lastSelectedNode.current = id;
489
- }
490
- const start = lastSelectionWasRange.current ? lastSelectedNode.current : id;
491
- selectRange(event, {
492
- start,
493
- end: getLastNode()
494
- });
495
- };
496
- const selectNextNode = (event, id) => {
497
- if (!isDisabled(getNextNode(id))) {
498
- selectRange(event, {
499
- end: getNextNode(id),
500
- current: id
501
- }, true);
502
- }
503
- };
504
- const selectPreviousNode = (event, id) => {
505
- if (!isDisabled(getPreviousNode(id))) {
506
- selectRange(event, {
507
- end: getPreviousNode(id),
508
- current: id
509
- }, true);
510
- }
511
- };
512
- const selectAllNodes = event => {
513
- selectRange(event, {
514
- start: getFirstNode(),
515
- end: getLastNode()
516
- });
517
- };
518
-
519
- /*
520
- * Mapping Helpers
521
- */
522
- const registerNode = React.useCallback(node => {
523
- const {
524
- id,
525
- index,
526
- parentId,
527
- expandable,
528
- idAttribute,
529
- disabled
530
- } = node;
531
- nodeMap.current[id] = {
532
- id,
533
- index,
534
- parentId,
535
- expandable,
536
- idAttribute,
537
- disabled
538
- };
539
- }, []);
540
- const unregisterNode = React.useCallback(nodeId => {
541
- const newMap = _extends({}, nodeMap.current);
542
- delete newMap[nodeId];
543
- nodeMap.current = newMap;
544
- setFocusedNodeId(oldFocusedNodeId => {
545
- if (oldFocusedNodeId === nodeId && treeRef.current === ownerDocument(treeRef.current).activeElement) {
546
- return getChildrenIds(null)[0];
547
- }
548
- return oldFocusedNodeId;
549
- });
550
- }, []);
551
- const mapFirstChar = React.useCallback((nodeId, firstChar) => {
552
- firstCharMap.current[nodeId] = firstChar;
553
- }, []);
554
- const unMapFirstChar = React.useCallback(nodeId => {
555
- const newMap = _extends({}, firstCharMap.current);
556
- delete newMap[nodeId];
557
- firstCharMap.current = newMap;
558
- }, []);
559
-
560
- /**
561
- * Event handlers and Navigation
562
- */
563
-
564
- const handleNextArrow = event => {
565
- if (focusedNodeId != null && isExpandable(focusedNodeId)) {
566
- if (isExpanded(focusedNodeId)) {
567
- focusNextNode(event, focusedNodeId);
568
- } else if (!isDisabled(focusedNodeId)) {
569
- toggleExpansion(event);
570
- }
571
- }
572
- return true;
573
- };
574
- const handlePreviousArrow = event => {
575
- if (focusedNodeId == null) {
576
- return false;
577
- }
578
- if (isExpanded(focusedNodeId) && !isDisabled(focusedNodeId)) {
579
- toggleExpansion(event, focusedNodeId);
580
- return true;
581
- }
582
- const parent = getParent(focusedNodeId);
583
- if (parent) {
584
- focus(event, parent);
585
- return true;
586
- }
587
- return false;
588
- };
589
- const handleKeyDown = event => {
590
- let flag = false;
591
- const key = event.key;
592
-
593
- // If the tree is empty there will be no focused node
594
- if (event.altKey || event.currentTarget !== event.target || !focusedNodeId) {
595
- return;
596
- }
597
- const ctrlPressed = event.ctrlKey || event.metaKey;
598
- switch (key) {
599
- case ' ':
600
- if (!disableSelection && focusedNodeId != null && !isDisabled(focusedNodeId)) {
601
- if (multiSelect && event.shiftKey) {
602
- selectRange(event, {
603
- end: focusedNodeId
604
- });
605
- flag = true;
606
- } else if (multiSelect) {
607
- flag = selectNode(event, focusedNodeId, true);
608
- } else {
609
- flag = selectNode(event, focusedNodeId);
610
- }
611
- }
612
- event.stopPropagation();
613
- break;
614
- case 'Enter':
615
- if (!isDisabled(focusedNodeId)) {
616
- if (isExpandable(focusedNodeId)) {
617
- toggleExpansion(event);
618
- flag = true;
619
- } else if (multiSelect) {
620
- flag = selectNode(event, focusedNodeId, true);
621
- } else {
622
- flag = selectNode(event, focusedNodeId);
623
- }
624
- }
625
- event.stopPropagation();
626
- break;
627
- case 'ArrowDown':
628
- if (multiSelect && event.shiftKey && !disableSelection) {
629
- selectNextNode(event, focusedNodeId);
630
- }
631
- focusNextNode(event, focusedNodeId);
632
- flag = true;
633
- break;
634
- case 'ArrowUp':
635
- if (multiSelect && event.shiftKey && !disableSelection) {
636
- selectPreviousNode(event, focusedNodeId);
637
- }
638
- focusPreviousNode(event, focusedNodeId);
639
- flag = true;
640
- break;
641
- case 'ArrowRight':
642
- if (isRtl) {
643
- flag = handlePreviousArrow(event);
644
- } else {
645
- flag = handleNextArrow(event);
646
- }
647
- break;
648
- case 'ArrowLeft':
649
- if (isRtl) {
650
- flag = handleNextArrow(event);
651
- } else {
652
- flag = handlePreviousArrow(event);
653
- }
654
- break;
655
- case 'Home':
656
- if (multiSelect && ctrlPressed && event.shiftKey && !disableSelection && !isDisabled(focusedNodeId)) {
657
- rangeSelectToFirst(event, focusedNodeId);
658
- }
659
- focusFirstNode(event);
660
- flag = true;
661
- break;
662
- case 'End':
663
- if (multiSelect && ctrlPressed && event.shiftKey && !disableSelection && !isDisabled(focusedNodeId)) {
664
- rangeSelectToLast(event, focusedNodeId);
665
- }
666
- focusLastNode(event);
667
- flag = true;
668
- break;
669
- default:
670
- if (key === '*') {
671
- expandAllSiblings(event, focusedNodeId);
672
- flag = true;
673
- } else if (multiSelect && ctrlPressed && key.toLowerCase() === 'a' && !disableSelection) {
674
- selectAllNodes(event);
675
- flag = true;
676
- } else if (!ctrlPressed && !event.shiftKey && isPrintableCharacter(key)) {
677
- focusByFirstCharacter(event, focusedNodeId, key);
678
- flag = true;
679
- }
680
- }
681
- if (flag) {
682
- event.preventDefault();
683
- event.stopPropagation();
684
- }
685
- if (onKeyDown) {
686
- onKeyDown(event);
687
- }
688
- };
689
- const handleFocus = event => {
690
- // if the event bubbled (which is React specific) we don't want to steal focus
691
- if (event.target === event.currentTarget) {
692
- const firstSelected = Array.isArray(selected) ? selected[0] : selected;
693
- focus(event, firstSelected || getNavigableChildrenIds(null)[0]);
694
- }
695
- if (onFocus) {
696
- onFocus(event);
697
- }
698
- };
699
- const handleBlur = event => {
700
- setFocusedNodeId(null);
701
- if (onBlur) {
702
- onBlur(event);
703
- }
704
- };
705
- const activeDescendant = nodeMap.current[focusedNodeId] ? nodeMap.current[focusedNodeId].idAttribute : null;
706
- return /*#__PURE__*/_jsx(TreeViewContext.Provider, {
707
- // TODO: fix this lint error
708
- // eslint-disable-next-line react/jsx-no-constructed-context-values
709
- value: {
710
- icons: {
711
- defaultCollapseIcon,
712
- defaultExpandIcon,
713
- defaultParentIcon,
714
- defaultEndIcon
715
- },
716
- focus,
717
- toggleExpansion,
718
- isExpanded,
719
- isExpandable,
720
- isFocused,
721
- isSelected,
722
- isDisabled,
723
- selectNode: disableSelection ? noopSelection : selectNode,
724
- selectRange: disableSelection ? noopSelection : selectRange,
725
- multiSelect,
726
- disabledItemsFocusable,
727
- mapFirstChar,
728
- unMapFirstChar,
729
- registerNode,
730
- unregisterNode,
731
- treeId
732
- },
733
- children: /*#__PURE__*/_jsx(DescendantProvider, {
734
- children: /*#__PURE__*/_jsx(TreeViewRoot, _extends({
735
- role: "tree",
736
- id: treeId,
737
- "aria-activedescendant": activeDescendant != null ? activeDescendant : undefined,
738
- "aria-multiselectable": multiSelect,
739
- className: clsx(classes.root, className),
740
- tabIndex: 0,
741
- onKeyDown: handleKeyDown,
742
- onFocus: handleFocus,
743
- onBlur: handleBlur,
744
- ownerState: props
745
- }, other, {
746
- ref: handleRef,
747
- children: children
748
- }))
749
- })
102
+ return /*#__PURE__*/_jsx(TreeViewProvider, {
103
+ value: contextValue,
104
+ children: /*#__PURE__*/_jsx(TreeViewRoot, _extends({}, rootProps, {
105
+ children: children
106
+ }))
750
107
  });
751
108
  });
752
109
  process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
@@ -777,7 +134,7 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
777
134
  defaultEndIcon: PropTypes.node,
778
135
  /**
779
136
  * Expanded node ids.
780
- * Used when the item's expansion are not controlled.
137
+ * Used when the item's expansion is not controlled.
781
138
  * @default []
782
139
  */
783
140
  defaultExpanded: PropTypes.arrayOf(PropTypes.string),
@@ -795,7 +152,7 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
795
152
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
796
153
  * @default []
797
154
  */
798
- defaultSelected: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.string]),
155
+ defaultSelected: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.string]),
799
156
  /**
800
157
  * If `true`, will allow focus on disabled items.
801
158
  * @default false
@@ -808,7 +165,7 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
808
165
  disableSelection: PropTypes.bool,
809
166
  /**
810
167
  * Expanded node ids.
811
- * Used when the item's expansion are controlled.
168
+ * Used when the item's expansion is controlled.
812
169
  */
813
170
  expanded: PropTypes.arrayOf(PropTypes.string),
814
171
  /**
@@ -845,7 +202,7 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
845
202
  * Selected node ids. (Controlled)
846
203
  * When `multiSelect` is true this takes an array of strings; when false (default) a string.
847
204
  */
848
- selected: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.string]),
205
+ selected: PropTypes.any,
849
206
  /**
850
207
  * The system prop that allows defining system overrides as well as additional CSS styles.
851
208
  */