@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
@@ -4,7 +4,9 @@ import { View } from 'react-native'
4
4
 
5
5
  import { applyShadowToken } from '../ThemeProvider'
6
6
  import { getTokensPropType } from '../utils'
7
- import { a11yProps, viewProps } from '../utils/propTypes'
7
+ import { a11yProps, viewProps, selectSystemProps } from '../utils/props'
8
+
9
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
8
10
 
9
11
  // Ensure explicit selection of tokens
10
12
  const selectStyles = ({
@@ -39,7 +41,7 @@ const selectStyles = ({
39
41
  */
40
42
  const CardBase = forwardRef(({ children, tokens, dataSet, ...rest }, ref) => {
41
43
  const cardStyle = selectStyles(typeof tokens === 'function' ? tokens() : tokens)
42
- const props = { ...a11yProps.select(rest), ...viewProps.select(rest) }
44
+ const props = selectProps(rest)
43
45
 
44
46
  return (
45
47
  <View style={cardStyle} dataSet={dataSet} ref={ref} {...props}>
@@ -50,10 +52,9 @@ const CardBase = forwardRef(({ children, tokens, dataSet, ...rest }, ref) => {
50
52
  CardBase.displayName = 'CardBase'
51
53
 
52
54
  CardBase.propTypes = {
55
+ ...selectedSystemPropTypes,
53
56
  children: PropTypes.node,
54
- tokens: getTokensPropType('Card'),
55
- ...viewProps.types,
56
- ...a11yProps.types
57
+ tokens: getTokensPropType('Card')
57
58
  }
58
59
 
59
60
  export default CardBase
@@ -5,17 +5,23 @@ import { Pressable, Platform } from 'react-native'
5
5
  import { useViewport } from '../ViewportProvider'
6
6
  import { applyOuterBorder, validateThemeTokens } from '../ThemeProvider'
7
7
  import {
8
+ a11yProps,
9
+ clickProps,
10
+ getTokenNames,
11
+ getTokensSetPropType,
12
+ linkProps,
8
13
  resolvePressableState,
9
14
  resolvePressableTokens,
15
+ selectSystemProps,
10
16
  selectTokens,
11
- getTokenNames,
12
- getTokensSetPropType,
13
17
  variantProp,
14
- linkProps
18
+ viewProps,
19
+ withLinkRouter
15
20
  } from '../utils'
16
- import { a11yProps } from '../utils/propTypes'
17
21
  import CardBase from './CardBase'
18
22
 
23
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
24
+
19
25
  const tokenKeys = [
20
26
  ...getTokenNames('Card'),
21
27
 
@@ -43,17 +49,13 @@ const PressableCardBase = forwardRef(
43
49
  inactive,
44
50
  href,
45
51
  hrefAttrs,
46
- onPress,
47
52
  accessibilityRole = href ? 'link' : undefined,
48
- ...rest
53
+ ...rawRest
49
54
  },
50
55
  ref
51
56
  ) => {
57
+ const { onPress, ...rest } = clickProps.toPressProps(rawRest)
52
58
  const viewport = useViewport()
53
- const a11y = a11yProps.select({
54
- ...rest,
55
- accessibilityRole
56
- })
57
59
  const additionalState = { checked, validation, inactive, viewport }
58
60
 
59
61
  const getCardState = (pressableState) => resolvePressableState(pressableState, additionalState)
@@ -96,7 +98,7 @@ const PressableCardBase = forwardRef(
96
98
  onKeyDown={handleKeyDown}
97
99
  hrefAttrs={hrefAttrs}
98
100
  style={getOuterBorderStyle}
99
- {...a11y}
101
+ {...selectProps({ ...rest, accessibilityRole })}
100
102
  >
101
103
  {(pressableState) => (
102
104
  <CardBase tokens={getCardTokens(pressableState)}>
@@ -110,10 +112,10 @@ const PressableCardBase = forwardRef(
110
112
  PressableCardBase.displayName = 'PressableCardBase'
111
113
 
112
114
  PressableCardBase.propTypes = {
115
+ ...selectedSystemPropTypes,
113
116
  children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),
114
117
  tokens: getTokensSetPropType(tokenKeys, { requireAll: true, allowFunction: true }),
115
- variant: variantProp.propType,
116
- ...a11yProps.types
118
+ variant: variantProp.propType
117
119
  }
118
120
 
119
- export default PressableCardBase
121
+ export default withLinkRouter(PressableCardBase)
@@ -3,16 +3,22 @@ import PropTypes from 'prop-types'
3
3
  import { Platform, Pressable, StyleSheet, Text, View } from 'react-native'
4
4
 
5
5
  import CheckboxInput from './CheckboxInput'
6
- // @todo move `LabelContent` outside of the `InputLabel` and fix
7
- // the issue with the cursor not being pointer on Web
8
6
  import CheckboxLabel from '../InputLabel/LabelContent'
9
7
  import Feedback from '../Feedback'
10
8
  import StackView from '../StackView'
11
9
  import { applyShadowToken, applyTextStyles, useThemeTokensCallback } from '../ThemeProvider'
12
- import { getTokensPropType, useInputValue, variantProp } from '../utils'
13
- import { a11yProps } from '../utils/propTypes'
10
+ import {
11
+ a11yProps,
12
+ getTokensPropType,
13
+ selectSystemProps,
14
+ useInputValue,
15
+ variantProp,
16
+ viewProps
17
+ } from '../utils'
14
18
  import useUniqueId from '../utils/useUniqueId'
15
19
 
20
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
21
+
16
22
  const selectInputStyles = (
17
23
  {
18
24
  iconBackgroundColor,
@@ -156,7 +162,6 @@ const Checkbox = forwardRef(
156
162
  // The expected keyboard shortcut for activating a checkbox is the Space key
157
163
  if (event?.key === ' ') handleChange(event)
158
164
  }
159
- const accessibilityProps = a11yProps.select(rest)
160
165
  const uniqueId = useUniqueId('checkbox')
161
166
  const inputId = id ?? uniqueId
162
167
 
@@ -169,7 +174,7 @@ const Checkbox = forwardRef(
169
174
  onPress={handleChange}
170
175
  accessibilityRole="checkbox"
171
176
  accessibilityState={{ checked: isChecked, disabled: inactive }}
172
- {...accessibilityProps}
177
+ {...selectProps(rest)}
173
178
  >
174
179
  {({ focused: focus, hovered: hover, pressed }) => {
175
180
  const { icon: IconComponent, ...stateTokens } = getTokens({ focus, hover, pressed })
@@ -224,7 +229,7 @@ const Checkbox = forwardRef(
224
229
  Checkbox.displayName = 'Checkbox'
225
230
 
226
231
  Checkbox.propTypes = {
227
- ...a11yProps.propTypes,
232
+ ...selectedSystemPropTypes,
228
233
  /**
229
234
  * Use `checked` for controlled Checkbox. For uncontrolled Checkbox, use the `defaultChecked` prop.
230
235
  */
@@ -3,10 +3,20 @@ import PropTypes from 'prop-types'
3
3
  import { View, StyleSheet, Platform } from 'react-native'
4
4
  import { useThemeTokens } from '../ThemeProvider'
5
5
  import Spacer from '../Spacer'
6
- import { getTokensPropType, variantProp, spacingProps } from '../utils'
6
+ import {
7
+ a11yProps,
8
+ getTokensPropType,
9
+ selectSystemProps,
10
+ spacingProps,
11
+ variantProp,
12
+ viewProps
13
+ } from '../utils'
14
+
15
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
16
+
7
17
  /**
8
- * @typedef {import('../utils/propTypes.js').SpacingIndex} SpacingIndex
9
- * @typedef {import('../utils/propTypes.js').SpacingObject} SpacingObject
18
+ * @typedef {import('../utils/props/spacingProps.js').SpacingIndex} SpacingIndex
19
+ * @typedef {import('../utils/props/spacingProps.js').SpacingObject} SpacingObject
10
20
  */
11
21
 
12
22
  /**
@@ -45,7 +55,7 @@ import { getTokensPropType, variantProp, spacingProps } from '../utils'
45
55
  *
46
56
  * For accessibility purposes a divider component will be described with ARIA attributes, i.e. `role="separator"` and `aria-orientation="vertical/horizontal"`.
47
57
  */
48
- const Divider = forwardRef(({ variant, vertical = false, space, tokens, testID }, ref) => {
58
+ const Divider = forwardRef(({ variant, vertical = false, space, tokens, ...rest }, ref) => {
49
59
  const { color, width } = useThemeTokens('Divider', tokens, variant)
50
60
 
51
61
  const borderStyles = vertical
@@ -68,8 +78,10 @@ const Divider = forwardRef(({ variant, vertical = false, space, tokens, testID }
68
78
  : // There are no such equivalent attributes for native
69
79
  {}
70
80
 
81
+ const { testID, ...selectedProps } = selectProps({ ...a11y, ...rest })
82
+
71
83
  const divider = (
72
- <View ref={ref} style={[styles.divider, borderStyles]} testID={testID} {...a11y} />
84
+ <View ref={ref} style={[styles.divider, borderStyles]} testID={testID} {...selectedProps} />
73
85
  )
74
86
  if (!space) return divider
75
87
  const spacerProps = { space, direction: vertical ? 'row' : 'column' }
@@ -84,6 +96,7 @@ const Divider = forwardRef(({ variant, vertical = false, space, tokens, testID }
84
96
  Divider.displayName = 'Divider'
85
97
 
86
98
  Divider.propTypes = {
99
+ ...selectedSystemPropTypes,
87
100
  tokens: getTokensPropType('Divider'),
88
101
  space: spacingProps.types.spacingValue,
89
102
  variant: variantProp.propType,
@@ -91,13 +104,7 @@ Divider.propTypes = {
91
104
  * By default, the divider is a horizontal line the full width of its parent.
92
105
  * With `vertical` prop and when inside a container with { flexDirection: row }, draws a full height vertical line.
93
106
  */
94
- vertical: PropTypes.bool,
95
- /**
96
- * @ignore
97
- * In tests, the only way to select dividers is with testID prop and getByTestId, since they have no content,
98
- * no accessibility role on native, and there is no equivalent of nextSibling in React Native Testing Library.
99
- */
100
- testID: PropTypes.string
107
+ vertical: PropTypes.bool
101
108
  }
102
109
 
103
110
  const styles = StyleSheet.create({
@@ -3,7 +3,9 @@ import { Pressable, View } from 'react-native'
3
3
  import PropTypes from 'prop-types'
4
4
 
5
5
  import { useThemeTokensCallback, verticalAlignRow } from '../ThemeProvider'
6
- import { getTokensPropType, variantProp, a11yProps } from '../utils'
6
+ import { a11yProps, getTokensPropType, selectSystemProps, variantProp, viewProps } from '../utils'
7
+
8
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
7
9
 
8
10
  function selectContainerStyles({
9
11
  backgroundColor,
@@ -48,12 +50,15 @@ function selectIconTokens(tokens) {
48
50
  }
49
51
 
50
52
  const ExpandCollapseControl = forwardRef(
51
- ({ onPress, isExpanded, children, tokens, accessibilityRole = 'button', variant, rest }, ref) => {
53
+ (
54
+ { onPress, isExpanded, children, tokens, accessibilityRole = 'button', variant, ...rest },
55
+ ref
56
+ ) => {
52
57
  const getTokens = useThemeTokensCallback('ExpandCollapseControl', tokens, variant)
53
58
 
54
- const a11y = a11yProps.select({ ...rest, accessibilityRole })
55
- a11y.accessibilityState = {
56
- ...(a11y.accessibilityState || {}),
59
+ const selectedProps = selectProps({ ...rest, accessibilityRole })
60
+ selectedProps.accessibilityState = {
61
+ ...(selectedProps.accessibilityState || {}),
57
62
  expanded: isExpanded
58
63
  }
59
64
 
@@ -68,7 +73,7 @@ const ExpandCollapseControl = forwardRef(
68
73
  selectContainerStyles(getControlTokens(pressableState))
69
74
 
70
75
  return (
71
- <Pressable ref={ref} {...a11y} onPress={onPress} style={getPressableStyle}>
76
+ <Pressable ref={ref} {...selectedProps} onPress={onPress} style={getPressableStyle}>
72
77
  {(pressableState) => {
73
78
  const { icon: IconComponent, ...themeTokens } = getControlTokens(pressableState)
74
79
  return (
@@ -91,7 +96,7 @@ const ExpandCollapseControl = forwardRef(
91
96
  ExpandCollapseControl.displayName = 'ExpandCollapseControl'
92
97
 
93
98
  ExpandCollapseControl.propTypes = {
94
- ...a11yProps.propTypes,
99
+ ...selectedSystemPropTypes,
95
100
  tokens: getTokensPropType('ExpandCollapseControl'),
96
101
  variant: variantProp.propType,
97
102
  /**
@@ -3,7 +3,16 @@ import { View } from 'react-native'
3
3
  import PropTypes from 'prop-types'
4
4
 
5
5
  import { useThemeTokens } from '../ThemeProvider'
6
- import { getTokensPropType, variantProp, useMultipleInputValues } from '../utils'
6
+ import {
7
+ a11yProps,
8
+ getTokensPropType,
9
+ selectSystemProps,
10
+ useMultipleInputValues,
11
+ variantProp,
12
+ viewProps
13
+ } from '../utils'
14
+
15
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
7
16
 
8
17
  function selectBorderStyles(tokens) {
9
18
  return {
@@ -21,7 +30,7 @@ function selectBorderStyles(tokens) {
21
30
  * nested (they do not need to be direct children), and non-interactive items may be included too.
22
31
  */
23
32
  const ExpandCollapse = forwardRef(
24
- ({ children, tokens, variant, maxOpen, open, initialOpen, onChange }, ref) => {
33
+ ({ children, tokens, variant, maxOpen, open, initialOpen, onChange, ...rest }, ref) => {
25
34
  const {
26
35
  currentValues: openIds,
27
36
  toggleOneValue: onToggle,
@@ -37,7 +46,7 @@ const ExpandCollapse = forwardRef(
37
46
  const themeTokens = useThemeTokens('ExpandCollapse', tokens, variant)
38
47
 
39
48
  return (
40
- <View ref={ref} style={selectBorderStyles(themeTokens)}>
49
+ <View ref={ref} style={selectBorderStyles(themeTokens)} {...selectProps(rest)}>
41
50
  {typeof children === 'function'
42
51
  ? children({ openIds, onToggle, resetValues, setValues, unsetValues })
43
52
  : children}
@@ -48,6 +57,7 @@ const ExpandCollapse = forwardRef(
48
57
  ExpandCollapse.displayName = 'ExpandCollapse'
49
58
 
50
59
  ExpandCollapse.propTypes = {
60
+ ...selectedSystemPropTypes,
51
61
  variant: variantProp.propType,
52
62
  tokens: getTokensPropType('ExpandCollapse'),
53
63
  /**
@@ -4,7 +4,16 @@ import PropTypes from 'prop-types'
4
4
 
5
5
  import ExpandCollapseControl from './Control'
6
6
  import { useThemeTokens } from '../ThemeProvider'
7
- import { getTokensPropType, variantProp, useVerticalExpandAnimation, a11yProps } from '../utils'
7
+ import {
8
+ a11yProps,
9
+ getTokensPropType,
10
+ selectSystemProps,
11
+ useVerticalExpandAnimation,
12
+ variantProp,
13
+ viewProps
14
+ } from '../utils'
15
+
16
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
8
17
 
9
18
  // just void functions for now, since there are no style tokens for a panel or control at this point
10
19
  const selectGroupStyles = () => {}
@@ -49,9 +58,9 @@ const ExpandCollapsePanel = forwardRef(
49
58
  const [containerHeight, setContainerHeight] = useState(null)
50
59
  const isExpanded = openIds.includes(panelId)
51
60
 
52
- const a11y = a11yProps.select(rest)
53
- a11y.accessibilityState = {
54
- ...(a11y.accessibilityState || {}),
61
+ const selectedProps = selectProps(rest)
62
+ selectedProps.accessibilityState = {
63
+ ...(selectedProps.accessibilityState || {}),
55
64
  expanded: isExpanded
56
65
  }
57
66
 
@@ -88,7 +97,7 @@ const ExpandCollapsePanel = forwardRef(
88
97
  return (
89
98
  <View ref={ref} style={selectGroupStyles(themeTokens)}>
90
99
  <ExpandCollapseControl
91
- {...a11y}
100
+ {...selectedProps}
92
101
  isExpanded={isExpanded}
93
102
  tokens={controlTokens}
94
103
  onPress={handleControlPress}
@@ -110,6 +119,7 @@ const ExpandCollapsePanel = forwardRef(
110
119
  ExpandCollapsePanel.displayName = 'ExpandCollapsePanel'
111
120
 
112
121
  ExpandCollapsePanel.propTypes = {
122
+ ...selectedSystemPropTypes,
113
123
  variant: variantProp.propType,
114
124
  tokens: getTokensPropType('ExpandCollapsePanel'),
115
125
  /**
@@ -3,9 +3,18 @@ import { StyleSheet, Text, View } from 'react-native'
3
3
  import PropTypes from 'prop-types'
4
4
 
5
5
  import { applyTextStyles, useThemeTokens } from '../ThemeProvider'
6
- import { a11yProps, 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 StackView from '../StackView'
8
15
 
16
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
17
+
9
18
  const selectStyles = (tokens) => selectTokens('Feedback', tokens)
10
19
 
11
20
  const selectTitleTextStyles = ({ titleFontSize, ...tokens }) =>
@@ -53,13 +62,13 @@ const Feedback = forwardRef(
53
62
  const content =
54
63
  typeof children === 'string' ? <Text style={contentTextStyles}>{children}</Text> : children
55
64
 
56
- const accessibilityProps = a11yProps.select({
65
+ const selectedProps = selectProps({
57
66
  accessibilityRole: validation === 'error' ? 'alert' : undefined,
58
67
  ...rest
59
68
  })
60
69
 
61
70
  return (
62
- <View ref={ref} style={selectStyles(themeTokens)} {...accessibilityProps} nativeID={id}>
71
+ <View ref={ref} style={selectStyles(themeTokens)} nativeID={id} {...selectedProps}>
63
72
  <StackView space={space}>
64
73
  {title !== undefined && (
65
74
  <View style={staticStyles.title}>
@@ -82,6 +91,7 @@ const Feedback = forwardRef(
82
91
  Feedback.displayName = 'Feedback'
83
92
 
84
93
  Feedback.propTypes = {
94
+ ...selectedSystemPropTypes,
85
95
  /**
86
96
  * Emphasized summary of the feedback. If an icon is set, it is rendered next to the title.
87
97
  */
@@ -60,7 +60,7 @@ const Fieldset = forwardRef(
60
60
  // and on MacOS voiceover, radiogroup -> radio. To allow elements to be direct children of the
61
61
  // fieldset as much as possible, but also allow different spacing within content and between
62
62
  // fieldset / feedback / etc, wrap resolved children in a fragment, and stack with `preserveFragments`.
63
- const childContent = <>{typeof children === 'function' ? children({ a11yProps }) : children}</>
63
+ const childContent = <>{typeof children === 'function' ? children(a11yProps) : children}</>
64
64
  const orderedContent =
65
65
  feedbackPosition === 'bottom'
66
66
  ? [legendContent, feedbackContent, childContent]
@@ -8,7 +8,15 @@ import Col from './Col'
8
8
  import { useViewport } from '../ViewportProvider'
9
9
  import GutterContext from './providers/GutterContext'
10
10
  import applyInheritance from './helpers'
11
- import { a11yProps, viewProps, getA11yPropsFromHtmlTag, layoutTags } from '../utils'
11
+ import {
12
+ a11yProps,
13
+ viewProps,
14
+ getA11yPropsFromHtmlTag,
15
+ layoutTags,
16
+ selectSystemProps
17
+ } from '../utils'
18
+
19
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
12
20
 
13
21
  /**
14
22
  * A mobile-first flexbox grid.
@@ -62,8 +70,7 @@ const FlexGrid = forwardRef(
62
70
 
63
71
  const props = {
64
72
  ...getA11yPropsFromHtmlTag(tag, accessibilityRole),
65
- ...a11yProps.select(rest),
66
- ...viewProps.select(rest)
73
+ ...selectProps(rest)
67
74
  }
68
75
 
69
76
  return (
@@ -91,8 +98,7 @@ const styles = StyleSheet.create({
91
98
  })
92
99
 
93
100
  FlexGrid.propTypes = {
94
- ...a11yProps.propTypes,
95
- ...viewProps.types,
101
+ ...selectedSystemPropTypes,
96
102
  /**
97
103
  * Whether or not to give the grid a fixed width. This also centres the grid horizontally.
98
104
  */
@@ -1,10 +1,8 @@
1
1
  const applyInheritance = (sizes) => {
2
2
  let prevSize
3
3
  return sizes.map((size, index) => {
4
- if (size) {
5
- prevSize = size
6
- }
7
4
  if (size !== undefined) {
5
+ prevSize = size
8
6
  return size
9
7
  }
10
8
  if (index) {
@@ -3,10 +3,18 @@ import PropTypes from 'prop-types'
3
3
  import { Platform, StyleSheet, View } from 'react-native'
4
4
 
5
5
  import { validateThemeTokens, resolveThemeTokens } from '../ThemeProvider'
6
- import { getTokensSetPropType, selectTokens, a11yProps } from '../utils'
6
+ import {
7
+ a11yProps,
8
+ getTokensSetPropType,
9
+ selectSystemProps,
10
+ selectTokens,
11
+ viewProps
12
+ } from '../utils'
7
13
  import ScrollViewEnd from './ScrollViewEnd'
8
14
  import { getItemPositionScrollTarget, itemPositionsPropType } from './itemPositions'
9
15
 
16
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
17
+
10
18
  const tokenKeys = [
11
19
  'nextIcon',
12
20
  'previousIcon',
@@ -22,7 +30,7 @@ export const selectHorizontalScrollTokens = (themeTokens, prefix) =>
22
30
  * Base component that scrolls horizontally and displays left and right buttons if
23
31
  * there is content to the left and the right which can be scrolled to.
24
32
  *
25
- * @TODO revist `ScrollButton` after IconButton is stable.
33
+ * @TODO revisit `ScrollButton` after IconButton is stable.
26
34
  */
27
35
  const HorizontalScroll = forwardRef(
28
36
  ({ ScrollButton, tokens, itemPositions, children, ...rest }, ref) => {
@@ -108,8 +116,6 @@ const HorizontalScroll = forwardRef(
108
116
  const scrollNext = () => scrollTo(scrollOffset + scrollDistance)
109
117
  const scrollPrevious = () => scrollTo(scrollOffset - scrollDistance)
110
118
 
111
- const a11y = a11yProps.select(rest)
112
-
113
119
  // On Web, being scrollable in one direction prevents overflow: visible in the other direction.
114
120
  // Apply a fixed margin gutter that tab highlight effects can overhang without getting trimmed.
115
121
  return (
@@ -125,7 +131,7 @@ const HorizontalScroll = forwardRef(
125
131
  staticStyles.scrollContainer,
126
132
  { marginBottom: gutter, borderBottomWidth, borderBottomColor }
127
133
  ]}
128
- {...a11y}
134
+ {...selectProps(rest)}
129
135
  >
130
136
  {children}
131
137
  </ScrollViewEnd>
@@ -159,6 +165,7 @@ const staticStyles = StyleSheet.create({
159
165
  })
160
166
 
161
167
  HorizontalScroll.propTypes = {
168
+ ...selectedSystemPropTypes,
162
169
  itemPositions: itemPositionsPropType,
163
170
  ScrollButton: PropTypes.elementType,
164
171
  tokens: getTokensSetPropType(tokenKeys, { allowFunction: true }),
@@ -4,16 +4,22 @@ import { Pressable, Platform, StyleSheet, View } from 'react-native'
4
4
 
5
5
  import { applyOuterBorder, useThemeTokensCallback, applyShadowToken } from '../ThemeProvider'
6
6
  import {
7
- variantProp,
7
+ a11yProps,
8
+ clickProps,
9
+ getTokensPropType,
10
+ hrefAttrsProp,
8
11
  linkProps,
9
12
  resolvePressableState,
10
- hrefAttrsProp,
11
- getTokensPropType,
12
- selectTokens
13
+ selectSystemProps,
14
+ selectTokens,
15
+ variantProp,
16
+ viewProps,
17
+ withLinkRouter
13
18
  } from '../utils'
14
- import { a11yProps } from '../utils/propTypes'
15
19
  import Icon from '../Icon'
16
20
 
21
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
22
+
17
23
  const selectOuterStyle = ({
18
24
  backgroundColor,
19
25
  borderRadius,
@@ -52,13 +58,13 @@ const IconButton = forwardRef(
52
58
  icon: IconComponent,
53
59
  href,
54
60
  hrefAttrs,
55
- onPress,
56
61
  accessibilityRole = href ? 'link' : 'button',
57
- ...rest
62
+ ...rawRest
58
63
  },
59
64
  ref
60
65
  ) => {
61
- const a11y = a11yProps.select({
66
+ const { onPress, ...rest } = clickProps.toPressProps(rawRest)
67
+ const selectedProps = selectProps({
62
68
  ...rest,
63
69
  accessibilityRole
64
70
  })
@@ -75,7 +81,7 @@ const IconButton = forwardRef(
75
81
  onPress={handlePress}
76
82
  hrefAttrs={hrefAttrs}
77
83
  style={getOuterStyle}
78
- {...a11y}
84
+ {...selectedProps}
79
85
  >
80
86
  {(pressableState) => {
81
87
  const themeTokens = getTokens(resolvePressableState(pressableState))
@@ -83,7 +89,7 @@ const IconButton = forwardRef(
83
89
  <View style={selectInnerStyle(themeTokens)}>
84
90
  <Icon
85
91
  icon={IconComponent}
86
- title={a11y.accessibilityLabel}
92
+ title={selectedProps.accessibilityLabel}
87
93
  tokens={selectTokens('Icon', themeTokens, 'icon')}
88
94
  />
89
95
  </View>
@@ -96,7 +102,7 @@ const IconButton = forwardRef(
96
102
  IconButton.displayName = 'IconButton'
97
103
 
98
104
  IconButton.propTypes = {
99
- ...a11yProps.types,
105
+ ...selectedSystemPropTypes,
100
106
  variant: variantProp.propType,
101
107
  tokens: getTokensPropType('IconButton'),
102
108
  icon: PropTypes.elementType.isRequired,
@@ -111,4 +117,4 @@ const staticStyles = StyleSheet.create({
111
117
  }
112
118
  })
113
119
 
114
- export default IconButton
120
+ export default withLinkRouter(IconButton)
@@ -3,11 +3,20 @@ import { StyleSheet, Text, View } from 'react-native'
3
3
  import PropTypes from 'prop-types'
4
4
 
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
 
8
15
  import LabelContent from './LabelContent'
9
16
  import Tooltip from '../Tooltip'
10
17
 
18
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
19
+
11
20
  const selectLabelStyles = (tokens) => applyTextStyles(selectTokens('Typography', tokens))
12
21
 
13
22
  const selectHintStyles = ({
@@ -28,7 +37,10 @@ const selectHintStyles = ({
28
37
  const selectGapStyles = ({ gap }) => ({ marginRight: gap })
29
38
 
30
39
  const InputLabel = forwardRef(
31
- ({ label, forId, hint, hintPosition = 'inline', hintId, tooltip, tokens, variant }, ref) => {
40
+ (
41
+ { label, forId, hint, hintPosition = 'inline', hintId, tooltip, tokens, variant, ...rest },
42
+ ref
43
+ ) => {
32
44
  const themeTokens = useThemeTokens('InputLabel', tokens, variant)
33
45
 
34
46
  const hasTooltip = tooltip !== undefined
@@ -38,6 +50,7 @@ const InputLabel = forwardRef(
38
50
  <View
39
51
  ref={ref}
40
52
  style={[staticStyles.container, !isHintInline && staticStyles.containerWithHintBelow]}
53
+ {...selectProps(rest)}
41
54
  >
42
55
  <Text
43
56
  style={[selectLabelStyles(themeTokens), selectGapStyles(themeTokens), staticStyles.label]}
@@ -69,6 +82,7 @@ const InputLabel = forwardRef(
69
82
  InputLabel.displayName = 'InputLabel'
70
83
 
71
84
  InputLabel.propTypes = {
85
+ ...selectedSystemPropTypes,
72
86
  /**
73
87
  * The input label.
74
88
  */
@@ -30,7 +30,7 @@ const InputSupports = forwardRef(
30
30
  forId={inputId}
31
31
  />
32
32
  )}
33
- {typeof children === 'function' ? children({ a11yProps, inputId }) : children}
33
+ {typeof children === 'function' ? children({ inputId, ...a11yProps }) : children}
34
34
  {feedback && <Feedback id={feedbackId} title={feedback} validation={validation} />}
35
35
  </StackView>
36
36
  )