@telus-uds/components-base 1.2.0 → 1.4.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 (415) hide show
  1. package/.turbo/turbo-build.log +8 -0
  2. package/CHANGELOG.json +61 -0
  3. package/CHANGELOG.md +45 -2
  4. package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +35 -0
  5. package/__tests__/ActivityIndicator/__snapshots__/ActivityIndicator.test.jsx.snap +287 -0
  6. package/__tests__/FlexGrid/Col.test.jsx +6 -10
  7. package/__tests__/utils/props.test.js +36 -0
  8. package/__tests__/utils/semantics.test.jsx +1 -10
  9. package/babel.config.js +27 -5
  10. package/component-docs.json +170 -494
  11. package/generate-component-docs.js +3 -0
  12. package/lib/A11yText/index.js +6 -5
  13. package/lib/ActivityIndicator/Spinner.js +46 -37
  14. package/lib/ActivityIndicator/Spinner.native.js +26 -15
  15. package/lib/ActivityIndicator/index.js +3 -3
  16. package/lib/Box/Box.js +8 -8
  17. package/lib/Button/Button.js +2 -2
  18. package/lib/Button/ButtonBase.js +7 -8
  19. package/lib/Button/ButtonGroup.js +10 -12
  20. package/lib/Button/ButtonLink.js +4 -4
  21. package/lib/Button/propTypes.js +4 -2
  22. package/lib/Card/Card.js +6 -5
  23. package/lib/Card/CardBase.js +6 -9
  24. package/lib/Card/PressableCardBase.js +6 -11
  25. package/lib/Checkbox/Checkbox.js +4 -6
  26. package/lib/Divider/Divider.js +14 -13
  27. package/lib/ExpandCollapse/Control.js +7 -7
  28. package/lib/ExpandCollapse/ExpandCollapse.js +6 -2
  29. package/lib/ExpandCollapse/Panel.js +6 -7
  30. package/lib/Feedback/Feedback.js +6 -5
  31. package/lib/Fieldset/Fieldset.js +1 -3
  32. package/lib/FlexGrid/FlexGrid.js +4 -4
  33. package/lib/FlexGrid/helpers/index.js +1 -4
  34. package/lib/HorizontalScroll/HorizontalScroll.js +5 -6
  35. package/lib/IconButton/IconButton.js +6 -6
  36. package/lib/InputLabel/InputLabel.js +7 -2
  37. package/lib/InputSupports/InputSupports.js +2 -2
  38. package/lib/Link/LinkBase.js +12 -13
  39. package/lib/List/List.js +4 -6
  40. package/lib/List/ListItem.js +6 -2
  41. package/lib/Modal/Modal.js +6 -2
  42. package/lib/Notification/Notification.js +12 -8
  43. package/lib/Pagination/Pagination.js +8 -3
  44. package/lib/Progress/Progress.js +5 -4
  45. package/lib/Progress/ProgressBar.js +8 -7
  46. package/lib/Radio/Radio.js +4 -6
  47. package/lib/Radio/RadioButton.js +6 -3
  48. package/lib/Radio/RadioGroup.js +7 -2
  49. package/lib/RadioCard/RadioCard.js +4 -4
  50. package/lib/RadioCard/RadioCardGroup.js +9 -6
  51. package/lib/Search/Search.js +7 -2
  52. package/lib/Select/Select.js +10 -9
  53. package/lib/SideNav/Item.js +7 -7
  54. package/lib/SideNav/SideNav.js +7 -3
  55. package/lib/Skeleton/Skeleton.js +6 -2
  56. package/lib/Spacer/Spacer.js +9 -20
  57. package/lib/StackView/StackView.js +7 -7
  58. package/lib/StackView/StackWrapBox.js +6 -7
  59. package/lib/StackView/StackWrapGap.js +6 -5
  60. package/lib/StackView/getStackedContent.js +1 -1
  61. package/lib/StepTracker/Step.js +7 -3
  62. package/lib/StepTracker/StepTracker.js +7 -7
  63. package/lib/Tabs/Tabs.js +6 -2
  64. package/lib/Tabs/TabsItem.js +6 -5
  65. package/lib/Tags/Tags.js +11 -12
  66. package/lib/TextInput/TextArea.js +13 -14
  67. package/lib/TextInput/TextInput.js +13 -14
  68. package/lib/TextInput/TextInputBase.js +5 -3
  69. package/lib/ThemeProvider/useThemeTokens.js +3 -3
  70. package/lib/ThemeProvider/utils/theme-tokens.js +3 -3
  71. package/lib/ToggleSwitch/ToggleSwitch.js +10 -9
  72. package/lib/ToggleSwitch/ToggleSwitchGroup.js +10 -12
  73. package/lib/Tooltip/Tooltip.js +7 -2
  74. package/lib/TooltipButton/TooltipButton.js +7 -2
  75. package/lib/Typography/Typography.js +8 -6
  76. package/lib/index.js +7 -0
  77. package/lib/utils/a11y/semantics.js +4 -3
  78. package/lib/utils/children.js +5 -1
  79. package/lib/utils/index.js +18 -4
  80. package/lib/utils/pressability.js +2 -2
  81. package/lib/utils/props/a11yProps.js +153 -0
  82. package/lib/utils/props/clickProps.js +36 -0
  83. package/lib/utils/props/componentPropType.js +70 -0
  84. package/lib/utils/props/copyPropTypes.js +14 -0
  85. package/lib/utils/props/getPropSelector.js +13 -0
  86. package/lib/utils/props/hrefAttrsProp.js +41 -0
  87. package/lib/utils/props/index.js +158 -0
  88. package/lib/{InputSupports/propTypes.js → utils/props/inputSupportsProps.js} +2 -3
  89. package/lib/utils/props/linkProps.js +64 -0
  90. package/lib/utils/props/paddingProp.js +20 -0
  91. package/lib/utils/props/pressProps.js +57 -0
  92. package/lib/utils/props/rectProp.js +20 -0
  93. package/lib/utils/props/responsiveProps.js +40 -0
  94. package/lib/utils/props/selectSystemProps.js +31 -0
  95. package/lib/utils/props/spacingProps.js +71 -0
  96. package/lib/utils/props/tokens.js +145 -0
  97. package/lib/utils/props/variantProp.js +28 -0
  98. package/lib/utils/props/viewProps.js +34 -0
  99. package/lib/utils/ssr.js +51 -0
  100. package/lib/utils/useResponsiveProp.js +1 -1
  101. package/lib/utils/useSpacingScale.js +4 -4
  102. package/lib-module/A11yInfoProvider/index.js +62 -0
  103. package/lib-module/A11yText/index.js +55 -0
  104. package/lib-module/ActivityIndicator/Spinner.js +76 -0
  105. package/lib-module/ActivityIndicator/Spinner.native.js +143 -0
  106. package/lib-module/ActivityIndicator/index.js +40 -0
  107. package/lib-module/ActivityIndicator/shared.js +12 -0
  108. package/lib-module/BaseProvider/index.js +26 -0
  109. package/lib-module/Box/Box.js +243 -0
  110. package/lib-module/Box/index.js +2 -0
  111. package/lib-module/Button/Button.js +25 -0
  112. package/lib-module/Button/ButtonBase.js +254 -0
  113. package/lib-module/Button/ButtonGroup.js +164 -0
  114. package/lib-module/Button/ButtonLink.js +39 -0
  115. package/lib-module/Button/index.js +4 -0
  116. package/lib-module/Button/propTypes.js +36 -0
  117. package/lib-module/Card/Card.js +83 -0
  118. package/lib-module/Card/CardBase.js +62 -0
  119. package/lib-module/Card/PressableCardBase.js +113 -0
  120. package/lib-module/Card/index.js +4 -0
  121. package/lib-module/Checkbox/Checkbox.js +321 -0
  122. package/lib-module/Checkbox/CheckboxGroup.js +218 -0
  123. package/lib-module/Checkbox/CheckboxInput.js +58 -0
  124. package/lib-module/Checkbox/CheckboxInput.native.js +6 -0
  125. package/lib-module/Checkbox/index.js +3 -0
  126. package/lib-module/Divider/Divider.js +123 -0
  127. package/lib-module/Divider/index.js +2 -0
  128. package/lib-module/ExpandCollapse/Accordion.js +15 -0
  129. package/lib-module/ExpandCollapse/Control.js +130 -0
  130. package/lib-module/ExpandCollapse/ExpandCollapse.js +94 -0
  131. package/lib-module/ExpandCollapse/Panel.js +158 -0
  132. package/lib-module/ExpandCollapse/index.js +7 -0
  133. package/lib-module/Feedback/Feedback.js +144 -0
  134. package/lib-module/Feedback/index.js +2 -0
  135. package/lib-module/Fieldset/Fieldset.js +145 -0
  136. package/lib-module/Fieldset/FieldsetContainer.js +29 -0
  137. package/lib-module/Fieldset/FieldsetContainer.native.js +20 -0
  138. package/lib-module/Fieldset/Legend.js +21 -0
  139. package/lib-module/Fieldset/Legend.native.js +28 -0
  140. package/lib-module/Fieldset/cssReset.js +14 -0
  141. package/lib-module/Fieldset/index.js +2 -0
  142. package/lib-module/FlexGrid/Col/Col.js +265 -0
  143. package/lib-module/FlexGrid/Col/index.js +2 -0
  144. package/lib-module/FlexGrid/FlexGrid.js +147 -0
  145. package/lib-module/FlexGrid/Row/Row.js +177 -0
  146. package/lib-module/FlexGrid/Row/index.js +2 -0
  147. package/lib-module/FlexGrid/helpers/index.js +18 -0
  148. package/lib-module/FlexGrid/index.js +2 -0
  149. package/lib-module/FlexGrid/providers/GutterContext.js +3 -0
  150. package/lib-module/HorizontalScroll/HorizontalScroll.js +171 -0
  151. package/lib-module/HorizontalScroll/HorizontalScrollButton.js +102 -0
  152. package/lib-module/HorizontalScroll/ScrollViewEnd.js +47 -0
  153. package/lib-module/HorizontalScroll/ScrollViewEnd.native.js +24 -0
  154. package/lib-module/HorizontalScroll/dictionary.js +11 -0
  155. package/lib-module/HorizontalScroll/index.js +11 -0
  156. package/lib-module/HorizontalScroll/itemPositions.js +106 -0
  157. package/lib-module/Icon/Icon.js +61 -0
  158. package/lib-module/Icon/IconText.js +81 -0
  159. package/lib-module/Icon/index.js +4 -0
  160. package/lib-module/IconButton/IconButton.js +115 -0
  161. package/lib-module/IconButton/index.js +2 -0
  162. package/lib-module/InputLabel/InputLabel.js +131 -0
  163. package/lib-module/InputLabel/LabelContent.js +24 -0
  164. package/lib-module/InputLabel/LabelContent.native.js +16 -0
  165. package/lib-module/InputLabel/index.js +2 -0
  166. package/lib-module/InputSupports/InputSupports.js +88 -0
  167. package/lib-module/InputSupports/index.js +2 -0
  168. package/lib-module/InputSupports/useInputSupports.js +31 -0
  169. package/lib-module/Link/ChevronLink.js +51 -0
  170. package/lib-module/Link/InlinePressable.js +37 -0
  171. package/lib-module/Link/InlinePressable.native.js +85 -0
  172. package/lib-module/Link/Link.js +27 -0
  173. package/lib-module/Link/LinkBase.js +210 -0
  174. package/lib-module/Link/TextButton.js +43 -0
  175. package/lib-module/Link/index.js +5 -0
  176. package/lib-module/List/List.js +55 -0
  177. package/lib-module/List/ListItem.js +213 -0
  178. package/lib-module/List/index.js +5 -0
  179. package/lib-module/Modal/Modal.js +208 -0
  180. package/lib-module/Modal/dictionary.js +9 -0
  181. package/lib-module/Modal/index.js +2 -0
  182. package/lib-module/Notification/Notification.js +196 -0
  183. package/lib-module/Notification/dictionary.js +8 -0
  184. package/lib-module/Notification/index.js +2 -0
  185. package/lib-module/Pagination/PageButton.js +65 -0
  186. package/lib-module/Pagination/Pagination.js +140 -0
  187. package/lib-module/Pagination/SideButton.js +103 -0
  188. package/lib-module/Pagination/dictionary.js +18 -0
  189. package/lib-module/Pagination/index.js +2 -0
  190. package/lib-module/Pagination/usePagination.js +72 -0
  191. package/lib-module/Progress/Progress.js +85 -0
  192. package/lib-module/Progress/ProgressBar.js +134 -0
  193. package/lib-module/Progress/ProgressBarBackground.js +41 -0
  194. package/lib-module/Progress/index.js +4 -0
  195. package/lib-module/Radio/Radio.js +263 -0
  196. package/lib-module/Radio/RadioButton.js +128 -0
  197. package/lib-module/Radio/RadioGroup.js +225 -0
  198. package/lib-module/Radio/RadioInput.js +60 -0
  199. package/lib-module/Radio/RadioInput.native.js +6 -0
  200. package/lib-module/Radio/index.js +3 -0
  201. package/lib-module/RadioCard/RadioCard.js +218 -0
  202. package/lib-module/RadioCard/RadioCardGroup.js +232 -0
  203. package/lib-module/RadioCard/index.js +3 -0
  204. package/lib-module/Search/Search.js +233 -0
  205. package/lib-module/Search/dictionary.js +12 -0
  206. package/lib-module/Search/index.js +2 -0
  207. package/lib-module/Select/Group.js +20 -0
  208. package/lib-module/Select/Group.native.js +14 -0
  209. package/lib-module/Select/Item.js +17 -0
  210. package/lib-module/Select/Item.native.js +9 -0
  211. package/lib-module/Select/Picker.js +67 -0
  212. package/lib-module/Select/Picker.native.js +110 -0
  213. package/lib-module/Select/Select.js +317 -0
  214. package/lib-module/Select/index.js +6 -0
  215. package/lib-module/SideNav/Item.js +139 -0
  216. package/lib-module/SideNav/ItemContent.js +45 -0
  217. package/lib-module/SideNav/ItemsGroup.js +115 -0
  218. package/lib-module/SideNav/SideNav.js +133 -0
  219. package/lib-module/SideNav/index.js +1 -0
  220. package/lib-module/Skeleton/Skeleton.js +117 -0
  221. package/lib-module/Skeleton/index.js +2 -0
  222. package/lib-module/Skeleton/skeleton.constant.js +3 -0
  223. package/lib-module/Skeleton/skeletonWebAnimation.js +18 -0
  224. package/lib-module/Skeleton/useSkeletonNativeAnimation.js +24 -0
  225. package/lib-module/Spacer/Spacer.js +97 -0
  226. package/lib-module/Spacer/index.js +2 -0
  227. package/lib-module/StackView/StackView.js +124 -0
  228. package/lib-module/StackView/StackWrap.js +48 -0
  229. package/lib-module/StackView/StackWrap.native.js +3 -0
  230. package/lib-module/StackView/StackWrapBox.js +114 -0
  231. package/lib-module/StackView/StackWrapGap.js +58 -0
  232. package/lib-module/StackView/common.js +32 -0
  233. package/lib-module/StackView/getStackedContent.js +123 -0
  234. package/lib-module/StackView/index.js +5 -0
  235. package/lib-module/StepTracker/Step.js +229 -0
  236. package/lib-module/StepTracker/StepTracker.js +175 -0
  237. package/lib-module/StepTracker/dictionary.js +10 -0
  238. package/lib-module/StepTracker/index.js +2 -0
  239. package/lib-module/Tabs/Tabs.js +113 -0
  240. package/lib-module/Tabs/TabsItem.js +215 -0
  241. package/lib-module/Tabs/index.js +2 -0
  242. package/lib-module/Tags/Tags.js +238 -0
  243. package/lib-module/Tags/index.js +2 -0
  244. package/lib-module/TextInput/TextArea.js +88 -0
  245. package/lib-module/TextInput/TextInput.js +60 -0
  246. package/lib-module/TextInput/TextInputBase.js +233 -0
  247. package/lib-module/TextInput/index.js +3 -0
  248. package/lib-module/TextInput/propTypes.js +31 -0
  249. package/lib-module/ThemeProvider/ThemeProvider.js +35 -0
  250. package/lib-module/ThemeProvider/index.js +6 -0
  251. package/lib-module/ThemeProvider/useSetTheme.js +22 -0
  252. package/lib-module/ThemeProvider/useTheme.js +14 -0
  253. package/lib-module/ThemeProvider/useThemeTokens.js +105 -0
  254. package/lib-module/ThemeProvider/utils/index.js +2 -0
  255. package/lib-module/ThemeProvider/utils/styles.js +174 -0
  256. package/lib-module/ThemeProvider/utils/theme-tokens.js +151 -0
  257. package/lib-module/ToggleSwitch/ToggleSwitch.js +224 -0
  258. package/lib-module/ToggleSwitch/ToggleSwitchGroup.js +202 -0
  259. package/lib-module/ToggleSwitch/index.js +3 -0
  260. package/lib-module/Tooltip/Backdrop.js +52 -0
  261. package/lib-module/Tooltip/Backdrop.native.js +43 -0
  262. package/lib-module/Tooltip/Tooltip.js +332 -0
  263. package/lib-module/Tooltip/dictionary.js +8 -0
  264. package/lib-module/Tooltip/getTooltipPosition.js +164 -0
  265. package/lib-module/Tooltip/index.js +2 -0
  266. package/lib-module/TooltipButton/TooltipButton.js +71 -0
  267. package/lib-module/TooltipButton/index.js +2 -0
  268. package/lib-module/Typography/Typography.js +118 -0
  269. package/lib-module/Typography/index.js +2 -0
  270. package/lib-module/ViewportProvider/ViewportProvider.js +28 -0
  271. package/lib-module/ViewportProvider/index.js +3 -0
  272. package/lib-module/ViewportProvider/useViewport.js +3 -0
  273. package/lib-module/ViewportProvider/useViewportListener.js +43 -0
  274. package/lib-module/index.js +48 -0
  275. package/lib-module/utils/a11y/index.js +2 -0
  276. package/lib-module/utils/a11y/semantics.js +154 -0
  277. package/lib-module/utils/a11y/textSize.js +34 -0
  278. package/lib-module/utils/animation/index.js +2 -0
  279. package/lib-module/utils/animation/useVerticalExpandAnimation.js +49 -0
  280. package/lib-module/utils/children.js +118 -0
  281. package/lib-module/utils/index.js +15 -0
  282. package/lib-module/utils/info/index.js +7 -0
  283. package/lib-module/utils/info/platform/index.js +11 -0
  284. package/lib-module/utils/info/platform/platform.android.js +1 -0
  285. package/lib-module/utils/info/platform/platform.ios.js +1 -0
  286. package/lib-module/utils/info/platform/platform.js +1 -0
  287. package/lib-module/utils/info/platform/platform.native.js +4 -0
  288. package/lib-module/utils/info/versions.js +5 -0
  289. package/lib-module/utils/input.js +180 -0
  290. package/lib-module/utils/pressability.js +97 -0
  291. package/lib-module/utils/props/a11yProps.js +140 -0
  292. package/lib-module/utils/props/clickProps.js +25 -0
  293. package/lib-module/utils/props/componentPropType.js +63 -0
  294. package/lib-module/utils/props/copyPropTypes.js +2 -0
  295. package/lib-module/utils/props/getPropSelector.js +6 -0
  296. package/lib-module/utils/props/hrefAttrsProp.js +30 -0
  297. package/lib-module/utils/props/index.js +16 -0
  298. package/lib-module/utils/props/inputSupportsProps.js +54 -0
  299. package/lib-module/utils/props/linkProps.js +47 -0
  300. package/lib-module/utils/props/paddingProp.js +9 -0
  301. package/lib-module/utils/props/pressProps.js +42 -0
  302. package/lib-module/utils/props/rectProp.js +9 -0
  303. package/lib-module/utils/props/responsiveProps.js +30 -0
  304. package/lib-module/utils/props/selectSystemProps.js +24 -0
  305. package/lib-module/utils/props/spacingProps.js +56 -0
  306. package/lib-module/utils/props/tokens.js +120 -0
  307. package/lib-module/utils/props/variantProp.js +18 -0
  308. package/lib-module/utils/props/viewProps.js +22 -0
  309. package/lib-module/utils/ssr.js +35 -0
  310. package/lib-module/utils/useCopy.js +42 -0
  311. package/lib-module/utils/useHash.js +44 -0
  312. package/lib-module/utils/useHash.native.js +7 -0
  313. package/lib-module/utils/useResponsiveProp.js +47 -0
  314. package/lib-module/utils/useSpacingScale.js +123 -0
  315. package/lib-module/utils/useUniqueId.js +12 -0
  316. package/lib-module/utils/withLinkRouter.js +82 -0
  317. package/package.json +9 -5
  318. package/src/A11yText/index.jsx +7 -3
  319. package/src/ActivityIndicator/Spinner.jsx +56 -44
  320. package/src/ActivityIndicator/Spinner.native.jsx +20 -12
  321. package/src/ActivityIndicator/index.jsx +1 -1
  322. package/src/Box/Box.jsx +15 -13
  323. package/src/Button/Button.jsx +1 -1
  324. package/src/Button/ButtonBase.jsx +9 -8
  325. package/src/Button/ButtonGroup.jsx +17 -8
  326. package/src/Button/ButtonLink.jsx +1 -1
  327. package/src/Button/propTypes.js +2 -1
  328. package/src/Card/Card.jsx +7 -4
  329. package/src/Card/CardBase.jsx +6 -5
  330. package/src/Card/PressableCardBase.jsx +12 -12
  331. package/src/Checkbox/Checkbox.jsx +12 -5
  332. package/src/Divider/Divider.jsx +19 -12
  333. package/src/ExpandCollapse/Control.jsx +12 -7
  334. package/src/ExpandCollapse/ExpandCollapse.jsx +13 -3
  335. package/src/ExpandCollapse/Panel.jsx +15 -5
  336. package/src/Feedback/Feedback.jsx +13 -3
  337. package/src/Fieldset/Fieldset.jsx +1 -1
  338. package/src/FlexGrid/FlexGrid.jsx +11 -5
  339. package/src/FlexGrid/helpers/index.js +1 -3
  340. package/src/HorizontalScroll/HorizontalScroll.jsx +12 -5
  341. package/src/IconButton/IconButton.jsx +12 -8
  342. package/src/InputLabel/InputLabel.jsx +16 -2
  343. package/src/InputSupports/InputSupports.jsx +1 -1
  344. package/src/Link/LinkBase.jsx +11 -10
  345. package/src/List/List.jsx +12 -5
  346. package/src/List/ListItem.jsx +16 -2
  347. package/src/Modal/Modal.jsx +63 -50
  348. package/src/Notification/Notification.jsx +23 -6
  349. package/src/Pagination/Pagination.jsx +10 -3
  350. package/src/Progress/Progress.jsx +5 -3
  351. package/src/Progress/ProgressBar.jsx +8 -6
  352. package/src/Radio/Radio.jsx +13 -5
  353. package/src/Radio/RadioButton.jsx +13 -3
  354. package/src/Radio/RadioGroup.jsx +14 -2
  355. package/src/RadioCard/RadioCard.jsx +9 -6
  356. package/src/RadioCard/RadioCardGroup.jsx +16 -4
  357. package/src/Search/Search.jsx +15 -3
  358. package/src/Select/Select.jsx +21 -7
  359. package/src/SideNav/Item.jsx +15 -7
  360. package/src/SideNav/SideNav.jsx +13 -2
  361. package/src/Skeleton/Skeleton.jsx +55 -43
  362. package/src/Spacer/Spacer.jsx +10 -18
  363. package/src/StackView/StackView.jsx +13 -12
  364. package/src/StackView/StackWrapBox.jsx +12 -12
  365. package/src/StackView/StackWrapGap.jsx +9 -7
  366. package/src/StackView/getStackedContent.jsx +1 -1
  367. package/src/StepTracker/Step.jsx +7 -4
  368. package/src/StepTracker/StepTracker.jsx +8 -8
  369. package/src/Tabs/Tabs.jsx +16 -3
  370. package/src/Tabs/TabsItem.jsx +13 -9
  371. package/src/Tags/Tags.jsx +16 -7
  372. package/src/TextInput/TextArea.jsx +20 -8
  373. package/src/TextInput/TextInput.jsx +20 -8
  374. package/src/TextInput/TextInputBase.jsx +13 -3
  375. package/src/ThemeProvider/useThemeTokens.js +3 -3
  376. package/src/ThemeProvider/utils/theme-tokens.js +3 -3
  377. package/src/ToggleSwitch/ToggleSwitch.jsx +12 -7
  378. package/src/ToggleSwitch/ToggleSwitchGroup.jsx +14 -6
  379. package/src/Tooltip/Tooltip.jsx +13 -3
  380. package/src/TooltipButton/TooltipButton.jsx +6 -4
  381. package/src/Typography/Typography.jsx +10 -6
  382. package/src/index.js +1 -1
  383. package/src/utils/a11y/semantics.js +3 -2
  384. package/src/utils/children.jsx +2 -1
  385. package/src/utils/index.js +2 -1
  386. package/src/utils/pressability.js +1 -1
  387. package/src/utils/props/a11yProps.js +151 -0
  388. package/src/utils/props/clickProps.js +31 -0
  389. package/src/utils/props/componentPropType.js +67 -0
  390. package/src/utils/props/copyPropTypes.js +3 -0
  391. package/src/utils/props/getPropSelector.js +14 -0
  392. package/src/utils/props/hrefAttrsProp.js +25 -0
  393. package/src/utils/props/index.js +16 -0
  394. package/src/{InputSupports/propTypes.js → utils/props/inputSupportsProps.js} +2 -4
  395. package/src/utils/props/linkProps.js +43 -0
  396. package/src/utils/props/paddingProp.js +10 -0
  397. package/src/utils/props/pressProps.js +45 -0
  398. package/src/utils/props/rectProp.js +10 -0
  399. package/src/utils/props/responsiveProps.js +30 -0
  400. package/src/utils/props/selectSystemProps.js +25 -0
  401. package/src/utils/props/spacingProps.js +58 -0
  402. package/src/utils/props/tokens.js +150 -0
  403. package/src/utils/props/variantProp.js +20 -0
  404. package/src/utils/props/viewProps.js +23 -0
  405. package/src/utils/ssr.js +35 -0
  406. package/src/utils/useResponsiveProp.js +1 -1
  407. package/src/utils/useSpacingScale.js +4 -4
  408. package/.ultra.cache.json +0 -1
  409. package/lib/utils/a11y/propTypes.js +0 -61
  410. package/lib/utils/a11y/propTypes.native.js +0 -47
  411. package/lib/utils/propTypes.js +0 -566
  412. package/release-context.json +0 -7
  413. package/src/utils/a11y/propTypes.js +0 -61
  414. package/src/utils/a11y/propTypes.native.js +0 -39
  415. package/src/utils/propTypes.js +0 -561
@@ -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/propTypes'
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({
@@ -4,18 +4,22 @@ import { Platform, Pressable, StyleSheet, Text, View } from 'react-native'
4
4
 
5
5
  import { applyTextStyles, useThemeTokensCallback } from '../ThemeProvider'
6
6
  import {
7
+ a11yProps,
8
+ clickProps,
9
+ getTokensPropType,
10
+ linkProps,
7
11
  resolvePressableTokens,
12
+ selectSystemProps,
8
13
  selectTokens,
9
14
  variantProp,
10
- getTokensPropType,
11
- linkProps,
12
- a11yProps,
13
- clickProps,
15
+ viewProps,
14
16
  withLinkRouter
15
17
  } from '../utils'
16
18
  import Spacer from '../Spacer'
17
19
  import { horizontalScrollUtils } from '../HorizontalScroll'
18
20
 
21
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
22
+
19
23
  const { itemPositionsPropType, getItemPositionLayoutHandler } = horizontalScrollUtils
20
24
 
21
25
  const selectHighlightBarStyles = ({
@@ -115,11 +119,11 @@ const TabsItem = forwardRef(
115
119
  }
116
120
  : undefined
117
121
 
118
- const a11y = {
122
+ const selectedProps = selectProps({
119
123
  accessibilityRole,
120
124
  accessibilityState,
121
- ...a11yProps.select(rest)
122
- }
125
+ ...rest
126
+ })
123
127
 
124
128
  useEffect(() => {
125
129
  // If this is selected while off-screen, scroll it into view
@@ -145,7 +149,7 @@ const TabsItem = forwardRef(
145
149
  href={href}
146
150
  style={getPressableStyle}
147
151
  onLayout={handleLayout}
148
- {...a11y}
152
+ {...selectedProps}
149
153
  >
150
154
  {(pressableState) => {
151
155
  const { space, textAlign, ...themeTokens } = resolveTokens(pressableState)
@@ -185,7 +189,7 @@ const TabsItem = forwardRef(
185
189
  TabsItem.displayName = 'TabsItem'
186
190
 
187
191
  TabsItem.propTypes = {
188
- ...a11yProps.propTypes,
192
+ ...selectedSystemPropTypes,
189
193
  tokens: getTokensPropType('TabsItem'),
190
194
  variant: variantProp.propType,
191
195
  onPress: PropTypes.func,
package/src/Tags/Tags.jsx CHANGED
@@ -10,14 +10,18 @@ import { useViewport } from '../ViewportProvider'
10
10
  import { useThemeTokens, useThemeTokensCallback } from '../ThemeProvider'
11
11
  import {
12
12
  a11yProps,
13
+ getTokensPropType,
13
14
  pressProps,
15
+ selectSystemProps,
16
+ selectTokens,
14
17
  variantProp,
15
- getTokensPropType,
16
- selectTokens
17
- } from '../utils/propTypes'
18
+ viewProps
19
+ } from '../utils/props'
18
20
  import { useMultipleInputValues } from '../utils/input'
19
21
  import { getPressHandlersWithArgs } from '../utils/pressability'
20
22
 
23
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, pressProps, viewProps])
24
+
21
25
  const selectIconTextTokens = ({
22
26
  icon,
23
27
  iconPosition,
@@ -85,14 +89,20 @@ const Tags = forwardRef(
85
89
  readOnly
86
90
  })
87
91
 
88
- const a11y = a11yProps.select({
92
+ const selectedProps = selectProps({
89
93
  accessibilityRole,
90
94
  ...rest
91
95
  })
92
96
  const itemA11yRole = 'checkbox'
93
97
 
94
98
  return (
95
- <StackWrap ref={ref} {...a11y} space={space} direction={direction} tokens={stackTokens}>
99
+ <StackWrap
100
+ ref={ref}
101
+ {...selectedProps}
102
+ space={space}
103
+ direction={direction}
104
+ tokens={stackTokens}
105
+ >
96
106
  {items.map(({ label, id = label, accessibilityLabel, ref: itemRef }, index) => {
97
107
  const isSelected = currentValues.includes(id)
98
108
 
@@ -161,8 +171,7 @@ const Tags = forwardRef(
161
171
  Tags.displayName = 'Tags'
162
172
 
163
173
  Tags.propTypes = {
164
- ...a11yProps.propTypes,
165
- ...pressProps.propTypes,
174
+ ...selectedSystemPropTypes,
166
175
  tokens: getTokensPropType('Tags'),
167
176
  variant: variantProp.propType,
168
177
  /**
@@ -1,13 +1,25 @@
1
1
  import React, { forwardRef, useState } from 'react'
2
2
 
3
3
  import { Platform } from 'react-native'
4
- import { getTokensPropType, variantProp } from '../utils'
4
+ import {
5
+ a11yProps,
6
+ getTokensPropType,
7
+ inputSupportsProps,
8
+ selectSystemProps,
9
+ variantProp,
10
+ viewProps
11
+ } from '../utils'
5
12
  import InputSupports from '../InputSupports'
6
13
  import TextInputBase from './TextInputBase'
7
14
  import { useThemeTokens } from '../ThemeProvider'
8
- import inputSupportProps from '../InputSupports/propTypes'
9
15
  import textInputPropTypes from './propTypes'
10
16
 
17
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([
18
+ a11yProps,
19
+ inputSupportsProps,
20
+ viewProps
21
+ ])
22
+
11
23
  /**
12
24
  * Use to collect long-form information such as product feedback or support queries.
13
25
  * Due to React Native's implementation of `TextInput` it's not possible to access the current value by passing a ref.
@@ -32,7 +44,7 @@ import textInputPropTypes from './propTypes'
32
44
  * or an indicator that the field is optional.
33
45
  * It is a more usable and accessible option than the HTML `placeholder` attribute.
34
46
  */
35
- const TextArea = forwardRef(({ tokens, variant = {}, ...remainingProps }, ref) => {
47
+ const TextArea = forwardRef(({ tokens, variant = {}, ...rest }, ref) => {
36
48
  const themeTokens = useThemeTokens('TextArea', tokens, variant)
37
49
  const [inputHeight, setInputHeight] = useState()
38
50
 
@@ -48,10 +60,10 @@ const TextArea = forwardRef(({ tokens, variant = {}, ...remainingProps }, ref) =
48
60
  }
49
61
  }
50
62
 
51
- const { props: supportsProps, rest } = inputSupportProps.select(remainingProps)
63
+ const { props: supportsProps, ...selectedProps } = selectProps(rest)
52
64
 
53
65
  const inputProps = {
54
- ...rest,
66
+ ...selectedProps,
55
67
  variant: { ...variant, validation: supportsProps.validation },
56
68
  multiline: true,
57
69
  onContentSizeChange: onHeightChange,
@@ -61,8 +73,8 @@ const TextArea = forwardRef(({ tokens, variant = {}, ...remainingProps }, ref) =
61
73
 
62
74
  return (
63
75
  <InputSupports {...supportsProps}>
64
- {({ a11yProps, inputId }) => (
65
- <TextInputBase ref={ref} {...inputProps} {...a11yProps} nativeID={inputId} />
76
+ {({ inputId, ...props }) => (
77
+ <TextInputBase ref={ref} {...inputProps} nativeID={inputId} {...props} />
66
78
  )}
67
79
  </InputSupports>
68
80
  )
@@ -70,7 +82,7 @@ const TextArea = forwardRef(({ tokens, variant = {}, ...remainingProps }, ref) =
70
82
  TextArea.displayName = 'TextArea'
71
83
 
72
84
  TextArea.propTypes = {
73
- ...inputSupportProps.types,
85
+ ...selectedSystemPropTypes,
74
86
  ...textInputPropTypes,
75
87
  tokens: getTokensPropType('TextArea', 'TextInput'), // TODO: support both TextArea and TextInput tokens
76
88
  variant: variantProp.propType
@@ -1,11 +1,23 @@
1
1
  import React, { forwardRef } from 'react'
2
2
 
3
- import { getTokensPropType, variantProp } from '../utils'
3
+ import {
4
+ a11yProps,
5
+ getTokensPropType,
6
+ inputSupportsProps,
7
+ selectSystemProps,
8
+ variantProp,
9
+ viewProps
10
+ } from '../utils'
4
11
  import InputSupports from '../InputSupports'
5
12
  import TextInputBase from './TextInputBase'
6
- import inputSupportProps from '../InputSupports/propTypes'
7
13
  import textInputPropTypes from './propTypes'
8
14
 
15
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([
16
+ a11yProps,
17
+ inputSupportsProps,
18
+ viewProps
19
+ ])
20
+
9
21
  /**
10
22
  * A basic text input component. Use in forms or individually to receive user's input.
11
23
  * Due to React Native's implementation of `TextInput` it's not possible to access the current value by passing a ref.
@@ -24,19 +36,19 @@ import textInputPropTypes from './propTypes'
24
36
  * supported props and <a href="https://reactnative.dev/docs/textinput" target="_blank">React Native Web documentation</a> for
25
37
  * their implementation on the web.
26
38
  */
27
- const TextInput = forwardRef(({ tokens, variant = {}, ...remainingProps }, ref) => {
28
- const { props: supportsProps, rest } = inputSupportProps.select(remainingProps)
39
+ const TextInput = forwardRef(({ tokens, variant = {}, ...rest }, ref) => {
40
+ const { props: supportsProps, ...selectedProps } = selectProps(rest)
29
41
 
30
42
  const inputProps = {
31
- ...rest,
43
+ ...selectedProps,
32
44
  tokens,
33
45
  variant: { ...variant, validation: supportsProps.validation }
34
46
  }
35
47
 
36
48
  return (
37
49
  <InputSupports {...supportsProps}>
38
- {({ a11yProps, inputId }) => (
39
- <TextInputBase ref={ref} {...inputProps} {...a11yProps} nativeID={inputId} />
50
+ {({ inputId, ...props }) => (
51
+ <TextInputBase ref={ref} {...inputProps} nativeID={inputId} {...props} />
40
52
  )}
41
53
  </InputSupports>
42
54
  )
@@ -44,7 +56,7 @@ const TextInput = forwardRef(({ tokens, variant = {}, ...remainingProps }, ref)
44
56
  TextInput.displayName = 'TextInput'
45
57
 
46
58
  TextInput.propTypes = {
47
- ...inputSupportProps.types,
59
+ ...selectedSystemPropTypes,
48
60
  ...textInputPropTypes,
49
61
  tokens: getTokensPropType('TextInput'),
50
62
  variant: variantProp.propType
@@ -3,7 +3,16 @@ import { Platform, StyleSheet, TextInput as NativeTextInput, View } from 'react-
3
3
 
4
4
  import PropTypes from 'prop-types'
5
5
  import { applyTextStyles, useThemeTokens, applyOuterBorder } 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'
14
+
15
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
7
16
 
8
17
  const selectInputStyles = (
9
18
  {
@@ -114,7 +123,7 @@ const TextInputBase = forwardRef(
114
123
  onMouseOut,
115
124
  tokens,
116
125
  variant = {},
117
- ...remainingProps
126
+ ...rest
118
127
  },
119
128
  ref
120
129
  ) => {
@@ -158,7 +167,7 @@ const TextInputBase = forwardRef(
158
167
  const { icon: IconComponent } = themeTokens
159
168
 
160
169
  const inputProps = {
161
- ...remainingProps,
170
+ ...selectProps(rest),
162
171
  editable: !inactive,
163
172
  onFocus: handleFocus,
164
173
  onBlur: handleBlur,
@@ -191,6 +200,7 @@ const TextInputBase = forwardRef(
191
200
  TextInputBase.displayName = 'TextInputBase'
192
201
 
193
202
  TextInputBase.propTypes = {
203
+ ...selectedSystemPropTypes,
194
204
  value: PropTypes.string,
195
205
  height: PropTypes.number,
196
206
  initialValue: PropTypes.string,
@@ -2,9 +2,9 @@ import { useCallback } from 'react'
2
2
  import useTheme from './useTheme'
3
3
  import { getComponentTheme, getThemeTokens, resolveThemeTokens, mergeAppearances } from './utils'
4
4
  /**
5
- * @typedef {import('../utils/propTypes.js').AppearanceSet} AppearanceSet
6
- * @typedef {import('../utils/propTypes.js').TokensProp} TokensProp
7
- * @typedef {import('../utils/propTypes.js').TokensSet} TokensSet
5
+ * @typedef {import('../utils/props/variantProp.js').AppearanceSet} AppearanceSet
6
+ * @typedef {import('../utils/props/tokens.js').TokensProp} TokensProp
7
+ * @typedef {import('../utils/props/tokens.js').TokensSet} TokensSet
8
8
  */
9
9
 
10
10
  /**
@@ -3,9 +3,9 @@ import semVerSatisfies from 'semver/functions/satisfies'
3
3
  import pkg from '../../../package.json'
4
4
 
5
5
  /**
6
- * @typedef {import('../../utils/propTypes.js').AppearanceSet} AppearanceSet
7
- * @typedef {import('../../utils/propTypes.js').TokensProp} TokensProp
8
- * @typedef {import('../../utils/propTypes.js').TokensSet} TokensSet
6
+ * @typedef {import('../../utils/props/variantProp.js').AppearanceSet} AppearanceSet
7
+ * @typedef {import('../../utils/props/tokens.js').TokensProp} TokensProp
8
+ * @typedef {import('../../utils/props/tokens.js').TokensSet} TokensSet
9
9
  */
10
10
 
11
11
  /**
@@ -8,13 +8,17 @@ import StackView from '../StackView'
8
8
  import { useThemeTokensCallback, applyShadowToken } from '../ThemeProvider'
9
9
  import {
10
10
  a11yProps,
11
+ getTokensPropType,
12
+ selectTokens,
11
13
  pressProps,
14
+ selectSystemProps,
15
+ useUniqueId,
12
16
  variantProp,
13
- getTokensPropType,
14
- selectTokens
15
- } from '../utils/propTypes'
17
+ viewProps
18
+ } from '../utils'
16
19
  import { useInputValue } from '../utils/input'
17
- import { useUniqueId } from '../utils'
20
+
21
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, pressProps, viewProps])
18
22
 
19
23
  const selectButtonTokens = (tokens) =>
20
24
  selectTokens('Button', {
@@ -85,7 +89,8 @@ const ToggleSwitch = forwardRef(
85
89
  tooltip,
86
90
  variant,
87
91
  accessibilityRole = 'switch',
88
- accessibilityLabel = label
92
+ accessibilityLabel = label,
93
+ ...rest
89
94
  },
90
95
  ref
91
96
  ) => {
@@ -125,6 +130,7 @@ const ToggleSwitch = forwardRef(
125
130
  accessibilityRole={accessibilityRole}
126
131
  accessibilityState={{ checked: currentValue }}
127
132
  onPress={handlePress}
133
+ {...selectProps(rest)}
128
134
  >
129
135
  {(buttonState) => {
130
136
  const stateTokens = getTokens(buttonState)
@@ -157,8 +163,7 @@ const ToggleSwitch = forwardRef(
157
163
  ToggleSwitch.displayName = 'ToggleSwitch'
158
164
 
159
165
  ToggleSwitch.propTypes = {
160
- ...a11yProps.propTypes,
161
- ...pressProps.propTypes,
166
+ ...selectedSystemPropTypes,
162
167
  tokens: getTokensPropType('ToggleSwitch'),
163
168
  variant: variantProp.propType,
164
169
  /**
@@ -8,9 +8,18 @@ import Fieldset from '../Fieldset'
8
8
  import { getStackedContent } from '../StackView'
9
9
  import { useViewport } from '../ViewportProvider'
10
10
  import { useThemeTokens } from '../ThemeProvider'
11
- import { a11yProps, pressProps, variantProp, getTokensPropType } from '../utils/propTypes'
11
+ import {
12
+ a11yProps,
13
+ getTokensPropType,
14
+ pressProps,
15
+ selectSystemProps,
16
+ variantProp,
17
+ viewProps
18
+ } from '../utils/props'
12
19
  import { useMultipleInputValues } from '../utils/input'
13
20
 
21
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, pressProps, viewProps])
22
+
14
23
  const ToggleSwitchGroup = forwardRef(
15
24
  (
16
25
  {
@@ -51,11 +60,11 @@ const ToggleSwitchGroup = forwardRef(
51
60
  readOnly
52
61
  })
53
62
 
54
- const a11y = a11yProps.select({
63
+ const selectedProps = selectProps({
55
64
  accessibilityRole,
56
65
  ...rest
57
66
  })
58
- const itemA11yRole = a11y.accessibilityRole === 'radiogroup' ? 'radio' : 'switch'
67
+ const itemA11yRole = selectedProps.accessibilityRole === 'radiogroup' ? 'radio' : 'switch'
59
68
 
60
69
  const toggleSwitches = items.map(
61
70
  (
@@ -111,7 +120,7 @@ const ToggleSwitchGroup = forwardRef(
111
120
  feedback={feedback}
112
121
  inactive={inactive}
113
122
  validation={validation}
114
- {...a11y}
123
+ {...selectedProps}
115
124
  >
116
125
  {getStackedContent(toggleSwitches, { space, direction: 'column' })}
117
126
  </Fieldset>
@@ -121,8 +130,7 @@ const ToggleSwitchGroup = forwardRef(
121
130
  ToggleSwitchGroup.displayName = 'ToggleSwitchGroup'
122
131
 
123
132
  ToggleSwitchGroup.propTypes = {
124
- ...a11yProps.propTypes,
125
- ...pressProps.propTypes,
133
+ ...selectedSystemPropTypes,
126
134
  tokens: getTokensPropType('ToggleSwitchGroup'),
127
135
  variant: variantProp.propType,
128
136
  /**
@@ -3,13 +3,22 @@ import { Dimensions, Platform, Pressable, StyleSheet, Text, View } from 'react-n
3
3
 
4
4
  import PropTypes from 'prop-types'
5
5
  import { applyShadowToken, 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 Backdrop from './Backdrop'
8
15
  import getTooltipPosition from './getTooltipPosition'
9
16
  import TooltipButton from '../TooltipButton'
10
17
  import useCopy from '../utils/useCopy'
11
18
  import dictionary from './dictionary'
12
19
 
20
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
21
+
13
22
  const selectTooltipStyles = ({
14
23
  backgroundColor,
15
24
  paddingTop,
@@ -100,7 +109,7 @@ const defaultControl = (pressableState, variant) => (
100
109
  * - Tooltips may also be useful when vertical space is an issue.
101
110
  */
102
111
  const Tooltip = forwardRef(
103
- ({ children, content, position = 'auto', copy = 'en', tokens, variant }, ref) => {
112
+ ({ children, content, position = 'auto', copy = 'en', tokens, variant, ...rest }, ref) => {
104
113
  const [isOpen, setIsOpen] = useState(false)
105
114
 
106
115
  const controlRef = useRef()
@@ -209,7 +218,7 @@ const Tooltip = forwardRef(
209
218
  control === defaultControl ? { top: 10, bottom: 10, left: 10, right: 10 } : undefined
210
219
 
211
220
  return (
212
- <View style={staticStyles.container}>
221
+ <View style={staticStyles.container} {...selectProps(rest)}>
213
222
  <Pressable
214
223
  onPress={toggleIsOpen}
215
224
  ref={controlRef}
@@ -256,6 +265,7 @@ const Tooltip = forwardRef(
256
265
  Tooltip.displayName = 'Tooltip'
257
266
 
258
267
  Tooltip.propTypes = {
268
+ ...selectedSystemPropTypes,
259
269
  /**
260
270
  * Used to render the control (i.e. tooltip trigger). If a render function is used it will receive the
261
271
  * pressable state and tooltip variant as an argument.
@@ -1,11 +1,12 @@
1
1
  import React from 'react'
2
2
  import { View } from 'react-native'
3
-
4
3
  import PropTypes from 'prop-types'
5
4
  import { useThemeTokens, applyOuterBorder } from '../ThemeProvider'
6
- import { getTokensPropType, variantProp } from '../utils'
5
+ import { a11yProps, getTokensPropType, selectSystemProps, variantProp, viewProps } from '../utils'
7
6
  import Icon from '../Icon'
8
7
 
8
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
9
+
9
10
  const selectInnerContainerStyles = ({ borderRadius, width }) => ({ borderRadius, width })
10
11
 
11
12
  const selectIconTokens = ({ iconSize, iconColor /* iconScale = 1 */ }) => ({
@@ -19,13 +20,13 @@ const selectIconTokens = ({ iconSize, iconColor /* iconScale = 1 */ }) => ({
19
20
  * In fact though, it isn't actually a pressable - it's meant to be used as pressable's content.
20
21
  * Due to this any interaction states (e.g. pressed, hover, etc.) has to be passed down to it as a prop.
21
22
  */
22
- const TooltipButton = ({ pressableState, tokens, variant }) => {
23
+ const TooltipButton = ({ pressableState, tokens, variant, ...rest }) => {
23
24
  const themeTokens = useThemeTokens('TooltipButton', tokens, variant, pressableState)
24
25
 
25
26
  const { icon: IconComponent } = themeTokens
26
27
 
27
28
  return (
28
- <View style={applyOuterBorder(themeTokens)}>
29
+ <View style={applyOuterBorder(themeTokens)} {...selectProps(rest)}>
29
30
  <View style={selectInnerContainerStyles(themeTokens)}>
30
31
  {IconComponent && <Icon icon={IconComponent} tokens={selectIconTokens(themeTokens)} />}
31
32
  </View>
@@ -34,6 +35,7 @@ const TooltipButton = ({ pressableState, tokens, variant }) => {
34
35
  }
35
36
 
36
37
  TooltipButton.propTypes = {
38
+ ...selectedSystemPropTypes,
37
39
  /**
38
40
  * Used as appearances when resolving theme tokens.
39
41
  */