@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
@@ -0,0 +1,226 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import * as React from 'react';
3
+ import { useTheme } from '@mui/material/styles';
4
+ import useEventCallback from '@mui/utils/useEventCallback';
5
+ import { getFirstNode, getLastNode, getNextNode, getPreviousNode, populateInstance } from '../../useTreeView/useTreeView.utils';
6
+ function isPrintableCharacter(string) {
7
+ return string && string.length === 1 && string.match(/\S/);
8
+ }
9
+ function findNextFirstChar(firstChars, startIndex, char) {
10
+ for (var i = startIndex; i < firstChars.length; i += 1) {
11
+ if (char === firstChars[i]) {
12
+ return i;
13
+ }
14
+ }
15
+ return -1;
16
+ }
17
+ export var useTreeViewKeyboardNavigation = function useTreeViewKeyboardNavigation(_ref) {
18
+ var instance = _ref.instance,
19
+ params = _ref.params,
20
+ state = _ref.state;
21
+ var theme = useTheme();
22
+ var isRtl = theme.direction === 'rtl';
23
+ var firstCharMap = React.useRef({});
24
+ var mapFirstChar = useEventCallback(function (nodeId, firstChar) {
25
+ firstCharMap.current[nodeId] = firstChar;
26
+ return function () {
27
+ var newMap = _extends({}, firstCharMap.current);
28
+ delete newMap[nodeId];
29
+ firstCharMap.current = newMap;
30
+ };
31
+ });
32
+ populateInstance(instance, {
33
+ mapFirstChar: mapFirstChar
34
+ });
35
+ var handleNextArrow = function handleNextArrow(event) {
36
+ if (state.focusedNodeId != null && instance.isNodeExpandable(state.focusedNodeId)) {
37
+ if (instance.isNodeExpanded(state.focusedNodeId)) {
38
+ instance.focusNode(event, getNextNode(instance, state.focusedNodeId));
39
+ } else if (!instance.isNodeDisabled(state.focusedNodeId)) {
40
+ instance.toggleNodeExpansion(event, state.focusedNodeId);
41
+ }
42
+ }
43
+ return true;
44
+ };
45
+ var handlePreviousArrow = function handlePreviousArrow(event) {
46
+ if (state.focusedNodeId == null) {
47
+ return false;
48
+ }
49
+ if (instance.isNodeExpanded(state.focusedNodeId) && !instance.isNodeDisabled(state.focusedNodeId)) {
50
+ instance.toggleNodeExpansion(event, state.focusedNodeId);
51
+ return true;
52
+ }
53
+ var parent = instance.getNode(state.focusedNodeId).parentId;
54
+ if (parent) {
55
+ instance.focusNode(event, parent);
56
+ return true;
57
+ }
58
+ return false;
59
+ };
60
+ var focusByFirstCharacter = function focusByFirstCharacter(event, nodeId, firstChar) {
61
+ var start;
62
+ var index;
63
+ var lowercaseChar = firstChar.toLowerCase();
64
+ var firstCharIds = [];
65
+ var firstChars = [];
66
+ // This really only works since the ids are strings
67
+ Object.keys(firstCharMap.current).forEach(function (mapNodeId) {
68
+ var map = instance.getNode(mapNodeId);
69
+ var visible = map.parentId ? instance.isNodeExpanded(map.parentId) : true;
70
+ var shouldBeSkipped = params.disabledItemsFocusable ? false : instance.isNodeDisabled(mapNodeId);
71
+ if (visible && !shouldBeSkipped) {
72
+ firstCharIds.push(mapNodeId);
73
+ firstChars.push(firstCharMap.current[mapNodeId]);
74
+ }
75
+ });
76
+
77
+ // Get start index for search based on position of currentItem
78
+ start = firstCharIds.indexOf(nodeId) + 1;
79
+ if (start >= firstCharIds.length) {
80
+ start = 0;
81
+ }
82
+
83
+ // Check remaining slots in the menu
84
+ index = findNextFirstChar(firstChars, start, lowercaseChar);
85
+
86
+ // If not found in remaining slots, check from beginning
87
+ if (index === -1) {
88
+ index = findNextFirstChar(firstChars, 0, lowercaseChar);
89
+ }
90
+
91
+ // If match was found...
92
+ if (index > -1) {
93
+ instance.focusNode(event, firstCharIds[index]);
94
+ }
95
+ };
96
+ var selectNextNode = function selectNextNode(event, id) {
97
+ if (!instance.isNodeDisabled(getNextNode(instance, id))) {
98
+ instance.selectRange(event, {
99
+ end: getNextNode(instance, id),
100
+ current: id
101
+ }, true);
102
+ }
103
+ };
104
+ var selectPreviousNode = function selectPreviousNode(event, nodeId) {
105
+ if (!instance.isNodeDisabled(getPreviousNode(instance, nodeId))) {
106
+ instance.selectRange(event, {
107
+ end: getPreviousNode(instance, nodeId),
108
+ current: nodeId
109
+ }, true);
110
+ }
111
+ };
112
+ var createHandleKeyDown = function createHandleKeyDown(otherHandlers) {
113
+ return function (event) {
114
+ var _otherHandlers$onKeyD;
115
+ (_otherHandlers$onKeyD = otherHandlers.onKeyDown) == null || _otherHandlers$onKeyD.call(otherHandlers, event);
116
+ var flag = false;
117
+ var key = event.key;
118
+
119
+ // If the tree is empty there will be no focused node
120
+ if (event.altKey || event.currentTarget !== event.target || state.focusedNodeId == null) {
121
+ return;
122
+ }
123
+ var ctrlPressed = event.ctrlKey || event.metaKey;
124
+ switch (key) {
125
+ case ' ':
126
+ if (!params.disableSelection && !instance.isNodeDisabled(state.focusedNodeId)) {
127
+ flag = true;
128
+ if (params.multiSelect && event.shiftKey) {
129
+ instance.selectRange(event, {
130
+ end: state.focusedNodeId
131
+ });
132
+ } else if (params.multiSelect) {
133
+ instance.selectNode(event, state.focusedNodeId, true);
134
+ } else {
135
+ instance.selectNode(event, state.focusedNodeId);
136
+ }
137
+ }
138
+ event.stopPropagation();
139
+ break;
140
+ case 'Enter':
141
+ if (!instance.isNodeDisabled(state.focusedNodeId)) {
142
+ if (instance.isNodeExpandable(state.focusedNodeId)) {
143
+ instance.toggleNodeExpansion(event, state.focusedNodeId);
144
+ flag = true;
145
+ } else if (!params.disableSelection) {
146
+ flag = true;
147
+ if (params.multiSelect) {
148
+ instance.selectNode(event, state.focusedNodeId, true);
149
+ } else {
150
+ instance.selectNode(event, state.focusedNodeId);
151
+ }
152
+ }
153
+ }
154
+ event.stopPropagation();
155
+ break;
156
+ case 'ArrowDown':
157
+ if (params.multiSelect && event.shiftKey && !params.disableSelection) {
158
+ selectNextNode(event, state.focusedNodeId);
159
+ }
160
+ instance.focusNode(event, getNextNode(instance, state.focusedNodeId));
161
+ flag = true;
162
+ break;
163
+ case 'ArrowUp':
164
+ if (params.multiSelect && event.shiftKey && !params.disableSelection) {
165
+ selectPreviousNode(event, state.focusedNodeId);
166
+ }
167
+ instance.focusNode(event, getPreviousNode(instance, state.focusedNodeId));
168
+ flag = true;
169
+ break;
170
+ case 'ArrowRight':
171
+ if (isRtl) {
172
+ flag = handlePreviousArrow(event);
173
+ } else {
174
+ flag = handleNextArrow(event);
175
+ }
176
+ break;
177
+ case 'ArrowLeft':
178
+ if (isRtl) {
179
+ flag = handleNextArrow(event);
180
+ } else {
181
+ flag = handlePreviousArrow(event);
182
+ }
183
+ break;
184
+ case 'Home':
185
+ if (params.multiSelect && ctrlPressed && event.shiftKey && !params.disableSelection && !instance.isNodeDisabled(state.focusedNodeId)) {
186
+ instance.rangeSelectToFirst(event, state.focusedNodeId);
187
+ }
188
+ instance.focusNode(event, getFirstNode(instance));
189
+ flag = true;
190
+ break;
191
+ case 'End':
192
+ if (params.multiSelect && ctrlPressed && event.shiftKey && !params.disableSelection && !instance.isNodeDisabled(state.focusedNodeId)) {
193
+ instance.rangeSelectToLast(event, state.focusedNodeId);
194
+ }
195
+ instance.focusNode(event, getLastNode(instance));
196
+ flag = true;
197
+ break;
198
+ default:
199
+ if (key === '*') {
200
+ instance.expandAllSiblings(event, state.focusedNodeId);
201
+ flag = true;
202
+ } else if (params.multiSelect && ctrlPressed && key.toLowerCase() === 'a' && !params.disableSelection) {
203
+ instance.selectRange(event, {
204
+ start: getFirstNode(instance),
205
+ end: getLastNode(instance)
206
+ });
207
+ flag = true;
208
+ } else if (!ctrlPressed && !event.shiftKey && isPrintableCharacter(key)) {
209
+ focusByFirstCharacter(event, state.focusedNodeId, key);
210
+ flag = true;
211
+ }
212
+ }
213
+ if (flag) {
214
+ event.preventDefault();
215
+ event.stopPropagation();
216
+ }
217
+ };
218
+ };
219
+ return {
220
+ getRootProps: function getRootProps(otherHandlers) {
221
+ return {
222
+ onKeyDown: createHandleKeyDown(otherHandlers)
223
+ };
224
+ }
225
+ };
226
+ };
@@ -0,0 +1 @@
1
+ export { useTreeViewNodes } from './useTreeViewNodes';
@@ -0,0 +1,71 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import * as React from 'react';
3
+ import useEventCallback from '@mui/utils/useEventCallback';
4
+ import { populateInstance } from '../../useTreeView/useTreeView.utils';
5
+ import { publishTreeViewEvent } from '../../utils/publishTreeViewEvent';
6
+ export var useTreeViewNodes = function useTreeViewNodes(_ref) {
7
+ var instance = _ref.instance,
8
+ params = _ref.params;
9
+ var nodeMap = React.useRef({});
10
+ var getNode = React.useCallback(function (nodeId) {
11
+ return nodeMap.current[nodeId];
12
+ }, []);
13
+ var insertNode = React.useCallback(function (node) {
14
+ nodeMap.current[node.id] = node;
15
+ }, []);
16
+ var removeNode = React.useCallback(function (nodeId) {
17
+ var newMap = _extends({}, nodeMap.current);
18
+ delete newMap[nodeId];
19
+ nodeMap.current = newMap;
20
+ publishTreeViewEvent(instance, 'removeNode', {
21
+ id: nodeId
22
+ });
23
+ }, [instance]);
24
+ var isNodeDisabled = React.useCallback(function (nodeId) {
25
+ if (nodeId == null) {
26
+ return false;
27
+ }
28
+ var node = instance.getNode(nodeId);
29
+
30
+ // This can be called before the node has been added to the node map.
31
+ if (!node) {
32
+ return false;
33
+ }
34
+ if (node.disabled) {
35
+ return true;
36
+ }
37
+ while (node.parentId != null) {
38
+ node = instance.getNode(node.parentId);
39
+ if (node.disabled) {
40
+ return true;
41
+ }
42
+ }
43
+ return false;
44
+ }, [instance]);
45
+ var getChildrenIds = useEventCallback(function (nodeId) {
46
+ return Object.values(nodeMap.current).filter(function (node) {
47
+ return node.parentId === nodeId;
48
+ }).sort(function (a, b) {
49
+ return a.index - b.index;
50
+ }).map(function (child) {
51
+ return child.id;
52
+ });
53
+ });
54
+ var getNavigableChildrenIds = function getNavigableChildrenIds(nodeId) {
55
+ var childrenIds = instance.getChildrenIds(nodeId);
56
+ if (!params.disabledItemsFocusable) {
57
+ childrenIds = childrenIds.filter(function (node) {
58
+ return !instance.isNodeDisabled(node);
59
+ });
60
+ }
61
+ return childrenIds;
62
+ };
63
+ populateInstance(instance, {
64
+ getNode: getNode,
65
+ updateNode: insertNode,
66
+ removeNode: removeNode,
67
+ getChildrenIds: getChildrenIds,
68
+ getNavigableChildrenIds: getNavigableChildrenIds,
69
+ isNodeDisabled: isNodeDisabled
70
+ });
71
+ };
@@ -0,0 +1 @@
1
+ export { useTreeViewSelection } from './useTreeViewSelection';
@@ -0,0 +1,188 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
+ import * as React from 'react';
4
+ import { populateInstance, getNextNode, getFirstNode, getLastNode } from '../../useTreeView/useTreeView.utils';
5
+ import { findOrderInTremauxTree } from './useTreeViewSelection.utils';
6
+ export var useTreeViewSelection = function useTreeViewSelection(_ref) {
7
+ var instance = _ref.instance,
8
+ params = _ref.params,
9
+ models = _ref.models;
10
+ var lastSelectedNode = React.useRef(null);
11
+ var lastSelectionWasRange = React.useRef(false);
12
+ var currentRangeSelection = React.useRef([]);
13
+ var isNodeSelected = function isNodeSelected(nodeId) {
14
+ return Array.isArray(models.selected.value) ? models.selected.value.indexOf(nodeId) !== -1 : models.selected.value === nodeId;
15
+ };
16
+ var selectNode = function selectNode(event, nodeId) {
17
+ var multiple = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
18
+ if (params.disableSelection) {
19
+ return;
20
+ }
21
+ if (multiple) {
22
+ if (Array.isArray(models.selected.value)) {
23
+ var newSelected;
24
+ if (models.selected.value.indexOf(nodeId) !== -1) {
25
+ newSelected = models.selected.value.filter(function (id) {
26
+ return id !== nodeId;
27
+ });
28
+ } else {
29
+ newSelected = [nodeId].concat(models.selected.value);
30
+ }
31
+ if (params.onNodeSelect) {
32
+ params.onNodeSelect(event, newSelected);
33
+ }
34
+ models.selected.setValue(newSelected);
35
+ }
36
+ } else {
37
+ var _newSelected = params.multiSelect ? [nodeId] : nodeId;
38
+ if (params.onNodeSelect) {
39
+ params.onNodeSelect(event, _newSelected);
40
+ }
41
+ models.selected.setValue(_newSelected);
42
+ }
43
+ lastSelectedNode.current = nodeId;
44
+ lastSelectionWasRange.current = false;
45
+ currentRangeSelection.current = [];
46
+ };
47
+ var getNodesInRange = function getNodesInRange(nodeAId, nodeBId) {
48
+ var _findOrderInTremauxTr = findOrderInTremauxTree(instance, nodeAId, nodeBId),
49
+ _findOrderInTremauxTr2 = _slicedToArray(_findOrderInTremauxTr, 2),
50
+ first = _findOrderInTremauxTr2[0],
51
+ last = _findOrderInTremauxTr2[1];
52
+ var nodes = [first];
53
+ var current = first;
54
+ while (current !== last) {
55
+ current = getNextNode(instance, current);
56
+ nodes.push(current);
57
+ }
58
+ return nodes;
59
+ };
60
+ var handleRangeArrowSelect = function handleRangeArrowSelect(event, nodes) {
61
+ var base = models.selected.value.slice();
62
+ var start = nodes.start,
63
+ next = nodes.next,
64
+ current = nodes.current;
65
+ if (!next || !current) {
66
+ return;
67
+ }
68
+ if (currentRangeSelection.current.indexOf(current) === -1) {
69
+ currentRangeSelection.current = [];
70
+ }
71
+ if (lastSelectionWasRange.current) {
72
+ if (currentRangeSelection.current.indexOf(next) !== -1) {
73
+ base = base.filter(function (id) {
74
+ return id === start || id !== current;
75
+ });
76
+ currentRangeSelection.current = currentRangeSelection.current.filter(function (id) {
77
+ return id === start || id !== current;
78
+ });
79
+ } else {
80
+ base.push(next);
81
+ currentRangeSelection.current.push(next);
82
+ }
83
+ } else {
84
+ base.push(next);
85
+ currentRangeSelection.current.push(current, next);
86
+ }
87
+ if (params.onNodeSelect) {
88
+ params.onNodeSelect(event, base);
89
+ }
90
+ models.selected.setValue(base);
91
+ };
92
+ var handleRangeSelect = function handleRangeSelect(event, nodes) {
93
+ var base = models.selected.value.slice();
94
+ var start = nodes.start,
95
+ end = nodes.end;
96
+ // If last selection was a range selection ignore nodes that were selected.
97
+ if (lastSelectionWasRange.current) {
98
+ base = base.filter(function (id) {
99
+ return currentRangeSelection.current.indexOf(id) === -1;
100
+ });
101
+ }
102
+ var range = getNodesInRange(start, end);
103
+ range = range.filter(function (node) {
104
+ return !instance.isNodeDisabled(node);
105
+ });
106
+ currentRangeSelection.current = range;
107
+ var newSelected = base.concat(range);
108
+ newSelected = newSelected.filter(function (id, i) {
109
+ return newSelected.indexOf(id) === i;
110
+ });
111
+ if (params.onNodeSelect) {
112
+ params.onNodeSelect(event, newSelected);
113
+ }
114
+ models.selected.setValue(newSelected);
115
+ };
116
+ var selectRange = function selectRange(event, nodes) {
117
+ var stacked = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
118
+ if (params.disableSelection) {
119
+ return;
120
+ }
121
+ var _nodes$start = nodes.start,
122
+ start = _nodes$start === void 0 ? lastSelectedNode.current : _nodes$start,
123
+ end = nodes.end,
124
+ current = nodes.current;
125
+ if (stacked) {
126
+ handleRangeArrowSelect(event, {
127
+ start: start,
128
+ next: end,
129
+ current: current
130
+ });
131
+ } else if (start != null && end != null) {
132
+ handleRangeSelect(event, {
133
+ start: start,
134
+ end: end
135
+ });
136
+ }
137
+ lastSelectionWasRange.current = true;
138
+ };
139
+ var rangeSelectToFirst = function rangeSelectToFirst(event, nodeId) {
140
+ if (!lastSelectedNode.current) {
141
+ lastSelectedNode.current = nodeId;
142
+ }
143
+ var start = lastSelectionWasRange.current ? lastSelectedNode.current : nodeId;
144
+ instance.selectRange(event, {
145
+ start: start,
146
+ end: getFirstNode(instance)
147
+ });
148
+ };
149
+ var rangeSelectToLast = function rangeSelectToLast(event, nodeId) {
150
+ if (!lastSelectedNode.current) {
151
+ lastSelectedNode.current = nodeId;
152
+ }
153
+ var start = lastSelectionWasRange.current ? lastSelectedNode.current : nodeId;
154
+ instance.selectRange(event, {
155
+ start: start,
156
+ end: getLastNode(instance)
157
+ });
158
+ };
159
+ populateInstance(instance, {
160
+ isNodeSelected: isNodeSelected,
161
+ selectNode: selectNode,
162
+ selectRange: selectRange,
163
+ rangeSelectToLast: rangeSelectToLast,
164
+ rangeSelectToFirst: rangeSelectToFirst
165
+ });
166
+ return {
167
+ getRootProps: function getRootProps() {
168
+ return {
169
+ 'aria-multiselectable': params.multiSelect
170
+ };
171
+ }
172
+ };
173
+ };
174
+ useTreeViewSelection.models = {
175
+ selected: {
176
+ controlledProp: 'selected',
177
+ defaultProp: 'defaultSelected'
178
+ }
179
+ };
180
+ var DEFAULT_SELECTED = [];
181
+ useTreeViewSelection.getDefaultizedParams = function (params) {
182
+ var _params$disableSelect, _params$multiSelect, _params$defaultSelect;
183
+ return _extends({}, params, {
184
+ disableSelection: (_params$disableSelect = params.disableSelection) != null ? _params$disableSelect : false,
185
+ multiSelect: (_params$multiSelect = params.multiSelect) != null ? _params$multiSelect : false,
186
+ defaultSelected: (_params$defaultSelect = params.defaultSelected) != null ? _params$defaultSelect : params.multiSelect ? DEFAULT_SELECTED : null
187
+ });
188
+ };
@@ -0,0 +1,55 @@
1
+ /**
2
+ * This is used to determine the start and end of a selection range so
3
+ * we can get the nodes between the two border nodes.
4
+ *
5
+ * It finds the nodes' common ancestor using
6
+ * a naive implementation of a lowest common ancestor algorithm
7
+ * (https://en.wikipedia.org/wiki/Lowest_common_ancestor).
8
+ * Then compares the ancestor's 2 children that are ancestors of nodeA and NodeB
9
+ * so we can compare their indexes to work out which node comes first in a depth first search.
10
+ * (https://en.wikipedia.org/wiki/Depth-first_search)
11
+ *
12
+ * Another way to put it is which node is shallower in a trémaux tree
13
+ * https://en.wikipedia.org/wiki/Tr%C3%A9maux_tree
14
+ */
15
+ export var findOrderInTremauxTree = function findOrderInTremauxTree(instance, nodeAId, nodeBId) {
16
+ if (nodeAId === nodeBId) {
17
+ return [nodeAId, nodeBId];
18
+ }
19
+ var nodeA = instance.getNode(nodeAId);
20
+ var nodeB = instance.getNode(nodeBId);
21
+ if (nodeA.parentId === nodeB.id || nodeB.parentId === nodeA.id) {
22
+ return nodeB.parentId === nodeA.id ? [nodeA.id, nodeB.id] : [nodeB.id, nodeA.id];
23
+ }
24
+ var aFamily = [nodeA.id];
25
+ var bFamily = [nodeB.id];
26
+ var aAncestor = nodeA.parentId;
27
+ var bAncestor = nodeB.parentId;
28
+ var aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;
29
+ var bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;
30
+ var continueA = true;
31
+ var continueB = true;
32
+ while (!bAncestorIsCommon && !aAncestorIsCommon) {
33
+ if (continueA) {
34
+ aFamily.push(aAncestor);
35
+ aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;
36
+ continueA = aAncestor !== null;
37
+ if (!aAncestorIsCommon && continueA) {
38
+ aAncestor = instance.getNode(aAncestor).parentId;
39
+ }
40
+ }
41
+ if (continueB && !aAncestorIsCommon) {
42
+ bFamily.push(bAncestor);
43
+ bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;
44
+ continueB = bAncestor !== null;
45
+ if (!bAncestorIsCommon && continueB) {
46
+ bAncestor = instance.getNode(bAncestor).parentId;
47
+ }
48
+ }
49
+ }
50
+ var commonAncestor = aAncestorIsCommon ? aAncestor : bAncestor;
51
+ var ancestorFamily = instance.getChildrenIds(commonAncestor);
52
+ var aSide = aFamily[aFamily.indexOf(commonAncestor) - 1];
53
+ var bSide = bFamily[bFamily.indexOf(commonAncestor) - 1];
54
+ return ancestorFamily.indexOf(aSide) < ancestorFamily.indexOf(bSide) ? [nodeAId, nodeBId] : [nodeBId, nodeAId];
55
+ };
@@ -0,0 +1 @@
1
+ export { useTreeView } from './useTreeView';
@@ -0,0 +1,71 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
4
+ import * as React from 'react';
5
+ import useForkRef from '@mui/utils/useForkRef';
6
+ import { DEFAULT_TREE_VIEW_CONTEXT_VALUE } from '../TreeViewProvider/TreeViewContext';
7
+ import { useTreeViewModels } from './useTreeViewModels';
8
+ import { TREE_VIEW_CORE_PLUGINS } from '../corePlugins';
9
+ export var useTreeView = function useTreeView(inParams) {
10
+ var plugins = [].concat(_toConsumableArray(TREE_VIEW_CORE_PLUGINS), _toConsumableArray(inParams.plugins));
11
+ var params = plugins.reduce(function (acc, plugin) {
12
+ if (plugin.getDefaultizedParams) {
13
+ return plugin.getDefaultizedParams(acc);
14
+ }
15
+ return acc;
16
+ }, inParams);
17
+ var models = useTreeViewModels(plugins, params);
18
+ var instanceRef = React.useRef({});
19
+ var instance = instanceRef.current;
20
+ var innerRootRef = React.useRef(null);
21
+ var handleRootRef = useForkRef(innerRootRef, inParams.rootRef);
22
+ var _React$useState = React.useState(function () {
23
+ var temp = {};
24
+ plugins.forEach(function (plugin) {
25
+ if (plugin.getInitialState) {
26
+ _extends(temp, plugin.getInitialState(params));
27
+ }
28
+ });
29
+ return temp;
30
+ }),
31
+ _React$useState2 = _slicedToArray(_React$useState, 2),
32
+ state = _React$useState2[0],
33
+ setState = _React$useState2[1];
34
+ var rootPropsGetters = [];
35
+ var contextValue = DEFAULT_TREE_VIEW_CONTEXT_VALUE;
36
+ var runPlugin = function runPlugin(plugin) {
37
+ var pluginResponse = plugin({
38
+ instance: instance,
39
+ params: params,
40
+ state: state,
41
+ setState: setState,
42
+ rootRef: innerRootRef,
43
+ models: models
44
+ }) || {};
45
+ if (pluginResponse.getRootProps) {
46
+ rootPropsGetters.push(pluginResponse.getRootProps);
47
+ }
48
+ if (pluginResponse.contextValue) {
49
+ contextValue = pluginResponse.contextValue;
50
+ }
51
+ };
52
+ plugins.forEach(runPlugin);
53
+ var getRootProps = function getRootProps() {
54
+ var otherHandlers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
55
+ var rootProps = _extends({
56
+ role: 'tree',
57
+ tabIndex: 0
58
+ }, otherHandlers, {
59
+ ref: handleRootRef
60
+ });
61
+ rootPropsGetters.forEach(function (rootPropsGetter) {
62
+ _extends(rootProps, rootPropsGetter(otherHandlers));
63
+ });
64
+ return rootProps;
65
+ };
66
+ return {
67
+ getRootProps: getRootProps,
68
+ rootRef: handleRootRef,
69
+ contextValue: contextValue
70
+ };
71
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,46 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ export var getPreviousNode = function getPreviousNode(instance, nodeId) {
3
+ var node = instance.getNode(nodeId);
4
+ var siblings = instance.getNavigableChildrenIds(node.parentId);
5
+ var nodeIndex = siblings.indexOf(nodeId);
6
+ if (nodeIndex === 0) {
7
+ return node.parentId;
8
+ }
9
+ var currentNode = siblings[nodeIndex - 1];
10
+ while (instance.isNodeExpanded(currentNode) && instance.getNavigableChildrenIds(currentNode).length > 0) {
11
+ currentNode = instance.getNavigableChildrenIds(currentNode).pop();
12
+ }
13
+ return currentNode;
14
+ };
15
+ export var getNextNode = function getNextNode(instance, nodeId) {
16
+ // If expanded get first child
17
+ if (instance.isNodeExpanded(nodeId) && instance.getNavigableChildrenIds(nodeId).length > 0) {
18
+ return instance.getNavigableChildrenIds(nodeId)[0];
19
+ }
20
+ var node = instance.getNode(nodeId);
21
+ while (node != null) {
22
+ // Try to get next sibling
23
+ var siblings = instance.getNavigableChildrenIds(node.parentId);
24
+ var nextSibling = siblings[siblings.indexOf(node.id) + 1];
25
+ if (nextSibling) {
26
+ return nextSibling;
27
+ }
28
+
29
+ // If the sibling does not exist, go up a level to the parent and try again.
30
+ node = instance.getNode(node.parentId);
31
+ }
32
+ return null;
33
+ };
34
+ export var getLastNode = function getLastNode(instance) {
35
+ var lastNode = instance.getNavigableChildrenIds(null).pop();
36
+ while (instance.isNodeExpanded(lastNode)) {
37
+ lastNode = instance.getNavigableChildrenIds(lastNode).pop();
38
+ }
39
+ return lastNode;
40
+ };
41
+ export var getFirstNode = function getFirstNode(instance) {
42
+ return instance.getNavigableChildrenIds(null)[0];
43
+ };
44
+ export var populateInstance = function populateInstance(instance, methods) {
45
+ _extends(instance, methods);
46
+ };