@telus-uds/components-base 1.2.0 → 1.4.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 (415) hide show
  1. package/.turbo/turbo-build.log +8 -0
  2. package/CHANGELOG.json +61 -0
  3. package/CHANGELOG.md +45 -2
  4. package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +35 -0
  5. package/__tests__/ActivityIndicator/__snapshots__/ActivityIndicator.test.jsx.snap +287 -0
  6. package/__tests__/FlexGrid/Col.test.jsx +6 -10
  7. package/__tests__/utils/props.test.js +36 -0
  8. package/__tests__/utils/semantics.test.jsx +1 -10
  9. package/babel.config.js +27 -5
  10. package/component-docs.json +170 -494
  11. package/generate-component-docs.js +3 -0
  12. package/lib/A11yText/index.js +6 -5
  13. package/lib/ActivityIndicator/Spinner.js +46 -37
  14. package/lib/ActivityIndicator/Spinner.native.js +26 -15
  15. package/lib/ActivityIndicator/index.js +3 -3
  16. package/lib/Box/Box.js +8 -8
  17. package/lib/Button/Button.js +2 -2
  18. package/lib/Button/ButtonBase.js +7 -8
  19. package/lib/Button/ButtonGroup.js +10 -12
  20. package/lib/Button/ButtonLink.js +4 -4
  21. package/lib/Button/propTypes.js +4 -2
  22. package/lib/Card/Card.js +6 -5
  23. package/lib/Card/CardBase.js +6 -9
  24. package/lib/Card/PressableCardBase.js +6 -11
  25. package/lib/Checkbox/Checkbox.js +4 -6
  26. package/lib/Divider/Divider.js +14 -13
  27. package/lib/ExpandCollapse/Control.js +7 -7
  28. package/lib/ExpandCollapse/ExpandCollapse.js +6 -2
  29. package/lib/ExpandCollapse/Panel.js +6 -7
  30. package/lib/Feedback/Feedback.js +6 -5
  31. package/lib/Fieldset/Fieldset.js +1 -3
  32. package/lib/FlexGrid/FlexGrid.js +4 -4
  33. package/lib/FlexGrid/helpers/index.js +1 -4
  34. package/lib/HorizontalScroll/HorizontalScroll.js +5 -6
  35. package/lib/IconButton/IconButton.js +6 -6
  36. package/lib/InputLabel/InputLabel.js +7 -2
  37. package/lib/InputSupports/InputSupports.js +2 -2
  38. package/lib/Link/LinkBase.js +12 -13
  39. package/lib/List/List.js +4 -6
  40. package/lib/List/ListItem.js +6 -2
  41. package/lib/Modal/Modal.js +6 -2
  42. package/lib/Notification/Notification.js +12 -8
  43. package/lib/Pagination/Pagination.js +8 -3
  44. package/lib/Progress/Progress.js +5 -4
  45. package/lib/Progress/ProgressBar.js +8 -7
  46. package/lib/Radio/Radio.js +4 -6
  47. package/lib/Radio/RadioButton.js +6 -3
  48. package/lib/Radio/RadioGroup.js +7 -2
  49. package/lib/RadioCard/RadioCard.js +4 -4
  50. package/lib/RadioCard/RadioCardGroup.js +9 -6
  51. package/lib/Search/Search.js +7 -2
  52. package/lib/Select/Select.js +10 -9
  53. package/lib/SideNav/Item.js +7 -7
  54. package/lib/SideNav/SideNav.js +7 -3
  55. package/lib/Skeleton/Skeleton.js +6 -2
  56. package/lib/Spacer/Spacer.js +9 -20
  57. package/lib/StackView/StackView.js +7 -7
  58. package/lib/StackView/StackWrapBox.js +6 -7
  59. package/lib/StackView/StackWrapGap.js +6 -5
  60. package/lib/StackView/getStackedContent.js +1 -1
  61. package/lib/StepTracker/Step.js +7 -3
  62. package/lib/StepTracker/StepTracker.js +7 -7
  63. package/lib/Tabs/Tabs.js +6 -2
  64. package/lib/Tabs/TabsItem.js +6 -5
  65. package/lib/Tags/Tags.js +11 -12
  66. package/lib/TextInput/TextArea.js +13 -14
  67. package/lib/TextInput/TextInput.js +13 -14
  68. package/lib/TextInput/TextInputBase.js +5 -3
  69. package/lib/ThemeProvider/useThemeTokens.js +3 -3
  70. package/lib/ThemeProvider/utils/theme-tokens.js +3 -3
  71. package/lib/ToggleSwitch/ToggleSwitch.js +10 -9
  72. package/lib/ToggleSwitch/ToggleSwitchGroup.js +10 -12
  73. package/lib/Tooltip/Tooltip.js +7 -2
  74. package/lib/TooltipButton/TooltipButton.js +7 -2
  75. package/lib/Typography/Typography.js +8 -6
  76. package/lib/index.js +7 -0
  77. package/lib/utils/a11y/semantics.js +4 -3
  78. package/lib/utils/children.js +5 -1
  79. package/lib/utils/index.js +18 -4
  80. package/lib/utils/pressability.js +2 -2
  81. package/lib/utils/props/a11yProps.js +153 -0
  82. package/lib/utils/props/clickProps.js +36 -0
  83. package/lib/utils/props/componentPropType.js +70 -0
  84. package/lib/utils/props/copyPropTypes.js +14 -0
  85. package/lib/utils/props/getPropSelector.js +13 -0
  86. package/lib/utils/props/hrefAttrsProp.js +41 -0
  87. package/lib/utils/props/index.js +158 -0
  88. package/lib/{InputSupports/propTypes.js → utils/props/inputSupportsProps.js} +2 -3
  89. package/lib/utils/props/linkProps.js +64 -0
  90. package/lib/utils/props/paddingProp.js +20 -0
  91. package/lib/utils/props/pressProps.js +57 -0
  92. package/lib/utils/props/rectProp.js +20 -0
  93. package/lib/utils/props/responsiveProps.js +40 -0
  94. package/lib/utils/props/selectSystemProps.js +31 -0
  95. package/lib/utils/props/spacingProps.js +71 -0
  96. package/lib/utils/props/tokens.js +145 -0
  97. package/lib/utils/props/variantProp.js +28 -0
  98. package/lib/utils/props/viewProps.js +34 -0
  99. package/lib/utils/ssr.js +51 -0
  100. package/lib/utils/useResponsiveProp.js +1 -1
  101. package/lib/utils/useSpacingScale.js +4 -4
  102. package/lib-module/A11yInfoProvider/index.js +62 -0
  103. package/lib-module/A11yText/index.js +55 -0
  104. package/lib-module/ActivityIndicator/Spinner.js +76 -0
  105. package/lib-module/ActivityIndicator/Spinner.native.js +143 -0
  106. package/lib-module/ActivityIndicator/index.js +40 -0
  107. package/lib-module/ActivityIndicator/shared.js +12 -0
  108. package/lib-module/BaseProvider/index.js +26 -0
  109. package/lib-module/Box/Box.js +243 -0
  110. package/lib-module/Box/index.js +2 -0
  111. package/lib-module/Button/Button.js +25 -0
  112. package/lib-module/Button/ButtonBase.js +254 -0
  113. package/lib-module/Button/ButtonGroup.js +164 -0
  114. package/lib-module/Button/ButtonLink.js +39 -0
  115. package/lib-module/Button/index.js +4 -0
  116. package/lib-module/Button/propTypes.js +36 -0
  117. package/lib-module/Card/Card.js +83 -0
  118. package/lib-module/Card/CardBase.js +62 -0
  119. package/lib-module/Card/PressableCardBase.js +113 -0
  120. package/lib-module/Card/index.js +4 -0
  121. package/lib-module/Checkbox/Checkbox.js +321 -0
  122. package/lib-module/Checkbox/CheckboxGroup.js +218 -0
  123. package/lib-module/Checkbox/CheckboxInput.js +58 -0
  124. package/lib-module/Checkbox/CheckboxInput.native.js +6 -0
  125. package/lib-module/Checkbox/index.js +3 -0
  126. package/lib-module/Divider/Divider.js +123 -0
  127. package/lib-module/Divider/index.js +2 -0
  128. package/lib-module/ExpandCollapse/Accordion.js +15 -0
  129. package/lib-module/ExpandCollapse/Control.js +130 -0
  130. package/lib-module/ExpandCollapse/ExpandCollapse.js +94 -0
  131. package/lib-module/ExpandCollapse/Panel.js +158 -0
  132. package/lib-module/ExpandCollapse/index.js +7 -0
  133. package/lib-module/Feedback/Feedback.js +144 -0
  134. package/lib-module/Feedback/index.js +2 -0
  135. package/lib-module/Fieldset/Fieldset.js +145 -0
  136. package/lib-module/Fieldset/FieldsetContainer.js +29 -0
  137. package/lib-module/Fieldset/FieldsetContainer.native.js +20 -0
  138. package/lib-module/Fieldset/Legend.js +21 -0
  139. package/lib-module/Fieldset/Legend.native.js +28 -0
  140. package/lib-module/Fieldset/cssReset.js +14 -0
  141. package/lib-module/Fieldset/index.js +2 -0
  142. package/lib-module/FlexGrid/Col/Col.js +265 -0
  143. package/lib-module/FlexGrid/Col/index.js +2 -0
  144. package/lib-module/FlexGrid/FlexGrid.js +147 -0
  145. package/lib-module/FlexGrid/Row/Row.js +177 -0
  146. package/lib-module/FlexGrid/Row/index.js +2 -0
  147. package/lib-module/FlexGrid/helpers/index.js +18 -0
  148. package/lib-module/FlexGrid/index.js +2 -0
  149. package/lib-module/FlexGrid/providers/GutterContext.js +3 -0
  150. package/lib-module/HorizontalScroll/HorizontalScroll.js +171 -0
  151. package/lib-module/HorizontalScroll/HorizontalScrollButton.js +102 -0
  152. package/lib-module/HorizontalScroll/ScrollViewEnd.js +47 -0
  153. package/lib-module/HorizontalScroll/ScrollViewEnd.native.js +24 -0
  154. package/lib-module/HorizontalScroll/dictionary.js +11 -0
  155. package/lib-module/HorizontalScroll/index.js +11 -0
  156. package/lib-module/HorizontalScroll/itemPositions.js +106 -0
  157. package/lib-module/Icon/Icon.js +61 -0
  158. package/lib-module/Icon/IconText.js +81 -0
  159. package/lib-module/Icon/index.js +4 -0
  160. package/lib-module/IconButton/IconButton.js +115 -0
  161. package/lib-module/IconButton/index.js +2 -0
  162. package/lib-module/InputLabel/InputLabel.js +131 -0
  163. package/lib-module/InputLabel/LabelContent.js +24 -0
  164. package/lib-module/InputLabel/LabelContent.native.js +16 -0
  165. package/lib-module/InputLabel/index.js +2 -0
  166. package/lib-module/InputSupports/InputSupports.js +88 -0
  167. package/lib-module/InputSupports/index.js +2 -0
  168. package/lib-module/InputSupports/useInputSupports.js +31 -0
  169. package/lib-module/Link/ChevronLink.js +51 -0
  170. package/lib-module/Link/InlinePressable.js +37 -0
  171. package/lib-module/Link/InlinePressable.native.js +85 -0
  172. package/lib-module/Link/Link.js +27 -0
  173. package/lib-module/Link/LinkBase.js +210 -0
  174. package/lib-module/Link/TextButton.js +43 -0
  175. package/lib-module/Link/index.js +5 -0
  176. package/lib-module/List/List.js +55 -0
  177. package/lib-module/List/ListItem.js +213 -0
  178. package/lib-module/List/index.js +5 -0
  179. package/lib-module/Modal/Modal.js +208 -0
  180. package/lib-module/Modal/dictionary.js +9 -0
  181. package/lib-module/Modal/index.js +2 -0
  182. package/lib-module/Notification/Notification.js +196 -0
  183. package/lib-module/Notification/dictionary.js +8 -0
  184. package/lib-module/Notification/index.js +2 -0
  185. package/lib-module/Pagination/PageButton.js +65 -0
  186. package/lib-module/Pagination/Pagination.js +140 -0
  187. package/lib-module/Pagination/SideButton.js +103 -0
  188. package/lib-module/Pagination/dictionary.js +18 -0
  189. package/lib-module/Pagination/index.js +2 -0
  190. package/lib-module/Pagination/usePagination.js +72 -0
  191. package/lib-module/Progress/Progress.js +85 -0
  192. package/lib-module/Progress/ProgressBar.js +134 -0
  193. package/lib-module/Progress/ProgressBarBackground.js +41 -0
  194. package/lib-module/Progress/index.js +4 -0
  195. package/lib-module/Radio/Radio.js +263 -0
  196. package/lib-module/Radio/RadioButton.js +128 -0
  197. package/lib-module/Radio/RadioGroup.js +225 -0
  198. package/lib-module/Radio/RadioInput.js +60 -0
  199. package/lib-module/Radio/RadioInput.native.js +6 -0
  200. package/lib-module/Radio/index.js +3 -0
  201. package/lib-module/RadioCard/RadioCard.js +218 -0
  202. package/lib-module/RadioCard/RadioCardGroup.js +232 -0
  203. package/lib-module/RadioCard/index.js +3 -0
  204. package/lib-module/Search/Search.js +233 -0
  205. package/lib-module/Search/dictionary.js +12 -0
  206. package/lib-module/Search/index.js +2 -0
  207. package/lib-module/Select/Group.js +20 -0
  208. package/lib-module/Select/Group.native.js +14 -0
  209. package/lib-module/Select/Item.js +17 -0
  210. package/lib-module/Select/Item.native.js +9 -0
  211. package/lib-module/Select/Picker.js +67 -0
  212. package/lib-module/Select/Picker.native.js +110 -0
  213. package/lib-module/Select/Select.js +317 -0
  214. package/lib-module/Select/index.js +6 -0
  215. package/lib-module/SideNav/Item.js +139 -0
  216. package/lib-module/SideNav/ItemContent.js +45 -0
  217. package/lib-module/SideNav/ItemsGroup.js +115 -0
  218. package/lib-module/SideNav/SideNav.js +133 -0
  219. package/lib-module/SideNav/index.js +1 -0
  220. package/lib-module/Skeleton/Skeleton.js +117 -0
  221. package/lib-module/Skeleton/index.js +2 -0
  222. package/lib-module/Skeleton/skeleton.constant.js +3 -0
  223. package/lib-module/Skeleton/skeletonWebAnimation.js +18 -0
  224. package/lib-module/Skeleton/useSkeletonNativeAnimation.js +24 -0
  225. package/lib-module/Spacer/Spacer.js +97 -0
  226. package/lib-module/Spacer/index.js +2 -0
  227. package/lib-module/StackView/StackView.js +124 -0
  228. package/lib-module/StackView/StackWrap.js +48 -0
  229. package/lib-module/StackView/StackWrap.native.js +3 -0
  230. package/lib-module/StackView/StackWrapBox.js +114 -0
  231. package/lib-module/StackView/StackWrapGap.js +58 -0
  232. package/lib-module/StackView/common.js +32 -0
  233. package/lib-module/StackView/getStackedContent.js +123 -0
  234. package/lib-module/StackView/index.js +5 -0
  235. package/lib-module/StepTracker/Step.js +229 -0
  236. package/lib-module/StepTracker/StepTracker.js +175 -0
  237. package/lib-module/StepTracker/dictionary.js +10 -0
  238. package/lib-module/StepTracker/index.js +2 -0
  239. package/lib-module/Tabs/Tabs.js +113 -0
  240. package/lib-module/Tabs/TabsItem.js +215 -0
  241. package/lib-module/Tabs/index.js +2 -0
  242. package/lib-module/Tags/Tags.js +238 -0
  243. package/lib-module/Tags/index.js +2 -0
  244. package/lib-module/TextInput/TextArea.js +88 -0
  245. package/lib-module/TextInput/TextInput.js +60 -0
  246. package/lib-module/TextInput/TextInputBase.js +233 -0
  247. package/lib-module/TextInput/index.js +3 -0
  248. package/lib-module/TextInput/propTypes.js +31 -0
  249. package/lib-module/ThemeProvider/ThemeProvider.js +35 -0
  250. package/lib-module/ThemeProvider/index.js +6 -0
  251. package/lib-module/ThemeProvider/useSetTheme.js +22 -0
  252. package/lib-module/ThemeProvider/useTheme.js +14 -0
  253. package/lib-module/ThemeProvider/useThemeTokens.js +105 -0
  254. package/lib-module/ThemeProvider/utils/index.js +2 -0
  255. package/lib-module/ThemeProvider/utils/styles.js +174 -0
  256. package/lib-module/ThemeProvider/utils/theme-tokens.js +151 -0
  257. package/lib-module/ToggleSwitch/ToggleSwitch.js +224 -0
  258. package/lib-module/ToggleSwitch/ToggleSwitchGroup.js +202 -0
  259. package/lib-module/ToggleSwitch/index.js +3 -0
  260. package/lib-module/Tooltip/Backdrop.js +52 -0
  261. package/lib-module/Tooltip/Backdrop.native.js +43 -0
  262. package/lib-module/Tooltip/Tooltip.js +332 -0
  263. package/lib-module/Tooltip/dictionary.js +8 -0
  264. package/lib-module/Tooltip/getTooltipPosition.js +164 -0
  265. package/lib-module/Tooltip/index.js +2 -0
  266. package/lib-module/TooltipButton/TooltipButton.js +71 -0
  267. package/lib-module/TooltipButton/index.js +2 -0
  268. package/lib-module/Typography/Typography.js +118 -0
  269. package/lib-module/Typography/index.js +2 -0
  270. package/lib-module/ViewportProvider/ViewportProvider.js +28 -0
  271. package/lib-module/ViewportProvider/index.js +3 -0
  272. package/lib-module/ViewportProvider/useViewport.js +3 -0
  273. package/lib-module/ViewportProvider/useViewportListener.js +43 -0
  274. package/lib-module/index.js +48 -0
  275. package/lib-module/utils/a11y/index.js +2 -0
  276. package/lib-module/utils/a11y/semantics.js +154 -0
  277. package/lib-module/utils/a11y/textSize.js +34 -0
  278. package/lib-module/utils/animation/index.js +2 -0
  279. package/lib-module/utils/animation/useVerticalExpandAnimation.js +49 -0
  280. package/lib-module/utils/children.js +118 -0
  281. package/lib-module/utils/index.js +15 -0
  282. package/lib-module/utils/info/index.js +7 -0
  283. package/lib-module/utils/info/platform/index.js +11 -0
  284. package/lib-module/utils/info/platform/platform.android.js +1 -0
  285. package/lib-module/utils/info/platform/platform.ios.js +1 -0
  286. package/lib-module/utils/info/platform/platform.js +1 -0
  287. package/lib-module/utils/info/platform/platform.native.js +4 -0
  288. package/lib-module/utils/info/versions.js +5 -0
  289. package/lib-module/utils/input.js +180 -0
  290. package/lib-module/utils/pressability.js +97 -0
  291. package/lib-module/utils/props/a11yProps.js +140 -0
  292. package/lib-module/utils/props/clickProps.js +25 -0
  293. package/lib-module/utils/props/componentPropType.js +63 -0
  294. package/lib-module/utils/props/copyPropTypes.js +2 -0
  295. package/lib-module/utils/props/getPropSelector.js +6 -0
  296. package/lib-module/utils/props/hrefAttrsProp.js +30 -0
  297. package/lib-module/utils/props/index.js +16 -0
  298. package/lib-module/utils/props/inputSupportsProps.js +54 -0
  299. package/lib-module/utils/props/linkProps.js +47 -0
  300. package/lib-module/utils/props/paddingProp.js +9 -0
  301. package/lib-module/utils/props/pressProps.js +42 -0
  302. package/lib-module/utils/props/rectProp.js +9 -0
  303. package/lib-module/utils/props/responsiveProps.js +30 -0
  304. package/lib-module/utils/props/selectSystemProps.js +24 -0
  305. package/lib-module/utils/props/spacingProps.js +56 -0
  306. package/lib-module/utils/props/tokens.js +120 -0
  307. package/lib-module/utils/props/variantProp.js +18 -0
  308. package/lib-module/utils/props/viewProps.js +22 -0
  309. package/lib-module/utils/ssr.js +35 -0
  310. package/lib-module/utils/useCopy.js +42 -0
  311. package/lib-module/utils/useHash.js +44 -0
  312. package/lib-module/utils/useHash.native.js +7 -0
  313. package/lib-module/utils/useResponsiveProp.js +47 -0
  314. package/lib-module/utils/useSpacingScale.js +123 -0
  315. package/lib-module/utils/useUniqueId.js +12 -0
  316. package/lib-module/utils/withLinkRouter.js +82 -0
  317. package/package.json +9 -5
  318. package/src/A11yText/index.jsx +7 -3
  319. package/src/ActivityIndicator/Spinner.jsx +56 -44
  320. package/src/ActivityIndicator/Spinner.native.jsx +20 -12
  321. package/src/ActivityIndicator/index.jsx +1 -1
  322. package/src/Box/Box.jsx +15 -13
  323. package/src/Button/Button.jsx +1 -1
  324. package/src/Button/ButtonBase.jsx +9 -8
  325. package/src/Button/ButtonGroup.jsx +17 -8
  326. package/src/Button/ButtonLink.jsx +1 -1
  327. package/src/Button/propTypes.js +2 -1
  328. package/src/Card/Card.jsx +7 -4
  329. package/src/Card/CardBase.jsx +6 -5
  330. package/src/Card/PressableCardBase.jsx +12 -12
  331. package/src/Checkbox/Checkbox.jsx +12 -5
  332. package/src/Divider/Divider.jsx +19 -12
  333. package/src/ExpandCollapse/Control.jsx +12 -7
  334. package/src/ExpandCollapse/ExpandCollapse.jsx +13 -3
  335. package/src/ExpandCollapse/Panel.jsx +15 -5
  336. package/src/Feedback/Feedback.jsx +13 -3
  337. package/src/Fieldset/Fieldset.jsx +1 -1
  338. package/src/FlexGrid/FlexGrid.jsx +11 -5
  339. package/src/FlexGrid/helpers/index.js +1 -3
  340. package/src/HorizontalScroll/HorizontalScroll.jsx +12 -5
  341. package/src/IconButton/IconButton.jsx +12 -8
  342. package/src/InputLabel/InputLabel.jsx +16 -2
  343. package/src/InputSupports/InputSupports.jsx +1 -1
  344. package/src/Link/LinkBase.jsx +11 -10
  345. package/src/List/List.jsx +12 -5
  346. package/src/List/ListItem.jsx +16 -2
  347. package/src/Modal/Modal.jsx +63 -50
  348. package/src/Notification/Notification.jsx +23 -6
  349. package/src/Pagination/Pagination.jsx +10 -3
  350. package/src/Progress/Progress.jsx +5 -3
  351. package/src/Progress/ProgressBar.jsx +8 -6
  352. package/src/Radio/Radio.jsx +13 -5
  353. package/src/Radio/RadioButton.jsx +13 -3
  354. package/src/Radio/RadioGroup.jsx +14 -2
  355. package/src/RadioCard/RadioCard.jsx +9 -6
  356. package/src/RadioCard/RadioCardGroup.jsx +16 -4
  357. package/src/Search/Search.jsx +15 -3
  358. package/src/Select/Select.jsx +21 -7
  359. package/src/SideNav/Item.jsx +15 -7
  360. package/src/SideNav/SideNav.jsx +13 -2
  361. package/src/Skeleton/Skeleton.jsx +55 -43
  362. package/src/Spacer/Spacer.jsx +10 -18
  363. package/src/StackView/StackView.jsx +13 -12
  364. package/src/StackView/StackWrapBox.jsx +12 -12
  365. package/src/StackView/StackWrapGap.jsx +9 -7
  366. package/src/StackView/getStackedContent.jsx +1 -1
  367. package/src/StepTracker/Step.jsx +7 -4
  368. package/src/StepTracker/StepTracker.jsx +8 -8
  369. package/src/Tabs/Tabs.jsx +16 -3
  370. package/src/Tabs/TabsItem.jsx +13 -9
  371. package/src/Tags/Tags.jsx +16 -7
  372. package/src/TextInput/TextArea.jsx +20 -8
  373. package/src/TextInput/TextInput.jsx +20 -8
  374. package/src/TextInput/TextInputBase.jsx +13 -3
  375. package/src/ThemeProvider/useThemeTokens.js +3 -3
  376. package/src/ThemeProvider/utils/theme-tokens.js +3 -3
  377. package/src/ToggleSwitch/ToggleSwitch.jsx +12 -7
  378. package/src/ToggleSwitch/ToggleSwitchGroup.jsx +14 -6
  379. package/src/Tooltip/Tooltip.jsx +13 -3
  380. package/src/TooltipButton/TooltipButton.jsx +6 -4
  381. package/src/Typography/Typography.jsx +10 -6
  382. package/src/index.js +1 -1
  383. package/src/utils/a11y/semantics.js +3 -2
  384. package/src/utils/children.jsx +2 -1
  385. package/src/utils/index.js +2 -1
  386. package/src/utils/pressability.js +1 -1
  387. package/src/utils/props/a11yProps.js +151 -0
  388. package/src/utils/props/clickProps.js +31 -0
  389. package/src/utils/props/componentPropType.js +67 -0
  390. package/src/utils/props/copyPropTypes.js +3 -0
  391. package/src/utils/props/getPropSelector.js +14 -0
  392. package/src/utils/props/hrefAttrsProp.js +25 -0
  393. package/src/utils/props/index.js +16 -0
  394. package/src/{InputSupports/propTypes.js → utils/props/inputSupportsProps.js} +2 -4
  395. package/src/utils/props/linkProps.js +43 -0
  396. package/src/utils/props/paddingProp.js +10 -0
  397. package/src/utils/props/pressProps.js +45 -0
  398. package/src/utils/props/rectProp.js +10 -0
  399. package/src/utils/props/responsiveProps.js +30 -0
  400. package/src/utils/props/selectSystemProps.js +25 -0
  401. package/src/utils/props/spacingProps.js +58 -0
  402. package/src/utils/props/tokens.js +150 -0
  403. package/src/utils/props/variantProp.js +20 -0
  404. package/src/utils/props/viewProps.js +23 -0
  405. package/src/utils/ssr.js +35 -0
  406. package/src/utils/useResponsiveProp.js +1 -1
  407. package/src/utils/useSpacingScale.js +4 -4
  408. package/.ultra.cache.json +0 -1
  409. package/lib/utils/a11y/propTypes.js +0 -61
  410. package/lib/utils/a11y/propTypes.native.js +0 -47
  411. package/lib/utils/propTypes.js +0 -566
  412. package/release-context.json +0 -7
  413. package/src/utils/a11y/propTypes.js +0 -61
  414. package/src/utils/a11y/propTypes.native.js +0 -39
  415. package/src/utils/propTypes.js +0 -561
@@ -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;