@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
@@ -1,23 +1,25 @@
1
1
  import React, { forwardRef } from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import { View } from 'react-native'
4
-
5
4
  import {
6
- spacingProps,
7
5
  a11yProps,
6
+ getA11yPropsFromHtmlTag,
8
7
  getTokensPropType,
8
+ layoutTags,
9
9
  responsiveProps,
10
+ selectSystemProps,
11
+ spacingProps,
10
12
  useSpacingScale,
11
13
  useResponsiveProp,
12
- viewProps,
13
- getA11yPropsFromHtmlTag,
14
- layoutTags
14
+ viewProps
15
15
  } from '../utils'
16
16
  import { useThemeTokens } from '../ThemeProvider'
17
17
  import { useViewport } from '../ViewportProvider'
18
18
  import getStackedContent from './getStackedContent'
19
19
  import { staticStyles, selectFlexStyles } from './common'
20
20
 
21
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
22
+
21
23
  const offsetSides = {
22
24
  row: 'marginBottom',
23
25
  column: 'marginRight'
@@ -64,11 +66,10 @@ const StackWrapBox = forwardRef(
64
66
  const direction = useResponsiveProp(directionProp, 'row')
65
67
  const themeTokens = useThemeTokens('StackView', tokens, variant, { viewport })
66
68
  const flexStyles = selectFlexStyles(themeTokens)
67
- const props = {
69
+ const selectedProps = selectProps({
68
70
  ...getA11yPropsFromHtmlTag(tag, accessibilityRole),
69
- ...a11yProps.select(rest),
70
- ...viewProps.select(rest)
71
- }
71
+ ...rest
72
+ })
72
73
 
73
74
  // Mimic CSS `gap` using box spacing on the side after a wrapped row then offsetting it on the last row.
74
75
  const gapSize = useSpacingScale(gap)
@@ -79,7 +80,7 @@ const StackWrapBox = forwardRef(
79
80
  return (
80
81
  <View
81
82
  ref={ref}
82
- {...props}
83
+ {...selectedProps}
83
84
  style={[flexStyles, staticStyles.wrap, staticStyles[direction], offsetStyle]}
84
85
  >
85
86
  {content}
@@ -90,8 +91,7 @@ const StackWrapBox = forwardRef(
90
91
  StackWrapBox.displayName = 'StackWrapBox'
91
92
 
92
93
  StackWrapBox.propTypes = {
93
- ...a11yProps.propTypes,
94
- ...viewProps.types,
94
+ ...selectedSystemPropTypes,
95
95
  tokens: getTokensPropType('StackView'),
96
96
  /**
97
97
  * Sets the `flexDirection` of the container
@@ -4,16 +4,19 @@ import { View } from 'react-native'
4
4
  import StackWrapBox from './StackWrapBox'
5
5
  import {
6
6
  a11yProps,
7
+ getA11yPropsFromHtmlTag,
8
+ selectSystemProps,
7
9
  useSpacingScale,
8
10
  useResponsiveProp,
9
- viewProps,
10
- getA11yPropsFromHtmlTag
11
+ viewProps
11
12
  } from '../utils'
12
13
  import { useThemeTokens } from '../ThemeProvider'
13
14
  import { useViewport } from '../ViewportProvider'
14
15
  import getStackedContent from './getStackedContent'
15
16
  import { staticStyles, selectFlexStyles } from './common'
16
17
 
18
+ const [selectProps] = selectSystemProps([a11yProps, viewProps])
19
+
17
20
  /**
18
21
  * The primary implementation of StackWrap.
19
22
  *
@@ -42,11 +45,10 @@ const StackWrapGap = forwardRef(
42
45
  const direction = useResponsiveProp(directionProp, 'row')
43
46
  const themeTokens = useThemeTokens('StackView', tokens, variant, { viewport })
44
47
  const flexStyles = selectFlexStyles(themeTokens)
45
- const props = {
48
+ const selectedProps = selectProps({
46
49
  ...getA11yPropsFromHtmlTag(tag, accessibilityRole),
47
- ...a11yProps.select(rest),
48
- ...viewProps.select(rest)
49
- }
50
+ ...rest
51
+ })
50
52
 
51
53
  const size = useSpacingScale(space)
52
54
  const gapStyle = { gap: size }
@@ -56,7 +58,7 @@ const StackWrapGap = forwardRef(
56
58
  return (
57
59
  <View
58
60
  ref={ref}
59
- {...props}
61
+ {...selectedProps}
60
62
  style={[flexStyles, staticStyles.wrap, staticStyles[direction], gapStyle]}
61
63
  >
62
64
  {content}
@@ -7,7 +7,7 @@ import Spacer from '../Spacer'
7
7
  /**
8
8
  * @typedef {import('react').ReactChildren} ReactChildren
9
9
  * @typedef {import('react').ReactElement} ReactElement
10
- * @typedef {import('../utils/propTypes.js').SpacingValue} SpacingValue
10
+ * @typedef {import('../utils/props/spacingProps.js').SpacingValue} SpacingValue
11
11
  */
12
12
 
13
13
  /**
@@ -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 } 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
  /**
@@ -19,7 +29,19 @@ const { selectHorizontalScrollTokens, useItemPositions } = horizontalScrollUtils
19
29
  */
20
30
  const Tabs = forwardRef(
21
31
  (
22
- { tokens, itemTokens, scrollButtonTokens, variant, value, initialValue, onChange, items = [] },
32
+ {
33
+ tokens,
34
+ itemTokens,
35
+ scrollButtonTokens,
36
+ variant,
37
+ value,
38
+ initialValue,
39
+ onChange,
40
+ items = [],
41
+ LinkRouter,
42
+ linkRouterProps,
43
+ ...rest
44
+ },
23
45
  ref
24
46
  ) => {
25
47
  const { space, ...themeTokens } = useThemeTokens('Tabs', tokens, variant)
@@ -47,28 +69,43 @@ const Tabs = forwardRef(
47
69
  tokens={selectHorizontalScrollTokens(themeTokens)}
48
70
  scrollButtonTokens={scrollButtonTokens}
49
71
  accessibilityRole="tablist"
72
+ {...selectProps(rest)}
50
73
  >
51
74
  <StackView space={space} direction="row">
52
- {items.map(({ href, label, id, ref: itemRef }, index) => {
53
- const itemId = id ?? label
54
- const isSelected = Boolean(currentValue && currentValue === itemId)
55
- const handlePress = (event) => setValue(itemId, event)
56
- return (
57
- <TabsItem
58
- ref={itemRef}
59
- key={itemId}
60
- href={href}
61
- variant={variant}
62
- tokens={itemTokens}
63
- onPress={handlePress}
64
- selected={isSelected}
65
- itemPositions={itemPositions}
66
- index={index}
67
- >
68
- {label}
69
- </TabsItem>
70
- )
71
- })}
75
+ {items.map(
76
+ (
77
+ {
78
+ href,
79
+ label,
80
+ id,
81
+ ref: itemRef,
82
+ LinkRouter: ItemLinkRouter = LinkRouter,
83
+ linkRouterProps: itemLinkRouterProps
84
+ },
85
+ index
86
+ ) => {
87
+ const itemId = id ?? label
88
+ const isSelected = Boolean(currentValue && currentValue === itemId)
89
+ const handlePress = (event) => setValue(itemId, event)
90
+ return (
91
+ <TabsItem
92
+ ref={itemRef}
93
+ key={itemId}
94
+ href={href}
95
+ variant={variant}
96
+ tokens={itemTokens}
97
+ onPress={handlePress}
98
+ selected={isSelected}
99
+ itemPositions={itemPositions}
100
+ index={index}
101
+ LinkRouter={ItemLinkRouter}
102
+ linkRouterProps={{ ...linkRouterProps, ...itemLinkRouterProps }}
103
+ >
104
+ {label}
105
+ </TabsItem>
106
+ )
107
+ }
108
+ )}
72
109
  </StackView>
73
110
  </HorizontalScroll>
74
111
  )
@@ -77,8 +114,11 @@ const Tabs = forwardRef(
77
114
  Tabs.displayName = 'Tabs'
78
115
 
79
116
  Tabs.propTypes = {
117
+ ...selectedSystemPropTypes,
118
+ ...withLinkRouter.PropTypes,
80
119
  items: PropTypes.arrayOf(
81
120
  PropTypes.shape({
121
+ ...withLinkRouter.PropTypes,
82
122
  href: PropTypes.string,
83
123
  label: PropTypes.string,
84
124
  id: PropTypes.string,
@@ -4,16 +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
15
+ viewProps,
16
+ withLinkRouter
13
17
  } from '../utils'
14
18
  import Spacer from '../Spacer'
15
19
  import { horizontalScrollUtils } from '../HorizontalScroll'
16
20
 
21
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
22
+
17
23
  const { itemPositionsPropType, getItemPositionLayoutHandler } = horizontalScrollUtils
18
24
 
19
25
  const selectHighlightBarStyles = ({
@@ -73,7 +79,6 @@ const selectContainerStyles = ({
73
79
  const TabsItem = forwardRef(
74
80
  (
75
81
  {
76
- onPress,
77
82
  href,
78
83
  variant,
79
84
  tokens,
@@ -86,10 +91,13 @@ const TabsItem = forwardRef(
86
91
  ? // Web links can't be aria-selected but can be aria-current
87
92
  { current: selected ? 'page' : false }
88
93
  : { selected },
89
- ...rest
94
+ ...rawRest
90
95
  },
91
96
  ref
92
97
  ) => {
98
+ // Convert onClick etc to onPress etc if used in an integration
99
+ const { onPress, ...rest } = clickProps.toPressProps(rawRest)
100
+
93
101
  const getTokens = useThemeTokensCallback('TabsItem', tokens, variant)
94
102
  const resolveTokens = (pressableState) =>
95
103
  resolvePressableTokens(getTokens, pressableState, { selected })
@@ -105,17 +113,17 @@ const TabsItem = forwardRef(
105
113
  const openHref = href && linkProps.handleHref({ href })
106
114
  const handlePress =
107
115
  onPress || openHref
108
- ? () => {
109
- if (onPress) onPress()
110
- if (openHref) openHref()
116
+ ? (...args) => {
117
+ if (onPress) onPress(...args)
118
+ if (openHref) openHref(...args)
111
119
  }
112
120
  : undefined
113
121
 
114
- const a11y = {
122
+ const selectedProps = selectProps({
115
123
  accessibilityRole,
116
124
  accessibilityState,
117
- ...a11yProps.select(rest)
118
- }
125
+ ...rest
126
+ })
119
127
 
120
128
  useEffect(() => {
121
129
  // If this is selected while off-screen, scroll it into view
@@ -141,7 +149,7 @@ const TabsItem = forwardRef(
141
149
  href={href}
142
150
  style={getPressableStyle}
143
151
  onLayout={handleLayout}
144
- {...a11y}
152
+ {...selectedProps}
145
153
  >
146
154
  {(pressableState) => {
147
155
  const { space, textAlign, ...themeTokens } = resolveTokens(pressableState)
@@ -181,7 +189,7 @@ const TabsItem = forwardRef(
181
189
  TabsItem.displayName = 'TabsItem'
182
190
 
183
191
  TabsItem.propTypes = {
184
- ...a11yProps.propTypes,
192
+ ...selectedSystemPropTypes,
185
193
  tokens: getTokensPropType('TabsItem'),
186
194
  variant: variantProp.propType,
187
195
  onPress: PropTypes.func,
@@ -209,4 +217,4 @@ const staticStyles = StyleSheet.create({
209
217
  }
210
218
  })
211
219
 
212
- export default TabsItem
220
+ export default withLinkRouter(TabsItem)
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
  /**