@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,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
  */
@@ -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
- * @typedef {import('../utils/propTypes.js').SpacingValue} SpacingValue
8
- * @typedef {import('../utils/propTypes.js').SpacingObject} SpacingObject
7
+ * @typedef {import('../utils/props/spacingProps.js').SpacingValue} SpacingValue
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
  /**