@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
@@ -1,29 +1,31 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
3
  var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.useTreeViewItems = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
- var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
10
  var React = _interopRequireWildcard(require("react"));
11
+ var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
12
12
  var _publishTreeViewEvent = require("../../utils/publishTreeViewEvent");
13
13
  var _useTreeViewItems = require("./useTreeViewItems.utils");
14
14
  var _TreeViewItemDepthContext = require("../../TreeViewItemDepthContext");
15
- var _useTreeViewId = require("../../corePlugins/useTreeViewId/useTreeViewId.utils");
15
+ var _useTreeViewItems2 = require("./useTreeViewItems.selectors");
16
+ var _useTreeViewId = require("../../corePlugins/useTreeViewId/useTreeViewId.selectors");
17
+ var _useTreeViewId2 = require("../../corePlugins/useTreeViewId/useTreeViewId.utils");
16
18
  var _jsxRuntime = require("react/jsx-runtime");
17
- const _excluded = ["children"];
18
19
  const updateItemsState = ({
20
+ disabledItemsFocusable,
19
21
  items,
20
22
  isItemDisabled,
21
23
  getItemLabel,
22
24
  getItemId
23
25
  }) => {
24
- const itemMetaMap = {};
25
- const itemMap = {};
26
- const itemOrderedChildrenIds = {
26
+ const itemMetaLookup = {};
27
+ const itemModelLookup = {};
28
+ const itemOrderedChildrenIdsLookup = {
27
29
  [_useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID]: []
28
30
  };
29
31
  const processItem = (item, depth, parentId) => {
@@ -31,14 +33,14 @@ const updateItemsState = ({
31
33
  if (id == null) {
32
34
  throw new Error(['MUI X: The Tree View component requires all items to have a unique `id` property.', 'Alternatively, you can use the `getItemId` prop to specify a custom id for each item.', 'An item was provided without id in the `items` prop:', JSON.stringify(item)].join('\n'));
33
35
  }
34
- if (itemMetaMap[id] != null) {
36
+ if (itemMetaLookup[id] != null) {
35
37
  throw new Error(['MUI X: The Tree View component requires all items to have a unique `id` property.', 'Alternatively, you can use the `getItemId` prop to specify a custom id for each item.', `Two items were provided with the same id in the \`items\` prop: "${id}"`].join('\n'));
36
38
  }
37
39
  const label = getItemLabel ? getItemLabel(item) : item.label;
38
40
  if (label == null) {
39
41
  throw new Error(['MUI X: The Tree View component requires all items to have a `label` property.', 'Alternatively, you can use the `getItemLabel` prop to specify a custom label for each item.', 'An item was provided without label in the `items` prop:', JSON.stringify(item)].join('\n'));
40
42
  }
41
- itemMetaMap[id] = {
43
+ itemMetaLookup[id] = {
42
44
  id,
43
45
  label,
44
46
  parentId,
@@ -47,89 +49,58 @@ const updateItemsState = ({
47
49
  disabled: isItemDisabled ? isItemDisabled(item) : false,
48
50
  depth
49
51
  };
50
- itemMap[id] = item;
52
+ itemModelLookup[id] = item;
51
53
  const parentIdWithDefault = parentId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID;
52
- if (!itemOrderedChildrenIds[parentIdWithDefault]) {
53
- itemOrderedChildrenIds[parentIdWithDefault] = [];
54
+ if (!itemOrderedChildrenIdsLookup[parentIdWithDefault]) {
55
+ itemOrderedChildrenIdsLookup[parentIdWithDefault] = [];
54
56
  }
55
- itemOrderedChildrenIds[parentIdWithDefault].push(id);
57
+ itemOrderedChildrenIdsLookup[parentIdWithDefault].push(id);
56
58
  item.children?.forEach(child => processItem(child, depth + 1, id));
57
59
  };
58
60
  items.forEach(item => processItem(item, 0, null));
59
- const itemChildrenIndexes = {};
60
- Object.keys(itemOrderedChildrenIds).forEach(parentId => {
61
- itemChildrenIndexes[parentId] = (0, _useTreeViewItems.buildSiblingIndexes)(itemOrderedChildrenIds[parentId]);
61
+ const itemChildrenIndexesLookup = {};
62
+ Object.keys(itemOrderedChildrenIdsLookup).forEach(parentId => {
63
+ itemChildrenIndexesLookup[parentId] = (0, _useTreeViewItems.buildSiblingIndexes)(itemOrderedChildrenIdsLookup[parentId]);
62
64
  });
63
65
  return {
64
- itemMetaMap,
65
- itemMap,
66
- itemOrderedChildrenIds,
67
- itemChildrenIndexes
66
+ disabledItemsFocusable,
67
+ itemMetaLookup,
68
+ itemModelLookup,
69
+ itemOrderedChildrenIdsLookup,
70
+ itemChildrenIndexesLookup
68
71
  };
69
72
  };
70
73
  const useTreeViewItems = ({
71
74
  instance,
72
75
  params,
73
- state,
74
- setState,
75
- experimentalFeatures
76
+ store
76
77
  }) => {
77
- const getItemMeta = React.useCallback(itemId => state.items.itemMetaMap[itemId], [state.items.itemMetaMap]);
78
- const getItem = React.useCallback(itemId => state.items.itemMap[itemId], [state.items.itemMap]);
78
+ const getItem = React.useCallback(itemId => (0, _useTreeViewItems2.selectorItemModel)(store.value, itemId), [store]);
79
79
  const getItemTree = React.useCallback(() => {
80
- const getItemFromItemId = id => {
81
- const _state$items$itemMap$ = state.items.itemMap[id],
82
- item = (0, _objectWithoutPropertiesLoose2.default)(_state$items$itemMap$, _excluded);
83
- const newChildren = state.items.itemOrderedChildrenIds[id];
84
- if (newChildren) {
80
+ const getItemFromItemId = itemId => {
81
+ const item = (0, _useTreeViewItems2.selectorItemModel)(store.value, itemId);
82
+ const newChildren = (0, _useTreeViewItems2.selectorItemOrderedChildrenIds)(store.value, itemId);
83
+ if (newChildren.length > 0) {
85
84
  item.children = newChildren.map(getItemFromItemId);
85
+ } else {
86
+ delete item.children;
86
87
  }
87
88
  return item;
88
89
  };
89
- return state.items.itemOrderedChildrenIds[_useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID].map(getItemFromItemId);
90
- }, [state.items.itemMap, state.items.itemOrderedChildrenIds]);
91
- const isItemDisabled = React.useCallback(itemId => {
92
- if (itemId == null) {
93
- return false;
94
- }
95
- let itemMeta = instance.getItemMeta(itemId);
96
-
97
- // This can be called before the item has been added to the item map.
98
- if (!itemMeta) {
99
- return false;
100
- }
101
- if (itemMeta.disabled) {
102
- return true;
103
- }
104
- while (itemMeta.parentId != null) {
105
- itemMeta = instance.getItemMeta(itemMeta.parentId);
106
- if (itemMeta.disabled) {
107
- return true;
108
- }
109
- }
110
- return false;
111
- }, [instance]);
112
- const getItemIndex = React.useCallback(itemId => {
113
- const parentId = instance.getItemMeta(itemId).parentId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID;
114
- return state.items.itemChildrenIndexes[parentId][itemId];
115
- }, [instance, state.items.itemChildrenIndexes]);
116
- const getItemOrderedChildrenIds = React.useCallback(itemId => state.items.itemOrderedChildrenIds[itemId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID] ?? [], [state.items.itemOrderedChildrenIds]);
90
+ return (0, _useTreeViewItems2.selectorItemOrderedChildrenIds)(store.value, null).map(getItemFromItemId);
91
+ }, [store]);
92
+ const getItemOrderedChildrenIds = React.useCallback(itemId => (0, _useTreeViewItems2.selectorItemOrderedChildrenIds)(store.value, itemId), [store]);
117
93
  const getItemDOMElement = itemId => {
118
- const itemMeta = instance.getItemMeta(itemId);
94
+ const itemMeta = (0, _useTreeViewItems2.selectorItemMeta)(store.value, itemId);
119
95
  if (itemMeta == null) {
120
96
  return null;
121
97
  }
122
- return document.getElementById((0, _useTreeViewId.generateTreeItemIdAttribute)({
123
- treeId: state.id.treeId,
98
+ const idAttribute = (0, _useTreeViewId2.generateTreeItemIdAttribute)({
99
+ treeId: (0, _useTreeViewId.selectorTreeViewId)(store.value),
124
100
  itemId,
125
101
  id: itemMeta.idAttribute
126
- }));
127
- };
128
- const isItemNavigable = itemId => {
129
- if (params.disabledItemsFocusable) {
130
- return true;
131
- }
132
- return !instance.isItemDisabled(itemId);
102
+ });
103
+ return document.getElementById(idAttribute);
133
104
  };
134
105
  const areItemUpdatesPreventedRef = React.useRef(false);
135
106
  const preventItemUpdates = React.useCallback(() => {
@@ -140,15 +111,16 @@ const useTreeViewItems = ({
140
111
  if (instance.areItemUpdatesPrevented()) {
141
112
  return;
142
113
  }
143
- setState(prevState => {
114
+ store.update(prevState => {
144
115
  const newState = updateItemsState({
116
+ disabledItemsFocusable: params.disabledItemsFocusable,
145
117
  items: params.items,
146
118
  isItemDisabled: params.isItemDisabled,
147
119
  getItemId: params.getItemId,
148
120
  getItemLabel: params.getItemLabel
149
121
  });
150
- Object.values(prevState.items.itemMetaMap).forEach(item => {
151
- if (!newState.itemMetaMap[item.id]) {
122
+ Object.values(prevState.items.itemMetaLookup).forEach(item => {
123
+ if (!newState.itemMetaLookup[item.id]) {
152
124
  (0, _publishTreeViewEvent.publishTreeViewEvent)(instance, 'removeItem', {
153
125
  id: item.id
154
126
  });
@@ -158,19 +130,19 @@ const useTreeViewItems = ({
158
130
  items: newState
159
131
  });
160
132
  });
161
- }, [instance, setState, params.items, params.isItemDisabled, params.getItemId, params.getItemLabel]);
162
- const getItemsToRender = () => {
163
- const getPropsFromItemId = id => {
164
- const item = state.items.itemMetaMap[id];
165
- return {
166
- label: item.label,
167
- itemId: item.id,
168
- id: item.idAttribute,
169
- children: state.items.itemOrderedChildrenIds[id]?.map(getPropsFromItemId)
170
- };
171
- };
172
- return state.items.itemOrderedChildrenIds[_useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID].map(getPropsFromItemId);
173
- };
133
+ }, [instance, store, params.items, params.disabledItemsFocusable, params.isItemDisabled, params.getItemId, params.getItemLabel]);
134
+
135
+ // Wrap `props.onItemClick` with `useEventCallback` to prevent unneeded context updates.
136
+ const handleItemClick = (0, _useEventCallback.default)((event, itemId) => {
137
+ if (params.onItemClick) {
138
+ params.onItemClick(event, itemId);
139
+ }
140
+ });
141
+ const pluginContextValue = React.useMemo(() => ({
142
+ items: {
143
+ onItemClick: handleItemClick
144
+ }
145
+ }), [handleItemClick]);
174
146
  return {
175
147
  getRootProps: () => ({
176
148
  style: {
@@ -184,30 +156,17 @@ const useTreeViewItems = ({
184
156
  getItemOrderedChildrenIds
185
157
  },
186
158
  instance: {
187
- getItemMeta,
188
- getItem,
189
- getItemTree,
190
- getItemsToRender,
191
- getItemIndex,
192
159
  getItemDOMElement,
193
- getItemOrderedChildrenIds,
194
- isItemDisabled,
195
- isItemNavigable,
196
160
  preventItemUpdates,
197
161
  areItemUpdatesPrevented
198
162
  },
199
- contextValue: {
200
- items: {
201
- onItemClick: params.onItemClick,
202
- disabledItemsFocusable: params.disabledItemsFocusable,
203
- indentationAtItemLevel: experimentalFeatures.indentationAtItemLevel ?? false
204
- }
205
- }
163
+ contextValue: pluginContextValue
206
164
  };
207
165
  };
208
166
  exports.useTreeViewItems = useTreeViewItems;
209
167
  useTreeViewItems.getInitialState = params => ({
210
168
  items: updateItemsState({
169
+ disabledItemsFocusable: params.disabledItemsFocusable,
211
170
  items: params.items,
212
171
  isItemDisabled: params.isItemDisabled,
213
172
  getItemId: params.getItemId,
@@ -221,11 +180,10 @@ useTreeViewItems.getDefaultizedParams = ({
221
180
  itemChildrenIndentation: params.itemChildrenIndentation ?? '12px'
222
181
  });
223
182
  useTreeViewItems.wrapRoot = ({
224
- children,
225
- instance
183
+ children
226
184
  }) => {
227
185
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewItemDepthContext.TreeViewItemDepthContext.Provider, {
228
- value: itemId => instance.getItemMeta(itemId)?.depth ?? 0,
186
+ value: _useTreeViewItems2.selectorItemDepth,
229
187
  children: children
230
188
  });
231
189
  };
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.selectorItemParentId = exports.selectorItemOrderedChildrenIds = exports.selectorItemModel = exports.selectorItemMetaLookup = exports.selectorItemMeta = exports.selectorItemIndex = exports.selectorItemDepth = exports.selectorIsItemDisabled = exports.selectorCanItemBeFocused = void 0;
7
+ var _selectors = require("../../utils/selectors");
8
+ var _useTreeViewItems = require("./useTreeViewItems.utils");
9
+ const selectorTreeViewItemsState = state => state.items;
10
+
11
+ /**
12
+ * Get the meta-information of all items.
13
+ * @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
14
+ * @returns {TreeViewItemMetaLookup} The meta-information of all items.
15
+ */
16
+ const selectorItemMetaLookup = exports.selectorItemMetaLookup = (0, _selectors.createSelector)(selectorTreeViewItemsState, items => items.itemMetaLookup);
17
+ const EMPTY_CHILDREN = [];
18
+
19
+ /**
20
+ * Get the ordered children ids of a given item.
21
+ * @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
22
+ * @param {TreeViewItemId} itemId The id of the item to get the children of.
23
+ * @returns {TreeViewItemId[]} The ordered children ids of the item.
24
+ */
25
+ const selectorItemOrderedChildrenIds = exports.selectorItemOrderedChildrenIds = (0, _selectors.createSelector)([selectorTreeViewItemsState, (_, itemId) => itemId], (itemsState, itemId) => itemsState.itemOrderedChildrenIdsLookup[itemId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID] ?? EMPTY_CHILDREN);
26
+
27
+ /**
28
+ * Get the model of an item.
29
+ * @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
30
+ * @param {TreeViewItemId} itemId The id of the item to get the model of.
31
+ * @returns {R} The model of the item.
32
+ */
33
+ const selectorItemModel = exports.selectorItemModel = (0, _selectors.createSelector)([selectorTreeViewItemsState, (_, itemId) => itemId], (itemsState, itemId) => {
34
+ const a = itemsState.itemModelLookup[itemId];
35
+ return a;
36
+ });
37
+
38
+ /**
39
+ * Get the meta-information of an item.
40
+ * Check the `TreeViewItemMeta` type for more information.
41
+ * @param {TreeViewState<[UseTreeViewItemsSignature]>}
42
+ * @param {TreeViewItemId} itemId The id of the item to get the meta-information of.
43
+ * @returns {TreeViewItemMeta | null} The meta-information of the item.
44
+ */
45
+ const selectorItemMeta = exports.selectorItemMeta = (0, _selectors.createSelector)([selectorItemMetaLookup, (_, itemId) => itemId], (itemMetaLookup, itemId) => itemMetaLookup[itemId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID] ?? null);
46
+
47
+ /**
48
+ * Check if an item is disabled.
49
+ * @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
50
+ * @param {TreeViewItemId} itemId The id of the item to check.
51
+ * @returns {boolean} `true` if the item is disabled, `false` otherwise.
52
+ */
53
+ const selectorIsItemDisabled = exports.selectorIsItemDisabled = (0, _selectors.createSelector)([selectorItemMetaLookup, (_, itemId) => itemId], (itemMetaLookup, itemId) => {
54
+ if (itemId == null) {
55
+ return false;
56
+ }
57
+ let itemMeta = itemMetaLookup[itemId];
58
+
59
+ // This can be called before the item has been added to the item map.
60
+ if (!itemMeta) {
61
+ return false;
62
+ }
63
+ if (itemMeta.disabled) {
64
+ return true;
65
+ }
66
+ while (itemMeta.parentId != null) {
67
+ itemMeta = itemMetaLookup[itemMeta.parentId];
68
+ if (itemMeta.disabled) {
69
+ return true;
70
+ }
71
+ }
72
+ return false;
73
+ });
74
+
75
+ /**
76
+ * Get the index of an item in its parent's children.
77
+ * @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
78
+ * @param {TreeViewItemId} itemId The id of the item to get the index of.
79
+ * @returns {number} The index of the item in its parent's children.
80
+ */
81
+ const selectorItemIndex = exports.selectorItemIndex = (0, _selectors.createSelector)([selectorTreeViewItemsState, selectorItemMeta], (itemsState, itemMeta) => {
82
+ if (itemMeta == null) {
83
+ return -1;
84
+ }
85
+ const parentIndexes = itemsState.itemChildrenIndexesLookup[itemMeta.parentId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID];
86
+ return parentIndexes[itemMeta.id];
87
+ });
88
+
89
+ /**
90
+ * Get the id of the parent of an item.
91
+ * @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
92
+ * @param {TreeViewItemId} itemId The id of the item to get the parent id of.
93
+ * @returns {TreeViewItemId | null} The id of the parent of the item.
94
+ */
95
+ const selectorItemParentId = exports.selectorItemParentId = (0, _selectors.createSelector)([selectorItemMeta], itemMeta => itemMeta?.parentId ?? null);
96
+
97
+ /**
98
+ * Get the depth of an item (items at the root level have a depth of 0).
99
+ * @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
100
+ * @param {TreeViewItemId} itemId The id of the item to get the depth of.
101
+ * @returns {number} The depth of the item.
102
+ */
103
+ const selectorItemDepth = exports.selectorItemDepth = (0, _selectors.createSelector)([selectorItemMeta], itemMeta => itemMeta?.depth ?? 0);
104
+ const selectorCanItemBeFocused = exports.selectorCanItemBeFocused = (0, _selectors.createSelector)([selectorTreeViewItemsState, selectorIsItemDisabled], (itemsState, isItemDisabled) => {
105
+ if (itemsState.disabledItemsFocusable) {
106
+ return true;
107
+ }
108
+ return !isItemDisabled;
109
+ });
@@ -17,42 +17,45 @@ var _TreeViewChildrenItemProvider = require("../../TreeViewProvider/TreeViewChil
17
17
  var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.utils");
18
18
  var _TreeViewItemDepthContext = require("../../TreeViewItemDepthContext");
19
19
  var _useTreeViewId = require("../../corePlugins/useTreeViewId/useTreeViewId.utils");
20
+ var _useTreeItemUtils = require("../../../hooks/useTreeItemUtils/useTreeItemUtils");
21
+ var _useSelector = require("../../hooks/useSelector");
22
+ var _useTreeViewId2 = require("../../corePlugins/useTreeViewId/useTreeViewId.selectors");
20
23
  var _jsxRuntime = require("react/jsx-runtime");
21
24
  const useTreeViewJSXItems = ({
22
25
  instance,
23
- setState
26
+ store
24
27
  }) => {
25
28
  instance.preventItemUpdates();
26
29
  const insertJSXItem = (0, _useEventCallback.default)(item => {
27
- setState(prevState => {
28
- if (prevState.items.itemMetaMap[item.id] != null) {
30
+ store.update(prevState => {
31
+ if (prevState.items.itemMetaLookup[item.id] != null) {
29
32
  throw new Error(['MUI X: The Tree View component requires all items to have a unique `id` property.', 'Alternatively, you can use the `getItemId` prop to specify a custom id for each item.', `Two items were provided with the same id in the \`items\` prop: "${item.id}"`].join('\n'));
30
33
  }
31
34
  return (0, _extends2.default)({}, prevState, {
32
35
  items: (0, _extends2.default)({}, prevState.items, {
33
- itemMetaMap: (0, _extends2.default)({}, prevState.items.itemMetaMap, {
36
+ itemMetaLookup: (0, _extends2.default)({}, prevState.items.itemMetaLookup, {
34
37
  [item.id]: item
35
38
  }),
36
39
  // For Simple Tree View, we don't have a proper `item` object, so we create a very basic one.
37
- itemMap: (0, _extends2.default)({}, prevState.items.itemMap, {
40
+ itemModelLookup: (0, _extends2.default)({}, prevState.items.itemModelLookup, {
38
41
  [item.id]: {
39
42
  id: item.id,
40
- label: item.label
43
+ label: item.label ?? ''
41
44
  }
42
45
  })
43
46
  })
44
47
  });
45
48
  });
46
49
  return () => {
47
- setState(prevState => {
48
- const newItemMetaMap = (0, _extends2.default)({}, prevState.items.itemMetaMap);
49
- const newItemMap = (0, _extends2.default)({}, prevState.items.itemMap);
50
- delete newItemMetaMap[item.id];
51
- delete newItemMap[item.id];
50
+ store.update(prevState => {
51
+ const newItemMetaLookup = (0, _extends2.default)({}, prevState.items.itemMetaLookup);
52
+ const newItemModelLookup = (0, _extends2.default)({}, prevState.items.itemModelLookup);
53
+ delete newItemMetaLookup[item.id];
54
+ delete newItemModelLookup[item.id];
52
55
  return (0, _extends2.default)({}, prevState, {
53
56
  items: (0, _extends2.default)({}, prevState.items, {
54
- itemMetaMap: newItemMetaMap,
55
- itemMap: newItemMap
57
+ itemMetaLookup: newItemMetaLookup,
58
+ itemModelLookup: newItemModelLookup
56
59
  })
57
60
  });
58
61
  });
@@ -63,12 +66,12 @@ const useTreeViewJSXItems = ({
63
66
  });
64
67
  const setJSXItemsOrderedChildrenIds = (parentId, orderedChildrenIds) => {
65
68
  const parentIdWithDefault = parentId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID;
66
- setState(prevState => (0, _extends2.default)({}, prevState, {
69
+ store.update(prevState => (0, _extends2.default)({}, prevState, {
67
70
  items: (0, _extends2.default)({}, prevState.items, {
68
- itemOrderedChildrenIds: (0, _extends2.default)({}, prevState.items.itemOrderedChildrenIds, {
71
+ itemOrderedChildrenIdsLookup: (0, _extends2.default)({}, prevState.items.itemOrderedChildrenIdsLookup, {
69
72
  [parentIdWithDefault]: orderedChildrenIds
70
73
  }),
71
- itemChildrenIndexes: (0, _extends2.default)({}, prevState.items.itemChildrenIndexes, {
74
+ itemChildrenIndexesLookup: (0, _extends2.default)({}, prevState.items.itemChildrenIndexesLookup, {
72
75
  [parentIdWithDefault]: (0, _useTreeViewItems.buildSiblingIndexes)(orderedChildrenIds)
73
76
  })
74
77
  })
@@ -96,12 +99,6 @@ const useTreeViewJSXItems = ({
96
99
  };
97
100
  };
98
101
  exports.useTreeViewJSXItems = useTreeViewJSXItems;
99
- const isItemExpandable = reactChildren => {
100
- if (Array.isArray(reactChildren)) {
101
- return reactChildren.length > 0 && reactChildren.some(isItemExpandable);
102
- }
103
- return Boolean(reactChildren);
104
- };
105
102
  const useTreeViewJSXItemsItemPlugin = ({
106
103
  props,
107
104
  rootRef,
@@ -109,7 +106,7 @@ const useTreeViewJSXItemsItemPlugin = ({
109
106
  }) => {
110
107
  const {
111
108
  instance,
112
- treeId
109
+ store
113
110
  } = (0, _TreeViewProvider.useTreeViewContext)();
114
111
  const {
115
112
  children,
@@ -127,9 +124,10 @@ const useTreeViewJSXItemsItemPlugin = ({
127
124
  unregisterChild,
128
125
  parentId
129
126
  } = parentContext;
130
- const expandable = isItemExpandable(children);
127
+ const expandable = (0, _useTreeItemUtils.isItemExpandable)(children);
131
128
  const pluginContentRef = React.useRef(null);
132
129
  const handleContentRef = (0, _useForkRef.default)(pluginContentRef, contentRef);
130
+ const treeId = (0, _useSelector.useSelector)(store, _useTreeViewId2.selectorTreeViewId);
133
131
 
134
132
  // Prevent any flashing
135
133
  (0, _useEnhancedEffect.default)(() => {
@@ -141,9 +139,10 @@ const useTreeViewJSXItemsItemPlugin = ({
141
139
  registerChild(idAttribute, itemId);
142
140
  return () => {
143
141
  unregisterChild(idAttribute);
142
+ unregisterChild(idAttribute);
144
143
  };
145
- }, [registerChild, unregisterChild, itemId, id, treeId]);
146
- React.useEffect(() => {
144
+ }, [store, instance, registerChild, unregisterChild, itemId, id, treeId]);
145
+ (0, _useEnhancedEffect.default)(() => {
147
146
  return instance.insertJSXItem({
148
147
  id: itemId,
149
148
  idAttribute: id,
@@ -166,12 +165,14 @@ const useTreeViewJSXItemsItemPlugin = ({
166
165
  useTreeViewJSXItems.itemPlugin = useTreeViewJSXItemsItemPlugin;
167
166
  useTreeViewJSXItems.wrapItem = ({
168
167
  children,
169
- itemId
168
+ itemId,
169
+ idAttribute
170
170
  }) => {
171
171
  // eslint-disable-next-line react-hooks/rules-of-hooks
172
172
  const depthContext = React.useContext(_TreeViewItemDepthContext.TreeViewItemDepthContext);
173
173
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewChildrenItemProvider.TreeViewChildrenItemProvider, {
174
174
  itemId: itemId,
175
+ idAttribute: idAttribute,
175
176
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewItemDepthContext.TreeViewItemDepthContext.Provider, {
176
177
  value: depthContext + 1,
177
178
  children: children
@@ -181,6 +182,8 @@ useTreeViewJSXItems.wrapItem = ({
181
182
  useTreeViewJSXItems.wrapRoot = ({
182
183
  children
183
184
  }) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewChildrenItemProvider.TreeViewChildrenItemProvider, {
185
+ itemId: null,
186
+ idAttribute: null,
184
187
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewItemDepthContext.TreeViewItemDepthContext.Provider, {
185
188
  value: 0,
186
189
  children: children
@@ -12,19 +12,25 @@ var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallb
12
12
  var _tree = require("../../utils/tree");
13
13
  var _plugins = require("../../utils/plugins");
14
14
  var _useTreeViewLabel = require("../useTreeViewLabel");
15
+ var _useSelector = require("../../hooks/useSelector");
16
+ var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.selectors");
17
+ var _useTreeViewLabel2 = require("../useTreeViewLabel/useTreeViewLabel.selectors");
18
+ var _useTreeViewSelection = require("../useTreeViewSelection/useTreeViewSelection.selectors");
19
+ var _useTreeViewExpansion = require("../useTreeViewExpansion/useTreeViewExpansion.selectors");
15
20
  function isPrintableKey(string) {
16
21
  return !!string && string.length === 1 && !!string.match(/\S/);
17
22
  }
18
23
  const useTreeViewKeyboardNavigation = ({
19
24
  instance,
20
- params,
21
- state
25
+ store,
26
+ params
22
27
  }) => {
23
28
  const isRtl = (0, _RtlProvider.useRtl)();
24
29
  const firstCharMap = React.useRef({});
25
30
  const updateFirstCharMap = (0, _useEventCallback.default)(callback => {
26
31
  firstCharMap.current = callback(firstCharMap.current);
27
32
  });
33
+ const itemMetaLookup = (0, _useSelector.useSelector)(store, _useTreeViewItems.selectorItemMetaLookup);
28
34
  React.useEffect(() => {
29
35
  if (instance.areItemUpdatesPrevented()) {
30
36
  return;
@@ -33,16 +39,16 @@ const useTreeViewKeyboardNavigation = ({
33
39
  const processItem = item => {
34
40
  newFirstCharMap[item.id] = item.label.substring(0, 1).toLowerCase();
35
41
  };
36
- Object.values(state.items.itemMetaMap).forEach(processItem);
42
+ Object.values(itemMetaLookup).forEach(processItem);
37
43
  firstCharMap.current = newFirstCharMap;
38
- }, [state.items.itemMetaMap, params.getItemId, instance]);
44
+ }, [itemMetaLookup, params.getItemId, instance]);
39
45
  const getFirstMatchingItem = (itemId, query) => {
40
46
  const cleanQuery = query.toLowerCase();
41
47
  const getNextItem = itemIdToCheck => {
42
- const nextItemId = (0, _tree.getNextNavigableItem)(instance, itemIdToCheck);
48
+ const nextItemId = (0, _tree.getNextNavigableItem)(store.value, itemIdToCheck);
43
49
  // We reached the end of the tree, check from the beginning
44
50
  if (nextItemId === null) {
45
- return (0, _tree.getFirstNavigableItem)(instance);
51
+ return (0, _tree.getFirstNavigableItem)(store.value);
46
52
  }
47
53
  return nextItemId;
48
54
  };
@@ -60,9 +66,9 @@ const useTreeViewKeyboardNavigation = ({
60
66
  }
61
67
  return matchingItemId;
62
68
  };
63
- const canToggleItemSelection = itemId => !params.disableSelection && !instance.isItemDisabled(itemId);
69
+ const canToggleItemSelection = itemId => !params.disableSelection && !(0, _useTreeViewItems.selectorIsItemDisabled)(store.value, itemId);
64
70
  const canToggleItemExpansion = itemId => {
65
- return !instance.isItemDisabled(itemId) && instance.isItemExpandable(itemId);
71
+ return !(0, _useTreeViewItems.selectorIsItemDisabled)(store.value, itemId) && (0, _useTreeViewExpansion.selectorIsItemExpandable)(store.value, itemId);
66
72
  };
67
73
 
68
74
  // ARIA specification: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/#keyboardinteraction
@@ -99,7 +105,10 @@ const useTreeViewKeyboardNavigation = ({
99
105
  // If the focused item has no children, we select it.
100
106
  case key === 'Enter':
101
107
  {
102
- if ((0, _plugins.hasPlugin)(instance, _useTreeViewLabel.useTreeViewLabel) && instance.isItemEditable(itemId) && !instance.isItemBeingEdited(itemId)) {
108
+ if ((0, _plugins.hasPlugin)(instance, _useTreeViewLabel.useTreeViewLabel) && (0, _useTreeViewLabel2.selectorIsItemEditable)(store.value, {
109
+ itemId,
110
+ isItemEditable: params.isItemEditable
111
+ }) && !(0, _useTreeViewLabel2.selectorIsItemBeingEdited)(store.value, itemId)) {
103
112
  instance.setEditedItemId(itemId);
104
113
  } else if (canToggleItemExpansion(itemId)) {
105
114
  instance.toggleItemExpansion(event, itemId);
@@ -112,7 +121,7 @@ const useTreeViewKeyboardNavigation = ({
112
121
  itemId,
113
122
  keepExistingSelection: true
114
123
  });
115
- } else if (!instance.isItemSelected(itemId)) {
124
+ } else if (!(0, _useTreeViewSelection.selectorIsItemSelected)(store.value, itemId)) {
116
125
  instance.selectItem({
117
126
  event,
118
127
  itemId
@@ -126,7 +135,7 @@ const useTreeViewKeyboardNavigation = ({
126
135
  // Focus the next focusable item
127
136
  case key === 'ArrowDown':
128
137
  {
129
- const nextItem = (0, _tree.getNextNavigableItem)(instance, itemId);
138
+ const nextItem = (0, _tree.getNextNavigableItem)(store.value, itemId);
130
139
  if (nextItem) {
131
140
  event.preventDefault();
132
141
  instance.focusItem(event, nextItem);
@@ -143,7 +152,7 @@ const useTreeViewKeyboardNavigation = ({
143
152
  // Focuses the previous focusable item
144
153
  case key === 'ArrowUp':
145
154
  {
146
- const previousItem = (0, _tree.getPreviousNavigableItem)(instance, itemId);
155
+ const previousItem = (0, _tree.getPreviousNavigableItem)(store.value, itemId);
147
156
  if (previousItem) {
148
157
  event.preventDefault();
149
158
  instance.focusItem(event, previousItem);
@@ -164,8 +173,8 @@ const useTreeViewKeyboardNavigation = ({
164
173
  if (ctrlPressed) {
165
174
  return;
166
175
  }
167
- if (instance.isItemExpanded(itemId)) {
168
- const nextItemId = (0, _tree.getNextNavigableItem)(instance, itemId);
176
+ if ((0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, itemId)) {
177
+ const nextItemId = (0, _tree.getNextNavigableItem)(store.value, itemId);
169
178
  if (nextItemId) {
170
179
  instance.focusItem(event, nextItemId);
171
180
  event.preventDefault();
@@ -184,11 +193,11 @@ const useTreeViewKeyboardNavigation = ({
184
193
  if (ctrlPressed) {
185
194
  return;
186
195
  }
187
- if (canToggleItemExpansion(itemId) && instance.isItemExpanded(itemId)) {
196
+ if (canToggleItemExpansion(itemId) && (0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, itemId)) {
188
197
  instance.toggleItemExpansion(event, itemId);
189
198
  event.preventDefault();
190
199
  } else {
191
- const parent = instance.getItemMeta(itemId).parentId;
200
+ const parent = (0, _useTreeViewItems.selectorItemParentId)(store.value, itemId);
192
201
  if (parent) {
193
202
  instance.focusItem(event, parent);
194
203
  event.preventDefault();
@@ -205,7 +214,7 @@ const useTreeViewKeyboardNavigation = ({
205
214
  if (canToggleItemSelection(itemId) && params.multiSelect && ctrlPressed && event.shiftKey) {
206
215
  instance.selectRangeFromStartToItem(event, itemId);
207
216
  } else {
208
- instance.focusItem(event, (0, _tree.getFirstNavigableItem)(instance));
217
+ instance.focusItem(event, (0, _tree.getFirstNavigableItem)(store.value));
209
218
  }
210
219
  event.preventDefault();
211
220
  break;
@@ -219,7 +228,7 @@ const useTreeViewKeyboardNavigation = ({
219
228
  if (canToggleItemSelection(itemId) && params.multiSelect && ctrlPressed && event.shiftKey) {
220
229
  instance.selectRangeFromItemToEnd(event, itemId);
221
230
  } else {
222
- instance.focusItem(event, (0, _tree.getLastNavigableItem)(instance));
231
+ instance.focusItem(event, (0, _tree.getLastNavigableItem)(store.value));
223
232
  }
224
233
  event.preventDefault();
225
234
  break;