@telus-uds/components-base 1.83.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 (474) hide show
  1. package/CHANGELOG.md +36 -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 +11 -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 +308 -129
  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 +20 -13
  44. package/lib/ExpandCollapse/Panel.js +15 -5
  45. package/lib/ExpandCollapse/dictionary.js +17 -0
  46. package/lib/Feedback/Feedback.js +2 -4
  47. package/lib/Fieldset/Fieldset.js +2 -4
  48. package/lib/Fieldset/FieldsetContainer.js +2 -4
  49. package/lib/Fieldset/FieldsetContainer.native.js +2 -4
  50. package/lib/Fieldset/Legend.js +2 -4
  51. package/lib/Fieldset/Legend.native.js +2 -4
  52. package/lib/FlexGrid/Col/Col.js +3 -5
  53. package/lib/FlexGrid/FlexGrid.js +2 -4
  54. package/lib/FlexGrid/Row/Row.js +2 -4
  55. package/lib/Footnote/Footnote.js +9 -9
  56. package/lib/Footnote/FootnoteLink.js +5 -3
  57. package/lib/HorizontalScroll/HorizontalScroll.js +8 -10
  58. package/lib/HorizontalScroll/HorizontalScrollButton.js +2 -4
  59. package/lib/HorizontalScroll/ScrollViewEnd.js +5 -10
  60. package/lib/HorizontalScroll/ScrollViewEnd.native.js +2 -4
  61. package/lib/Icon/Icon.js +2 -4
  62. package/lib/Icon/IconText.js +6 -6
  63. package/lib/IconButton/IconButton.js +2 -4
  64. package/lib/InputLabel/InputLabel.js +2 -4
  65. package/lib/InputLabel/LabelContent.js +2 -4
  66. package/lib/InputLabel/LabelContent.native.js +2 -4
  67. package/lib/InputSupports/InputSupports.js +4 -5
  68. package/lib/Link/ChevronLink.js +2 -4
  69. package/lib/Link/InlinePressable.js +8 -7
  70. package/lib/Link/InlinePressable.native.js +10 -8
  71. package/lib/Link/Link.js +2 -4
  72. package/lib/Link/LinkBase.js +2 -4
  73. package/lib/Link/TextButton.js +2 -4
  74. package/lib/List/List.js +13 -11
  75. package/lib/List/ListItem.js +2 -4
  76. package/lib/List/ListItemBase.js +6 -10
  77. package/lib/List/ListItemContent.js +4 -2
  78. package/lib/List/ListItemMark.js +4 -2
  79. package/lib/List/PressableListItemBase.js +2 -4
  80. package/lib/Listbox/GroupControl.js +4 -2
  81. package/lib/Listbox/Listbox.js +6 -6
  82. package/lib/Listbox/ListboxContext.js +3 -4
  83. package/lib/Listbox/ListboxGroup.js +2 -4
  84. package/lib/Listbox/ListboxItem.js +2 -6
  85. package/lib/Listbox/ListboxOverlay.js +2 -6
  86. package/lib/Listbox/PressableItem.js +2 -6
  87. package/lib/Modal/Modal.js +5 -7
  88. package/lib/Modal/ModalContent.js +7 -7
  89. package/lib/Modal/WebModal.js +19 -10
  90. package/lib/MultiSelectFilter/ModalOverlay.js +2 -4
  91. package/lib/MultiSelectFilter/MultiSelectFilter.js +10 -10
  92. package/lib/Notification/Notification.js +5 -7
  93. package/lib/OrderedList/Item.js +4 -10
  94. package/lib/OrderedList/ItemBase.js +2 -4
  95. package/lib/OrderedList/OrderedList.js +5 -13
  96. package/lib/OrderedList/OrderedListBase.js +2 -4
  97. package/lib/Pagination/PageButton.js +1 -1
  98. package/lib/Pagination/Pagination.js +1 -1
  99. package/lib/Pagination/SideButton.js +2 -4
  100. package/lib/PriceLockup/PriceLockup.js +5 -5
  101. package/lib/ProductCard/ProductCard.js +3 -2
  102. package/lib/ProductCardGroup/ProductCardGroup.js +5 -6
  103. package/lib/Progress/Progress.js +2 -4
  104. package/lib/Progress/ProgressBar.js +2 -4
  105. package/lib/Progress/ProgressBarBackground.js +2 -4
  106. package/lib/QuickLinks/QuickLinks.js +2 -4
  107. package/lib/QuickLinks/QuickLinksCard.js +4 -2
  108. package/lib/QuickLinks/QuickLinksItem.js +2 -4
  109. package/lib/QuickLinksFeature/QuickLinksFeature.js +9 -7
  110. package/lib/QuickLinksFeature/QuickLinksFeatureItem.js +10 -12
  111. package/lib/Radio/Radio.js +3 -3
  112. package/lib/Radio/RadioButton.js +61 -15
  113. package/lib/Radio/RadioGroup.js +2 -4
  114. package/lib/Radio/RadioInput.js +6 -18
  115. package/lib/RadioCard/RadioCard.js +3 -3
  116. package/lib/RadioCard/RadioCardGroup.js +3 -3
  117. package/lib/Responsive/Responsive.js +3 -2
  118. package/lib/Responsive/ResponsiveWithMediaQueryStyleSheet.js +3 -2
  119. package/lib/Search/Search.js +2 -4
  120. package/lib/Select/Group.js +4 -2
  121. package/lib/Select/Item.js +4 -2
  122. package/lib/Select/Picker.js +2 -4
  123. package/lib/Select/Picker.native.js +3 -5
  124. package/lib/Select/Select.js +4 -6
  125. package/lib/SideNav/Item.js +2 -4
  126. package/lib/SideNav/ItemContent.js +4 -2
  127. package/lib/SideNav/ItemsGroup.js +2 -4
  128. package/lib/SideNav/SideNav.js +2 -2
  129. package/lib/Skeleton/Skeleton.js +2 -4
  130. package/lib/SkipLink/SkipLink.js +2 -4
  131. package/lib/Spacer/Spacer.js +2 -4
  132. package/lib/StackView/StackView.js +2 -4
  133. package/lib/StackView/StackWrap.js +3 -5
  134. package/lib/StackView/StackWrapBox.js +2 -4
  135. package/lib/StackView/StackWrapGap.js +2 -4
  136. package/lib/StackView/getStackedContent.js +3 -3
  137. package/lib/StepTracker/Step.js +4 -2
  138. package/lib/StepTracker/StepTracker.js +2 -4
  139. package/lib/Tabs/Tabs.js +4 -4
  140. package/lib/Tabs/TabsItem.js +3 -5
  141. package/lib/Tags/Tags.js +2 -4
  142. package/lib/TextInput/TextArea.js +3 -5
  143. package/lib/TextInput/TextInput.js +2 -4
  144. package/lib/TextInput/TextInputBase.js +7 -9
  145. package/lib/ThemeProvider/ThemeProvider.js +5 -7
  146. package/lib/Timeline/Timeline.js +2 -4
  147. package/lib/ToggleSwitch/ToggleSwitch.js +2 -4
  148. package/lib/ToggleSwitch/ToggleSwitchGroup.js +2 -4
  149. package/lib/Tooltip/Tooltip.js +6 -8
  150. package/lib/Tooltip/Tooltip.native.js +12 -14
  151. package/lib/TooltipButton/TooltipButton.js +4 -2
  152. package/lib/Typography/Typography.js +2 -4
  153. package/lib/Validator/Validator.js +11 -13
  154. package/lib/ViewportProvider/ViewportProvider.js +2 -4
  155. package/lib/index.js +8 -0
  156. package/lib/utils/BaseView/BaseView.js +2 -4
  157. package/lib/utils/children.js +4 -6
  158. package/lib/utils/withLinkRouter.js +3 -5
  159. package/lib-module/A11yInfoProvider/index.js +8 -8
  160. package/lib-module/A11yText/index.js +2 -2
  161. package/lib-module/ActivityIndicator/Spinner.js +2 -2
  162. package/lib-module/ActivityIndicator/Spinner.native.js +2 -2
  163. package/lib-module/Autocomplete/Autocomplete.js +13 -14
  164. package/lib-module/Autocomplete/Loading.js +4 -2
  165. package/lib-module/Autocomplete/Suggestions.js +2 -2
  166. package/lib-module/Badge/Badge.js +2 -2
  167. package/lib-module/BaseProvider/HydrationContext.js +5 -5
  168. package/lib-module/Box/Box.js +5 -5
  169. package/lib-module/Button/Button.js +2 -2
  170. package/lib-module/Button/ButtonBase.js +2 -5
  171. package/lib-module/Button/ButtonDropdown.js +2 -2
  172. package/lib-module/Button/ButtonGroup.js +11 -2
  173. package/lib-module/Button/ButtonLink.js +2 -2
  174. package/lib-module/Card/Card.js +159 -14
  175. package/lib-module/Card/CardBase.js +2 -2
  176. package/lib-module/Card/PressableCardBase.js +4 -4
  177. package/lib-module/CardGroup/CardGroup.js +210 -0
  178. package/lib-module/CardGroup/dictionary.js +8 -0
  179. package/lib-module/CardGroup/index.js +2 -0
  180. package/lib-module/Carousel/Carousel.js +308 -129
  181. package/lib-module/Carousel/CarouselFirstFocus/CarouselFirstFocus.js +2 -2
  182. package/lib-module/Carousel/CarouselItem/CarouselItem.js +3 -2
  183. package/lib-module/Carousel/CarouselStepTracker/CarouselStepTracker.js +4 -2
  184. package/lib-module/Carousel/CarouselTabs/CarouselTabs.js +2 -2
  185. package/lib-module/Carousel/CarouselTabs/CarouselTabsPanel.js +6 -6
  186. package/lib-module/Carousel/CarouselTabs/CarouselTabsPanelItem.js +3 -3
  187. package/lib-module/Carousel/CarouselThumbnail.js +4 -2
  188. package/lib-module/Carousel/CarouselThumbnailNavigation.js +2 -2
  189. package/lib-module/Checkbox/Checkbox.js +2 -2
  190. package/lib-module/Checkbox/CheckboxButton.js +3 -3
  191. package/lib-module/Checkbox/CheckboxGroup.js +2 -2
  192. package/lib-module/Checkbox/CheckboxInput.js +4 -12
  193. package/lib-module/CheckboxCard/CheckboxCard.js +2 -2
  194. package/lib-module/CheckboxCardGroup/CheckboxCardGroup.js +2 -2
  195. package/lib-module/ColourToggle/ColourBubble.js +5 -4
  196. package/lib-module/ColourToggle/ColourToggle.js +3 -3
  197. package/lib-module/Divider/Divider.js +2 -2
  198. package/lib-module/ExpandCollapse/Accordion.js +2 -2
  199. package/lib-module/ExpandCollapse/Control.js +2 -2
  200. package/lib-module/ExpandCollapse/ExpandCollapse.js +20 -11
  201. package/lib-module/ExpandCollapse/Panel.js +16 -4
  202. package/lib-module/ExpandCollapse/dictionary.js +10 -0
  203. package/lib-module/Feedback/Feedback.js +2 -2
  204. package/lib-module/Fieldset/Fieldset.js +2 -2
  205. package/lib-module/Fieldset/FieldsetContainer.js +2 -2
  206. package/lib-module/Fieldset/FieldsetContainer.native.js +2 -2
  207. package/lib-module/Fieldset/Legend.js +2 -2
  208. package/lib-module/Fieldset/Legend.native.js +2 -2
  209. package/lib-module/FlexGrid/Col/Col.js +3 -3
  210. package/lib-module/FlexGrid/FlexGrid.js +2 -2
  211. package/lib-module/FlexGrid/Row/Row.js +2 -2
  212. package/lib-module/Footnote/Footnote.js +9 -7
  213. package/lib-module/Footnote/FootnoteLink.js +5 -4
  214. package/lib-module/HorizontalScroll/HorizontalScroll.js +8 -8
  215. package/lib-module/HorizontalScroll/HorizontalScrollButton.js +2 -2
  216. package/lib-module/HorizontalScroll/ScrollViewEnd.js +5 -8
  217. package/lib-module/HorizontalScroll/ScrollViewEnd.native.js +2 -2
  218. package/lib-module/Icon/Icon.js +2 -2
  219. package/lib-module/Icon/IconText.js +5 -5
  220. package/lib-module/IconButton/IconButton.js +2 -2
  221. package/lib-module/InputLabel/InputLabel.js +2 -2
  222. package/lib-module/InputLabel/LabelContent.js +2 -2
  223. package/lib-module/InputLabel/LabelContent.native.js +2 -2
  224. package/lib-module/InputSupports/InputSupports.js +4 -3
  225. package/lib-module/Link/ChevronLink.js +2 -2
  226. package/lib-module/Link/InlinePressable.js +10 -4
  227. package/lib-module/Link/InlinePressable.native.js +12 -6
  228. package/lib-module/Link/Link.js +2 -2
  229. package/lib-module/Link/LinkBase.js +2 -2
  230. package/lib-module/Link/TextButton.js +2 -2
  231. package/lib-module/List/List.js +13 -9
  232. package/lib-module/List/ListItem.js +2 -2
  233. package/lib-module/List/ListItemBase.js +6 -8
  234. package/lib-module/List/ListItemContent.js +4 -2
  235. package/lib-module/List/ListItemMark.js +4 -2
  236. package/lib-module/List/PressableListItemBase.js +2 -2
  237. package/lib-module/Listbox/GroupControl.js +4 -2
  238. package/lib-module/Listbox/Listbox.js +7 -7
  239. package/lib-module/Listbox/ListboxContext.js +2 -2
  240. package/lib-module/Listbox/ListboxGroup.js +2 -2
  241. package/lib-module/Listbox/ListboxItem.js +2 -3
  242. package/lib-module/Listbox/ListboxOverlay.js +2 -3
  243. package/lib-module/Listbox/PressableItem.js +2 -3
  244. package/lib-module/Modal/Modal.js +5 -5
  245. package/lib-module/Modal/ModalContent.js +7 -5
  246. package/lib-module/Modal/WebModal.js +19 -10
  247. package/lib-module/MultiSelectFilter/ModalOverlay.js +2 -2
  248. package/lib-module/MultiSelectFilter/MultiSelectFilter.js +10 -8
  249. package/lib-module/Notification/Notification.js +5 -5
  250. package/lib-module/OrderedList/Item.js +4 -8
  251. package/lib-module/OrderedList/ItemBase.js +2 -2
  252. package/lib-module/OrderedList/OrderedList.js +6 -12
  253. package/lib-module/OrderedList/OrderedListBase.js +2 -2
  254. package/lib-module/Pagination/PageButton.js +2 -2
  255. package/lib-module/Pagination/Pagination.js +2 -2
  256. package/lib-module/Pagination/SideButton.js +2 -2
  257. package/lib-module/PriceLockup/PriceLockup.js +5 -5
  258. package/lib-module/ProductCard/ProductCard.js +3 -2
  259. package/lib-module/ProductCardGroup/ProductCardGroup.js +5 -4
  260. package/lib-module/Progress/Progress.js +2 -2
  261. package/lib-module/Progress/ProgressBar.js +2 -2
  262. package/lib-module/Progress/ProgressBarBackground.js +2 -2
  263. package/lib-module/QuickLinks/QuickLinks.js +2 -2
  264. package/lib-module/QuickLinks/QuickLinksCard.js +4 -2
  265. package/lib-module/QuickLinks/QuickLinksItem.js +2 -2
  266. package/lib-module/QuickLinksFeature/QuickLinksFeature.js +9 -5
  267. package/lib-module/QuickLinksFeature/QuickLinksFeatureItem.js +10 -10
  268. package/lib-module/Radio/Radio.js +2 -2
  269. package/lib-module/Radio/RadioButton.js +62 -14
  270. package/lib-module/Radio/RadioGroup.js +2 -2
  271. package/lib-module/Radio/RadioInput.js +6 -16
  272. package/lib-module/RadioCard/RadioCard.js +2 -2
  273. package/lib-module/RadioCard/RadioCardGroup.js +2 -2
  274. package/lib-module/Responsive/Responsive.js +3 -2
  275. package/lib-module/Responsive/ResponsiveWithMediaQueryStyleSheet.js +3 -2
  276. package/lib-module/Search/Search.js +2 -2
  277. package/lib-module/Select/Group.js +4 -2
  278. package/lib-module/Select/Item.js +4 -2
  279. package/lib-module/Select/Picker.js +2 -2
  280. package/lib-module/Select/Picker.native.js +3 -3
  281. package/lib-module/Select/Select.js +4 -4
  282. package/lib-module/SideNav/Item.js +2 -2
  283. package/lib-module/SideNav/ItemContent.js +4 -2
  284. package/lib-module/SideNav/ItemsGroup.js +2 -2
  285. package/lib-module/SideNav/SideNav.js +3 -3
  286. package/lib-module/Skeleton/Skeleton.js +2 -2
  287. package/lib-module/SkipLink/SkipLink.js +2 -2
  288. package/lib-module/Spacer/Spacer.js +2 -2
  289. package/lib-module/StackView/StackView.js +2 -2
  290. package/lib-module/StackView/StackWrap.js +3 -3
  291. package/lib-module/StackView/StackWrapBox.js +2 -2
  292. package/lib-module/StackView/StackWrapGap.js +2 -2
  293. package/lib-module/StackView/getStackedContent.js +4 -4
  294. package/lib-module/StepTracker/Step.js +4 -2
  295. package/lib-module/StepTracker/StepTracker.js +2 -2
  296. package/lib-module/Tabs/Tabs.js +3 -3
  297. package/lib-module/Tabs/TabsItem.js +3 -3
  298. package/lib-module/Tags/Tags.js +2 -2
  299. package/lib-module/TextInput/TextArea.js +3 -3
  300. package/lib-module/TextInput/TextInput.js +2 -2
  301. package/lib-module/TextInput/TextInputBase.js +7 -7
  302. package/lib-module/ThemeProvider/ThemeProvider.js +5 -5
  303. package/lib-module/Timeline/Timeline.js +2 -2
  304. package/lib-module/ToggleSwitch/ToggleSwitch.js +2 -2
  305. package/lib-module/ToggleSwitch/ToggleSwitchGroup.js +2 -2
  306. package/lib-module/Tooltip/Tooltip.js +6 -6
  307. package/lib-module/Tooltip/Tooltip.native.js +12 -12
  308. package/lib-module/TooltipButton/TooltipButton.js +4 -2
  309. package/lib-module/Typography/Typography.js +2 -2
  310. package/lib-module/Validator/Validator.js +11 -11
  311. package/lib-module/ViewportProvider/ViewportProvider.js +2 -2
  312. package/lib-module/index.js +1 -0
  313. package/lib-module/utils/BaseView/BaseView.js +2 -2
  314. package/lib-module/utils/children.js +4 -4
  315. package/lib-module/utils/withLinkRouter.js +3 -3
  316. package/package.json +2 -2
  317. package/src/A11yInfoProvider/index.jsx +8 -8
  318. package/src/A11yText/index.jsx +2 -2
  319. package/src/ActivityIndicator/Spinner.jsx +2 -2
  320. package/src/ActivityIndicator/Spinner.native.jsx +2 -2
  321. package/src/Autocomplete/Autocomplete.jsx +15 -14
  322. package/src/Autocomplete/Loading.jsx +6 -3
  323. package/src/Autocomplete/Suggestions.jsx +2 -2
  324. package/src/Badge/Badge.jsx +2 -2
  325. package/src/BaseProvider/HydrationContext.jsx +5 -5
  326. package/src/Box/Box.jsx +5 -5
  327. package/src/Button/Button.jsx +11 -9
  328. package/src/Button/ButtonBase.jsx +2 -3
  329. package/src/Button/ButtonDropdown.jsx +2 -2
  330. package/src/Button/ButtonGroup.jsx +11 -2
  331. package/src/Button/ButtonLink.jsx +2 -2
  332. package/src/Card/Card.jsx +151 -11
  333. package/src/Card/CardBase.jsx +2 -2
  334. package/src/Card/PressableCardBase.jsx +18 -4
  335. package/src/CardGroup/CardGroup.jsx +249 -0
  336. package/src/CardGroup/dictionary.js +8 -0
  337. package/src/CardGroup/index.js +3 -0
  338. package/src/Carousel/Carousel.jsx +338 -117
  339. package/src/Carousel/CarouselFirstFocus/CarouselFirstFocus.jsx +2 -2
  340. package/src/Carousel/CarouselItem/CarouselItem.jsx +19 -17
  341. package/src/Carousel/CarouselStepTracker/CarouselStepTracker.jsx +5 -3
  342. package/src/Carousel/CarouselTabs/CarouselTabs.jsx +2 -2
  343. package/src/Carousel/CarouselTabs/CarouselTabsPanel.jsx +6 -6
  344. package/src/Carousel/CarouselTabs/CarouselTabsPanelItem.jsx +3 -3
  345. package/src/Carousel/CarouselThumbnail.jsx +6 -2
  346. package/src/Carousel/CarouselThumbnailNavigation.jsx +2 -2
  347. package/src/Checkbox/Checkbox.jsx +2 -2
  348. package/src/Checkbox/CheckboxButton.jsx +5 -7
  349. package/src/Checkbox/CheckboxGroup.jsx +2 -2
  350. package/src/Checkbox/CheckboxInput.jsx +15 -12
  351. package/src/CheckboxCard/CheckboxCard.jsx +2 -2
  352. package/src/CheckboxCardGroup/CheckboxCardGroup.jsx +2 -2
  353. package/src/ColourToggle/ColourBubble.jsx +5 -4
  354. package/src/ColourToggle/ColourToggle.jsx +3 -3
  355. package/src/Divider/Divider.jsx +2 -2
  356. package/src/ExpandCollapse/Accordion.jsx +4 -2
  357. package/src/ExpandCollapse/Control.jsx +2 -2
  358. package/src/ExpandCollapse/ExpandCollapse.jsx +15 -7
  359. package/src/ExpandCollapse/Panel.jsx +30 -8
  360. package/src/ExpandCollapse/dictionary.js +10 -0
  361. package/src/Feedback/Feedback.jsx +2 -2
  362. package/src/Fieldset/Fieldset.jsx +2 -2
  363. package/src/Fieldset/FieldsetContainer.jsx +2 -2
  364. package/src/Fieldset/FieldsetContainer.native.jsx +2 -2
  365. package/src/Fieldset/Legend.jsx +2 -2
  366. package/src/Fieldset/Legend.native.jsx +2 -2
  367. package/src/FlexGrid/Col/Col.jsx +3 -3
  368. package/src/FlexGrid/FlexGrid.jsx +2 -2
  369. package/src/FlexGrid/Row/Row.jsx +2 -2
  370. package/src/Footnote/Footnote.jsx +111 -98
  371. package/src/Footnote/FootnoteLink.jsx +35 -31
  372. package/src/HorizontalScroll/HorizontalScroll.jsx +8 -8
  373. package/src/HorizontalScroll/HorizontalScrollButton.jsx +2 -2
  374. package/src/HorizontalScroll/ScrollViewEnd.jsx +4 -8
  375. package/src/HorizontalScroll/ScrollViewEnd.native.jsx +2 -2
  376. package/src/Icon/Icon.jsx +2 -2
  377. package/src/Icon/IconText.jsx +7 -5
  378. package/src/IconButton/IconButton.jsx +2 -2
  379. package/src/InputLabel/InputLabel.jsx +2 -2
  380. package/src/InputLabel/LabelContent.jsx +2 -2
  381. package/src/InputLabel/LabelContent.native.jsx +2 -2
  382. package/src/InputSupports/InputSupports.jsx +4 -3
  383. package/src/Link/ChevronLink.jsx +2 -2
  384. package/src/Link/InlinePressable.jsx +22 -15
  385. package/src/Link/InlinePressable.native.jsx +12 -6
  386. package/src/Link/Link.jsx +2 -2
  387. package/src/Link/LinkBase.jsx +2 -2
  388. package/src/Link/TextButton.jsx +2 -2
  389. package/src/List/List.jsx +15 -7
  390. package/src/List/ListItem.jsx +2 -2
  391. package/src/List/ListItemBase.jsx +6 -12
  392. package/src/List/ListItemContent.jsx +5 -2
  393. package/src/List/ListItemMark.jsx +5 -3
  394. package/src/List/PressableListItemBase.jsx +2 -2
  395. package/src/Listbox/GroupControl.jsx +5 -2
  396. package/src/Listbox/Listbox.jsx +7 -7
  397. package/src/Listbox/ListboxContext.js +2 -2
  398. package/src/Listbox/ListboxGroup.jsx +2 -2
  399. package/src/Listbox/ListboxItem.jsx +2 -3
  400. package/src/Listbox/ListboxOverlay.jsx +2 -3
  401. package/src/Listbox/PressableItem.jsx +2 -3
  402. package/src/Modal/Modal.jsx +5 -5
  403. package/src/Modal/ModalContent.jsx +132 -125
  404. package/src/Modal/WebModal.jsx +17 -8
  405. package/src/MultiSelectFilter/ModalOverlay.jsx +2 -2
  406. package/src/MultiSelectFilter/MultiSelectFilter.jsx +263 -252
  407. package/src/Notification/Notification.jsx +5 -5
  408. package/src/OrderedList/Item.jsx +4 -6
  409. package/src/OrderedList/ItemBase.jsx +2 -2
  410. package/src/OrderedList/OrderedList.jsx +4 -7
  411. package/src/OrderedList/OrderedListBase.jsx +2 -2
  412. package/src/Pagination/PageButton.jsx +2 -2
  413. package/src/Pagination/Pagination.jsx +2 -2
  414. package/src/Pagination/SideButton.jsx +2 -2
  415. package/src/PriceLockup/PriceLockup.jsx +93 -88
  416. package/src/ProductCard/ProductCard.jsx +90 -84
  417. package/src/ProductCardGroup/ProductCardGroup.jsx +5 -5
  418. package/src/Progress/Progress.jsx +2 -2
  419. package/src/Progress/ProgressBar.jsx +2 -2
  420. package/src/Progress/ProgressBarBackground.jsx +4 -2
  421. package/src/QuickLinks/QuickLinks.jsx +2 -2
  422. package/src/QuickLinks/QuickLinksCard.jsx +9 -3
  423. package/src/QuickLinks/QuickLinksItem.jsx +2 -2
  424. package/src/QuickLinksFeature/QuickLinksFeature.jsx +31 -27
  425. package/src/QuickLinksFeature/QuickLinksFeatureItem.jsx +3 -3
  426. package/src/Radio/Radio.jsx +2 -2
  427. package/src/Radio/RadioButton.jsx +58 -6
  428. package/src/Radio/RadioGroup.jsx +2 -2
  429. package/src/Radio/RadioInput.jsx +15 -14
  430. package/src/RadioCard/RadioCard.jsx +2 -2
  431. package/src/RadioCard/RadioCardGroup.jsx +2 -2
  432. package/src/Responsive/Responsive.jsx +8 -3
  433. package/src/Responsive/ResponsiveWithMediaQueryStyleSheet.jsx +23 -16
  434. package/src/Search/Search.jsx +2 -2
  435. package/src/Select/Group.jsx +9 -3
  436. package/src/Select/Item.jsx +7 -1
  437. package/src/Select/Picker.jsx +2 -2
  438. package/src/Select/Picker.native.jsx +3 -3
  439. package/src/Select/Select.jsx +4 -4
  440. package/src/SideNav/Item.jsx +2 -2
  441. package/src/SideNav/ItemContent.jsx +7 -3
  442. package/src/SideNav/ItemsGroup.jsx +2 -2
  443. package/src/SideNav/SideNav.jsx +3 -3
  444. package/src/Skeleton/Skeleton.jsx +2 -2
  445. package/src/SkipLink/SkipLink.jsx +2 -2
  446. package/src/Spacer/Spacer.jsx +2 -2
  447. package/src/StackView/StackView.jsx +2 -2
  448. package/src/StackView/StackWrap.jsx +3 -3
  449. package/src/StackView/StackWrapBox.jsx +2 -2
  450. package/src/StackView/StackWrapGap.jsx +2 -2
  451. package/src/StackView/getStackedContent.jsx +4 -4
  452. package/src/StepTracker/Step.jsx +75 -67
  453. package/src/StepTracker/StepTracker.jsx +2 -2
  454. package/src/Tabs/Tabs.jsx +3 -3
  455. package/src/Tabs/TabsItem.jsx +3 -3
  456. package/src/Tags/Tags.jsx +2 -2
  457. package/src/TextInput/TextArea.jsx +3 -3
  458. package/src/TextInput/TextInput.jsx +2 -2
  459. package/src/TextInput/TextInputBase.jsx +7 -7
  460. package/src/ThemeProvider/ThemeProvider.jsx +5 -5
  461. package/src/Timeline/Timeline.jsx +2 -2
  462. package/src/ToggleSwitch/ToggleSwitch.jsx +2 -2
  463. package/src/ToggleSwitch/ToggleSwitchGroup.jsx +2 -2
  464. package/src/Tooltip/Tooltip.jsx +6 -6
  465. package/src/Tooltip/Tooltip.native.jsx +12 -12
  466. package/src/TooltipButton/TooltipButton.jsx +5 -2
  467. package/src/Typography/Typography.jsx +2 -2
  468. package/src/Validator/Validator.jsx +11 -11
  469. package/src/ViewportProvider/ViewportProvider.jsx +2 -2
  470. package/src/index.js +1 -0
  471. package/src/utils/BaseView/BaseView.jsx +2 -2
  472. package/src/utils/children.jsx +4 -4
  473. package/src/utils/withLinkRouter.jsx +3 -3
  474. package/types/ExpandCollapse.d.ts +1 -1
@@ -0,0 +1,2 @@
1
+ import CardGroup from './CardGroup';
2
+ export default CardGroup;
@@ -22,6 +22,11 @@ import CarouselTabsPanelItem from './CarouselTabs/CarouselTabsPanelItem';
22
22
  import dictionary from './dictionary';
23
23
  import { jsx as _jsx } from "react/jsx-runtime";
24
24
  import { jsxs as _jsxs } from "react/jsx-runtime";
25
+ const TRANSITION_MODES = {
26
+ MANUAL: 'manual',
27
+ AUTOMATIC: 'automatic',
28
+ SWIPE: 'swipe'
29
+ };
25
30
  const staticStyles = StyleSheet.create({
26
31
  root: {
27
32
  backgroundColor: 'transparent',
@@ -30,6 +35,12 @@ const staticStyles = StyleSheet.create({
30
35
  position: 'relative',
31
36
  top: 0,
32
37
  left: 0
38
+ },
39
+ animationControlButton: {
40
+ position: 'absolute',
41
+ zIndex: 1,
42
+ right: Platform.OS === 'web' ? undefined : 40,
43
+ top: 40
33
44
  }
34
45
  });
35
46
  const selectContainerStyles = width => ({
@@ -42,12 +53,29 @@ const selectSwipeAreaStyles = (count, width) => ({
42
53
  justifyContent: 'space-between',
43
54
  flexDirection: 'row'
44
55
  });
56
+ const getDynamicPositionProperty = areStylesAppliedOnPreviousButton => areStylesAppliedOnPreviousButton ? 'left' : 'right';
57
+ const selectControlButtonPositionStyles = _ref => {
58
+ let {
59
+ positionVariant,
60
+ buttonWidth,
61
+ positionProperty = getDynamicPositionProperty(),
62
+ spaceBetweenSlideAndButton
63
+ } = _ref;
64
+ const styles = {};
65
+ if (positionVariant === 'edge') {
66
+ styles[positionProperty] = -1 * (buttonWidth / 2);
67
+ } else if (positionVariant === 'inside') {
68
+ styles[positionProperty] = 0;
69
+ } else if (positionVariant === 'outside') {
70
+ styles[positionProperty] = -1 * (spaceBetweenSlideAndButton + buttonWidth);
71
+ }
72
+ return styles;
73
+ };
45
74
  const selectPreviousNextNavigationButtonStyles = (previousNextNavigationButtonWidth, previousNextNavigationPosition, spaceBetweenSlideAndPreviousNextNavigation, isFirstSlide, isLastSlide, areStylesAppliedOnPreviousButton) => {
46
75
  const styles = {
47
76
  zIndex: 1,
48
77
  position: 'absolute'
49
78
  };
50
- const dynamicPositionProperty = areStylesAppliedOnPreviousButton ? 'left' : 'right';
51
79
  if (isFirstSlide) {
52
80
  styles.visibility = areStylesAppliedOnPreviousButton ? 'hidden' : 'visible';
53
81
  } else if (isLastSlide) {
@@ -55,19 +83,20 @@ const selectPreviousNextNavigationButtonStyles = (previousNextNavigationButtonWi
55
83
  } else {
56
84
  styles.visibility = 'visible';
57
85
  }
58
- if (previousNextNavigationPosition === 'edge') {
59
- styles[dynamicPositionProperty] = -1 * (previousNextNavigationButtonWidth / 2);
60
- } else if (previousNextNavigationPosition === 'inside') {
61
- styles[dynamicPositionProperty] = 0;
62
- } else if (previousNextNavigationPosition === 'outside') {
63
- styles[dynamicPositionProperty] = -1 * (spaceBetweenSlideAndPreviousNextNavigation + previousNextNavigationButtonWidth);
64
- }
65
- return styles;
86
+ return {
87
+ ...styles,
88
+ ...selectControlButtonPositionStyles({
89
+ positionVariant: previousNextNavigationPosition,
90
+ buttonWidth: previousNextNavigationButtonWidth,
91
+ positionProperty: getDynamicPositionProperty(areStylesAppliedOnPreviousButton),
92
+ spaceBetweenSlideAndButton: spaceBetweenSlideAndPreviousNextNavigation
93
+ })
94
+ };
66
95
  };
67
- const selectIconStyles = _ref => {
96
+ const selectIconStyles = _ref2 => {
68
97
  let {
69
98
  iconBackgroundColor
70
- } = _ref;
99
+ } = _ref2;
71
100
  return {
72
101
  backgroundColor: iconBackgroundColor
73
102
  };
@@ -128,7 +157,7 @@ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, vie
128
157
  - `spaceBetweenSlideAndPreviousNextNavigation` - Horizontal space between slide and previous/next navigational buttons
129
158
  - `spaceBetweenSlideAndPanelNavigation` - Vertical space between slide area and panel navigation area
130
159
  */
131
- const Carousel = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
160
+ const Carousel = /*#__PURE__*/React.forwardRef((_ref3, ref) => {
132
161
  let {
133
162
  tokens,
134
163
  variant,
@@ -158,8 +187,21 @@ const Carousel = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
158
187
  accessibilityLabel,
159
188
  accessibilityLiveRegion = 'polite',
160
189
  copy,
190
+ slideDuration = 0,
191
+ transitionDuration = 0,
192
+ autoPlay = false,
161
193
  ...rest
162
- } = _ref2;
194
+ } = _ref3;
195
+ let childrenArray = unpackFragment(children);
196
+ const autoPlayFeatureEnabled = autoPlay && slideDuration > 0 && transitionDuration > 0 && childrenArray.length > 1;
197
+ // if `Carousel` only has one `Carousel.Item`, convert this to a single-item array
198
+ if (!Array.isArray(childrenArray)) {
199
+ childrenArray = [childrenArray];
200
+ }
201
+ const getCopy = useCopy({
202
+ dictionary,
203
+ copy
204
+ });
163
205
  const viewport = useViewport();
164
206
  const themeTokens = useThemeTokens('Carousel', tokens, variant, {
165
207
  viewport
@@ -167,84 +209,53 @@ const Carousel = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
167
209
  const {
168
210
  previousIcon,
169
211
  nextIcon,
212
+ playIcon,
213
+ pauseIcon,
170
214
  showPreviousNextNavigation,
171
215
  showPanelNavigation,
172
216
  showPanelTabs,
173
217
  spaceBetweenSlideAndPreviousNextNavigation
174
218
  } = themeTokens;
175
219
  const [activeIndex, setActiveIndex] = React.useState(0);
176
- const [isAnimating, setIsAnimating] = React.useState(false);
177
- const handleAnimationStart = React.useCallback(function () {
178
- if (typeof onAnimationStart === 'function') onAnimationStart(...arguments);
179
- setIsAnimating(true);
180
- }, [onAnimationStart]);
181
- const handleAnimationEnd = React.useCallback(function () {
182
- if (typeof onAnimationEnd === 'function') onAnimationEnd(...arguments);
183
- setIsAnimating(false);
184
- }, [onAnimationEnd]);
185
- const getCopy = useCopy({
186
- dictionary,
187
- copy
188
- });
189
- let childrenArray = unpackFragment(children);
190
- // if `Carousel` only has one `Carousel.Item`, convert this to a single-item array
191
- if (!Array.isArray(childrenArray)) {
192
- childrenArray = [childrenArray];
193
- }
194
- const systemProps = selectProps({
195
- ...rest,
196
- accessibilityRole,
197
- accessibilityLabel,
198
- accessibilityValue: {
199
- min: 1,
200
- max: childrenArray.length,
201
- now: activeIndex + 1
202
- }
203
- });
220
+ const activeIndexRef = React.useRef(activeIndex);
204
221
  const {
205
222
  reduceMotionEnabled
206
223
  } = useA11yInfo();
224
+ const reduceMotionRef = React.useRef(reduceMotionEnabled);
207
225
  const [containerLayout, setContainerLayout] = React.useState({
208
226
  x: 0,
209
227
  y: 0,
210
228
  width: 0
211
229
  });
230
+ const containerLayoutRef = React.useRef(containerLayout);
212
231
  const [previousNextNavigationButtonWidth, setPreviousNextNavigationButtonWidth] = React.useState(0);
213
232
  const firstFocusRef = React.useRef(null);
214
233
  const pan = React.useRef(new Animated.ValueXY()).current;
215
234
  const animatedX = React.useRef(0);
216
235
  const animatedY = React.useRef(0);
236
+ const [isAnimating, setIsAnimating] = React.useState(false);
237
+ /**
238
+ * While having the same starting point, `isAutoPlayEnabled` and `isCarouselPlaying` are different states
239
+ *
240
+ * `isAutoPlayEnabled` is a state to determine if the autoplay feature is enabled or disabled
241
+ * `isCarouselPlaying` is a state to determine if the carousel is currently playing or paused
242
+ */
243
+ const [isAutoPlayEnabled, setIsAutoPlayEnabled] = React.useState(autoPlayFeatureEnabled);
244
+ const [isCarouselPlaying, setisCarouselPlaying] = React.useState(autoPlayFeatureEnabled);
245
+ const isSwiping = React.useRef(false);
246
+ const autoPlayRef = React.useRef(null);
217
247
  const isFirstSlide = !activeIndex;
218
- const isLastSlide = activeIndex + 1 >= children.length;
219
- const onContainerLayout = _ref3 => {
220
- let {
221
- nativeEvent: {
222
- layout: {
223
- x,
224
- y,
225
- width
226
- }
227
- }
228
- } = _ref3;
229
- return setContainerLayout(prevState => ({
230
- ...prevState,
231
- x,
232
- y,
233
- width
234
- }));
235
- };
236
- const onPreviousNextNavigationButtonLayout = _ref4 => {
237
- let {
238
- nativeEvent: {
239
- layout: {
240
- width
241
- }
242
- }
243
- } = _ref4;
244
- return setPreviousNextNavigationButtonWidth(width);
245
- };
248
+ const isLastSlide = activeIndex + 1 >= childrenArray.length;
249
+ const handleAnimationStart = React.useCallback(function () {
250
+ if (typeof onAnimationStart === 'function') onAnimationStart(...arguments);
251
+ setIsAnimating(true);
252
+ }, [onAnimationStart]);
253
+ const handleAnimationEnd = React.useCallback(function () {
254
+ if (typeof onAnimationEnd === 'function') onAnimationEnd(...arguments);
255
+ setIsAnimating(false);
256
+ }, [onAnimationEnd]);
246
257
  const updateOffset = React.useCallback(() => {
247
- animatedX.current = containerLayout.width * activeIndex * -1;
258
+ animatedX.current = containerLayoutRef.current.width * activeIndexRef.current * -1;
248
259
  animatedY.current = 0;
249
260
  pan.setOffset({
250
261
  x: animatedX.current,
@@ -254,7 +265,7 @@ const Carousel = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
254
265
  x: 0,
255
266
  y: 0
256
267
  });
257
- }, [activeIndex, containerLayout.width, pan, animatedX]);
268
+ }, [pan, animatedX]);
258
269
  const animate = React.useCallback((toValue, toIndex) => {
259
270
  const handleAnimationEndToIndex = function () {
260
271
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
@@ -262,12 +273,19 @@ const Carousel = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
262
273
  }
263
274
  return handleAnimationEnd(toIndex, ...args);
264
275
  };
265
- if (reduceMotionEnabled) {
276
+ if (reduceMotionRef.current || isSwiping.current) {
266
277
  Animated.timing(pan, {
267
278
  toValue,
268
279
  duration: 1,
269
280
  useNativeDriver: false
270
281
  }).start(handleAnimationEndToIndex);
282
+ } else if (isAutoPlayEnabled) {
283
+ Animated.timing(pan, {
284
+ ...springConfig,
285
+ toValue,
286
+ useNativeDriver: false,
287
+ duration: transitionDuration * 1000
288
+ }).start(handleAnimationEndToIndex);
271
289
  } else {
272
290
  Animated.spring(pan, {
273
291
  ...springConfig,
@@ -275,44 +293,162 @@ const Carousel = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
275
293
  useNativeDriver: false
276
294
  }).start(handleAnimationEndToIndex);
277
295
  }
278
- }, [pan, springConfig, reduceMotionEnabled, handleAnimationEnd]);
296
+ }, [pan, springConfig, handleAnimationEnd, transitionDuration, isAutoPlayEnabled]);
297
+ const stopAutoplay = React.useCallback(() => {
298
+ if (autoPlayRef !== null && autoPlayRef !== void 0 && autoPlayRef.current) {
299
+ clearTimeout(autoPlayRef === null || autoPlayRef === void 0 ? void 0 : autoPlayRef.current);
300
+ }
301
+ }, []);
302
+ const triggerRefocus = React.useCallback(() => {
303
+ if (refocus && Platform.OS === 'web') {
304
+ var _firstFocusRef$curren;
305
+ (_firstFocusRef$curren = firstFocusRef.current) === null || _firstFocusRef$curren === void 0 ? void 0 : _firstFocusRef$curren.focus({
306
+ preventScroll: true,
307
+ focusVisible: false
308
+ });
309
+ }
310
+ }, [refocus, firstFocusRef]);
279
311
  const updateIndex = React.useCallback(function () {
280
312
  let delta = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
313
+ let transitionMode = arguments.length > 1 ? arguments[1] : undefined;
281
314
  const toValue = {
282
315
  x: 0,
283
316
  y: 0
284
317
  };
285
318
  let skipChanges = !delta;
286
319
  let calcDelta = delta;
287
- if (activeIndex <= 0 && delta < 0) {
288
- skipChanges = true;
289
- calcDelta = children.length + delta;
290
- } else if (activeIndex + 1 >= children.length && delta > 0) {
291
- skipChanges = true;
292
- calcDelta = -1 * activeIndex + delta - 1;
320
+ if (activeIndexRef.current <= 0 && delta < 0) {
321
+ skipChanges = transitionMode !== TRANSITION_MODES.AUTOMATIC;
322
+ calcDelta = childrenArray.length + delta;
323
+ } else if (activeIndexRef.current + 1 >= childrenArray.length && delta > 0) {
324
+ skipChanges = transitionMode !== TRANSITION_MODES.AUTOMATIC;
325
+ calcDelta = -1 * activeIndexRef.current + delta - 1;
293
326
  }
294
- const index = activeIndex + calcDelta;
327
+ const index = activeIndexRef.current + calcDelta;
295
328
  if (skipChanges) {
296
329
  animate(toValue, index);
297
330
  return calcDelta;
298
331
  }
332
+ stopAutoplay();
299
333
  setActiveIndex(index);
300
- toValue.x = containerLayout.width * -1 * calcDelta;
334
+ toValue.x = containerLayoutRef.current.width * -1 * calcDelta;
301
335
  animate(toValue, index);
336
+ if (isCarouselPlaying) {
337
+ stopAutoplay();
338
+ if (index === 0 && activeIndexRef.current + 1 === childrenArray.length && transitionMode === TRANSITION_MODES.AUTOMATIC) {
339
+ setisCarouselPlaying(false);
340
+ } else if (isAutoPlayEnabled) {
341
+ autoPlayRef.current = setTimeout(() => {
342
+ updateOffset();
343
+ handleAnimationStart(activeIndexRef.current);
344
+ updateIndex(slideDuration < 0 ? -1 : 1, TRANSITION_MODES.AUTOMATIC);
345
+ triggerRefocus();
346
+ }, Math.abs(slideDuration) * 1000);
347
+ }
348
+ }
302
349
  if (onIndexChanged) onIndexChanged(calcDelta, index);
303
350
  return calcDelta;
304
- }, [containerLayout.width, activeIndex, animate, children.length, onIndexChanged]);
305
- const fixOffsetAndGo = React.useCallback(delta => {
306
- var _firstFocusRef$curren;
351
+ }, [handleAnimationStart, triggerRefocus, slideDuration, updateOffset, animate, childrenArray.length, onIndexChanged, isCarouselPlaying, stopAutoplay, isAutoPlayEnabled]);
352
+ const startAutoplay = React.useCallback(() => {
353
+ stopAutoplay();
354
+ if (isAutoPlayEnabled) {
355
+ autoPlayRef.current = setTimeout(() => {
356
+ updateOffset();
357
+ handleAnimationStart(activeIndexRef.current);
358
+ updateIndex(slideDuration < 0 ? -1 : 1, TRANSITION_MODES.AUTOMATIC);
359
+ triggerRefocus();
360
+ }, Math.abs(slideDuration) * 1000);
361
+ }
362
+ }, [handleAnimationStart, triggerRefocus, updateIndex, updateOffset, slideDuration, stopAutoplay, isAutoPlayEnabled]);
363
+ const fixOffsetAndGo = React.useCallback((delta, transitionMode) => {
307
364
  updateOffset();
308
- handleAnimationStart(activeIndex);
309
- updateIndex(delta);
310
- if (refocus) (_firstFocusRef$curren = firstFocusRef.current) === null || _firstFocusRef$curren === void 0 ? void 0 : _firstFocusRef$curren.focus();
311
- }, [updateIndex, updateOffset, activeIndex, handleAnimationStart, refocus]);
365
+ handleAnimationStart(activeIndexRef.current);
366
+ updateIndex(delta, transitionMode);
367
+ triggerRefocus();
368
+ }, [updateIndex, updateOffset, handleAnimationStart, triggerRefocus]);
312
369
  const goToNeighboring = React.useCallback(function () {
313
370
  let toPrev = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
314
- fixOffsetAndGo(toPrev ? -1 : 1);
371
+ let transitionMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : TRANSITION_MODES.MANUAL;
372
+ fixOffsetAndGo(toPrev ? -1 : 1, transitionMode);
315
373
  }, [fixOffsetAndGo]);
374
+ React.useEffect(() => {
375
+ activeIndexRef.current = activeIndex;
376
+ }, [activeIndex]);
377
+ React.useEffect(() => {
378
+ reduceMotionRef.current = reduceMotionEnabled;
379
+ }, [reduceMotionEnabled]);
380
+ React.useEffect(() => {
381
+ containerLayoutRef.current = containerLayout;
382
+ }, [containerLayout]);
383
+ React.useEffect(() => {
384
+ pan.x.addListener(_ref4 => {
385
+ let {
386
+ value
387
+ } = _ref4;
388
+ animatedX.current = value;
389
+ });
390
+ pan.y.addListener(_ref5 => {
391
+ let {
392
+ value
393
+ } = _ref5;
394
+ animatedY.current = value;
395
+ });
396
+ if (isCarouselPlaying) {
397
+ startAutoplay();
398
+ }
399
+ return () => {
400
+ stopAutoplay();
401
+ pan.x.removeAllListeners();
402
+ pan.y.removeAllListeners();
403
+ };
404
+ }, [pan.x, pan.y, startAutoplay, stopAutoplay, isCarouselPlaying]);
405
+ React.useEffect(() => {
406
+ const subscription = Dimensions.addEventListener('change', () => {
407
+ updateOffset();
408
+ });
409
+ return () => {
410
+ if (subscription.remove) {
411
+ subscription.remove();
412
+ } else {
413
+ Dimensions.removeEventListener('change', updateOffset);
414
+ }
415
+ };
416
+ }, [updateOffset]);
417
+ React.useEffect(() => {
418
+ setIsAutoPlayEnabled(autoPlay && slideDuration > 0 && transitionDuration > 0 && childrenArray.length > 1);
419
+ }, [autoPlay, slideDuration, transitionDuration, childrenArray.length]);
420
+ React.useEffect(() => {
421
+ return () => {
422
+ stopAutoplay();
423
+ };
424
+ }, [stopAutoplay]);
425
+ const onContainerLayout = _ref6 => {
426
+ let {
427
+ nativeEvent: {
428
+ layout: {
429
+ x,
430
+ y,
431
+ width
432
+ }
433
+ }
434
+ } = _ref6;
435
+ return setContainerLayout(prevState => ({
436
+ ...prevState,
437
+ x,
438
+ y,
439
+ width
440
+ }));
441
+ };
442
+ const onPreviousNextNavigationButtonLayout = _ref7 => {
443
+ let {
444
+ nativeEvent: {
445
+ layout: {
446
+ width
447
+ }
448
+ }
449
+ } = _ref7;
450
+ return setPreviousNextNavigationButtonWidth(width);
451
+ };
316
452
  const isSwipeAllowed = React.useCallback(() => {
317
453
  if (childrenArray.length === 1) {
318
454
  return false;
@@ -329,52 +465,39 @@ const Carousel = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
329
465
  if (!isSwipeAllowed()) {
330
466
  return false;
331
467
  }
332
- handleAnimationStart(activeIndex);
333
- return Math.abs(gestureState.dx) > minDistanceToCapture;
468
+ handleAnimationStart(activeIndexRef.current);
469
+ const allow = Math.abs(gestureState.dx) > minDistanceToCapture;
470
+ if (allow) {
471
+ isSwiping.current = true;
472
+ stopAutoplay();
473
+ }
474
+ return allow;
475
+ },
476
+ onPanResponderGrant: () => {
477
+ updateOffset();
334
478
  },
335
- onPanResponderGrant: () => updateOffset(),
336
479
  onPanResponderMove: Animated.event([null, {
337
480
  dx: pan.x
338
481
  }], {
339
482
  useNativeDriver: false
340
483
  }),
341
484
  onPanResponderRelease: (_, gesture) => {
485
+ if (isCarouselPlaying) {
486
+ startAutoplay();
487
+ }
342
488
  const correction = gesture.moveX - gesture.x0;
343
- if (Math.abs(correction) < containerLayout.width * minDistanceForAction) {
489
+ if (Math.abs(correction) < containerLayoutRef.current.width * minDistanceForAction) {
344
490
  animate({
345
491
  x: 0,
346
492
  y: 0
347
493
  }, 0);
348
494
  } else {
349
495
  const delta = correction > 0 ? -1 : 1;
350
- updateIndex(delta);
496
+ updateIndex(delta, TRANSITION_MODES.SWIPE);
351
497
  }
498
+ isSwiping.current = false;
352
499
  }
353
- }), [containerLayout.width, updateIndex, updateOffset, animate, isSwipeAllowed, activeIndex, minDistanceForAction, handleAnimationStart, minDistanceToCapture, pan.x]);
354
- React.useEffect(() => {
355
- pan.x.addListener(_ref5 => {
356
- let {
357
- value
358
- } = _ref5;
359
- animatedX.current = value;
360
- });
361
- pan.y.addListener(_ref6 => {
362
- let {
363
- value
364
- } = _ref6;
365
- animatedY.current = value;
366
- });
367
- return () => {
368
- pan.x.removeAllListeners();
369
- pan.y.removeAllListeners();
370
- };
371
- }, [pan.x, pan.y]);
372
- React.useEffect(() => {
373
- const subscription = Dimensions.addEventListener('change', () => {
374
- updateOffset();
375
- });
376
- return () => subscription === null || subscription === void 0 ? void 0 : subscription.remove();
377
- });
500
+ }), [updateIndex, updateOffset, animate, isSwipeAllowed, minDistanceForAction, handleAnimationStart, minDistanceToCapture, pan.x, startAutoplay, stopAutoplay, isCarouselPlaying]);
378
501
  const goToNext = React.useCallback(() => {
379
502
  goToNeighboring();
380
503
  }, [goToNeighboring]);
@@ -383,11 +506,11 @@ const Carousel = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
383
506
  }, [goToNeighboring]);
384
507
  const goTo = React.useCallback(function () {
385
508
  let index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
386
- const delta = index - activeIndex;
509
+ const delta = index - activeIndexRef.current;
387
510
  if (delta) {
388
- fixOffsetAndGo(delta);
511
+ fixOffsetAndGo(delta, TRANSITION_MODES.MANUAL);
389
512
  }
390
- }, [fixOffsetAndGo, activeIndex]);
513
+ }, [fixOffsetAndGo]);
391
514
 
392
515
  // @TODO: - these are Allium-theme variants and won't have any effect in themes that don't implement them.
393
516
  // Normally we avoid setting variants of subcomponents, however this could be re-considered.
@@ -420,6 +543,17 @@ const Carousel = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
420
543
  }
421
544
  }
422
545
  };
546
+ const systemProps = selectProps({
547
+ ...rest,
548
+ accessibilityRole,
549
+ accessibilityLabel,
550
+ accessibilityValue: {
551
+ min: 1,
552
+ max: childrenArray.length,
553
+ now: activeIndex + 1
554
+ }
555
+ });
556
+
423
557
  // If container isn't used for focus, give it a label of title if none is passed in,
424
558
  // otherwise read the current position on focus
425
559
  const containerAccessibilityLabel = systemProps.accessibilityLabel ?? isFirstFocusContainer ? `${title ? `${title} ` : ''}${getCopyWithPlaceholders('stepTrackerLabel')}` : title;
@@ -431,6 +565,14 @@ const Carousel = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
431
565
  focusable: true
432
566
  })
433
567
  };
568
+ const onAnimationControlButtonPress = React.useCallback(() => {
569
+ if (isCarouselPlaying) {
570
+ stopAutoplay();
571
+ } else {
572
+ startAutoplay();
573
+ }
574
+ setisCarouselPlaying(prevState => !prevState);
575
+ }, [isCarouselPlaying, stopAutoplay, startAutoplay]);
434
576
  return /*#__PURE__*/_jsxs(CarouselProvider, {
435
577
  activeIndex: activeIndex,
436
578
  goTo: goTo,
@@ -442,12 +584,30 @@ const Carousel = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
442
584
  refocus: refocus,
443
585
  width: containerLayout.width,
444
586
  children: [/*#__PURE__*/_jsxs(View, {
445
- style: staticStyles.root,
587
+ style: [staticStyles.root, {
588
+ ...Platform.select({
589
+ web: {
590
+ outline: 'none'
591
+ }
592
+ })
593
+ }],
446
594
  onLayout: onContainerLayout,
447
595
  ref: ref,
448
596
  ...systemProps,
449
597
  ...containerProps,
450
- children: [showPreviousNextNavigation && childrenArray.length > 1 ? /*#__PURE__*/_jsx(View, {
598
+ children: [isAutoPlayEnabled ? /*#__PURE__*/_jsx(View, {
599
+ style: [staticStyles.animationControlButton, selectControlButtonPositionStyles({
600
+ positionVariant: previousNextNavigationPosition,
601
+ buttonWidth: previousNextNavigationButtonWidth,
602
+ positionProperty: getDynamicPositionProperty(),
603
+ spaceBetweenSlideAndButton: spaceBetweenSlideAndPreviousNextNavigation
604
+ })],
605
+ children: /*#__PURE__*/_jsx(IconButton, {
606
+ icon: isCarouselPlaying ? pauseIcon : playIcon,
607
+ variant: previousNextIconButtonVariants,
608
+ onPress: onAnimationControlButtonPress
609
+ })
610
+ }) : null, showPreviousNextNavigation && childrenArray.length > 1 ? /*#__PURE__*/_jsx(View, {
451
611
  style: selectPreviousNextNavigationButtonStyles(previousNextNavigationButtonWidth, previousNextNavigationPosition, spaceBetweenSlideAndPreviousNextNavigation, isFirstSlide, isLastSlide, true),
452
612
  testID: "previous-button-container",
453
613
  children: /*#__PURE__*/_jsx(IconButton, {
@@ -471,7 +631,7 @@ const Carousel = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
471
631
  }), /*#__PURE__*/_jsx(View, {
472
632
  style: selectContainerStyles(containerLayout.width),
473
633
  children: /*#__PURE__*/_jsx(Animated.View, {
474
- style: StyleSheet.flatten([selectSwipeAreaStyles(children.length, containerLayout.width), {
634
+ style: StyleSheet.flatten([selectSwipeAreaStyles(childrenArray.length, containerLayout.width), {
475
635
  transform: [{
476
636
  translateX: pan.x
477
637
  }, {
@@ -573,7 +733,7 @@ Carousel.propTypes = {
573
733
  * <Carousel.Item>First Slide</Carousel.Item>
574
734
  * </Carousel>
575
735
  * ```
576
- * Caution: Always consider wrapping your callback for `onIndexChanged` in `useCallback` in order to avoid bugs and performance issues
736
+ * Caution: Always consider wrapping your callback for `onIndexChanged` in `React.useCallback` in order to avoid bugs and performance issues
577
737
  */
578
738
  onIndexChanged: PropTypes.func,
579
739
  /**
@@ -624,7 +784,7 @@ Carousel.propTypes = {
624
784
  * <Carousel.Item>First Slide</Carousel.Item>
625
785
  * </Carousel>
626
786
  * ```
627
- * Caution: Always consider wrapping your callback for `onAnimationStart` in `useCallback` in order to avoid bugs and performance issues
787
+ * Caution: Always consider wrapping your callback for `onAnimationStart` in `React.useCallback` in order to avoid bugs and performance issues
628
788
  */
629
789
  onAnimationStart: PropTypes.func,
630
790
  /**
@@ -641,7 +801,7 @@ Carousel.propTypes = {
641
801
  * <Carousel.Item>First Slide</Carousel.Item>
642
802
  * </Carousel>
643
803
  * ```
644
- * Caution: Always consider wrapping your callback for `onAnimationEnd` in `useCallback` in order to avoid bugs and performance issues
804
+ * Caution: Always consider wrapping your callback for `onAnimationEnd` in `React.useCallback` in order to avoid bugs and performance issues
645
805
  */
646
806
  onAnimationEnd: PropTypes.func,
647
807
  /**
@@ -670,7 +830,26 @@ Carousel.propTypes = {
670
830
  * Note that if the immediate Carousel children do not all render as `'li'` elements,
671
831
  * this should be changed (e.g. pass tag="div") because only 'li' is a valid child of 'ul'.
672
832
  */
673
- tag: PropTypes.oneOf(layoutTags)
833
+ tag: PropTypes.oneOf(layoutTags),
834
+ /**
835
+ * If set to `true`, the Carousel will automatically transition between slides
836
+ * and show the play/pause button
837
+ * - Default value is `false`
838
+ * - `slideDuration` and `transitionDuration` are required to be set for this to work
839
+ */
840
+ autoPlay: PropTypes.bool,
841
+ /**
842
+ * Duration of the time in seconds spent on each slide
843
+ * - Default value is `0`
844
+ * - `autoPlay` and `transitionDuration` are required to be set for this to work
845
+ */
846
+ slideDuration: PropTypes.number,
847
+ /**
848
+ * Duration of the time in seconds between each slide transition
849
+ * - Default value is `0`
850
+ * - `autoPlay` and `slideDuration` are required to be set for this to work
851
+ */
852
+ transitionDuration: PropTypes.number
674
853
  };
675
854
  Carousel.Item = CarouselItem;
676
855
  Carousel.displayName = 'Carousel';
@@ -1,4 +1,4 @@
1
- import React, { forwardRef } from 'react';
1
+ import React from 'react';
2
2
  import Pressable from "react-native-web/dist/exports/Pressable";
3
3
  import Platform from "react-native-web/dist/exports/Platform";
4
4
  import StyleSheet from "react-native-web/dist/exports/StyleSheet";
@@ -12,7 +12,7 @@ import { useCarousel } from '../CarouselContext';
12
12
  * @TODO rework this after integrating with SkipLink when available.
13
13
  */
14
14
  import { jsx as _jsx } from "react/jsx-runtime";
15
- const CarouselFirstFocus = /*#__PURE__*/forwardRef((_ref, ref) => {
15
+ const CarouselFirstFocus = /*#__PURE__*/React.forwardRef((_ref, ref) => {
16
16
  let {
17
17
  title
18
18
  } = _ref;
@@ -11,7 +11,7 @@ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, vie
11
11
  * `Carousel.Item` is used to wrap the content of an individual slide and is suppsoed to be the
12
12
  * only top-level component passed to the `Carousel`
13
13
  */
14
- const CarouselItem = _ref => {
14
+ const CarouselItem = /*#__PURE__*/React.forwardRef((_ref, ref) => {
15
15
  let {
16
16
  children,
17
17
  elementIndex,
@@ -39,9 +39,10 @@ const CarouselItem = _ref => {
39
39
  style: style,
40
40
  ...selectedProps,
41
41
  ...focusabilityProps,
42
+ ref: ref,
42
43
  children: children
43
44
  });
44
- };
45
+ });
45
46
  CarouselItem.propTypes = {
46
47
  ...selectedSystemPropTypes,
47
48
  variant: variantProp.propType,