@telus-uds/components-base 1.3.0 → 1.5.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 (344) hide show
  1. package/.turbo/turbo-build.log +5 -2
  2. package/CHANGELOG.json +82 -0
  3. package/CHANGELOG.md +42 -2
  4. package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +35 -0
  5. package/__tests__/ActivityIndicator/__snapshots__/ActivityIndicator.test.jsx.snap +287 -0
  6. package/babel.config.js +27 -5
  7. package/component-docs.json +121 -438
  8. package/lib/A11yText/index.js +5 -4
  9. package/lib/ActivityIndicator/Spinner.js +46 -37
  10. package/lib/ActivityIndicator/Spinner.native.js +26 -15
  11. package/lib/Box/Box.js +4 -4
  12. package/lib/Button/ButtonBase.js +7 -8
  13. package/lib/Card/Card.js +5 -4
  14. package/lib/Card/PressableCardBase.js +6 -11
  15. package/lib/Checkbox/Checkbox.js +4 -6
  16. package/lib/Divider/Divider.js +12 -11
  17. package/lib/ExpandCollapse/Control.js +7 -7
  18. package/lib/ExpandCollapse/ExpandCollapse.js +6 -2
  19. package/lib/ExpandCollapse/Panel.js +6 -7
  20. package/lib/Feedback/Feedback.js +6 -5
  21. package/lib/Fieldset/Fieldset.js +1 -3
  22. package/lib/HorizontalScroll/HorizontalScroll.js +5 -7
  23. package/lib/HorizontalScroll/HorizontalScrollButton.js +23 -49
  24. package/lib/IconButton/IconButton.js +6 -6
  25. package/lib/InputLabel/InputLabel.js +7 -2
  26. package/lib/InputSupports/InputSupports.js +2 -2
  27. package/lib/Link/LinkBase.js +5 -6
  28. package/lib/List/List.js +4 -6
  29. package/lib/List/ListItem.js +6 -2
  30. package/lib/Modal/Modal.js +6 -2
  31. package/lib/Notification/Notification.js +12 -8
  32. package/lib/Pagination/Pagination.js +8 -3
  33. package/lib/Progress/Progress.js +5 -4
  34. package/lib/Progress/ProgressBar.js +8 -7
  35. package/lib/Radio/Radio.js +4 -6
  36. package/lib/Radio/RadioButton.js +6 -3
  37. package/lib/Radio/RadioGroup.js +7 -2
  38. package/lib/RadioCard/RadioCard.js +4 -4
  39. package/lib/RadioCard/RadioCardGroup.js +9 -6
  40. package/lib/Search/Search.js +7 -2
  41. package/lib/Select/Select.js +10 -9
  42. package/lib/SideNav/Item.js +7 -7
  43. package/lib/SideNav/SideNav.js +7 -3
  44. package/lib/Skeleton/Skeleton.js +6 -2
  45. package/lib/Spacer/Spacer.js +7 -18
  46. package/lib/StackView/StackView.js +7 -7
  47. package/lib/StackView/StackWrapBox.js +6 -7
  48. package/lib/StackView/StackWrapGap.js +6 -5
  49. package/lib/StepTracker/Step.js +7 -3
  50. package/lib/StepTracker/StepTracker.js +7 -7
  51. package/lib/Tabs/Tabs.js +6 -2
  52. package/lib/Tabs/TabsItem.js +6 -5
  53. package/lib/Tags/Tags.js +5 -6
  54. package/lib/TextInput/TextArea.js +13 -14
  55. package/lib/TextInput/TextInput.js +13 -14
  56. package/lib/TextInput/TextInputBase.js +5 -3
  57. package/lib/ToggleSwitch/ToggleSwitch.js +10 -9
  58. package/lib/ToggleSwitch/ToggleSwitchGroup.js +5 -7
  59. package/lib/Tooltip/Tooltip.js +7 -2
  60. package/lib/TooltipButton/TooltipButton.js +7 -2
  61. package/lib/Typography/Typography.js +8 -6
  62. package/lib/index.js +7 -0
  63. package/lib/utils/children.js +5 -1
  64. package/lib/utils/index.js +14 -0
  65. package/lib/utils/props/index.js +9 -0
  66. package/lib/{InputSupports/propTypes.js → utils/props/inputSupportsProps.js} +2 -3
  67. package/lib/utils/ssr.js +51 -0
  68. package/lib-module/A11yInfoProvider/index.js +62 -0
  69. package/lib-module/A11yText/index.js +55 -0
  70. package/lib-module/ActivityIndicator/Spinner.js +76 -0
  71. package/lib-module/ActivityIndicator/Spinner.native.js +143 -0
  72. package/lib-module/ActivityIndicator/index.js +40 -0
  73. package/lib-module/ActivityIndicator/shared.js +12 -0
  74. package/lib-module/BaseProvider/index.js +26 -0
  75. package/lib-module/Box/Box.js +243 -0
  76. package/lib-module/Box/index.js +2 -0
  77. package/lib-module/Button/Button.js +25 -0
  78. package/lib-module/Button/ButtonBase.js +254 -0
  79. package/lib-module/Button/ButtonGroup.js +164 -0
  80. package/lib-module/Button/ButtonLink.js +39 -0
  81. package/lib-module/Button/index.js +4 -0
  82. package/lib-module/Button/propTypes.js +36 -0
  83. package/lib-module/Card/Card.js +83 -0
  84. package/lib-module/Card/CardBase.js +62 -0
  85. package/lib-module/Card/PressableCardBase.js +113 -0
  86. package/lib-module/Card/index.js +4 -0
  87. package/lib-module/Checkbox/Checkbox.js +321 -0
  88. package/lib-module/Checkbox/CheckboxGroup.js +218 -0
  89. package/lib-module/Checkbox/CheckboxInput.js +58 -0
  90. package/lib-module/Checkbox/CheckboxInput.native.js +6 -0
  91. package/lib-module/Checkbox/index.js +3 -0
  92. package/lib-module/Divider/Divider.js +123 -0
  93. package/lib-module/Divider/index.js +2 -0
  94. package/lib-module/ExpandCollapse/Accordion.js +15 -0
  95. package/lib-module/ExpandCollapse/Control.js +130 -0
  96. package/lib-module/ExpandCollapse/ExpandCollapse.js +94 -0
  97. package/lib-module/ExpandCollapse/Panel.js +158 -0
  98. package/lib-module/ExpandCollapse/index.js +7 -0
  99. package/lib-module/Feedback/Feedback.js +144 -0
  100. package/lib-module/Feedback/index.js +2 -0
  101. package/lib-module/Fieldset/Fieldset.js +145 -0
  102. package/lib-module/Fieldset/FieldsetContainer.js +29 -0
  103. package/lib-module/Fieldset/FieldsetContainer.native.js +20 -0
  104. package/lib-module/Fieldset/Legend.js +21 -0
  105. package/lib-module/Fieldset/Legend.native.js +28 -0
  106. package/lib-module/Fieldset/cssReset.js +14 -0
  107. package/lib-module/Fieldset/index.js +2 -0
  108. package/lib-module/FlexGrid/Col/Col.js +265 -0
  109. package/lib-module/FlexGrid/Col/index.js +2 -0
  110. package/lib-module/FlexGrid/FlexGrid.js +147 -0
  111. package/lib-module/FlexGrid/Row/Row.js +177 -0
  112. package/lib-module/FlexGrid/Row/index.js +2 -0
  113. package/lib-module/FlexGrid/helpers/index.js +18 -0
  114. package/lib-module/FlexGrid/index.js +2 -0
  115. package/lib-module/FlexGrid/providers/GutterContext.js +3 -0
  116. package/lib-module/HorizontalScroll/HorizontalScroll.js +170 -0
  117. package/lib-module/HorizontalScroll/HorizontalScrollButton.js +77 -0
  118. package/lib-module/HorizontalScroll/ScrollViewEnd.js +47 -0
  119. package/lib-module/HorizontalScroll/ScrollViewEnd.native.js +24 -0
  120. package/lib-module/HorizontalScroll/dictionary.js +11 -0
  121. package/lib-module/HorizontalScroll/index.js +11 -0
  122. package/lib-module/HorizontalScroll/itemPositions.js +106 -0
  123. package/lib-module/Icon/Icon.js +61 -0
  124. package/lib-module/Icon/IconText.js +81 -0
  125. package/lib-module/Icon/index.js +4 -0
  126. package/lib-module/IconButton/IconButton.js +115 -0
  127. package/lib-module/IconButton/index.js +2 -0
  128. package/lib-module/InputLabel/InputLabel.js +131 -0
  129. package/lib-module/InputLabel/LabelContent.js +24 -0
  130. package/lib-module/InputLabel/LabelContent.native.js +16 -0
  131. package/lib-module/InputLabel/index.js +2 -0
  132. package/lib-module/InputSupports/InputSupports.js +88 -0
  133. package/lib-module/InputSupports/index.js +2 -0
  134. package/lib-module/InputSupports/useInputSupports.js +31 -0
  135. package/lib-module/Link/ChevronLink.js +51 -0
  136. package/lib-module/Link/InlinePressable.js +37 -0
  137. package/lib-module/Link/InlinePressable.native.js +85 -0
  138. package/lib-module/Link/Link.js +27 -0
  139. package/lib-module/Link/LinkBase.js +210 -0
  140. package/lib-module/Link/TextButton.js +43 -0
  141. package/lib-module/Link/index.js +5 -0
  142. package/lib-module/List/List.js +55 -0
  143. package/lib-module/List/ListItem.js +213 -0
  144. package/lib-module/List/index.js +5 -0
  145. package/lib-module/Modal/Modal.js +208 -0
  146. package/lib-module/Modal/dictionary.js +9 -0
  147. package/lib-module/Modal/index.js +2 -0
  148. package/lib-module/Notification/Notification.js +196 -0
  149. package/lib-module/Notification/dictionary.js +8 -0
  150. package/lib-module/Notification/index.js +2 -0
  151. package/lib-module/Pagination/PageButton.js +65 -0
  152. package/lib-module/Pagination/Pagination.js +140 -0
  153. package/lib-module/Pagination/SideButton.js +103 -0
  154. package/lib-module/Pagination/dictionary.js +18 -0
  155. package/lib-module/Pagination/index.js +2 -0
  156. package/lib-module/Pagination/usePagination.js +72 -0
  157. package/lib-module/Progress/Progress.js +85 -0
  158. package/lib-module/Progress/ProgressBar.js +134 -0
  159. package/lib-module/Progress/ProgressBarBackground.js +41 -0
  160. package/lib-module/Progress/index.js +4 -0
  161. package/lib-module/Radio/Radio.js +263 -0
  162. package/lib-module/Radio/RadioButton.js +128 -0
  163. package/lib-module/Radio/RadioGroup.js +225 -0
  164. package/lib-module/Radio/RadioInput.js +60 -0
  165. package/lib-module/Radio/RadioInput.native.js +6 -0
  166. package/lib-module/Radio/index.js +3 -0
  167. package/lib-module/RadioCard/RadioCard.js +218 -0
  168. package/lib-module/RadioCard/RadioCardGroup.js +232 -0
  169. package/lib-module/RadioCard/index.js +3 -0
  170. package/lib-module/Search/Search.js +233 -0
  171. package/lib-module/Search/dictionary.js +12 -0
  172. package/lib-module/Search/index.js +2 -0
  173. package/lib-module/Select/Group.js +20 -0
  174. package/lib-module/Select/Group.native.js +14 -0
  175. package/lib-module/Select/Item.js +17 -0
  176. package/lib-module/Select/Item.native.js +9 -0
  177. package/lib-module/Select/Picker.js +67 -0
  178. package/lib-module/Select/Picker.native.js +110 -0
  179. package/lib-module/Select/Select.js +317 -0
  180. package/lib-module/Select/index.js +6 -0
  181. package/lib-module/SideNav/Item.js +139 -0
  182. package/lib-module/SideNav/ItemContent.js +45 -0
  183. package/lib-module/SideNav/ItemsGroup.js +115 -0
  184. package/lib-module/SideNav/SideNav.js +133 -0
  185. package/lib-module/SideNav/index.js +1 -0
  186. package/lib-module/Skeleton/Skeleton.js +117 -0
  187. package/lib-module/Skeleton/index.js +2 -0
  188. package/lib-module/Skeleton/skeleton.constant.js +3 -0
  189. package/lib-module/Skeleton/skeletonWebAnimation.js +18 -0
  190. package/lib-module/Skeleton/useSkeletonNativeAnimation.js +24 -0
  191. package/lib-module/Spacer/Spacer.js +97 -0
  192. package/lib-module/Spacer/index.js +2 -0
  193. package/lib-module/StackView/StackView.js +124 -0
  194. package/lib-module/StackView/StackWrap.js +48 -0
  195. package/lib-module/StackView/StackWrap.native.js +3 -0
  196. package/lib-module/StackView/StackWrapBox.js +114 -0
  197. package/lib-module/StackView/StackWrapGap.js +58 -0
  198. package/lib-module/StackView/common.js +32 -0
  199. package/lib-module/StackView/getStackedContent.js +123 -0
  200. package/lib-module/StackView/index.js +5 -0
  201. package/lib-module/StepTracker/Step.js +229 -0
  202. package/lib-module/StepTracker/StepTracker.js +175 -0
  203. package/lib-module/StepTracker/dictionary.js +10 -0
  204. package/lib-module/StepTracker/index.js +2 -0
  205. package/lib-module/Tabs/Tabs.js +113 -0
  206. package/lib-module/Tabs/TabsItem.js +215 -0
  207. package/lib-module/Tabs/index.js +2 -0
  208. package/lib-module/Tags/Tags.js +238 -0
  209. package/lib-module/Tags/index.js +2 -0
  210. package/lib-module/TextInput/TextArea.js +88 -0
  211. package/lib-module/TextInput/TextInput.js +60 -0
  212. package/lib-module/TextInput/TextInputBase.js +233 -0
  213. package/lib-module/TextInput/index.js +3 -0
  214. package/lib-module/TextInput/propTypes.js +31 -0
  215. package/lib-module/ThemeProvider/ThemeProvider.js +35 -0
  216. package/lib-module/ThemeProvider/index.js +6 -0
  217. package/lib-module/ThemeProvider/useSetTheme.js +22 -0
  218. package/lib-module/ThemeProvider/useTheme.js +14 -0
  219. package/lib-module/ThemeProvider/useThemeTokens.js +105 -0
  220. package/lib-module/ThemeProvider/utils/index.js +2 -0
  221. package/lib-module/ThemeProvider/utils/styles.js +174 -0
  222. package/lib-module/ThemeProvider/utils/theme-tokens.js +151 -0
  223. package/lib-module/ToggleSwitch/ToggleSwitch.js +224 -0
  224. package/lib-module/ToggleSwitch/ToggleSwitchGroup.js +202 -0
  225. package/lib-module/ToggleSwitch/index.js +3 -0
  226. package/lib-module/Tooltip/Backdrop.js +52 -0
  227. package/lib-module/Tooltip/Backdrop.native.js +43 -0
  228. package/lib-module/Tooltip/Tooltip.js +332 -0
  229. package/lib-module/Tooltip/dictionary.js +8 -0
  230. package/lib-module/Tooltip/getTooltipPosition.js +164 -0
  231. package/lib-module/Tooltip/index.js +2 -0
  232. package/lib-module/TooltipButton/TooltipButton.js +71 -0
  233. package/lib-module/TooltipButton/index.js +2 -0
  234. package/lib-module/Typography/Typography.js +118 -0
  235. package/lib-module/Typography/index.js +2 -0
  236. package/lib-module/ViewportProvider/ViewportProvider.js +28 -0
  237. package/lib-module/ViewportProvider/index.js +3 -0
  238. package/lib-module/ViewportProvider/useViewport.js +3 -0
  239. package/lib-module/ViewportProvider/useViewportListener.js +43 -0
  240. package/lib-module/index.js +48 -0
  241. package/lib-module/utils/a11y/index.js +2 -0
  242. package/lib-module/utils/a11y/semantics.js +154 -0
  243. package/lib-module/utils/a11y/textSize.js +34 -0
  244. package/lib-module/utils/animation/index.js +2 -0
  245. package/lib-module/utils/animation/useVerticalExpandAnimation.js +49 -0
  246. package/lib-module/utils/children.js +118 -0
  247. package/lib-module/utils/index.js +15 -0
  248. package/lib-module/utils/info/index.js +7 -0
  249. package/lib-module/utils/info/platform/index.js +11 -0
  250. package/lib-module/utils/info/platform/platform.android.js +1 -0
  251. package/lib-module/utils/info/platform/platform.ios.js +1 -0
  252. package/lib-module/utils/info/platform/platform.js +1 -0
  253. package/lib-module/utils/info/platform/platform.native.js +4 -0
  254. package/lib-module/utils/info/versions.js +5 -0
  255. package/lib-module/utils/input.js +180 -0
  256. package/lib-module/utils/pressability.js +97 -0
  257. package/lib-module/utils/props/a11yProps.js +140 -0
  258. package/lib-module/utils/props/clickProps.js +25 -0
  259. package/lib-module/utils/props/componentPropType.js +63 -0
  260. package/lib-module/utils/props/copyPropTypes.js +2 -0
  261. package/lib-module/utils/props/getPropSelector.js +6 -0
  262. package/lib-module/utils/props/hrefAttrsProp.js +30 -0
  263. package/lib-module/utils/props/index.js +16 -0
  264. package/lib-module/utils/props/inputSupportsProps.js +54 -0
  265. package/lib-module/utils/props/linkProps.js +47 -0
  266. package/lib-module/utils/props/paddingProp.js +9 -0
  267. package/lib-module/utils/props/pressProps.js +42 -0
  268. package/lib-module/utils/props/rectProp.js +9 -0
  269. package/lib-module/utils/props/responsiveProps.js +30 -0
  270. package/lib-module/utils/props/selectSystemProps.js +24 -0
  271. package/lib-module/utils/props/spacingProps.js +56 -0
  272. package/lib-module/utils/props/tokens.js +120 -0
  273. package/lib-module/utils/props/variantProp.js +18 -0
  274. package/lib-module/utils/props/viewProps.js +22 -0
  275. package/lib-module/utils/ssr.js +35 -0
  276. package/lib-module/utils/useCopy.js +42 -0
  277. package/lib-module/utils/useHash.js +44 -0
  278. package/lib-module/utils/useHash.native.js +7 -0
  279. package/lib-module/utils/useResponsiveProp.js +47 -0
  280. package/lib-module/utils/useSpacingScale.js +123 -0
  281. package/lib-module/utils/useUniqueId.js +12 -0
  282. package/lib-module/utils/withLinkRouter.js +82 -0
  283. package/package.json +9 -5
  284. package/src/A11yText/index.jsx +7 -3
  285. package/src/ActivityIndicator/Spinner.jsx +56 -44
  286. package/src/ActivityIndicator/Spinner.native.jsx +20 -12
  287. package/src/Box/Box.jsx +10 -9
  288. package/src/Button/ButtonBase.jsx +9 -8
  289. package/src/Card/Card.jsx +7 -4
  290. package/src/Card/PressableCardBase.jsx +12 -12
  291. package/src/Checkbox/Checkbox.jsx +12 -5
  292. package/src/Divider/Divider.jsx +17 -10
  293. package/src/ExpandCollapse/Control.jsx +12 -7
  294. package/src/ExpandCollapse/ExpandCollapse.jsx +13 -3
  295. package/src/ExpandCollapse/Panel.jsx +15 -5
  296. package/src/Feedback/Feedback.jsx +13 -3
  297. package/src/Fieldset/Fieldset.jsx +1 -1
  298. package/src/HorizontalScroll/HorizontalScroll.jsx +13 -6
  299. package/src/HorizontalScroll/HorizontalScrollButton.jsx +21 -58
  300. package/src/IconButton/IconButton.jsx +12 -8
  301. package/src/InputLabel/InputLabel.jsx +16 -2
  302. package/src/InputSupports/InputSupports.jsx +1 -1
  303. package/src/Link/LinkBase.jsx +10 -9
  304. package/src/List/List.jsx +12 -5
  305. package/src/List/ListItem.jsx +16 -2
  306. package/src/Modal/Modal.jsx +63 -50
  307. package/src/Notification/Notification.jsx +23 -6
  308. package/src/Pagination/Pagination.jsx +10 -3
  309. package/src/Progress/Progress.jsx +5 -3
  310. package/src/Progress/ProgressBar.jsx +8 -6
  311. package/src/Radio/Radio.jsx +13 -5
  312. package/src/Radio/RadioButton.jsx +13 -3
  313. package/src/Radio/RadioGroup.jsx +14 -2
  314. package/src/RadioCard/RadioCard.jsx +9 -6
  315. package/src/RadioCard/RadioCardGroup.jsx +16 -4
  316. package/src/Search/Search.jsx +15 -3
  317. package/src/Select/Select.jsx +21 -7
  318. package/src/SideNav/Item.jsx +15 -7
  319. package/src/SideNav/SideNav.jsx +13 -2
  320. package/src/Skeleton/Skeleton.jsx +55 -43
  321. package/src/Spacer/Spacer.jsx +8 -16
  322. package/src/StackView/StackView.jsx +13 -12
  323. package/src/StackView/StackWrapBox.jsx +12 -12
  324. package/src/StackView/StackWrapGap.jsx +9 -7
  325. package/src/StepTracker/Step.jsx +7 -4
  326. package/src/StepTracker/StepTracker.jsx +8 -8
  327. package/src/Tabs/Tabs.jsx +16 -3
  328. package/src/Tabs/TabsItem.jsx +13 -9
  329. package/src/Tags/Tags.jsx +20 -5
  330. package/src/TextInput/TextArea.jsx +20 -8
  331. package/src/TextInput/TextInput.jsx +20 -8
  332. package/src/TextInput/TextInputBase.jsx +13 -3
  333. package/src/ToggleSwitch/ToggleSwitch.jsx +16 -5
  334. package/src/ToggleSwitch/ToggleSwitchGroup.jsx +14 -6
  335. package/src/Tooltip/Tooltip.jsx +13 -3
  336. package/src/TooltipButton/TooltipButton.jsx +6 -4
  337. package/src/Typography/Typography.jsx +10 -6
  338. package/src/index.js +1 -1
  339. package/src/utils/children.jsx +2 -1
  340. package/src/utils/index.js +1 -0
  341. package/src/utils/props/index.js +1 -0
  342. package/src/{InputSupports/propTypes.js → utils/props/inputSupportsProps.js} +2 -4
  343. package/src/utils/ssr.js +35 -0
  344. package/release-context.json +0 -7
@@ -0,0 +1,175 @@
1
+ import React, { forwardRef } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import StyleSheet from "react-native-web/dist/exports/StyleSheet";
4
+ import Text from "react-native-web/dist/exports/Text";
5
+ import View from "react-native-web/dist/exports/View";
6
+ import StackView from '../StackView';
7
+ import { applyTextStyles, useThemeTokens } from '../ThemeProvider';
8
+ import { a11yProps, getTokensPropType, selectSystemProps, variantProp, viewProps } from '../utils';
9
+ import { useViewport } from '../ViewportProvider';
10
+ import useCopy from '../utils/useCopy';
11
+ import Step from './Step';
12
+ import defaultDictionary from './dictionary';
13
+ import { jsx as _jsx } from "react/jsx-runtime";
14
+ import { jsxs as _jsxs } from "react/jsx-runtime";
15
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps]);
16
+
17
+ const selectContainerStyles = ({
18
+ containerPaddingBottom,
19
+ containerPaddingLeft,
20
+ containerPaddingRight,
21
+ containerPaddingTop
22
+ }) => ({
23
+ paddingBottom: containerPaddingBottom,
24
+ paddingLeft: containerPaddingLeft,
25
+ paddingRight: containerPaddingRight,
26
+ paddingTop: containerPaddingTop
27
+ });
28
+
29
+ const selectStepTrackerLabelContainerStyles = ({
30
+ labelMarginTop
31
+ }) => ({
32
+ marginTop: labelMarginTop
33
+ });
34
+
35
+ const selectStepTrackerLabelStyles = ({
36
+ labelColor,
37
+ labelFontSize,
38
+ labelFontWeight,
39
+ labelFontName,
40
+ labelLineHeight
41
+ }) => applyTextStyles({
42
+ color: labelColor,
43
+ fontSize: labelFontSize,
44
+ lineHeight: labelLineHeight,
45
+ fontWeight: labelFontWeight,
46
+ fontName: labelFontName
47
+ });
48
+ /**
49
+ * StepTracker component shows the current position in a sequence of steps.
50
+ *
51
+ * ## Component API
52
+ *
53
+ * - `current` prop allows to control the current step, 0-based number;
54
+ * - use `copy` and `dictionary` props to internationalize the labels;
55
+ * - `steps` is and array of strings defining step titles;
56
+ * - tokens and variant props define the appearance of the `StepTracker`:
57
+ *
58
+ * ## Usability and A11y guidelines
59
+ *
60
+ * Keep in mind that in its current implementation this is not an interactive
61
+ * component and can’t be used to navigate between steps. The application
62
+ * must provide its own navigation mechanism and state control. That is the
63
+ * main reason the component assumes the `progressbar` role in terms of
64
+ * accessibility. This also makes it extremely important to make sure you
65
+ * set a11y on controls used to modify the state of the step tracker.
66
+ *
67
+ * You can pass standard a11y props to the `StepTracker` component, including
68
+ * the ones that are specific to the `progressbar` role. By default the
69
+ * following props are used:
70
+ *
71
+ * - `accessibilityRole` (`role`): `progressbar`,
72
+ * - `accessibilityLabel` (`aria-label`): `Step I of N: <Current Step Label>`,
73
+ * - `accessibilityLevel` (`aria-level`): 1,
74
+ * - `accessibilityValue.min` (`aria-valuemin`): `0`,
75
+ * - `accessibilityValue.max` (`aria-valuemax`): `steps.length - 1`,
76
+ * - `accessibilityValue.now` (`aria-valuenow`): `current`,
77
+ * - `accessibilityValue.text` (`aria-valuetext`): `<Current Step Label>`,
78
+ *
79
+ */
80
+
81
+
82
+ const StepTracker = /*#__PURE__*/forwardRef(({
83
+ current = 0,
84
+ copy = 'en',
85
+ dictionary = defaultDictionary,
86
+ steps = [],
87
+ tokens,
88
+ variant,
89
+ ...rest
90
+ }, ref) => {
91
+ const viewport = useViewport();
92
+ const {
93
+ showStepTrackerLabel,
94
+ ...themeTokens
95
+ } = useThemeTokens('StepTracker', tokens, variant, {
96
+ viewport
97
+ });
98
+ const getCopy = useCopy({
99
+ dictionary,
100
+ copy
101
+ });
102
+ const stepTrackerLabel = getCopy('stepTrackerLabel').replace('%{stepNumber}', current < steps.length ? current + 1 : steps.length).replace('%{stepCount}', steps.length).replace('%{stepLabel}', current < steps.length ? steps[current] : steps[steps.length - 1]);
103
+ if (!steps.length) return null;
104
+ const selectedProps = selectProps({
105
+ accessibilityLabel: stepTrackerLabel,
106
+ accessibilityLevel: 1,
107
+ accessibilityRole: 'progressbar',
108
+ accessibilityValue: {
109
+ min: 0,
110
+ max: steps.length - 1,
111
+ now: current,
112
+ text: steps[current]
113
+ },
114
+ ...rest
115
+ });
116
+ return /*#__PURE__*/_jsx(View, {
117
+ ref: ref,
118
+ style: selectContainerStyles(themeTokens),
119
+ ...selectedProps,
120
+ children: /*#__PURE__*/_jsxs(StackView, {
121
+ space: 0,
122
+ children: [/*#__PURE__*/_jsx(View, {
123
+ style: staticStyles.stepsContainer,
124
+ children: steps.map((label, index) => {
125
+ return /*#__PURE__*/_jsx(Step, {
126
+ status: current,
127
+ label: label,
128
+ name: getCopy('stepLabel').replace('%{stepNumber}', index + 1),
129
+ stepIndex: index,
130
+ stepCount: steps.length,
131
+ tokens: themeTokens
132
+ }, label);
133
+ })
134
+ }), showStepTrackerLabel && /*#__PURE__*/_jsx(View, {
135
+ style: [staticStyles.stepTrackerLabelContainer, selectStepTrackerLabelContainerStyles(themeTokens)],
136
+ children: /*#__PURE__*/_jsx(Text, {
137
+ style: selectStepTrackerLabelStyles(themeTokens),
138
+ children: stepTrackerLabel
139
+ })
140
+ })]
141
+ })
142
+ });
143
+ });
144
+ StepTracker.displayName = 'StepTracker';
145
+ StepTracker.propTypes = { ...selectedSystemPropTypes,
146
+ current: PropTypes.number,
147
+ copy: PropTypes.oneOf(['en', 'fr']),
148
+ dictionary: PropTypes.shape({
149
+ en: PropTypes.shape({
150
+ stepLabel: PropTypes.string,
151
+ stepTrackerLabel: PropTypes.string
152
+ }),
153
+ fr: PropTypes.shape({
154
+ stepLabel: PropTypes.string,
155
+ stepTrackerLabel: PropTypes.string
156
+ })
157
+ }),
158
+ steps: PropTypes.arrayOf(PropTypes.string),
159
+ tokens: getTokensPropType('StepTracker'),
160
+ variant: variantProp.propType
161
+ };
162
+ export default StepTracker;
163
+ const staticStyles = StyleSheet.create({
164
+ stepsContainer: {
165
+ alignItems: 'flex-start',
166
+ flexDirection: 'row',
167
+ justifyContent: 'space-evenly',
168
+ flexGrow: 1
169
+ },
170
+ stepTrackerLabelContainer: {
171
+ textAlign: 'center',
172
+ flexDirection: 'row',
173
+ justifyContent: 'center'
174
+ }
175
+ });
@@ -0,0 +1,10 @@
1
+ export default {
2
+ en: {
3
+ stepLabel: 'Step %{stepNumber}',
4
+ stepTrackerLabel: 'Step %{stepNumber} of %{stepCount}: %{stepLabel}'
5
+ },
6
+ fr: {
7
+ stepLabel: 'Étape %{stepNumber}',
8
+ stepTrackerLabel: 'Étape %{stepNumber} sur %{stepCount}: %{stepLabel}'
9
+ }
10
+ };
@@ -0,0 +1,2 @@
1
+ import StepTracker from './StepTracker';
2
+ export default StepTracker;
@@ -0,0 +1,113 @@
1
+ import React, { forwardRef, useCallback } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import ABBPropTypes from 'airbnb-prop-types';
4
+ import { useThemeTokens } from '../ThemeProvider';
5
+ import StackView from '../StackView';
6
+ import { a11yProps, getTokensPropType, selectSystemProps, useHash, useInputValue, variantProp, viewProps, withLinkRouter } from '../utils';
7
+ import HorizontalScroll, { horizontalScrollUtils, HorizontalScrollButton } from '../HorizontalScroll';
8
+ import TabsItem from './TabsItem';
9
+ import { jsx as _jsx } from "react/jsx-runtime";
10
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps]);
11
+ const {
12
+ selectHorizontalScrollTokens,
13
+ useItemPositions
14
+ } = horizontalScrollUtils;
15
+ /**
16
+ * Tabs renders a horizontally-scrolling menu of selectable buttons which may link
17
+ * to a page or control what content is displayed on this page.
18
+ */
19
+
20
+ const Tabs = /*#__PURE__*/forwardRef(({
21
+ tokens,
22
+ itemTokens,
23
+ scrollButtonTokens,
24
+ variant,
25
+ value,
26
+ initialValue,
27
+ onChange,
28
+ items = [],
29
+ LinkRouter,
30
+ linkRouterProps,
31
+ ...rest
32
+ }, ref) => {
33
+ const {
34
+ space,
35
+ ...themeTokens
36
+ } = useThemeTokens('Tabs', tokens, variant);
37
+ const {
38
+ currentValue,
39
+ setValue
40
+ } = useInputValue({
41
+ value,
42
+ initialValue,
43
+ onChange
44
+ });
45
+ const [itemPositions, isPositioningReady] = useItemPositions();
46
+ useHash(useCallback((hash, event) => {
47
+ const hashItem = hash && items.find(({
48
+ href
49
+ }) => hash === href);
50
+ const hashId = hashItem && (hashItem.id || hashItem.label);
51
+ if (hashId) setTimeout(setValue(hashId, event), 500);
52
+ }, [items, setValue]), isPositioningReady);
53
+ return /*#__PURE__*/_jsx(HorizontalScroll, {
54
+ ref: ref,
55
+ ScrollButton: HorizontalScrollButton,
56
+ itemPositions: itemPositions,
57
+ tokens: selectHorizontalScrollTokens(themeTokens),
58
+ scrollButtonTokens: scrollButtonTokens,
59
+ accessibilityRole: "tablist",
60
+ ...selectProps(rest),
61
+ children: /*#__PURE__*/_jsx(StackView, {
62
+ space: space,
63
+ direction: "row",
64
+ children: items.map(({
65
+ href,
66
+ label,
67
+ id,
68
+ ref: itemRef,
69
+ LinkRouter: ItemLinkRouter = LinkRouter,
70
+ linkRouterProps: itemLinkRouterProps
71
+ }, index) => {
72
+ const itemId = id ?? label;
73
+ const isSelected = Boolean(currentValue && currentValue === itemId);
74
+
75
+ const handlePress = event => setValue(itemId, event);
76
+
77
+ return /*#__PURE__*/_jsx(TabsItem, {
78
+ ref: itemRef,
79
+ href: href,
80
+ variant: variant,
81
+ tokens: itemTokens,
82
+ onPress: handlePress,
83
+ selected: isSelected,
84
+ itemPositions: itemPositions,
85
+ index: index,
86
+ LinkRouter: ItemLinkRouter,
87
+ linkRouterProps: { ...linkRouterProps,
88
+ ...itemLinkRouterProps
89
+ },
90
+ children: label
91
+ }, itemId);
92
+ })
93
+ })
94
+ });
95
+ });
96
+ Tabs.displayName = 'Tabs';
97
+ Tabs.propTypes = { ...selectedSystemPropTypes,
98
+ ...withLinkRouter.PropTypes,
99
+ items: PropTypes.arrayOf(PropTypes.shape({ ...withLinkRouter.PropTypes,
100
+ href: PropTypes.string,
101
+ label: PropTypes.string,
102
+ id: PropTypes.string,
103
+ ref: ABBPropTypes.ref()
104
+ })),
105
+ value: PropTypes.string,
106
+ initialValue: PropTypes.string,
107
+ onChange: PropTypes.func,
108
+ tokens: getTokensPropType('Tabs'),
109
+ itemTokens: getTokensPropType('TabsItem'),
110
+ scrollButtonTokens: getTokensPropType('HorizontalScrollButton'),
111
+ variant: variantProp.propType
112
+ };
113
+ export default Tabs;
@@ -0,0 +1,215 @@
1
+ import React, { forwardRef, useEffect } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import Platform from "react-native-web/dist/exports/Platform";
4
+ import Pressable from "react-native-web/dist/exports/Pressable";
5
+ import StyleSheet from "react-native-web/dist/exports/StyleSheet";
6
+ import Text from "react-native-web/dist/exports/Text";
7
+ import View from "react-native-web/dist/exports/View";
8
+ import { applyTextStyles, useThemeTokensCallback } from '../ThemeProvider';
9
+ import { a11yProps, clickProps, getTokensPropType, linkProps, resolvePressableTokens, selectSystemProps, selectTokens, variantProp, viewProps, withLinkRouter } from '../utils';
10
+ import Spacer from '../Spacer';
11
+ import { horizontalScrollUtils } from '../HorizontalScroll';
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ import { jsxs as _jsxs } from "react/jsx-runtime";
14
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps]);
15
+ const {
16
+ itemPositionsPropType,
17
+ getItemPositionLayoutHandler
18
+ } = horizontalScrollUtils;
19
+
20
+ const selectHighlightBarStyles = ({
21
+ highlightColor,
22
+ highlightBarBorderRadius = 0,
23
+ highlightBarBorderWidth = 0,
24
+ highlightBarHeight = 0
25
+ }) => ({
26
+ backgroundColor: highlightColor,
27
+ borderColor: highlightColor,
28
+ height: highlightBarHeight + highlightBarBorderWidth * 2,
29
+ borderRadius: highlightBarBorderRadius,
30
+ borderWidth: highlightBarBorderWidth,
31
+ bottom: -1 * (highlightBarHeight + highlightBarBorderWidth),
32
+ left: -1 * highlightBarBorderWidth,
33
+ right: -1 * highlightBarBorderWidth,
34
+ zIndex: 1 + highlightBarBorderWidth
35
+ });
36
+
37
+ const selectHighlightTriangleStyles = ({
38
+ highlightColor,
39
+ highlightTriangleSize
40
+ }) => ({
41
+ container: {
42
+ bottom: 0 - highlightTriangleSize * 2
43
+ },
44
+ triangle: {
45
+ height: 0,
46
+ width: 0,
47
+ borderWidth: highlightTriangleSize,
48
+ borderTopColor: highlightColor,
49
+ borderBottomColor: 'transparent',
50
+ borderLeftColor: 'transparent',
51
+ borderRightColor: 'transparent'
52
+ }
53
+ });
54
+
55
+ const selectContainerStyles = ({
56
+ backgroundColor,
57
+ borderColor,
58
+ borderWidth = 0,
59
+ borderRadius,
60
+ paddingHorizontal = 0,
61
+ paddingVertical = 0
62
+ }) => ({
63
+ backgroundColor,
64
+ borderColor,
65
+ borderWidth,
66
+ borderRadius,
67
+ paddingHorizontal: paddingHorizontal - borderWidth,
68
+ paddingVertical: paddingVertical - borderWidth
69
+ });
70
+ /**
71
+ * Item within a Tabs component representing one tab of content. May be rendered as a link
72
+ * or as a "menuitem" button depending on whether 'href' is passed.
73
+ *
74
+ * This is rendered automatically by `Tabs` and isn't intended be used directly.
75
+ */
76
+
77
+
78
+ const TabsItem = /*#__PURE__*/forwardRef(({
79
+ href,
80
+ variant,
81
+ tokens,
82
+ selected,
83
+ itemPositions,
84
+ index,
85
+ children,
86
+ accessibilityRole = href ? 'link' : 'tab',
87
+ accessibilityState = Platform.OS === 'web' && accessibilityRole === 'link' ? // Web links can't be aria-selected but can be aria-current
88
+ {
89
+ current: selected ? 'page' : false
90
+ } : {
91
+ selected
92
+ },
93
+ ...rawRest
94
+ }, ref) => {
95
+ // Convert onClick etc to onPress etc if used in an integration
96
+ const {
97
+ onPress,
98
+ ...rest
99
+ } = clickProps.toPressProps(rawRest);
100
+ const getTokens = useThemeTokensCallback('TabsItem', tokens, variant);
101
+
102
+ const resolveTokens = pressableState => resolvePressableTokens(getTokens, pressableState, {
103
+ selected
104
+ });
105
+
106
+ const getPressableStyle = pressableState => {
107
+ const {
108
+ maxWidth
109
+ } = resolveTokens(pressableState);
110
+ return [{
111
+ maxWidth
112
+ }, Platform.OS === 'web' && {
113
+ outline: 'none'
114
+ }];
115
+ };
116
+
117
+ const handleLayout = getItemPositionLayoutHandler(itemPositions.positions, index); // On press, update the selection, call any press handler, and open any href in platform-appropriate way
118
+
119
+ const openHref = href && linkProps.handleHref({
120
+ href
121
+ });
122
+ const handlePress = onPress || openHref ? (...args) => {
123
+ if (onPress) onPress(...args);
124
+ if (openHref) openHref(...args);
125
+ } : undefined;
126
+ const selectedProps = selectProps({
127
+ accessibilityRole,
128
+ accessibilityState,
129
+ ...rest
130
+ });
131
+ useEffect(() => {
132
+ // If this is selected while off-screen, scroll it into view
133
+ if (selected) {
134
+ const position = itemPositions.positions[index];
135
+ const scrollEnd = itemPositions.scrollOffset + itemPositions.containerWidth;
136
+
137
+ if ( // is off the right edge, or
138
+ scrollEnd && (position === null || position === void 0 ? void 0 : position.end) > scrollEnd || // is off the left edge
139
+ typeof (position === null || position === void 0 ? void 0 : position.start) === 'number' && position.start < itemPositions.scrollOffset) {
140
+ itemPositions.scrollTo(position.start);
141
+ }
142
+ } // itemPositions is a ref object so this should only re-run when `selected` (or `index`) change
143
+
144
+ }, [selected, index, itemPositions]);
145
+ return /*#__PURE__*/_jsx(Pressable, {
146
+ ref: ref,
147
+ onPress: handlePress,
148
+ href: href,
149
+ style: getPressableStyle,
150
+ onLayout: handleLayout,
151
+ ...selectedProps,
152
+ children: pressableState => {
153
+ const {
154
+ space,
155
+ textAlign,
156
+ ...themeTokens
157
+ } = resolveTokens(pressableState);
158
+ const hasHighlightBar = Boolean(themeTokens.highlightBarHeight);
159
+ const highlightBarStyle = hasHighlightBar && selectHighlightBarStyles(themeTokens);
160
+ const hasHighlightTriangle = Boolean(themeTokens.highlightTriangleSize);
161
+ const highlightTriangleStyle = hasHighlightTriangle && selectHighlightTriangleStyles(themeTokens);
162
+ const containerStyles = selectContainerStyles(themeTokens);
163
+ const textStyles = applyTextStyles({ ...selectTokens('Typography', themeTokens),
164
+ textAlign
165
+ });
166
+ return /*#__PURE__*/_jsxs(View, {
167
+ style: staticStyles.container,
168
+ children: [/*#__PURE__*/_jsx(View, {
169
+ style: containerStyles,
170
+ children: /*#__PURE__*/_jsx(Text, {
171
+ style: textStyles,
172
+ children: children
173
+ })
174
+ }), /*#__PURE__*/_jsx(Spacer, {
175
+ space: space
176
+ }), hasHighlightBar && /*#__PURE__*/_jsx(View, {
177
+ style: [staticStyles.absolute, highlightBarStyle]
178
+ }), hasHighlightTriangle && /*#__PURE__*/_jsx(View, {
179
+ style: [staticStyles.absolute, highlightTriangleStyle.container],
180
+ children: /*#__PURE__*/_jsx(View, {
181
+ style: highlightTriangleStyle.triangle
182
+ })
183
+ })]
184
+ });
185
+ }
186
+ });
187
+ });
188
+ TabsItem.displayName = 'TabsItem';
189
+ TabsItem.propTypes = { ...selectedSystemPropTypes,
190
+ tokens: getTokensPropType('TabsItem'),
191
+ variant: variantProp.propType,
192
+ onPress: PropTypes.func,
193
+ href: PropTypes.string,
194
+ index: PropTypes.number,
195
+ selected: PropTypes.bool,
196
+ itemPositions: itemPositionsPropType,
197
+ children: PropTypes.string
198
+ };
199
+ const staticStyles = StyleSheet.create({
200
+ center: {
201
+ alignItems: 'center'
202
+ },
203
+ absolute: {
204
+ position: 'absolute',
205
+ alignItems: 'center',
206
+ left: 0,
207
+ right: 0
208
+ },
209
+ container: {
210
+ flexGrow: 1,
211
+ alignItems: 'center',
212
+ justifyContent: 'center'
213
+ }
214
+ });
215
+ export default withLinkRouter(TabsItem);
@@ -0,0 +1,2 @@
1
+ import Tabs from './Tabs';
2
+ export default Tabs;