@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,62 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.findOrderInTremauxTree = void 0;
7
+ /**
8
+ * This is used to determine the start and end of a selection range so
9
+ * we can get the nodes between the two border nodes.
10
+ *
11
+ * It finds the nodes' common ancestor using
12
+ * a naive implementation of a lowest common ancestor algorithm
13
+ * (https://en.wikipedia.org/wiki/Lowest_common_ancestor).
14
+ * Then compares the ancestor's 2 children that are ancestors of nodeA and NodeB
15
+ * so we can compare their indexes to work out which node comes first in a depth first search.
16
+ * (https://en.wikipedia.org/wiki/Depth-first_search)
17
+ *
18
+ * Another way to put it is which node is shallower in a trémaux tree
19
+ * https://en.wikipedia.org/wiki/Tr%C3%A9maux_tree
20
+ */
21
+ const findOrderInTremauxTree = (instance, nodeAId, nodeBId) => {
22
+ if (nodeAId === nodeBId) {
23
+ return [nodeAId, nodeBId];
24
+ }
25
+ const nodeA = instance.getNode(nodeAId);
26
+ const nodeB = instance.getNode(nodeBId);
27
+ if (nodeA.parentId === nodeB.id || nodeB.parentId === nodeA.id) {
28
+ return nodeB.parentId === nodeA.id ? [nodeA.id, nodeB.id] : [nodeB.id, nodeA.id];
29
+ }
30
+ const aFamily = [nodeA.id];
31
+ const bFamily = [nodeB.id];
32
+ let aAncestor = nodeA.parentId;
33
+ let bAncestor = nodeB.parentId;
34
+ let aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;
35
+ let bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;
36
+ let continueA = true;
37
+ let continueB = true;
38
+ while (!bAncestorIsCommon && !aAncestorIsCommon) {
39
+ if (continueA) {
40
+ aFamily.push(aAncestor);
41
+ aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;
42
+ continueA = aAncestor !== null;
43
+ if (!aAncestorIsCommon && continueA) {
44
+ aAncestor = instance.getNode(aAncestor).parentId;
45
+ }
46
+ }
47
+ if (continueB && !aAncestorIsCommon) {
48
+ bFamily.push(bAncestor);
49
+ bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;
50
+ continueB = bAncestor !== null;
51
+ if (!bAncestorIsCommon && continueB) {
52
+ bAncestor = instance.getNode(bAncestor).parentId;
53
+ }
54
+ }
55
+ }
56
+ const commonAncestor = aAncestorIsCommon ? aAncestor : bAncestor;
57
+ const ancestorFamily = instance.getChildrenIds(commonAncestor);
58
+ const aSide = aFamily[aFamily.indexOf(commonAncestor) - 1];
59
+ const bSide = bFamily[bFamily.indexOf(commonAncestor) - 1];
60
+ return ancestorFamily.indexOf(aSide) < ancestorFamily.indexOf(bSide) ? [nodeAId, nodeBId] : [nodeBId, nodeAId];
61
+ };
62
+ exports.findOrderInTremauxTree = findOrderInTremauxTree;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "useTreeView", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _useTreeView.useTreeView;
10
+ }
11
+ });
12
+ var _useTreeView = require("./useTreeView");
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useTreeView = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var React = _interopRequireWildcard(require("react"));
10
+ var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
11
+ var _TreeViewContext = require("../TreeViewProvider/TreeViewContext");
12
+ var _useTreeViewModels = require("./useTreeViewModels");
13
+ var _corePlugins = require("../corePlugins");
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
+ const useTreeView = inParams => {
17
+ const plugins = [..._corePlugins.TREE_VIEW_CORE_PLUGINS, ...inParams.plugins];
18
+ const params = plugins.reduce((acc, plugin) => {
19
+ if (plugin.getDefaultizedParams) {
20
+ return plugin.getDefaultizedParams(acc);
21
+ }
22
+ return acc;
23
+ }, inParams);
24
+ const models = (0, _useTreeViewModels.useTreeViewModels)(plugins, params);
25
+ const instanceRef = React.useRef({});
26
+ const instance = instanceRef.current;
27
+ const innerRootRef = React.useRef(null);
28
+ const handleRootRef = (0, _useForkRef.default)(innerRootRef, inParams.rootRef);
29
+ const [state, setState] = React.useState(() => {
30
+ const temp = {};
31
+ plugins.forEach(plugin => {
32
+ if (plugin.getInitialState) {
33
+ Object.assign(temp, plugin.getInitialState(params));
34
+ }
35
+ });
36
+ return temp;
37
+ });
38
+ const rootPropsGetters = [];
39
+ let contextValue = _TreeViewContext.DEFAULT_TREE_VIEW_CONTEXT_VALUE;
40
+ const runPlugin = plugin => {
41
+ const pluginResponse = plugin({
42
+ instance,
43
+ params,
44
+ state,
45
+ setState,
46
+ rootRef: innerRootRef,
47
+ models
48
+ }) || {};
49
+ if (pluginResponse.getRootProps) {
50
+ rootPropsGetters.push(pluginResponse.getRootProps);
51
+ }
52
+ if (pluginResponse.contextValue) {
53
+ contextValue = pluginResponse.contextValue;
54
+ }
55
+ };
56
+ plugins.forEach(runPlugin);
57
+ const getRootProps = (otherHandlers = {}) => {
58
+ const rootProps = (0, _extends2.default)({
59
+ role: 'tree',
60
+ tabIndex: 0
61
+ }, otherHandlers, {
62
+ ref: handleRootRef
63
+ });
64
+ rootPropsGetters.forEach(rootPropsGetter => {
65
+ Object.assign(rootProps, rootPropsGetter(otherHandlers));
66
+ });
67
+ return rootProps;
68
+ };
69
+ return {
70
+ getRootProps,
71
+ rootRef: handleRootRef,
72
+ contextValue
73
+ };
74
+ };
75
+ exports.useTreeView = useTreeView;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.populateInstance = exports.getPreviousNode = exports.getNextNode = exports.getLastNode = exports.getFirstNode = void 0;
7
+ const getPreviousNode = (instance, nodeId) => {
8
+ const node = instance.getNode(nodeId);
9
+ const siblings = instance.getNavigableChildrenIds(node.parentId);
10
+ const nodeIndex = siblings.indexOf(nodeId);
11
+ if (nodeIndex === 0) {
12
+ return node.parentId;
13
+ }
14
+ let currentNode = siblings[nodeIndex - 1];
15
+ while (instance.isNodeExpanded(currentNode) && instance.getNavigableChildrenIds(currentNode).length > 0) {
16
+ currentNode = instance.getNavigableChildrenIds(currentNode).pop();
17
+ }
18
+ return currentNode;
19
+ };
20
+ exports.getPreviousNode = getPreviousNode;
21
+ const getNextNode = (instance, nodeId) => {
22
+ // If expanded get first child
23
+ if (instance.isNodeExpanded(nodeId) && instance.getNavigableChildrenIds(nodeId).length > 0) {
24
+ return instance.getNavigableChildrenIds(nodeId)[0];
25
+ }
26
+ let node = instance.getNode(nodeId);
27
+ while (node != null) {
28
+ // Try to get next sibling
29
+ const siblings = instance.getNavigableChildrenIds(node.parentId);
30
+ const nextSibling = siblings[siblings.indexOf(node.id) + 1];
31
+ if (nextSibling) {
32
+ return nextSibling;
33
+ }
34
+
35
+ // If the sibling does not exist, go up a level to the parent and try again.
36
+ node = instance.getNode(node.parentId);
37
+ }
38
+ return null;
39
+ };
40
+ exports.getNextNode = getNextNode;
41
+ const getLastNode = instance => {
42
+ let lastNode = instance.getNavigableChildrenIds(null).pop();
43
+ while (instance.isNodeExpanded(lastNode)) {
44
+ lastNode = instance.getNavigableChildrenIds(lastNode).pop();
45
+ }
46
+ return lastNode;
47
+ };
48
+ exports.getLastNode = getLastNode;
49
+ const getFirstNode = instance => instance.getNavigableChildrenIds(null)[0];
50
+ exports.getFirstNode = getFirstNode;
51
+ const populateInstance = (instance, methods) => {
52
+ Object.assign(instance, methods);
53
+ };
54
+ exports.populateInstance = populateInstance;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useTreeViewModels = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var React = _interopRequireWildcard(require("react"));
10
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
11
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
12
+ /**
13
+ * Implements the same behavior as `useControlled` but for several models.
14
+ * The controlled models are never stored in the state and the state is only updated if the model is not controlled.
15
+ */
16
+ const useTreeViewModels = (plugins, props) => {
17
+ const modelsRef = React.useRef({});
18
+ const [modelsState, setModelsState] = React.useState(() => {
19
+ const initialState = {};
20
+ plugins.forEach(plugin => {
21
+ if (plugin.models) {
22
+ Object.entries(plugin.models).forEach(([modelName, model]) => {
23
+ modelsRef.current[modelName] = {
24
+ controlledProp: model.controlledProp,
25
+ defaultProp: model.defaultProp,
26
+ isControlled: props[model.controlledProp] !== undefined
27
+ };
28
+ initialState[modelName] = props[model.defaultProp];
29
+ });
30
+ }
31
+ });
32
+ return initialState;
33
+ });
34
+ const models = Object.fromEntries(Object.entries(modelsRef.current).map(([modelName, model]) => {
35
+ const value = model.isControlled ? props[model.controlledProp] : modelsState[modelName];
36
+ return [modelName, {
37
+ value,
38
+ setValue: newValue => {
39
+ if (!model.isControlled) {
40
+ setModelsState(prevState => (0, _extends2.default)({}, prevState, {
41
+ [modelName]: newValue
42
+ }));
43
+ }
44
+ }
45
+ }];
46
+ }));
47
+
48
+ // We know that `modelsRef` do not vary across renders.
49
+ /* eslint-disable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */
50
+ if (process.env.NODE_ENV !== 'production') {
51
+ Object.entries(modelsRef.current).forEach(([modelName, model]) => {
52
+ const controlled = props[model.controlledProp];
53
+ const defaultProp = props[model.defaultProp];
54
+ React.useEffect(() => {
55
+ if (model.isControlled !== (controlled !== undefined)) {
56
+ console.error([`MUI: A component is changing the ${model.isControlled ? '' : 'un'}controlled ${modelName} state of TreeView to be ${model.isControlled ? 'un' : ''}controlled.`, 'Elements should not switch from uncontrolled to controlled (or vice versa).', `Decide between using a controlled or uncontrolled ${modelName} ` + 'element for the lifetime of the component.', "The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.", 'More info: https://fb.me/react-controlled-components'].join('\n'));
57
+ }
58
+ }, [controlled]);
59
+ const {
60
+ current: defaultValue
61
+ } = React.useRef(defaultProp);
62
+ React.useEffect(() => {
63
+ if (!model.isControlled && defaultValue !== defaultProp) {
64
+ console.error([`MUI: A component is changing the default ${modelName} state of an uncontrolled TreeView after being initialized. ` + `To suppress this warning opt to use a controlled TreeView.`].join('\n'));
65
+ }
66
+ }, [JSON.stringify(defaultValue)]);
67
+ });
68
+ }
69
+ /* eslint-enable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */
70
+
71
+ return models;
72
+ };
73
+ exports.useTreeViewModels = useTreeViewModels;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.EventManager = void 0;
7
+ // Used https://gist.github.com/mudge/5830382 as a starting point.
8
+ // See https://github.com/browserify/events/blob/master/events.js for
9
+ // the Node.js (https://nodejs.org/api/events.html) polyfill used by webpack.
10
+ class EventManager {
11
+ constructor() {
12
+ this.maxListeners = 20;
13
+ this.warnOnce = false;
14
+ this.events = {};
15
+ }
16
+ on(eventName, listener, options = {}) {
17
+ let collection = this.events[eventName];
18
+ if (!collection) {
19
+ collection = {
20
+ highPriority: new Map(),
21
+ regular: new Map()
22
+ };
23
+ this.events[eventName] = collection;
24
+ }
25
+ if (options.isFirst) {
26
+ collection.highPriority.set(listener, true);
27
+ } else {
28
+ collection.regular.set(listener, true);
29
+ }
30
+ if (process.env.NODE_ENV !== 'production') {
31
+ const collectionSize = collection.highPriority.size + collection.regular.size;
32
+ if (collectionSize > this.maxListeners && !this.warnOnce) {
33
+ this.warnOnce = true;
34
+ console.warn([`Possible EventEmitter memory leak detected. ${collectionSize} ${eventName} listeners added.`].join('\n'));
35
+ }
36
+ }
37
+ }
38
+ removeListener(eventName, listener) {
39
+ if (this.events[eventName]) {
40
+ this.events[eventName].regular.delete(listener);
41
+ this.events[eventName].highPriority.delete(listener);
42
+ }
43
+ }
44
+ removeAllListeners() {
45
+ this.events = {};
46
+ }
47
+ emit(eventName, ...args) {
48
+ const collection = this.events[eventName];
49
+ if (!collection) {
50
+ return;
51
+ }
52
+ const highPriorityListeners = Array.from(collection.highPriority.keys());
53
+ const regularListeners = Array.from(collection.regular.keys());
54
+ for (let i = highPriorityListeners.length - 1; i >= 0; i -= 1) {
55
+ const listener = highPriorityListeners[i];
56
+ if (collection.highPriority.has(listener)) {
57
+ listener.apply(this, args);
58
+ }
59
+ }
60
+ for (let i = 0; i < regularListeners.length; i += 1) {
61
+ const listener = regularListeners[i];
62
+ if (collection.regular.has(listener)) {
63
+ listener.apply(this, args);
64
+ }
65
+ }
66
+ }
67
+ once(eventName, listener) {
68
+ // eslint-disable-next-line consistent-this
69
+ const that = this;
70
+ this.on(eventName, function oneTimeListener(...args) {
71
+ that.removeListener(eventName, oneTimeListener);
72
+ listener.apply(that, args);
73
+ });
74
+ }
75
+ }
76
+ exports.EventManager = EventManager;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.FinalizationRegistryBasedCleanupTracking = void 0;
7
+ class FinalizationRegistryBasedCleanupTracking {
8
+ constructor() {
9
+ this.registry = new FinalizationRegistry(unsubscribe => {
10
+ if (typeof unsubscribe === 'function') {
11
+ unsubscribe();
12
+ }
13
+ });
14
+ }
15
+ register(object, unsubscribe, unregisterToken) {
16
+ this.registry.register(object, unsubscribe, unregisterToken);
17
+ }
18
+ unregister(unregisterToken) {
19
+ this.registry.unregister(unregisterToken);
20
+ }
21
+
22
+ // eslint-disable-next-line class-methods-use-this
23
+ reset() {}
24
+ }
25
+ exports.FinalizationRegistryBasedCleanupTracking = FinalizationRegistryBasedCleanupTracking;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TimerBasedCleanupTracking = void 0;
7
+ // If no effect ran after this amount of time, we assume that the render was not committed by React
8
+ const CLEANUP_TIMER_LOOP_MILLIS = 1000;
9
+ class TimerBasedCleanupTracking {
10
+ constructor(timeout = CLEANUP_TIMER_LOOP_MILLIS) {
11
+ this.timeouts = new Map();
12
+ this.cleanupTimeout = CLEANUP_TIMER_LOOP_MILLIS;
13
+ this.cleanupTimeout = timeout;
14
+ }
15
+ register(object, unsubscribe, unregisterToken) {
16
+ if (!this.timeouts) {
17
+ this.timeouts = new Map();
18
+ }
19
+ const timeout = setTimeout(() => {
20
+ if (typeof unsubscribe === 'function') {
21
+ unsubscribe();
22
+ }
23
+ this.timeouts.delete(unregisterToken.cleanupToken);
24
+ }, this.cleanupTimeout);
25
+ this.timeouts.set(unregisterToken.cleanupToken, timeout);
26
+ }
27
+ unregister(unregisterToken) {
28
+ const timeout = this.timeouts.get(unregisterToken.cleanupToken);
29
+ if (timeout) {
30
+ this.timeouts.delete(unregisterToken.cleanupToken);
31
+ clearTimeout(timeout);
32
+ }
33
+ }
34
+ reset() {
35
+ if (this.timeouts) {
36
+ this.timeouts.forEach((value, key) => {
37
+ this.unregister({
38
+ cleanupToken: key
39
+ });
40
+ });
41
+ this.timeouts = undefined;
42
+ }
43
+ }
44
+ }
45
+ exports.TimerBasedCleanupTracking = TimerBasedCleanupTracking;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.publishTreeViewEvent = void 0;
7
+ const publishTreeViewEvent = (instance, eventName, params) => {
8
+ instance.$$publishEvent(eventName, params);
9
+ };
10
+ exports.publishTreeViewEvent = publishTreeViewEvent;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-tree-view",
3
- "version": "6.0.0-alpha.3",
3
+ "version": "6.0.0-beta.0",
4
4
  "description": "The community edition of the tree view components (MUI X).",
5
5
  "author": "MUI Team",
6
6
  "main": "./node/index.js",
@@ -3,7 +3,7 @@ import { TreeViewProps } from '../TreeView';
3
3
 
4
4
  export interface PickersComponentsPropsList {
5
5
  MuiTreeItem: TreeItemProps;
6
- MuiTreeView: TreeViewProps;
6
+ MuiTreeView: TreeViewProps<any>;
7
7
  }
8
8
 
9
9
  declare module '@mui/material/styles' {
@@ -1,6 +0,0 @@
1
- import * as React from 'react';
2
- import { TreeViewContextValue } from './TreeView.types';
3
- /**
4
- * @ignore - internal component.
5
- */
6
- export declare const TreeViewContext: React.Context<TreeViewContextValue>;
@@ -1 +0,0 @@
1
- export type DefaultizedProps<P extends {}, RequiredProps extends keyof P, AdditionalProps extends {} = {}> = Omit<P, RequiredProps | keyof AdditionalProps> & Required<Pick<P, RequiredProps>> & AdditionalProps;
@@ -1,41 +0,0 @@
1
- import * as React from 'react';
2
- /**
3
- * @ignore - internal component.
4
- */
5
- export var TreeViewContext = /*#__PURE__*/React.createContext({
6
- registerNode: function registerNode() {},
7
- unregisterNode: function unregisterNode() {},
8
- isFocused: function isFocused() {
9
- return false;
10
- },
11
- isSelected: function isSelected() {
12
- return false;
13
- },
14
- isExpanded: function isExpanded() {
15
- return false;
16
- },
17
- isExpandable: function isExpandable() {
18
- return false;
19
- },
20
- isDisabled: function isDisabled() {
21
- return false;
22
- },
23
- mapFirstChar: function mapFirstChar() {},
24
- unMapFirstChar: function unMapFirstChar() {},
25
- focus: function focus() {},
26
- toggleExpansion: function toggleExpansion() {},
27
- selectNode: function selectNode() {},
28
- selectRange: function selectRange() {},
29
- multiSelect: false,
30
- disabledItemsFocusable: false,
31
- treeId: undefined,
32
- icons: {
33
- defaultCollapseIcon: null,
34
- defaultExpandIcon: null,
35
- defaultParentIcon: null,
36
- defaultEndIcon: null
37
- }
38
- });
39
- if (process.env.NODE_ENV !== 'production') {
40
- TreeViewContext.displayName = 'TreeViewContext';
41
- }