@fluentui/react-tree 9.0.0-beta.2 → 9.0.0-beta.20

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 (267) hide show
  1. package/CHANGELOG.json +1028 -1
  2. package/CHANGELOG.md +281 -2
  3. package/dist/index.d.ts +244 -99
  4. package/lib/Tree.js +0 -1
  5. package/lib/Tree.js.map +1 -1
  6. package/lib/TreeItem.js +0 -1
  7. package/lib/TreeItem.js.map +1 -1
  8. package/lib/TreeItemAside.js +1 -0
  9. package/lib/TreeItemAside.js.map +1 -0
  10. package/lib/TreeItemLayout.js +0 -1
  11. package/lib/TreeItemLayout.js.map +1 -1
  12. package/lib/TreeItemPersonaLayout.js +0 -1
  13. package/lib/TreeItemPersonaLayout.js.map +1 -1
  14. package/lib/components/Tree/Tree.js +6 -8
  15. package/lib/components/Tree/Tree.js.map +1 -1
  16. package/lib/components/Tree/Tree.types.js +1 -2
  17. package/lib/components/Tree/Tree.types.js.map +1 -1
  18. package/lib/components/Tree/index.js +1 -2
  19. package/lib/components/Tree/index.js.map +1 -1
  20. package/lib/components/Tree/renderTree.js +7 -13
  21. package/lib/components/Tree/renderTree.js.map +1 -1
  22. package/lib/components/Tree/useRootTree.js +145 -0
  23. package/lib/components/Tree/useRootTree.js.map +1 -0
  24. package/lib/components/Tree/useSubtree.js +35 -0
  25. package/lib/components/Tree/useSubtree.js.map +1 -0
  26. package/lib/components/Tree/useTree.js +9 -103
  27. package/lib/components/Tree/useTree.js.map +1 -1
  28. package/lib/components/Tree/useTreeContextValues.js +12 -22
  29. package/lib/components/Tree/useTreeContextValues.js.map +1 -1
  30. package/lib/components/Tree/useTreeStyles.styles.js +30 -0
  31. package/lib/components/Tree/useTreeStyles.styles.js.map +1 -0
  32. package/lib/components/TreeItem/TreeItem.js +16 -9
  33. package/lib/components/TreeItem/TreeItem.js.map +1 -1
  34. package/lib/components/TreeItem/TreeItem.types.js +1 -2
  35. package/lib/components/TreeItem/TreeItem.types.js.map +1 -1
  36. package/lib/components/TreeItem/index.js +1 -2
  37. package/lib/components/TreeItem/index.js.map +1 -1
  38. package/lib/components/TreeItem/renderTreeItem.js +7 -25
  39. package/lib/components/TreeItem/renderTreeItem.js.map +1 -1
  40. package/lib/components/TreeItem/useTreeItem.js +114 -234
  41. package/lib/components/TreeItem/useTreeItem.js.map +1 -1
  42. package/lib/components/TreeItem/useTreeItemContextValues.js +18 -16
  43. package/lib/components/TreeItem/useTreeItemContextValues.js.map +1 -1
  44. package/lib/components/TreeItem/useTreeItemStyles.styles.js +102 -0
  45. package/lib/components/TreeItem/useTreeItemStyles.styles.js.map +1 -0
  46. package/lib/components/TreeItemAside/TreeItemAside.js +13 -0
  47. package/lib/components/TreeItemAside/TreeItemAside.js.map +1 -0
  48. package/lib/components/TreeItemAside/TreeItemAside.types.js +1 -0
  49. package/lib/components/TreeItemAside/TreeItemAside.types.js.map +1 -0
  50. package/lib/components/TreeItemAside/index.js +5 -0
  51. package/lib/components/TreeItemAside/index.js.map +1 -0
  52. package/lib/components/TreeItemAside/renderTreeItemAside.js +14 -0
  53. package/lib/components/TreeItemAside/renderTreeItemAside.js.map +1 -0
  54. package/lib/components/TreeItemAside/useTreeItemAside.js +30 -0
  55. package/lib/components/TreeItemAside/useTreeItemAside.js.map +1 -0
  56. package/lib/components/TreeItemAside/useTreeItemAsideStyles.styles.js +47 -0
  57. package/lib/components/TreeItemAside/useTreeItemAsideStyles.styles.js.map +1 -0
  58. package/lib/components/TreeItemChevron.js +24 -0
  59. package/lib/components/TreeItemChevron.js.map +1 -0
  60. package/lib/components/TreeItemLayout/TreeItemLayout.js +8 -8
  61. package/lib/components/TreeItemLayout/TreeItemLayout.js.map +1 -1
  62. package/lib/components/TreeItemLayout/TreeItemLayout.types.js +1 -2
  63. package/lib/components/TreeItemLayout/TreeItemLayout.types.js.map +1 -1
  64. package/lib/components/TreeItemLayout/index.js +1 -2
  65. package/lib/components/TreeItemLayout/index.js.map +1 -1
  66. package/lib/components/TreeItemLayout/renderTreeItemLayout.js +5 -21
  67. package/lib/components/TreeItemLayout/renderTreeItemLayout.js.map +1 -1
  68. package/lib/components/TreeItemLayout/useTreeItemLayout.js +38 -39
  69. package/lib/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
  70. package/lib/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js +138 -0
  71. package/lib/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js.map +1 -0
  72. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js +9 -9
  73. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js.map +1 -1
  74. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js +1 -2
  75. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js.map +1 -1
  76. package/lib/components/TreeItemPersonaLayout/index.js +1 -2
  77. package/lib/components/TreeItemPersonaLayout/index.js.map +1 -1
  78. package/lib/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js +7 -27
  79. package/lib/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js.map +1 -1
  80. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js +37 -48
  81. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js.map +1 -1
  82. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js +9 -10
  83. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js.map +1 -1
  84. package/lib/components/TreeItemPersonaLayout/{useTreeItemPersonaLayoutStyles.js → useTreeItemPersonaLayoutStyles.styles.js} +51 -30
  85. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js.map +1 -0
  86. package/lib/contexts/index.js +0 -1
  87. package/lib/contexts/index.js.map +1 -1
  88. package/lib/contexts/treeContext.js +9 -14
  89. package/lib/contexts/treeContext.js.map +1 -1
  90. package/lib/contexts/treeItemContext.js +13 -10
  91. package/lib/contexts/treeItemContext.js.map +1 -1
  92. package/lib/hooks/index.js +0 -1
  93. package/lib/hooks/index.js.map +1 -1
  94. package/lib/hooks/useFlatTree.js +71 -34
  95. package/lib/hooks/useFlatTree.js.map +1 -1
  96. package/lib/hooks/useFlatTreeNavigation.js +62 -62
  97. package/lib/hooks/useFlatTreeNavigation.js.map +1 -1
  98. package/lib/hooks/useHTMLElementWalker.js +78 -76
  99. package/lib/hooks/useHTMLElementWalker.js.map +1 -1
  100. package/lib/hooks/useNestedTreeNavigation.js +49 -49
  101. package/lib/hooks/useNestedTreeNavigation.js.map +1 -1
  102. package/lib/hooks/useOpenItemsState.js +18 -15
  103. package/lib/hooks/useOpenItemsState.js.map +1 -1
  104. package/lib/hooks/useRovingTabIndexes.js +46 -45
  105. package/lib/hooks/useRovingTabIndexes.js.map +1 -1
  106. package/lib/index.js +1 -1
  107. package/lib/index.js.map +1 -1
  108. package/lib/utils/ImmutableSet.js +27 -30
  109. package/lib/utils/ImmutableSet.js.map +1 -1
  110. package/lib/utils/assert.js +5 -5
  111. package/lib/utils/assert.js.map +1 -1
  112. package/lib/utils/createFlatTreeItems.js +120 -0
  113. package/lib/utils/createFlatTreeItems.js.map +1 -0
  114. package/lib/utils/flattenTree.js +58 -28
  115. package/lib/utils/flattenTree.js.map +1 -1
  116. package/lib/utils/nextTypeAheadElement.js +11 -12
  117. package/lib/utils/nextTypeAheadElement.js.map +1 -1
  118. package/lib/utils/normalizeOpenItems.js +6 -5
  119. package/lib/utils/normalizeOpenItems.js.map +1 -1
  120. package/lib/utils/tokens.js +13 -14
  121. package/lib/utils/tokens.js.map +1 -1
  122. package/lib/utils/treeItemFilter.js +2 -3
  123. package/lib/utils/treeItemFilter.js.map +1 -1
  124. package/lib-commonjs/Tree.js +3 -5
  125. package/lib-commonjs/Tree.js.map +1 -1
  126. package/lib-commonjs/TreeItem.js +3 -5
  127. package/lib-commonjs/TreeItem.js.map +1 -1
  128. package/lib-commonjs/TreeItemAside.js +6 -0
  129. package/lib-commonjs/TreeItemAside.js.map +1 -0
  130. package/lib-commonjs/TreeItemLayout.js +3 -5
  131. package/lib-commonjs/TreeItemLayout.js.map +1 -1
  132. package/lib-commonjs/TreeItemPersonaLayout.js +3 -5
  133. package/lib-commonjs/TreeItemPersonaLayout.js.map +1 -1
  134. package/lib-commonjs/components/Tree/Tree.js +17 -23
  135. package/lib-commonjs/components/Tree/Tree.js.map +1 -1
  136. package/lib-commonjs/components/Tree/Tree.types.js +3 -3
  137. package/lib-commonjs/components/Tree/Tree.types.js.map +1 -1
  138. package/lib-commonjs/components/Tree/index.js +8 -10
  139. package/lib-commonjs/components/Tree/index.js.map +1 -1
  140. package/lib-commonjs/components/Tree/renderTree.js +14 -19
  141. package/lib-commonjs/components/Tree/renderTree.js.map +1 -1
  142. package/lib-commonjs/components/Tree/useRootTree.js +149 -0
  143. package/lib-commonjs/components/Tree/useRootTree.js.map +1 -0
  144. package/lib-commonjs/components/Tree/useSubtree.js +39 -0
  145. package/lib-commonjs/components/Tree/useSubtree.js.map +1 -0
  146. package/lib-commonjs/components/Tree/useTree.js +16 -116
  147. package/lib-commonjs/components/Tree/useTree.js.map +1 -1
  148. package/lib-commonjs/components/Tree/useTreeContextValues.js +17 -26
  149. package/lib-commonjs/components/Tree/useTreeContextValues.js.map +1 -1
  150. package/lib-commonjs/components/Tree/useTreeStyles.styles.js +53 -0
  151. package/lib-commonjs/components/Tree/useTreeStyles.styles.js.map +1 -0
  152. package/lib-commonjs/components/TreeItem/TreeItem.js +17 -18
  153. package/lib-commonjs/components/TreeItem/TreeItem.js.map +1 -1
  154. package/lib-commonjs/components/TreeItem/TreeItem.types.js +3 -4
  155. package/lib-commonjs/components/TreeItem/TreeItem.types.js.map +1 -1
  156. package/lib-commonjs/components/TreeItem/index.js +7 -9
  157. package/lib-commonjs/components/TreeItem/index.js.map +1 -1
  158. package/lib-commonjs/components/TreeItem/renderTreeItem.js +14 -33
  159. package/lib-commonjs/components/TreeItem/renderTreeItem.js.map +1 -1
  160. package/lib-commonjs/components/TreeItem/useTreeItem.js +124 -251
  161. package/lib-commonjs/components/TreeItem/useTreeItem.js.map +1 -1
  162. package/lib-commonjs/components/TreeItem/useTreeItemContextValues.js +23 -20
  163. package/lib-commonjs/components/TreeItem/useTreeItemContextValues.js.map +1 -1
  164. package/lib-commonjs/components/TreeItem/useTreeItemStyles.styles.js +206 -0
  165. package/lib-commonjs/components/TreeItem/useTreeItemStyles.styles.js.map +1 -0
  166. package/lib-commonjs/components/TreeItemAside/TreeItemAside.js +19 -0
  167. package/lib-commonjs/components/TreeItemAside/TreeItemAside.js.map +1 -0
  168. package/lib-commonjs/components/TreeItemAside/TreeItemAside.types.js +4 -0
  169. package/lib-commonjs/components/TreeItemAside/TreeItemAside.types.js.map +1 -0
  170. package/lib-commonjs/components/TreeItemAside/index.js +10 -0
  171. package/lib-commonjs/components/TreeItemAside/index.js.map +1 -0
  172. package/lib-commonjs/components/TreeItemAside/renderTreeItemAside.js +20 -0
  173. package/lib-commonjs/components/TreeItemAside/renderTreeItemAside.js.map +1 -0
  174. package/lib-commonjs/components/TreeItemAside/useTreeItemAside.js +31 -0
  175. package/lib-commonjs/components/TreeItemAside/useTreeItemAside.js.map +1 -0
  176. package/lib-commonjs/components/TreeItemAside/useTreeItemAsideStyles.styles.js +90 -0
  177. package/lib-commonjs/components/TreeItemAside/useTreeItemAsideStyles.styles.js.map +1 -0
  178. package/lib-commonjs/components/TreeItemChevron.js +33 -0
  179. package/lib-commonjs/components/TreeItemChevron.js.map +1 -0
  180. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.js +15 -16
  181. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.js.map +1 -1
  182. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.types.js +1 -3
  183. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.types.js.map +1 -1
  184. package/lib-commonjs/components/TreeItemLayout/index.js +7 -9
  185. package/lib-commonjs/components/TreeItemLayout/index.js.map +1 -1
  186. package/lib-commonjs/components/TreeItemLayout/renderTreeItemLayout.js +11 -28
  187. package/lib-commonjs/components/TreeItemLayout/renderTreeItemLayout.js.map +1 -1
  188. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js +45 -52
  189. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
  190. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js +221 -0
  191. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js.map +1 -0
  192. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js +17 -18
  193. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js.map +1 -1
  194. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js +1 -3
  195. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js.map +1 -1
  196. package/lib-commonjs/components/TreeItemPersonaLayout/index.js +7 -9
  197. package/lib-commonjs/components/TreeItemPersonaLayout/index.js.map +1 -1
  198. package/lib-commonjs/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js +14 -35
  199. package/lib-commonjs/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js.map +1 -1
  200. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js +44 -61
  201. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js.map +1 -1
  202. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js +16 -15
  203. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js.map +1 -1
  204. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js +230 -0
  205. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js.map +1 -0
  206. package/lib-commonjs/contexts/index.js +4 -6
  207. package/lib-commonjs/contexts/index.js.map +1 -1
  208. package/lib-commonjs/contexts/treeContext.js +23 -18
  209. package/lib-commonjs/contexts/treeContext.js.map +1 -1
  210. package/lib-commonjs/contexts/treeItemContext.js +27 -13
  211. package/lib-commonjs/contexts/treeItemContext.js.map +1 -1
  212. package/lib-commonjs/hooks/index.js +5 -7
  213. package/lib-commonjs/hooks/index.js.map +1 -1
  214. package/lib-commonjs/hooks/useFlatTree.js +79 -52
  215. package/lib-commonjs/hooks/useFlatTree.js.map +1 -1
  216. package/lib-commonjs/hooks/useFlatTreeNavigation.js +73 -72
  217. package/lib-commonjs/hooks/useFlatTreeNavigation.js.map +1 -1
  218. package/lib-commonjs/hooks/useHTMLElementWalker.js +92 -83
  219. package/lib-commonjs/hooks/useHTMLElementWalker.js.map +1 -1
  220. package/lib-commonjs/hooks/useNestedTreeNavigation.js +59 -58
  221. package/lib-commonjs/hooks/useNestedTreeNavigation.js.map +1 -1
  222. package/lib-commonjs/hooks/useOpenItemsState.js +27 -22
  223. package/lib-commonjs/hooks/useOpenItemsState.js.map +1 -1
  224. package/lib-commonjs/hooks/useRovingTabIndexes.js +54 -53
  225. package/lib-commonjs/hooks/useRovingTabIndexes.js.map +1 -1
  226. package/lib-commonjs/index.js +52 -181
  227. package/lib-commonjs/index.js.map +1 -1
  228. package/lib-commonjs/utils/ImmutableSet.js +37 -38
  229. package/lib-commonjs/utils/ImmutableSet.js.map +1 -1
  230. package/lib-commonjs/utils/assert.js +11 -9
  231. package/lib-commonjs/utils/assert.js.map +1 -1
  232. package/lib-commonjs/utils/createFlatTreeItems.js +132 -0
  233. package/lib-commonjs/utils/createFlatTreeItems.js.map +1 -0
  234. package/lib-commonjs/utils/flattenTree.js +25 -33
  235. package/lib-commonjs/utils/flattenTree.js.map +1 -1
  236. package/lib-commonjs/utils/nextTypeAheadElement.js +16 -16
  237. package/lib-commonjs/utils/nextTypeAheadElement.js.map +1 -1
  238. package/lib-commonjs/utils/normalizeOpenItems.js +11 -9
  239. package/lib-commonjs/utils/normalizeOpenItems.js.map +1 -1
  240. package/lib-commonjs/utils/tokens.js +28 -20
  241. package/lib-commonjs/utils/tokens.js.map +1 -1
  242. package/lib-commonjs/utils/treeItemFilter.js +7 -7
  243. package/lib-commonjs/utils/treeItemFilter.js.map +1 -1
  244. package/package.json +23 -17
  245. package/lib/components/Tree/useTreeStyles.js +0 -20
  246. package/lib/components/Tree/useTreeStyles.js.map +0 -1
  247. package/lib/components/TreeItem/useTreeItemStyles.js +0 -203
  248. package/lib/components/TreeItem/useTreeItemStyles.js.map +0 -1
  249. package/lib/components/TreeItemLayout/useTreeItemLayoutStyles.js +0 -98
  250. package/lib/components/TreeItemLayout/useTreeItemLayoutStyles.js.map +0 -1
  251. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.js.map +0 -1
  252. package/lib/utils/createUnfilteredFlatTree.js +0 -77
  253. package/lib/utils/createUnfilteredFlatTree.js.map +0 -1
  254. package/lib/utils/createVisibleFlatTree.js +0 -80
  255. package/lib/utils/createVisibleFlatTree.js.map +0 -1
  256. package/lib-commonjs/components/Tree/useTreeStyles.js +0 -27
  257. package/lib-commonjs/components/Tree/useTreeStyles.js.map +0 -1
  258. package/lib-commonjs/components/TreeItem/useTreeItemStyles.js +0 -210
  259. package/lib-commonjs/components/TreeItem/useTreeItemStyles.js.map +0 -1
  260. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.js +0 -105
  261. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.js.map +0 -1
  262. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.js +0 -122
  263. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.js.map +0 -1
  264. package/lib-commonjs/utils/createUnfilteredFlatTree.js +0 -84
  265. package/lib-commonjs/utils/createUnfilteredFlatTree.js.map +0 -1
  266. package/lib-commonjs/utils/createVisibleFlatTree.js +0 -87
  267. package/lib-commonjs/utils/createVisibleFlatTree.js.map +0 -1
@@ -1,2 +1 @@
1
- import { treeItemLevelToken } from '../../utils/tokens';
2
- //# sourceMappingURL=TreeItem.types.js.map
1
+ import * as React from 'react';
@@ -1 +1 @@
1
- {"version":3,"file":"TreeItem.types.js","sourceRoot":"../src/","sources":["packages/react-components/react-tree/src/components/TreeItem/TreeItem.types.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC","sourcesContent":["import type { ComponentProps, ComponentState, ExtractSlotProps, Slot } from '@fluentui/react-utilities';\nimport type { ButtonContextValue } from '@fluentui/react-button';\nimport type { TreeItemContextValue } from '../../contexts';\nimport { treeItemLevelToken } from '../../utils/tokens';\nimport * as React from 'react';\n\nexport type TreeItemCSSProperties = React.CSSProperties & { [treeItemLevelToken]?: string | number };\n\nexport type TreeItemSlots = {\n root: Slot<ExtractSlotProps<Slot<'div'> & { style?: TreeItemCSSProperties }>>;\n content: NonNullable<Slot<'div'>>;\n subtree?: Slot<'span'>;\n /**\n * Expand icon slot,\n * by default renders a chevron icon to indicate opening and closing\n */\n expandIcon?: Slot<'span'>;\n /**\n * Actions slot that renders on the end of tree item\n * when the item is hovered/focused\n */\n actions?: Slot<'span'>;\n};\n\nexport type TreeItemContextValues = {\n treeItem: TreeItemContextValue;\n button: ButtonContextValue;\n};\n\n/**\n * TreeItem Props\n */\nexport type TreeItemProps = ComponentProps<Partial<TreeItemSlots>> & {\n /**\n * If a TreeItem is a leaf, it'll not present the `expandIcon` slot by default.\n * This attribute is used to force the decision if a TreeItem is a leaf or not. By not providing this property\n * this will be inferred by the presence of a subtree as part of the TreeItem children.\n */\n leaf?: boolean;\n};\n\n/**\n * State used in rendering TreeItem\n */\nexport type TreeItemState = ComponentState<TreeItemSlots> & {\n open: boolean;\n isLeaf: boolean;\n level: number;\n /**\n * By design, a button included on the actions slot should be small\n */\n buttonSize: 'small';\n isActionsVisible: boolean;\n};\n"]}
1
+ {"version":3,"sources":["TreeItem.types.ts"],"sourcesContent":["import type { ComponentProps, ComponentState, ExtractSlotProps, Slot } from '@fluentui/react-utilities';\nimport type { TreeItemContextValue } from '../../contexts';\nimport { treeItemLevelToken } from '../../utils/tokens';\nimport * as React from 'react';\n\nexport type TreeItemCSSProperties = React.CSSProperties & { [treeItemLevelToken]?: string | number };\n\nexport type TreeItemType = 'leaf' | 'branch';\n\nexport type TreeItemSlots = {\n root: Slot<ExtractSlotProps<Slot<'div'> & { style?: TreeItemCSSProperties }>>;\n};\n\nexport type TreeItemContextValues = { treeItem: TreeItemContextValue };\n\n/**\n * TreeItem Props\n */\nexport type TreeItemProps<Value = string> = ComponentProps<Partial<TreeItemSlots>> & {\n value?: Value;\n itemType: TreeItemType;\n};\n\n/**\n * State used in rendering TreeItem\n */\nexport type TreeItemState = ComponentState<TreeItemSlots> &\n TreeItemContextValue & {\n level: number;\n itemType: TreeItemType;\n };\n"],"names":["React"],"mappings":"AAGA,YAAYA,WAAW,QAAQ"}
@@ -2,5 +2,4 @@ export * from './TreeItem';
2
2
  export * from './TreeItem.types';
3
3
  export * from './renderTreeItem';
4
4
  export * from './useTreeItem';
5
- export * from './useTreeItemStyles';
6
- //# sourceMappingURL=index.js.map
5
+ export * from './useTreeItemStyles.styles';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../src/","sources":["packages/react-components/react-tree/src/components/TreeItem/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC","sourcesContent":["export * from './TreeItem';\nexport * from './TreeItem.types';\nexport * from './renderTreeItem';\nexport * from './useTreeItem';\nexport * from './useTreeItemStyles';\n"]}
1
+ {"version":3,"sources":["index.ts"],"sourcesContent":["export * from './TreeItem';\nexport * from './TreeItem.types';\nexport * from './renderTreeItem';\nexport * from './useTreeItem';\nexport * from './useTreeItemStyles.styles';\n"],"names":[],"mappings":"AAAA,cAAc,aAAa;AAC3B,cAAc,mBAAmB;AACjC,cAAc,mBAAmB;AACjC,cAAc,gBAAgB;AAC9B,cAAc,6BAA6B"}
@@ -1,29 +1,11 @@
1
- import * as React from 'react';
2
- import { getSlots } from '@fluentui/react-utilities';
1
+ /** @jsxRuntime classic */ /** @jsx createElement */ import { createElement } from '@fluentui/react-jsx-runtime';
2
+ import { getSlotsNext } from '@fluentui/react-utilities';
3
3
  import { TreeItemProvider } from '../../contexts';
4
- import { ButtonContextProvider } from '@fluentui/react-button';
5
4
  /**
6
5
  * Render the final JSX of TreeItem
7
- */
8
- export const renderTreeItem_unstable = (state, contextValues) => {
9
- const {
10
- slots,
11
- slotProps
12
- } = getSlots(state);
13
- return /*#__PURE__*/React.createElement(TreeItemProvider, {
14
- value: contextValues.treeItem
15
- }, /*#__PURE__*/React.createElement(slots.root, {
16
- ...slotProps.root
17
- }, /*#__PURE__*/React.createElement(slots.content, {
18
- ...slotProps.content
19
- }, slots.expandIcon && /*#__PURE__*/React.createElement(slots.expandIcon, {
20
- ...slotProps.expandIcon
21
- }), slotProps.content.children, /*#__PURE__*/React.createElement(ButtonContextProvider, {
22
- value: contextValues.button
23
- }, slots.actions && /*#__PURE__*/React.createElement(slots.actions, {
24
- ...slotProps.actions
25
- }))), state.open && slots.subtree && /*#__PURE__*/React.createElement(slots.subtree, {
26
- ...slotProps.subtree
27
- })));
6
+ */ export const renderTreeItem_unstable = (state, contextValues)=>{
7
+ const { slots , slotProps } = getSlotsNext(state);
8
+ return /*#__PURE__*/ createElement(slots.root, slotProps.root, /*#__PURE__*/ createElement(TreeItemProvider, {
9
+ value: contextValues.treeItem
10
+ }, slotProps.root.children));
28
11
  };
29
- //# sourceMappingURL=renderTreeItem.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","getSlots","TreeItemProvider","ButtonContextProvider","renderTreeItem_unstable","state","contextValues","slots","slotProps","createElement","value","treeItem","root","content","expandIcon","children","button","actions","open","subtree"],"sources":["../src/packages/react-components/react-tree/src/components/TreeItem/renderTreeItem.tsx"],"sourcesContent":["import * as React from 'react';\nimport { getSlots } from '@fluentui/react-utilities';\nimport type { TreeItemState, TreeItemSlots, TreeItemContextValues } from './TreeItem.types';\nimport { TreeItemProvider } from '../../contexts';\nimport { ButtonContextProvider } from '@fluentui/react-button';\n\n/**\n * Render the final JSX of TreeItem\n */\nexport const renderTreeItem_unstable = (state: TreeItemState, contextValues: TreeItemContextValues) => {\n const { slots, slotProps } = getSlots<TreeItemSlots>(state);\n\n return (\n <TreeItemProvider value={contextValues.treeItem}>\n <slots.root {...slotProps.root}>\n <slots.content {...slotProps.content}>\n {slots.expandIcon && <slots.expandIcon {...slotProps.expandIcon} />}\n {slotProps.content.children}\n <ButtonContextProvider value={contextValues.button}>\n {slots.actions && <slots.actions {...slotProps.actions} />}\n </ButtonContextProvider>\n </slots.content>\n {state.open && slots.subtree && <slots.subtree {...slotProps.subtree} />}\n </slots.root>\n </TreeItemProvider>\n );\n};\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,QAAQ,QAAQ,2BAA2B;AAEpD,SAASC,gBAAgB,QAAQ,gBAAgB;AACjD,SAASC,qBAAqB,QAAQ,wBAAwB;AAE9D;;;AAGA,OAAO,MAAMC,uBAAuB,GAAGA,CAACC,KAAoB,EAAEC,aAAoC,KAAI;EACpG,MAAM;IAAEC,KAAK;IAAEC;EAAS,CAAE,GAAGP,QAAQ,CAAgBI,KAAK,CAAC;EAE3D,oBACEL,KAAA,CAAAS,aAAA,CAACP,gBAAgB;IAACQ,KAAK,EAAEJ,aAAa,CAACK;EAAQ,gBAC7CX,KAAA,CAAAS,aAAA,CAACF,KAAK,CAACK,IAAI;IAAA,GAAKJ,SAAS,CAACI;EAAI,gBAC5BZ,KAAA,CAAAS,aAAA,CAACF,KAAK,CAACM,OAAO;IAAA,GAAKL,SAAS,CAACK;EAAO,GACjCN,KAAK,CAACO,UAAU,iBAAId,KAAA,CAAAS,aAAA,CAACF,KAAK,CAACO,UAAU;IAAA,GAAKN,SAAS,CAACM;EAAU,EAAI,EAClEN,SAAS,CAACK,OAAO,CAACE,QAAQ,eAC3Bf,KAAA,CAAAS,aAAA,CAACN,qBAAqB;IAACO,KAAK,EAAEJ,aAAa,CAACU;EAAM,GAC/CT,KAAK,CAACU,OAAO,iBAAIjB,KAAA,CAAAS,aAAA,CAACF,KAAK,CAACU,OAAO;IAAA,GAAKT,SAAS,CAACS;EAAO,EAAI,CACpC,CACV,EACfZ,KAAK,CAACa,IAAI,IAAIX,KAAK,CAACY,OAAO,iBAAInB,KAAA,CAAAS,aAAA,CAACF,KAAK,CAACY,OAAO;IAAA,GAAKX,SAAS,CAACW;EAAO,EAAI,CAC7D,CACI;AAEvB,CAAC"}
1
+ {"version":3,"sources":["renderTreeItem.tsx"],"sourcesContent":["/** @jsxRuntime classic */\n/** @jsx createElement */\n\nimport { createElement } from '@fluentui/react-jsx-runtime';\nimport { getSlotsNext } from '@fluentui/react-utilities';\nimport type { TreeItemState, TreeItemSlots, TreeItemContextValues } from './TreeItem.types';\nimport { TreeItemProvider } from '../../contexts';\n\n/**\n * Render the final JSX of TreeItem\n */\nexport const renderTreeItem_unstable = (state: TreeItemState, contextValues: TreeItemContextValues) => {\n const { slots, slotProps } = getSlotsNext<TreeItemSlots>(state);\n\n return (\n <slots.root {...slotProps.root}>\n <TreeItemProvider value={contextValues.treeItem}>{slotProps.root.children}</TreeItemProvider>\n </slots.root>\n );\n};\n"],"names":["createElement","getSlotsNext","TreeItemProvider","renderTreeItem_unstable","state","contextValues","slots","slotProps","root","value","treeItem","children"],"mappings":"AAAA,wBAAwB,GACxB,uBAAuB,GAEvB,SAASA,aAAa,QAAQ,8BAA8B;AAC5D,SAASC,YAAY,QAAQ,4BAA4B;AAEzD,SAASC,gBAAgB,QAAQ,iBAAiB;AAElD;;CAEC,GACD,OAAO,MAAMC,0BAA0B,CAACC,OAAsBC,gBAAyC;IACrG,MAAM,EAAEC,MAAK,EAAEC,UAAS,EAAE,GAAGN,aAA4BG;IAEzD,qBACE,AAdJ,cAcKE,MAAME,IAAI,EAAKD,UAAUC,IAAI,gBAC5B,AAfN,cAeON;QAAiBO,OAAOJ,cAAcK,QAAQ;OAAGH,UAAUC,IAAI,CAACG,QAAQ;AAG/E,EAAE"}
@@ -1,11 +1,6 @@
1
1
  import * as React from 'react';
2
- import { getNativeElementProps, isResolvedShorthand, resolveShorthand, useId } from '@fluentui/react-utilities';
3
- import { ChevronRight12Regular } from '@fluentui/react-icons';
4
- import { useFluent_unstable } from '@fluentui/react-shared-contexts';
2
+ import { getNativeElementProps, useId, useMergedRefs } from '@fluentui/react-utilities';
5
3
  import { useEventCallback } from '@fluentui/react-utilities';
6
- import { expandIconInlineStyles } from './useTreeItemStyles';
7
- import { ArrowDown, ArrowLeft, ArrowRight, ArrowUp, End, Enter, Home } from '@fluentui/keyboard-keys';
8
- import { useMergedRefs } from '@fluentui/react-utilities';
9
4
  import { elementContains } from '@fluentui/react-portal';
10
5
  import { useTreeContext_unstable } from '../../contexts/index';
11
6
  import { treeDataTypes } from '../../utils/tokens';
@@ -17,234 +12,119 @@ import { treeDataTypes } from '../../utils/tokens';
17
12
  *
18
13
  * @param props - props from this instance of TreeItem
19
14
  * @param ref - reference to root HTMLElement of TreeItem
20
- */
21
- export const useTreeItem_unstable = (props, ref) => {
22
- const [children, subtreeChildren] = React.Children.toArray(props.children);
23
- const contextLevel = useTreeContext_unstable(ctx => ctx.level);
24
- const {
25
- content,
26
- subtree,
27
- expandIcon,
28
- leaf: isLeaf = subtreeChildren === undefined,
29
- actions,
30
- as = 'div',
31
- onClick,
32
- onKeyDown,
33
- ['aria-level']: level = contextLevel,
34
- ...rest
35
- } = props;
36
- const requestOpenChange = useTreeContext_unstable(ctx => ctx.requestOpenChange);
37
- const requestNavigation = useTreeContext_unstable(ctx => ctx.requestNavigation);
38
- const id = useId('fui-TreeItem-', props.id);
39
- const isBranch = !isLeaf;
40
- const open = useTreeContext_unstable(ctx => isBranch && ctx.openItems.has(id));
41
- const {
42
- dir,
43
- targetDocument
44
- } = useFluent_unstable();
45
- const expandIconRotation = open ? 90 : dir !== 'rtl' ? 0 : 180;
46
- const actionsRef = React.useRef(null);
47
- const expandIconRef = React.useRef(null);
48
- const subtreeRef = React.useRef(null);
49
- const handleArrowRight = event => {
50
- if (!open && isBranch) {
51
- return requestOpenChange({
52
- event,
53
- open: true,
54
- type: treeDataTypes.arrowRight,
55
- target: event.currentTarget
56
- });
57
- }
58
- if (open && isBranch) {
59
- return requestNavigation({
60
- event,
61
- type: treeDataTypes.arrowRight,
62
- target: event.currentTarget
63
- });
64
- }
65
- };
66
- const handleArrowLeft = event => {
67
- if (open && isBranch) {
68
- return requestOpenChange({
69
- event,
70
- open: false,
71
- type: treeDataTypes.arrowLeft,
72
- target: event.currentTarget
73
- });
74
- }
75
- if (!open && level > 1) {
76
- return requestNavigation({
77
- event,
78
- target: event.currentTarget,
79
- type: treeDataTypes.arrowLeft
80
- });
81
- }
82
- };
83
- const handleEnter = event => {
84
- requestOpenChange({
85
- event,
86
- open: isLeaf ? open : !open,
87
- type: treeDataTypes.enter,
88
- target: event.currentTarget
15
+ */ export function useTreeItem_unstable(props, ref) {
16
+ const contextLevel = useTreeContext_unstable((ctx)=>ctx.level);
17
+ const id = useId('fui-TreeItem-', props.id);
18
+ const { onClick , onKeyDown , as ='div' , value =id , itemType ='leaf' , 'aria-level': level = contextLevel , ...rest } = props;
19
+ const requestTreeResponse = useTreeContext_unstable((ctx)=>ctx.requestTreeResponse);
20
+ const [isActionsVisible, setActionsVisible] = React.useState(false);
21
+ const [isAsideVisible, setAsideVisible] = React.useState(true);
22
+ const handleActionsRef = (actions)=>{
23
+ setAsideVisible(actions === null);
24
+ };
25
+ const open = useTreeContext_unstable((ctx)=>ctx.openItems.has(value));
26
+ const actionsRef = React.useRef(null);
27
+ const expandIconRef = React.useRef(null);
28
+ const layoutRef = React.useRef(null);
29
+ const subtreeRef = React.useRef(null);
30
+ const handleClick = useEventCallback((event)=>{
31
+ onClick === null || onClick === void 0 ? void 0 : onClick(event);
32
+ if (event.isDefaultPrevented()) {
33
+ return;
34
+ }
35
+ const isEventFromActions = actionsRef.current && elementContains(actionsRef.current, event.target);
36
+ if (isEventFromActions) {
37
+ return;
38
+ }
39
+ const isEventFromSubtree = subtreeRef.current && elementContains(subtreeRef.current, event.target);
40
+ if (isEventFromSubtree) {
41
+ return;
42
+ }
43
+ const isFromExpandIcon = expandIconRef.current && elementContains(expandIconRef.current, event.target);
44
+ requestTreeResponse({
45
+ event,
46
+ itemType,
47
+ value,
48
+ type: isFromExpandIcon ? treeDataTypes.ExpandIconClick : treeDataTypes.Click
49
+ });
89
50
  });
90
- };
91
- const handleClick = useEventCallback(event => {
92
- onClick === null || onClick === void 0 ? void 0 : onClick(event);
93
- const isEventFromActions = actionsRef.current && elementContains(actionsRef.current, event.target);
94
- if (isEventFromActions) {
95
- return;
96
- }
97
- const isEventFromSubtree = subtreeRef.current && elementContains(subtreeRef.current, event.target);
98
- if (isEventFromSubtree) {
99
- return;
100
- }
101
- const isFromExpandIcon = expandIconRef.current && elementContains(expandIconRef.current, event.target);
102
- requestOpenChange({
103
- event,
104
- open: isLeaf ? open : !open,
105
- type: isFromExpandIcon ? treeDataTypes.expandIconClick : treeDataTypes.click,
106
- target: event.currentTarget
51
+ const handleKeyDown = useEventCallback((event)=>{
52
+ onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
53
+ if (event.isDefaultPrevented()) {
54
+ return;
55
+ }
56
+ if (event.currentTarget !== event.target) {
57
+ return;
58
+ }
59
+ switch(event.key){
60
+ case treeDataTypes.End:
61
+ case treeDataTypes.Home:
62
+ case treeDataTypes.Enter:
63
+ case treeDataTypes.ArrowUp:
64
+ case treeDataTypes.ArrowDown:
65
+ case treeDataTypes.ArrowLeft:
66
+ case treeDataTypes.ArrowRight:
67
+ return requestTreeResponse({
68
+ event,
69
+ itemType,
70
+ value,
71
+ type: event.key
72
+ });
73
+ }
74
+ const isTypeAheadCharacter = event.key.length === 1 && event.key.match(/\w/) && !event.altKey && !event.ctrlKey && !event.metaKey;
75
+ if (isTypeAheadCharacter) {
76
+ requestTreeResponse({
77
+ event,
78
+ itemType,
79
+ value,
80
+ type: treeDataTypes.TypeAhead
81
+ });
82
+ }
107
83
  });
108
- requestNavigation({
109
- event,
110
- target: event.currentTarget,
111
- type: treeDataTypes.click
84
+ const handleActionsVisible = useEventCallback((event)=>{
85
+ const isTargetFromSubtree = Boolean(subtreeRef.current && elementContains(subtreeRef.current, event.target));
86
+ if (!isTargetFromSubtree) {
87
+ setActionsVisible(true);
88
+ }
112
89
  });
113
- });
114
- const handleKeyDown = useEventCallback(event => {
115
- onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
116
- if (event.currentTarget !== event.target) {
117
- return;
118
- }
119
- if (event.isDefaultPrevented()) {
120
- return;
121
- }
122
- switch (event.key) {
123
- case Enter:
124
- return handleEnter(event);
125
- case ArrowRight:
126
- return handleArrowRight(event);
127
- case ArrowLeft:
128
- return handleArrowLeft(event);
129
- case End:
130
- return requestNavigation({
131
- event,
132
- type: treeDataTypes.end,
133
- target: event.currentTarget
134
- });
135
- case Home:
136
- return requestNavigation({
137
- event,
138
- type: treeDataTypes.home,
139
- target: event.currentTarget
140
- });
141
- case ArrowUp:
142
- return requestNavigation({
143
- event,
144
- type: treeDataTypes.arrowUp,
145
- target: event.currentTarget
146
- });
147
- case ArrowDown:
148
- return requestNavigation({
149
- event,
150
- type: treeDataTypes.arrowDown,
151
- target: event.currentTarget
152
- });
153
- }
154
- const isTypeAheadCharacter = event.key.length === 1 && event.key.match(/\w/) && !event.altKey && !event.ctrlKey && !event.metaKey;
155
- if (isTypeAheadCharacter) {
156
- return requestNavigation({
157
- event,
158
- target: event.currentTarget,
159
- type: treeDataTypes.typeAhead
160
- });
161
- }
162
- });
163
- const [isActionsVisible, setActionsVisible] = React.useState(false);
164
- const showActions = useEventCallback(event => {
165
- const isEventFromSubtree = subtreeRef.current && elementContains(subtreeRef.current, event.target);
166
- if (!isEventFromSubtree) {
167
- setActionsVisible(true);
168
- }
169
- });
170
- const hideActions = useEventCallback(event => {
171
- const isEventFromSubtree = subtreeRef.current && elementContains(subtreeRef.current, event.target);
172
- if (!isEventFromSubtree) {
173
- setActionsVisible(false);
174
- }
175
- });
176
- // Listens to focusout event on the document to ensure treeitem actions visibility on portal scenarios
177
- // TODO: find a better way to ensure this behavior
178
- React.useEffect(() => {
179
- if (actionsRef.current) {
180
- const handleFocusOut = event => {
181
- setActionsVisible(elementContains(actionsRef.current, event.relatedTarget));
182
- };
183
- targetDocument === null || targetDocument === void 0 ? void 0 : targetDocument.addEventListener('focusout', handleFocusOut, {
184
- passive: true
185
- });
186
- return () => {
187
- targetDocument === null || targetDocument === void 0 ? void 0 : targetDocument.removeEventListener('focusout', handleFocusOut);
188
- };
189
- }
190
- }, [targetDocument]);
191
- return {
192
- isLeaf,
193
- open,
194
- level,
195
- buttonSize: 'small',
196
- isActionsVisible: actions ? isActionsVisible : false,
197
- components: {
198
- content: 'div',
199
- root: 'div',
200
- expandIcon: 'span',
201
- actions: 'span',
202
- subtree: 'span'
203
- },
204
- subtree: resolveShorthand(subtree, {
205
- required: Boolean(subtreeChildren),
206
- defaultProps: {
207
- children: subtreeChildren,
208
- ref: useMergedRefs(subtreeRef, isResolvedShorthand(subtree) ? subtree.ref : undefined)
209
- }
210
- }),
211
- content: resolveShorthand(content, {
212
- required: true,
213
- defaultProps: {
214
- children
215
- }
216
- }),
217
- root: getNativeElementProps(as, {
218
- tabIndex: -1,
219
- ...rest,
220
- id,
221
- ref,
222
- children: null,
223
- 'aria-level': level,
224
- 'aria-expanded': isBranch ? open : undefined,
225
- role: 'treeitem',
226
- onClick: handleClick,
227
- onKeyDown: handleKeyDown,
228
- onMouseOver: actions ? showActions : undefined,
229
- onFocus: actions ? showActions : undefined,
230
- onMouseOut: actions ? hideActions : undefined,
231
- onBlur: actions ? hideActions : undefined
232
- }),
233
- expandIcon: resolveShorthand(expandIcon, {
234
- required: isBranch,
235
- defaultProps: {
236
- children: /*#__PURE__*/React.createElement(ChevronRight12Regular, {
237
- style: expandIconInlineStyles[expandIconRotation]
238
- }),
239
- 'aria-hidden': true,
240
- ref: useMergedRefs(isResolvedShorthand(expandIcon) ? expandIcon.ref : undefined, expandIconRef)
241
- }
242
- }),
243
- actions: resolveShorthand(actions, {
244
- defaultProps: {
245
- ref: useMergedRefs(isResolvedShorthand(actions) ? actions.ref : undefined, actionsRef)
246
- }
247
- })
248
- };
249
- };
250
- //# sourceMappingURL=useTreeItem.js.map
90
+ const handleActionsInvisible = useEventCallback((event)=>{
91
+ const isTargetFromSubtree = Boolean(subtreeRef.current && elementContains(subtreeRef.current, event.target));
92
+ const isRelatedTargetFromActions = Boolean(actionsRef.current && elementContains(actionsRef.current, event.relatedTarget));
93
+ if (isRelatedTargetFromActions) {
94
+ return setActionsVisible(true);
95
+ }
96
+ if (!isTargetFromSubtree) {
97
+ return setActionsVisible(false);
98
+ }
99
+ });
100
+ return {
101
+ value,
102
+ open,
103
+ subtreeRef,
104
+ actionsRef: useMergedRefs(actionsRef, handleActionsRef),
105
+ expandIconRef,
106
+ layoutRef,
107
+ itemType,
108
+ isActionsVisible,
109
+ isAsideVisible,
110
+ level,
111
+ components: {
112
+ root: 'div'
113
+ },
114
+ root: getNativeElementProps(as, {
115
+ tabIndex: -1,
116
+ ...rest,
117
+ id,
118
+ ref,
119
+ 'aria-level': level,
120
+ 'aria-expanded': itemType === 'branch' ? open : undefined,
121
+ role: 'treeitem',
122
+ onClick: handleClick,
123
+ onKeyDown: handleKeyDown,
124
+ onMouseOver: handleActionsVisible,
125
+ onFocus: handleActionsVisible,
126
+ onMouseOut: handleActionsInvisible,
127
+ onBlur: handleActionsInvisible
128
+ })
129
+ };
130
+ }
@@ -1 +1 @@
1
- {"version":3,"names":["React","getNativeElementProps","isResolvedShorthand","resolveShorthand","useId","ChevronRight12Regular","useFluent_unstable","useEventCallback","expandIconInlineStyles","ArrowDown","ArrowLeft","ArrowRight","ArrowUp","End","Enter","Home","useMergedRefs","elementContains","useTreeContext_unstable","treeDataTypes","useTreeItem_unstable","props","ref","children","subtreeChildren","Children","toArray","contextLevel","ctx","level","content","subtree","expandIcon","leaf","isLeaf","undefined","actions","as","onClick","onKeyDown","rest","requestOpenChange","requestNavigation","id","isBranch","open","openItems","has","dir","targetDocument","expandIconRotation","actionsRef","useRef","expandIconRef","subtreeRef","handleArrowRight","event","type","arrowRight","target","currentTarget","handleArrowLeft","arrowLeft","handleEnter","enter","handleClick","isEventFromActions","current","isEventFromSubtree","isFromExpandIcon","expandIconClick","click","handleKeyDown","isDefaultPrevented","key","end","home","arrowUp","arrowDown","isTypeAheadCharacter","length","match","altKey","ctrlKey","metaKey","typeAhead","isActionsVisible","setActionsVisible","useState","showActions","hideActions","useEffect","handleFocusOut","relatedTarget","addEventListener","passive","removeEventListener","buttonSize","components","root","required","Boolean","defaultProps","tabIndex","role","onMouseOver","onFocus","onMouseOut","onBlur","createElement","style"],"sources":["../src/packages/react-components/react-tree/src/components/TreeItem/useTreeItem.tsx"],"sourcesContent":["import * as React from 'react';\nimport { getNativeElementProps, isResolvedShorthand, resolveShorthand, useId } from '@fluentui/react-utilities';\nimport { ChevronRight12Regular } from '@fluentui/react-icons';\nimport { useFluent_unstable } from '@fluentui/react-shared-contexts';\nimport { useEventCallback } from '@fluentui/react-utilities';\nimport { expandIconInlineStyles } from './useTreeItemStyles';\nimport { ArrowDown, ArrowLeft, ArrowRight, ArrowUp, End, Enter, Home } from '@fluentui/keyboard-keys';\nimport { useMergedRefs } from '@fluentui/react-utilities';\nimport { elementContains } from '@fluentui/react-portal';\nimport type { TreeItemProps, TreeItemState } from './TreeItem.types';\nimport { useTreeContext_unstable } from '../../contexts/index';\nimport { treeDataTypes } from '../../utils/tokens';\n\n/**\n * Create the state required to render TreeItem.\n *\n * The returned state can be modified with hooks such as useTreeItemStyles_unstable,\n * before being passed to renderTreeItem_unstable.\n *\n * @param props - props from this instance of TreeItem\n * @param ref - reference to root HTMLElement of TreeItem\n */\nexport const useTreeItem_unstable = (props: TreeItemProps, ref: React.Ref<HTMLDivElement>): TreeItemState => {\n const [children, subtreeChildren] = React.Children.toArray(props.children);\n\n const contextLevel = useTreeContext_unstable(ctx => ctx.level);\n const {\n content,\n subtree,\n expandIcon,\n leaf: isLeaf = subtreeChildren === undefined,\n actions,\n as = 'div',\n onClick,\n onKeyDown,\n ['aria-level']: level = contextLevel,\n ...rest\n } = props;\n\n const requestOpenChange = useTreeContext_unstable(ctx => ctx.requestOpenChange);\n const requestNavigation = useTreeContext_unstable(ctx => ctx.requestNavigation);\n\n const id = useId('fui-TreeItem-', props.id);\n\n const isBranch = !isLeaf;\n\n const open = useTreeContext_unstable(ctx => isBranch && ctx.openItems.has(id));\n const { dir, targetDocument } = useFluent_unstable();\n const expandIconRotation = open ? 90 : dir !== 'rtl' ? 0 : 180;\n\n const actionsRef = React.useRef<HTMLElement>(null);\n const expandIconRef = React.useRef<HTMLElement>(null);\n const subtreeRef = React.useRef<HTMLElement>(null);\n\n const handleArrowRight = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!open && isBranch) {\n return requestOpenChange({ event, open: true, type: treeDataTypes.arrowRight, target: event.currentTarget });\n }\n if (open && isBranch) {\n return requestNavigation({ event, type: treeDataTypes.arrowRight, target: event.currentTarget });\n }\n };\n const handleArrowLeft = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (open && isBranch) {\n return requestOpenChange({ event, open: false, type: treeDataTypes.arrowLeft, target: event.currentTarget });\n }\n if (!open && level > 1) {\n return requestNavigation({ event, target: event.currentTarget, type: treeDataTypes.arrowLeft });\n }\n };\n const handleEnter = (event: React.KeyboardEvent<HTMLDivElement>) => {\n requestOpenChange({ event, open: isLeaf ? open : !open, type: treeDataTypes.enter, target: event.currentTarget });\n };\n\n const handleClick = useEventCallback((event: React.MouseEvent<HTMLDivElement>) => {\n onClick?.(event);\n\n const isEventFromActions = actionsRef.current && elementContains(actionsRef.current, event.target as Node);\n if (isEventFromActions) {\n return;\n }\n const isEventFromSubtree = subtreeRef.current && elementContains(subtreeRef.current, event.target as Node);\n if (isEventFromSubtree) {\n return;\n }\n const isFromExpandIcon = expandIconRef.current && elementContains(expandIconRef.current, event.target as Node);\n requestOpenChange({\n event,\n open: isLeaf ? open : !open,\n type: isFromExpandIcon ? treeDataTypes.expandIconClick : treeDataTypes.click,\n target: event.currentTarget,\n });\n requestNavigation({ event, target: event.currentTarget, type: treeDataTypes.click });\n });\n\n const handleKeyDown = useEventCallback((event: React.KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.currentTarget !== event.target) {\n return;\n }\n if (event.isDefaultPrevented()) {\n return;\n }\n switch (event.key) {\n case Enter:\n return handleEnter(event);\n case ArrowRight:\n return handleArrowRight(event);\n case ArrowLeft:\n return handleArrowLeft(event);\n case End:\n return requestNavigation({ event, type: treeDataTypes.end, target: event.currentTarget });\n case Home:\n return requestNavigation({ event, type: treeDataTypes.home, target: event.currentTarget });\n case ArrowUp:\n return requestNavigation({ event, type: treeDataTypes.arrowUp, target: event.currentTarget });\n case ArrowDown:\n return requestNavigation({ event, type: treeDataTypes.arrowDown, target: event.currentTarget });\n }\n const isTypeAheadCharacter =\n event.key.length === 1 && event.key.match(/\\w/) && !event.altKey && !event.ctrlKey && !event.metaKey;\n if (isTypeAheadCharacter) {\n return requestNavigation({ event, target: event.currentTarget, type: treeDataTypes.typeAhead });\n }\n });\n\n const [isActionsVisible, setActionsVisible] = React.useState(false);\n const showActions = useEventCallback((event: React.SyntheticEvent) => {\n const isEventFromSubtree = subtreeRef.current && elementContains(subtreeRef.current, event.target as Node);\n if (!isEventFromSubtree) {\n setActionsVisible(true);\n }\n });\n const hideActions = useEventCallback((event: React.SyntheticEvent) => {\n const isEventFromSubtree = subtreeRef.current && elementContains(subtreeRef.current, event.target as Node);\n if (!isEventFromSubtree) {\n setActionsVisible(false);\n }\n });\n\n // Listens to focusout event on the document to ensure treeitem actions visibility on portal scenarios\n // TODO: find a better way to ensure this behavior\n React.useEffect(() => {\n if (actionsRef.current) {\n const handleFocusOut = (event: FocusEvent) => {\n setActionsVisible(elementContains(actionsRef.current, event.relatedTarget as Node));\n };\n targetDocument?.addEventListener('focusout', handleFocusOut, { passive: true });\n return () => {\n targetDocument?.removeEventListener('focusout', handleFocusOut);\n };\n }\n }, [targetDocument]);\n\n return {\n isLeaf,\n open,\n level,\n buttonSize: 'small',\n isActionsVisible: actions ? isActionsVisible : false,\n components: {\n content: 'div',\n root: 'div',\n expandIcon: 'span',\n actions: 'span',\n subtree: 'span',\n },\n subtree: resolveShorthand(subtree, {\n required: Boolean(subtreeChildren),\n defaultProps: {\n children: subtreeChildren,\n ref: useMergedRefs(subtreeRef, isResolvedShorthand(subtree) ? subtree.ref : undefined),\n },\n }),\n content: resolveShorthand(content, {\n required: true,\n defaultProps: {\n children,\n },\n }),\n root: getNativeElementProps(as, {\n tabIndex: -1,\n ...rest,\n id,\n ref,\n children: null,\n 'aria-level': level,\n 'aria-expanded': isBranch ? open : undefined,\n role: 'treeitem',\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n onMouseOver: actions ? showActions : undefined,\n onFocus: actions ? showActions : undefined,\n onMouseOut: actions ? hideActions : undefined,\n onBlur: actions ? hideActions : undefined,\n }),\n expandIcon: resolveShorthand(expandIcon, {\n required: isBranch,\n defaultProps: {\n children: <ChevronRight12Regular style={expandIconInlineStyles[expandIconRotation]} />,\n 'aria-hidden': true,\n ref: useMergedRefs(isResolvedShorthand(expandIcon) ? expandIcon.ref : undefined, expandIconRef),\n },\n }),\n actions: resolveShorthand(actions, {\n defaultProps: {\n ref: useMergedRefs(isResolvedShorthand(actions) ? actions.ref : undefined, actionsRef),\n },\n }),\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"sources":["useTreeItem.ts"],"sourcesContent":["import * as React from 'react';\nimport { getNativeElementProps, useId, useMergedRefs } from '@fluentui/react-utilities';\nimport { useEventCallback } from '@fluentui/react-utilities';\nimport { elementContains } from '@fluentui/react-portal';\nimport type { TreeItemProps, TreeItemState } from './TreeItem.types';\nimport { useTreeContext_unstable } from '../../contexts/index';\nimport { treeDataTypes } from '../../utils/tokens';\n\n/**\n * Create the state required to render TreeItem.\n *\n * The returned state can be modified with hooks such as useTreeItemStyles_unstable,\n * before being passed to renderTreeItem_unstable.\n *\n * @param props - props from this instance of TreeItem\n * @param ref - reference to root HTMLElement of TreeItem\n */\nexport function useTreeItem_unstable<Value = string>(\n props: TreeItemProps<Value>,\n ref: React.Ref<HTMLDivElement>,\n): TreeItemState {\n const contextLevel = useTreeContext_unstable(ctx => ctx.level);\n\n const id = useId('fui-TreeItem-', props.id);\n\n const {\n onClick,\n onKeyDown,\n as = 'div',\n value = id,\n itemType = 'leaf',\n 'aria-level': level = contextLevel,\n ...rest\n } = props;\n\n const requestTreeResponse = useTreeContext_unstable(ctx => ctx.requestTreeResponse);\n\n const [isActionsVisible, setActionsVisible] = React.useState(false);\n const [isAsideVisible, setAsideVisible] = React.useState(true);\n\n const handleActionsRef = (actions: HTMLDivElement | null) => {\n setAsideVisible(actions === null);\n };\n\n const open = useTreeContext_unstable(ctx => ctx.openItems.has(value));\n\n const actionsRef = React.useRef<HTMLDivElement>(null);\n const expandIconRef = React.useRef<HTMLDivElement>(null);\n const layoutRef = React.useRef<HTMLDivElement>(null);\n const subtreeRef = React.useRef<HTMLDivElement>(null);\n\n const handleClick = useEventCallback((event: React.MouseEvent<HTMLDivElement>) => {\n onClick?.(event);\n if (event.isDefaultPrevented()) {\n return;\n }\n const isEventFromActions = actionsRef.current && elementContains(actionsRef.current, event.target as Node);\n if (isEventFromActions) {\n return;\n }\n const isEventFromSubtree = subtreeRef.current && elementContains(subtreeRef.current, event.target as Node);\n if (isEventFromSubtree) {\n return;\n }\n const isFromExpandIcon = expandIconRef.current && elementContains(expandIconRef.current, event.target as Node);\n requestTreeResponse({\n event,\n itemType,\n value,\n type: isFromExpandIcon ? treeDataTypes.ExpandIconClick : treeDataTypes.Click,\n });\n });\n\n const handleKeyDown = useEventCallback((event: React.KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.isDefaultPrevented()) {\n return;\n }\n if (event.currentTarget !== event.target) {\n return;\n }\n switch (event.key) {\n case treeDataTypes.End:\n case treeDataTypes.Home:\n case treeDataTypes.Enter:\n case treeDataTypes.ArrowUp:\n case treeDataTypes.ArrowDown:\n case treeDataTypes.ArrowLeft:\n case treeDataTypes.ArrowRight:\n return requestTreeResponse({ event, itemType, value, type: event.key });\n }\n const isTypeAheadCharacter =\n event.key.length === 1 && event.key.match(/\\w/) && !event.altKey && !event.ctrlKey && !event.metaKey;\n if (isTypeAheadCharacter) {\n requestTreeResponse({ event, itemType, value, type: treeDataTypes.TypeAhead });\n }\n });\n\n const handleActionsVisible = useEventCallback((event: React.FocusEvent | React.MouseEvent) => {\n const isTargetFromSubtree = Boolean(\n subtreeRef.current && elementContains(subtreeRef.current, event.target as Node),\n );\n if (!isTargetFromSubtree) {\n setActionsVisible(true);\n }\n });\n\n const handleActionsInvisible = useEventCallback((event: React.FocusEvent | React.MouseEvent) => {\n const isTargetFromSubtree = Boolean(\n subtreeRef.current && elementContains(subtreeRef.current, event.target as Node),\n );\n const isRelatedTargetFromActions = Boolean(\n actionsRef.current && elementContains(actionsRef.current, event.relatedTarget as Node),\n );\n if (isRelatedTargetFromActions) {\n return setActionsVisible(true);\n }\n if (!isTargetFromSubtree) {\n return setActionsVisible(false);\n }\n });\n\n return {\n value,\n open,\n subtreeRef,\n actionsRef: useMergedRefs(actionsRef, handleActionsRef),\n expandIconRef,\n layoutRef,\n itemType,\n isActionsVisible,\n isAsideVisible,\n level,\n components: {\n root: 'div',\n },\n root: getNativeElementProps(as, {\n tabIndex: -1,\n ...rest,\n id,\n ref,\n 'aria-level': level,\n 'aria-expanded': itemType === 'branch' ? open : undefined,\n role: 'treeitem',\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n onMouseOver: handleActionsVisible,\n onFocus: handleActionsVisible,\n onMouseOut: handleActionsInvisible,\n onBlur: handleActionsInvisible,\n }),\n };\n}\n"],"names":["React","getNativeElementProps","useId","useMergedRefs","useEventCallback","elementContains","useTreeContext_unstable","treeDataTypes","useTreeItem_unstable","props","ref","contextLevel","ctx","level","id","onClick","onKeyDown","as","value","itemType","rest","requestTreeResponse","isActionsVisible","setActionsVisible","useState","isAsideVisible","setAsideVisible","handleActionsRef","actions","open","openItems","has","actionsRef","useRef","expandIconRef","layoutRef","subtreeRef","handleClick","event","isDefaultPrevented","isEventFromActions","current","target","isEventFromSubtree","isFromExpandIcon","type","ExpandIconClick","Click","handleKeyDown","currentTarget","key","End","Home","Enter","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","isTypeAheadCharacter","length","match","altKey","ctrlKey","metaKey","TypeAhead","handleActionsVisible","isTargetFromSubtree","Boolean","handleActionsInvisible","isRelatedTargetFromActions","relatedTarget","components","root","tabIndex","undefined","role","onMouseOver","onFocus","onMouseOut","onBlur"],"mappings":"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"}
@@ -1,18 +1,20 @@
1
- import * as React from 'react';
2
1
  export function useTreeItemContextValues_unstable(state) {
3
- const {
4
- buttonSize,
5
- isActionsVisible
6
- } = state;
7
- const treeItem = React.useMemo(() => ({
8
- isActionsVisible
9
- }), [isActionsVisible]);
10
- const button = React.useMemo(() => ({
11
- size: buttonSize
12
- }), [buttonSize]);
13
- return {
14
- treeItem,
15
- button
16
- };
2
+ const { value , isActionsVisible , isAsideVisible , actionsRef , itemType , layoutRef , subtreeRef , expandIconRef , open } = state;
3
+ /**
4
+ * This context is created with "@fluentui/react-context-selector",
5
+ * there is no sense to memoize it
6
+ */ const treeItem = {
7
+ isActionsVisible,
8
+ isAsideVisible,
9
+ value,
10
+ actionsRef,
11
+ itemType,
12
+ layoutRef,
13
+ subtreeRef,
14
+ expandIconRef,
15
+ open
16
+ };
17
+ return {
18
+ treeItem
19
+ };
17
20
  }
18
- //# sourceMappingURL=useTreeItemContextValues.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","useTreeItemContextValues_unstable","state","buttonSize","isActionsVisible","treeItem","useMemo","button","size"],"sources":["../src/packages/react-components/react-tree/src/components/TreeItem/useTreeItemContextValues.ts"],"sourcesContent":["import * as React from 'react';\nimport type { ButtonContextValue } from '@fluentui/react-button';\nimport type { TreeItemContextValue } from '../../contexts';\nimport type { TreeItemContextValues, TreeItemState } from './TreeItem.types';\n\nexport function useTreeItemContextValues_unstable(\n state: Pick<TreeItemState, 'buttonSize' | 'isActionsVisible'>,\n): TreeItemContextValues {\n const { buttonSize, isActionsVisible } = state;\n\n const treeItem = React.useMemo<TreeItemContextValue>(() => ({ isActionsVisible }), [isActionsVisible]);\n const button = React.useMemo<ButtonContextValue>(() => ({ size: buttonSize }), [buttonSize]);\n\n return { treeItem, button };\n}\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAK9B,OAAM,SAAUC,iCAAiCA,CAC/CC,KAA6D;EAE7D,MAAM;IAAEC,UAAU;IAAEC;EAAgB,CAAE,GAAGF,KAAK;EAE9C,MAAMG,QAAQ,GAAGL,KAAK,CAACM,OAAO,CAAuB,OAAO;IAAEF;EAAgB,CAAE,CAAC,EAAE,CAACA,gBAAgB,CAAC,CAAC;EACtG,MAAMG,MAAM,GAAGP,KAAK,CAACM,OAAO,CAAqB,OAAO;IAAEE,IAAI,EAAEL;EAAU,CAAE,CAAC,EAAE,CAACA,UAAU,CAAC,CAAC;EAE5F,OAAO;IAAEE,QAAQ;IAAEE;EAAM,CAAE;AAC7B"}
1
+ {"version":3,"sources":["useTreeItemContextValues.ts"],"sourcesContent":["import type { TreeItemContextValue } from '../../contexts';\nimport type { TreeItemContextValues, TreeItemState } from './TreeItem.types';\n\nexport function useTreeItemContextValues_unstable(\n state: Pick<TreeItemState, keyof TreeItemContextValue>,\n): TreeItemContextValues {\n const { value, isActionsVisible, isAsideVisible, actionsRef, itemType, layoutRef, subtreeRef, expandIconRef, open } =\n state;\n\n /**\n * This context is created with \"@fluentui/react-context-selector\",\n * there is no sense to memoize it\n */\n const treeItem: TreeItemContextValue = {\n isActionsVisible,\n isAsideVisible,\n value,\n actionsRef,\n itemType,\n layoutRef,\n subtreeRef,\n expandIconRef,\n open,\n };\n\n return { treeItem };\n}\n"],"names":["useTreeItemContextValues_unstable","state","value","isActionsVisible","isAsideVisible","actionsRef","itemType","layoutRef","subtreeRef","expandIconRef","open","treeItem"],"mappings":"AAGA,OAAO,SAASA,kCACdC,KAAsD,EAC/B;IACvB,MAAM,EAAEC,MAAK,EAAEC,iBAAgB,EAAEC,eAAc,EAAEC,WAAU,EAAEC,SAAQ,EAAEC,UAAS,EAAEC,WAAU,EAAEC,cAAa,EAAEC,KAAI,EAAE,GACjHT;IAEF;;;GAGC,GACD,MAAMU,WAAiC;QACrCR;QACAC;QACAF;QACAG;QACAC;QACAC;QACAC;QACAC;QACAC;IACF;IAEA,OAAO;QAAEC;IAAS;AACpB,CAAC"}