@telus-uds/components-base 1.84.0 → 1.85.0

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 +18 -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 +5 -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 +5 -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 +35 -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
@@ -0,0 +1,249 @@
1
+ import React from 'react'
2
+ import PropTypes from 'prop-types'
3
+ import {
4
+ a11yProps,
5
+ focusHandlerProps,
6
+ containUniqueFields,
7
+ selectSystemProps,
8
+ useMultipleInputValues,
9
+ useInputValue,
10
+ useCopy,
11
+ viewProps,
12
+ variantProp,
13
+ getTokensPropType,
14
+ copyPropTypes
15
+ } from '../utils'
16
+ import defaultDictionary from './dictionary'
17
+ import { useViewport } from '../ViewportProvider'
18
+ import { useThemeTokens } from '../ThemeProvider'
19
+ import StackView, { StackWrap } from '../StackView'
20
+ import Card from '../Card'
21
+ import Fieldset from '../Fieldset'
22
+
23
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
24
+ const [selectItemProps, selectedItemPropTypes] = selectSystemProps([
25
+ a11yProps,
26
+ focusHandlerProps,
27
+ viewProps
28
+ ])
29
+ const uniqueFields = ['id']
30
+
31
+ const CardGroup = React.forwardRef(
32
+ (
33
+ {
34
+ copy = 'en',
35
+ tokens = {},
36
+ variant = {},
37
+ items = [],
38
+ validation,
39
+ feedback,
40
+ initialCheckedIds,
41
+ checkedIds,
42
+ onChange,
43
+ role = 'radiogroup',
44
+ isInactive,
45
+ name: inputGroupName,
46
+ dictionary = defaultDictionary,
47
+ ...rest
48
+ },
49
+ ref
50
+ ) => {
51
+ const getCopy = useCopy({ dictionary, copy })
52
+ const viewport = useViewport()
53
+ const cardGroupTokens = useThemeTokens('CardGroup', tokens, variant, { viewport })
54
+ const {
55
+ space,
56
+ fieldSpace,
57
+ direction,
58
+ showIcon,
59
+ outlineWidth,
60
+ borderTopLeftRadius,
61
+ borderTopRightRadius,
62
+ borderBottomLeftRadius,
63
+ borderBottomRightRadius,
64
+ outlineOffset,
65
+ paddingTop,
66
+ paddingBottom,
67
+ paddingLeft,
68
+ paddingRight
69
+ } = cardGroupTokens
70
+
71
+ const borderTokens = {
72
+ outlineWidth,
73
+ borderTopLeftRadius,
74
+ borderTopRightRadius,
75
+ borderBottomLeftRadius,
76
+ borderBottomRightRadius,
77
+ outlineOffset
78
+ }
79
+
80
+ const singleSelection = role === 'radiogroup'
81
+
82
+ const inputControl = {
83
+ value: checkedIds,
84
+ initialValue: initialCheckedIds,
85
+ onChange,
86
+ readOnly: isInactive
87
+ }
88
+ const singleInputValue = useInputValue(inputControl)
89
+ const multipleInputValues = useMultipleInputValues(inputControl)
90
+
91
+ const StackContainer = direction === 'row' ? StackWrap : StackView
92
+
93
+ if (!containUniqueFields(items, uniqueFields)) {
94
+ throw new Error(`CardGroup items must have unique ${uniqueFields.join(', ')}`)
95
+ }
96
+
97
+ const handleChange = React.useCallback(
98
+ (checked, event, cardId, itemOnChange) => {
99
+ if (checked && singleSelection) {
100
+ singleInputValue.setValue(cardId, event)
101
+ } else {
102
+ multipleInputValues.toggleOneValue(cardId, event)
103
+ }
104
+ return itemOnChange?.(checked, event)
105
+ },
106
+ [singleInputValue, multipleInputValues, singleSelection]
107
+ )
108
+
109
+ return (
110
+ <Fieldset
111
+ copy={copy}
112
+ ref={ref}
113
+ name={inputGroupName}
114
+ space={fieldSpace}
115
+ feedback={feedback}
116
+ validation={validation}
117
+ tokens={borderTokens}
118
+ inactive={isInactive}
119
+ showErrorBorder
120
+ showIcon={showIcon}
121
+ accessibilityRole={role}
122
+ {...selectProps(rest)}
123
+ >
124
+ {(props) => (
125
+ <StackContainer space={space}>
126
+ {items.map(
127
+ ({ id, interactiveCard, card, onPress: itemOnChange, ...itemRest }, index) => {
128
+ const cardId = id || `${getCopy('prefixId')}[${index}]`
129
+ const itemHandleChange = (checked, event) =>
130
+ handleChange(checked, event, cardId, itemOnChange)
131
+
132
+ return (
133
+ <Card
134
+ id={cardId}
135
+ key={cardId}
136
+ onPress={itemHandleChange}
137
+ interactiveCard={{
138
+ ...interactiveCard,
139
+ tokens: {
140
+ paddingTop,
141
+ paddingBottom,
142
+ paddingLeft,
143
+ paddingRight,
144
+ ...interactiveCard?.tokens
145
+ },
146
+ variant: {
147
+ isControl: true,
148
+ selected: singleSelection
149
+ ? singleInputValue.currentValue === cardId
150
+ : multipleInputValues.currentValues.includes(cardId),
151
+ inactive: isInactive
152
+ },
153
+ selectionType: role
154
+ }}
155
+ {...selectItemProps(itemRest)}
156
+ {...props}
157
+ >
158
+ {card?.body}
159
+ </Card>
160
+ )
161
+ }
162
+ )}
163
+ </StackContainer>
164
+ )}
165
+ </Fieldset>
166
+ )
167
+ }
168
+ )
169
+
170
+ CardGroup.displayName = 'CardGroup'
171
+
172
+ const dictionaryContentShape = PropTypes.shape({
173
+ prefixId: PropTypes.string.isRequired
174
+ })
175
+
176
+ CardGroup.propTypes = {
177
+ ...selectedSystemPropTypes,
178
+ copy: copyPropTypes,
179
+ /**
180
+ * Override the default dictionary, by passing the complete dictionary object for `en` and `fr`
181
+ */
182
+ dictionary: PropTypes.shape({
183
+ en: dictionaryContentShape,
184
+ fr: dictionaryContentShape
185
+ }),
186
+ /**
187
+ * Optional theme token overrides for the outer RadioCardGroup component
188
+ */
189
+ tokens: getTokensPropType('CardGroup'),
190
+ /**
191
+ * Theme variants, shared between both RadioCardGroup and RadioCard
192
+ */
193
+ variant: variantProp.propType,
194
+ /**
195
+ * Array of objects containing specifics for each Card to be rendered in the group.
196
+ */
197
+ items: PropTypes.arrayOf(
198
+ PropTypes.exact({
199
+ ...selectedItemPropTypes,
200
+ id: PropTypes.string,
201
+ interactiveCard: PropTypes.object,
202
+ card: PropTypes.object,
203
+ onPress: PropTypes.func
204
+ })
205
+ ),
206
+ /**
207
+ * Current validation status of the group, passed to the feedback element if there is one.
208
+ */
209
+ validation: PropTypes.oneOf(['error', 'success']),
210
+ /**
211
+ * If provided, a Feedback element is rendered containing this text.
212
+ */
213
+ feedback: PropTypes.string,
214
+ /**
215
+ * If provided, the card with this id is selected on first render.
216
+ * If the role is radiogroup, it's a string
217
+ * If the role is checkbox, it's a array of string.
218
+ * Can have 'null' as value
219
+ */
220
+ initialCheckedIds: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),
221
+ /**
222
+ * If not undefined, the card with this id is selected (or none is selected if `null`), and the
223
+ * element's selection state will be controlled by its parent using the `onChange` function.
224
+ * If the role is radiogroup, it's a string
225
+ * If the role is checkbox, it's a array of string.
226
+ * Can have 'null' as value
227
+ */
228
+ checkedIds: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),
229
+ /**
230
+ * Function to call on change in selection state. Is required if the selection state is controlled
231
+ * by a parent using checkedId and the input is not readOnly.
232
+ */
233
+ onChange: PropTypes.func,
234
+ /**
235
+ * Renders the card group like a radio card group or a checkbox card group
236
+ */
237
+ role: PropTypes.oneOf(['radiogroup', 'checkbox']),
238
+ /**
239
+ * If true, the card cannot be interacted with, elements are set as `disabled` and if the
240
+ * theme supports `inactive` appearances rules, these are applied.
241
+ */
242
+ isInactive: PropTypes.bool,
243
+ /**
244
+ * On Web, this is passed to the `name` attribute of the fieldset and each input.
245
+ */
246
+ name: PropTypes.string
247
+ }
248
+
249
+ export default CardGroup
@@ -0,0 +1,8 @@
1
+ export default {
2
+ en: {
3
+ prefixId: 'Card'
4
+ },
5
+ fr: {
6
+ prefixId: 'Carte'
7
+ }
8
+ }
@@ -0,0 +1,3 @@
1
+ import CardGroup from './CardGroup'
2
+
3
+ export default CardGroup
@@ -1,4 +1,4 @@
1
- import React, { useState, useRef, useEffect, useCallback, useMemo, forwardRef } from 'react'
1
+ import React from 'react'
2
2
  import { View, Animated, PanResponder, StyleSheet, Platform, Dimensions } from 'react-native'
3
3
  import PropTypes from 'prop-types'
4
4
  import { useThemeTokens } from '../ThemeProvider'
@@ -170,7 +170,7 @@ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, vie
170
170
  - `spaceBetweenSlideAndPreviousNextNavigation` - Horizontal space between slide and previous/next navigational buttons
171
171
  - `spaceBetweenSlideAndPanelNavigation` - Vertical space between slide area and panel navigation area
172
172
  */
173
- const Carousel = forwardRef(
173
+ const Carousel = React.forwardRef(
174
174
  (
175
175
  {
176
176
  tokens,
@@ -230,45 +230,46 @@ const Carousel = forwardRef(
230
230
  showPanelTabs,
231
231
  spaceBetweenSlideAndPreviousNextNavigation
232
232
  } = themeTokens
233
- const [activeIndex, setActiveIndex] = useState(0)
234
- const activeIndexRef = useRef(activeIndex)
233
+ const [activeIndex, setActiveIndex] = React.useState(0)
234
+ const activeIndexRef = React.useRef(activeIndex)
235
235
  const { reduceMotionEnabled } = useA11yInfo()
236
- const reduceMotionRef = useRef(reduceMotionEnabled)
236
+ const reduceMotionRef = React.useRef(reduceMotionEnabled)
237
237
  const [containerLayout, setContainerLayout] = React.useState({
238
238
  x: 0,
239
239
  y: 0,
240
240
  width: 0
241
241
  })
242
- const containerLayoutRef = useRef(containerLayout)
243
-
244
- const [previousNextNavigationButtonWidth, setPreviousNextNavigationButtonWidth] = useState(0)
245
- const firstFocusRef = useRef(null)
246
- const pan = useRef(new Animated.ValueXY()).current
247
- const animatedX = useRef(0)
248
- const animatedY = useRef(0)
249
- const [isAnimating, setIsAnimating] = useState(false)
242
+ const containerLayoutRef = React.useRef(containerLayout)
243
+
244
+ const [previousNextNavigationButtonWidth, setPreviousNextNavigationButtonWidth] =
245
+ React.useState(0)
246
+ const firstFocusRef = React.useRef(null)
247
+ const pan = React.useRef(new Animated.ValueXY()).current
248
+ const animatedX = React.useRef(0)
249
+ const animatedY = React.useRef(0)
250
+ const [isAnimating, setIsAnimating] = React.useState(false)
250
251
  /**
251
252
  * While having the same starting point, `isAutoPlayEnabled` and `isCarouselPlaying` are different states
252
253
  *
253
254
  * `isAutoPlayEnabled` is a state to determine if the autoplay feature is enabled or disabled
254
255
  * `isCarouselPlaying` is a state to determine if the carousel is currently playing or paused
255
256
  */
256
- const [isAutoPlayEnabled, setIsAutoPlayEnabled] = useState(autoPlayFeatureEnabled)
257
- const [isCarouselPlaying, setisCarouselPlaying] = useState(autoPlayFeatureEnabled)
258
- const isSwiping = useRef(false)
259
- const autoPlayRef = useRef(null)
257
+ const [isAutoPlayEnabled, setIsAutoPlayEnabled] = React.useState(autoPlayFeatureEnabled)
258
+ const [isCarouselPlaying, setisCarouselPlaying] = React.useState(autoPlayFeatureEnabled)
259
+ const isSwiping = React.useRef(false)
260
+ const autoPlayRef = React.useRef(null)
260
261
 
261
262
  const isFirstSlide = !activeIndex
262
263
  const isLastSlide = activeIndex + 1 >= childrenArray.length
263
264
 
264
- const handleAnimationStart = useCallback(
265
+ const handleAnimationStart = React.useCallback(
265
266
  (...args) => {
266
267
  if (typeof onAnimationStart === 'function') onAnimationStart(...args)
267
268
  setIsAnimating(true)
268
269
  },
269
270
  [onAnimationStart]
270
271
  )
271
- const handleAnimationEnd = useCallback(
272
+ const handleAnimationEnd = React.useCallback(
272
273
  (...args) => {
273
274
  if (typeof onAnimationEnd === 'function') onAnimationEnd(...args)
274
275
  setIsAnimating(false)
@@ -276,7 +277,7 @@ const Carousel = forwardRef(
276
277
  [onAnimationEnd]
277
278
  )
278
279
 
279
- const updateOffset = useCallback(() => {
280
+ const updateOffset = React.useCallback(() => {
280
281
  animatedX.current = containerLayoutRef.current.width * activeIndexRef.current * -1
281
282
  animatedY.current = 0
282
283
  pan.setOffset({
@@ -286,7 +287,7 @@ const Carousel = forwardRef(
286
287
  pan.setValue({ x: 0, y: 0 })
287
288
  }, [pan, animatedX])
288
289
 
289
- const animate = useCallback(
290
+ const animate = React.useCallback(
290
291
  (toValue, toIndex) => {
291
292
  const handleAnimationEndToIndex = (...args) => handleAnimationEnd(toIndex, ...args)
292
293
  if (reduceMotionRef.current || isSwiping.current) {
@@ -311,13 +312,19 @@ const Carousel = forwardRef(
311
312
  [pan, springConfig, handleAnimationEnd, transitionDuration, isAutoPlayEnabled]
312
313
  )
313
314
 
314
- const stopAutoplay = useCallback(() => {
315
+ const stopAutoplay = React.useCallback(() => {
315
316
  if (autoPlayRef?.current) {
316
317
  clearTimeout(autoPlayRef?.current)
317
318
  }
318
319
  }, [])
319
320
 
320
- const updateIndex = useCallback(
321
+ const triggerRefocus = React.useCallback(() => {
322
+ if (refocus && Platform.OS === 'web') {
323
+ firstFocusRef.current?.focus({ preventScroll: true, focusVisible: false })
324
+ }
325
+ }, [refocus, firstFocusRef])
326
+
327
+ const updateIndex = React.useCallback(
321
328
  (delta = 1, transitionMode) => {
322
329
  const toValue = { x: 0, y: 0 }
323
330
  let skipChanges = !delta
@@ -354,7 +361,7 @@ const Carousel = forwardRef(
354
361
  updateOffset()
355
362
  handleAnimationStart(activeIndexRef.current)
356
363
  updateIndex(slideDuration < 0 ? -1 : 1, TRANSITION_MODES.AUTOMATIC)
357
- if (refocus) firstFocusRef.current?.focus()
364
+ triggerRefocus()
358
365
  }, Math.abs(slideDuration) * 1000)
359
366
  }
360
367
  }
@@ -363,7 +370,7 @@ const Carousel = forwardRef(
363
370
  },
364
371
  [
365
372
  handleAnimationStart,
366
- refocus,
373
+ triggerRefocus,
367
374
  slideDuration,
368
375
  updateOffset,
369
376
  animate,
@@ -375,19 +382,19 @@ const Carousel = forwardRef(
375
382
  ]
376
383
  )
377
384
 
378
- const startAutoplay = useCallback(() => {
385
+ const startAutoplay = React.useCallback(() => {
379
386
  stopAutoplay()
380
387
  if (isAutoPlayEnabled) {
381
388
  autoPlayRef.current = setTimeout(() => {
382
389
  updateOffset()
383
390
  handleAnimationStart(activeIndexRef.current)
384
391
  updateIndex(slideDuration < 0 ? -1 : 1, TRANSITION_MODES.AUTOMATIC)
385
- if (refocus && Platform.OS === 'web') firstFocusRef.current?.focus()
392
+ triggerRefocus()
386
393
  }, Math.abs(slideDuration) * 1000)
387
394
  }
388
395
  }, [
389
396
  handleAnimationStart,
390
- refocus,
397
+ triggerRefocus,
391
398
  updateIndex,
392
399
  updateOffset,
393
400
  slideDuration,
@@ -395,36 +402,36 @@ const Carousel = forwardRef(
395
402
  isAutoPlayEnabled
396
403
  ])
397
404
 
398
- const fixOffsetAndGo = useCallback(
405
+ const fixOffsetAndGo = React.useCallback(
399
406
  (delta, transitionMode) => {
400
407
  updateOffset()
401
408
  handleAnimationStart(activeIndexRef.current)
402
409
  updateIndex(delta, transitionMode)
403
- if (refocus && Platform.OS === 'web') firstFocusRef.current?.focus()
410
+ triggerRefocus()
404
411
  },
405
- [updateIndex, updateOffset, handleAnimationStart, refocus]
412
+ [updateIndex, updateOffset, handleAnimationStart, triggerRefocus]
406
413
  )
407
414
 
408
- const goToNeighboring = useCallback(
415
+ const goToNeighboring = React.useCallback(
409
416
  (toPrev = false, transitionMode = TRANSITION_MODES.MANUAL) => {
410
417
  fixOffsetAndGo(toPrev ? -1 : 1, transitionMode)
411
418
  },
412
419
  [fixOffsetAndGo]
413
420
  )
414
421
 
415
- useEffect(() => {
422
+ React.useEffect(() => {
416
423
  activeIndexRef.current = activeIndex
417
424
  }, [activeIndex])
418
425
 
419
- useEffect(() => {
426
+ React.useEffect(() => {
420
427
  reduceMotionRef.current = reduceMotionEnabled
421
428
  }, [reduceMotionEnabled])
422
429
 
423
- useEffect(() => {
430
+ React.useEffect(() => {
424
431
  containerLayoutRef.current = containerLayout
425
432
  }, [containerLayout])
426
433
 
427
- useEffect(() => {
434
+ React.useEffect(() => {
428
435
  pan.x.addListener(({ value }) => {
429
436
  animatedX.current = value
430
437
  })
@@ -441,7 +448,7 @@ const Carousel = forwardRef(
441
448
  }
442
449
  }, [pan.x, pan.y, startAutoplay, stopAutoplay, isCarouselPlaying])
443
450
 
444
- useEffect(() => {
451
+ React.useEffect(() => {
445
452
  const subscription = Dimensions.addEventListener('change', () => {
446
453
  updateOffset()
447
454
  })
@@ -455,13 +462,13 @@ const Carousel = forwardRef(
455
462
  }
456
463
  }, [updateOffset])
457
464
 
458
- useEffect(() => {
465
+ React.useEffect(() => {
459
466
  setIsAutoPlayEnabled(
460
467
  autoPlay && slideDuration > 0 && transitionDuration > 0 && childrenArray.length > 1
461
468
  )
462
469
  }, [autoPlay, slideDuration, transitionDuration, childrenArray.length])
463
470
 
464
- useEffect(() => {
471
+ React.useEffect(() => {
465
472
  return () => {
466
473
  stopAutoplay()
467
474
  }
@@ -479,7 +486,7 @@ const Carousel = forwardRef(
479
486
  }
480
487
  }) => setPreviousNextNavigationButtonWidth(width)
481
488
 
482
- const isSwipeAllowed = useCallback(() => {
489
+ const isSwipeAllowed = React.useCallback(() => {
483
490
  if (childrenArray.length === 1) {
484
491
  return false
485
492
  }
@@ -489,7 +496,7 @@ const Carousel = forwardRef(
489
496
  return true
490
497
  }, [viewport, childrenArray.length])
491
498
 
492
- const panResponder = useMemo(
499
+ const panResponder = React.useMemo(
493
500
  () =>
494
501
  PanResponder.create({
495
502
  onPanResponderTerminationRequest: () => false,
@@ -547,15 +554,15 @@ const Carousel = forwardRef(
547
554
  ]
548
555
  )
549
556
 
550
- const goToNext = useCallback(() => {
557
+ const goToNext = React.useCallback(() => {
551
558
  goToNeighboring()
552
559
  }, [goToNeighboring])
553
560
 
554
- const goToPrev = useCallback(() => {
561
+ const goToPrev = React.useCallback(() => {
555
562
  goToNeighboring(true)
556
563
  }, [goToNeighboring])
557
564
 
558
- const goTo = useCallback(
565
+ const goTo = React.useCallback(
559
566
  (index = 0) => {
560
567
  const delta = index - activeIndexRef.current
561
568
  if (delta) {
@@ -574,7 +581,7 @@ const Carousel = forwardRef(
574
581
  inverse: variant?.inverse
575
582
  }
576
583
 
577
- const getCopyWithPlaceholders = useCallback(
584
+ const getCopyWithPlaceholders = React.useCallback(
578
585
  (copyKey) => {
579
586
  const copyText = getCopy(copyKey)
580
587
  .replace(/%\{title\}/g, title)
@@ -629,7 +636,7 @@ const Carousel = forwardRef(
629
636
  ...(isFirstFocusContainer && { ref: containerRef, focusable: true })
630
637
  }
631
638
 
632
- const onAnimationControlButtonPress = useCallback(() => {
639
+ const onAnimationControlButtonPress = React.useCallback(() => {
633
640
  if (isCarouselPlaying) {
634
641
  stopAutoplay()
635
642
  } else {
@@ -651,7 +658,16 @@ const Carousel = forwardRef(
651
658
  width={containerLayout.width}
652
659
  >
653
660
  <View
654
- style={staticStyles.root}
661
+ style={[
662
+ staticStyles.root,
663
+ {
664
+ ...Platform.select({
665
+ web: {
666
+ outline: 'none'
667
+ }
668
+ })
669
+ }
670
+ ]}
655
671
  onLayout={onContainerLayout}
656
672
  ref={ref}
657
673
  {...systemProps}
@@ -827,7 +843,7 @@ Carousel.propTypes = {
827
843
  * This function is also provided with a parameter indicating changed index (either 1, or -1)
828
844
  * Use it as follows:
829
845
  * ```js
830
- * const onIndexChangedCallback = useCallback((changedIndex, currentActiveIndex) => {
846
+ * const onIndexChangedCallback = React.useCallback((changedIndex, currentActiveIndex) => {
831
847
  * console.log(changedIndex)
832
848
  * }, []) // pass local dependencies as per your component
833
849
  * <Carousel
@@ -836,7 +852,7 @@ Carousel.propTypes = {
836
852
  * <Carousel.Item>First Slide</Carousel.Item>
837
853
  * </Carousel>
838
854
  * ```
839
- * Caution: Always consider wrapping your callback for `onIndexChanged` in `useCallback` in order to avoid bugs and performance issues
855
+ * Caution: Always consider wrapping your callback for `onIndexChanged` in `React.useCallback` in order to avoid bugs and performance issues
840
856
  */
841
857
  onIndexChanged: PropTypes.func,
842
858
  /**
@@ -878,7 +894,7 @@ Carousel.propTypes = {
878
894
  * This function is also provided with a parameter indicating the current slide index before animation starts
879
895
  * Use it as follows:
880
896
  * ```js
881
- * const onAnimationStartCallback = useCallback((currentIndex) => {
897
+ * const onAnimationStartCallback = React.useCallback((currentIndex) => {
882
898
  * console.log(currentIndex)
883
899
  * }, []) // pass local dependencies as per your component
884
900
  * <Carousel
@@ -887,7 +903,7 @@ Carousel.propTypes = {
887
903
  * <Carousel.Item>First Slide</Carousel.Item>
888
904
  * </Carousel>
889
905
  * ```
890
- * Caution: Always consider wrapping your callback for `onAnimationStart` in `useCallback` in order to avoid bugs and performance issues
906
+ * Caution: Always consider wrapping your callback for `onAnimationStart` in `React.useCallback` in order to avoid bugs and performance issues
891
907
  */
892
908
  onAnimationStart: PropTypes.func,
893
909
  /**
@@ -895,7 +911,7 @@ Carousel.propTypes = {
895
911
  * This function is also provided with a parameter indicating the updated slide index after animation ends
896
912
  * Use it as follows:
897
913
  * ```js
898
- * const onAnimationEndCallback = useCallback((changedIndex) => {
914
+ * const onAnimationEndCallback = React.useCallback((changedIndex) => {
899
915
  * console.log(changedIndex)
900
916
  * }, []) // pass local dependencies as per your component
901
917
  * <Carousel
@@ -904,7 +920,7 @@ Carousel.propTypes = {
904
920
  * <Carousel.Item>First Slide</Carousel.Item>
905
921
  * </Carousel>
906
922
  * ```
907
- * Caution: Always consider wrapping your callback for `onAnimationEnd` in `useCallback` in order to avoid bugs and performance issues
923
+ * Caution: Always consider wrapping your callback for `onAnimationEnd` in `React.useCallback` in order to avoid bugs and performance issues
908
924
  */
909
925
  onAnimationEnd: PropTypes.func,
910
926
  /**
@@ -1,4 +1,4 @@
1
- import React, { forwardRef } from 'react'
1
+ import React from 'react'
2
2
  import { Pressable, Platform, StyleSheet } from 'react-native'
3
3
  import { PropTypes } from 'prop-types'
4
4
 
@@ -10,7 +10,7 @@ import { useCarousel } from '../CarouselContext'
10
10
  *
11
11
  * @TODO rework this after integrating with SkipLink when available.
12
12
  */
13
- const CarouselFirstFocus = forwardRef(({ title }, ref) => {
13
+ const CarouselFirstFocus = React.forwardRef(({ title }, ref) => {
14
14
  const { getCopyWithPlaceholders } = useCarousel()
15
15
 
16
16
  // TODO: integrate skip link description if behaving as skip link.
@@ -17,26 +17,28 @@ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, vie
17
17
  * `Carousel.Item` is used to wrap the content of an individual slide and is suppsoed to be the
18
18
  * only top-level component passed to the `Carousel`
19
19
  */
20
- const CarouselItem = ({ children, elementIndex, tag = 'li', hidden, ...rest }) => {
21
- const { width, activeIndex } = useCarousel()
20
+ const CarouselItem = React.forwardRef(
21
+ ({ children, elementIndex, tag = 'li', hidden, ...rest }, ref) => {
22
+ const { width, activeIndex } = useCarousel()
22
23
 
23
- const selectedProps = selectProps({
24
- ...rest,
25
- ...getA11yPropsFromHtmlTag(tag, rest.accessibilityRole)
26
- })
24
+ const selectedProps = selectProps({
25
+ ...rest,
26
+ ...getA11yPropsFromHtmlTag(tag, rest.accessibilityRole)
27
+ })
27
28
 
28
- const focusabilityProps = activeIndex === elementIndex ? {} : a11yProps.nonFocusableProps
29
- const style = { width }
30
- if (hidden && Platform.OS === 'web') {
31
- // On web, visibility: hidden makes all children non-focusable. It doesn't exist on native.
32
- style.visibility = 'hidden'
29
+ const focusabilityProps = activeIndex === elementIndex ? {} : a11yProps.nonFocusableProps
30
+ const style = { width }
31
+ if (hidden && Platform.OS === 'web') {
32
+ // On web, visibility: hidden makes all children non-focusable. It doesn't exist on native.
33
+ style.visibility = 'hidden'
34
+ }
35
+ return (
36
+ <View style={style} {...selectedProps} {...focusabilityProps} ref={ref}>
37
+ {children}
38
+ </View>
39
+ )
33
40
  }
34
- return (
35
- <View style={style} {...selectedProps} {...focusabilityProps}>
36
- {children}
37
- </View>
38
- )
39
- }
41
+ )
40
42
 
41
43
  CarouselItem.propTypes = {
42
44
  ...selectedSystemPropTypes,