@fluentui/react-tree 9.0.0-beta.8 → 9.0.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 (311) hide show
  1. package/CHANGELOG.json +1608 -1
  2. package/CHANGELOG.md +430 -2
  3. package/LICENSE +1 -1
  4. package/dist/index.d.ts +404 -132
  5. package/lib/FlatTree.js +1 -0
  6. package/lib/FlatTree.js.map +1 -0
  7. package/lib/Tree.js +0 -1
  8. package/lib/Tree.js.map +1 -1
  9. package/lib/TreeItem.js +0 -1
  10. package/lib/TreeItem.js.map +1 -1
  11. package/lib/TreeItemLayout.js +0 -1
  12. package/lib/TreeItemLayout.js.map +1 -1
  13. package/lib/TreeItemPersonaLayout.js +0 -1
  14. package/lib/TreeItemPersonaLayout.js.map +1 -1
  15. package/lib/components/FlatTree/FlatTree.js +17 -0
  16. package/lib/components/FlatTree/FlatTree.js.map +1 -0
  17. package/lib/components/FlatTree/FlatTree.types.js +1 -0
  18. package/lib/components/FlatTree/FlatTree.types.js.map +1 -0
  19. package/lib/components/FlatTree/index.js +7 -0
  20. package/lib/components/FlatTree/index.js.map +1 -0
  21. package/lib/components/FlatTree/renderFlatTree.js +2 -0
  22. package/lib/components/FlatTree/renderFlatTree.js.map +1 -0
  23. package/lib/components/FlatTree/useFlatControllableCheckedItems.js +76 -0
  24. package/lib/components/FlatTree/useFlatControllableCheckedItems.js.map +1 -0
  25. package/lib/components/FlatTree/useFlatTree.js +3 -0
  26. package/lib/components/FlatTree/useFlatTree.js.map +1 -0
  27. package/lib/components/FlatTree/useFlatTreeContextValues.js +2 -0
  28. package/lib/components/FlatTree/useFlatTreeContextValues.js.map +1 -0
  29. package/lib/components/FlatTree/useFlatTreeNavigation.js +74 -0
  30. package/lib/components/FlatTree/useFlatTreeNavigation.js.map +1 -0
  31. package/lib/components/FlatTree/useFlatTreeStyles.styles.js +20 -0
  32. package/lib/components/FlatTree/useFlatTreeStyles.styles.js.map +1 -0
  33. package/lib/components/FlatTree/useHeadlessFlatTree.js +124 -0
  34. package/lib/components/FlatTree/useHeadlessFlatTree.js.map +1 -0
  35. package/lib/components/Tree/Tree.js +9 -15
  36. package/lib/components/Tree/Tree.js.map +1 -1
  37. package/lib/components/Tree/Tree.types.js +1 -2
  38. package/lib/components/Tree/Tree.types.js.map +1 -1
  39. package/lib/components/Tree/index.js +2 -3
  40. package/lib/components/Tree/index.js.map +1 -1
  41. package/lib/components/Tree/renderTree.js +7 -11
  42. package/lib/components/Tree/renderTree.js.map +1 -1
  43. package/lib/components/Tree/useNestedControllableCheckedItems.js +22 -0
  44. package/lib/components/Tree/useNestedControllableCheckedItems.js.map +1 -0
  45. package/lib/components/Tree/useTree.js +63 -111
  46. package/lib/components/Tree/useTree.js.map +1 -1
  47. package/lib/components/Tree/useTreeContextValues.js +16 -24
  48. package/lib/components/Tree/useTreeContextValues.js.map +1 -1
  49. package/lib/components/Tree/useTreeNavigation.js +52 -0
  50. package/lib/components/Tree/useTreeNavigation.js.map +1 -0
  51. package/lib/components/Tree/{useTreeStyles.js → useTreeStyles.styles.js} +7 -3
  52. package/lib/components/Tree/useTreeStyles.styles.js.map +1 -0
  53. package/lib/components/TreeItem/TreeItem.js +7 -9
  54. package/lib/components/TreeItem/TreeItem.js.map +1 -1
  55. package/lib/components/TreeItem/TreeItem.types.js +0 -1
  56. package/lib/components/TreeItem/TreeItem.types.js.map +1 -1
  57. package/lib/components/TreeItem/index.js +2 -2
  58. package/lib/components/TreeItem/index.js.map +1 -1
  59. package/lib/components/TreeItem/renderTreeItem.js +7 -15
  60. package/lib/components/TreeItem/renderTreeItem.js.map +1 -1
  61. package/lib/components/TreeItem/useTreeItem.js +161 -234
  62. package/lib/components/TreeItem/useTreeItem.js.map +1 -1
  63. package/lib/components/TreeItem/useTreeItemContextValues.js +20 -16
  64. package/lib/components/TreeItem/useTreeItemContextValues.js.map +1 -1
  65. package/lib/components/TreeItem/useTreeItemStyles.styles.js +100 -0
  66. package/lib/components/TreeItem/useTreeItemStyles.styles.js.map +1 -0
  67. package/lib/components/TreeItemChevron.js +24 -0
  68. package/lib/components/TreeItemChevron.js.map +1 -0
  69. package/lib/components/TreeItemLayout/TreeItemLayout.js +5 -7
  70. package/lib/components/TreeItemLayout/TreeItemLayout.js.map +1 -1
  71. package/lib/components/TreeItemLayout/TreeItemLayout.types.js +1 -2
  72. package/lib/components/TreeItemLayout/TreeItemLayout.types.js.map +1 -1
  73. package/lib/components/TreeItemLayout/index.js +1 -2
  74. package/lib/components/TreeItemLayout/index.js.map +1 -1
  75. package/lib/components/TreeItemLayout/renderTreeItemLayout.js +8 -13
  76. package/lib/components/TreeItemLayout/renderTreeItemLayout.js.map +1 -1
  77. package/lib/components/TreeItemLayout/useTreeItemLayout.js +109 -40
  78. package/lib/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
  79. package/lib/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js +237 -0
  80. package/lib/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js.map +1 -0
  81. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js +6 -8
  82. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js.map +1 -1
  83. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js +1 -2
  84. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js.map +1 -1
  85. package/lib/components/TreeItemPersonaLayout/index.js +1 -2
  86. package/lib/components/TreeItemPersonaLayout/index.js.map +1 -1
  87. package/lib/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js +10 -15
  88. package/lib/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js.map +1 -1
  89. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js +41 -48
  90. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js.map +1 -1
  91. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js +9 -10
  92. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js.map +1 -1
  93. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js +210 -0
  94. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js.map +1 -0
  95. package/lib/contexts/index.js +0 -1
  96. package/lib/contexts/index.js.map +1 -1
  97. package/lib/contexts/treeContext.js +13 -14
  98. package/lib/contexts/treeContext.js.map +1 -1
  99. package/lib/contexts/treeItemContext.js +16 -8
  100. package/lib/contexts/treeItemContext.js.map +1 -1
  101. package/lib/hooks/useControllableOpenItems.js +28 -0
  102. package/lib/hooks/useControllableOpenItems.js.map +1 -0
  103. package/lib/hooks/useRootTree.js +147 -0
  104. package/lib/hooks/useRootTree.js.map +1 -0
  105. package/lib/hooks/useRovingTabIndexes.js +30 -49
  106. package/lib/hooks/useRovingTabIndexes.js.map +1 -1
  107. package/lib/hooks/useSubtree.js +41 -0
  108. package/lib/hooks/useSubtree.js.map +1 -0
  109. package/lib/index.js +3 -4
  110. package/lib/index.js.map +1 -1
  111. package/lib/utils/ImmutableMap.js +41 -0
  112. package/lib/utils/ImmutableMap.js.map +1 -0
  113. package/lib/utils/ImmutableSet.js +42 -33
  114. package/lib/utils/ImmutableSet.js.map +1 -1
  115. package/lib/utils/assert.js +4 -5
  116. package/lib/utils/assert.js.map +1 -1
  117. package/lib/utils/createCheckedItems.js +18 -0
  118. package/lib/utils/createCheckedItems.js.map +1 -0
  119. package/lib/utils/createHTMLElementWalker.js +67 -0
  120. package/lib/utils/createHTMLElementWalker.js.map +1 -0
  121. package/lib/utils/createHeadlessTree.js +188 -0
  122. package/lib/utils/createHeadlessTree.js.map +1 -0
  123. package/lib/utils/createOpenItems.js +10 -0
  124. package/lib/utils/createOpenItems.js.map +1 -0
  125. package/lib/utils/flattenTree.js +53 -27
  126. package/lib/utils/flattenTree.js.map +1 -1
  127. package/lib/utils/getTreeItemValueFromElement.js +4 -0
  128. package/lib/utils/getTreeItemValueFromElement.js.map +1 -0
  129. package/lib/utils/nextTypeAheadElement.js +11 -12
  130. package/lib/utils/nextTypeAheadElement.js.map +1 -1
  131. package/lib/utils/normalizeOpenItems.js +6 -5
  132. package/lib/utils/normalizeOpenItems.js.map +1 -1
  133. package/lib/utils/tokens.js +14 -14
  134. package/lib/utils/tokens.js.map +1 -1
  135. package/lib/utils/treeItemFilter.js +2 -3
  136. package/lib/utils/treeItemFilter.js.map +1 -1
  137. package/lib-commonjs/FlatTree.js +6 -0
  138. package/lib-commonjs/FlatTree.js.map +1 -0
  139. package/lib-commonjs/Tree.js +0 -3
  140. package/lib-commonjs/Tree.js.map +1 -1
  141. package/lib-commonjs/TreeItem.js +0 -3
  142. package/lib-commonjs/TreeItem.js.map +1 -1
  143. package/lib-commonjs/TreeItemLayout.js +0 -3
  144. package/lib-commonjs/TreeItemLayout.js.map +1 -1
  145. package/lib-commonjs/TreeItemPersonaLayout.js +0 -3
  146. package/lib-commonjs/TreeItemPersonaLayout.js.map +1 -1
  147. package/lib-commonjs/components/FlatTree/FlatTree.js +21 -0
  148. package/lib-commonjs/components/FlatTree/FlatTree.js.map +1 -0
  149. package/lib-commonjs/components/FlatTree/FlatTree.types.js +4 -0
  150. package/lib-commonjs/components/FlatTree/FlatTree.types.js.map +1 -0
  151. package/lib-commonjs/components/FlatTree/index.js +12 -0
  152. package/lib-commonjs/components/FlatTree/index.js.map +1 -0
  153. package/lib-commonjs/components/FlatTree/renderFlatTree.js +10 -0
  154. package/lib-commonjs/components/FlatTree/renderFlatTree.js.map +1 -0
  155. package/lib-commonjs/components/FlatTree/useFlatControllableCheckedItems.js +91 -0
  156. package/lib-commonjs/components/FlatTree/useFlatControllableCheckedItems.js.map +1 -0
  157. package/lib-commonjs/components/FlatTree/useFlatTree.js +12 -0
  158. package/lib-commonjs/components/FlatTree/useFlatTree.js.map +1 -0
  159. package/lib-commonjs/components/FlatTree/useFlatTreeContextValues.js +10 -0
  160. package/lib-commonjs/components/FlatTree/useFlatTreeContextValues.js.map +1 -0
  161. package/lib-commonjs/components/FlatTree/useFlatTreeNavigation.js +82 -0
  162. package/lib-commonjs/components/FlatTree/useFlatTreeNavigation.js.map +1 -0
  163. package/lib-commonjs/components/FlatTree/useFlatTreeStyles.styles.js +36 -0
  164. package/lib-commonjs/components/FlatTree/useFlatTreeStyles.styles.js.map +1 -0
  165. package/lib-commonjs/components/FlatTree/useHeadlessFlatTree.js +121 -0
  166. package/lib-commonjs/components/FlatTree/useHeadlessFlatTree.js.map +1 -0
  167. package/lib-commonjs/components/Tree/Tree.js +4 -6
  168. package/lib-commonjs/components/Tree/Tree.js.map +1 -1
  169. package/lib-commonjs/components/Tree/Tree.types.js +0 -5
  170. package/lib-commonjs/components/Tree/Tree.types.js.map +1 -1
  171. package/lib-commonjs/components/Tree/index.js +2 -5
  172. package/lib-commonjs/components/Tree/index.js.map +1 -1
  173. package/lib-commonjs/components/Tree/renderTree.js +6 -9
  174. package/lib-commonjs/components/Tree/renderTree.js.map +1 -1
  175. package/lib-commonjs/components/Tree/useNestedControllableCheckedItems.js +37 -0
  176. package/lib-commonjs/components/Tree/useNestedControllableCheckedItems.js.map +1 -0
  177. package/lib-commonjs/components/Tree/useTree.js +53 -85
  178. package/lib-commonjs/components/Tree/useTree.js.map +1 -1
  179. package/lib-commonjs/components/Tree/useTreeContextValues.js +9 -10
  180. package/lib-commonjs/components/Tree/useTreeContextValues.js.map +1 -1
  181. package/lib-commonjs/components/Tree/useTreeNavigation.js +60 -0
  182. package/lib-commonjs/components/Tree/useTreeNavigation.js.map +1 -0
  183. package/lib-commonjs/components/Tree/{useTreeStyles.js → useTreeStyles.styles.js} +10 -7
  184. package/lib-commonjs/components/Tree/useTreeStyles.styles.js.map +1 -0
  185. package/lib-commonjs/components/TreeItem/TreeItem.js +3 -5
  186. package/lib-commonjs/components/TreeItem/TreeItem.js.map +1 -1
  187. package/lib-commonjs/components/TreeItem/TreeItem.types.js +0 -3
  188. package/lib-commonjs/components/TreeItem/TreeItem.types.js.map +1 -1
  189. package/lib-commonjs/components/TreeItem/index.js +2 -4
  190. package/lib-commonjs/components/TreeItem/index.js.map +1 -1
  191. package/lib-commonjs/components/TreeItem/renderTreeItem.js +6 -12
  192. package/lib-commonjs/components/TreeItem/renderTreeItem.js.map +1 -1
  193. package/lib-commonjs/components/TreeItem/useTreeItem.js +111 -170
  194. package/lib-commonjs/components/TreeItem/useTreeItem.js.map +1 -1
  195. package/lib-commonjs/components/TreeItem/useTreeItemContextValues.js +19 -18
  196. package/lib-commonjs/components/TreeItem/useTreeItemContextValues.js.map +1 -1
  197. package/lib-commonjs/components/TreeItem/useTreeItemStyles.styles.js +202 -0
  198. package/lib-commonjs/components/TreeItem/useTreeItemStyles.styles.js.map +1 -0
  199. package/lib-commonjs/components/TreeItemChevron.js +33 -0
  200. package/lib-commonjs/components/TreeItemChevron.js.map +1 -0
  201. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.js +3 -5
  202. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.js.map +1 -1
  203. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.types.js +0 -3
  204. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.types.js.map +1 -1
  205. package/lib-commonjs/components/TreeItemLayout/index.js +1 -4
  206. package/lib-commonjs/components/TreeItemLayout/index.js.map +1 -1
  207. package/lib-commonjs/components/TreeItemLayout/renderTreeItemLayout.js +8 -9
  208. package/lib-commonjs/components/TreeItemLayout/renderTreeItemLayout.js.map +1 -1
  209. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js +92 -18
  210. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
  211. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js +392 -0
  212. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js.map +1 -0
  213. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js +3 -5
  214. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js.map +1 -1
  215. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js +0 -3
  216. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js.map +1 -1
  217. package/lib-commonjs/components/TreeItemPersonaLayout/index.js +1 -4
  218. package/lib-commonjs/components/TreeItemPersonaLayout/index.js.map +1 -1
  219. package/lib-commonjs/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js +9 -10
  220. package/lib-commonjs/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js.map +1 -1
  221. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js +29 -26
  222. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js.map +1 -1
  223. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js +1 -3
  224. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js.map +1 -1
  225. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js +379 -0
  226. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js.map +1 -0
  227. package/lib-commonjs/contexts/index.js +0 -3
  228. package/lib-commonjs/contexts/index.js.map +1 -1
  229. package/lib-commonjs/contexts/treeContext.js +7 -7
  230. package/lib-commonjs/contexts/treeContext.js.map +1 -1
  231. package/lib-commonjs/contexts/treeItemContext.js +15 -6
  232. package/lib-commonjs/contexts/treeItemContext.js.map +1 -1
  233. package/lib-commonjs/hooks/useControllableOpenItems.js +39 -0
  234. package/lib-commonjs/hooks/useControllableOpenItems.js.map +1 -0
  235. package/lib-commonjs/hooks/useRootTree.js +151 -0
  236. package/lib-commonjs/hooks/useRootTree.js.map +1 -0
  237. package/lib-commonjs/hooks/useRovingTabIndexes.js +9 -31
  238. package/lib-commonjs/hooks/useRovingTabIndexes.js.map +1 -1
  239. package/lib-commonjs/hooks/useSubtree.js +45 -0
  240. package/lib-commonjs/hooks/useSubtree.js.map +1 -0
  241. package/lib-commonjs/index.js +11 -7
  242. package/lib-commonjs/index.js.map +1 -1
  243. package/lib-commonjs/utils/ImmutableMap.js +49 -0
  244. package/lib-commonjs/utils/ImmutableMap.js.map +1 -0
  245. package/lib-commonjs/utils/ImmutableSet.js +28 -20
  246. package/lib-commonjs/utils/ImmutableSet.js.map +1 -1
  247. package/lib-commonjs/utils/assert.js +1 -3
  248. package/lib-commonjs/utils/assert.js.map +1 -1
  249. package/lib-commonjs/utils/createCheckedItems.js +26 -0
  250. package/lib-commonjs/utils/createCheckedItems.js.map +1 -0
  251. package/lib-commonjs/{hooks/useHTMLElementWalker.js → utils/createHTMLElementWalker.js} +3 -27
  252. package/lib-commonjs/utils/createHTMLElementWalker.js.map +1 -0
  253. package/lib-commonjs/utils/createHeadlessTree.js +202 -0
  254. package/lib-commonjs/utils/createHeadlessTree.js.map +1 -0
  255. package/lib-commonjs/utils/createOpenItems.js +18 -0
  256. package/lib-commonjs/utils/createOpenItems.js.map +1 -0
  257. package/lib-commonjs/utils/flattenTree.js +8 -17
  258. package/lib-commonjs/utils/flattenTree.js.map +1 -1
  259. package/lib-commonjs/utils/getTreeItemValueFromElement.js +18 -0
  260. package/lib-commonjs/utils/getTreeItemValueFromElement.js.map +1 -0
  261. package/lib-commonjs/utils/nextTypeAheadElement.js +1 -3
  262. package/lib-commonjs/utils/nextTypeAheadElement.js.map +1 -1
  263. package/lib-commonjs/utils/normalizeOpenItems.js +1 -3
  264. package/lib-commonjs/utils/normalizeOpenItems.js.map +1 -1
  265. package/lib-commonjs/utils/tokens.js +12 -13
  266. package/lib-commonjs/utils/tokens.js.map +1 -1
  267. package/lib-commonjs/utils/treeItemFilter.js +1 -3
  268. package/lib-commonjs/utils/treeItemFilter.js.map +1 -1
  269. package/package.json +31 -31
  270. package/.swcrc +0 -30
  271. package/lib/components/Tree/useTreeStyles.js.map +0 -1
  272. package/lib/components/TreeItem/useTreeItemStyles.js +0 -203
  273. package/lib/components/TreeItem/useTreeItemStyles.js.map +0 -1
  274. package/lib/components/TreeItemLayout/useTreeItemLayoutStyles.js +0 -98
  275. package/lib/components/TreeItemLayout/useTreeItemLayoutStyles.js.map +0 -1
  276. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.js +0 -115
  277. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.js.map +0 -1
  278. package/lib/hooks/index.js +0 -4
  279. package/lib/hooks/index.js.map +0 -1
  280. package/lib/hooks/useFlatTree.js +0 -69
  281. package/lib/hooks/useFlatTree.js.map +0 -1
  282. package/lib/hooks/useFlatTreeNavigation.js +0 -74
  283. package/lib/hooks/useFlatTreeNavigation.js.map +0 -1
  284. package/lib/hooks/useHTMLElementWalker.js +0 -80
  285. package/lib/hooks/useHTMLElementWalker.js.map +0 -1
  286. package/lib/hooks/useNestedTreeNavigation.js +0 -59
  287. package/lib/hooks/useNestedTreeNavigation.js.map +0 -1
  288. package/lib/hooks/useOpenItemsState.js +0 -22
  289. package/lib/hooks/useOpenItemsState.js.map +0 -1
  290. package/lib/utils/createFlatTreeItems.js +0 -109
  291. package/lib/utils/createFlatTreeItems.js.map +0 -1
  292. package/lib-commonjs/components/Tree/useTreeStyles.js.map +0 -1
  293. package/lib-commonjs/components/TreeItem/useTreeItemStyles.js +0 -375
  294. package/lib-commonjs/components/TreeItem/useTreeItemStyles.js.map +0 -1
  295. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.js +0 -143
  296. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.js.map +0 -1
  297. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.js +0 -186
  298. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.js.map +0 -1
  299. package/lib-commonjs/hooks/index.js +0 -11
  300. package/lib-commonjs/hooks/index.js.map +0 -1
  301. package/lib-commonjs/hooks/useFlatTree.js +0 -78
  302. package/lib-commonjs/hooks/useFlatTree.js.map +0 -1
  303. package/lib-commonjs/hooks/useFlatTreeNavigation.js +0 -82
  304. package/lib-commonjs/hooks/useFlatTreeNavigation.js.map +0 -1
  305. package/lib-commonjs/hooks/useHTMLElementWalker.js.map +0 -1
  306. package/lib-commonjs/hooks/useNestedTreeNavigation.js +0 -69
  307. package/lib-commonjs/hooks/useNestedTreeNavigation.js.map +0 -1
  308. package/lib-commonjs/hooks/useOpenItemsState.js +0 -39
  309. package/lib-commonjs/hooks/useOpenItemsState.js.map +0 -1
  310. package/lib-commonjs/utils/createFlatTreeItems.js +0 -126
  311. package/lib-commonjs/utils/createFlatTreeItems.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,31 +1,177 @@
1
1
  /// <reference types="react" />
2
2
 
3
- import { ArrowDown } from '@fluentui/keyboard-keys';
4
- import { ArrowLeft } from '@fluentui/keyboard-keys';
5
- import { ArrowRight } from '@fluentui/keyboard-keys';
6
- import { ArrowUp } from '@fluentui/keyboard-keys';
3
+ import type { ArrowDown } from '@fluentui/keyboard-keys';
4
+ import type { ArrowLeft } from '@fluentui/keyboard-keys';
5
+ import type { ArrowRight } from '@fluentui/keyboard-keys';
6
+ import type { ArrowUp } from '@fluentui/keyboard-keys';
7
7
  import type { AvatarContextValue } from '@fluentui/react-avatar';
8
8
  import type { AvatarSize } from '@fluentui/react-avatar';
9
- import type { ButtonContextValue } from '@fluentui/react-button';
9
+ import { ButtonContextValue } from '@fluentui/react-button';
10
+ import { Checkbox } from '@fluentui/react-checkbox';
11
+ import { CheckboxProps } from '@fluentui/react-checkbox';
10
12
  import type { ComponentProps } from '@fluentui/react-utilities';
11
13
  import type { ComponentState } from '@fluentui/react-utilities';
12
14
  import { ContextSelector } from '@fluentui/react-context-selector';
13
- import { End } from '@fluentui/keyboard-keys';
14
- import { Enter } from '@fluentui/keyboard-keys';
15
+ import type { End } from '@fluentui/keyboard-keys';
16
+ import type { Enter } from '@fluentui/keyboard-keys';
15
17
  import type { ExtractSlotProps } from '@fluentui/react-utilities';
16
18
  import { FC } from 'react';
17
19
  import type { ForwardRefComponent } from '@fluentui/react-utilities';
18
- import { Home } from '@fluentui/keyboard-keys';
20
+ import type { Home } from '@fluentui/keyboard-keys';
19
21
  import { Provider } from 'react';
20
22
  import { ProviderProps } from 'react';
23
+ import { Radio } from '@fluentui/react-radio';
24
+ import { RadioProps } from '@fluentui/react-radio';
21
25
  import * as React_2 from 'react';
26
+ import { SelectionMode as SelectionMode_2 } from '@fluentui/react-utilities';
22
27
  import type { Slot } from '@fluentui/react-utilities';
23
28
  import type { SlotClassNames } from '@fluentui/react-utilities';
24
29
 
30
+ /**
31
+ * properly creates an ImmutableMap instance from an iterable
32
+ */
33
+ declare function createImmutableMap<Key, Value>(iterable?: Iterable<[Key, Value]>): ImmutableMap<Key, Value>;
34
+
35
+ /**
36
+ * properly creates an ImmutableSet instance from an iterable
37
+ */
38
+ declare function createImmutableSet<Value>(iterable?: Iterable<Value>): ImmutableSet<Value>;
39
+
40
+ /**
41
+ * Avoid using *dangerouslyCreateImmutableMap*, since this method will expose internally used set, use createImmutableMap instead,
42
+ * @param internalMap - a set that is used internally to store values.
43
+ */
44
+ declare function dangerouslyCreateImmutableMap<Key, Value>(internalMap: Map<Key, Value>): ImmutableMap<Key, Value>;
45
+
46
+ /**
47
+ * Avoid using *dangerouslyCreateImmutableSet*, since this method will expose internally used set, use createImmutableSet instead,
48
+ * @param internalSet - a set that is used internally to store values.
49
+ */
50
+ declare function dangerouslyCreateImmutableSet<Value>(internalSet: Set<Value>): ImmutableSet<Value>;
51
+
52
+ declare type FlattenedTreeItem<Props extends TreeItemProps> = HeadlessFlatTreeItemProps & Props;
53
+
25
54
  /**
26
55
  * Converts a nested structure to a flat one which can be consumed by `useFlatTreeItems`
56
+ * @example
57
+ * ```tsx
58
+ * const defaultItems = flattenTree_unstable([
59
+ * {
60
+ * children: <TreeItemLayout>level 1, item 1</TreeItemLayout>,
61
+ * subtree: [
62
+ * {
63
+ * children: <TreeItemLayout>level 2, item 1</TreeItemLayout>,
64
+ * },
65
+ * {
66
+ * children: <TreeItemLayout>level 2, item 2</TreeItemLayout>,
67
+ * },
68
+ * {
69
+ * children: <TreeItemLayout>level 2, item 3</TreeItemLayout>,
70
+ * },
71
+ * ],
72
+ * },
73
+ * {
74
+ * children: <TreeItemLayout>level 1, item 2</TreeItemLayout>,
75
+ * subtree: [
76
+ * {
77
+ * children: <TreeItemLayout>level 2, item 1</TreeItemLayout>,
78
+ * subtree: [
79
+ * {
80
+ * children: <TreeItemLayout>level 3, item 1</TreeItemLayout>,
81
+ * subtree: [
82
+ * {
83
+ * children: <TreeItemLayout>level 4, item 1</TreeItemLayout>,
84
+ * },
85
+ * ],
86
+ * },
87
+ * ],
88
+ * },
89
+ * ],
90
+ * },
91
+ * ]);
92
+ * ```
93
+ */
94
+ export declare const flattenTree_unstable: <Props extends TreeItemProps>(items: FlattenTreeItem<Props>[]) => FlattenedTreeItem<Props>[];
95
+
96
+ export declare type FlattenTreeItem<Props extends TreeItemProps> = Omit<Props, 'subtree' | 'itemType'> & {
97
+ value: TreeItemValue;
98
+ subtree?: FlattenTreeItem<Props>[];
99
+ };
100
+
101
+ /**
102
+ * The `FlatTree` component is a variation of the `Tree` component that deals with a flattened data structure.
103
+ *
104
+ * It should be used on cases where more complex interactions with a Tree is required.
105
+ * On simple scenarios it is advised to simply use a nested structure instead.
27
106
  */
28
- export declare const flattenTree_unstable: (items: NestedTreeItem[]) => FlatTreeItemProps[];
107
+ export declare const FlatTree: ForwardRefComponent<FlatTreeProps>;
108
+
109
+ export declare const flatTreeClassNames: SlotClassNames<TreeSlots>;
110
+
111
+ export declare type FlatTreeProps = ComponentProps<TreeSlots> & {
112
+ /**
113
+ * A tree item can have various appearances:
114
+ * - 'subtle' (default): The default tree item styles.
115
+ * - 'subtle-alpha': Minimizes emphasis on hovered or focused states.
116
+ * - 'transparent': Removes background color.
117
+ * @default 'subtle'
118
+ */
119
+ appearance?: 'subtle' | 'subtle-alpha' | 'transparent';
120
+ /**
121
+ * Size of the tree item.
122
+ * @default 'medium'
123
+ */
124
+ size?: 'small' | 'medium';
125
+ /**
126
+ * This refers to a list of ids of opened tree items.
127
+ * Controls the state of the open tree items.
128
+ * These property is ignored for subtrees.
129
+ */
130
+ openItems?: Iterable<TreeItemValue>;
131
+ /**
132
+ * Callback fired when the component changes value from open state.
133
+ * These property is ignored for subtrees.
134
+ *
135
+ * @param event - a React's Synthetic event
136
+ * @param data - A data object with relevant information,
137
+ * such as open value and type of interaction that created the event.
138
+ */
139
+ onOpenChange?(event: TreeOpenChangeEvent, data: TreeOpenChangeData): void;
140
+ /**
141
+ * Callback fired when navigation happens inside the component.
142
+ * These property is ignored for subtrees.
143
+ *
144
+ * FIXME: This method is not ideal, as navigation should be handled internally by tabster.
145
+ *
146
+ * @param event - a React's Synthetic event
147
+ * @param data - A data object with relevant information,
148
+ */
149
+ onNavigation?(event: TreeNavigationEvent_unstable, data: TreeNavigationData_unstable): void;
150
+ /**
151
+ * This refers to the selection mode of the tree.
152
+ * - undefined: No selection can be done.
153
+ * - 'single': Only one tree item can be selected, radio buttons are rendered.
154
+ * - 'multiselect': Multiple tree items can be selected, checkboxes are rendered.
155
+ *
156
+ * @default undefined
157
+ */
158
+ selectionMode?: SelectionMode_2;
159
+ /**
160
+ * This refers to a list of ids of checked tree items, or a list of tuples of ids and checked state.
161
+ * Controls the state of the checked tree items.
162
+ * These property is ignored for subtrees.
163
+ */
164
+ checkedItems?: Iterable<TreeItemValue | [TreeItemValue, TreeSelectionValue]>;
165
+ /**
166
+ * Callback fired when the component changes value from checked state.
167
+ * These property is ignored for subtrees.
168
+ *
169
+ * @param event - a React's Synthetic event
170
+ * @param data - A data object with relevant information,
171
+ * such as checked value and type of interaction that created the event.
172
+ */
173
+ onCheckedChange?(event: TreeCheckedChangeEvent, data: TreeCheckedChangeData): void;
174
+ };
29
175
 
30
176
  /**
31
177
  * FlatTree API to manage all required mechanisms to convert a list of items into renderable TreeItems
@@ -37,13 +183,16 @@ export declare const flattenTree_unstable: (items: NestedTreeItem[]) => FlatTree
37
183
  *
38
184
  * On simple scenarios it is advised to simply use a nested structure instead.
39
185
  */
40
- export declare type FlatTree = {
186
+ export declare type HeadlessFlatTree<Props extends HeadlessFlatTreeItemProps> = {
41
187
  /**
42
188
  * returns the properties required for the Tree component to work properly.
43
189
  * That includes:
44
190
  * `openItems`, `onOpenChange`, `onNavigation_unstable` and `ref`
45
191
  */
46
- getTreeProps(): FlatTreeProps;
192
+ getTreeProps(): Required<Pick<FlatTreeProps, 'openItems' | 'onOpenChange' | 'onNavigation' | 'checkedItems' | 'onCheckedChange'>> & {
193
+ ref: React_2.Ref<HTMLDivElement>;
194
+ openItems: ImmutableSet<TreeItemValue>;
195
+ };
47
196
  /**
48
197
  * internal method used to react to an `onNavigation` event.
49
198
  * This method ensures proper navigation on keyboard and mouse interaction.
@@ -57,7 +206,7 @@ export declare type FlatTree = {
57
206
  * event.preventDefault();
58
207
  * const nextItem = tree.getNextNavigableItem(data);
59
208
  * // scroll to item using virtualization scroll mechanism
60
- * if (nextItem && document.getElementById(nextItem.id)) {
209
+ * if (nextItem && tree.getElementFromItem(nextItem)) {
61
210
  * listRef.current.scrollToItem(nextItem.index);
62
211
  * }
63
212
  * // wait for scrolling to happen and then invoke navigate method
@@ -75,23 +224,82 @@ export declare type FlatTree = {
75
224
  *
76
225
  * On the case of TypeAhead navigation this method returns the current item.
77
226
  */
78
- getNextNavigableItem(visibleItems: FlatTreeItem[], data: TreeNavigationData_unstable): FlatTreeItem | undefined;
227
+ getNextNavigableItem(visibleItems: HeadlessTreeItem<Props>[], data: TreeNavigationData_unstable): HeadlessTreeItem<Props> | undefined;
228
+ /**
229
+ * similar to getElementById but for FlatTreeItems
230
+ */
231
+ getElementFromItem(item: HeadlessTreeItem<Props>): HTMLElement | null;
79
232
  /**
80
233
  * an iterable containing all visually available flat tree items
81
234
  */
82
- items(): IterableIterator<FlatTreeItem>;
235
+ items(): IterableIterator<HeadlessTreeItem<Props>>;
236
+ };
237
+
238
+ export declare type HeadlessFlatTreeItem<Props extends HeadlessFlatTreeItemProps> = HeadlessTreeItem<Props>;
239
+
240
+ export declare type HeadlessFlatTreeItemProps = HeadlessTreeItemProps;
241
+
242
+ export declare type HeadlessFlatTreeOptions = Pick<FlatTreeProps, 'onOpenChange' | 'onNavigation' | 'selectionMode' | 'onCheckedChange'> & Pick<TreeProps, 'defaultOpenItems' | 'openItems' | 'checkedItems'> & {
243
+ defaultCheckedItems?: TreeProps['checkedItems'];
83
244
  };
84
245
 
85
- export declare type FlatTreeItem = Readonly<MutableFlatTreeItem>;
246
+ /**
247
+ * The item that is returned by `createHeadlessTree`, it represents a wrapper around the properties provided to
248
+ * `createHeadlessTree` but with extra information that might be useful on virtual tree scenarios
249
+ */
250
+ declare type HeadlessTreeItem<Props extends HeadlessTreeItemProps> = {
251
+ level: number;
252
+ index: number;
253
+ position: number;
254
+ childrenValues: TreeItemValue[];
255
+ value: TreeItemValue;
256
+ parentValue: TreeItemValue | undefined;
257
+ itemType: TreeItemType;
258
+ getTreeItemProps(): Required<Pick<Props, 'value' | 'aria-setsize' | 'aria-level' | 'aria-posinset' | 'itemType'>> & Omit<Props, 'parentValue'>;
259
+ };
86
260
 
87
- export declare type FlatTreeItemProps = TreeItemProps & {
88
- id: TreeItemId;
89
- parentId?: string;
261
+ declare type HeadlessTreeItemProps = Omit<TreeItemProps, 'itemType' | 'value'> & {
262
+ value: TreeItemValue;
263
+ itemType?: TreeItemType;
264
+ parentValue?: TreeItemValue;
90
265
  };
91
266
 
92
- export declare type FlatTreeProps = Required<Pick<TreeProps, 'openItems' | 'onOpenChange' | 'onNavigation_unstable'> & {
93
- ref: React_2.Ref<HTMLDivElement>;
94
- }>;
267
+ declare interface ImmutableMap<Key, Value> {
268
+ clear(): ImmutableMap<Key, Value>;
269
+ delete(key: Key): ImmutableMap<Key, Value>;
270
+ /**
271
+ * Returns a specified element from the Map object. If the value that is associated to the provided key is an object, then you will get a reference to that object and any change made to that object will effectively modify it inside the Map.
272
+ * @returns Returns the element associated with the specified key. If no element is associated with the specified key, undefined is returned.
273
+ */
274
+ get(key: Key): Value | undefined;
275
+ /**
276
+ * @returns boolean indicating whether an element with the specified key exists or not.
277
+ */
278
+ has(key: Key): boolean;
279
+ /**
280
+ * Adds a new element with a specified key and value to the Map. If an element with the same key already exists, the element will be updated.
281
+ */
282
+ set(key: Key, value: Value): ImmutableMap<Key, Value>;
283
+ /**
284
+ * @returns the number of elements in the Map.
285
+ */
286
+ readonly size: number;
287
+ /** Iterates over entries in the Map. */
288
+ [Symbol.iterator](): IterableIterator<[Key, Value]>;
289
+ /**
290
+ * @internal
291
+ * Exposes the internal map used to store values.
292
+ * This is an internal API and should not be used directly.
293
+ */
294
+ dangerouslyGetInternalMap_unstable(): Map<Key, Value>;
295
+ }
296
+
297
+ declare const ImmutableMap: {
298
+ empty: ImmutableMap<never, never>;
299
+ create: typeof createImmutableMap;
300
+ isImmutableMap: typeof isImmutableMap;
301
+ dangerouslyCreate_unstable: typeof dangerouslyCreateImmutableMap;
302
+ };
95
303
 
96
304
  declare interface ImmutableSet<Value> {
97
305
  /**
@@ -117,25 +325,30 @@ declare interface ImmutableSet<Value> {
117
325
  has(value: Value): boolean;
118
326
  /** Iterates over values in the ImmutableSet. */
119
327
  [Symbol.iterator](): IterableIterator<Value>;
328
+ /**
329
+ * @internal
330
+ * Exposes the internal set used to store values.
331
+ * This is an internal API and should not be used directly.
332
+ */
333
+ dangerouslyGetInternalSet_unstable(): Set<Value>;
120
334
  }
121
335
 
122
- /**
123
- * @internal
124
- * Used internally on createFlatTreeItems and VisibleFlatTreeItemGenerator
125
- * to ensure required properties when building a FlatTreeITem
126
- */
127
- declare type MutableFlatTreeItem = {
128
- parentId?: string;
129
- childrenSize: number;
130
- index: number;
131
- id: string;
132
- level: number;
133
- getTreeItemProps(): Required<Pick<TreeItemProps, 'id' | 'aria-setsize' | 'aria-level' | 'aria-posinset' | 'leaf'>> & TreeItemProps;
336
+ declare const ImmutableSet: {
337
+ empty: ImmutableSet<never>;
338
+ create: typeof createImmutableSet;
339
+ isImmutableSet: typeof isImmutableSet;
340
+ dangerouslyCreate_unstable: typeof dangerouslyCreateImmutableSet;
134
341
  };
135
342
 
136
- export declare type NestedTreeItem = Omit<TreeItemProps, 'subtree'> & {
137
- subtree?: NestedTreeItem[];
138
- };
343
+ declare function isImmutableMap<Key, Value>(value: unknown): value is ImmutableMap<Key, Value>;
344
+
345
+ declare function isImmutableSet<Value>(value: unknown): value is ImmutableSet<Value>;
346
+
347
+ declare type MultiSelectValue = NonNullable<CheckboxProps['checked']>;
348
+
349
+ declare type OmitWithoutExpanding<P, K extends string | number | symbol> = P extends unknown ? Omit<P, K> : P;
350
+
351
+ export declare const renderFlatTree_unstable: (state: TreeState, contextValues: TreeContextValues) => JSX.Element;
139
352
 
140
353
  export declare const renderTree_unstable: (state: TreeState, contextValues: TreeContextValues) => JSX.Element;
141
354
 
@@ -154,31 +367,46 @@ export declare const renderTreeItemLayout_unstable: (state: TreeItemLayoutState)
154
367
  */
155
368
  export declare const renderTreeItemPersonaLayout_unstable: (state: TreeItemPersonaLayoutState, contextValues: TreeItemPersonaLayoutContextValues) => JSX.Element;
156
369
 
370
+ declare type SingleSelectValue = NonNullable<RadioProps['checked']>;
371
+
157
372
  /**
158
- * A tree view widget presents a hierarchical list.
159
- * Any item in the hierarchy may have child items,
160
- * and items that have children may be expanded or collapsed to show or hide the children.
161
- * For example, in a file system navigator that uses a tree view to display folders and files,
162
- * an item representing a folder can be expanded to reveal the contents of the folder,
163
- * which may be files, folders, or both.
373
+ * The `Tree` component renders nested items in a hierarchical structure.
374
+ * Use it with `TreeItem` component and layouts components `TreeItemLayout` or `TreeItemPersonaLayout`.
164
375
  */
165
376
  export declare const Tree: ForwardRefComponent<TreeProps>;
166
377
 
378
+ export declare type TreeCheckedChangeData = {
379
+ value: TreeItemValue;
380
+ checkedItems: Map<TreeItemValue, TreeSelectionValue>;
381
+ target: HTMLElement;
382
+ event: React_2.ChangeEvent<HTMLElement>;
383
+ type: 'Change';
384
+ } & ({
385
+ selectionMode: 'multiselect';
386
+ checked: MultiSelectValue;
387
+ } | {
388
+ selectionMode: 'single';
389
+ checked: SingleSelectValue;
390
+ });
391
+
392
+ export declare type TreeCheckedChangeEvent = TreeCheckedChangeData['event'];
393
+
167
394
  export declare const treeClassNames: SlotClassNames<TreeSlots>;
168
395
 
169
396
  export declare type TreeContextValue = {
170
397
  level: number;
398
+ selectionMode: 'none' | SelectionMode_2;
171
399
  appearance: 'subtle' | 'subtle-alpha' | 'transparent';
172
400
  size: 'small' | 'medium';
173
- openItems: ImmutableSet<TreeItemId>;
401
+ openItems: ImmutableSet<TreeItemValue>;
402
+ checkedItems: ImmutableMap<TreeItemValue, 'mixed' | boolean>;
174
403
  /**
175
- * Requests dialog main component to update it's internal open state
404
+ * requests root Tree component to respond to some tree item event,
176
405
  */
177
- requestOpenChange(data: TreeOpenChangeData): void;
178
- requestNavigation(data: TreeNavigationData_unstable): void;
406
+ requestTreeResponse(request: TreeItemRequest): void;
179
407
  };
180
408
 
181
- declare type TreeContextValues = {
409
+ export declare type TreeContextValues = {
182
410
  tree: TreeContextValue;
183
411
  };
184
412
 
@@ -191,28 +419,35 @@ declare type TreeContextValues = {
191
419
  * The content and layout of a TreeItem can be defined using the TreeItemLayout or TreeItemPersonaLayout component,
192
420
  * which should be used as a direct child of TreeItem.
193
421
  *
194
- * When a TreeItem has nsted child subtree, an expand/collapse control is displayed,
422
+ * When a TreeItem has nested child subtree, an expand/collapse control is displayed,
195
423
  * allowing the user to show or hide the children.
196
424
  */
197
425
  export declare const TreeItem: ForwardRefComponent<TreeItemProps>;
198
426
 
199
427
  export declare const treeItemClassNames: SlotClassNames<TreeItemSlots>;
200
428
 
201
- declare type TreeItemContextValue = {
429
+ export declare type TreeItemContextValue = {
202
430
  isActionsVisible: boolean;
431
+ isAsideVisible: boolean;
432
+ selectionRef: React_2.Ref<HTMLInputElement>;
433
+ actionsRef: React_2.Ref<HTMLDivElement>;
434
+ expandIconRef: React_2.Ref<HTMLDivElement>;
435
+ layoutRef: React_2.Ref<HTMLDivElement>;
436
+ subtreeRef: React_2.Ref<HTMLDivElement>;
437
+ itemType: TreeItemType;
438
+ value: TreeItemValue;
439
+ open: boolean;
440
+ checked: TreeSelectionValue;
203
441
  };
204
442
 
205
443
  declare type TreeItemContextValues = {
206
444
  treeItem: TreeItemContextValue;
207
- button: ButtonContextValue;
208
445
  };
209
446
 
210
447
  declare type TreeItemCSSProperties = React_2.CSSProperties & {
211
448
  [treeItemLevelToken]?: string | number;
212
449
  };
213
450
 
214
- export declare type TreeItemId = string;
215
-
216
451
  /**
217
452
  * The `TreeItemLayout` component is used as a child of `TreeItem` to define the content and layout of a tree item.
218
453
  * It provides a consistent visual structure for tree items in a `Tree` component.
@@ -229,21 +464,53 @@ export declare type TreeItemLayoutProps = ComponentProps<Partial<TreeItemLayoutS
229
464
 
230
465
  export declare type TreeItemLayoutSlots = {
231
466
  root: Slot<'div'>;
467
+ /**
468
+ * Content. Children of the root slot are automatically rendered here
469
+ */
470
+ main: NonNullable<Slot<'div'>>;
232
471
  /**
233
472
  * Icon slot that renders right before main content
234
473
  */
235
- iconBefore?: Slot<'span'>;
474
+ iconBefore?: Slot<'div'>;
236
475
  /**
237
476
  * Icon slot that renders right after main content
238
477
  */
239
- iconAfter?: Slot<'span'>;
240
- aside?: Slot<'span'>;
478
+ iconAfter?: Slot<'div'>;
479
+ /**
480
+ * Expand icon slot,
481
+ * by default renders a chevron icon to indicate opening and closing
482
+ */
483
+ expandIcon?: Slot<'div'>;
484
+ /**
485
+ * Aside content is normally used to render a badge or other non-actionable content
486
+ * It is aria-hidden by default and is only meant to be used as visual aid.
487
+ */
488
+ aside?: Slot<'div'>;
489
+ /**
490
+ * Actionable elements are normally buttons, menus, or other focusable elements.
491
+ * Those elements are only visibly available if the given tree item is currently active.
492
+ *
493
+ * `actions` and `aside` slots are positioned on the exact same spot,
494
+ * so they won't be visible at the same time.
495
+ * `aside` slot is visible by default meanwhile `actions` slot are only visible when the tree item is active.
496
+ *
497
+ * `actions` slot supports a `visible` prop to force visibility of the actions.
498
+ */
499
+ actions?: Slot<ExtractSlotProps<Slot<'div'> & {
500
+ /**
501
+ * Forces visibility of the aside/action content
502
+ */
503
+ visible?: boolean;
504
+ }>>;
505
+ selector?: Slot<typeof Checkbox> | Slot<typeof Radio>;
241
506
  };
242
507
 
243
508
  /**
244
509
  * State used in rendering TreeItemLayout
245
510
  */
246
- export declare type TreeItemLayoutState = ComponentState<TreeItemLayoutSlots> & TreeItemContextValue;
511
+ export declare type TreeItemLayoutState = ComponentState<TreeItemLayoutSlots> & {
512
+ buttonContextValue: ButtonContextValue;
513
+ };
247
514
 
248
515
  export declare const treeItemLevelToken: "--fluent-TreeItem--level";
249
516
 
@@ -265,35 +532,28 @@ declare type TreeItemPersonaLayoutContextValues = {
265
532
  */
266
533
  export declare type TreeItemPersonaLayoutProps = ComponentProps<Partial<TreeItemPersonaLayoutSlots>>;
267
534
 
268
- export declare type TreeItemPersonaLayoutSlots = {
269
- root: Slot<'span'>;
535
+ export declare type TreeItemPersonaLayoutSlots = Pick<TreeItemLayoutSlots, 'actions' | 'aside' | 'expandIcon' | 'selector'> & {
536
+ root: NonNullable<Slot<'div'>>;
270
537
  /**
271
538
  * Avatar to display.
272
539
  */
273
- media: NonNullable<Slot<'span'>>;
274
- /**
275
- * Main text. Children of the root slot are automatically rendered here
276
- */
277
- main: Slot<'span'>;
278
- /**
279
- * Secondary text that describes or complements the main text
280
- */
281
- description?: Slot<'span'>;
540
+ media: NonNullable<Slot<'div'>>;
282
541
  /**
283
- * aside text that works as extra textual information
542
+ * Content. Children of the root slot are automatically rendered here
284
543
  */
285
- aside?: Slot<'span'>;
544
+ main: NonNullable<Slot<'div'>>;
286
545
  /**
287
- * A layout wrapper for the main and description slots
546
+ * Secondary text that describes or complements the content
288
547
  */
289
- content: Slot<'div'>;
548
+ description?: Slot<'div'>;
290
549
  };
291
550
 
292
551
  /**
293
552
  * State used in rendering TreeItemPersonaLayout
294
553
  */
295
- export declare type TreeItemPersonaLayoutState = ComponentState<TreeItemPersonaLayoutSlots> & TreeItemContextValue & {
554
+ export declare type TreeItemPersonaLayoutState = ComponentState<TreeItemPersonaLayoutSlots> & {
296
555
  avatarSize: AvatarSize;
556
+ buttonContextValue: ButtonContextValue;
297
557
  };
298
558
 
299
559
  /**
@@ -301,104 +561,86 @@ export declare type TreeItemPersonaLayoutState = ComponentState<TreeItemPersonaL
301
561
  */
302
562
  export declare type TreeItemProps = ComponentProps<Partial<TreeItemSlots>> & {
303
563
  /**
304
- * If a TreeItem is a leaf, it'll not present the `expandIcon` slot by default.
305
- * This attribute is used to force the decision if a TreeItem is a leaf or not. By not providing this property
306
- * this will be inferred by the presence of a subtree as part of the TreeItem children.
564
+ * A tree item can be a leaf or a branch
307
565
  */
308
- leaf?: boolean;
566
+ itemType: TreeItemType;
567
+ value?: TreeItemValue;
309
568
  };
310
569
 
311
- export declare const TreeItemProvider: React_2.Provider<TreeItemContextValue | undefined>;
570
+ export declare const TreeItemProvider: React_2.Provider<TreeItemContextValue | undefined> & React_2.FC<React_2.ProviderProps<TreeItemContextValue | undefined>>;
571
+
572
+ declare type TreeItemRequest = {
573
+ itemType: TreeItemType;
574
+ } & (OmitWithoutExpanding<TreeOpenChangeData, 'open' | 'openItems'> | TreeNavigationData_unstable | OmitWithoutExpanding<TreeCheckedChangeData, 'selectionMode' | 'checkedItems'>);
312
575
 
313
576
  export declare type TreeItemSlots = {
314
577
  root: Slot<ExtractSlotProps<Slot<'div'> & {
315
578
  style?: TreeItemCSSProperties;
316
579
  }>>;
317
- content: NonNullable<Slot<'div'>>;
318
- subtree?: Slot<'span'>;
319
- /**
320
- * Expand icon slot,
321
- * by default renders a chevron icon to indicate opening and closing
322
- */
323
- expandIcon?: Slot<'span'>;
324
- /**
325
- * Actions slot that renders on the end of tree item
326
- * when the item is hovered/focused
327
- */
328
- actions?: Slot<'span'>;
329
580
  };
330
581
 
331
582
  /**
332
583
  * State used in rendering TreeItem
333
584
  */
334
- export declare type TreeItemState = ComponentState<TreeItemSlots> & {
335
- open: boolean;
336
- isLeaf: boolean;
585
+ export declare type TreeItemState = ComponentState<TreeItemSlots> & TreeItemContextValue & {
337
586
  level: number;
338
- /**
339
- * By design, a button included on the actions slot should be small
340
- */
341
- buttonSize: 'small';
342
- isActionsVisible: boolean;
587
+ itemType: TreeItemType;
343
588
  };
344
589
 
590
+ declare type TreeItemType = 'leaf' | 'branch';
591
+
592
+ export declare type TreeItemValue = string | number;
593
+
345
594
  export declare type TreeNavigationData_unstable = {
346
- event: React_2.MouseEvent<HTMLElement>;
347
595
  target: HTMLElement;
596
+ value: TreeItemValue;
597
+ } & ({
598
+ event: React_2.MouseEvent<HTMLElement>;
348
599
  type: 'Click';
349
600
  } | {
350
601
  event: React_2.KeyboardEvent<HTMLElement>;
351
- target: HTMLElement;
352
602
  type: 'TypeAhead';
353
603
  } | {
354
604
  event: React_2.KeyboardEvent<HTMLElement>;
355
- target: HTMLElement;
356
605
  type: typeof ArrowRight;
357
606
  } | {
358
607
  event: React_2.KeyboardEvent<HTMLElement>;
359
- target: HTMLElement;
360
608
  type: typeof ArrowLeft;
361
609
  } | {
362
610
  event: React_2.KeyboardEvent<HTMLElement>;
363
- target: HTMLElement;
364
611
  type: typeof ArrowUp;
365
612
  } | {
366
613
  event: React_2.KeyboardEvent<HTMLElement>;
367
- target: HTMLElement;
368
614
  type: typeof ArrowDown;
369
615
  } | {
370
616
  event: React_2.KeyboardEvent<HTMLElement>;
371
- target: HTMLElement;
372
617
  type: typeof Home;
373
618
  } | {
374
619
  event: React_2.KeyboardEvent<HTMLElement>;
375
- target: HTMLElement;
376
620
  type: typeof End;
377
- };
621
+ });
378
622
 
379
623
  export declare type TreeNavigationEvent_unstable = TreeNavigationData_unstable['event'];
380
624
 
381
625
  export declare type TreeOpenChangeData = {
382
626
  open: boolean;
627
+ openItems: Set<TreeItemValue>;
628
+ value: TreeItemValue;
629
+ target: HTMLElement;
383
630
  } & ({
384
631
  event: React_2.MouseEvent<HTMLElement>;
385
- target: HTMLElement;
386
632
  type: 'ExpandIconClick';
387
633
  } | {
388
634
  event: React_2.MouseEvent<HTMLElement>;
389
- target: HTMLElement;
390
635
  type: 'Click';
391
636
  } | {
392
637
  event: React_2.KeyboardEvent<HTMLElement>;
393
- target: HTMLElement;
394
638
  type: typeof Enter;
395
639
  } | {
396
640
  event: React_2.KeyboardEvent<HTMLElement>;
397
- target: HTMLElement;
398
641
  type: typeof ArrowRight;
399
642
  } | {
400
643
  event: React_2.KeyboardEvent<HTMLElement>;
401
- target: HTMLElement;
402
644
  type: typeof ArrowLeft;
403
645
  });
404
646
 
@@ -423,13 +665,12 @@ export declare type TreeProps = ComponentProps<TreeSlots> & {
423
665
  * Controls the state of the open tree items.
424
666
  * These property is ignored for subtrees.
425
667
  */
426
- openItems?: Iterable<TreeItemId>;
668
+ openItems?: Iterable<TreeItemValue>;
427
669
  /**
428
- * This refers to a list of ids of opened tree items.
429
- * Default value for the uncontrolled state of open tree items.
430
- * These property is ignored for subtrees.
670
+ * This refers to a list of ids of default opened items.
671
+ * This property is ignored for subtrees.
431
672
  */
432
- defaultOpenItems?: Iterable<TreeItemId>;
673
+ defaultOpenItems?: Iterable<TreeItemValue>;
433
674
  /**
434
675
  * Callback fired when the component changes value from open state.
435
676
  * These property is ignored for subtrees.
@@ -448,19 +689,57 @@ export declare type TreeProps = ComponentProps<TreeSlots> & {
448
689
  * @param event - a React's Synthetic event
449
690
  * @param data - A data object with relevant information,
450
691
  */
451
- onNavigation_unstable?(event: TreeNavigationEvent_unstable, data: TreeNavigationData_unstable): void;
692
+ onNavigation?(event: TreeNavigationEvent_unstable, data: TreeNavigationData_unstable): void;
693
+ /**
694
+ * This refers to the selection mode of the tree.
695
+ * - undefined: No selection can be done.
696
+ * - 'single': Only one tree item can be selected, radio buttons are rendered.
697
+ * - 'multiselect': Multiple tree items can be selected, checkboxes are rendered.
698
+ *
699
+ * @default undefined
700
+ */
701
+ selectionMode?: SelectionMode_2;
702
+ /**
703
+ * This refers to a list of ids of checked tree items, or a list of tuples of ids and checked state.
704
+ * Controls the state of the checked tree items.
705
+ * These property is ignored for subtrees.
706
+ */
707
+ checkedItems?: Iterable<TreeItemValue | [TreeItemValue, TreeSelectionValue]>;
708
+ /**
709
+ * Callback fired when the component changes value from checked state.
710
+ * These property is ignored for subtrees.
711
+ *
712
+ * @param event - a React's Synthetic event
713
+ * @param data - A data object with relevant information,
714
+ * such as checked value and type of interaction that created the event.
715
+ */
716
+ onCheckedChange?(event: TreeCheckedChangeEvent, data: TreeCheckedChangeData): void;
452
717
  };
453
718
 
454
719
  export declare const TreeProvider: Provider<TreeContextValue | undefined> & FC<ProviderProps<TreeContextValue | undefined>>;
455
720
 
456
- export declare type TreeSlots = {
721
+ export declare type TreeSelectionValue = MultiSelectValue | SingleSelectValue;
722
+
723
+ declare type TreeSlots = {
457
724
  root: Slot<'div'>;
458
725
  };
726
+ export { TreeSlots as FlatTreeSlots }
727
+ export { TreeSlots }
459
728
 
460
729
  /**
461
730
  * State used in rendering Tree
462
731
  */
463
- export declare type TreeState = ComponentState<TreeSlots> & TreeContextValue;
732
+ declare type TreeState = ComponentState<TreeSlots> & TreeContextValue & {
733
+ open: boolean;
734
+ };
735
+ export { TreeState as FlatTreeState }
736
+ export { TreeState }
737
+
738
+ export declare const useFlatTree_unstable: (props: FlatTreeProps, ref: React_2.Ref<HTMLElement>) => TreeState;
739
+
740
+ export declare const useFlatTreeContextValues_unstable: (state: TreeState) => TreeContextValues;
741
+
742
+ export declare const useFlatTreeStyles_unstable: (state: TreeState) => TreeState;
464
743
 
465
744
  /**
466
745
  * this hook provides FlatTree API to manage all required mechanisms to convert a list of items into renderable TreeItems
@@ -471,20 +750,11 @@ export declare type TreeState = ComponentState<TreeSlots> & TreeContextValue;
471
750
  * It should be used on cases where more complex interactions with a Tree is required.
472
751
  * On simple scenarios it is advised to simply use a nested structure instead.
473
752
  *
474
- * @param flatTreeItemProps - a list of tree items
753
+ * @param props - a list of tree items
475
754
  * @param options - in case control over the internal openItems is required
476
755
  */
477
- export declare function useFlatTree_unstable(flatTreeItemProps: FlatTreeItemProps[], options?: Pick<TreeProps, 'openItems' | 'defaultOpenItems'>): FlatTree;
756
+ export declare function useHeadlessFlatTree_unstable<Props extends HeadlessTreeItemProps>(props: Props[], options?: HeadlessFlatTreeOptions): HeadlessFlatTree<Props>;
478
757
 
479
- /**
480
- * Create the state required to render Tree.
481
- *
482
- * The returned state can be modified with hooks such as useTreeStyles_unstable,
483
- * before being passed to renderTree_unstable.
484
- *
485
- * @param props - props from this instance of Tree
486
- * @param ref - reference to root HTMLElement of Tree
487
- */
488
758
  export declare const useTree_unstable: (props: TreeProps, ref: React_2.Ref<HTMLElement>) => TreeState;
489
759
 
490
760
  export declare const useTreeContext_unstable: <T>(selector: ContextSelector<TreeContextValue, T>) => T;
@@ -500,9 +770,11 @@ export declare function useTreeContextValues_unstable(state: TreeState): TreeCon
500
770
  * @param props - props from this instance of TreeItem
501
771
  * @param ref - reference to root HTMLElement of TreeItem
502
772
  */
503
- export declare const useTreeItem_unstable: (props: TreeItemProps, ref: React_2.Ref<HTMLDivElement>) => TreeItemState;
773
+ export declare function useTreeItem_unstable(props: TreeItemProps, ref: React_2.Ref<HTMLDivElement>): TreeItemState;
774
+
775
+ export declare const useTreeItemContext_unstable: <T>(selector: ContextSelector<TreeItemContextValue, T>) => T;
504
776
 
505
- export declare const useTreeItemContext_unstable: () => TreeItemContextValue;
777
+ export declare function useTreeItemContextValues_unstable(state: TreeItemState): TreeItemContextValues;
506
778
 
507
779
  /**
508
780
  * Create the state required to render TreeItemLayout.