@fluentui/react-tree 9.0.0-beta.1 → 9.0.0-beta.11

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 (183) hide show
  1. package/.swcrc +30 -0
  2. package/CHANGELOG.json +448 -1
  3. package/CHANGELOG.md +135 -2
  4. package/dist/index.d.ts +139 -25
  5. package/lib/Tree.js.map +1 -1
  6. package/lib/TreeItem.js.map +1 -1
  7. package/lib/TreeItemLayout.js.map +1 -1
  8. package/lib/TreeItemPersonaLayout.js.map +1 -1
  9. package/lib/components/Tree/Tree.js.map +1 -1
  10. package/lib/components/Tree/Tree.types.js +1 -1
  11. package/lib/components/Tree/Tree.types.js.map +1 -1
  12. package/lib/components/Tree/index.js.map +1 -1
  13. package/lib/components/Tree/renderTree.js +5 -7
  14. package/lib/components/Tree/renderTree.js.map +1 -1
  15. package/lib/components/Tree/useTree.js +5 -4
  16. package/lib/components/Tree/useTree.js.map +1 -1
  17. package/lib/components/Tree/useTreeContextValues.js +3 -3
  18. package/lib/components/Tree/useTreeContextValues.js.map +1 -1
  19. package/lib/components/Tree/useTreeStyles.js.map +1 -1
  20. package/lib/components/TreeItem/TreeItem.js +10 -1
  21. package/lib/components/TreeItem/TreeItem.js.map +1 -1
  22. package/lib/components/TreeItem/TreeItem.types.js +1 -1
  23. package/lib/components/TreeItem/TreeItem.types.js.map +1 -1
  24. package/lib/components/TreeItem/index.js.map +1 -1
  25. package/lib/components/TreeItem/renderTreeItem.js +6 -16
  26. package/lib/components/TreeItem/renderTreeItem.js.map +1 -1
  27. package/lib/components/TreeItem/useTreeItem.js.map +1 -1
  28. package/lib/components/TreeItem/useTreeItemContextValues.js.map +1 -1
  29. package/lib/components/TreeItem/useTreeItemStyles.js.map +1 -1
  30. package/lib/components/TreeItemLayout/TreeItemLayout.js +3 -1
  31. package/lib/components/TreeItemLayout/TreeItemLayout.js.map +1 -1
  32. package/lib/components/TreeItemLayout/TreeItemLayout.types.js.map +1 -1
  33. package/lib/components/TreeItemLayout/index.js.map +1 -1
  34. package/lib/components/TreeItemLayout/renderTreeItemLayout.js +4 -12
  35. package/lib/components/TreeItemLayout/renderTreeItemLayout.js.map +1 -1
  36. package/lib/components/TreeItemLayout/useTreeItemLayout.js +1 -0
  37. package/lib/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
  38. package/lib/components/TreeItemLayout/useTreeItemLayoutStyles.js.map +1 -1
  39. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js +3 -1
  40. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js.map +1 -1
  41. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js.map +1 -1
  42. package/lib/components/TreeItemPersonaLayout/index.js.map +1 -1
  43. package/lib/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js +5 -17
  44. package/lib/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js.map +1 -1
  45. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js +1 -0
  46. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js.map +1 -1
  47. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js.map +1 -1
  48. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.js.map +1 -1
  49. package/lib/contexts/index.js.map +1 -1
  50. package/lib/contexts/treeContext.js +1 -2
  51. package/lib/contexts/treeContext.js.map +1 -1
  52. package/lib/contexts/treeItemContext.js +2 -4
  53. package/lib/contexts/treeItemContext.js.map +1 -1
  54. package/lib/hooks/index.js +1 -1
  55. package/lib/hooks/index.js.map +1 -1
  56. package/lib/hooks/useFlatTree.js +77 -0
  57. package/lib/hooks/useFlatTree.js.map +1 -0
  58. package/lib/hooks/useFlatTreeNavigation.js +10 -10
  59. package/lib/hooks/useFlatTreeNavigation.js.map +1 -1
  60. package/lib/hooks/useHTMLElementWalker.js +5 -5
  61. package/lib/hooks/useHTMLElementWalker.js.map +1 -1
  62. package/lib/hooks/useNestedTreeNavigation.js.map +1 -1
  63. package/lib/hooks/useOpenItemsState.js.map +1 -1
  64. package/lib/hooks/useRovingTabIndexes.js.map +1 -1
  65. package/lib/index.js +1 -1
  66. package/lib/index.js.map +1 -1
  67. package/lib/utils/ImmutableSet.js.map +1 -1
  68. package/lib/utils/assert.js +1 -0
  69. package/lib/utils/assert.js.map +1 -1
  70. package/lib/utils/createFlatTreeItems.js +109 -0
  71. package/lib/utils/createFlatTreeItems.js.map +1 -0
  72. package/lib/utils/flattenTree.js +75 -16
  73. package/lib/utils/flattenTree.js.map +1 -1
  74. package/lib/utils/nextTypeAheadElement.js +2 -2
  75. package/lib/utils/nextTypeAheadElement.js.map +1 -1
  76. package/lib/utils/normalizeOpenItems.js.map +1 -1
  77. package/lib/utils/tokens.js.map +1 -1
  78. package/lib/utils/treeItemFilter.js.map +1 -1
  79. package/lib-commonjs/Tree.js +5 -4
  80. package/lib-commonjs/Tree.js.map +1 -1
  81. package/lib-commonjs/TreeItem.js +5 -4
  82. package/lib-commonjs/TreeItem.js.map +1 -1
  83. package/lib-commonjs/TreeItemLayout.js +5 -4
  84. package/lib-commonjs/TreeItemLayout.js.map +1 -1
  85. package/lib-commonjs/TreeItemPersonaLayout.js +5 -4
  86. package/lib-commonjs/TreeItemPersonaLayout.js.map +1 -1
  87. package/lib-commonjs/components/Tree/Tree.js +18 -22
  88. package/lib-commonjs/components/Tree/Tree.js.map +1 -1
  89. package/lib-commonjs/components/Tree/Tree.types.js +5 -2
  90. package/lib-commonjs/components/Tree/Tree.types.js.map +1 -1
  91. package/lib-commonjs/components/Tree/index.js +10 -9
  92. package/lib-commonjs/components/Tree/index.js.map +1 -1
  93. package/lib-commonjs/components/Tree/renderTree.js +16 -19
  94. package/lib-commonjs/components/Tree/renderTree.js.map +1 -1
  95. package/lib-commonjs/components/Tree/useTree.js +88 -101
  96. package/lib-commonjs/components/Tree/useTree.js.map +1 -1
  97. package/lib-commonjs/components/Tree/useTreeContextValues.js +22 -28
  98. package/lib-commonjs/components/Tree/useTreeContextValues.js.map +1 -1
  99. package/lib-commonjs/components/Tree/useTreeStyles.js +31 -20
  100. package/lib-commonjs/components/Tree/useTreeStyles.js.map +1 -1
  101. package/lib-commonjs/components/TreeItem/TreeItem.js +18 -17
  102. package/lib-commonjs/components/TreeItem/TreeItem.js.map +1 -1
  103. package/lib-commonjs/components/TreeItem/TreeItem.types.js +5 -3
  104. package/lib-commonjs/components/TreeItem/TreeItem.types.js.map +1 -1
  105. package/lib-commonjs/components/TreeItem/index.js +9 -8
  106. package/lib-commonjs/components/TreeItem/index.js.map +1 -1
  107. package/lib-commonjs/components/TreeItem/renderTreeItem.js +19 -33
  108. package/lib-commonjs/components/TreeItem/renderTreeItem.js.map +1 -1
  109. package/lib-commonjs/components/TreeItem/useTreeItem.js +229 -249
  110. package/lib-commonjs/components/TreeItem/useTreeItem.js.map +1 -1
  111. package/lib-commonjs/components/TreeItem/useTreeItemContextValues.js +24 -20
  112. package/lib-commonjs/components/TreeItem/useTreeItemContextValues.js.map +1 -1
  113. package/lib-commonjs/components/TreeItem/useTreeItemStyles.js +353 -188
  114. package/lib-commonjs/components/TreeItem/useTreeItemStyles.js.map +1 -1
  115. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.js +16 -15
  116. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.js.map +1 -1
  117. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.types.js +3 -2
  118. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.types.js.map +1 -1
  119. package/lib-commonjs/components/TreeItemLayout/index.js +9 -8
  120. package/lib-commonjs/components/TreeItemLayout/index.js.map +1 -1
  121. package/lib-commonjs/components/TreeItemLayout/renderTreeItemLayout.js +14 -28
  122. package/lib-commonjs/components/TreeItemLayout/renderTreeItemLayout.js.map +1 -1
  123. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js +42 -52
  124. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
  125. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.js +126 -88
  126. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.js.map +1 -1
  127. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js +18 -17
  128. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js.map +1 -1
  129. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js +3 -2
  130. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js.map +1 -1
  131. package/lib-commonjs/components/TreeItemPersonaLayout/index.js +9 -8
  132. package/lib-commonjs/components/TreeItemPersonaLayout/index.js.map +1 -1
  133. package/lib-commonjs/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js +17 -35
  134. package/lib-commonjs/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js.map +1 -1
  135. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js +46 -61
  136. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js.map +1 -1
  137. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js +18 -15
  138. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js.map +1 -1
  139. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.js +165 -101
  140. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.js.map +1 -1
  141. package/lib-commonjs/contexts/index.js +6 -5
  142. package/lib-commonjs/contexts/index.js.map +1 -1
  143. package/lib-commonjs/contexts/treeContext.js +25 -17
  144. package/lib-commonjs/contexts/treeContext.js.map +1 -1
  145. package/lib-commonjs/contexts/treeItemContext.js +20 -12
  146. package/lib-commonjs/contexts/treeItemContext.js.map +1 -1
  147. package/lib-commonjs/hooks/index.js +7 -6
  148. package/lib-commonjs/hooks/index.js.map +1 -1
  149. package/lib-commonjs/hooks/useFlatTree.js +86 -0
  150. package/lib-commonjs/hooks/useFlatTree.js.map +1 -0
  151. package/lib-commonjs/hooks/useFlatTreeNavigation.js +73 -72
  152. package/lib-commonjs/hooks/useFlatTreeNavigation.js.map +1 -1
  153. package/lib-commonjs/hooks/useHTMLElementWalker.js +94 -83
  154. package/lib-commonjs/hooks/useHTMLElementWalker.js.map +1 -1
  155. package/lib-commonjs/hooks/useNestedTreeNavigation.js +61 -58
  156. package/lib-commonjs/hooks/useNestedTreeNavigation.js.map +1 -1
  157. package/lib-commonjs/hooks/useOpenItemsState.js +32 -22
  158. package/lib-commonjs/hooks/useOpenItemsState.js.map +1 -1
  159. package/lib-commonjs/hooks/useRovingTabIndexes.js +56 -53
  160. package/lib-commonjs/hooks/useRovingTabIndexes.js.map +1 -1
  161. package/lib-commonjs/index.js +48 -180
  162. package/lib-commonjs/index.js.map +1 -1
  163. package/lib-commonjs/utils/ImmutableSet.js +39 -38
  164. package/lib-commonjs/utils/ImmutableSet.js.map +1 -1
  165. package/lib-commonjs/utils/assert.js +13 -9
  166. package/lib-commonjs/utils/assert.js.map +1 -1
  167. package/lib-commonjs/utils/createFlatTreeItems.js +126 -0
  168. package/lib-commonjs/utils/createFlatTreeItems.js.map +1 -0
  169. package/lib-commonjs/utils/flattenTree.js +55 -32
  170. package/lib-commonjs/utils/flattenTree.js.map +1 -1
  171. package/lib-commonjs/utils/nextTypeAheadElement.js +18 -16
  172. package/lib-commonjs/utils/nextTypeAheadElement.js.map +1 -1
  173. package/lib-commonjs/utils/normalizeOpenItems.js +13 -9
  174. package/lib-commonjs/utils/normalizeOpenItems.js.map +1 -1
  175. package/lib-commonjs/utils/tokens.js +30 -20
  176. package/lib-commonjs/utils/tokens.js.map +1 -1
  177. package/lib-commonjs/utils/treeItemFilter.js +9 -7
  178. package/lib-commonjs/utils/treeItemFilter.js.map +1 -1
  179. package/package.json +20 -15
  180. package/lib/hooks/useFlatTreeItems.js +0 -134
  181. package/lib/hooks/useFlatTreeItems.js.map +0 -1
  182. package/lib-commonjs/hooks/useFlatTreeItems.js +0 -141
  183. package/lib-commonjs/hooks/useFlatTreeItems.js.map +0 -1
@@ -1,81 +1,82 @@
1
1
  "use strict";
2
-
3
2
  Object.defineProperty(exports, "__esModule", {
4
- value: true
3
+ value: true
5
4
  });
6
- exports.useFlatTreeNavigation = void 0;
7
- const react_shared_contexts_1 = /*#__PURE__*/require("@fluentui/react-shared-contexts");
8
- const nextTypeAheadElement_1 = /*#__PURE__*/require("../utils/nextTypeAheadElement");
9
- const useHTMLElementWalker_1 = /*#__PURE__*/require("./useHTMLElementWalker");
10
- const tokens_1 = /*#__PURE__*/require("../utils/tokens");
11
- const treeItemFilter_1 = /*#__PURE__*/require("../utils/treeItemFilter");
12
- const useRovingTabIndexes_1 = /*#__PURE__*/require("./useRovingTabIndexes");
13
- const react_utilities_1 = /*#__PURE__*/require("@fluentui/react-utilities");
14
- function useFlatTreeNavigation(flatTree) {
15
- const {
16
- targetDocument
17
- } = react_shared_contexts_1.useFluent_unstable();
18
- const [treeItemWalkerRef, treeItemWalkerRootRef] = useHTMLElementWalker_1.useHTMLElementWalkerRef(treeItemFilter_1.treeItemFilter);
19
- const [{
20
- rove
21
- }, rovingRootRef] = useRovingTabIndexes_1.useRovingTabIndex(treeItemFilter_1.treeItemFilter);
22
- function getNextElement(data) {
23
- if (!targetDocument || !treeItemWalkerRef.current) {
24
- return null;
25
- }
26
- const treeItemWalker = treeItemWalkerRef.current;
27
- switch (data.type) {
28
- case tokens_1.treeDataTypes.click:
29
- return data.target;
30
- case tokens_1.treeDataTypes.typeAhead:
31
- treeItemWalker.currentElement = data.target;
32
- return nextTypeAheadElement_1.nextTypeAheadElement(treeItemWalker, data.event.key);
33
- case tokens_1.treeDataTypes.arrowLeft:
34
- return parentElement(flatTree, data.target, targetDocument);
35
- case tokens_1.treeDataTypes.arrowRight:
36
- treeItemWalker.currentElement = data.target;
37
- return firstChild(data.target, treeItemWalker);
38
- case tokens_1.treeDataTypes.end:
39
- treeItemWalker.currentElement = treeItemWalker.root;
40
- return treeItemWalker.lastChild();
41
- case tokens_1.treeDataTypes.home:
42
- treeItemWalker.currentElement = treeItemWalker.root;
43
- return treeItemWalker.firstChild();
44
- case tokens_1.treeDataTypes.arrowDown:
45
- treeItemWalker.currentElement = data.target;
46
- return treeItemWalker.nextElement();
47
- case tokens_1.treeDataTypes.arrowUp:
48
- treeItemWalker.currentElement = data.target;
49
- return treeItemWalker.previousElement();
50
- }
51
- }
52
- function navigate(data) {
53
- const nextElement = getNextElement(data);
54
- if (nextElement) {
55
- rove(nextElement);
5
+ Object.defineProperty(exports, "useFlatTreeNavigation", {
6
+ enumerable: true,
7
+ get: ()=>useFlatTreeNavigation
8
+ });
9
+ const _reactSharedContexts = require("@fluentui/react-shared-contexts");
10
+ const _reactUtilities = require("@fluentui/react-utilities");
11
+ const _nextTypeAheadElement = require("../utils/nextTypeAheadElement");
12
+ const _tokens = require("../utils/tokens");
13
+ const _treeItemFilter = require("../utils/treeItemFilter");
14
+ const _useHTMLElementWalker = require("./useHTMLElementWalker");
15
+ const _useRovingTabIndexes = require("./useRovingTabIndexes");
16
+ function useFlatTreeNavigation(flatTreeItems) {
17
+ const { targetDocument } = (0, _reactSharedContexts.useFluent_unstable)();
18
+ const [treeItemWalkerRef, treeItemWalkerRootRef] = (0, _useHTMLElementWalker.useHTMLElementWalkerRef)(_treeItemFilter.treeItemFilter);
19
+ const [{ rove }, rovingRootRef] = (0, _useRovingTabIndexes.useRovingTabIndex)(_treeItemFilter.treeItemFilter);
20
+ function getNextElement(data) {
21
+ if (!targetDocument || !treeItemWalkerRef.current) {
22
+ return null;
23
+ }
24
+ const treeItemWalker = treeItemWalkerRef.current;
25
+ switch(data.type){
26
+ case _tokens.treeDataTypes.click:
27
+ return data.target;
28
+ case _tokens.treeDataTypes.typeAhead:
29
+ treeItemWalker.currentElement = data.target;
30
+ return (0, _nextTypeAheadElement.nextTypeAheadElement)(treeItemWalker, data.event.key);
31
+ case _tokens.treeDataTypes.arrowLeft:
32
+ return parentElement(flatTreeItems, data.target, targetDocument);
33
+ case _tokens.treeDataTypes.arrowRight:
34
+ treeItemWalker.currentElement = data.target;
35
+ return firstChild(data.target, treeItemWalker);
36
+ case _tokens.treeDataTypes.end:
37
+ treeItemWalker.currentElement = treeItemWalker.root;
38
+ return treeItemWalker.lastChild();
39
+ case _tokens.treeDataTypes.home:
40
+ treeItemWalker.currentElement = treeItemWalker.root;
41
+ return treeItemWalker.firstChild();
42
+ case _tokens.treeDataTypes.arrowDown:
43
+ treeItemWalker.currentElement = data.target;
44
+ return treeItemWalker.nextElement();
45
+ case _tokens.treeDataTypes.arrowUp:
46
+ treeItemWalker.currentElement = data.target;
47
+ return treeItemWalker.previousElement();
48
+ }
56
49
  }
57
- }
58
- return [navigate, react_utilities_1.useMergedRefs(treeItemWalkerRootRef, rovingRootRef)];
50
+ const navigate = (0, _reactUtilities.useEventCallback)((data)=>{
51
+ const nextElement = getNextElement(data);
52
+ if (nextElement) {
53
+ rove(nextElement);
54
+ }
55
+ });
56
+ return [
57
+ navigate,
58
+ (0, _reactUtilities.useMergedRefs)(treeItemWalkerRootRef, rovingRootRef)
59
+ ];
59
60
  }
60
- exports.useFlatTreeNavigation = useFlatTreeNavigation;
61
61
  function firstChild(target, treeWalker) {
62
- const nextElement = treeWalker.nextElement();
63
- if (!nextElement) {
62
+ const nextElement = treeWalker.nextElement();
63
+ if (!nextElement) {
64
+ return null;
65
+ }
66
+ const nextElementAriaPosInSet = nextElement.getAttribute('aria-posinset');
67
+ const nextElementAriaLevel = nextElement.getAttribute('aria-level');
68
+ const targetAriaLevel = target.getAttribute('aria-level');
69
+ if (nextElementAriaPosInSet === '1' && Number(nextElementAriaLevel) === Number(targetAriaLevel) + 1) {
70
+ return nextElement;
71
+ }
64
72
  return null;
65
- }
66
- const nextElementAriaPosInSet = nextElement.getAttribute('aria-posinset');
67
- const nextElementAriaLevel = nextElement.getAttribute('aria-level');
68
- const targetAriaLevel = target.getAttribute('aria-level');
69
- if (nextElementAriaPosInSet === '1' && Number(nextElementAriaLevel) === Number(targetAriaLevel) + 1) {
70
- return nextElement;
71
- }
72
- return null;
73
- }
74
- function parentElement(flatTree, target, targetDocument) {
75
- const item = flatTree.get(target.id);
76
- if (item && item.parentId) {
77
- return targetDocument.getElementById(item.parentId);
78
- }
79
- return null;
80
73
  }
74
+ function parentElement(flatTreeItems, target, document) {
75
+ const flatTreeItem = flatTreeItems.get(target.id);
76
+ if (flatTreeItem && flatTreeItem.parentId) {
77
+ return document.getElementById(flatTreeItem.parentId);
78
+ }
79
+ return null;
80
+ } //# sourceMappingURL=useFlatTreeNavigation.js.map
81
+
81
82
  //# sourceMappingURL=useFlatTreeNavigation.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["react_shared_contexts_1","require","nextTypeAheadElement_1","useHTMLElementWalker_1","tokens_1","treeItemFilter_1","useRovingTabIndexes_1","react_utilities_1","useFlatTreeNavigation","flatTree","targetDocument","useFluent_unstable","treeItemWalkerRef","treeItemWalkerRootRef","useHTMLElementWalkerRef","treeItemFilter","rove","rovingRootRef","useRovingTabIndex","getNextElement","data","current","treeItemWalker","type","treeDataTypes","click","target","typeAhead","currentElement","nextTypeAheadElement","event","key","arrowLeft","parentElement","arrowRight","firstChild","end","root","lastChild","home","arrowDown","nextElement","arrowUp","previousElement","navigate","useMergedRefs","exports","treeWalker","nextElementAriaPosInSet","getAttribute","nextElementAriaLevel","targetAriaLevel","Number","item","get","id","parentId","getElementById"],"sources":["../src/packages/react-components/react-tree/src/hooks/useFlatTreeNavigation.ts"],"sourcesContent":["import { useFluent_unstable } from '@fluentui/react-shared-contexts';\nimport { TreeNavigationData_unstable } from '../Tree';\nimport type { TreeItemPropsReferences } from './useFlatTreeItems';\nimport { nextTypeAheadElement } from '../utils/nextTypeAheadElement';\nimport { HTMLElementWalker, useHTMLElementWalkerRef } from './useHTMLElementWalker';\nimport { treeDataTypes } from '../utils/tokens';\nimport { treeItemFilter } from '../utils/treeItemFilter';\nimport { useRovingTabIndex } from './useRovingTabIndexes';\nimport { useMergedRefs } from '@fluentui/react-utilities';\n\nexport function useFlatTreeNavigation(flatTree: Pick<TreeItemPropsReferences, 'get'>) {\n const { targetDocument } = useFluent_unstable();\n const [treeItemWalkerRef, treeItemWalkerRootRef] = useHTMLElementWalkerRef(treeItemFilter);\n const [{ rove }, rovingRootRef] = useRovingTabIndex(treeItemFilter);\n\n function getNextElement(data: TreeNavigationData_unstable) {\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(flatTree, data.target, targetDocument);\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 function navigate(data: TreeNavigationData_unstable) {\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(\n flatTree: Pick<TreeItemPropsReferences, 'get'>,\n target: HTMLElement,\n targetDocument: Document,\n): HTMLElement | null {\n const item = flatTree.get(target.id);\n if (item && item.parentId) {\n return targetDocument.getElementById(item.parentId);\n }\n return null;\n}\n"],"mappings":"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"}
1
+ {"version":3,"sources":["../../lib/hooks/useFlatTreeNavigation.js"],"sourcesContent":["import { useFluent_unstable } from '@fluentui/react-shared-contexts';\nimport { useEventCallback, useMergedRefs } from '@fluentui/react-utilities';\nimport { nextTypeAheadElement } from '../utils/nextTypeAheadElement';\nimport { treeDataTypes } from '../utils/tokens';\nimport { treeItemFilter } from '../utils/treeItemFilter';\nimport { useHTMLElementWalkerRef } from './useHTMLElementWalker';\nimport { useRovingTabIndex } from './useRovingTabIndexes';\nexport function useFlatTreeNavigation(flatTreeItems) {\n const {\n targetDocument\n } = useFluent_unstable();\n const [treeItemWalkerRef, treeItemWalkerRootRef] = useHTMLElementWalkerRef(treeItemFilter);\n const [{\n rove\n }, rovingRootRef] = useRovingTabIndex(treeItemFilter);\n function getNextElement(data) {\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.target, targetDocument);\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 => {\n const nextElement = getNextElement(data);\n if (nextElement) {\n rove(nextElement);\n }\n });\n return [navigate, useMergedRefs(treeItemWalkerRootRef, rovingRootRef)];\n}\nfunction firstChild(target, treeWalker) {\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}\nfunction parentElement(flatTreeItems, target, document) {\n const flatTreeItem = flatTreeItems.get(target.id);\n if (flatTreeItem && flatTreeItem.parentId) {\n return document.getElementById(flatTreeItem.parentId);\n }\n return null;\n}\n//# sourceMappingURL=useFlatTreeNavigation.js.map"],"names":["useFlatTreeNavigation","flatTreeItems","targetDocument","useFluent_unstable","treeItemWalkerRef","treeItemWalkerRootRef","useHTMLElementWalkerRef","treeItemFilter","rove","rovingRootRef","useRovingTabIndex","getNextElement","data","current","treeItemWalker","type","treeDataTypes","click","target","typeAhead","currentElement","nextTypeAheadElement","event","key","arrowLeft","parentElement","arrowRight","firstChild","end","root","lastChild","home","arrowDown","nextElement","arrowUp","previousElement","navigate","useEventCallback","useMergedRefs","treeWalker","nextElementAriaPosInSet","getAttribute","nextElementAriaLevel","targetAriaLevel","Number","document","flatTreeItem","get","id","parentId","getElementById"],"mappings":";;;;+BAOgBA;;aAAAA;;qCAPmB;gCACa;sCACX;wBACP;gCACC;sCACS;qCACN;AAC3B,SAASA,sBAAsBC,aAAa,EAAE;IACnD,MAAM,EACJC,eAAc,EACf,GAAGC,IAAAA,uCAAkB;IACtB,MAAM,CAACC,mBAAmBC,sBAAsB,GAAGC,IAAAA,6CAAuB,EAACC,8BAAc;IACzF,MAAM,CAAC,EACLC,KAAI,EACL,EAAEC,cAAc,GAAGC,IAAAA,sCAAiB,EAACH,8BAAc;IACpD,SAASI,eAAeC,IAAI,EAAE;QAC5B,IAAI,CAACV,kBAAkB,CAACE,kBAAkBS,OAAO,EAAE;YACjD,OAAO,IAAI;QACb,CAAC;QACD,MAAMC,iBAAiBV,kBAAkBS,OAAO;QAChD,OAAQD,KAAKG,IAAI;YACf,KAAKC,qBAAa,CAACC,KAAK;gBACtB,OAAOL,KAAKM,MAAM;YACpB,KAAKF,qBAAa,CAACG,SAAS;gBAC1BL,eAAeM,cAAc,GAAGR,KAAKM,MAAM;gBAC3C,OAAOG,IAAAA,0CAAoB,EAACP,gBAAgBF,KAAKU,KAAK,CAACC,GAAG;YAC5D,KAAKP,qBAAa,CAACQ,SAAS;gBAC1B,OAAOC,cAAcxB,eAAeW,KAAKM,MAAM,EAAEhB;YACnD,KAAKc,qBAAa,CAACU,UAAU;gBAC3BZ,eAAeM,cAAc,GAAGR,KAAKM,MAAM;gBAC3C,OAAOS,WAAWf,KAAKM,MAAM,EAAEJ;YACjC,KAAKE,qBAAa,CAACY,GAAG;gBACpBd,eAAeM,cAAc,GAAGN,eAAee,IAAI;gBACnD,OAAOf,eAAegB,SAAS;YACjC,KAAKd,qBAAa,CAACe,IAAI;gBACrBjB,eAAeM,cAAc,GAAGN,eAAee,IAAI;gBACnD,OAAOf,eAAea,UAAU;YAClC,KAAKX,qBAAa,CAACgB,SAAS;gBAC1BlB,eAAeM,cAAc,GAAGR,KAAKM,MAAM;gBAC3C,OAAOJ,eAAemB,WAAW;YACnC,KAAKjB,qBAAa,CAACkB,OAAO;gBACxBpB,eAAeM,cAAc,GAAGR,KAAKM,MAAM;gBAC3C,OAAOJ,eAAeqB,eAAe;QACzC;IACF;IACA,MAAMC,WAAWC,IAAAA,gCAAgB,EAACzB,CAAAA,OAAQ;QACxC,MAAMqB,cAActB,eAAeC;QACnC,IAAIqB,aAAa;YACfzB,KAAKyB;QACP,CAAC;IACH;IACA,OAAO;QAACG;QAAUE,IAAAA,6BAAa,EAACjC,uBAAuBI;KAAe;AACxE;AACA,SAASkB,WAAWT,MAAM,EAAEqB,UAAU,EAAE;IACtC,MAAMN,cAAcM,WAAWN,WAAW;IAC1C,IAAI,CAACA,aAAa;QAChB,OAAO,IAAI;IACb,CAAC;IACD,MAAMO,0BAA0BP,YAAYQ,YAAY,CAAC;IACzD,MAAMC,uBAAuBT,YAAYQ,YAAY,CAAC;IACtD,MAAME,kBAAkBzB,OAAOuB,YAAY,CAAC;IAC5C,IAAID,4BAA4B,OAAOI,OAAOF,0BAA0BE,OAAOD,mBAAmB,GAAG;QACnG,OAAOV;IACT,CAAC;IACD,OAAO,IAAI;AACb;AACA,SAASR,cAAcxB,aAAa,EAAEiB,MAAM,EAAE2B,QAAQ,EAAE;IACtD,MAAMC,eAAe7C,cAAc8C,GAAG,CAAC7B,OAAO8B,EAAE;IAChD,IAAIF,gBAAgBA,aAAaG,QAAQ,EAAE;QACzC,OAAOJ,SAASK,cAAc,CAACJ,aAAaG,QAAQ;IACtD,CAAC;IACD,OAAO,IAAI;AACb,EACA,iDAAiD"}
@@ -1,88 +1,99 @@
1
1
  "use strict";
2
-
3
2
  Object.defineProperty(exports, "__esModule", {
4
- value: true
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ createHTMLElementWalker: ()=>createHTMLElementWalker,
13
+ useHTMLElementWalkerRef: ()=>useHTMLElementWalkerRef
5
14
  });
6
- exports.useHTMLElementWalkerRef = exports.createHTMLElementWalker = void 0;
7
- const react_utilities_1 = /*#__PURE__*/require("@fluentui/react-utilities");
8
- const React = /*#__PURE__*/require("react");
9
- function createHTMLElementWalker(root, filter = () => NodeFilter.FILTER_ACCEPT) {
10
- let temporaryFilter;
11
- const treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, {
12
- acceptNode(node) {
13
- var _a;
14
- if (!react_utilities_1.isHTMLElement(node)) {
15
- return NodeFilter.FILTER_REJECT;
16
- }
17
- const filterResult = filter(node);
18
- return filterResult === NodeFilter.FILTER_ACCEPT ? (_a = temporaryFilter === null || temporaryFilter === void 0 ? void 0 : temporaryFilter(node)) !== null && _a !== void 0 ? _a : filterResult : filterResult;
19
- }
20
- });
21
- return {
22
- get root() {
23
- return treeWalker.root;
24
- },
25
- get currentElement() {
26
- return treeWalker.currentNode;
27
- },
28
- set currentElement(element) {
29
- treeWalker.currentNode = element;
30
- },
31
- firstChild: localFilter => {
32
- temporaryFilter = localFilter;
33
- const result = treeWalker.firstChild();
34
- temporaryFilter = undefined;
35
- return result;
36
- },
37
- lastChild: localFilter => {
38
- temporaryFilter = localFilter;
39
- const result = treeWalker.lastChild();
40
- temporaryFilter = undefined;
41
- return result;
42
- },
43
- nextElement: localFilter => {
44
- temporaryFilter = localFilter;
45
- const result = treeWalker.nextNode();
46
- temporaryFilter = undefined;
47
- return result;
48
- },
49
- nextSibling: localFilter => {
50
- temporaryFilter = localFilter;
51
- const result = treeWalker.nextSibling();
52
- temporaryFilter = undefined;
53
- return result;
54
- },
55
- parentElement: localFilter => {
56
- temporaryFilter = localFilter;
57
- const result = treeWalker.parentNode();
58
- temporaryFilter = undefined;
59
- return result;
60
- },
61
- previousElement: localFilter => {
62
- temporaryFilter = localFilter;
63
- const result = treeWalker.previousNode();
64
- temporaryFilter = undefined;
65
- return result;
66
- },
67
- previousSibling: localFilter => {
68
- temporaryFilter = localFilter;
69
- const result = treeWalker.previousSibling();
70
- temporaryFilter = undefined;
71
- return result;
72
- }
73
- };
15
+ const _interopRequireWildcard = require("@swc/helpers/lib/_interop_require_wildcard.js").default;
16
+ const _reactUtilities = require("@fluentui/react-utilities");
17
+ const _react = /*#__PURE__*/ _interopRequireWildcard(require("react"));
18
+ function createHTMLElementWalker(root, filter = ()=>NodeFilter.FILTER_ACCEPT) {
19
+ let temporaryFilter;
20
+ const treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, {
21
+ acceptNode (node) {
22
+ if (!(0, _reactUtilities.isHTMLElement)(node)) {
23
+ return NodeFilter.FILTER_REJECT;
24
+ }
25
+ const filterResult = filter(node);
26
+ var _temporaryFilter;
27
+ return filterResult === NodeFilter.FILTER_ACCEPT ? (_temporaryFilter = temporaryFilter === null || temporaryFilter === void 0 ? void 0 : temporaryFilter(node)) !== null && _temporaryFilter !== void 0 ? _temporaryFilter : filterResult : filterResult;
28
+ }
29
+ });
30
+ return {
31
+ get root () {
32
+ return treeWalker.root;
33
+ },
34
+ get currentElement () {
35
+ return treeWalker.currentNode;
36
+ },
37
+ set currentElement (element){
38
+ treeWalker.currentNode = element;
39
+ },
40
+ firstChild: (localFilter)=>{
41
+ temporaryFilter = localFilter;
42
+ const result = treeWalker.firstChild();
43
+ temporaryFilter = undefined;
44
+ return result;
45
+ },
46
+ lastChild: (localFilter)=>{
47
+ temporaryFilter = localFilter;
48
+ const result = treeWalker.lastChild();
49
+ temporaryFilter = undefined;
50
+ return result;
51
+ },
52
+ nextElement: (localFilter)=>{
53
+ temporaryFilter = localFilter;
54
+ const result = treeWalker.nextNode();
55
+ temporaryFilter = undefined;
56
+ return result;
57
+ },
58
+ nextSibling: (localFilter)=>{
59
+ temporaryFilter = localFilter;
60
+ const result = treeWalker.nextSibling();
61
+ temporaryFilter = undefined;
62
+ return result;
63
+ },
64
+ parentElement: (localFilter)=>{
65
+ temporaryFilter = localFilter;
66
+ const result = treeWalker.parentNode();
67
+ temporaryFilter = undefined;
68
+ return result;
69
+ },
70
+ previousElement: (localFilter)=>{
71
+ temporaryFilter = localFilter;
72
+ const result = treeWalker.previousNode();
73
+ temporaryFilter = undefined;
74
+ return result;
75
+ },
76
+ previousSibling: (localFilter)=>{
77
+ temporaryFilter = localFilter;
78
+ const result = treeWalker.previousSibling();
79
+ temporaryFilter = undefined;
80
+ return result;
81
+ }
82
+ };
74
83
  }
75
- exports.createHTMLElementWalker = createHTMLElementWalker;
76
- const useHTMLElementWalkerRef = filter => {
77
- const walkerRef = React.useRef();
78
- const rootRefCallback = element => {
79
- if (!element) {
80
- walkerRef.current = undefined;
81
- return;
82
- }
83
- walkerRef.current = createHTMLElementWalker(element, filter);
84
- };
85
- return [walkerRef, rootRefCallback];
86
- };
87
- exports.useHTMLElementWalkerRef = useHTMLElementWalkerRef;
84
+ const useHTMLElementWalkerRef = (filter)=>{
85
+ const walkerRef = _react.useRef();
86
+ const rootRefCallback = (element1)=>{
87
+ if (!element1) {
88
+ walkerRef.current = undefined;
89
+ return;
90
+ }
91
+ walkerRef.current = createHTMLElementWalker(element1, filter);
92
+ };
93
+ return [
94
+ walkerRef,
95
+ rootRefCallback
96
+ ];
97
+ }; //# sourceMappingURL=useHTMLElementWalker.js.map
98
+
88
99
  //# sourceMappingURL=useHTMLElementWalker.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["react_utilities_1","require","React","createHTMLElementWalker","root","filter","NodeFilter","FILTER_ACCEPT","temporaryFilter","treeWalker","document","createTreeWalker","SHOW_ELEMENT","acceptNode","node","isHTMLElement","FILTER_REJECT","filterResult","_a","currentElement","currentNode","element","firstChild","localFilter","result","undefined","lastChild","nextElement","nextNode","nextSibling","parentElement","parentNode","previousElement","previousNode","previousSibling","exports","useHTMLElementWalkerRef","walkerRef","useRef","rootRefCallback","current"],"sources":["../src/packages/react-components/react-tree/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":"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"}
1
+ {"version":3,"sources":["../../lib/hooks/useHTMLElementWalker.js"],"sourcesContent":["import { isHTMLElement } from '@fluentui/react-utilities';\nimport * as React from 'react';\nexport function createHTMLElementWalker(root, filter = () => NodeFilter.FILTER_ACCEPT) {\n let temporaryFilter;\n const treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, {\n acceptNode(node) {\n if (!isHTMLElement(node)) {\n return NodeFilter.FILTER_REJECT;\n }\n const filterResult = filter(node);\n var _temporaryFilter;\n return filterResult === NodeFilter.FILTER_ACCEPT ? (_temporaryFilter = temporaryFilter === null || temporaryFilter === void 0 ? void 0 : temporaryFilter(node)) !== null && _temporaryFilter !== void 0 ? _temporaryFilter : filterResult : filterResult;\n }\n });\n return {\n get root() {\n return treeWalker.root;\n },\n get currentElement() {\n return treeWalker.currentNode;\n },\n set currentElement(element) {\n treeWalker.currentNode = element;\n },\n firstChild: localFilter => {\n temporaryFilter = localFilter;\n const result = treeWalker.firstChild();\n temporaryFilter = undefined;\n return result;\n },\n lastChild: localFilter => {\n temporaryFilter = localFilter;\n const result = treeWalker.lastChild();\n temporaryFilter = undefined;\n return result;\n },\n nextElement: localFilter => {\n temporaryFilter = localFilter;\n const result = treeWalker.nextNode();\n temporaryFilter = undefined;\n return result;\n },\n nextSibling: localFilter => {\n temporaryFilter = localFilter;\n const result = treeWalker.nextSibling();\n temporaryFilter = undefined;\n return result;\n },\n parentElement: localFilter => {\n temporaryFilter = localFilter;\n const result = treeWalker.parentNode();\n temporaryFilter = undefined;\n return result;\n },\n previousElement: localFilter => {\n temporaryFilter = localFilter;\n const result = treeWalker.previousNode();\n temporaryFilter = undefined;\n return result;\n },\n previousSibling: localFilter => {\n temporaryFilter = localFilter;\n const result = treeWalker.previousSibling();\n temporaryFilter = undefined;\n return result;\n }\n };\n}\nexport const useHTMLElementWalkerRef = filter => {\n const walkerRef = React.useRef();\n const rootRefCallback = element1 => {\n if (!element1) {\n walkerRef.current = undefined;\n return;\n }\n walkerRef.current = createHTMLElementWalker(element1, filter);\n };\n return [walkerRef, rootRefCallback];\n};\n//# sourceMappingURL=useHTMLElementWalker.js.map"],"names":["createHTMLElementWalker","useHTMLElementWalkerRef","root","filter","NodeFilter","FILTER_ACCEPT","temporaryFilter","treeWalker","document","createTreeWalker","SHOW_ELEMENT","acceptNode","node","isHTMLElement","FILTER_REJECT","filterResult","_temporaryFilter","currentElement","currentNode","element","firstChild","localFilter","result","undefined","lastChild","nextElement","nextNode","nextSibling","parentElement","parentNode","previousElement","previousNode","previousSibling","walkerRef","React","useRef","rootRefCallback","element1","current"],"mappings":";;;;;;;;;;;IAEgBA,uBAAuB,MAAvBA;IAkEHC,uBAAuB,MAAvBA;;;gCApEiB;6DACP;AAChB,SAASD,wBAAwBE,IAAI,EAAEC,SAAS,IAAMC,WAAWC,aAAa,EAAE;IACrF,IAAIC;IACJ,MAAMC,aAAaC,SAASC,gBAAgB,CAACP,MAAME,WAAWM,YAAY,EAAE;QAC1EC,YAAWC,IAAI,EAAE;YACf,IAAI,CAACC,IAAAA,6BAAa,EAACD,OAAO;gBACxB,OAAOR,WAAWU,aAAa;YACjC,CAAC;YACD,MAAMC,eAAeZ,OAAOS;YAC5B,IAAII;YACJ,OAAOD,iBAAiBX,WAAWC,aAAa,GAAG,AAACW,CAAAA,mBAAmBV,oBAAoB,IAAI,IAAIA,oBAAoB,KAAK,IAAI,KAAK,IAAIA,gBAAgBM,KAAK,AAAD,MAAO,IAAI,IAAII,qBAAqB,KAAK,IAAIA,mBAAmBD,YAAY,GAAGA,YAAY;QAC1P;IACF;IACA,OAAO;QACL,IAAIb,QAAO;YACT,OAAOK,WAAWL,IAAI;QACxB;QACA,IAAIe,kBAAiB;YACnB,OAAOV,WAAWW,WAAW;QAC/B;QACA,IAAID,gBAAeE,QAAS;YAC1BZ,WAAWW,WAAW,GAAGC;QAC3B;QACAC,YAAYC,CAAAA,cAAe;YACzBf,kBAAkBe;YAClB,MAAMC,SAASf,WAAWa,UAAU;YACpCd,kBAAkBiB;YAClB,OAAOD;QACT;QACAE,WAAWH,CAAAA,cAAe;YACxBf,kBAAkBe;YAClB,MAAMC,SAASf,WAAWiB,SAAS;YACnClB,kBAAkBiB;YAClB,OAAOD;QACT;QACAG,aAAaJ,CAAAA,cAAe;YAC1Bf,kBAAkBe;YAClB,MAAMC,SAASf,WAAWmB,QAAQ;YAClCpB,kBAAkBiB;YAClB,OAAOD;QACT;QACAK,aAAaN,CAAAA,cAAe;YAC1Bf,kBAAkBe;YAClB,MAAMC,SAASf,WAAWoB,WAAW;YACrCrB,kBAAkBiB;YAClB,OAAOD;QACT;QACAM,eAAeP,CAAAA,cAAe;YAC5Bf,kBAAkBe;YAClB,MAAMC,SAASf,WAAWsB,UAAU;YACpCvB,kBAAkBiB;YAClB,OAAOD;QACT;QACAQ,iBAAiBT,CAAAA,cAAe;YAC9Bf,kBAAkBe;YAClB,MAAMC,SAASf,WAAWwB,YAAY;YACtCzB,kBAAkBiB;YAClB,OAAOD;QACT;QACAU,iBAAiBX,CAAAA,cAAe;YAC9Bf,kBAAkBe;YAClB,MAAMC,SAASf,WAAWyB,eAAe;YACzC1B,kBAAkBiB;YAClB,OAAOD;QACT;IACF;AACF;AACO,MAAMrB,0BAA0BE,CAAAA,SAAU;IAC/C,MAAM8B,YAAYC,OAAMC,MAAM;IAC9B,MAAMC,kBAAkBC,CAAAA,WAAY;QAClC,IAAI,CAACA,UAAU;YACbJ,UAAUK,OAAO,GAAGf;YACpB;QACF,CAAC;QACDU,UAAUK,OAAO,GAAGtC,wBAAwBqC,UAAUlC;IACxD;IACA,OAAO;QAAC8B;QAAWG;KAAgB;AACrC,GACA,gDAAgD"}
@@ -1,66 +1,69 @@
1
1
  "use strict";
2
-
3
2
  Object.defineProperty(exports, "__esModule", {
4
- value: true
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "useNestedTreeNavigation", {
6
+ enumerable: true,
7
+ get: ()=>useNestedTreeNavigation
5
8
  });
6
- exports.useNestedTreeNavigation = void 0;
7
- const useHTMLElementWalker_1 = /*#__PURE__*/require("./useHTMLElementWalker");
8
- const nextTypeAheadElement_1 = /*#__PURE__*/require("../utils/nextTypeAheadElement");
9
- const tokens_1 = /*#__PURE__*/require("../utils/tokens");
10
- const treeItemFilter_1 = /*#__PURE__*/require("../utils/treeItemFilter");
11
- const useRovingTabIndexes_1 = /*#__PURE__*/require("./useRovingTabIndexes");
12
- const react_utilities_1 = /*#__PURE__*/require("@fluentui/react-utilities");
9
+ const _useHTMLElementWalker = require("./useHTMLElementWalker");
10
+ const _nextTypeAheadElement = require("../utils/nextTypeAheadElement");
11
+ const _tokens = require("../utils/tokens");
12
+ const _treeItemFilter = require("../utils/treeItemFilter");
13
+ const _useRovingTabIndexes = require("./useRovingTabIndexes");
14
+ const _reactUtilities = require("@fluentui/react-utilities");
13
15
  function useNestedTreeNavigation() {
14
- const [{
15
- rove
16
- }, rovingRootRef] = useRovingTabIndexes_1.useRovingTabIndex(treeItemFilter_1.treeItemFilter);
17
- const [walkerRef, rootRef] = useHTMLElementWalker_1.useHTMLElementWalkerRef(treeItemFilter_1.treeItemFilter);
18
- const getNextElement = data => {
19
- if (!walkerRef.current) {
20
- return;
21
- }
22
- const treeItemWalker = walkerRef.current;
23
- switch (data.type) {
24
- case tokens_1.treeDataTypes.click:
25
- return data.target;
26
- case tokens_1.treeDataTypes.typeAhead:
27
- treeItemWalker.currentElement = data.target;
28
- return nextTypeAheadElement_1.nextTypeAheadElement(treeItemWalker, data.event.key);
29
- case tokens_1.treeDataTypes.arrowLeft:
30
- treeItemWalker.currentElement = data.target;
31
- return treeItemWalker.parentElement();
32
- case tokens_1.treeDataTypes.arrowRight:
33
- treeItemWalker.currentElement = data.target;
34
- return treeItemWalker.firstChild();
35
- case tokens_1.treeDataTypes.end:
36
- treeItemWalker.currentElement = treeItemWalker.root;
37
- return lastChildRecursive(treeItemWalker);
38
- case tokens_1.treeDataTypes.home:
39
- treeItemWalker.currentElement = treeItemWalker.root;
40
- return treeItemWalker.firstChild();
41
- case tokens_1.treeDataTypes.arrowDown:
42
- treeItemWalker.currentElement = data.target;
43
- return treeItemWalker.nextElement();
44
- case tokens_1.treeDataTypes.arrowUp:
45
- treeItemWalker.currentElement = data.target;
46
- return treeItemWalker.previousElement();
47
- }
48
- };
49
- function navigate(data) {
50
- const nextElement = getNextElement(data);
51
- if (nextElement) {
52
- rove(nextElement);
16
+ const [{ rove }, rovingRootRef] = (0, _useRovingTabIndexes.useRovingTabIndex)(_treeItemFilter.treeItemFilter);
17
+ const [walkerRef, rootRef] = (0, _useHTMLElementWalker.useHTMLElementWalkerRef)(_treeItemFilter.treeItemFilter);
18
+ const getNextElement = (data)=>{
19
+ if (!walkerRef.current) {
20
+ return;
21
+ }
22
+ const treeItemWalker = walkerRef.current;
23
+ switch(data.type){
24
+ case _tokens.treeDataTypes.click:
25
+ return data.target;
26
+ case _tokens.treeDataTypes.typeAhead:
27
+ treeItemWalker.currentElement = data.target;
28
+ return (0, _nextTypeAheadElement.nextTypeAheadElement)(treeItemWalker, data.event.key);
29
+ case _tokens.treeDataTypes.arrowLeft:
30
+ treeItemWalker.currentElement = data.target;
31
+ return treeItemWalker.parentElement();
32
+ case _tokens.treeDataTypes.arrowRight:
33
+ treeItemWalker.currentElement = data.target;
34
+ return treeItemWalker.firstChild();
35
+ case _tokens.treeDataTypes.end:
36
+ treeItemWalker.currentElement = treeItemWalker.root;
37
+ return lastChildRecursive(treeItemWalker);
38
+ case _tokens.treeDataTypes.home:
39
+ treeItemWalker.currentElement = treeItemWalker.root;
40
+ return treeItemWalker.firstChild();
41
+ case _tokens.treeDataTypes.arrowDown:
42
+ treeItemWalker.currentElement = data.target;
43
+ return treeItemWalker.nextElement();
44
+ case _tokens.treeDataTypes.arrowUp:
45
+ treeItemWalker.currentElement = data.target;
46
+ return treeItemWalker.previousElement();
47
+ }
48
+ };
49
+ function navigate(data) {
50
+ const nextElement = getNextElement(data);
51
+ if (nextElement) {
52
+ rove(nextElement);
53
+ }
53
54
  }
54
- }
55
- return [navigate, react_utilities_1.useMergedRefs(rootRef, rovingRootRef)];
55
+ return [
56
+ navigate,
57
+ (0, _reactUtilities.useMergedRefs)(rootRef, rovingRootRef)
58
+ ];
56
59
  }
57
- exports.useNestedTreeNavigation = useNestedTreeNavigation;
58
60
  function lastChildRecursive(walker) {
59
- let lastElement = null;
60
- let nextElement = null;
61
- while (nextElement = walker.lastChild()) {
62
- lastElement = nextElement;
63
- }
64
- return lastElement;
65
- }
61
+ let lastElement = null;
62
+ let nextElement = null;
63
+ while(nextElement = walker.lastChild()){
64
+ lastElement = nextElement;
65
+ }
66
+ return lastElement;
67
+ } //# sourceMappingURL=useNestedTreeNavigation.js.map
68
+
66
69
  //# sourceMappingURL=useNestedTreeNavigation.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useHTMLElementWalker_1","require","nextTypeAheadElement_1","tokens_1","treeItemFilter_1","useRovingTabIndexes_1","react_utilities_1","useNestedTreeNavigation","rove","rovingRootRef","useRovingTabIndex","treeItemFilter","walkerRef","rootRef","useHTMLElementWalkerRef","getNextElement","data","current","treeItemWalker","type","treeDataTypes","click","target","typeAhead","currentElement","nextTypeAheadElement","event","key","arrowLeft","parentElement","arrowRight","firstChild","end","root","lastChildRecursive","home","arrowDown","nextElement","arrowUp","previousElement","navigate","useMergedRefs","exports","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,MAAAA,sBAAA,gBAAAC,OAAA;AACA,MAAAC,sBAAA,gBAAAD,OAAA;AACA,MAAAE,QAAA,gBAAAF,OAAA;AACA,MAAAG,gBAAA,gBAAAH,OAAA;AACA,MAAAI,qBAAA,gBAAAJ,OAAA;AACA,MAAAK,iBAAA,gBAAAL,OAAA;AAEA,SAAgBM,uBAAuBA,CAAA;EACrC,MAAM,CAAC;IAAEC;EAAI,CAAE,EAAEC,aAAa,CAAC,GAAGJ,qBAAA,CAAAK,iBAAiB,CAACN,gBAAA,CAAAO,cAAc,CAAC;EACnE,MAAM,CAACC,SAAS,EAAEC,OAAO,CAAC,GAAGb,sBAAA,CAAAc,uBAAuB,CAACV,gBAAA,CAAAO,cAAc,CAAC;EAEpE,MAAMI,cAAc,GAAIC,IAAiC,IAAI;IAC3D,IAAI,CAACJ,SAAS,CAACK,OAAO,EAAE;MACtB;;IAEF,MAAMC,cAAc,GAAGN,SAAS,CAACK,OAAO;IACxC,QAAQD,IAAI,CAACG,IAAI;MACf,KAAKhB,QAAA,CAAAiB,aAAa,CAACC,KAAK;QACtB,OAAOL,IAAI,CAACM,MAAM;MACpB,KAAKnB,QAAA,CAAAiB,aAAa,CAACG,SAAS;QAC1BL,cAAc,CAACM,cAAc,GAAGR,IAAI,CAACM,MAAM;QAC3C,OAAOpB,sBAAA,CAAAuB,oBAAoB,CAACP,cAAc,EAAEF,IAAI,CAACU,KAAK,CAACC,GAAG,CAAC;MAC7D,KAAKxB,QAAA,CAAAiB,aAAa,CAACQ,SAAS;QAC1BV,cAAc,CAACM,cAAc,GAAGR,IAAI,CAACM,MAAM;QAC3C,OAAOJ,cAAc,CAACW,aAAa,EAAE;MACvC,KAAK1B,QAAA,CAAAiB,aAAa,CAACU,UAAU;QAC3BZ,cAAc,CAACM,cAAc,GAAGR,IAAI,CAACM,MAAM;QAC3C,OAAOJ,cAAc,CAACa,UAAU,EAAE;MACpC,KAAK5B,QAAA,CAAAiB,aAAa,CAACY,GAAG;QACpBd,cAAc,CAACM,cAAc,GAAGN,cAAc,CAACe,IAAI;QACnD,OAAOC,kBAAkB,CAAChB,cAAc,CAAC;MAC3C,KAAKf,QAAA,CAAAiB,aAAa,CAACe,IAAI;QACrBjB,cAAc,CAACM,cAAc,GAAGN,cAAc,CAACe,IAAI;QACnD,OAAOf,cAAc,CAACa,UAAU,EAAE;MACpC,KAAK5B,QAAA,CAAAiB,aAAa,CAACgB,SAAS;QAC1BlB,cAAc,CAACM,cAAc,GAAGR,IAAI,CAACM,MAAM;QAC3C,OAAOJ,cAAc,CAACmB,WAAW,EAAE;MACrC,KAAKlC,QAAA,CAAAiB,aAAa,CAACkB,OAAO;QACxBpB,cAAc,CAACM,cAAc,GAAGR,IAAI,CAACM,MAAM;QAC3C,OAAOJ,cAAc,CAACqB,eAAe,EAAE;IAAC;EAE9C,CAAC;EACD,SAASC,QAAQA,CAACxB,IAAiC;IACjD,MAAMqB,WAAW,GAAGtB,cAAc,CAACC,IAAI,CAAC;IACxC,IAAIqB,WAAW,EAAE;MACf7B,IAAI,CAAC6B,WAAW,CAAC;;EAErB;EACA,OAAO,CAACG,QAAQ,EAAElC,iBAAA,CAAAmC,aAAa,CAAC5B,OAAO,EAAEJ,aAAa,CAAC,CAAU;AACnE;AA1CAiC,OAAA,CAAAnC,uBAAA,GAAAA,uBAAA;AA4CA,SAAS2B,kBAAkBA,CAACS,MAAyB;EACnD,IAAIC,WAAW,GAAuB,IAAI;EAC1C,IAAIP,WAAW,GAAuB,IAAI;EAC1C,OAAQA,WAAW,GAAGM,MAAM,CAACE,SAAS,EAAE,EAAG;IACzCD,WAAW,GAAGP,WAAW;;EAE3B,OAAOO,WAAW;AACpB"}
1
+ {"version":3,"sources":["../../lib/hooks/useNestedTreeNavigation.js"],"sourcesContent":["import { 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';\nexport function useNestedTreeNavigation() {\n const [{\n rove\n }, rovingRootRef] = useRovingTabIndex(treeItemFilter);\n const [walkerRef, rootRef] = useHTMLElementWalkerRef(treeItemFilter);\n const getNextElement = data => {\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) {\n const nextElement = getNextElement(data);\n if (nextElement) {\n rove(nextElement);\n }\n }\n return [navigate, useMergedRefs(rootRef, rovingRootRef)];\n}\nfunction lastChildRecursive(walker) {\n let lastElement = null;\n let nextElement = null;\n while (nextElement = walker.lastChild()) {\n lastElement = nextElement;\n }\n return lastElement;\n}\n//# sourceMappingURL=useNestedTreeNavigation.js.map"],"names":["useNestedTreeNavigation","rove","rovingRootRef","useRovingTabIndex","treeItemFilter","walkerRef","rootRef","useHTMLElementWalkerRef","getNextElement","data","current","treeItemWalker","type","treeDataTypes","click","target","typeAhead","currentElement","nextTypeAheadElement","event","key","arrowLeft","parentElement","arrowRight","firstChild","end","root","lastChildRecursive","home","arrowDown","nextElement","arrowUp","previousElement","navigate","useMergedRefs","walker","lastElement","lastChild"],"mappings":";;;;+BAMgBA;;aAAAA;;sCANwB;sCACH;wBACP;gCACC;qCACG;gCACJ;AACvB,SAASA,0BAA0B;IACxC,MAAM,CAAC,EACLC,KAAI,EACL,EAAEC,cAAc,GAAGC,IAAAA,sCAAiB,EAACC,8BAAc;IACpD,MAAM,CAACC,WAAWC,QAAQ,GAAGC,IAAAA,6CAAuB,EAACH,8BAAc;IACnE,MAAMI,iBAAiBC,CAAAA,OAAQ;QAC7B,IAAI,CAACJ,UAAUK,OAAO,EAAE;YACtB;QACF,CAAC;QACD,MAAMC,iBAAiBN,UAAUK,OAAO;QACxC,OAAQD,KAAKG,IAAI;YACf,KAAKC,qBAAa,CAACC,KAAK;gBACtB,OAAOL,KAAKM,MAAM;YACpB,KAAKF,qBAAa,CAACG,SAAS;gBAC1BL,eAAeM,cAAc,GAAGR,KAAKM,MAAM;gBAC3C,OAAOG,IAAAA,0CAAoB,EAACP,gBAAgBF,KAAKU,KAAK,CAACC,GAAG;YAC5D,KAAKP,qBAAa,CAACQ,SAAS;gBAC1BV,eAAeM,cAAc,GAAGR,KAAKM,MAAM;gBAC3C,OAAOJ,eAAeW,aAAa;YACrC,KAAKT,qBAAa,CAACU,UAAU;gBAC3BZ,eAAeM,cAAc,GAAGR,KAAKM,MAAM;gBAC3C,OAAOJ,eAAea,UAAU;YAClC,KAAKX,qBAAa,CAACY,GAAG;gBACpBd,eAAeM,cAAc,GAAGN,eAAee,IAAI;gBACnD,OAAOC,mBAAmBhB;YAC5B,KAAKE,qBAAa,CAACe,IAAI;gBACrBjB,eAAeM,cAAc,GAAGN,eAAee,IAAI;gBACnD,OAAOf,eAAea,UAAU;YAClC,KAAKX,qBAAa,CAACgB,SAAS;gBAC1BlB,eAAeM,cAAc,GAAGR,KAAKM,MAAM;gBAC3C,OAAOJ,eAAemB,WAAW;YACnC,KAAKjB,qBAAa,CAACkB,OAAO;gBACxBpB,eAAeM,cAAc,GAAGR,KAAKM,MAAM;gBAC3C,OAAOJ,eAAeqB,eAAe;QACzC;IACF;IACA,SAASC,SAASxB,IAAI,EAAE;QACtB,MAAMqB,cAActB,eAAeC;QACnC,IAAIqB,aAAa;YACf7B,KAAK6B;QACP,CAAC;IACH;IACA,OAAO;QAACG;QAAUC,IAAAA,6BAAa,EAAC5B,SAASJ;KAAe;AAC1D;AACA,SAASyB,mBAAmBQ,MAAM,EAAE;IAClC,IAAIC,cAAc,IAAI;IACtB,IAAIN,cAAc,IAAI;IACtB,MAAOA,cAAcK,OAAOE,SAAS,GAAI;QACvCD,cAAcN;IAChB;IACA,OAAOM;AACT,EACA,mDAAmD"}