@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
@@ -1,8 +1,8 @@
1
1
  import * as React from 'react';
2
2
  import { Theme } from '@mui/material/styles';
3
3
  import { SxProps } from '@mui/system';
4
- import { DefaultizedProps } from '../internals/models';
5
4
  import { TreeViewClasses } from './treeViewClasses';
5
+ import { DefaultTreeViewPluginParameters } from '../internals/plugins/defaultPlugins';
6
6
  export interface TreeViewPropsBase extends React.HTMLAttributes<HTMLUListElement> {
7
7
  /**
8
8
  * The content of the component.
@@ -16,155 +16,12 @@ export interface TreeViewPropsBase extends React.HTMLAttributes<HTMLUListElement
16
16
  * Override or extend the styles applied to the component.
17
17
  */
18
18
  classes?: Partial<TreeViewClasses>;
19
- /**
20
- * The default icon used to collapse the node.
21
- */
22
- defaultCollapseIcon?: React.ReactNode;
23
- /**
24
- * The default icon displayed next to a end node. This is applied to all
25
- * tree nodes and can be overridden by the TreeItem `icon` prop.
26
- */
27
- defaultEndIcon?: React.ReactNode;
28
- /**
29
- * Expanded node ids.
30
- * Used when the item's expansion are not controlled.
31
- * @default []
32
- */
33
- defaultExpanded?: string[];
34
- /**
35
- * The default icon used to expand the node.
36
- */
37
- defaultExpandIcon?: React.ReactNode;
38
- /**
39
- * The default icon displayed next to a parent node. This is applied to all
40
- * parent nodes and can be overridden by the TreeItem `icon` prop.
41
- */
42
- defaultParentIcon?: React.ReactNode;
43
- /**
44
- * If `true`, will allow focus on disabled items.
45
- * @default false
46
- */
47
- disabledItemsFocusable?: boolean;
48
- /**
49
- * If `true` selection is disabled.
50
- * @default false
51
- */
52
- disableSelection?: boolean;
53
- /**
54
- * Expanded node ids.
55
- * Used when the item's expansion are controlled.
56
- */
57
- expanded?: string[];
58
- /**
59
- * This prop is used to help implement the accessibility logic.
60
- * If you don't provide this prop. It falls back to a randomly generated id.
61
- */
62
- id?: string;
63
- /**
64
- * Callback fired when tree items are focused.
65
- * @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
66
- * @param {string} nodeId The id of the node focused.
67
- * @param {string} value of the focused node.
68
- */
69
- onNodeFocus?: (event: React.SyntheticEvent, nodeId: string) => void;
70
- /**
71
- * Callback fired when tree items are expanded/collapsed.
72
- * @param {React.SyntheticEvent} event The event source of the callback.
73
- * @param {array} nodeIds The ids of the expanded nodes.
74
- */
75
- onNodeToggle?: (event: React.SyntheticEvent, nodeIds: string[]) => void;
76
19
  /**
77
20
  * The system prop that allows defining system overrides as well as additional CSS styles.
78
21
  */
79
22
  sx?: SxProps<Theme>;
80
23
  }
81
- export interface MultiSelectTreeViewProps extends TreeViewPropsBase {
82
- /**
83
- * Selected node ids. (Uncontrolled)
84
- * When `multiSelect` is true this takes an array of strings; when false (default) a string.
85
- * @default []
86
- */
87
- defaultSelected?: string[];
88
- /**
89
- * Selected node ids. (Controlled)
90
- * When `multiSelect` is true this takes an array of strings; when false (default) a string.
91
- */
92
- selected?: string[];
93
- /**
94
- * If true `ctrl` and `shift` will trigger multiselect.
95
- * @default false
96
- */
97
- multiSelect?: true;
98
- /**
99
- * Callback fired when tree items are selected/unselected.
100
- * @param {React.SyntheticEvent} event The event source of the callback
101
- * @param {string[] | string} nodeIds Ids of the selected nodes. When `multiSelect` is true
102
- * this is an array of strings; when false (default) a string.
103
- */
104
- onNodeSelect?: (event: React.SyntheticEvent, nodeIds: string[]) => void;
105
- }
106
- export interface SingleSelectTreeViewProps extends TreeViewPropsBase {
107
- /**
108
- * Selected node ids. (Uncontrolled)
109
- * When `multiSelect` is true this takes an array of strings; when false (default) a string.
110
- * @default []
111
- */
112
- defaultSelected?: string | null;
113
- /**
114
- * Selected node ids. (Controlled)
115
- * When `multiSelect` is true this takes an array of strings; when false (default) a string.
116
- */
117
- selected?: string | null;
118
- /**
119
- * If true `ctrl` and `shift` will trigger multiselect.
120
- * @default false
121
- */
122
- multiSelect?: false;
123
- /**
124
- * Callback fired when tree items are selected/unselected.
125
- * @param {React.SyntheticEvent} event The event source of the callback
126
- * @param {string[] | string} nodeIds Ids of the selected nodes. When `multiSelect` is true
127
- * this is an array of strings; when false (default) a string.
128
- */
129
- onNodeSelect?: (event: React.SyntheticEvent, nodeIds: string) => void;
130
- }
131
- export type TreeViewProps = SingleSelectTreeViewProps | MultiSelectTreeViewProps;
132
- export type TreeViewDefaultizedProps = DefaultizedProps<TreeViewProps, 'defaultExpanded' | 'defaultSelected' | 'disabledItemsFocusable' | 'disableSelection' | 'multiSelect'>;
133
- export interface TreeViewNode {
134
- id: string;
135
- idAttribute: string | undefined;
136
- index: number;
137
- parentId: string | null;
138
- expandable: boolean;
139
- disabled: boolean | undefined;
140
- }
141
- export interface TreeViewItemRange {
142
- start?: string | null;
143
- end?: string | null;
144
- next?: string | null;
145
- current?: string;
146
- }
147
- export interface TreeViewContextValue {
148
- registerNode: (node: TreeViewNode) => void;
149
- unregisterNode: (nodeId: string) => void;
150
- isFocused: (nodeId: string) => boolean;
151
- isSelected: (nodeId: string) => boolean;
152
- isExpanded: (nodeId: string) => boolean;
153
- isExpandable: (nodeId: string) => boolean;
154
- isDisabled: (nodeId: string) => boolean;
155
- mapFirstChar: (nodeId: string, firstChar: string) => void;
156
- unMapFirstChar: (nodeId: string) => void;
157
- focus: (event: React.SyntheticEvent, nodeId: string) => void;
158
- toggleExpansion: (event: React.SyntheticEvent, value?: string) => void;
159
- selectNode: (event: React.SyntheticEvent, nodeId: string, multiple?: boolean) => void;
160
- selectRange: (event: React.SyntheticEvent, nodes: TreeViewItemRange, stacked?: boolean) => void;
161
- multiSelect: boolean;
162
- disabledItemsFocusable: boolean;
163
- treeId: string | undefined;
164
- icons: {
165
- defaultCollapseIcon: React.ReactNode;
166
- defaultExpandIcon: React.ReactNode;
167
- defaultParentIcon: React.ReactNode;
168
- defaultEndIcon: React.ReactNode;
169
- };
24
+ export interface TreeViewProps<Multiple extends boolean | undefined> extends DefaultTreeViewPluginParameters<Multiple>, TreeViewPropsBase {
170
25
  }
26
+ export type SingleSelectTreeViewProps = TreeViewProps<false>;
27
+ export type MultiSelectTreeViewProps = TreeViewProps<true>;
package/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './TreeItem';
2
2
  export * from './TreeView';
3
+ export { unstable_resetCleanupTracking } from './internals/hooks/useInstanceEventHandler';
package/index.js CHANGED
@@ -1,9 +1,10 @@
1
1
  /**
2
- * @mui/x-tree-view v6.0.0-alpha.3
2
+ * @mui/x-tree-view v6.0.0-beta.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
8
  export * from './TreeItem';
9
- export * from './TreeView';
9
+ export * from './TreeView';
10
+ export { unstable_resetCleanupTracking } from './internals/hooks/useInstanceEventHandler';
@@ -1,5 +1,4 @@
1
1
  import * as React from 'react';
2
- import PropTypes from 'prop-types';
3
2
  /**
4
3
  * This hook registers our descendant by passing it into an array. We can then
5
4
  * search that array by to find its index when registering it in the component.
@@ -30,10 +29,7 @@ interface DescendantProviderProps {
30
29
  }
31
30
  export declare function DescendantProvider(props: DescendantProviderProps): React.JSX.Element;
32
31
  export declare namespace DescendantProvider {
33
- var propTypes: {
34
- children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
35
- id: PropTypes.Requireable<string>;
36
- };
32
+ var propTypes: any;
37
33
  }
38
34
  export interface TreeItemDescendant {
39
35
  element: HTMLLIElement;
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ import { TreeViewContextValue } from './TreeViewProvider.types';
3
+ export declare const DEFAULT_TREE_VIEW_CONTEXT_VALUE: TreeViewContextValue<any>;
4
+ /**
5
+ * @ignore - internal component.
6
+ */
7
+ export declare const TreeViewContext: React.Context<TreeViewContextValue<any>>;
@@ -1,21 +1,6 @@
1
1
  import * as React from 'react';
2
- /**
3
- * @ignore - internal component.
4
- */
5
- export const TreeViewContext = /*#__PURE__*/React.createContext({
6
- registerNode: () => {},
7
- unregisterNode: () => {},
8
- isFocused: () => false,
9
- isSelected: () => false,
10
- isExpanded: () => false,
11
- isExpandable: () => false,
12
- isDisabled: () => false,
13
- mapFirstChar: () => {},
14
- unMapFirstChar: () => {},
15
- focus: () => {},
16
- toggleExpansion: () => {},
17
- selectNode: () => {},
18
- selectRange: () => {},
2
+ export const DEFAULT_TREE_VIEW_CONTEXT_VALUE = {
3
+ instance: null,
19
4
  multiSelect: false,
20
5
  disabledItemsFocusable: false,
21
6
  treeId: undefined,
@@ -25,7 +10,12 @@ export const TreeViewContext = /*#__PURE__*/React.createContext({
25
10
  defaultParentIcon: null,
26
11
  defaultEndIcon: null
27
12
  }
28
- });
13
+ };
14
+
15
+ /**
16
+ * @ignore - internal component.
17
+ */
18
+ export const TreeViewContext = /*#__PURE__*/React.createContext(DEFAULT_TREE_VIEW_CONTEXT_VALUE);
29
19
  if (process.env.NODE_ENV !== 'production') {
30
20
  TreeViewContext.displayName = 'TreeViewContext';
31
21
  }
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ import { TreeViewProviderProps } from './TreeViewProvider.types';
3
+ import { TreeViewAnyPluginSignature } from '../models';
4
+ /**
5
+ * Sets up the contexts for the underlying TreeItem components.
6
+ *
7
+ * @ignore - do not document.
8
+ */
9
+ export declare function TreeViewProvider<TPlugins extends readonly TreeViewAnyPluginSignature[]>(props: TreeViewProviderProps<TPlugins>): React.JSX.Element;
@@ -0,0 +1,21 @@
1
+ import * as React from 'react';
2
+ import { TreeViewContext } from './TreeViewContext';
3
+ import { DescendantProvider } from './DescendantProvider';
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ /**
6
+ * Sets up the contexts for the underlying TreeItem components.
7
+ *
8
+ * @ignore - do not document.
9
+ */
10
+ export function TreeViewProvider(props) {
11
+ const {
12
+ value,
13
+ children
14
+ } = props;
15
+ return /*#__PURE__*/_jsx(TreeViewContext.Provider, {
16
+ value: value,
17
+ children: /*#__PURE__*/_jsx(DescendantProvider, {
18
+ children: children
19
+ })
20
+ });
21
+ }
@@ -0,0 +1,18 @@
1
+ import * as React from 'react';
2
+ import { TreeViewAnyPluginSignature, TreeViewInstance } from '../models';
3
+ export interface TreeViewContextValue<TPlugins extends readonly TreeViewAnyPluginSignature[]> {
4
+ treeId: string | undefined;
5
+ instance: TreeViewInstance<TPlugins> | null;
6
+ multiSelect: boolean;
7
+ disabledItemsFocusable: boolean;
8
+ icons: {
9
+ defaultCollapseIcon: React.ReactNode;
10
+ defaultExpandIcon: React.ReactNode;
11
+ defaultParentIcon: React.ReactNode;
12
+ defaultEndIcon: React.ReactNode;
13
+ };
14
+ }
15
+ export interface TreeViewProviderProps<TPlugins extends readonly TreeViewAnyPluginSignature[]> {
16
+ value: TreeViewContextValue<TPlugins>;
17
+ children: React.ReactNode;
18
+ }
@@ -0,0 +1,2 @@
1
+ export { TreeViewProvider } from './TreeViewProvider';
2
+ export type { TreeViewProviderProps, TreeViewContextValue } from './TreeViewProvider.types';
@@ -0,0 +1 @@
1
+ export { TreeViewProvider } from './TreeViewProvider';
@@ -0,0 +1,3 @@
1
+ import { TreeViewAnyPluginSignature } from '../models';
2
+ import { TreeViewContextValue } from './TreeViewProvider.types';
3
+ export declare const useTreeViewContext: <TPlugins extends readonly TreeViewAnyPluginSignature[]>() => TreeViewContextValue<TPlugins>;
@@ -0,0 +1,3 @@
1
+ import * as React from 'react';
2
+ import { TreeViewContext } from './TreeViewContext';
3
+ export const useTreeViewContext = () => React.useContext(TreeViewContext);
@@ -0,0 +1,7 @@
1
+ import { ConvertPluginsIntoSignatures, MergePlugins } from '../models';
2
+ /**
3
+ * Internal plugins that creates the tools used by the other plugins.
4
+ * These plugins are used by the tree view components.
5
+ */
6
+ export declare const TREE_VIEW_CORE_PLUGINS: readonly [import("../models").TreeViewPlugin<import("./useTreeViewInstanceEvents").UseTreeViewInstanceEventsSignature>];
7
+ export type TreeViewCorePluginsSignature = MergePlugins<ConvertPluginsIntoSignatures<typeof TREE_VIEW_CORE_PLUGINS>>;
@@ -0,0 +1,6 @@
1
+ import { useTreeViewInstanceEvents } from './useTreeViewInstanceEvents';
2
+ /**
3
+ * Internal plugins that creates the tools used by the other plugins.
4
+ * These plugins are used by the tree view components.
5
+ */
6
+ export const TREE_VIEW_CORE_PLUGINS = [useTreeViewInstanceEvents];
@@ -0,0 +1,2 @@
1
+ export { TREE_VIEW_CORE_PLUGINS } from './corePlugins';
2
+ export type { TreeViewCorePluginsSignature } from './corePlugins';
@@ -0,0 +1 @@
1
+ export { TREE_VIEW_CORE_PLUGINS } from './corePlugins';
@@ -0,0 +1,2 @@
1
+ export { useTreeViewInstanceEvents } from './useTreeViewInstanceEvents';
2
+ export type { UseTreeViewInstanceEventsSignature } from './useTreeViewInstanceEvents.types';
@@ -0,0 +1 @@
1
+ export { useTreeViewInstanceEvents } from './useTreeViewInstanceEvents';
@@ -0,0 +1,8 @@
1
+ import type { TreeViewPlugin } from '../../models';
2
+ import { UseTreeViewInstanceEventsSignature } from './useTreeViewInstanceEvents.types';
3
+ /**
4
+ * Plugin responsible for the registration of the nodes defined as JSX children of the TreeView.
5
+ * When we will have both a SimpleTreeView using JSX children and a TreeView using a data prop,
6
+ * this plugin will only be used by SimpleTreeView.
7
+ */
8
+ export declare const useTreeViewInstanceEvents: TreeViewPlugin<UseTreeViewInstanceEventsSignature>;
@@ -0,0 +1,35 @@
1
+ import * as React from 'react';
2
+ import { EventManager } from '../../utils/EventManager';
3
+ import { populateInstance } from '../../useTreeView/useTreeView.utils';
4
+ const isSyntheticEvent = event => {
5
+ return event.isPropagationStopped !== undefined;
6
+ };
7
+
8
+ /**
9
+ * Plugin responsible for the registration of the nodes defined as JSX children of the TreeView.
10
+ * When we will have both a SimpleTreeView using JSX children and a TreeView using a data prop,
11
+ * this plugin will only be used by SimpleTreeView.
12
+ */
13
+ export const useTreeViewInstanceEvents = ({
14
+ instance
15
+ }) => {
16
+ const [eventManager] = React.useState(() => new EventManager());
17
+ const publishEvent = React.useCallback((...args) => {
18
+ const [name, params, event = {}] = args;
19
+ event.defaultMuiPrevented = false;
20
+ if (isSyntheticEvent(event) && event.isPropagationStopped()) {
21
+ return;
22
+ }
23
+ eventManager.emit(name, params, event);
24
+ }, [eventManager]);
25
+ const subscribeEvent = React.useCallback((event, handler) => {
26
+ eventManager.on(event, handler);
27
+ return () => {
28
+ eventManager.removeListener(event, handler);
29
+ };
30
+ }, [eventManager]);
31
+ populateInstance(instance, {
32
+ $$publishEvent: publishEvent,
33
+ $$subscribeEvent: subscribeEvent
34
+ });
35
+ };
@@ -0,0 +1,21 @@
1
+ import { TreeViewPluginSignature } from '../../models';
2
+ import { TreeViewEventListener } from '../../models/events';
3
+ export interface UseTreeViewInstanceEventsInstance {
4
+ /**
5
+ * Should never be used directly.
6
+ * Please use `useInstanceEventHandler` instead.
7
+ * @param {string} eventName Name of the event to subscribe to.
8
+ * @param {TreeViewEventListener<any>} handler Event handler to call when the event is published.
9
+ * @returns {() => void} Cleanup function.
10
+ */
11
+ $$subscribeEvent: (eventName: string, handler: TreeViewEventListener<any>) => () => void;
12
+ /**
13
+ * Should never be used directly.
14
+ * Please use `publishTreeViewEvent` instead.
15
+ * @param {string} eventName Name of the event to publish.
16
+ * @param {any} params The params to publish with the event.
17
+ */
18
+ $$publishEvent: (eventName: string, params: any) => void;
19
+ }
20
+ export type UseTreeViewInstanceEventsSignature = TreeViewPluginSignature<{}, {}, UseTreeViewInstanceEventsInstance, {}, {}, never, [
21
+ ]>;
@@ -0,0 +1,15 @@
1
+ import { CleanupTracking } from '../utils/cleanupTracking/CleanupTracking';
2
+ import { TreeViewAnyPluginSignature, TreeViewUsedEvents } from '../models';
3
+ import { TreeViewEventListener } from '../models/events';
4
+ import { UseTreeViewInstanceEventsInstance } from '../corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types';
5
+ interface RegistryContainer {
6
+ registry: CleanupTracking | null;
7
+ }
8
+ export declare function createUseInstanceEventHandler(registryContainer: RegistryContainer): <Instance extends UseTreeViewInstanceEventsInstance & {
9
+ $$signature: TreeViewAnyPluginSignature;
10
+ }, E extends keyof Instance["$$signature"]["events"] | keyof import("../models").MergePluginsProperty<[import("../corePlugins").TreeViewCorePluginsSignature, ...Instance["$$signature"]["dependantPlugins"]], "events">>(instance: Instance, eventName: E, handler: TreeViewEventListener<TreeViewUsedEvents<Instance["$$signature"]>[E]>) => void;
11
+ export declare const unstable_resetCleanupTracking: () => void;
12
+ export declare const useInstanceEventHandler: <Instance extends UseTreeViewInstanceEventsInstance & {
13
+ $$signature: TreeViewAnyPluginSignature;
14
+ }, E extends keyof Instance["$$signature"]["events"] | keyof import("../models").MergePluginsProperty<[import("../corePlugins").TreeViewCorePluginsSignature, ...Instance["$$signature"]["dependantPlugins"]], "events">>(instance: Instance, eventName: E, handler: TreeViewEventListener<TreeViewUsedEvents<Instance["$$signature"]>[E]>) => void;
15
+ export {};
@@ -0,0 +1,82 @@
1
+ import * as React from 'react';
2
+ import { TimerBasedCleanupTracking } from '../utils/cleanupTracking/TimerBasedCleanupTracking';
3
+ import { FinalizationRegistryBasedCleanupTracking } from '../utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking';
4
+ // We use class to make it easier to detect in heap snapshots by name
5
+ class ObjectToBeRetainedByReact {}
6
+
7
+ // Based on https://github.com/Bnaya/use-dispose-uncommitted/blob/main/src/finalization-registry-based-impl.ts
8
+ // Check https://github.com/facebook/react/issues/15317 to get more information
9
+ export function createUseInstanceEventHandler(registryContainer) {
10
+ let cleanupTokensCounter = 0;
11
+ return function useInstanceEventHandler(instance, eventName, handler) {
12
+ if (registryContainer.registry === null) {
13
+ registryContainer.registry = typeof FinalizationRegistry !== 'undefined' ? new FinalizationRegistryBasedCleanupTracking() : new TimerBasedCleanupTracking();
14
+ }
15
+ const [objectRetainedByReact] = React.useState(new ObjectToBeRetainedByReact());
16
+ const subscription = React.useRef(null);
17
+ const handlerRef = React.useRef();
18
+ handlerRef.current = handler;
19
+ const cleanupTokenRef = React.useRef(null);
20
+ if (!subscription.current && handlerRef.current) {
21
+ const enhancedHandler = (params, event) => {
22
+ if (!event.defaultMuiPrevented) {
23
+ var _handlerRef$current;
24
+ (_handlerRef$current = handlerRef.current) == null || _handlerRef$current.call(handlerRef, params, event);
25
+ }
26
+ };
27
+ subscription.current = instance.$$subscribeEvent(eventName, enhancedHandler);
28
+ cleanupTokensCounter += 1;
29
+ cleanupTokenRef.current = {
30
+ cleanupToken: cleanupTokensCounter
31
+ };
32
+ registryContainer.registry.register(objectRetainedByReact,
33
+ // The callback below will be called once this reference stops being retained
34
+ () => {
35
+ var _subscription$current;
36
+ (_subscription$current = subscription.current) == null || _subscription$current.call(subscription);
37
+ subscription.current = null;
38
+ cleanupTokenRef.current = null;
39
+ }, cleanupTokenRef.current);
40
+ } else if (!handlerRef.current && subscription.current) {
41
+ subscription.current();
42
+ subscription.current = null;
43
+ if (cleanupTokenRef.current) {
44
+ registryContainer.registry.unregister(cleanupTokenRef.current);
45
+ cleanupTokenRef.current = null;
46
+ }
47
+ }
48
+ React.useEffect(() => {
49
+ if (!subscription.current && handlerRef.current) {
50
+ const enhancedHandler = (params, event) => {
51
+ if (!event.defaultMuiPrevented) {
52
+ var _handlerRef$current2;
53
+ (_handlerRef$current2 = handlerRef.current) == null || _handlerRef$current2.call(handlerRef, params, event);
54
+ }
55
+ };
56
+ subscription.current = instance.$$subscribeEvent(eventName, enhancedHandler);
57
+ }
58
+ if (cleanupTokenRef.current && registryContainer.registry) {
59
+ // If the effect was called, it means that this render was committed
60
+ // so we can trust the cleanup function to remove the listener.
61
+ registryContainer.registry.unregister(cleanupTokenRef.current);
62
+ cleanupTokenRef.current = null;
63
+ }
64
+ return () => {
65
+ var _subscription$current2;
66
+ (_subscription$current2 = subscription.current) == null || _subscription$current2.call(subscription);
67
+ subscription.current = null;
68
+ };
69
+ }, [instance, eventName]);
70
+ };
71
+ }
72
+ const registryContainer = {
73
+ registry: null
74
+ };
75
+
76
+ // eslint-disable-next-line @typescript-eslint/naming-convention
77
+ export const unstable_resetCleanupTracking = () => {
78
+ var _registryContainer$re;
79
+ (_registryContainer$re = registryContainer.registry) == null || _registryContainer$re.reset();
80
+ registryContainer.registry = null;
81
+ };
82
+ export const useInstanceEventHandler = createUseInstanceEventHandler(registryContainer);
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ export interface TreeViewEventLookupElement {
3
+ params: object;
4
+ }
5
+ export type TreeViewEventListener<E extends TreeViewEventLookupElement> = (params: E['params'], event: MuiEvent<{}>) => void;
6
+ export type MuiBaseEvent = React.SyntheticEvent<HTMLElement> | DocumentEventMap[keyof DocumentEventMap] | {};
7
+ export type MuiEvent<E extends MuiBaseEvent = MuiBaseEvent> = E & {
8
+ defaultMuiPrevented?: boolean;
9
+ };
@@ -0,0 +1,13 @@
1
+ import { TreeViewAnyPluginSignature, TreeViewPlugin } from './plugin';
2
+ export type DefaultizedProps<P extends {}, RequiredProps extends keyof P, AdditionalProps extends {} = {}> = Omit<P, RequiredProps | keyof AdditionalProps> & Required<Pick<P, RequiredProps>> & AdditionalProps;
3
+ export type MergePluginsProperty<TPlugins extends readonly any[], TProperty extends keyof TreeViewAnyPluginSignature> = TPlugins extends readonly [plugin: infer P, ...otherPlugin: infer R] ? P extends TreeViewAnyPluginSignature ? P[TProperty] & MergePluginsProperty<R, TProperty> : {} : {};
4
+ export type ConvertPluginsIntoSignatures<TPlugins extends readonly any[]> = TPlugins extends readonly [plugin: infer P, ...otherPlugin: infer R] ? P extends TreeViewPlugin<infer TSignature> ? [TSignature, ...ConvertPluginsIntoSignatures<R>] : ConvertPluginsIntoSignatures<R> : [];
5
+ export interface MergePlugins<TPlugins extends readonly any[]> {
6
+ state: MergePluginsProperty<TPlugins, 'state'>;
7
+ instance: MergePluginsProperty<TPlugins, 'instance'>;
8
+ params: MergePluginsProperty<TPlugins, 'params'>;
9
+ defaultizedParams: MergePluginsProperty<TPlugins, 'defaultizedParams'>;
10
+ dependantPlugins: MergePluginsProperty<TPlugins, 'dependantPlugins'>;
11
+ events: MergePluginsProperty<TPlugins, 'events'>;
12
+ models: MergePluginsProperty<TPlugins, 'models'>;
13
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ export * from './helpers';
2
+ export * from './plugin';
3
+ export * from './treeView';
@@ -0,0 +1,3 @@
1
+ export * from './helpers';
2
+ export * from './plugin';
3
+ export * from './treeView';
@@ -0,0 +1,69 @@
1
+ import * as React from 'react';
2
+ import { EventHandlers } from '@mui/base/utils';
3
+ import { TreeViewModel } from './treeView';
4
+ import type { TreeViewContextValue } from '../TreeViewProvider';
5
+ import type { MergePluginsProperty } from './helpers';
6
+ import { TreeViewEventLookupElement } from './events';
7
+ import type { TreeViewCorePluginsSignature } from '../corePlugins';
8
+ export interface TreeViewPluginOptions<TSignature extends TreeViewAnyPluginSignature> {
9
+ instance: TreeViewUsedInstance<TSignature>;
10
+ params: TreeViewUsedDefaultizedParams<TSignature>;
11
+ state: TreeViewUsedState<TSignature>;
12
+ models: TreeViewUsedModels<TSignature>;
13
+ setState: React.Dispatch<React.SetStateAction<TreeViewUsedState<TSignature>>>;
14
+ rootRef: React.RefObject<HTMLUListElement>;
15
+ }
16
+ type TreeViewModelsInitializer<TSignature extends TreeViewAnyPluginSignature> = {
17
+ [TControlled in keyof TSignature['models']]: {
18
+ controlledProp: TControlled;
19
+ defaultProp: keyof TSignature['params'];
20
+ };
21
+ };
22
+ interface TreeViewResponse {
23
+ getRootProps?: <TOther extends EventHandlers = {}>(otherHandlers: TOther) => React.HTMLAttributes<HTMLUListElement>;
24
+ contextValue?: TreeViewContextValue<any>;
25
+ }
26
+ export type TreeViewPluginSignature<TParams extends {}, TDefaultizedParams extends {}, TInstance extends {}, TEvents extends {
27
+ [key in keyof TEvents]: TreeViewEventLookupElement;
28
+ }, TState extends {}, TModelNames extends keyof TDefaultizedParams, TDependantPlugins extends readonly TreeViewAnyPluginSignature[]> = {
29
+ params: TParams;
30
+ defaultizedParams: TDefaultizedParams;
31
+ instance: TInstance;
32
+ state: TState;
33
+ models: {
34
+ [TControlled in TModelNames]-?: TreeViewModel<Exclude<TDefaultizedParams[TControlled], undefined>>;
35
+ };
36
+ events: TEvents;
37
+ dependantPlugins: TDependantPlugins;
38
+ };
39
+ export type TreeViewAnyPluginSignature = {
40
+ state: any;
41
+ instance: any;
42
+ params: any;
43
+ defaultizedParams: any;
44
+ dependantPlugins: any;
45
+ events: any;
46
+ models: any;
47
+ };
48
+ type TreeViewUsedPlugins<TSignature extends TreeViewAnyPluginSignature> = [
49
+ TreeViewCorePluginsSignature,
50
+ ...TSignature['dependantPlugins']
51
+ ];
52
+ type TreeViewUsedParams<TSignature extends TreeViewAnyPluginSignature> = TSignature['params'] & MergePluginsProperty<TreeViewUsedPlugins<TSignature>, 'params'>;
53
+ type TreeViewUsedDefaultizedParams<TSignature extends TreeViewAnyPluginSignature> = TSignature['defaultizedParams'] & MergePluginsProperty<TreeViewUsedPlugins<TSignature>, 'defaultizedParams'>;
54
+ export type TreeViewUsedInstance<TSignature extends TreeViewAnyPluginSignature> = TSignature['instance'] & MergePluginsProperty<TreeViewUsedPlugins<TSignature>, 'instance'> & {
55
+ /**
56
+ * Private property only defined in TypeScript to be able to access the plugin signature from the instance object.
57
+ */
58
+ $$signature: TSignature;
59
+ };
60
+ type TreeViewUsedState<TSignature extends TreeViewAnyPluginSignature> = TSignature['state'] & MergePluginsProperty<TreeViewUsedPlugins<TSignature>, 'state'>;
61
+ export type TreeViewUsedModels<TSignature extends TreeViewAnyPluginSignature> = TSignature['models'] & MergePluginsProperty<TreeViewUsedPlugins<TSignature>, 'models'>;
62
+ export type TreeViewUsedEvents<TSignature extends TreeViewAnyPluginSignature> = TSignature['events'] & MergePluginsProperty<TreeViewUsedPlugins<TSignature>, 'events'>;
63
+ export type TreeViewPlugin<TSignature extends TreeViewAnyPluginSignature> = {
64
+ (options: TreeViewPluginOptions<TSignature>): void | TreeViewResponse;
65
+ getDefaultizedParams?: (params: TreeViewUsedParams<TSignature>) => TSignature['defaultizedParams'];
66
+ getInitialState?: (params: TreeViewUsedDefaultizedParams<TSignature>) => TSignature['state'];
67
+ models?: TreeViewModelsInitializer<TSignature>;
68
+ };
69
+ export {};
@@ -0,0 +1 @@
1
+ export {};