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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. package/CHANGELOG.md +167 -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 +89 -0
  59. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +27 -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 +99 -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 +84 -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 +94 -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,23 @@
1
+ import * as React from 'react';
2
+ import type { TreeViewAnyPluginSignature } from './plugin';
3
+ import type { MergePluginsProperty } from './helpers';
4
+ export interface TreeViewNode {
5
+ id: string;
6
+ idAttribute: string | undefined;
7
+ index: number;
8
+ parentId: string | null;
9
+ expandable: boolean;
10
+ disabled: boolean | undefined;
11
+ }
12
+ export interface TreeViewItemRange {
13
+ start?: string | null;
14
+ end?: string | null;
15
+ next?: string | null;
16
+ current?: string;
17
+ }
18
+ export interface TreeViewModel<TValue> {
19
+ name: string;
20
+ value: TValue;
21
+ setValue: React.Dispatch<React.SetStateAction<TValue>>;
22
+ }
23
+ export type TreeViewInstance<TSignatures extends readonly TreeViewAnyPluginSignature[]> = MergePluginsProperty<TSignatures, 'instance'>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ import { UseTreeViewNodesParameters } from './useTreeViewNodes';
2
+ import { UseTreeViewExpansionParameters } from './useTreeViewExpansion';
3
+ import { UseTreeViewSelectionParameters } from './useTreeViewSelection';
4
+ import { UseTreeViewFocusParameters } from './useTreeViewFocus';
5
+ import { UseTreeViewContextValueBuilderParameters } from './useTreeViewContextValueBuilder';
6
+ import { ConvertPluginsIntoSignatures } from '../models';
7
+ export declare const DEFAULT_TREE_VIEW_PLUGINS: readonly [import("../models").TreeViewPlugin<import("./useTreeViewNodes").UseTreeViewNodesSignature>, import("../models").TreeViewPlugin<import("./useTreeViewExpansion").UseTreeViewExpansionSignature>, import("../models").TreeViewPlugin<import("./useTreeViewSelection").UseTreeViewSelectionSignature<any>>, import("../models").TreeViewPlugin<import("./useTreeViewFocus").UseTreeViewFocusSignature>, import("../models").TreeViewPlugin<import("./useTreeViewKeyboardNavigation").UseTreeViewKeyboardNavigationSignature>, import("../models").TreeViewPlugin<import("./useTreeViewContextValueBuilder").UseTreeViewContextValueBuilderSignature>];
8
+ export type DefaultTreeViewPlugins = ConvertPluginsIntoSignatures<typeof DEFAULT_TREE_VIEW_PLUGINS>;
9
+ export interface DefaultTreeViewPluginParameters<Multiple extends boolean | undefined> extends UseTreeViewNodesParameters, UseTreeViewExpansionParameters, UseTreeViewFocusParameters, UseTreeViewSelectionParameters<Multiple>, UseTreeViewContextValueBuilderParameters {
10
+ }
@@ -0,0 +1,9 @@
1
+ import { useTreeViewNodes } from './useTreeViewNodes';
2
+ import { useTreeViewExpansion } from './useTreeViewExpansion';
3
+ import { useTreeViewSelection } from './useTreeViewSelection';
4
+ import { useTreeViewFocus } from './useTreeViewFocus';
5
+ import { useTreeViewKeyboardNavigation } from './useTreeViewKeyboardNavigation';
6
+ import { useTreeViewContextValueBuilder } from './useTreeViewContextValueBuilder';
7
+ export const DEFAULT_TREE_VIEW_PLUGINS = [useTreeViewNodes, useTreeViewExpansion, useTreeViewSelection, useTreeViewFocus, useTreeViewKeyboardNavigation, useTreeViewContextValueBuilder];
8
+
9
+ // We can't infer this type from the plugin, otherwise we would lose the generics.
@@ -0,0 +1,2 @@
1
+ export { DEFAULT_TREE_VIEW_PLUGINS } from './defaultPlugins';
2
+ export type { DefaultTreeViewPlugins } from './defaultPlugins';
@@ -0,0 +1 @@
1
+ export { DEFAULT_TREE_VIEW_PLUGINS } from './defaultPlugins';
@@ -0,0 +1,2 @@
1
+ export { useTreeViewContextValueBuilder } from './useTreeViewContextValueBuilder';
2
+ export type { UseTreeViewContextValueBuilderSignature, UseTreeViewContextValueBuilderParameters, UseTreeViewContextValueBuilderDefaultizedParameters, } from './useTreeViewContextValueBuilder.types';
@@ -0,0 +1 @@
1
+ export { useTreeViewContextValueBuilder } from './useTreeViewContextValueBuilder';
@@ -0,0 +1,3 @@
1
+ import { TreeViewPlugin } from '../../models';
2
+ import { UseTreeViewContextValueBuilderSignature } from './useTreeViewContextValueBuilder.types';
3
+ export declare const useTreeViewContextValueBuilder: TreeViewPlugin<UseTreeViewContextValueBuilderSignature>;
@@ -0,0 +1,24 @@
1
+ import useId from '@mui/utils/useId';
2
+ export const useTreeViewContextValueBuilder = ({
3
+ instance,
4
+ params
5
+ }) => {
6
+ const treeId = useId(params.id);
7
+ return {
8
+ getRootProps: () => ({
9
+ id: treeId
10
+ }),
11
+ contextValue: {
12
+ treeId,
13
+ instance: instance,
14
+ multiSelect: params.multiSelect,
15
+ disabledItemsFocusable: params.disabledItemsFocusable,
16
+ icons: {
17
+ defaultCollapseIcon: params.defaultCollapseIcon,
18
+ defaultEndIcon: params.defaultEndIcon,
19
+ defaultExpandIcon: params.defaultExpandIcon,
20
+ defaultParentIcon: params.defaultParentIcon
21
+ }
22
+ }
23
+ };
24
+ };
@@ -0,0 +1,34 @@
1
+ import * as React from 'react';
2
+ import { TreeViewPluginSignature } from '../../models';
3
+ import { UseTreeViewNodesSignature } from '../useTreeViewNodes';
4
+ import { UseTreeViewSelectionSignature } from '../useTreeViewSelection';
5
+ export interface UseTreeViewContextValueBuilderParameters {
6
+ /**
7
+ * This prop is used to help implement the accessibility logic.
8
+ * If you don't provide this prop. It falls back to a randomly generated id.
9
+ */
10
+ id?: string;
11
+ /**
12
+ * The default icon used to collapse the node.
13
+ */
14
+ defaultCollapseIcon?: React.ReactNode;
15
+ /**
16
+ * The default icon displayed next to a end node. This is applied to all
17
+ * tree nodes and can be overridden by the TreeItem `icon` prop.
18
+ */
19
+ defaultEndIcon?: React.ReactNode;
20
+ /**
21
+ * The default icon used to expand the node.
22
+ */
23
+ defaultExpandIcon?: React.ReactNode;
24
+ /**
25
+ * The default icon displayed next to a parent node. This is applied to all
26
+ * parent nodes and can be overridden by the TreeItem `icon` prop.
27
+ */
28
+ defaultParentIcon?: React.ReactNode;
29
+ }
30
+ export type UseTreeViewContextValueBuilderDefaultizedParameters = UseTreeViewContextValueBuilderParameters;
31
+ export type UseTreeViewContextValueBuilderSignature = TreeViewPluginSignature<UseTreeViewContextValueBuilderParameters, UseTreeViewContextValueBuilderDefaultizedParameters, {}, {}, {}, never, [
32
+ UseTreeViewNodesSignature,
33
+ UseTreeViewSelectionSignature<any>
34
+ ]>;
@@ -0,0 +1,2 @@
1
+ export { useTreeViewExpansion } from './useTreeViewExpansion';
2
+ export type { UseTreeViewExpansionSignature, UseTreeViewExpansionParameters, UseTreeViewExpansionDefaultizedParameters, } from './useTreeViewExpansion.types';
@@ -0,0 +1 @@
1
+ export { useTreeViewExpansion } from './useTreeViewExpansion';
@@ -0,0 +1,3 @@
1
+ import { TreeViewPlugin } from '../../models';
2
+ import { UseTreeViewExpansionSignature } from './useTreeViewExpansion.types';
3
+ export declare const useTreeViewExpansion: TreeViewPlugin<UseTreeViewExpansionSignature>;
@@ -0,0 +1,63 @@
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
+ export const useTreeViewExpansion = ({
6
+ instance,
7
+ params,
8
+ models
9
+ }) => {
10
+ const isNodeExpanded = React.useCallback(nodeId => {
11
+ return Array.isArray(models.expanded.value) ? models.expanded.value.indexOf(nodeId) !== -1 : false;
12
+ }, [models.expanded.value]);
13
+ const isNodeExpandable = React.useCallback(nodeId => {
14
+ var _instance$getNode;
15
+ return !!((_instance$getNode = instance.getNode(nodeId)) != null && _instance$getNode.expandable);
16
+ }, [instance]);
17
+ const toggleNodeExpansion = useEventCallback((event, nodeId) => {
18
+ if (nodeId == null) {
19
+ return;
20
+ }
21
+ let newExpanded;
22
+ if (models.expanded.value.indexOf(nodeId) !== -1) {
23
+ newExpanded = models.expanded.value.filter(id => id !== nodeId);
24
+ } else {
25
+ newExpanded = [nodeId].concat(models.expanded.value);
26
+ }
27
+ if (params.onNodeToggle) {
28
+ params.onNodeToggle(event, newExpanded);
29
+ }
30
+ models.expanded.setValue(newExpanded);
31
+ });
32
+ const expandAllSiblings = (event, nodeId) => {
33
+ const node = instance.getNode(nodeId);
34
+ const siblings = instance.getChildrenIds(node.parentId);
35
+ const diff = siblings.filter(child => instance.isNodeExpandable(child) && !instance.isNodeExpanded(child));
36
+ const newExpanded = models.expanded.value.concat(diff);
37
+ if (diff.length > 0) {
38
+ models.expanded.setValue(newExpanded);
39
+ if (params.onNodeToggle) {
40
+ params.onNodeToggle(event, newExpanded);
41
+ }
42
+ }
43
+ };
44
+ populateInstance(instance, {
45
+ isNodeExpanded,
46
+ isNodeExpandable,
47
+ toggleNodeExpansion,
48
+ expandAllSiblings
49
+ });
50
+ };
51
+ useTreeViewExpansion.models = {
52
+ expanded: {
53
+ controlledProp: 'expanded',
54
+ defaultProp: 'defaultExpanded'
55
+ }
56
+ };
57
+ const DEFAULT_EXPANDED = [];
58
+ useTreeViewExpansion.getDefaultizedParams = params => {
59
+ var _params$defaultExpand;
60
+ return _extends({}, params, {
61
+ defaultExpanded: (_params$defaultExpand = params.defaultExpanded) != null ? _params$defaultExpand : DEFAULT_EXPANDED
62
+ });
63
+ };
@@ -0,0 +1,32 @@
1
+ import * as React from 'react';
2
+ import { DefaultizedProps, TreeViewPluginSignature } from '../../models';
3
+ import { UseTreeViewNodesSignature } from '../useTreeViewNodes';
4
+ export interface UseTreeViewExpansionInstance {
5
+ isNodeExpanded: (nodeId: string) => boolean;
6
+ isNodeExpandable: (nodeId: string) => boolean;
7
+ toggleNodeExpansion: (event: React.SyntheticEvent, value: string) => void;
8
+ expandAllSiblings: (event: React.KeyboardEvent<HTMLUListElement>, nodeId: string) => void;
9
+ }
10
+ export interface UseTreeViewExpansionParameters {
11
+ /**
12
+ * Expanded node ids.
13
+ * Used when the item's expansion is controlled.
14
+ */
15
+ expanded?: string[];
16
+ /**
17
+ * Expanded node ids.
18
+ * Used when the item's expansion is not controlled.
19
+ * @default []
20
+ */
21
+ defaultExpanded?: string[];
22
+ /**
23
+ * Callback fired when tree items are expanded/collapsed.
24
+ * @param {React.SyntheticEvent} event The event source of the callback.
25
+ * @param {array} nodeIds The ids of the expanded nodes.
26
+ */
27
+ onNodeToggle?: (event: React.SyntheticEvent, nodeIds: string[]) => void;
28
+ }
29
+ export type UseTreeViewExpansionDefaultizedParameters = DefaultizedProps<UseTreeViewExpansionParameters, 'defaultExpanded'>;
30
+ export type UseTreeViewExpansionSignature = TreeViewPluginSignature<UseTreeViewExpansionParameters, UseTreeViewExpansionDefaultizedParameters, UseTreeViewExpansionInstance, {}, {}, 'expanded', [
31
+ UseTreeViewNodesSignature
32
+ ]>;
@@ -0,0 +1,2 @@
1
+ export { useTreeViewFocus } from './useTreeViewFocus';
2
+ export type { UseTreeViewFocusSignature, UseTreeViewFocusParameters, UseTreeViewFocusDefaultizedParameters, } from './useTreeViewFocus.types';
@@ -0,0 +1 @@
1
+ export { useTreeViewFocus } from './useTreeViewFocus';
@@ -0,0 +1,3 @@
1
+ import { TreeViewPlugin } from '../../models';
2
+ import { UseTreeViewFocusSignature } from './useTreeViewFocus.types';
3
+ export declare const useTreeViewFocus: TreeViewPlugin<UseTreeViewFocusSignature>;
@@ -0,0 +1,89 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import * as React from 'react';
3
+ import useEventCallback from '@mui/utils/useEventCallback';
4
+ import ownerDocument from '@mui/utils/ownerDocument';
5
+ import { populateInstance } from '../../useTreeView/useTreeView.utils';
6
+ import { useInstanceEventHandler } from '../../hooks/useInstanceEventHandler';
7
+ export const useTreeViewFocus = ({
8
+ instance,
9
+ params,
10
+ state,
11
+ setState,
12
+ models,
13
+ rootRef
14
+ }) => {
15
+ const setFocusedNodeId = useEventCallback(nodeId => {
16
+ const cleanNodeId = typeof nodeId === 'function' ? nodeId(state.focusedNodeId) : nodeId;
17
+ setState(prevState => _extends({}, prevState, {
18
+ focusedNodeId: cleanNodeId
19
+ }));
20
+ });
21
+ const isNodeFocused = React.useCallback(nodeId => state.focusedNodeId === nodeId, [state.focusedNodeId]);
22
+ const focusNode = useEventCallback((event, nodeId) => {
23
+ if (nodeId) {
24
+ setFocusedNodeId(nodeId);
25
+ if (params.onNodeFocus) {
26
+ params.onNodeFocus(event, nodeId);
27
+ }
28
+ }
29
+ });
30
+ populateInstance(instance, {
31
+ isNodeFocused,
32
+ focusNode
33
+ });
34
+ useInstanceEventHandler(instance, 'removeNode', ({
35
+ id
36
+ }) => {
37
+ setFocusedNodeId(oldFocusedNodeId => {
38
+ if (oldFocusedNodeId === id && rootRef.current === ownerDocument(rootRef.current).activeElement) {
39
+ return instance.getChildrenIds(null)[0];
40
+ }
41
+ return oldFocusedNodeId;
42
+ });
43
+ });
44
+ const createHandleFocus = otherHandlers => event => {
45
+ var _otherHandlers$onFocu;
46
+ (_otherHandlers$onFocu = otherHandlers.onFocus) == null || _otherHandlers$onFocu.call(otherHandlers, event);
47
+
48
+ // if the event bubbled (which is React specific) we don't want to steal focus
49
+ if (event.target === event.currentTarget) {
50
+ const isNodeVisible = nodeId => {
51
+ const node = instance.getNode(nodeId);
52
+ return node && (node.parentId == null || instance.isNodeExpanded(node.parentId));
53
+ };
54
+ let nodeToFocusId;
55
+ if (Array.isArray(models.selected.value)) {
56
+ nodeToFocusId = models.selected.value.find(isNodeVisible);
57
+ } else if (models.selected.value != null && isNodeVisible(models.selected.value)) {
58
+ nodeToFocusId = models.selected.value;
59
+ }
60
+ if (nodeToFocusId == null) {
61
+ nodeToFocusId = instance.getNavigableChildrenIds(null)[0];
62
+ }
63
+ instance.focusNode(event, nodeToFocusId);
64
+ }
65
+ };
66
+ const createHandleBlur = otherHandlers => event => {
67
+ var _otherHandlers$onBlur;
68
+ (_otherHandlers$onBlur = otherHandlers.onBlur) == null || _otherHandlers$onBlur.call(otherHandlers, event);
69
+ setFocusedNodeId(null);
70
+ };
71
+ const focusedNode = instance.getNode(state.focusedNodeId);
72
+ const activeDescendant = focusedNode ? focusedNode.idAttribute : null;
73
+ return {
74
+ getRootProps: otherHandlers => ({
75
+ onFocus: createHandleFocus(otherHandlers),
76
+ onBlur: createHandleBlur(otherHandlers),
77
+ 'aria-activedescendant': activeDescendant != null ? activeDescendant : undefined
78
+ })
79
+ };
80
+ };
81
+ useTreeViewFocus.getInitialState = () => ({
82
+ focusedNodeId: null
83
+ });
84
+ useTreeViewFocus.getDefaultizedParams = params => {
85
+ var _params$disabledItems;
86
+ return _extends({}, params, {
87
+ disabledItemsFocusable: (_params$disabledItems = params.disabledItemsFocusable) != null ? _params$disabledItems : false
88
+ });
89
+ };
@@ -0,0 +1,27 @@
1
+ import * as React from 'react';
2
+ import { TreeViewPluginSignature } from '../../models';
3
+ import type { UseTreeViewNodesSignature } from '../useTreeViewNodes';
4
+ import type { UseTreeViewSelectionSignature } from '../useTreeViewSelection';
5
+ import { UseTreeViewExpansionSignature } from '../useTreeViewExpansion';
6
+ export interface UseTreeViewFocusInstance {
7
+ isNodeFocused: (nodeId: string) => boolean;
8
+ focusNode: (event: React.SyntheticEvent, nodeId: string | null) => void;
9
+ }
10
+ export interface UseTreeViewFocusParameters {
11
+ /**
12
+ * Callback fired when tree items are focused.
13
+ * @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
14
+ * @param {string} nodeId The id of the node focused.
15
+ * @param {string} value of the focused node.
16
+ */
17
+ onNodeFocus?: (event: React.SyntheticEvent, nodeId: string) => void;
18
+ }
19
+ export type UseTreeViewFocusDefaultizedParameters = UseTreeViewFocusParameters;
20
+ export interface UseTreeViewFocusState {
21
+ focusedNodeId: string | null;
22
+ }
23
+ export type UseTreeViewFocusSignature = TreeViewPluginSignature<UseTreeViewFocusParameters, UseTreeViewFocusParameters, UseTreeViewFocusInstance, {}, UseTreeViewFocusState, never, [
24
+ UseTreeViewNodesSignature,
25
+ UseTreeViewSelectionSignature<any>,
26
+ UseTreeViewExpansionSignature
27
+ ]>;
@@ -0,0 +1,2 @@
1
+ export { useTreeViewKeyboardNavigation } from './useTreeViewKeyboardNavigation';
2
+ export type { UseTreeViewKeyboardNavigationSignature } from './useTreeViewKeyboardNavigation.types';
@@ -0,0 +1 @@
1
+ export { useTreeViewKeyboardNavigation } from './useTreeViewKeyboardNavigation';
@@ -0,0 +1,3 @@
1
+ import { TreeViewPlugin } from '../../models';
2
+ import { UseTreeViewKeyboardNavigationSignature } from './useTreeViewKeyboardNavigation.types';
3
+ export declare const useTreeViewKeyboardNavigation: TreeViewPlugin<UseTreeViewKeyboardNavigationSignature>;
@@ -0,0 +1,223 @@
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 (let i = startIndex; i < firstChars.length; i += 1) {
11
+ if (char === firstChars[i]) {
12
+ return i;
13
+ }
14
+ }
15
+ return -1;
16
+ }
17
+ export const useTreeViewKeyboardNavigation = ({
18
+ instance,
19
+ params,
20
+ state
21
+ }) => {
22
+ const theme = useTheme();
23
+ const isRtl = theme.direction === 'rtl';
24
+ const firstCharMap = React.useRef({});
25
+ const mapFirstChar = useEventCallback((nodeId, firstChar) => {
26
+ firstCharMap.current[nodeId] = firstChar;
27
+ return () => {
28
+ const newMap = _extends({}, firstCharMap.current);
29
+ delete newMap[nodeId];
30
+ firstCharMap.current = newMap;
31
+ };
32
+ });
33
+ populateInstance(instance, {
34
+ mapFirstChar
35
+ });
36
+ const handleNextArrow = event => {
37
+ if (state.focusedNodeId != null && instance.isNodeExpandable(state.focusedNodeId)) {
38
+ if (instance.isNodeExpanded(state.focusedNodeId)) {
39
+ instance.focusNode(event, getNextNode(instance, state.focusedNodeId));
40
+ } else if (!instance.isNodeDisabled(state.focusedNodeId)) {
41
+ instance.toggleNodeExpansion(event, state.focusedNodeId);
42
+ }
43
+ }
44
+ return true;
45
+ };
46
+ const handlePreviousArrow = event => {
47
+ if (state.focusedNodeId == null) {
48
+ return false;
49
+ }
50
+ if (instance.isNodeExpanded(state.focusedNodeId) && !instance.isNodeDisabled(state.focusedNodeId)) {
51
+ instance.toggleNodeExpansion(event, state.focusedNodeId);
52
+ return true;
53
+ }
54
+ const parent = instance.getNode(state.focusedNodeId).parentId;
55
+ if (parent) {
56
+ instance.focusNode(event, parent);
57
+ return true;
58
+ }
59
+ return false;
60
+ };
61
+ const focusByFirstCharacter = (event, nodeId, firstChar) => {
62
+ let start;
63
+ let index;
64
+ const lowercaseChar = firstChar.toLowerCase();
65
+ const firstCharIds = [];
66
+ const firstChars = [];
67
+ // This really only works since the ids are strings
68
+ Object.keys(firstCharMap.current).forEach(mapNodeId => {
69
+ const map = instance.getNode(mapNodeId);
70
+ const visible = map.parentId ? instance.isNodeExpanded(map.parentId) : true;
71
+ const shouldBeSkipped = params.disabledItemsFocusable ? false : instance.isNodeDisabled(mapNodeId);
72
+ if (visible && !shouldBeSkipped) {
73
+ firstCharIds.push(mapNodeId);
74
+ firstChars.push(firstCharMap.current[mapNodeId]);
75
+ }
76
+ });
77
+
78
+ // Get start index for search based on position of currentItem
79
+ start = firstCharIds.indexOf(nodeId) + 1;
80
+ if (start >= firstCharIds.length) {
81
+ start = 0;
82
+ }
83
+
84
+ // Check remaining slots in the menu
85
+ index = findNextFirstChar(firstChars, start, lowercaseChar);
86
+
87
+ // If not found in remaining slots, check from beginning
88
+ if (index === -1) {
89
+ index = findNextFirstChar(firstChars, 0, lowercaseChar);
90
+ }
91
+
92
+ // If match was found...
93
+ if (index > -1) {
94
+ instance.focusNode(event, firstCharIds[index]);
95
+ }
96
+ };
97
+ const selectNextNode = (event, id) => {
98
+ if (!instance.isNodeDisabled(getNextNode(instance, id))) {
99
+ instance.selectRange(event, {
100
+ end: getNextNode(instance, id),
101
+ current: id
102
+ }, true);
103
+ }
104
+ };
105
+ const selectPreviousNode = (event, nodeId) => {
106
+ if (!instance.isNodeDisabled(getPreviousNode(instance, nodeId))) {
107
+ instance.selectRange(event, {
108
+ end: getPreviousNode(instance, nodeId),
109
+ current: nodeId
110
+ }, true);
111
+ }
112
+ };
113
+ const createHandleKeyDown = otherHandlers => event => {
114
+ var _otherHandlers$onKeyD;
115
+ (_otherHandlers$onKeyD = otherHandlers.onKeyDown) == null || _otherHandlers$onKeyD.call(otherHandlers, event);
116
+ let flag = false;
117
+ const 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
+ const 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
+ return {
219
+ getRootProps: otherHandlers => ({
220
+ onKeyDown: createHandleKeyDown(otherHandlers)
221
+ })
222
+ };
223
+ };
@@ -0,0 +1,14 @@
1
+ import { TreeViewPluginSignature } from '../../models';
2
+ import { UseTreeViewNodesSignature } from '../useTreeViewNodes';
3
+ import { UseTreeViewSelectionSignature } from '../useTreeViewSelection';
4
+ import { UseTreeViewFocusSignature } from '../useTreeViewFocus';
5
+ import { UseTreeViewExpansionSignature } from '../useTreeViewExpansion';
6
+ export interface UseTreeViewKeyboardNavigationInstance {
7
+ mapFirstChar: (nodeId: string, firstChar: string) => () => void;
8
+ }
9
+ export type UseTreeViewKeyboardNavigationSignature = TreeViewPluginSignature<{}, {}, UseTreeViewKeyboardNavigationInstance, {}, {}, never, [
10
+ UseTreeViewNodesSignature,
11
+ UseTreeViewSelectionSignature<any>,
12
+ UseTreeViewFocusSignature,
13
+ UseTreeViewExpansionSignature
14
+ ]>;
@@ -0,0 +1,2 @@
1
+ export { useTreeViewNodes } from './useTreeViewNodes';
2
+ export type { UseTreeViewNodesSignature, UseTreeViewNodesParameters, UseTreeViewNodesDefaultizedParameters, } from './useTreeViewNodes.types';
@@ -0,0 +1 @@
1
+ export { useTreeViewNodes } from './useTreeViewNodes';
@@ -0,0 +1,3 @@
1
+ import { TreeViewPlugin } from '../../models';
2
+ import { UseTreeViewNodesSignature } from './useTreeViewNodes.types';
3
+ export declare const useTreeViewNodes: TreeViewPlugin<UseTreeViewNodesSignature>;