@fluentui/react-tabs 1.0.0-beta.97 → 9.0.0-beta.10

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 (229) hide show
  1. package/CHANGELOG.json +181 -1762
  2. package/CHANGELOG.md +54 -718
  3. package/README.md +0 -17
  4. package/Spec.md +433 -0
  5. package/dist/react-tabs.d.ts +173 -127
  6. package/lib/Tab.d.ts +1 -0
  7. package/lib/Tab.js +2 -0
  8. package/lib/Tab.js.map +1 -0
  9. package/lib/TabList.d.ts +1 -0
  10. package/lib/TabList.js +2 -0
  11. package/lib/TabList.js.map +1 -0
  12. package/lib/components/Tab/Tab.d.ts +6 -0
  13. package/lib/components/Tab/Tab.js +15 -0
  14. package/lib/components/Tab/Tab.js.map +1 -0
  15. package/lib/components/Tab/Tab.types.d.ts +61 -0
  16. package/lib/components/Tab/Tab.types.js +2 -0
  17. package/lib/components/Tab/Tab.types.js.map +1 -0
  18. package/lib/components/Tab/index.d.ts +6 -0
  19. package/lib/components/Tab/index.js +7 -0
  20. package/lib/components/Tab/index.js.map +1 -0
  21. package/lib/components/Tab/renderTab.d.ts +5 -0
  22. package/lib/components/Tab/renderTab.js +17 -0
  23. package/lib/components/Tab/renderTab.js.map +1 -0
  24. package/lib/components/Tab/useTab.d.ts +12 -0
  25. package/lib/components/Tab/useTab.js +78 -0
  26. package/lib/components/Tab/useTab.js.map +1 -0
  27. package/lib/components/Tab/useTabAnimatedIndicator.d.ts +5 -0
  28. package/lib/components/Tab/useTabAnimatedIndicator.js +134 -0
  29. package/lib/components/Tab/useTabAnimatedIndicator.js.map +1 -0
  30. package/lib/components/Tab/useTabStyles.d.ts +8 -0
  31. package/lib/components/Tab/useTabStyles.js +402 -0
  32. package/lib/components/Tab/useTabStyles.js.map +1 -0
  33. package/lib/components/TabList/TabList.d.ts +6 -0
  34. package/lib/components/TabList/TabList.js +17 -0
  35. package/lib/components/TabList/TabList.js.map +1 -0
  36. package/lib/components/TabList/TabList.types.d.ts +104 -0
  37. package/lib/components/TabList/TabList.types.js +2 -0
  38. package/lib/components/TabList/TabList.types.js.map +1 -0
  39. package/lib/components/TabList/TabListContext.d.ts +3 -0
  40. package/lib/components/TabList/TabListContext.js +23 -0
  41. package/lib/components/TabList/TabListContext.js.map +1 -0
  42. package/lib/components/TabList/index.d.ts +5 -0
  43. package/lib/components/TabList/index.js +6 -0
  44. package/lib/components/TabList/index.js.map +1 -0
  45. package/lib/components/TabList/renderTabList.d.ts +5 -0
  46. package/lib/components/TabList/renderTabList.js +18 -0
  47. package/lib/components/TabList/renderTabList.js.map +1 -0
  48. package/lib/components/TabList/useTabList.d.ts +12 -0
  49. package/lib/components/TabList/useTabList.js +81 -0
  50. package/lib/components/TabList/useTabList.js.map +1 -0
  51. package/lib/components/TabList/useTabListContextValues.d.ts +2 -0
  52. package/lib/components/TabList/useTabListContextValues.js +28 -0
  53. package/lib/components/TabList/useTabListContextValues.js.map +1 -0
  54. package/lib/components/TabList/useTabListStyles.d.ts +8 -0
  55. package/lib/components/TabList/useTabListStyles.js +45 -0
  56. package/lib/components/TabList/useTabListStyles.js.map +1 -0
  57. package/lib/index.d.ts +4 -1
  58. package/lib/index.js +2 -1
  59. package/lib/index.js.map +1 -1
  60. package/lib/tab.constants.d.ts +62 -0
  61. package/lib/tab.constants.js +68 -0
  62. package/lib/tab.constants.js.map +1 -0
  63. package/lib/tsdoc-metadata.json +1 -1
  64. package/lib-commonjs/Tab.d.ts +1 -0
  65. package/lib-commonjs/Tab.js +10 -0
  66. package/lib-commonjs/Tab.js.map +1 -0
  67. package/lib-commonjs/TabList.d.ts +1 -0
  68. package/lib-commonjs/TabList.js +10 -0
  69. package/lib-commonjs/TabList.js.map +1 -0
  70. package/lib-commonjs/components/Tab/Tab.d.ts +6 -0
  71. package/lib-commonjs/components/Tab/Tab.js +26 -0
  72. package/lib-commonjs/components/Tab/Tab.js.map +1 -0
  73. package/lib-commonjs/components/Tab/Tab.types.d.ts +61 -0
  74. package/lib-commonjs/components/Tab/Tab.types.js +6 -0
  75. package/lib-commonjs/components/Tab/Tab.types.js.map +1 -0
  76. package/lib-commonjs/components/Tab/index.d.ts +6 -0
  77. package/lib-commonjs/components/Tab/index.js +20 -0
  78. package/lib-commonjs/components/Tab/index.js.map +1 -0
  79. package/lib-commonjs/components/Tab/renderTab.d.ts +5 -0
  80. package/lib-commonjs/components/Tab/renderTab.js +28 -0
  81. package/lib-commonjs/components/Tab/renderTab.js.map +1 -0
  82. package/lib-commonjs/components/Tab/useTab.d.ts +12 -0
  83. package/lib-commonjs/components/Tab/useTab.js +91 -0
  84. package/lib-commonjs/components/Tab/useTab.js.map +1 -0
  85. package/lib-commonjs/components/Tab/useTabAnimatedIndicator.d.ts +5 -0
  86. package/lib-commonjs/components/Tab/useTabAnimatedIndicator.js +148 -0
  87. package/lib-commonjs/components/Tab/useTabAnimatedIndicator.js.map +1 -0
  88. package/lib-commonjs/components/Tab/useTabStyles.d.ts +8 -0
  89. package/lib-commonjs/components/Tab/useTabStyles.js +416 -0
  90. package/lib-commonjs/components/Tab/useTabStyles.js.map +1 -0
  91. package/lib-commonjs/components/TabList/TabList.d.ts +6 -0
  92. package/lib-commonjs/components/TabList/TabList.js +29 -0
  93. package/lib-commonjs/components/TabList/TabList.js.map +1 -0
  94. package/lib-commonjs/components/TabList/TabList.types.d.ts +104 -0
  95. package/lib-commonjs/components/TabList/TabList.types.js +6 -0
  96. package/lib-commonjs/components/TabList/TabList.types.js.map +1 -0
  97. package/lib-commonjs/components/TabList/TabListContext.d.ts +3 -0
  98. package/lib-commonjs/components/TabList/TabListContext.js +31 -0
  99. package/lib-commonjs/components/TabList/TabListContext.js.map +1 -0
  100. package/lib-commonjs/components/TabList/index.d.ts +5 -0
  101. package/lib-commonjs/components/TabList/index.js +18 -0
  102. package/lib-commonjs/components/TabList/index.js.map +1 -0
  103. package/lib-commonjs/components/TabList/renderTabList.d.ts +5 -0
  104. package/lib-commonjs/components/TabList/renderTabList.js +30 -0
  105. package/lib-commonjs/components/TabList/renderTabList.js.map +1 -0
  106. package/lib-commonjs/components/TabList/useTabList.d.ts +12 -0
  107. package/lib-commonjs/components/TabList/useTabList.js +93 -0
  108. package/lib-commonjs/components/TabList/useTabList.js.map +1 -0
  109. package/lib-commonjs/components/TabList/useTabListContextValues.d.ts +2 -0
  110. package/lib-commonjs/components/TabList/useTabListContextValues.js +37 -0
  111. package/lib-commonjs/components/TabList/useTabListContextValues.js.map +1 -0
  112. package/lib-commonjs/components/TabList/useTabListStyles.d.ts +8 -0
  113. package/lib-commonjs/components/TabList/useTabListStyles.js +55 -0
  114. package/lib-commonjs/components/TabList/useTabListStyles.js.map +1 -0
  115. package/lib-commonjs/index.d.ts +4 -1
  116. package/lib-commonjs/index.js +83 -3
  117. package/lib-commonjs/index.js.map +1 -1
  118. package/lib-commonjs/tab.constants.d.ts +62 -0
  119. package/lib-commonjs/tab.constants.js +75 -0
  120. package/lib-commonjs/tab.constants.js.map +1 -0
  121. package/package.json +25 -21
  122. package/config/api-extractor.json +0 -3
  123. package/config/tests.js +0 -14
  124. package/etc/react-tabs.api.md +0 -104
  125. package/just.config.ts +0 -3
  126. package/lib/Tabs.d.ts +0 -1
  127. package/lib/Tabs.js +0 -2
  128. package/lib/Tabs.js.map +0 -1
  129. package/lib/common/isConformant.d.ts +0 -2
  130. package/lib/common/isConformant.js +0 -9
  131. package/lib/common/isConformant.js.map +0 -1
  132. package/lib/components/Tabs/TabItem.d.ts +0 -6
  133. package/lib/components/Tabs/TabItem.js +0 -18
  134. package/lib/components/Tabs/TabItem.js.map +0 -1
  135. package/lib/components/Tabs/TabItem.types.d.ts +0 -61
  136. package/lib/components/Tabs/TabItem.types.js +0 -2
  137. package/lib/components/Tabs/TabItem.types.js.map +0 -1
  138. package/lib/components/Tabs/Tabs.base.d.ts +0 -3
  139. package/lib/components/Tabs/Tabs.base.js +0 -179
  140. package/lib/components/Tabs/Tabs.base.js.map +0 -1
  141. package/lib/components/Tabs/Tabs.d.ts +0 -8
  142. package/lib/components/Tabs/Tabs.js +0 -12
  143. package/lib/components/Tabs/Tabs.js.map +0 -1
  144. package/lib/components/Tabs/Tabs.styles.d.ts +0 -2
  145. package/lib/components/Tabs/Tabs.styles.js +0 -264
  146. package/lib/components/Tabs/Tabs.styles.js.map +0 -1
  147. package/lib/components/Tabs/Tabs.types.d.ts +0 -113
  148. package/lib/components/Tabs/Tabs.types.js +0 -2
  149. package/lib/components/Tabs/Tabs.types.js.map +0 -1
  150. package/lib/components/Tabs/index.d.ts +0 -5
  151. package/lib/components/Tabs/index.js +0 -6
  152. package/lib/components/Tabs/index.js.map +0 -1
  153. package/lib/utilities/observeResize.d.ts +0 -21
  154. package/lib/utilities/observeResize.js +0 -46
  155. package/lib/utilities/observeResize.js.map +0 -1
  156. package/lib/utilities/useOverflow.d.ts +0 -45
  157. package/lib/utilities/useOverflow.js +0 -126
  158. package/lib/utilities/useOverflow.js.map +0 -1
  159. package/lib-amd/Tabs.d.ts +0 -1
  160. package/lib-amd/Tabs.js +0 -6
  161. package/lib-amd/Tabs.js.map +0 -1
  162. package/lib-amd/common/isConformant.d.ts +0 -2
  163. package/lib-amd/common/isConformant.js +0 -14
  164. package/lib-amd/common/isConformant.js.map +0 -1
  165. package/lib-amd/components/Tabs/TabItem.d.ts +0 -6
  166. package/lib-amd/components/Tabs/TabItem.js +0 -20
  167. package/lib-amd/components/Tabs/TabItem.js.map +0 -1
  168. package/lib-amd/components/Tabs/TabItem.types.d.ts +0 -61
  169. package/lib-amd/components/Tabs/TabItem.types.js +0 -5
  170. package/lib-amd/components/Tabs/TabItem.types.js.map +0 -1
  171. package/lib-amd/components/Tabs/Tabs.base.d.ts +0 -3
  172. package/lib-amd/components/Tabs/Tabs.base.js +0 -176
  173. package/lib-amd/components/Tabs/Tabs.base.js.map +0 -1
  174. package/lib-amd/components/Tabs/Tabs.d.ts +0 -8
  175. package/lib-amd/components/Tabs/Tabs.js +0 -14
  176. package/lib-amd/components/Tabs/Tabs.js.map +0 -1
  177. package/lib-amd/components/Tabs/Tabs.styles.d.ts +0 -2
  178. package/lib-amd/components/Tabs/Tabs.styles.js +0 -267
  179. package/lib-amd/components/Tabs/Tabs.styles.js.map +0 -1
  180. package/lib-amd/components/Tabs/Tabs.types.d.ts +0 -113
  181. package/lib-amd/components/Tabs/Tabs.types.js +0 -5
  182. package/lib-amd/components/Tabs/Tabs.types.js.map +0 -1
  183. package/lib-amd/components/Tabs/index.d.ts +0 -5
  184. package/lib-amd/components/Tabs/index.js +0 -11
  185. package/lib-amd/components/Tabs/index.js.map +0 -1
  186. package/lib-amd/index.d.ts +0 -1
  187. package/lib-amd/index.js +0 -6
  188. package/lib-amd/index.js.map +0 -1
  189. package/lib-amd/utilities/observeResize.d.ts +0 -21
  190. package/lib-amd/utilities/observeResize.js +0 -51
  191. package/lib-amd/utilities/observeResize.js.map +0 -1
  192. package/lib-amd/utilities/useOverflow.d.ts +0 -45
  193. package/lib-amd/utilities/useOverflow.js +0 -128
  194. package/lib-amd/utilities/useOverflow.js.map +0 -1
  195. package/lib-commonjs/Tabs.d.ts +0 -1
  196. package/lib-commonjs/Tabs.js +0 -5
  197. package/lib-commonjs/Tabs.js.map +0 -1
  198. package/lib-commonjs/common/isConformant.d.ts +0 -2
  199. package/lib-commonjs/common/isConformant.js +0 -13
  200. package/lib-commonjs/common/isConformant.js.map +0 -1
  201. package/lib-commonjs/components/Tabs/TabItem.d.ts +0 -6
  202. package/lib-commonjs/components/Tabs/TabItem.js +0 -21
  203. package/lib-commonjs/components/Tabs/TabItem.js.map +0 -1
  204. package/lib-commonjs/components/Tabs/TabItem.types.d.ts +0 -61
  205. package/lib-commonjs/components/Tabs/TabItem.types.js +0 -3
  206. package/lib-commonjs/components/Tabs/TabItem.types.js.map +0 -1
  207. package/lib-commonjs/components/Tabs/Tabs.base.d.ts +0 -3
  208. package/lib-commonjs/components/Tabs/Tabs.base.js +0 -182
  209. package/lib-commonjs/components/Tabs/Tabs.base.js.map +0 -1
  210. package/lib-commonjs/components/Tabs/Tabs.d.ts +0 -8
  211. package/lib-commonjs/components/Tabs/Tabs.js +0 -15
  212. package/lib-commonjs/components/Tabs/Tabs.js.map +0 -1
  213. package/lib-commonjs/components/Tabs/Tabs.styles.d.ts +0 -2
  214. package/lib-commonjs/components/Tabs/Tabs.styles.js +0 -268
  215. package/lib-commonjs/components/Tabs/Tabs.styles.js.map +0 -1
  216. package/lib-commonjs/components/Tabs/Tabs.types.d.ts +0 -113
  217. package/lib-commonjs/components/Tabs/Tabs.types.js +0 -3
  218. package/lib-commonjs/components/Tabs/Tabs.types.js.map +0 -1
  219. package/lib-commonjs/components/Tabs/index.d.ts +0 -5
  220. package/lib-commonjs/components/Tabs/index.js +0 -11
  221. package/lib-commonjs/components/Tabs/index.js.map +0 -1
  222. package/lib-commonjs/utilities/observeResize.d.ts +0 -21
  223. package/lib-commonjs/utilities/observeResize.js +0 -50
  224. package/lib-commonjs/utilities/observeResize.js.map +0 -1
  225. package/lib-commonjs/utilities/useOverflow.d.ts +0 -45
  226. package/lib-commonjs/utilities/useOverflow.js +0 -130
  227. package/lib-commonjs/utilities/useOverflow.js.map +0 -1
  228. package/src/components/Tabs/TabItem.types.ts +0 -69
  229. package/src/components/Tabs/Tabs.types.ts +0 -131
@@ -1,128 +0,0 @@
1
- define(["require", "exports", "react", "@fluentui/react-hooks", "@fluentui/utilities", "./observeResize"], function (require, exports, React, react_hooks_1, utilities_1, observeResize_1) {
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.useOverflow = void 0;
5
- /**
6
- * Track whether any items don't fit within their container, and move them to the overflow menu.
7
- * Items are moved into the overflow menu from back to front, excluding pinned items.
8
- *
9
- * The overflow menu button must be the last sibling of all of the items that can be put into the overflow, and it
10
- * must be hooked up to the `setMenuButtonRef` setter function that's returned by `useOverflow`:
11
- * ```ts
12
- * const overflow = useOverflow(...);
13
- * ```
14
- * ```jsx
15
- * <Container>
16
- * <Item /> // Index 0
17
- * <Item /> // Index 1
18
- * ...
19
- * <Button ref={overflow.setMenuButtonRef} /> // Can be any React.Component or HTMLElement
20
- * </Container>
21
- * ```
22
- */
23
- var useOverflow = function (_a) {
24
- var onOverflowItemsChanged = _a.onOverflowItemsChanged, rtl = _a.rtl, pinnedIndex = _a.pinnedIndex;
25
- var updateOverflowRef = React.useRef();
26
- var containerWidthRef = React.useRef();
27
- // Attach a resize observer to the container
28
- var containerRef = react_hooks_1.useRefEffect(function (container) {
29
- var cleanupObserver = observeResize_1.observeResize(container, function (entries) {
30
- containerWidthRef.current = entries ? entries[0].contentRect.width : container.clientWidth;
31
- if (updateOverflowRef.current) {
32
- updateOverflowRef.current();
33
- }
34
- });
35
- return function () {
36
- cleanupObserver();
37
- containerWidthRef.current = undefined;
38
- };
39
- });
40
- var menuButtonRef = react_hooks_1.useRefEffect(function (menuButton) {
41
- containerRef(menuButton.parentElement);
42
- return function () { return containerRef(null); };
43
- });
44
- // eslint-disable-next-line no-restricted-properties
45
- React.useLayoutEffect(function () {
46
- var container = containerRef.current;
47
- var menuButton = menuButtonRef.current;
48
- if (!container || !menuButton) {
49
- return;
50
- }
51
- // items contains the container's children, excluding the overflow menu button itself
52
- var items = [];
53
- for (var i = 0; i < container.children.length; i++) {
54
- var item = container.children[i];
55
- if (item instanceof HTMLElement && item !== menuButton) {
56
- items.push(item);
57
- }
58
- }
59
- // Keep track of the minimum width of the container to fit each child index.
60
- // This cache is an integral part of the algorithm and not just a performance optimization: it allows us to
61
- // recalculate the overflowIndex on subsequent resizes even if some items are already inside the overflow.
62
- var minContainerWidth = [];
63
- var extraWidth = 0; // The accumulated width of items that don't move into the overflow
64
- updateOverflowRef.current = function () {
65
- var containerWidth = containerWidthRef.current;
66
- if (containerWidth === undefined) {
67
- return;
68
- }
69
- // Iterate the items in reverse order until we find one that fits within the bounds of the container
70
- for (var i = items.length - 1; i >= 0; i--) {
71
- // Calculate the min container width for this item if we haven't done so yet
72
- if (minContainerWidth[i] === undefined) {
73
- var itemOffsetEnd = rtl ? containerWidth - items[i].offsetLeft : items[i].offsetLeft + items[i].offsetWidth;
74
- // If the item after this one is pinned, reserve space for it
75
- if (i + 1 < items.length && i + 1 === pinnedIndex) {
76
- // Use distance between the end of the previous item and this one (rather than the
77
- // pinned item's offsetWidth), to account for any margin between the items.
78
- extraWidth = minContainerWidth[i + 1] - itemOffsetEnd;
79
- }
80
- // Reserve space for the menu button after the first item was added to the overflow
81
- if (i === items.length - 2) {
82
- extraWidth += menuButton.offsetWidth;
83
- }
84
- minContainerWidth[i] = itemOffsetEnd + extraWidth;
85
- }
86
- if (containerWidth > minContainerWidth[i]) {
87
- setOverflowIndex(i + 1);
88
- return;
89
- }
90
- }
91
- // If we got here, nothing fits outside the overflow
92
- setOverflowIndex(0);
93
- };
94
- var prevOverflowIndex = items.length;
95
- var setOverflowIndex = function (overflowIndex) {
96
- if (prevOverflowIndex !== overflowIndex) {
97
- prevOverflowIndex = overflowIndex;
98
- onOverflowItemsChanged(overflowIndex, items.map(function (ele, index) { return ({
99
- ele: ele,
100
- isOverflowing: index >= overflowIndex && index !== pinnedIndex,
101
- }); }));
102
- }
103
- };
104
- var cancelAnimationFrame = undefined;
105
- // If the container width is already known from a previous render, update the overflow with its width.
106
- // Do this in an animation frame to avoid forcing layout to happen early.
107
- if (containerWidthRef.current !== undefined) {
108
- var win_1 = utilities_1.getWindow(container);
109
- if (win_1) {
110
- var animationFrameId_1 = win_1.requestAnimationFrame(updateOverflowRef.current);
111
- cancelAnimationFrame = function () { return win_1.cancelAnimationFrame(animationFrameId_1); };
112
- }
113
- }
114
- return function () {
115
- if (cancelAnimationFrame) {
116
- cancelAnimationFrame();
117
- }
118
- // On cleanup, need to remove all items from the overflow
119
- // so they don't have stale properties on the next render
120
- setOverflowIndex(items.length);
121
- updateOverflowRef.current = undefined;
122
- };
123
- });
124
- return { menuButtonRef: menuButtonRef };
125
- };
126
- exports.useOverflow = useOverflow;
127
- });
128
- //# sourceMappingURL=useOverflow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useOverflow.js","sourceRoot":"../src/","sources":["utilities/useOverflow.ts"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { useRefEffect, RefCallback } from '@fluentui/react-hooks';\nimport { getWindow } from '@fluentui/utilities';\nimport { observeResize } from './observeResize';\n\n/**\n * Callback to notify the user that the items in the overflow have changed. This should ensure that the overflow menu\n * is visible, and contains all of the overflowing items.\n *\n * @param overflowIndex - The index of the first item in the overflow, or items.length if nothing is overflowing.\n * @param items - The list of all items in the container, and whether that particular item is in the overflow\n */\nexport type OverflowItemsChangedCallback = (\n overflowIndex: number,\n items: { ele: HTMLElement; isOverflowing: boolean }[],\n) => void;\n\n/** Parameters for {@see useOverflow} */\nexport type OverflowParams = {\n /** Callback to notify the user that the items in the overflow have changed. */\n onOverflowItemsChanged: OverflowItemsChangedCallback;\n\n /** True if the element containing overflowMenuButtonRef is in right-to-left order */\n rtl: boolean;\n\n /** Optional: Index of item that should never go into the overflow menu. */\n pinnedIndex?: number;\n};\n\n/** Return value for {@see useOverflow} */\nexport type OverflowRefs = {\n /** Set the overflow menu button's ref to this ref callback */\n menuButtonRef: RefCallback<HTMLElement>;\n};\n\n/**\n * Track whether any items don't fit within their container, and move them to the overflow menu.\n * Items are moved into the overflow menu from back to front, excluding pinned items.\n *\n * The overflow menu button must be the last sibling of all of the items that can be put into the overflow, and it\n * must be hooked up to the `setMenuButtonRef` setter function that's returned by `useOverflow`:\n * ```ts\n * const overflow = useOverflow(...);\n * ```\n * ```jsx\n * <Container>\n * <Item /> // Index 0\n * <Item /> // Index 1\n * ...\n * <Button ref={overflow.setMenuButtonRef} /> // Can be any React.Component or HTMLElement\n * </Container>\n * ```\n */\nexport const useOverflow = ({ onOverflowItemsChanged, rtl, pinnedIndex }: OverflowParams): OverflowRefs => {\n const updateOverflowRef = React.useRef<() => void>();\n const containerWidthRef = React.useRef<number>();\n\n // Attach a resize observer to the container\n const containerRef = useRefEffect<HTMLElement>(container => {\n const cleanupObserver = observeResize(container, entries => {\n containerWidthRef.current = entries ? entries[0].contentRect.width : container.clientWidth;\n if (updateOverflowRef.current) {\n updateOverflowRef.current();\n }\n });\n\n return () => {\n cleanupObserver();\n containerWidthRef.current = undefined;\n };\n });\n\n const menuButtonRef = useRefEffect<HTMLElement>(menuButton => {\n containerRef(menuButton.parentElement);\n return () => containerRef(null);\n });\n\n // eslint-disable-next-line no-restricted-properties\n React.useLayoutEffect(() => {\n const container = containerRef.current;\n const menuButton = menuButtonRef.current;\n if (!container || !menuButton) {\n return;\n }\n\n // items contains the container's children, excluding the overflow menu button itself\n const items: HTMLElement[] = [];\n for (let i = 0; i < container.children.length; i++) {\n const item = container.children[i];\n if (item instanceof HTMLElement && item !== menuButton) {\n items.push(item);\n }\n }\n\n // Keep track of the minimum width of the container to fit each child index.\n // This cache is an integral part of the algorithm and not just a performance optimization: it allows us to\n // recalculate the overflowIndex on subsequent resizes even if some items are already inside the overflow.\n const minContainerWidth: number[] = [];\n let extraWidth = 0; // The accumulated width of items that don't move into the overflow\n\n updateOverflowRef.current = () => {\n const containerWidth = containerWidthRef.current;\n if (containerWidth === undefined) {\n return;\n }\n\n // Iterate the items in reverse order until we find one that fits within the bounds of the container\n for (let i = items.length - 1; i >= 0; i--) {\n // Calculate the min container width for this item if we haven't done so yet\n if (minContainerWidth[i] === undefined) {\n const itemOffsetEnd = rtl ? containerWidth - items[i].offsetLeft : items[i].offsetLeft + items[i].offsetWidth;\n\n // If the item after this one is pinned, reserve space for it\n if (i + 1 < items.length && i + 1 === pinnedIndex) {\n // Use distance between the end of the previous item and this one (rather than the\n // pinned item's offsetWidth), to account for any margin between the items.\n extraWidth = minContainerWidth[i + 1] - itemOffsetEnd;\n }\n\n // Reserve space for the menu button after the first item was added to the overflow\n if (i === items.length - 2) {\n extraWidth += menuButton.offsetWidth;\n }\n\n minContainerWidth[i] = itemOffsetEnd + extraWidth;\n }\n\n if (containerWidth > minContainerWidth[i]) {\n setOverflowIndex(i + 1);\n return;\n }\n }\n\n // If we got here, nothing fits outside the overflow\n setOverflowIndex(0);\n };\n\n let prevOverflowIndex = items.length;\n const setOverflowIndex = (overflowIndex: number) => {\n if (prevOverflowIndex !== overflowIndex) {\n prevOverflowIndex = overflowIndex;\n onOverflowItemsChanged(\n overflowIndex,\n items.map((ele, index) => ({\n ele,\n isOverflowing: index >= overflowIndex && index !== pinnedIndex,\n })),\n );\n }\n };\n\n let cancelAnimationFrame: (() => void) | undefined = undefined;\n\n // If the container width is already known from a previous render, update the overflow with its width.\n // Do this in an animation frame to avoid forcing layout to happen early.\n if (containerWidthRef.current !== undefined) {\n const win = getWindow(container);\n if (win) {\n const animationFrameId = win.requestAnimationFrame(updateOverflowRef.current);\n cancelAnimationFrame = () => win.cancelAnimationFrame(animationFrameId);\n }\n }\n\n return () => {\n if (cancelAnimationFrame) {\n cancelAnimationFrame();\n }\n\n // On cleanup, need to remove all items from the overflow\n // so they don't have stale properties on the next render\n setOverflowIndex(items.length);\n updateOverflowRef.current = undefined;\n };\n });\n\n return { menuButtonRef };\n};\n"]}
@@ -1 +0,0 @@
1
- export * from './components/Tabs/index';
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./components/Tabs/index"), exports);
5
- //# sourceMappingURL=Tabs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tabs.js","sourceRoot":"../src/","sources":["Tabs.ts"],"names":[],"mappings":";;;AAAA,kEAAwC","sourcesContent":["export * from './components/Tabs/index';\n"]}
@@ -1,2 +0,0 @@
1
- import { IsConformantOptions } from '@fluentui/react-conformance';
2
- export declare function isConformant(testInfo: Omit<IsConformantOptions, 'componentPath'>): void;
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isConformant = void 0;
4
- var react_conformance_1 = require("@fluentui/react-conformance");
5
- function isConformant(testInfo) {
6
- var defaultOptions = {
7
- disabledTests: ['has-docblock', 'kebab-aria-attributes'],
8
- componentPath: module.parent.filename.replace('.test', ''),
9
- };
10
- react_conformance_1.isConformant(defaultOptions, testInfo);
11
- }
12
- exports.isConformant = isConformant;
13
- //# sourceMappingURL=isConformant.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"isConformant.js","sourceRoot":"../src/","sources":["common/isConformant.ts"],"names":[],"mappings":";;;AAAA,iEAAoG;AAEpG,SAAgB,YAAY,CAAC,QAAoD;IAC/E,IAAM,cAAc,GAAG;QACrB,aAAa,EAAE,CAAC,cAAc,EAAE,uBAAuB,CAAC;QACxD,aAAa,EAAE,MAAO,CAAC,MAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;KAC7D,CAAC;IAEF,gCAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAPD,oCAOC","sourcesContent":["import { isConformant as baseIsConformant, IsConformantOptions } from '@fluentui/react-conformance';\n\nexport function isConformant(testInfo: Omit<IsConformantOptions, 'componentPath'>) {\n const defaultOptions = {\n disabledTests: ['has-docblock', 'kebab-aria-attributes'],\n componentPath: module!.parent!.filename.replace('.test', ''),\n };\n\n baseIsConformant(defaultOptions, testInfo);\n}\n"]}
@@ -1,6 +0,0 @@
1
- import * as React from 'react';
2
- import { TabItemProps } from './TabItem.types';
3
- export declare class TabItem extends React.Component<TabItemProps, {}> {
4
- constructor(props: TabItemProps);
5
- render(): JSX.Element;
6
- }
@@ -1,21 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TabItem = void 0;
4
- var tslib_1 = require("tslib");
5
- var React = require("react");
6
- var utilities_1 = require("@fluentui/utilities");
7
- // const COMPONENT_NAME = 'TabItem';
8
- var TabItem = /** @class */ (function (_super) {
9
- tslib_1.__extends(TabItem, _super);
10
- function TabItem(props) {
11
- var _this = _super.call(this, props) || this;
12
- utilities_1.initializeComponentRef(_this);
13
- return _this;
14
- }
15
- TabItem.prototype.render = function () {
16
- return React.createElement("div", tslib_1.__assign({}, utilities_1.getNativeProps(this.props, utilities_1.divProperties)), this.props.children);
17
- };
18
- return TabItem;
19
- }(React.Component));
20
- exports.TabItem = TabItem;
21
- //# sourceMappingURL=TabItem.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TabItem.js","sourceRoot":"../src/","sources":["components/Tabs/TabItem.tsx"],"names":[],"mappings":";;;;AAAA,6BAA+B;AAC/B,iDAA4F;AAG5F,oCAAoC;AAEpC;IAA6B,mCAAiC;IAC5D,iBAAY,KAAmB;QAA/B,YACE,kBAAM,KAAK,CAAC,SAGb;QADC,kCAAsB,CAAC,KAAI,CAAC,CAAC;;IAC/B,CAAC;IAEM,wBAAM,GAAb;QACE,OAAO,gDAAS,0BAAc,CAAC,IAAI,CAAC,KAAK,EAAE,yBAAa,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAO,CAAC;IACzF,CAAC;IACH,cAAC;AAAD,CAAC,AAVD,CAA6B,KAAK,CAAC,SAAS,GAU3C;AAVY,0BAAO","sourcesContent":["import * as React from 'react';\nimport { getNativeProps, divProperties, initializeComponentRef } from '@fluentui/utilities';\nimport { TabItemProps } from './TabItem.types';\n\n// const COMPONENT_NAME = 'TabItem';\n\nexport class TabItem extends React.Component<TabItemProps, {}> {\n constructor(props: TabItemProps) {\n super(props);\n\n initializeComponentRef(this);\n }\n\n public render(): JSX.Element {\n return <div {...getNativeProps(this.props, divProperties)}>{this.props.children}</div>;\n }\n}\n"]}
@@ -1,61 +0,0 @@
1
- import * as React from 'react';
2
- import { IKeytipProps } from '@fluentui/react';
3
- import { IButtonProps } from '@fluentui/react/lib/Button';
4
- import { IRefObject, IRenderFunction } from '@fluentui/utilities';
5
- /**
6
- * {@docCategory Tabs}
7
- */
8
- export interface TabItemProps extends React.HTMLAttributes<HTMLDivElement> {
9
- /**
10
- * Gets the component ref.
11
- */
12
- componentRef?: IRefObject<{}>;
13
- /**
14
- * The text displayed of each tab.
15
- */
16
- headerText?: string;
17
- /**
18
- * Props for the header command button. This provides a way to pass in native props, such as data-* and aria-*,
19
- * for each tab element.
20
- */
21
- headerButtonProps?: IButtonProps | {
22
- [key: string]: string | number | boolean;
23
- };
24
- /**
25
- * An required key to uniquely identify a tab item.
26
- *
27
- * Note: The 'key' from react props cannot be used inside component.
28
- */
29
- itemKey?: string;
30
- /**
31
- * The aria label of each tab which will read by screen reader instead of headerText.
32
- *
33
- * Note that unless you have compelling requirements you should not override aria-label.
34
- */
35
- ariaLabel?: string;
36
- /**
37
- * Defines an optional item count displayed in parentheses just after the `headerText`.
38
- *
39
- * Examples: completed (4), Unread (99+)
40
- */
41
- itemCount?: number | string;
42
- /**
43
- * An optional icon to show next to the tab.
44
- */
45
- itemIcon?: string;
46
- /**
47
- * Optional custom renderer for the tab
48
- */
49
- onRenderTab?: IRenderFunction<TabItemProps>;
50
- /**
51
- * Optional keytip for this TabItem
52
- */
53
- keytipProps?: IKeytipProps;
54
- /**
55
- * Defines whether to always render the tab item (regardless of whether it is selected or not).
56
- * Useful if you're rendering content that is expensive to mount.
57
- *
58
- * @defaultvalue false
59
- */
60
- alwaysRender?: boolean;
61
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=TabItem.types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TabItem.types.js","sourceRoot":"../src/","sources":["components/Tabs/TabItem.types.ts"],"names":[],"mappings":"","sourcesContent":["import * as React from 'react';\nimport { IKeytipProps } from '@fluentui/react';\nimport { IButtonProps } from '@fluentui/react/lib/Button';\nimport { IRefObject, IRenderFunction } from '@fluentui/utilities';\n\n/**\n * {@docCategory Tabs}\n */\nexport interface TabItemProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Gets the component ref.\n */\n componentRef?: IRefObject<{}>;\n\n /**\n * The text displayed of each tab.\n */\n headerText?: string;\n\n /**\n * Props for the header command button. This provides a way to pass in native props, such as data-* and aria-*,\n * for each tab element.\n */\n headerButtonProps?: IButtonProps | { [key: string]: string | number | boolean };\n\n /**\n * An required key to uniquely identify a tab item.\n *\n * Note: The 'key' from react props cannot be used inside component.\n */\n itemKey?: string;\n\n /**\n * The aria label of each tab which will read by screen reader instead of headerText.\n *\n * Note that unless you have compelling requirements you should not override aria-label.\n */\n ariaLabel?: string;\n\n /**\n * Defines an optional item count displayed in parentheses just after the `headerText`.\n *\n * Examples: completed (4), Unread (99+)\n */\n itemCount?: number | string;\n\n /**\n * An optional icon to show next to the tab.\n */\n itemIcon?: string;\n\n /**\n * Optional custom renderer for the tab\n */\n onRenderTab?: IRenderFunction<TabItemProps>;\n\n /**\n * Optional keytip for this TabItem\n */\n keytipProps?: IKeytipProps;\n\n /**\n * Defines whether to always render the tab item (regardless of whether it is selected or not).\n * Useful if you're rendering content that is expensive to mount.\n *\n * @defaultvalue false\n */\n alwaysRender?: boolean;\n}\n"]}
@@ -1,3 +0,0 @@
1
- import * as React from 'react';
2
- import { TabsProps } from './index';
3
- export declare const TabsBase: React.FunctionComponent<TabsProps>;
@@ -1,182 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TabsBase = void 0;
4
- var tslib_1 = require("tslib");
5
- var React = require("react");
6
- var react_hooks_1 = require("@fluentui/react-hooks");
7
- var utilities_1 = require("@fluentui/utilities");
8
- var react_1 = require("@fluentui/react");
9
- var Button_1 = require("@fluentui/react/lib-commonjs/Button");
10
- var index_1 = require("./index");
11
- var useOverflow_1 = require("../../utilities/useOverflow");
12
- var getClassNames = utilities_1.classNamesFunction();
13
- var COMPONENT_NAME = 'Tabs';
14
- var getTabId = function (props, baseId, itemKey, index) {
15
- if (props.getTabId) {
16
- return props.getTabId(itemKey, index);
17
- }
18
- return baseId + ("-Tab" + index);
19
- };
20
- // Gets the set of Tabs as array of TabItemProps
21
- // The set of Tabs is determined by child components of type TabItem
22
- var getTabItems = function (props, baseId) {
23
- var result = {
24
- tabs: [],
25
- keyToIndexMapping: {},
26
- keyToTabIdMapping: {},
27
- };
28
- React.Children.forEach(React.Children.toArray(props.children), function (child, index) {
29
- if (isTabItem(child)) {
30
- var _a = child.props, _b = _a.itemKey, itemKey = _b === void 0 ? index.toString() : _b, tabItemProps = tslib_1.__rest(_a, ["itemKey"]);
31
- result.tabs.push(tslib_1.__assign(tslib_1.__assign({}, tabItemProps), { itemKey: itemKey }));
32
- result.keyToIndexMapping[itemKey] = index;
33
- result.keyToTabIdMapping[itemKey] = getTabId(props, baseId, itemKey, index);
34
- }
35
- else if (child) {
36
- utilities_1.warn('The children of a Tabs component must be of type TabItem to be rendered.');
37
- }
38
- });
39
- return result;
40
- };
41
- var isTabItem = function (item) {
42
- var _a, _b;
43
- return ((_b = (_a = item) === null || _a === void 0 ? void 0 : _a.type) === null || _b === void 0 ? void 0 : _b.name) === index_1.TabItem.name;
44
- };
45
- exports.TabsBase = React.forwardRef(function (props, ref) {
46
- var focusZoneRef = React.useRef(null);
47
- var overflowMenuButtonComponentRef = React.useRef(null);
48
- var baseId = react_hooks_1.useId('Tabs');
49
- var _a = react_hooks_1.useControllableValue(props.selectedKey, props.defaultSelectedKey), selectedKey = _a[0], setSelectedKey = _a[1];
50
- var componentRef = props.componentRef, theme = props.theme, tabSize = props.tabSize, tabFormat = props.tabFormat, overflowBehavior = props.overflowBehavior;
51
- var classNames;
52
- var divProps = utilities_1.getNativeProps(props, utilities_1.divProperties);
53
- var tabCollection = getTabItems(props, baseId);
54
- React.useImperativeHandle(componentRef, function () { return ({
55
- focus: function () {
56
- var _a;
57
- (_a = focusZoneRef.current) === null || _a === void 0 ? void 0 : _a.focus();
58
- },
59
- }); });
60
- var renderTabContent = function (tab) {
61
- if (!tab) {
62
- return null;
63
- }
64
- var itemCount = tab.itemCount, itemIcon = tab.itemIcon, headerText = tab.headerText;
65
- return (React.createElement("span", { className: classNames.tabContent },
66
- itemIcon !== undefined && (React.createElement("span", { className: classNames.icon },
67
- React.createElement(react_1.Icon, { iconName: itemIcon }))),
68
- headerText !== undefined && React.createElement("span", { className: classNames.text },
69
- " ",
70
- tab.headerText),
71
- itemCount !== undefined && React.createElement("span", { className: classNames.count },
72
- " (",
73
- itemCount,
74
- ")")));
75
- };
76
- var renderTab = function (renderTabCollection, tab, renderTabSelectedKey, className) {
77
- var itemKey = tab.itemKey, headerButtonProps = tab.headerButtonProps, onRenderTab = tab.onRenderTab;
78
- var tabId = renderTabCollection.keyToTabIdMapping[itemKey];
79
- var tabContent;
80
- var isSelected = renderTabSelectedKey === itemKey;
81
- if (onRenderTab) {
82
- tabContent = onRenderTab(tab, renderTabContent);
83
- }
84
- else {
85
- tabContent = renderTabContent(tab);
86
- }
87
- var contentString = tab.headerText || '';
88
- contentString += tab.itemCount ? ' (' + tab.itemCount + ')' : '';
89
- // Adding space supplementary for icon
90
- contentString += tab.itemIcon ? ' xx' : '';
91
- return (React.createElement(Button_1.CommandButton, tslib_1.__assign({}, headerButtonProps, { id: tabId, key: itemKey, className: utilities_1.css(className, isSelected && classNames.tabIsSelected),
92
- // eslint-disable-next-line react/jsx-no-bind
93
- onClick: function (ev) { return onTabClick(itemKey, ev); },
94
- // eslint-disable-next-line react/jsx-no-bind
95
- onKeyDown: function (ev) { return onKeyDown(itemKey, ev); }, "aria-label": tab.ariaLabel, role: tab.role || 'tab', "aria-selected": isSelected, name: tab.headerText, keytipProps: tab.keytipProps, "data-content": contentString }), tabContent));
96
- };
97
- var onTabClick = function (itemKey, ev) {
98
- ev.preventDefault();
99
- updateSelectedItem(itemKey, ev);
100
- };
101
- var onKeyDown = function (itemKey, ev) {
102
- // eslint-disable-next-line deprecation/deprecation
103
- if (ev.which === utilities_1.KeyCodes.enter) {
104
- ev.preventDefault();
105
- updateSelectedItem(itemKey);
106
- }
107
- };
108
- var updateSelectedItem = function (itemKey, ev) {
109
- var _a;
110
- setSelectedKey(itemKey);
111
- tabCollection = getTabItems(props, baseId);
112
- if (props.onTabClick && tabCollection.keyToIndexMapping[itemKey] >= 0) {
113
- var selectedIndex = tabCollection.keyToIndexMapping[itemKey];
114
- var item = React.Children.toArray(props.children)[selectedIndex];
115
- if (isTabItem(item)) {
116
- props.onTabClick(item, ev);
117
- }
118
- }
119
- (_a = overflowMenuButtonComponentRef.current) === null || _a === void 0 ? void 0 : _a.dismissMenu();
120
- };
121
- var renderTabItem = function (itemKey, isActive) {
122
- if (props.headersOnly || !itemKey) {
123
- return null;
124
- }
125
- var index = tabCollection.keyToIndexMapping[itemKey];
126
- var selectedTabId = tabCollection.keyToTabIdMapping[itemKey];
127
- return (React.createElement("div", { role: "tabpanel", hidden: !isActive, key: itemKey, "aria-hidden": !isActive, "aria-labelledby": selectedTabId, className: classNames.itemContainer }, React.Children.toArray(props.children)[index]));
128
- };
129
- var isKeyValid = function (itemKey) {
130
- return itemKey !== undefined && itemKey !== null && tabCollection.keyToIndexMapping[itemKey] !== undefined;
131
- };
132
- var getSelectedKey = function () {
133
- if (isKeyValid(selectedKey)) {
134
- return selectedKey;
135
- }
136
- if (tabCollection.tabs.length) {
137
- return tabCollection.tabs[0].itemKey;
138
- }
139
- return undefined;
140
- };
141
- classNames = getClassNames(props.styles, {
142
- theme: theme,
143
- tabSize: tabSize,
144
- tabFormat: tabFormat,
145
- });
146
- var renderedSelectedKey = getSelectedKey();
147
- var renderedSelectedIndex = renderedSelectedKey ? tabCollection.keyToIndexMapping[renderedSelectedKey] : 0;
148
- var items = tabCollection.tabs.map(function (l) { return renderTab(tabCollection, l, renderedSelectedKey, classNames.tab); });
149
- // The overflow menu starts empty and items[] is updated as the overflow items change
150
- var overflowMenuProps = React.useMemo(function () { return ({
151
- items: [],
152
- alignTargetEdge: true,
153
- directionalHint: react_1.DirectionalHint.bottomRightEdge,
154
- }); }, []);
155
- var overflowMenuButtonRef = useOverflow_1.useOverflow({
156
- onOverflowItemsChanged: function (overflowIndex, elements) {
157
- // Set data-is-overflowing on each item
158
- elements.forEach(function (_a) {
159
- var ele = _a.ele, isOverflowing = _a.isOverflowing;
160
- return (ele.dataset.isOverflowing = "" + isOverflowing);
161
- });
162
- // Update the menu items
163
- overflowMenuProps.items = tabCollection.tabs.slice(overflowIndex).map(function (tab, index) { return ({
164
- key: tab.itemKey || "" + (overflowIndex + index),
165
- onRender: function () { return renderTab(tabCollection, tab, renderedSelectedKey, classNames.tabInMenu); },
166
- }); });
167
- },
168
- rtl: utilities_1.getRTL(theme),
169
- pinnedIndex: renderedSelectedIndex,
170
- }).menuButtonRef;
171
- return (React.createElement("div", tslib_1.__assign({ role: "toolbar" }, divProps, { ref: ref }),
172
- React.createElement(react_1.FocusZone, { componentRef: focusZoneRef, direction: react_1.FocusZoneDirection.horizontal, className: classNames.root, role: "tablist" },
173
- items,
174
- overflowBehavior === 'menu' && (React.createElement(Button_1.CommandButton, { className: utilities_1.css(classNames.tab, classNames.overflowMenuButton), elementRef: overflowMenuButtonRef, componentRef: overflowMenuButtonComponentRef, menuProps: overflowMenuProps, menuIconProps: { iconName: 'More', style: { color: 'inherit' } } }))),
175
- renderedSelectedKey &&
176
- tabCollection.tabs.map(function (tab) {
177
- return (tab.alwaysRender === true || renderedSelectedKey === tab.itemKey) &&
178
- renderTabItem(tab.itemKey, renderedSelectedKey === tab.itemKey);
179
- })));
180
- });
181
- exports.TabsBase.displayName = COMPONENT_NAME;
182
- //# sourceMappingURL=Tabs.base.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tabs.base.js","sourceRoot":"../src/","sources":["components/Tabs/Tabs.base.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { useControllableValue, useId } from '@fluentui/react-hooks';\nimport { classNamesFunction, css, divProperties, getNativeProps, getRTL, KeyCodes, warn } from '@fluentui/utilities';\nimport {\n DirectionalHint,\n FocusZone,\n FocusZoneDirection,\n Icon,\n IContextualMenuProps,\n IFocusZone,\n} from '@fluentui/react';\nimport { CommandButton, IButton } from '@fluentui/react/lib/Button';\nimport { TabsImperativeHandle, TabItemProps, TabsProps, TabsStyleProps, TabsStyles, TabItem } from './index';\nimport { useOverflow } from '../../utilities/useOverflow';\n\nconst getClassNames = classNamesFunction<TabsStyleProps, TabsStyles>();\n\nconst COMPONENT_NAME = 'Tabs';\n\ntype TabItemCollection = {\n tabs: TabItemProps[];\n keyToIndexMapping: { [key: string]: number };\n keyToTabIdMapping: { [key: string]: string };\n};\n\nconst getTabId = (props: TabsProps, baseId: string, itemKey: string, index: number): string => {\n if (props.getTabId) {\n return props.getTabId(itemKey, index);\n }\n return baseId + `-Tab${index}`;\n};\n\n// Gets the set of Tabs as array of TabItemProps\n// The set of Tabs is determined by child components of type TabItem\nconst getTabItems = (props: TabsProps, baseId: string): TabItemCollection => {\n const result: TabItemCollection = {\n tabs: [],\n keyToIndexMapping: {},\n keyToTabIdMapping: {},\n };\n\n React.Children.forEach(React.Children.toArray(props.children), (child: React.ReactNode, index: number) => {\n if (isTabItem(child)) {\n const { itemKey = index.toString(), ...tabItemProps } = child.props;\n result.tabs.push({\n ...tabItemProps,\n itemKey: itemKey,\n });\n result.keyToIndexMapping[itemKey] = index;\n result.keyToTabIdMapping[itemKey] = getTabId(props, baseId, itemKey, index);\n } else if (child) {\n warn('The children of a Tabs component must be of type TabItem to be rendered.');\n }\n });\n return result;\n};\n\nconst isTabItem = (item: React.ReactNode): item is TabItem => {\n return ((item as React.ReactElement)?.type as React.ComponentType)?.name === TabItem.name;\n};\n\nexport const TabsBase: React.FunctionComponent<TabsProps> = React.forwardRef<HTMLDivElement, TabsProps>(\n (props, ref) => {\n const focusZoneRef = React.useRef<IFocusZone>(null);\n const overflowMenuButtonComponentRef = React.useRef<IButton>(null);\n const baseId: string = useId('Tabs');\n\n const [selectedKey, setSelectedKey] = useControllableValue(props.selectedKey, props.defaultSelectedKey);\n\n const { componentRef, theme, tabSize, tabFormat, overflowBehavior } = props;\n\n let classNames: { [key in keyof TabsStyles]: string };\n const divProps = getNativeProps<React.HTMLAttributes<HTMLDivElement>>(props, divProperties);\n\n let tabCollection = getTabItems(props, baseId);\n\n React.useImperativeHandle(componentRef as React.RefObject<TabsImperativeHandle>, () => ({\n focus: () => {\n focusZoneRef.current?.focus();\n },\n }));\n\n const renderTabContent = (tab?: TabItemProps): JSX.Element | null => {\n if (!tab) {\n return null;\n }\n\n const { itemCount, itemIcon, headerText } = tab;\n return (\n <span className={classNames.tabContent}>\n {itemIcon !== undefined && (\n <span className={classNames.icon}>\n <Icon iconName={itemIcon} />\n </span>\n )}\n {headerText !== undefined && <span className={classNames.text}> {tab.headerText}</span>}\n {itemCount !== undefined && <span className={classNames.count}> ({itemCount})</span>}\n </span>\n );\n };\n\n const renderTab = (\n renderTabCollection: TabItemCollection,\n tab: TabItemProps,\n renderTabSelectedKey: string | null | undefined,\n className: string,\n ): JSX.Element => {\n const { itemKey, headerButtonProps, onRenderTab } = tab;\n const tabId = renderTabCollection.keyToTabIdMapping[itemKey!];\n let tabContent: JSX.Element | null;\n const isSelected: boolean = renderTabSelectedKey === itemKey;\n\n if (onRenderTab) {\n tabContent = onRenderTab(tab, renderTabContent);\n } else {\n tabContent = renderTabContent(tab);\n }\n\n let contentString = tab.headerText || '';\n contentString += tab.itemCount ? ' (' + tab.itemCount + ')' : '';\n // Adding space supplementary for icon\n contentString += tab.itemIcon ? ' xx' : '';\n return (\n <CommandButton\n {...headerButtonProps}\n id={tabId}\n key={itemKey}\n className={css(className, isSelected && classNames.tabIsSelected)}\n // eslint-disable-next-line react/jsx-no-bind\n onClick={(ev: React.MouseEvent<HTMLElement>) => onTabClick(itemKey!, ev)}\n // eslint-disable-next-line react/jsx-no-bind\n onKeyDown={(ev: React.KeyboardEvent<HTMLElement>) => onKeyDown(itemKey!, ev)}\n aria-label={tab.ariaLabel}\n role={tab.role || 'tab'}\n aria-selected={isSelected}\n name={tab.headerText}\n keytipProps={tab.keytipProps}\n data-content={contentString}\n >\n {tabContent}\n </CommandButton>\n );\n };\n\n const onTabClick = (itemKey: string, ev: React.MouseEvent<HTMLElement>): void => {\n ev.preventDefault();\n updateSelectedItem(itemKey, ev);\n };\n\n const onKeyDown = (itemKey: string, ev: React.KeyboardEvent<HTMLElement>): void => {\n // eslint-disable-next-line deprecation/deprecation\n if (ev.which === KeyCodes.enter) {\n ev.preventDefault();\n updateSelectedItem(itemKey);\n }\n };\n\n const updateSelectedItem = (itemKey: string, ev?: React.MouseEvent<HTMLElement>): void => {\n setSelectedKey(itemKey);\n tabCollection = getTabItems(props, baseId);\n if (props.onTabClick && tabCollection.keyToIndexMapping[itemKey] >= 0) {\n const selectedIndex = tabCollection.keyToIndexMapping[itemKey];\n const item = React.Children.toArray(props.children)[selectedIndex];\n if (isTabItem(item)) {\n props.onTabClick(item, ev);\n }\n }\n\n overflowMenuButtonComponentRef.current?.dismissMenu();\n };\n\n const renderTabItem = (itemKey: string | undefined, isActive: boolean): JSX.Element | null => {\n if (props.headersOnly || !itemKey) {\n return null;\n }\n\n const index = tabCollection.keyToIndexMapping[itemKey];\n const selectedTabId = tabCollection.keyToTabIdMapping[itemKey];\n return (\n <div\n role=\"tabpanel\"\n hidden={!isActive}\n key={itemKey}\n aria-hidden={!isActive}\n aria-labelledby={selectedTabId}\n className={classNames.itemContainer}\n >\n {React.Children.toArray(props.children)[index]}\n </div>\n );\n };\n\n const isKeyValid = (itemKey: string | null | undefined): boolean => {\n return itemKey !== undefined && itemKey !== null && tabCollection.keyToIndexMapping[itemKey] !== undefined;\n };\n\n const getSelectedKey = () => {\n if (isKeyValid(selectedKey)) {\n return selectedKey;\n }\n if (tabCollection.tabs.length) {\n return tabCollection.tabs[0].itemKey;\n }\n return undefined;\n };\n\n classNames = getClassNames(props.styles!, {\n theme: theme!,\n tabSize,\n tabFormat,\n });\n\n const renderedSelectedKey = getSelectedKey();\n const renderedSelectedIndex = renderedSelectedKey ? tabCollection.keyToIndexMapping[renderedSelectedKey] : 0;\n\n const items = tabCollection.tabs.map(l => renderTab(tabCollection, l, renderedSelectedKey, classNames.tab));\n\n // The overflow menu starts empty and items[] is updated as the overflow items change\n const overflowMenuProps: IContextualMenuProps = React.useMemo(\n () => ({\n items: [],\n alignTargetEdge: true,\n directionalHint: DirectionalHint.bottomRightEdge,\n }),\n [],\n );\n\n const { menuButtonRef: overflowMenuButtonRef } = useOverflow({\n onOverflowItemsChanged: (overflowIndex, elements) => {\n // Set data-is-overflowing on each item\n elements.forEach(({ ele, isOverflowing }) => (ele.dataset.isOverflowing = `${isOverflowing}`));\n\n // Update the menu items\n overflowMenuProps.items = tabCollection.tabs.slice(overflowIndex).map((tab, index) => ({\n key: tab.itemKey || `${overflowIndex + index}`,\n onRender: () => renderTab(tabCollection, tab, renderedSelectedKey, classNames.tabInMenu),\n }));\n },\n rtl: getRTL(theme),\n pinnedIndex: renderedSelectedIndex,\n });\n\n return (\n <div role=\"toolbar\" {...divProps} ref={ref}>\n <FocusZone\n componentRef={focusZoneRef}\n direction={FocusZoneDirection.horizontal}\n className={classNames.root}\n role=\"tablist\"\n >\n {items}\n {overflowBehavior === 'menu' && (\n <CommandButton\n className={css(classNames.tab, classNames.overflowMenuButton)}\n elementRef={overflowMenuButtonRef}\n componentRef={overflowMenuButtonComponentRef}\n menuProps={overflowMenuProps}\n menuIconProps={{ iconName: 'More', style: { color: 'inherit' } }}\n />\n )}\n </FocusZone>\n {renderedSelectedKey &&\n tabCollection.tabs.map(\n tab =>\n (tab.alwaysRender === true || renderedSelectedKey === tab.itemKey) &&\n renderTabItem(tab.itemKey, renderedSelectedKey === tab.itemKey),\n )}\n </div>\n );\n },\n);\nTabsBase.displayName = COMPONENT_NAME;\n"]}
@@ -1,8 +0,0 @@
1
- import * as React from 'react';
2
- import { TabsProps } from './Tabs.types';
3
- /**
4
- * The Tabs control and related tabs pattern are used for navigating frequently accessed,
5
- * distinct content categories. Tabs allow for navigation between two or more content
6
- * views and relies on text headers to articulate the different sections of content.
7
- */
8
- export declare const Tabs: React.FunctionComponent<TabsProps>;
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Tabs = void 0;
4
- var utilities_1 = require("@fluentui/utilities");
5
- var Tabs_base_1 = require("./Tabs.base");
6
- var Tabs_styles_1 = require("./Tabs.styles");
7
- /**
8
- * The Tabs control and related tabs pattern are used for navigating frequently accessed,
9
- * distinct content categories. Tabs allow for navigation between two or more content
10
- * views and relies on text headers to articulate the different sections of content.
11
- */
12
- exports.Tabs = utilities_1.styled(Tabs_base_1.TabsBase, Tabs_styles_1.getStyles, undefined, {
13
- scope: 'Tabs',
14
- });
15
- //# sourceMappingURL=Tabs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tabs.js","sourceRoot":"../src/","sources":["components/Tabs/Tabs.tsx"],"names":[],"mappings":";;;AACA,iDAA6C;AAE7C,yCAAuC;AACvC,6CAA0C;AAE1C;;;;GAIG;AACU,QAAA,IAAI,GAAuC,kBAAM,CAC5D,oBAAQ,EACR,uBAAS,EACT,SAAS,EACT;IACE,KAAK,EAAE,MAAM;CACd,CACF,CAAC","sourcesContent":["import * as React from 'react';\nimport { styled } from '@fluentui/utilities';\nimport { TabsProps, TabsStyleProps, TabsStyles } from './Tabs.types';\nimport { TabsBase } from './Tabs.base';\nimport { getStyles } from './Tabs.styles';\n\n/**\n * The Tabs control and related tabs pattern are used for navigating frequently accessed,\n * distinct content categories. Tabs allow for navigation between two or more content\n * views and relies on text headers to articulate the different sections of content.\n */\nexport const Tabs: React.FunctionComponent<TabsProps> = styled<TabsProps, TabsStyleProps, TabsStyles>(\n TabsBase,\n getStyles,\n undefined,\n {\n scope: 'Tabs',\n },\n);\n"]}
@@ -1,2 +0,0 @@
1
- import { TabsStyleProps, TabsStyles } from './Tabs.types';
2
- export declare const getStyles: (props: TabsStyleProps) => TabsStyles;