@telus-uds/components-base 1.84.0 → 1.85.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 (471) hide show
  1. package/CHANGELOG.md +26 -2
  2. package/lib/A11yInfoProvider/index.js +8 -10
  3. package/lib/A11yText/index.js +2 -4
  4. package/lib/ActivityIndicator/Spinner.js +3 -4
  5. package/lib/ActivityIndicator/Spinner.native.js +2 -4
  6. package/lib/Autocomplete/Autocomplete.js +13 -17
  7. package/lib/Autocomplete/Loading.js +4 -2
  8. package/lib/Autocomplete/Suggestions.js +2 -4
  9. package/lib/Badge/Badge.js +2 -4
  10. package/lib/BaseProvider/HydrationContext.js +5 -7
  11. package/lib/Box/Box.js +5 -7
  12. package/lib/Button/Button.js +3 -3
  13. package/lib/Button/ButtonBase.js +2 -7
  14. package/lib/Button/ButtonDropdown.js +3 -3
  15. package/lib/Button/ButtonGroup.js +2 -4
  16. package/lib/Button/ButtonLink.js +3 -3
  17. package/lib/Card/Card.js +159 -16
  18. package/lib/Card/CardBase.js +2 -4
  19. package/lib/Card/PressableCardBase.js +3 -5
  20. package/lib/CardGroup/CardGroup.js +220 -0
  21. package/lib/CardGroup/dictionary.js +15 -0
  22. package/lib/CardGroup/index.js +10 -0
  23. package/lib/Carousel/Carousel.js +67 -57
  24. package/lib/Carousel/CarouselFirstFocus/CarouselFirstFocus.js +2 -4
  25. package/lib/Carousel/CarouselItem/CarouselItem.js +3 -2
  26. package/lib/Carousel/CarouselStepTracker/CarouselStepTracker.js +4 -2
  27. package/lib/Carousel/CarouselTabs/CarouselTabs.js +2 -4
  28. package/lib/Carousel/CarouselTabs/CarouselTabsPanel.js +6 -8
  29. package/lib/Carousel/CarouselTabs/CarouselTabsPanelItem.js +3 -5
  30. package/lib/Carousel/CarouselThumbnail.js +4 -2
  31. package/lib/Carousel/CarouselThumbnailNavigation.js +2 -4
  32. package/lib/Checkbox/Checkbox.js +2 -4
  33. package/lib/Checkbox/CheckboxButton.js +3 -5
  34. package/lib/Checkbox/CheckboxGroup.js +2 -4
  35. package/lib/Checkbox/CheckboxInput.js +4 -14
  36. package/lib/CheckboxCard/CheckboxCard.js +3 -3
  37. package/lib/CheckboxCardGroup/CheckboxCardGroup.js +3 -3
  38. package/lib/ColourToggle/ColourBubble.js +5 -6
  39. package/lib/ColourToggle/ColourToggle.js +3 -5
  40. package/lib/Divider/Divider.js +2 -4
  41. package/lib/ExpandCollapse/Accordion.js +2 -4
  42. package/lib/ExpandCollapse/Control.js +2 -4
  43. package/lib/ExpandCollapse/ExpandCollapse.js +2 -4
  44. package/lib/ExpandCollapse/Panel.js +3 -5
  45. package/lib/Feedback/Feedback.js +2 -4
  46. package/lib/Fieldset/Fieldset.js +2 -4
  47. package/lib/Fieldset/FieldsetContainer.js +2 -4
  48. package/lib/Fieldset/FieldsetContainer.native.js +2 -4
  49. package/lib/Fieldset/Legend.js +2 -4
  50. package/lib/Fieldset/Legend.native.js +2 -4
  51. package/lib/FlexGrid/Col/Col.js +3 -5
  52. package/lib/FlexGrid/FlexGrid.js +2 -4
  53. package/lib/FlexGrid/Row/Row.js +2 -4
  54. package/lib/Footnote/Footnote.js +9 -9
  55. package/lib/Footnote/FootnoteLink.js +9 -3
  56. package/lib/HorizontalScroll/HorizontalScroll.js +8 -10
  57. package/lib/HorizontalScroll/HorizontalScrollButton.js +2 -4
  58. package/lib/HorizontalScroll/ScrollViewEnd.js +5 -10
  59. package/lib/HorizontalScroll/ScrollViewEnd.native.js +2 -4
  60. package/lib/Icon/Icon.js +2 -4
  61. package/lib/Icon/IconText.js +3 -3
  62. package/lib/IconButton/IconButton.js +2 -4
  63. package/lib/InputLabel/InputLabel.js +2 -4
  64. package/lib/InputLabel/LabelContent.js +2 -4
  65. package/lib/InputLabel/LabelContent.native.js +2 -4
  66. package/lib/InputSupports/InputSupports.js +4 -5
  67. package/lib/Link/ChevronLink.js +2 -4
  68. package/lib/Link/InlinePressable.js +8 -7
  69. package/lib/Link/InlinePressable.native.js +10 -8
  70. package/lib/Link/Link.js +2 -4
  71. package/lib/Link/LinkBase.js +2 -4
  72. package/lib/Link/TextButton.js +2 -4
  73. package/lib/List/List.js +13 -11
  74. package/lib/List/ListItem.js +2 -4
  75. package/lib/List/ListItemBase.js +6 -10
  76. package/lib/List/ListItemContent.js +4 -2
  77. package/lib/List/ListItemMark.js +4 -2
  78. package/lib/List/PressableListItemBase.js +2 -4
  79. package/lib/Listbox/GroupControl.js +4 -2
  80. package/lib/Listbox/Listbox.js +6 -6
  81. package/lib/Listbox/ListboxContext.js +3 -4
  82. package/lib/Listbox/ListboxGroup.js +2 -4
  83. package/lib/Listbox/ListboxItem.js +2 -6
  84. package/lib/Listbox/ListboxOverlay.js +2 -6
  85. package/lib/Listbox/PressableItem.js +2 -6
  86. package/lib/Modal/Modal.js +5 -7
  87. package/lib/Modal/ModalContent.js +7 -7
  88. package/lib/Modal/WebModal.js +16 -9
  89. package/lib/MultiSelectFilter/ModalOverlay.js +2 -4
  90. package/lib/MultiSelectFilter/MultiSelectFilter.js +10 -10
  91. package/lib/Notification/Notification.js +5 -7
  92. package/lib/OrderedList/Item.js +4 -10
  93. package/lib/OrderedList/ItemBase.js +2 -4
  94. package/lib/OrderedList/OrderedList.js +5 -13
  95. package/lib/OrderedList/OrderedListBase.js +2 -4
  96. package/lib/Pagination/PageButton.js +1 -1
  97. package/lib/Pagination/Pagination.js +1 -1
  98. package/lib/Pagination/SideButton.js +2 -4
  99. package/lib/PriceLockup/PriceLockup.js +5 -5
  100. package/lib/ProductCard/ProductCard.js +3 -2
  101. package/lib/ProductCardGroup/ProductCardGroup.js +5 -6
  102. package/lib/Progress/Progress.js +2 -4
  103. package/lib/Progress/ProgressBar.js +2 -4
  104. package/lib/Progress/ProgressBarBackground.js +2 -4
  105. package/lib/QuickLinks/QuickLinks.js +2 -4
  106. package/lib/QuickLinks/QuickLinksCard.js +4 -2
  107. package/lib/QuickLinks/QuickLinksItem.js +2 -4
  108. package/lib/QuickLinksFeature/QuickLinksFeature.js +9 -7
  109. package/lib/QuickLinksFeature/QuickLinksFeatureItem.js +10 -12
  110. package/lib/Radio/Radio.js +3 -3
  111. package/lib/Radio/RadioButton.js +61 -15
  112. package/lib/Radio/RadioGroup.js +2 -4
  113. package/lib/Radio/RadioInput.js +6 -18
  114. package/lib/RadioCard/RadioCard.js +3 -3
  115. package/lib/RadioCard/RadioCardGroup.js +3 -3
  116. package/lib/Responsive/Responsive.js +3 -2
  117. package/lib/Responsive/ResponsiveWithMediaQueryStyleSheet.js +3 -2
  118. package/lib/Search/Search.js +2 -4
  119. package/lib/Select/Group.js +4 -2
  120. package/lib/Select/Item.js +4 -2
  121. package/lib/Select/Picker.js +2 -4
  122. package/lib/Select/Picker.native.js +3 -5
  123. package/lib/Select/Select.js +4 -6
  124. package/lib/SideNav/Item.js +2 -4
  125. package/lib/SideNav/ItemContent.js +4 -2
  126. package/lib/SideNav/ItemsGroup.js +2 -4
  127. package/lib/SideNav/SideNav.js +2 -2
  128. package/lib/Skeleton/Skeleton.js +2 -4
  129. package/lib/SkipLink/SkipLink.js +2 -4
  130. package/lib/Spacer/Spacer.js +2 -4
  131. package/lib/StackView/StackView.js +2 -4
  132. package/lib/StackView/StackWrap.js +3 -5
  133. package/lib/StackView/StackWrapBox.js +2 -4
  134. package/lib/StackView/StackWrapGap.js +2 -4
  135. package/lib/StackView/getStackedContent.js +3 -3
  136. package/lib/StepTracker/Step.js +4 -2
  137. package/lib/StepTracker/StepTracker.js +2 -4
  138. package/lib/Tabs/Tabs.js +4 -4
  139. package/lib/Tabs/TabsItem.js +3 -5
  140. package/lib/Tags/Tags.js +2 -4
  141. package/lib/TextInput/TextArea.js +3 -5
  142. package/lib/TextInput/TextInput.js +2 -4
  143. package/lib/TextInput/TextInputBase.js +7 -9
  144. package/lib/ThemeProvider/ThemeProvider.js +5 -7
  145. package/lib/Timeline/Timeline.js +2 -4
  146. package/lib/ToggleSwitch/ToggleSwitch.js +2 -4
  147. package/lib/ToggleSwitch/ToggleSwitchGroup.js +2 -4
  148. package/lib/Tooltip/Tooltip.js +6 -8
  149. package/lib/Tooltip/Tooltip.native.js +12 -14
  150. package/lib/TooltipButton/TooltipButton.js +4 -2
  151. package/lib/Typography/Typography.js +2 -4
  152. package/lib/Validator/Validator.js +11 -13
  153. package/lib/ViewportProvider/ViewportProvider.js +2 -4
  154. package/lib/index.js +8 -0
  155. package/lib/utils/BaseView/BaseView.js +2 -4
  156. package/lib/utils/children.js +4 -6
  157. package/lib/utils/withLinkRouter.js +3 -5
  158. package/lib-module/A11yInfoProvider/index.js +8 -8
  159. package/lib-module/A11yText/index.js +2 -2
  160. package/lib-module/ActivityIndicator/Spinner.js +2 -2
  161. package/lib-module/ActivityIndicator/Spinner.native.js +2 -2
  162. package/lib-module/Autocomplete/Autocomplete.js +13 -14
  163. package/lib-module/Autocomplete/Loading.js +4 -2
  164. package/lib-module/Autocomplete/Suggestions.js +2 -2
  165. package/lib-module/Badge/Badge.js +2 -2
  166. package/lib-module/BaseProvider/HydrationContext.js +5 -5
  167. package/lib-module/Box/Box.js +5 -5
  168. package/lib-module/Button/Button.js +2 -2
  169. package/lib-module/Button/ButtonBase.js +2 -5
  170. package/lib-module/Button/ButtonDropdown.js +2 -2
  171. package/lib-module/Button/ButtonGroup.js +2 -2
  172. package/lib-module/Button/ButtonLink.js +2 -2
  173. package/lib-module/Card/Card.js +159 -14
  174. package/lib-module/Card/CardBase.js +2 -2
  175. package/lib-module/Card/PressableCardBase.js +4 -4
  176. package/lib-module/CardGroup/CardGroup.js +210 -0
  177. package/lib-module/CardGroup/dictionary.js +8 -0
  178. package/lib-module/CardGroup/index.js +2 -0
  179. package/lib-module/Carousel/Carousel.js +67 -55
  180. package/lib-module/Carousel/CarouselFirstFocus/CarouselFirstFocus.js +2 -2
  181. package/lib-module/Carousel/CarouselItem/CarouselItem.js +3 -2
  182. package/lib-module/Carousel/CarouselStepTracker/CarouselStepTracker.js +4 -2
  183. package/lib-module/Carousel/CarouselTabs/CarouselTabs.js +2 -2
  184. package/lib-module/Carousel/CarouselTabs/CarouselTabsPanel.js +6 -6
  185. package/lib-module/Carousel/CarouselTabs/CarouselTabsPanelItem.js +3 -3
  186. package/lib-module/Carousel/CarouselThumbnail.js +4 -2
  187. package/lib-module/Carousel/CarouselThumbnailNavigation.js +2 -2
  188. package/lib-module/Checkbox/Checkbox.js +2 -2
  189. package/lib-module/Checkbox/CheckboxButton.js +3 -3
  190. package/lib-module/Checkbox/CheckboxGroup.js +2 -2
  191. package/lib-module/Checkbox/CheckboxInput.js +4 -12
  192. package/lib-module/CheckboxCard/CheckboxCard.js +2 -2
  193. package/lib-module/CheckboxCardGroup/CheckboxCardGroup.js +2 -2
  194. package/lib-module/ColourToggle/ColourBubble.js +5 -4
  195. package/lib-module/ColourToggle/ColourToggle.js +3 -3
  196. package/lib-module/Divider/Divider.js +2 -2
  197. package/lib-module/ExpandCollapse/Accordion.js +2 -2
  198. package/lib-module/ExpandCollapse/Control.js +2 -2
  199. package/lib-module/ExpandCollapse/ExpandCollapse.js +2 -2
  200. package/lib-module/ExpandCollapse/Panel.js +3 -3
  201. package/lib-module/Feedback/Feedback.js +2 -2
  202. package/lib-module/Fieldset/Fieldset.js +2 -2
  203. package/lib-module/Fieldset/FieldsetContainer.js +2 -2
  204. package/lib-module/Fieldset/FieldsetContainer.native.js +2 -2
  205. package/lib-module/Fieldset/Legend.js +2 -2
  206. package/lib-module/Fieldset/Legend.native.js +2 -2
  207. package/lib-module/FlexGrid/Col/Col.js +3 -3
  208. package/lib-module/FlexGrid/FlexGrid.js +2 -2
  209. package/lib-module/FlexGrid/Row/Row.js +2 -2
  210. package/lib-module/Footnote/Footnote.js +9 -7
  211. package/lib-module/Footnote/FootnoteLink.js +9 -4
  212. package/lib-module/HorizontalScroll/HorizontalScroll.js +8 -8
  213. package/lib-module/HorizontalScroll/HorizontalScrollButton.js +2 -2
  214. package/lib-module/HorizontalScroll/ScrollViewEnd.js +5 -8
  215. package/lib-module/HorizontalScroll/ScrollViewEnd.native.js +2 -2
  216. package/lib-module/Icon/Icon.js +2 -2
  217. package/lib-module/Icon/IconText.js +2 -2
  218. package/lib-module/IconButton/IconButton.js +2 -2
  219. package/lib-module/InputLabel/InputLabel.js +2 -2
  220. package/lib-module/InputLabel/LabelContent.js +2 -2
  221. package/lib-module/InputLabel/LabelContent.native.js +2 -2
  222. package/lib-module/InputSupports/InputSupports.js +4 -3
  223. package/lib-module/Link/ChevronLink.js +2 -2
  224. package/lib-module/Link/InlinePressable.js +10 -4
  225. package/lib-module/Link/InlinePressable.native.js +12 -6
  226. package/lib-module/Link/Link.js +2 -2
  227. package/lib-module/Link/LinkBase.js +2 -2
  228. package/lib-module/Link/TextButton.js +2 -2
  229. package/lib-module/List/List.js +13 -9
  230. package/lib-module/List/ListItem.js +2 -2
  231. package/lib-module/List/ListItemBase.js +6 -8
  232. package/lib-module/List/ListItemContent.js +4 -2
  233. package/lib-module/List/ListItemMark.js +4 -2
  234. package/lib-module/List/PressableListItemBase.js +2 -2
  235. package/lib-module/Listbox/GroupControl.js +4 -2
  236. package/lib-module/Listbox/Listbox.js +7 -7
  237. package/lib-module/Listbox/ListboxContext.js +2 -2
  238. package/lib-module/Listbox/ListboxGroup.js +2 -2
  239. package/lib-module/Listbox/ListboxItem.js +2 -3
  240. package/lib-module/Listbox/ListboxOverlay.js +2 -3
  241. package/lib-module/Listbox/PressableItem.js +2 -3
  242. package/lib-module/Modal/Modal.js +5 -5
  243. package/lib-module/Modal/ModalContent.js +7 -5
  244. package/lib-module/Modal/WebModal.js +16 -9
  245. package/lib-module/MultiSelectFilter/ModalOverlay.js +2 -2
  246. package/lib-module/MultiSelectFilter/MultiSelectFilter.js +10 -8
  247. package/lib-module/Notification/Notification.js +5 -5
  248. package/lib-module/OrderedList/Item.js +4 -8
  249. package/lib-module/OrderedList/ItemBase.js +2 -2
  250. package/lib-module/OrderedList/OrderedList.js +6 -12
  251. package/lib-module/OrderedList/OrderedListBase.js +2 -2
  252. package/lib-module/Pagination/PageButton.js +2 -2
  253. package/lib-module/Pagination/Pagination.js +2 -2
  254. package/lib-module/Pagination/SideButton.js +2 -2
  255. package/lib-module/PriceLockup/PriceLockup.js +5 -5
  256. package/lib-module/ProductCard/ProductCard.js +3 -2
  257. package/lib-module/ProductCardGroup/ProductCardGroup.js +5 -4
  258. package/lib-module/Progress/Progress.js +2 -2
  259. package/lib-module/Progress/ProgressBar.js +2 -2
  260. package/lib-module/Progress/ProgressBarBackground.js +2 -2
  261. package/lib-module/QuickLinks/QuickLinks.js +2 -2
  262. package/lib-module/QuickLinks/QuickLinksCard.js +4 -2
  263. package/lib-module/QuickLinks/QuickLinksItem.js +2 -2
  264. package/lib-module/QuickLinksFeature/QuickLinksFeature.js +9 -5
  265. package/lib-module/QuickLinksFeature/QuickLinksFeatureItem.js +10 -10
  266. package/lib-module/Radio/Radio.js +2 -2
  267. package/lib-module/Radio/RadioButton.js +62 -14
  268. package/lib-module/Radio/RadioGroup.js +2 -2
  269. package/lib-module/Radio/RadioInput.js +6 -16
  270. package/lib-module/RadioCard/RadioCard.js +2 -2
  271. package/lib-module/RadioCard/RadioCardGroup.js +2 -2
  272. package/lib-module/Responsive/Responsive.js +3 -2
  273. package/lib-module/Responsive/ResponsiveWithMediaQueryStyleSheet.js +3 -2
  274. package/lib-module/Search/Search.js +2 -2
  275. package/lib-module/Select/Group.js +4 -2
  276. package/lib-module/Select/Item.js +4 -2
  277. package/lib-module/Select/Picker.js +2 -2
  278. package/lib-module/Select/Picker.native.js +3 -3
  279. package/lib-module/Select/Select.js +4 -4
  280. package/lib-module/SideNav/Item.js +2 -2
  281. package/lib-module/SideNav/ItemContent.js +4 -2
  282. package/lib-module/SideNav/ItemsGroup.js +2 -2
  283. package/lib-module/SideNav/SideNav.js +3 -3
  284. package/lib-module/Skeleton/Skeleton.js +2 -2
  285. package/lib-module/SkipLink/SkipLink.js +2 -2
  286. package/lib-module/Spacer/Spacer.js +2 -2
  287. package/lib-module/StackView/StackView.js +2 -2
  288. package/lib-module/StackView/StackWrap.js +3 -3
  289. package/lib-module/StackView/StackWrapBox.js +2 -2
  290. package/lib-module/StackView/StackWrapGap.js +2 -2
  291. package/lib-module/StackView/getStackedContent.js +4 -4
  292. package/lib-module/StepTracker/Step.js +4 -2
  293. package/lib-module/StepTracker/StepTracker.js +2 -2
  294. package/lib-module/Tabs/Tabs.js +3 -3
  295. package/lib-module/Tabs/TabsItem.js +3 -3
  296. package/lib-module/Tags/Tags.js +2 -2
  297. package/lib-module/TextInput/TextArea.js +3 -3
  298. package/lib-module/TextInput/TextInput.js +2 -2
  299. package/lib-module/TextInput/TextInputBase.js +7 -7
  300. package/lib-module/ThemeProvider/ThemeProvider.js +5 -5
  301. package/lib-module/Timeline/Timeline.js +2 -2
  302. package/lib-module/ToggleSwitch/ToggleSwitch.js +2 -2
  303. package/lib-module/ToggleSwitch/ToggleSwitchGroup.js +2 -2
  304. package/lib-module/Tooltip/Tooltip.js +6 -6
  305. package/lib-module/Tooltip/Tooltip.native.js +12 -12
  306. package/lib-module/TooltipButton/TooltipButton.js +4 -2
  307. package/lib-module/Typography/Typography.js +2 -2
  308. package/lib-module/Validator/Validator.js +11 -11
  309. package/lib-module/ViewportProvider/ViewportProvider.js +2 -2
  310. package/lib-module/index.js +1 -0
  311. package/lib-module/utils/BaseView/BaseView.js +2 -2
  312. package/lib-module/utils/children.js +4 -4
  313. package/lib-module/utils/withLinkRouter.js +3 -3
  314. package/package.json +2 -2
  315. package/src/A11yInfoProvider/index.jsx +8 -8
  316. package/src/A11yText/index.jsx +2 -2
  317. package/src/ActivityIndicator/Spinner.jsx +2 -2
  318. package/src/ActivityIndicator/Spinner.native.jsx +2 -2
  319. package/src/Autocomplete/Autocomplete.jsx +15 -14
  320. package/src/Autocomplete/Loading.jsx +6 -3
  321. package/src/Autocomplete/Suggestions.jsx +2 -2
  322. package/src/Badge/Badge.jsx +2 -2
  323. package/src/BaseProvider/HydrationContext.jsx +5 -5
  324. package/src/Box/Box.jsx +5 -5
  325. package/src/Button/Button.jsx +11 -9
  326. package/src/Button/ButtonBase.jsx +2 -3
  327. package/src/Button/ButtonDropdown.jsx +2 -2
  328. package/src/Button/ButtonGroup.jsx +2 -2
  329. package/src/Button/ButtonLink.jsx +2 -2
  330. package/src/Card/Card.jsx +151 -11
  331. package/src/Card/CardBase.jsx +2 -2
  332. package/src/Card/PressableCardBase.jsx +18 -4
  333. package/src/CardGroup/CardGroup.jsx +249 -0
  334. package/src/CardGroup/dictionary.js +8 -0
  335. package/src/CardGroup/index.js +3 -0
  336. package/src/Carousel/Carousel.jsx +69 -53
  337. package/src/Carousel/CarouselFirstFocus/CarouselFirstFocus.jsx +2 -2
  338. package/src/Carousel/CarouselItem/CarouselItem.jsx +19 -17
  339. package/src/Carousel/CarouselStepTracker/CarouselStepTracker.jsx +5 -3
  340. package/src/Carousel/CarouselTabs/CarouselTabs.jsx +2 -2
  341. package/src/Carousel/CarouselTabs/CarouselTabsPanel.jsx +6 -6
  342. package/src/Carousel/CarouselTabs/CarouselTabsPanelItem.jsx +3 -3
  343. package/src/Carousel/CarouselThumbnail.jsx +6 -2
  344. package/src/Carousel/CarouselThumbnailNavigation.jsx +2 -2
  345. package/src/Checkbox/Checkbox.jsx +2 -2
  346. package/src/Checkbox/CheckboxButton.jsx +5 -7
  347. package/src/Checkbox/CheckboxGroup.jsx +2 -2
  348. package/src/Checkbox/CheckboxInput.jsx +15 -12
  349. package/src/CheckboxCard/CheckboxCard.jsx +2 -2
  350. package/src/CheckboxCardGroup/CheckboxCardGroup.jsx +2 -2
  351. package/src/ColourToggle/ColourBubble.jsx +5 -4
  352. package/src/ColourToggle/ColourToggle.jsx +3 -3
  353. package/src/Divider/Divider.jsx +2 -2
  354. package/src/ExpandCollapse/Accordion.jsx +4 -2
  355. package/src/ExpandCollapse/Control.jsx +2 -2
  356. package/src/ExpandCollapse/ExpandCollapse.jsx +2 -2
  357. package/src/ExpandCollapse/Panel.jsx +3 -3
  358. package/src/Feedback/Feedback.jsx +2 -2
  359. package/src/Fieldset/Fieldset.jsx +2 -2
  360. package/src/Fieldset/FieldsetContainer.jsx +2 -2
  361. package/src/Fieldset/FieldsetContainer.native.jsx +2 -2
  362. package/src/Fieldset/Legend.jsx +2 -2
  363. package/src/Fieldset/Legend.native.jsx +2 -2
  364. package/src/FlexGrid/Col/Col.jsx +3 -3
  365. package/src/FlexGrid/FlexGrid.jsx +2 -2
  366. package/src/FlexGrid/Row/Row.jsx +2 -2
  367. package/src/Footnote/Footnote.jsx +111 -98
  368. package/src/Footnote/FootnoteLink.jsx +38 -31
  369. package/src/HorizontalScroll/HorizontalScroll.jsx +8 -8
  370. package/src/HorizontalScroll/HorizontalScrollButton.jsx +2 -2
  371. package/src/HorizontalScroll/ScrollViewEnd.jsx +4 -8
  372. package/src/HorizontalScroll/ScrollViewEnd.native.jsx +2 -2
  373. package/src/Icon/Icon.jsx +2 -2
  374. package/src/Icon/IconText.jsx +2 -2
  375. package/src/IconButton/IconButton.jsx +2 -2
  376. package/src/InputLabel/InputLabel.jsx +2 -2
  377. package/src/InputLabel/LabelContent.jsx +2 -2
  378. package/src/InputLabel/LabelContent.native.jsx +2 -2
  379. package/src/InputSupports/InputSupports.jsx +4 -3
  380. package/src/Link/ChevronLink.jsx +2 -2
  381. package/src/Link/InlinePressable.jsx +22 -15
  382. package/src/Link/InlinePressable.native.jsx +12 -6
  383. package/src/Link/Link.jsx +2 -2
  384. package/src/Link/LinkBase.jsx +2 -2
  385. package/src/Link/TextButton.jsx +2 -2
  386. package/src/List/List.jsx +15 -7
  387. package/src/List/ListItem.jsx +2 -2
  388. package/src/List/ListItemBase.jsx +6 -12
  389. package/src/List/ListItemContent.jsx +5 -2
  390. package/src/List/ListItemMark.jsx +5 -3
  391. package/src/List/PressableListItemBase.jsx +2 -2
  392. package/src/Listbox/GroupControl.jsx +5 -2
  393. package/src/Listbox/Listbox.jsx +7 -7
  394. package/src/Listbox/ListboxContext.js +2 -2
  395. package/src/Listbox/ListboxGroup.jsx +2 -2
  396. package/src/Listbox/ListboxItem.jsx +2 -3
  397. package/src/Listbox/ListboxOverlay.jsx +2 -3
  398. package/src/Listbox/PressableItem.jsx +2 -3
  399. package/src/Modal/Modal.jsx +5 -5
  400. package/src/Modal/ModalContent.jsx +132 -125
  401. package/src/Modal/WebModal.jsx +13 -8
  402. package/src/MultiSelectFilter/ModalOverlay.jsx +2 -2
  403. package/src/MultiSelectFilter/MultiSelectFilter.jsx +263 -252
  404. package/src/Notification/Notification.jsx +5 -5
  405. package/src/OrderedList/Item.jsx +4 -6
  406. package/src/OrderedList/ItemBase.jsx +2 -2
  407. package/src/OrderedList/OrderedList.jsx +4 -7
  408. package/src/OrderedList/OrderedListBase.jsx +2 -2
  409. package/src/Pagination/PageButton.jsx +2 -2
  410. package/src/Pagination/Pagination.jsx +2 -2
  411. package/src/Pagination/SideButton.jsx +2 -2
  412. package/src/PriceLockup/PriceLockup.jsx +93 -88
  413. package/src/ProductCard/ProductCard.jsx +90 -84
  414. package/src/ProductCardGroup/ProductCardGroup.jsx +5 -5
  415. package/src/Progress/Progress.jsx +2 -2
  416. package/src/Progress/ProgressBar.jsx +2 -2
  417. package/src/Progress/ProgressBarBackground.jsx +4 -2
  418. package/src/QuickLinks/QuickLinks.jsx +2 -2
  419. package/src/QuickLinks/QuickLinksCard.jsx +9 -3
  420. package/src/QuickLinks/QuickLinksItem.jsx +2 -2
  421. package/src/QuickLinksFeature/QuickLinksFeature.jsx +31 -27
  422. package/src/QuickLinksFeature/QuickLinksFeatureItem.jsx +3 -3
  423. package/src/Radio/Radio.jsx +2 -2
  424. package/src/Radio/RadioButton.jsx +58 -6
  425. package/src/Radio/RadioGroup.jsx +2 -2
  426. package/src/Radio/RadioInput.jsx +15 -14
  427. package/src/RadioCard/RadioCard.jsx +2 -2
  428. package/src/RadioCard/RadioCardGroup.jsx +2 -2
  429. package/src/Responsive/Responsive.jsx +8 -3
  430. package/src/Responsive/ResponsiveWithMediaQueryStyleSheet.jsx +23 -16
  431. package/src/Search/Search.jsx +2 -2
  432. package/src/Select/Group.jsx +9 -3
  433. package/src/Select/Item.jsx +7 -1
  434. package/src/Select/Picker.jsx +2 -2
  435. package/src/Select/Picker.native.jsx +3 -3
  436. package/src/Select/Select.jsx +4 -4
  437. package/src/SideNav/Item.jsx +2 -2
  438. package/src/SideNav/ItemContent.jsx +7 -3
  439. package/src/SideNav/ItemsGroup.jsx +2 -2
  440. package/src/SideNav/SideNav.jsx +3 -3
  441. package/src/Skeleton/Skeleton.jsx +2 -2
  442. package/src/SkipLink/SkipLink.jsx +2 -2
  443. package/src/Spacer/Spacer.jsx +2 -2
  444. package/src/StackView/StackView.jsx +2 -2
  445. package/src/StackView/StackWrap.jsx +3 -3
  446. package/src/StackView/StackWrapBox.jsx +2 -2
  447. package/src/StackView/StackWrapGap.jsx +2 -2
  448. package/src/StackView/getStackedContent.jsx +4 -4
  449. package/src/StepTracker/Step.jsx +75 -67
  450. package/src/StepTracker/StepTracker.jsx +2 -2
  451. package/src/Tabs/Tabs.jsx +3 -3
  452. package/src/Tabs/TabsItem.jsx +3 -3
  453. package/src/Tags/Tags.jsx +2 -2
  454. package/src/TextInput/TextArea.jsx +3 -3
  455. package/src/TextInput/TextInput.jsx +2 -2
  456. package/src/TextInput/TextInputBase.jsx +7 -7
  457. package/src/ThemeProvider/ThemeProvider.jsx +5 -5
  458. package/src/Timeline/Timeline.jsx +2 -2
  459. package/src/ToggleSwitch/ToggleSwitch.jsx +2 -2
  460. package/src/ToggleSwitch/ToggleSwitchGroup.jsx +2 -2
  461. package/src/Tooltip/Tooltip.jsx +6 -6
  462. package/src/Tooltip/Tooltip.native.jsx +12 -12
  463. package/src/TooltipButton/TooltipButton.jsx +5 -2
  464. package/src/Typography/Typography.jsx +2 -2
  465. package/src/Validator/Validator.jsx +11 -11
  466. package/src/ViewportProvider/ViewportProvider.jsx +2 -2
  467. package/src/index.js +1 -0
  468. package/src/utils/BaseView/BaseView.jsx +2 -2
  469. package/src/utils/children.jsx +4 -4
  470. package/src/utils/withLinkRouter.jsx +3 -3
  471. package/types/ExpandCollapse.d.ts +1 -1
@@ -1,15 +1,15 @@
1
- import React, { createContext, useContext, useEffect, useState } from 'react'
1
+ import React from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import { AccessibilityInfo, Platform } from 'react-native'
4
4
 
5
- const ScreenReaderContext = createContext(false)
6
- const ReducedMotionContext = createContext(false)
5
+ const ScreenReaderContext = React.createContext(false)
6
+ const ReducedMotionContext = React.createContext(false)
7
7
 
8
8
  const A11yInfoProvider = ({ children }) => {
9
- const [reduceMotionEnabled, setReduceMotionEnabled] = useState(false)
10
- const [screenReaderEnabled, setScreenReaderEnabled] = useState(false)
9
+ const [reduceMotionEnabled, setReduceMotionEnabled] = React.useState(false)
10
+ const [screenReaderEnabled, setScreenReaderEnabled] = React.useState(false)
11
11
 
12
- useEffect(() => {
12
+ React.useEffect(() => {
13
13
  if (process.env.NODE_ENV === 'test') {
14
14
  // On Jest these effects do nothing but can cause `act` state change warnings
15
15
  // and "...after the Jest environment has been torn down" errors, so skip them.
@@ -65,8 +65,8 @@ A11yInfoProvider.propTypes = {
65
65
  export default A11yInfoProvider
66
66
 
67
67
  export const useA11yInfo = () => {
68
- const screenReaderEnabled = useContext(ScreenReaderContext)
69
- const reduceMotionEnabled = useContext(ReducedMotionContext)
68
+ const screenReaderEnabled = React.useContext(ScreenReaderContext)
69
+ const reduceMotionEnabled = React.useContext(ReducedMotionContext)
70
70
 
71
71
  return {
72
72
  reduceMotionEnabled,
@@ -1,4 +1,4 @@
1
- import React, { forwardRef } from 'react'
1
+ import React from 'react'
2
2
  import { Platform, StyleSheet, View } from 'react-native'
3
3
  import PropTypes from 'prop-types'
4
4
 
@@ -12,7 +12,7 @@ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, vie
12
12
  * It should be used to add selectable screen-reader-only text to the main document flow,
13
13
  * as a sibling to blocks of text like paragraphs and interactive elements like buttons.
14
14
  */
15
- const A11yText = forwardRef(({ text, heading, ...rest }, ref) => {
15
+ const A11yText = React.forwardRef(({ text, heading, ...rest }, ref) => {
16
16
  const selectedProps = selectProps({
17
17
  // On iOS, needs `accessible` to be true to be focusable without non-a11y content.
18
18
  // On Web, `accessible` causes RNW to set attributes that may make the element be treated as a group.
@@ -1,4 +1,4 @@
1
- import React, { forwardRef } from 'react'
1
+ import React from 'react'
2
2
  import { DURATION, MIN_EMPTY_ANGLE, MIN_STROKE_ANGLE, BEZIER, propTypes } from './shared'
3
3
  import { useA11yInfo } from '../A11yInfoProvider'
4
4
 
@@ -21,7 +21,7 @@ const bezierProps = {
21
21
  }
22
22
  // We're using svg rather than css here to define the animation to avoid needing to introduce css injection mechanism
23
23
  // It's possible to replicate this functionality with RNW animations, but it snags on chrome at least, see https://github.com/telus/universal-design-system/pull/477 for details.
24
- const Spinner = forwardRef(({ size, color, thickness, label, isStatic = false }, ref) => {
24
+ const Spinner = React.forwardRef(({ size, color, thickness, label, isStatic = false }, ref) => {
25
25
  const { reduceMotionEnabled } = useA11yInfo()
26
26
  const reduceMotion = reduceMotionEnabled || isStatic
27
27
  return (
@@ -1,4 +1,4 @@
1
- import React, { forwardRef } from 'react'
1
+ import React from 'react'
2
2
  import { Animated, Easing, StyleSheet, View } from 'react-native'
3
3
  import { DURATION, MIN_EMPTY_ANGLE, MIN_STROKE_ANGLE, BEZIER, propTypes } from './shared'
4
4
  import { useA11yInfo } from '../A11yInfoProvider'
@@ -6,7 +6,7 @@ import { useA11yInfo } from '../A11yInfoProvider'
6
6
  const ea = MIN_EMPTY_ANGLE / 2
7
7
  const sa = MIN_STROKE_ANGLE / 2
8
8
 
9
- const Spinner = forwardRef(({ size, color, thickness, label, isStatic = false }, ref) => {
9
+ const Spinner = React.forwardRef(({ size, color, thickness, label, isStatic = false }, ref) => {
10
10
  const { current: timer } = React.useRef(new Animated.Value(0))
11
11
  const { reduceMotionEnabled } = useA11yInfo()
12
12
  const reduceMotion = reduceMotionEnabled || isStatic
@@ -1,5 +1,4 @@
1
- /* eslint-disable react/require-default-props */
2
- import React, { forwardRef, useEffect, useRef, useState } from 'react'
1
+ import React from 'react'
3
2
  import PropTypes from 'prop-types'
4
3
  import { Dimensions, Platform, View, StyleSheet } from 'react-native'
5
4
  import throttle from 'lodash.throttle'
@@ -83,7 +82,7 @@ const highlight = (items = [], text = '', color) =>
83
82
  return [...acc, item]
84
83
  }, [])
85
84
 
86
- const Autocomplete = forwardRef(
85
+ const Autocomplete = React.forwardRef(
87
86
  (
88
87
  {
89
88
  children,
@@ -116,22 +115,24 @@ const Autocomplete = forwardRef(
116
115
  const isControlled = value !== undefined
117
116
 
118
117
  // We need to store current items for uncontrolled usage
119
- const [currentItems, setCurrentItems] = useState(initialItems)
118
+ const [currentItems, setCurrentItems] = React.useState(initialItems)
120
119
 
121
- const [otherItems, setOtherItems] = useState(items)
120
+ const [otherItems, setOtherItems] = React.useState(items)
122
121
 
123
122
  // We need to store the current value as well to be able to highlight it
124
- const [currentValue, setCurrentValue] = useState(value ?? initialValue)
123
+ const [currentValue, setCurrentValue] = React.useState(value ?? initialValue)
125
124
  const inputTokens = { paddingLeft: INPUT_LEFT_PADDING }
126
125
 
127
126
  // Setting up the overlay
128
- const openOverlayRef = useRef()
129
- const [isExpanded, setIsExpanded] = useState((value ?? initialValue)?.length >= minToSuggestion)
130
- const [isFocused, setisFocused] = useState(false)
131
- const [sourceLayout, setSourceLayout] = useState(null)
127
+ const openOverlayRef = React.useRef()
128
+ const [isExpanded, setIsExpanded] = React.useState(
129
+ (value ?? initialValue)?.length >= minToSuggestion
130
+ )
131
+ const [isFocused, setisFocused] = React.useState(false)
132
+ const [sourceLayout, setSourceLayout] = React.useState(null)
132
133
 
133
134
  // When it's nested, selected value
134
- const [nestedSelectedValue, setNestedSelectedValue] = useState(null)
135
+ const [nestedSelectedValue, setNestedSelectedValue] = React.useState(null)
135
136
 
136
137
  const { supportsProps, ...selectedProps } = selectProps(rest)
137
138
  const { hint, label: inputLabel } = supportsProps
@@ -148,7 +149,7 @@ const Autocomplete = forwardRef(
148
149
  vertical: Platform.OS !== 'web' && (hint || inputLabel) ? 28 : 4
149
150
  }
150
151
  })
151
- const targetRef = useRef(null)
152
+ const targetRef = React.useRef(null)
152
153
  // We limit the number of suggestions displayed to avoid huge lists
153
154
  // TODO: add a way to make the `Listbox` occupy fixed height and be scrollable
154
155
  // within that height, which will unlock similar behaviour for `AutoComplete` as well
@@ -157,7 +158,7 @@ const Autocomplete = forwardRef(
157
158
 
158
159
  const getCopy = useCopy({ dictionary, copy })
159
160
  // Tracking input width changes to resize the listbox overlay accordingly
160
- const [inputWidth, setInputWidth] = useState()
161
+ const [inputWidth, setInputWidth] = React.useState()
161
162
  useSafeLayoutEffect(() => {
162
163
  if (Platform.OS === 'web') {
163
164
  const updateInputWidth = () => {
@@ -227,7 +228,7 @@ const Autocomplete = forwardRef(
227
228
  * within the list, if doesn't exist the nested item is added to the top of the list,
228
229
  * the nested item is added with an id equal "0"
229
230
  */
230
- useEffect(() => {
231
+ React.useEffect(() => {
231
232
  if (nestedSelectedValue && !items.find((item) => item.id === 0)) {
232
233
  const tmpItems = [...items]
233
234
  tmpItems.unshift({ label: nestedSelectedValue, title: true, id: 0 })
@@ -5,14 +5,17 @@ import Typography from '../Typography'
5
5
  import Box from '../Box'
6
6
  import StackView from '../StackView'
7
7
 
8
- const Loading = ({ label }) => (
9
- <Box space={3}>
8
+ const Loading = React.forwardRef(({ label }, ref) => (
9
+ <Box space={3} ref={ref}>
10
10
  <StackView direction="row" space={2} tokens={{ alignItems: 'center' }}>
11
11
  <ActivityIndicator variant={{ size: 'large' }} />
12
12
  <Typography>{label}</Typography>
13
13
  </StackView>
14
14
  </Box>
15
- )
15
+ ))
16
+
17
+ Loading.displayName = 'Loading'
18
+
16
19
  Loading.propTypes = { label: PropTypes.string }
17
20
 
18
21
  export default Loading
@@ -1,11 +1,11 @@
1
- import React, { forwardRef } from 'react'
1
+ import React from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import A11yText from '../A11yText'
4
4
  import Typography from '../Typography'
5
5
  import Box from '../Box'
6
6
  import Listbox from '../Listbox'
7
7
 
8
- const Suggestions = forwardRef(
8
+ const Suggestions = React.forwardRef(
9
9
  ({ hasResults, items = [], noResults, onClose, onSelect, parentRef }, ref) => {
10
10
  const pressableItems = items.map(({ id, ...rest }) => ({
11
11
  id,
@@ -1,4 +1,4 @@
1
- import React, { forwardRef } from 'react'
1
+ import React from 'react'
2
2
  import { View, StyleSheet } from 'react-native'
3
3
  import PropTypes from 'prop-types'
4
4
  import { useThemeTokens } from '../ThemeProvider'
@@ -32,7 +32,7 @@ const getTypographyTokens = ({ fontName, fontWeight, color }) => ({ fontName, fo
32
32
 
33
33
  const getTypographyVariant = ({ fontSize }) => ({ size: fontSizeMapping[fontSize] })
34
34
 
35
- const Badge = forwardRef(({ children, tokens, variant = {}, ...rest }, ref) => {
35
+ const Badge = React.forwardRef(({ children, tokens, variant = {}, ...rest }, ref) => {
36
36
  const themeTokens = useThemeTokens('Badge', tokens, variant)
37
37
 
38
38
  return (
@@ -1,8 +1,8 @@
1
- import React, { createContext, useContext, useEffect, useState } from 'react'
1
+ import React from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import { Platform } from 'react-native'
4
4
 
5
- const HydrationContext = createContext()
5
+ const HydrationContext = React.createContext()
6
6
  const isSSR = typeof window === 'undefined'
7
7
  const hasWebStyleTag = () => {
8
8
  if (isSSR || Platform.OS !== 'web' || typeof document !== 'object') {
@@ -18,15 +18,15 @@ const hasWebStyleTag = () => {
18
18
  * during the very first client-side render or hydration, but not available on the server,
19
19
  * to ensure no changes happen until the original SSR DOM has been hydrated.
20
20
  */
21
- export const useHydrationContext = () => useContext(HydrationContext)
21
+ export const useHydrationContext = () => React.useContext(HydrationContext)
22
22
 
23
23
  /**
24
24
  * Allows components and hooks to observe if SSR hydration is currently in progress
25
25
  * and if so, to re-render with content that differs to the server when it is complete.
26
26
  */
27
27
  export const HydrationProvider = ({ children }) => {
28
- const [hasMounted, setHasMounted] = useState(false)
29
- useEffect(() => {
28
+ const [hasMounted, setHasMounted] = React.useState(false)
29
+ React.useEffect(() => {
30
30
  setHasMounted(true)
31
31
  }, [])
32
32
 
package/src/Box/Box.jsx CHANGED
@@ -1,4 +1,4 @@
1
- import React, { forwardRef, useEffect, useState } from 'react'
1
+ import React from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import { View, ScrollView, Platform, StyleSheet, ImageBackground, Image } from 'react-native'
4
4
  import { useThemeTokens } from '../ThemeProvider'
@@ -181,7 +181,7 @@ const setBackgroundImage = ({
181
181
  * text content is inside a scrollable box, as screens are not scrollable by default and even very
182
182
  * short text will require scrolling on small devices at the highest accessibility text scaling settings.
183
183
  */
184
- const Box = forwardRef(
184
+ const Box = React.forwardRef(
185
185
  (
186
186
  {
187
187
  space,
@@ -230,8 +230,8 @@ const Box = forwardRef(
230
230
  const backgroundImageResizeMode = useResponsiveProp(resizeMode, 'cover')
231
231
  const backgroundImagePosition = useResponsiveProp(position, 'none')
232
232
  const backgroundImageAlign = useResponsiveProp(align, 'stretch')
233
- const [backgroundImageWidth, setBackgroundImageWidth] = useState(0)
234
- const [backgroundImageHeight, setBackgroundImageHeight] = useState(0)
233
+ const [backgroundImageWidth, setBackgroundImageWidth] = React.useState(0)
234
+ const [backgroundImageHeight, setBackgroundImageHeight] = React.useState(0)
235
235
  if (backgroundImage)
236
236
  content = setBackgroundImage({
237
237
  src,
@@ -244,7 +244,7 @@ const Box = forwardRef(
244
244
  content
245
245
  })
246
246
 
247
- useEffect(() => {
247
+ React.useEffect(() => {
248
248
  if (backgroundImage && backgroundImageWidth === 0 && backgroundImageHeight === 0) {
249
249
  Image.getSize(src, (width, height) => {
250
250
  // Only update the state if the size has changed
@@ -1,4 +1,4 @@
1
- import React, { forwardRef } from 'react'
1
+ import React from 'react'
2
2
 
3
3
  import ButtonBase from './ButtonBase'
4
4
  import buttonPropTypes, { textAndA11yText } from './propTypes'
@@ -6,14 +6,16 @@ import { useThemeTokensCallback } from '../ThemeProvider'
6
6
  import { a11yProps } from '../utils/props'
7
7
  import { useViewport } from '../ViewportProvider'
8
8
 
9
- const Button = forwardRef(({ accessibilityRole = 'button', tokens, variant, ...props }, ref) => {
10
- const viewport = useViewport()
11
- const buttonVariant = { viewport, ...variant }
12
- const getTokens = useThemeTokensCallback('Button', tokens, buttonVariant)
13
- return (
14
- <ButtonBase {...props} tokens={getTokens} accessibilityRole={accessibilityRole} ref={ref} />
15
- )
16
- })
9
+ const Button = React.forwardRef(
10
+ ({ accessibilityRole = 'button', tokens, variant, ...props }, ref) => {
11
+ const viewport = useViewport()
12
+ const buttonVariant = { viewport, ...variant }
13
+ const getTokens = useThemeTokensCallback('Button', tokens, buttonVariant)
14
+ return (
15
+ <ButtonBase {...props} tokens={getTokens} accessibilityRole={accessibilityRole} ref={ref} />
16
+ )
17
+ }
18
+ )
17
19
  Button.displayName = 'Button'
18
20
 
19
21
  Button.propTypes = {
@@ -1,4 +1,4 @@
1
- import React, { forwardRef } from 'react'
1
+ import React from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import { Pressable, View, StyleSheet, Platform } from 'react-native'
4
4
 
@@ -185,7 +185,7 @@ const selectItemIconTokens = ({ color, iconColor, iconSize }) => ({
185
185
  color: iconColor || color
186
186
  })
187
187
 
188
- const ButtonBase = forwardRef(
188
+ const ButtonBase = React.forwardRef(
189
189
  (
190
190
  {
191
191
  id,
@@ -303,7 +303,6 @@ ButtonBase.propTypes = {
303
303
  ...selectedSystemPropTypes,
304
304
  ...buttonPropTypes
305
305
  }
306
- ButtonBase.defaultProps = { id: undefined }
307
306
 
308
307
  const staticStyles = StyleSheet.create({
309
308
  row: {
@@ -1,4 +1,4 @@
1
- import React, { forwardRef } from 'react'
1
+ import React from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import { Platform, Text, View } from 'react-native'
4
4
  import buttonPropTypes, { textAndA11yText } from './propTypes'
@@ -50,7 +50,7 @@ const selectIconTokens = ({
50
50
  }
51
51
  })
52
52
 
53
- const ButtonDropdown = forwardRef(
53
+ const ButtonDropdown = React.forwardRef(
54
54
  (
55
55
  {
56
56
  value,
@@ -1,4 +1,4 @@
1
- import React, { forwardRef } from 'react'
1
+ import React from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import ABBPropTypes from 'airbnb-prop-types'
4
4
  import { Platform } from 'react-native'
@@ -30,7 +30,7 @@ const [selectItemProps, selectedItemPropTypes] = selectSystemProps([
30
30
  viewProps
31
31
  ])
32
32
 
33
- const ButtonGroup = forwardRef(
33
+ const ButtonGroup = React.forwardRef(
34
34
  (
35
35
  {
36
36
  variant,
@@ -1,4 +1,4 @@
1
- import React, { forwardRef } from 'react'
1
+ import React from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import ButtonBase from './ButtonBase'
4
4
  import buttonPropTypes, { textAndA11yText } from './propTypes'
@@ -10,7 +10,7 @@ import { useViewport } from '../ViewportProvider'
10
10
  * `ButtonLink` is a component with the semantics and behaviour of a link, but with the visual appearance of a button.
11
11
  * ButtonLink is a block-level component and should not be used inline.
12
12
  */
13
- const ButtonLink = forwardRef(
13
+ const ButtonLink = React.forwardRef(
14
14
  ({ accessibilityRole = 'link', tokens, variant, dataSet, ...props }, ref) => {
15
15
  const { hrefAttrs, rest } = hrefAttrsProp.bundle(props)
16
16
  const viewport = useViewport()
package/src/Card/Card.jsx CHANGED
@@ -1,7 +1,6 @@
1
- import React, { forwardRef } from 'react'
1
+ import React from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import { View } from 'react-native'
4
-
5
4
  import {
6
5
  useThemeTokens,
7
6
  useThemeTokensCallback,
@@ -13,9 +12,45 @@ import { useViewport } from '../ViewportProvider'
13
12
  import { a11yProps, selectSystemProps, viewProps } from '../utils/props'
14
13
  import CardBase from './CardBase'
15
14
  import PressableCardBase from './PressableCardBase'
15
+ import CheckboxButton from '../Checkbox/CheckboxButton'
16
+ import RadioButton from '../Radio/RadioButton'
16
17
 
17
18
  const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
18
19
 
20
+ const SelectionType = {
21
+ Checkbox: 'checkbox',
22
+ Radio: 'radiogroup',
23
+ None: undefined
24
+ }
25
+
26
+ const selectInputStyle = ({ paddingTop, paddingRight }) => ({
27
+ position: 'absolute',
28
+ top: paddingTop,
29
+ right: paddingRight
30
+ })
31
+
32
+ const getInputProps = ({
33
+ id,
34
+ checkColor,
35
+ boxBackgroundColor,
36
+ checkBackgroundColor,
37
+ isControlled,
38
+ isChecked,
39
+ isInactive,
40
+ handleChange
41
+ }) => ({
42
+ inputId: id,
43
+ tokens: {
44
+ iconColor: checkColor,
45
+ inputBackgroundColor: boxBackgroundColor,
46
+ iconBackgroundColor: checkBackgroundColor
47
+ },
48
+ isControlled,
49
+ isChecked,
50
+ inactive: isInactive,
51
+ handleChange
52
+ })
53
+
19
54
  /**
20
55
  * A basic card component, unstyled by default.
21
56
  *
@@ -64,8 +99,8 @@ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, vie
64
99
  * you automatically make inaccessible its children, which may or may not be appropriate
65
100
  * depending on what you are trying to achieve.
66
101
  */
67
- const Card = forwardRef(
68
- ({ children, tokens, variant, dataSet, onPress, interactiveCard, ...rest }, ref) => {
102
+ const Card = React.forwardRef(
103
+ ({ children, tokens, variant, dataSet, onPress, id, interactiveCard, ...rest }, ref) => {
69
104
  const viewport = useViewport()
70
105
  const { themeOptions } = useTheme()
71
106
 
@@ -80,13 +115,60 @@ const Card = forwardRef(
80
115
  !enableMediaQueryStyleSheet && { viewport }
81
116
  )
82
117
 
118
+ const selected = interactiveCard?.variant?.selected
119
+ const inactive = interactiveCard?.variant?.inactive
120
+ const selectionType = interactiveCard?.selectionType
121
+
83
122
  const getThemeTokens = useThemeTokensCallback('Card', interactiveCard?.tokens, {
84
123
  interactive: true,
85
124
  ...(interactiveCard?.variant || {})
86
125
  })
87
126
  // When interactive area is present, spacing tokens should only be applied
88
127
  // to individual Card sections, not Card as a whole
89
- const { paddingTop, paddingBottom, paddingLeft, paddingRight, ...restOfTokens } = themeTokens
128
+ const { paddingTop, paddingBottom, paddingLeft, paddingRight, ...restOfTokens } = selectionType
129
+ ? getThemeTokens()
130
+ : themeTokens
131
+
132
+ const {
133
+ inputBackgroundColor,
134
+ iconBackgroundColor,
135
+ iconColor,
136
+ icon,
137
+ inputBorderRadius,
138
+ inputHeight,
139
+ inputWidth,
140
+ iconSize,
141
+ inputShadow,
142
+ inputBorderWidth,
143
+ inputBorderColor
144
+ } = getThemeTokens()
145
+
146
+ const checkboxTokens = {
147
+ inputBackgroundColor,
148
+ iconBackgroundColor,
149
+ icon,
150
+ iconColor,
151
+ inputBorderRadius,
152
+ inputHeight,
153
+ inputWidth,
154
+ iconSize,
155
+ inputShadow,
156
+ inputBorderWidth,
157
+ inputBorderColor
158
+ }
159
+
160
+ const radioTokens = {
161
+ iconBackgroundColor,
162
+ iconColor,
163
+ containerShadow: inputShadow,
164
+ icon,
165
+ inputBackgroundColor,
166
+ inputBorderRadius,
167
+ inputSize: inputHeight,
168
+ checkedSize: iconSize,
169
+ inputBorderWidth,
170
+ inputBorderColor
171
+ }
90
172
 
91
173
  let cardStyles
92
174
  let mediaIds
@@ -103,6 +185,29 @@ const Card = forwardRef(
103
185
  cardStyles = themeTokens
104
186
  }
105
187
 
188
+ const renderInputPerSelectionType = (props) => {
189
+ switch (selectionType) {
190
+ case SelectionType.Checkbox:
191
+ return (
192
+ <View style={selectInputStyle(getThemeTokens())}>
193
+ <CheckboxButton {...props} tokens={{ ...checkboxTokens, ...props?.tokens }} />
194
+ </View>
195
+ )
196
+ case SelectionType.Radio:
197
+ return (
198
+ <View style={selectInputStyle(getThemeTokens())}>
199
+ <RadioButton {...props} tokens={{ ...radioTokens, ...props?.tokens }} />
200
+ </View>
201
+ )
202
+ default:
203
+ return null
204
+ }
205
+ }
206
+
207
+ const renderNoSelectionView = () => (
208
+ <View style={{ paddingTop, paddingBottom, paddingLeft, paddingRight }}>{children}</View>
209
+ )
210
+
106
211
  return (
107
212
  <>
108
213
  <CardBase
@@ -120,13 +225,40 @@ const Card = forwardRef(
120
225
  onPress={onPress}
121
226
  {...selectProps(rest)}
122
227
  >
123
- {interactiveCard?.body}
228
+ {(cardState) => {
229
+ const {
230
+ iconColor: checkColor,
231
+ inputBackgroundColor: boxBackgroundColor,
232
+ iconBackgroundColor: checkBackgroundColor
233
+ } = getThemeTokens(
234
+ {
235
+ ...cardState,
236
+ selected,
237
+ interactive: true,
238
+ isControl: true
239
+ },
240
+ interactiveCard?.tokens
241
+ )
242
+ return (
243
+ <>
244
+ {renderInputPerSelectionType(
245
+ getInputProps({
246
+ id,
247
+ checkColor,
248
+ boxBackgroundColor,
249
+ checkBackgroundColor,
250
+ isControlled: true,
251
+ isChecked: selected || cardState?.hover,
252
+ isInactive: inactive,
253
+ onPress
254
+ })
255
+ )}
256
+ {interactiveCard?.body}
257
+ </>
258
+ )
259
+ }}
124
260
  </PressableCardBase>
125
- {children ? (
126
- <View style={{ paddingTop, paddingBottom, paddingLeft, paddingRight }}>
127
- {children}
128
- </View>
129
- ) : null}
261
+ {children && selectionType !== SelectionType.None ? renderNoSelectionView() : null}
130
262
  </>
131
263
  ) : (
132
264
  children
@@ -158,15 +290,23 @@ Card.propTypes = {
158
290
  * Note: This is only available when `interactiveCard` prop is used.
159
291
  */
160
292
  onPress: PropTypes.func,
293
+ /**
294
+ * Card ID.
295
+ */
296
+ id: PropTypes.string,
161
297
  /**
162
298
  * Object to set interactive card's properties
163
299
  * - body: The body of the interactive card, can be any renderable node
164
300
  * - tokens: The tokens to be used for the interactive card
301
+ * - selectionType: If the card has `isControl` variant set to `true`, the selectionType can have one of the following options:
302
+ - `radiogroup`
303
+ - `checkbox`
165
304
  * - variant: The variant to be used for the interactive card
166
305
  */
167
306
  interactiveCard: PropTypes.shape({
168
307
  body: PropTypes.node,
169
308
  tokens: getTokensPropType('Card'),
309
+ selectionType: PropTypes.oneOf(Object.values(SelectionType)),
170
310
  variant: variantProp.propType
171
311
  })
172
312
  }
@@ -1,4 +1,4 @@
1
- import React, { forwardRef } from 'react'
1
+ import React from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import { View, Platform } from 'react-native'
4
4
 
@@ -50,7 +50,7 @@ const selectStyles = ({
50
50
  * A themeless base component for Card which components can apply theme tokens to. Not
51
51
  * intended to be used in apps or sites directly: build themed components on top of this.
52
52
  */
53
- const CardBase = forwardRef(({ children, tokens, dataSet, ...rest }, ref) => {
53
+ const CardBase = React.forwardRef(({ children, tokens, dataSet, ...rest }, ref) => {
54
54
  const cardStyle = selectStyles(typeof tokens === 'function' ? tokens() : tokens)
55
55
  const props = selectProps(rest)
56
56
  return (
@@ -1,4 +1,4 @@
1
- import React, { forwardRef } from 'react'
1
+ import React from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import { Pressable, Platform } from 'react-native'
4
4
 
@@ -8,7 +8,6 @@ import {
8
8
  a11yProps,
9
9
  clickProps,
10
10
  focusHandlerProps,
11
- getTokenNames,
12
11
  getTokensSetPropType,
13
12
  linkProps,
14
13
  resolvePressableState,
@@ -28,7 +27,22 @@ const [selectProps, selectedSystemPropTypes] = selectSystemProps([
28
27
  ])
29
28
 
30
29
  const tokenKeys = [
31
- ...getTokenNames('Card'),
30
+ 'flex',
31
+ 'backgroundColor',
32
+ 'borderColor',
33
+ 'gradient',
34
+ 'borderRadius',
35
+ 'borderWidth',
36
+ 'paddingBottom',
37
+ 'paddingLeft',
38
+ 'paddingRight',
39
+ 'paddingTop',
40
+ 'minWidth',
41
+ 'shadow',
42
+ 'contentAlignItems',
43
+ 'contentJustifyContent',
44
+ 'contentFlexGrow',
45
+ 'contentFlexShrink',
32
46
 
33
47
  // Outer border tokens. TODO: centralise common token sets like these as part of
34
48
  // https://github.com/telus/universal-design-system/issues/782
@@ -44,7 +58,7 @@ export const selectPressableCardTokens = (tokens) =>
44
58
  * based on these to an outer border and a base Card component. Not intended to be used in
45
59
  * apps or sites directly: build themed components on top of this.
46
60
  */
47
- const PressableCardBase = forwardRef(
61
+ const PressableCardBase = React.forwardRef(
48
62
  (
49
63
  {
50
64
  children,