@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
@@ -0,0 +1,103 @@
1
+ import { createSelector } from "../../utils/selectors.js";
2
+ import { TREE_VIEW_ROOT_PARENT_ID } from "./useTreeViewItems.utils.js";
3
+ const selectorTreeViewItemsState = state => state.items;
4
+
5
+ /**
6
+ * Get the meta-information of all items.
7
+ * @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
8
+ * @returns {TreeViewItemMetaLookup} The meta-information of all items.
9
+ */
10
+ export const selectorItemMetaLookup = createSelector(selectorTreeViewItemsState, items => items.itemMetaLookup);
11
+ const EMPTY_CHILDREN = [];
12
+
13
+ /**
14
+ * Get the ordered children ids of a given item.
15
+ * @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
16
+ * @param {TreeViewItemId} itemId The id of the item to get the children of.
17
+ * @returns {TreeViewItemId[]} The ordered children ids of the item.
18
+ */
19
+ export const selectorItemOrderedChildrenIds = createSelector([selectorTreeViewItemsState, (_, itemId) => itemId], (itemsState, itemId) => itemsState.itemOrderedChildrenIdsLookup[itemId ?? TREE_VIEW_ROOT_PARENT_ID] ?? EMPTY_CHILDREN);
20
+
21
+ /**
22
+ * Get the model of an item.
23
+ * @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
24
+ * @param {TreeViewItemId} itemId The id of the item to get the model of.
25
+ * @returns {R} The model of the item.
26
+ */
27
+ export const selectorItemModel = createSelector([selectorTreeViewItemsState, (_, itemId) => itemId], (itemsState, itemId) => {
28
+ const a = itemsState.itemModelLookup[itemId];
29
+ return a;
30
+ });
31
+
32
+ /**
33
+ * Get the meta-information of an item.
34
+ * Check the `TreeViewItemMeta` type for more information.
35
+ * @param {TreeViewState<[UseTreeViewItemsSignature]>}
36
+ * @param {TreeViewItemId} itemId The id of the item to get the meta-information of.
37
+ * @returns {TreeViewItemMeta | null} The meta-information of the item.
38
+ */
39
+ export const selectorItemMeta = createSelector([selectorItemMetaLookup, (_, itemId) => itemId], (itemMetaLookup, itemId) => itemMetaLookup[itemId ?? TREE_VIEW_ROOT_PARENT_ID] ?? null);
40
+
41
+ /**
42
+ * Check if an item is disabled.
43
+ * @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
44
+ * @param {TreeViewItemId} itemId The id of the item to check.
45
+ * @returns {boolean} `true` if the item is disabled, `false` otherwise.
46
+ */
47
+ export const selectorIsItemDisabled = createSelector([selectorItemMetaLookup, (_, itemId) => itemId], (itemMetaLookup, itemId) => {
48
+ if (itemId == null) {
49
+ return false;
50
+ }
51
+ let itemMeta = itemMetaLookup[itemId];
52
+
53
+ // This can be called before the item has been added to the item map.
54
+ if (!itemMeta) {
55
+ return false;
56
+ }
57
+ if (itemMeta.disabled) {
58
+ return true;
59
+ }
60
+ while (itemMeta.parentId != null) {
61
+ itemMeta = itemMetaLookup[itemMeta.parentId];
62
+ if (itemMeta.disabled) {
63
+ return true;
64
+ }
65
+ }
66
+ return false;
67
+ });
68
+
69
+ /**
70
+ * Get the index of an item in its parent's children.
71
+ * @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
72
+ * @param {TreeViewItemId} itemId The id of the item to get the index of.
73
+ * @returns {number} The index of the item in its parent's children.
74
+ */
75
+ export const selectorItemIndex = createSelector([selectorTreeViewItemsState, selectorItemMeta], (itemsState, itemMeta) => {
76
+ if (itemMeta == null) {
77
+ return -1;
78
+ }
79
+ const parentIndexes = itemsState.itemChildrenIndexesLookup[itemMeta.parentId ?? TREE_VIEW_ROOT_PARENT_ID];
80
+ return parentIndexes[itemMeta.id];
81
+ });
82
+
83
+ /**
84
+ * Get the id of the parent of an item.
85
+ * @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
86
+ * @param {TreeViewItemId} itemId The id of the item to get the parent id of.
87
+ * @returns {TreeViewItemId | null} The id of the parent of the item.
88
+ */
89
+ export const selectorItemParentId = createSelector([selectorItemMeta], itemMeta => itemMeta?.parentId ?? null);
90
+
91
+ /**
92
+ * Get the depth of an item (items at the root level have a depth of 0).
93
+ * @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
94
+ * @param {TreeViewItemId} itemId The id of the item to get the depth of.
95
+ * @returns {number} The depth of the item.
96
+ */
97
+ export const selectorItemDepth = createSelector([selectorItemMeta], itemMeta => itemMeta?.depth ?? 0);
98
+ export const selectorCanItemBeFocused = createSelector([selectorTreeViewItemsState, selectorIsItemDisabled], (itemsState, isItemDisabled) => {
99
+ if (itemsState.disabledItemsFocusable) {
100
+ return true;
101
+ }
102
+ return !isItemDisabled;
103
+ });
@@ -1,12 +1,7 @@
1
1
  import * as React from 'react';
2
- import { TreeViewItemMeta, DefaultizedProps, TreeViewPluginSignature } from '../../models';
3
- import { TreeViewBaseItem, TreeViewItemId } from '../../../models';
4
- export interface TreeViewItemToRenderProps {
5
- label: string;
6
- itemId: string;
7
- id: string | undefined;
8
- children?: TreeViewItemToRenderProps[];
9
- }
2
+ import { DefaultizedProps } from '@mui/x-internals/types';
3
+ import { TreeViewItemMeta, TreeViewPluginSignature } from '../../models';
4
+ import { TreeViewBaseItem, TreeViewDefaultItemModelProperties, TreeViewItemId } from '../../../models';
10
5
  export interface UseTreeViewItemsPublicAPI<R extends {}> {
11
6
  /**
12
7
  * Get the item with the given id.
@@ -31,45 +26,11 @@ export interface UseTreeViewItemsPublicAPI<R extends {}> {
31
26
  getItemOrderedChildrenIds: (itemId: TreeViewItemId | null) => TreeViewItemId[];
32
27
  /**
33
28
  * Get all the items in the same format as provided by `props.items`.
34
- * @returns {TreeViewItemToRenderProps[]} The items in the tree.
29
+ * @returns {TreeViewBaseItem[]} The items in the tree.
35
30
  */
36
31
  getItemTree: () => TreeViewBaseItem[];
37
32
  }
38
- export interface UseTreeViewItemsInstance<R extends {}> extends UseTreeViewItemsPublicAPI<R> {
39
- /**
40
- * Get the meta-information of an item.
41
- * Check the `TreeViewItemMeta` type for more information.
42
- * @param {TreeViewItemId} itemId The id of the item to get the meta-information of.
43
- * @returns {TreeViewItemMeta} The meta-information of the item.
44
- */
45
- getItemMeta: (itemId: TreeViewItemId) => TreeViewItemMeta;
46
- /**
47
- * Get the item that should be rendered.
48
- * This method is only used on Rich Tree View components.
49
- * Check the `TreeViewItemToRenderProps` type for more information.
50
- * @returns {TreeViewItemToRenderProps[]} The items to render.
51
- */
52
- getItemsToRender: () => TreeViewItemToRenderProps[];
53
- /**
54
- * Check if a given item is disabled.
55
- * An item is disabled if it was marked as disabled or if one of its ancestors is disabled.
56
- * @param {TreeViewItemId} itemId The id of the item to check.
57
- * @returns {boolean} `true` if the item is disabled, `false` otherwise.
58
- */
59
- isItemDisabled: (itemId: TreeViewItemId) => boolean;
60
- /**
61
- * Check if a given item is navigable (i.e.: if it can be accessed through keyboard navigation).
62
- * An item is navigable if it is not disabled or if the `disabledItemsFocusable` prop is `true`.
63
- * @param {TreeViewItemId} itemId The id of the item to check.
64
- * @returns {boolean} `true` if the item is navigable, `false` otherwise.
65
- */
66
- isItemNavigable: (itemId: TreeViewItemId) => boolean;
67
- /**
68
- * Get the index of a given item in its parent's children list.
69
- * @param {TreeViewItemId} itemId The id of the item to get the index of.
70
- * @returns {number} The index of the item in its parent's children list.
71
- */
72
- getItemIndex: (itemId: TreeViewItemId) => number;
33
+ export interface UseTreeViewItemsInstance<R extends {}> extends Pick<UseTreeViewItemsPublicAPI<R>, 'getItemDOMElement'> {
73
34
  /**
74
35
  * Freeze any future update to the state based on the `items` prop.
75
36
  * This is useful when `useTreeViewJSXItems` is used to avoid having conflicting sources of truth.
@@ -141,12 +102,13 @@ interface UseTreeViewItemsEventLookup {
141
102
  }
142
103
  export interface UseTreeViewItemsState<R extends {}> {
143
104
  items: {
144
- itemMetaMap: TreeViewItemMetaMap;
145
- itemMap: TreeViewItemMap<R>;
146
- itemOrderedChildrenIds: {
105
+ disabledItemsFocusable: boolean;
106
+ itemModelLookup: TreeViewItemModelLookup<R>;
107
+ itemMetaLookup: TreeViewItemMetaLookup;
108
+ itemOrderedChildrenIdsLookup: {
147
109
  [parentItemId: string]: string[];
148
110
  };
149
- itemChildrenIndexes: {
111
+ itemChildrenIndexesLookup: {
150
112
  [parentItemId: string]: {
151
113
  [itemId: string]: number;
152
114
  };
@@ -154,8 +116,8 @@ export interface UseTreeViewItemsState<R extends {}> {
154
116
  };
155
117
  }
156
118
  interface UseTreeViewItemsContextValue {
157
- items: Pick<UseTreeViewItemsDefaultizedParameters<any>, 'disabledItemsFocusable' | 'onItemClick'> & {
158
- indentationAtItemLevel: boolean;
119
+ items: {
120
+ onItemClick: (event: React.MouseEvent, itemId: string) => void;
159
121
  };
160
122
  }
161
123
  export type UseTreeViewItemsSignature = TreeViewPluginSignature<{
@@ -164,14 +126,13 @@ export type UseTreeViewItemsSignature = TreeViewPluginSignature<{
164
126
  instance: UseTreeViewItemsInstance<any>;
165
127
  publicAPI: UseTreeViewItemsPublicAPI<any>;
166
128
  events: UseTreeViewItemsEventLookup;
167
- state: UseTreeViewItemsState<any>;
129
+ state: UseTreeViewItemsState<TreeViewDefaultItemModelProperties>;
168
130
  contextValue: UseTreeViewItemsContextValue;
169
- experimentalFeatures: 'indentationAtItemLevel';
170
131
  }>;
171
- export type TreeViewItemMetaMap = {
132
+ export type TreeViewItemMetaLookup = {
172
133
  [itemId: string]: TreeViewItemMeta;
173
134
  };
174
- export type TreeViewItemMap<R extends {}> = {
175
- [itemId: string]: R;
135
+ export type TreeViewItemModelLookup<R extends {}> = {
136
+ [itemId: string]: TreeViewBaseItem<R>;
176
137
  };
177
138
  export {};
@@ -9,42 +9,45 @@ import { TreeViewChildrenItemContext, TreeViewChildrenItemProvider } from "../..
9
9
  import { buildSiblingIndexes, TREE_VIEW_ROOT_PARENT_ID } from "../useTreeViewItems/useTreeViewItems.utils.js";
10
10
  import { TreeViewItemDepthContext } from "../../TreeViewItemDepthContext/index.js";
11
11
  import { generateTreeItemIdAttribute } from "../../corePlugins/useTreeViewId/useTreeViewId.utils.js";
12
+ import { isItemExpandable } from "../../../hooks/useTreeItemUtils/useTreeItemUtils.js";
13
+ import { useSelector } from "../../hooks/useSelector.js";
14
+ import { selectorTreeViewId } from "../../corePlugins/useTreeViewId/useTreeViewId.selectors.js";
12
15
  import { jsx as _jsx } from "react/jsx-runtime";
13
16
  export const useTreeViewJSXItems = ({
14
17
  instance,
15
- setState
18
+ store
16
19
  }) => {
17
20
  instance.preventItemUpdates();
18
21
  const insertJSXItem = useEventCallback(item => {
19
- setState(prevState => {
20
- if (prevState.items.itemMetaMap[item.id] != null) {
22
+ store.update(prevState => {
23
+ if (prevState.items.itemMetaLookup[item.id] != null) {
21
24
  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'));
22
25
  }
23
26
  return _extends({}, prevState, {
24
27
  items: _extends({}, prevState.items, {
25
- itemMetaMap: _extends({}, prevState.items.itemMetaMap, {
28
+ itemMetaLookup: _extends({}, prevState.items.itemMetaLookup, {
26
29
  [item.id]: item
27
30
  }),
28
31
  // For Simple Tree View, we don't have a proper `item` object, so we create a very basic one.
29
- itemMap: _extends({}, prevState.items.itemMap, {
32
+ itemModelLookup: _extends({}, prevState.items.itemModelLookup, {
30
33
  [item.id]: {
31
34
  id: item.id,
32
- label: item.label
35
+ label: item.label ?? ''
33
36
  }
34
37
  })
35
38
  })
36
39
  });
37
40
  });
38
41
  return () => {
39
- setState(prevState => {
40
- const newItemMetaMap = _extends({}, prevState.items.itemMetaMap);
41
- const newItemMap = _extends({}, prevState.items.itemMap);
42
- delete newItemMetaMap[item.id];
43
- delete newItemMap[item.id];
42
+ store.update(prevState => {
43
+ const newItemMetaLookup = _extends({}, prevState.items.itemMetaLookup);
44
+ const newItemModelLookup = _extends({}, prevState.items.itemModelLookup);
45
+ delete newItemMetaLookup[item.id];
46
+ delete newItemModelLookup[item.id];
44
47
  return _extends({}, prevState, {
45
48
  items: _extends({}, prevState.items, {
46
- itemMetaMap: newItemMetaMap,
47
- itemMap: newItemMap
49
+ itemMetaLookup: newItemMetaLookup,
50
+ itemModelLookup: newItemModelLookup
48
51
  })
49
52
  });
50
53
  });
@@ -55,12 +58,12 @@ export const useTreeViewJSXItems = ({
55
58
  });
56
59
  const setJSXItemsOrderedChildrenIds = (parentId, orderedChildrenIds) => {
57
60
  const parentIdWithDefault = parentId ?? TREE_VIEW_ROOT_PARENT_ID;
58
- setState(prevState => _extends({}, prevState, {
61
+ store.update(prevState => _extends({}, prevState, {
59
62
  items: _extends({}, prevState.items, {
60
- itemOrderedChildrenIds: _extends({}, prevState.items.itemOrderedChildrenIds, {
63
+ itemOrderedChildrenIdsLookup: _extends({}, prevState.items.itemOrderedChildrenIdsLookup, {
61
64
  [parentIdWithDefault]: orderedChildrenIds
62
65
  }),
63
- itemChildrenIndexes: _extends({}, prevState.items.itemChildrenIndexes, {
66
+ itemChildrenIndexesLookup: _extends({}, prevState.items.itemChildrenIndexesLookup, {
64
67
  [parentIdWithDefault]: buildSiblingIndexes(orderedChildrenIds)
65
68
  })
66
69
  })
@@ -87,12 +90,6 @@ export const useTreeViewJSXItems = ({
87
90
  }
88
91
  };
89
92
  };
90
- const isItemExpandable = reactChildren => {
91
- if (Array.isArray(reactChildren)) {
92
- return reactChildren.length > 0 && reactChildren.some(isItemExpandable);
93
- }
94
- return Boolean(reactChildren);
95
- };
96
93
  const useTreeViewJSXItemsItemPlugin = ({
97
94
  props,
98
95
  rootRef,
@@ -100,7 +97,7 @@ const useTreeViewJSXItemsItemPlugin = ({
100
97
  }) => {
101
98
  const {
102
99
  instance,
103
- treeId
100
+ store
104
101
  } = useTreeViewContext();
105
102
  const {
106
103
  children,
@@ -121,6 +118,7 @@ const useTreeViewJSXItemsItemPlugin = ({
121
118
  const expandable = isItemExpandable(children);
122
119
  const pluginContentRef = React.useRef(null);
123
120
  const handleContentRef = useForkRef(pluginContentRef, contentRef);
121
+ const treeId = useSelector(store, selectorTreeViewId);
124
122
 
125
123
  // Prevent any flashing
126
124
  useEnhancedEffect(() => {
@@ -132,9 +130,10 @@ const useTreeViewJSXItemsItemPlugin = ({
132
130
  registerChild(idAttribute, itemId);
133
131
  return () => {
134
132
  unregisterChild(idAttribute);
133
+ unregisterChild(idAttribute);
135
134
  };
136
- }, [registerChild, unregisterChild, itemId, id, treeId]);
137
- React.useEffect(() => {
135
+ }, [store, instance, registerChild, unregisterChild, itemId, id, treeId]);
136
+ useEnhancedEffect(() => {
138
137
  return instance.insertJSXItem({
139
138
  id: itemId,
140
139
  idAttribute: id,
@@ -157,12 +156,14 @@ const useTreeViewJSXItemsItemPlugin = ({
157
156
  useTreeViewJSXItems.itemPlugin = useTreeViewJSXItemsItemPlugin;
158
157
  useTreeViewJSXItems.wrapItem = ({
159
158
  children,
160
- itemId
159
+ itemId,
160
+ idAttribute
161
161
  }) => {
162
162
  // eslint-disable-next-line react-hooks/rules-of-hooks
163
163
  const depthContext = React.useContext(TreeViewItemDepthContext);
164
164
  return /*#__PURE__*/_jsx(TreeViewChildrenItemProvider, {
165
165
  itemId: itemId,
166
+ idAttribute: idAttribute,
166
167
  children: /*#__PURE__*/_jsx(TreeViewItemDepthContext.Provider, {
167
168
  value: depthContext + 1,
168
169
  children: children
@@ -172,6 +173,8 @@ useTreeViewJSXItems.wrapItem = ({
172
173
  useTreeViewJSXItems.wrapRoot = ({
173
174
  children
174
175
  }) => /*#__PURE__*/_jsx(TreeViewChildrenItemProvider, {
176
+ itemId: null,
177
+ idAttribute: null,
175
178
  children: /*#__PURE__*/_jsx(TreeViewItemDepthContext.Provider, {
176
179
  value: 0,
177
180
  children: children
@@ -4,19 +4,25 @@ import useEventCallback from '@mui/utils/useEventCallback';
4
4
  import { getFirstNavigableItem, getLastNavigableItem, getNextNavigableItem, getPreviousNavigableItem, isTargetInDescendants } from "../../utils/tree.js";
5
5
  import { hasPlugin } from "../../utils/plugins.js";
6
6
  import { useTreeViewLabel } from "../useTreeViewLabel/index.js";
7
+ import { useSelector } from "../../hooks/useSelector.js";
8
+ import { selectorItemMetaLookup, selectorIsItemDisabled, selectorItemParentId } from "../useTreeViewItems/useTreeViewItems.selectors.js";
9
+ import { selectorIsItemBeingEdited, selectorIsItemEditable } from "../useTreeViewLabel/useTreeViewLabel.selectors.js";
10
+ import { selectorIsItemSelected } from "../useTreeViewSelection/useTreeViewSelection.selectors.js";
11
+ import { selectorIsItemExpandable, selectorIsItemExpanded } from "../useTreeViewExpansion/useTreeViewExpansion.selectors.js";
7
12
  function isPrintableKey(string) {
8
13
  return !!string && string.length === 1 && !!string.match(/\S/);
9
14
  }
10
15
  export const useTreeViewKeyboardNavigation = ({
11
16
  instance,
12
- params,
13
- state
17
+ store,
18
+ params
14
19
  }) => {
15
20
  const isRtl = useRtl();
16
21
  const firstCharMap = React.useRef({});
17
22
  const updateFirstCharMap = useEventCallback(callback => {
18
23
  firstCharMap.current = callback(firstCharMap.current);
19
24
  });
25
+ const itemMetaLookup = useSelector(store, selectorItemMetaLookup);
20
26
  React.useEffect(() => {
21
27
  if (instance.areItemUpdatesPrevented()) {
22
28
  return;
@@ -25,16 +31,16 @@ export const useTreeViewKeyboardNavigation = ({
25
31
  const processItem = item => {
26
32
  newFirstCharMap[item.id] = item.label.substring(0, 1).toLowerCase();
27
33
  };
28
- Object.values(state.items.itemMetaMap).forEach(processItem);
34
+ Object.values(itemMetaLookup).forEach(processItem);
29
35
  firstCharMap.current = newFirstCharMap;
30
- }, [state.items.itemMetaMap, params.getItemId, instance]);
36
+ }, [itemMetaLookup, params.getItemId, instance]);
31
37
  const getFirstMatchingItem = (itemId, query) => {
32
38
  const cleanQuery = query.toLowerCase();
33
39
  const getNextItem = itemIdToCheck => {
34
- const nextItemId = getNextNavigableItem(instance, itemIdToCheck);
40
+ const nextItemId = getNextNavigableItem(store.value, itemIdToCheck);
35
41
  // We reached the end of the tree, check from the beginning
36
42
  if (nextItemId === null) {
37
- return getFirstNavigableItem(instance);
43
+ return getFirstNavigableItem(store.value);
38
44
  }
39
45
  return nextItemId;
40
46
  };
@@ -52,9 +58,9 @@ export const useTreeViewKeyboardNavigation = ({
52
58
  }
53
59
  return matchingItemId;
54
60
  };
55
- const canToggleItemSelection = itemId => !params.disableSelection && !instance.isItemDisabled(itemId);
61
+ const canToggleItemSelection = itemId => !params.disableSelection && !selectorIsItemDisabled(store.value, itemId);
56
62
  const canToggleItemExpansion = itemId => {
57
- return !instance.isItemDisabled(itemId) && instance.isItemExpandable(itemId);
63
+ return !selectorIsItemDisabled(store.value, itemId) && selectorIsItemExpandable(store.value, itemId);
58
64
  };
59
65
 
60
66
  // ARIA specification: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/#keyboardinteraction
@@ -91,7 +97,10 @@ export const useTreeViewKeyboardNavigation = ({
91
97
  // If the focused item has no children, we select it.
92
98
  case key === 'Enter':
93
99
  {
94
- if (hasPlugin(instance, useTreeViewLabel) && instance.isItemEditable(itemId) && !instance.isItemBeingEdited(itemId)) {
100
+ if (hasPlugin(instance, useTreeViewLabel) && selectorIsItemEditable(store.value, {
101
+ itemId,
102
+ isItemEditable: params.isItemEditable
103
+ }) && !selectorIsItemBeingEdited(store.value, itemId)) {
95
104
  instance.setEditedItemId(itemId);
96
105
  } else if (canToggleItemExpansion(itemId)) {
97
106
  instance.toggleItemExpansion(event, itemId);
@@ -104,7 +113,7 @@ export const useTreeViewKeyboardNavigation = ({
104
113
  itemId,
105
114
  keepExistingSelection: true
106
115
  });
107
- } else if (!instance.isItemSelected(itemId)) {
116
+ } else if (!selectorIsItemSelected(store.value, itemId)) {
108
117
  instance.selectItem({
109
118
  event,
110
119
  itemId
@@ -118,7 +127,7 @@ export const useTreeViewKeyboardNavigation = ({
118
127
  // Focus the next focusable item
119
128
  case key === 'ArrowDown':
120
129
  {
121
- const nextItem = getNextNavigableItem(instance, itemId);
130
+ const nextItem = getNextNavigableItem(store.value, itemId);
122
131
  if (nextItem) {
123
132
  event.preventDefault();
124
133
  instance.focusItem(event, nextItem);
@@ -135,7 +144,7 @@ export const useTreeViewKeyboardNavigation = ({
135
144
  // Focuses the previous focusable item
136
145
  case key === 'ArrowUp':
137
146
  {
138
- const previousItem = getPreviousNavigableItem(instance, itemId);
147
+ const previousItem = getPreviousNavigableItem(store.value, itemId);
139
148
  if (previousItem) {
140
149
  event.preventDefault();
141
150
  instance.focusItem(event, previousItem);
@@ -156,8 +165,8 @@ export const useTreeViewKeyboardNavigation = ({
156
165
  if (ctrlPressed) {
157
166
  return;
158
167
  }
159
- if (instance.isItemExpanded(itemId)) {
160
- const nextItemId = getNextNavigableItem(instance, itemId);
168
+ if (selectorIsItemExpanded(store.value, itemId)) {
169
+ const nextItemId = getNextNavigableItem(store.value, itemId);
161
170
  if (nextItemId) {
162
171
  instance.focusItem(event, nextItemId);
163
172
  event.preventDefault();
@@ -176,11 +185,11 @@ export const useTreeViewKeyboardNavigation = ({
176
185
  if (ctrlPressed) {
177
186
  return;
178
187
  }
179
- if (canToggleItemExpansion(itemId) && instance.isItemExpanded(itemId)) {
188
+ if (canToggleItemExpansion(itemId) && selectorIsItemExpanded(store.value, itemId)) {
180
189
  instance.toggleItemExpansion(event, itemId);
181
190
  event.preventDefault();
182
191
  } else {
183
- const parent = instance.getItemMeta(itemId).parentId;
192
+ const parent = selectorItemParentId(store.value, itemId);
184
193
  if (parent) {
185
194
  instance.focusItem(event, parent);
186
195
  event.preventDefault();
@@ -197,7 +206,7 @@ export const useTreeViewKeyboardNavigation = ({
197
206
  if (canToggleItemSelection(itemId) && params.multiSelect && ctrlPressed && event.shiftKey) {
198
207
  instance.selectRangeFromStartToItem(event, itemId);
199
208
  } else {
200
- instance.focusItem(event, getFirstNavigableItem(instance));
209
+ instance.focusItem(event, getFirstNavigableItem(store.value));
201
210
  }
202
211
  event.preventDefault();
203
212
  break;
@@ -211,7 +220,7 @@ export const useTreeViewKeyboardNavigation = ({
211
220
  if (canToggleItemSelection(itemId) && params.multiSelect && ctrlPressed && event.shiftKey) {
212
221
  instance.selectRangeFromItemToEnd(event, itemId);
213
222
  } else {
214
- instance.focusItem(event, getLastNavigableItem(instance));
223
+ instance.focusItem(event, getLastNavigableItem(store.value));
215
224
  }
216
225
  event.preventDefault();
217
226
  break;
@@ -1,2 +1,2 @@
1
1
  import { TreeViewItemPlugin } from '../../models';
2
- export declare const useTreeViewLabelItemPlugin: TreeViewItemPlugin<any>;
2
+ export declare const useTreeViewLabelItemPlugin: TreeViewItemPlugin;
@@ -1,29 +1,37 @@
1
1
  import * as React from 'react';
2
2
  import { useTreeViewContext } from "../../TreeViewProvider/index.js";
3
+ import { useSelector } from "../../hooks/useSelector.js";
4
+ import { selectorIsItemBeingEdited, selectorIsItemEditable } from "./useTreeViewLabel.selectors.js";
3
5
  export const useTreeViewLabelItemPlugin = ({
4
6
  props
5
7
  }) => {
6
8
  const {
7
- instance
9
+ store,
10
+ label: {
11
+ isItemEditable
12
+ }
8
13
  } = useTreeViewContext();
9
14
  const {
10
15
  label,
11
16
  itemId
12
17
  } = props;
13
18
  const [labelInputValue, setLabelInputValue] = React.useState(label);
14
- const isItemBeingEdited = instance.isItemBeingEdited(itemId);
19
+ const editable = useSelector(store, selectorIsItemEditable, {
20
+ itemId,
21
+ isItemEditable
22
+ });
23
+ const editing = useSelector(store, selectorIsItemBeingEdited, itemId);
15
24
  React.useEffect(() => {
16
- if (!isItemBeingEdited) {
25
+ if (!editing) {
17
26
  setLabelInputValue(label);
18
27
  }
19
- }, [isItemBeingEdited, label]);
28
+ }, [editing, label]);
20
29
  return {
21
30
  propsEnhancers: {
22
31
  labelInput: ({
23
32
  externalEventHandlers,
24
33
  interactions
25
34
  }) => {
26
- const editable = instance.isItemEditable(itemId);
27
35
  if (!editable) {
28
36
  return {};
29
37
  }
@@ -3,41 +3,26 @@ import * as React from 'react';
3
3
  import { warnOnce } from '@mui/x-internals/warning';
4
4
  import { useTreeViewLabelItemPlugin } from "./useTreeViewLabel.itemPlugin.js";
5
5
  export const useTreeViewLabel = ({
6
- instance,
7
- state,
8
- setState,
6
+ store,
9
7
  params
10
8
  }) => {
11
- const editedItemRef = React.useRef(state.editedItemId);
12
- const isItemBeingEditedRef = itemId => editedItemRef.current === itemId;
13
9
  const setEditedItemId = editedItemId => {
14
- setState(prevState => _extends({}, prevState, {
15
- editedItemId
10
+ store.update(prevState => _extends({}, prevState, {
11
+ label: {
12
+ editedItemId
13
+ }
16
14
  }));
17
- editedItemRef.current = editedItemId;
18
- };
19
- const isItemBeingEdited = itemId => itemId === state.editedItemId;
20
- const isTreeViewEditable = Boolean(params.isItemEditable);
21
- const isItemEditable = itemId => {
22
- if (itemId == null || !isTreeViewEditable) {
23
- return false;
24
- }
25
- const item = instance.getItem(itemId);
26
- if (!item) {
27
- return false;
28
- }
29
- return typeof params.isItemEditable === 'function' ? params.isItemEditable(item) : Boolean(params.isItemEditable);
30
15
  };
31
16
  const updateItemLabel = (itemId, label) => {
32
17
  if (!label) {
33
18
  throw new Error(['MUI X: The Tree View component requires all items to have a `label` property.', 'The label of an item cannot be empty.', itemId].join('\n'));
34
19
  }
35
- setState(prevState => {
36
- const item = prevState.items.itemMetaMap[itemId];
20
+ store.update(prevState => {
21
+ const item = prevState.items.itemMetaLookup[itemId];
37
22
  if (item.label !== label) {
38
23
  return _extends({}, prevState, {
39
24
  items: _extends({}, prevState.items, {
40
- itemMetaMap: _extends({}, prevState.items.itemMetaMap, {
25
+ itemMetaLookup: _extends({}, prevState.items.itemMetaLookup, {
41
26
  [itemId]: _extends({}, item, {
42
27
  label
43
28
  })
@@ -51,18 +36,20 @@ export const useTreeViewLabel = ({
51
36
  params.onItemLabelChange(itemId, label);
52
37
  }
53
38
  };
39
+ const pluginContextValue = React.useMemo(() => ({
40
+ label: {
41
+ isItemEditable: params.isItemEditable
42
+ }
43
+ }), [params.isItemEditable]);
54
44
  return {
55
45
  instance: {
56
46
  setEditedItemId,
57
- isItemBeingEdited,
58
- updateItemLabel,
59
- isItemEditable,
60
- isTreeViewEditable,
61
- isItemBeingEditedRef
47
+ updateItemLabel
62
48
  },
63
49
  publicAPI: {
64
50
  updateItemLabel
65
- }
51
+ },
52
+ contextValue: pluginContextValue
66
53
  };
67
54
  };
68
55
  useTreeViewLabel.itemPlugin = useTreeViewLabelItemPlugin;
@@ -81,7 +68,9 @@ useTreeViewLabel.getDefaultizedParams = ({
81
68
  });
82
69
  };
83
70
  useTreeViewLabel.getInitialState = () => ({
84
- editedItemId: null
71
+ label: {
72
+ editedItemId: null
73
+ }
85
74
  });
86
75
  useTreeViewLabel.params = {
87
76
  onItemLabelChange: true,