@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
@@ -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
  /**
@@ -1,18 +1,25 @@
1
1
  import React, { forwardRef } from 'react'
2
2
  import PropTypes from 'prop-types'
3
- import { Platform, View, StyleSheet } from 'react-native'
3
+ import { Platform, StyleSheet, View } from 'react-native'
4
4
 
5
+ import InputLabel from '../InputLabel'
5
6
  import ButtonBase from '../Button/ButtonBase'
7
+ import StackView from '../StackView'
6
8
  import { useThemeTokensCallback, applyShadowToken } from '../ThemeProvider'
7
9
  import {
8
10
  a11yProps,
11
+ getTokensPropType,
12
+ selectTokens,
9
13
  pressProps,
14
+ selectSystemProps,
15
+ useUniqueId,
10
16
  variantProp,
11
- getTokensPropType,
12
- selectTokens
13
- } from '../utils/propTypes'
17
+ viewProps
18
+ } from '../utils'
14
19
  import { useInputValue } from '../utils/input'
15
20
 
21
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, pressProps, viewProps])
22
+
16
23
  const selectButtonTokens = (tokens) =>
17
24
  selectTokens('Button', {
18
25
  ...tokens,
@@ -54,12 +61,41 @@ const selectSwitchStyles = ({
54
61
  })
55
62
  })
56
63
 
64
+ const selectLabelStyles = ({ labelMarginLeft }) => ({ marginLeft: labelMarginLeft })
65
+ const selectLabelTokens = ({
66
+ labelColor,
67
+ labelFontName,
68
+ labelFontSize,
69
+ labelFontWeight,
70
+ labelLineHeight
71
+ }) => ({
72
+ color: labelColor,
73
+ fontName: labelFontName,
74
+ fontWeight: labelFontWeight,
75
+ fontSize: labelFontSize,
76
+ lineHeight: labelLineHeight
77
+ })
78
+
57
79
  const ToggleSwitch = forwardRef(
58
80
  (
59
- { value, initialValue, onChange, inactive, tokens, variant, accessibilityRole = 'switch' },
81
+ {
82
+ value,
83
+ initialValue,
84
+ onChange,
85
+ id,
86
+ label,
87
+ inactive,
88
+ tokens,
89
+ tooltip,
90
+ variant,
91
+ accessibilityRole = 'switch',
92
+ accessibilityLabel = label,
93
+ ...rest
94
+ },
60
95
  ref
61
96
  ) => {
62
97
  const getTokens = useThemeTokensCallback('ToggleSwitch', tokens, variant)
98
+ const themeTokens = getTokens()
63
99
 
64
100
  const { currentValue, setValue } = useInputValue({
65
101
  value,
@@ -68,51 +104,66 @@ const ToggleSwitch = forwardRef(
68
104
  })
69
105
 
70
106
  const handlePress = (event) => setValue(!currentValue, event)
71
-
72
107
  const getButtonTokens = (buttonState) => selectButtonTokens(getTokens(buttonState))
108
+ const uniqueId = useUniqueId('toggleSwitch')
109
+ const inputId = id ?? uniqueId
73
110
 
74
111
  return (
75
- <ButtonBase
76
- ref={ref}
77
- selected={currentValue}
78
- inactive={inactive}
79
- tokens={getButtonTokens}
80
- accessibilityRole={accessibilityRole}
81
- accessibilityState={{ checked: currentValue }}
82
- onPress={handlePress}
83
- >
84
- {(buttonState) => {
85
- const themeTokens = getTokens(buttonState)
86
- const IconComponent = themeTokens.icon
87
- const switchStyles = selectSwitchStyles(themeTokens)
88
- const trackStyles = selectTrackStyles(themeTokens)
89
- const iconTokens = selectIconTokens(themeTokens)
90
-
91
- // If drag-slide support is needed, use a PanResponder and apply these to an Animated value.
92
- // Use translate transforms for smoothest non-thread-blocking animations and to allow drag.
93
- const slideStart = 0
94
- const slideEnd =
95
- themeTokens.width - themeTokens.switchSize - themeTokens.trackBorderWidth * 2
96
- const switchOffset = buttonState.selected ? slideEnd : slideStart
97
- const switchPositionStyle = { transform: [{ translateX: switchOffset }] }
98
-
99
- return (
100
- <View style={[staticStyles.track, trackStyles]}>
101
- <View style={[staticStyles.switch, switchStyles, switchPositionStyle]}>
102
- {IconComponent && <IconComponent {...iconTokens} />}
112
+ <StackView space={2} direction="row">
113
+ {Boolean(label) && (
114
+ <View style={selectLabelStyles(themeTokens)}>
115
+ <InputLabel
116
+ forId={inputId}
117
+ label={label}
118
+ tokens={selectLabelTokens(themeTokens)}
119
+ tooltip={tooltip}
120
+ />
121
+ </View>
122
+ )}
123
+ <ButtonBase
124
+ id={id}
125
+ ref={ref}
126
+ selected={currentValue}
127
+ inactive={inactive}
128
+ tokens={getButtonTokens}
129
+ accessibilityLabel={accessibilityLabel}
130
+ accessibilityRole={accessibilityRole}
131
+ accessibilityState={{ checked: currentValue }}
132
+ onPress={handlePress}
133
+ {...selectProps(rest)}
134
+ >
135
+ {(buttonState) => {
136
+ const stateTokens = getTokens(buttonState)
137
+ const IconComponent = stateTokens.icon
138
+ const switchStyles = selectSwitchStyles(stateTokens)
139
+ const trackStyles = selectTrackStyles(stateTokens)
140
+ const iconTokens = selectIconTokens(stateTokens)
141
+
142
+ // If drag-slide support is needed, use a PanResponder and apply these to an Animated value.
143
+ // Use translate transforms for smoothest non-thread-blocking animations and to allow drag.
144
+ const slideStart = 0
145
+ const slideEnd =
146
+ stateTokens.width - stateTokens.switchSize - stateTokens.trackBorderWidth * 2
147
+ const switchOffset = buttonState.selected ? slideEnd : slideStart
148
+ const switchPositionStyle = { transform: [{ translateX: switchOffset }] }
149
+
150
+ return (
151
+ <View style={[staticStyles.track, trackStyles]}>
152
+ <View style={[staticStyles.switch, switchStyles, switchPositionStyle]}>
153
+ {IconComponent && <IconComponent {...iconTokens} />}
154
+ </View>
103
155
  </View>
104
- </View>
105
- )
106
- }}
107
- </ButtonBase>
156
+ )
157
+ }}
158
+ </ButtonBase>
159
+ </StackView>
108
160
  )
109
161
  }
110
162
  )
111
163
  ToggleSwitch.displayName = 'ToggleSwitch'
112
164
 
113
165
  ToggleSwitch.propTypes = {
114
- ...a11yProps.propTypes,
115
- ...pressProps.propTypes,
166
+ ...selectedSystemPropTypes,
116
167
  tokens: getTokensPropType('ToggleSwitch'),
117
168
  variant: variantProp.propType,
118
169
  /**
@@ -131,11 +182,23 @@ ToggleSwitch.propTypes = {
131
182
  * this should always be passed and used to control the state of the switch.
132
183
  */
133
184
  onChange: PropTypes.func,
185
+ /**
186
+ * Input ID.
187
+ */
188
+ id: PropTypes.string,
189
+ /**
190
+ * An optional label.
191
+ */
192
+ label: PropTypes.string,
134
193
  /**
135
194
  * If passed, the switch does not respond to user input and may recieve different
136
195
  * theme tokens if the theme supports inactive appearance.
137
196
  */
138
- inactive: PropTypes.bool
197
+ inactive: PropTypes.bool,
198
+ /**
199
+ * Content of an optional Tooltip. If set, a tooltip button will be shown next to the label.
200
+ */
201
+ tooltip: PropTypes.string
139
202
  }
140
203
 
141
204
  const staticStyles = StyleSheet.create({
@@ -0,0 +1,211 @@
1
+ import React, { forwardRef } from 'react'
2
+ import PropTypes from 'prop-types'
3
+ import ABBPropTypes from 'airbnb-prop-types'
4
+ import { Platform } from 'react-native'
5
+
6
+ import ToggleSwitch from './ToggleSwitch'
7
+ import Fieldset from '../Fieldset'
8
+ import { getStackedContent } from '../StackView'
9
+ import { useViewport } from '../ViewportProvider'
10
+ import { useThemeTokens } from '../ThemeProvider'
11
+ import {
12
+ a11yProps,
13
+ getTokensPropType,
14
+ pressProps,
15
+ selectSystemProps,
16
+ variantProp,
17
+ viewProps
18
+ } from '../utils/props'
19
+ import { useMultipleInputValues } from '../utils/input'
20
+
21
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, pressProps, viewProps])
22
+
23
+ const ToggleSwitchGroup = forwardRef(
24
+ (
25
+ {
26
+ variant,
27
+ tokens,
28
+ items = [],
29
+ values,
30
+ initialValues,
31
+ maxValues = 1,
32
+ onChange,
33
+ readOnly = false,
34
+ inactive = false,
35
+ feedback,
36
+ hint,
37
+ tooltip,
38
+ legend,
39
+ name: inputGroupName,
40
+ accessibilityRole = maxValues === 1
41
+ ? 'radiogroup' // radiogroup is cross-platform; only web aria has generic groups
42
+ : Platform.select({ web: 'group', default: 'none' }),
43
+ toggleSwitchTokens,
44
+ validation,
45
+ ...rest
46
+ },
47
+ ref
48
+ ) => {
49
+ const viewport = useViewport()
50
+
51
+ const { space, fieldSpace } = useThemeTokens('ToggleSwitchGroup', tokens, variant, {
52
+ viewport
53
+ })
54
+
55
+ const { currentValues, toggleOneValue } = useMultipleInputValues({
56
+ initialValues,
57
+ values,
58
+ maxValues,
59
+ onChange,
60
+ readOnly
61
+ })
62
+
63
+ const selectedProps = selectProps({
64
+ accessibilityRole,
65
+ ...rest
66
+ })
67
+ const itemA11yRole = selectedProps.accessibilityRole === 'radiogroup' ? 'radio' : 'switch'
68
+
69
+ const toggleSwitches = items.map(
70
+ (
71
+ {
72
+ label,
73
+ id = label,
74
+ accessibilityLabel = label,
75
+ onChange: itemOnChange,
76
+ ref: itemRef,
77
+ tooltip: itemTooltip
78
+ },
79
+ index
80
+ ) => {
81
+ const isSelected = currentValues.includes(id)
82
+
83
+ const handleChange = (newCheckedState, event) => {
84
+ if (typeof itemOnChange === 'function') itemOnChange(newCheckedState, event)
85
+ toggleOneValue(id, event)
86
+ }
87
+
88
+ const itemA11y = {
89
+ accessibilityState: { checked: isSelected },
90
+ accessibilityRole: itemA11yRole,
91
+ accessibilityLabel,
92
+ ...a11yProps.getPositionInSet(items.length, index)
93
+ }
94
+
95
+ return (
96
+ <ToggleSwitch
97
+ id={id}
98
+ ref={itemRef}
99
+ key={id}
100
+ onChange={handleChange}
101
+ tokens={toggleSwitchTokens}
102
+ value={isSelected}
103
+ inactive={inactive}
104
+ label={label}
105
+ tooltip={itemTooltip}
106
+ {...itemA11y}
107
+ />
108
+ )
109
+ }
110
+ )
111
+
112
+ return (
113
+ <Fieldset
114
+ ref={ref}
115
+ name={inputGroupName}
116
+ legend={legend}
117
+ tooltip={tooltip}
118
+ hint={hint}
119
+ space={fieldSpace}
120
+ feedback={feedback}
121
+ inactive={inactive}
122
+ validation={validation}
123
+ {...selectedProps}
124
+ >
125
+ {getStackedContent(toggleSwitches, { space, direction: 'column' })}
126
+ </Fieldset>
127
+ )
128
+ }
129
+ )
130
+ ToggleSwitchGroup.displayName = 'ToggleSwitchGroup'
131
+
132
+ ToggleSwitchGroup.propTypes = {
133
+ ...selectedSystemPropTypes,
134
+ tokens: getTokensPropType('ToggleSwitchGroup'),
135
+ variant: variantProp.propType,
136
+ /**
137
+ * The maximum number of items a user may select at once. Defaults to 1 and behaves
138
+ * like radio buttons. To have no limit and allow any number of selections, pass `null`.
139
+ */
140
+ maxValues: PropTypes.number,
141
+ /**
142
+ * The options a user may select
143
+ */
144
+ items: PropTypes.arrayOf(
145
+ PropTypes.shape({
146
+ /**
147
+ * The text displayed to the user on the label.
148
+ */
149
+ label: PropTypes.string.isRequired,
150
+ /**
151
+ * An optional accessibility label may be passed to each ToggleSwitch
152
+ * and will be applied as normal for a React Native accessibilityLabel prop.
153
+ */
154
+ accessibilityLabel: PropTypes.string,
155
+ /**
156
+ * An optional unique string may be provided to identify this option,
157
+ * which will be used in code and passed to any onChange function.
158
+ * If not provided, the label is used.
159
+ */
160
+ id: PropTypes.string,
161
+ /**
162
+ * An optional ref for one individual ToggleSwitch in the ToggleSwitchGroup
163
+ */
164
+ ref: ABBPropTypes.ref()
165
+ })
166
+ ),
167
+ /**
168
+ * If provided, this function is called when the current selection is changed
169
+ * and is passed an array of the `id`s of all currently selected `items`.
170
+ */
171
+ onChange: PropTypes.func,
172
+ /**
173
+ * If the selected item(s) in the toggle switch group are to be controlled externally by
174
+ * a parent component, pass an array of strings as well as an `onChange` handler.
175
+ * Passing an array for "values" makes the ToggleSwitchGroup a "controlled" component that
176
+ * expects its state to be handled via `onChange` and so doesn't handle it itself.
177
+ */
178
+ values: PropTypes.arrayOf(PropTypes.string),
179
+ /**
180
+ * If `values` is not passed, making the ToggleSwitchGroup an "uncontrolled" component
181
+ * managing its own selected state, a default set of selections may be provided.
182
+ * Changing the `initialValues` does not change the user's selections.
183
+ */
184
+ initialValues: PropTypes.arrayOf(PropTypes.string),
185
+ /**
186
+ * Optional additional text giving more detail to help a user make a choice.
187
+ */
188
+ hint: PropTypes.string,
189
+ /**
190
+ * Optional tooltip text content to include alongside the legend and hint.
191
+ */
192
+ tooltip: PropTypes.string,
193
+ /**
194
+ * If provided, a Feedback element is rendered containing this text.
195
+ */
196
+ feedback: PropTypes.string,
197
+ /**
198
+ * Main text used to describe this group, used in Fieldset's Legend element.
199
+ */
200
+ legend: PropTypes.string,
201
+ /**
202
+ * Toggle switch token overrides.
203
+ */
204
+ toggleSwitchTokens: getTokensPropType('ToggleSwitch'),
205
+ /**
206
+ * Current validation status of the group, passed to the feedback element if there is one.
207
+ */
208
+ validation: PropTypes.oneOf(['error', 'success'])
209
+ }
210
+
211
+ export default ToggleSwitchGroup
@@ -1,3 +1,4 @@
1
1
  import ToggleSwitch from './ToggleSwitch'
2
+ import ToggleSwitchGroup from './ToggleSwitchGroup'
2
3
 
3
- export default ToggleSwitch
4
+ export { ToggleSwitch, ToggleSwitchGroup }
@@ -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
  */
@@ -11,13 +11,17 @@ import {
11
11
  getTokensPropType,
12
12
  getMaxFontMultiplier,
13
13
  headingTags,
14
+ selectSystemProps,
14
15
  textTags,
16
+ viewProps,
15
17
  getA11yPropsFromHtmlTag
16
18
  } from '../utils'
17
19
  /**
18
20
  * @typedef {import('../utils/a11y/semantics').TextTag} TextTag
19
21
  */
20
22
 
23
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
24
+
21
25
  const selectTextStyles = ({
22
26
  fontWeight,
23
27
  fontSize,
@@ -64,17 +68,17 @@ const Typography = forwardRef(
64
68
  maxFontSizeMultiplier: getMaxFontMultiplier(themeTokens)
65
69
  }
66
70
 
67
- const a11y = {
71
+ const selectedProps = selectProps({
68
72
  ...getA11yPropsFromHtmlTag(tag, accessibilityRole),
69
- ...a11yProps.select(rest)
70
- }
73
+ ...rest
74
+ })
71
75
 
72
76
  return block ? (
73
- <View ref={ref} {...a11y}>
77
+ <View ref={ref} {...selectedProps}>
74
78
  <Text {...textProps}>{children}</Text>
75
79
  </View>
76
80
  ) : (
77
- <Text ref={ref} {...textProps} {...a11y}>
81
+ <Text ref={ref} {...textProps} {...selectedProps}>
78
82
  {children}
79
83
  </Text>
80
84
  )
@@ -83,7 +87,7 @@ const Typography = forwardRef(
83
87
  Typography.displayName = 'Typography'
84
88
 
85
89
  Typography.propTypes = {
86
- ...a11yProps.types,
90
+ ...selectedSystemPropTypes,
87
91
  tokens: getTokensPropType('Typography'),
88
92
  variant: variantProp.propType,
89
93
  /**
package/src/index.js CHANGED
@@ -37,14 +37,14 @@ export { default as StepTracker } from './StepTracker'
37
37
  export { default as Tabs } from './Tabs'
38
38
  export { default as Tags } from './Tags'
39
39
  export * from './TextInput'
40
- export { default as ToggleSwitch } from './ToggleSwitch'
40
+ export * from './ToggleSwitch'
41
41
  export { default as Tooltip } from './Tooltip'
42
42
  export { default as TooltipButton } from './TooltipButton'
43
43
  export { default as Typography } from './Typography'
44
44
 
45
45
  export { default as A11yInfoProvider, useA11yInfo } from './A11yInfoProvider'
46
46
  export { default as BaseProvider } from './BaseProvider'
47
- export { default as ViewportProvider, useViewport } from './ViewportProvider'
47
+ export { default as ViewportProvider, useViewport, ViewportContext } from './ViewportProvider'
48
48
  export {
49
49
  default as ThemeProvider,
50
50
  useTheme,
@@ -150,8 +150,9 @@ export const getA11yPropsFromHtmlTag = (tag, nativeRole) => {
150
150
  if (nativeRole !== undefined && Platform.OS !== 'web') return { accessibilityRole: nativeRole }
151
151
 
152
152
  if (tag) {
153
- const accessibilityRole = tagsToRoles[tag]
154
- if (accessibilityRole) return { accessibilityRole }
153
+ // aria roles don't have native counterparts and RN may throw an error if an unrecognised role is passed
154
+ const ariaRole = Platform.OS === 'web' && tagsToRoles[tag]
155
+ if (ariaRole) return { accessibilityRole: ariaRole }
155
156
 
156
157
  const accessibilityLevel = getHeadingLevel(tag)
157
158
  if (accessibilityLevel) return { accessibilityRole: 'header', accessibilityLevel }
@@ -47,7 +47,8 @@ export const unpackFragment = (child) => {
47
47
 
48
48
  const isStringOrNumber = (child) => typeof child === 'string' || typeof child === 'number'
49
49
  // Wrap an A11yText with neighouring text strings so it doesn't split them into multiple <Text>s
50
- const isWrapable = (child) => isStringOrNumber(child) || child.type === A11yText
50
+ const isWrapable = (child) =>
51
+ isStringOrNumber(child) || child.type === A11yText || child.type?.name === 'FootnoteLink'
51
52
  const combineKeys = (childrenArray) =>
52
53
  childrenArray.reduce((newKey, child) => `${newKey}${child.key || ''}`, '')
53
54
 
@@ -3,7 +3,7 @@ export * from './animation'
3
3
  export * from './children'
4
4
  export * from './input'
5
5
  export * from './pressability'
6
- export * from './propTypes'
6
+ export * from './props'
7
7
 
8
8
  export { default as info } from './info'
9
9
  export { default as useCopy } from './useCopy'
@@ -12,3 +12,5 @@ export { default as useSpacingScale } from './useSpacingScale'
12
12
  export { default as useResponsiveProp } from './useResponsiveProp'
13
13
  export * from './useResponsiveProp'
14
14
  export { default as useUniqueId } from './useUniqueId'
15
+ export { default as withLinkRouter } from './withLinkRouter'
16
+ export * from './ssr'
@@ -1,5 +1,5 @@
1
1
  import { Platform, StyleSheet } from 'react-native'
2
- import { pressProps } from './propTypes'
2
+ import pressProps from './props/pressProps'
3
3
 
4
4
  /**
5
5
  * @typedef {import('react').ReactNode} ReactNode