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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/CHANGELOG.md +162 -1
  2. package/README.md +3 -9
  3. package/TreeItem/TreeItem.d.ts +2 -2
  4. package/TreeItem/TreeItem.js +25 -34
  5. package/TreeItem/useTreeItem.js +18 -27
  6. package/TreeView/TreeView.d.ts +6 -3
  7. package/TreeView/TreeView.js +67 -710
  8. package/TreeView/TreeView.types.d.ts +4 -147
  9. package/index.d.ts +1 -0
  10. package/index.js +3 -2
  11. package/{TreeView/descendants.d.ts → internals/TreeViewProvider/DescendantProvider.d.ts} +1 -5
  12. package/internals/TreeViewProvider/TreeViewContext.d.ts +7 -0
  13. package/{TreeView → internals/TreeViewProvider}/TreeViewContext.js +8 -18
  14. package/internals/TreeViewProvider/TreeViewProvider.d.ts +9 -0
  15. package/internals/TreeViewProvider/TreeViewProvider.js +21 -0
  16. package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +18 -0
  17. package/internals/TreeViewProvider/index.d.ts +2 -0
  18. package/internals/TreeViewProvider/index.js +1 -0
  19. package/internals/TreeViewProvider/useTreeViewContext.d.ts +3 -0
  20. package/internals/TreeViewProvider/useTreeViewContext.js +3 -0
  21. package/internals/corePlugins/corePlugins.d.ts +7 -0
  22. package/internals/corePlugins/corePlugins.js +6 -0
  23. package/internals/corePlugins/index.d.ts +2 -0
  24. package/internals/corePlugins/index.js +1 -0
  25. package/internals/corePlugins/useTreeViewInstanceEvents/index.d.ts +2 -0
  26. package/internals/corePlugins/useTreeViewInstanceEvents/index.js +1 -0
  27. package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.d.ts +8 -0
  28. package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +35 -0
  29. package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.d.ts +21 -0
  30. package/internals/hooks/useInstanceEventHandler.d.ts +15 -0
  31. package/internals/hooks/useInstanceEventHandler.js +82 -0
  32. package/internals/models/events.d.ts +9 -0
  33. package/internals/models/helpers.d.ts +13 -0
  34. package/internals/models/helpers.js +1 -0
  35. package/internals/models/index.d.ts +3 -0
  36. package/internals/models/index.js +3 -0
  37. package/internals/models/plugin.d.ts +69 -0
  38. package/internals/models/plugin.js +1 -0
  39. package/internals/models/treeView.d.ts +23 -0
  40. package/internals/models/treeView.js +1 -0
  41. package/internals/plugins/defaultPlugins.d.ts +10 -0
  42. package/internals/plugins/defaultPlugins.js +9 -0
  43. package/internals/plugins/index.d.ts +2 -0
  44. package/internals/plugins/index.js +1 -0
  45. package/internals/plugins/useTreeViewContextValueBuilder/index.d.ts +2 -0
  46. package/internals/plugins/useTreeViewContextValueBuilder/index.js +1 -0
  47. package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.d.ts +3 -0
  48. package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +24 -0
  49. package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.d.ts +34 -0
  50. package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js +1 -0
  51. package/internals/plugins/useTreeViewExpansion/index.d.ts +2 -0
  52. package/internals/plugins/useTreeViewExpansion/index.js +1 -0
  53. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.d.ts +3 -0
  54. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +63 -0
  55. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +32 -0
  56. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +1 -0
  57. package/internals/plugins/useTreeViewFocus/index.d.ts +2 -0
  58. package/internals/plugins/useTreeViewFocus/index.js +1 -0
  59. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.d.ts +3 -0
  60. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +77 -0
  61. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +25 -0
  62. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +1 -0
  63. package/internals/plugins/useTreeViewKeyboardNavigation/index.d.ts +2 -0
  64. package/internals/plugins/useTreeViewKeyboardNavigation/index.js +1 -0
  65. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.d.ts +3 -0
  66. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +223 -0
  67. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +14 -0
  68. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +1 -0
  69. package/internals/plugins/useTreeViewNodes/index.d.ts +2 -0
  70. package/internals/plugins/useTreeViewNodes/index.js +1 -0
  71. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.d.ts +3 -0
  72. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +60 -0
  73. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +27 -0
  74. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.js +1 -0
  75. package/internals/plugins/useTreeViewSelection/index.d.ts +2 -0
  76. package/internals/plugins/useTreeViewSelection/index.js +1 -0
  77. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.d.ts +3 -0
  78. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +172 -0
  79. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +49 -0
  80. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +1 -0
  81. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +17 -0
  82. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +55 -0
  83. package/internals/useTreeView/index.d.ts +2 -0
  84. package/internals/useTreeView/index.js +1 -0
  85. package/internals/useTreeView/useTreeView.d.ts +3 -0
  86. package/internals/useTreeView/useTreeView.js +65 -0
  87. package/internals/useTreeView/useTreeView.types.d.ts +20 -0
  88. package/internals/useTreeView/useTreeView.types.js +1 -0
  89. package/internals/useTreeView/useTreeView.utils.d.ts +8 -0
  90. package/internals/useTreeView/useTreeView.utils.js +43 -0
  91. package/internals/useTreeView/useTreeViewModels.d.ts +6 -0
  92. package/internals/useTreeView/useTreeViewModels.js +63 -0
  93. package/internals/utils/EventManager.d.ts +29 -0
  94. package/internals/utils/EventManager.js +69 -0
  95. package/internals/utils/cleanupTracking/CleanupTracking.d.ts +9 -0
  96. package/internals/utils/cleanupTracking/CleanupTracking.js +1 -0
  97. package/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.d.ts +7 -0
  98. package/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +18 -0
  99. package/internals/utils/cleanupTracking/TimerBasedCleanupTracking.d.ts +10 -0
  100. package/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +38 -0
  101. package/internals/utils/publishTreeViewEvent.d.ts +5 -0
  102. package/internals/utils/publishTreeViewEvent.js +3 -0
  103. package/legacy/TreeItem/TreeItem.js +28 -35
  104. package/legacy/TreeItem/useTreeItem.js +18 -27
  105. package/legacy/TreeView/TreeView.js +67 -768
  106. package/legacy/index.js +3 -2
  107. package/legacy/internals/TreeViewProvider/TreeViewContext.js +21 -0
  108. package/legacy/internals/TreeViewProvider/TreeViewProvider.js +19 -0
  109. package/legacy/internals/TreeViewProvider/TreeViewProvider.types.js +1 -0
  110. package/legacy/internals/TreeViewProvider/index.js +1 -0
  111. package/legacy/internals/TreeViewProvider/useTreeViewContext.js +5 -0
  112. package/legacy/internals/corePlugins/corePlugins.js +6 -0
  113. package/legacy/internals/corePlugins/index.js +1 -0
  114. package/legacy/internals/corePlugins/useTreeViewInstanceEvents/index.js +1 -0
  115. package/legacy/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +45 -0
  116. package/legacy/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js +1 -0
  117. package/legacy/internals/hooks/useInstanceEventHandler.js +87 -0
  118. package/legacy/internals/models/events.js +1 -0
  119. package/legacy/internals/models/helpers.js +1 -0
  120. package/legacy/internals/models/index.js +3 -0
  121. package/legacy/internals/models/plugin.js +1 -0
  122. package/legacy/internals/models/treeView.js +1 -0
  123. package/legacy/internals/plugins/defaultPlugins.js +9 -0
  124. package/legacy/internals/plugins/index.js +1 -0
  125. package/legacy/internals/plugins/useTreeViewContextValueBuilder/index.js +1 -0
  126. package/legacy/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +25 -0
  127. package/legacy/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js +1 -0
  128. package/legacy/internals/plugins/useTreeViewExpansion/index.js +1 -0
  129. package/legacy/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +66 -0
  130. package/legacy/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +1 -0
  131. package/legacy/internals/plugins/useTreeViewFocus/index.js +1 -0
  132. package/legacy/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +87 -0
  133. package/legacy/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +1 -0
  134. package/legacy/internals/plugins/useTreeViewKeyboardNavigation/index.js +1 -0
  135. package/legacy/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +226 -0
  136. package/legacy/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +1 -0
  137. package/legacy/internals/plugins/useTreeViewNodes/index.js +1 -0
  138. package/legacy/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +71 -0
  139. package/legacy/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.js +1 -0
  140. package/legacy/internals/plugins/useTreeViewSelection/index.js +1 -0
  141. package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +188 -0
  142. package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +1 -0
  143. package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +55 -0
  144. package/legacy/internals/useTreeView/index.js +1 -0
  145. package/legacy/internals/useTreeView/useTreeView.js +71 -0
  146. package/legacy/internals/useTreeView/useTreeView.types.js +1 -0
  147. package/legacy/internals/useTreeView/useTreeView.utils.js +46 -0
  148. package/legacy/internals/useTreeView/useTreeViewModels.js +76 -0
  149. package/legacy/internals/utils/EventManager.js +91 -0
  150. package/legacy/internals/utils/cleanupTracking/CleanupTracking.js +1 -0
  151. package/legacy/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +29 -0
  152. package/legacy/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +52 -0
  153. package/legacy/internals/utils/publishTreeViewEvent.js +3 -0
  154. package/modern/TreeItem/TreeItem.js +25 -34
  155. package/modern/TreeItem/useTreeItem.js +18 -27
  156. package/modern/TreeView/TreeView.js +67 -709
  157. package/modern/index.js +3 -2
  158. package/modern/{TreeView → internals/TreeViewProvider}/TreeViewContext.js +8 -18
  159. package/modern/internals/TreeViewProvider/TreeViewProvider.js +21 -0
  160. package/modern/internals/TreeViewProvider/TreeViewProvider.types.js +1 -0
  161. package/modern/internals/TreeViewProvider/index.js +1 -0
  162. package/modern/internals/TreeViewProvider/useTreeViewContext.js +3 -0
  163. package/modern/internals/corePlugins/corePlugins.js +6 -0
  164. package/modern/internals/corePlugins/index.js +1 -0
  165. package/modern/internals/corePlugins/useTreeViewInstanceEvents/index.js +1 -0
  166. package/modern/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +35 -0
  167. package/modern/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js +1 -0
  168. package/modern/internals/hooks/useInstanceEventHandler.js +77 -0
  169. package/modern/internals/models/events.js +1 -0
  170. package/modern/internals/models/helpers.js +1 -0
  171. package/modern/internals/models/index.js +3 -0
  172. package/modern/internals/models/plugin.js +1 -0
  173. package/modern/internals/models/treeView.js +1 -0
  174. package/modern/internals/plugins/defaultPlugins.js +9 -0
  175. package/modern/internals/plugins/index.js +1 -0
  176. package/modern/internals/plugins/useTreeViewContextValueBuilder/index.js +1 -0
  177. package/modern/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +24 -0
  178. package/modern/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js +1 -0
  179. package/modern/internals/plugins/useTreeViewExpansion/index.js +1 -0
  180. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +57 -0
  181. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +1 -0
  182. package/modern/internals/plugins/useTreeViewFocus/index.js +1 -0
  183. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +72 -0
  184. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +1 -0
  185. package/modern/internals/plugins/useTreeViewKeyboardNavigation/index.js +1 -0
  186. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +222 -0
  187. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +1 -0
  188. package/modern/internals/plugins/useTreeViewNodes/index.js +1 -0
  189. package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +60 -0
  190. package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.js +1 -0
  191. package/modern/internals/plugins/useTreeViewSelection/index.js +1 -0
  192. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +169 -0
  193. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +1 -0
  194. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +55 -0
  195. package/modern/internals/useTreeView/index.js +1 -0
  196. package/modern/internals/useTreeView/useTreeView.js +65 -0
  197. package/modern/internals/useTreeView/useTreeView.types.js +1 -0
  198. package/modern/internals/useTreeView/useTreeView.utils.js +43 -0
  199. package/modern/internals/useTreeView/useTreeViewModels.js +63 -0
  200. package/modern/internals/utils/EventManager.js +69 -0
  201. package/modern/internals/utils/cleanupTracking/CleanupTracking.js +1 -0
  202. package/modern/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +18 -0
  203. package/modern/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +38 -0
  204. package/modern/internals/utils/publishTreeViewEvent.js +3 -0
  205. package/node/TreeItem/TreeItem.js +27 -36
  206. package/node/TreeItem/useTreeItem.js +18 -29
  207. package/node/TreeView/TreeView.js +67 -709
  208. package/node/index.js +14 -2
  209. package/node/{TreeView → internals/TreeViewProvider}/TreeViewContext.js +10 -19
  210. package/node/internals/TreeViewProvider/TreeViewProvider.js +29 -0
  211. package/node/internals/TreeViewProvider/index.js +12 -0
  212. package/node/internals/TreeViewProvider/useTreeViewContext.js +12 -0
  213. package/node/internals/corePlugins/corePlugins.js +13 -0
  214. package/node/internals/corePlugins/index.js +12 -0
  215. package/node/internals/corePlugins/useTreeViewInstanceEvents/index.js +12 -0
  216. package/node/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +44 -0
  217. package/node/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js +5 -0
  218. package/node/internals/hooks/useInstanceEventHandler.js +88 -0
  219. package/node/internals/models/events.js +5 -0
  220. package/node/internals/models/helpers.js +5 -0
  221. package/node/internals/models/index.js +38 -0
  222. package/node/internals/models/plugin.js +5 -0
  223. package/node/internals/models/treeView.js +5 -0
  224. package/node/internals/plugins/defaultPlugins.js +16 -0
  225. package/node/internals/plugins/index.js +12 -0
  226. package/node/internals/plugins/useTreeViewContextValueBuilder/index.js +12 -0
  227. package/node/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +32 -0
  228. package/node/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js +5 -0
  229. package/node/internals/plugins/useTreeViewExpansion/index.js +12 -0
  230. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +67 -0
  231. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +5 -0
  232. package/node/internals/plugins/useTreeViewFocus/index.js +12 -0
  233. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +82 -0
  234. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +5 -0
  235. package/node/internals/plugins/useTreeViewKeyboardNavigation/index.js +12 -0
  236. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +232 -0
  237. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +5 -0
  238. package/node/internals/plugins/useTreeViewNodes/index.js +12 -0
  239. package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +70 -0
  240. package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.js +5 -0
  241. package/node/internals/plugins/useTreeViewSelection/index.js +12 -0
  242. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +179 -0
  243. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +5 -0
  244. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +62 -0
  245. package/node/internals/useTreeView/index.js +12 -0
  246. package/node/internals/useTreeView/useTreeView.js +75 -0
  247. package/node/internals/useTreeView/useTreeView.types.js +5 -0
  248. package/node/internals/useTreeView/useTreeView.utils.js +54 -0
  249. package/node/internals/useTreeView/useTreeViewModels.js +73 -0
  250. package/node/internals/utils/EventManager.js +76 -0
  251. package/node/internals/utils/cleanupTracking/CleanupTracking.js +5 -0
  252. package/node/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +25 -0
  253. package/node/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +45 -0
  254. package/node/internals/utils/publishTreeViewEvent.js +10 -0
  255. package/package.json +3 -3
  256. package/themeAugmentation/props.d.ts +1 -1
  257. package/TreeView/TreeViewContext.d.ts +0 -6
  258. package/internals/models.d.ts +0 -1
  259. package/legacy/TreeView/TreeViewContext.js +0 -41
  260. /package/{TreeView/descendants.js → internals/TreeViewProvider/DescendantProvider.js} +0 -0
  261. /package/internals/{models.js → TreeViewProvider/TreeViewProvider.types.js} +0 -0
  262. /package/{legacy/internals/models.js → internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js} +0 -0
  263. /package/{modern/internals/models.js → internals/models/events.js} +0 -0
  264. /package/legacy/{TreeView/descendants.js → internals/TreeViewProvider/DescendantProvider.js} +0 -0
  265. /package/modern/{TreeView/descendants.js → internals/TreeViewProvider/DescendantProvider.js} +0 -0
  266. /package/node/{TreeView/descendants.js → internals/TreeViewProvider/DescendantProvider.js} +0 -0
  267. /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 => {
@@ -59,6 +59,8 @@ const StyledTreeItemContent = styled(TreeItemContent, {
59
59
  }) => ({
60
60
  padding: '0 8px',
61
61
  width: '100%',
62
+ boxSizing: 'border-box',
63
+ // prevent width + padding to overflow
62
64
  display: 'flex',
63
65
  alignItems: 'center',
64
66
  cursor: 'pointer',
@@ -101,10 +103,12 @@ const StyledTreeItemContent = styled(TreeItemContent, {
101
103
  }
102
104
  },
103
105
  [`& .${treeItemClasses.label}`]: _extends({
106
+ paddingLeft: 4,
104
107
  width: '100%',
108
+ boxSizing: 'border-box',
109
+ // prevent width + padding to overflow
105
110
  // fixes overflow - see https://github.com/mui/material-ui/issues/27372
106
111
  minWidth: 0,
107
- paddingLeft: 4,
108
112
  position: 'relative'
109
113
  }, theme.typography.body1)
110
114
  }));
@@ -122,11 +126,11 @@ const TreeItemGroup = styled(Collapse, {
122
126
  *
123
127
  * Demos:
124
128
  *
125
- * - [Tree View](https://mui.com/material-ui/react-tree-view/)
129
+ * - [Tree View](https://mui.com/x/react-tree-view/)
126
130
  *
127
131
  * API:
128
132
  *
129
- * - [TreeItem API](https://mui.com/material-ui/api/tree-item/)
133
+ * - [TreeItem API](https://mui.com/x/api/tree-view/tree-item/)
130
134
  */
131
135
  export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps, ref) {
132
136
  const props = useThemeProps({
@@ -154,19 +158,11 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
154
158
  other = _objectWithoutPropertiesLoose(props, _excluded);
155
159
  const {
156
160
  icons: contextIcons,
157
- focus,
158
- isExpanded,
159
- isFocused,
160
- isSelected,
161
- isDisabled,
162
161
  multiSelect,
163
162
  disabledItemsFocusable,
164
- mapFirstChar,
165
- unMapFirstChar,
166
- registerNode,
167
- unregisterNode,
168
- treeId
169
- } = React.useContext(TreeViewContext);
163
+ treeId,
164
+ instance
165
+ } = useTreeViewContext();
170
166
  let id;
171
167
  if (idProp != null) {
172
168
  id = idProp;
@@ -185,10 +181,10 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
185
181
  parentId
186
182
  } = useDescendant(descendant);
187
183
  const expandable = Boolean(Array.isArray(children) ? children.length : children);
188
- const expanded = isExpanded ? isExpanded(nodeId) : false;
189
- const focused = isFocused ? isFocused(nodeId) : false;
190
- const selected = isSelected ? isSelected(nodeId) : false;
191
- 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;
192
188
  const ownerState = _extends({}, props, {
193
189
  expanded,
194
190
  focused,
@@ -212,8 +208,8 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
212
208
  }
213
209
  React.useEffect(() => {
214
210
  // On the first render a node's index will be -1. We want to wait for the real index.
215
- if (registerNode && unregisterNode && index !== -1) {
216
- registerNode({
211
+ if (instance && index !== -1) {
212
+ instance.updateNode({
217
213
  id: nodeId,
218
214
  idAttribute: id,
219
215
  index,
@@ -221,21 +217,16 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
221
217
  expandable,
222
218
  disabled: disabledProp
223
219
  });
224
- return () => {
225
- unregisterNode(nodeId);
226
- };
220
+ return () => instance.removeNode(nodeId);
227
221
  }
228
222
  return undefined;
229
- }, [registerNode, unregisterNode, parentId, index, nodeId, expandable, disabledProp, id]);
223
+ }, [instance, parentId, index, nodeId, expandable, disabledProp, id]);
230
224
  React.useEffect(() => {
231
- if (mapFirstChar && unMapFirstChar && label) {
232
- mapFirstChar(nodeId, (contentRef.current?.textContent ?? '').substring(0, 1).toLowerCase());
233
- return () => {
234
- unMapFirstChar(nodeId);
235
- };
225
+ if (instance && label) {
226
+ return instance.mapFirstChar(nodeId, (contentRef.current?.textContent ?? '').substring(0, 1).toLowerCase());
236
227
  }
237
228
  return undefined;
238
- }, [mapFirstChar, unMapFirstChar, nodeId, label]);
229
+ }, [instance, nodeId, label]);
239
230
  let ariaSelected;
240
231
  if (multiSelect) {
241
232
  ariaSelected = selected;
@@ -262,8 +253,8 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
262
253
  });
263
254
  }
264
255
  const unfocusable = !disabledItemsFocusable && disabled;
265
- if (!focused && event.currentTarget === event.target && !unfocusable) {
266
- focus(event, nodeId);
256
+ if (instance && !focused && event.currentTarget === event.target && !unfocusable) {
257
+ instance.focusNode(event, nodeId);
267
258
  }
268
259
  }
269
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
  };