@telus-uds/components-base 0.0.2-prerelease.1 → 0.0.2-prerelease.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 (475) hide show
  1. package/.ultra.cache.json +1 -0
  2. package/CHANGELOG.md +120 -0
  3. package/README.md +4 -2
  4. package/__fixtures__/Accessible.js +33 -0
  5. package/__fixtures__/Accessible.native.js +32 -0
  6. package/__fixtures__/test-utils.js +25 -0
  7. package/__fixtures__/testTheme.js +1146 -145
  8. package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +1 -1
  9. package/__tests__/Box/Box.test.jsx +81 -58
  10. package/__tests__/Button/ButtonBase.test.jsx +3 -32
  11. package/__tests__/Button/ButtonGroup.test.jsx +6 -7
  12. package/__tests__/Card/Card.test.jsx +63 -0
  13. package/__tests__/Checkbox/Checkbox.test.jsx +94 -0
  14. package/__tests__/Checkbox/CheckboxGroup.test.jsx +246 -0
  15. package/__tests__/Divider/Divider.test.jsx +26 -5
  16. package/__tests__/ExpandCollapse/ExpandCollapse.test.jsx +2 -2
  17. package/__tests__/Feedback/Feedback.test.jsx +42 -0
  18. package/__tests__/FlexGrid/Col.test.jsx +5 -0
  19. package/__tests__/HorizontalScroll/HorizontalScroll.test.jsx +164 -0
  20. package/__tests__/Icon/Icon.test.jsx +3 -3
  21. package/__tests__/IconButton/IconButton.test.jsx +52 -0
  22. package/__tests__/InputSupports/InputSupports.test.jsx +50 -0
  23. package/__tests__/Link/LinkBase.test.jsx +0 -14
  24. package/__tests__/List/List.test.jsx +60 -0
  25. package/__tests__/Modal/Modal.test.jsx +47 -0
  26. package/__tests__/Notification/Notification.test.jsx +20 -0
  27. package/__tests__/Pagination/Pagination.test.jsx +160 -0
  28. package/__tests__/Progress/Progress.test.jsx +79 -0
  29. package/__tests__/Radio/Radio.test.jsx +87 -0
  30. package/__tests__/Radio/RadioGroup.test.jsx +220 -0
  31. package/__tests__/RadioCard/RadioCard.test.jsx +87 -0
  32. package/__tests__/RadioCard/RadioCardGroup.test.jsx +246 -0
  33. package/__tests__/Search/Search.test.jsx +73 -0
  34. package/__tests__/Select/Select.test.jsx +94 -0
  35. package/__tests__/Skeleton/Skeleton.test.jsx +61 -0
  36. package/__tests__/Spacer/Spacer.test.jsx +63 -0
  37. package/__tests__/StackView/StackView.test.jsx +216 -0
  38. package/__tests__/StackView/StackWrap.test.jsx +47 -0
  39. package/__tests__/StackView/getStackedContent.test.jsx +295 -0
  40. package/__tests__/StepTracker/StepTracker.test.jsx +94 -0
  41. package/__tests__/Tabs/Tabs.test.jsx +40 -0
  42. package/__tests__/Tags/Tags.test.jsx +327 -0
  43. package/__tests__/TextInput/TextArea.test.jsx +35 -0
  44. package/__tests__/TextInput/TextInputBase.test.jsx +125 -0
  45. package/__tests__/ThemeProvider/ThemeProvider.test.jsx +77 -0
  46. package/__tests__/ThemeProvider/useThemeTokens.test.jsx +14 -8
  47. package/__tests__/ThemeProvider/utils/theme-tokens.test.js +41 -0
  48. package/__tests__/ToggleSwitch/ToggleSwitch.test.jsx +3 -2
  49. package/__tests__/Tooltip/Tooltip.test.jsx +65 -0
  50. package/__tests__/Tooltip/getTooltipPosition.test.js +79 -0
  51. package/__tests__/utils/children.test.jsx +128 -0
  52. package/__tests__/utils/input.test.js +59 -1
  53. package/__tests__/utils/useCopy.test.js +42 -0
  54. package/__tests__/utils/useResponsiveProp.test.jsx +202 -0
  55. package/__tests__/utils/useSpacingScale.test.jsx +273 -0
  56. package/__tests__/utils/useUniqueId.test.js +31 -0
  57. package/babel.config.js +18 -1
  58. package/jest.config.js +19 -9
  59. package/lib/A11yInfoProvider/index.js +54 -26
  60. package/lib/A11yText/index.js +36 -15
  61. package/lib/ActivityIndicator/Spinner.js +78 -0
  62. package/lib/ActivityIndicator/Spinner.native.js +121 -87
  63. package/lib/ActivityIndicator/index.js +28 -12
  64. package/lib/ActivityIndicator/shared.js +27 -12
  65. package/lib/BaseProvider/index.js +34 -11
  66. package/lib/Box/Box.js +214 -87
  67. package/lib/Box/index.js +13 -2
  68. package/lib/Button/Button.js +37 -11
  69. package/lib/Button/ButtonBase.js +119 -110
  70. package/lib/Button/ButtonGroup.js +98 -101
  71. package/lib/Button/ButtonLink.js +40 -14
  72. package/lib/Button/index.js +31 -4
  73. package/lib/Button/propTypes.js +32 -9
  74. package/lib/Card/Card.js +98 -0
  75. package/lib/Card/CardBase.js +78 -0
  76. package/lib/Card/PressableCardBase.js +137 -0
  77. package/lib/Card/index.js +40 -0
  78. package/lib/Checkbox/Checkbox.js +344 -0
  79. package/lib/Checkbox/CheckboxGroup.js +231 -0
  80. package/lib/Checkbox/CheckboxInput.js +74 -0
  81. package/lib/Checkbox/CheckboxInput.native.js +14 -0
  82. package/lib/Checkbox/index.js +21 -0
  83. package/lib/Divider/Divider.js +80 -18
  84. package/lib/Divider/index.js +13 -2
  85. package/lib/ExpandCollapse/Accordion.js +19 -8
  86. package/lib/ExpandCollapse/Control.js +50 -29
  87. package/lib/ExpandCollapse/ExpandCollapse.js +41 -24
  88. package/lib/ExpandCollapse/Panel.js +77 -41
  89. package/lib/ExpandCollapse/index.js +25 -7
  90. package/lib/Feedback/Feedback.js +161 -0
  91. package/lib/Feedback/index.js +13 -0
  92. package/lib/Fieldset/Fieldset.js +160 -0
  93. package/lib/Fieldset/FieldsetContainer.js +41 -0
  94. package/lib/Fieldset/FieldsetContainer.native.js +33 -0
  95. package/lib/Fieldset/Legend.js +33 -0
  96. package/lib/Fieldset/Legend.native.js +43 -0
  97. package/lib/Fieldset/cssReset.js +21 -0
  98. package/lib/Fieldset/index.js +13 -0
  99. package/lib/FlexGrid/Col/Col.js +66 -39
  100. package/lib/FlexGrid/Col/index.js +13 -2
  101. package/lib/FlexGrid/FlexGrid.js +70 -47
  102. package/lib/FlexGrid/Row/Row.js +47 -28
  103. package/lib/FlexGrid/Row/index.js +13 -2
  104. package/lib/FlexGrid/helpers/index.js +9 -1
  105. package/lib/FlexGrid/index.js +13 -2
  106. package/lib/FlexGrid/providers/GutterContext.js +15 -3
  107. package/lib/HorizontalScroll/HorizontalScroll.js +199 -0
  108. package/lib/HorizontalScroll/HorizontalScrollButton.js +121 -0
  109. package/lib/HorizontalScroll/ScrollViewEnd.js +66 -0
  110. package/lib/HorizontalScroll/ScrollViewEnd.native.js +41 -0
  111. package/lib/HorizontalScroll/dictionary.js +18 -0
  112. package/lib/HorizontalScroll/index.js +35 -0
  113. package/lib/HorizontalScroll/itemPositions.js +128 -0
  114. package/lib/Icon/Icon.js +52 -47
  115. package/lib/Icon/IconText.js +100 -0
  116. package/lib/Icon/index.js +31 -3
  117. package/lib/IconButton/IconButton.js +135 -0
  118. package/lib/IconButton/index.js +13 -0
  119. package/lib/InputLabel/InputLabel.js +145 -0
  120. package/lib/InputLabel/LabelContent.js +39 -0
  121. package/lib/InputLabel/LabelContent.native.js +16 -0
  122. package/lib/InputLabel/index.js +13 -0
  123. package/lib/InputSupports/InputSupports.js +104 -0
  124. package/lib/InputSupports/index.js +13 -0
  125. package/lib/InputSupports/propTypes.js +66 -0
  126. package/lib/InputSupports/useInputSupports.js +41 -0
  127. package/lib/Link/ChevronLink.js +56 -16
  128. package/lib/Link/InlinePressable.js +50 -0
  129. package/lib/Link/InlinePressable.native.js +101 -0
  130. package/lib/Link/Link.js +29 -14
  131. package/lib/Link/LinkBase.js +120 -147
  132. package/lib/Link/TextButton.js +46 -18
  133. package/lib/Link/index.js +39 -4
  134. package/lib/List/List.js +80 -0
  135. package/lib/List/ListItem.js +239 -0
  136. package/lib/List/index.js +13 -0
  137. package/lib/Modal/Modal.js +226 -0
  138. package/lib/Modal/dictionary.js +16 -0
  139. package/lib/Modal/index.js +13 -0
  140. package/lib/Notification/Notification.js +215 -0
  141. package/lib/Notification/dictionary.js +15 -0
  142. package/lib/Notification/index.js +13 -0
  143. package/lib/Pagination/PageButton.js +89 -0
  144. package/lib/Pagination/Pagination.js +148 -0
  145. package/lib/Pagination/SideButton.js +124 -0
  146. package/lib/Pagination/dictionary.js +25 -0
  147. package/lib/Pagination/index.js +13 -0
  148. package/lib/Pagination/usePagination.js +80 -0
  149. package/lib/Progress/Progress.js +99 -0
  150. package/lib/Progress/ProgressBar.js +146 -0
  151. package/lib/Progress/ProgressBarBackground.js +57 -0
  152. package/lib/Progress/index.js +16 -0
  153. package/lib/Radio/Radio.js +292 -0
  154. package/lib/Radio/RadioButton.js +141 -0
  155. package/lib/Radio/RadioGroup.js +234 -0
  156. package/lib/Radio/RadioInput.js +76 -0
  157. package/lib/Radio/RadioInput.native.js +14 -0
  158. package/lib/Radio/index.js +21 -0
  159. package/lib/RadioCard/RadioCard.js +243 -0
  160. package/lib/RadioCard/RadioCardGroup.js +251 -0
  161. package/lib/RadioCard/index.js +21 -0
  162. package/lib/Search/Search.js +250 -0
  163. package/lib/Search/dictionary.js +19 -0
  164. package/lib/Search/index.js +13 -0
  165. package/lib/Select/Group.js +33 -0
  166. package/lib/Select/Group.native.js +25 -0
  167. package/lib/Select/Item.js +29 -0
  168. package/lib/Select/Item.native.js +19 -0
  169. package/lib/Select/Picker.js +79 -0
  170. package/lib/Select/Picker.native.js +127 -0
  171. package/lib/Select/Select.js +341 -0
  172. package/lib/Select/index.js +19 -0
  173. package/lib/SideNav/Item.js +54 -35
  174. package/lib/SideNav/ItemContent.js +41 -15
  175. package/lib/SideNav/ItemsGroup.js +53 -34
  176. package/lib/SideNav/SideNav.js +94 -70
  177. package/lib/SideNav/index.js +15 -1
  178. package/lib/Skeleton/Skeleton.js +137 -0
  179. package/lib/Skeleton/index.js +13 -0
  180. package/lib/Skeleton/skeleton.constant.js +12 -0
  181. package/lib/Skeleton/skeletonWebAnimation.js +27 -0
  182. package/lib/Skeleton/useSkeletonNativeAnimation.js +37 -0
  183. package/lib/Spacer/Spacer.js +117 -0
  184. package/lib/Spacer/index.js +13 -0
  185. package/lib/StackView/StackView.js +130 -0
  186. package/lib/StackView/StackWrap.js +55 -0
  187. package/lib/StackView/StackWrap.native.js +14 -0
  188. package/lib/StackView/StackWrapBox.js +120 -0
  189. package/lib/StackView/StackWrapGap.js +71 -0
  190. package/lib/StackView/common.js +47 -0
  191. package/lib/StackView/getStackedContent.js +141 -0
  192. package/lib/StackView/index.js +29 -0
  193. package/lib/StepTracker/Step.js +245 -0
  194. package/lib/StepTracker/StepTracker.js +197 -0
  195. package/lib/StepTracker/dictionary.js +17 -0
  196. package/lib/StepTracker/index.js +13 -0
  197. package/lib/Tabs/Tabs.js +118 -0
  198. package/lib/Tabs/TabsItem.js +237 -0
  199. package/lib/Tabs/index.js +13 -0
  200. package/lib/Tags/Tags.js +250 -0
  201. package/lib/Tags/index.js +13 -0
  202. package/lib/TextInput/TextArea.js +109 -0
  203. package/lib/TextInput/TextInput.js +75 -0
  204. package/lib/TextInput/TextInputBase.js +255 -0
  205. package/lib/TextInput/index.js +23 -0
  206. package/lib/TextInput/propTypes.js +42 -0
  207. package/lib/ThemeProvider/ThemeProvider.js +46 -18
  208. package/lib/ThemeProvider/index.js +61 -6
  209. package/lib/ThemeProvider/useSetTheme.js +19 -5
  210. package/lib/ThemeProvider/useTheme.js +13 -4
  211. package/lib/ThemeProvider/useThemeTokens.js +111 -16
  212. package/lib/ThemeProvider/utils/index.js +31 -2
  213. package/lib/ThemeProvider/utils/styles.js +52 -16
  214. package/lib/ThemeProvider/utils/theme-tokens.js +154 -19
  215. package/lib/ToggleSwitch/ToggleSwitch.js +87 -93
  216. package/lib/ToggleSwitch/index.js +13 -2
  217. package/lib/Tooltip/Backdrop.js +56 -0
  218. package/lib/Tooltip/Backdrop.native.js +59 -0
  219. package/lib/Tooltip/Tooltip.js +357 -0
  220. package/lib/Tooltip/dictionary.js +15 -0
  221. package/lib/Tooltip/getTooltipPosition.js +172 -0
  222. package/lib/Tooltip/index.js +13 -0
  223. package/lib/TooltipButton/TooltipButton.js +83 -0
  224. package/lib/TooltipButton/index.js +13 -0
  225. package/lib/Typography/Typography.js +58 -49
  226. package/lib/Typography/index.js +13 -2
  227. package/lib/ViewportProvider/ViewportProvider.js +46 -0
  228. package/lib/ViewportProvider/index.js +22 -38
  229. package/lib/ViewportProvider/useViewport.js +15 -0
  230. package/lib/ViewportProvider/useViewportListener.js +57 -0
  231. package/lib/index.js +539 -17
  232. package/lib/utils/a11y/index.js +18 -0
  233. package/lib/utils/a11y/textSize.js +49 -0
  234. package/lib/utils/animation/index.js +15 -2
  235. package/lib/utils/animation/useVerticalExpandAnimation.js +28 -11
  236. package/lib/utils/children.js +134 -0
  237. package/lib/utils/index.js +163 -3
  238. package/lib/utils/info/index.js +19 -0
  239. package/lib/utils/info/platform/index.js +23 -0
  240. package/lib/utils/info/platform/platform.android.js +8 -0
  241. package/lib/utils/info/platform/platform.ios.js +8 -0
  242. package/lib/utils/info/platform/platform.js +8 -0
  243. package/lib/utils/info/platform/platform.native.js +11 -0
  244. package/lib/utils/info/versions.js +16 -0
  245. package/lib/utils/input.js +62 -38
  246. package/lib/utils/pressability.js +120 -0
  247. package/lib/utils/propTypes.js +360 -109
  248. package/lib/utils/useCopy.js +51 -0
  249. package/lib/utils/useHash.js +52 -0
  250. package/lib/utils/useHash.native.js +15 -0
  251. package/lib/utils/useResponsiveProp.js +59 -0
  252. package/lib/utils/useSpacingScale.js +135 -0
  253. package/lib/utils/useUniqueId.js +21 -0
  254. package/package.json +15 -14
  255. package/release-context.json +4 -4
  256. package/src/ActivityIndicator/{Spinner.web.jsx → Spinner.jsx} +0 -0
  257. package/src/Box/Box.jsx +180 -78
  258. package/src/Button/Button.jsx +9 -5
  259. package/src/Button/ButtonBase.jsx +74 -87
  260. package/src/Button/ButtonGroup.jsx +26 -43
  261. package/src/Button/ButtonLink.jsx +14 -4
  262. package/src/Button/propTypes.js +12 -2
  263. package/src/Card/Card.jsx +75 -0
  264. package/src/Card/CardBase.jsx +57 -0
  265. package/src/Card/PressableCardBase.jsx +112 -0
  266. package/src/Card/index.js +6 -0
  267. package/src/Checkbox/Checkbox.jsx +274 -0
  268. package/src/Checkbox/CheckboxGroup.jsx +196 -0
  269. package/src/Checkbox/CheckboxInput.jsx +55 -0
  270. package/src/Checkbox/CheckboxInput.native.jsx +6 -0
  271. package/src/Checkbox/index.js +5 -0
  272. package/src/Divider/Divider.jsx +38 -3
  273. package/src/ExpandCollapse/Control.jsx +3 -4
  274. package/src/ExpandCollapse/Panel.jsx +3 -3
  275. package/src/Feedback/Feedback.jsx +108 -0
  276. package/src/Feedback/index.js +3 -0
  277. package/src/Fieldset/Fieldset.jsx +129 -0
  278. package/src/Fieldset/FieldsetContainer.jsx +22 -0
  279. package/src/Fieldset/FieldsetContainer.native.jsx +16 -0
  280. package/src/Fieldset/Legend.jsx +16 -0
  281. package/src/Fieldset/Legend.native.jsx +22 -0
  282. package/src/Fieldset/cssReset.js +14 -0
  283. package/src/Fieldset/index.js +3 -0
  284. package/src/FlexGrid/Col/Col.jsx +4 -2
  285. package/src/HorizontalScroll/HorizontalScroll.jsx +165 -0
  286. package/src/HorizontalScroll/HorizontalScrollButton.jsx +108 -0
  287. package/src/HorizontalScroll/ScrollViewEnd.jsx +53 -0
  288. package/src/HorizontalScroll/ScrollViewEnd.native.jsx +24 -0
  289. package/src/HorizontalScroll/dictionary.js +11 -0
  290. package/src/HorizontalScroll/index.js +17 -0
  291. package/src/HorizontalScroll/itemPositions.js +101 -0
  292. package/src/Icon/Icon.jsx +23 -27
  293. package/src/Icon/IconText.jsx +63 -0
  294. package/src/Icon/index.js +3 -2
  295. package/src/IconButton/IconButton.jsx +107 -0
  296. package/src/IconButton/index.js +3 -0
  297. package/src/InputLabel/InputLabel.jsx +124 -0
  298. package/src/InputLabel/LabelContent.jsx +23 -0
  299. package/src/InputLabel/LabelContent.native.jsx +6 -0
  300. package/src/InputLabel/index.js +3 -0
  301. package/src/InputSupports/InputSupports.jsx +75 -0
  302. package/src/InputSupports/index.js +3 -0
  303. package/src/InputSupports/propTypes.js +44 -0
  304. package/src/InputSupports/useInputSupports.js +30 -0
  305. package/src/Link/ChevronLink.jsx +28 -7
  306. package/src/Link/InlinePressable.jsx +37 -0
  307. package/src/Link/InlinePressable.native.jsx +73 -0
  308. package/src/Link/Link.jsx +17 -13
  309. package/src/Link/LinkBase.jsx +71 -146
  310. package/src/Link/TextButton.jsx +25 -11
  311. package/src/Link/index.js +2 -1
  312. package/src/List/List.jsx +47 -0
  313. package/src/List/ListItem.jsx +184 -0
  314. package/src/List/index.js +3 -0
  315. package/src/Modal/Modal.jsx +185 -0
  316. package/src/Modal/dictionary.js +9 -0
  317. package/src/Modal/index.js +3 -0
  318. package/src/Notification/Notification.jsx +161 -0
  319. package/src/Notification/dictionary.js +8 -0
  320. package/src/Notification/index.js +3 -0
  321. package/src/Pagination/PageButton.jsx +70 -0
  322. package/src/Pagination/Pagination.jsx +135 -0
  323. package/src/Pagination/SideButton.jsx +82 -0
  324. package/src/Pagination/dictionary.js +18 -0
  325. package/src/Pagination/index.js +3 -0
  326. package/src/Pagination/usePagination.js +69 -0
  327. package/src/Progress/Progress.jsx +77 -0
  328. package/src/Progress/ProgressBar.jsx +110 -0
  329. package/src/Progress/ProgressBarBackground.jsx +34 -0
  330. package/src/Progress/index.js +6 -0
  331. package/src/Radio/Radio.jsx +233 -0
  332. package/src/Radio/RadioButton.jsx +131 -0
  333. package/src/Radio/RadioGroup.jsx +199 -0
  334. package/src/Radio/RadioInput.jsx +57 -0
  335. package/src/Radio/RadioInput.native.jsx +6 -0
  336. package/src/Radio/index.js +5 -0
  337. package/src/RadioCard/RadioCard.jsx +191 -0
  338. package/src/RadioCard/RadioCardGroup.jsx +211 -0
  339. package/src/RadioCard/index.js +5 -0
  340. package/src/Search/Search.jsx +215 -0
  341. package/src/Search/dictionary.js +12 -0
  342. package/src/Search/index.js +3 -0
  343. package/src/Select/Group.jsx +15 -0
  344. package/src/Select/Group.native.jsx +14 -0
  345. package/src/Select/Item.jsx +11 -0
  346. package/src/Select/Item.native.jsx +10 -0
  347. package/src/Select/Picker.jsx +67 -0
  348. package/src/Select/Picker.native.jsx +108 -0
  349. package/src/Select/Select.jsx +286 -0
  350. package/src/Select/index.js +8 -0
  351. package/src/SideNav/Item.jsx +5 -5
  352. package/src/SideNav/ItemsGroup.jsx +11 -13
  353. package/src/SideNav/SideNav.jsx +2 -1
  354. package/src/Skeleton/Skeleton.jsx +98 -0
  355. package/src/Skeleton/index.js +3 -0
  356. package/src/Skeleton/skeleton.constant.js +3 -0
  357. package/src/Skeleton/skeletonWebAnimation.js +13 -0
  358. package/src/Skeleton/useSkeletonNativeAnimation.js +27 -0
  359. package/src/Spacer/Spacer.jsx +91 -0
  360. package/src/Spacer/index.js +3 -0
  361. package/src/StackView/StackView.jsx +113 -0
  362. package/src/StackView/StackWrap.jsx +41 -0
  363. package/src/StackView/StackWrap.native.jsx +4 -0
  364. package/src/StackView/StackWrapBox.jsx +102 -0
  365. package/src/StackView/StackWrapGap.jsx +49 -0
  366. package/src/StackView/common.jsx +29 -0
  367. package/src/StackView/getStackedContent.jsx +112 -0
  368. package/src/StackView/index.js +6 -0
  369. package/src/StepTracker/Step.jsx +202 -0
  370. package/src/StepTracker/StepTracker.jsx +163 -0
  371. package/src/StepTracker/dictionary.js +10 -0
  372. package/src/StepTracker/index.js +3 -0
  373. package/src/Tabs/Tabs.jsx +92 -0
  374. package/src/Tabs/TabsItem.jsx +205 -0
  375. package/src/Tabs/index.js +3 -0
  376. package/src/Tags/Tags.jsx +207 -0
  377. package/src/Tags/index.js +3 -0
  378. package/src/TextInput/TextArea.jsx +78 -0
  379. package/src/TextInput/TextInput.jsx +52 -0
  380. package/src/TextInput/TextInputBase.jsx +211 -0
  381. package/src/TextInput/index.js +4 -0
  382. package/src/TextInput/propTypes.js +29 -0
  383. package/src/ThemeProvider/ThemeProvider.jsx +11 -7
  384. package/src/ThemeProvider/useSetTheme.js +4 -0
  385. package/src/ThemeProvider/useThemeTokens.js +85 -7
  386. package/src/ThemeProvider/utils/styles.js +18 -5
  387. package/src/ThemeProvider/utils/theme-tokens.js +106 -8
  388. package/src/ToggleSwitch/ToggleSwitch.jsx +25 -46
  389. package/src/Tooltip/Backdrop.jsx +60 -0
  390. package/src/Tooltip/Backdrop.native.jsx +33 -0
  391. package/src/Tooltip/Tooltip.jsx +294 -0
  392. package/src/Tooltip/dictionary.js +8 -0
  393. package/src/Tooltip/getTooltipPosition.js +161 -0
  394. package/src/Tooltip/index.js +3 -0
  395. package/src/TooltipButton/TooltipButton.jsx +49 -0
  396. package/src/TooltipButton/index.js +3 -0
  397. package/src/Typography/Typography.jsx +10 -24
  398. package/src/ViewportProvider/ViewportProvider.jsx +21 -0
  399. package/src/ViewportProvider/index.jsx +2 -41
  400. package/src/ViewportProvider/useViewport.js +5 -0
  401. package/src/ViewportProvider/useViewportListener.js +43 -0
  402. package/src/index.js +38 -1
  403. package/src/utils/a11y/index.js +1 -0
  404. package/src/utils/a11y/textSize.js +30 -0
  405. package/src/utils/children.jsx +119 -0
  406. package/src/utils/index.js +11 -0
  407. package/src/utils/info/index.js +8 -0
  408. package/src/utils/info/platform/index.js +11 -0
  409. package/src/utils/info/platform/platform.android.js +1 -0
  410. package/src/utils/info/platform/platform.ios.js +1 -0
  411. package/src/utils/info/platform/platform.js +1 -0
  412. package/src/utils/info/platform/platform.native.js +4 -0
  413. package/src/utils/info/versions.js +6 -0
  414. package/src/utils/input.js +38 -26
  415. package/src/utils/pressability.js +96 -0
  416. package/src/utils/propTypes.js +298 -66
  417. package/src/utils/useCopy.js +39 -0
  418. package/src/utils/useHash.js +39 -0
  419. package/src/utils/useHash.native.js +6 -0
  420. package/src/utils/useResponsiveProp.js +50 -0
  421. package/src/utils/useSpacingScale.js +108 -0
  422. package/src/utils/useUniqueId.js +14 -0
  423. package/stories/A11yText/A11yText.stories.jsx +15 -13
  424. package/stories/ActivityIndicator/ActivityIndicator.stories.jsx +11 -2
  425. package/stories/Box/Box.stories.jsx +46 -17
  426. package/stories/Button/Button.stories.jsx +21 -20
  427. package/stories/Button/ButtonGroup.stories.jsx +2 -1
  428. package/stories/Button/ButtonLink.stories.jsx +6 -4
  429. package/stories/Card/Card.stories.jsx +62 -0
  430. package/stories/Checkbox/Checkbox.stories.jsx +94 -0
  431. package/stories/Divider/Divider.stories.jsx +26 -2
  432. package/stories/ExpandCollapse/ExpandCollapse.stories.jsx +74 -79
  433. package/stories/Feedback/Feedback.stories.jsx +96 -0
  434. package/stories/FlexGrid/01 FlexGrid.stories.jsx +20 -7
  435. package/stories/Icon/Icon.stories.jsx +35 -7
  436. package/stories/IconButton/IconButton.stories.jsx +50 -0
  437. package/stories/InputLabel/InputLabel.stories.jsx +42 -0
  438. package/stories/Link/ChevronLink.stories.jsx +20 -4
  439. package/stories/Link/Link.stories.jsx +51 -20
  440. package/stories/Link/TextButton.stories.jsx +24 -3
  441. package/stories/List/List.stories.jsx +117 -0
  442. package/stories/Modal/Modal.stories.jsx +29 -0
  443. package/stories/Notification/Notification.stories.jsx +82 -0
  444. package/stories/Pagination/Pagination.stories.jsx +64 -0
  445. package/stories/Progress/Progress.stories.jsx +93 -0
  446. package/stories/Radio/Radio.stories.jsx +100 -0
  447. package/stories/RadioCard/RadioCard.stories.jsx +98 -0
  448. package/stories/Search/Search.stories.jsx +16 -0
  449. package/stories/Select/Select.stories.jsx +55 -0
  450. package/stories/SideNav/SideNav.stories.jsx +17 -2
  451. package/stories/Skeleton/Skeleton.stories.jsx +36 -0
  452. package/stories/Spacer/Spacer.stories.jsx +38 -0
  453. package/stories/StackView/StackView.stories.jsx +75 -0
  454. package/stories/StackView/StackWrap.stories.jsx +64 -0
  455. package/stories/StepTracker/StepTracker.stories.jsx +71 -0
  456. package/stories/Tabs/Tabs.stories.jsx +97 -0
  457. package/stories/Tags/Tags.stories.jsx +69 -0
  458. package/stories/TextInput/TextArea.stories.jsx +100 -0
  459. package/stories/TextInput/TextInput.stories.jsx +103 -0
  460. package/stories/ToggleSwitch/ToggleSwitch.stories.jsx +16 -3
  461. package/stories/Tooltip/Tooltip.stories.jsx +81 -0
  462. package/stories/TooltipButton/TooltipButton.stories.jsx +11 -0
  463. package/stories/Typography/Typography.stories.jsx +12 -3
  464. package/stories/{platform-supports.web.jsx → platform-supports.jsx} +1 -1
  465. package/stories/supports.jsx +148 -14
  466. package/__fixtures__/accessible.icon.svg +0 -6
  467. package/docs/Contributing.stories.mdx +0 -9
  468. package/docs/Fonts.stories.mdx +0 -104
  469. package/docs/Icons.stories.mdx +0 -144
  470. package/docs/Introduction.stories.mdx +0 -9
  471. package/lib/ActivityIndicator/Spinner.web.js +0 -57
  472. package/lib/config/svgr-icons-web.js +0 -9
  473. package/lib/config/svgr-icons.js +0 -52
  474. package/src/config/svgr-icons-web.js +0 -11
  475. package/src/config/svgr-icons.js +0 -46
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _Box = _interopRequireDefault(require("../Box"));
11
+
12
+ var _Divider = _interopRequireDefault(require("../Divider"));
13
+
14
+ var _Spacer = _interopRequireDefault(require("../Spacer"));
15
+
16
+ var _jsxRuntime = require("react/jsx-runtime");
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
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
+ /**
25
+ * @typedef {import('react').ReactChildren} ReactChildren
26
+ * @typedef {import('react').ReactElement} ReactElement
27
+ * @typedef {import('../utils/propTypes.js').SpacingValue} SpacingValue
28
+ */
29
+
30
+ /**
31
+ * Takes valid React Children and inserts a specified amount of space between each valid (not nullish) top
32
+ * level element, according to the provided `options`.
33
+ *
34
+ * Returns an array of the original elements plus inserted spacing elements.
35
+ * This array of elements is keyed and may be used as a component's `children` without mapping.
36
+ *
37
+ * @param {ReactChildren} children
38
+ * @param {object} [options] -
39
+ * - `space`: amount of space to insert using the theme spacing scale (see `useSpacingScale`)
40
+ * - `direction`: if 'row' or 'row-reverse', applies space horizontally, if 'column' or 'column-reverse', applies space vertically
41
+ * - `box`: if truthy, wraps each valid child in a Box component; if an object, passes it to Box as props
42
+ * - `divider`: if truthy, inserts Divider components; if an object, passes it to Divider as props
43
+ * - `preserveFragments`: if true, adds no space between top-level elements that were passed inside a nested fragment
44
+ * @param {SpacingValue} [options.space]
45
+ * @param {boolean | object} [options.divider]
46
+ * @param {"row" | "column" | "row-reverse" | "column-reverse"} [options.direction]
47
+ * @param {boolean} [options.preserveFragments]
48
+ * @returns {ReactElement[]}
49
+ */
50
+ const getStackedContent = (children, {
51
+ divider,
52
+ space,
53
+ direction = 'column',
54
+ box,
55
+ preserveFragments = false
56
+ }) => {
57
+ const boxProps = box && typeof box === 'object' ? box : {
58
+ space
59
+ };
60
+ const dividerProps = divider && typeof divider === 'object' ? divider : {}; // Avoid surprises if children contains comments, nulls, or is a variable wrapped as a fragment
61
+
62
+ const topLevelChildren = preserveFragments ? children : unpackFragment(children);
63
+
64
+ const validChildren = _react.Children.toArray(topLevelChildren).filter(Boolean);
65
+
66
+ const content = validChildren.reduce((newChildren, child, index) => {
67
+ const boxID = "Stack-Box-".concat(index);
68
+ const item = box ?
69
+ /*#__PURE__*/
70
+ // If wrapped in Box, that Box needs a key.
71
+ // If possible, use an existing content key; use an index-based key only if necessary.
72
+ (0, _react.createElement)(_Box.default, { ...boxProps,
73
+ key: child.key || boxID,
74
+ testID: boxID
75
+ }, child) : child;
76
+ if (!index || !space && !divider) return [...newChildren, item];
77
+ const testID = "Stack-".concat(divider ? 'Divider' : 'Spacer', "-").concat(index);
78
+ const commonProps = {
79
+ testID,
80
+ key: testID,
81
+ space
82
+ };
83
+ const separator = divider ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Divider.default, {
84
+ vertical: direction.startsWith('row'),
85
+ ...dividerProps,
86
+ ...commonProps
87
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spacer.default, {
88
+ direction: direction.startsWith('row') ? 'row' : 'column',
89
+ ...commonProps
90
+ });
91
+ return [...newChildren, separator, item];
92
+ }, []);
93
+ return content;
94
+ };
95
+ /**
96
+ * Unpacks top-level fragments, so that common compositional patterns such as the following examples
97
+ * can be iterated as flat siblings (as if they were `<Child1 /><Child2 /><Child3 />`):
98
+ *
99
+ * - Setting `children` as a property wrapped in a fragment:
100
+ *
101
+ * ```jsx
102
+ * args.children = <><Child1 /><Child2 /><Child3 /></>
103
+ * ```
104
+ *
105
+ * - Defining `children` as a variable wrapped in a fragment:
106
+ *
107
+ * ```jsx
108
+ * const content = <><Child1 /><Child2 /><Child3 /></>
109
+ * if (someCondition) return <SomeWrapper>{content}</SomeWrapper>
110
+ * ```
111
+ *
112
+ * - Using fragments at the top level of a JSX block for conditional rendering:
113
+ *
114
+ * ```jsx
115
+ * <Child1 />
116
+ * {someCondition && (
117
+ * <>
118
+ * <Child2 />
119
+ * <Child3 />
120
+ * </>
121
+ * )}
122
+ * ```
123
+ *
124
+ * @param {ReactChildren} child
125
+ * @returns {ReactChildren}
126
+ */
127
+
128
+
129
+ const unpackFragment = child => {
130
+ var _child$props;
131
+
132
+ // If this level is a set of top-level siblings rather than one child, check each in turn
133
+ if (_react.Children.count(child) > 1) return _react.Children.map(child, unpackFragment); // When a fragment is found, unpack its children to the top level and check them
134
+
135
+ if ((child === null || child === void 0 ? void 0 : child.type) === _react.Fragment) return unpackFragment((_child$props = child.props) === null || _child$props === void 0 ? void 0 : _child$props.children); // Stop unpacking as soon as any non-fragment child is found
136
+
137
+ return child;
138
+ };
139
+
140
+ var _default = getStackedContent;
141
+ exports.default = _default;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "StackWrap", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _StackWrap.default;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "getStackedContent", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _getStackedContent.default;
16
+ }
17
+ });
18
+ exports.default = void 0;
19
+
20
+ var _StackView = _interopRequireDefault(require("./StackView"));
21
+
22
+ var _StackWrap = _interopRequireDefault(require("./StackWrap"));
23
+
24
+ var _getStackedContent = _interopRequireDefault(require("./getStackedContent"));
25
+
26
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
+
28
+ var _default = _StackView.default;
29
+ exports.default = _default;
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
13
+
14
+ var _Text = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Text"));
15
+
16
+ var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
17
+
18
+ var _StackView = _interopRequireDefault(require("../StackView"));
19
+
20
+ var _Icon = _interopRequireDefault(require("../Icon"));
21
+
22
+ var _utils = require("../utils");
23
+
24
+ var _ThemeProvider = require("../ThemeProvider");
25
+
26
+ var _jsxRuntime = require("react/jsx-runtime");
27
+
28
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
+
30
+ const selectCompletedIconTokens = ({
31
+ completedIconColor,
32
+ completedIconSize
33
+ }) => ({
34
+ size: completedIconSize,
35
+ color: completedIconColor
36
+ });
37
+
38
+ const selectConnectorStyles = ({
39
+ connectorColor,
40
+ connectorHeight,
41
+ connectorMinWidth,
42
+ connectorCompletedHeight,
43
+ connectorCompletedColor
44
+ }, isCompleted) => ({
45
+ backgroundColor: connectorColor,
46
+ height: connectorHeight,
47
+ minWidth: connectorMinWidth,
48
+ ...(isCompleted && {
49
+ height: connectorCompletedHeight,
50
+ backgroundColor: connectorCompletedColor
51
+ })
52
+ });
53
+
54
+ const selectCurrentInnerStyles = ({
55
+ knobCurrentInnerColor,
56
+ knobCurrentInnerSize
57
+ }) => ({
58
+ backgroundColor: knobCurrentInnerColor,
59
+ borderRadius: knobCurrentInnerSize / 2,
60
+ height: knobCurrentInnerSize,
61
+ width: knobCurrentInnerSize
62
+ });
63
+
64
+ const selectKnobStyles = ({
65
+ knobBackgroundColor,
66
+ knobBorderColor,
67
+ knobBorderWidth,
68
+ knobCompletedBackgroundColor,
69
+ knobCompletedBorderColor,
70
+ knobCompletedPaddingLeft,
71
+ knobCompletedPaddingTop,
72
+ knobCurrentBackgroundColor,
73
+ knobCurrentBorderColor,
74
+ knobCurrentBorderWidth,
75
+ knobCurrentPaddingLeft,
76
+ knobCurrentPaddingTop,
77
+ knobSize
78
+ }, isCompleted, isCurrent) => ({
79
+ backgroundColor: knobBackgroundColor,
80
+ borderColor: knobBorderColor,
81
+ borderRadius: knobSize / 2,
82
+ borderWidth: knobBorderWidth,
83
+ height: knobSize,
84
+ width: knobSize,
85
+ ...(isCompleted && {
86
+ backgroundColor: knobCompletedBackgroundColor,
87
+ borderColor: knobCompletedBorderColor,
88
+ paddingLeft: knobCompletedPaddingLeft,
89
+ paddingTop: knobCompletedPaddingTop
90
+ }),
91
+ ...(isCurrent && {
92
+ backgroundColor: knobCurrentBackgroundColor,
93
+ borderColor: knobCurrentBorderColor,
94
+ borderWidth: knobCurrentBorderWidth,
95
+ paddingLeft: knobCurrentPaddingLeft,
96
+ paddingTop: knobCurrentPaddingTop
97
+ })
98
+ });
99
+
100
+ const selectLabelContainerStyles = ({
101
+ labelDirection,
102
+ labelGap,
103
+ labelMarginTop,
104
+ labelPaddingLeft,
105
+ labelPaddingRight
106
+ }) => ({
107
+ marginTop: labelMarginTop,
108
+ paddingLeft: labelPaddingLeft,
109
+ paddingRight: labelPaddingRight,
110
+ flexDirection: labelDirection,
111
+ gap: labelGap
112
+ });
113
+
114
+ const selectLabelStyles = ({
115
+ labelColor,
116
+ labelCurrentColor,
117
+ labelCurrentFontWeight,
118
+ labelFontSize,
119
+ labelFontWeight,
120
+ labelFontName,
121
+ labelLineHeight
122
+ }, isCurrent) => (0, _ThemeProvider.applyTextStyles)({
123
+ color: isCurrent ? labelCurrentColor : labelColor,
124
+ fontSize: labelFontSize,
125
+ lineHeight: labelLineHeight,
126
+ fontWeight: isCurrent ? labelCurrentFontWeight : labelFontWeight,
127
+ fontName: labelFontName
128
+ });
129
+
130
+ const getStepTestID = (isCompleted, isCurrent) => {
131
+ let testID = 'StepTracker-Step';
132
+
133
+ if (isCompleted) {
134
+ testID += '-Completed';
135
+ } else if (isCurrent) {
136
+ testID += '-Current';
137
+ }
138
+
139
+ return testID;
140
+ };
141
+ /**
142
+ * A single step of a StepTracker.
143
+ */
144
+
145
+
146
+ const Step = ({
147
+ label,
148
+ name,
149
+ status = 0,
150
+ stepCount = 0,
151
+ stepIndex = 0,
152
+ tokens
153
+ }) => {
154
+ const {
155
+ completedIcon,
156
+ showStepLabel,
157
+ showStepName,
158
+ ...themeTokens
159
+ } = tokens;
160
+ const isFirst = stepIndex === 0;
161
+ const isLast = stepIndex === stepCount - 1;
162
+ const isCompleted = status > stepIndex;
163
+ const isCurrent = status === stepIndex;
164
+ const isActive = isCompleted || isCurrent;
165
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_StackView.default, {
166
+ space: 0,
167
+ tokens: {
168
+ alignItems: 'stretch',
169
+ flexGrow: 1
170
+ },
171
+ accessibilityLabel: label,
172
+ accessibilityLevel: 2,
173
+ accessibilityCurrent: status === stepIndex ? 'true' : 'false',
174
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_StackView.default, {
175
+ direction: "row",
176
+ space: 0,
177
+ tokens: {
178
+ alignItems: 'center',
179
+ flexGrow: 0
180
+ },
181
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
182
+ style: [staticStyles.connector, !isFirst && selectConnectorStyles(themeTokens, isActive)]
183
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_View.default, {
184
+ style: [staticStyles.knob, selectKnobStyles(themeTokens, isCompleted, isCurrent)],
185
+ testID: getStepTestID(isCompleted, isCurrent),
186
+ children: [isCompleted && completedIcon && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Icon.default, {
187
+ icon: completedIcon,
188
+ tokens: selectCompletedIconTokens(themeTokens)
189
+ }), isCurrent && /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
190
+ style: selectCurrentInnerStyles(themeTokens)
191
+ })]
192
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
193
+ style: [staticStyles.connector, !isLast && selectConnectorStyles(themeTokens, isCompleted)]
194
+ })]
195
+ }), showStepLabel && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_View.default, {
196
+ style: [staticStyles.stepLabelContainer, selectLabelContainerStyles(tokens)],
197
+ children: [showStepName && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, {
198
+ style: [staticStyles.centeredText, selectLabelStyles(tokens, isCurrent)],
199
+ children: name
200
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_StackView.default, {
201
+ direction: "row",
202
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, {
203
+ style: [staticStyles.centeredText, tokens.labelDirection === 'column' && staticStyles.wrappingLabel, selectLabelStyles(tokens, isCurrent)],
204
+ children: label
205
+ })
206
+ })]
207
+ })]
208
+ });
209
+ };
210
+
211
+ Step.propTypes = {
212
+ label: _propTypes.default.string.isRequired,
213
+ name: _propTypes.default.string.isRequired,
214
+ status: _propTypes.default.number.isRequired,
215
+ stepCount: _propTypes.default.number.isRequired,
216
+ stepIndex: _propTypes.default.number.isRequired,
217
+ tokens: (0, _utils.getTokensPropType)('StepTracker'),
218
+ variant: _utils.variantProp.propType
219
+ };
220
+ var _default = Step;
221
+ exports.default = _default;
222
+
223
+ const staticStyles = _StyleSheet.default.create({
224
+ centeredText: {
225
+ textAlign: 'center'
226
+ },
227
+ connector: {
228
+ flex: 1,
229
+ height: 1
230
+ },
231
+ completedKnob: {
232
+ backgroundColor: 'transparent',
233
+ textAlign: 'center'
234
+ },
235
+ knob: {
236
+ borderWidth: 1
237
+ },
238
+ stepLabelContainer: {
239
+ justifyContent: 'center'
240
+ },
241
+ wrappingLabel: {
242
+ width: 0,
243
+ flex: 1
244
+ }
245
+ });
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
13
+
14
+ var _Text = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Text"));
15
+
16
+ var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
17
+
18
+ var _StackView = _interopRequireDefault(require("../StackView"));
19
+
20
+ var _ThemeProvider = require("../ThemeProvider");
21
+
22
+ var _utils = require("../utils");
23
+
24
+ var _propTypes2 = require("../utils/propTypes");
25
+
26
+ var _ViewportProvider = require("../ViewportProvider");
27
+
28
+ var _useCopy = _interopRequireDefault(require("../utils/useCopy"));
29
+
30
+ var _Step = _interopRequireDefault(require("./Step"));
31
+
32
+ var _dictionary = _interopRequireDefault(require("./dictionary"));
33
+
34
+ var _jsxRuntime = require("react/jsx-runtime");
35
+
36
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
+
38
+ const selectContainerStyles = ({
39
+ containerPaddingBottom,
40
+ containerPaddingLeft,
41
+ containerPaddingRight,
42
+ containerPaddingTop
43
+ }) => ({
44
+ paddingBottom: containerPaddingBottom,
45
+ paddingLeft: containerPaddingLeft,
46
+ paddingRight: containerPaddingRight,
47
+ paddingTop: containerPaddingTop
48
+ });
49
+
50
+ const selectStepTrackerLabelContainerStyles = ({
51
+ labelMarginTop
52
+ }) => ({
53
+ marginTop: labelMarginTop
54
+ });
55
+
56
+ const selectStepTrackerLabelStyles = ({
57
+ labelColor,
58
+ labelFontSize,
59
+ labelFontWeight,
60
+ labelFontName,
61
+ labelLineHeight
62
+ }) => (0, _ThemeProvider.applyTextStyles)({
63
+ color: labelColor,
64
+ fontSize: labelFontSize,
65
+ lineHeight: labelLineHeight,
66
+ fontWeight: labelFontWeight,
67
+ fontName: labelFontName
68
+ });
69
+ /**
70
+ * StepTracker component shows the current position in a sequence of steps.
71
+ *
72
+ * ## Component API
73
+ *
74
+ * - `current` prop allows to control the current step, 0-based number;
75
+ * - use `copy` and `dictionary` props to internationalize the labels;
76
+ * - `steps` is and array of strings defining step titles;
77
+ * - tokens and variant props define the appearance of the `StepTracker`:
78
+ *
79
+ * ## Usability and A11y guidelines
80
+ *
81
+ * Keep in mind that in its current implementation this is not an interactive
82
+ * component and can’t be used to navigate between steps. The application
83
+ * must provide its own navigation mechanism and state control. That is the
84
+ * main reason the component assumes the `progressbar` role in terms of
85
+ * accessibility. This also makes it extremely important to make sure you
86
+ * set a11y on controls used to modify the state of the step tracker.
87
+ *
88
+ * You can pass standard a11y props to the `StepTracker` component, including
89
+ * the ones that are specific to the `progressbar` role. By default the
90
+ * following props are used:
91
+ *
92
+ * - `accessibilityRole` (`role`): `progressbar`,
93
+ * - `accessibilityLabel` (`aria-label`): `Step I of N: <Current Step Label>`,
94
+ * - `accessibilityLevel` (`aria-level`): 1,
95
+ * - `accessibilityValue.min` (`aria-valuemin`): `0`,
96
+ * - `accessibilityValue.max` (`aria-valuemax`): `steps.length - 1`,
97
+ * - `accessibilityValue.now` (`aria-valuenow`): `current`,
98
+ * - `accessibilityValue.text` (`aria-valuetext`): `<Current Step Label>`,
99
+ *
100
+ */
101
+
102
+
103
+ const StepTracker = ({
104
+ current = 0,
105
+ copy = 'en',
106
+ dictionary = _dictionary.default,
107
+ steps = [],
108
+ tokens,
109
+ variant,
110
+ ...rest
111
+ }) => {
112
+ const viewport = (0, _ViewportProvider.useViewport)();
113
+ const {
114
+ showStepTrackerLabel,
115
+ ...themeTokens
116
+ } = (0, _ThemeProvider.useThemeTokens)('StepTracker', tokens, variant, {
117
+ viewport
118
+ });
119
+ const getCopy = (0, _useCopy.default)({
120
+ dictionary,
121
+ copy
122
+ });
123
+ 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]);
124
+ if (!steps.length) return null;
125
+ const accessibilityProps = {
126
+ accessibilityLabel: stepTrackerLabel,
127
+ accessibilityLevel: 1,
128
+ accessibilityRole: 'progressbar',
129
+ accessibilityValue: {
130
+ min: 0,
131
+ max: steps.length - 1,
132
+ now: current,
133
+ text: steps[current]
134
+ },
135
+ ..._propTypes2.a11yProps.select(rest)
136
+ };
137
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
138
+ style: selectContainerStyles(themeTokens),
139
+ ...accessibilityProps,
140
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_StackView.default, {
141
+ space: 0,
142
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
143
+ style: staticStyles.stepsContainer,
144
+ children: steps.map((label, index) => {
145
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Step.default, {
146
+ status: current,
147
+ label: label,
148
+ name: getCopy('stepLabel').replace('%{stepNumber}', index + 1),
149
+ stepIndex: index,
150
+ stepCount: steps.length,
151
+ tokens: themeTokens
152
+ }, label);
153
+ })
154
+ }), showStepTrackerLabel && /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
155
+ style: [staticStyles.stepTrackerLabelContainer, selectStepTrackerLabelContainerStyles(themeTokens)],
156
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, {
157
+ style: selectStepTrackerLabelStyles(themeTokens),
158
+ children: stepTrackerLabel
159
+ })
160
+ })]
161
+ })
162
+ });
163
+ };
164
+
165
+ StepTracker.propTypes = {
166
+ current: _propTypes.default.number,
167
+ copy: _propTypes.default.oneOf(['en', 'fr']),
168
+ dictionary: _propTypes.default.shape({
169
+ en: _propTypes.default.shape({
170
+ stepLabel: _propTypes.default.string,
171
+ stepTrackerLabel: _propTypes.default.string
172
+ }),
173
+ fr: _propTypes.default.shape({
174
+ stepLabel: _propTypes.default.string,
175
+ stepTrackerLabel: _propTypes.default.string
176
+ })
177
+ }),
178
+ steps: _propTypes.default.arrayOf(_propTypes.default.string),
179
+ tokens: (0, _utils.getTokensPropType)('StepTracker'),
180
+ variant: _utils.variantProp.propType
181
+ };
182
+ var _default = StepTracker;
183
+ exports.default = _default;
184
+
185
+ const staticStyles = _StyleSheet.default.create({
186
+ stepsContainer: {
187
+ alignItems: 'flex-start',
188
+ flexDirection: 'row',
189
+ justifyContent: 'space-evenly',
190
+ flexGrow: 1
191
+ },
192
+ stepTrackerLabelContainer: {
193
+ textAlign: 'center',
194
+ flexDirection: 'row',
195
+ justifyContent: 'center'
196
+ }
197
+ });
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _default = {
8
+ en: {
9
+ stepLabel: 'Step %{stepNumber}',
10
+ stepTrackerLabel: 'Step %{stepNumber} of %{stepCount}: %{stepLabel}'
11
+ },
12
+ fr: {
13
+ stepLabel: 'Étape %{stepNumber}',
14
+ stepTrackerLabel: 'Étape %{stepNumber} sur %{stepCount}: %{stepLabel}'
15
+ }
16
+ };
17
+ exports.default = _default;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _StepTracker = _interopRequireDefault(require("./StepTracker"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ var _default = _StepTracker.default;
13
+ exports.default = _default;