@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,76 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ import _extends from "@babel/runtime/helpers/esm/extends";
3
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4
+ import * as React from 'react';
5
+ /**
6
+ * Implements the same behavior as `useControlled` but for several models.
7
+ * The controlled models are never stored in the state and the state is only updated if the model is not controlled.
8
+ */
9
+ export var useTreeViewModels = function useTreeViewModels(plugins, props) {
10
+ var modelsRef = React.useRef({});
11
+ var _React$useState = React.useState(function () {
12
+ var initialState = {};
13
+ plugins.forEach(function (plugin) {
14
+ if (plugin.models) {
15
+ Object.entries(plugin.models).forEach(function (_ref) {
16
+ var _ref2 = _slicedToArray(_ref, 2),
17
+ modelName = _ref2[0],
18
+ model = _ref2[1];
19
+ modelsRef.current[modelName] = {
20
+ controlledProp: model.controlledProp,
21
+ defaultProp: model.defaultProp,
22
+ isControlled: props[model.controlledProp] !== undefined
23
+ };
24
+ initialState[modelName] = props[model.defaultProp];
25
+ });
26
+ }
27
+ });
28
+ return initialState;
29
+ }),
30
+ _React$useState2 = _slicedToArray(_React$useState, 2),
31
+ modelsState = _React$useState2[0],
32
+ setModelsState = _React$useState2[1];
33
+ var models = Object.fromEntries(Object.entries(modelsRef.current).map(function (_ref3) {
34
+ var _ref4 = _slicedToArray(_ref3, 2),
35
+ modelName = _ref4[0],
36
+ model = _ref4[1];
37
+ var value = model.isControlled ? props[model.controlledProp] : modelsState[modelName];
38
+ return [modelName, {
39
+ value: value,
40
+ setValue: function setValue(newValue) {
41
+ if (!model.isControlled) {
42
+ setModelsState(function (prevState) {
43
+ return _extends({}, prevState, _defineProperty({}, modelName, newValue));
44
+ });
45
+ }
46
+ }
47
+ }];
48
+ }));
49
+
50
+ // We know that `modelsRef` do not vary across renders.
51
+ /* eslint-disable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */
52
+ if (process.env.NODE_ENV !== 'production') {
53
+ Object.entries(modelsRef.current).forEach(function (_ref5) {
54
+ var _ref6 = _slicedToArray(_ref5, 2),
55
+ modelName = _ref6[0],
56
+ model = _ref6[1];
57
+ var controlled = props[model.controlledProp];
58
+ var defaultProp = props[model.defaultProp];
59
+ React.useEffect(function () {
60
+ if (model.isControlled !== (controlled !== undefined)) {
61
+ console.error(["MUI: A component is changing the ".concat(model.isControlled ? '' : 'un', "controlled ").concat(modelName, " state of TreeView to be ").concat(model.isControlled ? 'un' : '', "controlled."), 'Elements should not switch from uncontrolled to controlled (or vice versa).', "Decide between using a controlled or uncontrolled ".concat(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'));
62
+ }
63
+ }, [controlled]);
64
+ var _React$useRef = React.useRef(defaultProp),
65
+ defaultValue = _React$useRef.current;
66
+ React.useEffect(function () {
67
+ if (!model.isControlled && defaultValue !== defaultProp) {
68
+ console.error(["MUI: A component is changing the default ".concat(modelName, " state of an uncontrolled TreeView after being initialized. ") + "To suppress this warning opt to use a controlled TreeView."].join('\n'));
69
+ }
70
+ }, [JSON.stringify(defaultValue)]);
71
+ });
72
+ }
73
+ /* eslint-enable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */
74
+
75
+ return models;
76
+ };
@@ -0,0 +1,91 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
3
+ // Used https://gist.github.com/mudge/5830382 as a starting point.
4
+ // See https://github.com/browserify/events/blob/master/events.js for
5
+ // the Node.js (https://nodejs.org/api/events.html) polyfill used by webpack.
6
+ export var EventManager = /*#__PURE__*/function () {
7
+ function EventManager() {
8
+ _classCallCheck(this, EventManager);
9
+ this.maxListeners = 20;
10
+ this.warnOnce = false;
11
+ this.events = {};
12
+ }
13
+ _createClass(EventManager, [{
14
+ key: "on",
15
+ value: function on(eventName, listener) {
16
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
17
+ var 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
+ var 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. ".concat(collectionSize, " ").concat(eventName, " listeners added.")].join('\n'));
35
+ }
36
+ }
37
+ }
38
+ }, {
39
+ key: "removeListener",
40
+ value: function removeListener(eventName, listener) {
41
+ if (this.events[eventName]) {
42
+ this.events[eventName].regular.delete(listener);
43
+ this.events[eventName].highPriority.delete(listener);
44
+ }
45
+ }
46
+ }, {
47
+ key: "removeAllListeners",
48
+ value: function removeAllListeners() {
49
+ this.events = {};
50
+ }
51
+ }, {
52
+ key: "emit",
53
+ value: function emit(eventName) {
54
+ var collection = this.events[eventName];
55
+ if (!collection) {
56
+ return;
57
+ }
58
+ var highPriorityListeners = Array.from(collection.highPriority.keys());
59
+ var regularListeners = Array.from(collection.regular.keys());
60
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
61
+ args[_key - 1] = arguments[_key];
62
+ }
63
+ for (var i = highPriorityListeners.length - 1; i >= 0; i -= 1) {
64
+ var listener = highPriorityListeners[i];
65
+ if (collection.highPriority.has(listener)) {
66
+ listener.apply(this, args);
67
+ }
68
+ }
69
+ for (var _i = 0; _i < regularListeners.length; _i += 1) {
70
+ var _listener = regularListeners[_i];
71
+ if (collection.regular.has(_listener)) {
72
+ _listener.apply(this, args);
73
+ }
74
+ }
75
+ }
76
+ }, {
77
+ key: "once",
78
+ value: function once(eventName, listener) {
79
+ // eslint-disable-next-line consistent-this
80
+ var that = this;
81
+ this.on(eventName, function oneTimeListener() {
82
+ that.removeListener(eventName, oneTimeListener);
83
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
84
+ args[_key2] = arguments[_key2];
85
+ }
86
+ listener.apply(that, args);
87
+ });
88
+ }
89
+ }]);
90
+ return EventManager;
91
+ }();
@@ -0,0 +1,29 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
3
+ export var FinalizationRegistryBasedCleanupTracking = /*#__PURE__*/function () {
4
+ function FinalizationRegistryBasedCleanupTracking() {
5
+ _classCallCheck(this, FinalizationRegistryBasedCleanupTracking);
6
+ this.registry = new FinalizationRegistry(function (unsubscribe) {
7
+ if (typeof unsubscribe === 'function') {
8
+ unsubscribe();
9
+ }
10
+ });
11
+ }
12
+ _createClass(FinalizationRegistryBasedCleanupTracking, [{
13
+ key: "register",
14
+ value: function register(object, unsubscribe, unregisterToken) {
15
+ this.registry.register(object, unsubscribe, unregisterToken);
16
+ }
17
+ }, {
18
+ key: "unregister",
19
+ value: function unregister(unregisterToken) {
20
+ this.registry.unregister(unregisterToken);
21
+ }
22
+
23
+ // eslint-disable-next-line class-methods-use-this
24
+ }, {
25
+ key: "reset",
26
+ value: function reset() {}
27
+ }]);
28
+ return FinalizationRegistryBasedCleanupTracking;
29
+ }();
@@ -0,0 +1,52 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
3
+ // If no effect ran after this amount of time, we assume that the render was not committed by React
4
+ var CLEANUP_TIMER_LOOP_MILLIS = 1000;
5
+ export var TimerBasedCleanupTracking = /*#__PURE__*/function () {
6
+ function TimerBasedCleanupTracking() {
7
+ var timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : CLEANUP_TIMER_LOOP_MILLIS;
8
+ _classCallCheck(this, TimerBasedCleanupTracking);
9
+ this.timeouts = new Map();
10
+ this.cleanupTimeout = CLEANUP_TIMER_LOOP_MILLIS;
11
+ this.cleanupTimeout = timeout;
12
+ }
13
+ _createClass(TimerBasedCleanupTracking, [{
14
+ key: "register",
15
+ value: function register(object, unsubscribe, unregisterToken) {
16
+ var _this = this;
17
+ if (!this.timeouts) {
18
+ this.timeouts = new Map();
19
+ }
20
+ var timeout = setTimeout(function () {
21
+ if (typeof unsubscribe === 'function') {
22
+ unsubscribe();
23
+ }
24
+ _this.timeouts.delete(unregisterToken.cleanupToken);
25
+ }, this.cleanupTimeout);
26
+ this.timeouts.set(unregisterToken.cleanupToken, timeout);
27
+ }
28
+ }, {
29
+ key: "unregister",
30
+ value: function unregister(unregisterToken) {
31
+ var timeout = this.timeouts.get(unregisterToken.cleanupToken);
32
+ if (timeout) {
33
+ this.timeouts.delete(unregisterToken.cleanupToken);
34
+ clearTimeout(timeout);
35
+ }
36
+ }
37
+ }, {
38
+ key: "reset",
39
+ value: function reset() {
40
+ var _this2 = this;
41
+ if (this.timeouts) {
42
+ this.timeouts.forEach(function (value, key) {
43
+ _this2.unregister({
44
+ cleanupToken: key
45
+ });
46
+ });
47
+ this.timeouts = undefined;
48
+ }
49
+ }
50
+ }]);
51
+ return TimerBasedCleanupTracking;
52
+ }();
@@ -0,0 +1,3 @@
1
+ export var publishTreeViewEvent = function publishTreeViewEvent(instance, eventName, params) {
2
+ instance.$$publishEvent(eventName, params);
3
+ };
@@ -11,10 +11,10 @@ import useForkRef from '@mui/utils/useForkRef';
11
11
  import unsupportedProp from '@mui/utils/unsupportedProp';
12
12
  import elementTypeAcceptingRef from '@mui/utils/elementTypeAcceptingRef';
13
13
  import { unstable_composeClasses as composeClasses } from '@mui/base';
14
- import { TreeViewContext } from '../TreeView/TreeViewContext';
15
- import { DescendantProvider, useDescendant } from '../TreeView/descendants';
14
+ import { DescendantProvider, useDescendant } from '../internals/TreeViewProvider/DescendantProvider';
16
15
  import { TreeItemContent } from './TreeItemContent';
17
16
  import { treeItemClasses, getTreeItemUtilityClass } from './treeItemClasses';
17
+ import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
18
18
  import { jsx as _jsx } from "react/jsx-runtime";
19
19
  import { jsxs as _jsxs } from "react/jsx-runtime";
20
20
  const useUtilityClasses = ownerState => {
@@ -158,19 +158,11 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
158
158
  other = _objectWithoutPropertiesLoose(props, _excluded);
159
159
  const {
160
160
  icons: contextIcons,
161
- focus,
162
- isExpanded,
163
- isFocused,
164
- isSelected,
165
- isDisabled,
166
161
  multiSelect,
167
162
  disabledItemsFocusable,
168
- mapFirstChar,
169
- unMapFirstChar,
170
- registerNode,
171
- unregisterNode,
172
- treeId
173
- } = React.useContext(TreeViewContext);
163
+ treeId,
164
+ instance
165
+ } = useTreeViewContext();
174
166
  let id;
175
167
  if (idProp != null) {
176
168
  id = idProp;
@@ -189,10 +181,10 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
189
181
  parentId
190
182
  } = useDescendant(descendant);
191
183
  const expandable = Boolean(Array.isArray(children) ? children.length : children);
192
- const expanded = isExpanded ? isExpanded(nodeId) : false;
193
- const focused = isFocused ? isFocused(nodeId) : false;
194
- const selected = isSelected ? isSelected(nodeId) : false;
195
- const disabled = isDisabled ? isDisabled(nodeId) : false;
184
+ const expanded = instance ? instance.isNodeExpanded(nodeId) : false;
185
+ const focused = instance ? instance.isNodeFocused(nodeId) : false;
186
+ const selected = instance ? instance.isNodeSelected(nodeId) : false;
187
+ const disabled = instance ? instance.isNodeDisabled(nodeId) : false;
196
188
  const ownerState = _extends({}, props, {
197
189
  expanded,
198
190
  focused,
@@ -216,8 +208,8 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
216
208
  }
217
209
  React.useEffect(() => {
218
210
  // On the first render a node's index will be -1. We want to wait for the real index.
219
- if (registerNode && unregisterNode && index !== -1) {
220
- registerNode({
211
+ if (instance && index !== -1) {
212
+ instance.updateNode({
221
213
  id: nodeId,
222
214
  idAttribute: id,
223
215
  index,
@@ -225,21 +217,16 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
225
217
  expandable,
226
218
  disabled: disabledProp
227
219
  });
228
- return () => {
229
- unregisterNode(nodeId);
230
- };
220
+ return () => instance.removeNode(nodeId);
231
221
  }
232
222
  return undefined;
233
- }, [registerNode, unregisterNode, parentId, index, nodeId, expandable, disabledProp, id]);
223
+ }, [instance, parentId, index, nodeId, expandable, disabledProp, id]);
234
224
  React.useEffect(() => {
235
- if (mapFirstChar && unMapFirstChar && label) {
236
- mapFirstChar(nodeId, (contentRef.current?.textContent ?? '').substring(0, 1).toLowerCase());
237
- return () => {
238
- unMapFirstChar(nodeId);
239
- };
225
+ if (instance && label) {
226
+ return instance.mapFirstChar(nodeId, (contentRef.current?.textContent ?? '').substring(0, 1).toLowerCase());
240
227
  }
241
228
  return undefined;
242
- }, [mapFirstChar, unMapFirstChar, nodeId, label]);
229
+ }, [instance, nodeId, label]);
243
230
  let ariaSelected;
244
231
  if (multiSelect) {
245
232
  ariaSelected = selected;
@@ -266,8 +253,8 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
266
253
  });
267
254
  }
268
255
  const unfocusable = !disabledItemsFocusable && disabled;
269
- if (!focused && event.currentTarget === event.target && !unfocusable) {
270
- focus(event, nodeId);
256
+ if (instance && !focused && event.currentTarget === event.target && !unfocusable) {
257
+ instance.focusNode(event, nodeId);
271
258
  }
272
259
  }
273
260
  return /*#__PURE__*/_jsxs(TreeItemRoot, _extends({
@@ -1,52 +1,43 @@
1
- import * as React from 'react';
2
- import { TreeViewContext } from '../TreeView/TreeViewContext';
1
+ import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
3
2
  export function useTreeItem(nodeId) {
4
3
  const {
5
- focus,
6
- isExpanded,
7
- isExpandable,
8
- isFocused,
9
- isDisabled,
10
- isSelected,
11
- multiSelect,
12
- selectNode,
13
- selectRange,
14
- toggleExpansion
15
- } = React.useContext(TreeViewContext);
16
- const expandable = isExpandable ? isExpandable(nodeId) : false;
17
- const expanded = isExpanded ? isExpanded(nodeId) : false;
18
- const focused = isFocused ? isFocused(nodeId) : false;
19
- const disabled = isDisabled ? isDisabled(nodeId) : false;
20
- const selected = isSelected ? isSelected(nodeId) : false;
4
+ instance,
5
+ multiSelect
6
+ } = useTreeViewContext();
7
+ const expandable = instance ? instance.isNodeExpandable(nodeId) : false;
8
+ const expanded = instance ? instance.isNodeExpanded(nodeId) : false;
9
+ const focused = instance ? instance.isNodeFocused(nodeId) : false;
10
+ const selected = instance ? instance.isNodeSelected(nodeId) : false;
11
+ const disabled = instance ? instance.isNodeDisabled(nodeId) : false;
21
12
  const handleExpansion = event => {
22
- if (!disabled) {
13
+ if (instance && !disabled) {
23
14
  if (!focused) {
24
- focus(event, nodeId);
15
+ instance.focusNode(event, nodeId);
25
16
  }
26
17
  const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
27
18
 
28
19
  // If already expanded and trying to toggle selection don't close
29
- if (expandable && !(multiple && isExpanded(nodeId))) {
30
- toggleExpansion(event, nodeId);
20
+ if (expandable && !(multiple && instance.isNodeExpanded(nodeId))) {
21
+ instance.toggleNodeExpansion(event, nodeId);
31
22
  }
32
23
  }
33
24
  };
34
25
  const handleSelection = event => {
35
- if (!disabled) {
26
+ if (instance && !disabled) {
36
27
  if (!focused) {
37
- focus(event, nodeId);
28
+ instance.focusNode(event, nodeId);
38
29
  }
39
30
  const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
40
31
  if (multiple) {
41
32
  if (event.shiftKey) {
42
- selectRange(event, {
33
+ instance.selectRange(event, {
43
34
  end: nodeId
44
35
  });
45
36
  } else {
46
- selectNode(event, nodeId, true);
37
+ instance.selectNode(event, nodeId, true);
47
38
  }
48
39
  } else {
49
- selectNode(event, nodeId);
40
+ instance.selectNode(event, nodeId);
50
41
  }
51
42
  }
52
43
  };