@telus-uds/components-base 0.0.2-prerelease.9 → 1.1.0

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 (293) hide show
  1. package/.eslintrc.js +9 -0
  2. package/.storybook/main.js +4 -0
  3. package/.storybook/preview.js +37 -0
  4. package/.ultra.cache.json +1 -1
  5. package/CHANGELOG.md +50 -0
  6. package/README.md +4 -2
  7. package/__fixtures__/test-utils.js +25 -0
  8. package/__fixtures__/testTheme.js +4 -2
  9. package/__tests__/Button/ButtonGroup.test.jsx +4 -5
  10. package/__tests__/Checkbox/Checkbox.test.jsx +2 -2
  11. package/__tests__/Checkbox/CheckboxGroup.test.jsx +4 -5
  12. package/__tests__/ExpandCollapse/ExpandCollapse.test.jsx +2 -2
  13. package/__tests__/HorizontalScroll/HorizontalScroll.test.jsx +164 -0
  14. package/__tests__/Link/LinkBase.test.jsx +0 -14
  15. package/__tests__/Radio/Radio.test.jsx +2 -2
  16. package/__tests__/Radio/RadioGroup.test.jsx +4 -5
  17. package/__tests__/RadioCard/RadioCard.test.jsx +2 -2
  18. package/__tests__/RadioCard/RadioCardGroup.test.jsx +4 -5
  19. package/__tests__/Search/Search.test.jsx +9 -8
  20. package/__tests__/Select/Select.test.jsx +3 -2
  21. package/__tests__/Tabs/Tabs.test.jsx +1 -161
  22. package/__tests__/Tags/Tags.test.jsx +4 -5
  23. package/__tests__/TextInput/TextArea.test.jsx +3 -2
  24. package/__tests__/TextInput/TextInputBase.test.jsx +10 -5
  25. package/__tests__/ThemeProvider/ThemeProvider.test.jsx +77 -0
  26. package/__tests__/ThemeProvider/useThemeTokens.test.jsx +9 -5
  27. package/__tests__/ThemeProvider/utils/theme-tokens.test.js +41 -0
  28. package/__tests__/ToggleSwitch/ToggleSwitch.test.jsx +3 -2
  29. package/__tests__/utils/children.test.jsx +128 -0
  30. package/__tests__/utils/input.test.js +1 -1
  31. package/__tests__/utils/semantics.test.jsx +43 -0
  32. package/babel.config.js +9 -16
  33. package/component-docs.json +10313 -0
  34. package/generate-component-docs.js +56 -0
  35. package/lib/A11yText/index.js +10 -5
  36. package/lib/ActivityIndicator/Spinner.js +16 -13
  37. package/lib/ActivityIndicator/Spinner.native.js +12 -8
  38. package/lib/Box/Box.js +103 -8
  39. package/lib/Button/Button.js +9 -8
  40. package/lib/Button/ButtonBase.js +14 -7
  41. package/lib/Button/ButtonGroup.js +25 -10
  42. package/lib/Button/ButtonLink.js +10 -7
  43. package/lib/Card/Card.js +2 -0
  44. package/lib/Card/CardBase.js +13 -5
  45. package/lib/Card/PressableCardBase.js +12 -8
  46. package/lib/Checkbox/Checkbox.js +25 -14
  47. package/lib/Checkbox/CheckboxGroup.js +22 -12
  48. package/lib/Divider/Divider.js +12 -7
  49. package/lib/ExpandCollapse/Accordion.js +10 -4
  50. package/lib/ExpandCollapse/Control.js +12 -6
  51. package/lib/ExpandCollapse/ExpandCollapse.js +10 -5
  52. package/lib/ExpandCollapse/Panel.js +8 -7
  53. package/lib/Feedback/Feedback.js +10 -5
  54. package/lib/Fieldset/Fieldset.js +10 -5
  55. package/lib/Fieldset/FieldsetContainer.js +10 -5
  56. package/lib/Fieldset/FieldsetContainer.native.js +10 -5
  57. package/lib/Fieldset/Legend.js +10 -5
  58. package/lib/Fieldset/Legend.native.js +10 -5
  59. package/lib/FlexGrid/Col/Col.js +8 -5
  60. package/lib/FlexGrid/FlexGrid.js +31 -6
  61. package/lib/FlexGrid/Row/Row.js +12 -5
  62. package/lib/{Tabs → HorizontalScroll}/HorizontalScroll.js +5 -4
  63. package/lib/{Tabs/TabsScrollButton.js → HorizontalScroll/HorizontalScrollButton.js} +14 -8
  64. package/lib/{Tabs → HorizontalScroll}/ScrollViewEnd.js +0 -0
  65. package/lib/{Tabs → HorizontalScroll}/ScrollViewEnd.native.js +0 -0
  66. package/lib/{Tabs → HorizontalScroll}/dictionary.js +0 -0
  67. package/lib/HorizontalScroll/index.js +35 -0
  68. package/lib/{Tabs → HorizontalScroll}/itemPositions.js +0 -0
  69. package/lib/Icon/Icon.js +16 -9
  70. package/lib/Icon/IconText.js +8 -7
  71. package/lib/IconButton/IconButton.js +10 -5
  72. package/lib/InputLabel/InputLabel.js +33 -5
  73. package/lib/InputLabel/LabelContent.js +22 -12
  74. package/lib/InputLabel/LabelContent.native.js +23 -5
  75. package/lib/InputSupports/InputSupports.js +10 -5
  76. package/lib/Link/ChevronLink.js +12 -5
  77. package/lib/Link/InlinePressable.js +10 -4
  78. package/lib/Link/InlinePressable.native.js +5 -4
  79. package/lib/Link/Link.js +12 -5
  80. package/lib/Link/LinkBase.js +12 -5
  81. package/lib/Link/TextButton.js +10 -5
  82. package/lib/List/List.js +6 -6
  83. package/lib/List/ListItem.js +28 -33
  84. package/lib/List/index.js +15 -0
  85. package/lib/Modal/Modal.js +10 -5
  86. package/lib/Notification/Notification.js +21 -5
  87. package/lib/Pagination/PageButton.js +16 -11
  88. package/lib/Pagination/Pagination.js +12 -7
  89. package/lib/Pagination/SideButton.js +12 -7
  90. package/lib/Pagination/usePagination.js +2 -2
  91. package/lib/Progress/Progress.js +10 -5
  92. package/lib/Progress/ProgressBar.js +21 -10
  93. package/lib/Progress/ProgressBarBackground.js +12 -8
  94. package/lib/Radio/Radio.js +14 -13
  95. package/lib/Radio/RadioButton.js +20 -9
  96. package/lib/Radio/RadioGroup.js +24 -13
  97. package/lib/RadioCard/RadioCard.js +14 -10
  98. package/lib/RadioCard/RadioCardGroup.js +13 -12
  99. package/lib/Search/Search.js +29 -18
  100. package/lib/Select/Picker.js +11 -6
  101. package/lib/Select/Picker.native.js +21 -6
  102. package/lib/Select/Select.js +46 -4
  103. package/lib/SideNav/Item.js +10 -5
  104. package/lib/SideNav/ItemsGroup.js +10 -5
  105. package/lib/SideNav/SideNav.js +11 -7
  106. package/lib/Skeleton/Skeleton.js +15 -15
  107. package/lib/Skeleton/skeletonWebAnimation.js +1 -1
  108. package/lib/Spacer/Spacer.js +19 -7
  109. package/lib/StackView/StackView.js +26 -7
  110. package/lib/StackView/StackWrap.js +24 -13
  111. package/lib/StackView/StackWrapBox.js +34 -8
  112. package/lib/StackView/StackWrapGap.js +16 -7
  113. package/lib/StackView/common.js +4 -2
  114. package/lib/StackView/getStackedContent.js +2 -2
  115. package/lib/StepTracker/StepTracker.js +10 -5
  116. package/lib/Tabs/Tabs.js +26 -19
  117. package/lib/Tabs/TabsItem.js +16 -12
  118. package/lib/Tags/Tags.js +27 -11
  119. package/lib/TextInput/TextArea.js +7 -5
  120. package/lib/TextInput/TextInput.js +12 -6
  121. package/lib/TextInput/TextInputBase.js +12 -8
  122. package/lib/ThemeProvider/ThemeProvider.js +14 -10
  123. package/lib/ThemeProvider/useSetTheme.js +6 -1
  124. package/lib/ThemeProvider/utils/styles.js +2 -2
  125. package/lib/ThemeProvider/utils/theme-tokens.js +39 -8
  126. package/lib/ToggleSwitch/ToggleSwitch.js +11 -6
  127. package/lib/Tooltip/Backdrop.js +10 -2
  128. package/lib/Tooltip/Tooltip.js +5 -4
  129. package/lib/Typography/Typography.js +40 -24
  130. package/lib/index.js +36 -1
  131. package/lib/utils/a11y/index.js +13 -0
  132. package/lib/utils/a11y/propTypes.js +61 -0
  133. package/lib/utils/a11y/propTypes.native.js +47 -0
  134. package/lib/utils/a11y/semantics.js +173 -0
  135. package/lib/utils/animation/useVerticalExpandAnimation.js +1 -1
  136. package/lib/utils/children.js +55 -8
  137. package/lib/utils/input.js +27 -17
  138. package/lib/utils/propTypes.js +40 -68
  139. package/lib/utils/useCopy.js +1 -1
  140. package/lib/utils/useHash.js +8 -4
  141. package/lib/utils/useSpacingScale.js +1 -3
  142. package/lib/utils/useUniqueId.js +1 -1
  143. package/package.json +14 -6
  144. package/release-context.json +4 -4
  145. package/src/A11yText/index.jsx +6 -4
  146. package/src/ActivityIndicator/Spinner.jsx +5 -3
  147. package/src/ActivityIndicator/Spinner.native.jsx +5 -3
  148. package/src/Box/Box.jsx +125 -39
  149. package/src/Button/Button.jsx +7 -4
  150. package/src/Button/ButtonBase.jsx +86 -77
  151. package/src/Button/ButtonGroup.jsx +81 -69
  152. package/src/Button/ButtonLink.jsx +18 -13
  153. package/src/Card/Card.jsx +2 -2
  154. package/src/Card/CardBase.jsx +6 -4
  155. package/src/Card/PressableCardBase.jsx +71 -64
  156. package/src/Checkbox/Checkbox.jsx +118 -108
  157. package/src/Checkbox/CheckboxGroup.jsx +72 -62
  158. package/src/Divider/Divider.jsx +7 -4
  159. package/src/ExpandCollapse/Accordion.jsx +3 -2
  160. package/src/ExpandCollapse/Control.jsx +40 -43
  161. package/src/ExpandCollapse/ExpandCollapse.jsx +26 -23
  162. package/src/ExpandCollapse/Panel.jsx +69 -63
  163. package/src/Feedback/Feedback.jsx +36 -33
  164. package/src/Fieldset/Fieldset.jsx +63 -56
  165. package/src/Fieldset/FieldsetContainer.jsx +14 -5
  166. package/src/Fieldset/FieldsetContainer.native.jsx +7 -4
  167. package/src/Fieldset/Legend.jsx +7 -2
  168. package/src/Fieldset/Legend.native.jsx +7 -2
  169. package/src/FlexGrid/Col/Col.jsx +139 -132
  170. package/src/FlexGrid/FlexGrid.jsx +79 -51
  171. package/src/FlexGrid/Row/Row.jsx +55 -48
  172. package/src/HorizontalScroll/HorizontalScroll.jsx +168 -0
  173. package/src/HorizontalScroll/HorizontalScrollButton.jsx +105 -0
  174. package/src/{Tabs → HorizontalScroll}/ScrollViewEnd.jsx +0 -0
  175. package/src/{Tabs → HorizontalScroll}/ScrollViewEnd.native.jsx +0 -0
  176. package/src/{Tabs → HorizontalScroll}/dictionary.js +0 -0
  177. package/src/HorizontalScroll/index.js +17 -0
  178. package/src/{Tabs → HorizontalScroll}/itemPositions.js +0 -0
  179. package/src/Icon/Icon.jsx +37 -35
  180. package/src/Icon/IconText.jsx +22 -17
  181. package/src/IconButton/IconButton.jsx +49 -42
  182. package/src/InputLabel/InputLabel.jsx +53 -38
  183. package/src/InputLabel/LabelContent.jsx +14 -6
  184. package/src/InputLabel/LabelContent.native.jsx +11 -2
  185. package/src/InputSupports/InputSupports.jsx +29 -34
  186. package/src/Link/ChevronLink.jsx +26 -16
  187. package/src/Link/InlinePressable.jsx +5 -3
  188. package/src/Link/InlinePressable.native.jsx +5 -3
  189. package/src/Link/Link.jsx +22 -16
  190. package/src/Link/LinkBase.jsx +67 -58
  191. package/src/Link/TextButton.jsx +30 -23
  192. package/src/List/List.jsx +6 -7
  193. package/src/List/ListItem.jsx +70 -90
  194. package/src/List/index.js +5 -0
  195. package/src/Modal/Modal.jsx +9 -4
  196. package/src/Notification/Notification.jsx +58 -43
  197. package/src/Pagination/PageButton.jsx +37 -34
  198. package/src/Pagination/Pagination.jsx +88 -92
  199. package/src/Pagination/SideButton.jsx +44 -41
  200. package/src/Progress/Progress.jsx +5 -4
  201. package/src/Progress/ProgressBar.jsx +42 -29
  202. package/src/Progress/ProgressBarBackground.jsx +5 -3
  203. package/src/Radio/Radio.jsx +85 -78
  204. package/src/Radio/RadioButton.jsx +54 -43
  205. package/src/Radio/RadioGroup.jsx +74 -63
  206. package/src/RadioCard/RadioCard.jsx +75 -68
  207. package/src/RadioCard/RadioCardGroup.jsx +82 -75
  208. package/src/Search/Search.jsx +127 -106
  209. package/src/Select/Picker.jsx +49 -42
  210. package/src/Select/Picker.native.jsx +56 -49
  211. package/src/Select/Select.jsx +115 -72
  212. package/src/SideNav/Item.jsx +53 -46
  213. package/src/SideNav/ItemsGroup.jsx +50 -43
  214. package/src/SideNav/SideNav.jsx +68 -60
  215. package/src/Skeleton/Skeleton.jsx +9 -13
  216. package/src/Spacer/Spacer.jsx +11 -4
  217. package/src/StackView/StackView.jsx +47 -23
  218. package/src/StackView/StackWrap.jsx +14 -12
  219. package/src/StackView/StackWrapBox.jsx +62 -28
  220. package/src/StackView/StackWrapGap.jsx +46 -24
  221. package/src/StackView/common.jsx +3 -2
  222. package/src/StepTracker/StepTracker.jsx +73 -62
  223. package/src/Tabs/Tabs.jsx +70 -62
  224. package/src/Tabs/TabsItem.jsx +111 -103
  225. package/src/Tags/Tags.jsx +114 -102
  226. package/src/TextInput/TextArea.jsx +5 -4
  227. package/src/TextInput/TextInput.jsx +5 -4
  228. package/src/TextInput/TextInputBase.jsx +84 -77
  229. package/src/ThemeProvider/ThemeProvider.jsx +11 -7
  230. package/src/ThemeProvider/useSetTheme.js +4 -0
  231. package/src/ThemeProvider/utils/theme-tokens.js +28 -0
  232. package/src/ToggleSwitch/ToggleSwitch.jsx +49 -50
  233. package/src/Tooltip/Tooltip.jsx +134 -130
  234. package/src/Typography/Typography.jsx +67 -44
  235. package/src/index.js +3 -1
  236. package/src/utils/a11y/index.js +1 -0
  237. package/src/utils/a11y/propTypes.js +61 -0
  238. package/src/utils/a11y/propTypes.native.js +39 -0
  239. package/src/utils/a11y/semantics.js +162 -0
  240. package/src/utils/children.jsx +60 -7
  241. package/src/utils/input.js +20 -17
  242. package/src/utils/propTypes.js +30 -76
  243. package/src/utils/useCopy.js +1 -1
  244. package/src/utils/useHash.js +8 -3
  245. package/stories/A11yText/A11yText.stories.jsx +3 -3
  246. package/stories/ActivityIndicator/ActivityIndicator.stories.jsx +2 -2
  247. package/stories/Box/Box.stories.jsx +2 -2
  248. package/stories/Button/Button.stories.jsx +3 -3
  249. package/stories/Button/ButtonGroup.stories.jsx +2 -2
  250. package/stories/Button/ButtonLink.stories.jsx +2 -2
  251. package/stories/Card/Card.stories.jsx +2 -2
  252. package/stories/Checkbox/Checkbox.stories.jsx +2 -2
  253. package/stories/Divider/Divider.stories.jsx +2 -2
  254. package/stories/ExpandCollapse/ExpandCollapse.stories.jsx +3 -3
  255. package/stories/Feedback/Feedback.stories.jsx +2 -2
  256. package/stories/FlexGrid/01 FlexGrid.stories.jsx +2 -2
  257. package/stories/FlexGrid/02 Row.stories.jsx +2 -2
  258. package/stories/FlexGrid/03 Col.stories.jsx +2 -2
  259. package/stories/Icon/Icon.stories.jsx +2 -2
  260. package/stories/IconButton/IconButton.stories.jsx +2 -2
  261. package/stories/InputLabel/InputLabel.stories.jsx +2 -2
  262. package/stories/Link/ChevronLink.stories.jsx +2 -2
  263. package/stories/Link/Link.stories.jsx +2 -2
  264. package/stories/Link/TextButton.stories.jsx +2 -2
  265. package/stories/List/List.stories.jsx +2 -2
  266. package/stories/Modal/Modal.stories.jsx +2 -2
  267. package/stories/Notification/Notification.stories.jsx +2 -2
  268. package/stories/Pagination/Pagination.stories.jsx +2 -2
  269. package/stories/Progress/Progress.stories.jsx +2 -2
  270. package/stories/Radio/Radio.stories.jsx +2 -2
  271. package/stories/RadioCard/RadioCard.stories.jsx +2 -2
  272. package/stories/Search/Search.stories.jsx +2 -2
  273. package/stories/Select/Select.stories.jsx +2 -2
  274. package/stories/SideNav/SideNav.stories.jsx +2 -2
  275. package/stories/SideNav/SideNavItem.stories.jsx +2 -2
  276. package/stories/SideNav/SideNavItemsGroup.stories.jsx +2 -2
  277. package/stories/Skeleton/Skeleton.stories.jsx +3 -3
  278. package/stories/Spacer/Spacer.stories.jsx +2 -2
  279. package/stories/StackView/StackView.stories.jsx +2 -2
  280. package/stories/StackView/StackWrap.stories.jsx +2 -2
  281. package/stories/StepTracker/StepTracker.stories.jsx +2 -2
  282. package/stories/Tabs/Tabs.stories.jsx +2 -2
  283. package/stories/Tags/Tags.stories.jsx +2 -2
  284. package/stories/TextInput/TextArea.stories.jsx +2 -2
  285. package/stories/TextInput/TextInput.stories.jsx +2 -2
  286. package/stories/ToggleSwitch/ToggleSwitch.stories.jsx +2 -2
  287. package/stories/Tooltip/Tooltip.stories.jsx +2 -2
  288. package/stories/TooltipButton/TooltipButton.stories.jsx +2 -2
  289. package/stories/Typography/Typography.stories.jsx +2 -2
  290. package/stories/platform-supports.jsx +1 -1
  291. package/stories/supports.jsx +4 -5
  292. package/src/Tabs/HorizontalScroll.jsx +0 -165
  293. package/src/Tabs/TabsScrollButton.jsx +0 -100
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _react = _interopRequireDefault(require("react"));
8
+ var _react = _interopRequireWildcard(require("react"));
9
9
 
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
 
@@ -27,6 +27,10 @@ var _jsxRuntime = require("react/jsx-runtime");
27
27
 
28
28
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
29
 
30
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
31
+
32
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
33
+
30
34
  /**
31
35
  * StackView evenly spaces its children, by default placing `Spacer` components between them.
32
36
  *
@@ -69,18 +73,21 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
69
73
  * It applies no accessibility props of its own, unless `divider` prop is passed (`Divider` has a
70
74
  * semantic role but only on web, not within native apps).
71
75
  */
72
- const StackView = ({
76
+ const StackView = /*#__PURE__*/(0, _react.forwardRef)(({
73
77
  space = 1,
74
78
  divider,
75
79
  direction: directionProp = 'column',
76
80
  children,
77
81
  variant,
78
82
  tokens,
83
+ tag,
84
+ accessibilityRole,
79
85
  ...rest
80
- }) => {
86
+ }, ref) => {
81
87
  const viewport = (0, _ViewportProvider.useViewport)();
82
88
  const direction = (0, _utils.useResponsiveProp)(directionProp, 'column');
83
- const props = { ..._utils.a11yProps.select(rest),
89
+ const props = { ...(0, _utils.getA11yPropsFromHtmlTag)(tag, accessibilityRole),
90
+ ..._utils.a11yProps.select(rest),
84
91
  ..._utils.viewProps.select(rest)
85
92
  };
86
93
  const content = (0, _getStackedContent.default)(children, {
@@ -92,13 +99,17 @@ const StackView = ({
92
99
  viewport
93
100
  });
94
101
  const flexStyles = (0, _common.selectFlexStyles)(themeTokens);
95
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, { ...props,
102
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
103
+ ref: ref,
104
+ ...props,
96
105
  style: [flexStyles, _common.staticStyles[direction]],
97
106
  children: content
98
107
  });
99
- };
100
-
108
+ });
109
+ StackView.displayName = 'StackView';
101
110
  StackView.propTypes = { ..._utils.a11yProps.propTypes,
111
+ ..._utils.viewProps.types,
112
+ tokens: (0, _utils.getTokensPropType)('StackView'),
102
113
  variant: _utils.variantProp.propType,
103
114
 
104
115
  /**
@@ -119,6 +130,14 @@ StackView.propTypes = { ..._utils.a11yProps.propTypes,
119
130
  */
120
131
  space: _utils.spacingProps.types.spacingValue,
121
132
 
133
+ /**
134
+ * Optional semantic HTML tag, to apply to the container on web. Does not change styling.
135
+ *
136
+ * In native apps, if a header tag is provided ("h1", "h2" etc) and accessibilityRole prop
137
+ * is not defined, the accessibilityRole will default to "heading".
138
+ */
139
+ tag: _propTypes.default.oneOf(_utils.layoutTags),
140
+
122
141
  /**
123
142
  * A StackView may take any children, but will have no effect if it is only passed one child or is passed children
124
143
  * wrapped in a component. If necessary, children may be wrapped in one React Fragment.
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _react = _interopRequireDefault(require("react"));
8
+ var _react = _interopRequireWildcard(require("react"));
9
9
 
10
10
  var _Platform = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Platform"));
11
11
 
@@ -17,8 +17,19 @@ var _jsxRuntime = require("react/jsx-runtime");
17
17
 
18
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
19
 
20
- // CSS.supports needs an example of the type of value you intend to use.
20
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
+
22
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
+
24
+ // In Jest/CI/SSR, global CSS isn't always available and doesn't always have .supports method
25
+ const cssSupports = (...args) => {
26
+ var _window$CSS;
27
+
28
+ return typeof window !== 'undefined' && typeof ((_window$CSS = window.CSS) === null || _window$CSS === void 0 ? void 0 : _window$CSS.supports) === 'function' && window.CSS.supports(...args);
29
+ }; // CSS.supports needs an example of the type of value you intend to use.
21
30
  // Will be an integer appended `px` after hooks and JSX styles are resolved.
31
+
32
+
22
33
  const exampleGapValue = '1px';
23
34
  /**
24
35
  * StackWrap is an alternative to StackView where the spaced items are allowed to wrap.
@@ -28,28 +39,28 @@ const exampleGapValue = '1px';
28
39
  * If a different spacing is desired between wrapped lines, pass a spacing value to the `gap` prop.
29
40
  */
30
41
 
31
- const StackWrap = props => {
32
- var _props$gap, _CSS;
33
-
42
+ const StackWrap = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
34
43
  const {
35
44
  space
36
45
  } = props; // Don't apply separate gap if `null` or `undefined`, so can be unset in Storybook etc
37
- // eslint-disable-next-line react/destructuring-assignment
38
46
 
39
- const gap = (_props$gap = props.gap) !== null && _props$gap !== void 0 ? _props$gap : space;
40
- const canUseCSSGap = _Platform.default.OS === 'web' && gap === space && // In Jest/CI, global CSS isn't always available and doesn't always have .supports method
41
- typeof ((_CSS = CSS) === null || _CSS === void 0 ? void 0 : _CSS.supports) === 'function' && CSS.supports('gap', exampleGapValue);
47
+ const gap = props.gap ?? space;
48
+ const canUseCSSGap = _Platform.default.OS === 'web' && gap === space && cssSupports('gap', exampleGapValue);
42
49
  return canUseCSSGap ?
43
50
  /*#__PURE__*/
44
51
  // If possible, use the cleaner implementation that applies CSS `gap` styles to the container.
45
- (0, _jsxRuntime.jsx)(_StackWrapGap.default, { ...props
52
+ (0, _jsxRuntime.jsx)(_StackWrapGap.default, {
53
+ ref: ref,
54
+ ...props
46
55
  }) :
47
56
  /*#__PURE__*/
48
57
  // Else, use the fallback implementation which renders a `Box` component around each child.
49
- (0, _jsxRuntime.jsx)(_StackWrapBox.default, { ...props
58
+ (0, _jsxRuntime.jsx)(_StackWrapBox.default, {
59
+ ref: ref,
60
+ ...props
50
61
  });
51
- };
52
-
62
+ });
63
+ StackWrap.displayName = 'StackWrap';
53
64
  StackWrap.propTypes = _StackWrapBox.default.propTypes;
54
65
  var _default = StackWrap;
55
66
  exports.default = _default;
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _react = _interopRequireDefault(require("react"));
8
+ var _react = _interopRequireWildcard(require("react"));
9
9
 
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
 
@@ -25,6 +25,10 @@ var _jsxRuntime = require("react/jsx-runtime");
25
25
 
26
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
27
 
28
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
29
+
30
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
31
+
28
32
  const offsetSides = {
29
33
  row: 'marginBottom',
30
34
  column: 'marginRight'
@@ -50,22 +54,25 @@ const spaceSides = {
50
54
  * between the container and the stacked children, and requires a negative margin on the container.
51
55
  */
52
56
 
53
- const StackWrapBox = ({
57
+ const StackWrapBox = /*#__PURE__*/(0, _react.forwardRef)(({
54
58
  space = 1,
55
59
  gap = space,
56
60
  direction: directionProp = 'row',
57
61
  children,
58
62
  tokens,
59
63
  variant,
64
+ tag,
65
+ accessibilityRole,
60
66
  ...rest
61
- }) => {
67
+ }, ref) => {
62
68
  const viewport = (0, _ViewportProvider.useViewport)();
63
69
  const direction = (0, _utils.useResponsiveProp)(directionProp, 'row');
64
70
  const themeTokens = (0, _ThemeProvider.useThemeTokens)('StackView', tokens, variant, {
65
71
  viewport
66
72
  });
67
73
  const flexStyles = (0, _common.selectFlexStyles)(themeTokens);
68
- const props = { ..._utils.a11yProps.select(rest),
74
+ const props = { ...(0, _utils.getA11yPropsFromHtmlTag)(tag, accessibilityRole),
75
+ ..._utils.a11yProps.select(rest),
69
76
  ..._utils.viewProps.select(rest)
70
77
  }; // Mimic CSS `gap` using box spacing on the side after a wrapped row then offsetting it on the last row.
71
78
 
@@ -82,13 +89,17 @@ const StackWrapBox = ({
82
89
  space: 0,
83
90
  box: boxProps
84
91
  });
85
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, { ...props,
92
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
93
+ ref: ref,
94
+ ...props,
86
95
  style: [flexStyles, _common.staticStyles.wrap, _common.staticStyles[direction], offsetStyle],
87
96
  children: content
88
97
  });
89
- };
90
-
98
+ });
99
+ StackWrapBox.displayName = 'StackWrapBox';
91
100
  StackWrapBox.propTypes = { ..._utils.a11yProps.propTypes,
101
+ ..._utils.viewProps.types,
102
+ tokens: (0, _utils.getTokensPropType)('StackView'),
92
103
 
93
104
  /**
94
105
  * Sets the `flexDirection` of the container
@@ -96,12 +107,27 @@ StackWrapBox.propTypes = { ..._utils.a11yProps.propTypes,
96
107
  direction: _utils.responsiveProps.getTypeOptionallyByViewport(_propTypes.default.oneOf(['column', 'row', 'row-reverse', 'column-reverse'])),
97
108
 
98
109
  /**
99
- * The size of the spacer according to the theme's spacing scale.
110
+ * The size of the space between items according to the theme's spacing scale.
100
111
  * Either a number corresponding to a position on the theme's spacing scale (1 is smallest, 2 is second smallest, etc),
101
112
  * or, a SpacingObject with viewport keys and options (see `useSpacingScale` for details).
102
113
  */
103
114
  space: _utils.spacingProps.types.spacingValue,
104
115
 
116
+ /**
117
+ * The size of the space between lines of content, according to the theme's spacing scale. By default, matches `space`.
118
+ * Either a number corresponding to a position on the theme's spacing scale (1 is smallest, 2 is second smallest, etc),
119
+ * or, a SpacingObject with viewport keys and options (see `useSpacingScale` for details).
120
+ */
121
+ gap: _utils.spacingProps.types.spacingValue,
122
+
123
+ /**
124
+ * Optional semantic HTML tag, to apply to the container on web. Does not change styling.
125
+ *
126
+ * In native apps, if a header tag is provided ("h1", "h2" etc) and accessibilityRole prop
127
+ * is not defined, the accessibilityRole will default to "heading".
128
+ */
129
+ tag: _propTypes.default.oneOf(_utils.layoutTags),
130
+
105
131
  /**
106
132
  * A StackWrap may take any children, but will have no effect if it is only passed one child or is passed children
107
133
  * wrapped in a component. If necessary, children may be wrapped in one React Fragment.
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _react = _interopRequireDefault(require("react"));
8
+ var _react = _interopRequireWildcard(require("react"));
9
9
 
10
10
  var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
11
11
 
@@ -25,6 +25,10 @@ var _jsxRuntime = require("react/jsx-runtime");
25
25
 
26
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
27
 
28
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
29
+
30
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
31
+
28
32
  /**
29
33
  * The primary implementation of StackWrap.
30
34
  *
@@ -35,21 +39,24 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
35
39
  * - The `space` between items is the same as the `gap` between wrapped rows (this is the
36
40
  * default if `gap` prop is undefined)
37
41
  */
38
- const StackWrapGap = ({
42
+ const StackWrapGap = /*#__PURE__*/(0, _react.forwardRef)(({
39
43
  space = 1,
40
44
  tokens,
41
45
  variant,
42
46
  direction: directionProp = 'row',
43
47
  children,
48
+ tag,
49
+ accessibilityRole,
44
50
  ...rest
45
- }) => {
51
+ }, ref) => {
46
52
  const viewport = (0, _ViewportProvider.useViewport)();
47
53
  const direction = (0, _utils.useResponsiveProp)(directionProp, 'row');
48
54
  const themeTokens = (0, _ThemeProvider.useThemeTokens)('StackView', tokens, variant, {
49
55
  viewport
50
56
  });
51
57
  const flexStyles = (0, _common.selectFlexStyles)(themeTokens);
52
- const props = { ..._utils.a11yProps.select(rest),
58
+ const props = { ...(0, _utils.getA11yPropsFromHtmlTag)(tag, accessibilityRole),
59
+ ..._utils.a11yProps.select(rest),
53
60
  ..._utils.viewProps.select(rest)
54
61
  };
55
62
  const size = (0, _utils.useSpacingScale)(space);
@@ -60,12 +67,14 @@ const StackWrapGap = ({
60
67
  direction,
61
68
  space: 0
62
69
  });
63
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, { ...props,
70
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
71
+ ref: ref,
72
+ ...props,
64
73
  style: [flexStyles, _common.staticStyles.wrap, _common.staticStyles[direction], gapStyle],
65
74
  children: content
66
75
  });
67
- };
68
-
76
+ });
77
+ StackWrapGap.displayName = 'StackWrapGap';
69
78
  StackWrapGap.propTypes = _StackWrapBox.default.propTypes;
70
79
  var _default = StackWrapGap;
71
80
  exports.default = _default;
@@ -12,11 +12,13 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
12
12
  const selectFlexStyles = ({
13
13
  alignItems,
14
14
  justifyContent,
15
- flexGrow
15
+ flexGrow,
16
+ flexShrink
16
17
  }) => ({
17
18
  alignItems,
18
19
  justifyContent,
19
- flexGrow
20
+ flexGrow,
21
+ flexShrink
20
22
  });
21
23
 
22
24
  exports.selectFlexStyles = selectFlexStyles;
@@ -64,7 +64,7 @@ const getStackedContent = (children, {
64
64
  const validChildren = _react.Children.toArray(topLevelChildren).filter(Boolean);
65
65
 
66
66
  const content = validChildren.reduce((newChildren, child, index) => {
67
- const boxID = "Stack-Box-".concat(index);
67
+ const boxID = `Stack-Box-${index}`;
68
68
  const item = box ?
69
69
  /*#__PURE__*/
70
70
  // If wrapped in Box, that Box needs a key.
@@ -74,7 +74,7 @@ const getStackedContent = (children, {
74
74
  testID: boxID
75
75
  }, child) : child;
76
76
  if (!index || !space && !divider) return [...newChildren, item];
77
- const testID = "Stack-".concat(divider ? 'Divider' : 'Spacer', "-").concat(index);
77
+ const testID = `Stack-${divider ? 'Divider' : 'Spacer'}-${index}`;
78
78
  const commonProps = {
79
79
  testID,
80
80
  key: testID,
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _react = _interopRequireDefault(require("react"));
8
+ var _react = _interopRequireWildcard(require("react"));
9
9
 
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
 
@@ -35,6 +35,10 @@ var _jsxRuntime = require("react/jsx-runtime");
35
35
 
36
36
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
37
 
38
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
39
+
40
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
41
+
38
42
  const selectContainerStyles = ({
39
43
  containerPaddingBottom,
40
44
  containerPaddingLeft,
@@ -100,7 +104,7 @@ const selectStepTrackerLabelStyles = ({
100
104
  */
101
105
 
102
106
 
103
- const StepTracker = ({
107
+ const StepTracker = /*#__PURE__*/(0, _react.forwardRef)(({
104
108
  current = 0,
105
109
  copy = 'en',
106
110
  dictionary = _dictionary.default,
@@ -108,7 +112,7 @@ const StepTracker = ({
108
112
  tokens,
109
113
  variant,
110
114
  ...rest
111
- }) => {
115
+ }, ref) => {
112
116
  const viewport = (0, _ViewportProvider.useViewport)();
113
117
  const {
114
118
  showStepTrackerLabel,
@@ -135,6 +139,7 @@ const StepTracker = ({
135
139
  ..._propTypes2.a11yProps.select(rest)
136
140
  };
137
141
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
142
+ ref: ref,
138
143
  style: selectContainerStyles(themeTokens),
139
144
  ...accessibilityProps,
140
145
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_StackView.default, {
@@ -160,8 +165,8 @@ const StepTracker = ({
160
165
  })]
161
166
  })
162
167
  });
163
- };
164
-
168
+ });
169
+ StepTracker.displayName = 'StepTracker';
165
170
  StepTracker.propTypes = {
166
171
  current: _propTypes.default.number,
167
172
  copy: _propTypes.default.oneOf(['en', 'fr']),
package/lib/Tabs/Tabs.js CHANGED
@@ -9,20 +9,18 @@ var _react = _interopRequireWildcard(require("react"));
9
9
 
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
 
12
+ var _airbnbPropTypes = _interopRequireDefault(require("airbnb-prop-types"));
13
+
12
14
  var _ThemeProvider = require("../ThemeProvider");
13
15
 
14
16
  var _StackView = _interopRequireDefault(require("../StackView"));
15
17
 
16
18
  var _utils = require("../utils");
17
19
 
18
- var _HorizontalScroll = _interopRequireWildcard(require("./HorizontalScroll"));
20
+ var _HorizontalScroll = _interopRequireWildcard(require("../HorizontalScroll"));
19
21
 
20
22
  var _TabsItem = _interopRequireDefault(require("./TabsItem"));
21
23
 
22
- var _TabsScrollButton = _interopRequireDefault(require("./TabsScrollButton"));
23
-
24
- var _itemPositions = require("./itemPositions");
25
-
26
24
  var _jsxRuntime = require("react/jsx-runtime");
27
25
 
28
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -31,11 +29,16 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
31
29
 
32
30
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
33
31
 
32
+ const {
33
+ selectHorizontalScrollTokens,
34
+ useItemPositions
35
+ } = _HorizontalScroll.horizontalScrollUtils;
34
36
  /**
35
37
  * Tabs renders a horizontally-scrolling menu of selectable buttons which may link
36
38
  * to a page or control what content is displayed on this page.
37
39
  */
38
- const Tabs = ({
40
+
41
+ const Tabs = /*#__PURE__*/(0, _react.forwardRef)(({
39
42
  tokens,
40
43
  itemTokens,
41
44
  scrollButtonTokens,
@@ -44,7 +47,7 @@ const Tabs = ({
44
47
  initialValue,
45
48
  onChange,
46
49
  items = []
47
- }) => {
50
+ }, ref) => {
48
51
  const {
49
52
  space,
50
53
  ...themeTokens
@@ -57,18 +60,19 @@ const Tabs = ({
57
60
  initialValue,
58
61
  onChange
59
62
  });
60
- const [itemPositions, isPositioningReady] = (0, _itemPositions.useItemPositions)();
61
- (0, _utils.useHash)((0, _react.useCallback)(hash => {
63
+ const [itemPositions, isPositioningReady] = useItemPositions();
64
+ (0, _utils.useHash)((0, _react.useCallback)((hash, event) => {
62
65
  const hashItem = hash && items.find(({
63
66
  href
64
67
  }) => hash === href);
65
68
  const hashId = hashItem && (hashItem.id || hashItem.label);
66
- if (hashId) setTimeout(setValue(hashId), 500);
69
+ if (hashId) setTimeout(setValue(hashId, event), 500);
67
70
  }, [items, setValue]), isPositioningReady);
68
71
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_HorizontalScroll.default, {
69
- ScrollButton: _TabsScrollButton.default,
72
+ ref: ref,
73
+ ScrollButton: _HorizontalScroll.HorizontalScrollButton,
70
74
  itemPositions: itemPositions,
71
- tokens: (0, _HorizontalScroll.selectHorizontalScrollTokens)(themeTokens),
75
+ tokens: selectHorizontalScrollTokens(themeTokens),
72
76
  scrollButtonTokens: scrollButtonTokens,
73
77
  accessibilityRole: "tablist",
74
78
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_StackView.default, {
@@ -77,14 +81,16 @@ const Tabs = ({
77
81
  children: items.map(({
78
82
  href,
79
83
  label,
80
- id
84
+ id,
85
+ ref: itemRef
81
86
  }, index) => {
82
- const itemId = id !== null && id !== void 0 ? id : label;
87
+ const itemId = id ?? label;
83
88
  const isSelected = Boolean(currentValue && currentValue === itemId);
84
89
 
85
- const handlePress = () => setValue(itemId);
90
+ const handlePress = event => setValue(itemId, event);
86
91
 
87
92
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TabsItem.default, {
93
+ ref: itemRef,
88
94
  href: href,
89
95
  variant: variant,
90
96
  tokens: itemTokens,
@@ -97,20 +103,21 @@ const Tabs = ({
97
103
  })
98
104
  })
99
105
  });
100
- };
101
-
106
+ });
107
+ Tabs.displayName = 'Tabs';
102
108
  Tabs.propTypes = {
103
109
  items: _propTypes.default.arrayOf(_propTypes.default.shape({
104
110
  href: _propTypes.default.string,
105
111
  label: _propTypes.default.string,
106
- id: _propTypes.default.string
112
+ id: _propTypes.default.string,
113
+ ref: _airbnbPropTypes.default.ref()
107
114
  })),
108
115
  value: _propTypes.default.string,
109
116
  initialValue: _propTypes.default.string,
110
117
  onChange: _propTypes.default.func,
111
118
  tokens: (0, _utils.getTokensPropType)('Tabs'),
112
119
  itemTokens: (0, _utils.getTokensPropType)('TabsItem'),
113
- scrollButtonTokens: (0, _utils.getTokensPropType)('TabsScrollButton'),
120
+ scrollButtonTokens: (0, _utils.getTokensPropType)('HorizontalScrollButton'),
114
121
  variant: _utils.variantProp.propType
115
122
  };
116
123
  var _default = Tabs;
@@ -19,15 +19,13 @@ var _Text = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Te
19
19
 
20
20
  var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
21
21
 
22
- var _rn = _interopRequireDefault(require("@telus-uds/system-themes/src/tokens/rn"));
23
-
24
22
  var _ThemeProvider = require("../ThemeProvider");
25
23
 
26
24
  var _utils = require("../utils");
27
25
 
28
26
  var _Spacer = _interopRequireDefault(require("../Spacer"));
29
27
 
30
- var _itemPositions = require("./itemPositions");
28
+ var _HorizontalScroll = require("../HorizontalScroll");
31
29
 
32
30
  var _jsxRuntime = require("react/jsx-runtime");
33
31
 
@@ -37,6 +35,11 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
37
35
 
38
36
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
39
37
 
38
+ const {
39
+ itemPositionsPropType,
40
+ getItemPositionLayoutHandler
41
+ } = _HorizontalScroll.horizontalScrollUtils;
42
+
40
43
  const selectHighlightBarStyles = ({
41
44
  highlightColor,
42
45
  highlightBarBorderRadius = 0,
@@ -66,9 +69,9 @@ const selectHighlightTriangleStyles = ({
66
69
  width: 0,
67
70
  borderWidth: highlightTriangleSize,
68
71
  borderTopColor: highlightColor,
69
- borderBottomColor: _rn.default.color.transparent,
70
- borderLeftColor: _rn.default.color.transparent,
71
- borderRightColor: _rn.default.color.transparent
72
+ borderBottomColor: 'transparent',
73
+ borderLeftColor: 'transparent',
74
+ borderRightColor: 'transparent'
72
75
  }
73
76
  });
74
77
 
@@ -95,7 +98,7 @@ const selectContainerStyles = ({
95
98
  */
96
99
 
97
100
 
98
- const TabsItem = ({
101
+ const TabsItem = /*#__PURE__*/(0, _react.forwardRef)(({
99
102
  onPress,
100
103
  href,
101
104
  variant,
@@ -112,7 +115,7 @@ const TabsItem = ({
112
115
  selected
113
116
  },
114
117
  ...rest
115
- }) => {
118
+ }, ref) => {
116
119
  const getTokens = (0, _ThemeProvider.useThemeTokensCallback)('TabsItem', tokens, variant);
117
120
 
118
121
  const resolveTokens = pressableState => (0, _utils.resolvePressableTokens)(getTokens, pressableState, {
@@ -130,7 +133,7 @@ const TabsItem = ({
130
133
  }];
131
134
  };
132
135
 
133
- const handleLayout = (0, _itemPositions.getItemPositionLayoutHandler)(itemPositions.positions, index); // On press, update the selection, call any press handler, and open any href in platform-appropriate way
136
+ const handleLayout = getItemPositionLayoutHandler(itemPositions.positions, index); // On press, update the selection, call any press handler, and open any href in platform-appropriate way
134
137
 
135
138
  const openHref = href && _utils.linkProps.handleHref({
136
139
  href
@@ -160,6 +163,7 @@ const TabsItem = ({
160
163
 
161
164
  }, [selected, index, itemPositions]);
162
165
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Pressable.default, {
166
+ ref: ref,
163
167
  onPress: handlePress,
164
168
  href: href,
165
169
  style: getPressableStyle,
@@ -200,8 +204,8 @@ const TabsItem = ({
200
204
  });
201
205
  }
202
206
  });
203
- };
204
-
207
+ });
208
+ TabsItem.displayName = 'TabsItem';
205
209
  TabsItem.propTypes = { ..._utils.a11yProps.propTypes,
206
210
  tokens: (0, _utils.getTokensPropType)('TabsItem'),
207
211
  variant: _utils.variantProp.propType,
@@ -209,7 +213,7 @@ TabsItem.propTypes = { ..._utils.a11yProps.propTypes,
209
213
  href: _propTypes.default.string,
210
214
  index: _propTypes.default.number,
211
215
  selected: _propTypes.default.bool,
212
- itemPositions: _itemPositions.itemPositionsPropType,
216
+ itemPositions: itemPositionsPropType,
213
217
  children: _propTypes.default.string
214
218
  };
215
219