@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
@@ -0,0 +1,82 @@
1
+ import React, { forwardRef } from 'react';
2
+ import PropTypes from 'prop-types'; // Prototype-safe alternative to (linter-forbidden) someObject.hasOwnProperty()
3
+
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+
6
+ const hasOwnProperty = (object, prop) => Object.prototype.hasOwnProperty.call(object, prop);
7
+ /**
8
+ * Higher-order component that has no effect unless an additional prop `LinkRouter` is passed.
9
+ * This may be used to provide custom wrappers for integrations with third party libraries.
10
+ *
11
+ * If LinkRouter is passed, LinkRouter is rendered in place of the main component and is passed:
12
+ *
13
+ * - `linkRouterProps`: an optional object passed alongside LinkRouter, for props needed by the wrapper
14
+ * that are not valid props for the wrapped component.
15
+ * - `Component`: automatically provided, the original component to render inside the wrapper.
16
+ * - `ref`: forwarded `ref` passed down to `Component`
17
+ * - All other props passed to the outer component
18
+ *
19
+ * @example A LinkRouter component to be used with link-like components might look like:
20
+ *
21
+ * ```jsx
22
+ * const LinkLinkRouter = forwardRef(({ Component, linkRouterProps: { to, options }, href, ...rest }, ref) => {
23
+ * const { href: resolvedHref, onClick } = useSomeRouterHook({ to, href, options })
24
+ * return <Component href={resolvedHref} onPress={onClick} {...rest} />
25
+ * })
26
+ * ```
27
+ *
28
+ * Any component that takes href and onPress props may then use this wrapper:
29
+ *
30
+ * ```jsx
31
+ * <Link href={href} LinkRouter={LinkLinkRouter} linkRouterProps={{ to, options }}>Some link</Link>
32
+ * <IconButton icon={SomeIcon} LinkRouter={LinkLinkRouter} linkRouterProps={{ to, options }} ref={iconRef} />
33
+ * ```
34
+ */
35
+
36
+
37
+ const withLinkRouter = Component => {
38
+ const wrappedComponent = /*#__PURE__*/forwardRef(({
39
+ LinkRouter,
40
+ linkRouterProps,
41
+ ...props
42
+ }, ref) => {
43
+ if (!LinkRouter) return /*#__PURE__*/_jsx(Component, { ...props,
44
+ ref: ref
45
+ });
46
+ return /*#__PURE__*/_jsx(LinkRouter, {
47
+ linkRouterProps: linkRouterProps,
48
+ Component: Component,
49
+ ref: ref,
50
+ ...props
51
+ });
52
+ }); // Ensure the returned component has appropriate outer properties set:
53
+
54
+ /* eslint-disable-next-line react/forbid-foreign-prop-types */
55
+
56
+ const {
57
+ displayName,
58
+ name,
59
+ propTypes,
60
+ ...otherProperties
61
+ } = Component; // Apply unique component name as a displayName
62
+
63
+ wrappedComponent.displayName = Component.displayName || Component.name; // Apply proptypes including wrapper props - is safely { ...undefined, ...undefined } in prod
64
+
65
+ wrappedComponent.propTypes = { ...Component.propTypes,
66
+ ...withLinkRouter.propTypes
67
+ }; // Forward any other properties explicitly set e.g. Component.SubComponent
68
+
69
+ Object.keys(otherProperties).forEach(key => {
70
+ // Skip internal React properties from wrappedComponent's forwardRef (render, $$typeof, etc)
71
+ if (hasOwnProperty(Component, key) && !hasOwnProperty(wrappedComponent, key)) {
72
+ wrappedComponent[key] = Component[key];
73
+ }
74
+ });
75
+ return wrappedComponent;
76
+ };
77
+
78
+ withLinkRouter.propTypes = {
79
+ LinkRouter: PropTypes.elementType,
80
+ linkRouterProps: PropTypes.object
81
+ };
82
+ export default withLinkRouter;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telus-uds/components-base",
3
- "version": "1.1.0",
3
+ "version": "1.3.1",
4
4
  "description": "Base components",
5
5
  "keywords": [
6
6
  "base"
@@ -9,7 +9,9 @@
9
9
  "homepage": "https://github.com/telus/universal-design-system#readme",
10
10
  "license": "UNLICENSED",
11
11
  "main": "lib/index.js",
12
+ "module": "lib-module/index.js",
12
13
  "react-native": "src/index.js",
14
+ "sideEffects": false,
13
15
  "directories": {
14
16
  "lib": "lib",
15
17
  "test": "__tests__"
@@ -24,7 +26,9 @@
24
26
  "lint:fix": "telus-standard --fix",
25
27
  "format": "prettier --write .",
26
28
  "build": "yarn build:code && yarn build:docs",
27
- "build:code": "babel src -d lib",
29
+ "build:main": "babel src -d lib",
30
+ "build:module": "babel src -d lib-module --env-name module",
31
+ "build:code": "yarn build:main && yarn build:module",
28
32
  "build:docs": "babel-node --plugins=react-docgen-alpha generate-component-docs.js",
29
33
  "storybook": "start-storybook",
30
34
  "dev": "yarn build:code --watch",
@@ -46,7 +50,7 @@
46
50
  "react-native-web": "^0.17.0"
47
51
  },
48
52
  "devDependencies": {
49
- "@telus-uds/browserslist-config": "^1.0.0",
53
+ "@telus-uds/browserslist-config": "^1.0.1",
50
54
  "@testing-library/jest-native": "^4.0.1",
51
55
  "@testing-library/react-hooks": "^7.0.1",
52
56
  "@testing-library/react-native": "^7.2.0",
@@ -54,8 +58,8 @@
54
58
  },
55
59
  "dependencies": {
56
60
  "airbnb-prop-types": "^2.16.0",
57
- "@telus-uds/system-constants": "^1.0.1-prerelease.0",
58
- "@telus-uds/system-theme-tokens": "^1.1.0",
61
+ "@telus-uds/system-constants": "^1.0.2",
62
+ "@telus-uds/system-theme-tokens": "^1.2.2",
59
63
  "lodash.debounce": "^4.0.8",
60
64
  "lodash.merge": "^4.6.2",
61
65
  "prop-types": "^15.7.2",
@@ -2,7 +2,9 @@ import React, { forwardRef } from 'react'
2
2
  import { Platform, StyleSheet, View } from 'react-native'
3
3
  import PropTypes from 'prop-types'
4
4
 
5
- import { a11yProps } from '../utils/propTypes'
5
+ import { a11yProps, selectSystemProps, viewProps } from '../utils/props'
6
+
7
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
6
8
 
7
9
  /**
8
10
  * A11yText is a zero-size invisible element that adds text to be read by screen readers.
@@ -11,7 +13,7 @@ import { a11yProps } from '../utils/propTypes'
11
13
  * as a sibling to blocks of text like paragraphs and interactive elements like buttons.
12
14
  */
13
15
  const A11yText = forwardRef(({ text, heading, ...rest }, ref) => {
14
- const a11y = a11yProps.select({
16
+ const selectedProps = selectProps({
15
17
  // On iOS, needs `accessible` to be true to be focusable without non-a11y content.
16
18
  // On Web, `accessible` causes RNW to set attributes that may make the element be treated as a group.
17
19
  // On Android, may cause this to be skipped when with `<Text>` siblings in an `accessible` View,
@@ -21,12 +23,14 @@ const A11yText = forwardRef(({ text, heading, ...rest }, ref) => {
21
23
  accessibilityRole: heading ? 'header' : 'text',
22
24
  ...rest
23
25
  })
24
- return <View style={styles.invisible} ref={ref} {...a11y} />
26
+
27
+ return <View style={styles.invisible} ref={ref} {...selectedProps} />
25
28
  })
26
29
 
27
30
  A11yText.displayName = 'A11yText'
28
31
 
29
32
  A11yText.propTypes = {
33
+ ...selectedSystemPropTypes,
30
34
  text: PropTypes.string.isRequired,
31
35
  heading: PropTypes.bool
32
36
  }
@@ -1,5 +1,6 @@
1
1
  import React, { forwardRef } from 'react'
2
2
  import { DURATION, MIN_EMPTY_ANGLE, MIN_STROKE_ANGLE, BEZIER, propTypes } from './shared'
3
+ import { useA11yInfo } from '../A11yInfoProvider'
3
4
 
4
5
  const SVG_RADIUS = 20
5
6
  const SVG_CIRCUMFERENCE = SVG_RADIUS * 2 * Math.PI
@@ -20,50 +21,61 @@ const bezierProps = {
20
21
  }
21
22
  // We're using svg rather than css here to define the animation to avoid needing to introduce css injection mechanism
22
23
  // It's possible to replicate this functionality with RNW animations, but it snags on chrome at least, see https://github.com/telus/universal-design-system/pull/477 for details.
23
- const Spinner = forwardRef(({ size, color, thickness, label }, ref) => (
24
- <svg
25
- ref={ref}
26
- width={`${size}px`}
27
- height={`${size}px`}
28
- viewBox="0 0 48 48"
29
- aria-valuetext={label}
30
- role="progressbar"
31
- aria-busy={true}
32
- >
33
- <g>
34
- <animateTransform
35
- attributeName="transform"
36
- type="rotate"
37
- values={`-180 24 24;${360 + MIN_STROKE_ANGLE - 180} 24 24`}
38
- {...animationProps}
39
- />
40
- <circle
41
- fill="none"
42
- stroke={color}
43
- strokeWidth={(thickness * 48) / size}
44
- strokeLinecap="round"
45
- cx="24"
46
- cy="24"
47
- r="20"
48
- strokeDasharray={[MIN_SVG_LENGTH, SVG_CIRCUMFERENCE]}
49
- strokeDashoffset={0}
50
- >
51
- <animate
52
- attributeName="stroke-dashoffset"
53
- values={`0;-10;${MIN_SVG_LENGTH - SVG_CIRCUMFERENCE}`}
54
- {...animationProps}
55
- {...bezierProps}
56
- />
57
- <animate
58
- attributeName="stroke-dasharray"
59
- values={`${MIN_SVG_LENGTH}, 200;${MAX_SVG_LENGTH}, 200;${MIN_SVG_LENGTH}, 200`}
60
- {...animationProps}
61
- {...bezierProps}
62
- />
63
- </circle>
64
- </g>
65
- </svg>
66
- ))
24
+ const Spinner = forwardRef(({ size, color, thickness, label }, ref) => {
25
+ const { reduceMotionEnabled } = useA11yInfo()
26
+ return (
27
+ <svg
28
+ ref={ref}
29
+ width={`${size}px`}
30
+ height={`${size}px`}
31
+ viewBox="0 0 48 48"
32
+ aria-valuetext={label}
33
+ role="progressbar"
34
+ aria-busy={true}
35
+ >
36
+ <g>
37
+ {reduceMotionEnabled ? null : (
38
+ <animateTransform
39
+ attributeName="transform"
40
+ type="rotate"
41
+ values={`-180 24 24;${360 + MIN_STROKE_ANGLE - 180} 24 24`}
42
+ {...animationProps}
43
+ />
44
+ )}
45
+ <circle
46
+ fill="none"
47
+ stroke={color}
48
+ strokeWidth={(thickness * 48) / size}
49
+ strokeLinecap="round"
50
+ cx="24"
51
+ cy="24"
52
+ r="20"
53
+ strokeDasharray={
54
+ reduceMotionEnabled ? MAX_SVG_LENGTH : [MIN_SVG_LENGTH, SVG_CIRCUMFERENCE]
55
+ }
56
+ strokeDashoffset={0}
57
+ >
58
+ {reduceMotionEnabled ? null : (
59
+ <>
60
+ <animate
61
+ attributeName="stroke-dashoffset"
62
+ values={`0;-10;${MIN_SVG_LENGTH - SVG_CIRCUMFERENCE}`}
63
+ {...animationProps}
64
+ {...bezierProps}
65
+ />
66
+ <animate
67
+ attributeName="stroke-dasharray"
68
+ values={`${MIN_SVG_LENGTH}, 200;${MAX_SVG_LENGTH}, 200;${MIN_SVG_LENGTH}, 200`}
69
+ {...animationProps}
70
+ {...bezierProps}
71
+ />
72
+ </>
73
+ )}
74
+ </circle>
75
+ </g>
76
+ </svg>
77
+ )
78
+ })
67
79
  Spinner.displayName = 'Spinner'
68
80
 
69
81
  Spinner.propTypes = propTypes
@@ -1,12 +1,14 @@
1
1
  import React, { forwardRef } from 'react'
2
2
  import { Animated, Easing, StyleSheet, View } from 'react-native'
3
3
  import { DURATION, MIN_EMPTY_ANGLE, MIN_STROKE_ANGLE, BEZIER, propTypes } from './shared'
4
+ import { useA11yInfo } from '../A11yInfoProvider'
4
5
 
5
6
  const ea = MIN_EMPTY_ANGLE / 2
6
7
  const sa = MIN_STROKE_ANGLE / 2
7
8
 
8
9
  const Spinner = forwardRef(({ size, color, thickness, label }, ref) => {
9
10
  const { current: timer } = React.useRef(new Animated.Value(0))
11
+ const { reduceMotionEnabled } = useA11yInfo()
10
12
 
11
13
  React.useLayoutEffect(() => {
12
14
  const loop = Animated.timing(timer, {
@@ -17,16 +19,19 @@ const Spinner = forwardRef(({ size, color, thickness, label }, ref) => {
17
19
  toValue: 1,
18
20
  isInteraction: false
19
21
  })
20
- Animated.loop(loop).start()
21
- }, [timer])
22
+
23
+ if (!reduceMotionEnabled) Animated.loop(loop).start()
24
+ else loop.stop()
25
+ }, [timer, reduceMotionEnabled])
22
26
 
23
27
  const frames = (60 * DURATION) / 1000
24
28
  const easing = Easing.bezier(...BEZIER)
25
29
  const containerStyle = {
26
30
  width: size,
27
- height: size / 2,
31
+ height: size / (reduceMotionEnabled ? 1.5 : 2),
28
32
  overflow: 'hidden'
29
33
  }
34
+ const animationFrequency = reduceMotionEnabled ? [0] : [0, 1]
30
35
 
31
36
  // Credit to https://github.com/n4kz/react-native-indicators and https://github.com/callstack/react-native-paper for this
32
37
  return (
@@ -39,7 +44,7 @@ const Spinner = forwardRef(({ size, color, thickness, label }, ref) => {
39
44
  accessibilityState={{ busy: true }}
40
45
  >
41
46
  <Animated.View style={[{ width: size, height: size }]} collapsable={false}>
42
- {[0, 1].map((index) => {
47
+ {animationFrequency.map((index) => {
43
48
  const inputRange = Array.from(
44
49
  new Array(frames),
45
50
  (_, frameIndex) => frameIndex / (frames - 1)
@@ -59,8 +64,16 @@ const Spinner = forwardRef(({ size, color, thickness, label }, ref) => {
59
64
 
60
65
  const layerStyle = {
61
66
  width: size,
62
- height: size,
63
- transform: [
67
+ height: size
68
+ }
69
+
70
+ const viewportStyle = {
71
+ width: size,
72
+ height: size
73
+ }
74
+
75
+ if (!reduceMotionEnabled) {
76
+ layerStyle.transform = [
64
77
  {
65
78
  rotate: timer.interpolate({
66
79
  inputRange: [0, 1],
@@ -68,12 +81,7 @@ const Spinner = forwardRef(({ size, color, thickness, label }, ref) => {
68
81
  })
69
82
  }
70
83
  ]
71
- }
72
-
73
- const viewportStyle = {
74
- width: size,
75
- height: size,
76
- transform: [
84
+ viewportStyle.transform = [
77
85
  {
78
86
  translateY: index ? -size / 2 : 0
79
87
  },
@@ -1,7 +1,7 @@
1
1
  import React from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import { useThemeTokens } from '../ThemeProvider'
4
- import { getTokensPropType, variantProp } from '../utils/propTypes'
4
+ import { getTokensPropType, variantProp } from '../utils/props'
5
5
 
6
6
  import Spinner from './Spinner'
7
7
 
package/src/Box/Box.jsx CHANGED
@@ -4,19 +4,23 @@ import { View, ScrollView } from 'react-native'
4
4
  import { useThemeTokens } from '../ThemeProvider'
5
5
  import {
6
6
  a11yProps,
7
- spacingProps,
8
- variantProp,
7
+ getA11yPropsFromHtmlTag,
9
8
  getTokensPropType,
9
+ layoutTags,
10
+ selectSystemProps,
11
+ spacingProps,
10
12
  useSpacingScale,
11
- viewProps,
12
- getA11yPropsFromHtmlTag,
13
- layoutTags
13
+ variantProp,
14
+ viewProps
14
15
  } from '../utils'
16
+
17
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
18
+
15
19
  /**
16
- * @typedef {import('../utils/propTypes.js').SpacingValue} SpacingValue
17
- * @typedef {import('../utils/propTypes.js').SpacingIndex} SpacingIndex
18
- * @typedef {import('../utils/propTypes.js').SpacingObject} SpacingObject
19
- * @typedef {import('../utils/propTypes.js').SpacingOptions} SpacingOptions
20
+ * @typedef {import('../utils/props/spacingProps.js').SpacingValue} SpacingValue
21
+ * @typedef {import('../utils/props/spacingProps.js').SpacingIndex} SpacingIndex
22
+ * @typedef {import('../utils/props/spacingProps.js').SpacingObject} SpacingObject
23
+ * @typedef {import('../utils/props/spacingProps.js').SpacingOptions} SpacingOptions
20
24
  */
21
25
 
22
26
  const selectBoxStyles = (tokens) => {
@@ -121,8 +125,7 @@ const Box = forwardRef(
121
125
  ) => {
122
126
  const props = {
123
127
  ...getA11yPropsFromHtmlTag(tag, accessibilityRole),
124
- ...a11yProps.select(rest),
125
- ...viewProps.select(rest)
128
+ ...selectProps(rest)
126
129
  }
127
130
 
128
131
  const themeTokens = useThemeTokens('Box', tokens, variant)
@@ -154,8 +157,7 @@ const Box = forwardRef(
154
157
  Box.displayName = 'Box'
155
158
 
156
159
  Box.propTypes = {
157
- ...a11yProps.propTypes,
158
- ...viewProps.types,
160
+ ...selectedSystemPropTypes,
159
161
  variant: variantProp.propType,
160
162
  tokens: getTokensPropType('Box'),
161
163
  /**
@@ -3,7 +3,7 @@ import React, { forwardRef } from 'react'
3
3
  import ButtonBase from './ButtonBase'
4
4
  import buttonPropTypes, { textAndA11yText } from './propTypes'
5
5
  import { useThemeTokensCallback } from '../ThemeProvider'
6
- import { a11yProps } from '../utils/propTypes'
6
+ import { a11yProps } from '../utils/props'
7
7
 
8
8
  const Button = forwardRef(({ accessibilityRole = 'button', tokens, variant, ...props }, ref) => {
9
9
  const getTokens = useThemeTokensCallback('Button', tokens, variant)
@@ -1,4 +1,5 @@
1
1
  import React, { forwardRef } from 'react'
2
+ import PropTypes from 'prop-types'
2
3
  import { Pressable, View, StyleSheet, Platform } from 'react-native'
3
4
 
4
5
  import { applyTextStyles, applyShadowToken, applyOuterBorder } from '../ThemeProvider/utils'
@@ -6,12 +7,18 @@ import buttonPropTypes from './propTypes'
6
7
  import {
7
8
  a11yProps,
8
9
  getCursorStyle,
10
+ clickProps,
9
11
  linkProps,
10
12
  resolvePressableState,
11
13
  resolvePressableTokens,
12
- wrapStringsInText
14
+ selectSystemProps,
15
+ viewProps,
16
+ wrapStringsInText,
17
+ withLinkRouter
13
18
  } from '../utils'
14
19
 
20
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, linkProps, viewProps])
21
+
15
22
  const getOuterBorderOffset = ({ outerBorderGap = 0, outerBorderWidth = 0 }) =>
16
23
  outerBorderGap + outerBorderWidth
17
24
 
@@ -133,30 +140,30 @@ const selectWebOnlyStyles = (inactive, themeTokens, { accessibilityRole }) => {
133
140
  const ButtonBase = forwardRef(
134
141
  (
135
142
  {
143
+ id,
136
144
  href,
137
145
  hrefAttrs,
138
146
  children,
139
- onPress,
140
147
  tokens = {},
141
148
  disabled = false, // alias for inactive
142
149
  inactive = disabled,
143
150
  selected = false,
144
- dataSet,
145
- ...rest
151
+ ...rawRest
146
152
  },
147
153
  ref
148
154
  ) => {
155
+ const { onPress, ...rest } = clickProps.toPressProps(rawRest)
149
156
  const extraButtonState = { inactive, selected }
150
157
  const resolveButtonTokens = (pressableState) =>
151
158
  resolvePressableTokens(tokens, pressableState, extraButtonState)
152
159
 
153
- const a11y = a11yProps.select(rest)
160
+ const systemProps = selectProps(rest)
154
161
 
155
162
  const getPressableStyle = (pressableState) => {
156
163
  const themeTokens = resolveButtonTokens(pressableState)
157
164
  return [
158
165
  staticStyles.row,
159
- selectWebOnlyStyles(inactive, themeTokens, a11y),
166
+ selectWebOnlyStyles(inactive, themeTokens, systemProps),
160
167
  selectOuterContainerStyles(themeTokens),
161
168
  selectOuterWidthStyles(themeTokens)
162
169
  ]
@@ -169,9 +176,8 @@ const ButtonBase = forwardRef(
169
176
  onPress={linkProps.handleHref({ href, onPress })}
170
177
  style={getPressableStyle}
171
178
  disabled={inactive}
172
- dataSet={dataSet}
173
179
  hrefAttrs={hrefAttrs}
174
- {...a11y}
180
+ {...systemProps}
175
181
  >
176
182
  {(pressableState) => {
177
183
  const themeTokens = resolveButtonTokens(pressableState)
@@ -185,6 +191,7 @@ const ButtonBase = forwardRef(
185
191
 
186
192
  return (
187
193
  <View
194
+ id={id}
188
195
  style={[
189
196
  containerStyles,
190
197
  borderStyles,
@@ -218,10 +225,11 @@ const ButtonBase = forwardRef(
218
225
  ButtonBase.displayName = 'ButtonBase'
219
226
 
220
227
  ButtonBase.propTypes = {
221
- ...a11yProps.types,
222
- ...buttonPropTypes,
223
- ...linkProps.types
228
+ id: PropTypes.string,
229
+ ...selectedSystemPropTypes,
230
+ ...buttonPropTypes
224
231
  }
232
+ ButtonBase.defaultProps = { id: undefined }
225
233
 
226
234
  const staticStyles = StyleSheet.create({
227
235
  row: {
@@ -245,4 +253,4 @@ const staticStyles = StyleSheet.create({
245
253
  }
246
254
  })
247
255
 
248
- export default ButtonBase
256
+ export default withLinkRouter(ButtonBase)
@@ -10,13 +10,17 @@ import { useThemeTokens, useThemeTokensCallback } from '../ThemeProvider'
10
10
  import {
11
11
  a11yProps,
12
12
  pressProps,
13
- variantProp,
14
13
  getTokensPropType,
15
- selectTokens
16
- } from '../utils/propTypes'
14
+ selectSystemProps,
15
+ selectTokens,
16
+ variantProp,
17
+ viewProps
18
+ } from '../utils/props'
17
19
  import { useMultipleInputValues } from '../utils/input'
18
20
  import { getPressHandlersWithArgs } from '../utils/pressability'
19
21
 
22
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, pressProps, viewProps])
23
+
20
24
  const ButtonGroup = forwardRef(
21
25
  (
22
26
  {
@@ -51,14 +55,20 @@ const ButtonGroup = forwardRef(
51
55
  readOnly
52
56
  })
53
57
 
54
- const a11y = a11yProps.select({
58
+ const systemProps = selectProps({
55
59
  accessibilityRole,
56
60
  ...rest
57
61
  })
58
- const itemA11yRole = a11y.accessibilityRole === 'radiogroup' ? 'radio' : 'checkbox'
62
+ const itemA11yRole = systemProps.accessibilityRole === 'radiogroup' ? 'radio' : 'checkbox'
59
63
 
60
64
  return (
61
- <StackWrap {...a11y} space={space} direction={direction} tokens={stackTokens} ref={ref}>
65
+ <StackWrap
66
+ {...systemProps}
67
+ space={space}
68
+ direction={direction}
69
+ tokens={stackTokens}
70
+ ref={ref}
71
+ >
62
72
  {items.map(({ label, id = label, accessibilityLabel, ref: itemRef }, index) => {
63
73
  const isSelected = currentValues.includes(id)
64
74
 
@@ -101,8 +111,7 @@ const ButtonGroup = forwardRef(
101
111
  ButtonGroup.displayName = 'ButtonGroup'
102
112
 
103
113
  ButtonGroup.propTypes = {
104
- ...a11yProps.propTypes,
105
- ...pressProps.propTypes,
114
+ ...selectedSystemPropTypes,
106
115
  tokens: getTokensPropType('ButtonGroup'),
107
116
  variant: variantProp.propType,
108
117
  /**
@@ -1,7 +1,7 @@
1
1
  import React, { forwardRef } from 'react'
2
2
  import ButtonBase from './ButtonBase'
3
3
  import buttonPropTypes, { textAndA11yText } from './propTypes'
4
- import { a11yProps, hrefAttrsProp, linkProps } from '../utils/propTypes'
4
+ import { a11yProps, hrefAttrsProp, linkProps } from '../utils/props'
5
5
  import { useThemeTokensCallback } from '../ThemeProvider'
6
6
 
7
7
  /**
@@ -1,6 +1,6 @@
1
1
  import PropTypes from 'prop-types'
2
2
  import ABBPropTypes from 'airbnb-prop-types'
3
- import { variantProp } from '../utils/propTypes'
3
+ import { variantProp, getTokensPropType } from '../utils/props'
4
4
  import A11yText from '../A11yText'
5
5
 
6
6
  export const textAndA11yText = ABBPropTypes.childrenOf(
@@ -8,6 +8,7 @@ export const textAndA11yText = ABBPropTypes.childrenOf(
8
8
  )
9
9
 
10
10
  const buttonPropTypes = {
11
+ tokens: getTokensPropType('Button'),
11
12
  /**
12
13
  * If true, prevents the button from being pressed, changes the cursor (on web) and accessibility
13
14
  * attributes to communicate this to the user, and applies `inactive: true` appearances from the theme
package/src/Card/Card.jsx CHANGED
@@ -4,9 +4,11 @@ import PropTypes from 'prop-types'
4
4
  import { useThemeTokens } from '../ThemeProvider'
5
5
  import { getTokensPropType, variantProp } from '../utils'
6
6
  import { useViewport } from '../ViewportProvider'
7
- import { a11yProps } from '../utils/propTypes'
7
+ import { a11yProps, selectSystemProps, viewProps } from '../utils/props'
8
8
  import CardBase from './CardBase'
9
9
 
10
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
11
+
10
12
  /**
11
13
  * A basic card component, unstyled by default.
12
14
  *
@@ -58,18 +60,19 @@ import CardBase from './CardBase'
58
60
  const Card = ({ children, tokens, variant, dataSet, ...rest }) => {
59
61
  const viewport = useViewport()
60
62
  const themeTokens = useThemeTokens('Card', tokens, variant, { viewport })
63
+
61
64
  return (
62
- <CardBase tokens={themeTokens} dataSet={dataSet} {...rest}>
65
+ <CardBase tokens={themeTokens} dataSet={dataSet} {...selectProps(rest)}>
63
66
  {children}
64
67
  </CardBase>
65
68
  )
66
69
  }
67
70
 
68
71
  Card.propTypes = {
72
+ ...selectedSystemPropTypes,
69
73
  children: PropTypes.node,
70
74
  tokens: getTokensPropType('Card'),
71
- variant: variantProp.propType,
72
- ...a11yProps.types
75
+ variant: variantProp.propType
73
76
  }
74
77
 
75
78
  export default Card