@telus-uds/components-base 1.1.0 → 1.3.1

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 (432) hide show
  1. package/.turbo/turbo-build.log +8 -0
  2. package/CHANGELOG.json +38 -0
  3. package/CHANGELOG.md +35 -2
  4. package/__fixtures__/Accessible.js +4 -2
  5. package/__fixtures__/Accessible.native.js +5 -2
  6. package/__fixtures__/testTheme.js +9 -0
  7. package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +35 -0
  8. package/__tests__/ActivityIndicator/__snapshots__/ActivityIndicator.test.jsx.snap +287 -0
  9. package/__tests__/FlexGrid/Col.test.jsx +6 -10
  10. package/__tests__/HorizontalScroll/HorizontalScroll.test.jsx +1 -0
  11. package/__tests__/ToggleSwitch/ToggleSwitch.test.jsx +10 -0
  12. package/__tests__/ToggleSwitch/ToggleSwitchGroup.test.jsx +192 -0
  13. package/__tests__/utils/props.test.js +36 -0
  14. package/__tests__/utils/semantics.test.jsx +1 -10
  15. package/babel.config.js +27 -5
  16. package/component-docs.json +638 -1145
  17. package/generate-component-docs.js +3 -0
  18. package/lib/A11yText/index.js +6 -5
  19. package/lib/ActivityIndicator/Spinner.js +46 -37
  20. package/lib/ActivityIndicator/Spinner.native.js +26 -15
  21. package/lib/ActivityIndicator/index.js +3 -3
  22. package/lib/Box/Box.js +8 -8
  23. package/lib/Button/Button.js +2 -2
  24. package/lib/Button/ButtonBase.js +25 -12
  25. package/lib/Button/ButtonGroup.js +10 -12
  26. package/lib/Button/ButtonLink.js +4 -4
  27. package/lib/Button/propTypes.js +4 -2
  28. package/lib/Card/Card.js +6 -5
  29. package/lib/Card/CardBase.js +6 -9
  30. package/lib/Card/PressableCardBase.js +15 -14
  31. package/lib/Checkbox/Checkbox.js +4 -8
  32. package/lib/Divider/Divider.js +14 -13
  33. package/lib/ExpandCollapse/Control.js +7 -7
  34. package/lib/ExpandCollapse/ExpandCollapse.js +6 -2
  35. package/lib/ExpandCollapse/Panel.js +6 -7
  36. package/lib/Feedback/Feedback.js +6 -5
  37. package/lib/Fieldset/Fieldset.js +1 -3
  38. package/lib/FlexGrid/FlexGrid.js +4 -4
  39. package/lib/FlexGrid/helpers/index.js +1 -4
  40. package/lib/HorizontalScroll/HorizontalScroll.js +5 -6
  41. package/lib/IconButton/IconButton.js +14 -9
  42. package/lib/InputLabel/InputLabel.js +7 -2
  43. package/lib/InputSupports/InputSupports.js +2 -2
  44. package/lib/Link/LinkBase.js +21 -15
  45. package/lib/List/List.js +4 -6
  46. package/lib/List/ListItem.js +6 -2
  47. package/lib/Modal/Modal.js +6 -2
  48. package/lib/Notification/Notification.js +7 -2
  49. package/lib/Pagination/PageButton.js +3 -1
  50. package/lib/Pagination/Pagination.js +22 -5
  51. package/lib/Pagination/SideButton.js +3 -1
  52. package/lib/Progress/Progress.js +5 -4
  53. package/lib/Progress/ProgressBar.js +8 -7
  54. package/lib/Radio/Radio.js +4 -8
  55. package/lib/Radio/RadioButton.js +6 -3
  56. package/lib/Radio/RadioGroup.js +7 -2
  57. package/lib/RadioCard/RadioCard.js +4 -4
  58. package/lib/RadioCard/RadioCardGroup.js +9 -6
  59. package/lib/Search/Search.js +7 -2
  60. package/lib/Select/Select.js +10 -9
  61. package/lib/SideNav/Item.js +7 -7
  62. package/lib/SideNav/SideNav.js +7 -3
  63. package/lib/Skeleton/Skeleton.js +6 -2
  64. package/lib/Spacer/Spacer.js +9 -20
  65. package/lib/StackView/StackView.js +7 -7
  66. package/lib/StackView/StackWrapBox.js +6 -7
  67. package/lib/StackView/StackWrapGap.js +6 -5
  68. package/lib/StackView/getStackedContent.js +1 -1
  69. package/lib/StepTracker/Step.js +7 -3
  70. package/lib/StepTracker/StepTracker.js +7 -7
  71. package/lib/Tabs/Tabs.js +16 -4
  72. package/lib/Tabs/TabsItem.js +18 -11
  73. package/lib/Tags/Tags.js +11 -12
  74. package/lib/TextInput/TextArea.js +13 -14
  75. package/lib/TextInput/TextInput.js +13 -14
  76. package/lib/TextInput/TextInputBase.js +5 -3
  77. package/lib/ThemeProvider/useThemeTokens.js +3 -3
  78. package/lib/ThemeProvider/utils/theme-tokens.js +3 -3
  79. package/lib/ToggleSwitch/ToggleSwitch.js +106 -43
  80. package/lib/ToggleSwitch/ToggleSwitchGroup.js +228 -0
  81. package/lib/ToggleSwitch/index.js +14 -4
  82. package/lib/Tooltip/Tooltip.js +7 -2
  83. package/lib/TooltipButton/TooltipButton.js +7 -2
  84. package/lib/Typography/Typography.js +8 -6
  85. package/lib/index.js +20 -8
  86. package/lib/utils/a11y/semantics.js +4 -3
  87. package/lib/utils/children.js +5 -1
  88. package/lib/utils/index.js +28 -5
  89. package/lib/utils/pressability.js +2 -2
  90. package/lib/utils/props/a11yProps.js +153 -0
  91. package/lib/utils/props/clickProps.js +36 -0
  92. package/lib/utils/props/componentPropType.js +70 -0
  93. package/lib/utils/props/copyPropTypes.js +14 -0
  94. package/lib/utils/props/getPropSelector.js +13 -0
  95. package/lib/utils/props/hrefAttrsProp.js +41 -0
  96. package/lib/utils/props/index.js +158 -0
  97. package/lib/{InputSupports/propTypes.js → utils/props/inputSupportsProps.js} +2 -3
  98. package/lib/utils/props/linkProps.js +64 -0
  99. package/lib/utils/props/paddingProp.js +20 -0
  100. package/lib/utils/props/pressProps.js +57 -0
  101. package/lib/utils/props/rectProp.js +20 -0
  102. package/lib/utils/props/responsiveProps.js +40 -0
  103. package/lib/utils/props/selectSystemProps.js +31 -0
  104. package/lib/utils/props/spacingProps.js +71 -0
  105. package/lib/utils/props/tokens.js +145 -0
  106. package/lib/utils/props/variantProp.js +28 -0
  107. package/lib/utils/props/viewProps.js +34 -0
  108. package/lib/utils/ssr.js +51 -0
  109. package/lib/utils/useResponsiveProp.js +1 -1
  110. package/lib/utils/useSpacingScale.js +4 -4
  111. package/lib/utils/withLinkRouter.js +98 -0
  112. package/lib-module/A11yInfoProvider/index.js +62 -0
  113. package/lib-module/A11yText/index.js +55 -0
  114. package/lib-module/ActivityIndicator/Spinner.js +76 -0
  115. package/lib-module/ActivityIndicator/Spinner.native.js +143 -0
  116. package/lib-module/ActivityIndicator/index.js +40 -0
  117. package/lib-module/ActivityIndicator/shared.js +12 -0
  118. package/lib-module/BaseProvider/index.js +26 -0
  119. package/lib-module/Box/Box.js +243 -0
  120. package/lib-module/Box/index.js +2 -0
  121. package/lib-module/Button/Button.js +25 -0
  122. package/lib-module/Button/ButtonBase.js +254 -0
  123. package/lib-module/Button/ButtonGroup.js +164 -0
  124. package/lib-module/Button/ButtonLink.js +39 -0
  125. package/lib-module/Button/index.js +4 -0
  126. package/lib-module/Button/propTypes.js +36 -0
  127. package/lib-module/Card/Card.js +83 -0
  128. package/lib-module/Card/CardBase.js +62 -0
  129. package/lib-module/Card/PressableCardBase.js +113 -0
  130. package/lib-module/Card/index.js +4 -0
  131. package/lib-module/Checkbox/Checkbox.js +321 -0
  132. package/lib-module/Checkbox/CheckboxGroup.js +218 -0
  133. package/lib-module/Checkbox/CheckboxInput.js +58 -0
  134. package/lib-module/Checkbox/CheckboxInput.native.js +6 -0
  135. package/lib-module/Checkbox/index.js +3 -0
  136. package/lib-module/Divider/Divider.js +123 -0
  137. package/lib-module/Divider/index.js +2 -0
  138. package/lib-module/ExpandCollapse/Accordion.js +15 -0
  139. package/lib-module/ExpandCollapse/Control.js +130 -0
  140. package/lib-module/ExpandCollapse/ExpandCollapse.js +94 -0
  141. package/lib-module/ExpandCollapse/Panel.js +158 -0
  142. package/lib-module/ExpandCollapse/index.js +7 -0
  143. package/lib-module/Feedback/Feedback.js +144 -0
  144. package/lib-module/Feedback/index.js +2 -0
  145. package/lib-module/Fieldset/Fieldset.js +145 -0
  146. package/lib-module/Fieldset/FieldsetContainer.js +29 -0
  147. package/lib-module/Fieldset/FieldsetContainer.native.js +20 -0
  148. package/lib-module/Fieldset/Legend.js +21 -0
  149. package/lib-module/Fieldset/Legend.native.js +28 -0
  150. package/lib-module/Fieldset/cssReset.js +14 -0
  151. package/lib-module/Fieldset/index.js +2 -0
  152. package/lib-module/FlexGrid/Col/Col.js +265 -0
  153. package/lib-module/FlexGrid/Col/index.js +2 -0
  154. package/lib-module/FlexGrid/FlexGrid.js +147 -0
  155. package/lib-module/FlexGrid/Row/Row.js +177 -0
  156. package/lib-module/FlexGrid/Row/index.js +2 -0
  157. package/lib-module/FlexGrid/helpers/index.js +18 -0
  158. package/lib-module/FlexGrid/index.js +2 -0
  159. package/lib-module/FlexGrid/providers/GutterContext.js +3 -0
  160. package/lib-module/HorizontalScroll/HorizontalScroll.js +171 -0
  161. package/lib-module/HorizontalScroll/HorizontalScrollButton.js +102 -0
  162. package/lib-module/HorizontalScroll/ScrollViewEnd.js +47 -0
  163. package/lib-module/HorizontalScroll/ScrollViewEnd.native.js +24 -0
  164. package/lib-module/HorizontalScroll/dictionary.js +11 -0
  165. package/lib-module/HorizontalScroll/index.js +11 -0
  166. package/lib-module/HorizontalScroll/itemPositions.js +106 -0
  167. package/lib-module/Icon/Icon.js +61 -0
  168. package/lib-module/Icon/IconText.js +81 -0
  169. package/lib-module/Icon/index.js +4 -0
  170. package/lib-module/IconButton/IconButton.js +115 -0
  171. package/lib-module/IconButton/index.js +2 -0
  172. package/lib-module/InputLabel/InputLabel.js +131 -0
  173. package/lib-module/InputLabel/LabelContent.js +24 -0
  174. package/lib-module/InputLabel/LabelContent.native.js +16 -0
  175. package/lib-module/InputLabel/index.js +2 -0
  176. package/lib-module/InputSupports/InputSupports.js +88 -0
  177. package/lib-module/InputSupports/index.js +2 -0
  178. package/lib-module/InputSupports/useInputSupports.js +31 -0
  179. package/lib-module/Link/ChevronLink.js +51 -0
  180. package/lib-module/Link/InlinePressable.js +37 -0
  181. package/lib-module/Link/InlinePressable.native.js +85 -0
  182. package/lib-module/Link/Link.js +27 -0
  183. package/lib-module/Link/LinkBase.js +210 -0
  184. package/lib-module/Link/TextButton.js +43 -0
  185. package/lib-module/Link/index.js +5 -0
  186. package/lib-module/List/List.js +55 -0
  187. package/lib-module/List/ListItem.js +213 -0
  188. package/lib-module/List/index.js +5 -0
  189. package/lib-module/Modal/Modal.js +208 -0
  190. package/lib-module/Modal/dictionary.js +9 -0
  191. package/lib-module/Modal/index.js +2 -0
  192. package/lib-module/Notification/Notification.js +196 -0
  193. package/lib-module/Notification/dictionary.js +8 -0
  194. package/lib-module/Notification/index.js +2 -0
  195. package/lib-module/Pagination/PageButton.js +65 -0
  196. package/lib-module/Pagination/Pagination.js +140 -0
  197. package/lib-module/Pagination/SideButton.js +103 -0
  198. package/lib-module/Pagination/dictionary.js +18 -0
  199. package/lib-module/Pagination/index.js +2 -0
  200. package/lib-module/Pagination/usePagination.js +72 -0
  201. package/lib-module/Progress/Progress.js +85 -0
  202. package/lib-module/Progress/ProgressBar.js +134 -0
  203. package/lib-module/Progress/ProgressBarBackground.js +41 -0
  204. package/lib-module/Progress/index.js +4 -0
  205. package/lib-module/Radio/Radio.js +263 -0
  206. package/lib-module/Radio/RadioButton.js +128 -0
  207. package/lib-module/Radio/RadioGroup.js +225 -0
  208. package/lib-module/Radio/RadioInput.js +60 -0
  209. package/lib-module/Radio/RadioInput.native.js +6 -0
  210. package/lib-module/Radio/index.js +3 -0
  211. package/lib-module/RadioCard/RadioCard.js +218 -0
  212. package/lib-module/RadioCard/RadioCardGroup.js +232 -0
  213. package/lib-module/RadioCard/index.js +3 -0
  214. package/lib-module/Search/Search.js +233 -0
  215. package/lib-module/Search/dictionary.js +12 -0
  216. package/lib-module/Search/index.js +2 -0
  217. package/lib-module/Select/Group.js +20 -0
  218. package/lib-module/Select/Group.native.js +14 -0
  219. package/lib-module/Select/Item.js +17 -0
  220. package/lib-module/Select/Item.native.js +9 -0
  221. package/lib-module/Select/Picker.js +67 -0
  222. package/lib-module/Select/Picker.native.js +110 -0
  223. package/lib-module/Select/Select.js +317 -0
  224. package/lib-module/Select/index.js +6 -0
  225. package/lib-module/SideNav/Item.js +139 -0
  226. package/lib-module/SideNav/ItemContent.js +45 -0
  227. package/lib-module/SideNav/ItemsGroup.js +115 -0
  228. package/lib-module/SideNav/SideNav.js +133 -0
  229. package/lib-module/SideNav/index.js +1 -0
  230. package/lib-module/Skeleton/Skeleton.js +117 -0
  231. package/lib-module/Skeleton/index.js +2 -0
  232. package/lib-module/Skeleton/skeleton.constant.js +3 -0
  233. package/lib-module/Skeleton/skeletonWebAnimation.js +18 -0
  234. package/lib-module/Skeleton/useSkeletonNativeAnimation.js +24 -0
  235. package/lib-module/Spacer/Spacer.js +97 -0
  236. package/lib-module/Spacer/index.js +2 -0
  237. package/lib-module/StackView/StackView.js +124 -0
  238. package/lib-module/StackView/StackWrap.js +48 -0
  239. package/lib-module/StackView/StackWrap.native.js +3 -0
  240. package/lib-module/StackView/StackWrapBox.js +114 -0
  241. package/lib-module/StackView/StackWrapGap.js +58 -0
  242. package/lib-module/StackView/common.js +32 -0
  243. package/lib-module/StackView/getStackedContent.js +123 -0
  244. package/lib-module/StackView/index.js +5 -0
  245. package/lib-module/StepTracker/Step.js +229 -0
  246. package/lib-module/StepTracker/StepTracker.js +175 -0
  247. package/lib-module/StepTracker/dictionary.js +10 -0
  248. package/lib-module/StepTracker/index.js +2 -0
  249. package/lib-module/Tabs/Tabs.js +113 -0
  250. package/lib-module/Tabs/TabsItem.js +215 -0
  251. package/lib-module/Tabs/index.js +2 -0
  252. package/lib-module/Tags/Tags.js +238 -0
  253. package/lib-module/Tags/index.js +2 -0
  254. package/lib-module/TextInput/TextArea.js +88 -0
  255. package/lib-module/TextInput/TextInput.js +60 -0
  256. package/lib-module/TextInput/TextInputBase.js +233 -0
  257. package/lib-module/TextInput/index.js +3 -0
  258. package/lib-module/TextInput/propTypes.js +31 -0
  259. package/lib-module/ThemeProvider/ThemeProvider.js +35 -0
  260. package/lib-module/ThemeProvider/index.js +6 -0
  261. package/lib-module/ThemeProvider/useSetTheme.js +22 -0
  262. package/lib-module/ThemeProvider/useTheme.js +14 -0
  263. package/lib-module/ThemeProvider/useThemeTokens.js +105 -0
  264. package/lib-module/ThemeProvider/utils/index.js +2 -0
  265. package/lib-module/ThemeProvider/utils/styles.js +174 -0
  266. package/lib-module/ThemeProvider/utils/theme-tokens.js +151 -0
  267. package/lib-module/ToggleSwitch/ToggleSwitch.js +224 -0
  268. package/lib-module/ToggleSwitch/ToggleSwitchGroup.js +202 -0
  269. package/lib-module/ToggleSwitch/index.js +3 -0
  270. package/lib-module/Tooltip/Backdrop.js +52 -0
  271. package/lib-module/Tooltip/Backdrop.native.js +43 -0
  272. package/lib-module/Tooltip/Tooltip.js +332 -0
  273. package/lib-module/Tooltip/dictionary.js +8 -0
  274. package/lib-module/Tooltip/getTooltipPosition.js +164 -0
  275. package/lib-module/Tooltip/index.js +2 -0
  276. package/lib-module/TooltipButton/TooltipButton.js +71 -0
  277. package/lib-module/TooltipButton/index.js +2 -0
  278. package/lib-module/Typography/Typography.js +118 -0
  279. package/lib-module/Typography/index.js +2 -0
  280. package/lib-module/ViewportProvider/ViewportProvider.js +28 -0
  281. package/lib-module/ViewportProvider/index.js +3 -0
  282. package/lib-module/ViewportProvider/useViewport.js +3 -0
  283. package/lib-module/ViewportProvider/useViewportListener.js +43 -0
  284. package/lib-module/index.js +48 -0
  285. package/lib-module/utils/a11y/index.js +2 -0
  286. package/lib-module/utils/a11y/semantics.js +154 -0
  287. package/lib-module/utils/a11y/textSize.js +34 -0
  288. package/lib-module/utils/animation/index.js +2 -0
  289. package/lib-module/utils/animation/useVerticalExpandAnimation.js +49 -0
  290. package/lib-module/utils/children.js +118 -0
  291. package/lib-module/utils/index.js +15 -0
  292. package/lib-module/utils/info/index.js +7 -0
  293. package/lib-module/utils/info/platform/index.js +11 -0
  294. package/lib-module/utils/info/platform/platform.android.js +1 -0
  295. package/lib-module/utils/info/platform/platform.ios.js +1 -0
  296. package/lib-module/utils/info/platform/platform.js +1 -0
  297. package/lib-module/utils/info/platform/platform.native.js +4 -0
  298. package/lib-module/utils/info/versions.js +5 -0
  299. package/lib-module/utils/input.js +180 -0
  300. package/lib-module/utils/pressability.js +97 -0
  301. package/lib-module/utils/props/a11yProps.js +140 -0
  302. package/lib-module/utils/props/clickProps.js +25 -0
  303. package/lib-module/utils/props/componentPropType.js +63 -0
  304. package/lib-module/utils/props/copyPropTypes.js +2 -0
  305. package/lib-module/utils/props/getPropSelector.js +6 -0
  306. package/lib-module/utils/props/hrefAttrsProp.js +30 -0
  307. package/lib-module/utils/props/index.js +16 -0
  308. package/lib-module/utils/props/inputSupportsProps.js +54 -0
  309. package/lib-module/utils/props/linkProps.js +47 -0
  310. package/lib-module/utils/props/paddingProp.js +9 -0
  311. package/lib-module/utils/props/pressProps.js +42 -0
  312. package/lib-module/utils/props/rectProp.js +9 -0
  313. package/lib-module/utils/props/responsiveProps.js +30 -0
  314. package/lib-module/utils/props/selectSystemProps.js +24 -0
  315. package/lib-module/utils/props/spacingProps.js +56 -0
  316. package/lib-module/utils/props/tokens.js +120 -0
  317. package/lib-module/utils/props/variantProp.js +18 -0
  318. package/lib-module/utils/props/viewProps.js +22 -0
  319. package/lib-module/utils/ssr.js +35 -0
  320. package/lib-module/utils/useCopy.js +42 -0
  321. package/lib-module/utils/useHash.js +44 -0
  322. package/lib-module/utils/useHash.native.js +7 -0
  323. package/lib-module/utils/useResponsiveProp.js +47 -0
  324. package/lib-module/utils/useSpacingScale.js +123 -0
  325. package/lib-module/utils/useUniqueId.js +12 -0
  326. package/lib-module/utils/withLinkRouter.js +82 -0
  327. package/package.json +9 -5
  328. package/src/A11yText/index.jsx +7 -3
  329. package/src/ActivityIndicator/Spinner.jsx +56 -44
  330. package/src/ActivityIndicator/Spinner.native.jsx +20 -12
  331. package/src/ActivityIndicator/index.jsx +1 -1
  332. package/src/Box/Box.jsx +15 -13
  333. package/src/Button/Button.jsx +1 -1
  334. package/src/Button/ButtonBase.jsx +20 -12
  335. package/src/Button/ButtonGroup.jsx +17 -8
  336. package/src/Button/ButtonLink.jsx +1 -1
  337. package/src/Button/propTypes.js +2 -1
  338. package/src/Card/Card.jsx +7 -4
  339. package/src/Card/CardBase.jsx +6 -5
  340. package/src/Card/PressableCardBase.jsx +16 -14
  341. package/src/Checkbox/Checkbox.jsx +12 -7
  342. package/src/Divider/Divider.jsx +19 -12
  343. package/src/ExpandCollapse/Control.jsx +12 -7
  344. package/src/ExpandCollapse/ExpandCollapse.jsx +13 -3
  345. package/src/ExpandCollapse/Panel.jsx +15 -5
  346. package/src/Feedback/Feedback.jsx +13 -3
  347. package/src/Fieldset/Fieldset.jsx +1 -1
  348. package/src/FlexGrid/FlexGrid.jsx +11 -5
  349. package/src/FlexGrid/helpers/index.js +1 -3
  350. package/src/HorizontalScroll/HorizontalScroll.jsx +12 -5
  351. package/src/IconButton/IconButton.jsx +18 -12
  352. package/src/InputLabel/InputLabel.jsx +16 -2
  353. package/src/InputSupports/InputSupports.jsx +1 -1
  354. package/src/Link/LinkBase.jsx +15 -12
  355. package/src/List/List.jsx +12 -5
  356. package/src/List/ListItem.jsx +16 -2
  357. package/src/Modal/Modal.jsx +63 -50
  358. package/src/Notification/Notification.jsx +17 -3
  359. package/src/Pagination/PageButton.jsx +3 -2
  360. package/src/Pagination/Pagination.jsx +38 -4
  361. package/src/Pagination/SideButton.jsx +2 -2
  362. package/src/Progress/Progress.jsx +5 -3
  363. package/src/Progress/ProgressBar.jsx +8 -6
  364. package/src/Radio/Radio.jsx +13 -7
  365. package/src/Radio/RadioButton.jsx +13 -3
  366. package/src/Radio/RadioGroup.jsx +14 -2
  367. package/src/RadioCard/RadioCard.jsx +9 -6
  368. package/src/RadioCard/RadioCardGroup.jsx +16 -4
  369. package/src/Search/Search.jsx +15 -3
  370. package/src/Select/Select.jsx +21 -7
  371. package/src/SideNav/Item.jsx +15 -7
  372. package/src/SideNav/SideNav.jsx +13 -2
  373. package/src/Skeleton/Skeleton.jsx +55 -43
  374. package/src/Spacer/Spacer.jsx +10 -18
  375. package/src/StackView/StackView.jsx +13 -12
  376. package/src/StackView/StackWrapBox.jsx +12 -12
  377. package/src/StackView/StackWrapGap.jsx +9 -7
  378. package/src/StackView/getStackedContent.jsx +1 -1
  379. package/src/StepTracker/Step.jsx +7 -4
  380. package/src/StepTracker/StepTracker.jsx +8 -8
  381. package/src/Tabs/Tabs.jsx +63 -23
  382. package/src/Tabs/TabsItem.jsx +22 -14
  383. package/src/Tags/Tags.jsx +16 -7
  384. package/src/TextInput/TextArea.jsx +20 -8
  385. package/src/TextInput/TextInput.jsx +20 -8
  386. package/src/TextInput/TextInputBase.jsx +13 -3
  387. package/src/ThemeProvider/useThemeTokens.js +3 -3
  388. package/src/ThemeProvider/utils/theme-tokens.js +3 -3
  389. package/src/ToggleSwitch/ToggleSwitch.jsx +104 -41
  390. package/src/ToggleSwitch/ToggleSwitchGroup.jsx +211 -0
  391. package/src/ToggleSwitch/index.js +2 -1
  392. package/src/Tooltip/Tooltip.jsx +13 -3
  393. package/src/TooltipButton/TooltipButton.jsx +6 -4
  394. package/src/Typography/Typography.jsx +10 -6
  395. package/src/index.js +2 -2
  396. package/src/utils/a11y/semantics.js +3 -2
  397. package/src/utils/children.jsx +2 -1
  398. package/src/utils/index.js +3 -1
  399. package/src/utils/pressability.js +1 -1
  400. package/src/utils/props/a11yProps.js +151 -0
  401. package/src/utils/props/clickProps.js +31 -0
  402. package/src/utils/props/componentPropType.js +67 -0
  403. package/src/utils/props/copyPropTypes.js +3 -0
  404. package/src/utils/props/getPropSelector.js +14 -0
  405. package/src/utils/props/hrefAttrsProp.js +25 -0
  406. package/src/utils/props/index.js +16 -0
  407. package/src/{InputSupports/propTypes.js → utils/props/inputSupportsProps.js} +2 -4
  408. package/src/utils/props/linkProps.js +43 -0
  409. package/src/utils/props/paddingProp.js +10 -0
  410. package/src/utils/props/pressProps.js +45 -0
  411. package/src/utils/props/rectProp.js +10 -0
  412. package/src/utils/props/responsiveProps.js +30 -0
  413. package/src/utils/props/selectSystemProps.js +25 -0
  414. package/src/utils/props/spacingProps.js +58 -0
  415. package/src/utils/props/tokens.js +150 -0
  416. package/src/utils/props/variantProp.js +20 -0
  417. package/src/utils/props/viewProps.js +23 -0
  418. package/src/utils/ssr.js +35 -0
  419. package/src/utils/useResponsiveProp.js +1 -1
  420. package/src/utils/useSpacingScale.js +4 -4
  421. package/src/utils/withLinkRouter.jsx +68 -0
  422. package/stories/TextInput/TextArea.stories.jsx +1 -0
  423. package/stories/ToggleSwitch/ToggleSwitch.stories.jsx +5 -1
  424. package/stories/ToggleSwitch/ToggleSwitchGroup.stories.jsx +81 -0
  425. package/.ultra.cache.json +0 -1
  426. package/lib/utils/a11y/propTypes.js +0 -61
  427. package/lib/utils/a11y/propTypes.native.js +0 -47
  428. package/lib/utils/propTypes.js +0 -541
  429. package/release-context.json +0 -7
  430. package/src/utils/a11y/propTypes.js +0 -61
  431. package/src/utils/a11y/propTypes.native.js +0 -39
  432. package/src/utils/propTypes.js +0 -531
@@ -3,17 +3,23 @@ import PropTypes from 'prop-types'
3
3
  import { Text, Platform, StyleSheet } from 'react-native'
4
4
  import {
5
5
  a11yProps,
6
+ clickProps,
7
+ getTokensPropType,
6
8
  hrefAttrsProp,
7
- variantProp,
8
9
  linkProps,
9
- getTokensPropType
10
- } from '../utils/propTypes'
10
+ selectSystemProps,
11
+ variantProp,
12
+ viewProps
13
+ } from '../utils/props'
11
14
  import { resolvePressableTokens } from '../utils/pressability'
15
+ import { withLinkRouter } from '../utils'
12
16
 
13
17
  import InlinePressable from './InlinePressable'
14
18
  import { applyTextStyles, applyOuterBorder } from '../ThemeProvider'
15
19
  import { IconText, iconComponentPropTypes } from '../Icon'
16
20
 
21
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, linkProps, viewProps])
22
+
17
23
  const selectOuterBorderStyles = ({
18
24
  outerBorderColor,
19
25
  outerBorderWidth,
@@ -92,7 +98,6 @@ const LinkBase = forwardRef(
92
98
  (
93
99
  {
94
100
  href,
95
- onPress,
96
101
  icon,
97
102
  iconPosition = icon ? 'left' : undefined,
98
103
  iconProps,
@@ -100,13 +105,13 @@ const LinkBase = forwardRef(
100
105
  tokens = {},
101
106
  children,
102
107
  accessibilityRole = 'link',
103
- dataSet,
104
- ...props
108
+ ...rawRest
105
109
  },
106
110
  ref
107
111
  ) => {
112
+ const { onPress, ...props } = clickProps.toPressProps(rawRest)
108
113
  const { hrefAttrs, rest } = hrefAttrsProp.bundle(props)
109
- const linkPropSet = linkProps.select({
114
+ const selectedProps = selectProps({
110
115
  accessibilityRole,
111
116
  href,
112
117
  onPress: linkProps.handleHref({ href, onPress }),
@@ -122,9 +127,8 @@ const LinkBase = forwardRef(
122
127
 
123
128
  return (
124
129
  <InlinePressable
125
- {...linkPropSet}
130
+ {...selectedProps}
126
131
  ref={ref}
127
- dataSet={dataSet}
128
132
  style={(linkState) => {
129
133
  const themeTokens = resolveLinkTokens(linkState)
130
134
  const outerBorderStyles = selectOuterBorderStyles(themeTokens)
@@ -162,8 +166,7 @@ const LinkBase = forwardRef(
162
166
  LinkBase.displayName = 'LinkBase'
163
167
 
164
168
  LinkBase.propTypes = {
165
- ...a11yProps.types,
166
- ...linkProps.types,
169
+ ...selectedSystemPropTypes,
167
170
  tokens: getTokensPropType('Link'),
168
171
  variant: variantProp.propType,
169
172
  /**
@@ -200,4 +203,4 @@ const staticStyles = StyleSheet.create({
200
203
  }
201
204
  })
202
205
 
203
- export default LinkBase
206
+ export default withLinkRouter(LinkBase)
package/src/List/List.jsx CHANGED
@@ -1,17 +1,24 @@
1
1
  import React, { cloneElement, forwardRef, Children } from 'react'
2
2
  import { View, Platform } from 'react-native'
3
3
  import PropTypes from 'prop-types'
4
- import { getTokensPropType, variantProp, componentPropType } from '../utils'
5
- import { a11yProps } from '../utils/propTypes'
4
+ import {
5
+ a11yProps,
6
+ componentPropType,
7
+ getTokensPropType,
8
+ selectSystemProps,
9
+ variantProp,
10
+ viewProps
11
+ } from '../utils'
6
12
  import ListItem from './ListItem'
7
13
 
14
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
15
+
8
16
  /**
9
17
  * An unordered List component has a child a ListItem that
10
18
  * allows icon, dividers and customized typography
11
19
  */
12
20
  const List = forwardRef(({ children, showDivider, tokens, variant, ...rest }, ref) => {
13
21
  const accessibilityRole = Platform.select({ web: 'list', default: 'none' })
14
- const a11y = a11yProps.select(rest)
15
22
  const items = Children.map(children, (child, index) => {
16
23
  if (child.type.name === ListItem.name) {
17
24
  return cloneElement(child, {
@@ -25,7 +32,7 @@ const List = forwardRef(({ children, showDivider, tokens, variant, ...rest }, re
25
32
  })
26
33
 
27
34
  return (
28
- <View ref={ref} accessibilityRole={accessibilityRole} {...a11y}>
35
+ <View ref={ref} accessibilityRole={accessibilityRole} {...selectProps(rest)}>
29
36
  {items}
30
37
  </View>
31
38
  )
@@ -33,7 +40,7 @@ const List = forwardRef(({ children, showDivider, tokens, variant, ...rest }, re
33
40
  List.displayName = 'List'
34
41
 
35
42
  List.propTypes = {
36
- ...a11yProps.types,
43
+ ...selectedSystemPropTypes,
37
44
  tokens: getTokensPropType('List'),
38
45
  variant: variantProp.propType,
39
46
  children: componentPropType('ListItem'),
@@ -2,7 +2,16 @@ import React, { forwardRef } from 'react'
2
2
  import { View, Platform, StyleSheet } from 'react-native'
3
3
  import PropTypes from 'prop-types'
4
4
  import { useThemeTokens, applyTextStyles } from '../ThemeProvider'
5
- import { getTokensPropType, variantProp, wrapStringsInText } from '../utils'
5
+ import {
6
+ a11yProps,
7
+ getTokensPropType,
8
+ selectSystemProps,
9
+ variantProp,
10
+ viewProps,
11
+ wrapStringsInText
12
+ } from '../utils'
13
+
14
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
6
15
 
7
16
  const selectBulletStyles = ({ itemBulletWidth, itemBulletHeight, itemBulletColor }) => ({
8
17
  width: itemBulletWidth,
@@ -53,7 +62,10 @@ const selectDividerStyles = ({ dividerColor, dividerSize, interItemMarginWithDiv
53
62
  * ListItem is responsible for rendering icon or a bullet as side item
54
63
  */
55
64
  const ListItem = forwardRef(
56
- ({ tokens, variant, icon, iconColor, iconSize, showDivider, children, isLastItem }, ref) => {
65
+ (
66
+ { tokens, variant, icon, iconColor, iconSize, showDivider, children, isLastItem, ...rest },
67
+ ref
68
+ ) => {
57
69
  const themeTokens = useThemeTokens('List', tokens, variant)
58
70
 
59
71
  const itemStyles = selectItemStyles(themeTokens)
@@ -118,6 +130,7 @@ const ListItem = forwardRef(
118
130
  ref={ref}
119
131
  style={[staticStyles.itemContainer, getContainerStyle()]}
120
132
  accessibilityRole={accessibilityRole}
133
+ {...selectProps(rest)}
121
134
  >
122
135
  {renderMarker()}
123
136
  {renderItem()}
@@ -137,6 +150,7 @@ const staticStyles = StyleSheet.create({
137
150
  })
138
151
 
139
152
  ListItem.propTypes = {
153
+ ...selectedSystemPropTypes,
140
154
  tokens: getTokensPropType('List'),
141
155
  variant: variantProp.propType,
142
156
  children: PropTypes.node.isRequired,
@@ -9,11 +9,21 @@ import {
9
9
 
10
10
  import PropTypes from 'prop-types'
11
11
  import { applyShadowToken, useThemeTokens } from '../ThemeProvider'
12
- import { getTokensPropType, useCopy, copyPropTypes, variantProp } from '../utils'
12
+ import {
13
+ a11yProps,
14
+ copyPropTypes,
15
+ getTokensPropType,
16
+ selectSystemProps,
17
+ useCopy,
18
+ variantProp,
19
+ viewProps
20
+ } from '../utils'
13
21
  import { useViewport } from '../ViewportProvider'
14
22
  import ButtonBase from '../Button/ButtonBase'
15
23
  import dictionary from './dictionary'
16
24
 
25
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
26
+
17
27
  const selectContainerStyles = ({
18
28
  containerPaddingLeft,
19
29
  containerPaddingRight,
@@ -79,72 +89,75 @@ const selectCloseIconProps = ({ closeIconSize, closeIconColor }) => ({
79
89
  * - Don’t use modals to reinforce or repeat information already available in the parent page or view
80
90
  * - Don’t use modals consecutively
81
91
  */
82
- const Modal = forwardRef(({ children, isOpen, onClose, maxWidth, tokens, variant, copy }, ref) => {
83
- const viewport = useViewport()
84
- const themeTokens = useThemeTokens('Modal', tokens, variant, { viewport, maxWidth })
92
+ const Modal = forwardRef(
93
+ ({ children, isOpen, onClose, maxWidth, tokens, variant, copy, ...rest }, ref) => {
94
+ const viewport = useViewport()
95
+ const themeTokens = useThemeTokens('Modal', tokens, variant, { viewport, maxWidth })
85
96
 
86
- const { closeIcon: CloseIconComponent } = themeTokens
97
+ const { closeIcon: CloseIconComponent } = themeTokens
87
98
 
88
- const getCopy = useCopy({ dictionary, copy })
89
- const closeLabel = getCopy('closeButton')
99
+ const getCopy = useCopy({ dictionary, copy })
100
+ const closeLabel = getCopy('closeButton')
90
101
 
91
- const handleClose = () => {
92
- if (typeof onClose === 'function') onClose()
93
- }
102
+ const handleClose = () => {
103
+ if (typeof onClose === 'function') onClose()
104
+ }
94
105
 
95
- const handleKeyUp = (event) => {
96
- if (event.key === 'Escape') onClose()
97
- }
106
+ const handleKeyUp = (event) => {
107
+ if (event.key === 'Escape') onClose()
108
+ }
98
109
 
99
- if (!isOpen) {
100
- return null
101
- }
110
+ if (!isOpen) {
111
+ return null
112
+ }
102
113
 
103
- // TODO: replace the close button with IconButton when implemented (https://github.com/telus/universal-design-system/issues/281)
104
- return (
105
- <NativeModal transparent>
106
- <View style={[staticStyles.positioningContainer]}>
107
- <View
108
- style={[staticStyles.sizingContainer, selectContainerStyles(themeTokens)]}
109
- pointerEvents="box-none" // don't capture backdrop press events
110
- >
114
+ // TODO: replace the close button with IconButton when implemented (https://github.com/telus/universal-design-system/issues/281)
115
+ return (
116
+ <NativeModal transparent {...selectProps(rest)}>
117
+ <View style={[staticStyles.positioningContainer]}>
111
118
  <View
112
- ref={ref}
113
- style={[staticStyles.modal, selectModalStyles(themeTokens)]}
114
- onKeyUp={handleKeyUp}
119
+ style={[staticStyles.sizingContainer, selectContainerStyles(themeTokens)]}
120
+ pointerEvents="box-none" // don't capture backdrop press events
115
121
  >
116
122
  <View
117
- style={[
118
- staticStyles.closeButtonContainer,
119
- selectCloseButtonContainerStyles(themeTokens)
120
- ]}
123
+ ref={ref}
124
+ style={[staticStyles.modal, selectModalStyles(themeTokens)]}
125
+ onKeyUp={handleKeyUp}
121
126
  >
122
- <ButtonBase
123
- onPress={handleClose}
124
- accessibilityRole="button"
125
- accessibilityLabel={closeLabel}
127
+ <View
128
+ style={[
129
+ staticStyles.closeButtonContainer,
130
+ selectCloseButtonContainerStyles(themeTokens)
131
+ ]}
126
132
  >
127
- {
128
- // TODO: add close button interactive states after IconButton is done
129
- () => <CloseIconComponent {...selectCloseIconProps(themeTokens)} />
130
- }
131
- </ButtonBase>
133
+ <ButtonBase
134
+ onPress={handleClose}
135
+ accessibilityRole="button"
136
+ accessibilityLabel={closeLabel}
137
+ >
138
+ {
139
+ // TODO: add close button interactive states after IconButton is done
140
+ () => <CloseIconComponent {...selectCloseIconProps(themeTokens)} />
141
+ }
142
+ </ButtonBase>
143
+ </View>
144
+ {children}
132
145
  </View>
133
- {children}
134
146
  </View>
147
+ {/* when a modal becomes open its first focusable element is being automatically focused */}
148
+ {/* and we prefer the close button over backdrop */}
149
+ <TouchableWithoutFeedback onPress={handleClose}>
150
+ <View style={[staticStyles.backdrop, selectBackdropStyles(themeTokens)]} />
151
+ </TouchableWithoutFeedback>
135
152
  </View>
136
- {/* when a modal becomes open its first focusable element is being automatically focused */}
137
- {/* and we prefer the close button over backdrop */}
138
- <TouchableWithoutFeedback onPress={handleClose}>
139
- <View style={[staticStyles.backdrop, selectBackdropStyles(themeTokens)]} />
140
- </TouchableWithoutFeedback>
141
- </View>
142
- </NativeModal>
143
- )
144
- })
153
+ </NativeModal>
154
+ )
155
+ }
156
+ )
145
157
  Modal.displayName = 'Modal'
146
158
 
147
159
  Modal.propTypes = {
160
+ ...selectedSystemPropTypes,
148
161
  children: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]),
149
162
  copy: copyPropTypes,
150
163
  isOpen: PropTypes.bool,
@@ -3,11 +3,20 @@ import { StyleSheet, Text, View } from 'react-native'
3
3
 
4
4
  import PropTypes from 'prop-types'
5
5
  import { applyTextStyles, useThemeTokens } from '../ThemeProvider'
6
- import { getTokensPropType, selectTokens, variantProp } from '../utils'
6
+ import {
7
+ a11yProps,
8
+ getTokensPropType,
9
+ selectSystemProps,
10
+ selectTokens,
11
+ variantProp,
12
+ viewProps
13
+ } from '../utils'
7
14
  import ButtonBase from '../Button/ButtonBase'
8
15
  import useCopy from '../utils/useCopy'
9
16
  import dictionary from './dictionary'
10
17
 
18
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
19
+
11
20
  const selectContainerStyles = (tokens) => ({ ...tokens })
12
21
 
13
22
  const selectTextStyles = (tokens) => applyTextStyles(selectTokens('Typography', tokens))
@@ -82,7 +91,7 @@ const selectDismissButtonContainerStyles = ({ dismissButtonGap }) => ({
82
91
  * Show system notifications at the top of the page, below the navigation, and expands the full-width of the viewport
83
92
  */
84
93
  const Notification = forwardRef(
85
- ({ children, system, dismissible, copy = 'en', tokens, variant }, ref) => {
94
+ ({ children, system, dismissible, copy = 'en', tokens, variant, ...rest }, ref) => {
86
95
  const [isDismissed, setIsDismissed] = useState(false)
87
96
  const themeTokens = useThemeTokens('Notification', tokens, variant, { system })
88
97
  const getCopy = useCopy({ dictionary, copy })
@@ -102,7 +111,11 @@ const Notification = forwardRef(
102
111
 
103
112
  // TODO: replace the dismiss button with IconButton when implemented (https://github.com/telus/universal-design-system/issues/281)
104
113
  return (
105
- <View ref={ref} style={[staticStyles.container, selectContainerStyles(themeTokens)]}>
114
+ <View
115
+ ref={ref}
116
+ style={[staticStyles.container, selectContainerStyles(themeTokens)]}
117
+ {...selectProps(rest)}
118
+ >
106
119
  {IconComponent && (
107
120
  <View style={selectIconContainerStyles(themeTokens)}>
108
121
  <IconComponent {...selectIconProps(themeTokens)} />
@@ -129,6 +142,7 @@ const Notification = forwardRef(
129
142
  Notification.displayName = 'Notification'
130
143
 
131
144
  Notification.propTypes = {
145
+ ...selectedSystemPropTypes,
132
146
  /**
133
147
  * Content of the `Notification`.
134
148
  */
@@ -10,7 +10,8 @@ import {
10
10
  hrefAttrsProp,
11
11
  linkProps,
12
12
  selectTokens,
13
- variantProp
13
+ variantProp,
14
+ withLinkRouter
14
15
  } from '../utils'
15
16
 
16
17
  import useCopy from '../utils/useCopy'
@@ -66,4 +67,4 @@ PageButton.propTypes = {
66
67
  tokens: getTokensPropType('PaginationPageButton')
67
68
  }
68
69
 
69
- export default PageButton
70
+ export default withLinkRouter(PageButton)
@@ -1,7 +1,16 @@
1
1
  import React, { forwardRef } from 'react'
2
2
  import { View, Text, StyleSheet } from 'react-native'
3
3
 
4
- import { componentPropType, copyPropTypes, getTokensPropType, variantProp } from '../utils'
4
+ import {
5
+ a11yProps,
6
+ componentPropType,
7
+ copyPropTypes,
8
+ getTokensPropType,
9
+ selectSystemProps,
10
+ variantProp,
11
+ viewProps,
12
+ withLinkRouter
13
+ } from '../utils'
5
14
  import { applyTextStyles, useThemeTokens } from '../ThemeProvider'
6
15
  import { useViewport } from '../ViewportProvider'
7
16
  import Box from '../Box'
@@ -10,6 +19,8 @@ import usePagination from './usePagination'
10
19
  import PageButton from './PageButton'
11
20
  import SideButton from './SideButton'
12
21
 
22
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
23
+
13
24
  const selectTextStyles = ({ color, fontName, fontSize, fontWeight, lineHeight }) =>
14
25
  applyTextStyles({
15
26
  color,
@@ -20,7 +31,20 @@ const selectTextStyles = ({ color, fontName, fontSize, fontWeight, lineHeight })
20
31
  })
21
32
 
22
33
  const Pagination = forwardRef(
23
- ({ children, copy = 'en', variant, tokens, sideButtonVariant, sideButtonTokens }, ref) => {
34
+ (
35
+ {
36
+ children,
37
+ copy = 'en',
38
+ variant,
39
+ tokens,
40
+ sideButtonVariant,
41
+ sideButtonTokens,
42
+ LinkRouter,
43
+ linkRouterProps,
44
+ ...rest
45
+ },
46
+ ref
47
+ ) => {
24
48
  const viewport = useViewport()
25
49
  const { truncateAbove, gap, ...themeTokens } = useThemeTokens('Pagination', tokens, variant, {
26
50
  viewport
@@ -58,16 +82,22 @@ const Pagination = forwardRef(
58
82
  copy={copy}
59
83
  variant={sideButtonVariant}
60
84
  tokens={sideButtonTokens}
85
+ LinkRouter={LinkRouter}
86
+ linkRouterProps={linkRouterProps}
61
87
  />
62
88
  ),
63
- ...items.map((child, itemIndex) => {
89
+ ...items.map((_child, itemIndex) => {
64
90
  const buttonLabel = `${itemIndex + 1}`
65
91
  const itemProps = getItemProps(itemIndex)
92
+ const ItemLinkRouter = itemProps.LinkRouter ?? LinkRouter
93
+ const itemLinkRouterProps = { ...linkRouterProps, ...itemProps.linkRouterProps }
66
94
 
67
95
  if (shouldRenderButton(itemIndex)) {
68
96
  return (
69
97
  <PageButton
70
98
  {...itemProps}
99
+ LinkRouter={ItemLinkRouter}
100
+ linkRouterProps={itemLinkRouterProps}
71
101
  label={buttonLabel}
72
102
  copy={copy}
73
103
  isActive={isItemActive(itemIndex)}
@@ -88,12 +118,14 @@ const Pagination = forwardRef(
88
118
  copy={copy}
89
119
  variant={sideButtonVariant}
90
120
  tokens={sideButtonTokens}
121
+ LinkRouter={LinkRouter}
122
+ linkRouterProps={linkRouterProps}
91
123
  />
92
124
  )
93
125
  ]
94
126
 
95
127
  return (
96
- <View style={staticStyles.container} ref={ref}>
128
+ <View style={staticStyles.container} ref={ref} {...selectProps(rest)}>
97
129
  {buttons
98
130
  // keep the keys in-line with the page numbers regardless of which buttons are actually rendered
99
131
  .map((element, index) => [element, `page-${index + 1}`])
@@ -112,6 +144,8 @@ PageButton.displayName = 'PageButton'
112
144
  Pagination.PageButton = PageButton
113
145
 
114
146
  Pagination.propTypes = {
147
+ ...selectedSystemPropTypes,
148
+ ...withLinkRouter.propTypes,
115
149
  children: componentPropType('PageButton'),
116
150
  copy: copyPropTypes,
117
151
  variant: variantProp.propType,
@@ -7,7 +7,7 @@ import ButtonBase from '../Button/ButtonBase'
7
7
  import { IconText } from '../Icon'
8
8
  import { useThemeTokensCallback } from '../ThemeProvider'
9
9
  import { useViewport } from '../ViewportProvider'
10
- import { copyPropTypes, hrefAttrsProp, linkProps, selectTokens } from '../utils'
10
+ import { copyPropTypes, hrefAttrsProp, linkProps, selectTokens, withLinkRouter } from '../utils'
11
11
 
12
12
  import dictionary from './dictionary'
13
13
  import useCopy from '../utils/useCopy'
@@ -82,4 +82,4 @@ SideButton.propTypes = {
82
82
  ...linkProps.types
83
83
  }
84
84
 
85
- export default SideButton
85
+ export default withLinkRouter(SideButton)
@@ -2,9 +2,10 @@ import React, { forwardRef } from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import { View } from 'react-native'
4
4
 
5
- import { a11yProps } from '../utils/propTypes'
6
5
  import { useThemeTokens } from '../ThemeProvider'
7
- import { getTokensPropType, variantProp } from '../utils'
6
+ import { a11yProps, getTokensPropType, selectSystemProps, variantProp, viewProps } from '../utils'
7
+
8
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
8
9
 
9
10
  const selectProgressStyles = ({
10
11
  backgroundColor,
@@ -53,7 +54,7 @@ const Progress = forwardRef(({ children, tokens, variant, ...rest }, ref) => {
53
54
  const themeTokens = useThemeTokens('Progress', tokens, variant)
54
55
 
55
56
  return (
56
- <View ref={ref} style={selectProgressStyles(themeTokens)} {...a11yProps.select(rest)}>
57
+ <View ref={ref} style={selectProgressStyles(themeTokens)} {...selectProps(rest)}>
57
58
  {children}
58
59
  </View>
59
60
  )
@@ -61,6 +62,7 @@ const Progress = forwardRef(({ children, tokens, variant, ...rest }, ref) => {
61
62
  Progress.displayName = 'Progress'
62
63
 
63
64
  Progress.propTypes = {
65
+ ...selectedSystemPropTypes,
64
66
  /**
65
67
  * Use the `children` prop to supply one or several `ProgressBar`s.
66
68
  */
@@ -3,9 +3,10 @@ import PropTypes from 'prop-types'
3
3
  import { Platform, StyleSheet, View } from 'react-native'
4
4
 
5
5
  import ProgressBarBackground from './ProgressBarBackground'
6
- import { a11yProps } from '../utils/propTypes'
7
6
  import { useThemeTokens } from '../ThemeProvider'
8
- import { getTokensPropType, variantProp } from '../utils'
7
+ import { a11yProps, getTokensPropType, selectSystemProps, variantProp, viewProps } from '../utils'
8
+
9
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
9
10
 
10
11
  const selectBarStyles = (
11
12
  { backgroundColor, borderRadius, outlineWidth, outlineColor },
@@ -60,7 +61,7 @@ const ProgressBar = forwardRef(
60
61
  } else if (percentage > 100) {
61
62
  throw new Error('ProgressBar: `percentage` cannot exceed 100')
62
63
  }
63
- const accessibilityProps = {
64
+ const selectedProps = selectProps({
64
65
  accessibilityRole: 'progressbar',
65
66
  accessibilityValue: {
66
67
  min: 0,
@@ -68,14 +69,14 @@ const ProgressBar = forwardRef(
68
69
  now: percentage,
69
70
  text: `${percentage}%`
70
71
  },
71
- ...a11yProps.select(rest)
72
- }
72
+ ...rest
73
+ })
73
74
 
74
75
  return percentage > 0 ? (
75
76
  <View
76
77
  ref={ref}
77
78
  style={[staticStyles.bar, selectBarStyles(themeTokens, percentage)]}
78
- {...accessibilityProps}
79
+ {...selectedProps}
79
80
  >
80
81
  {children ?? <ProgressBarBackground variant={variant} />}
81
82
  </View>
@@ -85,6 +86,7 @@ const ProgressBar = forwardRef(
85
86
  ProgressBar.displayName = 'ProgressBar'
86
87
 
87
88
  ProgressBar.propTypes = {
89
+ ...selectedSystemPropTypes,
88
90
  /**
89
91
  * Optional children that can be used to customize the progress bar filling.
90
92
  */
@@ -2,15 +2,22 @@ import React, { forwardRef } from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import { Pressable, StyleSheet, Text, View } from 'react-native'
4
4
 
5
- // @todo move `LabelContent` outside of the `InputLabel` and fix
6
- // the issue with the cursor not being pointer on Web
7
5
  import RadioLabel from '../InputLabel/LabelContent'
8
6
  import RadioButton, { selectRadioButtonTokens } from './RadioButton'
9
7
  import { applyShadowToken, applyTextStyles, useThemeTokensCallback } from '../ThemeProvider'
10
- import { getTokensPropType, useInputValue, useUniqueId, variantProp } from '../utils'
11
- import { a11yProps } from '../utils/propTypes'
8
+ import {
9
+ a11yProps,
10
+ getTokensPropType,
11
+ selectSystemProps,
12
+ useInputValue,
13
+ useUniqueId,
14
+ variantProp,
15
+ viewProps
16
+ } from '../utils'
12
17
  import StackView from '../StackView'
13
18
 
19
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
20
+
14
21
  const selectContainerStyles = ({
15
22
  containerBackgroundColor,
16
23
  containerBorderRadius,
@@ -132,7 +139,6 @@ const Radio = forwardRef(
132
139
  // The expected keyboard shortcut for activating a radio is the Space key
133
140
  if (event?.key === ' ') handleChange(event)
134
141
  }
135
- const accessibilityProps = a11yProps.select(rest)
136
142
  const uniqueId = useUniqueId('radio')
137
143
  const inputId = id ?? uniqueId
138
144
 
@@ -144,7 +150,7 @@ const Radio = forwardRef(
144
150
  onPress={handleChange}
145
151
  accessibilityRole="radio"
146
152
  accessibilityState={{ checked: isChecked, disabled: inactive }}
147
- {...accessibilityProps}
153
+ {...selectProps(rest)}
148
154
  >
149
155
  {({ focused: focus, hovered: hover, pressed }) => {
150
156
  const stateTokens = getTokens({ focus, hover, pressed })
@@ -182,7 +188,7 @@ const Radio = forwardRef(
182
188
  Radio.displayName = 'Radio'
183
189
 
184
190
  Radio.propTypes = {
185
- ...a11yProps.propTypes,
191
+ ...selectedSystemPropTypes,
186
192
  /**
187
193
  * Use `checked` for controlled Radio. For uncontrolled Radio, use the `defaultChecked` prop.
188
194
  */
@@ -4,7 +4,15 @@ import { Platform, StyleSheet, View } from 'react-native'
4
4
 
5
5
  import RadioInput from './RadioInput'
6
6
  import { applyOuterBorder, resolveThemeTokens, validateThemeTokens } from '../ThemeProvider'
7
- import { getTokensSetPropType, selectTokens } from '../utils'
7
+ import {
8
+ a11yProps,
9
+ getTokensSetPropType,
10
+ selectSystemProps,
11
+ selectTokens,
12
+ viewProps
13
+ } from '../utils'
14
+
15
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
8
16
 
9
17
  // TODO: roll out a standard approach to token sets
10
18
  // https://github.com/telus/universal-design-system/issues/782
@@ -87,7 +95,8 @@ const RadioButton = forwardRef(
87
95
  isControlled,
88
96
  handleChange,
89
97
  name: inputName,
90
- value
98
+ value,
99
+ ...rest
91
100
  },
92
101
  ref
93
102
  ) => {
@@ -98,7 +107,7 @@ const RadioButton = forwardRef(
98
107
  )
99
108
 
100
109
  return (
101
- <View style={selectOuterBorderStyles(themeTokens)}>
110
+ <View style={selectOuterBorderStyles(themeTokens)} {...selectProps(rest)}>
102
111
  <View
103
112
  style={[staticStyles.defaultInputStyles, selectInputStyles(themeTokens, isChecked)]}
104
113
  testID="Radio-Input"
@@ -124,6 +133,7 @@ const RadioButton = forwardRef(
124
133
  RadioButton.displayName = 'RadioButton'
125
134
 
126
135
  RadioButton.propTypes = {
136
+ ...selectedSystemPropTypes,
127
137
  isChecked: PropTypes.bool,
128
138
  tokens: getTokensSetPropType(tokenKeys, { allowFunction: true }),
129
139
  inactive: PropTypes.bool,