@fluentui/react-tree 9.0.0-beta.16 → 9.0.0-beta.18

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 (239) hide show
  1. package/CHANGELOG.json +127 -1
  2. package/CHANGELOG.md +36 -2
  3. package/lib/Tree.js +0 -1
  4. package/lib/Tree.js.map +1 -1
  5. package/lib/TreeItem.js +0 -1
  6. package/lib/TreeItem.js.map +1 -1
  7. package/lib/TreeItemAside.js +0 -1
  8. package/lib/TreeItemAside.js.map +1 -1
  9. package/lib/TreeItemLayout.js +0 -1
  10. package/lib/TreeItemLayout.js.map +1 -1
  11. package/lib/TreeItemPersonaLayout.js +0 -1
  12. package/lib/TreeItemPersonaLayout.js.map +1 -1
  13. package/lib/components/Tree/Tree.js +5 -7
  14. package/lib/components/Tree/Tree.js.map +1 -1
  15. package/lib/components/Tree/Tree.types.js +0 -1
  16. package/lib/components/Tree/Tree.types.js.map +1 -1
  17. package/lib/components/Tree/index.js +0 -1
  18. package/lib/components/Tree/index.js.map +1 -1
  19. package/lib/components/Tree/renderTree.js +6 -10
  20. package/lib/components/Tree/renderTree.js.map +1 -1
  21. package/lib/components/Tree/useRootTree.js +127 -142
  22. package/lib/components/Tree/useRootTree.js.map +1 -1
  23. package/lib/components/Tree/useSubtree.js +26 -31
  24. package/lib/components/Tree/useSubtree.js.map +1 -1
  25. package/lib/components/Tree/useTree.js +6 -8
  26. package/lib/components/Tree/useTree.js.map +1 -1
  27. package/lib/components/Tree/useTreeContextValues.js +14 -22
  28. package/lib/components/Tree/useTreeContextValues.js.map +1 -1
  29. package/lib/components/Tree/useTreeStyles.styles.js.map +1 -1
  30. package/lib/components/TreeItem/TreeItem.js +5 -7
  31. package/lib/components/TreeItem/TreeItem.js.map +1 -1
  32. package/lib/components/TreeItem/TreeItem.types.js +0 -1
  33. package/lib/components/TreeItem/TreeItem.types.js.map +1 -1
  34. package/lib/components/TreeItem/index.js +0 -1
  35. package/lib/components/TreeItem/index.js.map +1 -1
  36. package/lib/components/TreeItem/renderTreeItem.js +6 -11
  37. package/lib/components/TreeItem/renderTreeItem.js.map +1 -1
  38. package/lib/components/TreeItem/useTreeItem.js +113 -123
  39. package/lib/components/TreeItem/useTreeItem.js.map +1 -1
  40. package/lib/components/TreeItem/useTreeItemContextValues.js +18 -30
  41. package/lib/components/TreeItem/useTreeItemContextValues.js.map +1 -1
  42. package/lib/components/TreeItem/useTreeItemStyles.styles.js +5 -5
  43. package/lib/components/TreeItem/useTreeItemStyles.styles.js.map +1 -1
  44. package/lib/components/TreeItemAside/TreeItemAside.js +4 -6
  45. package/lib/components/TreeItemAside/TreeItemAside.js.map +1 -1
  46. package/lib/components/TreeItemAside/TreeItemAside.types.js +1 -2
  47. package/lib/components/TreeItemAside/TreeItemAside.types.js.map +1 -1
  48. package/lib/components/TreeItemAside/index.js +0 -1
  49. package/lib/components/TreeItemAside/index.js.map +1 -1
  50. package/lib/components/TreeItemAside/renderTreeItemAside.js +9 -14
  51. package/lib/components/TreeItemAside/renderTreeItemAside.js.map +1 -1
  52. package/lib/components/TreeItemAside/useTreeItemAside.js +18 -23
  53. package/lib/components/TreeItemAside/useTreeItemAside.js.map +1 -1
  54. package/lib/components/TreeItemAside/useTreeItemAsideStyles.styles.js.map +1 -1
  55. package/lib/components/TreeItemChevron.js +16 -19
  56. package/lib/components/TreeItemChevron.js.map +1 -1
  57. package/lib/components/TreeItemLayout/TreeItemLayout.js +4 -6
  58. package/lib/components/TreeItemLayout/TreeItemLayout.js.map +1 -1
  59. package/lib/components/TreeItemLayout/TreeItemLayout.types.js +1 -2
  60. package/lib/components/TreeItemLayout/TreeItemLayout.types.js.map +1 -1
  61. package/lib/components/TreeItemLayout/index.js +0 -1
  62. package/lib/components/TreeItemLayout/index.js.map +1 -1
  63. package/lib/components/TreeItemLayout/renderTreeItemLayout.js +4 -9
  64. package/lib/components/TreeItemLayout/renderTreeItemLayout.js.map +1 -1
  65. package/lib/components/TreeItemLayout/useTreeItemLayout.js +35 -42
  66. package/lib/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
  67. package/lib/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js.map +1 -1
  68. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js +5 -7
  69. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js.map +1 -1
  70. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js +1 -2
  71. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js.map +1 -1
  72. package/lib/components/TreeItemPersonaLayout/index.js +0 -1
  73. package/lib/components/TreeItemPersonaLayout/index.js.map +1 -1
  74. package/lib/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js +6 -11
  75. package/lib/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js.map +1 -1
  76. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js +33 -41
  77. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js.map +1 -1
  78. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js +9 -10
  79. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js.map +1 -1
  80. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js.map +1 -1
  81. package/lib/contexts/index.js +0 -1
  82. package/lib/contexts/index.js.map +1 -1
  83. package/lib/contexts/treeContext.js +9 -12
  84. package/lib/contexts/treeContext.js.map +1 -1
  85. package/lib/contexts/treeItemContext.js +12 -15
  86. package/lib/contexts/treeItemContext.js.map +1 -1
  87. package/lib/hooks/index.js +0 -1
  88. package/lib/hooks/index.js.map +1 -1
  89. package/lib/hooks/useFlatTree.js +68 -59
  90. package/lib/hooks/useFlatTree.js.map +1 -1
  91. package/lib/hooks/useFlatTreeNavigation.js +59 -61
  92. package/lib/hooks/useFlatTreeNavigation.js.map +1 -1
  93. package/lib/hooks/useHTMLElementWalker.js +78 -76
  94. package/lib/hooks/useHTMLElementWalker.js.map +1 -1
  95. package/lib/hooks/useNestedTreeNavigation.js +48 -48
  96. package/lib/hooks/useNestedTreeNavigation.js.map +1 -1
  97. package/lib/hooks/useOpenItemsState.js +18 -14
  98. package/lib/hooks/useOpenItemsState.js.map +1 -1
  99. package/lib/hooks/useRovingTabIndexes.js +46 -45
  100. package/lib/hooks/useRovingTabIndexes.js.map +1 -1
  101. package/lib/index.js +0 -1
  102. package/lib/index.js.map +1 -1
  103. package/lib/utils/ImmutableSet.js +27 -30
  104. package/lib/utils/ImmutableSet.js.map +1 -1
  105. package/lib/utils/assert.js +4 -5
  106. package/lib/utils/assert.js.map +1 -1
  107. package/lib/utils/createFlatTreeItems.js +101 -101
  108. package/lib/utils/createFlatTreeItems.js.map +1 -1
  109. package/lib/utils/flattenTree.js +19 -23
  110. package/lib/utils/flattenTree.js.map +1 -1
  111. package/lib/utils/nextTypeAheadElement.js +11 -12
  112. package/lib/utils/nextTypeAheadElement.js.map +1 -1
  113. package/lib/utils/normalizeOpenItems.js +6 -5
  114. package/lib/utils/normalizeOpenItems.js.map +1 -1
  115. package/lib/utils/tokens.js +12 -13
  116. package/lib/utils/tokens.js.map +1 -1
  117. package/lib/utils/treeItemFilter.js +2 -3
  118. package/lib/utils/treeItemFilter.js.map +1 -1
  119. package/lib-commonjs/Tree.js +0 -3
  120. package/lib-commonjs/Tree.js.map +1 -1
  121. package/lib-commonjs/TreeItem.js +0 -3
  122. package/lib-commonjs/TreeItem.js.map +1 -1
  123. package/lib-commonjs/TreeItemAside.js +0 -3
  124. package/lib-commonjs/TreeItemAside.js.map +1 -1
  125. package/lib-commonjs/TreeItemLayout.js +0 -3
  126. package/lib-commonjs/TreeItemLayout.js.map +1 -1
  127. package/lib-commonjs/TreeItemPersonaLayout.js +0 -3
  128. package/lib-commonjs/TreeItemPersonaLayout.js.map +1 -1
  129. package/lib-commonjs/components/Tree/Tree.js +1 -3
  130. package/lib-commonjs/components/Tree/Tree.js.map +1 -1
  131. package/lib-commonjs/components/Tree/Tree.types.js +0 -3
  132. package/lib-commonjs/components/Tree/Tree.types.js.map +1 -1
  133. package/lib-commonjs/components/Tree/index.js +0 -3
  134. package/lib-commonjs/components/Tree/index.js.map +1 -1
  135. package/lib-commonjs/components/Tree/renderTree.js +1 -3
  136. package/lib-commonjs/components/Tree/renderTree.js.map +1 -1
  137. package/lib-commonjs/components/Tree/useRootTree.js +1 -3
  138. package/lib-commonjs/components/Tree/useRootTree.js.map +1 -1
  139. package/lib-commonjs/components/Tree/useSubtree.js +1 -3
  140. package/lib-commonjs/components/Tree/useSubtree.js.map +1 -1
  141. package/lib-commonjs/components/Tree/useTree.js +1 -3
  142. package/lib-commonjs/components/Tree/useTree.js.map +1 -1
  143. package/lib-commonjs/components/Tree/useTreeContextValues.js +4 -6
  144. package/lib-commonjs/components/Tree/useTreeContextValues.js.map +1 -1
  145. package/lib-commonjs/components/Tree/useTreeStyles.styles.js +0 -2
  146. package/lib-commonjs/components/Tree/useTreeStyles.styles.js.map +1 -1
  147. package/lib-commonjs/components/TreeItem/TreeItem.js +1 -3
  148. package/lib-commonjs/components/TreeItem/TreeItem.js.map +1 -1
  149. package/lib-commonjs/components/TreeItem/TreeItem.types.js +0 -3
  150. package/lib-commonjs/components/TreeItem/TreeItem.types.js.map +1 -1
  151. package/lib-commonjs/components/TreeItem/index.js +0 -3
  152. package/lib-commonjs/components/TreeItem/index.js.map +1 -1
  153. package/lib-commonjs/components/TreeItem/renderTreeItem.js +1 -3
  154. package/lib-commonjs/components/TreeItem/renderTreeItem.js.map +1 -1
  155. package/lib-commonjs/components/TreeItem/useTreeItem.js +1 -3
  156. package/lib-commonjs/components/TreeItem/useTreeItem.js.map +1 -1
  157. package/lib-commonjs/components/TreeItem/useTreeItemContextValues.js +4 -6
  158. package/lib-commonjs/components/TreeItem/useTreeItemContextValues.js.map +1 -1
  159. package/lib-commonjs/components/TreeItem/useTreeItemStyles.styles.js +12 -14
  160. package/lib-commonjs/components/TreeItem/useTreeItemStyles.styles.js.map +1 -1
  161. package/lib-commonjs/components/TreeItemAside/TreeItemAside.js +1 -3
  162. package/lib-commonjs/components/TreeItemAside/TreeItemAside.js.map +1 -1
  163. package/lib-commonjs/components/TreeItemAside/TreeItemAside.types.js +0 -3
  164. package/lib-commonjs/components/TreeItemAside/TreeItemAside.types.js.map +1 -1
  165. package/lib-commonjs/components/TreeItemAside/index.js +0 -3
  166. package/lib-commonjs/components/TreeItemAside/index.js.map +1 -1
  167. package/lib-commonjs/components/TreeItemAside/renderTreeItemAside.js +1 -3
  168. package/lib-commonjs/components/TreeItemAside/renderTreeItemAside.js.map +1 -1
  169. package/lib-commonjs/components/TreeItemAside/useTreeItemAside.js +1 -3
  170. package/lib-commonjs/components/TreeItemAside/useTreeItemAside.js.map +1 -1
  171. package/lib-commonjs/components/TreeItemAside/useTreeItemAsideStyles.styles.js +0 -2
  172. package/lib-commonjs/components/TreeItemAside/useTreeItemAsideStyles.styles.js.map +1 -1
  173. package/lib-commonjs/components/TreeItemChevron.js +1 -3
  174. package/lib-commonjs/components/TreeItemChevron.js.map +1 -1
  175. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.js +1 -3
  176. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.js.map +1 -1
  177. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.types.js +0 -3
  178. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.types.js.map +1 -1
  179. package/lib-commonjs/components/TreeItemLayout/index.js +0 -3
  180. package/lib-commonjs/components/TreeItemLayout/index.js.map +1 -1
  181. package/lib-commonjs/components/TreeItemLayout/renderTreeItemLayout.js +1 -3
  182. package/lib-commonjs/components/TreeItemLayout/renderTreeItemLayout.js.map +1 -1
  183. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js +1 -3
  184. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
  185. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js +0 -2
  186. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js.map +1 -1
  187. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js +1 -3
  188. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js.map +1 -1
  189. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js +0 -3
  190. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js.map +1 -1
  191. package/lib-commonjs/components/TreeItemPersonaLayout/index.js +0 -3
  192. package/lib-commonjs/components/TreeItemPersonaLayout/index.js.map +1 -1
  193. package/lib-commonjs/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js +1 -3
  194. package/lib-commonjs/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js.map +1 -1
  195. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js +1 -3
  196. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js.map +1 -1
  197. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js +1 -3
  198. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js.map +1 -1
  199. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js +0 -2
  200. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js.map +1 -1
  201. package/lib-commonjs/contexts/index.js +0 -3
  202. package/lib-commonjs/contexts/index.js.map +1 -1
  203. package/lib-commonjs/contexts/treeContext.js +2 -4
  204. package/lib-commonjs/contexts/treeContext.js.map +1 -1
  205. package/lib-commonjs/contexts/treeItemContext.js +2 -4
  206. package/lib-commonjs/contexts/treeItemContext.js.map +1 -1
  207. package/lib-commonjs/hooks/index.js +0 -3
  208. package/lib-commonjs/hooks/index.js.map +1 -1
  209. package/lib-commonjs/hooks/useFlatTree.js +2 -5
  210. package/lib-commonjs/hooks/useFlatTree.js.map +1 -1
  211. package/lib-commonjs/hooks/useFlatTreeNavigation.js +1 -3
  212. package/lib-commonjs/hooks/useFlatTreeNavigation.js.map +1 -1
  213. package/lib-commonjs/hooks/useHTMLElementWalker.js +1 -3
  214. package/lib-commonjs/hooks/useHTMLElementWalker.js.map +1 -1
  215. package/lib-commonjs/hooks/useNestedTreeNavigation.js +1 -3
  216. package/lib-commonjs/hooks/useNestedTreeNavigation.js.map +1 -1
  217. package/lib-commonjs/hooks/useOpenItemsState.js +1 -3
  218. package/lib-commonjs/hooks/useOpenItemsState.js.map +1 -1
  219. package/lib-commonjs/hooks/useRovingTabIndexes.js +1 -3
  220. package/lib-commonjs/hooks/useRovingTabIndexes.js.map +1 -1
  221. package/lib-commonjs/index.js +0 -3
  222. package/lib-commonjs/index.js.map +1 -1
  223. package/lib-commonjs/utils/ImmutableSet.js +2 -4
  224. package/lib-commonjs/utils/ImmutableSet.js.map +1 -1
  225. package/lib-commonjs/utils/assert.js +1 -3
  226. package/lib-commonjs/utils/assert.js.map +1 -1
  227. package/lib-commonjs/utils/createFlatTreeItems.js +1 -3
  228. package/lib-commonjs/utils/createFlatTreeItems.js.map +1 -1
  229. package/lib-commonjs/utils/flattenTree.js +1 -3
  230. package/lib-commonjs/utils/flattenTree.js.map +1 -1
  231. package/lib-commonjs/utils/nextTypeAheadElement.js +1 -3
  232. package/lib-commonjs/utils/nextTypeAheadElement.js.map +1 -1
  233. package/lib-commonjs/utils/normalizeOpenItems.js +1 -3
  234. package/lib-commonjs/utils/normalizeOpenItems.js.map +1 -1
  235. package/lib-commonjs/utils/tokens.js +1 -3
  236. package/lib-commonjs/utils/tokens.js.map +1 -1
  237. package/lib-commonjs/utils/treeItemFilter.js +1 -3
  238. package/lib-commonjs/utils/treeItemFilter.js.map +1 -1
  239. package/package.json +11 -11
@@ -15,63 +15,72 @@ import { useOpenItemsState } from './useOpenItemsState';
15
15
  *
16
16
  * @param flatTreeItemProps - a list of tree items
17
17
  * @param options - in case control over the internal openItems is required
18
- */
19
- export function useFlatTree_unstable(flatTreeItemProps, options = {}) {
20
- const [openItems, updateOpenItems] = useOpenItemsState(options);
21
- const flatTreeItems = React.useMemo(() => createFlatTreeItems(flatTreeItemProps), [flatTreeItemProps]);
22
- const [navigate, navigationRef] = useFlatTreeNavigation(flatTreeItems);
23
- const handleOpenChange = useEventCallback((event, data) => {
24
- var _options_onOpenChange;
25
- (_options_onOpenChange = options.onOpenChange) === null || _options_onOpenChange === void 0 ? void 0 : _options_onOpenChange.call(options, event, data);
26
- if (!event.isDefaultPrevented()) {
27
- updateOpenItems(data);
28
- }
29
- event.preventDefault();
30
- });
31
- const handleNavigation = useEventCallback((event, data) => {
32
- var _options_onNavigation_unstable;
33
- (_options_onNavigation_unstable = options.onNavigation_unstable) === null || _options_onNavigation_unstable === void 0 ? void 0 : _options_onNavigation_unstable.call(options, event, data);
34
- if (!event.isDefaultPrevented()) {
35
- navigate(data);
36
- }
37
- event.preventDefault();
38
- });
39
- const getNextNavigableItem = useEventCallback((visibleItems, data) => {
40
- const item = flatTreeItems.get(data.value);
41
- if (item) {
42
- switch (data.type) {
43
- case treeDataTypes.TypeAhead:
44
- return item;
45
- case treeDataTypes.ArrowLeft:
46
- return flatTreeItems.get(item.parentValue);
47
- case treeDataTypes.ArrowRight:
48
- return visibleItems[item.index + 1];
49
- case treeDataTypes.End:
50
- return visibleItems[visibleItems.length - 1];
51
- case treeDataTypes.Home:
52
- return visibleItems[0];
53
- case treeDataTypes.ArrowDown:
54
- return visibleItems[item.index + 1];
55
- case treeDataTypes.ArrowUp:
56
- return visibleItems[item.index - 1];
57
- }
58
- }
59
- });
60
- const getTreeProps = React.useCallback(() => ({
61
- ref: navigationRef,
62
- openItems,
63
- onOpenChange: handleOpenChange,
64
- // eslint-disable-next-line @typescript-eslint/naming-convention
65
- onNavigation_unstable: handleNavigation
66
- }),
67
- // eslint-disable-next-line react-hooks/exhaustive-deps
68
- [openItems]);
69
- const items = React.useCallback(() => VisibleFlatTreeItemGenerator(openItems, flatTreeItems), [openItems, flatTreeItems]);
70
- return React.useMemo(() => ({
71
- navigate,
72
- getTreeProps,
73
- getNextNavigableItem,
74
- items
75
- }), [navigate, getTreeProps, getNextNavigableItem, items]);
18
+ */ export function useFlatTree_unstable(flatTreeItemProps, options = {}) {
19
+ const [openItems, updateOpenItems] = useOpenItemsState(options);
20
+ const flatTreeItems = React.useMemo(()=>createFlatTreeItems(flatTreeItemProps), [
21
+ flatTreeItemProps
22
+ ]);
23
+ const [navigate, navigationRef] = useFlatTreeNavigation(flatTreeItems);
24
+ const handleOpenChange = useEventCallback((event, data)=>{
25
+ var _options_onOpenChange;
26
+ (_options_onOpenChange = options.onOpenChange) === null || _options_onOpenChange === void 0 ? void 0 : _options_onOpenChange.call(options, event, data);
27
+ if (!event.isDefaultPrevented()) {
28
+ updateOpenItems(data);
29
+ }
30
+ event.preventDefault();
31
+ });
32
+ const handleNavigation = useEventCallback((event, data)=>{
33
+ var _options_onNavigation_unstable;
34
+ (_options_onNavigation_unstable = options.onNavigation_unstable) === null || _options_onNavigation_unstable === void 0 ? void 0 : _options_onNavigation_unstable.call(options, event, data);
35
+ if (!event.isDefaultPrevented()) {
36
+ navigate(data);
37
+ }
38
+ event.preventDefault();
39
+ });
40
+ const getNextNavigableItem = useEventCallback((visibleItems, data)=>{
41
+ const item = flatTreeItems.get(data.value);
42
+ if (item) {
43
+ switch(data.type){
44
+ case treeDataTypes.TypeAhead:
45
+ return item;
46
+ case treeDataTypes.ArrowLeft:
47
+ return flatTreeItems.get(item.parentValue);
48
+ case treeDataTypes.ArrowRight:
49
+ return visibleItems[item.index + 1];
50
+ case treeDataTypes.End:
51
+ return visibleItems[visibleItems.length - 1];
52
+ case treeDataTypes.Home:
53
+ return visibleItems[0];
54
+ case treeDataTypes.ArrowDown:
55
+ return visibleItems[item.index + 1];
56
+ case treeDataTypes.ArrowUp:
57
+ return visibleItems[item.index - 1];
58
+ }
59
+ }
60
+ });
61
+ const getTreeProps = React.useCallback(()=>({
62
+ ref: navigationRef,
63
+ openItems,
64
+ onOpenChange: handleOpenChange,
65
+ // eslint-disable-next-line @typescript-eslint/naming-convention
66
+ onNavigation_unstable: handleNavigation
67
+ }), // eslint-disable-next-line react-hooks/exhaustive-deps
68
+ [
69
+ openItems
70
+ ]);
71
+ const items = React.useCallback(()=>VisibleFlatTreeItemGenerator(openItems, flatTreeItems), [
72
+ openItems,
73
+ flatTreeItems
74
+ ]);
75
+ return React.useMemo(()=>({
76
+ navigate,
77
+ getTreeProps,
78
+ getNextNavigableItem,
79
+ items
80
+ }), [
81
+ navigate,
82
+ getTreeProps,
83
+ getNextNavigableItem,
84
+ items
85
+ ]);
76
86
  }
77
- //# sourceMappingURL=useFlatTree.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useEventCallback","React","createFlatTreeItems","VisibleFlatTreeItemGenerator","treeDataTypes","useFlatTreeNavigation","useOpenItemsState","useFlatTree_unstable","flatTreeItemProps","options","openItems","updateOpenItems","flatTreeItems","useMemo","navigate","navigationRef","handleOpenChange","event","data","_options_onOpenChange","onOpenChange","call","isDefaultPrevented","preventDefault","handleNavigation","_options_onNavigation_unstable","onNavigation_unstable","getNextNavigableItem","visibleItems","item","get","value","type","TypeAhead","ArrowLeft","parentValue","ArrowRight","index","End","length","Home","ArrowDown","ArrowUp","getTreeProps","useCallback","ref","items"],"sources":["../../src/hooks/useFlatTree.ts"],"sourcesContent":["import { useEventCallback } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport { createFlatTreeItems, VisibleFlatTreeItemGenerator } from '../utils/createFlatTreeItems';\nimport { treeDataTypes } from '../utils/tokens';\nimport { useFlatTreeNavigation } from './useFlatTreeNavigation';\nimport { useOpenItemsState } from './useOpenItemsState';\nimport type {\n TreeNavigationData_unstable,\n TreeNavigationEvent_unstable,\n TreeOpenChangeData,\n TreeOpenChangeEvent,\n TreeProps,\n} from '../Tree';\nimport type { TreeItemProps } from '../TreeItem';\nimport { ImmutableSet } from '../utils/ImmutableSet';\n\nexport type FlatTreeItemProps<Value = string> = Omit<TreeItemProps<Value>, 'itemType'> &\n Partial<Pick<TreeItemProps<Value>, 'itemType'>> & {\n value: Value;\n parentValue?: Value;\n };\n\n/**\n * The item that is returned by `useFlatTree`, it represents a wrapper around the properties provided to\n * `useFlatTree` but with extra information that might be useful on flat tree scenarios\n */\nexport type FlatTreeItem<Props extends FlatTreeItemProps<unknown> = FlatTreeItemProps> = {\n index: number;\n level: number;\n childrenSize: number;\n value: Props['value'];\n parentValue: Props['parentValue'];\n /**\n * A reference to the element that will render the `TreeItem`,\n * this is necessary for nodes with parents (to ensure child to parent navigation),\n * if a node has no parent then this reference will be null.\n */\n ref: React.RefObject<HTMLDivElement>;\n getTreeItemProps(): Required<Pick<Props, 'value' | 'aria-setsize' | 'aria-level' | 'aria-posinset' | 'itemType'>> &\n Omit<Props, 'parentValue'>;\n};\n\nexport type FlatTreeProps<Value = string> = Required<\n Pick<TreeProps<Value>, 'openItems' | 'onOpenChange' | 'onNavigation_unstable'>\n> & {\n ref: React.Ref<HTMLDivElement>;\n openItems: ImmutableSet<Value>;\n};\n\n/**\n * FlatTree API to manage all required mechanisms to convert a list of items into renderable TreeItems\n * in multiple scenarios including virtualization.\n *\n * !!A flat tree is an unofficial spec for tree!!\n *\n * It should be used on cases where more complex interactions with a Tree is required.\n *\n * On simple scenarios it is advised to simply use a nested structure instead.\n */\nexport type FlatTree<Props extends FlatTreeItemProps<unknown> = FlatTreeItemProps> = {\n /**\n * returns the properties required for the Tree component to work properly.\n * That includes:\n * `openItems`, `onOpenChange`, `onNavigation_unstable` and `ref`\n */\n getTreeProps(): FlatTreeProps<Props['value']>;\n /**\n * internal method used to react to an `onNavigation` event.\n * This method ensures proper navigation on keyboard and mouse interaction.\n * In case of virtualization it might be required to cancel default provided `onNavigation`\n * event and then call this method manually.\n *\n * @example\n * ```ts\n * // react-window\n * const handleNavigation = (event, data) => {\n * event.preventDefault();\n * const nextItem = tree.getNextNavigableItem(data);\n * // scroll to item using virtualization scroll mechanism\n * if (nextItem && document.getElementById(nextItem.id)) {\n * listRef.current.scrollToItem(nextItem.index);\n * }\n * // wait for scrolling to happen and then invoke navigate method\n * requestAnimationFrame(() => {\n * tree.navigate(data);\n * });\n * };\n *```\n */\n navigate(data: TreeNavigationData_unstable<Props['value']>): void;\n /**\n * returns next item to be focused on a navigation.\n * This method is provided to decouple the element that needs to be focused from\n * the action of focusing it itself.\n *\n * On the case of TypeAhead navigation this method returns the current item.\n */\n getNextNavigableItem(\n visibleItems: FlatTreeItem<Props>[],\n data: TreeNavigationData_unstable<Props['value']>,\n ): FlatTreeItem<Props> | undefined;\n /**\n * an iterable containing all visually available flat tree items\n */\n items(): IterableIterator<FlatTreeItem<Props>>;\n};\n\ntype FlatTreeOptions<Props extends FlatTreeItemProps<unknown> = FlatTreeItemProps> = Pick<\n TreeProps<Props['value']>,\n 'openItems' | 'defaultOpenItems' | 'onOpenChange' | 'onNavigation_unstable'\n>;\n\n/**\n * this hook provides FlatTree API to manage all required mechanisms to convert a list of items into renderable TreeItems\n * in multiple scenarios including virtualization.\n *\n * !!A flat tree is an unofficial spec for tree!!\n *\n * It should be used on cases where more complex interactions with a Tree is required.\n * On simple scenarios it is advised to simply use a nested structure instead.\n *\n * @param flatTreeItemProps - a list of tree items\n * @param options - in case control over the internal openItems is required\n */\nexport function useFlatTree_unstable<Props extends FlatTreeItemProps<unknown> = FlatTreeItemProps>(\n flatTreeItemProps: Props[],\n options: FlatTreeOptions<Props> = {},\n): FlatTree<Props> {\n const [openItems, updateOpenItems] = useOpenItemsState<Props['value']>(options);\n const flatTreeItems = React.useMemo(() => createFlatTreeItems(flatTreeItemProps), [flatTreeItemProps]);\n const [navigate, navigationRef] = useFlatTreeNavigation(flatTreeItems);\n\n const handleOpenChange = useEventCallback((event: TreeOpenChangeEvent, data: TreeOpenChangeData<Props['value']>) => {\n options.onOpenChange?.(event, data);\n if (!event.isDefaultPrevented()) {\n updateOpenItems(data);\n }\n event.preventDefault();\n });\n\n const handleNavigation = useEventCallback(\n (event: TreeNavigationEvent_unstable, data: TreeNavigationData_unstable<Props['value']>) => {\n options.onNavigation_unstable?.(event, data);\n if (!event.isDefaultPrevented()) {\n navigate(data);\n }\n event.preventDefault();\n },\n );\n\n const getNextNavigableItem = useEventCallback(\n (visibleItems: FlatTreeItem<Props>[], data: TreeNavigationData_unstable<Props['value']>) => {\n const item = flatTreeItems.get(data.value);\n if (item) {\n switch (data.type) {\n case treeDataTypes.TypeAhead:\n return item;\n case treeDataTypes.ArrowLeft:\n return flatTreeItems.get(item.parentValue!);\n case treeDataTypes.ArrowRight:\n return visibleItems[item.index + 1];\n case treeDataTypes.End:\n return visibleItems[visibleItems.length - 1];\n case treeDataTypes.Home:\n return visibleItems[0];\n case treeDataTypes.ArrowDown:\n return visibleItems[item.index + 1];\n case treeDataTypes.ArrowUp:\n return visibleItems[item.index - 1];\n }\n }\n },\n );\n\n const getTreeProps = React.useCallback(\n () => ({\n ref: navigationRef as React.Ref<HTMLDivElement>,\n openItems,\n onOpenChange: handleOpenChange,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onNavigation_unstable: handleNavigation,\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [openItems],\n );\n\n const items = React.useCallback(\n () => VisibleFlatTreeItemGenerator(openItems, flatTreeItems),\n [openItems, flatTreeItems],\n );\n\n return React.useMemo(\n () => ({ navigate, getTreeProps, getNextNavigableItem, items }),\n [navigate, getTreeProps, getNextNavigableItem, items],\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"sources":["useFlatTree.ts"],"sourcesContent":["import { useEventCallback } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport { createFlatTreeItems, VisibleFlatTreeItemGenerator } from '../utils/createFlatTreeItems';\nimport { treeDataTypes } from '../utils/tokens';\nimport { useFlatTreeNavigation } from './useFlatTreeNavigation';\nimport { useOpenItemsState } from './useOpenItemsState';\nimport type {\n TreeNavigationData_unstable,\n TreeNavigationEvent_unstable,\n TreeOpenChangeData,\n TreeOpenChangeEvent,\n TreeProps,\n} from '../Tree';\nimport type { TreeItemProps } from '../TreeItem';\nimport { ImmutableSet } from '../utils/ImmutableSet';\n\nexport type FlatTreeItemProps<Value = string> = Omit<TreeItemProps<Value>, 'itemType'> &\n Partial<Pick<TreeItemProps<Value>, 'itemType'>> & {\n value: Value;\n parentValue?: Value;\n };\n\n/**\n * The item that is returned by `useFlatTree`, it represents a wrapper around the properties provided to\n * `useFlatTree` but with extra information that might be useful on flat tree scenarios\n */\nexport type FlatTreeItem<Props extends FlatTreeItemProps<unknown> = FlatTreeItemProps> = {\n index: number;\n level: number;\n childrenSize: number;\n value: Props['value'];\n parentValue: Props['parentValue'];\n /**\n * A reference to the element that will render the `TreeItem`,\n * this is necessary for nodes with parents (to ensure child to parent navigation),\n * if a node has no parent then this reference will be null.\n */\n ref: React.RefObject<HTMLDivElement>;\n getTreeItemProps(): Required<Pick<Props, 'value' | 'aria-setsize' | 'aria-level' | 'aria-posinset' | 'itemType'>> &\n Omit<Props, 'parentValue'>;\n};\n\nexport type FlatTreeProps<Value = string> = Required<\n Pick<TreeProps<Value>, 'openItems' | 'onOpenChange' | 'onNavigation_unstable'>\n> & {\n ref: React.Ref<HTMLDivElement>;\n openItems: ImmutableSet<Value>;\n};\n\n/**\n * FlatTree API to manage all required mechanisms to convert a list of items into renderable TreeItems\n * in multiple scenarios including virtualization.\n *\n * !!A flat tree is an unofficial spec for tree!!\n *\n * It should be used on cases where more complex interactions with a Tree is required.\n *\n * On simple scenarios it is advised to simply use a nested structure instead.\n */\nexport type FlatTree<Props extends FlatTreeItemProps<unknown> = FlatTreeItemProps> = {\n /**\n * returns the properties required for the Tree component to work properly.\n * That includes:\n * `openItems`, `onOpenChange`, `onNavigation_unstable` and `ref`\n */\n getTreeProps(): FlatTreeProps<Props['value']>;\n /**\n * internal method used to react to an `onNavigation` event.\n * This method ensures proper navigation on keyboard and mouse interaction.\n * In case of virtualization it might be required to cancel default provided `onNavigation`\n * event and then call this method manually.\n *\n * @example\n * ```ts\n * // react-window\n * const handleNavigation = (event, data) => {\n * event.preventDefault();\n * const nextItem = tree.getNextNavigableItem(data);\n * // scroll to item using virtualization scroll mechanism\n * if (nextItem && document.getElementById(nextItem.id)) {\n * listRef.current.scrollToItem(nextItem.index);\n * }\n * // wait for scrolling to happen and then invoke navigate method\n * requestAnimationFrame(() => {\n * tree.navigate(data);\n * });\n * };\n *```\n */\n navigate(data: TreeNavigationData_unstable<Props['value']>): void;\n /**\n * returns next item to be focused on a navigation.\n * This method is provided to decouple the element that needs to be focused from\n * the action of focusing it itself.\n *\n * On the case of TypeAhead navigation this method returns the current item.\n */\n getNextNavigableItem(\n visibleItems: FlatTreeItem<Props>[],\n data: TreeNavigationData_unstable<Props['value']>,\n ): FlatTreeItem<Props> | undefined;\n /**\n * an iterable containing all visually available flat tree items\n */\n items(): IterableIterator<FlatTreeItem<Props>>;\n};\n\ntype FlatTreeOptions<Props extends FlatTreeItemProps<unknown> = FlatTreeItemProps> = Pick<\n TreeProps<Props['value']>,\n 'openItems' | 'defaultOpenItems' | 'onOpenChange' | 'onNavigation_unstable'\n>;\n\n/**\n * this hook provides FlatTree API to manage all required mechanisms to convert a list of items into renderable TreeItems\n * in multiple scenarios including virtualization.\n *\n * !!A flat tree is an unofficial spec for tree!!\n *\n * It should be used on cases where more complex interactions with a Tree is required.\n * On simple scenarios it is advised to simply use a nested structure instead.\n *\n * @param flatTreeItemProps - a list of tree items\n * @param options - in case control over the internal openItems is required\n */\nexport function useFlatTree_unstable<Props extends FlatTreeItemProps<unknown> = FlatTreeItemProps>(\n flatTreeItemProps: Props[],\n options: FlatTreeOptions<Props> = {},\n): FlatTree<Props> {\n const [openItems, updateOpenItems] = useOpenItemsState<Props['value']>(options);\n const flatTreeItems = React.useMemo(() => createFlatTreeItems(flatTreeItemProps), [flatTreeItemProps]);\n const [navigate, navigationRef] = useFlatTreeNavigation(flatTreeItems);\n\n const handleOpenChange = useEventCallback((event: TreeOpenChangeEvent, data: TreeOpenChangeData<Props['value']>) => {\n options.onOpenChange?.(event, data);\n if (!event.isDefaultPrevented()) {\n updateOpenItems(data);\n }\n event.preventDefault();\n });\n\n const handleNavigation = useEventCallback(\n (event: TreeNavigationEvent_unstable, data: TreeNavigationData_unstable<Props['value']>) => {\n options.onNavigation_unstable?.(event, data);\n if (!event.isDefaultPrevented()) {\n navigate(data);\n }\n event.preventDefault();\n },\n );\n\n const getNextNavigableItem = useEventCallback(\n (visibleItems: FlatTreeItem<Props>[], data: TreeNavigationData_unstable<Props['value']>) => {\n const item = flatTreeItems.get(data.value);\n if (item) {\n switch (data.type) {\n case treeDataTypes.TypeAhead:\n return item;\n case treeDataTypes.ArrowLeft:\n return flatTreeItems.get(item.parentValue!);\n case treeDataTypes.ArrowRight:\n return visibleItems[item.index + 1];\n case treeDataTypes.End:\n return visibleItems[visibleItems.length - 1];\n case treeDataTypes.Home:\n return visibleItems[0];\n case treeDataTypes.ArrowDown:\n return visibleItems[item.index + 1];\n case treeDataTypes.ArrowUp:\n return visibleItems[item.index - 1];\n }\n }\n },\n );\n\n const getTreeProps = React.useCallback(\n () => ({\n ref: navigationRef as React.Ref<HTMLDivElement>,\n openItems,\n onOpenChange: handleOpenChange,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onNavigation_unstable: handleNavigation,\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [openItems],\n );\n\n const items = React.useCallback(\n () => VisibleFlatTreeItemGenerator(openItems, flatTreeItems),\n [openItems, flatTreeItems],\n );\n\n return React.useMemo(\n () => ({ navigate, getTreeProps, getNextNavigableItem, items }),\n [navigate, getTreeProps, getNextNavigableItem, items],\n );\n}\n"],"names":["useEventCallback","React","createFlatTreeItems","VisibleFlatTreeItemGenerator","treeDataTypes","useFlatTreeNavigation","useOpenItemsState","useFlatTree_unstable","flatTreeItemProps","options","openItems","updateOpenItems","flatTreeItems","useMemo","navigate","navigationRef","handleOpenChange","event","data","onOpenChange","isDefaultPrevented","preventDefault","handleNavigation","onNavigation_unstable","getNextNavigableItem","visibleItems","item","get","value","type","TypeAhead","ArrowLeft","parentValue","ArrowRight","index","End","length","Home","ArrowDown","ArrowUp","getTreeProps","useCallback","ref","items"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,4BAA4B;AAC7D,YAAYC,WAAW,QAAQ;AAC/B,SAASC,mBAAmB,EAAEC,4BAA4B,QAAQ,+BAA+B;AACjG,SAASC,aAAa,QAAQ,kBAAkB;AAChD,SAASC,qBAAqB,QAAQ,0BAA0B;AAChE,SAASC,iBAAiB,QAAQ,sBAAsB;AA2GxD;;;;;;;;;;;CAWC,GACD,OAAO,SAASC,qBACdC,iBAA0B,EAC1BC,UAAkC,CAAC,CAAC,EACnB;IACjB,MAAM,CAACC,WAAWC,gBAAgB,GAAGL,kBAAkCG;IACvE,MAAMG,gBAAgBX,MAAMY,OAAO,CAAC,IAAMX,oBAAoBM,oBAAoB;QAACA;KAAkB;IACrG,MAAM,CAACM,UAAUC,cAAc,GAAGV,sBAAsBO;IAExD,MAAMI,mBAAmBhB,iBAAiB,CAACiB,OAA4BC,OAA6C;YAClHT;QAAAA,CAAAA,wBAAAA,QAAQU,YAAY,cAApBV,mCAAAA,KAAAA,IAAAA,sBAAAA,KAAAA,SAAuBQ,OAAOC;QAC9B,IAAI,CAACD,MAAMG,kBAAkB,IAAI;YAC/BT,gBAAgBO;QAClB,CAAC;QACDD,MAAMI,cAAc;IACtB;IAEA,MAAMC,mBAAmBtB,iBACvB,CAACiB,OAAqCC,OAAsD;YAC1FT;QAAAA,CAAAA,iCAAAA,QAAQc,qBAAqB,cAA7Bd,4CAAAA,KAAAA,IAAAA,+BAAAA,KAAAA,SAAgCQ,OAAOC;QACvC,IAAI,CAACD,MAAMG,kBAAkB,IAAI;YAC/BN,SAASI;QACX,CAAC;QACDD,MAAMI,cAAc;IACtB;IAGF,MAAMG,uBAAuBxB,iBAC3B,CAACyB,cAAqCP,OAAsD;QAC1F,MAAMQ,OAAOd,cAAce,GAAG,CAACT,KAAKU,KAAK;QACzC,IAAIF,MAAM;YACR,OAAQR,KAAKW,IAAI;gBACf,KAAKzB,cAAc0B,SAAS;oBAC1B,OAAOJ;gBACT,KAAKtB,cAAc2B,SAAS;oBAC1B,OAAOnB,cAAce,GAAG,CAACD,KAAKM,WAAW;gBAC3C,KAAK5B,cAAc6B,UAAU;oBAC3B,OAAOR,YAAY,CAACC,KAAKQ,KAAK,GAAG,EAAE;gBACrC,KAAK9B,cAAc+B,GAAG;oBACpB,OAAOV,YAAY,CAACA,aAAaW,MAAM,GAAG,EAAE;gBAC9C,KAAKhC,cAAciC,IAAI;oBACrB,OAAOZ,YAAY,CAAC,EAAE;gBACxB,KAAKrB,cAAckC,SAAS;oBAC1B,OAAOb,YAAY,CAACC,KAAKQ,KAAK,GAAG,EAAE;gBACrC,KAAK9B,cAAcmC,OAAO;oBACxB,OAAOd,YAAY,CAACC,KAAKQ,KAAK,GAAG,EAAE;YACvC;QACF,CAAC;IACH;IAGF,MAAMM,eAAevC,MAAMwC,WAAW,CACpC,IAAO,CAAA;YACLC,KAAK3B;YACLL;YACAS,cAAcH;YACd,gEAAgE;YAChEO,uBAAuBD;QACzB,CAAA,GACA,uDAAuD;IACvD;QAACZ;KAAU;IAGb,MAAMiC,QAAQ1C,MAAMwC,WAAW,CAC7B,IAAMtC,6BAA6BO,WAAWE,gBAC9C;QAACF;QAAWE;KAAc;IAG5B,OAAOX,MAAMY,OAAO,CAClB,IAAO,CAAA;YAAEC;YAAU0B;YAAchB;YAAsBmB;QAAM,CAAA,GAC7D;QAAC7B;QAAU0B;QAAchB;QAAsBmB;KAAM;AAEzD,CAAC"}
@@ -6,71 +6,69 @@ import { treeItemFilter } from '../utils/treeItemFilter';
6
6
  import { useHTMLElementWalkerRef } from './useHTMLElementWalker';
7
7
  import { useRovingTabIndex } from './useRovingTabIndexes';
8
8
  export function useFlatTreeNavigation(flatTreeItems) {
9
- const {
10
- targetDocument
11
- } = useFluent_unstable();
12
- const [treeItemWalkerRef, treeItemWalkerRootRef] = useHTMLElementWalkerRef(treeItemFilter);
13
- const [{
14
- rove
15
- }, rovingRootRef] = useRovingTabIndex(treeItemFilter);
16
- function getNextElement(data) {
17
- if (!targetDocument || !treeItemWalkerRef.current) {
18
- return null;
9
+ const { targetDocument } = useFluent_unstable();
10
+ const [treeItemWalkerRef, treeItemWalkerRootRef] = useHTMLElementWalkerRef(treeItemFilter);
11
+ const [{ rove }, rovingRootRef] = useRovingTabIndex(treeItemFilter);
12
+ function getNextElement(data) {
13
+ if (!targetDocument || !treeItemWalkerRef.current) {
14
+ return null;
15
+ }
16
+ const treeItemWalker = treeItemWalkerRef.current;
17
+ switch(data.type){
18
+ case treeDataTypes.Click:
19
+ return data.target;
20
+ case treeDataTypes.TypeAhead:
21
+ treeItemWalker.currentElement = data.target;
22
+ return nextTypeAheadElement(treeItemWalker, data.event.key);
23
+ case treeDataTypes.ArrowLeft:
24
+ return parentElement(flatTreeItems, data.value);
25
+ case treeDataTypes.ArrowRight:
26
+ treeItemWalker.currentElement = data.target;
27
+ return firstChild(data.target, treeItemWalker);
28
+ case treeDataTypes.End:
29
+ treeItemWalker.currentElement = treeItemWalker.root;
30
+ return treeItemWalker.lastChild();
31
+ case treeDataTypes.Home:
32
+ treeItemWalker.currentElement = treeItemWalker.root;
33
+ return treeItemWalker.firstChild();
34
+ case treeDataTypes.ArrowDown:
35
+ treeItemWalker.currentElement = data.target;
36
+ return treeItemWalker.nextElement();
37
+ case treeDataTypes.ArrowUp:
38
+ treeItemWalker.currentElement = data.target;
39
+ return treeItemWalker.previousElement();
40
+ }
19
41
  }
20
- const treeItemWalker = treeItemWalkerRef.current;
21
- switch (data.type) {
22
- case treeDataTypes.Click:
23
- return data.target;
24
- case treeDataTypes.TypeAhead:
25
- treeItemWalker.currentElement = data.target;
26
- return nextTypeAheadElement(treeItemWalker, data.event.key);
27
- case treeDataTypes.ArrowLeft:
28
- return parentElement(flatTreeItems, data.value);
29
- case treeDataTypes.ArrowRight:
30
- treeItemWalker.currentElement = data.target;
31
- return firstChild(data.target, treeItemWalker);
32
- case treeDataTypes.End:
33
- treeItemWalker.currentElement = treeItemWalker.root;
34
- return treeItemWalker.lastChild();
35
- case treeDataTypes.Home:
36
- treeItemWalker.currentElement = treeItemWalker.root;
37
- return treeItemWalker.firstChild();
38
- case treeDataTypes.ArrowDown:
39
- treeItemWalker.currentElement = data.target;
40
- return treeItemWalker.nextElement();
41
- case treeDataTypes.ArrowUp:
42
- treeItemWalker.currentElement = data.target;
43
- return treeItemWalker.previousElement();
44
- }
45
- }
46
- const navigate = useEventCallback(data => {
47
- const nextElement = getNextElement(data);
48
- if (nextElement) {
49
- rove(nextElement);
50
- }
51
- });
52
- return [navigate, useMergedRefs(treeItemWalkerRootRef, rovingRootRef)];
42
+ const navigate = useEventCallback((data)=>{
43
+ const nextElement = getNextElement(data);
44
+ if (nextElement) {
45
+ rove(nextElement);
46
+ }
47
+ });
48
+ return [
49
+ navigate,
50
+ useMergedRefs(treeItemWalkerRootRef, rovingRootRef)
51
+ ];
53
52
  }
54
53
  function firstChild(target, treeWalker) {
55
- const nextElement = treeWalker.nextElement();
56
- if (!nextElement) {
54
+ const nextElement = treeWalker.nextElement();
55
+ if (!nextElement) {
56
+ return null;
57
+ }
58
+ const nextElementAriaPosInSet = nextElement.getAttribute('aria-posinset');
59
+ const nextElementAriaLevel = nextElement.getAttribute('aria-level');
60
+ const targetAriaLevel = target.getAttribute('aria-level');
61
+ if (nextElementAriaPosInSet === '1' && Number(nextElementAriaLevel) === Number(targetAriaLevel) + 1) {
62
+ return nextElement;
63
+ }
57
64
  return null;
58
- }
59
- const nextElementAriaPosInSet = nextElement.getAttribute('aria-posinset');
60
- const nextElementAriaLevel = nextElement.getAttribute('aria-level');
61
- const targetAriaLevel = target.getAttribute('aria-level');
62
- if (nextElementAriaPosInSet === '1' && Number(nextElementAriaLevel) === Number(targetAriaLevel) + 1) {
63
- return nextElement;
64
- }
65
- return null;
66
65
  }
67
66
  function parentElement(flatTreeItems, value) {
68
- const flatTreeItem = flatTreeItems.get(value);
69
- if (flatTreeItem === null || flatTreeItem === void 0 ? void 0 : flatTreeItem.parentValue) {
70
- const parentItem = flatTreeItems.get(flatTreeItem.parentValue);
71
- var _parentItem_ref_current;
72
- return (_parentItem_ref_current = parentItem === null || parentItem === void 0 ? void 0 : parentItem.ref.current) !== null && _parentItem_ref_current !== void 0 ? _parentItem_ref_current : null;
73
- }
74
- return null;
67
+ const flatTreeItem = flatTreeItems.get(value);
68
+ if (flatTreeItem === null || flatTreeItem === void 0 ? void 0 : flatTreeItem.parentValue) {
69
+ const parentItem = flatTreeItems.get(flatTreeItem.parentValue);
70
+ var _parentItem_ref_current;
71
+ return (_parentItem_ref_current = parentItem === null || parentItem === void 0 ? void 0 : parentItem.ref.current) !== null && _parentItem_ref_current !== void 0 ? _parentItem_ref_current : null;
72
+ }
73
+ return null;
75
74
  }
76
- //# sourceMappingURL=useFlatTreeNavigation.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useFluent_unstable","useEventCallback","useMergedRefs","nextTypeAheadElement","treeDataTypes","treeItemFilter","useHTMLElementWalkerRef","useRovingTabIndex","useFlatTreeNavigation","flatTreeItems","targetDocument","treeItemWalkerRef","treeItemWalkerRootRef","rove","rovingRootRef","getNextElement","data","current","treeItemWalker","type","Click","target","TypeAhead","currentElement","event","key","ArrowLeft","parentElement","value","ArrowRight","firstChild","End","root","lastChild","Home","ArrowDown","nextElement","ArrowUp","previousElement","navigate","treeWalker","nextElementAriaPosInSet","getAttribute","nextElementAriaLevel","targetAriaLevel","Number","flatTreeItem","get","parentValue","parentItem","_parentItem_ref_current","ref"],"sources":["../../src/hooks/useFlatTreeNavigation.ts"],"sourcesContent":["import { useFluent_unstable } from '@fluentui/react-shared-contexts';\nimport { useEventCallback, useMergedRefs } from '@fluentui/react-utilities';\nimport { TreeNavigationData_unstable } from '../Tree';\nimport { FlatTreeItems } from '../utils/createFlatTreeItems';\nimport { nextTypeAheadElement } from '../utils/nextTypeAheadElement';\nimport { treeDataTypes } from '../utils/tokens';\nimport { treeItemFilter } from '../utils/treeItemFilter';\nimport { HTMLElementWalker, useHTMLElementWalkerRef } from './useHTMLElementWalker';\nimport { useRovingTabIndex } from './useRovingTabIndexes';\nimport { FlatTreeItemProps } from './useFlatTree';\n\nexport function useFlatTreeNavigation<Props extends FlatTreeItemProps<unknown> = FlatTreeItemProps>(\n flatTreeItems: FlatTreeItems<Props>,\n) {\n const { targetDocument } = useFluent_unstable();\n const [treeItemWalkerRef, treeItemWalkerRootRef] = useHTMLElementWalkerRef(treeItemFilter);\n const [{ rove }, rovingRootRef] = useRovingTabIndex(treeItemFilter);\n\n function getNextElement(data: TreeNavigationData_unstable<Props['value']>) {\n if (!targetDocument || !treeItemWalkerRef.current) {\n return null;\n }\n const treeItemWalker = treeItemWalkerRef.current;\n switch (data.type) {\n case treeDataTypes.Click:\n return data.target;\n case treeDataTypes.TypeAhead:\n treeItemWalker.currentElement = data.target;\n return nextTypeAheadElement(treeItemWalker, data.event.key);\n case treeDataTypes.ArrowLeft:\n return parentElement(flatTreeItems, data.value);\n case treeDataTypes.ArrowRight:\n treeItemWalker.currentElement = data.target;\n return firstChild(data.target, treeItemWalker);\n case treeDataTypes.End:\n treeItemWalker.currentElement = treeItemWalker.root;\n return treeItemWalker.lastChild();\n case treeDataTypes.Home:\n treeItemWalker.currentElement = treeItemWalker.root;\n return treeItemWalker.firstChild();\n case treeDataTypes.ArrowDown:\n treeItemWalker.currentElement = data.target;\n return treeItemWalker.nextElement();\n case treeDataTypes.ArrowUp:\n treeItemWalker.currentElement = data.target;\n return treeItemWalker.previousElement();\n }\n }\n const navigate = useEventCallback((data: TreeNavigationData_unstable<Props['value']>) => {\n const nextElement = getNextElement(data);\n if (nextElement) {\n rove(nextElement);\n }\n });\n return [navigate, useMergedRefs(treeItemWalkerRootRef, rovingRootRef)] as const;\n}\n\nfunction firstChild(target: HTMLElement, treeWalker: HTMLElementWalker): HTMLElement | null {\n const nextElement = treeWalker.nextElement();\n if (!nextElement) {\n return null;\n }\n const nextElementAriaPosInSet = nextElement.getAttribute('aria-posinset');\n const nextElementAriaLevel = nextElement.getAttribute('aria-level');\n const targetAriaLevel = target.getAttribute('aria-level');\n if (nextElementAriaPosInSet === '1' && Number(nextElementAriaLevel) === Number(targetAriaLevel) + 1) {\n return nextElement;\n }\n return null;\n}\n\nfunction parentElement(flatTreeItems: FlatTreeItems<FlatTreeItemProps<unknown>>, value: unknown) {\n const flatTreeItem = flatTreeItems.get(value);\n if (flatTreeItem?.parentValue) {\n const parentItem = flatTreeItems.get(flatTreeItem.parentValue);\n return parentItem?.ref.current ?? null;\n }\n return null;\n}\n"],"mappings":"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"}
1
+ {"version":3,"sources":["useFlatTreeNavigation.ts"],"sourcesContent":["import { useFluent_unstable } from '@fluentui/react-shared-contexts';\nimport { useEventCallback, useMergedRefs } from '@fluentui/react-utilities';\nimport { TreeNavigationData_unstable } from '../Tree';\nimport { FlatTreeItems } from '../utils/createFlatTreeItems';\nimport { nextTypeAheadElement } from '../utils/nextTypeAheadElement';\nimport { treeDataTypes } from '../utils/tokens';\nimport { treeItemFilter } from '../utils/treeItemFilter';\nimport { HTMLElementWalker, useHTMLElementWalkerRef } from './useHTMLElementWalker';\nimport { useRovingTabIndex } from './useRovingTabIndexes';\nimport { FlatTreeItemProps } from './useFlatTree';\n\nexport function useFlatTreeNavigation<Props extends FlatTreeItemProps<unknown> = FlatTreeItemProps>(\n flatTreeItems: FlatTreeItems<Props>,\n) {\n const { targetDocument } = useFluent_unstable();\n const [treeItemWalkerRef, treeItemWalkerRootRef] = useHTMLElementWalkerRef(treeItemFilter);\n const [{ rove }, rovingRootRef] = useRovingTabIndex(treeItemFilter);\n\n function getNextElement(data: TreeNavigationData_unstable<Props['value']>) {\n if (!targetDocument || !treeItemWalkerRef.current) {\n return null;\n }\n const treeItemWalker = treeItemWalkerRef.current;\n switch (data.type) {\n case treeDataTypes.Click:\n return data.target;\n case treeDataTypes.TypeAhead:\n treeItemWalker.currentElement = data.target;\n return nextTypeAheadElement(treeItemWalker, data.event.key);\n case treeDataTypes.ArrowLeft:\n return parentElement(flatTreeItems, data.value);\n case treeDataTypes.ArrowRight:\n treeItemWalker.currentElement = data.target;\n return firstChild(data.target, treeItemWalker);\n case treeDataTypes.End:\n treeItemWalker.currentElement = treeItemWalker.root;\n return treeItemWalker.lastChild();\n case treeDataTypes.Home:\n treeItemWalker.currentElement = treeItemWalker.root;\n return treeItemWalker.firstChild();\n case treeDataTypes.ArrowDown:\n treeItemWalker.currentElement = data.target;\n return treeItemWalker.nextElement();\n case treeDataTypes.ArrowUp:\n treeItemWalker.currentElement = data.target;\n return treeItemWalker.previousElement();\n }\n }\n const navigate = useEventCallback((data: TreeNavigationData_unstable<Props['value']>) => {\n const nextElement = getNextElement(data);\n if (nextElement) {\n rove(nextElement);\n }\n });\n return [navigate, useMergedRefs(treeItemWalkerRootRef, rovingRootRef)] as const;\n}\n\nfunction firstChild(target: HTMLElement, treeWalker: HTMLElementWalker): HTMLElement | null {\n const nextElement = treeWalker.nextElement();\n if (!nextElement) {\n return null;\n }\n const nextElementAriaPosInSet = nextElement.getAttribute('aria-posinset');\n const nextElementAriaLevel = nextElement.getAttribute('aria-level');\n const targetAriaLevel = target.getAttribute('aria-level');\n if (nextElementAriaPosInSet === '1' && Number(nextElementAriaLevel) === Number(targetAriaLevel) + 1) {\n return nextElement;\n }\n return null;\n}\n\nfunction parentElement(flatTreeItems: FlatTreeItems<FlatTreeItemProps<unknown>>, value: unknown) {\n const flatTreeItem = flatTreeItems.get(value);\n if (flatTreeItem?.parentValue) {\n const parentItem = flatTreeItems.get(flatTreeItem.parentValue);\n return parentItem?.ref.current ?? null;\n }\n return null;\n}\n"],"names":["useFluent_unstable","useEventCallback","useMergedRefs","nextTypeAheadElement","treeDataTypes","treeItemFilter","useHTMLElementWalkerRef","useRovingTabIndex","useFlatTreeNavigation","flatTreeItems","targetDocument","treeItemWalkerRef","treeItemWalkerRootRef","rove","rovingRootRef","getNextElement","data","current","treeItemWalker","type","Click","target","TypeAhead","currentElement","event","key","ArrowLeft","parentElement","value","ArrowRight","firstChild","End","root","lastChild","Home","ArrowDown","nextElement","ArrowUp","previousElement","navigate","treeWalker","nextElementAriaPosInSet","getAttribute","nextElementAriaLevel","targetAriaLevel","Number","flatTreeItem","get","parentValue","parentItem","ref"],"mappings":"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"}
@@ -1,80 +1,82 @@
1
1
  import { isHTMLElement } from '@fluentui/react-utilities';
2
2
  import * as React from 'react';
3
- export function createHTMLElementWalker(root, filter = () => NodeFilter.FILTER_ACCEPT) {
4
- let temporaryFilter;
5
- const treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, {
6
- acceptNode(node) {
7
- if (!isHTMLElement(node)) {
8
- return NodeFilter.FILTER_REJECT;
9
- }
10
- const filterResult = filter(node);
11
- var _temporaryFilter;
12
- return filterResult === NodeFilter.FILTER_ACCEPT ? (_temporaryFilter = temporaryFilter === null || temporaryFilter === void 0 ? void 0 : temporaryFilter(node)) !== null && _temporaryFilter !== void 0 ? _temporaryFilter : filterResult : filterResult;
13
- }
14
- });
15
- return {
16
- get root() {
17
- return treeWalker.root;
18
- },
19
- get currentElement() {
20
- return treeWalker.currentNode;
21
- },
22
- set currentElement(element) {
23
- treeWalker.currentNode = element;
24
- },
25
- firstChild: localFilter => {
26
- temporaryFilter = localFilter;
27
- const result = treeWalker.firstChild();
28
- temporaryFilter = undefined;
29
- return result;
30
- },
31
- lastChild: localFilter => {
32
- temporaryFilter = localFilter;
33
- const result = treeWalker.lastChild();
34
- temporaryFilter = undefined;
35
- return result;
36
- },
37
- nextElement: localFilter => {
38
- temporaryFilter = localFilter;
39
- const result = treeWalker.nextNode();
40
- temporaryFilter = undefined;
41
- return result;
42
- },
43
- nextSibling: localFilter => {
44
- temporaryFilter = localFilter;
45
- const result = treeWalker.nextSibling();
46
- temporaryFilter = undefined;
47
- return result;
48
- },
49
- parentElement: localFilter => {
50
- temporaryFilter = localFilter;
51
- const result = treeWalker.parentNode();
52
- temporaryFilter = undefined;
53
- return result;
54
- },
55
- previousElement: localFilter => {
56
- temporaryFilter = localFilter;
57
- const result = treeWalker.previousNode();
58
- temporaryFilter = undefined;
59
- return result;
60
- },
61
- previousSibling: localFilter => {
62
- temporaryFilter = localFilter;
63
- const result = treeWalker.previousSibling();
64
- temporaryFilter = undefined;
65
- return result;
66
- }
67
- };
3
+ export function createHTMLElementWalker(root, filter = ()=>NodeFilter.FILTER_ACCEPT) {
4
+ let temporaryFilter;
5
+ const treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, {
6
+ acceptNode (node) {
7
+ if (!isHTMLElement(node)) {
8
+ return NodeFilter.FILTER_REJECT;
9
+ }
10
+ const filterResult = filter(node);
11
+ var _temporaryFilter;
12
+ return filterResult === NodeFilter.FILTER_ACCEPT ? (_temporaryFilter = temporaryFilter === null || temporaryFilter === void 0 ? void 0 : temporaryFilter(node)) !== null && _temporaryFilter !== void 0 ? _temporaryFilter : filterResult : filterResult;
13
+ }
14
+ });
15
+ return {
16
+ get root () {
17
+ return treeWalker.root;
18
+ },
19
+ get currentElement () {
20
+ return treeWalker.currentNode;
21
+ },
22
+ set currentElement (element){
23
+ treeWalker.currentNode = element;
24
+ },
25
+ firstChild: (localFilter)=>{
26
+ temporaryFilter = localFilter;
27
+ const result = treeWalker.firstChild();
28
+ temporaryFilter = undefined;
29
+ return result;
30
+ },
31
+ lastChild: (localFilter)=>{
32
+ temporaryFilter = localFilter;
33
+ const result = treeWalker.lastChild();
34
+ temporaryFilter = undefined;
35
+ return result;
36
+ },
37
+ nextElement: (localFilter)=>{
38
+ temporaryFilter = localFilter;
39
+ const result = treeWalker.nextNode();
40
+ temporaryFilter = undefined;
41
+ return result;
42
+ },
43
+ nextSibling: (localFilter)=>{
44
+ temporaryFilter = localFilter;
45
+ const result = treeWalker.nextSibling();
46
+ temporaryFilter = undefined;
47
+ return result;
48
+ },
49
+ parentElement: (localFilter)=>{
50
+ temporaryFilter = localFilter;
51
+ const result = treeWalker.parentNode();
52
+ temporaryFilter = undefined;
53
+ return result;
54
+ },
55
+ previousElement: (localFilter)=>{
56
+ temporaryFilter = localFilter;
57
+ const result = treeWalker.previousNode();
58
+ temporaryFilter = undefined;
59
+ return result;
60
+ },
61
+ previousSibling: (localFilter)=>{
62
+ temporaryFilter = localFilter;
63
+ const result = treeWalker.previousSibling();
64
+ temporaryFilter = undefined;
65
+ return result;
66
+ }
67
+ };
68
68
  }
69
- export const useHTMLElementWalkerRef = filter => {
70
- const walkerRef = React.useRef();
71
- const rootRefCallback = element1 => {
72
- if (!element1) {
73
- walkerRef.current = undefined;
74
- return;
75
- }
76
- walkerRef.current = createHTMLElementWalker(element1, filter);
77
- };
78
- return [walkerRef, rootRefCallback];
69
+ export const useHTMLElementWalkerRef = (filter)=>{
70
+ const walkerRef = React.useRef();
71
+ const rootRefCallback = (element1)=>{
72
+ if (!element1) {
73
+ walkerRef.current = undefined;
74
+ return;
75
+ }
76
+ walkerRef.current = createHTMLElementWalker(element1, filter);
77
+ };
78
+ return [
79
+ walkerRef,
80
+ rootRefCallback
81
+ ];
79
82
  };
80
- //# sourceMappingURL=useHTMLElementWalker.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["isHTMLElement","React","createHTMLElementWalker","root","filter","NodeFilter","FILTER_ACCEPT","temporaryFilter","treeWalker","document","createTreeWalker","SHOW_ELEMENT","acceptNode","node","FILTER_REJECT","filterResult","_temporaryFilter","currentElement","currentNode","element","firstChild","localFilter","result","undefined","lastChild","nextElement","nextNode","nextSibling","parentElement","parentNode","previousElement","previousNode","previousSibling","useHTMLElementWalkerRef","walkerRef","useRef","rootRefCallback","element1","current"],"sources":["../../src/hooks/useHTMLElementWalker.ts"],"sourcesContent":["import { isHTMLElement } from '@fluentui/react-utilities';\nimport * as React from 'react';\n\nexport interface HTMLElementWalker {\n readonly root: HTMLElement;\n currentElement: HTMLElement;\n firstChild(filter?: HTMLElementFilter): HTMLElement | null;\n lastChild(filter?: HTMLElementFilter): HTMLElement | null;\n nextElement(filter?: HTMLElementFilter): HTMLElement | null;\n nextSibling(filter?: HTMLElementFilter): HTMLElement | null;\n parentElement(filter?: HTMLElementFilter): HTMLElement | null;\n previousElement(filter?: HTMLElementFilter): HTMLElement | null;\n previousSibling(filter?: HTMLElementFilter): HTMLElement | null;\n}\n\nexport type HTMLElementFilter = (element: HTMLElement) => number;\n\nexport function createHTMLElementWalker(\n root: HTMLElement,\n filter: HTMLElementFilter = () => NodeFilter.FILTER_ACCEPT,\n): HTMLElementWalker {\n let temporaryFilter: HTMLElementFilter | undefined;\n const treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, {\n acceptNode(node: Node) {\n if (!isHTMLElement(node)) {\n return NodeFilter.FILTER_REJECT;\n }\n const filterResult = filter(node);\n return filterResult === NodeFilter.FILTER_ACCEPT ? temporaryFilter?.(node) ?? filterResult : filterResult;\n },\n });\n return {\n get root() {\n return treeWalker.root as HTMLElement;\n },\n get currentElement() {\n return treeWalker.currentNode as HTMLElement;\n },\n set currentElement(element) {\n treeWalker.currentNode = element;\n },\n firstChild: localFilter => {\n temporaryFilter = localFilter;\n const result = treeWalker.firstChild() as HTMLElement | null;\n temporaryFilter = undefined;\n return result;\n },\n lastChild: localFilter => {\n temporaryFilter = localFilter;\n const result = treeWalker.lastChild() as HTMLElement | null;\n temporaryFilter = undefined;\n return result;\n },\n nextElement: localFilter => {\n temporaryFilter = localFilter;\n const result = treeWalker.nextNode() as HTMLElement | null;\n temporaryFilter = undefined;\n return result;\n },\n nextSibling: localFilter => {\n temporaryFilter = localFilter;\n const result = treeWalker.nextSibling() as HTMLElement | null;\n temporaryFilter = undefined;\n return result;\n },\n parentElement: localFilter => {\n temporaryFilter = localFilter;\n const result = treeWalker.parentNode() as HTMLElement | null;\n temporaryFilter = undefined;\n return result;\n },\n previousElement: localFilter => {\n temporaryFilter = localFilter;\n const result = treeWalker.previousNode() as HTMLElement | null;\n temporaryFilter = undefined;\n return result;\n },\n previousSibling: localFilter => {\n temporaryFilter = localFilter;\n const result = treeWalker.previousSibling() as HTMLElement | null;\n temporaryFilter = undefined;\n return result;\n },\n };\n}\n\nexport const useHTMLElementWalkerRef = (filter?: HTMLElementFilter) => {\n const walkerRef = React.useRef<HTMLElementWalker>();\n\n const rootRefCallback = (element?: HTMLElement) => {\n if (!element) {\n walkerRef.current = undefined;\n return;\n }\n walkerRef.current = createHTMLElementWalker(element, filter);\n };\n return [walkerRef as React.RefObject<HTMLElementWalker>, rootRefCallback as React.Ref<HTMLElement>] as const;\n};\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ;AAC9B,YAAYC,KAAA,MAAW;AAgBvB,OAAO,SAASC,wBACdC,IAAiB,EACjBC,MAAA,GAA4BA,CAAA,KAAMC,UAAA,CAAWC,aAAa,EACvC;EACnB,IAAIC,eAAA;EACJ,MAAMC,UAAA,GAAaC,QAAA,CAASC,gBAAgB,CAACP,IAAA,EAAME,UAAA,CAAWM,YAAY,EAAE;IAC1EC,WAAWC,IAAU,EAAE;MACrB,IAAI,CAACb,aAAA,CAAca,IAAA,GAAO;QACxB,OAAOR,UAAA,CAAWS,aAAa;MACjC;MACA,MAAMC,YAAA,GAAeX,MAAA,CAAOS,IAAA;UACuBG,gBAAA;MAAnD,OAAOD,YAAA,KAAiBV,UAAA,CAAWC,aAAa,GAAG,CAAAU,gBAAA,GAAAT,eAAA,aAAAA,eAAA,uBAAAA,eAAA,CAAkBM,IAAA,eAAlBG,gBAAA,cAAAA,gBAAA,GAA2BD,YAAY,GAAGA,YAAY;IAC3G;EACF;EACA,OAAO;IACL,IAAIZ,KAAA,EAAO;MACT,OAAOK,UAAA,CAAWL,IAAI;IACxB;IACA,IAAIc,eAAA,EAAiB;MACnB,OAAOT,UAAA,CAAWU,WAAW;IAC/B;IACA,IAAID,eAAeE,OAAA,EAAS;MAC1BX,UAAA,CAAWU,WAAW,GAAGC,OAAA;IAC3B;IACAC,UAAA,EAAYC,WAAA,IAAe;MACzBd,eAAA,GAAkBc,WAAA;MAClB,MAAMC,MAAA,GAASd,UAAA,CAAWY,UAAU;MACpCb,eAAA,GAAkBgB,SAAA;MAClB,OAAOD,MAAA;IACT;IACAE,SAAA,EAAWH,WAAA,IAAe;MACxBd,eAAA,GAAkBc,WAAA;MAClB,MAAMC,MAAA,GAASd,UAAA,CAAWgB,SAAS;MACnCjB,eAAA,GAAkBgB,SAAA;MAClB,OAAOD,MAAA;IACT;IACAG,WAAA,EAAaJ,WAAA,IAAe;MAC1Bd,eAAA,GAAkBc,WAAA;MAClB,MAAMC,MAAA,GAASd,UAAA,CAAWkB,QAAQ;MAClCnB,eAAA,GAAkBgB,SAAA;MAClB,OAAOD,MAAA;IACT;IACAK,WAAA,EAAaN,WAAA,IAAe;MAC1Bd,eAAA,GAAkBc,WAAA;MAClB,MAAMC,MAAA,GAASd,UAAA,CAAWmB,WAAW;MACrCpB,eAAA,GAAkBgB,SAAA;MAClB,OAAOD,MAAA;IACT;IACAM,aAAA,EAAeP,WAAA,IAAe;MAC5Bd,eAAA,GAAkBc,WAAA;MAClB,MAAMC,MAAA,GAASd,UAAA,CAAWqB,UAAU;MACpCtB,eAAA,GAAkBgB,SAAA;MAClB,OAAOD,MAAA;IACT;IACAQ,eAAA,EAAiBT,WAAA,IAAe;MAC9Bd,eAAA,GAAkBc,WAAA;MAClB,MAAMC,MAAA,GAASd,UAAA,CAAWuB,YAAY;MACtCxB,eAAA,GAAkBgB,SAAA;MAClB,OAAOD,MAAA;IACT;IACAU,eAAA,EAAiBX,WAAA,IAAe;MAC9Bd,eAAA,GAAkBc,WAAA;MAClB,MAAMC,MAAA,GAASd,UAAA,CAAWwB,eAAe;MACzCzB,eAAA,GAAkBgB,SAAA;MAClB,OAAOD,MAAA;IACT;EACF;AACF;AAEA,OAAO,MAAMW,uBAAA,GAA2B7B,MAAA,IAA+B;EACrE,MAAM8B,SAAA,GAAYjC,KAAA,CAAMkC,MAAM;EAE9B,MAAMC,eAAA,GAAmBC,QAAA,IAA0B;IACjD,IAAI,CAACA,QAAA,EAAS;MACZH,SAAA,CAAUI,OAAO,GAAGf,SAAA;MACpB;IACF;IACAW,SAAA,CAAUI,OAAO,GAAGpC,uBAAA,CAAwBmC,QAAA,EAASjC,MAAA;EACvD;EACA,OAAO,CAAC8B,SAAA,EAAiDE,eAAA,CAA0C;AACrG"}
1
+ {"version":3,"sources":["useHTMLElementWalker.ts"],"sourcesContent":["import { isHTMLElement } from '@fluentui/react-utilities';\nimport * as React from 'react';\n\nexport interface HTMLElementWalker {\n readonly root: HTMLElement;\n currentElement: HTMLElement;\n firstChild(filter?: HTMLElementFilter): HTMLElement | null;\n lastChild(filter?: HTMLElementFilter): HTMLElement | null;\n nextElement(filter?: HTMLElementFilter): HTMLElement | null;\n nextSibling(filter?: HTMLElementFilter): HTMLElement | null;\n parentElement(filter?: HTMLElementFilter): HTMLElement | null;\n previousElement(filter?: HTMLElementFilter): HTMLElement | null;\n previousSibling(filter?: HTMLElementFilter): HTMLElement | null;\n}\n\nexport type HTMLElementFilter = (element: HTMLElement) => number;\n\nexport function createHTMLElementWalker(\n root: HTMLElement,\n filter: HTMLElementFilter = () => NodeFilter.FILTER_ACCEPT,\n): HTMLElementWalker {\n let temporaryFilter: HTMLElementFilter | undefined;\n const treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, {\n acceptNode(node: Node) {\n if (!isHTMLElement(node)) {\n return NodeFilter.FILTER_REJECT;\n }\n const filterResult = filter(node);\n return filterResult === NodeFilter.FILTER_ACCEPT ? temporaryFilter?.(node) ?? filterResult : filterResult;\n },\n });\n return {\n get root() {\n return treeWalker.root as HTMLElement;\n },\n get currentElement() {\n return treeWalker.currentNode as HTMLElement;\n },\n set currentElement(element) {\n treeWalker.currentNode = element;\n },\n firstChild: localFilter => {\n temporaryFilter = localFilter;\n const result = treeWalker.firstChild() as HTMLElement | null;\n temporaryFilter = undefined;\n return result;\n },\n lastChild: localFilter => {\n temporaryFilter = localFilter;\n const result = treeWalker.lastChild() as HTMLElement | null;\n temporaryFilter = undefined;\n return result;\n },\n nextElement: localFilter => {\n temporaryFilter = localFilter;\n const result = treeWalker.nextNode() as HTMLElement | null;\n temporaryFilter = undefined;\n return result;\n },\n nextSibling: localFilter => {\n temporaryFilter = localFilter;\n const result = treeWalker.nextSibling() as HTMLElement | null;\n temporaryFilter = undefined;\n return result;\n },\n parentElement: localFilter => {\n temporaryFilter = localFilter;\n const result = treeWalker.parentNode() as HTMLElement | null;\n temporaryFilter = undefined;\n return result;\n },\n previousElement: localFilter => {\n temporaryFilter = localFilter;\n const result = treeWalker.previousNode() as HTMLElement | null;\n temporaryFilter = undefined;\n return result;\n },\n previousSibling: localFilter => {\n temporaryFilter = localFilter;\n const result = treeWalker.previousSibling() as HTMLElement | null;\n temporaryFilter = undefined;\n return result;\n },\n };\n}\n\nexport const useHTMLElementWalkerRef = (filter?: HTMLElementFilter) => {\n const walkerRef = React.useRef<HTMLElementWalker>();\n\n const rootRefCallback = (element?: HTMLElement) => {\n if (!element) {\n walkerRef.current = undefined;\n return;\n }\n walkerRef.current = createHTMLElementWalker(element, filter);\n };\n return [walkerRef as React.RefObject<HTMLElementWalker>, rootRefCallback as React.Ref<HTMLElement>] as const;\n};\n"],"names":["isHTMLElement","React","createHTMLElementWalker","root","filter","NodeFilter","FILTER_ACCEPT","temporaryFilter","treeWalker","document","createTreeWalker","SHOW_ELEMENT","acceptNode","node","FILTER_REJECT","filterResult","currentElement","currentNode","element","firstChild","localFilter","result","undefined","lastChild","nextElement","nextNode","nextSibling","parentElement","parentNode","previousElement","previousNode","previousSibling","useHTMLElementWalkerRef","walkerRef","useRef","rootRefCallback","current"],"mappings":"AAAA,SAASA,aAAa,QAAQ,4BAA4B;AAC1D,YAAYC,WAAW,QAAQ;AAgB/B,OAAO,SAASC,wBACdC,IAAiB,EACjBC,SAA4B,IAAMC,WAAWC,aAAa,EACvC;IACnB,IAAIC;IACJ,MAAMC,aAAaC,SAASC,gBAAgB,CAACP,MAAME,WAAWM,YAAY,EAAE;QAC1EC,YAAWC,IAAU,EAAE;YACrB,IAAI,CAACb,cAAca,OAAO;gBACxB,OAAOR,WAAWS,aAAa;YACjC,CAAC;YACD,MAAMC,eAAeX,OAAOS;gBACuBN;YAAnD,OAAOQ,iBAAiBV,WAAWC,aAAa,GAAGC,CAAAA,mBAAAA,4BAAAA,6BAAAA,KAAAA,IAAAA,gBAAkBM,mBAAlBN,8BAAAA,mBAA2BQ,YAAY,GAAGA,YAAY;QAC3G;IACF;IACA,OAAO;QACL,IAAIZ,QAAO;YACT,OAAOK,WAAWL,IAAI;QACxB;QACA,IAAIa,kBAAiB;YACnB,OAAOR,WAAWS,WAAW;QAC/B;QACA,IAAID,gBAAeE,QAAS;YAC1BV,WAAWS,WAAW,GAAGC;QAC3B;QACAC,YAAYC,CAAAA,cAAe;YACzBb,kBAAkBa;YAClB,MAAMC,SAASb,WAAWW,UAAU;YACpCZ,kBAAkBe;YAClB,OAAOD;QACT;QACAE,WAAWH,CAAAA,cAAe;YACxBb,kBAAkBa;YAClB,MAAMC,SAASb,WAAWe,SAAS;YACnChB,kBAAkBe;YAClB,OAAOD;QACT;QACAG,aAAaJ,CAAAA,cAAe;YAC1Bb,kBAAkBa;YAClB,MAAMC,SAASb,WAAWiB,QAAQ;YAClClB,kBAAkBe;YAClB,OAAOD;QACT;QACAK,aAAaN,CAAAA,cAAe;YAC1Bb,kBAAkBa;YAClB,MAAMC,SAASb,WAAWkB,WAAW;YACrCnB,kBAAkBe;YAClB,OAAOD;QACT;QACAM,eAAeP,CAAAA,cAAe;YAC5Bb,kBAAkBa;YAClB,MAAMC,SAASb,WAAWoB,UAAU;YACpCrB,kBAAkBe;YAClB,OAAOD;QACT;QACAQ,iBAAiBT,CAAAA,cAAe;YAC9Bb,kBAAkBa;YAClB,MAAMC,SAASb,WAAWsB,YAAY;YACtCvB,kBAAkBe;YAClB,OAAOD;QACT;QACAU,iBAAiBX,CAAAA,cAAe;YAC9Bb,kBAAkBa;YAClB,MAAMC,SAASb,WAAWuB,eAAe;YACzCxB,kBAAkBe;YAClB,OAAOD;QACT;IACF;AACF,CAAC;AAED,OAAO,MAAMW,0BAA0B,CAAC5B,SAA+B;IACrE,MAAM6B,YAAYhC,MAAMiC,MAAM;IAE9B,MAAMC,kBAAkB,CAACjB,WAA0B;QACjD,IAAI,CAACA,UAAS;YACZe,UAAUG,OAAO,GAAGd;YACpB;QACF,CAAC;QACDW,UAAUG,OAAO,GAAGlC,wBAAwBgB,UAASd;IACvD;IACA,OAAO;QAAC6B;QAAiDE;KAA0C;AACrG,EAAE"}