@telus-uds/components-base 0.0.2-prerelease.7 → 0.0.2-prerelease.8

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 (349) hide show
  1. package/.ultra.cache.json +1 -1
  2. package/CHANGELOG.md +27 -0
  3. package/__fixtures__/Accessible.js +33 -0
  4. package/__fixtures__/Accessible.native.js +32 -0
  5. package/__fixtures__/testTheme.js +429 -29
  6. package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +1 -1
  7. package/__tests__/Button/ButtonGroup.test.jsx +2 -2
  8. package/__tests__/Checkbox/CheckboxGroup.test.jsx +247 -0
  9. package/__tests__/Icon/Icon.test.jsx +3 -3
  10. package/__tests__/Modal/Modal.test.jsx +47 -0
  11. package/__tests__/Notification/Notification.test.jsx +20 -0
  12. package/__tests__/Pagination/Pagination.test.jsx +2 -2
  13. package/__tests__/Progress/Progress.test.jsx +79 -0
  14. package/__tests__/Radio/RadioGroup.test.jsx +221 -0
  15. package/__tests__/RadioCard/RadioCard.test.jsx +87 -0
  16. package/__tests__/RadioCard/RadioCardGroup.test.jsx +247 -0
  17. package/__tests__/Search/Search.test.jsx +72 -0
  18. package/__tests__/Skeleton/Skeleton.test.jsx +1 -1
  19. package/__tests__/StepTracker/StepTracker.test.jsx +94 -0
  20. package/__tests__/Tabs/Tabs.test.jsx +200 -0
  21. package/__tests__/Tags/Tags.test.jsx +1 -1
  22. package/__tests__/utils/input.test.js +58 -0
  23. package/__tests__/utils/useCopy.test.js +14 -3
  24. package/babel.config.js +20 -0
  25. package/jest.config.js +1 -1
  26. package/lib/A11yInfoProvider/index.js +54 -26
  27. package/lib/A11yText/index.js +37 -14
  28. package/lib/ActivityIndicator/Spinner.js +78 -0
  29. package/lib/ActivityIndicator/Spinner.native.js +121 -87
  30. package/lib/ActivityIndicator/index.js +28 -12
  31. package/lib/ActivityIndicator/shared.js +27 -12
  32. package/lib/BaseProvider/index.js +34 -11
  33. package/lib/Box/Box.js +54 -31
  34. package/lib/Box/index.js +13 -2
  35. package/lib/Button/Button.js +32 -11
  36. package/lib/Button/ButtonBase.js +85 -78
  37. package/lib/Button/ButtonGroup.js +94 -70
  38. package/lib/Button/ButtonLink.js +38 -15
  39. package/lib/Button/index.js +31 -4
  40. package/lib/Button/propTypes.js +32 -9
  41. package/lib/Card/Card.js +36 -41
  42. package/lib/Card/CardBase.js +78 -0
  43. package/lib/Card/PressableCardBase.js +137 -0
  44. package/lib/Card/index.js +40 -2
  45. package/lib/Checkbox/Checkbox.js +139 -103
  46. package/lib/Checkbox/CheckboxGroup.js +231 -0
  47. package/lib/Checkbox/CheckboxInput.js +74 -0
  48. package/lib/Checkbox/CheckboxInput.native.js +9 -1
  49. package/lib/Checkbox/index.js +21 -2
  50. package/lib/Divider/Divider.js +50 -24
  51. package/lib/Divider/index.js +13 -2
  52. package/lib/ExpandCollapse/Accordion.js +20 -7
  53. package/lib/ExpandCollapse/Control.js +50 -27
  54. package/lib/ExpandCollapse/ExpandCollapse.js +41 -24
  55. package/lib/ExpandCollapse/Panel.js +75 -37
  56. package/lib/ExpandCollapse/index.js +25 -7
  57. package/lib/Feedback/Feedback.js +69 -40
  58. package/lib/Feedback/index.js +13 -2
  59. package/lib/Fieldset/Fieldset.js +160 -0
  60. package/lib/Fieldset/FieldsetContainer.js +41 -0
  61. package/lib/Fieldset/FieldsetContainer.native.js +33 -0
  62. package/lib/Fieldset/Legend.js +33 -0
  63. package/lib/Fieldset/Legend.native.js +43 -0
  64. package/lib/Fieldset/cssReset.js +21 -0
  65. package/lib/Fieldset/index.js +13 -0
  66. package/lib/FlexGrid/Col/Col.js +67 -38
  67. package/lib/FlexGrid/Col/index.js +13 -2
  68. package/lib/FlexGrid/FlexGrid.js +70 -45
  69. package/lib/FlexGrid/Row/Row.js +48 -27
  70. package/lib/FlexGrid/Row/index.js +13 -2
  71. package/lib/FlexGrid/helpers/index.js +9 -1
  72. package/lib/FlexGrid/index.js +13 -2
  73. package/lib/FlexGrid/providers/GutterContext.js +15 -3
  74. package/lib/Icon/Icon.js +46 -44
  75. package/lib/Icon/IconText.js +49 -21
  76. package/lib/Icon/index.js +31 -4
  77. package/lib/InputLabel/InputLabel.js +70 -36
  78. package/lib/InputLabel/LabelContent.js +31 -0
  79. package/lib/InputLabel/LabelContent.native.js +9 -1
  80. package/lib/InputLabel/index.js +13 -2
  81. package/lib/InputSupports/InputSupports.js +62 -48
  82. package/lib/InputSupports/index.js +13 -2
  83. package/lib/InputSupports/propTypes.js +19 -8
  84. package/lib/InputSupports/useInputSupports.js +41 -0
  85. package/lib/Link/ChevronLink.js +33 -16
  86. package/lib/Link/InlinePressable.js +50 -0
  87. package/lib/Link/InlinePressable.native.js +34 -11
  88. package/lib/Link/Link.js +25 -9
  89. package/lib/Link/LinkBase.js +87 -57
  90. package/lib/Link/TextButton.js +32 -13
  91. package/lib/Link/index.js +39 -5
  92. package/lib/List/List.js +51 -23
  93. package/lib/List/ListItem.js +70 -40
  94. package/lib/List/index.js +13 -2
  95. package/lib/Modal/Modal.js +226 -0
  96. package/lib/Modal/dictionary.js +16 -0
  97. package/lib/Modal/index.js +13 -0
  98. package/lib/Notification/Notification.js +200 -0
  99. package/lib/Notification/dictionary.js +15 -0
  100. package/lib/Notification/index.js +13 -0
  101. package/lib/Pagination/PageButton.js +47 -25
  102. package/lib/Pagination/Pagination.js +70 -40
  103. package/lib/Pagination/SideButton.js +63 -37
  104. package/lib/Pagination/dictionary.js +9 -2
  105. package/lib/Pagination/index.js +13 -2
  106. package/lib/Pagination/usePagination.js +12 -2
  107. package/lib/Progress/Progress.js +99 -0
  108. package/lib/Progress/ProgressBar.js +146 -0
  109. package/lib/Progress/ProgressBarBackground.js +57 -0
  110. package/lib/Progress/index.js +16 -0
  111. package/lib/Radio/Radio.js +110 -109
  112. package/lib/Radio/RadioButton.js +141 -0
  113. package/lib/Radio/RadioGroup.js +233 -0
  114. package/lib/Radio/RadioInput.js +76 -0
  115. package/lib/Radio/RadioInput.native.js +9 -1
  116. package/lib/Radio/index.js +21 -2
  117. package/lib/RadioCard/RadioCard.js +240 -0
  118. package/lib/RadioCard/RadioCardGroup.js +251 -0
  119. package/lib/RadioCard/index.js +21 -0
  120. package/lib/Search/Search.js +243 -0
  121. package/lib/Search/dictionary.js +19 -0
  122. package/lib/Search/index.js +13 -0
  123. package/lib/Select/Group.js +33 -0
  124. package/lib/Select/Group.native.js +16 -5
  125. package/lib/Select/Item.js +29 -0
  126. package/lib/Select/Item.native.js +14 -4
  127. package/lib/Select/Picker.js +79 -0
  128. package/lib/Select/Picker.native.js +52 -24
  129. package/lib/Select/Select.js +110 -82
  130. package/lib/Select/index.js +19 -6
  131. package/lib/SideNav/Item.js +54 -33
  132. package/lib/SideNav/ItemContent.js +41 -15
  133. package/lib/SideNav/ItemsGroup.js +46 -27
  134. package/lib/SideNav/SideNav.js +92 -69
  135. package/lib/SideNav/index.js +15 -1
  136. package/lib/Skeleton/Skeleton.js +55 -37
  137. package/lib/Skeleton/index.js +13 -2
  138. package/lib/Skeleton/skeleton.constant.js +12 -0
  139. package/lib/Skeleton/skeletonWebAnimation.js +27 -0
  140. package/lib/Skeleton/useSkeletonNativeAnimation.js +37 -0
  141. package/lib/Spacer/Spacer.js +31 -12
  142. package/lib/Spacer/index.js +13 -2
  143. package/lib/StackView/StackView.js +49 -27
  144. package/lib/StackView/StackWrap.js +33 -10
  145. package/lib/StackView/StackWrap.native.js +13 -2
  146. package/lib/StackView/StackWrapBox.js +46 -24
  147. package/lib/StackView/StackWrapGap.js +43 -22
  148. package/lib/StackView/common.js +19 -4
  149. package/lib/StackView/getStackedContent.js +49 -19
  150. package/lib/StackView/index.js +29 -5
  151. package/lib/StepTracker/Step.js +245 -0
  152. package/lib/StepTracker/StepTracker.js +197 -0
  153. package/lib/StepTracker/dictionary.js +17 -0
  154. package/lib/StepTracker/index.js +13 -0
  155. package/lib/Tabs/HorizontalScroll.js +199 -0
  156. package/lib/Tabs/ScrollViewEnd.js +66 -0
  157. package/lib/Tabs/ScrollViewEnd.native.js +41 -0
  158. package/lib/Tabs/Tabs.js +117 -0
  159. package/lib/Tabs/TabsItem.js +234 -0
  160. package/lib/Tabs/TabsScrollButton.js +121 -0
  161. package/lib/Tabs/dictionary.js +18 -0
  162. package/lib/Tabs/index.js +13 -0
  163. package/lib/Tabs/itemPositions.js +128 -0
  164. package/lib/Tags/Tags.js +130 -97
  165. package/lib/Tags/index.js +13 -2
  166. package/lib/TextInput/TextArea.js +51 -24
  167. package/lib/TextInput/TextInput.js +40 -19
  168. package/lib/TextInput/TextInputBase.js +78 -55
  169. package/lib/TextInput/index.js +23 -3
  170. package/lib/TextInput/propTypes.js +18 -7
  171. package/lib/ThemeProvider/ThemeProvider.js +38 -14
  172. package/lib/ThemeProvider/index.js +61 -6
  173. package/lib/ThemeProvider/useSetTheme.js +14 -5
  174. package/lib/ThemeProvider/useTheme.js +13 -4
  175. package/lib/ThemeProvider/useThemeTokens.js +32 -16
  176. package/lib/ThemeProvider/utils/index.js +31 -2
  177. package/lib/ThemeProvider/utils/styles.js +52 -16
  178. package/lib/ThemeProvider/utils/theme-tokens.js +94 -16
  179. package/lib/ToggleSwitch/ToggleSwitch.js +75 -51
  180. package/lib/ToggleSwitch/index.js +13 -2
  181. package/lib/Tooltip/{Backdrop.web.js → Backdrop.js} +22 -18
  182. package/lib/Tooltip/Backdrop.native.js +39 -15
  183. package/lib/Tooltip/Tooltip.js +112 -70
  184. package/lib/Tooltip/dictionary.js +9 -2
  185. package/lib/Tooltip/getTooltipPosition.js +9 -1
  186. package/lib/Tooltip/index.js +13 -2
  187. package/lib/TooltipButton/TooltipButton.js +57 -38
  188. package/lib/TooltipButton/index.js +13 -2
  189. package/lib/Typography/Typography.js +57 -27
  190. package/lib/Typography/index.js +13 -2
  191. package/lib/ViewportProvider/ViewportProvider.js +34 -13
  192. package/lib/ViewportProvider/index.js +28 -3
  193. package/lib/ViewportProvider/useViewport.js +15 -3
  194. package/lib/ViewportProvider/useViewportListener.js +24 -10
  195. package/lib/index.js +509 -33
  196. package/lib/utils/a11y/index.js +18 -1
  197. package/lib/utils/a11y/textSize.js +23 -7
  198. package/lib/utils/animation/index.js +15 -2
  199. package/lib/utils/animation/useVerticalExpandAnimation.js +28 -11
  200. package/lib/utils/children.js +87 -0
  201. package/lib/utils/index.js +163 -10
  202. package/lib/utils/info/index.js +18 -6
  203. package/lib/utils/info/platform/index.js +19 -7
  204. package/lib/utils/info/platform/platform.android.js +8 -1
  205. package/lib/utils/info/platform/platform.ios.js +8 -1
  206. package/lib/utils/info/platform/platform.js +8 -0
  207. package/lib/utils/info/platform/platform.native.js +8 -1
  208. package/lib/utils/info/versions.js +15 -4
  209. package/lib/utils/input.js +51 -33
  210. package/lib/utils/pressability.js +38 -10
  211. package/lib/utils/propTypes.js +217 -125
  212. package/lib/utils/useCopy.js +40 -5
  213. package/lib/utils/useHash.js +48 -0
  214. package/lib/utils/useHash.native.js +15 -0
  215. package/lib/utils/useResponsiveProp.js +21 -9
  216. package/lib/utils/useSpacingScale.js +21 -9
  217. package/lib/utils/useUniqueId.js +13 -4
  218. package/package.json +7 -6
  219. package/release-context.json +4 -4
  220. package/src/ActivityIndicator/{Spinner.web.jsx → Spinner.jsx} +0 -0
  221. package/src/Box/Box.jsx +11 -4
  222. package/src/Button/Button.jsx +3 -2
  223. package/src/Button/ButtonBase.jsx +27 -36
  224. package/src/Button/ButtonGroup.jsx +2 -2
  225. package/src/Button/ButtonLink.jsx +3 -2
  226. package/src/Button/propTypes.js +12 -2
  227. package/src/Card/Card.jsx +4 -30
  228. package/src/Card/CardBase.jsx +57 -0
  229. package/src/Card/PressableCardBase.jsx +112 -0
  230. package/src/Card/index.js +3 -0
  231. package/src/Checkbox/Checkbox.jsx +10 -11
  232. package/src/Checkbox/CheckboxGroup.jsx +196 -0
  233. package/src/Checkbox/{CheckboxInput.web.jsx → CheckboxInput.jsx} +0 -0
  234. package/src/Checkbox/index.js +2 -0
  235. package/src/ExpandCollapse/Control.jsx +1 -1
  236. package/src/Feedback/Feedback.jsx +1 -1
  237. package/src/Fieldset/Fieldset.jsx +129 -0
  238. package/src/Fieldset/FieldsetContainer.jsx +22 -0
  239. package/src/Fieldset/FieldsetContainer.native.jsx +16 -0
  240. package/src/Fieldset/Legend.jsx +16 -0
  241. package/src/Fieldset/Legend.native.jsx +22 -0
  242. package/src/Fieldset/cssReset.js +14 -0
  243. package/src/Fieldset/index.js +3 -0
  244. package/src/Icon/Icon.jsx +14 -23
  245. package/src/Icon/IconText.jsx +2 -2
  246. package/src/Icon/index.js +2 -2
  247. package/src/InputLabel/InputLabel.jsx +9 -2
  248. package/src/InputLabel/{LabelContent.web.jsx → LabelContent.jsx} +0 -0
  249. package/src/InputSupports/InputSupports.jsx +7 -18
  250. package/src/InputSupports/useInputSupports.js +30 -0
  251. package/src/Link/{InlinePressable.web.jsx → InlinePressable.jsx} +0 -0
  252. package/src/Link/LinkBase.jsx +14 -12
  253. package/src/Modal/Modal.jsx +185 -0
  254. package/src/Modal/dictionary.js +9 -0
  255. package/src/Modal/index.js +3 -0
  256. package/src/Notification/Notification.jsx +149 -0
  257. package/src/Notification/dictionary.js +8 -0
  258. package/src/Notification/index.js +3 -0
  259. package/src/Progress/Progress.jsx +77 -0
  260. package/src/Progress/ProgressBar.jsx +110 -0
  261. package/src/Progress/ProgressBarBackground.jsx +34 -0
  262. package/src/Progress/index.js +6 -0
  263. package/src/Radio/Radio.jsx +19 -56
  264. package/src/Radio/RadioButton.jsx +131 -0
  265. package/src/Radio/RadioGroup.jsx +198 -0
  266. package/src/Radio/{RadioInput.web.jsx → RadioInput.jsx} +0 -0
  267. package/src/Radio/index.js +2 -0
  268. package/src/RadioCard/RadioCard.jsx +191 -0
  269. package/src/RadioCard/RadioCardGroup.jsx +211 -0
  270. package/src/RadioCard/index.js +5 -0
  271. package/src/Search/Search.jsx +204 -0
  272. package/src/Search/dictionary.js +12 -0
  273. package/src/Search/index.js +3 -0
  274. package/src/Select/{Group.web.jsx → Group.jsx} +0 -0
  275. package/src/Select/{Item.web.jsx → Item.jsx} +0 -0
  276. package/src/Select/{Picker.web.jsx → Picker.jsx} +0 -0
  277. package/src/Select/Select.jsx +12 -22
  278. package/src/SideNav/Item.jsx +2 -2
  279. package/src/Skeleton/Skeleton.jsx +17 -20
  280. package/src/Skeleton/skeleton.constant.js +3 -0
  281. package/src/Skeleton/skeletonWebAnimation.js +13 -0
  282. package/src/Skeleton/useSkeletonNativeAnimation.js +27 -0
  283. package/src/StackView/StackView.jsx +10 -3
  284. package/src/StackView/StackWrap.jsx +9 -1
  285. package/src/StackView/StackWrapBox.jsx +4 -3
  286. package/src/StackView/StackWrapGap.jsx +3 -3
  287. package/src/StackView/getStackedContent.jsx +8 -2
  288. package/src/StepTracker/Step.jsx +202 -0
  289. package/src/StepTracker/StepTracker.jsx +163 -0
  290. package/src/StepTracker/dictionary.js +10 -0
  291. package/src/StepTracker/index.js +3 -0
  292. package/src/Tabs/HorizontalScroll.jsx +165 -0
  293. package/src/Tabs/ScrollViewEnd.jsx +53 -0
  294. package/src/Tabs/ScrollViewEnd.native.jsx +24 -0
  295. package/src/Tabs/Tabs.jsx +89 -0
  296. package/src/Tabs/TabsItem.jsx +204 -0
  297. package/src/Tabs/TabsScrollButton.jsx +100 -0
  298. package/src/Tabs/dictionary.js +11 -0
  299. package/src/Tabs/index.js +3 -0
  300. package/src/Tabs/itemPositions.js +101 -0
  301. package/src/Tags/Tags.jsx +2 -1
  302. package/src/TextInput/TextInputBase.jsx +12 -22
  303. package/src/ThemeProvider/useThemeTokens.js +2 -2
  304. package/src/ThemeProvider/utils/styles.js +18 -5
  305. package/src/ThemeProvider/utils/theme-tokens.js +46 -5
  306. package/src/ToggleSwitch/ToggleSwitch.jsx +2 -3
  307. package/src/Tooltip/{Backdrop.web.jsx → Backdrop.jsx} +0 -0
  308. package/src/Tooltip/Tooltip.jsx +1 -1
  309. package/src/TooltipButton/TooltipButton.jsx +23 -27
  310. package/src/Typography/Typography.jsx +6 -5
  311. package/src/index.js +20 -2
  312. package/src/utils/children.jsx +66 -0
  313. package/src/utils/index.js +3 -0
  314. package/src/utils/info/platform/platform.js +1 -0
  315. package/src/utils/info/versions.js +2 -2
  316. package/src/utils/input.js +20 -12
  317. package/src/utils/pressability.js +4 -0
  318. package/src/utils/propTypes.js +98 -34
  319. package/src/utils/useCopy.js +30 -4
  320. package/src/utils/useHash.js +34 -0
  321. package/src/utils/useHash.native.js +6 -0
  322. package/stories/A11yText/A11yText.stories.jsx +4 -8
  323. package/stories/Checkbox/Checkbox.stories.jsx +24 -1
  324. package/stories/Icon/Icon.stories.jsx +6 -5
  325. package/stories/Modal/Modal.stories.jsx +29 -0
  326. package/stories/Notification/Notification.stories.jsx +82 -0
  327. package/stories/Progress/Progress.stories.jsx +93 -0
  328. package/stories/Radio/Radio.stories.jsx +23 -36
  329. package/stories/RadioCard/RadioCard.stories.jsx +98 -0
  330. package/stories/Search/Search.stories.jsx +16 -0
  331. package/stories/StepTracker/StepTracker.stories.jsx +71 -0
  332. package/stories/Tabs/Tabs.stories.jsx +97 -0
  333. package/stories/{platform-supports.web.jsx → platform-supports.jsx} +0 -0
  334. package/__fixtures__/accessible.icon.svg +0 -6
  335. package/babel.config.json +0 -8
  336. package/lib/ActivityIndicator/Spinner.web.js +0 -55
  337. package/lib/Checkbox/CheckboxInput.web.js +0 -57
  338. package/lib/InputLabel/LabelContent.web.js +0 -17
  339. package/lib/Link/InlinePressable.web.js +0 -32
  340. package/lib/Radio/RadioInput.web.js +0 -59
  341. package/lib/Select/Group.web.js +0 -18
  342. package/lib/Select/Item.web.js +0 -15
  343. package/lib/Select/Picker.web.js +0 -63
  344. package/lib/config/svgr-icons-web.js +0 -9
  345. package/lib/config/svgr-icons.js +0 -52
  346. package/lib/utils/info/platform/platform.web.js +0 -1
  347. package/src/config/svgr-icons-web.js +0 -11
  348. package/src/config/svgr-icons.js +0 -46
  349. package/src/utils/info/platform/platform.web.js +0 -1
@@ -1,9 +1,17 @@
1
- import { viewports } from '@telus-uds/system-constants';
2
- import { useViewport } from '../ViewportProvider';
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.resolveResponsiveProp = void 0;
7
+
8
+ var _systemConstants = require("@telus-uds/system-constants");
9
+
10
+ var _ViewportProvider = require("../ViewportProvider");
3
11
 
4
12
  const hasOwn = (objectProp, key) => Object.prototype.hasOwnProperty.call(objectProp, key);
5
13
 
6
- const hasResponsiveProperties = objectProp => viewports.keys.some(key => hasOwn(objectProp, key));
14
+ const hasResponsiveProperties = objectProp => _systemConstants.viewports.keys.some(key => hasOwn(objectProp, key));
7
15
  /**
8
16
  * Resolves a prop which may be a responsive object with keys for viewports.
9
17
  *
@@ -16,12 +24,12 @@ const hasResponsiveProperties = objectProp => viewports.keys.some(key => hasOwn(
16
24
  */
17
25
 
18
26
 
19
- export const resolveResponsiveProp = (prop, viewport, defaultValue) => {
27
+ const resolveResponsiveProp = (prop, viewport, defaultValue) => {
20
28
  if (prop === undefined) return defaultValue;
21
29
  if (!prop || typeof prop !== 'object' || !hasResponsiveProperties(prop)) return prop;
22
- const value = viewports.keys.includes(viewport) ? // If there's a current viewport, return the closest match at or below it
23
- viewports.inherit(prop)[viewport] : // If no current viewport is available, default to smallest viewport
24
- prop[viewports.keys.find(key => hasOwn(prop, key))];
30
+ const value = _systemConstants.viewports.keys.includes(viewport) ? // If there's a current viewport, return the closest match at or below it
31
+ _systemConstants.viewports.inherit(prop)[viewport] : // If no current viewport is available, default to smallest viewport
32
+ prop[_systemConstants.viewports.keys.find(key => hasOwn(prop, key))];
25
33
  return value === undefined ? defaultValue : value;
26
34
  };
27
35
  /**
@@ -39,9 +47,13 @@ export const resolveResponsiveProp = (prop, viewport, defaultValue) => {
39
47
  * @returns {*}
40
48
  */
41
49
 
50
+
51
+ exports.resolveResponsiveProp = resolveResponsiveProp;
52
+
42
53
  const useResponsiveProp = (prop, defaultValue) => {
43
- const viewport = useViewport();
54
+ const viewport = (0, _ViewportProvider.useViewport)();
44
55
  return resolveResponsiveProp(prop, viewport, defaultValue);
45
56
  };
46
57
 
47
- export default useResponsiveProp;
58
+ var _default = useResponsiveProp;
59
+ exports.default = _default;
@@ -1,6 +1,16 @@
1
- import { useViewport } from '../ViewportProvider';
2
- import { useThemeTokens } from '../ThemeProvider';
3
- import { resolveResponsiveProp } from './useResponsiveProp';
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _ViewportProvider = require("../ViewportProvider");
9
+
10
+ var _ThemeProvider = require("../ThemeProvider");
11
+
12
+ var _useResponsiveProp = require("./useResponsiveProp");
13
+
4
14
  /**
5
15
  * @typedef {import('@telus-uds/system-constants/viewports').Viewport} Viewport
6
16
  * @typedef {import('./propTypes.js').SpacingValue} SpacingValue
@@ -8,9 +18,8 @@ import { resolveResponsiveProp } from './useResponsiveProp';
8
18
  * @typedef {import('./propTypes.js').SpacingObject} SpacingObject
9
19
  * @typedef {import('./propTypes.js').SpacingOptions} SpacingOptions
10
20
  */
11
-
12
21
  const resolveSpacingOptions = space => {
13
- if (!space?.options) return {};
22
+ if (!(space !== null && space !== void 0 && space.options)) return {};
14
23
  const {
15
24
  size,
16
25
  variant,
@@ -101,23 +110,26 @@ const resolveSpacingOptions = space => {
101
110
 
102
111
 
103
112
  const useSpacingScale = spaceValue => {
113
+ var _spaceValue$space;
114
+
104
115
  // In future, may need to consider window height as well as width, particularly for native apps,
105
116
  // e.g. to ensure designs don't look lost on large, tall, not-so-wide portrait screens.
106
- const viewport = useViewport();
117
+ const viewport = (0, _ViewportProvider.useViewport)();
107
118
  const {
108
119
  tokens,
109
120
  variant,
110
121
  overridden,
111
122
  subtract = 0
112
123
  } = resolveSpacingOptions(spaceValue);
113
- const space = !overridden && (spaceValue?.space ?? resolveResponsiveProp(spaceValue, viewport, 0));
124
+ const space = !overridden && ((_spaceValue$space = spaceValue === null || spaceValue === void 0 ? void 0 : spaceValue.space) !== null && _spaceValue$space !== void 0 ? _spaceValue$space : (0, _useResponsiveProp.resolveResponsiveProp)(spaceValue, viewport, 0));
114
125
  const {
115
126
  size
116
- } = useThemeTokens('spacingScale', tokens, variant, {
127
+ } = (0, _ThemeProvider.useThemeTokens)('spacingScale', tokens, variant, {
117
128
  space: typeof space === 'number' ? space : 0,
118
129
  viewport
119
130
  });
120
131
  return Math.max(size - subtract, 0);
121
132
  };
122
133
 
123
- export default useSpacingScale;
134
+ var _default = useSpacingScale;
135
+ exports.default = _default;
@@ -1,12 +1,21 @@
1
- import { useState } from 'react';
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = require("react");
9
+
2
10
  let id = 0;
3
11
 
4
12
  function useUniqueId(prefix = '') {
5
- const [uniqueId] = useState(() => {
13
+ const [uniqueId] = (0, _react.useState)(() => {
6
14
  id += 1;
7
- return `${prefix}-${id}`;
15
+ return "".concat(prefix, "-").concat(id);
8
16
  });
9
17
  return uniqueId;
10
18
  }
11
19
 
12
- export default useUniqueId;
20
+ var _default = useUniqueId;
21
+ exports.default = _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telus-uds/components-base",
3
- "version": "0.0.2-prerelease.7",
3
+ "version": "0.0.2-prerelease.8",
4
4
  "description": "Base components",
5
5
  "keywords": [
6
6
  "base"
@@ -9,8 +9,7 @@
9
9
  "homepage": "https://github.com/telus/universal-design-system#readme",
10
10
  "license": "ISC",
11
11
  "main": "lib/index.js",
12
- "module": "lib/index.js",
13
- "react-native": "lib/index.js",
12
+ "react-native": "src/index.js",
14
13
  "directories": {
15
14
  "lib": "lib",
16
15
  "test": "__tests__"
@@ -35,10 +34,10 @@
35
34
  "skip": true
36
35
  },
37
36
  "peerDependencies": {
38
- "react": "*",
37
+ "react": "^17.0.2",
39
38
  "react-dom": "*",
40
39
  "react-native": "*",
41
- "react-native-web": "~0.14.13"
40
+ "react-native-web": "^0.17.0"
42
41
  },
43
42
  "devDependencies": {
44
43
  "@testing-library/jest-native": "^4.0.1",
@@ -47,8 +46,10 @@
47
46
  "react-test-renderer": "^16.3.2"
48
47
  },
49
48
  "dependencies": {
49
+ "airbnb-prop-types": "^2.16.0",
50
50
  "@telus-uds/system-constants": "^0.0.2-prerelease.2",
51
- "@telus-uds/system-themes": "^0.0.2-prerelease.0",
51
+ "@telus-uds/system-themes": "^0.0.2-prerelease.1",
52
+ "lodash.debounce": "^4.0.8",
52
53
  "lodash.merge": "^4.6.2",
53
54
  "prop-types": "^15.7.2",
54
55
  "react-native-picker-select": "^8.0.4"
@@ -1,7 +1,7 @@
1
1
  {
2
- "previousReleaseTag": "@telus-uds/components-base/v0.0.2-prerelease.6",
3
- "changelog": "### [0.0.2-prerelease.7](https://github.com/telus/universal-design-system/compare/@telus-uds/components-base/v0.0.2-prerelease.6...@telus-uds/components-base/v0.0.2-prerelease.7) (2021-11-23)\n\n\n### Features\n\n* **base:** add `Radio` button ([#731](https://github.com/telus/universal-design-system/issues/731)) ([ad1613c](https://github.com/telus/universal-design-system/commit/ad1613c547fe3b0cdf1490a92267f32045356133))\n* **base:** add base `Checkbox` component ([#706](https://github.com/telus/universal-design-system/issues/706)) ([a3fa01a](https://github.com/telus/universal-design-system/commit/a3fa01ad0da342be02c15284a103c22d7b315ae9))\n* **base:** add Tags component ([#785](https://github.com/telus/universal-design-system/issues/785)) ([90bbf40](https://github.com/telus/universal-design-system/commit/90bbf4035a0bc0a8cdf319d9b366c8498c0dfb56))\n* **base:** add TextArea ([#720](https://github.com/telus/universal-design-system/issues/720)) ([b18cae3](https://github.com/telus/universal-design-system/commit/b18cae3357375019ecc4e24e78ed9a2345b26139))\n* **base:** add the Select component ([#759](https://github.com/telus/universal-design-system/issues/759)) ([9cfdf84](https://github.com/telus/universal-design-system/commit/9cfdf846b7a273dd140537b60e08f30a70c13a66))\n* **base:** adding list component ([#296](https://github.com/telus/universal-design-system/issues/296)) ([#703](https://github.com/telus/universal-design-system/issues/703)) ([50e474d](https://github.com/telus/universal-design-system/commit/50e474d3d7f1988f5971a10be8416c8ac510626f))\n* **base:** implementing base Skeleton component ([#770](https://github.com/telus/universal-design-system/issues/770)) ([1138f08](https://github.com/telus/universal-design-system/commit/1138f08885f4cf67fc0fb7273758d20cc0a989c1)), closes [#296](https://github.com/telus/universal-design-system/issues/296) [#296](https://github.com/telus/universal-design-system/issues/296) [#296](https://github.com/telus/universal-design-system/issues/296) [#296](https://github.com/telus/universal-design-system/issues/296) [#296](https://github.com/telus/universal-design-system/issues/296) [#296](https://github.com/telus/universal-design-system/issues/296) [#296](https://github.com/telus/universal-design-system/issues/296)\n\n\n### Bug Fixes\n\n* **base:** adjust event handlers for checkbox / radio inputs on Web ([#820](https://github.com/telus/universal-design-system/issues/820)) ([87624d2](https://github.com/telus/universal-design-system/commit/87624d29166ce85aeaf7dc1db4dc5b60ecd170a5))\n* **base:** fix button text alignment ([#794](https://github.com/telus/universal-design-system/issues/794)) ([9671087](https://github.com/telus/universal-design-system/commit/9671087477eb45b0d3c872b47f1d24cdd43a727f))\n* **base:** various visual fixes for native/app ([#797](https://github.com/telus/universal-design-system/issues/797)) ([a00ab12](https://github.com/telus/universal-design-system/commit/a00ab124c40e1ea46441270acfd64ae0f37b0a68))\n* export a11ytext [prerelease-components-base] ([#830](https://github.com/telus/universal-design-system/issues/830)) ([af627a2](https://github.com/telus/universal-design-system/commit/af627a2b4fa4cbf78983521bbb66b86ab9f87601))\n* **jest:** pick .web files in -allium-web tests ([#765](https://github.com/telus/universal-design-system/issues/765)) ([e0b1bd5](https://github.com/telus/universal-design-system/commit/e0b1bd5edcc52b916685f8c5dcd8d2901d2ecdbd))\n",
4
- "releaseTag": "@telus-uds/components-base/v0.0.2-prerelease.7",
5
- "newVersion": "0.0.2-prerelease.7",
2
+ "previousReleaseTag": "@telus-uds/components-base/v0.0.2-prerelease.7",
3
+ "changelog": "### [0.0.2-prerelease.8](https://github.com/telus/universal-design-system/compare/@telus-uds/components-base/v0.0.2-prerelease.7...@telus-uds/components-base/v0.0.2-prerelease.8) (2021-12-15)\n\n\n### Features\n\n* **base:** add `ProgressBar` component ([#890](https://github.com/telus/universal-design-system/issues/890)) ([b98315c](https://github.com/telus/universal-design-system/commit/b98315cc7dabb2c7130c62c9c3bbf6fdfb7419a0))\n* **base:** add `Tabs` component ([#908](https://github.com/telus/universal-design-system/issues/908)) ([073bbd2](https://github.com/telus/universal-design-system/commit/073bbd2a0b4282112aa434f8e97e505fa8b4b92f))\n* **base:** add base `StepTracker` component ([#800](https://github.com/telus/universal-design-system/issues/800)) ([aa7d472](https://github.com/telus/universal-design-system/commit/aa7d47297c1d9ba13daef60b5184ead07b95cd52))\n* **base:** add Group fieldsets for RadioCard, Radio, Checkbox ([#875](https://github.com/telus/universal-design-system/issues/875)) ([4b99987](https://github.com/telus/universal-design-system/commit/4b999872714144b643f676d3d473369d605b3eea))\n* **base:** add Notification ([#848](https://github.com/telus/universal-design-system/issues/848)) ([ee6a83e](https://github.com/telus/universal-design-system/commit/ee6a83e05dc991acef3b9449f78c17d43d63b248))\n* **base:** add RadioCard and PressableCardBase ([#865](https://github.com/telus/universal-design-system/issues/865)) ([55c6fa2](https://github.com/telus/universal-design-system/commit/55c6fa293f2fa09499aed763910d3791eefbc4a1))\n* **base:** add the Modal component ([#878](https://github.com/telus/universal-design-system/issues/878)) ([431d4cd](https://github.com/telus/universal-design-system/commit/431d4cd2c1a7f4ce30b453d437b9f5d7b69fd251))\n* **base:** add the Search component ([#798](https://github.com/telus/universal-design-system/issues/798)) ([7b974df](https://github.com/telus/universal-design-system/commit/7b974df12d2bf0cb94b6360091bac8ac57dd7245))\n* **base:** handle `Tabs` hashes, with `useHash` ([#910](https://github.com/telus/universal-design-system/issues/910)) ([8ad6507](https://github.com/telus/universal-design-system/commit/8ad65072c249e8439e7d1c7e55fee535a5f30b4e))\n* **ds-allium:** `PriceLockup` implmementation ([#858](https://github.com/telus/universal-design-system/issues/858)) ([8669b9e](https://github.com/telus/universal-design-system/commit/8669b9e3f80261bd18962dfba5d774c90a5f4ebb))\n* **ds-allium:** add `StoryCard` component ([#880](https://github.com/telus/universal-design-system/issues/880)) ([6f0616d](https://github.com/telus/universal-design-system/commit/6f0616dc761cbdcf470bc2505d773eb362bf800e))\n* **ds-allium:** add Modal content types ([#896](https://github.com/telus/universal-design-system/issues/896)) ([f070447](https://github.com/telus/universal-design-system/commit/f070447fc796139046a96892aab34b74bc1974a4))\n* **ds-allium:** add SubNavigation ([#931](https://github.com/telus/universal-design-system/issues/931)) ([834ee7b](https://github.com/telus/universal-design-system/commit/834ee7bbe811ea8477ac4870466ae573d73e3a8f))\n* use built icons ([#809](https://github.com/telus/universal-design-system/issues/809)) ([120802e](https://github.com/telus/universal-design-system/commit/120802e11bcb4352b9d2e171525f6dc5b687c023))\n\n\n### Bug Fixes\n\n* **base:** add outer border to Radio, extract RadioButton ([#847](https://github.com/telus/universal-design-system/issues/847)) ([b563335](https://github.com/telus/universal-design-system/commit/b563335087fbfffe6739ad185fe4fc7886ef4e4d))\n* **base:** fix Tags icon, update Allium Tags/ButtonGroup ([#888](https://github.com/telus/universal-design-system/issues/888)) ([6d6ff35](https://github.com/telus/universal-design-system/commit/6d6ff35caba4c9c6c99eacf015be56e8862ad170))\n* **components-base:** Remove named import of json file ([#930](https://github.com/telus/universal-design-system/issues/930)) ([9db1cbe](https://github.com/telus/universal-design-system/commit/9db1cbe501d3c049f1f6476720a3ee9bd8b4d736))\n* fix storybook error from proptypes ([#857](https://github.com/telus/universal-design-system/issues/857)) ([175537a](https://github.com/telus/universal-design-system/commit/175537a6ac4b48699f66b1a59eb35910cbf9930b))\n* update test theme icons + cleanup ds-allium icon usage ([#860](https://github.com/telus/universal-design-system/issues/860)) ([c2c0a84](https://github.com/telus/universal-design-system/commit/c2c0a84914eed9dafaf47acca30e1f5119f19e57))\n",
4
+ "releaseTag": "@telus-uds/components-base/v0.0.2-prerelease.8",
5
+ "newVersion": "0.0.2-prerelease.8",
6
6
  "packageName": "@telus-uds/components-base"
7
7
  }
package/src/Box/Box.jsx CHANGED
@@ -2,7 +2,14 @@ import React from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import { View, ScrollView } from 'react-native'
4
4
  import { useThemeTokens } from '../ThemeProvider'
5
- import { a11yProps, spacingProps, variantProp, getTokensPropType, useSpacingScale } from '../utils'
5
+ import {
6
+ a11yProps,
7
+ spacingProps,
8
+ variantProp,
9
+ getTokensPropType,
10
+ useSpacingScale,
11
+ viewProps
12
+ } from '../utils'
6
13
  /**
7
14
  * @typedef {import('../utils/propTypes.js').SpacingValue} SpacingValue
8
15
  * @typedef {import('../utils/propTypes.js').SpacingIndex} SpacingIndex
@@ -102,7 +109,7 @@ const Box = ({
102
109
  testID,
103
110
  ...rest
104
111
  }) => {
105
- const a11y = a11yProps.select(rest)
112
+ const props = { ...a11yProps.select(rest), ...viewProps.select(rest) }
106
113
 
107
114
  const themeTokens = useThemeTokens('Box', tokens, variant)
108
115
  const styles = {
@@ -117,13 +124,13 @@ const Box = ({
117
124
  const scrollProps = typeof scroll === 'object' ? scroll : {}
118
125
  scrollProps.contentContainerStyle = [styles, scrollProps.contentContainerStyle]
119
126
  return (
120
- <ScrollView {...scrollProps} {...a11y} testID={testID}>
127
+ <ScrollView {...scrollProps} {...props} testID={testID}>
121
128
  {children}
122
129
  </ScrollView>
123
130
  )
124
131
  }
125
132
  return (
126
- <View {...a11y} style={styles} testID={testID}>
133
+ <View {...props} style={styles} testID={testID}>
127
134
  {children}
128
135
  </View>
129
136
  )
@@ -1,7 +1,7 @@
1
1
  import React from 'react'
2
2
 
3
3
  import ButtonBase from './ButtonBase'
4
- import buttonPropTypes from './propTypes'
4
+ import buttonPropTypes, { textAndA11yText } from './propTypes'
5
5
  import { useThemeTokensCallback } from '../ThemeProvider'
6
6
  import { a11yProps } from '../utils/propTypes'
7
7
 
@@ -12,7 +12,8 @@ const Button = ({ accessibilityRole = 'button', tokens, variant, ...props }) =>
12
12
 
13
13
  Button.propTypes = {
14
14
  ...a11yProps.types,
15
- ...buttonPropTypes
15
+ ...buttonPropTypes,
16
+ children: textAndA11yText
16
17
  }
17
18
 
18
19
  export default Button
@@ -1,15 +1,15 @@
1
1
  import React from 'react'
2
- import { Pressable, Text, View, StyleSheet, Platform } from 'react-native'
2
+ import { Pressable, View, StyleSheet, Platform } from 'react-native'
3
3
 
4
- import { applyTextStyles, applyShadowToken } from '../ThemeProvider/utils'
4
+ import { applyTextStyles, applyShadowToken, applyOuterBorder } from '../ThemeProvider/utils'
5
5
  import buttonPropTypes from './propTypes'
6
6
  import {
7
7
  a11yProps,
8
8
  getCursorStyle,
9
- hrefAttrsProp,
10
9
  linkProps,
11
10
  resolvePressableState,
12
- resolvePressableTokens
11
+ resolvePressableTokens,
12
+ wrapStringsInText
13
13
  } from '../utils'
14
14
 
15
15
  const getOuterBorderOffset = ({ outerBorderGap = 0, outerBorderWidth = 0 }) =>
@@ -20,27 +20,26 @@ const selectOuterContainerStyles = ({
20
20
  opacity,
21
21
  outerBorderColor,
22
22
  outerBorderWidth,
23
- outerBorderGap = 0,
24
- outerBorderRadius = 0,
23
+ outerBorderGap,
24
+ borderRadius,
25
25
  outerBackgroundColor
26
26
  }) => ({
27
27
  alignSelf,
28
- padding: outerBorderGap,
29
- borderWidth: outerBorderWidth,
30
- borderColor: outerBorderColor,
31
- borderRadius: outerBorderRadius + outerBorderGap,
32
28
  backgroundColor: outerBackgroundColor,
33
- opacity
29
+ opacity,
30
+ ...applyOuterBorder({
31
+ outerBorderGap,
32
+ outerBorderWidth,
33
+ outerBorderColor,
34
+ borderRadius
35
+ })
34
36
  })
35
37
 
36
38
  const selectOuterWidthStyles = ({ outerBorderGap, outerBorderWidth, width }) => {
37
39
  // The inner container's bounding box is the bounding box of the button overall
38
40
  // so this many device pixels will sit outside of the overall bounding box
39
41
  const outerBorderOffset = getOuterBorderOffset({ outerBorderGap, outerBorderWidth })
40
-
41
- const widthStyles = {
42
- margin: 0 - outerBorderOffset
43
- }
42
+ const widthStyles = {}
44
43
 
45
44
  if (!width) {
46
45
  return {
@@ -131,19 +130,6 @@ const selectWebOnlyStyles = (inactive, themeTokens, { accessibilityRole }) => {
131
130
  })
132
131
  }
133
132
 
134
- // TODO: see if this can be made into a generalised utility, ideally when
135
- // there is a stable, generic, generalised approach to within-component text
136
- const resolveChildren = (children, { textStyles, state }) => {
137
- switch (typeof children) {
138
- case 'function':
139
- return children(state)
140
- case 'string':
141
- return <Text style={textStyles}>{children}</Text>
142
- default:
143
- return children
144
- }
145
- }
146
-
147
133
  const ButtonBase = ({
148
134
  href,
149
135
  hrefAttrs,
@@ -156,13 +142,13 @@ const ButtonBase = ({
156
142
  ...rest
157
143
  }) => {
158
144
  const extraButtonState = { inactive, selected }
159
- const resolveTokens = (pressableState) =>
145
+ const resolveButtonTokens = (pressableState) =>
160
146
  resolvePressableTokens(tokens, pressableState, extraButtonState)
161
147
 
162
148
  const a11y = a11yProps.select(rest)
163
149
 
164
150
  const getPressableStyle = (pressableState) => {
165
- const themeTokens = resolveTokens(pressableState)
151
+ const themeTokens = resolveButtonTokens(pressableState)
166
152
  return [
167
153
  staticStyles.row,
168
154
  selectWebOnlyStyles(inactive, themeTokens, a11y),
@@ -177,11 +163,11 @@ const ButtonBase = ({
177
163
  onPress={linkProps.handleHref({ href, onPress })}
178
164
  style={getPressableStyle}
179
165
  disabled={inactive}
180
- {...hrefAttrsProp.spread(hrefAttrs)}
166
+ hrefAttrs={hrefAttrs}
181
167
  {...a11y}
182
168
  >
183
169
  {(pressableState) => {
184
- const themeTokens = resolveTokens(pressableState)
170
+ const themeTokens = resolveButtonTokens(pressableState)
185
171
  const containerStyles = selectInnerContainerStyles(themeTokens)
186
172
  const borderStyles = selectBorderStyles(themeTokens)
187
173
  const textStyles = [selectTextStyles(themeTokens), staticStyles.text]
@@ -206,10 +192,15 @@ const ButtonBase = ({
206
192
  })
207
193
  ]}
208
194
  >
209
- {resolveChildren(children, {
210
- state: { ...resolvePressableState(pressableState, extraButtonState), textStyles },
211
- textStyles
212
- })}
195
+ {wrapStringsInText(
196
+ typeof children === 'function'
197
+ ? children({
198
+ ...resolvePressableState(pressableState, extraButtonState),
199
+ textStyles
200
+ })
201
+ : children,
202
+ { style: textStyles }
203
+ )}
213
204
  </View>
214
205
  )
215
206
  }}
@@ -27,7 +27,7 @@ const ButtonGroup = ({
27
27
  readOnly = false,
28
28
  inactive = false,
29
29
  accessibilityRole = maxValues === 1
30
- ? 'radioGroup' // radioGroup is cross-platform; only web aria has generic groups
30
+ ? 'radiogroup' // radiogroup is cross-platform; only web aria has generic groups
31
31
  : Platform.select({ web: 'group', default: 'none' }),
32
32
  ...rest
33
33
  }) => {
@@ -50,7 +50,7 @@ const ButtonGroup = ({
50
50
  accessibilityRole,
51
51
  ...rest
52
52
  })
53
- const itemA11yRole = a11y.accessibilityRole === 'radioGroup' ? 'radio' : 'checkbox'
53
+ const itemA11yRole = a11y.accessibilityRole === 'radiogroup' ? 'radio' : 'checkbox'
54
54
 
55
55
  return (
56
56
  <StackWrap {...a11y} space={space} direction={direction} tokens={stackTokens}>
@@ -1,6 +1,6 @@
1
1
  import React from 'react'
2
2
  import ButtonBase from './ButtonBase'
3
- import buttonPropTypes from './propTypes'
3
+ import buttonPropTypes, { textAndA11yText } from './propTypes'
4
4
  import { a11yProps, hrefAttrsProp, linkProps } from '../utils/propTypes'
5
5
  import { useThemeTokensCallback } from '../ThemeProvider'
6
6
 
@@ -24,7 +24,8 @@ const ButtonLink = ({ accessibilityRole = 'link', tokens, variant, ...props }) =
24
24
  ButtonLink.propTypes = {
25
25
  ...a11yProps.types,
26
26
  ...buttonPropTypes,
27
- ...linkProps.types
27
+ ...linkProps.types,
28
+ children: textAndA11yText
28
29
  }
29
30
 
30
31
  export default ButtonLink
@@ -1,5 +1,11 @@
1
1
  import PropTypes from 'prop-types'
2
+ import ABBPropTypes from 'airbnb-prop-types'
2
3
  import { variantProp } from '../utils/propTypes'
4
+ import A11yText from '../A11yText'
5
+
6
+ export const textAndA11yText = ABBPropTypes.childrenOf(
7
+ PropTypes.oneOfType([ABBPropTypes.elementType(A11yText), PropTypes.string])
8
+ )
3
9
 
4
10
  const buttonPropTypes = {
5
11
  /**
@@ -12,10 +18,14 @@ const buttonPropTypes = {
12
18
  */
13
19
  disabled: PropTypes.bool,
14
20
  /**
15
- * Button's children must be either a text string, or a render function which is passed an object of
21
+ * Button's children must be either:
22
+ * - One or more text strings and / or A11yText components
23
+ * - A render function with contents that responds to current button state by being passed an object of:
24
+ * ```
16
25
  * { hovered<bool>, focused<bool>, pressed<bool>, inactive<bool>, selected<bool>, textStyles<RNStyle> }
26
+ * ```
17
27
  */
18
- children: PropTypes.oneOfType([PropTypes.string, PropTypes.func]).isRequired,
28
+ children: PropTypes.oneOfType([PropTypes.func, textAndA11yText]).isRequired,
19
29
  /**
20
30
  * Function called when the button is pressed. Required unless the button has a href.
21
31
  */
package/src/Card/Card.jsx CHANGED
@@ -1,34 +1,11 @@
1
1
  import React from 'react'
2
2
  import PropTypes from 'prop-types'
3
- import { View } from 'react-native'
4
3
 
5
- import { applyShadowToken, useThemeTokens } from '../ThemeProvider'
4
+ import { useThemeTokens } from '../ThemeProvider'
6
5
  import { getTokensPropType, variantProp } from '../utils'
7
6
  import { useViewport } from '../ViewportProvider'
8
7
  import { a11yProps } from '../utils/propTypes'
9
-
10
- // Ensure explicit selection of tokens
11
- const selectStyles = ({
12
- backgroundColor,
13
- borderColor,
14
- borderRadius,
15
- borderWidth,
16
- paddingBottom,
17
- paddingLeft,
18
- paddingRight,
19
- paddingTop,
20
- shadow
21
- }) => ({
22
- backgroundColor,
23
- borderColor,
24
- borderRadius,
25
- borderWidth,
26
- paddingBottom,
27
- paddingLeft,
28
- paddingRight,
29
- paddingTop,
30
- ...applyShadowToken(shadow)
31
- })
8
+ import CardBase from './CardBase'
32
9
 
33
10
  /**
34
11
  * A basic card component, unstyled by default.
@@ -81,13 +58,10 @@ const selectStyles = ({
81
58
  const Card = ({ children, tokens, variant, ...rest }) => {
82
59
  const viewport = useViewport()
83
60
  const themeTokens = useThemeTokens('Card', tokens, variant, { viewport })
84
- const cardStyle = selectStyles(themeTokens)
85
- const a11y = a11yProps.select(rest)
86
-
87
61
  return (
88
- <View style={cardStyle} {...a11y}>
62
+ <CardBase tokens={themeTokens} {...rest}>
89
63
  {children}
90
- </View>
64
+ </CardBase>
91
65
  )
92
66
  }
93
67
 
@@ -0,0 +1,57 @@
1
+ import React from 'react'
2
+ import PropTypes from 'prop-types'
3
+ import { View } from 'react-native'
4
+
5
+ import { applyShadowToken } from '../ThemeProvider'
6
+ import { getTokensPropType } from '../utils'
7
+ import { a11yProps, viewProps } from '../utils/propTypes'
8
+
9
+ // Ensure explicit selection of tokens
10
+ const selectStyles = ({
11
+ flex,
12
+ backgroundColor,
13
+ borderColor,
14
+ borderRadius,
15
+ borderWidth,
16
+ paddingBottom,
17
+ paddingLeft,
18
+ paddingRight,
19
+ paddingTop,
20
+ minWidth,
21
+ shadow
22
+ }) => ({
23
+ flex,
24
+ backgroundColor,
25
+ borderColor,
26
+ borderRadius,
27
+ borderWidth,
28
+ paddingBottom,
29
+ paddingLeft,
30
+ paddingRight,
31
+ paddingTop,
32
+ minWidth,
33
+ ...applyShadowToken(shadow)
34
+ })
35
+
36
+ /**
37
+ * A themeless base component for Card which components can apply theme tokens to. Not
38
+ * intended to be used in apps or sites directly: build themed components on top of this.
39
+ */
40
+ const CardBase = ({ children, tokens, ...rest }) => {
41
+ const cardStyle = selectStyles(typeof tokens === 'function' ? tokens() : tokens)
42
+ const props = { ...a11yProps.select(rest), ...viewProps.select(rest) }
43
+
44
+ return (
45
+ <View style={cardStyle} {...props}>
46
+ {children}
47
+ </View>
48
+ )
49
+ }
50
+
51
+ CardBase.propTypes = {
52
+ children: PropTypes.node,
53
+ tokens: getTokensPropType('Card'),
54
+ ...a11yProps.types
55
+ }
56
+
57
+ export default CardBase