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

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 (244) hide show
  1. package/CHANGELOG.json +1073 -1
  2. package/CHANGELOG.md +295 -2
  3. package/dist/index.d.ts +153 -91
  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/TreeItemLayout.js +0 -1
  9. package/lib/TreeItemLayout.js.map +1 -1
  10. package/lib/TreeItemPersonaLayout.js +0 -1
  11. package/lib/TreeItemPersonaLayout.js.map +1 -1
  12. package/lib/components/Tree/Tree.js +6 -8
  13. package/lib/components/Tree/Tree.js.map +1 -1
  14. package/lib/components/Tree/Tree.types.js +1 -2
  15. package/lib/components/Tree/Tree.types.js.map +1 -1
  16. package/lib/components/Tree/index.js +1 -2
  17. package/lib/components/Tree/index.js.map +1 -1
  18. package/lib/components/Tree/renderTree.js +7 -13
  19. package/lib/components/Tree/renderTree.js.map +1 -1
  20. package/lib/components/Tree/useRootTree.js +145 -0
  21. package/lib/components/Tree/useRootTree.js.map +1 -0
  22. package/lib/components/Tree/useSubtree.js +35 -0
  23. package/lib/components/Tree/useSubtree.js.map +1 -0
  24. package/lib/components/Tree/useTree.js +9 -103
  25. package/lib/components/Tree/useTree.js.map +1 -1
  26. package/lib/components/Tree/useTreeContextValues.js +12 -22
  27. package/lib/components/Tree/useTreeContextValues.js.map +1 -1
  28. package/lib/components/Tree/useTreeStyles.styles.js +30 -0
  29. package/lib/components/Tree/useTreeStyles.styles.js.map +1 -0
  30. package/lib/components/TreeItem/TreeItem.js +16 -9
  31. package/lib/components/TreeItem/TreeItem.js.map +1 -1
  32. package/lib/components/TreeItem/TreeItem.types.js +1 -2
  33. package/lib/components/TreeItem/TreeItem.types.js.map +1 -1
  34. package/lib/components/TreeItem/index.js +1 -2
  35. package/lib/components/TreeItem/index.js.map +1 -1
  36. package/lib/components/TreeItem/renderTreeItem.js +7 -25
  37. package/lib/components/TreeItem/renderTreeItem.js.map +1 -1
  38. package/lib/components/TreeItem/useTreeItem.js +116 -234
  39. package/lib/components/TreeItem/useTreeItem.js.map +1 -1
  40. package/lib/components/TreeItem/useTreeItemContextValues.js +18 -16
  41. package/lib/components/TreeItem/useTreeItemContextValues.js.map +1 -1
  42. package/lib/components/TreeItem/useTreeItemStyles.styles.js +100 -0
  43. package/lib/components/TreeItem/useTreeItemStyles.styles.js.map +1 -0
  44. package/lib/components/TreeItemChevron.js +24 -0
  45. package/lib/components/TreeItemChevron.js.map +1 -0
  46. package/lib/components/TreeItemLayout/TreeItemLayout.js +8 -8
  47. package/lib/components/TreeItemLayout/TreeItemLayout.js.map +1 -1
  48. package/lib/components/TreeItemLayout/TreeItemLayout.types.js +1 -2
  49. package/lib/components/TreeItemLayout/TreeItemLayout.types.js.map +1 -1
  50. package/lib/components/TreeItemLayout/index.js +1 -2
  51. package/lib/components/TreeItemLayout/index.js.map +1 -1
  52. package/lib/components/TreeItemLayout/renderTreeItemLayout.js +8 -21
  53. package/lib/components/TreeItemLayout/renderTreeItemLayout.js.map +1 -1
  54. package/lib/components/TreeItemLayout/useTreeItemLayout.js +58 -39
  55. package/lib/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
  56. package/lib/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js +191 -0
  57. package/lib/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js.map +1 -0
  58. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js +9 -9
  59. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js.map +1 -1
  60. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js +1 -2
  61. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js.map +1 -1
  62. package/lib/components/TreeItemPersonaLayout/index.js +1 -2
  63. package/lib/components/TreeItemPersonaLayout/index.js.map +1 -1
  64. package/lib/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js +10 -27
  65. package/lib/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js.map +1 -1
  66. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js +35 -48
  67. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js.map +1 -1
  68. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js +9 -10
  69. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js.map +1 -1
  70. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js +206 -0
  71. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js.map +1 -0
  72. package/lib/contexts/index.js +0 -1
  73. package/lib/contexts/index.js.map +1 -1
  74. package/lib/contexts/treeContext.js +9 -14
  75. package/lib/contexts/treeContext.js.map +1 -1
  76. package/lib/contexts/treeItemContext.js +13 -10
  77. package/lib/contexts/treeItemContext.js.map +1 -1
  78. package/lib/hooks/index.js +0 -1
  79. package/lib/hooks/index.js.map +1 -1
  80. package/lib/hooks/useFlatTree.js +81 -35
  81. package/lib/hooks/useFlatTree.js.map +1 -1
  82. package/lib/hooks/useFlatTreeNavigation.js +65 -62
  83. package/lib/hooks/useFlatTreeNavigation.js.map +1 -1
  84. package/lib/hooks/useHTMLElementWalker.js +78 -76
  85. package/lib/hooks/useHTMLElementWalker.js.map +1 -1
  86. package/lib/hooks/useNestedTreeNavigation.js +49 -49
  87. package/lib/hooks/useNestedTreeNavigation.js.map +1 -1
  88. package/lib/hooks/useOpenItemsState.js +21 -15
  89. package/lib/hooks/useOpenItemsState.js.map +1 -1
  90. package/lib/hooks/useRovingTabIndexes.js +46 -45
  91. package/lib/hooks/useRovingTabIndexes.js.map +1 -1
  92. package/lib/index.js +0 -1
  93. package/lib/index.js.map +1 -1
  94. package/lib/utils/ImmutableSet.js +27 -30
  95. package/lib/utils/ImmutableSet.js.map +1 -1
  96. package/lib/utils/assert.js +5 -5
  97. package/lib/utils/assert.js.map +1 -1
  98. package/lib/utils/createFlatTreeItems.js +113 -0
  99. package/lib/utils/createFlatTreeItems.js.map +1 -0
  100. package/lib/utils/flattenTree.js +58 -28
  101. package/lib/utils/flattenTree.js.map +1 -1
  102. package/lib/utils/getTreeItemValueFromElement.js +4 -0
  103. package/lib/utils/getTreeItemValueFromElement.js.map +1 -0
  104. package/lib/utils/nextTypeAheadElement.js +11 -12
  105. package/lib/utils/nextTypeAheadElement.js.map +1 -1
  106. package/lib/utils/normalizeOpenItems.js +6 -5
  107. package/lib/utils/normalizeOpenItems.js.map +1 -1
  108. package/lib/utils/tokens.js +13 -14
  109. package/lib/utils/tokens.js.map +1 -1
  110. package/lib/utils/treeItemFilter.js +2 -3
  111. package/lib/utils/treeItemFilter.js.map +1 -1
  112. package/lib-commonjs/Tree.js +3 -5
  113. package/lib-commonjs/Tree.js.map +1 -1
  114. package/lib-commonjs/TreeItem.js +3 -5
  115. package/lib-commonjs/TreeItem.js.map +1 -1
  116. package/lib-commonjs/TreeItemLayout.js +3 -5
  117. package/lib-commonjs/TreeItemLayout.js.map +1 -1
  118. package/lib-commonjs/TreeItemPersonaLayout.js +3 -5
  119. package/lib-commonjs/TreeItemPersonaLayout.js.map +1 -1
  120. package/lib-commonjs/components/Tree/Tree.js +17 -23
  121. package/lib-commonjs/components/Tree/Tree.js.map +1 -1
  122. package/lib-commonjs/components/Tree/Tree.types.js +3 -3
  123. package/lib-commonjs/components/Tree/Tree.types.js.map +1 -1
  124. package/lib-commonjs/components/Tree/index.js +8 -10
  125. package/lib-commonjs/components/Tree/index.js.map +1 -1
  126. package/lib-commonjs/components/Tree/renderTree.js +14 -19
  127. package/lib-commonjs/components/Tree/renderTree.js.map +1 -1
  128. package/lib-commonjs/components/Tree/useRootTree.js +149 -0
  129. package/lib-commonjs/components/Tree/useRootTree.js.map +1 -0
  130. package/lib-commonjs/components/Tree/useSubtree.js +39 -0
  131. package/lib-commonjs/components/Tree/useSubtree.js.map +1 -0
  132. package/lib-commonjs/components/Tree/useTree.js +16 -116
  133. package/lib-commonjs/components/Tree/useTree.js.map +1 -1
  134. package/lib-commonjs/components/Tree/useTreeContextValues.js +17 -26
  135. package/lib-commonjs/components/Tree/useTreeContextValues.js.map +1 -1
  136. package/lib-commonjs/components/Tree/useTreeStyles.styles.js +53 -0
  137. package/lib-commonjs/components/Tree/useTreeStyles.styles.js.map +1 -0
  138. package/lib-commonjs/components/TreeItem/TreeItem.js +17 -18
  139. package/lib-commonjs/components/TreeItem/TreeItem.js.map +1 -1
  140. package/lib-commonjs/components/TreeItem/TreeItem.types.js +3 -4
  141. package/lib-commonjs/components/TreeItem/TreeItem.types.js.map +1 -1
  142. package/lib-commonjs/components/TreeItem/index.js +7 -9
  143. package/lib-commonjs/components/TreeItem/index.js.map +1 -1
  144. package/lib-commonjs/components/TreeItem/renderTreeItem.js +14 -33
  145. package/lib-commonjs/components/TreeItem/renderTreeItem.js.map +1 -1
  146. package/lib-commonjs/components/TreeItem/useTreeItem.js +126 -251
  147. package/lib-commonjs/components/TreeItem/useTreeItem.js.map +1 -1
  148. package/lib-commonjs/components/TreeItem/useTreeItemContextValues.js +23 -20
  149. package/lib-commonjs/components/TreeItem/useTreeItemContextValues.js.map +1 -1
  150. package/lib-commonjs/components/TreeItem/useTreeItemStyles.styles.js +202 -0
  151. package/lib-commonjs/components/TreeItem/useTreeItemStyles.styles.js.map +1 -0
  152. package/lib-commonjs/components/TreeItemChevron.js +33 -0
  153. package/lib-commonjs/components/TreeItemChevron.js.map +1 -0
  154. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.js +15 -16
  155. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.js.map +1 -1
  156. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.types.js +1 -3
  157. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.types.js.map +1 -1
  158. package/lib-commonjs/components/TreeItemLayout/index.js +7 -9
  159. package/lib-commonjs/components/TreeItemLayout/index.js.map +1 -1
  160. package/lib-commonjs/components/TreeItemLayout/renderTreeItemLayout.js +14 -28
  161. package/lib-commonjs/components/TreeItemLayout/renderTreeItemLayout.js.map +1 -1
  162. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js +64 -52
  163. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
  164. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js +321 -0
  165. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js.map +1 -0
  166. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js +17 -18
  167. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js.map +1 -1
  168. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js +1 -3
  169. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js.map +1 -1
  170. package/lib-commonjs/components/TreeItemPersonaLayout/index.js +7 -9
  171. package/lib-commonjs/components/TreeItemPersonaLayout/index.js.map +1 -1
  172. package/lib-commonjs/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js +17 -35
  173. package/lib-commonjs/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js.map +1 -1
  174. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js +42 -61
  175. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js.map +1 -1
  176. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js +16 -15
  177. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js.map +1 -1
  178. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js +375 -0
  179. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js.map +1 -0
  180. package/lib-commonjs/contexts/index.js +4 -6
  181. package/lib-commonjs/contexts/index.js.map +1 -1
  182. package/lib-commonjs/contexts/treeContext.js +23 -18
  183. package/lib-commonjs/contexts/treeContext.js.map +1 -1
  184. package/lib-commonjs/contexts/treeItemContext.js +27 -13
  185. package/lib-commonjs/contexts/treeItemContext.js.map +1 -1
  186. package/lib-commonjs/hooks/index.js +5 -7
  187. package/lib-commonjs/hooks/index.js.map +1 -1
  188. package/lib-commonjs/hooks/useFlatTree.js +88 -52
  189. package/lib-commonjs/hooks/useFlatTree.js.map +1 -1
  190. package/lib-commonjs/hooks/useFlatTreeNavigation.js +76 -72
  191. package/lib-commonjs/hooks/useFlatTreeNavigation.js.map +1 -1
  192. package/lib-commonjs/hooks/useHTMLElementWalker.js +92 -83
  193. package/lib-commonjs/hooks/useHTMLElementWalker.js.map +1 -1
  194. package/lib-commonjs/hooks/useNestedTreeNavigation.js +59 -58
  195. package/lib-commonjs/hooks/useNestedTreeNavigation.js.map +1 -1
  196. package/lib-commonjs/hooks/useOpenItemsState.js +30 -22
  197. package/lib-commonjs/hooks/useOpenItemsState.js.map +1 -1
  198. package/lib-commonjs/hooks/useRovingTabIndexes.js +54 -53
  199. package/lib-commonjs/hooks/useRovingTabIndexes.js.map +1 -1
  200. package/lib-commonjs/index.js +46 -181
  201. package/lib-commonjs/index.js.map +1 -1
  202. package/lib-commonjs/utils/ImmutableSet.js +37 -38
  203. package/lib-commonjs/utils/ImmutableSet.js.map +1 -1
  204. package/lib-commonjs/utils/assert.js +11 -9
  205. package/lib-commonjs/utils/assert.js.map +1 -1
  206. package/lib-commonjs/utils/createFlatTreeItems.js +127 -0
  207. package/lib-commonjs/utils/createFlatTreeItems.js.map +1 -0
  208. package/lib-commonjs/utils/flattenTree.js +25 -33
  209. package/lib-commonjs/utils/flattenTree.js.map +1 -1
  210. package/lib-commonjs/utils/getTreeItemValueFromElement.js +18 -0
  211. package/lib-commonjs/utils/getTreeItemValueFromElement.js.map +1 -0
  212. package/lib-commonjs/utils/nextTypeAheadElement.js +16 -16
  213. package/lib-commonjs/utils/nextTypeAheadElement.js.map +1 -1
  214. package/lib-commonjs/utils/normalizeOpenItems.js +11 -9
  215. package/lib-commonjs/utils/normalizeOpenItems.js.map +1 -1
  216. package/lib-commonjs/utils/tokens.js +28 -20
  217. package/lib-commonjs/utils/tokens.js.map +1 -1
  218. package/lib-commonjs/utils/treeItemFilter.js +7 -7
  219. package/lib-commonjs/utils/treeItemFilter.js.map +1 -1
  220. package/package.json +23 -17
  221. package/lib/components/Tree/useTreeStyles.js +0 -20
  222. package/lib/components/Tree/useTreeStyles.js.map +0 -1
  223. package/lib/components/TreeItem/useTreeItemStyles.js +0 -203
  224. package/lib/components/TreeItem/useTreeItemStyles.js.map +0 -1
  225. package/lib/components/TreeItemLayout/useTreeItemLayoutStyles.js +0 -98
  226. package/lib/components/TreeItemLayout/useTreeItemLayoutStyles.js.map +0 -1
  227. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.js +0 -115
  228. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.js.map +0 -1
  229. package/lib/utils/createUnfilteredFlatTree.js +0 -77
  230. package/lib/utils/createUnfilteredFlatTree.js.map +0 -1
  231. package/lib/utils/createVisibleFlatTree.js +0 -80
  232. package/lib/utils/createVisibleFlatTree.js.map +0 -1
  233. package/lib-commonjs/components/Tree/useTreeStyles.js +0 -27
  234. package/lib-commonjs/components/Tree/useTreeStyles.js.map +0 -1
  235. package/lib-commonjs/components/TreeItem/useTreeItemStyles.js +0 -210
  236. package/lib-commonjs/components/TreeItem/useTreeItemStyles.js.map +0 -1
  237. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.js +0 -105
  238. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.js.map +0 -1
  239. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.js +0 -122
  240. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.js.map +0 -1
  241. package/lib-commonjs/utils/createUnfilteredFlatTree.js +0 -84
  242. package/lib-commonjs/utils/createUnfilteredFlatTree.js.map +0 -1
  243. package/lib-commonjs/utils/createVisibleFlatTree.js +0 -87
  244. package/lib-commonjs/utils/createVisibleFlatTree.js.map +0 -1
@@ -1,59 +1,59 @@
1
+ import { useMergedRefs } from '@fluentui/react-utilities';
1
2
  import { useHTMLElementWalkerRef } from './useHTMLElementWalker';
2
3
  import { nextTypeAheadElement } from '../utils/nextTypeAheadElement';
3
4
  import { treeDataTypes } from '../utils/tokens';
4
5
  import { treeItemFilter } from '../utils/treeItemFilter';
5
6
  import { useRovingTabIndex } from './useRovingTabIndexes';
6
- import { useMergedRefs } from '@fluentui/react-utilities';
7
7
  export function useNestedTreeNavigation() {
8
- const [{
9
- rove
10
- }, rovingRootRef] = useRovingTabIndex(treeItemFilter);
11
- const [walkerRef, rootRef] = useHTMLElementWalkerRef(treeItemFilter);
12
- const getNextElement = data => {
13
- if (!walkerRef.current) {
14
- return;
15
- }
16
- const treeItemWalker = walkerRef.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
- treeItemWalker.currentElement = data.target;
25
- return treeItemWalker.parentElement();
26
- case treeDataTypes.arrowRight:
27
- treeItemWalker.currentElement = data.target;
28
- return treeItemWalker.firstChild();
29
- case treeDataTypes.end:
30
- treeItemWalker.currentElement = treeItemWalker.root;
31
- return lastChildRecursive(treeItemWalker);
32
- case treeDataTypes.home:
33
- treeItemWalker.currentElement = treeItemWalker.root;
34
- return treeItemWalker.firstChild();
35
- case treeDataTypes.arrowDown:
36
- treeItemWalker.currentElement = data.target;
37
- return treeItemWalker.nextElement();
38
- case treeDataTypes.arrowUp:
39
- treeItemWalker.currentElement = data.target;
40
- return treeItemWalker.previousElement();
8
+ const [{ rove }, rovingRootRef] = useRovingTabIndex(treeItemFilter);
9
+ const [walkerRef, rootRef] = useHTMLElementWalkerRef(treeItemFilter);
10
+ const getNextElement = (data)=>{
11
+ if (!walkerRef.current) {
12
+ return;
13
+ }
14
+ const treeItemWalker = walkerRef.current;
15
+ switch(data.type){
16
+ case treeDataTypes.Click:
17
+ return data.target;
18
+ case treeDataTypes.TypeAhead:
19
+ treeItemWalker.currentElement = data.target;
20
+ return nextTypeAheadElement(treeItemWalker, data.event.key);
21
+ case treeDataTypes.ArrowLeft:
22
+ treeItemWalker.currentElement = data.target;
23
+ return treeItemWalker.parentElement();
24
+ case treeDataTypes.ArrowRight:
25
+ treeItemWalker.currentElement = data.target;
26
+ return treeItemWalker.firstChild();
27
+ case treeDataTypes.End:
28
+ treeItemWalker.currentElement = treeItemWalker.root;
29
+ return lastChildRecursive(treeItemWalker);
30
+ case treeDataTypes.Home:
31
+ treeItemWalker.currentElement = treeItemWalker.root;
32
+ return treeItemWalker.firstChild();
33
+ case treeDataTypes.ArrowDown:
34
+ treeItemWalker.currentElement = data.target;
35
+ return treeItemWalker.nextElement();
36
+ case treeDataTypes.ArrowUp:
37
+ treeItemWalker.currentElement = data.target;
38
+ return treeItemWalker.previousElement();
39
+ }
40
+ };
41
+ function navigate(data) {
42
+ const nextElement = getNextElement(data);
43
+ if (nextElement) {
44
+ rove(nextElement);
45
+ }
41
46
  }
42
- };
43
- function navigate(data) {
44
- const nextElement = getNextElement(data);
45
- if (nextElement) {
46
- rove(nextElement);
47
- }
48
- }
49
- return [navigate, useMergedRefs(rootRef, rovingRootRef)];
47
+ return [
48
+ navigate,
49
+ useMergedRefs(rootRef, rovingRootRef)
50
+ ];
50
51
  }
51
52
  function lastChildRecursive(walker) {
52
- let lastElement = null;
53
- let nextElement = null;
54
- while (nextElement = walker.lastChild()) {
55
- lastElement = nextElement;
56
- }
57
- return lastElement;
53
+ let lastElement = null;
54
+ let nextElement = null;
55
+ while(nextElement = walker.lastChild()){
56
+ lastElement = nextElement;
57
+ }
58
+ return lastElement;
58
59
  }
59
- //# sourceMappingURL=useNestedTreeNavigation.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useHTMLElementWalkerRef","nextTypeAheadElement","treeDataTypes","treeItemFilter","useRovingTabIndex","useMergedRefs","useNestedTreeNavigation","rove","rovingRootRef","walkerRef","rootRef","getNextElement","data","current","treeItemWalker","type","click","target","typeAhead","currentElement","event","key","arrowLeft","parentElement","arrowRight","firstChild","end","root","lastChildRecursive","home","arrowDown","nextElement","arrowUp","previousElement","navigate","walker","lastElement","lastChild"],"sources":["../src/packages/react-components/react-tree/src/hooks/useNestedTreeNavigation.ts"],"sourcesContent":["import { TreeNavigationData_unstable } from '../Tree';\nimport { HTMLElementWalker, useHTMLElementWalkerRef } from './useHTMLElementWalker';\nimport { nextTypeAheadElement } from '../utils/nextTypeAheadElement';\nimport { treeDataTypes } from '../utils/tokens';\nimport { treeItemFilter } from '../utils/treeItemFilter';\nimport { useRovingTabIndex } from './useRovingTabIndexes';\nimport { useMergedRefs } from '@fluentui/react-utilities';\n\nexport function useNestedTreeNavigation() {\n const [{ rove }, rovingRootRef] = useRovingTabIndex(treeItemFilter);\n const [walkerRef, rootRef] = useHTMLElementWalkerRef(treeItemFilter);\n\n const getNextElement = (data: TreeNavigationData_unstable) => {\n if (!walkerRef.current) {\n return;\n }\n const treeItemWalker = walkerRef.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 treeItemWalker.currentElement = data.target;\n return treeItemWalker.parentElement();\n case treeDataTypes.arrowRight:\n treeItemWalker.currentElement = data.target;\n return treeItemWalker.firstChild();\n case treeDataTypes.end:\n treeItemWalker.currentElement = treeItemWalker.root;\n return lastChildRecursive(treeItemWalker);\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 function navigate(data: TreeNavigationData_unstable) {\n const nextElement = getNextElement(data);\n if (nextElement) {\n rove(nextElement);\n }\n }\n return [navigate, useMergedRefs(rootRef, rovingRootRef)] as const;\n}\n\nfunction lastChildRecursive(walker: HTMLElementWalker) {\n let lastElement: HTMLElement | null = null;\n let nextElement: HTMLElement | null = null;\n while ((nextElement = walker.lastChild())) {\n lastElement = nextElement;\n }\n return lastElement;\n}\n"],"mappings":"AACA,SAA4BA,uBAAuB,QAAQ,wBAAwB;AACnF,SAASC,oBAAoB,QAAQ,+BAA+B;AACpE,SAASC,aAAa,QAAQ,iBAAiB;AAC/C,SAASC,cAAc,QAAQ,yBAAyB;AACxD,SAASC,iBAAiB,QAAQ,uBAAuB;AACzD,SAASC,aAAa,QAAQ,2BAA2B;AAEzD,OAAM,SAAUC,uBAAuBA,CAAA;EACrC,MAAM,CAAC;IAAEC;EAAI,CAAE,EAAEC,aAAa,CAAC,GAAGJ,iBAAiB,CAACD,cAAc,CAAC;EACnE,MAAM,CAACM,SAAS,EAAEC,OAAO,CAAC,GAAGV,uBAAuB,CAACG,cAAc,CAAC;EAEpE,MAAMQ,cAAc,GAAIC,IAAiC,IAAI;IAC3D,IAAI,CAACH,SAAS,CAACI,OAAO,EAAE;MACtB;;IAEF,MAAMC,cAAc,GAAGL,SAAS,CAACI,OAAO;IACxC,QAAQD,IAAI,CAACG,IAAI;MACf,KAAKb,aAAa,CAACc,KAAK;QACtB,OAAOJ,IAAI,CAACK,MAAM;MACpB,KAAKf,aAAa,CAACgB,SAAS;QAC1BJ,cAAc,CAACK,cAAc,GAAGP,IAAI,CAACK,MAAM;QAC3C,OAAOhB,oBAAoB,CAACa,cAAc,EAAEF,IAAI,CAACQ,KAAK,CAACC,GAAG,CAAC;MAC7D,KAAKnB,aAAa,CAACoB,SAAS;QAC1BR,cAAc,CAACK,cAAc,GAAGP,IAAI,CAACK,MAAM;QAC3C,OAAOH,cAAc,CAACS,aAAa,EAAE;MACvC,KAAKrB,aAAa,CAACsB,UAAU;QAC3BV,cAAc,CAACK,cAAc,GAAGP,IAAI,CAACK,MAAM;QAC3C,OAAOH,cAAc,CAACW,UAAU,EAAE;MACpC,KAAKvB,aAAa,CAACwB,GAAG;QACpBZ,cAAc,CAACK,cAAc,GAAGL,cAAc,CAACa,IAAI;QACnD,OAAOC,kBAAkB,CAACd,cAAc,CAAC;MAC3C,KAAKZ,aAAa,CAAC2B,IAAI;QACrBf,cAAc,CAACK,cAAc,GAAGL,cAAc,CAACa,IAAI;QACnD,OAAOb,cAAc,CAACW,UAAU,EAAE;MACpC,KAAKvB,aAAa,CAAC4B,SAAS;QAC1BhB,cAAc,CAACK,cAAc,GAAGP,IAAI,CAACK,MAAM;QAC3C,OAAOH,cAAc,CAACiB,WAAW,EAAE;MACrC,KAAK7B,aAAa,CAAC8B,OAAO;QACxBlB,cAAc,CAACK,cAAc,GAAGP,IAAI,CAACK,MAAM;QAC3C,OAAOH,cAAc,CAACmB,eAAe,EAAE;IAAC;EAE9C,CAAC;EACD,SAASC,QAAQA,CAACtB,IAAiC;IACjD,MAAMmB,WAAW,GAAGpB,cAAc,CAACC,IAAI,CAAC;IACxC,IAAImB,WAAW,EAAE;MACfxB,IAAI,CAACwB,WAAW,CAAC;;EAErB;EACA,OAAO,CAACG,QAAQ,EAAE7B,aAAa,CAACK,OAAO,EAAEF,aAAa,CAAC,CAAU;AACnE;AAEA,SAASoB,kBAAkBA,CAACO,MAAyB;EACnD,IAAIC,WAAW,GAAuB,IAAI;EAC1C,IAAIL,WAAW,GAAuB,IAAI;EAC1C,OAAQA,WAAW,GAAGI,MAAM,CAACE,SAAS,EAAE,EAAG;IACzCD,WAAW,GAAGL,WAAW;;EAE3B,OAAOK,WAAW;AACpB"}
1
+ {"version":3,"sources":["useNestedTreeNavigation.ts"],"sourcesContent":["import { useMergedRefs } from '@fluentui/react-utilities';\nimport { TreeNavigationData_unstable } from '../Tree';\nimport { HTMLElementWalker, useHTMLElementWalkerRef } from './useHTMLElementWalker';\nimport { nextTypeAheadElement } from '../utils/nextTypeAheadElement';\nimport { treeDataTypes } from '../utils/tokens';\nimport { treeItemFilter } from '../utils/treeItemFilter';\nimport { useRovingTabIndex } from './useRovingTabIndexes';\n\nexport function useNestedTreeNavigation() {\n const [{ rove }, rovingRootRef] = useRovingTabIndex(treeItemFilter);\n const [walkerRef, rootRef] = useHTMLElementWalkerRef(treeItemFilter);\n\n const getNextElement = (data: TreeNavigationData_unstable) => {\n if (!walkerRef.current) {\n return;\n }\n const treeItemWalker = walkerRef.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 treeItemWalker.currentElement = data.target;\n return treeItemWalker.parentElement();\n case treeDataTypes.ArrowRight:\n treeItemWalker.currentElement = data.target;\n return treeItemWalker.firstChild();\n case treeDataTypes.End:\n treeItemWalker.currentElement = treeItemWalker.root;\n return lastChildRecursive(treeItemWalker);\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 function navigate(data: TreeNavigationData_unstable) {\n const nextElement = getNextElement(data);\n if (nextElement) {\n rove(nextElement);\n }\n }\n return [navigate, useMergedRefs(rootRef, rovingRootRef)] as const;\n}\n\nfunction lastChildRecursive(walker: HTMLElementWalker) {\n let lastElement: HTMLElement | null = null;\n let nextElement: HTMLElement | null = null;\n while ((nextElement = walker.lastChild())) {\n lastElement = nextElement;\n }\n return lastElement;\n}\n"],"names":["useMergedRefs","useHTMLElementWalkerRef","nextTypeAheadElement","treeDataTypes","treeItemFilter","useRovingTabIndex","useNestedTreeNavigation","rove","rovingRootRef","walkerRef","rootRef","getNextElement","data","current","treeItemWalker","type","Click","target","TypeAhead","currentElement","event","key","ArrowLeft","parentElement","ArrowRight","firstChild","End","root","lastChildRecursive","Home","ArrowDown","nextElement","ArrowUp","previousElement","navigate","walker","lastElement","lastChild"],"mappings":"AAAA,SAASA,aAAa,QAAQ,4BAA4B;AAE1D,SAA4BC,uBAAuB,QAAQ,yBAAyB;AACpF,SAASC,oBAAoB,QAAQ,gCAAgC;AACrE,SAASC,aAAa,QAAQ,kBAAkB;AAChD,SAASC,cAAc,QAAQ,0BAA0B;AACzD,SAASC,iBAAiB,QAAQ,wBAAwB;AAE1D,OAAO,SAASC,0BAA0B;IACxC,MAAM,CAAC,EAAEC,KAAI,EAAE,EAAEC,cAAc,GAAGH,kBAAkBD;IACpD,MAAM,CAACK,WAAWC,QAAQ,GAAGT,wBAAwBG;IAErD,MAAMO,iBAAiB,CAACC,OAAsC;QAC5D,IAAI,CAACH,UAAUI,OAAO,EAAE;YACtB;QACF,CAAC;QACD,MAAMC,iBAAiBL,UAAUI,OAAO;QACxC,OAAQD,KAAKG,IAAI;YACf,KAAKZ,cAAca,KAAK;gBACtB,OAAOJ,KAAKK,MAAM;YACpB,KAAKd,cAAce,SAAS;gBAC1BJ,eAAeK,cAAc,GAAGP,KAAKK,MAAM;gBAC3C,OAAOf,qBAAqBY,gBAAgBF,KAAKQ,KAAK,CAACC,GAAG;YAC5D,KAAKlB,cAAcmB,SAAS;gBAC1BR,eAAeK,cAAc,GAAGP,KAAKK,MAAM;gBAC3C,OAAOH,eAAeS,aAAa;YACrC,KAAKpB,cAAcqB,UAAU;gBAC3BV,eAAeK,cAAc,GAAGP,KAAKK,MAAM;gBAC3C,OAAOH,eAAeW,UAAU;YAClC,KAAKtB,cAAcuB,GAAG;gBACpBZ,eAAeK,cAAc,GAAGL,eAAea,IAAI;gBACnD,OAAOC,mBAAmBd;YAC5B,KAAKX,cAAc0B,IAAI;gBACrBf,eAAeK,cAAc,GAAGL,eAAea,IAAI;gBACnD,OAAOb,eAAeW,UAAU;YAClC,KAAKtB,cAAc2B,SAAS;gBAC1BhB,eAAeK,cAAc,GAAGP,KAAKK,MAAM;gBAC3C,OAAOH,eAAeiB,WAAW;YACnC,KAAK5B,cAAc6B,OAAO;gBACxBlB,eAAeK,cAAc,GAAGP,KAAKK,MAAM;gBAC3C,OAAOH,eAAemB,eAAe;QACzC;IACF;IACA,SAASC,SAAStB,IAAiC,EAAE;QACnD,MAAMmB,cAAcpB,eAAeC;QACnC,IAAImB,aAAa;YACfxB,KAAKwB;QACP,CAAC;IACH;IACA,OAAO;QAACG;QAAUlC,cAAcU,SAASF;KAAe;AAC1D,CAAC;AAED,SAASoB,mBAAmBO,MAAyB,EAAE;IACrD,IAAIC,cAAkC,IAAI;IAC1C,IAAIL,cAAkC,IAAI;IAC1C,MAAQA,cAAcI,OAAOE,SAAS,GAAK;QACzCD,cAAcL;IAChB;IACA,OAAOK;AACT"}
@@ -2,21 +2,27 @@ import { useControllableState, useEventCallback } from '@fluentui/react-utilitie
2
2
  import * as React from 'react';
3
3
  import { createImmutableSet, emptyImmutableSet } from '../utils/ImmutableSet';
4
4
  export function useOpenItemsState(props) {
5
- const [openItems, setOpenItems] = useControllableState({
6
- state: React.useMemo(() => props.openItems && createImmutableSet(props.openItems), [props.openItems]),
7
- defaultState: React.useMemo(() => props.defaultOpenItems && createImmutableSet(props.defaultOpenItems), [props.defaultOpenItems]),
8
- initialState: emptyImmutableSet
9
- });
10
- const updateOpenItems = useEventCallback(data => setOpenItems(currentOpenItems => createNextOpenItems(data, currentOpenItems)));
11
- return [openItems, updateOpenItems];
5
+ const [openItems, setOpenItems] = useControllableState({
6
+ state: React.useMemo(()=>props.openItems && createImmutableSet(props.openItems), [
7
+ props.openItems
8
+ ]),
9
+ defaultState: props.defaultOpenItems && (()=>createImmutableSet(props.defaultOpenItems)),
10
+ initialState: emptyImmutableSet
11
+ });
12
+ const updateOpenItems = useEventCallback((data)=>setOpenItems((currentOpenItems)=>createNextOpenItems(data, currentOpenItems)));
13
+ return [
14
+ openItems,
15
+ updateOpenItems
16
+ ];
12
17
  }
13
18
  function createNextOpenItems(data, previousOpenItems) {
14
- const id = data.target.id;
15
- const previousOpenItemsHasId = previousOpenItems.has(id);
16
- if (data.open ? previousOpenItemsHasId : !previousOpenItemsHasId) {
17
- return previousOpenItems;
18
- }
19
- const nextOpenItems = createImmutableSet(previousOpenItems);
20
- return data.open ? nextOpenItems.add(id) : nextOpenItems.delete(id);
19
+ if (data.value === null) {
20
+ return previousOpenItems;
21
+ }
22
+ const previousOpenItemsHasId = previousOpenItems.has(data.value);
23
+ if (data.open ? previousOpenItemsHasId : !previousOpenItemsHasId) {
24
+ return previousOpenItems;
25
+ }
26
+ const nextOpenItems = createImmutableSet(previousOpenItems);
27
+ return data.open ? nextOpenItems.add(data.value) : nextOpenItems.delete(data.value);
21
28
  }
22
- //# sourceMappingURL=useOpenItemsState.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useControllableState","useEventCallback","React","createImmutableSet","emptyImmutableSet","useOpenItemsState","props","openItems","setOpenItems","state","useMemo","defaultState","defaultOpenItems","initialState","updateOpenItems","data","currentOpenItems","createNextOpenItems","previousOpenItems","id","target","previousOpenItemsHasId","has","open","nextOpenItems","add","delete"],"sources":["../src/packages/react-components/react-tree/src/hooks/useOpenItemsState.ts"],"sourcesContent":["import { useControllableState, useEventCallback } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport { TreeItemId, TreeOpenChangeData, TreeProps } from '../Tree';\nimport { createImmutableSet, emptyImmutableSet, ImmutableSet } from '../utils/ImmutableSet';\n\nexport function useOpenItemsState(props: Pick<TreeProps, 'openItems' | 'defaultOpenItems'>) {\n const [openItems, setOpenItems] = useControllableState({\n state: React.useMemo(() => props.openItems && createImmutableSet(props.openItems), [props.openItems]),\n defaultState: React.useMemo(\n () => props.defaultOpenItems && createImmutableSet(props.defaultOpenItems),\n [props.defaultOpenItems],\n ),\n initialState: emptyImmutableSet,\n });\n const updateOpenItems = useEventCallback((data: TreeOpenChangeData) =>\n setOpenItems(currentOpenItems => createNextOpenItems(data, currentOpenItems)),\n );\n return [openItems, updateOpenItems] as const;\n}\n\nfunction createNextOpenItems(\n data: TreeOpenChangeData,\n previousOpenItems: ImmutableSet<TreeItemId>,\n): ImmutableSet<TreeItemId> {\n const id = data.target.id;\n const previousOpenItemsHasId = previousOpenItems.has(id);\n if (data.open ? previousOpenItemsHasId : !previousOpenItemsHasId) {\n return previousOpenItems;\n }\n const nextOpenItems = createImmutableSet(previousOpenItems);\n return data.open ? nextOpenItems.add(id) : nextOpenItems.delete(id);\n}\n"],"mappings":"AAAA,SAASA,oBAAoB,EAAEC,gBAAgB,QAAQ,2BAA2B;AAClF,OAAO,KAAKC,KAAK,MAAM,OAAO;AAE9B,SAASC,kBAAkB,EAAEC,iBAAiB,QAAsB,uBAAuB;AAE3F,OAAM,SAAUC,iBAAiBA,CAACC,KAAwD;EACxF,MAAM,CAACC,SAAS,EAAEC,YAAY,CAAC,GAAGR,oBAAoB,CAAC;IACrDS,KAAK,EAAEP,KAAK,CAACQ,OAAO,CAAC,MAAMJ,KAAK,CAACC,SAAS,IAAIJ,kBAAkB,CAACG,KAAK,CAACC,SAAS,CAAC,EAAE,CAACD,KAAK,CAACC,SAAS,CAAC,CAAC;IACrGI,YAAY,EAAET,KAAK,CAACQ,OAAO,CACzB,MAAMJ,KAAK,CAACM,gBAAgB,IAAIT,kBAAkB,CAACG,KAAK,CAACM,gBAAgB,CAAC,EAC1E,CAACN,KAAK,CAACM,gBAAgB,CAAC,CACzB;IACDC,YAAY,EAAET;GACf,CAAC;EACF,MAAMU,eAAe,GAAGb,gBAAgB,CAAEc,IAAwB,IAChEP,YAAY,CAACQ,gBAAgB,IAAIC,mBAAmB,CAACF,IAAI,EAAEC,gBAAgB,CAAC,CAAC,CAC9E;EACD,OAAO,CAACT,SAAS,EAAEO,eAAe,CAAU;AAC9C;AAEA,SAASG,mBAAmBA,CAC1BF,IAAwB,EACxBG,iBAA2C;EAE3C,MAAMC,EAAE,GAAGJ,IAAI,CAACK,MAAM,CAACD,EAAE;EACzB,MAAME,sBAAsB,GAAGH,iBAAiB,CAACI,GAAG,CAACH,EAAE,CAAC;EACxD,IAAIJ,IAAI,CAACQ,IAAI,GAAGF,sBAAsB,GAAG,CAACA,sBAAsB,EAAE;IAChE,OAAOH,iBAAiB;;EAE1B,MAAMM,aAAa,GAAGrB,kBAAkB,CAACe,iBAAiB,CAAC;EAC3D,OAAOH,IAAI,CAACQ,IAAI,GAAGC,aAAa,CAACC,GAAG,CAACN,EAAE,CAAC,GAAGK,aAAa,CAACE,MAAM,CAACP,EAAE,CAAC;AACrE"}
1
+ {"version":3,"sources":["useOpenItemsState.ts"],"sourcesContent":["import { useControllableState, useEventCallback } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport { createImmutableSet, emptyImmutableSet, ImmutableSet } from '../utils/ImmutableSet';\nimport type { TreeOpenChangeData, TreeProps } from '../Tree';\n\nexport function useOpenItemsState(props: Pick<TreeProps, 'openItems' | 'defaultOpenItems'>) {\n const [openItems, setOpenItems] = useControllableState({\n state: React.useMemo(() => props.openItems && createImmutableSet(props.openItems), [props.openItems]),\n defaultState: props.defaultOpenItems && (() => createImmutableSet(props.defaultOpenItems)),\n initialState: emptyImmutableSet,\n });\n const updateOpenItems = useEventCallback((data: TreeOpenChangeData) =>\n setOpenItems(currentOpenItems => createNextOpenItems(data, currentOpenItems)),\n );\n return [openItems, updateOpenItems] as const;\n}\n\nfunction createNextOpenItems(data: TreeOpenChangeData, previousOpenItems: ImmutableSet<string>): ImmutableSet<string> {\n if (data.value === null) {\n return previousOpenItems;\n }\n const previousOpenItemsHasId = previousOpenItems.has(data.value);\n if (data.open ? previousOpenItemsHasId : !previousOpenItemsHasId) {\n return previousOpenItems;\n }\n const nextOpenItems = createImmutableSet(previousOpenItems);\n return data.open ? nextOpenItems.add(data.value) : nextOpenItems.delete(data.value);\n}\n"],"names":["useControllableState","useEventCallback","React","createImmutableSet","emptyImmutableSet","useOpenItemsState","props","openItems","setOpenItems","state","useMemo","defaultState","defaultOpenItems","initialState","updateOpenItems","data","currentOpenItems","createNextOpenItems","previousOpenItems","value","previousOpenItemsHasId","has","open","nextOpenItems","add","delete"],"mappings":"AAAA,SAASA,oBAAoB,EAAEC,gBAAgB,QAAQ,4BAA4B;AACnF,YAAYC,WAAW,QAAQ;AAC/B,SAASC,kBAAkB,EAAEC,iBAAiB,QAAsB,wBAAwB;AAG5F,OAAO,SAASC,kBAAkBC,KAAwD,EAAE;IAC1F,MAAM,CAACC,WAAWC,aAAa,GAAGR,qBAAqB;QACrDS,OAAOP,MAAMQ,OAAO,CAAC,IAAMJ,MAAMC,SAAS,IAAIJ,mBAAmBG,MAAMC,SAAS,GAAG;YAACD,MAAMC,SAAS;SAAC;QACpGI,cAAcL,MAAMM,gBAAgB,IAAK,CAAA,IAAMT,mBAAmBG,MAAMM,gBAAgB,CAAA;QACxFC,cAAcT;IAChB;IACA,MAAMU,kBAAkBb,iBAAiB,CAACc,OACxCP,aAAaQ,CAAAA,mBAAoBC,oBAAoBF,MAAMC;IAE7D,OAAO;QAACT;QAAWO;KAAgB;AACrC,CAAC;AAED,SAASG,oBAAoBF,IAAwB,EAAEG,iBAAuC,EAAwB;IACpH,IAAIH,KAAKI,KAAK,KAAK,IAAI,EAAE;QACvB,OAAOD;IACT,CAAC;IACD,MAAME,yBAAyBF,kBAAkBG,GAAG,CAACN,KAAKI,KAAK;IAC/D,IAAIJ,KAAKO,IAAI,GAAGF,yBAAyB,CAACA,sBAAsB,EAAE;QAChE,OAAOF;IACT,CAAC;IACD,MAAMK,gBAAgBpB,mBAAmBe;IACzC,OAAOH,KAAKO,IAAI,GAAGC,cAAcC,GAAG,CAACT,KAAKI,KAAK,IAAII,cAAcE,MAAM,CAACV,KAAKI,KAAK,CAAC;AACrF"}
@@ -3,51 +3,52 @@ import * as React from 'react';
3
3
  import { useHTMLElementWalkerRef } from './useHTMLElementWalker';
4
4
  /**
5
5
  * https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#kbd_roving_tabindex
6
- */
7
- export function useRovingTabIndex(filter) {
8
- const currentElementRef = React.useRef();
9
- const [walkerRef, rootRef] = useHTMLElementWalkerRef(filter);
10
- const rootRefCallback = element => {
11
- if (!element) {
12
- return;
6
+ */ export function useRovingTabIndex(filter) {
7
+ const currentElementRef = React.useRef();
8
+ const [walkerRef, rootRef] = useHTMLElementWalkerRef(filter);
9
+ const rootRefCallback = (element)=>{
10
+ if (!element) {
11
+ return;
12
+ }
13
+ reset();
14
+ };
15
+ function reset() {
16
+ if (!walkerRef.current) {
17
+ return;
18
+ }
19
+ const walker = walkerRef.current;
20
+ walker.currentElement = walker.root;
21
+ let tabbableChild = walker.firstChild((element)=>element.tabIndex === 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP);
22
+ walker.currentElement = walker.root;
23
+ tabbableChild !== null && tabbableChild !== void 0 ? tabbableChild : tabbableChild = walker.firstChild();
24
+ if (!tabbableChild) {
25
+ if (process.env.NODE_ENV === 'development') {
26
+ // eslint-disable-next-line no-console
27
+ console.warn('useRovingTabIndexes: internal error, no tabbable element was found');
28
+ }
29
+ return;
30
+ }
31
+ tabbableChild.tabIndex = 0;
32
+ currentElementRef.current = tabbableChild;
33
+ let nextElement = null;
34
+ while((nextElement = walker.nextElement()) && nextElement !== tabbableChild){
35
+ nextElement.tabIndex = -1;
36
+ }
13
37
  }
14
- reset();
15
- };
16
- function reset() {
17
- if (!walkerRef.current) {
18
- return;
38
+ function rove(nextElement) {
39
+ if (!currentElementRef.current) {
40
+ return;
41
+ }
42
+ currentElementRef.current.tabIndex = -1;
43
+ nextElement.tabIndex = 0;
44
+ nextElement.focus();
45
+ currentElementRef.current = nextElement;
19
46
  }
20
- const walker = walkerRef.current;
21
- walker.currentElement = walker.root;
22
- let tabbableChild = walker.firstChild(element => element.tabIndex === 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP);
23
- walker.currentElement = walker.root;
24
- tabbableChild !== null && tabbableChild !== void 0 ? tabbableChild : tabbableChild = walker.firstChild();
25
- if (!tabbableChild) {
26
- if (process.env.NODE_ENV === 'development') {
27
- // eslint-disable-next-line no-console
28
- console.warn('useRovingTabIndexes: internal error, no tabbable element was found');
29
- }
30
- return;
31
- }
32
- tabbableChild.tabIndex = 0;
33
- currentElementRef.current = tabbableChild;
34
- let nextElement = null;
35
- while ((nextElement = walker.nextElement()) && nextElement !== tabbableChild) {
36
- nextElement.tabIndex = -1;
37
- }
38
- }
39
- function rove(nextElement) {
40
- if (!currentElementRef.current) {
41
- return;
42
- }
43
- currentElementRef.current.tabIndex = -1;
44
- nextElement.tabIndex = 0;
45
- nextElement.focus();
46
- currentElementRef.current = nextElement;
47
- }
48
- return [{
49
- rove,
50
- reset
51
- }, useMergedRefs(rootRef, rootRefCallback)];
47
+ return [
48
+ {
49
+ rove,
50
+ reset
51
+ },
52
+ useMergedRefs(rootRef, rootRefCallback)
53
+ ];
52
54
  }
53
- //# sourceMappingURL=useRovingTabIndexes.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useMergedRefs","React","useHTMLElementWalkerRef","useRovingTabIndex","filter","currentElementRef","useRef","walkerRef","rootRef","rootRefCallback","element","reset","current","walker","currentElement","root","tabbableChild","firstChild","tabIndex","NodeFilter","FILTER_ACCEPT","FILTER_SKIP","process","env","NODE_ENV","console","warn","nextElement","rove","focus"],"sources":["../src/packages/react-components/react-tree/src/hooks/useRovingTabIndexes.ts"],"sourcesContent":["import { useMergedRefs } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport { HTMLElementFilter, useHTMLElementWalkerRef } from './useHTMLElementWalker';\n\n/**\n * https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#kbd_roving_tabindex\n */\nexport function useRovingTabIndex(filter?: HTMLElementFilter) {\n const currentElementRef = React.useRef<HTMLElement>();\n const [walkerRef, rootRef] = useHTMLElementWalkerRef(filter);\n\n const rootRefCallback = (element?: HTMLElement) => {\n if (!element) {\n return;\n }\n reset();\n };\n\n function reset() {\n if (!walkerRef.current) {\n return;\n }\n const walker = walkerRef.current;\n walker.currentElement = walker.root;\n let tabbableChild = walker.firstChild(element =>\n element.tabIndex === 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP,\n );\n walker.currentElement = walker.root;\n tabbableChild ??= walker.firstChild();\n if (!tabbableChild) {\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn('useRovingTabIndexes: internal error, no tabbable element was found');\n }\n return;\n }\n tabbableChild.tabIndex = 0;\n currentElementRef.current = tabbableChild;\n let nextElement: HTMLElement | null = null;\n while ((nextElement = walker.nextElement()) && nextElement !== tabbableChild) {\n nextElement.tabIndex = -1;\n }\n }\n function rove(nextElement: HTMLElement) {\n if (!currentElementRef.current) {\n return;\n }\n currentElementRef.current.tabIndex = -1;\n nextElement.tabIndex = 0;\n nextElement.focus();\n currentElementRef.current = nextElement;\n }\n\n return [\n {\n rove,\n reset,\n },\n useMergedRefs(rootRef, rootRefCallback) as React.Ref<HTMLElement>,\n ] as const;\n}\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,2BAA2B;AACzD,OAAO,KAAKC,KAAK,MAAM,OAAO;AAC9B,SAA4BC,uBAAuB,QAAQ,wBAAwB;AAEnF;;;AAGA,OAAM,SAAUC,iBAAiBA,CAACC,MAA0B;EAC1D,MAAMC,iBAAiB,GAAGJ,KAAK,CAACK,MAAM,EAAe;EACrD,MAAM,CAACC,SAAS,EAAEC,OAAO,CAAC,GAAGN,uBAAuB,CAACE,MAAM,CAAC;EAE5D,MAAMK,eAAe,GAAIC,OAAqB,IAAI;IAChD,IAAI,CAACA,OAAO,EAAE;MACZ;;IAEFC,KAAK,EAAE;EACT,CAAC;EAED,SAASA,KAAKA,CAAA;IACZ,IAAI,CAACJ,SAAS,CAACK,OAAO,EAAE;MACtB;;IAEF,MAAMC,MAAM,GAAGN,SAAS,CAACK,OAAO;IAChCC,MAAM,CAACC,cAAc,GAAGD,MAAM,CAACE,IAAI;IACnC,IAAIC,aAAa,GAAGH,MAAM,CAACI,UAAU,CAACP,OAAO,IAC3CA,OAAO,CAACQ,QAAQ,KAAK,CAAC,GAAGC,UAAU,CAACC,aAAa,GAAGD,UAAU,CAACE,WAAW,CAC3E;IACDR,MAAM,CAACC,cAAc,GAAGD,MAAM,CAACE,IAAI;IACnCC,aAAa,aAAbA,aAAa,cAAbA,aAAa,GAAbA,aAAa,GAAKH,MAAM,CAACI,UAAU,EAAE;IACrC,IAAI,CAACD,aAAa,EAAE;MAClB,IAAIM,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,EAAE;QAC1C;QACAC,OAAO,CAACC,IAAI,CAAC,oEAAoE,CAAC;;MAEpF;;IAEFV,aAAa,CAACE,QAAQ,GAAG,CAAC;IAC1Bb,iBAAiB,CAACO,OAAO,GAAGI,aAAa;IACzC,IAAIW,WAAW,GAAuB,IAAI;IAC1C,OAAO,CAACA,WAAW,GAAGd,MAAM,CAACc,WAAW,EAAE,KAAKA,WAAW,KAAKX,aAAa,EAAE;MAC5EW,WAAW,CAACT,QAAQ,GAAG,CAAC,CAAC;;EAE7B;EACA,SAASU,IAAIA,CAACD,WAAwB;IACpC,IAAI,CAACtB,iBAAiB,CAACO,OAAO,EAAE;MAC9B;;IAEFP,iBAAiB,CAACO,OAAO,CAACM,QAAQ,GAAG,CAAC,CAAC;IACvCS,WAAW,CAACT,QAAQ,GAAG,CAAC;IACxBS,WAAW,CAACE,KAAK,EAAE;IACnBxB,iBAAiB,CAACO,OAAO,GAAGe,WAAW;EACzC;EAEA,OAAO,CACL;IACEC,IAAI;IACJjB;GACD,EACDX,aAAa,CAACQ,OAAO,EAAEC,eAAe,CAA2B,CACzD;AACZ"}
1
+ {"version":3,"sources":["useRovingTabIndexes.ts"],"sourcesContent":["import { useMergedRefs } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport { HTMLElementFilter, useHTMLElementWalkerRef } from './useHTMLElementWalker';\n\n/**\n * https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#kbd_roving_tabindex\n */\nexport function useRovingTabIndex(filter?: HTMLElementFilter) {\n const currentElementRef = React.useRef<HTMLElement>();\n const [walkerRef, rootRef] = useHTMLElementWalkerRef(filter);\n\n const rootRefCallback = (element?: HTMLElement) => {\n if (!element) {\n return;\n }\n reset();\n };\n\n function reset() {\n if (!walkerRef.current) {\n return;\n }\n const walker = walkerRef.current;\n walker.currentElement = walker.root;\n let tabbableChild = walker.firstChild(element =>\n element.tabIndex === 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP,\n );\n walker.currentElement = walker.root;\n tabbableChild ??= walker.firstChild();\n if (!tabbableChild) {\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn('useRovingTabIndexes: internal error, no tabbable element was found');\n }\n return;\n }\n tabbableChild.tabIndex = 0;\n currentElementRef.current = tabbableChild;\n let nextElement: HTMLElement | null = null;\n while ((nextElement = walker.nextElement()) && nextElement !== tabbableChild) {\n nextElement.tabIndex = -1;\n }\n }\n function rove(nextElement: HTMLElement) {\n if (!currentElementRef.current) {\n return;\n }\n currentElementRef.current.tabIndex = -1;\n nextElement.tabIndex = 0;\n nextElement.focus();\n currentElementRef.current = nextElement;\n }\n\n return [\n {\n rove,\n reset,\n },\n useMergedRefs(rootRef, rootRefCallback) as React.Ref<HTMLElement>,\n ] as const;\n}\n"],"names":["useMergedRefs","React","useHTMLElementWalkerRef","useRovingTabIndex","filter","currentElementRef","useRef","walkerRef","rootRef","rootRefCallback","element","reset","current","walker","currentElement","root","tabbableChild","firstChild","tabIndex","NodeFilter","FILTER_ACCEPT","FILTER_SKIP","process","env","NODE_ENV","console","warn","nextElement","rove","focus"],"mappings":"AAAA,SAASA,aAAa,QAAQ,4BAA4B;AAC1D,YAAYC,WAAW,QAAQ;AAC/B,SAA4BC,uBAAuB,QAAQ,yBAAyB;AAEpF;;CAEC,GACD,OAAO,SAASC,kBAAkBC,MAA0B,EAAE;IAC5D,MAAMC,oBAAoBJ,MAAMK,MAAM;IACtC,MAAM,CAACC,WAAWC,QAAQ,GAAGN,wBAAwBE;IAErD,MAAMK,kBAAkB,CAACC,UAA0B;QACjD,IAAI,CAACA,SAAS;YACZ;QACF,CAAC;QACDC;IACF;IAEA,SAASA,QAAQ;QACf,IAAI,CAACJ,UAAUK,OAAO,EAAE;YACtB;QACF,CAAC;QACD,MAAMC,SAASN,UAAUK,OAAO;QAChCC,OAAOC,cAAc,GAAGD,OAAOE,IAAI;QACnC,IAAIC,gBAAgBH,OAAOI,UAAU,CAACP,CAAAA,UACpCA,QAAQQ,QAAQ,KAAK,IAAIC,WAAWC,aAAa,GAAGD,WAAWE,WAAW;QAE5ER,OAAOC,cAAc,GAAGD,OAAOE,IAAI;QACnCC,0BAAAA,2BAAAA,gBAAAA,gBAAkBH,OAAOI,UAAU,EAAE;QACrC,IAAI,CAACD,eAAe;YAClB,IAAIM,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;gBAC1C,sCAAsC;gBACtCC,QAAQC,IAAI,CAAC;YACf,CAAC;YACD;QACF,CAAC;QACDV,cAAcE,QAAQ,GAAG;QACzBb,kBAAkBO,OAAO,GAAGI;QAC5B,IAAIW,cAAkC,IAAI;QAC1C,MAAO,AAACA,CAAAA,cAAcd,OAAOc,WAAW,EAAC,KAAMA,gBAAgBX,cAAe;YAC5EW,YAAYT,QAAQ,GAAG,CAAC;QAC1B;IACF;IACA,SAASU,KAAKD,WAAwB,EAAE;QACtC,IAAI,CAACtB,kBAAkBO,OAAO,EAAE;YAC9B;QACF,CAAC;QACDP,kBAAkBO,OAAO,CAACM,QAAQ,GAAG,CAAC;QACtCS,YAAYT,QAAQ,GAAG;QACvBS,YAAYE,KAAK;QACjBxB,kBAAkBO,OAAO,GAAGe;IAC9B;IAEA,OAAO;QACL;YACEC;YACAjB;QACF;QACAX,cAAcQ,SAASC;KACxB;AACH,CAAC"}
package/lib/index.js CHANGED
@@ -6,4 +6,3 @@ export { TreeItemLayout, treeItemLayoutClassNames, renderTreeItemLayout_unstable
6
6
  export { TreeItemPersonaLayout, treeItemPersonaLayoutClassNames, renderTreeItemPersonaLayout_unstable, useTreeItemPersonaLayoutStyles_unstable, useTreeItemPersonaLayout_unstable } from './TreeItemPersonaLayout';
7
7
  export { useFlatTree_unstable } from './hooks/index';
8
8
  export { flattenTree_unstable } from './utils/flattenTree';
9
- //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["Tree","treeClassNames","renderTree_unstable","useTreeStyles_unstable","useTree_unstable","useTreeContextValues_unstable","TreeProvider","useTreeContext_unstable","useTreeItemContext_unstable","TreeItemProvider","treeItemLevelToken","TreeItem","treeItemClassNames","renderTreeItem_unstable","useTreeItemStyles_unstable","useTreeItem_unstable","TreeItemLayout","treeItemLayoutClassNames","renderTreeItemLayout_unstable","useTreeItemLayoutStyles_unstable","useTreeItemLayout_unstable","TreeItemPersonaLayout","treeItemPersonaLayoutClassNames","renderTreeItemPersonaLayout_unstable","useTreeItemPersonaLayoutStyles_unstable","useTreeItemPersonaLayout_unstable","useFlatTree_unstable","flattenTree_unstable"],"sources":["../src/packages/react-components/react-tree/src/index.ts"],"sourcesContent":["export {\n Tree,\n treeClassNames,\n renderTree_unstable,\n useTreeStyles_unstable,\n useTree_unstable,\n useTreeContextValues_unstable,\n} from './Tree';\nexport type {\n TreeProps,\n TreeState,\n TreeSlots,\n TreeOpenChangeData,\n TreeOpenChangeEvent,\n TreeNavigationEvent_unstable,\n TreeNavigationData_unstable,\n TreeItemId,\n} from './Tree';\n\nexport { TreeProvider, useTreeContext_unstable, useTreeItemContext_unstable, TreeItemProvider } from './contexts';\nexport type { TreeContextValue } from './contexts';\n\nexport { treeItemLevelToken } from './utils/tokens';\n\nexport {\n TreeItem,\n treeItemClassNames,\n renderTreeItem_unstable,\n useTreeItemStyles_unstable,\n useTreeItem_unstable,\n} from './TreeItem';\nexport type { TreeItemProps, TreeItemState, TreeItemSlots } from './TreeItem';\n\nexport {\n TreeItemLayout,\n treeItemLayoutClassNames,\n renderTreeItemLayout_unstable,\n useTreeItemLayoutStyles_unstable,\n useTreeItemLayout_unstable,\n} from './TreeItemLayout';\nexport type { TreeItemLayoutProps, TreeItemLayoutSlots, TreeItemLayoutState } from './TreeItemLayout';\n\nexport {\n TreeItemPersonaLayout,\n treeItemPersonaLayoutClassNames,\n renderTreeItemPersonaLayout_unstable,\n useTreeItemPersonaLayoutStyles_unstable,\n useTreeItemPersonaLayout_unstable,\n} from './TreeItemPersonaLayout';\nexport type {\n TreeItemPersonaLayoutProps,\n TreeItemPersonaLayoutSlots,\n TreeItemPersonaLayoutState,\n} from './TreeItemPersonaLayout';\n\nexport { useFlatTree_unstable } from './hooks/index';\nexport type { FlatTreeItem, FlatTreeItemProps, FlatTreeProps, FlatTree } from './hooks/index';\n\nexport { flattenTree_unstable } from './utils/flattenTree';\nexport type { NestedTreeItem } from './utils/flattenTree';\n"],"mappings":"AAAA,SACEA,IAAI,EACJC,cAAc,EACdC,mBAAmB,EACnBC,sBAAsB,EACtBC,gBAAgB,EAChBC,6BAA6B,QACxB,QAAQ;AAYf,SAASC,YAAY,EAAEC,uBAAuB,EAAEC,2BAA2B,EAAEC,gBAAgB,QAAQ,YAAY;AAGjH,SAASC,kBAAkB,QAAQ,gBAAgB;AAEnD,SACEC,QAAQ,EACRC,kBAAkB,EAClBC,uBAAuB,EACvBC,0BAA0B,EAC1BC,oBAAoB,QACf,YAAY;AAGnB,SACEC,cAAc,EACdC,wBAAwB,EACxBC,6BAA6B,EAC7BC,gCAAgC,EAChCC,0BAA0B,QACrB,kBAAkB;AAGzB,SACEC,qBAAqB,EACrBC,+BAA+B,EAC/BC,oCAAoC,EACpCC,uCAAuC,EACvCC,iCAAiC,QAC5B,yBAAyB;AAOhC,SAASC,oBAAoB,QAAQ,eAAe;AAGpD,SAASC,oBAAoB,QAAQ,qBAAqB"}
1
+ {"version":3,"sources":["index.ts"],"sourcesContent":["export {\n Tree,\n treeClassNames,\n renderTree_unstable,\n useTreeStyles_unstable,\n useTree_unstable,\n useTreeContextValues_unstable,\n} from './Tree';\nexport type {\n TreeProps,\n TreeState,\n TreeSlots,\n TreeOpenChangeData,\n TreeOpenChangeEvent,\n TreeNavigationEvent_unstable,\n TreeNavigationData_unstable,\n} from './Tree';\n\nexport { TreeProvider, useTreeContext_unstable, useTreeItemContext_unstable, TreeItemProvider } from './contexts';\nexport type { TreeContextValue } from './contexts';\n\nexport { treeItemLevelToken } from './utils/tokens';\n\nexport {\n TreeItem,\n treeItemClassNames,\n renderTreeItem_unstable,\n useTreeItemStyles_unstable,\n useTreeItem_unstable,\n} from './TreeItem';\nexport type { TreeItemProps, TreeItemState, TreeItemSlots } from './TreeItem';\n\nexport {\n TreeItemLayout,\n treeItemLayoutClassNames,\n renderTreeItemLayout_unstable,\n useTreeItemLayoutStyles_unstable,\n useTreeItemLayout_unstable,\n} from './TreeItemLayout';\nexport type { TreeItemLayoutProps, TreeItemLayoutSlots, TreeItemLayoutState } from './TreeItemLayout';\n\nexport {\n TreeItemPersonaLayout,\n treeItemPersonaLayoutClassNames,\n renderTreeItemPersonaLayout_unstable,\n useTreeItemPersonaLayoutStyles_unstable,\n useTreeItemPersonaLayout_unstable,\n} from './TreeItemPersonaLayout';\nexport type {\n TreeItemPersonaLayoutProps,\n TreeItemPersonaLayoutSlots,\n TreeItemPersonaLayoutState,\n} from './TreeItemPersonaLayout';\n\nexport { useFlatTree_unstable } from './hooks/index';\nexport type { FlatTreeItem, FlatTreeItemProps, FlatTreeProps, FlatTree } from './hooks/index';\n\nexport { flattenTree_unstable } from './utils/flattenTree';\nexport type { NestedTreeItem } from './utils/flattenTree';\n"],"names":["Tree","treeClassNames","renderTree_unstable","useTreeStyles_unstable","useTree_unstable","useTreeContextValues_unstable","TreeProvider","useTreeContext_unstable","useTreeItemContext_unstable","TreeItemProvider","treeItemLevelToken","TreeItem","treeItemClassNames","renderTreeItem_unstable","useTreeItemStyles_unstable","useTreeItem_unstable","TreeItemLayout","treeItemLayoutClassNames","renderTreeItemLayout_unstable","useTreeItemLayoutStyles_unstable","useTreeItemLayout_unstable","TreeItemPersonaLayout","treeItemPersonaLayoutClassNames","renderTreeItemPersonaLayout_unstable","useTreeItemPersonaLayoutStyles_unstable","useTreeItemPersonaLayout_unstable","useFlatTree_unstable","flattenTree_unstable"],"mappings":"AAAA,SACEA,IAAI,EACJC,cAAc,EACdC,mBAAmB,EACnBC,sBAAsB,EACtBC,gBAAgB,EAChBC,6BAA6B,QACxB,SAAS;AAWhB,SAASC,YAAY,EAAEC,uBAAuB,EAAEC,2BAA2B,EAAEC,gBAAgB,QAAQ,aAAa;AAGlH,SAASC,kBAAkB,QAAQ,iBAAiB;AAEpD,SACEC,QAAQ,EACRC,kBAAkB,EAClBC,uBAAuB,EACvBC,0BAA0B,EAC1BC,oBAAoB,QACf,aAAa;AAGpB,SACEC,cAAc,EACdC,wBAAwB,EACxBC,6BAA6B,EAC7BC,gCAAgC,EAChCC,0BAA0B,QACrB,mBAAmB;AAG1B,SACEC,qBAAqB,EACrBC,+BAA+B,EAC/BC,oCAAoC,EACpCC,uCAAuC,EACvCC,iCAAiC,QAC5B,0BAA0B;AAOjC,SAASC,oBAAoB,QAAQ,gBAAgB;AAGrD,SAASC,oBAAoB,QAAQ,sBAAsB"}
@@ -1,37 +1,34 @@
1
- export const emptyImmutableSet = /*#__PURE__*/createImmutableSet();
1
+ export const emptyImmutableSet = createImmutableSet();
2
2
  /**
3
3
  * properly creates an ImmutableSet instance from an iterable
4
- */
5
- export function createImmutableSet(iterable) {
6
- const internalSet = new Set(iterable);
7
- return dangerouslyCreateImmutableSet(internalSet);
4
+ */ export function createImmutableSet(iterable) {
5
+ const internalSet = new Set(iterable);
6
+ return dangerouslyCreateImmutableSet(internalSet);
8
7
  }
9
8
  /**
10
9
  * Avoid using *dangerouslyCreateImmutableSet*, since this method will expose internally used set, use createImmutableSet instead,
11
10
  * @param internalSet - a set that is used internally to store values.
12
- */
13
- export function dangerouslyCreateImmutableSet(internalSet) {
14
- return {
15
- size: internalSet.size,
16
- add(value) {
17
- const nextSet = new Set(internalSet);
18
- nextSet.add(value);
19
- return dangerouslyCreateImmutableSet(nextSet);
20
- },
21
- clear() {
22
- return emptyImmutableSet;
23
- },
24
- delete(value) {
25
- const nextSet = new Set(internalSet);
26
- nextSet.delete(value);
27
- return dangerouslyCreateImmutableSet(nextSet);
28
- },
29
- has(value) {
30
- return internalSet.has(value);
31
- },
32
- [Symbol.iterator]() {
33
- return internalSet[Symbol.iterator]();
34
- }
35
- };
11
+ */ export function dangerouslyCreateImmutableSet(internalSet) {
12
+ return {
13
+ size: internalSet.size,
14
+ add (value) {
15
+ const nextSet = new Set(internalSet);
16
+ nextSet.add(value);
17
+ return dangerouslyCreateImmutableSet(nextSet);
18
+ },
19
+ clear () {
20
+ return emptyImmutableSet;
21
+ },
22
+ delete (value) {
23
+ const nextSet = new Set(internalSet);
24
+ nextSet.delete(value);
25
+ return dangerouslyCreateImmutableSet(nextSet);
26
+ },
27
+ has (value) {
28
+ return internalSet.has(value);
29
+ },
30
+ [Symbol.iterator] () {
31
+ return internalSet[Symbol.iterator]();
32
+ }
33
+ };
36
34
  }
37
- //# sourceMappingURL=ImmutableSet.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["emptyImmutableSet","createImmutableSet","iterable","internalSet","Set","dangerouslyCreateImmutableSet","size","add","value","nextSet","clear","delete","has","Symbol","iterator"],"sources":["../src/packages/react-components/react-tree/src/utils/ImmutableSet.ts"],"sourcesContent":["export interface ImmutableSet<Value> {\n /**\n * The number of (unique) elements in a ImmutableSet.\n */\n readonly size: number;\n /**\n * Creates a new ImmutableSet containing all previous element plus the one provided as argument\n * @param value - new value to be included in the new ImmutableSet instance\n */\n add(value: Value): ImmutableSet<Value>;\n /**\n * Returns a reference to ImmutableSet.emptySet\n */\n clear(): ImmutableSet<Value>;\n /**\n * Creates a new ImmutableSet with the original items and removes a specified value from the new ImmutableSet.\n */\n delete(value: Value): ImmutableSet<Value>;\n /**\n * @returns a boolean indicating whether an element with the specified value exists in the ImmutableSet or not.\n */\n has(value: Value): boolean;\n /** Iterates over values in the ImmutableSet. */\n [Symbol.iterator](): IterableIterator<Value>;\n}\n\nexport const emptyImmutableSet = createImmutableSet<never>();\n\n/**\n * properly creates an ImmutableSet instance from an iterable\n */\nexport function createImmutableSet<Value>(iterable?: Iterable<Value>): ImmutableSet<Value> {\n const internalSet = new Set(iterable);\n return dangerouslyCreateImmutableSet(internalSet);\n}\n/**\n * Avoid using *dangerouslyCreateImmutableSet*, since this method will expose internally used set, use createImmutableSet instead,\n * @param internalSet - a set that is used internally to store values.\n */\nexport function dangerouslyCreateImmutableSet<Value>(internalSet: Set<Value>): ImmutableSet<Value> {\n return {\n size: internalSet.size,\n add(value) {\n const nextSet = new Set(internalSet);\n nextSet.add(value);\n return dangerouslyCreateImmutableSet(nextSet);\n },\n clear() {\n return emptyImmutableSet;\n },\n delete(value) {\n const nextSet = new Set(internalSet);\n nextSet.delete(value);\n return dangerouslyCreateImmutableSet(nextSet);\n },\n has(value) {\n return internalSet.has(value);\n },\n [Symbol.iterator]() {\n return internalSet[Symbol.iterator]();\n },\n };\n}\n"],"mappings":"AA0BA,OAAO,MAAMA,iBAAiB,gBAAGC,kBAAkB,EAAS;AAE5D;;;AAGA,OAAM,SAAUA,kBAAkBA,CAAQC,QAA0B;EAClE,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAACF,QAAQ,CAAC;EACrC,OAAOG,6BAA6B,CAACF,WAAW,CAAC;AACnD;AACA;;;;AAIA,OAAM,SAAUE,6BAA6BA,CAAQF,WAAuB;EAC1E,OAAO;IACLG,IAAI,EAAEH,WAAW,CAACG,IAAI;IACtBC,GAAGA,CAACC,KAAK;MACP,MAAMC,OAAO,GAAG,IAAIL,GAAG,CAACD,WAAW,CAAC;MACpCM,OAAO,CAACF,GAAG,CAACC,KAAK,CAAC;MAClB,OAAOH,6BAA6B,CAACI,OAAO,CAAC;IAC/C,CAAC;IACDC,KAAKA,CAAA;MACH,OAAOV,iBAAiB;IAC1B,CAAC;IACDW,MAAMA,CAACH,KAAK;MACV,MAAMC,OAAO,GAAG,IAAIL,GAAG,CAACD,WAAW,CAAC;MACpCM,OAAO,CAACE,MAAM,CAACH,KAAK,CAAC;MACrB,OAAOH,6BAA6B,CAACI,OAAO,CAAC;IAC/C,CAAC;IACDG,GAAGA,CAACJ,KAAK;MACP,OAAOL,WAAW,CAACS,GAAG,CAACJ,KAAK,CAAC;IAC/B,CAAC;IACD,CAACK,MAAM,CAACC,QAAQ,IAAC;MACf,OAAOX,WAAW,CAACU,MAAM,CAACC,QAAQ,CAAC,EAAE;IACvC;GACD;AACH"}
1
+ {"version":3,"sources":["ImmutableSet.ts"],"sourcesContent":["export interface ImmutableSet<Value> {\n /**\n * The number of (unique) elements in a ImmutableSet.\n */\n readonly size: number;\n /**\n * Creates a new ImmutableSet containing all previous element plus the one provided as argument\n * @param value - new value to be included in the new ImmutableSet instance\n */\n add(value: Value): ImmutableSet<Value>;\n /**\n * Returns a reference to ImmutableSet.emptySet\n */\n clear(): ImmutableSet<Value>;\n /**\n * Creates a new ImmutableSet with the original items and removes a specified value from the new ImmutableSet.\n */\n delete(value: Value): ImmutableSet<Value>;\n /**\n * @returns a boolean indicating whether an element with the specified value exists in the ImmutableSet or not.\n */\n has(value: Value): boolean;\n /** Iterates over values in the ImmutableSet. */\n [Symbol.iterator](): IterableIterator<Value>;\n}\n\nexport const emptyImmutableSet = createImmutableSet<never>();\n\n/**\n * properly creates an ImmutableSet instance from an iterable\n */\nexport function createImmutableSet<Value>(iterable?: Iterable<Value>): ImmutableSet<Value> {\n const internalSet = new Set(iterable);\n return dangerouslyCreateImmutableSet(internalSet);\n}\n/**\n * Avoid using *dangerouslyCreateImmutableSet*, since this method will expose internally used set, use createImmutableSet instead,\n * @param internalSet - a set that is used internally to store values.\n */\nexport function dangerouslyCreateImmutableSet<Value>(internalSet: Set<Value>): ImmutableSet<Value> {\n return {\n size: internalSet.size,\n add(value) {\n const nextSet = new Set(internalSet);\n nextSet.add(value);\n return dangerouslyCreateImmutableSet(nextSet);\n },\n clear() {\n return emptyImmutableSet;\n },\n delete(value) {\n const nextSet = new Set(internalSet);\n nextSet.delete(value);\n return dangerouslyCreateImmutableSet(nextSet);\n },\n has(value) {\n return internalSet.has(value);\n },\n [Symbol.iterator]() {\n return internalSet[Symbol.iterator]();\n },\n };\n}\n"],"names":["emptyImmutableSet","createImmutableSet","iterable","internalSet","Set","dangerouslyCreateImmutableSet","size","add","value","nextSet","clear","delete","has","Symbol","iterator"],"mappings":"AA0BA,OAAO,MAAMA,oBAAoBC,qBAA4B;AAE7D;;CAEC,GACD,OAAO,SAASA,mBAA0BC,QAA0B,EAAuB;IACzF,MAAMC,cAAc,IAAIC,IAAIF;IAC5B,OAAOG,8BAA8BF;AACvC,CAAC;AACD;;;CAGC,GACD,OAAO,SAASE,8BAAqCF,WAAuB,EAAuB;IACjG,OAAO;QACLG,MAAMH,YAAYG,IAAI;QACtBC,KAAIC,KAAK,EAAE;YACT,MAAMC,UAAU,IAAIL,IAAID;YACxBM,QAAQF,GAAG,CAACC;YACZ,OAAOH,8BAA8BI;QACvC;QACAC,SAAQ;YACN,OAAOV;QACT;QACAW,QAAOH,KAAK,EAAE;YACZ,MAAMC,UAAU,IAAIL,IAAID;YACxBM,QAAQE,MAAM,CAACH;YACf,OAAOH,8BAA8BI;QACvC;QACAG,KAAIJ,KAAK,EAAE;YACT,OAAOL,YAAYS,GAAG,CAACJ;QACzB;QACA,CAACK,OAAOC,QAAQ,CAAC,IAAG;YAClB,OAAOX,WAAW,CAACU,OAAOC,QAAQ,CAAC;QACrC;IACF;AACF,CAAC"}
@@ -1,7 +1,7 @@
1
+ import * as React from 'react';
1
2
  export function assertIsDefinedRef(refObject, msg = `assertIsDefinedRef: reference not properly defined ${refObject}`) {
2
- // eslint-disable-next-line eqeqeq
3
- if (refObject.current == undefined && process.env.NODE_ENV === 'development') {
4
- throw new TypeError(msg);
5
- }
3
+ // eslint-disable-next-line eqeqeq
4
+ if (refObject.current == undefined && process.env.NODE_ENV === 'development') {
5
+ throw new TypeError(msg);
6
+ }
6
7
  }
7
- //# sourceMappingURL=assert.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["assertIsDefinedRef","refObject","msg","current","undefined","process","env","NODE_ENV","TypeError"],"sources":["../src/packages/react-components/react-tree/src/utils/assert.ts"],"sourcesContent":["import * as React from 'react';\n\nexport function assertIsDefinedRef<V>(\n refObject: React.RefObject<V | null | undefined>,\n msg = `assertIsDefinedRef: reference not properly defined ${refObject}`,\n): asserts refObject is React.MutableRefObject<V> {\n // eslint-disable-next-line eqeqeq\n if (refObject.current == undefined && process.env.NODE_ENV === 'development') {\n throw new TypeError(msg);\n }\n}\n"],"mappings":"AAEA,OAAM,SAAUA,kBAAkBA,CAChCC,SAAgD,EAChDC,GAAG,GAAG,sDAAsDD,SAAS,EAAE;EAEvE;EACA,IAAIA,SAAS,CAACE,OAAO,IAAIC,SAAS,IAAIC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,EAAE;IAC5E,MAAM,IAAIC,SAAS,CAACN,GAAG,CAAC;;AAE5B"}
1
+ {"version":3,"sources":["assert.ts"],"sourcesContent":["import * as React from 'react';\n\nexport function assertIsDefinedRef<V>(\n refObject: React.RefObject<V | null | undefined>,\n msg = `assertIsDefinedRef: reference not properly defined ${refObject}`,\n): asserts refObject is React.MutableRefObject<V> {\n // eslint-disable-next-line eqeqeq\n if (refObject.current == undefined && process.env.NODE_ENV === 'development') {\n throw new TypeError(msg);\n }\n}\n"],"names":["React","assertIsDefinedRef","refObject","msg","current","undefined","process","env","NODE_ENV","TypeError"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAE/B,OAAO,SAASC,mBACdC,SAAgD,EAChDC,MAAM,CAAC,mDAAmD,EAAED,UAAU,CAAC,EACvB;IAChD,kCAAkC;IAClC,IAAIA,UAAUE,OAAO,IAAIC,aAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC5E,MAAM,IAAIC,UAAUN,KAAK;IAC3B,CAAC;AACH,CAAC"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * creates a list of flat tree items
3
+ * and provides a map to access each item by id
4
+ */ export function createFlatTreeItems(flatTreeItemProps) {
5
+ const root = createFlatTreeRootItem();
6
+ const itemsPerValue = new Map([
7
+ [
8
+ root.value,
9
+ root
10
+ ]
11
+ ]);
12
+ const items = [];
13
+ for(let index = 0; index < flatTreeItemProps.length; index++){
14
+ const { parentValue =flatTreeRootId , ...treeItemProps } = flatTreeItemProps[index];
15
+ const nextItemProps = flatTreeItemProps[index + 1];
16
+ const currentParent = itemsPerValue.get(parentValue);
17
+ if (!currentParent) {
18
+ if (process.env.NODE_ENV === 'development') {
19
+ // eslint-disable-next-line no-console
20
+ console.error(`useFlatTree: item ${flatTreeItemProps[index].value} is wrongly positioned, did you properly ordered provided item props? make sure provided items are organized`);
21
+ }
22
+ break;
23
+ }
24
+ var _treeItemProps_itemType;
25
+ const itemType = (_treeItemProps_itemType = treeItemProps.itemType) !== null && _treeItemProps_itemType !== void 0 ? _treeItemProps_itemType : treeItemProps.value === undefined || (nextItemProps === null || nextItemProps === void 0 ? void 0 : nextItemProps.parentValue) !== treeItemProps.value ? 'leaf' : 'branch';
26
+ var _currentParent_level;
27
+ const currentLevel = ((_currentParent_level = currentParent.level) !== null && _currentParent_level !== void 0 ? _currentParent_level : 0) + 1;
28
+ const currentChildrenSize = ++currentParent.childrenSize;
29
+ const flatTreeItem = {
30
+ value: treeItemProps.value,
31
+ getTreeItemProps: ()=>({
32
+ ...treeItemProps,
33
+ 'aria-level': currentLevel,
34
+ 'aria-posinset': currentChildrenSize,
35
+ 'aria-setsize': currentParent.childrenSize,
36
+ itemType
37
+ }),
38
+ level: currentLevel,
39
+ parentValue,
40
+ childrenSize: 0,
41
+ index: -1
42
+ };
43
+ itemsPerValue.set(flatTreeItem.value, flatTreeItem);
44
+ items.push(flatTreeItem);
45
+ }
46
+ const flatTreeItems = {
47
+ root,
48
+ size: items.length,
49
+ getByIndex: (index)=>items[index],
50
+ get: (key)=>itemsPerValue.get(key),
51
+ set: (key, value)=>itemsPerValue.set(key, value)
52
+ };
53
+ return flatTreeItems;
54
+ }
55
+ export const flatTreeRootId = '__fuiFlatTreeRoot';
56
+ function createFlatTreeRootItem() {
57
+ return {
58
+ parentValue: undefined,
59
+ value: flatTreeRootId,
60
+ getTreeItemProps: ()=>{
61
+ if (process.env.NODE_ENV !== 'production') {
62
+ // eslint-disable-next-line no-console
63
+ console.error('useFlatTree: internal error, trying to access treeitem props from invalid root element');
64
+ }
65
+ return {
66
+ id: flatTreeRootId,
67
+ value: flatTreeRootId,
68
+ 'aria-setsize': -1,
69
+ 'aria-level': -1,
70
+ 'aria-posinset': -1,
71
+ itemType: 'branch'
72
+ };
73
+ },
74
+ childrenSize: 0,
75
+ get index () {
76
+ if (process.env.NODE_ENV !== 'production') {
77
+ // eslint-disable-next-line no-console
78
+ console.error('useFlatTree: internal error, trying to access treeitem props from invalid root element');
79
+ }
80
+ return -1;
81
+ },
82
+ level: 0
83
+ };
84
+ }
85
+ // eslint-disable-next-line @typescript-eslint/naming-convention
86
+ export function* VisibleFlatTreeItemGenerator(openItems, flatTreeItems) {
87
+ for(let index = 0, visibleIndex = 0; index < flatTreeItems.size; index++){
88
+ const item = flatTreeItems.getByIndex(index);
89
+ if (isItemVisible(item, openItems, flatTreeItems)) {
90
+ item.index = visibleIndex++;
91
+ yield item;
92
+ } else {
93
+ // Jump the amount of children the current item has, since those items will also be hidden
94
+ index += item.childrenSize;
95
+ }
96
+ }
97
+ }
98
+ function isItemVisible(item, openItems, flatTreeItems) {
99
+ if (item.level === 1) {
100
+ return true;
101
+ }
102
+ while(item.parentValue && item.parentValue !== flatTreeItems.root.value){
103
+ if (!openItems.has(item.parentValue)) {
104
+ return false;
105
+ }
106
+ const parent = flatTreeItems.get(item.parentValue);
107
+ if (!parent) {
108
+ return false;
109
+ }
110
+ item = parent;
111
+ }
112
+ return true;
113
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["createFlatTreeItems.ts"],"sourcesContent":["import type { ImmutableSet } from './ImmutableSet';\nimport type { FlatTreeItem, FlatTreeItemProps } from '../hooks/useFlatTree';\nimport { TreeItemValue } from '../TreeItem';\n\n/**\n * @internal\n */\nexport type FlatTreeItems<Props extends FlatTreeItemProps> = {\n size: number;\n root: FlatTreeItem;\n get(key: TreeItemValue): FlatTreeItem<Props> | undefined;\n set(key: TreeItemValue, value: FlatTreeItem<Props>): void;\n getByIndex(index: number): FlatTreeItem<Props>;\n};\n\n/**\n * creates a list of flat tree items\n * and provides a map to access each item by id\n */\nexport function createFlatTreeItems<Props extends FlatTreeItemProps>(flatTreeItemProps: Props[]): FlatTreeItems<Props> {\n const root = createFlatTreeRootItem();\n const itemsPerValue = new Map<TreeItemValue, FlatTreeItem<FlatTreeItemProps>>([[root.value, root]]);\n const items: FlatTreeItem<FlatTreeItemProps>[] = [];\n\n for (let index = 0; index < flatTreeItemProps.length; index++) {\n const { parentValue = flatTreeRootId, ...treeItemProps } = flatTreeItemProps[index];\n\n const nextItemProps: Props | undefined = flatTreeItemProps[index + 1];\n const currentParent = itemsPerValue.get(parentValue);\n if (!currentParent) {\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.error(\n `useFlatTree: item ${flatTreeItemProps[index].value} is wrongly positioned, did you properly ordered provided item props? make sure provided items are organized`,\n );\n }\n break;\n }\n const itemType =\n treeItemProps.itemType ??\n (treeItemProps.value === undefined || nextItemProps?.parentValue !== treeItemProps.value ? 'leaf' : 'branch');\n const currentLevel = (currentParent.level ?? 0) + 1;\n const currentChildrenSize = ++currentParent.childrenSize;\n\n const flatTreeItem: FlatTreeItem<FlatTreeItemProps> = {\n value: treeItemProps.value,\n getTreeItemProps: () => ({\n ...treeItemProps,\n 'aria-level': currentLevel,\n 'aria-posinset': currentChildrenSize,\n 'aria-setsize': currentParent.childrenSize,\n itemType,\n }),\n level: currentLevel,\n parentValue,\n childrenSize: 0,\n index: -1,\n };\n itemsPerValue.set(flatTreeItem.value, flatTreeItem);\n items.push(flatTreeItem);\n }\n\n const flatTreeItems: FlatTreeItems<FlatTreeItemProps> = {\n root,\n size: items.length,\n getByIndex: index => items[index],\n get: key => itemsPerValue.get(key),\n set: (key, value) => itemsPerValue.set(key, value),\n };\n\n return flatTreeItems as FlatTreeItems<Props>;\n}\n\nexport const flatTreeRootId = '__fuiFlatTreeRoot';\n\nfunction createFlatTreeRootItem(): FlatTreeItem {\n return {\n parentValue: undefined,\n value: flatTreeRootId,\n getTreeItemProps: () => {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.error('useFlatTree: internal error, trying to access treeitem props from invalid root element');\n }\n return {\n id: flatTreeRootId,\n value: flatTreeRootId,\n 'aria-setsize': -1,\n 'aria-level': -1,\n 'aria-posinset': -1,\n itemType: 'branch',\n };\n },\n childrenSize: 0,\n get index() {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.error('useFlatTree: internal error, trying to access treeitem props from invalid root element');\n }\n return -1;\n },\n level: 0,\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function* VisibleFlatTreeItemGenerator<Props extends FlatTreeItemProps>(\n openItems: ImmutableSet<string>,\n flatTreeItems: FlatTreeItems<Props>,\n) {\n for (let index = 0, visibleIndex = 0; index < flatTreeItems.size; index++) {\n const item = flatTreeItems.getByIndex(index) as FlatTreeItem<Props>;\n if (isItemVisible(item, openItems, flatTreeItems)) {\n item.index = visibleIndex++;\n yield item;\n } else {\n // Jump the amount of children the current item has, since those items will also be hidden\n index += item.childrenSize;\n }\n }\n}\n\nfunction isItemVisible(\n item: FlatTreeItem<FlatTreeItemProps>,\n openItems: ImmutableSet<TreeItemValue>,\n flatTreeItems: FlatTreeItems<FlatTreeItemProps>,\n) {\n if (item.level === 1) {\n return true;\n }\n while (item.parentValue && item.parentValue !== flatTreeItems.root.value) {\n if (!openItems.has(item.parentValue)) {\n return false;\n }\n const parent = flatTreeItems.get(item.parentValue);\n if (!parent) {\n return false;\n }\n item = parent;\n }\n return true;\n}\n"],"names":["createFlatTreeItems","flatTreeItemProps","root","createFlatTreeRootItem","itemsPerValue","Map","value","items","index","length","parentValue","flatTreeRootId","treeItemProps","nextItemProps","currentParent","get","process","env","NODE_ENV","console","error","itemType","undefined","currentLevel","level","currentChildrenSize","childrenSize","flatTreeItem","getTreeItemProps","set","push","flatTreeItems","size","getByIndex","key","id","VisibleFlatTreeItemGenerator","openItems","visibleIndex","item","isItemVisible","has","parent"],"mappings":"AAeA;;;CAGC,GACD,OAAO,SAASA,oBAAqDC,iBAA0B,EAAwB;IACrH,MAAMC,OAAOC;IACb,MAAMC,gBAAgB,IAAIC,IAAoD;QAAC;YAACH,KAAKI,KAAK;YAAEJ;SAAK;KAAC;IAClG,MAAMK,QAA2C,EAAE;IAEnD,IAAK,IAAIC,QAAQ,GAAGA,QAAQP,kBAAkBQ,MAAM,EAAED,QAAS;QAC7D,MAAM,EAAEE,aAAcC,eAAc,EAAE,GAAGC,eAAe,GAAGX,iBAAiB,CAACO,MAAM;QAEnF,MAAMK,gBAAmCZ,iBAAiB,CAACO,QAAQ,EAAE;QACrE,MAAMM,gBAAgBV,cAAcW,GAAG,CAACL;QACxC,IAAI,CAACI,eAAe;YAClB,IAAIE,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;gBAC1C,sCAAsC;gBACtCC,QAAQC,KAAK,CACX,CAAC,kBAAkB,EAAEnB,iBAAiB,CAACO,MAAM,CAACF,KAAK,CAAC,4GAA4G,CAAC;YAErK,CAAC;YACD,KAAM;QACR,CAAC;YAECM;QADF,MAAMS,WACJT,CAAAA,0BAAAA,cAAcS,QAAQ,cAAtBT,qCAAAA,0BACCA,cAAcN,KAAK,KAAKgB,aAAaT,CAAAA,0BAAAA,2BAAAA,KAAAA,IAAAA,cAAeH,WAAW,AAAD,MAAME,cAAcN,KAAK,GAAG,SAAS,QAAQ,AAAC;YACzFQ;QAAtB,MAAMS,eAAe,AAACT,CAAAA,CAAAA,uBAAAA,cAAcU,KAAK,cAAnBV,kCAAAA,uBAAuB,CAAC,AAAD,IAAK;QAClD,MAAMW,sBAAsB,EAAEX,cAAcY,YAAY;QAExD,MAAMC,eAAgD;YACpDrB,OAAOM,cAAcN,KAAK;YAC1BsB,kBAAkB,IAAO,CAAA;oBACvB,GAAGhB,aAAa;oBAChB,cAAcW;oBACd,iBAAiBE;oBACjB,gBAAgBX,cAAcY,YAAY;oBAC1CL;gBACF,CAAA;YACAG,OAAOD;YACPb;YACAgB,cAAc;YACdlB,OAAO,CAAC;QACV;QACAJ,cAAcyB,GAAG,CAACF,aAAarB,KAAK,EAAEqB;QACtCpB,MAAMuB,IAAI,CAACH;IACb;IAEA,MAAMI,gBAAkD;QACtD7B;QACA8B,MAAMzB,MAAME,MAAM;QAClBwB,YAAYzB,CAAAA,QAASD,KAAK,CAACC,MAAM;QACjCO,KAAKmB,CAAAA,MAAO9B,cAAcW,GAAG,CAACmB;QAC9BL,KAAK,CAACK,KAAK5B,QAAUF,cAAcyB,GAAG,CAACK,KAAK5B;IAC9C;IAEA,OAAOyB;AACT,CAAC;AAED,OAAO,MAAMpB,iBAAiB,oBAAoB;AAElD,SAASR,yBAAuC;IAC9C,OAAO;QACLO,aAAaY;QACbhB,OAAOK;QACPiB,kBAAkB,IAAM;YACtB,IAAIZ,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;gBACzC,sCAAsC;gBACtCC,QAAQC,KAAK,CAAC;YAChB,CAAC;YACD,OAAO;gBACLe,IAAIxB;gBACJL,OAAOK;gBACP,gBAAgB,CAAC;gBACjB,cAAc,CAAC;gBACf,iBAAiB,CAAC;gBAClBU,UAAU;YACZ;QACF;QACAK,cAAc;QACd,IAAIlB,SAAQ;YACV,IAAIQ,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;gBACzC,sCAAsC;gBACtCC,QAAQC,KAAK,CAAC;YAChB,CAAC;YACD,OAAO,CAAC;QACV;QACAI,OAAO;IACT;AACF;AAEA,gEAAgE;AAChE,OAAO,UAAUY,6BACfC,SAA+B,EAC/BN,aAAmC,EACnC;IACA,IAAK,IAAIvB,QAAQ,GAAG8B,eAAe,GAAG9B,QAAQuB,cAAcC,IAAI,EAAExB,QAAS;QACzE,MAAM+B,OAAOR,cAAcE,UAAU,CAACzB;QACtC,IAAIgC,cAAcD,MAAMF,WAAWN,gBAAgB;YACjDQ,KAAK/B,KAAK,GAAG8B;YACb,MAAMC;QACR,OAAO;YACL,0FAA0F;YAC1F/B,SAAS+B,KAAKb,YAAY;QAC5B,CAAC;IACH;AACF,CAAC;AAED,SAASc,cACPD,IAAqC,EACrCF,SAAsC,EACtCN,aAA+C,EAC/C;IACA,IAAIQ,KAAKf,KAAK,KAAK,GAAG;QACpB,OAAO,IAAI;IACb,CAAC;IACD,MAAOe,KAAK7B,WAAW,IAAI6B,KAAK7B,WAAW,KAAKqB,cAAc7B,IAAI,CAACI,KAAK,CAAE;QACxE,IAAI,CAAC+B,UAAUI,GAAG,CAACF,KAAK7B,WAAW,GAAG;YACpC,OAAO,KAAK;QACd,CAAC;QACD,MAAMgC,SAASX,cAAchB,GAAG,CAACwB,KAAK7B,WAAW;QACjD,IAAI,CAACgC,QAAQ;YACX,OAAO,KAAK;QACd,CAAC;QACDH,OAAOG;IACT;IACA,OAAO,IAAI;AACb"}