@telus-uds/components-base 1.3.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 (342) hide show
  1. package/.turbo/turbo-build.log +5 -2
  2. package/CHANGELOG.json +38 -0
  3. package/CHANGELOG.md +15 -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 +88 -424
  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 -6
  23. package/lib/IconButton/IconButton.js +6 -6
  24. package/lib/InputLabel/InputLabel.js +7 -2
  25. package/lib/InputSupports/InputSupports.js +2 -2
  26. package/lib/Link/LinkBase.js +5 -6
  27. package/lib/List/List.js +4 -6
  28. package/lib/List/ListItem.js +6 -2
  29. package/lib/Modal/Modal.js +6 -2
  30. package/lib/Notification/Notification.js +7 -2
  31. package/lib/Pagination/Pagination.js +8 -3
  32. package/lib/Progress/Progress.js +5 -4
  33. package/lib/Progress/ProgressBar.js +8 -7
  34. package/lib/Radio/Radio.js +4 -6
  35. package/lib/Radio/RadioButton.js +6 -3
  36. package/lib/Radio/RadioGroup.js +7 -2
  37. package/lib/RadioCard/RadioCard.js +4 -4
  38. package/lib/RadioCard/RadioCardGroup.js +9 -6
  39. package/lib/Search/Search.js +7 -2
  40. package/lib/Select/Select.js +10 -9
  41. package/lib/SideNav/Item.js +7 -7
  42. package/lib/SideNav/SideNav.js +7 -3
  43. package/lib/Skeleton/Skeleton.js +6 -2
  44. package/lib/Spacer/Spacer.js +7 -18
  45. package/lib/StackView/StackView.js +7 -7
  46. package/lib/StackView/StackWrapBox.js +6 -7
  47. package/lib/StackView/StackWrapGap.js +6 -5
  48. package/lib/StepTracker/Step.js +7 -3
  49. package/lib/StepTracker/StepTracker.js +7 -7
  50. package/lib/Tabs/Tabs.js +6 -2
  51. package/lib/Tabs/TabsItem.js +6 -5
  52. package/lib/Tags/Tags.js +5 -6
  53. package/lib/TextInput/TextArea.js +13 -14
  54. package/lib/TextInput/TextInput.js +13 -14
  55. package/lib/TextInput/TextInputBase.js +5 -3
  56. package/lib/ToggleSwitch/ToggleSwitch.js +10 -9
  57. package/lib/ToggleSwitch/ToggleSwitchGroup.js +5 -7
  58. package/lib/Tooltip/Tooltip.js +7 -2
  59. package/lib/TooltipButton/TooltipButton.js +7 -2
  60. package/lib/Typography/Typography.js +8 -6
  61. package/lib/index.js +7 -0
  62. package/lib/utils/children.js +5 -1
  63. package/lib/utils/index.js +14 -0
  64. package/lib/utils/props/index.js +9 -0
  65. package/lib/{InputSupports/propTypes.js → utils/props/inputSupportsProps.js} +2 -3
  66. package/lib/utils/ssr.js +51 -0
  67. package/lib-module/A11yInfoProvider/index.js +62 -0
  68. package/lib-module/A11yText/index.js +55 -0
  69. package/lib-module/ActivityIndicator/Spinner.js +76 -0
  70. package/lib-module/ActivityIndicator/Spinner.native.js +143 -0
  71. package/lib-module/ActivityIndicator/index.js +40 -0
  72. package/lib-module/ActivityIndicator/shared.js +12 -0
  73. package/lib-module/BaseProvider/index.js +26 -0
  74. package/lib-module/Box/Box.js +243 -0
  75. package/lib-module/Box/index.js +2 -0
  76. package/lib-module/Button/Button.js +25 -0
  77. package/lib-module/Button/ButtonBase.js +254 -0
  78. package/lib-module/Button/ButtonGroup.js +164 -0
  79. package/lib-module/Button/ButtonLink.js +39 -0
  80. package/lib-module/Button/index.js +4 -0
  81. package/lib-module/Button/propTypes.js +36 -0
  82. package/lib-module/Card/Card.js +83 -0
  83. package/lib-module/Card/CardBase.js +62 -0
  84. package/lib-module/Card/PressableCardBase.js +113 -0
  85. package/lib-module/Card/index.js +4 -0
  86. package/lib-module/Checkbox/Checkbox.js +321 -0
  87. package/lib-module/Checkbox/CheckboxGroup.js +218 -0
  88. package/lib-module/Checkbox/CheckboxInput.js +58 -0
  89. package/lib-module/Checkbox/CheckboxInput.native.js +6 -0
  90. package/lib-module/Checkbox/index.js +3 -0
  91. package/lib-module/Divider/Divider.js +123 -0
  92. package/lib-module/Divider/index.js +2 -0
  93. package/lib-module/ExpandCollapse/Accordion.js +15 -0
  94. package/lib-module/ExpandCollapse/Control.js +130 -0
  95. package/lib-module/ExpandCollapse/ExpandCollapse.js +94 -0
  96. package/lib-module/ExpandCollapse/Panel.js +158 -0
  97. package/lib-module/ExpandCollapse/index.js +7 -0
  98. package/lib-module/Feedback/Feedback.js +144 -0
  99. package/lib-module/Feedback/index.js +2 -0
  100. package/lib-module/Fieldset/Fieldset.js +145 -0
  101. package/lib-module/Fieldset/FieldsetContainer.js +29 -0
  102. package/lib-module/Fieldset/FieldsetContainer.native.js +20 -0
  103. package/lib-module/Fieldset/Legend.js +21 -0
  104. package/lib-module/Fieldset/Legend.native.js +28 -0
  105. package/lib-module/Fieldset/cssReset.js +14 -0
  106. package/lib-module/Fieldset/index.js +2 -0
  107. package/lib-module/FlexGrid/Col/Col.js +265 -0
  108. package/lib-module/FlexGrid/Col/index.js +2 -0
  109. package/lib-module/FlexGrid/FlexGrid.js +147 -0
  110. package/lib-module/FlexGrid/Row/Row.js +177 -0
  111. package/lib-module/FlexGrid/Row/index.js +2 -0
  112. package/lib-module/FlexGrid/helpers/index.js +18 -0
  113. package/lib-module/FlexGrid/index.js +2 -0
  114. package/lib-module/FlexGrid/providers/GutterContext.js +3 -0
  115. package/lib-module/HorizontalScroll/HorizontalScroll.js +171 -0
  116. package/lib-module/HorizontalScroll/HorizontalScrollButton.js +102 -0
  117. package/lib-module/HorizontalScroll/ScrollViewEnd.js +47 -0
  118. package/lib-module/HorizontalScroll/ScrollViewEnd.native.js +24 -0
  119. package/lib-module/HorizontalScroll/dictionary.js +11 -0
  120. package/lib-module/HorizontalScroll/index.js +11 -0
  121. package/lib-module/HorizontalScroll/itemPositions.js +106 -0
  122. package/lib-module/Icon/Icon.js +61 -0
  123. package/lib-module/Icon/IconText.js +81 -0
  124. package/lib-module/Icon/index.js +4 -0
  125. package/lib-module/IconButton/IconButton.js +115 -0
  126. package/lib-module/IconButton/index.js +2 -0
  127. package/lib-module/InputLabel/InputLabel.js +131 -0
  128. package/lib-module/InputLabel/LabelContent.js +24 -0
  129. package/lib-module/InputLabel/LabelContent.native.js +16 -0
  130. package/lib-module/InputLabel/index.js +2 -0
  131. package/lib-module/InputSupports/InputSupports.js +88 -0
  132. package/lib-module/InputSupports/index.js +2 -0
  133. package/lib-module/InputSupports/useInputSupports.js +31 -0
  134. package/lib-module/Link/ChevronLink.js +51 -0
  135. package/lib-module/Link/InlinePressable.js +37 -0
  136. package/lib-module/Link/InlinePressable.native.js +85 -0
  137. package/lib-module/Link/Link.js +27 -0
  138. package/lib-module/Link/LinkBase.js +210 -0
  139. package/lib-module/Link/TextButton.js +43 -0
  140. package/lib-module/Link/index.js +5 -0
  141. package/lib-module/List/List.js +55 -0
  142. package/lib-module/List/ListItem.js +213 -0
  143. package/lib-module/List/index.js +5 -0
  144. package/lib-module/Modal/Modal.js +208 -0
  145. package/lib-module/Modal/dictionary.js +9 -0
  146. package/lib-module/Modal/index.js +2 -0
  147. package/lib-module/Notification/Notification.js +196 -0
  148. package/lib-module/Notification/dictionary.js +8 -0
  149. package/lib-module/Notification/index.js +2 -0
  150. package/lib-module/Pagination/PageButton.js +65 -0
  151. package/lib-module/Pagination/Pagination.js +140 -0
  152. package/lib-module/Pagination/SideButton.js +103 -0
  153. package/lib-module/Pagination/dictionary.js +18 -0
  154. package/lib-module/Pagination/index.js +2 -0
  155. package/lib-module/Pagination/usePagination.js +72 -0
  156. package/lib-module/Progress/Progress.js +85 -0
  157. package/lib-module/Progress/ProgressBar.js +134 -0
  158. package/lib-module/Progress/ProgressBarBackground.js +41 -0
  159. package/lib-module/Progress/index.js +4 -0
  160. package/lib-module/Radio/Radio.js +263 -0
  161. package/lib-module/Radio/RadioButton.js +128 -0
  162. package/lib-module/Radio/RadioGroup.js +225 -0
  163. package/lib-module/Radio/RadioInput.js +60 -0
  164. package/lib-module/Radio/RadioInput.native.js +6 -0
  165. package/lib-module/Radio/index.js +3 -0
  166. package/lib-module/RadioCard/RadioCard.js +218 -0
  167. package/lib-module/RadioCard/RadioCardGroup.js +232 -0
  168. package/lib-module/RadioCard/index.js +3 -0
  169. package/lib-module/Search/Search.js +233 -0
  170. package/lib-module/Search/dictionary.js +12 -0
  171. package/lib-module/Search/index.js +2 -0
  172. package/lib-module/Select/Group.js +20 -0
  173. package/lib-module/Select/Group.native.js +14 -0
  174. package/lib-module/Select/Item.js +17 -0
  175. package/lib-module/Select/Item.native.js +9 -0
  176. package/lib-module/Select/Picker.js +67 -0
  177. package/lib-module/Select/Picker.native.js +110 -0
  178. package/lib-module/Select/Select.js +317 -0
  179. package/lib-module/Select/index.js +6 -0
  180. package/lib-module/SideNav/Item.js +139 -0
  181. package/lib-module/SideNav/ItemContent.js +45 -0
  182. package/lib-module/SideNav/ItemsGroup.js +115 -0
  183. package/lib-module/SideNav/SideNav.js +133 -0
  184. package/lib-module/SideNav/index.js +1 -0
  185. package/lib-module/Skeleton/Skeleton.js +117 -0
  186. package/lib-module/Skeleton/index.js +2 -0
  187. package/lib-module/Skeleton/skeleton.constant.js +3 -0
  188. package/lib-module/Skeleton/skeletonWebAnimation.js +18 -0
  189. package/lib-module/Skeleton/useSkeletonNativeAnimation.js +24 -0
  190. package/lib-module/Spacer/Spacer.js +97 -0
  191. package/lib-module/Spacer/index.js +2 -0
  192. package/lib-module/StackView/StackView.js +124 -0
  193. package/lib-module/StackView/StackWrap.js +48 -0
  194. package/lib-module/StackView/StackWrap.native.js +3 -0
  195. package/lib-module/StackView/StackWrapBox.js +114 -0
  196. package/lib-module/StackView/StackWrapGap.js +58 -0
  197. package/lib-module/StackView/common.js +32 -0
  198. package/lib-module/StackView/getStackedContent.js +123 -0
  199. package/lib-module/StackView/index.js +5 -0
  200. package/lib-module/StepTracker/Step.js +229 -0
  201. package/lib-module/StepTracker/StepTracker.js +175 -0
  202. package/lib-module/StepTracker/dictionary.js +10 -0
  203. package/lib-module/StepTracker/index.js +2 -0
  204. package/lib-module/Tabs/Tabs.js +113 -0
  205. package/lib-module/Tabs/TabsItem.js +215 -0
  206. package/lib-module/Tabs/index.js +2 -0
  207. package/lib-module/Tags/Tags.js +238 -0
  208. package/lib-module/Tags/index.js +2 -0
  209. package/lib-module/TextInput/TextArea.js +88 -0
  210. package/lib-module/TextInput/TextInput.js +60 -0
  211. package/lib-module/TextInput/TextInputBase.js +233 -0
  212. package/lib-module/TextInput/index.js +3 -0
  213. package/lib-module/TextInput/propTypes.js +31 -0
  214. package/lib-module/ThemeProvider/ThemeProvider.js +35 -0
  215. package/lib-module/ThemeProvider/index.js +6 -0
  216. package/lib-module/ThemeProvider/useSetTheme.js +22 -0
  217. package/lib-module/ThemeProvider/useTheme.js +14 -0
  218. package/lib-module/ThemeProvider/useThemeTokens.js +105 -0
  219. package/lib-module/ThemeProvider/utils/index.js +2 -0
  220. package/lib-module/ThemeProvider/utils/styles.js +174 -0
  221. package/lib-module/ThemeProvider/utils/theme-tokens.js +151 -0
  222. package/lib-module/ToggleSwitch/ToggleSwitch.js +224 -0
  223. package/lib-module/ToggleSwitch/ToggleSwitchGroup.js +202 -0
  224. package/lib-module/ToggleSwitch/index.js +3 -0
  225. package/lib-module/Tooltip/Backdrop.js +52 -0
  226. package/lib-module/Tooltip/Backdrop.native.js +43 -0
  227. package/lib-module/Tooltip/Tooltip.js +332 -0
  228. package/lib-module/Tooltip/dictionary.js +8 -0
  229. package/lib-module/Tooltip/getTooltipPosition.js +164 -0
  230. package/lib-module/Tooltip/index.js +2 -0
  231. package/lib-module/TooltipButton/TooltipButton.js +71 -0
  232. package/lib-module/TooltipButton/index.js +2 -0
  233. package/lib-module/Typography/Typography.js +118 -0
  234. package/lib-module/Typography/index.js +2 -0
  235. package/lib-module/ViewportProvider/ViewportProvider.js +28 -0
  236. package/lib-module/ViewportProvider/index.js +3 -0
  237. package/lib-module/ViewportProvider/useViewport.js +3 -0
  238. package/lib-module/ViewportProvider/useViewportListener.js +43 -0
  239. package/lib-module/index.js +48 -0
  240. package/lib-module/utils/a11y/index.js +2 -0
  241. package/lib-module/utils/a11y/semantics.js +154 -0
  242. package/lib-module/utils/a11y/textSize.js +34 -0
  243. package/lib-module/utils/animation/index.js +2 -0
  244. package/lib-module/utils/animation/useVerticalExpandAnimation.js +49 -0
  245. package/lib-module/utils/children.js +118 -0
  246. package/lib-module/utils/index.js +15 -0
  247. package/lib-module/utils/info/index.js +7 -0
  248. package/lib-module/utils/info/platform/index.js +11 -0
  249. package/lib-module/utils/info/platform/platform.android.js +1 -0
  250. package/lib-module/utils/info/platform/platform.ios.js +1 -0
  251. package/lib-module/utils/info/platform/platform.js +1 -0
  252. package/lib-module/utils/info/platform/platform.native.js +4 -0
  253. package/lib-module/utils/info/versions.js +5 -0
  254. package/lib-module/utils/input.js +180 -0
  255. package/lib-module/utils/pressability.js +97 -0
  256. package/lib-module/utils/props/a11yProps.js +140 -0
  257. package/lib-module/utils/props/clickProps.js +25 -0
  258. package/lib-module/utils/props/componentPropType.js +63 -0
  259. package/lib-module/utils/props/copyPropTypes.js +2 -0
  260. package/lib-module/utils/props/getPropSelector.js +6 -0
  261. package/lib-module/utils/props/hrefAttrsProp.js +30 -0
  262. package/lib-module/utils/props/index.js +16 -0
  263. package/lib-module/utils/props/inputSupportsProps.js +54 -0
  264. package/lib-module/utils/props/linkProps.js +47 -0
  265. package/lib-module/utils/props/paddingProp.js +9 -0
  266. package/lib-module/utils/props/pressProps.js +42 -0
  267. package/lib-module/utils/props/rectProp.js +9 -0
  268. package/lib-module/utils/props/responsiveProps.js +30 -0
  269. package/lib-module/utils/props/selectSystemProps.js +24 -0
  270. package/lib-module/utils/props/spacingProps.js +56 -0
  271. package/lib-module/utils/props/tokens.js +120 -0
  272. package/lib-module/utils/props/variantProp.js +18 -0
  273. package/lib-module/utils/props/viewProps.js +22 -0
  274. package/lib-module/utils/ssr.js +35 -0
  275. package/lib-module/utils/useCopy.js +42 -0
  276. package/lib-module/utils/useHash.js +44 -0
  277. package/lib-module/utils/useHash.native.js +7 -0
  278. package/lib-module/utils/useResponsiveProp.js +47 -0
  279. package/lib-module/utils/useSpacingScale.js +123 -0
  280. package/lib-module/utils/useUniqueId.js +12 -0
  281. package/lib-module/utils/withLinkRouter.js +82 -0
  282. package/package.json +9 -5
  283. package/src/A11yText/index.jsx +7 -3
  284. package/src/ActivityIndicator/Spinner.jsx +56 -44
  285. package/src/ActivityIndicator/Spinner.native.jsx +20 -12
  286. package/src/Box/Box.jsx +10 -9
  287. package/src/Button/ButtonBase.jsx +9 -8
  288. package/src/Card/Card.jsx +7 -4
  289. package/src/Card/PressableCardBase.jsx +12 -12
  290. package/src/Checkbox/Checkbox.jsx +12 -5
  291. package/src/Divider/Divider.jsx +17 -10
  292. package/src/ExpandCollapse/Control.jsx +12 -7
  293. package/src/ExpandCollapse/ExpandCollapse.jsx +13 -3
  294. package/src/ExpandCollapse/Panel.jsx +15 -5
  295. package/src/Feedback/Feedback.jsx +13 -3
  296. package/src/Fieldset/Fieldset.jsx +1 -1
  297. package/src/HorizontalScroll/HorizontalScroll.jsx +12 -5
  298. package/src/IconButton/IconButton.jsx +12 -8
  299. package/src/InputLabel/InputLabel.jsx +16 -2
  300. package/src/InputSupports/InputSupports.jsx +1 -1
  301. package/src/Link/LinkBase.jsx +10 -9
  302. package/src/List/List.jsx +12 -5
  303. package/src/List/ListItem.jsx +16 -2
  304. package/src/Modal/Modal.jsx +63 -50
  305. package/src/Notification/Notification.jsx +17 -3
  306. package/src/Pagination/Pagination.jsx +10 -3
  307. package/src/Progress/Progress.jsx +5 -3
  308. package/src/Progress/ProgressBar.jsx +8 -6
  309. package/src/Radio/Radio.jsx +13 -5
  310. package/src/Radio/RadioButton.jsx +13 -3
  311. package/src/Radio/RadioGroup.jsx +14 -2
  312. package/src/RadioCard/RadioCard.jsx +9 -6
  313. package/src/RadioCard/RadioCardGroup.jsx +16 -4
  314. package/src/Search/Search.jsx +15 -3
  315. package/src/Select/Select.jsx +21 -7
  316. package/src/SideNav/Item.jsx +15 -7
  317. package/src/SideNav/SideNav.jsx +13 -2
  318. package/src/Skeleton/Skeleton.jsx +55 -43
  319. package/src/Spacer/Spacer.jsx +8 -16
  320. package/src/StackView/StackView.jsx +13 -12
  321. package/src/StackView/StackWrapBox.jsx +12 -12
  322. package/src/StackView/StackWrapGap.jsx +9 -7
  323. package/src/StepTracker/Step.jsx +7 -4
  324. package/src/StepTracker/StepTracker.jsx +8 -8
  325. package/src/Tabs/Tabs.jsx +16 -3
  326. package/src/Tabs/TabsItem.jsx +13 -9
  327. package/src/Tags/Tags.jsx +20 -5
  328. package/src/TextInput/TextArea.jsx +20 -8
  329. package/src/TextInput/TextInput.jsx +20 -8
  330. package/src/TextInput/TextInputBase.jsx +13 -3
  331. package/src/ToggleSwitch/ToggleSwitch.jsx +16 -5
  332. package/src/ToggleSwitch/ToggleSwitchGroup.jsx +14 -6
  333. package/src/Tooltip/Tooltip.jsx +13 -3
  334. package/src/TooltipButton/TooltipButton.jsx +6 -4
  335. package/src/Typography/Typography.jsx +10 -6
  336. package/src/index.js +1 -1
  337. package/src/utils/children.jsx +2 -1
  338. package/src/utils/index.js +1 -0
  339. package/src/utils/props/index.js +1 -0
  340. package/src/{InputSupports/propTypes.js → utils/props/inputSupportsProps.js} +2 -4
  341. package/src/utils/ssr.js +35 -0
  342. package/release-context.json +0 -7
@@ -3,11 +3,20 @@ import { StyleSheet, Text, View } from 'react-native'
3
3
 
4
4
  import PropTypes from 'prop-types'
5
5
  import { applyTextStyles, useThemeTokens } from '../ThemeProvider'
6
- import { getTokensPropType, selectTokens, variantProp } from '../utils'
6
+ import {
7
+ a11yProps,
8
+ getTokensPropType,
9
+ selectSystemProps,
10
+ selectTokens,
11
+ variantProp,
12
+ viewProps
13
+ } from '../utils'
7
14
  import ButtonBase from '../Button/ButtonBase'
8
15
  import useCopy from '../utils/useCopy'
9
16
  import dictionary from './dictionary'
10
17
 
18
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
19
+
11
20
  const selectContainerStyles = (tokens) => ({ ...tokens })
12
21
 
13
22
  const selectTextStyles = (tokens) => applyTextStyles(selectTokens('Typography', tokens))
@@ -82,7 +91,7 @@ const selectDismissButtonContainerStyles = ({ dismissButtonGap }) => ({
82
91
  * Show system notifications at the top of the page, below the navigation, and expands the full-width of the viewport
83
92
  */
84
93
  const Notification = forwardRef(
85
- ({ children, system, dismissible, copy = 'en', tokens, variant }, ref) => {
94
+ ({ children, system, dismissible, copy = 'en', tokens, variant, ...rest }, ref) => {
86
95
  const [isDismissed, setIsDismissed] = useState(false)
87
96
  const themeTokens = useThemeTokens('Notification', tokens, variant, { system })
88
97
  const getCopy = useCopy({ dictionary, copy })
@@ -102,7 +111,11 @@ const Notification = forwardRef(
102
111
 
103
112
  // TODO: replace the dismiss button with IconButton when implemented (https://github.com/telus/universal-design-system/issues/281)
104
113
  return (
105
- <View ref={ref} style={[staticStyles.container, selectContainerStyles(themeTokens)]}>
114
+ <View
115
+ ref={ref}
116
+ style={[staticStyles.container, selectContainerStyles(themeTokens)]}
117
+ {...selectProps(rest)}
118
+ >
106
119
  {IconComponent && (
107
120
  <View style={selectIconContainerStyles(themeTokens)}>
108
121
  <IconComponent {...selectIconProps(themeTokens)} />
@@ -129,6 +142,7 @@ const Notification = forwardRef(
129
142
  Notification.displayName = 'Notification'
130
143
 
131
144
  Notification.propTypes = {
145
+ ...selectedSystemPropTypes,
132
146
  /**
133
147
  * Content of the `Notification`.
134
148
  */
@@ -2,10 +2,13 @@ import React, { forwardRef } from 'react'
2
2
  import { View, Text, StyleSheet } from 'react-native'
3
3
 
4
4
  import {
5
+ a11yProps,
5
6
  componentPropType,
6
7
  copyPropTypes,
7
8
  getTokensPropType,
9
+ selectSystemProps,
8
10
  variantProp,
11
+ viewProps,
9
12
  withLinkRouter
10
13
  } from '../utils'
11
14
  import { applyTextStyles, useThemeTokens } from '../ThemeProvider'
@@ -16,6 +19,8 @@ import usePagination from './usePagination'
16
19
  import PageButton from './PageButton'
17
20
  import SideButton from './SideButton'
18
21
 
22
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
23
+
19
24
  const selectTextStyles = ({ color, fontName, fontSize, fontWeight, lineHeight }) =>
20
25
  applyTextStyles({
21
26
  color,
@@ -35,7 +40,8 @@ const Pagination = forwardRef(
35
40
  sideButtonVariant,
36
41
  sideButtonTokens,
37
42
  LinkRouter,
38
- linkRouterProps
43
+ linkRouterProps,
44
+ ...rest
39
45
  },
40
46
  ref
41
47
  ) => {
@@ -80,7 +86,7 @@ const Pagination = forwardRef(
80
86
  linkRouterProps={linkRouterProps}
81
87
  />
82
88
  ),
83
- ...items.map((child, itemIndex) => {
89
+ ...items.map((_child, itemIndex) => {
84
90
  const buttonLabel = `${itemIndex + 1}`
85
91
  const itemProps = getItemProps(itemIndex)
86
92
  const ItemLinkRouter = itemProps.LinkRouter ?? LinkRouter
@@ -119,7 +125,7 @@ const Pagination = forwardRef(
119
125
  ]
120
126
 
121
127
  return (
122
- <View style={staticStyles.container} ref={ref}>
128
+ <View style={staticStyles.container} ref={ref} {...selectProps(rest)}>
123
129
  {buttons
124
130
  // keep the keys in-line with the page numbers regardless of which buttons are actually rendered
125
131
  .map((element, index) => [element, `page-${index + 1}`])
@@ -138,6 +144,7 @@ PageButton.displayName = 'PageButton'
138
144
  Pagination.PageButton = PageButton
139
145
 
140
146
  Pagination.propTypes = {
147
+ ...selectedSystemPropTypes,
141
148
  ...withLinkRouter.propTypes,
142
149
  children: componentPropType('PageButton'),
143
150
  copy: copyPropTypes,
@@ -2,9 +2,10 @@ import React, { forwardRef } from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import { View } from 'react-native'
4
4
 
5
- import { a11yProps } from '../utils/props'
6
5
  import { useThemeTokens } from '../ThemeProvider'
7
- import { getTokensPropType, variantProp } from '../utils'
6
+ import { a11yProps, getTokensPropType, selectSystemProps, variantProp, viewProps } from '../utils'
7
+
8
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
8
9
 
9
10
  const selectProgressStyles = ({
10
11
  backgroundColor,
@@ -53,7 +54,7 @@ const Progress = forwardRef(({ children, tokens, variant, ...rest }, ref) => {
53
54
  const themeTokens = useThemeTokens('Progress', tokens, variant)
54
55
 
55
56
  return (
56
- <View ref={ref} style={selectProgressStyles(themeTokens)} {...a11yProps.select(rest)}>
57
+ <View ref={ref} style={selectProgressStyles(themeTokens)} {...selectProps(rest)}>
57
58
  {children}
58
59
  </View>
59
60
  )
@@ -61,6 +62,7 @@ const Progress = forwardRef(({ children, tokens, variant, ...rest }, ref) => {
61
62
  Progress.displayName = 'Progress'
62
63
 
63
64
  Progress.propTypes = {
65
+ ...selectedSystemPropTypes,
64
66
  /**
65
67
  * Use the `children` prop to supply one or several `ProgressBar`s.
66
68
  */
@@ -3,9 +3,10 @@ import PropTypes from 'prop-types'
3
3
  import { Platform, StyleSheet, View } from 'react-native'
4
4
 
5
5
  import ProgressBarBackground from './ProgressBarBackground'
6
- import { a11yProps } from '../utils/props'
7
6
  import { useThemeTokens } from '../ThemeProvider'
8
- import { getTokensPropType, variantProp } from '../utils'
7
+ import { a11yProps, getTokensPropType, selectSystemProps, variantProp, viewProps } from '../utils'
8
+
9
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
9
10
 
10
11
  const selectBarStyles = (
11
12
  { backgroundColor, borderRadius, outlineWidth, outlineColor },
@@ -60,7 +61,7 @@ const ProgressBar = forwardRef(
60
61
  } else if (percentage > 100) {
61
62
  throw new Error('ProgressBar: `percentage` cannot exceed 100')
62
63
  }
63
- const accessibilityProps = {
64
+ const selectedProps = selectProps({
64
65
  accessibilityRole: 'progressbar',
65
66
  accessibilityValue: {
66
67
  min: 0,
@@ -68,14 +69,14 @@ const ProgressBar = forwardRef(
68
69
  now: percentage,
69
70
  text: `${percentage}%`
70
71
  },
71
- ...a11yProps.select(rest)
72
- }
72
+ ...rest
73
+ })
73
74
 
74
75
  return percentage > 0 ? (
75
76
  <View
76
77
  ref={ref}
77
78
  style={[staticStyles.bar, selectBarStyles(themeTokens, percentage)]}
78
- {...accessibilityProps}
79
+ {...selectedProps}
79
80
  >
80
81
  {children ?? <ProgressBarBackground variant={variant} />}
81
82
  </View>
@@ -85,6 +86,7 @@ const ProgressBar = forwardRef(
85
86
  ProgressBar.displayName = 'ProgressBar'
86
87
 
87
88
  ProgressBar.propTypes = {
89
+ ...selectedSystemPropTypes,
88
90
  /**
89
91
  * Optional children that can be used to customize the progress bar filling.
90
92
  */
@@ -5,10 +5,19 @@ import { Pressable, StyleSheet, Text, View } from 'react-native'
5
5
  import RadioLabel from '../InputLabel/LabelContent'
6
6
  import RadioButton, { selectRadioButtonTokens } from './RadioButton'
7
7
  import { applyShadowToken, applyTextStyles, useThemeTokensCallback } from '../ThemeProvider'
8
- import { getTokensPropType, useInputValue, useUniqueId, variantProp } from '../utils'
9
- import { a11yProps } from '../utils/props'
8
+ import {
9
+ a11yProps,
10
+ getTokensPropType,
11
+ selectSystemProps,
12
+ useInputValue,
13
+ useUniqueId,
14
+ variantProp,
15
+ viewProps
16
+ } from '../utils'
10
17
  import StackView from '../StackView'
11
18
 
19
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
20
+
12
21
  const selectContainerStyles = ({
13
22
  containerBackgroundColor,
14
23
  containerBorderRadius,
@@ -130,7 +139,6 @@ const Radio = forwardRef(
130
139
  // The expected keyboard shortcut for activating a radio is the Space key
131
140
  if (event?.key === ' ') handleChange(event)
132
141
  }
133
- const accessibilityProps = a11yProps.select(rest)
134
142
  const uniqueId = useUniqueId('radio')
135
143
  const inputId = id ?? uniqueId
136
144
 
@@ -142,7 +150,7 @@ const Radio = forwardRef(
142
150
  onPress={handleChange}
143
151
  accessibilityRole="radio"
144
152
  accessibilityState={{ checked: isChecked, disabled: inactive }}
145
- {...accessibilityProps}
153
+ {...selectProps(rest)}
146
154
  >
147
155
  {({ focused: focus, hovered: hover, pressed }) => {
148
156
  const stateTokens = getTokens({ focus, hover, pressed })
@@ -180,7 +188,7 @@ const Radio = forwardRef(
180
188
  Radio.displayName = 'Radio'
181
189
 
182
190
  Radio.propTypes = {
183
- ...a11yProps.propTypes,
191
+ ...selectedSystemPropTypes,
184
192
  /**
185
193
  * Use `checked` for controlled Radio. For uncontrolled Radio, use the `defaultChecked` prop.
186
194
  */
@@ -4,7 +4,15 @@ import { Platform, StyleSheet, View } from 'react-native'
4
4
 
5
5
  import RadioInput from './RadioInput'
6
6
  import { applyOuterBorder, resolveThemeTokens, validateThemeTokens } from '../ThemeProvider'
7
- import { getTokensSetPropType, selectTokens } from '../utils'
7
+ import {
8
+ a11yProps,
9
+ getTokensSetPropType,
10
+ selectSystemProps,
11
+ selectTokens,
12
+ viewProps
13
+ } from '../utils'
14
+
15
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
8
16
 
9
17
  // TODO: roll out a standard approach to token sets
10
18
  // https://github.com/telus/universal-design-system/issues/782
@@ -87,7 +95,8 @@ const RadioButton = forwardRef(
87
95
  isControlled,
88
96
  handleChange,
89
97
  name: inputName,
90
- value
98
+ value,
99
+ ...rest
91
100
  },
92
101
  ref
93
102
  ) => {
@@ -98,7 +107,7 @@ const RadioButton = forwardRef(
98
107
  )
99
108
 
100
109
  return (
101
- <View style={selectOuterBorderStyles(themeTokens)}>
110
+ <View style={selectOuterBorderStyles(themeTokens)} {...selectProps(rest)}>
102
111
  <View
103
112
  style={[staticStyles.defaultInputStyles, selectInputStyles(themeTokens, isChecked)]}
104
113
  testID="Radio-Input"
@@ -124,6 +133,7 @@ const RadioButton = forwardRef(
124
133
  RadioButton.displayName = 'RadioButton'
125
134
 
126
135
  RadioButton.propTypes = {
136
+ ...selectedSystemPropTypes,
127
137
  isChecked: PropTypes.bool,
128
138
  tokens: getTokensSetPropType(tokenKeys, { allowFunction: true }),
129
139
  inactive: PropTypes.bool,
@@ -4,11 +4,20 @@ import ABBPropTypes from 'airbnb-prop-types'
4
4
 
5
5
  import { useViewport } from '../ViewportProvider'
6
6
  import { useThemeTokens } from '../ThemeProvider'
7
- import { getTokensPropType, useInputValue, variantProp } from '../utils'
7
+ import {
8
+ a11yProps,
9
+ getTokensPropType,
10
+ selectSystemProps,
11
+ useInputValue,
12
+ variantProp,
13
+ viewProps
14
+ } from '../utils'
8
15
  import { getStackedContent } from '../StackView'
9
16
  import Radio from './Radio'
10
17
  import Fieldset from '../Fieldset'
11
18
 
19
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
20
+
12
21
  /**
13
22
  * A group of Radios that behave as a radio group. Use when users select a single choice from mutually
14
23
  * exclusive options.
@@ -74,7 +83,8 @@ const RadioGroup = forwardRef(
74
83
  onChange,
75
84
  readOnly,
76
85
  name: inputGroupName,
77
- inactive
86
+ inactive,
87
+ ...rest
78
88
  },
79
89
  ref
80
90
  ) => {
@@ -125,6 +135,7 @@ const RadioGroup = forwardRef(
125
135
  inactive={inactive}
126
136
  validation={validation}
127
137
  accessibilityRole="radiogroup"
138
+ {...selectProps(rest)}
128
139
  >
129
140
  {getStackedContent(radios, { space, direction: 'column' })}
130
141
  </Fieldset>
@@ -134,6 +145,7 @@ const RadioGroup = forwardRef(
134
145
  RadioGroup.displayName = 'RadioGroup'
135
146
 
136
147
  RadioGroup.propTypes = {
148
+ ...selectedSystemPropTypes,
137
149
  /**
138
150
  * Optional theme token overrides for the outer RadioGroup component
139
151
  */
@@ -4,17 +4,21 @@ import { StyleSheet, Text, View } from 'react-native'
4
4
 
5
5
  import { useThemeTokensCallback, applyTextStyles } from '../ThemeProvider'
6
6
  import {
7
+ a11yProps,
7
8
  getTokensPropType,
8
- variantProp,
9
+ selectSystemProps,
9
10
  selectTokens,
10
11
  useInputValue,
11
- a11yProps,
12
- useUniqueId
12
+ useUniqueId,
13
+ variantProp,
14
+ viewProps
13
15
  } from '../utils'
14
16
  import { PressableCardBase, selectPressableCardTokens } from '../Card'
15
17
  import StackView from '../StackView'
16
18
  import RadioButton, { selectRadioButtonTokens } from '../Radio/RadioButton'
17
19
 
20
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
21
+
18
22
  /**
19
23
  * A Card that behaves like a radio button. Use when users select a single choice from mutually exclusive options
20
24
  * with need to show additional information for each option. The whole card is interactive as one item.
@@ -78,7 +82,6 @@ const RadioCard = forwardRef(
78
82
  setIsChecked(true, event)
79
83
  }
80
84
  }
81
- const a11y = a11yProps.select(rest)
82
85
  const uniqueId = useUniqueId('RadioCard')
83
86
  const inputId = id ?? uniqueId
84
87
 
@@ -94,7 +97,7 @@ const RadioCard = forwardRef(
94
97
  onPress={handleChange}
95
98
  accessibilityRole="radio"
96
99
  accessibilityState={{ checked: isChecked, disabled: inactive }}
97
- {...a11y}
100
+ {...selectProps(rest)}
98
101
  >
99
102
  {(cardState) => {
100
103
  const { radioSpace, contentSpace, ...themeTokens } = getTokens(cardState)
@@ -130,7 +133,7 @@ const RadioCard = forwardRef(
130
133
  RadioCard.displayName = 'RadioCard'
131
134
 
132
135
  RadioCard.propTypes = {
133
- ...a11yProps.propTypes,
136
+ ...selectedSystemPropTypes,
134
137
  /**
135
138
  * Content to be displayed at the top of the card alongside the radio button
136
139
  */
@@ -3,11 +3,20 @@ import PropTypes from 'prop-types'
3
3
 
4
4
  import { useViewport } from '../ViewportProvider'
5
5
  import { useThemeTokens } from '../ThemeProvider'
6
- import { getTokensPropType, useInputValue, variantProp } from '../utils'
6
+ import {
7
+ a11yProps,
8
+ getTokensPropType,
9
+ selectSystemProps,
10
+ useInputValue,
11
+ variantProp,
12
+ viewProps
13
+ } from '../utils'
7
14
  import StackView, { StackWrap } from '../StackView'
8
15
  import RadioCard from './RadioCard'
9
16
  import Fieldset from '../Fieldset'
10
17
 
18
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
19
+
11
20
  /**
12
21
  * A group of Cards that behave as a radio button group. Use when users select a single choice from mutually
13
22
  * exclusive options with need to show additional information for each option. The whole cards are each
@@ -75,7 +84,8 @@ const RadioCardGroup = forwardRef(
75
84
  onChange,
76
85
  readOnly,
77
86
  name: inputGroupName,
78
- inactive
87
+ inactive,
88
+ ...rest
79
89
  },
80
90
  ref
81
91
  ) => {
@@ -107,8 +117,9 @@ const RadioCardGroup = forwardRef(
107
117
  inactive={inactive || readOnly}
108
118
  validation={validation}
109
119
  accessibilityRole="radiogroup"
120
+ {...selectProps(rest)}
110
121
  >
111
- {({ a11yProps }) => (
122
+ {(props) => (
112
123
  <StackContainer space={space} accessibilityRole="radiogroup">
113
124
  {items.map(({ title, content, id, onChange: itemOnChange }, index) => {
114
125
  const cardId = id || `RadioCard[${index}]`
@@ -128,7 +139,7 @@ const RadioCardGroup = forwardRef(
128
139
  tokens={radioCardTokens}
129
140
  variant={variant}
130
141
  readOnly={readOnly}
131
- {...a11yProps}
142
+ {...props}
132
143
  >
133
144
  {content}
134
145
  </RadioCard>
@@ -143,6 +154,7 @@ const RadioCardGroup = forwardRef(
143
154
  RadioCardGroup.displayName = 'RadioCardGroup'
144
155
 
145
156
  RadioCardGroup.propTypes = {
157
+ ...selectedSystemPropTypes,
146
158
  /**
147
159
  * Optional theme token overrides for the outer RadioCardGroup component
148
160
  */
@@ -3,13 +3,23 @@ import { View, StyleSheet } from 'react-native'
3
3
 
4
4
  import PropTypes from 'prop-types'
5
5
  import { useThemeTokens, useThemeTokensCallback } from '../ThemeProvider'
6
- import { getTokensPropType, selectTokens, useSpacingScale, variantProp } from '../utils'
6
+ import {
7
+ a11yProps,
8
+ getTokensPropType,
9
+ selectSystemProps,
10
+ selectTokens,
11
+ useSpacingScale,
12
+ variantProp,
13
+ viewProps
14
+ } from '../utils'
7
15
  import TextInputBase from '../TextInput/TextInputBase'
8
16
  import ButtonBase from '../Button/ButtonBase'
9
17
  import StackView from '../StackView'
10
18
  import useCopy from '../utils/useCopy'
11
19
  import dictionary from './dictionary'
12
20
 
21
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
22
+
13
23
  const selectInputTokens = ({ searchTokens, buttonTokens, buttonsGapSize }) => {
14
24
  const { paddingRight: inputPaddingRight, clearButtonIcon, submitButtonIcon } = searchTokens
15
25
  const { paddingLeft = 0, paddingRight = 0, iconSize = 0 } = buttonTokens
@@ -53,7 +63,8 @@ const Search = forwardRef(
53
63
  accessibilityLabel,
54
64
  copy = 'en',
55
65
  tokens,
56
- variant
66
+ variant,
67
+ ...rest
57
68
  },
58
69
  ref
59
70
  ) => {
@@ -99,7 +110,7 @@ const Search = forwardRef(
99
110
  const isEmpty = value === ''
100
111
 
101
112
  return (
102
- <View style={staticStyles.container}>
113
+ <View style={staticStyles.container} {...selectProps(rest)}>
103
114
  <TextInputBase
104
115
  ref={ref}
105
116
  tokens={(appearances) =>
@@ -161,6 +172,7 @@ const Search = forwardRef(
161
172
  Search.displayName = 'Search'
162
173
 
163
174
  Search.propTypes = {
175
+ ...selectedSystemPropTypes,
164
176
  /**
165
177
  * Use this to set the initial value of the search input.
166
178
  * Updating `initialValue` will **not** update the actual value.
@@ -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
  */