@telus-uds/components-base 1.3.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. package/.turbo/turbo-build.log +5 -2
  2. package/CHANGELOG.json +82 -0
  3. package/CHANGELOG.md +42 -2
  4. package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +35 -0
  5. package/__tests__/ActivityIndicator/__snapshots__/ActivityIndicator.test.jsx.snap +287 -0
  6. package/babel.config.js +27 -5
  7. package/component-docs.json +121 -438
  8. package/lib/A11yText/index.js +5 -4
  9. package/lib/ActivityIndicator/Spinner.js +46 -37
  10. package/lib/ActivityIndicator/Spinner.native.js +26 -15
  11. package/lib/Box/Box.js +4 -4
  12. package/lib/Button/ButtonBase.js +7 -8
  13. package/lib/Card/Card.js +5 -4
  14. package/lib/Card/PressableCardBase.js +6 -11
  15. package/lib/Checkbox/Checkbox.js +4 -6
  16. package/lib/Divider/Divider.js +12 -11
  17. package/lib/ExpandCollapse/Control.js +7 -7
  18. package/lib/ExpandCollapse/ExpandCollapse.js +6 -2
  19. package/lib/ExpandCollapse/Panel.js +6 -7
  20. package/lib/Feedback/Feedback.js +6 -5
  21. package/lib/Fieldset/Fieldset.js +1 -3
  22. package/lib/HorizontalScroll/HorizontalScroll.js +5 -7
  23. package/lib/HorizontalScroll/HorizontalScrollButton.js +23 -49
  24. package/lib/IconButton/IconButton.js +6 -6
  25. package/lib/InputLabel/InputLabel.js +7 -2
  26. package/lib/InputSupports/InputSupports.js +2 -2
  27. package/lib/Link/LinkBase.js +5 -6
  28. package/lib/List/List.js +4 -6
  29. package/lib/List/ListItem.js +6 -2
  30. package/lib/Modal/Modal.js +6 -2
  31. package/lib/Notification/Notification.js +12 -8
  32. package/lib/Pagination/Pagination.js +8 -3
  33. package/lib/Progress/Progress.js +5 -4
  34. package/lib/Progress/ProgressBar.js +8 -7
  35. package/lib/Radio/Radio.js +4 -6
  36. package/lib/Radio/RadioButton.js +6 -3
  37. package/lib/Radio/RadioGroup.js +7 -2
  38. package/lib/RadioCard/RadioCard.js +4 -4
  39. package/lib/RadioCard/RadioCardGroup.js +9 -6
  40. package/lib/Search/Search.js +7 -2
  41. package/lib/Select/Select.js +10 -9
  42. package/lib/SideNav/Item.js +7 -7
  43. package/lib/SideNav/SideNav.js +7 -3
  44. package/lib/Skeleton/Skeleton.js +6 -2
  45. package/lib/Spacer/Spacer.js +7 -18
  46. package/lib/StackView/StackView.js +7 -7
  47. package/lib/StackView/StackWrapBox.js +6 -7
  48. package/lib/StackView/StackWrapGap.js +6 -5
  49. package/lib/StepTracker/Step.js +7 -3
  50. package/lib/StepTracker/StepTracker.js +7 -7
  51. package/lib/Tabs/Tabs.js +6 -2
  52. package/lib/Tabs/TabsItem.js +6 -5
  53. package/lib/Tags/Tags.js +5 -6
  54. package/lib/TextInput/TextArea.js +13 -14
  55. package/lib/TextInput/TextInput.js +13 -14
  56. package/lib/TextInput/TextInputBase.js +5 -3
  57. package/lib/ToggleSwitch/ToggleSwitch.js +10 -9
  58. package/lib/ToggleSwitch/ToggleSwitchGroup.js +5 -7
  59. package/lib/Tooltip/Tooltip.js +7 -2
  60. package/lib/TooltipButton/TooltipButton.js +7 -2
  61. package/lib/Typography/Typography.js +8 -6
  62. package/lib/index.js +7 -0
  63. package/lib/utils/children.js +5 -1
  64. package/lib/utils/index.js +14 -0
  65. package/lib/utils/props/index.js +9 -0
  66. package/lib/{InputSupports/propTypes.js → utils/props/inputSupportsProps.js} +2 -3
  67. package/lib/utils/ssr.js +51 -0
  68. package/lib-module/A11yInfoProvider/index.js +62 -0
  69. package/lib-module/A11yText/index.js +55 -0
  70. package/lib-module/ActivityIndicator/Spinner.js +76 -0
  71. package/lib-module/ActivityIndicator/Spinner.native.js +143 -0
  72. package/lib-module/ActivityIndicator/index.js +40 -0
  73. package/lib-module/ActivityIndicator/shared.js +12 -0
  74. package/lib-module/BaseProvider/index.js +26 -0
  75. package/lib-module/Box/Box.js +243 -0
  76. package/lib-module/Box/index.js +2 -0
  77. package/lib-module/Button/Button.js +25 -0
  78. package/lib-module/Button/ButtonBase.js +254 -0
  79. package/lib-module/Button/ButtonGroup.js +164 -0
  80. package/lib-module/Button/ButtonLink.js +39 -0
  81. package/lib-module/Button/index.js +4 -0
  82. package/lib-module/Button/propTypes.js +36 -0
  83. package/lib-module/Card/Card.js +83 -0
  84. package/lib-module/Card/CardBase.js +62 -0
  85. package/lib-module/Card/PressableCardBase.js +113 -0
  86. package/lib-module/Card/index.js +4 -0
  87. package/lib-module/Checkbox/Checkbox.js +321 -0
  88. package/lib-module/Checkbox/CheckboxGroup.js +218 -0
  89. package/lib-module/Checkbox/CheckboxInput.js +58 -0
  90. package/lib-module/Checkbox/CheckboxInput.native.js +6 -0
  91. package/lib-module/Checkbox/index.js +3 -0
  92. package/lib-module/Divider/Divider.js +123 -0
  93. package/lib-module/Divider/index.js +2 -0
  94. package/lib-module/ExpandCollapse/Accordion.js +15 -0
  95. package/lib-module/ExpandCollapse/Control.js +130 -0
  96. package/lib-module/ExpandCollapse/ExpandCollapse.js +94 -0
  97. package/lib-module/ExpandCollapse/Panel.js +158 -0
  98. package/lib-module/ExpandCollapse/index.js +7 -0
  99. package/lib-module/Feedback/Feedback.js +144 -0
  100. package/lib-module/Feedback/index.js +2 -0
  101. package/lib-module/Fieldset/Fieldset.js +145 -0
  102. package/lib-module/Fieldset/FieldsetContainer.js +29 -0
  103. package/lib-module/Fieldset/FieldsetContainer.native.js +20 -0
  104. package/lib-module/Fieldset/Legend.js +21 -0
  105. package/lib-module/Fieldset/Legend.native.js +28 -0
  106. package/lib-module/Fieldset/cssReset.js +14 -0
  107. package/lib-module/Fieldset/index.js +2 -0
  108. package/lib-module/FlexGrid/Col/Col.js +265 -0
  109. package/lib-module/FlexGrid/Col/index.js +2 -0
  110. package/lib-module/FlexGrid/FlexGrid.js +147 -0
  111. package/lib-module/FlexGrid/Row/Row.js +177 -0
  112. package/lib-module/FlexGrid/Row/index.js +2 -0
  113. package/lib-module/FlexGrid/helpers/index.js +18 -0
  114. package/lib-module/FlexGrid/index.js +2 -0
  115. package/lib-module/FlexGrid/providers/GutterContext.js +3 -0
  116. package/lib-module/HorizontalScroll/HorizontalScroll.js +170 -0
  117. package/lib-module/HorizontalScroll/HorizontalScrollButton.js +77 -0
  118. package/lib-module/HorizontalScroll/ScrollViewEnd.js +47 -0
  119. package/lib-module/HorizontalScroll/ScrollViewEnd.native.js +24 -0
  120. package/lib-module/HorizontalScroll/dictionary.js +11 -0
  121. package/lib-module/HorizontalScroll/index.js +11 -0
  122. package/lib-module/HorizontalScroll/itemPositions.js +106 -0
  123. package/lib-module/Icon/Icon.js +61 -0
  124. package/lib-module/Icon/IconText.js +81 -0
  125. package/lib-module/Icon/index.js +4 -0
  126. package/lib-module/IconButton/IconButton.js +115 -0
  127. package/lib-module/IconButton/index.js +2 -0
  128. package/lib-module/InputLabel/InputLabel.js +131 -0
  129. package/lib-module/InputLabel/LabelContent.js +24 -0
  130. package/lib-module/InputLabel/LabelContent.native.js +16 -0
  131. package/lib-module/InputLabel/index.js +2 -0
  132. package/lib-module/InputSupports/InputSupports.js +88 -0
  133. package/lib-module/InputSupports/index.js +2 -0
  134. package/lib-module/InputSupports/useInputSupports.js +31 -0
  135. package/lib-module/Link/ChevronLink.js +51 -0
  136. package/lib-module/Link/InlinePressable.js +37 -0
  137. package/lib-module/Link/InlinePressable.native.js +85 -0
  138. package/lib-module/Link/Link.js +27 -0
  139. package/lib-module/Link/LinkBase.js +210 -0
  140. package/lib-module/Link/TextButton.js +43 -0
  141. package/lib-module/Link/index.js +5 -0
  142. package/lib-module/List/List.js +55 -0
  143. package/lib-module/List/ListItem.js +213 -0
  144. package/lib-module/List/index.js +5 -0
  145. package/lib-module/Modal/Modal.js +208 -0
  146. package/lib-module/Modal/dictionary.js +9 -0
  147. package/lib-module/Modal/index.js +2 -0
  148. package/lib-module/Notification/Notification.js +196 -0
  149. package/lib-module/Notification/dictionary.js +8 -0
  150. package/lib-module/Notification/index.js +2 -0
  151. package/lib-module/Pagination/PageButton.js +65 -0
  152. package/lib-module/Pagination/Pagination.js +140 -0
  153. package/lib-module/Pagination/SideButton.js +103 -0
  154. package/lib-module/Pagination/dictionary.js +18 -0
  155. package/lib-module/Pagination/index.js +2 -0
  156. package/lib-module/Pagination/usePagination.js +72 -0
  157. package/lib-module/Progress/Progress.js +85 -0
  158. package/lib-module/Progress/ProgressBar.js +134 -0
  159. package/lib-module/Progress/ProgressBarBackground.js +41 -0
  160. package/lib-module/Progress/index.js +4 -0
  161. package/lib-module/Radio/Radio.js +263 -0
  162. package/lib-module/Radio/RadioButton.js +128 -0
  163. package/lib-module/Radio/RadioGroup.js +225 -0
  164. package/lib-module/Radio/RadioInput.js +60 -0
  165. package/lib-module/Radio/RadioInput.native.js +6 -0
  166. package/lib-module/Radio/index.js +3 -0
  167. package/lib-module/RadioCard/RadioCard.js +218 -0
  168. package/lib-module/RadioCard/RadioCardGroup.js +232 -0
  169. package/lib-module/RadioCard/index.js +3 -0
  170. package/lib-module/Search/Search.js +233 -0
  171. package/lib-module/Search/dictionary.js +12 -0
  172. package/lib-module/Search/index.js +2 -0
  173. package/lib-module/Select/Group.js +20 -0
  174. package/lib-module/Select/Group.native.js +14 -0
  175. package/lib-module/Select/Item.js +17 -0
  176. package/lib-module/Select/Item.native.js +9 -0
  177. package/lib-module/Select/Picker.js +67 -0
  178. package/lib-module/Select/Picker.native.js +110 -0
  179. package/lib-module/Select/Select.js +317 -0
  180. package/lib-module/Select/index.js +6 -0
  181. package/lib-module/SideNav/Item.js +139 -0
  182. package/lib-module/SideNav/ItemContent.js +45 -0
  183. package/lib-module/SideNav/ItemsGroup.js +115 -0
  184. package/lib-module/SideNav/SideNav.js +133 -0
  185. package/lib-module/SideNav/index.js +1 -0
  186. package/lib-module/Skeleton/Skeleton.js +117 -0
  187. package/lib-module/Skeleton/index.js +2 -0
  188. package/lib-module/Skeleton/skeleton.constant.js +3 -0
  189. package/lib-module/Skeleton/skeletonWebAnimation.js +18 -0
  190. package/lib-module/Skeleton/useSkeletonNativeAnimation.js +24 -0
  191. package/lib-module/Spacer/Spacer.js +97 -0
  192. package/lib-module/Spacer/index.js +2 -0
  193. package/lib-module/StackView/StackView.js +124 -0
  194. package/lib-module/StackView/StackWrap.js +48 -0
  195. package/lib-module/StackView/StackWrap.native.js +3 -0
  196. package/lib-module/StackView/StackWrapBox.js +114 -0
  197. package/lib-module/StackView/StackWrapGap.js +58 -0
  198. package/lib-module/StackView/common.js +32 -0
  199. package/lib-module/StackView/getStackedContent.js +123 -0
  200. package/lib-module/StackView/index.js +5 -0
  201. package/lib-module/StepTracker/Step.js +229 -0
  202. package/lib-module/StepTracker/StepTracker.js +175 -0
  203. package/lib-module/StepTracker/dictionary.js +10 -0
  204. package/lib-module/StepTracker/index.js +2 -0
  205. package/lib-module/Tabs/Tabs.js +113 -0
  206. package/lib-module/Tabs/TabsItem.js +215 -0
  207. package/lib-module/Tabs/index.js +2 -0
  208. package/lib-module/Tags/Tags.js +238 -0
  209. package/lib-module/Tags/index.js +2 -0
  210. package/lib-module/TextInput/TextArea.js +88 -0
  211. package/lib-module/TextInput/TextInput.js +60 -0
  212. package/lib-module/TextInput/TextInputBase.js +233 -0
  213. package/lib-module/TextInput/index.js +3 -0
  214. package/lib-module/TextInput/propTypes.js +31 -0
  215. package/lib-module/ThemeProvider/ThemeProvider.js +35 -0
  216. package/lib-module/ThemeProvider/index.js +6 -0
  217. package/lib-module/ThemeProvider/useSetTheme.js +22 -0
  218. package/lib-module/ThemeProvider/useTheme.js +14 -0
  219. package/lib-module/ThemeProvider/useThemeTokens.js +105 -0
  220. package/lib-module/ThemeProvider/utils/index.js +2 -0
  221. package/lib-module/ThemeProvider/utils/styles.js +174 -0
  222. package/lib-module/ThemeProvider/utils/theme-tokens.js +151 -0
  223. package/lib-module/ToggleSwitch/ToggleSwitch.js +224 -0
  224. package/lib-module/ToggleSwitch/ToggleSwitchGroup.js +202 -0
  225. package/lib-module/ToggleSwitch/index.js +3 -0
  226. package/lib-module/Tooltip/Backdrop.js +52 -0
  227. package/lib-module/Tooltip/Backdrop.native.js +43 -0
  228. package/lib-module/Tooltip/Tooltip.js +332 -0
  229. package/lib-module/Tooltip/dictionary.js +8 -0
  230. package/lib-module/Tooltip/getTooltipPosition.js +164 -0
  231. package/lib-module/Tooltip/index.js +2 -0
  232. package/lib-module/TooltipButton/TooltipButton.js +71 -0
  233. package/lib-module/TooltipButton/index.js +2 -0
  234. package/lib-module/Typography/Typography.js +118 -0
  235. package/lib-module/Typography/index.js +2 -0
  236. package/lib-module/ViewportProvider/ViewportProvider.js +28 -0
  237. package/lib-module/ViewportProvider/index.js +3 -0
  238. package/lib-module/ViewportProvider/useViewport.js +3 -0
  239. package/lib-module/ViewportProvider/useViewportListener.js +43 -0
  240. package/lib-module/index.js +48 -0
  241. package/lib-module/utils/a11y/index.js +2 -0
  242. package/lib-module/utils/a11y/semantics.js +154 -0
  243. package/lib-module/utils/a11y/textSize.js +34 -0
  244. package/lib-module/utils/animation/index.js +2 -0
  245. package/lib-module/utils/animation/useVerticalExpandAnimation.js +49 -0
  246. package/lib-module/utils/children.js +118 -0
  247. package/lib-module/utils/index.js +15 -0
  248. package/lib-module/utils/info/index.js +7 -0
  249. package/lib-module/utils/info/platform/index.js +11 -0
  250. package/lib-module/utils/info/platform/platform.android.js +1 -0
  251. package/lib-module/utils/info/platform/platform.ios.js +1 -0
  252. package/lib-module/utils/info/platform/platform.js +1 -0
  253. package/lib-module/utils/info/platform/platform.native.js +4 -0
  254. package/lib-module/utils/info/versions.js +5 -0
  255. package/lib-module/utils/input.js +180 -0
  256. package/lib-module/utils/pressability.js +97 -0
  257. package/lib-module/utils/props/a11yProps.js +140 -0
  258. package/lib-module/utils/props/clickProps.js +25 -0
  259. package/lib-module/utils/props/componentPropType.js +63 -0
  260. package/lib-module/utils/props/copyPropTypes.js +2 -0
  261. package/lib-module/utils/props/getPropSelector.js +6 -0
  262. package/lib-module/utils/props/hrefAttrsProp.js +30 -0
  263. package/lib-module/utils/props/index.js +16 -0
  264. package/lib-module/utils/props/inputSupportsProps.js +54 -0
  265. package/lib-module/utils/props/linkProps.js +47 -0
  266. package/lib-module/utils/props/paddingProp.js +9 -0
  267. package/lib-module/utils/props/pressProps.js +42 -0
  268. package/lib-module/utils/props/rectProp.js +9 -0
  269. package/lib-module/utils/props/responsiveProps.js +30 -0
  270. package/lib-module/utils/props/selectSystemProps.js +24 -0
  271. package/lib-module/utils/props/spacingProps.js +56 -0
  272. package/lib-module/utils/props/tokens.js +120 -0
  273. package/lib-module/utils/props/variantProp.js +18 -0
  274. package/lib-module/utils/props/viewProps.js +22 -0
  275. package/lib-module/utils/ssr.js +35 -0
  276. package/lib-module/utils/useCopy.js +42 -0
  277. package/lib-module/utils/useHash.js +44 -0
  278. package/lib-module/utils/useHash.native.js +7 -0
  279. package/lib-module/utils/useResponsiveProp.js +47 -0
  280. package/lib-module/utils/useSpacingScale.js +123 -0
  281. package/lib-module/utils/useUniqueId.js +12 -0
  282. package/lib-module/utils/withLinkRouter.js +82 -0
  283. package/package.json +9 -5
  284. package/src/A11yText/index.jsx +7 -3
  285. package/src/ActivityIndicator/Spinner.jsx +56 -44
  286. package/src/ActivityIndicator/Spinner.native.jsx +20 -12
  287. package/src/Box/Box.jsx +10 -9
  288. package/src/Button/ButtonBase.jsx +9 -8
  289. package/src/Card/Card.jsx +7 -4
  290. package/src/Card/PressableCardBase.jsx +12 -12
  291. package/src/Checkbox/Checkbox.jsx +12 -5
  292. package/src/Divider/Divider.jsx +17 -10
  293. package/src/ExpandCollapse/Control.jsx +12 -7
  294. package/src/ExpandCollapse/ExpandCollapse.jsx +13 -3
  295. package/src/ExpandCollapse/Panel.jsx +15 -5
  296. package/src/Feedback/Feedback.jsx +13 -3
  297. package/src/Fieldset/Fieldset.jsx +1 -1
  298. package/src/HorizontalScroll/HorizontalScroll.jsx +13 -6
  299. package/src/HorizontalScroll/HorizontalScrollButton.jsx +21 -58
  300. package/src/IconButton/IconButton.jsx +12 -8
  301. package/src/InputLabel/InputLabel.jsx +16 -2
  302. package/src/InputSupports/InputSupports.jsx +1 -1
  303. package/src/Link/LinkBase.jsx +10 -9
  304. package/src/List/List.jsx +12 -5
  305. package/src/List/ListItem.jsx +16 -2
  306. package/src/Modal/Modal.jsx +63 -50
  307. package/src/Notification/Notification.jsx +23 -6
  308. package/src/Pagination/Pagination.jsx +10 -3
  309. package/src/Progress/Progress.jsx +5 -3
  310. package/src/Progress/ProgressBar.jsx +8 -6
  311. package/src/Radio/Radio.jsx +13 -5
  312. package/src/Radio/RadioButton.jsx +13 -3
  313. package/src/Radio/RadioGroup.jsx +14 -2
  314. package/src/RadioCard/RadioCard.jsx +9 -6
  315. package/src/RadioCard/RadioCardGroup.jsx +16 -4
  316. package/src/Search/Search.jsx +15 -3
  317. package/src/Select/Select.jsx +21 -7
  318. package/src/SideNav/Item.jsx +15 -7
  319. package/src/SideNav/SideNav.jsx +13 -2
  320. package/src/Skeleton/Skeleton.jsx +55 -43
  321. package/src/Spacer/Spacer.jsx +8 -16
  322. package/src/StackView/StackView.jsx +13 -12
  323. package/src/StackView/StackWrapBox.jsx +12 -12
  324. package/src/StackView/StackWrapGap.jsx +9 -7
  325. package/src/StepTracker/Step.jsx +7 -4
  326. package/src/StepTracker/StepTracker.jsx +8 -8
  327. package/src/Tabs/Tabs.jsx +16 -3
  328. package/src/Tabs/TabsItem.jsx +13 -9
  329. package/src/Tags/Tags.jsx +20 -5
  330. package/src/TextInput/TextArea.jsx +20 -8
  331. package/src/TextInput/TextInput.jsx +20 -8
  332. package/src/TextInput/TextInputBase.jsx +13 -3
  333. package/src/ToggleSwitch/ToggleSwitch.jsx +16 -5
  334. package/src/ToggleSwitch/ToggleSwitchGroup.jsx +14 -6
  335. package/src/Tooltip/Tooltip.jsx +13 -3
  336. package/src/TooltipButton/TooltipButton.jsx +6 -4
  337. package/src/Typography/Typography.jsx +10 -6
  338. package/src/index.js +1 -1
  339. package/src/utils/children.jsx +2 -1
  340. package/src/utils/index.js +1 -0
  341. package/src/utils/props/index.js +1 -0
  342. package/src/{InputSupports/propTypes.js → utils/props/inputSupportsProps.js} +2 -4
  343. package/src/utils/ssr.js +35 -0
  344. package/release-context.json +0 -7
@@ -3,10 +3,24 @@ import React, { forwardRef, useState } from 'react'
3
3
  import { View, Platform, StyleSheet } from 'react-native'
4
4
  import PropTypes from 'prop-types'
5
5
  import { applyTextStyles, useThemeTokens, applyOuterBorder } from '../ThemeProvider'
6
- import { componentPropType, getTokensPropType, useInputValue, variantProp } from '../utils'
6
+ import {
7
+ a11yProps,
8
+ componentPropType,
9
+ getTokensPropType,
10
+ inputSupportsProps,
11
+ selectSystemProps,
12
+ useInputValue,
13
+ variantProp,
14
+ viewProps
15
+ } from '../utils'
7
16
  import Picker from './Picker'
8
17
  import InputSupports from '../InputSupports'
9
- import inputSupportsProps from '../InputSupports/propTypes'
18
+
19
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([
20
+ a11yProps,
21
+ inputSupportsProps,
22
+ viewProps
23
+ ])
10
24
 
11
25
  const selectInputStyles = (
12
26
  {
@@ -180,7 +194,7 @@ const Select = forwardRef(
180
194
  const handleMouseOver = () => setIsHovered(true)
181
195
  const handleMouseOut = () => setIsHovered(false)
182
196
 
183
- const { props: supportsProps } = inputSupportsProps.select(rest)
197
+ const { props: supportsProps, ...selectedProps } = selectProps(rest)
184
198
 
185
199
  const themeTokens = useThemeTokens('Select', tokens, variant, {
186
200
  focus: isFocused,
@@ -192,8 +206,8 @@ const Select = forwardRef(
192
206
  const { icon: IconComponent, validationIcon: ValidationIconComponent } = themeTokens
193
207
 
194
208
  return (
195
- <InputSupports {...supportsProps}>
196
- {({ a11yProps, inputId }) => (
209
+ <InputSupports {...supportsProps} {...selectedProps}>
210
+ {({ inputId, ...props }) => (
197
211
  <View style={selectOuterBorderStyles(themeTokens)}>
198
212
  <Picker
199
213
  ref={ref}
@@ -208,7 +222,7 @@ const Select = forwardRef(
208
222
  placeholder={
209
223
  placeholder !== undefined ? { label: placeholder, value: '' } : undefined
210
224
  }
211
- {...a11yProps}
225
+ {...props}
212
226
  nativeID={inputId}
213
227
  testID={testID}
214
228
  >
@@ -243,7 +257,7 @@ const Select = forwardRef(
243
257
  Select.displayName = 'Select'
244
258
 
245
259
  Select.propTypes = {
246
- ...inputSupportsProps.types,
260
+ ...selectedSystemPropTypes,
247
261
  /**
248
262
  * Initial value for the uncontrolled version.
249
263
  */
@@ -1,11 +1,20 @@
1
1
  import React, { forwardRef } from 'react'
2
2
  import { Pressable } from 'react-native'
3
3
  import PropTypes from 'prop-types'
4
-
5
- import { variantProp, getTokensPropType, a11yProps, hrefAttrsProp, linkProps } from '../utils'
4
+ import {
5
+ a11yProps,
6
+ getTokensPropType,
7
+ hrefAttrsProp,
8
+ linkProps,
9
+ selectSystemProps,
10
+ variantProp,
11
+ viewProps
12
+ } from '../utils'
6
13
  import { useThemeTokensCallback, verticalAlignRow } from '../ThemeProvider'
7
14
  import ItemContent from './ItemContent'
8
15
 
16
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, linkProps, viewProps])
17
+
9
18
  function selectItemStyles({
10
19
  backgroundColor,
11
20
  borderColor,
@@ -58,7 +67,7 @@ const Item = forwardRef(
58
67
  const handlePress = () => onPress(itemId, groupId)
59
68
 
60
69
  const { hrefAttrs, rest } = hrefAttrsProp.bundle(props)
61
- const linkPropSet = linkProps.select({
70
+ const selectedProps = selectProps({
62
71
  accessibilityRole,
63
72
  href,
64
73
  onPress: handlePress,
@@ -79,9 +88,8 @@ const Item = forwardRef(
79
88
  <Pressable
80
89
  ref={ref}
81
90
  style={getPressableStyle}
82
- {...linkPropSet}
83
91
  accessibilityState={{ selected: isActive }}
84
- testID={testID}
92
+ {...selectedProps}
85
93
  >
86
94
  {(pressableState) => {
87
95
  const themeTokens = getTokens(getAppearanceState(pressableState))
@@ -94,6 +102,7 @@ const Item = forwardRef(
94
102
  Item.displayName = 'Item'
95
103
 
96
104
  Item.propTypes = {
105
+ ...selectedSystemPropTypes,
97
106
  /**
98
107
  * Text content of the `Item`.
99
108
  */
@@ -126,8 +135,7 @@ Item.propTypes = {
126
135
  */
127
136
  isExpanded: PropTypes.bool,
128
137
  tokens: getTokensPropType('SideNavItem'),
129
- variant: variantProp.propType,
130
- ...a11yProps.types
138
+ variant: variantProp.propType
131
139
  }
132
140
 
133
141
  export default Item
@@ -5,7 +5,14 @@ import ExpandCollapse from '../ExpandCollapse'
5
5
  import Item from './Item'
6
6
  import ItemsGroup from './ItemsGroup'
7
7
  import { useThemeTokens } from '../ThemeProvider'
8
- import { componentPropType, getTokensPropType, variantProp } from '../utils'
8
+ import {
9
+ a11yProps,
10
+ componentPropType,
11
+ getTokensPropType,
12
+ selectSystemProps,
13
+ variantProp,
14
+ viewProps
15
+ } from '../utils'
9
16
 
10
17
  function selectBorderStyles(tokens) {
11
18
  return {
@@ -15,13 +22,15 @@ function selectBorderStyles(tokens) {
15
22
  }
16
23
  }
17
24
 
25
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
26
+
18
27
  /**
19
28
  ## Usage Criteria
20
29
  - Use in conjunction with a large amount of educational / informational content
21
30
  - Allow the user to navigate between options frequently and efficiently
22
31
  */
23
32
  const SideNav = forwardRef(
24
- ({ children, variant = {}, tokens, accordion = true, itemTokens, groupTokens }, ref) => {
33
+ ({ children, variant = {}, tokens, accordion = true, itemTokens, groupTokens, ...rest }, ref) => {
25
34
  const themeTokens = useThemeTokens('SideNav', tokens, variant)
26
35
  const [active, setActive] = useState({ groupId: undefined, itemId: undefined })
27
36
 
@@ -38,6 +47,7 @@ const SideNav = forwardRef(
38
47
  ref={ref}
39
48
  maxOpen={accordion ? 1 : null}
40
49
  style={selectBorderStyles(themeTokens)}
50
+ {...selectProps(rest)}
41
51
  >
42
52
  {({ openIds, onToggle }) => {
43
53
  const renderItem = (item, index, groupId) => {
@@ -97,6 +107,7 @@ const SideNav = forwardRef(
97
107
  SideNav.displayName = 'SideNav'
98
108
 
99
109
  SideNav.propTypes = {
110
+ ...selectedSystemPropTypes,
100
111
  /**
101
112
  * Specifies the structure and links of the `SideNav`. It may only consist of `SideNav.Item` and `SideNav.ItemsGroup`.
102
113
  */
@@ -3,10 +3,19 @@ import { Animated, Platform } from 'react-native'
3
3
  import propTypes from 'prop-types'
4
4
  import StackView from '../StackView'
5
5
  import { useThemeTokens } from '../ThemeProvider'
6
- import { getTokensPropType, useSpacingScale, variantProp } from '../utils'
6
+ import {
7
+ a11yProps,
8
+ getTokensPropType,
9
+ selectSystemProps,
10
+ useSpacingScale,
11
+ variantProp,
12
+ viewProps
13
+ } from '../utils'
7
14
  import useSkeletonNativeAnimation from './useSkeletonNativeAnimation'
8
15
  import skeletonWebAnimation from './skeletonWebAnimation'
9
16
 
17
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
18
+
10
19
  const selectSkeletonStyles = ({ color, radius, fadeAnimation }) => ({
11
20
  backgroundColor: color,
12
21
  borderRadius: radius,
@@ -27,62 +36,65 @@ const selectSquareStyles = ({ radius }) => ({
27
36
  borderRadius: radius
28
37
  })
29
38
 
30
- const Skeleton = forwardRef(({ tokens, variant, size, characters, lines, shape = 'line' }, ref) => {
31
- const themeTokens = useThemeTokens('Skeleton', tokens, variant)
32
- const skeletonHeight = useSpacingScale(size || themeTokens.size)
33
- const nativeAnimation = useSkeletonNativeAnimation()
39
+ const Skeleton = forwardRef(
40
+ ({ tokens, variant, size, characters, lines, shape = 'line', ...rest }, ref) => {
41
+ const themeTokens = useThemeTokens('Skeleton', tokens, variant)
42
+ const skeletonHeight = useSpacingScale(size || themeTokens.size)
43
+ const nativeAnimation = useSkeletonNativeAnimation()
44
+
45
+ const getAnimationBaseOnPlatform = () => {
46
+ if (Platform.OS !== 'web') {
47
+ return nativeAnimation
48
+ }
34
49
 
35
- const getAnimationBaseOnPlatform = () => {
36
- if (Platform.OS !== 'web') {
37
- return nativeAnimation
50
+ return skeletonWebAnimation
38
51
  }
39
52
 
40
- return skeletonWebAnimation
41
- }
53
+ const getLineWidth = () => {
54
+ if (characters) {
55
+ return characters * themeTokens.baseWidth
56
+ }
42
57
 
43
- const getLineWidth = () => {
44
- if (characters) {
45
- return characters * themeTokens.baseWidth
58
+ return themeTokens.characters * themeTokens.baseWidth
46
59
  }
47
60
 
48
- return themeTokens.characters * themeTokens.baseWidth
49
- }
61
+ const getStyledBasedOnShape = () => {
62
+ if (shape === 'circle') {
63
+ return selectShapeStyles({ skeletonHeight })
64
+ }
50
65
 
51
- const getStyledBasedOnShape = () => {
52
- if (shape === 'circle') {
53
- return selectShapeStyles({ skeletonHeight })
54
- }
66
+ if (shape === 'box') {
67
+ return [
68
+ selectShapeStyles({ skeletonHeight }),
69
+ selectSquareStyles({ radius: themeTokens.squareRadius })
70
+ ]
71
+ }
55
72
 
56
- if (shape === 'box') {
57
- return [
58
- selectShapeStyles({ skeletonHeight }),
59
- selectSquareStyles({ radius: themeTokens.squareRadius })
60
- ]
73
+ return selectLineStyles({ skeletonHeight, lineWidth: getLineWidth() })
61
74
  }
62
75
 
63
- return selectLineStyles({ skeletonHeight, lineWidth: getLineWidth() })
76
+ const renderSkeleton = (index = 0) => (
77
+ <Animated.View
78
+ testID="skeleton"
79
+ key={`skeleton-${index + 1}`}
80
+ style={[
81
+ selectSkeletonStyles({ ...themeTokens, fadeAnimation: getAnimationBaseOnPlatform() }),
82
+ getStyledBasedOnShape()
83
+ ]}
84
+ />
85
+ )
86
+
87
+ return (
88
+ <StackView space={themeTokens.spaceBetweenLines} ref={ref} {...selectProps(rest)}>
89
+ {lines > 1 ? [...Array(lines)].map((_, index) => renderSkeleton(index)) : renderSkeleton()}
90
+ </StackView>
91
+ )
64
92
  }
65
-
66
- const renderSkeleton = (index = 0) => (
67
- <Animated.View
68
- testID="skeleton"
69
- key={`skeleton-${index + 1}`}
70
- style={[
71
- selectSkeletonStyles({ ...themeTokens, fadeAnimation: getAnimationBaseOnPlatform() }),
72
- getStyledBasedOnShape()
73
- ]}
74
- />
75
- )
76
-
77
- return (
78
- <StackView space={themeTokens.spaceBetweenLines} ref={ref}>
79
- {lines > 1 ? [...Array(lines)].map((_, index) => renderSkeleton(index)) : renderSkeleton()}
80
- </StackView>
81
- )
82
- })
93
+ )
83
94
  Skeleton.displayName = 'Skeleton'
84
95
 
85
96
  Skeleton.propTypes = {
97
+ ...selectedSystemPropTypes,
86
98
  tokens: getTokensPropType('Skeleton'),
87
99
  variant: variantProp.propType,
88
100
  size: propTypes.number,
@@ -1,13 +1,15 @@
1
1
  import React, { forwardRef } from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import { StyleSheet, View } from 'react-native'
4
+ import { a11yProps, selectSystemProps, spacingProps, useSpacingScale, viewProps } from '../utils'
4
5
 
5
- import { useSpacingScale, spacingProps } from '../utils'
6
6
  /**
7
7
  * @typedef {import('../utils/props/spacingProps.js').SpacingValue} SpacingValue
8
8
  * @typedef {import('../utils/props/spacingProps.js').SpacingObject} SpacingObject
9
9
  */
10
10
 
11
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
12
+
11
13
  const selectSizeStyle = (size, direction) => ({
12
14
  // Only apply space in one direction at a time, else large spacers will increase the
13
15
  // 'across' size of the parent and mess up siblings with styles like `alignItems: stretch`.
@@ -54,16 +56,16 @@ const selectSizeStyle = (size, direction) => ({
54
56
  * Spacer has no content and is ignored by tools such as screen readers. Use `Divider` for
55
57
  * separations between elements that may be treated as semantically meaningful on web.
56
58
  */
57
- const Spacer = forwardRef(({ space = 1, direction = 'column', testID, dataSet }, ref) => {
59
+ const Spacer = forwardRef(({ space = 1, direction = 'column', ...rest }, ref) => {
58
60
  const size = useSpacingScale(space)
59
61
  const sizeStyle = selectSizeStyle(size, direction)
60
- return (
61
- <View ref={ref} testID={testID} style={[staticStyles.stretch, sizeStyle]} dataSet={dataSet} />
62
- )
62
+
63
+ return <View ref={ref} style={[staticStyles.stretch, sizeStyle]} {...selectProps(rest)} />
63
64
  })
64
65
  Spacer.displayName = 'Spacer'
65
66
 
66
67
  Spacer.propTypes = {
68
+ ...selectedSystemPropTypes,
67
69
  /**
68
70
  * The size of the spacer according to the theme's spacing scale.
69
71
  * Either a number corresponding to a position on the theme's spacing scale (1 is smallest, 2 is second smallest, etc),
@@ -76,17 +78,7 @@ Spacer.propTypes = {
76
78
  * - `'column'` (default) applies space vertically; has a fixed height and not width.
77
79
  * - `'row'` applies space horizontally; has a fixed width and not height.
78
80
  */
79
- direction: PropTypes.oneOf(['column', 'row']),
80
- /**
81
- * @ignore
82
- */
83
- dataSet: PropTypes.object,
84
- /**
85
- * @ignore
86
- * In tests, the only way to select Spacers is with testID prop and getByTestId, since they have no content,
87
- * no accessibility role, and there is no equivalent of nextSibling in React Native Testing Library.
88
- */
89
- testID: PropTypes.string
81
+ direction: PropTypes.oneOf(['column', 'row'])
90
82
  }
91
83
 
92
84
  const staticStyles = StyleSheet.create({
@@ -4,21 +4,24 @@ import { View } from 'react-native'
4
4
 
5
5
  import Divider from '../Divider'
6
6
  import {
7
- spacingProps,
8
7
  a11yProps,
8
+ getA11yPropsFromHtmlTag,
9
9
  getTokensPropType,
10
+ layoutTags,
10
11
  responsiveProps,
11
- variantProp,
12
- viewProps,
12
+ selectSystemProps,
13
+ spacingProps,
13
14
  useResponsiveProp,
14
- getA11yPropsFromHtmlTag,
15
- layoutTags
15
+ variantProp,
16
+ viewProps
16
17
  } from '../utils'
17
18
  import { useThemeTokens } from '../ThemeProvider'
18
19
  import { useViewport } from '../ViewportProvider'
19
20
  import getStackedContent from './getStackedContent'
20
21
  import { staticStyles, selectFlexStyles } from './common'
21
22
 
23
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
24
+
22
25
  /**
23
26
  * StackView evenly spaces its children, by default placing `Spacer` components between them.
24
27
  *
@@ -78,17 +81,16 @@ const StackView = forwardRef(
78
81
  ) => {
79
82
  const viewport = useViewport()
80
83
  const direction = useResponsiveProp(directionProp, 'column')
81
- const props = {
84
+ const selectedProps = selectProps({
82
85
  ...getA11yPropsFromHtmlTag(tag, accessibilityRole),
83
- ...a11yProps.select(rest),
84
- ...viewProps.select(rest)
85
- }
86
+ ...rest
87
+ })
86
88
  const content = getStackedContent(children, { direction, divider, space })
87
89
  const themeTokens = useThemeTokens('StackView', tokens, variant, { viewport })
88
90
  const flexStyles = selectFlexStyles(themeTokens)
89
91
 
90
92
  return (
91
- <View ref={ref} {...props} style={[flexStyles, staticStyles[direction]]}>
93
+ <View ref={ref} {...selectedProps} style={[flexStyles, staticStyles[direction]]}>
92
94
  {content}
93
95
  </View>
94
96
  )
@@ -97,8 +99,7 @@ const StackView = forwardRef(
97
99
  StackView.displayName = 'StackView'
98
100
 
99
101
  StackView.propTypes = {
100
- ...a11yProps.propTypes,
101
- ...viewProps.types,
102
+ ...selectedSystemPropTypes,
102
103
  tokens: getTokensPropType('StackView'),
103
104
  variant: variantProp.propType,
104
105
  /**
@@ -1,23 +1,25 @@
1
1
  import React, { forwardRef } from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import { View } from 'react-native'
4
-
5
4
  import {
6
- spacingProps,
7
5
  a11yProps,
6
+ getA11yPropsFromHtmlTag,
8
7
  getTokensPropType,
8
+ layoutTags,
9
9
  responsiveProps,
10
+ selectSystemProps,
11
+ spacingProps,
10
12
  useSpacingScale,
11
13
  useResponsiveProp,
12
- viewProps,
13
- getA11yPropsFromHtmlTag,
14
- layoutTags
14
+ viewProps
15
15
  } from '../utils'
16
16
  import { useThemeTokens } from '../ThemeProvider'
17
17
  import { useViewport } from '../ViewportProvider'
18
18
  import getStackedContent from './getStackedContent'
19
19
  import { staticStyles, selectFlexStyles } from './common'
20
20
 
21
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
22
+
21
23
  const offsetSides = {
22
24
  row: 'marginBottom',
23
25
  column: 'marginRight'
@@ -64,11 +66,10 @@ const StackWrapBox = forwardRef(
64
66
  const direction = useResponsiveProp(directionProp, 'row')
65
67
  const themeTokens = useThemeTokens('StackView', tokens, variant, { viewport })
66
68
  const flexStyles = selectFlexStyles(themeTokens)
67
- const props = {
69
+ const selectedProps = selectProps({
68
70
  ...getA11yPropsFromHtmlTag(tag, accessibilityRole),
69
- ...a11yProps.select(rest),
70
- ...viewProps.select(rest)
71
- }
71
+ ...rest
72
+ })
72
73
 
73
74
  // Mimic CSS `gap` using box spacing on the side after a wrapped row then offsetting it on the last row.
74
75
  const gapSize = useSpacingScale(gap)
@@ -79,7 +80,7 @@ const StackWrapBox = forwardRef(
79
80
  return (
80
81
  <View
81
82
  ref={ref}
82
- {...props}
83
+ {...selectedProps}
83
84
  style={[flexStyles, staticStyles.wrap, staticStyles[direction], offsetStyle]}
84
85
  >
85
86
  {content}
@@ -90,8 +91,7 @@ const StackWrapBox = forwardRef(
90
91
  StackWrapBox.displayName = 'StackWrapBox'
91
92
 
92
93
  StackWrapBox.propTypes = {
93
- ...a11yProps.propTypes,
94
- ...viewProps.types,
94
+ ...selectedSystemPropTypes,
95
95
  tokens: getTokensPropType('StackView'),
96
96
  /**
97
97
  * Sets the `flexDirection` of the container
@@ -4,16 +4,19 @@ import { View } from 'react-native'
4
4
  import StackWrapBox from './StackWrapBox'
5
5
  import {
6
6
  a11yProps,
7
+ getA11yPropsFromHtmlTag,
8
+ selectSystemProps,
7
9
  useSpacingScale,
8
10
  useResponsiveProp,
9
- viewProps,
10
- getA11yPropsFromHtmlTag
11
+ viewProps
11
12
  } from '../utils'
12
13
  import { useThemeTokens } from '../ThemeProvider'
13
14
  import { useViewport } from '../ViewportProvider'
14
15
  import getStackedContent from './getStackedContent'
15
16
  import { staticStyles, selectFlexStyles } from './common'
16
17
 
18
+ const [selectProps] = selectSystemProps([a11yProps, viewProps])
19
+
17
20
  /**
18
21
  * The primary implementation of StackWrap.
19
22
  *
@@ -42,11 +45,10 @@ const StackWrapGap = forwardRef(
42
45
  const direction = useResponsiveProp(directionProp, 'row')
43
46
  const themeTokens = useThemeTokens('StackView', tokens, variant, { viewport })
44
47
  const flexStyles = selectFlexStyles(themeTokens)
45
- const props = {
48
+ const selectedProps = selectProps({
46
49
  ...getA11yPropsFromHtmlTag(tag, accessibilityRole),
47
- ...a11yProps.select(rest),
48
- ...viewProps.select(rest)
49
- }
50
+ ...rest
51
+ })
50
52
 
51
53
  const size = useSpacingScale(space)
52
54
  const gapStyle = { gap: size }
@@ -56,7 +58,7 @@ const StackWrapGap = forwardRef(
56
58
  return (
57
59
  <View
58
60
  ref={ref}
59
- {...props}
61
+ {...selectedProps}
60
62
  style={[flexStyles, staticStyles.wrap, staticStyles[direction], gapStyle]}
61
63
  >
62
64
  {content}
@@ -1,12 +1,13 @@
1
1
  import React from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import { StyleSheet, Text, View } from 'react-native'
4
-
5
4
  import StackView from '../StackView'
6
5
  import Icon from '../Icon'
7
- import { getTokensPropType, variantProp } from '../utils'
6
+ import { a11yProps, getTokensPropType, selectSystemProps, variantProp, viewProps } from '../utils'
8
7
  import { applyTextStyles } from '../ThemeProvider'
9
8
 
9
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
10
+
10
11
  const selectCompletedIconTokens = ({ completedIconColor, completedIconSize }) => ({
11
12
  size: completedIconSize,
12
13
  color: completedIconColor
@@ -117,7 +118,7 @@ const getStepTestID = (isCompleted, isCurrent) => {
117
118
  /**
118
119
  * A single step of a StepTracker.
119
120
  */
120
- const Step = ({ label, name, status = 0, stepCount = 0, stepIndex = 0, tokens }) => {
121
+ const Step = ({ label, name, status = 0, stepCount = 0, stepIndex = 0, tokens, ...rest }) => {
121
122
  const { completedIcon, showStepLabel, showStepName, ...themeTokens } = tokens
122
123
  const isFirst = stepIndex === 0
123
124
  const isLast = stepIndex === stepCount - 1
@@ -131,7 +132,8 @@ const Step = ({ label, name, status = 0, stepCount = 0, stepIndex = 0, tokens })
131
132
  tokens={{ alignItems: 'stretch', flexGrow: 1 }}
132
133
  accessibilityLabel={label}
133
134
  accessibilityLevel={2}
134
- accessibilityCurrent={status === stepIndex ? 'true' : 'false'}
135
+ accessibilityCurrent={status === stepIndex}
136
+ {...selectProps(rest)}
135
137
  >
136
138
  <StackView direction="row" space={0} tokens={{ alignItems: 'center', flexGrow: 0 }}>
137
139
  <View
@@ -178,6 +180,7 @@ const Step = ({ label, name, status = 0, stepCount = 0, stepIndex = 0, tokens })
178
180
  }
179
181
 
180
182
  Step.propTypes = {
183
+ ...selectedSystemPropTypes,
181
184
  label: PropTypes.string.isRequired,
182
185
  name: PropTypes.string.isRequired,
183
186
  status: PropTypes.number.isRequired,
@@ -1,17 +1,16 @@
1
1
  import React, { forwardRef } from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import { StyleSheet, Text, View } from 'react-native'
4
-
5
4
  import StackView from '../StackView'
6
5
  import { applyTextStyles, useThemeTokens } from '../ThemeProvider'
7
- import { getTokensPropType, variantProp } from '../utils'
8
- import { a11yProps } from '../utils/props'
6
+ import { a11yProps, getTokensPropType, selectSystemProps, variantProp, viewProps } from '../utils'
9
7
  import { useViewport } from '../ViewportProvider'
10
8
  import useCopy from '../utils/useCopy'
11
-
12
9
  import Step from './Step'
13
10
  import defaultDictionary from './dictionary'
14
11
 
12
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
13
+
15
14
  const selectContainerStyles = ({
16
15
  containerPaddingBottom,
17
16
  containerPaddingLeft,
@@ -101,7 +100,7 @@ const StepTracker = forwardRef(
101
100
  .replace('%{stepCount}', steps.length)
102
101
  .replace('%{stepLabel}', current < steps.length ? steps[current] : steps[steps.length - 1])
103
102
  if (!steps.length) return null
104
- const accessibilityProps = {
103
+ const selectedProps = selectProps({
105
104
  accessibilityLabel: stepTrackerLabel,
106
105
  accessibilityLevel: 1,
107
106
  accessibilityRole: 'progressbar',
@@ -111,11 +110,11 @@ const StepTracker = forwardRef(
111
110
  now: current,
112
111
  text: steps[current]
113
112
  },
114
- ...a11yProps.select(rest)
115
- }
113
+ ...rest
114
+ })
116
115
 
117
116
  return (
118
- <View ref={ref} style={selectContainerStyles(themeTokens)} {...accessibilityProps}>
117
+ <View ref={ref} style={selectContainerStyles(themeTokens)} {...selectedProps}>
119
118
  <StackView space={0}>
120
119
  <View style={staticStyles.stepsContainer}>
121
120
  {steps.map((label, index) => {
@@ -150,6 +149,7 @@ const StepTracker = forwardRef(
150
149
  StepTracker.displayName = 'StepTracker'
151
150
 
152
151
  StepTracker.propTypes = {
152
+ ...selectedSystemPropTypes,
153
153
  current: PropTypes.number,
154
154
  copy: PropTypes.oneOf(['en', 'fr']),
155
155
  dictionary: PropTypes.shape({
package/src/Tabs/Tabs.jsx CHANGED
@@ -1,16 +1,26 @@
1
1
  import React, { forwardRef, useCallback } from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import ABBPropTypes from 'airbnb-prop-types'
4
-
5
4
  import { useThemeTokens } from '../ThemeProvider'
6
5
  import StackView from '../StackView'
7
- import { getTokensPropType, variantProp, useHash, useInputValue, withLinkRouter } from '../utils'
6
+ import {
7
+ a11yProps,
8
+ getTokensPropType,
9
+ selectSystemProps,
10
+ useHash,
11
+ useInputValue,
12
+ variantProp,
13
+ viewProps,
14
+ withLinkRouter
15
+ } from '../utils'
8
16
  import HorizontalScroll, {
9
17
  horizontalScrollUtils,
10
18
  HorizontalScrollButton
11
19
  } from '../HorizontalScroll'
12
20
  import TabsItem from './TabsItem'
13
21
 
22
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
23
+
14
24
  const { selectHorizontalScrollTokens, useItemPositions } = horizontalScrollUtils
15
25
 
16
26
  /**
@@ -29,7 +39,8 @@ const Tabs = forwardRef(
29
39
  onChange,
30
40
  items = [],
31
41
  LinkRouter,
32
- linkRouterProps
42
+ linkRouterProps,
43
+ ...rest
33
44
  },
34
45
  ref
35
46
  ) => {
@@ -58,6 +69,7 @@ const Tabs = forwardRef(
58
69
  tokens={selectHorizontalScrollTokens(themeTokens)}
59
70
  scrollButtonTokens={scrollButtonTokens}
60
71
  accessibilityRole="tablist"
72
+ {...selectProps(rest)}
61
73
  >
62
74
  <StackView space={space} direction="row">
63
75
  {items.map(
@@ -102,6 +114,7 @@ const Tabs = forwardRef(
102
114
  Tabs.displayName = 'Tabs'
103
115
 
104
116
  Tabs.propTypes = {
117
+ ...selectedSystemPropTypes,
105
118
  ...withLinkRouter.PropTypes,
106
119
  items: PropTypes.arrayOf(
107
120
  PropTypes.shape({