@mui/x-tree-view 8.22.0 → 8.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (497) hide show
  1. package/CHANGELOG.md +312 -0
  2. package/RichTreeView/RichTreeView.d.ts +1 -1
  3. package/RichTreeView/RichTreeView.js +41 -28
  4. package/RichTreeView/RichTreeView.types.d.ts +6 -4
  5. package/RichTreeView/index.d.ts +1 -3
  6. package/RichTreeView/index.js +1 -13
  7. package/RichTreeView/useExtractRichTreeViewParameters.d.ts +294 -0
  8. package/RichTreeView/useExtractRichTreeViewParameters.js +91 -0
  9. package/SimpleTreeView/SimpleTreeView.d.ts +1 -1
  10. package/SimpleTreeView/SimpleTreeView.js +30 -24
  11. package/SimpleTreeView/SimpleTreeView.types.d.ts +5 -4
  12. package/SimpleTreeView/useExtractSimpleTreeViewParameters.d.ts +293 -0
  13. package/SimpleTreeView/useExtractSimpleTreeViewParameters.js +78 -0
  14. package/TreeItem/TreeItem.d.ts +1 -1
  15. package/TreeItem/TreeItem.js +9 -2
  16. package/TreeItemProvider/TreeItemProvider.js +3 -10
  17. package/esm/RichTreeView/RichTreeView.d.ts +1 -1
  18. package/esm/RichTreeView/RichTreeView.js +40 -27
  19. package/esm/RichTreeView/RichTreeView.types.d.ts +6 -4
  20. package/esm/RichTreeView/index.d.ts +1 -3
  21. package/esm/RichTreeView/index.js +1 -1
  22. package/esm/RichTreeView/useExtractRichTreeViewParameters.d.ts +294 -0
  23. package/esm/RichTreeView/useExtractRichTreeViewParameters.js +83 -0
  24. package/esm/SimpleTreeView/SimpleTreeView.d.ts +1 -1
  25. package/esm/SimpleTreeView/SimpleTreeView.js +29 -23
  26. package/esm/SimpleTreeView/SimpleTreeView.types.d.ts +5 -4
  27. package/esm/SimpleTreeView/useExtractSimpleTreeViewParameters.d.ts +293 -0
  28. package/esm/SimpleTreeView/useExtractSimpleTreeViewParameters.js +70 -0
  29. package/esm/TreeItem/TreeItem.d.ts +1 -1
  30. package/esm/TreeItem/TreeItem.js +9 -2
  31. package/esm/TreeItemProvider/TreeItemProvider.js +3 -10
  32. package/esm/hooks/useApplyPropagationToSelectedItemsOnMount.js +2 -2
  33. package/esm/hooks/useRichTreeViewApiRef.d.ts +2 -2
  34. package/esm/hooks/useSimpleTreeViewApiRef.d.ts +2 -3
  35. package/esm/hooks/useTreeItemModel.d.ts +2 -2
  36. package/esm/hooks/useTreeItemModel.js +1 -1
  37. package/esm/hooks/useTreeItemUtils/useTreeItemUtils.d.ts +9 -19
  38. package/esm/hooks/useTreeItemUtils/useTreeItemUtils.js +26 -35
  39. package/esm/hooks/useTreeViewApiRef.d.ts +3 -5
  40. package/esm/hooks/useTreeViewApiRef.js +4 -3
  41. package/esm/index.d.ts +0 -1
  42. package/esm/index.js +1 -2
  43. package/esm/internals/MinimalTreeViewStore/MinimalTreeViewStore.d.ts +90 -0
  44. package/esm/internals/MinimalTreeViewStore/MinimalTreeViewStore.js +126 -0
  45. package/esm/internals/MinimalTreeViewStore/MinimalTreeViewStore.types.d.ts +272 -0
  46. package/esm/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.d.ts +21 -0
  47. package/esm/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.js +49 -0
  48. package/esm/internals/MinimalTreeViewStore/TimeoutManager.d.ts +9 -0
  49. package/esm/internals/MinimalTreeViewStore/TimeoutManager.js +39 -0
  50. package/esm/internals/MinimalTreeViewStore/TreeViewItemPluginManager.d.ts +12 -0
  51. package/esm/internals/MinimalTreeViewStore/TreeViewItemPluginManager.js +16 -0
  52. package/esm/internals/MinimalTreeViewStore/index.d.ts +2 -0
  53. package/esm/internals/MinimalTreeViewStore/index.js +2 -0
  54. package/esm/internals/RichTreeViewStore/RichTreeViewStore.d.ts +53 -0
  55. package/esm/internals/RichTreeViewStore/RichTreeViewStore.js +21 -0
  56. package/esm/internals/RichTreeViewStore/RichTreeViewStore.types.d.ts +34 -0
  57. package/esm/internals/RichTreeViewStore/RichTreeViewStore.utils.d.ts +3 -0
  58. package/esm/internals/RichTreeViewStore/RichTreeViewStore.utils.js +15 -0
  59. package/esm/internals/RichTreeViewStore/index.d.ts +3 -0
  60. package/esm/internals/RichTreeViewStore/index.js +3 -0
  61. package/esm/internals/SimpleTreeViewStore/SimpleTreeViewStore.d.ts +8 -0
  62. package/esm/internals/SimpleTreeViewStore/SimpleTreeViewStore.js +18 -0
  63. package/esm/internals/SimpleTreeViewStore/SimpleTreeViewStore.types.d.ts +9 -0
  64. package/esm/internals/SimpleTreeViewStore/SimpleTreeViewStore.utils.d.ts +3 -0
  65. package/esm/internals/SimpleTreeViewStore/SimpleTreeViewStore.utils.js +5 -0
  66. package/esm/internals/SimpleTreeViewStore/index.d.ts +2 -0
  67. package/esm/internals/SimpleTreeViewStore/index.js +2 -0
  68. package/esm/internals/TreeViewItemDepthContext/TreeViewItemDepthContext.d.ts +2 -3
  69. package/esm/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +2 -3
  70. package/esm/internals/TreeViewProvider/TreeViewContext.d.ts +3 -3
  71. package/esm/internals/TreeViewProvider/TreeViewProvider.d.ts +2 -2
  72. package/esm/internals/TreeViewProvider/TreeViewProvider.js +11 -6
  73. package/esm/internals/TreeViewProvider/TreeViewProvider.types.d.ts +8 -10
  74. package/esm/internals/TreeViewProvider/index.d.ts +1 -1
  75. package/esm/internals/TreeViewProvider/useTreeViewBuildContext.d.ts +16 -0
  76. package/esm/internals/{useTreeView → TreeViewProvider}/useTreeViewBuildContext.js +25 -39
  77. package/esm/internals/components/RichTreeViewItems.js +3 -3
  78. package/esm/internals/hooks/useTreeViewRootProps.d.ts +287 -0
  79. package/esm/internals/hooks/useTreeViewRootProps.js +30 -0
  80. package/esm/internals/hooks/useTreeViewStore.d.ts +10 -0
  81. package/esm/internals/hooks/useTreeViewStore.js +19 -0
  82. package/esm/internals/index.d.ts +15 -21
  83. package/esm/internals/index.js +11 -14
  84. package/esm/internals/models/events.d.ts +24 -3
  85. package/esm/internals/models/index.d.ts +2 -3
  86. package/esm/internals/models/index.js +2 -3
  87. package/esm/internals/models/itemPlugin.d.ts +9 -0
  88. package/esm/internals/models/treeView.d.ts +6 -9
  89. package/esm/internals/plugins/expansion/TreeViewExpansionPlugin.d.ts +69 -0
  90. package/esm/internals/plugins/expansion/TreeViewExpansionPlugin.js +124 -0
  91. package/esm/internals/plugins/expansion/index.d.ts +2 -0
  92. package/esm/internals/plugins/expansion/index.js +2 -0
  93. package/esm/internals/plugins/expansion/selectors.d.ts +27 -0
  94. package/esm/internals/plugins/{useTreeViewExpansion/useTreeViewExpansion.selectors.js → expansion/selectors.js} +5 -5
  95. package/esm/internals/plugins/expansion/utils.d.ts +5 -0
  96. package/esm/internals/plugins/focus/TreeViewFocusPlugin.d.ts +33 -0
  97. package/esm/internals/plugins/focus/TreeViewFocusPlugin.js +107 -0
  98. package/esm/internals/plugins/focus/index.d.ts +2 -0
  99. package/esm/internals/plugins/focus/index.js +2 -0
  100. package/esm/internals/plugins/focus/selectors.d.ts +21 -0
  101. package/esm/internals/plugins/{useTreeViewFocus/useTreeViewFocus.selectors.js → focus/selectors.js} +6 -6
  102. package/esm/internals/plugins/id/index.d.ts +1 -0
  103. package/esm/internals/plugins/id/index.js +1 -0
  104. package/esm/internals/plugins/id/selectors.d.ts +13 -0
  105. package/esm/internals/plugins/id/selectors.js +18 -0
  106. package/esm/internals/plugins/items/TreeViewItemsPlugin.d.ts +105 -0
  107. package/esm/internals/plugins/items/TreeViewItemsPlugin.js +223 -0
  108. package/esm/internals/plugins/items/index.d.ts +3 -0
  109. package/esm/internals/plugins/items/index.js +3 -0
  110. package/esm/internals/plugins/items/selectors.d.ts +60 -0
  111. package/esm/internals/plugins/items/selectors.js +64 -0
  112. package/esm/internals/plugins/items/utils.d.ts +43 -0
  113. package/esm/internals/plugins/{useTreeViewItems/useTreeViewItems.utils.js → items/utils.js} +6 -49
  114. package/esm/internals/plugins/{useTreeViewJSXItems/useTreeViewJSXItems.types.d.ts → jsxItems/TreeViewJSXItemsPlugin.d.ts} +6 -13
  115. package/esm/internals/plugins/jsxItems/TreeViewJSXItemsPlugin.js +81 -0
  116. package/esm/internals/plugins/jsxItems/index.d.ts +1 -0
  117. package/esm/internals/plugins/jsxItems/index.js +1 -0
  118. package/esm/internals/plugins/jsxItems/itemPlugin.d.ts +4 -0
  119. package/esm/internals/plugins/jsxItems/itemPlugin.js +88 -0
  120. package/esm/internals/plugins/keyboardNavigation/TreeViewKeyboardNavigationPlugin.d.ts +28 -0
  121. package/esm/internals/plugins/keyboardNavigation/TreeViewKeyboardNavigationPlugin.js +306 -0
  122. package/esm/internals/plugins/keyboardNavigation/index.d.ts +1 -0
  123. package/esm/internals/plugins/keyboardNavigation/index.js +1 -0
  124. package/esm/internals/plugins/labelEditing/TreeViewLabelEditingPlugin.d.ts +22 -0
  125. package/esm/internals/plugins/labelEditing/TreeViewLabelEditingPlugin.js +50 -0
  126. package/esm/internals/plugins/labelEditing/index.d.ts +2 -0
  127. package/esm/internals/plugins/labelEditing/index.js +2 -0
  128. package/{internals/plugins/useTreeViewLabel → esm/internals/plugins/labelEditing}/itemPlugin.d.ts +5 -4
  129. package/esm/internals/plugins/{useTreeViewLabel → labelEditing}/itemPlugin.js +2 -2
  130. package/esm/internals/plugins/labelEditing/selectors.d.ts +15 -0
  131. package/esm/internals/plugins/{useTreeViewLabel/useTreeViewLabel.selectors.js → labelEditing/selectors.js} +4 -4
  132. package/esm/internals/plugins/lazyLoading/index.d.ts +2 -0
  133. package/esm/internals/plugins/lazyLoading/index.js +2 -0
  134. package/esm/internals/plugins/lazyLoading/selectors.d.ts +19 -0
  135. package/esm/internals/plugins/lazyLoading/selectors.js +25 -0
  136. package/esm/internals/plugins/lazyLoading/types.d.ts +5 -0
  137. package/esm/internals/plugins/selection/TreeViewSelectionPlugin.d.ts +73 -0
  138. package/esm/internals/plugins/selection/TreeViewSelectionPlugin.js +319 -0
  139. package/esm/internals/plugins/selection/index.d.ts +2 -0
  140. package/esm/internals/plugins/selection/index.js +2 -0
  141. package/esm/internals/plugins/{useTreeViewSelection → selection}/itemPlugin.d.ts +1 -1
  142. package/esm/internals/plugins/{useTreeViewSelection → selection}/itemPlugin.js +8 -8
  143. package/esm/internals/plugins/selection/selectors.d.ts +48 -0
  144. package/esm/internals/plugins/{useTreeViewSelection/useTreeViewSelection.selectors.js → selection/selectors.js} +19 -9
  145. package/esm/internals/utils/tree.d.ts +8 -10
  146. package/esm/internals/utils/tree.js +2 -2
  147. package/esm/models/items.d.ts +5 -2
  148. package/esm/useTreeItem/useTreeItem.d.ts +18 -2
  149. package/esm/useTreeItem/useTreeItem.js +15 -19
  150. package/esm/useTreeItem/useTreeItem.types.d.ts +9 -19
  151. package/hooks/useApplyPropagationToSelectedItemsOnMount.js +3 -3
  152. package/hooks/useRichTreeViewApiRef.d.ts +2 -2
  153. package/hooks/useSimpleTreeViewApiRef.d.ts +2 -3
  154. package/hooks/useTreeItemModel.d.ts +2 -2
  155. package/hooks/useTreeItemModel.js +2 -2
  156. package/hooks/useTreeItemUtils/useTreeItemUtils.d.ts +9 -19
  157. package/hooks/useTreeItemUtils/useTreeItemUtils.js +41 -49
  158. package/hooks/useTreeViewApiRef.d.ts +3 -5
  159. package/hooks/useTreeViewApiRef.js +3 -5
  160. package/index.d.ts +0 -1
  161. package/index.js +1 -22
  162. package/internals/MinimalTreeViewStore/MinimalTreeViewStore.d.ts +90 -0
  163. package/internals/MinimalTreeViewStore/MinimalTreeViewStore.js +134 -0
  164. package/internals/MinimalTreeViewStore/MinimalTreeViewStore.types.d.ts +272 -0
  165. package/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.d.ts +21 -0
  166. package/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.js +58 -0
  167. package/internals/MinimalTreeViewStore/TimeoutManager.d.ts +9 -0
  168. package/internals/MinimalTreeViewStore/TimeoutManager.js +46 -0
  169. package/internals/MinimalTreeViewStore/TreeViewItemPluginManager.d.ts +12 -0
  170. package/internals/MinimalTreeViewStore/TreeViewItemPluginManager.js +23 -0
  171. package/internals/MinimalTreeViewStore/index.d.ts +2 -0
  172. package/internals/MinimalTreeViewStore/index.js +27 -0
  173. package/internals/RichTreeViewStore/RichTreeViewStore.d.ts +53 -0
  174. package/internals/RichTreeViewStore/RichTreeViewStore.js +30 -0
  175. package/internals/RichTreeViewStore/RichTreeViewStore.types.d.ts +34 -0
  176. package/internals/RichTreeViewStore/RichTreeViewStore.utils.d.ts +3 -0
  177. package/internals/RichTreeViewStore/RichTreeViewStore.utils.js +22 -0
  178. package/internals/RichTreeViewStore/index.d.ts +3 -0
  179. package/internals/RichTreeViewStore/index.js +38 -0
  180. package/internals/SimpleTreeViewStore/SimpleTreeViewStore.d.ts +8 -0
  181. package/internals/SimpleTreeViewStore/SimpleTreeViewStore.js +26 -0
  182. package/internals/SimpleTreeViewStore/SimpleTreeViewStore.types.d.ts +9 -0
  183. package/internals/SimpleTreeViewStore/SimpleTreeViewStore.utils.d.ts +3 -0
  184. package/internals/SimpleTreeViewStore/SimpleTreeViewStore.utils.js +11 -0
  185. package/internals/SimpleTreeViewStore/index.d.ts +2 -0
  186. package/internals/SimpleTreeViewStore/index.js +27 -0
  187. package/internals/TreeViewItemDepthContext/TreeViewItemDepthContext.d.ts +2 -3
  188. package/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +3 -4
  189. package/internals/TreeViewProvider/TreeViewContext.d.ts +3 -3
  190. package/internals/TreeViewProvider/TreeViewProvider.d.ts +2 -2
  191. package/internals/TreeViewProvider/TreeViewProvider.js +14 -9
  192. package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +8 -10
  193. package/internals/TreeViewProvider/index.d.ts +1 -1
  194. package/internals/TreeViewProvider/useTreeViewBuildContext.d.ts +16 -0
  195. package/internals/{useTreeView → TreeViewProvider}/useTreeViewBuildContext.js +25 -39
  196. package/internals/components/RichTreeViewItems.js +9 -9
  197. package/internals/hooks/useTreeViewRootProps.d.ts +287 -0
  198. package/internals/hooks/useTreeViewRootProps.js +36 -0
  199. package/internals/hooks/useTreeViewStore.d.ts +10 -0
  200. package/internals/hooks/useTreeViewStore.js +26 -0
  201. package/internals/index.d.ts +15 -21
  202. package/internals/index.js +40 -70
  203. package/internals/models/events.d.ts +24 -3
  204. package/internals/models/index.d.ts +2 -3
  205. package/internals/models/index.js +11 -22
  206. package/internals/models/itemPlugin.d.ts +9 -0
  207. package/internals/models/treeView.d.ts +6 -9
  208. package/internals/plugins/expansion/TreeViewExpansionPlugin.d.ts +69 -0
  209. package/internals/plugins/expansion/TreeViewExpansionPlugin.js +132 -0
  210. package/internals/plugins/expansion/index.d.ts +2 -0
  211. package/internals/plugins/expansion/index.js +27 -0
  212. package/internals/plugins/expansion/selectors.d.ts +27 -0
  213. package/internals/plugins/{useTreeViewExpansion/useTreeViewExpansion.selectors.js → expansion/selectors.js} +8 -8
  214. package/internals/plugins/expansion/utils.d.ts +5 -0
  215. package/internals/plugins/focus/TreeViewFocusPlugin.d.ts +33 -0
  216. package/internals/plugins/focus/TreeViewFocusPlugin.js +114 -0
  217. package/internals/plugins/focus/index.d.ts +2 -0
  218. package/internals/plugins/focus/index.js +27 -0
  219. package/internals/plugins/focus/selectors.d.ts +21 -0
  220. package/internals/plugins/{useTreeViewFocus/useTreeViewFocus.selectors.js → focus/selectors.js} +9 -9
  221. package/internals/plugins/id/index.d.ts +1 -0
  222. package/internals/plugins/id/index.js +16 -0
  223. package/internals/plugins/id/selectors.d.ts +13 -0
  224. package/internals/plugins/id/selectors.js +24 -0
  225. package/internals/plugins/items/TreeViewItemsPlugin.d.ts +105 -0
  226. package/internals/plugins/items/TreeViewItemsPlugin.js +231 -0
  227. package/internals/plugins/items/index.d.ts +3 -0
  228. package/internals/plugins/items/index.js +46 -0
  229. package/internals/plugins/items/selectors.d.ts +60 -0
  230. package/internals/plugins/{useTreeViewItems/useTreeViewItems.selectors.js → items/selectors.js} +18 -14
  231. package/internals/plugins/items/utils.d.ts +43 -0
  232. package/internals/plugins/{useTreeViewItems/useTreeViewItems.utils.js → items/utils.js} +6 -50
  233. package/internals/plugins/{useTreeViewJSXItems/useTreeViewJSXItems.types.d.ts → jsxItems/TreeViewJSXItemsPlugin.d.ts} +6 -13
  234. package/internals/plugins/jsxItems/TreeViewJSXItemsPlugin.js +89 -0
  235. package/internals/plugins/jsxItems/index.d.ts +1 -0
  236. package/internals/plugins/jsxItems/index.js +16 -0
  237. package/internals/plugins/jsxItems/itemPlugin.d.ts +4 -0
  238. package/internals/plugins/{useTreeViewJSXItems → jsxItems}/itemPlugin.js +35 -20
  239. package/internals/plugins/keyboardNavigation/TreeViewKeyboardNavigationPlugin.d.ts +28 -0
  240. package/internals/plugins/keyboardNavigation/TreeViewKeyboardNavigationPlugin.js +313 -0
  241. package/internals/plugins/keyboardNavigation/index.d.ts +1 -0
  242. package/internals/plugins/keyboardNavigation/index.js +16 -0
  243. package/internals/plugins/labelEditing/TreeViewLabelEditingPlugin.d.ts +22 -0
  244. package/internals/plugins/labelEditing/TreeViewLabelEditingPlugin.js +58 -0
  245. package/internals/plugins/labelEditing/index.d.ts +2 -0
  246. package/internals/plugins/labelEditing/index.js +27 -0
  247. package/{esm/internals/plugins/useTreeViewLabel → internals/plugins/labelEditing}/itemPlugin.d.ts +5 -4
  248. package/internals/plugins/{useTreeViewLabel → labelEditing}/itemPlugin.js +6 -6
  249. package/internals/plugins/labelEditing/selectors.d.ts +15 -0
  250. package/internals/plugins/{useTreeViewLabel/useTreeViewLabel.selectors.js → labelEditing/selectors.js} +4 -4
  251. package/internals/plugins/lazyLoading/index.d.ts +2 -0
  252. package/internals/plugins/lazyLoading/index.js +27 -0
  253. package/internals/plugins/lazyLoading/selectors.d.ts +19 -0
  254. package/internals/plugins/{useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.js → lazyLoading/selectors.js} +11 -6
  255. package/internals/plugins/lazyLoading/types.d.ts +5 -0
  256. package/internals/plugins/selection/TreeViewSelectionPlugin.d.ts +73 -0
  257. package/internals/plugins/selection/TreeViewSelectionPlugin.js +327 -0
  258. package/internals/plugins/selection/index.d.ts +2 -0
  259. package/internals/plugins/selection/index.js +27 -0
  260. package/internals/plugins/{useTreeViewSelection → selection}/itemPlugin.d.ts +1 -1
  261. package/internals/plugins/{useTreeViewSelection → selection}/itemPlugin.js +16 -16
  262. package/internals/plugins/selection/selectors.d.ts +48 -0
  263. package/internals/plugins/{useTreeViewSelection/useTreeViewSelection.selectors.js → selection/selectors.js} +19 -9
  264. package/internals/utils/tree.d.ts +8 -10
  265. package/internals/utils/tree.js +33 -33
  266. package/models/items.d.ts +5 -2
  267. package/package.json +3 -3
  268. package/useTreeItem/useTreeItem.d.ts +18 -2
  269. package/useTreeItem/useTreeItem.js +19 -24
  270. package/useTreeItem/useTreeItem.types.d.ts +9 -19
  271. package/RichTreeView/RichTreeView.plugins.d.ts +0 -10
  272. package/RichTreeView/RichTreeView.plugins.js +0 -15
  273. package/SimpleTreeView/SimpleTreeView.plugins.d.ts +0 -9
  274. package/SimpleTreeView/SimpleTreeView.plugins.js +0 -15
  275. package/esm/RichTreeView/RichTreeView.plugins.d.ts +0 -10
  276. package/esm/RichTreeView/RichTreeView.plugins.js +0 -9
  277. package/esm/SimpleTreeView/SimpleTreeView.plugins.d.ts +0 -9
  278. package/esm/SimpleTreeView/SimpleTreeView.plugins.js +0 -9
  279. package/esm/internals/corePlugins/corePlugins.d.ts +0 -9
  280. package/esm/internals/corePlugins/corePlugins.js +0 -8
  281. package/esm/internals/corePlugins/index.d.ts +0 -2
  282. package/esm/internals/corePlugins/index.js +0 -1
  283. package/esm/internals/corePlugins/useTreeViewId/index.d.ts +0 -3
  284. package/esm/internals/corePlugins/useTreeViewId/index.js +0 -2
  285. package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.d.ts +0 -3
  286. package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.js +0 -38
  287. package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.d.ts +0 -10
  288. package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +0 -9
  289. package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.types.d.ts +0 -20
  290. package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.utils.d.ts +0 -21
  291. package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.utils.js +0 -26
  292. package/esm/internals/corePlugins/useTreeViewInstanceEvents/index.d.ts +0 -2
  293. package/esm/internals/corePlugins/useTreeViewInstanceEvents/index.js +0 -1
  294. package/esm/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.d.ts +0 -3
  295. package/esm/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +0 -31
  296. package/esm/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.d.ts +0 -22
  297. package/esm/internals/corePlugins/useTreeViewOptionalPlugins/index.d.ts +0 -2
  298. package/esm/internals/corePlugins/useTreeViewOptionalPlugins/index.js +0 -1
  299. package/esm/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.d.ts +0 -3
  300. package/esm/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.js +0 -12
  301. package/esm/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.types.d.ts +0 -8
  302. package/esm/internals/hooks/useInstanceEventHandler.d.ts +0 -15
  303. package/esm/internals/hooks/useInstanceEventHandler.js +0 -79
  304. package/esm/internals/models/helpers.d.ts +0 -7
  305. package/esm/internals/models/plugin.d.ts +0 -166
  306. package/esm/internals/models/plugin.js +0 -1
  307. package/esm/internals/plugins/useTreeViewExpansion/index.d.ts +0 -3
  308. package/esm/internals/plugins/useTreeViewExpansion/index.js +0 -2
  309. package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.d.ts +0 -3
  310. package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +0 -149
  311. package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +0 -28
  312. package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +0 -112
  313. package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +0 -1
  314. package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.d.ts +0 -6
  315. package/esm/internals/plugins/useTreeViewFocus/index.d.ts +0 -3
  316. package/esm/internals/plugins/useTreeViewFocus/index.js +0 -2
  317. package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.d.ts +0 -3
  318. package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +0 -113
  319. package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.d.ts +0 -22
  320. package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +0 -45
  321. package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +0 -1
  322. package/esm/internals/plugins/useTreeViewItems/index.d.ts +0 -4
  323. package/esm/internals/plugins/useTreeViewItems/index.js +0 -3
  324. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.d.ts +0 -3
  325. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.js +0 -218
  326. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +0 -56
  327. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +0 -60
  328. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +0 -197
  329. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.types.js +0 -1
  330. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.utils.d.ts +0 -49
  331. package/esm/internals/plugins/useTreeViewJSXItems/index.d.ts +0 -2
  332. package/esm/internals/plugins/useTreeViewJSXItems/index.js +0 -1
  333. package/esm/internals/plugins/useTreeViewJSXItems/itemPlugin.d.ts +0 -2
  334. package/esm/internals/plugins/useTreeViewJSXItems/itemPlugin.js +0 -74
  335. package/esm/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.d.ts +0 -3
  336. package/esm/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +0 -104
  337. package/esm/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.types.js +0 -1
  338. package/esm/internals/plugins/useTreeViewKeyboardNavigation/index.d.ts +0 -2
  339. package/esm/internals/plugins/useTreeViewKeyboardNavigation/index.js +0 -1
  340. package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.d.ts +0 -3
  341. package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +0 -305
  342. package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +0 -32
  343. package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +0 -1
  344. package/esm/internals/plugins/useTreeViewLabel/index.d.ts +0 -3
  345. package/esm/internals/plugins/useTreeViewLabel/index.js +0 -2
  346. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.d.ts +0 -3
  347. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +0 -70
  348. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +0 -16
  349. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +0 -50
  350. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.js +0 -1
  351. package/esm/internals/plugins/useTreeViewLazyLoading/index.d.ts +0 -2
  352. package/esm/internals/plugins/useTreeViewLazyLoading/index.js +0 -1
  353. package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +0 -24
  354. package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.js +0 -20
  355. package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +0 -100
  356. package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.js +0 -1
  357. package/esm/internals/plugins/useTreeViewSelection/index.d.ts +0 -3
  358. package/esm/internals/plugins/useTreeViewSelection/index.js +0 -2
  359. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.d.ts +0 -3
  360. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +0 -230
  361. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +0 -40
  362. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +0 -132
  363. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +0 -1
  364. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +0 -31
  365. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +0 -107
  366. package/esm/internals/useTreeView/index.d.ts +0 -1
  367. package/esm/internals/useTreeView/index.js +0 -1
  368. package/esm/internals/useTreeView/useExtractPluginParamsFromProps.d.ts +0 -19
  369. package/esm/internals/useTreeView/useExtractPluginParamsFromProps.js +0 -51
  370. package/esm/internals/useTreeView/useTreeView.d.ts +0 -18
  371. package/esm/internals/useTreeView/useTreeView.js +0 -102
  372. package/esm/internals/useTreeView/useTreeView.types.d.ts +0 -20
  373. package/esm/internals/useTreeView/useTreeView.types.js +0 -1
  374. package/esm/internals/useTreeView/useTreeViewBuildContext.d.ts +0 -13
  375. package/esm/internals/utils/cleanupTracking/CleanupTracking.d.ts +0 -9
  376. package/esm/internals/utils/cleanupTracking/CleanupTracking.js +0 -1
  377. package/esm/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.d.ts +0 -7
  378. package/esm/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +0 -14
  379. package/esm/internals/utils/cleanupTracking/TimerBasedCleanupTracking.d.ts +0 -9
  380. package/esm/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +0 -38
  381. package/esm/internals/utils/plugins.d.ts +0 -2
  382. package/esm/internals/utils/plugins.js +0 -4
  383. package/esm/internals/utils/publishTreeViewEvent.d.ts +0 -5
  384. package/esm/internals/utils/publishTreeViewEvent.js +0 -3
  385. package/internals/corePlugins/corePlugins.d.ts +0 -9
  386. package/internals/corePlugins/corePlugins.js +0 -14
  387. package/internals/corePlugins/index.d.ts +0 -2
  388. package/internals/corePlugins/index.js +0 -12
  389. package/internals/corePlugins/useTreeViewId/index.d.ts +0 -3
  390. package/internals/corePlugins/useTreeViewId/index.js +0 -19
  391. package/internals/corePlugins/useTreeViewId/useTreeViewId.d.ts +0 -3
  392. package/internals/corePlugins/useTreeViewId/useTreeViewId.js +0 -46
  393. package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.d.ts +0 -10
  394. package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +0 -15
  395. package/internals/corePlugins/useTreeViewId/useTreeViewId.types.d.ts +0 -20
  396. package/internals/corePlugins/useTreeViewId/useTreeViewId.utils.d.ts +0 -21
  397. package/internals/corePlugins/useTreeViewId/useTreeViewId.utils.js +0 -34
  398. package/internals/corePlugins/useTreeViewInstanceEvents/index.d.ts +0 -2
  399. package/internals/corePlugins/useTreeViewInstanceEvents/index.js +0 -12
  400. package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.d.ts +0 -3
  401. package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +0 -38
  402. package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.d.ts +0 -22
  403. package/internals/corePlugins/useTreeViewOptionalPlugins/index.d.ts +0 -2
  404. package/internals/corePlugins/useTreeViewOptionalPlugins/index.js +0 -12
  405. package/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.d.ts +0 -3
  406. package/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.js +0 -19
  407. package/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.types.d.ts +0 -8
  408. package/internals/hooks/useInstanceEventHandler.d.ts +0 -15
  409. package/internals/hooks/useInstanceEventHandler.js +0 -87
  410. package/internals/models/helpers.d.ts +0 -7
  411. package/internals/models/plugin.d.ts +0 -166
  412. package/internals/models/plugin.js +0 -5
  413. package/internals/plugins/useTreeViewExpansion/index.d.ts +0 -3
  414. package/internals/plugins/useTreeViewExpansion/index.js +0 -19
  415. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.d.ts +0 -3
  416. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +0 -157
  417. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +0 -28
  418. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +0 -112
  419. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +0 -5
  420. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.d.ts +0 -6
  421. package/internals/plugins/useTreeViewFocus/index.d.ts +0 -3
  422. package/internals/plugins/useTreeViewFocus/index.js +0 -19
  423. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.d.ts +0 -3
  424. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +0 -121
  425. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.d.ts +0 -22
  426. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +0 -45
  427. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +0 -5
  428. package/internals/plugins/useTreeViewItems/index.d.ts +0 -4
  429. package/internals/plugins/useTreeViewItems/index.js +0 -32
  430. package/internals/plugins/useTreeViewItems/useTreeViewItems.d.ts +0 -3
  431. package/internals/plugins/useTreeViewItems/useTreeViewItems.js +0 -226
  432. package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +0 -56
  433. package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +0 -197
  434. package/internals/plugins/useTreeViewItems/useTreeViewItems.types.js +0 -5
  435. package/internals/plugins/useTreeViewItems/useTreeViewItems.utils.d.ts +0 -49
  436. package/internals/plugins/useTreeViewJSXItems/index.d.ts +0 -2
  437. package/internals/plugins/useTreeViewJSXItems/index.js +0 -12
  438. package/internals/plugins/useTreeViewJSXItems/itemPlugin.d.ts +0 -2
  439. package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.d.ts +0 -3
  440. package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +0 -112
  441. package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.types.js +0 -5
  442. package/internals/plugins/useTreeViewKeyboardNavigation/index.d.ts +0 -2
  443. package/internals/plugins/useTreeViewKeyboardNavigation/index.js +0 -12
  444. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.d.ts +0 -3
  445. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +0 -312
  446. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +0 -32
  447. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +0 -5
  448. package/internals/plugins/useTreeViewLabel/index.d.ts +0 -3
  449. package/internals/plugins/useTreeViewLabel/index.js +0 -19
  450. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.d.ts +0 -3
  451. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +0 -78
  452. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +0 -16
  453. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +0 -50
  454. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.js +0 -5
  455. package/internals/plugins/useTreeViewLazyLoading/index.d.ts +0 -2
  456. package/internals/plugins/useTreeViewLazyLoading/index.js +0 -12
  457. package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +0 -24
  458. package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +0 -100
  459. package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.js +0 -5
  460. package/internals/plugins/useTreeViewSelection/index.d.ts +0 -3
  461. package/internals/plugins/useTreeViewSelection/index.js +0 -19
  462. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.d.ts +0 -3
  463. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +0 -239
  464. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +0 -40
  465. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +0 -132
  466. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +0 -5
  467. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +0 -31
  468. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +0 -116
  469. package/internals/useTreeView/index.d.ts +0 -1
  470. package/internals/useTreeView/index.js +0 -12
  471. package/internals/useTreeView/useExtractPluginParamsFromProps.d.ts +0 -19
  472. package/internals/useTreeView/useExtractPluginParamsFromProps.js +0 -60
  473. package/internals/useTreeView/useTreeView.d.ts +0 -18
  474. package/internals/useTreeView/useTreeView.js +0 -112
  475. package/internals/useTreeView/useTreeView.types.d.ts +0 -20
  476. package/internals/useTreeView/useTreeView.types.js +0 -5
  477. package/internals/useTreeView/useTreeViewBuildContext.d.ts +0 -13
  478. package/internals/utils/cleanupTracking/CleanupTracking.d.ts +0 -9
  479. package/internals/utils/cleanupTracking/CleanupTracking.js +0 -5
  480. package/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.d.ts +0 -7
  481. package/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +0 -21
  482. package/internals/utils/cleanupTracking/TimerBasedCleanupTracking.d.ts +0 -9
  483. package/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +0 -45
  484. package/internals/utils/plugins.d.ts +0 -2
  485. package/internals/utils/plugins.js +0 -11
  486. package/internals/utils/publishTreeViewEvent.d.ts +0 -5
  487. package/internals/utils/publishTreeViewEvent.js +0 -10
  488. /package/esm/internals/{corePlugins/useTreeViewId/useTreeViewId.types.js → MinimalTreeViewStore/MinimalTreeViewStore.types.js} +0 -0
  489. /package/esm/internals/{corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js → RichTreeViewStore/RichTreeViewStore.types.js} +0 -0
  490. /package/esm/internals/{corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.types.js → SimpleTreeViewStore/SimpleTreeViewStore.types.js} +0 -0
  491. /package/esm/internals/plugins/{useTreeViewExpansion/useTreeViewExpansion.utils.js → expansion/utils.js} +0 -0
  492. /package/esm/internals/{models/helpers.js → plugins/lazyLoading/types.js} +0 -0
  493. /package/internals/{corePlugins/useTreeViewId/useTreeViewId.types.js → MinimalTreeViewStore/MinimalTreeViewStore.types.js} +0 -0
  494. /package/internals/{corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js → RichTreeViewStore/RichTreeViewStore.types.js} +0 -0
  495. /package/internals/{corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.types.js → SimpleTreeViewStore/SimpleTreeViewStore.types.js} +0 -0
  496. /package/internals/plugins/{useTreeViewExpansion/useTreeViewExpansion.utils.js → expansion/utils.js} +0 -0
  497. /package/internals/{models/helpers.js → plugins/lazyLoading/types.js} +0 -0
@@ -1,10 +1,10 @@
1
1
  import { createSelector } from '@mui/x-internals/store';
2
- import { itemsSelectors } from "../useTreeViewItems/useTreeViewItems.selectors.js";
2
+ import { itemsSelectors } from "../items/selectors.js";
3
3
  export const labelSelectors = {
4
4
  /**
5
5
  * Checks whether an item is editable.
6
6
  */
7
- isItemEditable: createSelector(state => state.label?.isItemEditable, itemsSelectors.itemModel, (isItemEditable, itemModel, _itemId) => {
7
+ isItemEditable: createSelector(state => state.isItemEditable, itemsSelectors.itemModel, (isItemEditable, itemModel, _itemId) => {
8
8
  if (!itemModel || isItemEditable == null) {
9
9
  return false;
10
10
  }
@@ -16,9 +16,9 @@ export const labelSelectors = {
16
16
  /**
17
17
  * Checks whether an item is being edited.
18
18
  */
19
- isItemBeingEdited: createSelector((state, itemId) => itemId == null ? false : state.label?.editedItemId === itemId),
19
+ isItemBeingEdited: createSelector((state, itemId) => itemId == null ? false : state.editedItemId === itemId),
20
20
  /**
21
21
  * Checks whether any item is being edited.
22
22
  */
23
- isAnyItemBeingEdited: createSelector(state => !!state.label?.editedItemId)
23
+ isAnyItemBeingEdited: createSelector(state => !!state.editedItemId)
24
24
  };
@@ -0,0 +1,2 @@
1
+ export * from "./types.js";
2
+ export * from "./selectors.js";
@@ -0,0 +1,2 @@
1
+ export * from "./types.js";
2
+ export * from "./selectors.js";
@@ -0,0 +1,19 @@
1
+ import { RichTreeViewState } from "../../RichTreeViewStore/index.js";
2
+ export declare const lazyLoadingSelectors: {
3
+ /**
4
+ * Checks if the lazy loaded state is empty.
5
+ */
6
+ isEmpty: (state: RichTreeViewState<any, any>) => boolean;
7
+ /**
8
+ * Checks whether an item is loading.
9
+ */
10
+ isItemLoading: (state: RichTreeViewState<any, any>, itemId: string | null) => boolean;
11
+ /**
12
+ * Checks whether an item has errors.
13
+ */
14
+ itemHasError: (state: RichTreeViewState<any, any>, itemId: string | null) => boolean;
15
+ /**
16
+ * Get an item error.
17
+ */
18
+ itemError: (state: RichTreeViewState<any, any>, itemId: string | null) => Error | null | undefined;
19
+ };
@@ -0,0 +1,25 @@
1
+ import { createSelector } from '@mui/x-internals/store';
2
+ import { TREE_VIEW_ROOT_PARENT_ID } from "../items/index.js";
3
+ export const lazyLoadingSelectors = {
4
+ /**
5
+ * Checks if the lazy loaded state is empty.
6
+ */
7
+ isEmpty: createSelector(state => {
8
+ if (state.lazyLoadedItems == null) {
9
+ return true;
10
+ }
11
+ return Object.keys(state.lazyLoadedItems.loading).length === 0 && Object.keys(state.lazyLoadedItems.errors).length === 0;
12
+ }),
13
+ /**
14
+ * Checks whether an item is loading.
15
+ */
16
+ isItemLoading: createSelector((state, itemId) => state.lazyLoadedItems?.loading[itemId ?? TREE_VIEW_ROOT_PARENT_ID] ?? false),
17
+ /**
18
+ * Checks whether an item has errors.
19
+ */
20
+ itemHasError: createSelector((state, itemId) => !!state.lazyLoadedItems?.errors[itemId ?? TREE_VIEW_ROOT_PARENT_ID]),
21
+ /**
22
+ * Get an item error.
23
+ */
24
+ itemError: createSelector((state, itemId) => state.lazyLoadedItems?.errors[itemId ?? TREE_VIEW_ROOT_PARENT_ID])
25
+ };
@@ -0,0 +1,5 @@
1
+ import { TreeViewItemId } from "../../../models/index.js";
2
+ export interface RichTreeViewLazyLoadedItemsStatus {
3
+ loading: Record<TreeViewItemId, boolean>;
4
+ errors: Record<TreeViewItemId, Error | null>;
5
+ }
@@ -0,0 +1,73 @@
1
+ export declare class TreeViewSelectionPlugin<Multiple extends boolean | undefined> {
2
+ private store;
3
+ private lastSelectedItem;
4
+ private lastSelectedRange;
5
+ constructor(store: any);
6
+ private setSelectedItems;
7
+ private selectRange;
8
+ buildPublicAPI: () => {
9
+ setItemSelection: ({
10
+ itemId,
11
+ event,
12
+ keepExistingSelection,
13
+ shouldBeSelected
14
+ }: {
15
+ itemId: string;
16
+ event?: React.SyntheticEvent | null;
17
+ shouldBeSelected?: boolean;
18
+ keepExistingSelection?: boolean;
19
+ }) => void;
20
+ };
21
+ /**
22
+ * Select or deselect an item.
23
+ * @param {object} parameters The parameters of the method.
24
+ * @param {TreeViewItemId} parameters.itemId The id of the item to select or deselect.
25
+ * @param {React.SyntheticEvent} parameters.event The DOM event that triggered the change.
26
+ * @param {boolean} parameters.keepExistingSelection If `true`, the other already selected items will remain selected, otherwise, they will be deselected. This parameter is only relevant when `multiSelect` is `true`
27
+ * @param {boolean | undefined} parameters.shouldBeSelected If `true` the item will be selected. If `false` the item will be deselected. If not defined, the item's selection status will be toggled.
28
+ */
29
+ setItemSelection: ({
30
+ itemId,
31
+ event,
32
+ keepExistingSelection,
33
+ shouldBeSelected
34
+ }: {
35
+ itemId: string;
36
+ event?: React.SyntheticEvent | null;
37
+ shouldBeSelected?: boolean;
38
+ keepExistingSelection?: boolean;
39
+ }) => void;
40
+ /**
41
+ * Select all the navigable items in the tree.
42
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
43
+ */
44
+ selectAllNavigableItems: (event: React.SyntheticEvent) => void;
45
+ /**
46
+ * Expand the current selection range up to the given item.
47
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
48
+ * @param {TreeViewItemId} itemId The id of the item to expand the selection to.
49
+ */
50
+ expandSelectionRange: (event: React.SyntheticEvent, itemId: string) => void;
51
+ /**
52
+ * Expand the current selection range from the first navigable item to the given item.
53
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
54
+ * @param {TreeViewItemId} itemId The id of the item up to which the selection range should be expanded.
55
+ */
56
+ selectRangeFromStartToItem: (event: React.SyntheticEvent, itemId: string) => void;
57
+ /**
58
+ * Expand the current selection range from the given item to the last navigable item.
59
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
60
+ * @param {TreeViewItemId} itemId The id of the item from which the selection range should be expanded.
61
+ */
62
+ selectRangeFromItemToEnd: (event: React.SyntheticEvent, itemId: string) => void;
63
+ /**
64
+ * Update the selection when navigating with ArrowUp / ArrowDown keys.
65
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
66
+ * @param {TreeViewItemId} currentItemId The id of the active item before the keyboard navigation.
67
+ * @param {TreeViewItemId} nextItemId The id of the active item after the keyboard navigation.
68
+ */
69
+ selectItemFromArrowNavigation: (event: React.SyntheticEvent, currentItem: string, nextItem: string) => void;
70
+ }
71
+ export declare function getLookupFromArray(array: string[]): {
72
+ [itemId: string]: true;
73
+ };
@@ -0,0 +1,319 @@
1
+ import { EMPTY_OBJECT } from '@base-ui/utils/empty';
2
+ import { itemsSelectors } from "../items/index.js";
3
+ import { selectionSelectors } from "./selectors.js";
4
+ import { useSelectionItemPlugin } from "./itemPlugin.js";
5
+ import { findOrderInTremauxTree, getAllNavigableItems, getFirstNavigableItem, getLastNavigableItem, getNonDisabledItemsInRange } from "../../utils/tree.js";
6
+ export class TreeViewSelectionPlugin {
7
+ lastSelectedItem = null;
8
+ lastSelectedRange = {};
9
+
10
+ // We can't type `store`, otherwise we get the following TS error:
11
+ // 'selection' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.
12
+ constructor(store) {
13
+ this.store = store;
14
+ store.itemPluginManager.register(useSelectionItemPlugin, null);
15
+ }
16
+ setSelectedItems = (event, newModel, additionalItemsToPropagate) => {
17
+ const {
18
+ selectionPropagation = EMPTY_OBJECT,
19
+ selectedItems,
20
+ onItemSelectionToggle,
21
+ onSelectedItemsChange
22
+ } = this.store.parameters;
23
+ const oldModel = selectionSelectors.selectedItemsRaw(this.store.state);
24
+ let cleanModel;
25
+ const isMultiSelectEnabled = selectionSelectors.isMultiSelectEnabled(this.store.state);
26
+ if (isMultiSelectEnabled && (selectionPropagation.descendants || selectionPropagation.parents)) {
27
+ cleanModel = propagateSelection({
28
+ store: this.store,
29
+ selectionPropagation,
30
+ newModel: newModel,
31
+ oldModel: oldModel,
32
+ additionalItemsToPropagate
33
+ });
34
+ } else {
35
+ cleanModel = newModel;
36
+ }
37
+ if (onItemSelectionToggle) {
38
+ if (isMultiSelectEnabled) {
39
+ const changes = getAddedAndRemovedItems({
40
+ store: this.store,
41
+ newModel: cleanModel,
42
+ oldModel: oldModel
43
+ });
44
+ if (onItemSelectionToggle) {
45
+ changes.added.forEach(itemId => {
46
+ onItemSelectionToggle(event, itemId, true);
47
+ });
48
+ changes.removed.forEach(itemId => {
49
+ onItemSelectionToggle(event, itemId, false);
50
+ });
51
+ }
52
+ } else if (cleanModel !== oldModel) {
53
+ if (oldModel != null) {
54
+ onItemSelectionToggle(event, oldModel, false);
55
+ }
56
+ if (cleanModel != null) {
57
+ onItemSelectionToggle(event, cleanModel, true);
58
+ }
59
+ }
60
+ }
61
+ if (selectedItems === undefined) {
62
+ this.store.set('selectedItems', cleanModel);
63
+ }
64
+ onSelectedItemsChange?.(event, cleanModel);
65
+ };
66
+ selectRange = (event, [start, end]) => {
67
+ const isMultiSelectEnabled = selectionSelectors.isMultiSelectEnabled(this.store.state);
68
+ if (!isMultiSelectEnabled) {
69
+ return;
70
+ }
71
+ let newSelectedItems = selectionSelectors.selectedItems(this.store.state).slice();
72
+
73
+ // If the last selection was a range selection,
74
+ // remove the items that were part of the last range from the model
75
+ if (Object.keys(this.lastSelectedRange).length > 0) {
76
+ newSelectedItems = newSelectedItems.filter(id => !this.lastSelectedRange[id]);
77
+ }
78
+
79
+ // Add to the model the items that are part of the new range and not already part of the model.
80
+ const selectedItemsLookup = getLookupFromArray(newSelectedItems);
81
+ const range = getNonDisabledItemsInRange(this.store.state, start, end).filter(id => selectionSelectors.isItemSelectable(this.store.state, id));
82
+ const itemsToAddToModel = range.filter(id => !selectedItemsLookup[id]);
83
+ newSelectedItems = newSelectedItems.concat(itemsToAddToModel);
84
+ this.setSelectedItems(event, newSelectedItems);
85
+ this.lastSelectedRange = getLookupFromArray(range);
86
+ };
87
+ buildPublicAPI = () => {
88
+ return {
89
+ setItemSelection: this.setItemSelection
90
+ };
91
+ };
92
+
93
+ /**
94
+ * Select or deselect an item.
95
+ * @param {object} parameters The parameters of the method.
96
+ * @param {TreeViewItemId} parameters.itemId The id of the item to select or deselect.
97
+ * @param {React.SyntheticEvent} parameters.event The DOM event that triggered the change.
98
+ * @param {boolean} parameters.keepExistingSelection If `true`, the other already selected items will remain selected, otherwise, they will be deselected. This parameter is only relevant when `multiSelect` is `true`
99
+ * @param {boolean | undefined} parameters.shouldBeSelected If `true` the item will be selected. If `false` the item will be deselected. If not defined, the item's selection status will be toggled.
100
+ */
101
+ setItemSelection = ({
102
+ itemId,
103
+ event = null,
104
+ keepExistingSelection = false,
105
+ shouldBeSelected
106
+ }) => {
107
+ if (!selectionSelectors.enabled(this.store.state)) {
108
+ return;
109
+ }
110
+ let newSelected;
111
+ const isMultiSelectEnabled = selectionSelectors.isMultiSelectEnabled(this.store.state);
112
+ if (keepExistingSelection) {
113
+ const oldSelected = selectionSelectors.selectedItems(this.store.state);
114
+ const isSelectedBefore = selectionSelectors.isItemSelected(this.store.state, itemId);
115
+ if (isSelectedBefore && (shouldBeSelected === false || shouldBeSelected == null)) {
116
+ newSelected = oldSelected.filter(id => id !== itemId);
117
+ } else if (!isSelectedBefore && (shouldBeSelected === true || shouldBeSelected == null)) {
118
+ newSelected = [itemId].concat(oldSelected);
119
+ } else {
120
+ newSelected = oldSelected;
121
+ }
122
+ } else {
123
+ // eslint-disable-next-line no-lonely-if
124
+ if (shouldBeSelected === false || shouldBeSelected == null && selectionSelectors.isItemSelected(this.store.state, itemId)) {
125
+ newSelected = isMultiSelectEnabled ? [] : null;
126
+ } else {
127
+ newSelected = isMultiSelectEnabled ? [itemId] : itemId;
128
+ }
129
+ }
130
+ this.setSelectedItems(event, newSelected,
131
+ // If shouldBeSelected === selectionSelectors.isItemSelected(store, itemId), we still want to propagate the select.
132
+ // This is useful when the element is in an indeterminate state.
133
+ [itemId]);
134
+ this.lastSelectedItem = itemId;
135
+ this.lastSelectedRange = {};
136
+ };
137
+
138
+ /**
139
+ * Select all the navigable items in the tree.
140
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
141
+ */
142
+ selectAllNavigableItems = event => {
143
+ const isMultiSelectEnabled = selectionSelectors.isMultiSelectEnabled(this.store.state);
144
+ if (!isMultiSelectEnabled) {
145
+ return;
146
+ }
147
+ const navigableItems = getAllNavigableItems(this.store.state);
148
+ this.setSelectedItems(event, navigableItems);
149
+ this.lastSelectedRange = getLookupFromArray(navigableItems);
150
+ };
151
+
152
+ /**
153
+ * Expand the current selection range up to the given item.
154
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
155
+ * @param {TreeViewItemId} itemId The id of the item to expand the selection to.
156
+ */
157
+ expandSelectionRange = (event, itemId) => {
158
+ if (this.lastSelectedItem != null) {
159
+ const [start, end] = findOrderInTremauxTree(this.store.state, itemId, this.lastSelectedItem);
160
+ this.selectRange(event, [start, end]);
161
+ }
162
+ };
163
+
164
+ /**
165
+ * Expand the current selection range from the first navigable item to the given item.
166
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
167
+ * @param {TreeViewItemId} itemId The id of the item up to which the selection range should be expanded.
168
+ */
169
+ selectRangeFromStartToItem = (event, itemId) => {
170
+ this.selectRange(event, [getFirstNavigableItem(this.store.state), itemId]);
171
+ };
172
+
173
+ /**
174
+ * Expand the current selection range from the given item to the last navigable item.
175
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
176
+ * @param {TreeViewItemId} itemId The id of the item from which the selection range should be expanded.
177
+ */
178
+ selectRangeFromItemToEnd = (event, itemId) => {
179
+ this.selectRange(event, [itemId, getLastNavigableItem(this.store.state)]);
180
+ };
181
+
182
+ /**
183
+ * Update the selection when navigating with ArrowUp / ArrowDown keys.
184
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
185
+ * @param {TreeViewItemId} currentItemId The id of the active item before the keyboard navigation.
186
+ * @param {TreeViewItemId} nextItemId The id of the active item after the keyboard navigation.
187
+ */
188
+ selectItemFromArrowNavigation = (event, currentItem, nextItem) => {
189
+ const isMultiSelectEnabled = selectionSelectors.isMultiSelectEnabled(this.store.state);
190
+ if (!isMultiSelectEnabled) {
191
+ return;
192
+ }
193
+ let newSelectedItems = selectionSelectors.selectedItems(this.store.state).slice();
194
+ if (Object.keys(this.lastSelectedRange).length === 0) {
195
+ newSelectedItems.push(nextItem);
196
+ this.lastSelectedRange = {
197
+ [currentItem]: true,
198
+ [nextItem]: true
199
+ };
200
+ } else {
201
+ if (!this.lastSelectedRange[currentItem]) {
202
+ this.lastSelectedRange = {};
203
+ }
204
+ if (this.lastSelectedRange[nextItem]) {
205
+ newSelectedItems = newSelectedItems.filter(id => id !== currentItem);
206
+ delete this.lastSelectedRange[currentItem];
207
+ } else {
208
+ newSelectedItems.push(nextItem);
209
+ this.lastSelectedRange[nextItem] = true;
210
+ }
211
+ }
212
+ this.setSelectedItems(event, newSelectedItems);
213
+ };
214
+ }
215
+ function propagateSelection({
216
+ store,
217
+ selectionPropagation,
218
+ newModel,
219
+ oldModel,
220
+ additionalItemsToPropagate
221
+ }) {
222
+ if (!selectionPropagation.descendants && !selectionPropagation.parents) {
223
+ return newModel;
224
+ }
225
+ let shouldRegenerateModel = false;
226
+ const newModelLookup = getLookupFromArray(newModel);
227
+ const changes = getAddedAndRemovedItems({
228
+ store,
229
+ newModel,
230
+ oldModel
231
+ });
232
+ additionalItemsToPropagate?.forEach(itemId => {
233
+ if (newModelLookup[itemId]) {
234
+ if (!changes.added.includes(itemId)) {
235
+ changes.added.push(itemId);
236
+ }
237
+ } else if (!changes.removed.includes(itemId)) {
238
+ changes.removed.push(itemId);
239
+ }
240
+ });
241
+ changes.added.forEach(addedItemId => {
242
+ if (selectionPropagation.descendants) {
243
+ const selectDescendants = itemId => {
244
+ if (itemId !== addedItemId) {
245
+ shouldRegenerateModel = true;
246
+ newModelLookup[itemId] = true;
247
+ }
248
+ itemsSelectors.itemOrderedChildrenIds(store.state, itemId).forEach(selectDescendants);
249
+ };
250
+ selectDescendants(addedItemId);
251
+ }
252
+ if (selectionPropagation.parents) {
253
+ const checkAllDescendantsSelected = itemId => {
254
+ if (!newModelLookup[itemId]) {
255
+ return false;
256
+ }
257
+ const children = itemsSelectors.itemOrderedChildrenIds(store.state, itemId);
258
+ return children.every(checkAllDescendantsSelected);
259
+ };
260
+ const selectParents = itemId => {
261
+ const parentId = itemsSelectors.itemParentId(store.state, itemId);
262
+ if (parentId == null) {
263
+ return;
264
+ }
265
+ const siblings = itemsSelectors.itemOrderedChildrenIds(store.state, parentId);
266
+ if (siblings.every(checkAllDescendantsSelected)) {
267
+ shouldRegenerateModel = true;
268
+ newModelLookup[parentId] = true;
269
+ selectParents(parentId);
270
+ }
271
+ };
272
+ selectParents(addedItemId);
273
+ }
274
+ });
275
+ changes.removed.forEach(removedItemId => {
276
+ if (selectionPropagation.parents) {
277
+ let parentId = itemsSelectors.itemParentId(store.state, removedItemId);
278
+ while (parentId != null) {
279
+ if (newModelLookup[parentId]) {
280
+ shouldRegenerateModel = true;
281
+ delete newModelLookup[parentId];
282
+ }
283
+ parentId = itemsSelectors.itemParentId(store.state, parentId);
284
+ }
285
+ }
286
+ if (selectionPropagation.descendants) {
287
+ const deSelectDescendants = itemId => {
288
+ if (itemId !== removedItemId) {
289
+ shouldRegenerateModel = true;
290
+ delete newModelLookup[itemId];
291
+ }
292
+ itemsSelectors.itemOrderedChildrenIds(store.state, itemId).forEach(deSelectDescendants);
293
+ };
294
+ deSelectDescendants(removedItemId);
295
+ }
296
+ });
297
+ return shouldRegenerateModel ? Object.keys(newModelLookup) : newModel;
298
+ }
299
+ function getAddedAndRemovedItems({
300
+ store,
301
+ oldModel,
302
+ newModel
303
+ }) {
304
+ const newModelMap = new Map();
305
+ newModel.forEach(id => {
306
+ newModelMap.set(id, true);
307
+ });
308
+ return {
309
+ added: newModel.filter(itemId => !selectionSelectors.isItemSelected(store.state, itemId)),
310
+ removed: oldModel.filter(itemId => !newModelMap.has(itemId))
311
+ };
312
+ }
313
+ export function getLookupFromArray(array) {
314
+ const lookup = {};
315
+ array.forEach(itemId => {
316
+ lookup[itemId] = true;
317
+ });
318
+ return lookup;
319
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./TreeViewSelectionPlugin.js";
2
+ export * from "./selectors.js";
@@ -0,0 +1,2 @@
1
+ export * from "./TreeViewSelectionPlugin.js";
2
+ export * from "./selectors.js";
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { TreeViewCancellableEventHandler } from "../../../models/index.js";
3
3
  import { TreeViewItemPlugin } from "../../models/index.js";
4
- export declare const useTreeViewSelectionItemPlugin: TreeViewItemPlugin;
4
+ export declare const useSelectionItemPlugin: TreeViewItemPlugin;
5
5
  interface UseTreeItemRootSlotPropsFromSelection {
6
6
  'aria-checked': React.AriaAttributes['aria-checked'];
7
7
  }
@@ -1,7 +1,7 @@
1
1
  import { createSelector, useStore } from '@mui/x-internals/store';
2
2
  import { useTreeViewContext } from "../../TreeViewProvider/index.js";
3
- import { itemsSelectors } from "../useTreeViewItems/useTreeViewItems.selectors.js";
4
- import { selectionSelectors } from "./useTreeViewSelection.selectors.js";
3
+ import { itemsSelectors } from "../items/selectors.js";
4
+ import { selectionSelectors } from "./selectors.js";
5
5
  const selectorCheckboxSelectionStatus = createSelector((state, itemId) => {
6
6
  if (selectionSelectors.isItemSelected(state, itemId)) {
7
7
  return 'checked';
@@ -34,7 +34,7 @@ const selectorCheckboxSelectionStatus = createSelector((state, itemId) => {
34
34
  }
35
35
  return 'empty';
36
36
  });
37
- export const useTreeViewSelectionItemPlugin = ({
37
+ export const useSelectionItemPlugin = ({
38
38
  props
39
39
  }) => {
40
40
  const {
@@ -44,9 +44,9 @@ export const useTreeViewSelectionItemPlugin = ({
44
44
  store
45
45
  } = useTreeViewContext();
46
46
  const isCheckboxSelectionEnabled = useStore(store, selectionSelectors.isCheckboxSelectionEnabled);
47
- const isItemSelectionEnabled = useStore(store, selectionSelectors.canItemBeSelected, itemId);
47
+ const isFeatureEnabledForItem = useStore(store, selectionSelectors.isFeatureEnabledForItem, itemId);
48
+ const canItemBeSelected = useStore(store, selectionSelectors.canItemBeSelected, itemId);
48
49
  const selectionStatus = useStore(store, selectorCheckboxSelectionStatus, itemId);
49
- const isSelectionEnabledForItem = useStore(store, selectionSelectors.canItemBeSelected, itemId);
50
50
  return {
51
51
  propsEnhancers: {
52
52
  root: () => {
@@ -57,7 +57,7 @@ export const useTreeViewSelectionItemPlugin = ({
57
57
  ariaChecked = true;
58
58
  } else if (selectionStatus === 'indeterminate') {
59
59
  ariaChecked = 'mixed';
60
- } else if (!isSelectionEnabledForItem) {
60
+ } else if (!canItemBeSelected) {
61
61
  // - if the tree contains nodes that are not selectable, aria-checked is not present on those nodes.
62
62
  ariaChecked = undefined;
63
63
  } else {
@@ -85,8 +85,8 @@ export const useTreeViewSelectionItemPlugin = ({
85
85
  return {
86
86
  tabIndex: -1,
87
87
  onChange: handleChange,
88
- visible: isCheckboxSelectionEnabled,
89
- disabled: !isItemSelectionEnabled,
88
+ visible: isCheckboxSelectionEnabled && isFeatureEnabledForItem,
89
+ disabled: !canItemBeSelected,
90
90
  checked: selectionStatus === 'checked',
91
91
  indeterminate: selectionStatus === 'indeterminate'
92
92
  };
@@ -0,0 +1,48 @@
1
+ import { MinimalTreeViewState } from "../../MinimalTreeViewStore/index.js";
2
+ export declare const selectionSelectors: {
3
+ /**
4
+ * Gets the selected items as provided to the component.
5
+ */
6
+ selectedItemsRaw: (state: MinimalTreeViewState<any, any>) => string | readonly string[] | readonly string[] | null;
7
+ /**
8
+ * Gets the selected items as an array.
9
+ */
10
+ selectedItems: (args_0: MinimalTreeViewState<any, any>) => any[];
11
+ /**
12
+ * Gets the selected items as a Map.
13
+ */
14
+ selectedItemsMap: (args_0: MinimalTreeViewState<any, any>) => Map<string, true>;
15
+ /**
16
+ * Checks whether selection is enabled.
17
+ */
18
+ enabled: (state: MinimalTreeViewState<any, any>) => boolean;
19
+ /**
20
+ * Checks whether multi selection is enabled.
21
+ */
22
+ isMultiSelectEnabled: (state: MinimalTreeViewState<any, any>) => boolean;
23
+ /**
24
+ * Checks whether checkbox selection is enabled.
25
+ */
26
+ isCheckboxSelectionEnabled: (state: MinimalTreeViewState<any, any>) => boolean;
27
+ /**
28
+ * Gets the selection propagation rules.
29
+ */
30
+ propagationRules: (state: MinimalTreeViewState<any, any>) => import("../../../index.js").TreeViewSelectionPropagation;
31
+ /**
32
+ * Checks whether an item is selected.
33
+ */
34
+ isItemSelected: (args_0: MinimalTreeViewState<any, any>, itemId: string) => boolean;
35
+ /**
36
+ * Checks whether the selection feature is enabled for an item.
37
+ * Returns `true` when selection is enabled on the Tree View and the item is selectable (even if the item is disabled).
38
+ */
39
+ isFeatureEnabledForItem: (args_0: MinimalTreeViewState<any, any>, _itemId: string) => boolean;
40
+ /**
41
+ * Checks whether an item can be selected (if selection is enabled, if the item is not disabled, and if the item is selectable).
42
+ */
43
+ canItemBeSelected: (args_0: MinimalTreeViewState<any, any>, _itemId: string) => boolean;
44
+ /**
45
+ * Checks whether an item is selectable based on the `isItemSelectionDisabled` prop.
46
+ */
47
+ isItemSelectable: (state: MinimalTreeViewState<any, any>, itemId: string) => boolean;
48
+ };
@@ -1,6 +1,6 @@
1
1
  import { createSelector, createSelectorMemoized } from '@mui/x-internals/store';
2
- import { itemsSelectors } from "../useTreeViewItems/useTreeViewItems.selectors.js";
3
- const selectedItemsSelector = createSelectorMemoized(state => state.selection.selectedItems, selectedItemsRaw => {
2
+ import { itemsSelectors } from "../items/selectors.js";
3
+ const selectedItemsSelector = createSelectorMemoized(state => state.selectedItems, selectedItemsRaw => {
4
4
  if (Array.isArray(selectedItemsRaw)) {
5
5
  return selectedItemsRaw;
6
6
  }
@@ -16,11 +16,12 @@ const selectedItemsMapSelector = createSelectorMemoized(selectedItemsSelector, s
16
16
  });
17
17
  return selectedItemsMap;
18
18
  });
19
+ const isItemSelectableSelector = createSelector((state, itemId) => state.itemMetaLookup[itemId]?.selectable ?? true);
19
20
  export const selectionSelectors = {
20
21
  /**
21
22
  * Gets the selected items as provided to the component.
22
23
  */
23
- selectedItemsRaw: createSelector(state => state.selection.selectedItems),
24
+ selectedItemsRaw: createSelector(state => state.selectedItems),
24
25
  /**
25
26
  * Gets the selected items as an array.
26
27
  */
@@ -32,25 +33,34 @@ export const selectionSelectors = {
32
33
  /**
33
34
  * Checks whether selection is enabled.
34
35
  */
35
- enabled: createSelector(state => state.selection.isEnabled),
36
+ enabled: createSelector(state => !state.disableSelection),
36
37
  /**
37
38
  * Checks whether multi selection is enabled.
38
39
  */
39
- isMultiSelectEnabled: createSelector(state => state.selection.isMultiSelectEnabled),
40
+ isMultiSelectEnabled: createSelector(state => state.multiSelect),
40
41
  /**
41
42
  * Checks whether checkbox selection is enabled.
42
43
  */
43
- isCheckboxSelectionEnabled: createSelector(state => state.selection.isCheckboxSelectionEnabled),
44
+ isCheckboxSelectionEnabled: createSelector(state => state.checkboxSelection),
44
45
  /**
45
46
  * Gets the selection propagation rules.
46
47
  */
47
- propagationRules: createSelector(state => state.selection.selectionPropagation),
48
+ propagationRules: createSelector(state => state.selectionPropagation),
48
49
  /**
49
50
  * Checks whether an item is selected.
50
51
  */
51
52
  isItemSelected: createSelector(selectedItemsMapSelector, (selectedItemsMap, itemId) => selectedItemsMap.has(itemId)),
52
53
  /**
53
- * Checks whether an item can be selected (if selection is enabled and if the item is not disabled).
54
+ * Checks whether the selection feature is enabled for an item.
55
+ * Returns `true` when selection is enabled on the Tree View and the item is selectable (even if the item is disabled).
54
56
  */
55
- canItemBeSelected: createSelector(itemsSelectors.isItemDisabled, state => state.selection.isEnabled, (isItemDisabled, isSelectionEnabled, _itemId) => isSelectionEnabled && !isItemDisabled)
57
+ isFeatureEnabledForItem: createSelector(isItemSelectableSelector, state => !state.disableSelection, (isItemSelectable, isSelectionEnabled, _itemId) => isSelectionEnabled && isItemSelectable),
58
+ /**
59
+ * Checks whether an item can be selected (if selection is enabled, if the item is not disabled, and if the item is selectable).
60
+ */
61
+ canItemBeSelected: createSelector(itemsSelectors.isItemDisabled, isItemSelectableSelector, state => !state.disableSelection, (isItemDisabled, isItemSelectable, isSelectionEnabled, _itemId) => isSelectionEnabled && !isItemDisabled && isItemSelectable),
62
+ /**
63
+ * Checks whether an item is selectable based on the `isItemSelectionDisabled` prop.
64
+ */
65
+ isItemSelectable: isItemSelectableSelector
56
66
  };