@telus-uds/components-base 1.3.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (342) hide show
  1. package/.turbo/turbo-build.log +5 -2
  2. package/CHANGELOG.json +38 -0
  3. package/CHANGELOG.md +15 -2
  4. package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +35 -0
  5. package/__tests__/ActivityIndicator/__snapshots__/ActivityIndicator.test.jsx.snap +287 -0
  6. package/babel.config.js +27 -5
  7. package/component-docs.json +88 -424
  8. package/lib/A11yText/index.js +5 -4
  9. package/lib/ActivityIndicator/Spinner.js +46 -37
  10. package/lib/ActivityIndicator/Spinner.native.js +26 -15
  11. package/lib/Box/Box.js +4 -4
  12. package/lib/Button/ButtonBase.js +7 -8
  13. package/lib/Card/Card.js +5 -4
  14. package/lib/Card/PressableCardBase.js +6 -11
  15. package/lib/Checkbox/Checkbox.js +4 -6
  16. package/lib/Divider/Divider.js +12 -11
  17. package/lib/ExpandCollapse/Control.js +7 -7
  18. package/lib/ExpandCollapse/ExpandCollapse.js +6 -2
  19. package/lib/ExpandCollapse/Panel.js +6 -7
  20. package/lib/Feedback/Feedback.js +6 -5
  21. package/lib/Fieldset/Fieldset.js +1 -3
  22. package/lib/HorizontalScroll/HorizontalScroll.js +5 -6
  23. package/lib/IconButton/IconButton.js +6 -6
  24. package/lib/InputLabel/InputLabel.js +7 -2
  25. package/lib/InputSupports/InputSupports.js +2 -2
  26. package/lib/Link/LinkBase.js +5 -6
  27. package/lib/List/List.js +4 -6
  28. package/lib/List/ListItem.js +6 -2
  29. package/lib/Modal/Modal.js +6 -2
  30. package/lib/Notification/Notification.js +7 -2
  31. package/lib/Pagination/Pagination.js +8 -3
  32. package/lib/Progress/Progress.js +5 -4
  33. package/lib/Progress/ProgressBar.js +8 -7
  34. package/lib/Radio/Radio.js +4 -6
  35. package/lib/Radio/RadioButton.js +6 -3
  36. package/lib/Radio/RadioGroup.js +7 -2
  37. package/lib/RadioCard/RadioCard.js +4 -4
  38. package/lib/RadioCard/RadioCardGroup.js +9 -6
  39. package/lib/Search/Search.js +7 -2
  40. package/lib/Select/Select.js +10 -9
  41. package/lib/SideNav/Item.js +7 -7
  42. package/lib/SideNav/SideNav.js +7 -3
  43. package/lib/Skeleton/Skeleton.js +6 -2
  44. package/lib/Spacer/Spacer.js +7 -18
  45. package/lib/StackView/StackView.js +7 -7
  46. package/lib/StackView/StackWrapBox.js +6 -7
  47. package/lib/StackView/StackWrapGap.js +6 -5
  48. package/lib/StepTracker/Step.js +7 -3
  49. package/lib/StepTracker/StepTracker.js +7 -7
  50. package/lib/Tabs/Tabs.js +6 -2
  51. package/lib/Tabs/TabsItem.js +6 -5
  52. package/lib/Tags/Tags.js +5 -6
  53. package/lib/TextInput/TextArea.js +13 -14
  54. package/lib/TextInput/TextInput.js +13 -14
  55. package/lib/TextInput/TextInputBase.js +5 -3
  56. package/lib/ToggleSwitch/ToggleSwitch.js +10 -9
  57. package/lib/ToggleSwitch/ToggleSwitchGroup.js +5 -7
  58. package/lib/Tooltip/Tooltip.js +7 -2
  59. package/lib/TooltipButton/TooltipButton.js +7 -2
  60. package/lib/Typography/Typography.js +8 -6
  61. package/lib/index.js +7 -0
  62. package/lib/utils/children.js +5 -1
  63. package/lib/utils/index.js +14 -0
  64. package/lib/utils/props/index.js +9 -0
  65. package/lib/{InputSupports/propTypes.js → utils/props/inputSupportsProps.js} +2 -3
  66. package/lib/utils/ssr.js +51 -0
  67. package/lib-module/A11yInfoProvider/index.js +62 -0
  68. package/lib-module/A11yText/index.js +55 -0
  69. package/lib-module/ActivityIndicator/Spinner.js +76 -0
  70. package/lib-module/ActivityIndicator/Spinner.native.js +143 -0
  71. package/lib-module/ActivityIndicator/index.js +40 -0
  72. package/lib-module/ActivityIndicator/shared.js +12 -0
  73. package/lib-module/BaseProvider/index.js +26 -0
  74. package/lib-module/Box/Box.js +243 -0
  75. package/lib-module/Box/index.js +2 -0
  76. package/lib-module/Button/Button.js +25 -0
  77. package/lib-module/Button/ButtonBase.js +254 -0
  78. package/lib-module/Button/ButtonGroup.js +164 -0
  79. package/lib-module/Button/ButtonLink.js +39 -0
  80. package/lib-module/Button/index.js +4 -0
  81. package/lib-module/Button/propTypes.js +36 -0
  82. package/lib-module/Card/Card.js +83 -0
  83. package/lib-module/Card/CardBase.js +62 -0
  84. package/lib-module/Card/PressableCardBase.js +113 -0
  85. package/lib-module/Card/index.js +4 -0
  86. package/lib-module/Checkbox/Checkbox.js +321 -0
  87. package/lib-module/Checkbox/CheckboxGroup.js +218 -0
  88. package/lib-module/Checkbox/CheckboxInput.js +58 -0
  89. package/lib-module/Checkbox/CheckboxInput.native.js +6 -0
  90. package/lib-module/Checkbox/index.js +3 -0
  91. package/lib-module/Divider/Divider.js +123 -0
  92. package/lib-module/Divider/index.js +2 -0
  93. package/lib-module/ExpandCollapse/Accordion.js +15 -0
  94. package/lib-module/ExpandCollapse/Control.js +130 -0
  95. package/lib-module/ExpandCollapse/ExpandCollapse.js +94 -0
  96. package/lib-module/ExpandCollapse/Panel.js +158 -0
  97. package/lib-module/ExpandCollapse/index.js +7 -0
  98. package/lib-module/Feedback/Feedback.js +144 -0
  99. package/lib-module/Feedback/index.js +2 -0
  100. package/lib-module/Fieldset/Fieldset.js +145 -0
  101. package/lib-module/Fieldset/FieldsetContainer.js +29 -0
  102. package/lib-module/Fieldset/FieldsetContainer.native.js +20 -0
  103. package/lib-module/Fieldset/Legend.js +21 -0
  104. package/lib-module/Fieldset/Legend.native.js +28 -0
  105. package/lib-module/Fieldset/cssReset.js +14 -0
  106. package/lib-module/Fieldset/index.js +2 -0
  107. package/lib-module/FlexGrid/Col/Col.js +265 -0
  108. package/lib-module/FlexGrid/Col/index.js +2 -0
  109. package/lib-module/FlexGrid/FlexGrid.js +147 -0
  110. package/lib-module/FlexGrid/Row/Row.js +177 -0
  111. package/lib-module/FlexGrid/Row/index.js +2 -0
  112. package/lib-module/FlexGrid/helpers/index.js +18 -0
  113. package/lib-module/FlexGrid/index.js +2 -0
  114. package/lib-module/FlexGrid/providers/GutterContext.js +3 -0
  115. package/lib-module/HorizontalScroll/HorizontalScroll.js +171 -0
  116. package/lib-module/HorizontalScroll/HorizontalScrollButton.js +102 -0
  117. package/lib-module/HorizontalScroll/ScrollViewEnd.js +47 -0
  118. package/lib-module/HorizontalScroll/ScrollViewEnd.native.js +24 -0
  119. package/lib-module/HorizontalScroll/dictionary.js +11 -0
  120. package/lib-module/HorizontalScroll/index.js +11 -0
  121. package/lib-module/HorizontalScroll/itemPositions.js +106 -0
  122. package/lib-module/Icon/Icon.js +61 -0
  123. package/lib-module/Icon/IconText.js +81 -0
  124. package/lib-module/Icon/index.js +4 -0
  125. package/lib-module/IconButton/IconButton.js +115 -0
  126. package/lib-module/IconButton/index.js +2 -0
  127. package/lib-module/InputLabel/InputLabel.js +131 -0
  128. package/lib-module/InputLabel/LabelContent.js +24 -0
  129. package/lib-module/InputLabel/LabelContent.native.js +16 -0
  130. package/lib-module/InputLabel/index.js +2 -0
  131. package/lib-module/InputSupports/InputSupports.js +88 -0
  132. package/lib-module/InputSupports/index.js +2 -0
  133. package/lib-module/InputSupports/useInputSupports.js +31 -0
  134. package/lib-module/Link/ChevronLink.js +51 -0
  135. package/lib-module/Link/InlinePressable.js +37 -0
  136. package/lib-module/Link/InlinePressable.native.js +85 -0
  137. package/lib-module/Link/Link.js +27 -0
  138. package/lib-module/Link/LinkBase.js +210 -0
  139. package/lib-module/Link/TextButton.js +43 -0
  140. package/lib-module/Link/index.js +5 -0
  141. package/lib-module/List/List.js +55 -0
  142. package/lib-module/List/ListItem.js +213 -0
  143. package/lib-module/List/index.js +5 -0
  144. package/lib-module/Modal/Modal.js +208 -0
  145. package/lib-module/Modal/dictionary.js +9 -0
  146. package/lib-module/Modal/index.js +2 -0
  147. package/lib-module/Notification/Notification.js +196 -0
  148. package/lib-module/Notification/dictionary.js +8 -0
  149. package/lib-module/Notification/index.js +2 -0
  150. package/lib-module/Pagination/PageButton.js +65 -0
  151. package/lib-module/Pagination/Pagination.js +140 -0
  152. package/lib-module/Pagination/SideButton.js +103 -0
  153. package/lib-module/Pagination/dictionary.js +18 -0
  154. package/lib-module/Pagination/index.js +2 -0
  155. package/lib-module/Pagination/usePagination.js +72 -0
  156. package/lib-module/Progress/Progress.js +85 -0
  157. package/lib-module/Progress/ProgressBar.js +134 -0
  158. package/lib-module/Progress/ProgressBarBackground.js +41 -0
  159. package/lib-module/Progress/index.js +4 -0
  160. package/lib-module/Radio/Radio.js +263 -0
  161. package/lib-module/Radio/RadioButton.js +128 -0
  162. package/lib-module/Radio/RadioGroup.js +225 -0
  163. package/lib-module/Radio/RadioInput.js +60 -0
  164. package/lib-module/Radio/RadioInput.native.js +6 -0
  165. package/lib-module/Radio/index.js +3 -0
  166. package/lib-module/RadioCard/RadioCard.js +218 -0
  167. package/lib-module/RadioCard/RadioCardGroup.js +232 -0
  168. package/lib-module/RadioCard/index.js +3 -0
  169. package/lib-module/Search/Search.js +233 -0
  170. package/lib-module/Search/dictionary.js +12 -0
  171. package/lib-module/Search/index.js +2 -0
  172. package/lib-module/Select/Group.js +20 -0
  173. package/lib-module/Select/Group.native.js +14 -0
  174. package/lib-module/Select/Item.js +17 -0
  175. package/lib-module/Select/Item.native.js +9 -0
  176. package/lib-module/Select/Picker.js +67 -0
  177. package/lib-module/Select/Picker.native.js +110 -0
  178. package/lib-module/Select/Select.js +317 -0
  179. package/lib-module/Select/index.js +6 -0
  180. package/lib-module/SideNav/Item.js +139 -0
  181. package/lib-module/SideNav/ItemContent.js +45 -0
  182. package/lib-module/SideNav/ItemsGroup.js +115 -0
  183. package/lib-module/SideNav/SideNav.js +133 -0
  184. package/lib-module/SideNav/index.js +1 -0
  185. package/lib-module/Skeleton/Skeleton.js +117 -0
  186. package/lib-module/Skeleton/index.js +2 -0
  187. package/lib-module/Skeleton/skeleton.constant.js +3 -0
  188. package/lib-module/Skeleton/skeletonWebAnimation.js +18 -0
  189. package/lib-module/Skeleton/useSkeletonNativeAnimation.js +24 -0
  190. package/lib-module/Spacer/Spacer.js +97 -0
  191. package/lib-module/Spacer/index.js +2 -0
  192. package/lib-module/StackView/StackView.js +124 -0
  193. package/lib-module/StackView/StackWrap.js +48 -0
  194. package/lib-module/StackView/StackWrap.native.js +3 -0
  195. package/lib-module/StackView/StackWrapBox.js +114 -0
  196. package/lib-module/StackView/StackWrapGap.js +58 -0
  197. package/lib-module/StackView/common.js +32 -0
  198. package/lib-module/StackView/getStackedContent.js +123 -0
  199. package/lib-module/StackView/index.js +5 -0
  200. package/lib-module/StepTracker/Step.js +229 -0
  201. package/lib-module/StepTracker/StepTracker.js +175 -0
  202. package/lib-module/StepTracker/dictionary.js +10 -0
  203. package/lib-module/StepTracker/index.js +2 -0
  204. package/lib-module/Tabs/Tabs.js +113 -0
  205. package/lib-module/Tabs/TabsItem.js +215 -0
  206. package/lib-module/Tabs/index.js +2 -0
  207. package/lib-module/Tags/Tags.js +238 -0
  208. package/lib-module/Tags/index.js +2 -0
  209. package/lib-module/TextInput/TextArea.js +88 -0
  210. package/lib-module/TextInput/TextInput.js +60 -0
  211. package/lib-module/TextInput/TextInputBase.js +233 -0
  212. package/lib-module/TextInput/index.js +3 -0
  213. package/lib-module/TextInput/propTypes.js +31 -0
  214. package/lib-module/ThemeProvider/ThemeProvider.js +35 -0
  215. package/lib-module/ThemeProvider/index.js +6 -0
  216. package/lib-module/ThemeProvider/useSetTheme.js +22 -0
  217. package/lib-module/ThemeProvider/useTheme.js +14 -0
  218. package/lib-module/ThemeProvider/useThemeTokens.js +105 -0
  219. package/lib-module/ThemeProvider/utils/index.js +2 -0
  220. package/lib-module/ThemeProvider/utils/styles.js +174 -0
  221. package/lib-module/ThemeProvider/utils/theme-tokens.js +151 -0
  222. package/lib-module/ToggleSwitch/ToggleSwitch.js +224 -0
  223. package/lib-module/ToggleSwitch/ToggleSwitchGroup.js +202 -0
  224. package/lib-module/ToggleSwitch/index.js +3 -0
  225. package/lib-module/Tooltip/Backdrop.js +52 -0
  226. package/lib-module/Tooltip/Backdrop.native.js +43 -0
  227. package/lib-module/Tooltip/Tooltip.js +332 -0
  228. package/lib-module/Tooltip/dictionary.js +8 -0
  229. package/lib-module/Tooltip/getTooltipPosition.js +164 -0
  230. package/lib-module/Tooltip/index.js +2 -0
  231. package/lib-module/TooltipButton/TooltipButton.js +71 -0
  232. package/lib-module/TooltipButton/index.js +2 -0
  233. package/lib-module/Typography/Typography.js +118 -0
  234. package/lib-module/Typography/index.js +2 -0
  235. package/lib-module/ViewportProvider/ViewportProvider.js +28 -0
  236. package/lib-module/ViewportProvider/index.js +3 -0
  237. package/lib-module/ViewportProvider/useViewport.js +3 -0
  238. package/lib-module/ViewportProvider/useViewportListener.js +43 -0
  239. package/lib-module/index.js +48 -0
  240. package/lib-module/utils/a11y/index.js +2 -0
  241. package/lib-module/utils/a11y/semantics.js +154 -0
  242. package/lib-module/utils/a11y/textSize.js +34 -0
  243. package/lib-module/utils/animation/index.js +2 -0
  244. package/lib-module/utils/animation/useVerticalExpandAnimation.js +49 -0
  245. package/lib-module/utils/children.js +118 -0
  246. package/lib-module/utils/index.js +15 -0
  247. package/lib-module/utils/info/index.js +7 -0
  248. package/lib-module/utils/info/platform/index.js +11 -0
  249. package/lib-module/utils/info/platform/platform.android.js +1 -0
  250. package/lib-module/utils/info/platform/platform.ios.js +1 -0
  251. package/lib-module/utils/info/platform/platform.js +1 -0
  252. package/lib-module/utils/info/platform/platform.native.js +4 -0
  253. package/lib-module/utils/info/versions.js +5 -0
  254. package/lib-module/utils/input.js +180 -0
  255. package/lib-module/utils/pressability.js +97 -0
  256. package/lib-module/utils/props/a11yProps.js +140 -0
  257. package/lib-module/utils/props/clickProps.js +25 -0
  258. package/lib-module/utils/props/componentPropType.js +63 -0
  259. package/lib-module/utils/props/copyPropTypes.js +2 -0
  260. package/lib-module/utils/props/getPropSelector.js +6 -0
  261. package/lib-module/utils/props/hrefAttrsProp.js +30 -0
  262. package/lib-module/utils/props/index.js +16 -0
  263. package/lib-module/utils/props/inputSupportsProps.js +54 -0
  264. package/lib-module/utils/props/linkProps.js +47 -0
  265. package/lib-module/utils/props/paddingProp.js +9 -0
  266. package/lib-module/utils/props/pressProps.js +42 -0
  267. package/lib-module/utils/props/rectProp.js +9 -0
  268. package/lib-module/utils/props/responsiveProps.js +30 -0
  269. package/lib-module/utils/props/selectSystemProps.js +24 -0
  270. package/lib-module/utils/props/spacingProps.js +56 -0
  271. package/lib-module/utils/props/tokens.js +120 -0
  272. package/lib-module/utils/props/variantProp.js +18 -0
  273. package/lib-module/utils/props/viewProps.js +22 -0
  274. package/lib-module/utils/ssr.js +35 -0
  275. package/lib-module/utils/useCopy.js +42 -0
  276. package/lib-module/utils/useHash.js +44 -0
  277. package/lib-module/utils/useHash.native.js +7 -0
  278. package/lib-module/utils/useResponsiveProp.js +47 -0
  279. package/lib-module/utils/useSpacingScale.js +123 -0
  280. package/lib-module/utils/useUniqueId.js +12 -0
  281. package/lib-module/utils/withLinkRouter.js +82 -0
  282. package/package.json +9 -5
  283. package/src/A11yText/index.jsx +7 -3
  284. package/src/ActivityIndicator/Spinner.jsx +56 -44
  285. package/src/ActivityIndicator/Spinner.native.jsx +20 -12
  286. package/src/Box/Box.jsx +10 -9
  287. package/src/Button/ButtonBase.jsx +9 -8
  288. package/src/Card/Card.jsx +7 -4
  289. package/src/Card/PressableCardBase.jsx +12 -12
  290. package/src/Checkbox/Checkbox.jsx +12 -5
  291. package/src/Divider/Divider.jsx +17 -10
  292. package/src/ExpandCollapse/Control.jsx +12 -7
  293. package/src/ExpandCollapse/ExpandCollapse.jsx +13 -3
  294. package/src/ExpandCollapse/Panel.jsx +15 -5
  295. package/src/Feedback/Feedback.jsx +13 -3
  296. package/src/Fieldset/Fieldset.jsx +1 -1
  297. package/src/HorizontalScroll/HorizontalScroll.jsx +12 -5
  298. package/src/IconButton/IconButton.jsx +12 -8
  299. package/src/InputLabel/InputLabel.jsx +16 -2
  300. package/src/InputSupports/InputSupports.jsx +1 -1
  301. package/src/Link/LinkBase.jsx +10 -9
  302. package/src/List/List.jsx +12 -5
  303. package/src/List/ListItem.jsx +16 -2
  304. package/src/Modal/Modal.jsx +63 -50
  305. package/src/Notification/Notification.jsx +17 -3
  306. package/src/Pagination/Pagination.jsx +10 -3
  307. package/src/Progress/Progress.jsx +5 -3
  308. package/src/Progress/ProgressBar.jsx +8 -6
  309. package/src/Radio/Radio.jsx +13 -5
  310. package/src/Radio/RadioButton.jsx +13 -3
  311. package/src/Radio/RadioGroup.jsx +14 -2
  312. package/src/RadioCard/RadioCard.jsx +9 -6
  313. package/src/RadioCard/RadioCardGroup.jsx +16 -4
  314. package/src/Search/Search.jsx +15 -3
  315. package/src/Select/Select.jsx +21 -7
  316. package/src/SideNav/Item.jsx +15 -7
  317. package/src/SideNav/SideNav.jsx +13 -2
  318. package/src/Skeleton/Skeleton.jsx +55 -43
  319. package/src/Spacer/Spacer.jsx +8 -16
  320. package/src/StackView/StackView.jsx +13 -12
  321. package/src/StackView/StackWrapBox.jsx +12 -12
  322. package/src/StackView/StackWrapGap.jsx +9 -7
  323. package/src/StepTracker/Step.jsx +7 -4
  324. package/src/StepTracker/StepTracker.jsx +8 -8
  325. package/src/Tabs/Tabs.jsx +16 -3
  326. package/src/Tabs/TabsItem.jsx +13 -9
  327. package/src/Tags/Tags.jsx +20 -5
  328. package/src/TextInput/TextArea.jsx +20 -8
  329. package/src/TextInput/TextInput.jsx +20 -8
  330. package/src/TextInput/TextInputBase.jsx +13 -3
  331. package/src/ToggleSwitch/ToggleSwitch.jsx +16 -5
  332. package/src/ToggleSwitch/ToggleSwitchGroup.jsx +14 -6
  333. package/src/Tooltip/Tooltip.jsx +13 -3
  334. package/src/TooltipButton/TooltipButton.jsx +6 -4
  335. package/src/Typography/Typography.jsx +10 -6
  336. package/src/index.js +1 -1
  337. package/src/utils/children.jsx +2 -1
  338. package/src/utils/index.js +1 -0
  339. package/src/utils/props/index.js +1 -0
  340. package/src/{InputSupports/propTypes.js → utils/props/inputSupportsProps.js} +2 -4
  341. package/src/utils/ssr.js +35 -0
  342. package/release-context.json +0 -7
@@ -3,7 +3,9 @@ import { Pressable, View } from 'react-native'
3
3
  import PropTypes from 'prop-types'
4
4
 
5
5
  import { useThemeTokensCallback, verticalAlignRow } from '../ThemeProvider'
6
- import { getTokensPropType, variantProp, a11yProps } from '../utils'
6
+ import { a11yProps, getTokensPropType, selectSystemProps, variantProp, viewProps } from '../utils'
7
+
8
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
7
9
 
8
10
  function selectContainerStyles({
9
11
  backgroundColor,
@@ -48,12 +50,15 @@ function selectIconTokens(tokens) {
48
50
  }
49
51
 
50
52
  const ExpandCollapseControl = forwardRef(
51
- ({ onPress, isExpanded, children, tokens, accessibilityRole = 'button', variant, rest }, ref) => {
53
+ (
54
+ { onPress, isExpanded, children, tokens, accessibilityRole = 'button', variant, ...rest },
55
+ ref
56
+ ) => {
52
57
  const getTokens = useThemeTokensCallback('ExpandCollapseControl', tokens, variant)
53
58
 
54
- const a11y = a11yProps.select({ ...rest, accessibilityRole })
55
- a11y.accessibilityState = {
56
- ...(a11y.accessibilityState || {}),
59
+ const selectedProps = selectProps({ ...rest, accessibilityRole })
60
+ selectedProps.accessibilityState = {
61
+ ...(selectedProps.accessibilityState || {}),
57
62
  expanded: isExpanded
58
63
  }
59
64
 
@@ -68,7 +73,7 @@ const ExpandCollapseControl = forwardRef(
68
73
  selectContainerStyles(getControlTokens(pressableState))
69
74
 
70
75
  return (
71
- <Pressable ref={ref} {...a11y} onPress={onPress} style={getPressableStyle}>
76
+ <Pressable ref={ref} {...selectedProps} onPress={onPress} style={getPressableStyle}>
72
77
  {(pressableState) => {
73
78
  const { icon: IconComponent, ...themeTokens } = getControlTokens(pressableState)
74
79
  return (
@@ -91,7 +96,7 @@ const ExpandCollapseControl = forwardRef(
91
96
  ExpandCollapseControl.displayName = 'ExpandCollapseControl'
92
97
 
93
98
  ExpandCollapseControl.propTypes = {
94
- ...a11yProps.propTypes,
99
+ ...selectedSystemPropTypes,
95
100
  tokens: getTokensPropType('ExpandCollapseControl'),
96
101
  variant: variantProp.propType,
97
102
  /**
@@ -3,7 +3,16 @@ import { View } from 'react-native'
3
3
  import PropTypes from 'prop-types'
4
4
 
5
5
  import { useThemeTokens } from '../ThemeProvider'
6
- import { getTokensPropType, variantProp, useMultipleInputValues } from '../utils'
6
+ import {
7
+ a11yProps,
8
+ getTokensPropType,
9
+ selectSystemProps,
10
+ useMultipleInputValues,
11
+ variantProp,
12
+ viewProps
13
+ } from '../utils'
14
+
15
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
7
16
 
8
17
  function selectBorderStyles(tokens) {
9
18
  return {
@@ -21,7 +30,7 @@ function selectBorderStyles(tokens) {
21
30
  * nested (they do not need to be direct children), and non-interactive items may be included too.
22
31
  */
23
32
  const ExpandCollapse = forwardRef(
24
- ({ children, tokens, variant, maxOpen, open, initialOpen, onChange }, ref) => {
33
+ ({ children, tokens, variant, maxOpen, open, initialOpen, onChange, ...rest }, ref) => {
25
34
  const {
26
35
  currentValues: openIds,
27
36
  toggleOneValue: onToggle,
@@ -37,7 +46,7 @@ const ExpandCollapse = forwardRef(
37
46
  const themeTokens = useThemeTokens('ExpandCollapse', tokens, variant)
38
47
 
39
48
  return (
40
- <View ref={ref} style={selectBorderStyles(themeTokens)}>
49
+ <View ref={ref} style={selectBorderStyles(themeTokens)} {...selectProps(rest)}>
41
50
  {typeof children === 'function'
42
51
  ? children({ openIds, onToggle, resetValues, setValues, unsetValues })
43
52
  : children}
@@ -48,6 +57,7 @@ const ExpandCollapse = forwardRef(
48
57
  ExpandCollapse.displayName = 'ExpandCollapse'
49
58
 
50
59
  ExpandCollapse.propTypes = {
60
+ ...selectedSystemPropTypes,
51
61
  variant: variantProp.propType,
52
62
  tokens: getTokensPropType('ExpandCollapse'),
53
63
  /**
@@ -4,7 +4,16 @@ import PropTypes from 'prop-types'
4
4
 
5
5
  import ExpandCollapseControl from './Control'
6
6
  import { useThemeTokens } from '../ThemeProvider'
7
- import { getTokensPropType, variantProp, useVerticalExpandAnimation, a11yProps } from '../utils'
7
+ import {
8
+ a11yProps,
9
+ getTokensPropType,
10
+ selectSystemProps,
11
+ useVerticalExpandAnimation,
12
+ variantProp,
13
+ viewProps
14
+ } from '../utils'
15
+
16
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
8
17
 
9
18
  // just void functions for now, since there are no style tokens for a panel or control at this point
10
19
  const selectGroupStyles = () => {}
@@ -49,9 +58,9 @@ const ExpandCollapsePanel = forwardRef(
49
58
  const [containerHeight, setContainerHeight] = useState(null)
50
59
  const isExpanded = openIds.includes(panelId)
51
60
 
52
- const a11y = a11yProps.select(rest)
53
- a11y.accessibilityState = {
54
- ...(a11y.accessibilityState || {}),
61
+ const selectedProps = selectProps(rest)
62
+ selectedProps.accessibilityState = {
63
+ ...(selectedProps.accessibilityState || {}),
55
64
  expanded: isExpanded
56
65
  }
57
66
 
@@ -88,7 +97,7 @@ const ExpandCollapsePanel = forwardRef(
88
97
  return (
89
98
  <View ref={ref} style={selectGroupStyles(themeTokens)}>
90
99
  <ExpandCollapseControl
91
- {...a11y}
100
+ {...selectedProps}
92
101
  isExpanded={isExpanded}
93
102
  tokens={controlTokens}
94
103
  onPress={handleControlPress}
@@ -110,6 +119,7 @@ const ExpandCollapsePanel = forwardRef(
110
119
  ExpandCollapsePanel.displayName = 'ExpandCollapsePanel'
111
120
 
112
121
  ExpandCollapsePanel.propTypes = {
122
+ ...selectedSystemPropTypes,
113
123
  variant: variantProp.propType,
114
124
  tokens: getTokensPropType('ExpandCollapsePanel'),
115
125
  /**
@@ -3,9 +3,18 @@ import { StyleSheet, Text, View } from 'react-native'
3
3
  import PropTypes from 'prop-types'
4
4
 
5
5
  import { applyTextStyles, useThemeTokens } from '../ThemeProvider'
6
- import { a11yProps, 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 StackView from '../StackView'
8
15
 
16
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
17
+
9
18
  const selectStyles = (tokens) => selectTokens('Feedback', tokens)
10
19
 
11
20
  const selectTitleTextStyles = ({ titleFontSize, ...tokens }) =>
@@ -53,13 +62,13 @@ const Feedback = forwardRef(
53
62
  const content =
54
63
  typeof children === 'string' ? <Text style={contentTextStyles}>{children}</Text> : children
55
64
 
56
- const accessibilityProps = a11yProps.select({
65
+ const selectedProps = selectProps({
57
66
  accessibilityRole: validation === 'error' ? 'alert' : undefined,
58
67
  ...rest
59
68
  })
60
69
 
61
70
  return (
62
- <View ref={ref} style={selectStyles(themeTokens)} {...accessibilityProps} nativeID={id}>
71
+ <View ref={ref} style={selectStyles(themeTokens)} nativeID={id} {...selectedProps}>
63
72
  <StackView space={space}>
64
73
  {title !== undefined && (
65
74
  <View style={staticStyles.title}>
@@ -82,6 +91,7 @@ const Feedback = forwardRef(
82
91
  Feedback.displayName = 'Feedback'
83
92
 
84
93
  Feedback.propTypes = {
94
+ ...selectedSystemPropTypes,
85
95
  /**
86
96
  * Emphasized summary of the feedback. If an icon is set, it is rendered next to the title.
87
97
  */
@@ -60,7 +60,7 @@ const Fieldset = forwardRef(
60
60
  // and on MacOS voiceover, radiogroup -> radio. To allow elements to be direct children of the
61
61
  // fieldset as much as possible, but also allow different spacing within content and between
62
62
  // fieldset / feedback / etc, wrap resolved children in a fragment, and stack with `preserveFragments`.
63
- const childContent = <>{typeof children === 'function' ? children({ a11yProps }) : children}</>
63
+ const childContent = <>{typeof children === 'function' ? children(a11yProps) : children}</>
64
64
  const orderedContent =
65
65
  feedbackPosition === 'bottom'
66
66
  ? [legendContent, feedbackContent, childContent]
@@ -3,10 +3,18 @@ import PropTypes from 'prop-types'
3
3
  import { Platform, StyleSheet, View } from 'react-native'
4
4
 
5
5
  import { validateThemeTokens, resolveThemeTokens } from '../ThemeProvider'
6
- import { getTokensSetPropType, selectTokens, a11yProps } from '../utils'
6
+ import {
7
+ a11yProps,
8
+ getTokensSetPropType,
9
+ selectSystemProps,
10
+ selectTokens,
11
+ viewProps
12
+ } from '../utils'
7
13
  import ScrollViewEnd from './ScrollViewEnd'
8
14
  import { getItemPositionScrollTarget, itemPositionsPropType } from './itemPositions'
9
15
 
16
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
17
+
10
18
  const tokenKeys = [
11
19
  'nextIcon',
12
20
  'previousIcon',
@@ -22,7 +30,7 @@ export const selectHorizontalScrollTokens = (themeTokens, prefix) =>
22
30
  * Base component that scrolls horizontally and displays left and right buttons if
23
31
  * there is content to the left and the right which can be scrolled to.
24
32
  *
25
- * @TODO revist `ScrollButton` after IconButton is stable.
33
+ * @TODO revisit `ScrollButton` after IconButton is stable.
26
34
  */
27
35
  const HorizontalScroll = forwardRef(
28
36
  ({ ScrollButton, tokens, itemPositions, children, ...rest }, ref) => {
@@ -108,8 +116,6 @@ const HorizontalScroll = forwardRef(
108
116
  const scrollNext = () => scrollTo(scrollOffset + scrollDistance)
109
117
  const scrollPrevious = () => scrollTo(scrollOffset - scrollDistance)
110
118
 
111
- const a11y = a11yProps.select(rest)
112
-
113
119
  // On Web, being scrollable in one direction prevents overflow: visible in the other direction.
114
120
  // Apply a fixed margin gutter that tab highlight effects can overhang without getting trimmed.
115
121
  return (
@@ -125,7 +131,7 @@ const HorizontalScroll = forwardRef(
125
131
  staticStyles.scrollContainer,
126
132
  { marginBottom: gutter, borderBottomWidth, borderBottomColor }
127
133
  ]}
128
- {...a11y}
134
+ {...selectProps(rest)}
129
135
  >
130
136
  {children}
131
137
  </ScrollViewEnd>
@@ -159,6 +165,7 @@ const staticStyles = StyleSheet.create({
159
165
  })
160
166
 
161
167
  HorizontalScroll.propTypes = {
168
+ ...selectedSystemPropTypes,
162
169
  itemPositions: itemPositionsPropType,
163
170
  ScrollButton: PropTypes.elementType,
164
171
  tokens: getTokensSetPropType(tokenKeys, { allowFunction: true }),
@@ -4,18 +4,22 @@ import { Pressable, Platform, StyleSheet, View } from 'react-native'
4
4
 
5
5
  import { applyOuterBorder, useThemeTokensCallback, applyShadowToken } from '../ThemeProvider'
6
6
  import {
7
- variantProp,
7
+ a11yProps,
8
8
  clickProps,
9
+ getTokensPropType,
10
+ hrefAttrsProp,
9
11
  linkProps,
10
12
  resolvePressableState,
11
- hrefAttrsProp,
12
- getTokensPropType,
13
+ selectSystemProps,
13
14
  selectTokens,
15
+ variantProp,
16
+ viewProps,
14
17
  withLinkRouter
15
18
  } from '../utils'
16
- import { a11yProps } from '../utils/props'
17
19
  import Icon from '../Icon'
18
20
 
21
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
22
+
19
23
  const selectOuterStyle = ({
20
24
  backgroundColor,
21
25
  borderRadius,
@@ -60,7 +64,7 @@ const IconButton = forwardRef(
60
64
  ref
61
65
  ) => {
62
66
  const { onPress, ...rest } = clickProps.toPressProps(rawRest)
63
- const a11y = a11yProps.select({
67
+ const selectedProps = selectProps({
64
68
  ...rest,
65
69
  accessibilityRole
66
70
  })
@@ -77,7 +81,7 @@ const IconButton = forwardRef(
77
81
  onPress={handlePress}
78
82
  hrefAttrs={hrefAttrs}
79
83
  style={getOuterStyle}
80
- {...a11y}
84
+ {...selectedProps}
81
85
  >
82
86
  {(pressableState) => {
83
87
  const themeTokens = getTokens(resolvePressableState(pressableState))
@@ -85,7 +89,7 @@ const IconButton = forwardRef(
85
89
  <View style={selectInnerStyle(themeTokens)}>
86
90
  <Icon
87
91
  icon={IconComponent}
88
- title={a11y.accessibilityLabel}
92
+ title={selectedProps.accessibilityLabel}
89
93
  tokens={selectTokens('Icon', themeTokens, 'icon')}
90
94
  />
91
95
  </View>
@@ -98,7 +102,7 @@ const IconButton = forwardRef(
98
102
  IconButton.displayName = 'IconButton'
99
103
 
100
104
  IconButton.propTypes = {
101
- ...a11yProps.types,
105
+ ...selectedSystemPropTypes,
102
106
  variant: variantProp.propType,
103
107
  tokens: getTokensPropType('IconButton'),
104
108
  icon: PropTypes.elementType.isRequired,
@@ -3,11 +3,20 @@ import { StyleSheet, Text, View } from 'react-native'
3
3
  import PropTypes from 'prop-types'
4
4
 
5
5
  import { applyTextStyles, useThemeTokens } from '../ThemeProvider'
6
- import { getTokensPropType, selectTokens, variantProp } from '../utils'
6
+ import {
7
+ a11yProps,
8
+ getTokensPropType,
9
+ selectSystemProps,
10
+ selectTokens,
11
+ variantProp,
12
+ viewProps
13
+ } from '../utils'
7
14
 
8
15
  import LabelContent from './LabelContent'
9
16
  import Tooltip from '../Tooltip'
10
17
 
18
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
19
+
11
20
  const selectLabelStyles = (tokens) => applyTextStyles(selectTokens('Typography', tokens))
12
21
 
13
22
  const selectHintStyles = ({
@@ -28,7 +37,10 @@ const selectHintStyles = ({
28
37
  const selectGapStyles = ({ gap }) => ({ marginRight: gap })
29
38
 
30
39
  const InputLabel = forwardRef(
31
- ({ label, forId, hint, hintPosition = 'inline', hintId, tooltip, tokens, variant }, ref) => {
40
+ (
41
+ { label, forId, hint, hintPosition = 'inline', hintId, tooltip, tokens, variant, ...rest },
42
+ ref
43
+ ) => {
32
44
  const themeTokens = useThemeTokens('InputLabel', tokens, variant)
33
45
 
34
46
  const hasTooltip = tooltip !== undefined
@@ -38,6 +50,7 @@ const InputLabel = forwardRef(
38
50
  <View
39
51
  ref={ref}
40
52
  style={[staticStyles.container, !isHintInline && staticStyles.containerWithHintBelow]}
53
+ {...selectProps(rest)}
41
54
  >
42
55
  <Text
43
56
  style={[selectLabelStyles(themeTokens), selectGapStyles(themeTokens), staticStyles.label]}
@@ -69,6 +82,7 @@ const InputLabel = forwardRef(
69
82
  InputLabel.displayName = 'InputLabel'
70
83
 
71
84
  InputLabel.propTypes = {
85
+ ...selectedSystemPropTypes,
72
86
  /**
73
87
  * The input label.
74
88
  */
@@ -30,7 +30,7 @@ const InputSupports = forwardRef(
30
30
  forId={inputId}
31
31
  />
32
32
  )}
33
- {typeof children === 'function' ? children({ a11yProps, inputId }) : children}
33
+ {typeof children === 'function' ? children({ inputId, ...a11yProps }) : children}
34
34
  {feedback && <Feedback id={feedbackId} title={feedback} validation={validation} />}
35
35
  </StackView>
36
36
  )
@@ -3,11 +3,13 @@ import PropTypes from 'prop-types'
3
3
  import { Text, Platform, StyleSheet } from 'react-native'
4
4
  import {
5
5
  a11yProps,
6
+ clickProps,
7
+ getTokensPropType,
6
8
  hrefAttrsProp,
7
- variantProp,
8
9
  linkProps,
9
- getTokensPropType,
10
- clickProps
10
+ selectSystemProps,
11
+ variantProp,
12
+ viewProps
11
13
  } from '../utils/props'
12
14
  import { resolvePressableTokens } from '../utils/pressability'
13
15
  import { withLinkRouter } from '../utils'
@@ -16,6 +18,8 @@ import InlinePressable from './InlinePressable'
16
18
  import { applyTextStyles, applyOuterBorder } from '../ThemeProvider'
17
19
  import { IconText, iconComponentPropTypes } from '../Icon'
18
20
 
21
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, linkProps, viewProps])
22
+
19
23
  const selectOuterBorderStyles = ({
20
24
  outerBorderColor,
21
25
  outerBorderWidth,
@@ -101,14 +105,13 @@ const LinkBase = forwardRef(
101
105
  tokens = {},
102
106
  children,
103
107
  accessibilityRole = 'link',
104
- dataSet,
105
108
  ...rawRest
106
109
  },
107
110
  ref
108
111
  ) => {
109
112
  const { onPress, ...props } = clickProps.toPressProps(rawRest)
110
113
  const { hrefAttrs, rest } = hrefAttrsProp.bundle(props)
111
- const linkPropSet = linkProps.select({
114
+ const selectedProps = selectProps({
112
115
  accessibilityRole,
113
116
  href,
114
117
  onPress: linkProps.handleHref({ href, onPress }),
@@ -124,9 +127,8 @@ const LinkBase = forwardRef(
124
127
 
125
128
  return (
126
129
  <InlinePressable
127
- {...linkPropSet}
130
+ {...selectedProps}
128
131
  ref={ref}
129
- dataSet={dataSet}
130
132
  style={(linkState) => {
131
133
  const themeTokens = resolveLinkTokens(linkState)
132
134
  const outerBorderStyles = selectOuterBorderStyles(themeTokens)
@@ -164,8 +166,7 @@ const LinkBase = forwardRef(
164
166
  LinkBase.displayName = 'LinkBase'
165
167
 
166
168
  LinkBase.propTypes = {
167
- ...a11yProps.types,
168
- ...linkProps.types,
169
+ ...selectedSystemPropTypes,
169
170
  tokens: getTokensPropType('Link'),
170
171
  variant: variantProp.propType,
171
172
  /**
package/src/List/List.jsx CHANGED
@@ -1,17 +1,24 @@
1
1
  import React, { cloneElement, forwardRef, Children } from 'react'
2
2
  import { View, Platform } from 'react-native'
3
3
  import PropTypes from 'prop-types'
4
- import { getTokensPropType, variantProp, componentPropType } from '../utils'
5
- import { a11yProps } from '../utils/props'
4
+ import {
5
+ a11yProps,
6
+ componentPropType,
7
+ getTokensPropType,
8
+ selectSystemProps,
9
+ variantProp,
10
+ viewProps
11
+ } from '../utils'
6
12
  import ListItem from './ListItem'
7
13
 
14
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
15
+
8
16
  /**
9
17
  * An unordered List component has a child a ListItem that
10
18
  * allows icon, dividers and customized typography
11
19
  */
12
20
  const List = forwardRef(({ children, showDivider, tokens, variant, ...rest }, ref) => {
13
21
  const accessibilityRole = Platform.select({ web: 'list', default: 'none' })
14
- const a11y = a11yProps.select(rest)
15
22
  const items = Children.map(children, (child, index) => {
16
23
  if (child.type.name === ListItem.name) {
17
24
  return cloneElement(child, {
@@ -25,7 +32,7 @@ const List = forwardRef(({ children, showDivider, tokens, variant, ...rest }, re
25
32
  })
26
33
 
27
34
  return (
28
- <View ref={ref} accessibilityRole={accessibilityRole} {...a11y}>
35
+ <View ref={ref} accessibilityRole={accessibilityRole} {...selectProps(rest)}>
29
36
  {items}
30
37
  </View>
31
38
  )
@@ -33,7 +40,7 @@ const List = forwardRef(({ children, showDivider, tokens, variant, ...rest }, re
33
40
  List.displayName = 'List'
34
41
 
35
42
  List.propTypes = {
36
- ...a11yProps.types,
43
+ ...selectedSystemPropTypes,
37
44
  tokens: getTokensPropType('List'),
38
45
  variant: variantProp.propType,
39
46
  children: componentPropType('ListItem'),
@@ -2,7 +2,16 @@ import React, { forwardRef } from 'react'
2
2
  import { View, Platform, StyleSheet } from 'react-native'
3
3
  import PropTypes from 'prop-types'
4
4
  import { useThemeTokens, applyTextStyles } from '../ThemeProvider'
5
- import { getTokensPropType, variantProp, wrapStringsInText } from '../utils'
5
+ import {
6
+ a11yProps,
7
+ getTokensPropType,
8
+ selectSystemProps,
9
+ variantProp,
10
+ viewProps,
11
+ wrapStringsInText
12
+ } from '../utils'
13
+
14
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
6
15
 
7
16
  const selectBulletStyles = ({ itemBulletWidth, itemBulletHeight, itemBulletColor }) => ({
8
17
  width: itemBulletWidth,
@@ -53,7 +62,10 @@ const selectDividerStyles = ({ dividerColor, dividerSize, interItemMarginWithDiv
53
62
  * ListItem is responsible for rendering icon or a bullet as side item
54
63
  */
55
64
  const ListItem = forwardRef(
56
- ({ tokens, variant, icon, iconColor, iconSize, showDivider, children, isLastItem }, ref) => {
65
+ (
66
+ { tokens, variant, icon, iconColor, iconSize, showDivider, children, isLastItem, ...rest },
67
+ ref
68
+ ) => {
57
69
  const themeTokens = useThemeTokens('List', tokens, variant)
58
70
 
59
71
  const itemStyles = selectItemStyles(themeTokens)
@@ -118,6 +130,7 @@ const ListItem = forwardRef(
118
130
  ref={ref}
119
131
  style={[staticStyles.itemContainer, getContainerStyle()]}
120
132
  accessibilityRole={accessibilityRole}
133
+ {...selectProps(rest)}
121
134
  >
122
135
  {renderMarker()}
123
136
  {renderItem()}
@@ -137,6 +150,7 @@ const staticStyles = StyleSheet.create({
137
150
  })
138
151
 
139
152
  ListItem.propTypes = {
153
+ ...selectedSystemPropTypes,
140
154
  tokens: getTokensPropType('List'),
141
155
  variant: variantProp.propType,
142
156
  children: PropTypes.node.isRequired,
@@ -9,11 +9,21 @@ import {
9
9
 
10
10
  import PropTypes from 'prop-types'
11
11
  import { applyShadowToken, useThemeTokens } from '../ThemeProvider'
12
- import { getTokensPropType, useCopy, copyPropTypes, variantProp } from '../utils'
12
+ import {
13
+ a11yProps,
14
+ copyPropTypes,
15
+ getTokensPropType,
16
+ selectSystemProps,
17
+ useCopy,
18
+ variantProp,
19
+ viewProps
20
+ } from '../utils'
13
21
  import { useViewport } from '../ViewportProvider'
14
22
  import ButtonBase from '../Button/ButtonBase'
15
23
  import dictionary from './dictionary'
16
24
 
25
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
26
+
17
27
  const selectContainerStyles = ({
18
28
  containerPaddingLeft,
19
29
  containerPaddingRight,
@@ -79,72 +89,75 @@ const selectCloseIconProps = ({ closeIconSize, closeIconColor }) => ({
79
89
  * - Don’t use modals to reinforce or repeat information already available in the parent page or view
80
90
  * - Don’t use modals consecutively
81
91
  */
82
- const Modal = forwardRef(({ children, isOpen, onClose, maxWidth, tokens, variant, copy }, ref) => {
83
- const viewport = useViewport()
84
- const themeTokens = useThemeTokens('Modal', tokens, variant, { viewport, maxWidth })
92
+ const Modal = forwardRef(
93
+ ({ children, isOpen, onClose, maxWidth, tokens, variant, copy, ...rest }, ref) => {
94
+ const viewport = useViewport()
95
+ const themeTokens = useThemeTokens('Modal', tokens, variant, { viewport, maxWidth })
85
96
 
86
- const { closeIcon: CloseIconComponent } = themeTokens
97
+ const { closeIcon: CloseIconComponent } = themeTokens
87
98
 
88
- const getCopy = useCopy({ dictionary, copy })
89
- const closeLabel = getCopy('closeButton')
99
+ const getCopy = useCopy({ dictionary, copy })
100
+ const closeLabel = getCopy('closeButton')
90
101
 
91
- const handleClose = () => {
92
- if (typeof onClose === 'function') onClose()
93
- }
102
+ const handleClose = () => {
103
+ if (typeof onClose === 'function') onClose()
104
+ }
94
105
 
95
- const handleKeyUp = (event) => {
96
- if (event.key === 'Escape') onClose()
97
- }
106
+ const handleKeyUp = (event) => {
107
+ if (event.key === 'Escape') onClose()
108
+ }
98
109
 
99
- if (!isOpen) {
100
- return null
101
- }
110
+ if (!isOpen) {
111
+ return null
112
+ }
102
113
 
103
- // TODO: replace the close button with IconButton when implemented (https://github.com/telus/universal-design-system/issues/281)
104
- return (
105
- <NativeModal transparent>
106
- <View style={[staticStyles.positioningContainer]}>
107
- <View
108
- style={[staticStyles.sizingContainer, selectContainerStyles(themeTokens)]}
109
- pointerEvents="box-none" // don't capture backdrop press events
110
- >
114
+ // TODO: replace the close button with IconButton when implemented (https://github.com/telus/universal-design-system/issues/281)
115
+ return (
116
+ <NativeModal transparent {...selectProps(rest)}>
117
+ <View style={[staticStyles.positioningContainer]}>
111
118
  <View
112
- ref={ref}
113
- style={[staticStyles.modal, selectModalStyles(themeTokens)]}
114
- onKeyUp={handleKeyUp}
119
+ style={[staticStyles.sizingContainer, selectContainerStyles(themeTokens)]}
120
+ pointerEvents="box-none" // don't capture backdrop press events
115
121
  >
116
122
  <View
117
- style={[
118
- staticStyles.closeButtonContainer,
119
- selectCloseButtonContainerStyles(themeTokens)
120
- ]}
123
+ ref={ref}
124
+ style={[staticStyles.modal, selectModalStyles(themeTokens)]}
125
+ onKeyUp={handleKeyUp}
121
126
  >
122
- <ButtonBase
123
- onPress={handleClose}
124
- accessibilityRole="button"
125
- accessibilityLabel={closeLabel}
127
+ <View
128
+ style={[
129
+ staticStyles.closeButtonContainer,
130
+ selectCloseButtonContainerStyles(themeTokens)
131
+ ]}
126
132
  >
127
- {
128
- // TODO: add close button interactive states after IconButton is done
129
- () => <CloseIconComponent {...selectCloseIconProps(themeTokens)} />
130
- }
131
- </ButtonBase>
133
+ <ButtonBase
134
+ onPress={handleClose}
135
+ accessibilityRole="button"
136
+ accessibilityLabel={closeLabel}
137
+ >
138
+ {
139
+ // TODO: add close button interactive states after IconButton is done
140
+ () => <CloseIconComponent {...selectCloseIconProps(themeTokens)} />
141
+ }
142
+ </ButtonBase>
143
+ </View>
144
+ {children}
132
145
  </View>
133
- {children}
134
146
  </View>
147
+ {/* when a modal becomes open its first focusable element is being automatically focused */}
148
+ {/* and we prefer the close button over backdrop */}
149
+ <TouchableWithoutFeedback onPress={handleClose}>
150
+ <View style={[staticStyles.backdrop, selectBackdropStyles(themeTokens)]} />
151
+ </TouchableWithoutFeedback>
135
152
  </View>
136
- {/* when a modal becomes open its first focusable element is being automatically focused */}
137
- {/* and we prefer the close button over backdrop */}
138
- <TouchableWithoutFeedback onPress={handleClose}>
139
- <View style={[staticStyles.backdrop, selectBackdropStyles(themeTokens)]} />
140
- </TouchableWithoutFeedback>
141
- </View>
142
- </NativeModal>
143
- )
144
- })
153
+ </NativeModal>
154
+ )
155
+ }
156
+ )
145
157
  Modal.displayName = 'Modal'
146
158
 
147
159
  Modal.propTypes = {
160
+ ...selectedSystemPropTypes,
148
161
  children: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]),
149
162
  copy: copyPropTypes,
150
163
  isOpen: PropTypes.bool,