@mui/x-tree-view 7.22.1 → 8.0.0-alpha.1

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 (296) hide show
  1. package/CHANGELOG.md +486 -11
  2. package/README.md +4 -4
  3. package/RichTreeView/RichTreeView.js +22 -5
  4. package/RichTreeView/RichTreeView.types.d.ts +4 -17
  5. package/SimpleTreeView/SimpleTreeView.js +21 -3
  6. package/TreeItem/TreeItem.d.ts +20 -2
  7. package/TreeItem/TreeItem.js +241 -371
  8. package/TreeItem/TreeItem.types.d.ts +52 -85
  9. package/TreeItem/index.d.ts +1 -4
  10. package/TreeItem/index.js +2 -4
  11. package/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.d.ts +7 -0
  12. package/{modern/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js} +8 -6
  13. package/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.d.ts → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.d.ts} +1 -1
  14. package/TreeItemDragAndDropOverlay/index.d.ts +2 -0
  15. package/TreeItemDragAndDropOverlay/index.js +1 -0
  16. package/{TreeItem2LabelInput → TreeItemDragAndDropOverlay}/package.json +1 -1
  17. package/TreeItemIcon/TreeItemIcon.d.ts +7 -0
  18. package/{TreeItem2Icon/TreeItem2Icon.js → TreeItemIcon/TreeItemIcon.js} +5 -3
  19. package/{TreeItem2Icon/TreeItem2Icon.types.d.ts → TreeItemIcon/TreeItemIcon.types.d.ts} +7 -7
  20. package/TreeItemIcon/index.d.ts +2 -0
  21. package/TreeItemIcon/index.js +1 -0
  22. package/{useTreeItem2 → TreeItemIcon}/package.json +1 -1
  23. package/TreeItemLabelInput/TreeItemLabelInput.d.ts +5 -0
  24. package/{TreeItem2LabelInput/TreeItem2LabelInput.js → TreeItemLabelInput/TreeItemLabelInput.js} +3 -3
  25. package/{TreeItem2LabelInput/TreeItem2LabelInput.types.d.ts → TreeItemLabelInput/TreeItemLabelInput.types.d.ts} +1 -1
  26. package/TreeItemLabelInput/index.d.ts +2 -0
  27. package/TreeItemLabelInput/index.js +1 -0
  28. package/{TreeItem2Provider → TreeItemLabelInput}/package.json +1 -1
  29. package/TreeItemProvider/TreeItemProvider.d.ts +9 -0
  30. package/TreeItemProvider/TreeItemProvider.js +43 -0
  31. package/{TreeItem2Provider/TreeItem2Provider.types.d.ts → TreeItemProvider/TreeItemProvider.types.d.ts} +2 -1
  32. package/TreeItemProvider/index.d.ts +2 -0
  33. package/TreeItemProvider/index.js +1 -0
  34. package/{TreeItem2Icon → TreeItemProvider}/package.json +1 -1
  35. package/hooks/index.d.ts +2 -1
  36. package/hooks/index.js +2 -1
  37. package/hooks/useTreeItemModel.d.ts +2 -0
  38. package/hooks/useTreeItemModel.js +11 -0
  39. package/hooks/useTreeItemUtils/index.d.ts +1 -0
  40. package/hooks/useTreeItemUtils/index.js +1 -0
  41. package/hooks/{useTreeItem2Utils/useTreeItem2Utils.d.ts → useTreeItemUtils/useTreeItemUtils.d.ts} +13 -12
  42. package/{modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js → hooks/useTreeItemUtils/useTreeItemUtils.js} +36 -18
  43. package/index.d.ts +5 -7
  44. package/index.js +6 -8
  45. package/internals/TreeViewItemDepthContext/TreeViewItemDepthContext.d.ts +3 -1
  46. package/internals/TreeViewProvider/TreeViewChildrenItemProvider.d.ts +2 -1
  47. package/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +6 -22
  48. package/internals/TreeViewProvider/TreeViewProvider.js +1 -2
  49. package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +5 -2
  50. package/internals/components/RichTreeViewItems.d.ts +3 -6
  51. package/internals/components/RichTreeViewItems.js +42 -30
  52. package/internals/corePlugins/useTreeViewId/useTreeViewId.js +10 -11
  53. package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.d.ts +36 -0
  54. package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +9 -0
  55. package/internals/corePlugins/useTreeViewId/useTreeViewId.types.d.ts +1 -5
  56. package/internals/hooks/useSelector.d.ts +4 -0
  57. package/internals/hooks/useSelector.js +6 -0
  58. package/internals/index.d.ts +6 -1
  59. package/internals/index.js +5 -1
  60. package/internals/models/helpers.d.ts +0 -2
  61. package/internals/models/itemPlugin.d.ts +13 -10
  62. package/internals/models/plugin.d.ts +20 -8
  63. package/internals/models/treeView.d.ts +6 -0
  64. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +36 -24
  65. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +124 -0
  66. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +17 -0
  67. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +8 -15
  68. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.d.ts +1 -0
  69. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.js +7 -0
  70. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +62 -40
  71. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.d.ts +182 -0
  72. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +34 -0
  73. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +4 -16
  74. package/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +15 -13
  75. package/internals/plugins/useTreeViewItems/index.d.ts +1 -1
  76. package/internals/plugins/useTreeViewItems/useTreeViewItems.js +58 -100
  77. package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +718 -0
  78. package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +103 -0
  79. package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +16 -55
  80. package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +29 -26
  81. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +27 -18
  82. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.d.ts +1 -1
  83. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +13 -5
  84. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +19 -30
  85. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +74 -0
  86. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +26 -0
  87. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +13 -29
  88. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.d.ts +2 -0
  89. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +88 -0
  90. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +79 -43
  91. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +32 -0
  92. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +9 -0
  93. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +39 -9
  94. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +20 -1
  95. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +105 -0
  96. package/internals/useTreeView/useTreeView.js +30 -17
  97. package/internals/useTreeView/useTreeView.types.d.ts +1 -2
  98. package/internals/useTreeView/useTreeViewBuildContext.d.ts +3 -1
  99. package/internals/useTreeView/useTreeViewBuildContext.js +24 -18
  100. package/internals/utils/TreeViewStore.d.ts +12 -0
  101. package/internals/utils/TreeViewStore.js +24 -0
  102. package/internals/utils/selectors.d.ts +9 -0
  103. package/internals/utils/selectors.js +37 -0
  104. package/internals/utils/tree.d.ts +8 -8
  105. package/internals/utils/tree.js +51 -43
  106. package/models/items.d.ts +7 -2
  107. package/modern/RichTreeView/RichTreeView.js +22 -5
  108. package/modern/SimpleTreeView/SimpleTreeView.js +21 -3
  109. package/modern/TreeItem/TreeItem.js +241 -371
  110. package/modern/TreeItem/index.js +2 -4
  111. package/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js → modern/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js} +8 -6
  112. package/modern/TreeItemDragAndDropOverlay/index.js +1 -0
  113. package/modern/{TreeItem2Icon/TreeItem2Icon.js → TreeItemIcon/TreeItemIcon.js} +5 -3
  114. package/modern/TreeItemIcon/index.js +1 -0
  115. package/modern/{TreeItem2LabelInput/TreeItem2LabelInput.js → TreeItemLabelInput/TreeItemLabelInput.js} +3 -3
  116. package/modern/TreeItemLabelInput/index.js +1 -0
  117. package/modern/TreeItemProvider/TreeItemProvider.js +43 -0
  118. package/modern/TreeItemProvider/index.js +1 -0
  119. package/modern/hooks/index.js +2 -1
  120. package/modern/hooks/useTreeItemModel.js +11 -0
  121. package/modern/hooks/useTreeItemUtils/index.js +1 -0
  122. package/{hooks/useTreeItem2Utils/useTreeItem2Utils.js → modern/hooks/useTreeItemUtils/useTreeItemUtils.js} +36 -18
  123. package/modern/index.js +6 -8
  124. package/modern/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +6 -22
  125. package/modern/internals/TreeViewProvider/TreeViewProvider.js +1 -2
  126. package/modern/internals/components/RichTreeViewItems.js +42 -30
  127. package/modern/internals/corePlugins/useTreeViewId/useTreeViewId.js +10 -11
  128. package/modern/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +9 -0
  129. package/modern/internals/hooks/useSelector.js +6 -0
  130. package/modern/internals/index.js +5 -1
  131. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +36 -24
  132. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +17 -0
  133. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.js +7 -0
  134. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +62 -40
  135. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +34 -0
  136. package/modern/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +15 -13
  137. package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.js +58 -100
  138. package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +103 -0
  139. package/modern/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +29 -26
  140. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +27 -18
  141. package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +13 -5
  142. package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +19 -30
  143. package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +26 -0
  144. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +88 -0
  145. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +79 -43
  146. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +9 -0
  147. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +105 -0
  148. package/modern/internals/useTreeView/useTreeView.js +30 -17
  149. package/modern/internals/useTreeView/useTreeViewBuildContext.js +24 -18
  150. package/modern/internals/utils/TreeViewStore.js +24 -0
  151. package/modern/internals/utils/selectors.js +37 -0
  152. package/modern/internals/utils/tree.js +51 -43
  153. package/modern/useTreeItem/index.js +1 -0
  154. package/modern/{useTreeItem2/useTreeItem2.js → useTreeItem/useTreeItem.js} +45 -51
  155. package/node/RichTreeView/RichTreeView.js +22 -5
  156. package/node/SimpleTreeView/SimpleTreeView.js +21 -3
  157. package/node/TreeItem/TreeItem.js +242 -372
  158. package/node/TreeItem/index.js +38 -16
  159. package/node/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js} +7 -6
  160. package/node/TreeItemDragAndDropOverlay/index.js +12 -0
  161. package/node/{TreeItem2Icon/TreeItem2Icon.js → TreeItemIcon/TreeItemIcon.js} +4 -3
  162. package/node/TreeItemIcon/index.js +12 -0
  163. package/node/{TreeItem2LabelInput/TreeItem2LabelInput.js → TreeItemLabelInput/TreeItemLabelInput.js} +3 -3
  164. package/node/TreeItemLabelInput/index.js +12 -0
  165. package/node/{TreeItem2Provider/TreeItem2Provider.js → TreeItemProvider/TreeItemProvider.js} +22 -6
  166. package/node/TreeItemProvider/index.js +12 -0
  167. package/node/hooks/index.js +10 -3
  168. package/node/hooks/useTreeItemModel.js +17 -0
  169. package/node/hooks/useTreeItemUtils/index.js +12 -0
  170. package/node/hooks/{useTreeItem2Utils/useTreeItem2Utils.js → useTreeItemUtils/useTreeItemUtils.js} +37 -19
  171. package/node/index.js +18 -42
  172. package/node/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +6 -22
  173. package/node/internals/TreeViewProvider/TreeViewProvider.js +1 -2
  174. package/node/internals/components/RichTreeViewItems.js +42 -30
  175. package/node/internals/corePlugins/useTreeViewId/useTreeViewId.js +12 -13
  176. package/node/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +15 -0
  177. package/node/internals/hooks/useSelector.js +13 -0
  178. package/node/internals/index.js +47 -1
  179. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +36 -24
  180. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +23 -0
  181. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.js +14 -0
  182. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +62 -40
  183. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +40 -0
  184. package/node/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +16 -13
  185. package/node/internals/plugins/useTreeViewItems/useTreeViewItems.js +60 -102
  186. package/node/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +109 -0
  187. package/node/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +30 -27
  188. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +27 -18
  189. package/node/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +13 -5
  190. package/node/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +19 -30
  191. package/node/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +32 -0
  192. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +96 -0
  193. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +78 -42
  194. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +15 -0
  195. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +109 -2
  196. package/node/internals/useTreeView/useTreeView.js +30 -17
  197. package/node/internals/useTreeView/useTreeViewBuildContext.js +25 -18
  198. package/node/internals/utils/TreeViewStore.js +31 -0
  199. package/node/internals/utils/selectors.js +44 -0
  200. package/node/internals/utils/tree.js +51 -43
  201. package/node/useTreeItem/index.js +12 -0
  202. package/node/{useTreeItem2/useTreeItem2.js → useTreeItem/useTreeItem.js} +46 -53
  203. package/package.json +7 -5
  204. package/themeAugmentation/components.d.ts +0 -10
  205. package/themeAugmentation/overrides.d.ts +0 -3
  206. package/themeAugmentation/props.d.ts +1 -5
  207. package/useTreeItem/index.d.ts +2 -0
  208. package/useTreeItem/index.js +1 -0
  209. package/{TreeItem2 → useTreeItem}/package.json +1 -1
  210. package/useTreeItem/useTreeItem.d.ts +2 -0
  211. package/{useTreeItem2/useTreeItem2.js → useTreeItem/useTreeItem.js} +45 -51
  212. package/{useTreeItem2/useTreeItem2.types.d.ts → useTreeItem/useTreeItem.types.d.ts} +51 -58
  213. package/TreeItem/TreeItemContent.d.ts +0 -61
  214. package/TreeItem/TreeItemContent.js +0 -146
  215. package/TreeItem/useTreeItemState.d.ts +0 -21
  216. package/TreeItem/useTreeItemState.js +0 -143
  217. package/TreeItem2/TreeItem2.d.ts +0 -34
  218. package/TreeItem2/TreeItem2.js +0 -387
  219. package/TreeItem2/TreeItem2.types.d.ts +0 -92
  220. package/TreeItem2/index.d.ts +0 -2
  221. package/TreeItem2/index.js +0 -1
  222. package/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.d.ts +0 -7
  223. package/TreeItem2DragAndDropOverlay/index.d.ts +0 -2
  224. package/TreeItem2DragAndDropOverlay/index.js +0 -1
  225. package/TreeItem2DragAndDropOverlay/package.json +0 -6
  226. package/TreeItem2Icon/TreeItem2Icon.d.ts +0 -7
  227. package/TreeItem2Icon/index.d.ts +0 -2
  228. package/TreeItem2Icon/index.js +0 -1
  229. package/TreeItem2LabelInput/TreeItem2LabelInput.d.ts +0 -5
  230. package/TreeItem2LabelInput/index.d.ts +0 -2
  231. package/TreeItem2LabelInput/index.js +0 -1
  232. package/TreeItem2Provider/TreeItem2Provider.d.ts +0 -6
  233. package/TreeItem2Provider/TreeItem2Provider.js +0 -26
  234. package/TreeItem2Provider/index.d.ts +0 -2
  235. package/TreeItem2Provider/index.js +0 -1
  236. package/TreeView/TreeView.d.ts +0 -21
  237. package/TreeView/TreeView.js +0 -211
  238. package/TreeView/TreeView.types.d.ts +0 -9
  239. package/TreeView/index.d.ts +0 -3
  240. package/TreeView/index.js +0 -3
  241. package/TreeView/package.json +0 -6
  242. package/TreeView/treeViewClasses.d.ts +0 -7
  243. package/TreeView/treeViewClasses.js +0 -6
  244. package/hooks/useTreeItem2Utils/index.d.ts +0 -1
  245. package/hooks/useTreeItem2Utils/index.js +0 -1
  246. package/modern/TreeItem/TreeItemContent.js +0 -146
  247. package/modern/TreeItem/useTreeItemState.js +0 -143
  248. package/modern/TreeItem2/TreeItem2.js +0 -387
  249. package/modern/TreeItem2/index.js +0 -1
  250. package/modern/TreeItem2DragAndDropOverlay/index.js +0 -1
  251. package/modern/TreeItem2Icon/index.js +0 -1
  252. package/modern/TreeItem2LabelInput/index.js +0 -1
  253. package/modern/TreeItem2Provider/TreeItem2Provider.js +0 -26
  254. package/modern/TreeItem2Provider/TreeItem2Provider.types.js +0 -1
  255. package/modern/TreeItem2Provider/index.js +0 -1
  256. package/modern/TreeView/TreeView.js +0 -211
  257. package/modern/TreeView/TreeView.types.js +0 -1
  258. package/modern/TreeView/index.js +0 -3
  259. package/modern/TreeView/treeViewClasses.js +0 -6
  260. package/modern/hooks/useTreeItem2Utils/index.js +0 -1
  261. package/modern/useTreeItem2/index.js +0 -4
  262. package/modern/useTreeItem2/useTreeItem2.types.js +0 -1
  263. package/node/TreeItem/TreeItemContent.js +0 -153
  264. package/node/TreeItem/useTreeItemState.js +0 -148
  265. package/node/TreeItem2/TreeItem2.js +0 -394
  266. package/node/TreeItem2/index.js +0 -48
  267. package/node/TreeItem2DragAndDropOverlay/index.js +0 -12
  268. package/node/TreeItem2Icon/index.js +0 -12
  269. package/node/TreeItem2LabelInput/index.js +0 -12
  270. package/node/TreeItem2Provider/index.js +0 -12
  271. package/node/TreeView/TreeView.js +0 -217
  272. package/node/TreeView/TreeView.types.js +0 -5
  273. package/node/TreeView/index.js +0 -27
  274. package/node/TreeView/treeViewClasses.js +0 -14
  275. package/node/hooks/useTreeItem2Utils/index.js +0 -12
  276. package/node/useTreeItem2/index.js +0 -10
  277. package/node/useTreeItem2/useTreeItem2.types.js +0 -5
  278. package/useTreeItem2/index.d.ts +0 -3
  279. package/useTreeItem2/index.js +0 -4
  280. package/useTreeItem2/useTreeItem2.d.ts +0 -2
  281. package/useTreeItem2/useTreeItem2.types.js +0 -1
  282. /package/{TreeItem2/TreeItem2.types.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.js} +0 -0
  283. /package/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js → TreeItemIcon/TreeItemIcon.types.js} +0 -0
  284. /package/{TreeItem2Icon/TreeItem2Icon.types.js → TreeItemLabelInput/TreeItemLabelInput.types.js} +0 -0
  285. /package/{TreeItem2LabelInput/TreeItem2LabelInput.types.js → TreeItemProvider/TreeItemProvider.types.js} +0 -0
  286. /package/{TreeItem2Provider/TreeItem2Provider.types.js → modern/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.js} +0 -0
  287. /package/{TreeView/TreeView.types.js → modern/TreeItemIcon/TreeItemIcon.types.js} +0 -0
  288. /package/modern/{TreeItem2/TreeItem2.types.js → TreeItemLabelInput/TreeItemLabelInput.types.js} +0 -0
  289. /package/modern/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js → TreeItemProvider/TreeItemProvider.types.js} +0 -0
  290. /package/modern/{TreeItem2Icon/TreeItem2Icon.types.js → useTreeItem/useTreeItem.types.js} +0 -0
  291. /package/node/{TreeItem2/TreeItem2.types.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.js} +0 -0
  292. /package/node/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js → TreeItemIcon/TreeItemIcon.types.js} +0 -0
  293. /package/node/{TreeItem2Icon/TreeItem2Icon.types.js → TreeItemLabelInput/TreeItemLabelInput.types.js} +0 -0
  294. /package/node/{TreeItem2LabelInput/TreeItem2LabelInput.types.js → TreeItemProvider/TreeItemProvider.types.js} +0 -0
  295. /package/node/{TreeItem2Provider/TreeItem2Provider.types.js → useTreeItem/useTreeItem.types.js} +0 -0
  296. /package/{modern/TreeItem2LabelInput/TreeItem2LabelInput.types.js → useTreeItem/useTreeItem.types.js} +0 -0
@@ -10,55 +10,67 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
10
10
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
11
  var React = _interopRequireWildcard(require("react"));
12
12
  var _useSlotProps2 = _interopRequireDefault(require("@mui/utils/useSlotProps"));
13
+ var _fastObjectShallowCompare = require("@mui/x-internals/fastObjectShallowCompare");
13
14
  var _TreeItem = require("../../TreeItem");
15
+ var _useSelector = require("../hooks/useSelector");
16
+ var _useTreeViewItems = require("../plugins/useTreeViewItems/useTreeViewItems.selectors");
17
+ var _TreeViewProvider = require("../TreeViewProvider");
14
18
  var _jsxRuntime = require("react/jsx-runtime");
15
19
  const _excluded = ["ownerState"];
16
- function WrappedTreeItem({
17
- slots,
18
- slotProps,
19
- label,
20
- id,
21
- itemId,
22
- itemsToRender
20
+ const RichTreeViewItemsContext = /*#__PURE__*/React.createContext(null);
21
+ if (process.env.NODE_ENV !== 'production') {
22
+ RichTreeViewItemsContext.displayName = 'RichTreeViewItemsProvider';
23
+ }
24
+ const WrappedTreeItem = /*#__PURE__*/React.memo(function WrappedTreeItem({
25
+ itemSlot,
26
+ itemSlotProps,
27
+ itemId
23
28
  }) {
24
- const Item = slots?.item ?? _TreeItem.TreeItem;
29
+ const renderItemForRichTreeView = React.useContext(RichTreeViewItemsContext);
30
+ const {
31
+ store
32
+ } = (0, _TreeViewProvider.useTreeViewContext)();
33
+ const itemMeta = (0, _useSelector.useSelector)(store, _useTreeViewItems.selectorItemMeta, itemId);
34
+ const children = (0, _useSelector.useSelector)(store, _useTreeViewItems.selectorItemOrderedChildrenIds, itemId);
35
+ const Item = itemSlot ?? _TreeItem.TreeItem;
25
36
  const _useSlotProps = (0, _useSlotProps2.default)({
26
37
  elementType: Item,
27
- externalSlotProps: slotProps?.item,
38
+ externalSlotProps: itemSlotProps,
28
39
  additionalProps: {
29
- itemId,
30
- id,
31
- label
40
+ label: itemMeta?.label,
41
+ id: itemMeta?.idAttribute,
42
+ itemId
32
43
  },
33
44
  ownerState: {
34
45
  itemId,
35
- label
46
+ label: itemMeta?.label
36
47
  }
37
48
  }),
38
49
  itemProps = (0, _objectWithoutPropertiesLoose2.default)(_useSlotProps, _excluded);
39
- const children = React.useMemo(() => itemsToRender ? /*#__PURE__*/(0, _jsxRuntime.jsx)(RichTreeViewItems, {
40
- itemsToRender: itemsToRender,
41
- slots: slots,
42
- slotProps: slotProps
43
- }) : null, [itemsToRender, slots, slotProps]);
44
50
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(Item, (0, _extends2.default)({}, itemProps, {
45
- children: children
51
+ children: children?.map(renderItemForRichTreeView)
46
52
  }));
47
- }
53
+ }, _fastObjectShallowCompare.fastObjectShallowCompare);
48
54
  function RichTreeViewItems(props) {
49
55
  const {
50
- itemsToRender,
51
56
  slots,
52
57
  slotProps
53
58
  } = props;
54
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(React.Fragment, {
55
- children: itemsToRender.map(item => /*#__PURE__*/(0, _jsxRuntime.jsx)(WrappedTreeItem, {
56
- slots: slots,
57
- slotProps: slotProps,
58
- label: item.label,
59
- id: item.id,
60
- itemId: item.itemId,
61
- itemsToRender: item.children
62
- }, item.itemId))
59
+ const {
60
+ store
61
+ } = (0, _TreeViewProvider.useTreeViewContext)();
62
+ const itemSlot = slots?.item;
63
+ const itemSlotProps = slotProps?.item;
64
+ const items = (0, _useSelector.useSelector)(store, _useTreeViewItems.selectorItemOrderedChildrenIds, null);
65
+ const renderItem = React.useCallback(itemId => {
66
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(WrappedTreeItem, {
67
+ itemSlot: itemSlot,
68
+ itemSlotProps: itemSlotProps,
69
+ itemId: itemId
70
+ }, itemId);
71
+ }, [itemSlot, itemSlotProps]);
72
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(RichTreeViewItemsContext.Provider, {
73
+ value: renderItem,
74
+ children: items.map(renderItem)
63
75
  });
64
76
  }
@@ -8,32 +8,30 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.useTreeViewId = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var React = _interopRequireWildcard(require("react"));
11
- var _useTreeViewId = require("./useTreeViewId.utils");
11
+ var _useSelector = require("../../hooks/useSelector");
12
+ var _useTreeViewId = require("./useTreeViewId.selectors");
13
+ var _useTreeViewId2 = require("./useTreeViewId.utils");
12
14
  const useTreeViewId = ({
13
15
  params,
14
- state,
15
- setState
16
+ store
16
17
  }) => {
17
18
  React.useEffect(() => {
18
- setState(prevState => {
19
- if (prevState.id.treeId === params.id && prevState.id.treeId !== undefined) {
19
+ store.update(prevState => {
20
+ if (params.id === prevState.id.providedTreeId && prevState.id.treeId !== undefined) {
20
21
  return prevState;
21
22
  }
22
23
  return (0, _extends2.default)({}, prevState, {
23
24
  id: (0, _extends2.default)({}, prevState.id, {
24
- treeId: params.id ?? (0, _useTreeViewId.createTreeViewDefaultId)()
25
+ treeId: params.id ?? (0, _useTreeViewId2.createTreeViewDefaultId)()
25
26
  })
26
27
  });
27
28
  });
28
- }, [setState, params.id]);
29
- const treeId = params.id ?? state.id.treeId;
29
+ }, [store, params.id]);
30
+ const treeId = (0, _useSelector.useSelector)(store, _useTreeViewId.selectorTreeViewId);
30
31
  return {
31
32
  getRootProps: () => ({
32
33
  id: treeId
33
- }),
34
- contextValue: {
35
- treeId
36
- }
34
+ })
37
35
  };
38
36
  };
39
37
  exports.useTreeViewId = useTreeViewId;
@@ -44,6 +42,7 @@ useTreeViewId.getInitialState = ({
44
42
  id
45
43
  }) => ({
46
44
  id: {
47
- treeId: id ?? undefined
45
+ treeId: undefined,
46
+ providedTreeId: id
48
47
  }
49
48
  });
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.selectorTreeViewId = void 0;
7
+ var _selectors = require("../../utils/selectors");
8
+ const selectorTreeViewIdState = state => state.id;
9
+
10
+ /**
11
+ * Get the id attribute of the tree view.
12
+ * @param {TreeViewState<[UseTreeViewIdSignature]>} state The state of the tree view.
13
+ * @returns {string} The id attribute of the tree view.
14
+ */
15
+ const selectorTreeViewId = exports.selectorTreeViewId = (0, _selectors.createSelector)(selectorTreeViewIdState, idState => idState.treeId);
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useSelector = void 0;
7
+ var _withSelector = require("use-sync-external-store/with-selector");
8
+ const defaultCompare = Object.is;
9
+ const useSelector = (store, selector, args = undefined, equals = defaultCompare) => {
10
+ const selectorWithArgs = state => selector(state, args);
11
+ return (0, _withSelector.useSyncExternalStoreWithSelector)(store.subscribe, store.getSnapshot, store.getSnapshot, selectorWithArgs, equals);
12
+ };
13
+ exports.useSelector = useSelector;
@@ -21,24 +21,66 @@ Object.defineProperty(exports, "TreeViewProvider", {
21
21
  return _TreeViewProvider.TreeViewProvider;
22
22
  }
23
23
  });
24
+ Object.defineProperty(exports, "TreeViewStore", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _TreeViewStore.TreeViewStore;
28
+ }
29
+ });
24
30
  Object.defineProperty(exports, "buildSiblingIndexes", {
25
31
  enumerable: true,
26
32
  get: function () {
27
33
  return _useTreeViewItems.buildSiblingIndexes;
28
34
  }
29
35
  });
36
+ Object.defineProperty(exports, "createSelector", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _selectors.createSelector;
40
+ }
41
+ });
30
42
  Object.defineProperty(exports, "isTargetInDescendants", {
31
43
  enumerable: true,
32
44
  get: function () {
33
45
  return _tree.isTargetInDescendants;
34
46
  }
35
47
  });
48
+ Object.defineProperty(exports, "selectorItemIndex", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _useTreeViewItems2.selectorItemIndex;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, "selectorItemMeta", {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _useTreeViewItems2.selectorItemMeta;
58
+ }
59
+ });
60
+ Object.defineProperty(exports, "selectorItemMetaLookup", {
61
+ enumerable: true,
62
+ get: function () {
63
+ return _useTreeViewItems2.selectorItemMetaLookup;
64
+ }
65
+ });
66
+ Object.defineProperty(exports, "selectorItemOrderedChildrenIds", {
67
+ enumerable: true,
68
+ get: function () {
69
+ return _useTreeViewItems2.selectorItemOrderedChildrenIds;
70
+ }
71
+ });
36
72
  Object.defineProperty(exports, "unstable_resetCleanupTracking", {
37
73
  enumerable: true,
38
74
  get: function () {
39
75
  return _useInstanceEventHandler.unstable_resetCleanupTracking;
40
76
  }
41
77
  });
78
+ Object.defineProperty(exports, "useSelector", {
79
+ enumerable: true,
80
+ get: function () {
81
+ return _useSelector.useSelector;
82
+ }
83
+ });
42
84
  Object.defineProperty(exports, "useTreeView", {
43
85
  enumerable: true,
44
86
  get: function () {
@@ -103,12 +145,16 @@ var _useTreeView = require("./useTreeView");
103
145
  var _TreeViewProvider = require("./TreeViewProvider");
104
146
  var _RichTreeViewItems = require("./components/RichTreeViewItems");
105
147
  var _useInstanceEventHandler = require("./hooks/useInstanceEventHandler");
148
+ var _useSelector = require("./hooks/useSelector");
106
149
  var _useTreeViewExpansion = require("./plugins/useTreeViewExpansion");
107
150
  var _useTreeViewSelection = require("./plugins/useTreeViewSelection");
108
151
  var _useTreeViewFocus = require("./plugins/useTreeViewFocus");
109
152
  var _useTreeViewKeyboardNavigation = require("./plugins/useTreeViewKeyboardNavigation");
110
153
  var _useTreeViewIcons = require("./plugins/useTreeViewIcons");
111
154
  var _useTreeViewItems = require("./plugins/useTreeViewItems");
155
+ var _useTreeViewItems2 = require("./plugins/useTreeViewItems/useTreeViewItems.selectors");
112
156
  var _useTreeViewLabel = require("./plugins/useTreeViewLabel");
113
157
  var _useTreeViewJSXItems = require("./plugins/useTreeViewJSXItems");
114
- var _tree = require("./utils/tree");
158
+ var _selectors = require("./utils/selectors");
159
+ var _tree = require("./utils/tree");
160
+ var _TreeViewStore = require("./utils/TreeViewStore");
@@ -9,30 +9,35 @@ exports.useTreeViewExpansion = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var React = _interopRequireWildcard(require("react"));
11
11
  var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
12
+ var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
13
+ var _useTreeViewExpansion = require("./useTreeViewExpansion.selectors");
14
+ var _useTreeViewExpansion2 = require("./useTreeViewExpansion.utils");
15
+ var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.selectors");
12
16
  const useTreeViewExpansion = ({
13
17
  instance,
18
+ store,
14
19
  params,
15
- models
20
+ models,
21
+ experimentalFeatures
16
22
  }) => {
17
- const expandedItemsMap = React.useMemo(() => {
18
- const temp = new Map();
19
- models.expandedItems.value.forEach(id => {
20
- temp.set(id, true);
21
- });
22
- return temp;
23
- }, [models.expandedItems.value]);
23
+ const isTreeViewEditable = Boolean(params.isItemEditable) && !!experimentalFeatures.labelEditing;
24
+ (0, _useEnhancedEffect.default)(() => {
25
+ store.update(prevState => (0, _extends2.default)({}, prevState, {
26
+ expansion: {
27
+ expandedItemsMap: (0, _useTreeViewExpansion2.createExpandedItemsMap)(models.expandedItems.value)
28
+ }
29
+ }));
30
+ }, [store, models.expandedItems.value]);
24
31
  const setExpandedItems = (event, value) => {
25
32
  params.onExpandedItemsChange?.(event, value);
26
33
  models.expandedItems.setControlledValue(value);
27
34
  };
28
- const isItemExpanded = React.useCallback(itemId => expandedItemsMap.has(itemId), [expandedItemsMap]);
29
- const isItemExpandable = React.useCallback(itemId => !!instance.getItemMeta(itemId)?.expandable, [instance]);
30
35
  const toggleItemExpansion = (0, _useEventCallback.default)((event, itemId) => {
31
- const isExpandedBefore = instance.isItemExpanded(itemId);
36
+ const isExpandedBefore = (0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, itemId);
32
37
  instance.setItemExpansion(event, itemId, !isExpandedBefore);
33
38
  });
34
39
  const setItemExpansion = (0, _useEventCallback.default)((event, itemId, isExpanded) => {
35
- const isExpandedBefore = instance.isItemExpanded(itemId);
40
+ const isExpandedBefore = (0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, itemId);
36
41
  if (isExpandedBefore === isExpanded) {
37
42
  return;
38
43
  }
@@ -48,9 +53,12 @@ const useTreeViewExpansion = ({
48
53
  setExpandedItems(event, newExpanded);
49
54
  });
50
55
  const expandAllSiblings = (event, itemId) => {
51
- const itemMeta = instance.getItemMeta(itemId);
52
- const siblings = instance.getItemOrderedChildrenIds(itemMeta.parentId);
53
- const diff = siblings.filter(child => instance.isItemExpandable(child) && !instance.isItemExpanded(child));
56
+ const itemMeta = (0, _useTreeViewItems.selectorItemMeta)(store.value, itemId);
57
+ if (itemMeta == null) {
58
+ return;
59
+ }
60
+ const siblings = (0, _useTreeViewItems.selectorItemOrderedChildrenIds)(store.value, itemMeta.parentId);
61
+ const diff = siblings.filter(child => (0, _useTreeViewExpansion.selectorIsItemExpandable)(store.value, child) && !(0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, child));
54
62
  const newExpanded = models.expandedItems.value.concat(diff);
55
63
  if (diff.length > 0) {
56
64
  if (params.onItemExpansionToggle) {
@@ -65,27 +73,26 @@ const useTreeViewExpansion = ({
65
73
  if (params.expansionTrigger) {
66
74
  return params.expansionTrigger;
67
75
  }
68
- if (instance.isTreeViewEditable) {
76
+ if (isTreeViewEditable) {
69
77
  return 'iconContainer';
70
78
  }
71
79
  return 'content';
72
- }, [params.expansionTrigger, instance.isTreeViewEditable]);
80
+ }, [params.expansionTrigger, isTreeViewEditable]);
81
+ const pluginContextValue = React.useMemo(() => ({
82
+ expansion: {
83
+ expansionTrigger
84
+ }
85
+ }), [expansionTrigger]);
73
86
  return {
74
87
  publicAPI: {
75
88
  setItemExpansion
76
89
  },
77
90
  instance: {
78
- isItemExpanded,
79
- isItemExpandable,
80
91
  setItemExpansion,
81
92
  toggleItemExpansion,
82
93
  expandAllSiblings
83
94
  },
84
- contextValue: {
85
- expansion: {
86
- expansionTrigger
87
- }
88
- }
95
+ contextValue: pluginContextValue
89
96
  };
90
97
  };
91
98
  exports.useTreeViewExpansion = useTreeViewExpansion;
@@ -100,6 +107,11 @@ useTreeViewExpansion.getDefaultizedParams = ({
100
107
  }) => (0, _extends2.default)({}, params, {
101
108
  defaultExpandedItems: params.defaultExpandedItems ?? DEFAULT_EXPANDED_ITEMS
102
109
  });
110
+ useTreeViewExpansion.getInitialState = params => ({
111
+ expansion: {
112
+ expandedItemsMap: (0, _useTreeViewExpansion2.createExpandedItemsMap)(params.expandedItems === undefined ? params.defaultExpandedItems : params.expandedItems)
113
+ }
114
+ });
103
115
  useTreeViewExpansion.params = {
104
116
  expandedItems: true,
105
117
  defaultExpandedItems: true,
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.selectorIsItemExpanded = exports.selectorIsItemExpandable = void 0;
7
+ var _selectors = require("../../utils/selectors");
8
+ var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.selectors");
9
+ const selectorExpansion = state => state.expansion;
10
+
11
+ /**
12
+ * Check if an item is expanded.
13
+ * @param {TreeViewState<[UseTreeViewExpansionSignature]>} state The state of the tree view.
14
+ * @returns {boolean} `true` if the item is expanded, `false` otherwise.
15
+ */
16
+ const selectorIsItemExpanded = exports.selectorIsItemExpanded = (0, _selectors.createSelector)([selectorExpansion, (_, itemId) => itemId], (expansionState, itemId) => expansionState.expandedItemsMap.has(itemId));
17
+
18
+ /**
19
+ * Check if an item is expandable.
20
+ * @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
21
+ * @returns {boolean} `true` if the item is expandable, `false` otherwise.
22
+ */
23
+ const selectorIsItemExpandable = exports.selectorIsItemExpandable = (0, _selectors.createSelector)([_useTreeViewItems.selectorItemMeta], itemMeta => itemMeta?.expandable ?? false);
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createExpandedItemsMap = void 0;
7
+ const createExpandedItemsMap = expandedItems => {
8
+ const expandedItemsMap = new Map();
9
+ expandedItems.forEach(id => {
10
+ expandedItemsMap.set(id, true);
11
+ });
12
+ return expandedItemsMap;
13
+ };
14
+ exports.createExpandedItemsMap = createExpandedItemsMap;
@@ -9,46 +9,56 @@ exports.useTreeViewFocus = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var React = _interopRequireWildcard(require("react"));
11
11
  var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
12
- var _ownerDocument = _interopRequireDefault(require("@mui/utils/ownerDocument"));
13
12
  var _useInstanceEventHandler = require("../../hooks/useInstanceEventHandler");
14
- var _utils = require("../../utils/utils");
15
13
  var _tree = require("../../utils/tree");
16
14
  var _useTreeViewSelection = require("../useTreeViewSelection/useTreeViewSelection.utils");
17
- const useDefaultFocusableItemId = (instance, selectedItems) => {
18
- let tabbableItemId = (0, _useTreeViewSelection.convertSelectedItemsToArray)(selectedItems).find(itemId => {
19
- if (!instance.isItemNavigable(itemId)) {
20
- return false;
21
- }
22
- const itemMeta = instance.getItemMeta(itemId);
23
- return itemMeta && (itemMeta.parentId == null || instance.isItemExpanded(itemMeta.parentId));
24
- });
25
- if (tabbableItemId == null) {
26
- tabbableItemId = (0, _tree.getFirstNavigableItem)(instance);
27
- }
28
- return tabbableItemId;
29
- };
15
+ var _useTreeViewFocus = require("./useTreeViewFocus.selectors");
16
+ var _useTreeViewExpansion = require("../useTreeViewExpansion/useTreeViewExpansion.selectors");
17
+ var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.selectors");
30
18
  const useTreeViewFocus = ({
31
19
  instance,
32
20
  params,
33
- state,
34
- setState,
35
- models,
36
- rootRef
21
+ store,
22
+ models
37
23
  }) => {
38
- const defaultFocusableItemId = useDefaultFocusableItemId(instance, models.selectedItems.value);
39
- const setFocusedItemId = (0, _useEventCallback.default)(itemId => {
40
- const cleanItemId = typeof itemId === 'function' ? itemId(state.focusedItemId) : itemId;
41
- if (state.focusedItemId !== cleanItemId) {
42
- setState(prevState => (0, _extends2.default)({}, prevState, {
43
- focusedItemId: cleanItemId
44
- }));
24
+ React.useEffect(() => {
25
+ let defaultFocusableItemId = (0, _useTreeViewSelection.convertSelectedItemsToArray)(models.selectedItems.value).find(itemId => {
26
+ if (!(0, _useTreeViewItems.selectorCanItemBeFocused)(store.value, itemId)) {
27
+ return false;
28
+ }
29
+ const itemMeta = (0, _useTreeViewItems.selectorItemMeta)(store.value, itemId);
30
+ return itemMeta && (itemMeta.parentId == null || (0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, itemMeta.parentId));
31
+ });
32
+ if (defaultFocusableItemId == null) {
33
+ defaultFocusableItemId = (0, _tree.getFirstNavigableItem)(store.value) ?? null;
45
34
  }
35
+ store.update(prevState => {
36
+ if (defaultFocusableItemId === prevState.focus.defaultFocusableItemId) {
37
+ return prevState;
38
+ }
39
+ return (0, _extends2.default)({}, prevState, {
40
+ focus: (0, _extends2.default)({}, prevState.focus, {
41
+ defaultFocusableItemId
42
+ })
43
+ });
44
+ });
45
+ }, [store, models.selectedItems.value]);
46
+ const setFocusedItemId = (0, _useEventCallback.default)(itemId => {
47
+ store.update(prevState => {
48
+ const focusedItemId = (0, _useTreeViewFocus.selectorFocusedItemId)(prevState);
49
+ if (focusedItemId === itemId) {
50
+ return prevState;
51
+ }
52
+ return (0, _extends2.default)({}, prevState, {
53
+ focus: (0, _extends2.default)({}, prevState.focus, {
54
+ focusedItemId: itemId
55
+ })
56
+ });
57
+ });
46
58
  });
47
- const isTreeViewFocused = React.useCallback(() => !!rootRef.current && rootRef.current.contains((0, _utils.getActiveElement)((0, _ownerDocument.default)(rootRef.current))), [rootRef]);
48
- const isItemFocused = React.useCallback(itemId => state.focusedItemId === itemId && isTreeViewFocused(), [state.focusedItemId, isTreeViewFocused]);
49
59
  const isItemVisible = itemId => {
50
- const itemMeta = instance.getItemMeta(itemId);
51
- return itemMeta && (itemMeta.parentId == null || instance.isItemExpanded(itemMeta.parentId));
60
+ const itemMeta = (0, _useTreeViewItems.selectorItemMeta)(store.value, itemId);
61
+ return itemMeta && (itemMeta.parentId == null || (0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, itemMeta.parentId));
52
62
  };
53
63
  const innerFocusItem = (event, itemId) => {
54
64
  const itemElement = instance.getItemDOMElement(itemId);
@@ -67,23 +77,25 @@ const useTreeViewFocus = ({
67
77
  }
68
78
  });
69
79
  const removeFocusedItem = (0, _useEventCallback.default)(() => {
70
- if (state.focusedItemId == null) {
80
+ const focusedItemId = (0, _useTreeViewFocus.selectorFocusedItemId)(store.value);
81
+ if (focusedItemId == null) {
71
82
  return;
72
83
  }
73
- const itemMeta = instance.getItemMeta(state.focusedItemId);
84
+ const itemMeta = (0, _useTreeViewItems.selectorItemMeta)(store.value, focusedItemId);
74
85
  if (itemMeta) {
75
- const itemElement = instance.getItemDOMElement(state.focusedItemId);
86
+ const itemElement = instance.getItemDOMElement(focusedItemId);
76
87
  if (itemElement) {
77
88
  itemElement.blur();
78
89
  }
79
90
  }
80
91
  setFocusedItemId(null);
81
92
  });
82
- const canItemBeTabbed = itemId => itemId === defaultFocusableItemId;
83
93
  (0, _useInstanceEventHandler.useInstanceEventHandler)(instance, 'removeItem', ({
84
94
  id
85
95
  }) => {
86
- if (state.focusedItemId === id) {
96
+ const focusedItemId = (0, _useTreeViewFocus.selectorFocusedItemId)(store.value);
97
+ const defaultFocusableItemId = (0, _useTreeViewFocus.selectorDefaultFocusableItemId)(store.value);
98
+ if (focusedItemId === id && defaultFocusableItemId != null) {
87
99
  innerFocusItem(null, defaultFocusableItemId);
88
100
  }
89
101
  });
@@ -94,20 +106,27 @@ const useTreeViewFocus = ({
94
106
  }
95
107
 
96
108
  // if the event bubbled (which is React specific) we don't want to steal focus
97
- if (event.target === event.currentTarget) {
109
+ const defaultFocusableItemId = (0, _useTreeViewFocus.selectorDefaultFocusableItemId)(store.value);
110
+ if (event.target === event.currentTarget && defaultFocusableItemId != null) {
98
111
  innerFocusItem(event, defaultFocusableItemId);
99
112
  }
100
113
  };
114
+ const createRootHandleBlur = otherHandlers => event => {
115
+ otherHandlers.onBlur?.(event);
116
+ if (event.defaultMuiPrevented) {
117
+ return;
118
+ }
119
+ setFocusedItemId(null);
120
+ };
101
121
  return {
102
122
  getRootProps: otherHandlers => ({
103
- onFocus: createRootHandleFocus(otherHandlers)
123
+ onFocus: createRootHandleFocus(otherHandlers),
124
+ onBlur: createRootHandleBlur(otherHandlers)
104
125
  }),
105
126
  publicAPI: {
106
127
  focusItem
107
128
  },
108
129
  instance: {
109
- isItemFocused,
110
- canItemBeTabbed,
111
130
  focusItem,
112
131
  removeFocusedItem
113
132
  }
@@ -115,7 +134,10 @@ const useTreeViewFocus = ({
115
134
  };
116
135
  exports.useTreeViewFocus = useTreeViewFocus;
117
136
  useTreeViewFocus.getInitialState = () => ({
118
- focusedItemId: null
137
+ focus: {
138
+ focusedItemId: null,
139
+ defaultFocusableItemId: null
140
+ }
119
141
  });
120
142
  useTreeViewFocus.params = {
121
143
  onItemFocus: true
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.selectorIsItemTheDefaultFocusableItem = exports.selectorIsItemFocused = exports.selectorFocusedItemId = exports.selectorDefaultFocusableItemId = void 0;
7
+ var _selectors = require("../../utils/selectors");
8
+ const selectorTreeViewFocusState = state => state.focus;
9
+
10
+ /**
11
+ * Get the item that should be sequentially focusable (usually with the Tab key).
12
+ * At any point in time, there is a single item that can be sequentially focused in the Tree View.
13
+ * This item is the first selected item (that is both visible and navigable), if any, or the first navigable item if no item is selected.
14
+ * @param {TreeViewState<[UseTreeViewFocusSignature]>} state The state of the tree view.
15
+ * @returns {TreeViewItemId | null} The id of the item that should be sequentially focusable.
16
+ */
17
+ const selectorDefaultFocusableItemId = exports.selectorDefaultFocusableItemId = (0, _selectors.createSelector)(selectorTreeViewFocusState, focus => focus.defaultFocusableItemId);
18
+
19
+ /**
20
+ * Check if an item is the default focusable item.
21
+ * @param {TreeViewState<[UseTreeViewFocusSignature]>} state The state of the tree view.
22
+ * @param {TreeViewItemId} itemId The id of the item to check.
23
+ * @returns {boolean} `true` if the item is the default focusable item, `false` otherwise.
24
+ */
25
+ const selectorIsItemTheDefaultFocusableItem = exports.selectorIsItemTheDefaultFocusableItem = (0, _selectors.createSelector)([selectorDefaultFocusableItemId, (_, itemId) => itemId], (defaultFocusableItemId, itemId) => defaultFocusableItemId === itemId);
26
+
27
+ /**
28
+ * Get the id of the item that is currently focused.
29
+ * @param {TreeViewState<[UseTreeViewFocusSignature]>} state The state of the tree view.
30
+ * @returns {TreeViewItemId | null} The id of the item that is currently focused.
31
+ */
32
+ const selectorFocusedItemId = exports.selectorFocusedItemId = (0, _selectors.createSelector)(selectorTreeViewFocusState, focus => focus.focusedItemId);
33
+
34
+ /**
35
+ * Check if an item is focused.
36
+ * @param {TreeViewState<[UseTreeViewFocusSignature]>} state The state of the tree view.
37
+ * @param {TreeViewItemId} itemId The id of the item to check.
38
+ * @returns {boolean} `true` if the item is focused, `false` otherwise.
39
+ */
40
+ const selectorIsItemFocused = exports.selectorIsItemFocused = (0, _selectors.createSelector)([selectorFocusedItemId, (_, itemId) => itemId], (focusedItemId, itemId) => focusedItemId === itemId);
@@ -1,28 +1,31 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.useTreeViewIcons = void 0;
8
+ var React = _interopRequireWildcard(require("react"));
7
9
  const useTreeViewIcons = ({
8
10
  slots,
9
11
  slotProps
10
12
  }) => {
11
- return {
12
- contextValue: {
13
- icons: {
14
- slots: {
15
- collapseIcon: slots.collapseIcon,
16
- expandIcon: slots.expandIcon,
17
- endIcon: slots.endIcon
18
- },
19
- slotProps: {
20
- collapseIcon: slotProps.collapseIcon,
21
- expandIcon: slotProps.expandIcon,
22
- endIcon: slotProps.endIcon
23
- }
13
+ const pluginContextValue = React.useMemo(() => ({
14
+ icons: {
15
+ slots: {
16
+ collapseIcon: slots.collapseIcon,
17
+ expandIcon: slots.expandIcon,
18
+ endIcon: slots.endIcon
19
+ },
20
+ slotProps: {
21
+ collapseIcon: slotProps.collapseIcon,
22
+ expandIcon: slotProps.expandIcon,
23
+ endIcon: slotProps.endIcon
24
24
  }
25
25
  }
26
+ }), [slots.collapseIcon, slots.expandIcon, slots.endIcon, slotProps.collapseIcon, slotProps.expandIcon, slotProps.endIcon]);
27
+ return {
28
+ contextValue: pluginContextValue
26
29
  };
27
30
  };
28
31
  exports.useTreeViewIcons = useTreeViewIcons;