@telus-uds/components-base 2.0.0 → 2.0.2

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 (970) hide show
  1. package/CHANGELOG.md +1046 -3
  2. package/README.md +35 -0
  3. package/babel.config.cjs +35 -0
  4. package/{jest.config-android.js → jest.config-android.cjs} +1 -1
  5. package/{jest.config-ios.js → jest.config-ios.cjs} +1 -1
  6. package/{jest.config-web.js → jest.config-web.cjs} +1 -1
  7. package/jest.config.cjs +40 -0
  8. package/jest.setup.js +7 -0
  9. package/lib/A11yInfoProvider/index.js +33 -64
  10. package/lib/A11yText/index.js +29 -40
  11. package/lib/ActionCard/ActionCard.js +342 -0
  12. package/lib/ActionCard/index.js +2 -0
  13. package/lib/ActivityIndicator/Spinner.js +27 -42
  14. package/lib/ActivityIndicator/Spinner.native.js +37 -70
  15. package/lib/ActivityIndicator/index.js +17 -33
  16. package/lib/ActivityIndicator/shared.js +12 -26
  17. package/lib/Autocomplete/Autocomplete.js +478 -0
  18. package/lib/Autocomplete/Loading.js +35 -0
  19. package/lib/Autocomplete/Suggestions.js +64 -0
  20. package/lib/Autocomplete/constants.js +4 -0
  21. package/lib/Autocomplete/dictionary.js +12 -0
  22. package/lib/Autocomplete/index.js +2 -0
  23. package/lib/Badge/Badge.js +102 -0
  24. package/lib/Badge/index.js +2 -0
  25. package/lib/BaseProvider/HydrationContext.js +17 -43
  26. package/lib/BaseProvider/index.js +24 -41
  27. package/lib/Box/Box.js +191 -93
  28. package/lib/Box/backgroundImageStylesMap.js +94 -0
  29. package/lib/Box/index.js +2 -13
  30. package/lib/Button/Button.js +21 -33
  31. package/lib/Button/ButtonBase.js +143 -136
  32. package/lib/Button/ButtonDropdown.js +41 -75
  33. package/lib/Button/ButtonGroup.js +92 -110
  34. package/lib/Button/ButtonLink.js +25 -36
  35. package/lib/Button/index.js +5 -39
  36. package/lib/Button/propTypes.js +16 -40
  37. package/lib/Card/Card.js +266 -45
  38. package/lib/Card/CardBase.js +67 -40
  39. package/lib/Card/PressableCardBase.js +35 -67
  40. package/lib/Card/index.js +4 -40
  41. package/lib/CardGroup/CardGroup.js +210 -0
  42. package/lib/CardGroup/dictionary.js +8 -0
  43. package/lib/CardGroup/index.js +2 -0
  44. package/lib/Carousel/Carousel.js +476 -332
  45. package/lib/Carousel/CarouselContext.js +20 -42
  46. package/lib/Carousel/CarouselFirstFocus/CarouselFirstFocus.js +18 -39
  47. package/lib/Carousel/CarouselItem/CarouselItem.js +106 -58
  48. package/lib/Carousel/CarouselItem/index.js +2 -13
  49. package/lib/Carousel/CarouselStepTracker/CarouselStepTracker.js +21 -32
  50. package/lib/Carousel/CarouselStepTracker/index.js +2 -13
  51. package/lib/Carousel/CarouselTabs/CarouselTabs.js +17 -36
  52. package/lib/Carousel/CarouselTabs/CarouselTabsPanel.js +36 -51
  53. package/lib/Carousel/CarouselTabs/CarouselTabsPanelItem.js +25 -55
  54. package/lib/Carousel/CarouselTabs/index.js +2 -13
  55. package/lib/Carousel/CarouselThumbnail.js +76 -62
  56. package/lib/Carousel/CarouselThumbnailNavigation.js +31 -47
  57. package/lib/Carousel/dictionary.js +13 -16
  58. package/lib/Carousel/index.js +3 -41
  59. package/lib/Checkbox/Checkbox.js +64 -107
  60. package/lib/Checkbox/CheckboxButton.js +163 -0
  61. package/lib/Checkbox/CheckboxGroup.js +64 -90
  62. package/lib/Checkbox/CheckboxInput.js +16 -42
  63. package/lib/Checkbox/CheckboxInput.native.js +1 -10
  64. package/lib/Checkbox/index.js +3 -21
  65. package/{lib-module/RadioCard/RadioCard.js → lib/CheckboxCard/CheckboxCard.js} +43 -88
  66. package/lib/CheckboxCard/index.js +2 -0
  67. package/lib/CheckboxCardGroup/CheckboxCardGroup.js +206 -0
  68. package/lib/CheckboxCardGroup/index.js +2 -0
  69. package/lib/ColourToggle/ColourBubble.js +126 -0
  70. package/lib/ColourToggle/ColourToggle.js +91 -0
  71. package/lib/ColourToggle/index.js +2 -0
  72. package/lib/Divider/Divider.js +37 -54
  73. package/lib/Divider/index.js +2 -13
  74. package/lib/DownloadApp/DownloadApp.js +160 -0
  75. package/lib/DownloadApp/dictionary.js +10 -0
  76. package/lib/DownloadApp/index.js +2 -0
  77. package/lib/ExpandCollapse/Accordion.js +6 -22
  78. package/lib/ExpandCollapse/Control.js +72 -67
  79. package/lib/ExpandCollapse/ExpandCollapse.js +39 -56
  80. package/lib/ExpandCollapse/Panel.js +144 -86
  81. package/lib/ExpandCollapse/dictionary.js +10 -0
  82. package/lib/ExpandCollapse/index.js +7 -25
  83. package/lib/Feedback/Feedback.js +41 -69
  84. package/lib/Feedback/index.js +2 -13
  85. package/lib/Fieldset/Fieldset.js +81 -90
  86. package/lib/Fieldset/FieldsetContainer.js +26 -33
  87. package/lib/Fieldset/FieldsetContainer.native.js +18 -27
  88. package/lib/Fieldset/Legend.js +9 -26
  89. package/lib/Fieldset/Legend.native.js +10 -30
  90. package/lib/Fieldset/cssReset.js +2 -9
  91. package/lib/Fieldset/index.js +2 -13
  92. package/lib/FileUpload/FileUpload.js +328 -0
  93. package/lib/FileUpload/NotificationContent.js +54 -0
  94. package/lib/FileUpload/dictionary.js +40 -0
  95. package/lib/FileUpload/index.js +2 -0
  96. package/lib/FlexGrid/Col/Col.js +104 -148
  97. package/lib/FlexGrid/Col/index.js +2 -13
  98. package/lib/FlexGrid/FlexGrid.js +92 -110
  99. package/lib/FlexGrid/Row/Row.js +82 -108
  100. package/lib/FlexGrid/Row/index.js +2 -13
  101. package/lib/FlexGrid/helpers/index.js +1 -12
  102. package/lib/FlexGrid/index.js +2 -13
  103. package/lib/FlexGrid/providers/GutterContext.js +3 -15
  104. package/lib/Footnote/Footnote.js +316 -0
  105. package/lib/Footnote/FootnoteLink.js +107 -0
  106. package/lib/Footnote/dictionary.js +12 -0
  107. package/lib/Footnote/index.js +4 -0
  108. package/lib/HorizontalScroll/HorizontalScroll.js +48 -87
  109. package/lib/HorizontalScroll/HorizontalScrollButton.js +26 -52
  110. package/lib/HorizontalScroll/ScrollViewEnd.js +17 -38
  111. package/lib/HorizontalScroll/ScrollViewEnd.native.js +8 -26
  112. package/lib/HorizontalScroll/dictionary.js +2 -9
  113. package/lib/HorizontalScroll/index.js +11 -35
  114. package/lib/HorizontalScroll/itemPositions.js +25 -46
  115. package/lib/Icon/Icon.js +59 -48
  116. package/lib/Icon/IconText.js +59 -55
  117. package/lib/Icon/index.js +4 -31
  118. package/lib/IconButton/IconButton.js +127 -85
  119. package/lib/IconButton/index.js +2 -13
  120. package/lib/InputLabel/InputLabel.js +42 -76
  121. package/lib/InputLabel/LabelContent.js +10 -26
  122. package/lib/InputLabel/LabelContent.native.js +8 -27
  123. package/lib/InputLabel/index.js +2 -13
  124. package/lib/InputSupports/InputSupports.js +39 -56
  125. package/lib/InputSupports/index.js +2 -13
  126. package/lib/InputSupports/useInputSupports.js +7 -19
  127. package/lib/Link/ChevronLink.js +35 -38
  128. package/lib/Link/InlinePressable.js +14 -29
  129. package/lib/Link/InlinePressable.native.js +20 -40
  130. package/lib/Link/Link.js +9 -27
  131. package/lib/Link/LinkBase.js +96 -103
  132. package/lib/Link/TextButton.js +19 -29
  133. package/lib/Link/index.js +5 -39
  134. package/lib/List/List.js +39 -50
  135. package/lib/List/ListItem.js +13 -37
  136. package/lib/List/ListItemBase.js +72 -70
  137. package/lib/List/ListItemContent.js +36 -48
  138. package/lib/List/ListItemMark.js +42 -75
  139. package/lib/List/PressableListItemBase.js +35 -69
  140. package/lib/List/index.js +5 -28
  141. package/lib/Listbox/GroupControl.js +105 -0
  142. package/lib/Listbox/Listbox.js +171 -0
  143. package/lib/Listbox/ListboxContext.js +4 -0
  144. package/lib/Listbox/ListboxGroup.js +125 -0
  145. package/lib/Listbox/ListboxItem.js +76 -0
  146. package/lib/Listbox/ListboxOverlay.js +77 -0
  147. package/lib/Listbox/PressableItem.js +139 -0
  148. package/lib/Listbox/index.js +2 -0
  149. package/lib/Modal/Modal.js +212 -96
  150. package/lib/Modal/ModalContent.js +179 -0
  151. package/lib/Modal/WebModal.js +76 -0
  152. package/lib/Modal/dictionary.js +2 -9
  153. package/lib/Modal/index.js +2 -13
  154. package/lib/MultiSelectFilter/ModalOverlay.js +114 -95
  155. package/lib/MultiSelectFilter/MultiSelectFilter.js +380 -170
  156. package/lib/MultiSelectFilter/dictionary.js +2 -9
  157. package/lib/MultiSelectFilter/index.js +2 -13
  158. package/lib/Notification/Notification.js +290 -116
  159. package/lib/Notification/dictionary.js +2 -9
  160. package/lib/Notification/index.js +2 -13
  161. package/lib/OrderedList/Item.js +159 -0
  162. package/lib/OrderedList/ItemBase.js +43 -0
  163. package/lib/OrderedList/OrderedList.js +64 -0
  164. package/lib/OrderedList/OrderedListBase.js +36 -0
  165. package/lib/OrderedList/index.js +2 -0
  166. package/lib/Pagination/PageButton.js +38 -57
  167. package/lib/Pagination/Pagination.js +124 -95
  168. package/lib/Pagination/SideButton.js +25 -58
  169. package/lib/Pagination/constants.js +3 -0
  170. package/lib/Pagination/dictionary.js +5 -12
  171. package/lib/Pagination/index.js +2 -13
  172. package/lib/Pagination/usePagination.js +20 -23
  173. package/lib/Portal/Portal.js +50 -0
  174. package/lib/Portal/Portal.native.js +2 -0
  175. package/lib/Portal/index.js +2 -0
  176. package/lib/PriceLockup/PriceLockup.js +223 -0
  177. package/lib/PriceLockup/index.js +2 -0
  178. package/lib/PriceLockup/utils/renderFootnoteContent.js +85 -0
  179. package/lib/PriceLockup/utils/renderFootnoteLinks.js +28 -0
  180. package/lib/PriceLockup/utils/renderPrice.js +139 -0
  181. package/lib/PriceLockup/utils/renderTypography.js +23 -0
  182. package/lib/ProductCard/ProductCard.js +231 -0
  183. package/lib/ProductCard/dictionary.js +38 -0
  184. package/lib/ProductCard/index.js +2 -0
  185. package/lib/ProductCardGroup/ProductCardGroup.js +70 -0
  186. package/lib/ProductCardGroup/index.js +2 -0
  187. package/lib/Progress/Progress.js +22 -43
  188. package/lib/Progress/ProgressBar.js +31 -60
  189. package/lib/Progress/ProgressBarBackground.js +13 -35
  190. package/lib/Progress/index.js +4 -16
  191. package/lib/QuickLinks/QuickLinks.js +31 -44
  192. package/lib/QuickLinks/QuickLinksCard.js +16 -30
  193. package/lib/QuickLinks/QuickLinksItem.js +22 -44
  194. package/lib/QuickLinks/index.js +4 -16
  195. package/lib/QuickLinksFeature/QuickLinksFeature.js +25 -47
  196. package/lib/QuickLinksFeature/QuickLinksFeatureItem.js +88 -99
  197. package/lib/QuickLinksFeature/index.js +4 -16
  198. package/lib/Radio/Radio.js +63 -95
  199. package/lib/Radio/RadioButton.js +94 -76
  200. package/lib/Radio/RadioGroup.js +70 -94
  201. package/lib/Radio/RadioInput.js +18 -46
  202. package/lib/Radio/RadioInput.native.js +1 -10
  203. package/lib/Radio/index.js +3 -21
  204. package/lib/RadioCard/RadioCard.js +47 -90
  205. package/lib/RadioCard/RadioCardGroup.js +66 -91
  206. package/lib/RadioCard/index.js +3 -21
  207. package/lib/Responsive/Responsive.js +48 -41
  208. package/{lib-module/Responsive/Responsive.js → lib/Responsive/ResponsiveProp.js} +13 -20
  209. package/lib/Responsive/ResponsiveWithMediaQueryStyleSheet.js +68 -0
  210. package/lib/Responsive/index.js +2 -13
  211. package/lib/Search/Search.js +73 -96
  212. package/lib/Search/dictionary.js +2 -9
  213. package/lib/Search/index.js +2 -13
  214. package/lib/Select/Group.js +15 -25
  215. package/lib/Select/Group.native.js +8 -18
  216. package/lib/Select/Item.js +14 -23
  217. package/lib/Select/Item.native.js +1 -10
  218. package/lib/Select/Picker.js +71 -60
  219. package/lib/Select/Picker.native.js +40 -65
  220. package/lib/Select/Select.js +70 -109
  221. package/lib/Select/constants.js +4 -14
  222. package/lib/Select/index.js +6 -19
  223. package/lib/SideNav/Item.js +41 -65
  224. package/lib/SideNav/ItemContent.js +22 -41
  225. package/lib/SideNav/ItemsGroup.js +43 -60
  226. package/lib/SideNav/SideNav.js +42 -68
  227. package/lib/SideNav/index.js +1 -15
  228. package/lib/Skeleton/Skeleton.js +54 -86
  229. package/lib/Skeleton/index.js +2 -13
  230. package/lib/Skeleton/skeleton.constant.js +2 -12
  231. package/lib/Skeleton/skeletonWebAnimation.js +12 -25
  232. package/lib/Skeleton/useSkeletonNativeAnimation.js +22 -33
  233. package/lib/SkipLink/SkipLink.js +48 -75
  234. package/lib/SkipLink/index.js +2 -13
  235. package/lib/Spacer/Spacer.js +17 -41
  236. package/lib/Spacer/index.js +2 -13
  237. package/lib/StackView/StackView.js +34 -59
  238. package/lib/StackView/StackWrap.js +23 -44
  239. package/lib/StackView/StackWrap.native.js +2 -12
  240. package/lib/StackView/StackWrapBox.js +32 -58
  241. package/lib/StackView/StackWrapGap.js +22 -45
  242. package/lib/StackView/common.js +4 -19
  243. package/lib/StackView/getStackedContent.js +21 -41
  244. package/lib/StackView/index.js +5 -29
  245. package/lib/Status/Status.js +165 -0
  246. package/lib/Status/index.js +2 -0
  247. package/lib/StepTracker/Step.js +70 -79
  248. package/lib/StepTracker/StepTracker.js +67 -79
  249. package/lib/StepTracker/dictionary.js +26 -13
  250. package/lib/StepTracker/index.js +2 -13
  251. package/lib/TabBar/TabBar.js +125 -0
  252. package/lib/TabBar/TabBarItem.js +175 -0
  253. package/lib/TabBar/index.js +2 -0
  254. package/lib/Tabs/Tabs.js +75 -71
  255. package/lib/Tabs/TabsItem.js +70 -91
  256. package/lib/Tabs/index.js +2 -13
  257. package/lib/Tags/Tags.js +59 -97
  258. package/lib/Tags/index.js +2 -13
  259. package/lib/TextInput/TextArea.js +27 -46
  260. package/lib/TextInput/TextInput.js +38 -54
  261. package/lib/TextInput/TextInputBase.js +210 -137
  262. package/lib/TextInput/dictionary.js +8 -11
  263. package/lib/TextInput/index.js +3 -23
  264. package/lib/TextInput/propTypes.js +11 -21
  265. package/lib/ThemeProvider/ThemeProvider.js +40 -52
  266. package/lib/ThemeProvider/index.js +7 -61
  267. package/lib/ThemeProvider/useResponsiveThemeTokens.js +81 -0
  268. package/lib/ThemeProvider/useSetTheme.js +10 -20
  269. package/lib/ThemeProvider/useTheme.js +5 -17
  270. package/lib/ThemeProvider/useThemeTokens.js +16 -33
  271. package/lib/ThemeProvider/utils/index.js +2 -31
  272. package/lib/ThemeProvider/utils/styles.js +48 -60
  273. package/lib/ThemeProvider/utils/theme-tokens.js +37 -78
  274. package/lib/Timeline/Timeline.js +39 -63
  275. package/lib/Timeline/index.js +2 -13
  276. package/lib/ToggleSwitch/ToggleSwitch.js +105 -108
  277. package/lib/ToggleSwitch/ToggleSwitchGroup.js +47 -91
  278. package/lib/ToggleSwitch/index.js +3 -23
  279. package/lib/Tooltip/Backdrop.js +22 -29
  280. package/lib/Tooltip/Backdrop.native.js +14 -33
  281. package/lib/Tooltip/Tooltip.js +65 -92
  282. package/lib/Tooltip/Tooltip.native.js +107 -110
  283. package/lib/Tooltip/dictionary.js +2 -9
  284. package/lib/Tooltip/getTooltipPosition.js +35 -49
  285. package/lib/Tooltip/index.js +5 -18
  286. package/lib/Tooltip/shared.js +26 -24
  287. package/lib/TooltipButton/TooltipButton.js +48 -53
  288. package/lib/TooltipButton/index.js +2 -13
  289. package/lib/Typography/Typography.js +164 -87
  290. package/lib/Typography/index.js +2 -13
  291. package/lib/Validator/Validator.js +222 -0
  292. package/lib/Validator/index.js +2 -0
  293. package/lib/ViewportProvider/ViewportProvider.js +11 -31
  294. package/lib/ViewportProvider/index.js +3 -28
  295. package/lib/ViewportProvider/useViewport.js +3 -15
  296. package/lib/ViewportProvider/useViewportListener.js +13 -29
  297. package/lib/index.js +71 -681
  298. package/lib/server.js +4 -0
  299. package/lib/utils/BaseView/BaseView.js +14 -36
  300. package/lib/utils/BaseView/BaseView.native.js +2 -13
  301. package/lib/utils/BaseView/index.js +2 -13
  302. package/lib/utils/a11y/index.js +2 -31
  303. package/lib/utils/a11y/semantics.js +18 -60
  304. package/lib/utils/a11y/textSize.js +8 -24
  305. package/lib/utils/animation/index.js +2 -15
  306. package/lib/utils/animation/useVerticalExpandAnimation.js +27 -47
  307. package/lib/utils/children.js +25 -47
  308. package/lib/utils/containUniqueFields.js +3 -13
  309. package/lib/utils/convertFromMegaByteToByte.js +10 -0
  310. package/lib/utils/floating-ui/index.js +1 -43
  311. package/lib/utils/floating-ui/index.native.js +1 -43
  312. package/lib/utils/formatImageSource.js +27 -0
  313. package/lib/utils/hasOwnProperty.js +1 -8
  314. package/lib/utils/htmlAttrs.js +23 -0
  315. package/lib/utils/index.js +25 -222
  316. package/lib/utils/info/index.js +6 -17
  317. package/lib/utils/info/platform/index.js +8 -17
  318. package/lib/utils/info/platform/platform.android.js +1 -8
  319. package/lib/utils/info/platform/platform.ios.js +1 -8
  320. package/lib/utils/info/platform/platform.js +1 -8
  321. package/lib/utils/info/platform/platform.native.js +1 -8
  322. package/lib/utils/info/versions.js +4 -14
  323. package/lib/utils/input.js +38 -52
  324. package/lib/utils/pressability.js +18 -40
  325. package/lib/utils/props/a11yProps.js +105 -119
  326. package/lib/utils/props/clickProps.js +4 -16
  327. package/lib/utils/props/componentPropType.js +4 -24
  328. package/lib/utils/props/copyPropTypes.js +2 -14
  329. package/lib/utils/props/getPropSelector.js +15 -21
  330. package/lib/utils/props/handlerProps.js +28 -52
  331. package/lib/utils/props/hrefAttrsProp.js +6 -17
  332. package/lib/utils/props/index.js +19 -190
  333. package/lib/utils/props/inputSupportsProps.js +22 -27
  334. package/lib/utils/props/linkProps.js +17 -35
  335. package/lib/utils/props/paddingProp.js +8 -19
  336. package/lib/utils/props/pressProps.js +23 -38
  337. package/lib/utils/props/rectProp.js +8 -19
  338. package/lib/utils/props/responsiveProps.js +6 -18
  339. package/lib/utils/props/selectSystemProps.js +7 -15
  340. package/lib/utils/props/spacingProps.js +13 -27
  341. package/lib/utils/props/textInputProps.js +64 -90
  342. package/lib/utils/props/textProps.js +23 -34
  343. package/lib/utils/props/tokens.js +26 -55
  344. package/lib/utils/props/variantProp.js +4 -14
  345. package/lib/utils/props/viewProps.js +10 -23
  346. package/lib/utils/ssr-media-query/create-stylesheet/create-stylesheet-mobile.js +48 -0
  347. package/lib/utils/ssr-media-query/create-stylesheet/index.android.js +2 -0
  348. package/lib/utils/ssr-media-query/create-stylesheet/index.ios.js +2 -0
  349. package/lib/utils/ssr-media-query/create-stylesheet/index.js +36 -0
  350. package/lib/utils/ssr-media-query/hash.js +13 -0
  351. package/lib/utils/ssr-media-query/index.js +6 -0
  352. package/lib/utils/ssr-media-query/utils/common.js +33 -0
  353. package/lib/utils/ssr-media-query/utils/create-declaration-block.js +16 -0
  354. package/lib/utils/ssr-media-query/utils/create-media-query-styles.js +60 -0
  355. package/lib/utils/ssr-media-query/utils/hyphenate-style-name.js +12 -0
  356. package/lib/utils/ssr-media-query/utils/inject.js +39 -0
  357. package/lib/utils/ssr.js +27 -55
  358. package/lib/utils/transformGradient.js +15 -0
  359. package/lib/utils/useCopy.js +4 -15
  360. package/lib/utils/useHash.js +11 -23
  361. package/lib/utils/useHash.native.js +1 -10
  362. package/lib/utils/useOverlaidPosition.js +214 -0
  363. package/lib/utils/useResponsiveProp.js +13 -29
  364. package/lib/utils/useSafeLayoutEffect.js +10 -22
  365. package/lib/utils/useScrollBlocking.js +13 -28
  366. package/lib/utils/useScrollBlocking.native.js +1 -10
  367. package/lib/utils/useSpacingScale.js +12 -24
  368. package/lib/utils/useUniqueId.js +4 -15
  369. package/lib/utils/withLinkRouter.js +23 -36
  370. package/package.json +32 -22
  371. package/src/A11yInfoProvider/index.jsx +13 -20
  372. package/src/A11yText/index.jsx +14 -4
  373. package/src/ActionCard/ActionCard.jsx +306 -0
  374. package/src/ActionCard/index.js +3 -0
  375. package/src/ActivityIndicator/Spinner.jsx +3 -2
  376. package/src/ActivityIndicator/Spinner.native.jsx +2 -2
  377. package/src/ActivityIndicator/index.jsx +12 -3
  378. package/src/Autocomplete/Autocomplete.jsx +486 -0
  379. package/src/Autocomplete/Loading.jsx +21 -0
  380. package/src/Autocomplete/Suggestions.jsx +54 -0
  381. package/src/Autocomplete/constants.js +4 -0
  382. package/src/Autocomplete/dictionary.js +12 -0
  383. package/src/Autocomplete/index.js +3 -0
  384. package/src/Badge/Badge.jsx +76 -0
  385. package/src/Badge/index.js +3 -0
  386. package/src/BaseProvider/HydrationContext.jsx +5 -5
  387. package/src/BaseProvider/index.jsx +5 -2
  388. package/src/Box/Box.jsx +162 -20
  389. package/src/Box/backgroundImageStylesMap.js +21 -0
  390. package/src/Button/Button.jsx +12 -7
  391. package/src/Button/ButtonBase.jsx +76 -35
  392. package/src/Button/ButtonDropdown.jsx +5 -2
  393. package/src/Button/ButtonGroup.jsx +20 -3
  394. package/src/Button/ButtonLink.jsx +10 -4
  395. package/src/Card/Card.jsx +269 -17
  396. package/src/Card/CardBase.jsx +79 -28
  397. package/src/Card/PressableCardBase.jsx +21 -5
  398. package/src/CardGroup/CardGroup.jsx +249 -0
  399. package/src/CardGroup/dictionary.js +8 -0
  400. package/src/CardGroup/index.js +3 -0
  401. package/src/Carousel/Carousel.jsx +406 -117
  402. package/src/Carousel/CarouselFirstFocus/CarouselFirstFocus.jsx +2 -2
  403. package/src/Carousel/CarouselItem/CarouselItem.jsx +99 -18
  404. package/src/Carousel/CarouselStepTracker/CarouselStepTracker.jsx +15 -5
  405. package/src/Carousel/CarouselTabs/CarouselTabs.jsx +2 -2
  406. package/src/Carousel/CarouselTabs/CarouselTabsPanel.jsx +22 -12
  407. package/src/Carousel/CarouselTabs/CarouselTabsPanelItem.jsx +3 -3
  408. package/src/Carousel/CarouselThumbnail.jsx +45 -27
  409. package/src/Carousel/CarouselThumbnailNavigation.jsx +11 -7
  410. package/src/Carousel/dictionary.js +11 -7
  411. package/src/Checkbox/Checkbox.jsx +8 -4
  412. package/src/Checkbox/CheckboxButton.jsx +178 -0
  413. package/src/Checkbox/CheckboxGroup.jsx +24 -4
  414. package/src/Checkbox/CheckboxInput.jsx +15 -12
  415. package/src/CheckboxCard/CheckboxCard.jsx +190 -0
  416. package/src/CheckboxCard/index.js +3 -0
  417. package/src/CheckboxCardGroup/CheckboxCardGroup.jsx +231 -0
  418. package/src/CheckboxCardGroup/index.js +3 -0
  419. package/src/ColourToggle/ColourBubble.jsx +112 -0
  420. package/src/ColourToggle/ColourToggle.jsx +83 -0
  421. package/src/ColourToggle/index.js +3 -0
  422. package/src/Divider/Divider.jsx +5 -2
  423. package/src/DownloadApp/DownloadApp.jsx +165 -0
  424. package/src/DownloadApp/dictionary.js +10 -0
  425. package/src/DownloadApp/index.js +3 -0
  426. package/src/ExpandCollapse/Accordion.jsx +4 -2
  427. package/src/ExpandCollapse/Control.jsx +44 -14
  428. package/src/ExpandCollapse/ExpandCollapse.jsx +15 -7
  429. package/src/ExpandCollapse/Panel.jsx +119 -24
  430. package/src/ExpandCollapse/dictionary.js +10 -0
  431. package/src/Feedback/Feedback.jsx +3 -4
  432. package/src/Fieldset/Fieldset.jsx +47 -23
  433. package/src/Fieldset/FieldsetContainer.jsx +15 -7
  434. package/src/Fieldset/FieldsetContainer.native.jsx +15 -7
  435. package/src/Fieldset/Legend.jsx +2 -2
  436. package/src/Fieldset/Legend.native.jsx +2 -2
  437. package/src/FileUpload/FileUpload.jsx +396 -0
  438. package/src/FileUpload/NotificationContent.jsx +44 -0
  439. package/src/FileUpload/dictionary.js +40 -0
  440. package/src/FileUpload/index.js +3 -0
  441. package/src/FlexGrid/Col/Col.jsx +76 -79
  442. package/src/FlexGrid/FlexGrid.jsx +62 -43
  443. package/src/FlexGrid/Row/Row.jsx +60 -54
  444. package/src/Footnote/Footnote.jsx +326 -0
  445. package/src/Footnote/FootnoteLink.jsx +110 -0
  446. package/src/Footnote/dictionary.js +12 -0
  447. package/src/Footnote/index.js +6 -0
  448. package/src/HorizontalScroll/HorizontalScroll.jsx +8 -8
  449. package/src/HorizontalScroll/HorizontalScrollButton.jsx +2 -2
  450. package/src/HorizontalScroll/ScrollViewEnd.jsx +4 -8
  451. package/src/HorizontalScroll/ScrollViewEnd.native.jsx +2 -2
  452. package/src/Icon/Icon.jsx +53 -6
  453. package/src/Icon/IconText.jsx +46 -14
  454. package/src/IconButton/IconButton.jsx +116 -20
  455. package/src/InputLabel/InputLabel.jsx +8 -6
  456. package/src/InputLabel/LabelContent.jsx +2 -2
  457. package/src/InputLabel/LabelContent.native.jsx +2 -2
  458. package/src/InputSupports/InputSupports.jsx +22 -3
  459. package/src/Link/ChevronLink.jsx +24 -7
  460. package/src/Link/InlinePressable.jsx +23 -15
  461. package/src/Link/InlinePressable.native.jsx +12 -6
  462. package/src/Link/Link.jsx +2 -2
  463. package/src/Link/LinkBase.jsx +75 -31
  464. package/src/Link/TextButton.jsx +11 -4
  465. package/src/List/List.jsx +26 -8
  466. package/src/List/ListItem.jsx +3 -5
  467. package/src/List/ListItemBase.jsx +38 -9
  468. package/src/List/ListItemContent.jsx +24 -6
  469. package/src/List/ListItemMark.jsx +14 -13
  470. package/src/List/PressableListItemBase.jsx +4 -2
  471. package/src/Listbox/GroupControl.jsx +101 -0
  472. package/src/Listbox/Listbox.jsx +177 -0
  473. package/src/Listbox/ListboxContext.js +6 -0
  474. package/src/Listbox/ListboxGroup.jsx +127 -0
  475. package/src/Listbox/ListboxItem.jsx +87 -0
  476. package/src/Listbox/ListboxOverlay.jsx +81 -0
  477. package/src/Listbox/PressableItem.jsx +138 -0
  478. package/src/Listbox/index.js +3 -0
  479. package/src/Modal/Modal.jsx +190 -16
  480. package/src/Modal/ModalContent.jsx +180 -0
  481. package/src/Modal/WebModal.jsx +70 -0
  482. package/src/MultiSelectFilter/ModalOverlay.jsx +103 -30
  483. package/src/MultiSelectFilter/MultiSelectFilter.jsx +326 -68
  484. package/src/Notification/Notification.jsx +273 -49
  485. package/src/OrderedList/Item.jsx +147 -0
  486. package/src/OrderedList/ItemBase.jsx +43 -0
  487. package/src/OrderedList/OrderedList.jsx +64 -0
  488. package/src/OrderedList/OrderedListBase.jsx +33 -0
  489. package/src/OrderedList/index.js +3 -0
  490. package/src/Pagination/PageButton.jsx +14 -5
  491. package/src/Pagination/Pagination.jsx +83 -17
  492. package/src/Pagination/SideButton.jsx +2 -2
  493. package/src/Pagination/constants.js +3 -0
  494. package/src/Pagination/dictionary.js +3 -3
  495. package/src/Pagination/usePagination.js +14 -3
  496. package/src/Portal/Portal.jsx +52 -0
  497. package/src/Portal/Portal.native.jsx +3 -0
  498. package/src/Portal/index.js +3 -0
  499. package/src/PriceLockup/PriceLockup.jsx +237 -0
  500. package/src/PriceLockup/index.js +3 -0
  501. package/src/PriceLockup/utils/renderFootnoteContent.jsx +77 -0
  502. package/src/PriceLockup/utils/renderFootnoteLinks.jsx +38 -0
  503. package/src/PriceLockup/utils/renderPrice.jsx +201 -0
  504. package/src/PriceLockup/utils/renderTypography.jsx +13 -0
  505. package/src/ProductCard/ProductCard.jsx +199 -0
  506. package/src/ProductCard/dictionary.js +38 -0
  507. package/src/ProductCard/index.js +3 -0
  508. package/src/ProductCardGroup/ProductCardGroup.jsx +75 -0
  509. package/src/ProductCardGroup/index.js +3 -0
  510. package/src/Progress/Progress.jsx +8 -5
  511. package/src/Progress/ProgressBar.jsx +6 -4
  512. package/src/Progress/ProgressBarBackground.jsx +6 -4
  513. package/src/QuickLinks/QuickLinks.jsx +11 -2
  514. package/src/QuickLinks/QuickLinksCard.jsx +9 -3
  515. package/src/QuickLinks/QuickLinksItem.jsx +2 -2
  516. package/src/QuickLinksFeature/QuickLinksFeature.jsx +31 -27
  517. package/src/QuickLinksFeature/QuickLinksFeatureItem.jsx +43 -36
  518. package/src/Radio/Radio.jsx +24 -6
  519. package/src/Radio/RadioButton.jsx +58 -6
  520. package/src/Radio/RadioGroup.jsx +27 -5
  521. package/src/Radio/RadioInput.jsx +15 -14
  522. package/src/RadioCard/RadioCard.jsx +2 -2
  523. package/src/RadioCard/RadioCardGroup.jsx +25 -4
  524. package/src/Responsive/Responsive.jsx +43 -13
  525. package/src/Responsive/ResponsiveProp.jsx +33 -0
  526. package/src/Responsive/ResponsiveWithMediaQueryStyleSheet.jsx +67 -0
  527. package/src/Search/Search.jsx +10 -5
  528. package/src/Select/Group.jsx +12 -3
  529. package/src/Select/Group.native.jsx +3 -0
  530. package/src/Select/Item.jsx +10 -1
  531. package/src/Select/Picker.jsx +32 -5
  532. package/src/Select/Picker.native.jsx +3 -3
  533. package/src/Select/Select.jsx +27 -10
  534. package/src/SideNav/Item.jsx +12 -7
  535. package/src/SideNav/ItemContent.jsx +14 -6
  536. package/src/SideNav/ItemsGroup.jsx +15 -4
  537. package/src/SideNav/SideNav.jsx +11 -3
  538. package/src/Skeleton/Skeleton.jsx +19 -7
  539. package/src/Skeleton/skeleton.constant.js +0 -1
  540. package/src/Skeleton/skeletonWebAnimation.js +11 -11
  541. package/src/Skeleton/useSkeletonNativeAnimation.js +5 -4
  542. package/src/SkipLink/SkipLink.jsx +14 -14
  543. package/src/Spacer/Spacer.jsx +2 -2
  544. package/src/StackView/StackView.jsx +5 -4
  545. package/src/StackView/StackWrap.jsx +3 -3
  546. package/src/StackView/StackWrapBox.jsx +2 -2
  547. package/src/StackView/StackWrapGap.jsx +2 -2
  548. package/src/StackView/getStackedContent.jsx +16 -7
  549. package/src/Status/Status.jsx +153 -0
  550. package/src/Status/index.js +3 -0
  551. package/src/StepTracker/Step.jsx +102 -70
  552. package/src/StepTracker/StepTracker.jsx +28 -6
  553. package/src/StepTracker/dictionary.js +24 -4
  554. package/src/TabBar/TabBar.jsx +123 -0
  555. package/src/TabBar/TabBarItem.jsx +149 -0
  556. package/src/TabBar/index.js +3 -0
  557. package/src/Tabs/Tabs.jsx +37 -5
  558. package/src/Tabs/TabsItem.jsx +19 -7
  559. package/src/Tags/Tags.jsx +7 -3
  560. package/src/TextInput/TextArea.jsx +3 -3
  561. package/src/TextInput/TextInput.jsx +11 -7
  562. package/src/TextInput/TextInputBase.jsx +145 -29
  563. package/src/TextInput/dictionary.js +6 -2
  564. package/src/TextInput/propTypes.js +4 -0
  565. package/src/ThemeProvider/ThemeProvider.jsx +17 -7
  566. package/src/ThemeProvider/index.js +1 -0
  567. package/src/ThemeProvider/useResponsiveThemeTokens.js +85 -0
  568. package/src/ThemeProvider/utils/styles.js +34 -2
  569. package/src/Timeline/Timeline.jsx +10 -6
  570. package/src/ToggleSwitch/ToggleSwitch.jsx +28 -11
  571. package/src/ToggleSwitch/ToggleSwitchGroup.jsx +2 -2
  572. package/src/Tooltip/Tooltip.jsx +38 -9
  573. package/src/Tooltip/Tooltip.native.jsx +82 -20
  574. package/src/Tooltip/getTooltipPosition.js +12 -13
  575. package/src/Tooltip/shared.js +17 -0
  576. package/src/TooltipButton/TooltipButton.jsx +34 -8
  577. package/src/Typography/Typography.jsx +173 -29
  578. package/src/Validator/Validator.jsx +230 -0
  579. package/src/Validator/index.js +3 -0
  580. package/src/ViewportProvider/ViewportProvider.jsx +2 -2
  581. package/src/index.js +31 -12
  582. package/src/server.js +4 -0
  583. package/src/utils/BaseView/BaseView.jsx +2 -2
  584. package/src/utils/a11y/semantics.js +7 -14
  585. package/src/utils/animation/useVerticalExpandAnimation.js +3 -3
  586. package/src/utils/children.jsx +4 -4
  587. package/src/utils/convertFromMegaByteToByte.js +11 -0
  588. package/src/utils/formatImageSource.js +29 -0
  589. package/src/utils/htmlAttrs.js +29 -0
  590. package/src/utils/index.js +6 -1
  591. package/src/utils/props/handlerProps.js +5 -1
  592. package/src/utils/props/inputSupportsProps.js +21 -1
  593. package/src/utils/props/textInputProps.js +1 -0
  594. package/src/utils/props/tokens.js +4 -2
  595. package/src/utils/ssr-media-query/create-stylesheet/create-stylesheet-mobile.js +41 -0
  596. package/src/utils/ssr-media-query/create-stylesheet/index.android.js +3 -0
  597. package/src/utils/ssr-media-query/create-stylesheet/index.ios.js +3 -0
  598. package/src/utils/ssr-media-query/create-stylesheet/index.js +35 -0
  599. package/src/utils/ssr-media-query/hash.js +16 -0
  600. package/src/utils/ssr-media-query/index.js +8 -0
  601. package/src/utils/ssr-media-query/utils/common.js +38 -0
  602. package/src/utils/ssr-media-query/utils/create-declaration-block.js +21 -0
  603. package/src/utils/ssr-media-query/utils/create-media-query-styles.js +46 -0
  604. package/src/utils/ssr-media-query/utils/hyphenate-style-name.js +15 -0
  605. package/src/utils/ssr-media-query/utils/inject.js +43 -0
  606. package/src/utils/ssr.jsx +3 -1
  607. package/src/utils/transformGradient.js +17 -0
  608. package/src/utils/useOverlaidPosition.js +224 -0
  609. package/src/utils/withLinkRouter.jsx +3 -3
  610. package/types/Badge.d.ts +28 -0
  611. package/types/Box.d.ts +52 -0
  612. package/types/Checkbox.d.ts +47 -0
  613. package/types/CheckboxCardGroup.d.ts +72 -0
  614. package/types/ChevronLink.d.ts +47 -0
  615. package/types/Common.d.ts +106 -0
  616. package/types/Divider.d.ts +19 -0
  617. package/types/ExpandCollapse.d.ts +65 -0
  618. package/types/FileUpload.d.ts +40 -0
  619. package/types/HorizontalScrollButton.d.ts +16 -0
  620. package/types/Icon.d.ts +21 -0
  621. package/types/Link.d.ts +48 -0
  622. package/types/List.d.ts +48 -0
  623. package/types/Portal.d.ts +5 -0
  624. package/types/Search.d.ts +38 -0
  625. package/types/Select.d.ts +57 -0
  626. package/types/Spacer.d.ts +5 -0
  627. package/types/StackView.d.ts +28 -0
  628. package/types/Tabs.d.ts +46 -0
  629. package/types/TextButton.d.ts +11 -0
  630. package/types/ToggleSwitch.d.ts +54 -0
  631. package/types/ToolTip.d.ts +40 -0
  632. package/types/Typography.d.ts +40 -0
  633. package/types/index.d.ts +78 -0
  634. package/.eslintrc.js +0 -9
  635. package/__tests17__/A11yText/A11yText.test.jsx +0 -34
  636. package/__tests17__/ActivityIndicator/ActivityIndicator.test.jsx +0 -68
  637. package/__tests17__/ActivityIndicator/__snapshots__/ActivityIndicator.test.jsx.snap +0 -299
  638. package/__tests17__/Box/Box.test.jsx +0 -111
  639. package/__tests17__/Button/Button.test.jsx +0 -86
  640. package/__tests17__/Button/ButtonBase.test.jsx +0 -82
  641. package/__tests17__/Button/ButtonGroup.test.jsx +0 -347
  642. package/__tests17__/Button/ButtonLink.test.jsx +0 -61
  643. package/__tests17__/Card/Card.test.jsx +0 -63
  644. package/__tests17__/Carousel/Carousel.test.jsx +0 -128
  645. package/__tests17__/Carousel/CarouselTabs.test.jsx +0 -142
  646. package/__tests17__/Checkbox/Checkbox.test.jsx +0 -94
  647. package/__tests17__/Checkbox/CheckboxGroup.test.jsx +0 -246
  648. package/__tests17__/Divider/Divider.test.jsx +0 -91
  649. package/__tests17__/ExpandCollapse/ExpandCollapse.test.jsx +0 -109
  650. package/__tests17__/Feedback/Feedback.test.jsx +0 -42
  651. package/__tests17__/FlexGrid/Col.test.jsx +0 -261
  652. package/__tests17__/FlexGrid/FlexGrid.test.jsx +0 -136
  653. package/__tests17__/FlexGrid/Row.test.jsx +0 -273
  654. package/__tests17__/HorizontalScroll/HorizontalScroll.test.jsx +0 -165
  655. package/__tests17__/Icon/Icon.test.jsx +0 -61
  656. package/__tests17__/IconButton/IconButton.test.jsx +0 -52
  657. package/__tests17__/InputLabel/InputLabel.test.jsx +0 -28
  658. package/__tests17__/InputLabel/__snapshots__/InputLabel.test.jsx.snap +0 -3
  659. package/__tests17__/InputSupports/InputSupports.test.jsx +0 -60
  660. package/__tests17__/Link/Link.test.jsx +0 -63
  661. package/__tests17__/Link/TextButton.test.jsx +0 -35
  662. package/__tests17__/List/List.test.jsx +0 -82
  663. package/__tests17__/Modal/Modal.test.jsx +0 -47
  664. package/__tests17__/Notification/Notification.test.jsx +0 -20
  665. package/__tests17__/Pagination/Pagination.test.jsx +0 -160
  666. package/__tests17__/Progress/Progress.test.jsx +0 -79
  667. package/__tests17__/Radio/Radio.test.jsx +0 -87
  668. package/__tests17__/Radio/RadioGroup.test.jsx +0 -220
  669. package/__tests17__/RadioCard/RadioCard.test.jsx +0 -87
  670. package/__tests17__/RadioCard/RadioCardGroup.test.jsx +0 -246
  671. package/__tests17__/Search/Search.test.jsx +0 -87
  672. package/__tests17__/Select/Select.test.jsx +0 -94
  673. package/__tests17__/SideNav/SideNav.test.jsx +0 -110
  674. package/__tests17__/Skeleton/Skeleton.test.jsx +0 -61
  675. package/__tests17__/SkipLink/SkipLink.test.jsx +0 -61
  676. package/__tests17__/Spacer/Spacer.test.jsx +0 -63
  677. package/__tests17__/StackView/StackView.test.jsx +0 -211
  678. package/__tests17__/StackView/StackWrap.test.jsx +0 -47
  679. package/__tests17__/StackView/getStackedContent.test.jsx +0 -295
  680. package/__tests17__/StepTracker/StepTracker.test.jsx +0 -108
  681. package/__tests17__/Tabs/Tabs.test.jsx +0 -49
  682. package/__tests17__/Tags/Tags.test.jsx +0 -327
  683. package/__tests17__/TextInput/TextArea.test.jsx +0 -35
  684. package/__tests17__/TextInput/TextInputBase.test.jsx +0 -125
  685. package/__tests17__/ThemeProvider/ThemeProvider.test.jsx +0 -82
  686. package/__tests17__/ThemeProvider/useThemeTokens.test.jsx +0 -514
  687. package/__tests17__/ThemeProvider/utils/theme-tokens.test.js +0 -41
  688. package/__tests17__/ToggleSwitch/ToggleSwitch.test.jsx +0 -82
  689. package/__tests17__/ToggleSwitch/ToggleSwitchGroup.test.jsx +0 -192
  690. package/__tests17__/Tooltip/Tooltip.test.jsx +0 -65
  691. package/__tests17__/Tooltip/getTooltipPosition.test.js +0 -79
  692. package/__tests17__/Typography/typography.test.jsx +0 -90
  693. package/__tests17__/utils/children.test.jsx +0 -128
  694. package/__tests17__/utils/containUniqueFields.test.js +0 -25
  695. package/__tests17__/utils/input.test.js +0 -375
  696. package/__tests17__/utils/props.test.js +0 -36
  697. package/__tests17__/utils/semantics.test.jsx +0 -34
  698. package/__tests17__/utils/useCopy.test.js +0 -42
  699. package/__tests17__/utils/useResponsiveProp.test.jsx +0 -202
  700. package/__tests17__/utils/useSpacingScale.test.jsx +0 -273
  701. package/__tests17__/utils/useUniqueId.test.js +0 -31
  702. package/component-docs.json +0 -13646
  703. package/lib-module/A11yInfoProvider/index.js +0 -73
  704. package/lib-module/A11yText/index.js +0 -56
  705. package/lib-module/ActivityIndicator/Spinner.js +0 -79
  706. package/lib-module/ActivityIndicator/Spinner.native.js +0 -146
  707. package/lib-module/ActivityIndicator/index.js +0 -48
  708. package/lib-module/ActivityIndicator/shared.js +0 -13
  709. package/lib-module/BaseProvider/HydrationContext.js +0 -51
  710. package/lib-module/BaseProvider/index.js +0 -41
  711. package/lib-module/Box/Box.js +0 -259
  712. package/lib-module/Box/index.js +0 -2
  713. package/lib-module/Button/Button.js +0 -26
  714. package/lib-module/Button/ButtonBase.js +0 -309
  715. package/lib-module/Button/ButtonDropdown.js +0 -181
  716. package/lib-module/Button/ButtonGroup.js +0 -264
  717. package/lib-module/Button/ButtonLink.js +0 -40
  718. package/lib-module/Button/index.js +0 -5
  719. package/lib-module/Button/propTypes.js +0 -53
  720. package/lib-module/Card/Card.js +0 -85
  721. package/lib-module/Card/CardBase.js +0 -66
  722. package/lib-module/Card/PressableCardBase.js +0 -114
  723. package/lib-module/Card/index.js +0 -4
  724. package/lib-module/Carousel/Carousel.js +0 -690
  725. package/lib-module/Carousel/CarouselContext.js +0 -56
  726. package/lib-module/Carousel/CarouselFirstFocus/CarouselFirstFocus.js +0 -51
  727. package/lib-module/Carousel/CarouselItem/CarouselItem.js +0 -81
  728. package/lib-module/Carousel/CarouselItem/index.js +0 -2
  729. package/lib-module/Carousel/CarouselStepTracker/CarouselStepTracker.js +0 -50
  730. package/lib-module/Carousel/CarouselStepTracker/index.js +0 -2
  731. package/lib-module/Carousel/CarouselTabs/CarouselTabs.js +0 -51
  732. package/lib-module/Carousel/CarouselTabs/CarouselTabsPanel.js +0 -84
  733. package/lib-module/Carousel/CarouselTabs/CarouselTabsPanelItem.js +0 -126
  734. package/lib-module/Carousel/CarouselTabs/index.js +0 -2
  735. package/lib-module/Carousel/CarouselThumbnail.js +0 -85
  736. package/lib-module/Carousel/CarouselThumbnailNavigation.js +0 -66
  737. package/lib-module/Carousel/dictionary.js +0 -18
  738. package/lib-module/Carousel/index.js +0 -3
  739. package/lib-module/Checkbox/Checkbox.js +0 -355
  740. package/lib-module/Checkbox/CheckboxGroup.js +0 -242
  741. package/lib-module/Checkbox/CheckboxInput.js +0 -60
  742. package/lib-module/Checkbox/CheckboxInput.native.js +0 -6
  743. package/lib-module/Checkbox/index.js +0 -3
  744. package/lib-module/Divider/Divider.js +0 -127
  745. package/lib-module/Divider/index.js +0 -2
  746. package/lib-module/ExpandCollapse/Accordion.js +0 -15
  747. package/lib-module/ExpandCollapse/Control.js +0 -139
  748. package/lib-module/ExpandCollapse/ExpandCollapse.js +0 -95
  749. package/lib-module/ExpandCollapse/Panel.js +0 -160
  750. package/lib-module/ExpandCollapse/index.js +0 -7
  751. package/lib-module/Feedback/Feedback.js +0 -165
  752. package/lib-module/Feedback/index.js +0 -2
  753. package/lib-module/Fieldset/Fieldset.js +0 -182
  754. package/lib-module/Fieldset/FieldsetContainer.js +0 -38
  755. package/lib-module/Fieldset/FieldsetContainer.native.js +0 -23
  756. package/lib-module/Fieldset/Legend.js +0 -24
  757. package/lib-module/Fieldset/Legend.native.js +0 -31
  758. package/lib-module/Fieldset/cssReset.js +0 -14
  759. package/lib-module/Fieldset/index.js +0 -2
  760. package/lib-module/FlexGrid/Col/Col.js +0 -275
  761. package/lib-module/FlexGrid/Col/index.js +0 -2
  762. package/lib-module/FlexGrid/FlexGrid.js +0 -149
  763. package/lib-module/FlexGrid/Row/Row.js +0 -184
  764. package/lib-module/FlexGrid/Row/index.js +0 -2
  765. package/lib-module/FlexGrid/helpers/index.js +0 -18
  766. package/lib-module/FlexGrid/index.js +0 -2
  767. package/lib-module/FlexGrid/providers/GutterContext.js +0 -3
  768. package/lib-module/HorizontalScroll/HorizontalScroll.js +0 -175
  769. package/lib-module/HorizontalScroll/HorizontalScrollButton.js +0 -81
  770. package/lib-module/HorizontalScroll/ScrollViewEnd.js +0 -48
  771. package/lib-module/HorizontalScroll/ScrollViewEnd.native.js +0 -27
  772. package/lib-module/HorizontalScroll/dictionary.js +0 -11
  773. package/lib-module/HorizontalScroll/index.js +0 -11
  774. package/lib-module/HorizontalScroll/itemPositions.js +0 -112
  775. package/lib-module/Icon/Icon.js +0 -62
  776. package/lib-module/Icon/IconText.js +0 -88
  777. package/lib-module/Icon/index.js +0 -4
  778. package/lib-module/IconButton/IconButton.js +0 -132
  779. package/lib-module/IconButton/index.js +0 -2
  780. package/lib-module/InputLabel/InputLabel.js +0 -154
  781. package/lib-module/InputLabel/LabelContent.js +0 -27
  782. package/lib-module/InputLabel/LabelContent.native.js +0 -19
  783. package/lib-module/InputLabel/index.js +0 -2
  784. package/lib-module/InputSupports/InputSupports.js +0 -103
  785. package/lib-module/InputSupports/index.js +0 -2
  786. package/lib-module/InputSupports/useInputSupports.js +0 -33
  787. package/lib-module/Link/ChevronLink.js +0 -52
  788. package/lib-module/Link/InlinePressable.js +0 -44
  789. package/lib-module/Link/InlinePressable.native.js +0 -89
  790. package/lib-module/Link/Link.js +0 -28
  791. package/lib-module/Link/LinkBase.js +0 -244
  792. package/lib-module/Link/TextButton.js +0 -35
  793. package/lib-module/Link/index.js +0 -5
  794. package/lib-module/List/List.js +0 -66
  795. package/lib-module/List/ListItem.js +0 -38
  796. package/lib-module/List/ListItemBase.js +0 -139
  797. package/lib-module/List/ListItemContent.js +0 -66
  798. package/lib-module/List/ListItemMark.js +0 -143
  799. package/lib-module/List/PressableListItemBase.js +0 -114
  800. package/lib-module/List/index.js +0 -5
  801. package/lib-module/Modal/Modal.js +0 -225
  802. package/lib-module/Modal/dictionary.js +0 -9
  803. package/lib-module/Modal/index.js +0 -2
  804. package/lib-module/MultiSelectFilter/ModalOverlay.js +0 -112
  805. package/lib-module/MultiSelectFilter/MultiSelectFilter.js +0 -286
  806. package/lib-module/MultiSelectFilter/dictionary.js +0 -12
  807. package/lib-module/MultiSelectFilter/index.js +0 -2
  808. package/lib-module/Notification/Notification.js +0 -230
  809. package/lib-module/Notification/dictionary.js +0 -8
  810. package/lib-module/Notification/index.js +0 -2
  811. package/lib-module/Pagination/PageButton.js +0 -66
  812. package/lib-module/Pagination/Pagination.js +0 -159
  813. package/lib-module/Pagination/SideButton.js +0 -118
  814. package/lib-module/Pagination/dictionary.js +0 -18
  815. package/lib-module/Pagination/index.js +0 -2
  816. package/lib-module/Pagination/usePagination.js +0 -73
  817. package/lib-module/Progress/Progress.js +0 -89
  818. package/lib-module/Progress/ProgressBar.js +0 -138
  819. package/lib-module/Progress/ProgressBarBackground.js +0 -42
  820. package/lib-module/Progress/index.js +0 -4
  821. package/lib-module/QuickLinks/QuickLinks.js +0 -71
  822. package/lib-module/QuickLinks/QuickLinksCard.js +0 -33
  823. package/lib-module/QuickLinks/QuickLinksItem.js +0 -50
  824. package/lib-module/QuickLinks/index.js +0 -4
  825. package/lib-module/QuickLinksFeature/QuickLinksFeature.js +0 -69
  826. package/lib-module/QuickLinksFeature/QuickLinksFeatureItem.js +0 -130
  827. package/lib-module/QuickLinksFeature/index.js +0 -4
  828. package/lib-module/Radio/Radio.js +0 -288
  829. package/lib-module/Radio/RadioButton.js +0 -138
  830. package/lib-module/Radio/RadioGroup.js +0 -255
  831. package/lib-module/Radio/RadioInput.js +0 -62
  832. package/lib-module/Radio/RadioInput.native.js +0 -6
  833. package/lib-module/Radio/index.js +0 -3
  834. package/lib-module/RadioCard/RadioCardGroup.js +0 -259
  835. package/lib-module/RadioCard/index.js +0 -3
  836. package/lib-module/Responsive/index.js +0 -2
  837. package/lib-module/Search/Search.js +0 -241
  838. package/lib-module/Search/dictionary.js +0 -12
  839. package/lib-module/Search/index.js +0 -2
  840. package/lib-module/Select/Group.js +0 -21
  841. package/lib-module/Select/Group.native.js +0 -15
  842. package/lib-module/Select/Item.js +0 -20
  843. package/lib-module/Select/Item.native.js +0 -3
  844. package/lib-module/Select/Picker.js +0 -68
  845. package/lib-module/Select/Picker.native.js +0 -122
  846. package/lib-module/Select/Select.js +0 -347
  847. package/lib-module/Select/constants.js +0 -5
  848. package/lib-module/Select/index.js +0 -6
  849. package/lib-module/SideNav/Item.js +0 -145
  850. package/lib-module/SideNav/ItemContent.js +0 -48
  851. package/lib-module/SideNav/ItemsGroup.js +0 -117
  852. package/lib-module/SideNav/SideNav.js +0 -136
  853. package/lib-module/SideNav/index.js +0 -1
  854. package/lib-module/Skeleton/Skeleton.js +0 -182
  855. package/lib-module/Skeleton/index.js +0 -2
  856. package/lib-module/Skeleton/skeleton.constant.js +0 -3
  857. package/lib-module/Skeleton/skeletonWebAnimation.js +0 -18
  858. package/lib-module/Skeleton/useSkeletonNativeAnimation.js +0 -25
  859. package/lib-module/SkipLink/SkipLink.js +0 -188
  860. package/lib-module/SkipLink/index.js +0 -2
  861. package/lib-module/Spacer/Spacer.js +0 -98
  862. package/lib-module/Spacer/index.js +0 -2
  863. package/lib-module/StackView/StackView.js +0 -127
  864. package/lib-module/StackView/StackWrap.js +0 -53
  865. package/lib-module/StackView/StackWrap.native.js +0 -3
  866. package/lib-module/StackView/StackWrapBox.js +0 -117
  867. package/lib-module/StackView/StackWrapGap.js +0 -61
  868. package/lib-module/StackView/common.js +0 -35
  869. package/lib-module/StackView/getStackedContent.js +0 -124
  870. package/lib-module/StackView/index.js +0 -5
  871. package/lib-module/StepTracker/Step.js +0 -253
  872. package/lib-module/StepTracker/StepTracker.js +0 -191
  873. package/lib-module/StepTracker/dictionary.js +0 -10
  874. package/lib-module/StepTracker/index.js +0 -2
  875. package/lib-module/Tabs/Tabs.js +0 -152
  876. package/lib-module/Tabs/TabsItem.js +0 -228
  877. package/lib-module/Tabs/index.js +0 -2
  878. package/lib-module/Tags/Tags.js +0 -257
  879. package/lib-module/Tags/index.js +0 -2
  880. package/lib-module/TextInput/TextArea.js +0 -94
  881. package/lib-module/TextInput/TextInput.js +0 -73
  882. package/lib-module/TextInput/TextInputBase.js +0 -333
  883. package/lib-module/TextInput/dictionary.js +0 -8
  884. package/lib-module/TextInput/index.js +0 -3
  885. package/lib-module/TextInput/propTypes.js +0 -33
  886. package/lib-module/ThemeProvider/ThemeProvider.js +0 -74
  887. package/lib-module/ThemeProvider/index.js +0 -6
  888. package/lib-module/ThemeProvider/useSetTheme.js +0 -25
  889. package/lib-module/ThemeProvider/useTheme.js +0 -14
  890. package/lib-module/ThemeProvider/useThemeTokens.js +0 -110
  891. package/lib-module/ThemeProvider/utils/index.js +0 -2
  892. package/lib-module/ThemeProvider/utils/styles.js +0 -188
  893. package/lib-module/ThemeProvider/utils/theme-tokens.js +0 -163
  894. package/lib-module/Timeline/Timeline.js +0 -174
  895. package/lib-module/Timeline/index.js +0 -2
  896. package/lib-module/ToggleSwitch/ToggleSwitch.js +0 -255
  897. package/lib-module/ToggleSwitch/ToggleSwitchGroup.js +0 -227
  898. package/lib-module/ToggleSwitch/index.js +0 -3
  899. package/lib-module/Tooltip/Backdrop.js +0 -45
  900. package/lib-module/Tooltip/Backdrop.native.js +0 -44
  901. package/lib-module/Tooltip/Tooltip.js +0 -278
  902. package/lib-module/Tooltip/Tooltip.native.js +0 -326
  903. package/lib-module/Tooltip/dictionary.js +0 -8
  904. package/lib-module/Tooltip/getTooltipPosition.js +0 -175
  905. package/lib-module/Tooltip/index.js +0 -5
  906. package/lib-module/Tooltip/shared.js +0 -27
  907. package/lib-module/TooltipButton/TooltipButton.js +0 -78
  908. package/lib-module/TooltipButton/index.js +0 -2
  909. package/lib-module/Typography/Typography.js +0 -154
  910. package/lib-module/Typography/index.js +0 -2
  911. package/lib-module/ViewportProvider/ViewportProvider.js +0 -29
  912. package/lib-module/ViewportProvider/index.js +0 -3
  913. package/lib-module/ViewportProvider/useViewport.js +0 -3
  914. package/lib-module/ViewportProvider/useViewportListener.js +0 -39
  915. package/lib-module/index.js +0 -58
  916. package/lib-module/utils/BaseView/BaseView.js +0 -43
  917. package/lib-module/utils/BaseView/BaseView.native.js +0 -6
  918. package/lib-module/utils/BaseView/index.js +0 -2
  919. package/lib-module/utils/a11y/index.js +0 -2
  920. package/lib-module/utils/a11y/semantics.js +0 -157
  921. package/lib-module/utils/a11y/textSize.js +0 -36
  922. package/lib-module/utils/animation/index.js +0 -2
  923. package/lib-module/utils/animation/useVerticalExpandAnimation.js +0 -89
  924. package/lib-module/utils/children.js +0 -119
  925. package/lib-module/utils/containUniqueFields.js +0 -26
  926. package/lib-module/utils/floating-ui/index.js +0 -1
  927. package/lib-module/utils/floating-ui/index.native.js +0 -1
  928. package/lib-module/utils/hasOwnProperty.js +0 -11
  929. package/lib-module/utils/index.js +0 -19
  930. package/lib-module/utils/info/index.js +0 -7
  931. package/lib-module/utils/info/platform/index.js +0 -11
  932. package/lib-module/utils/info/platform/platform.android.js +0 -1
  933. package/lib-module/utils/info/platform/platform.ios.js +0 -1
  934. package/lib-module/utils/info/platform/platform.js +0 -1
  935. package/lib-module/utils/info/platform/platform.native.js +0 -4
  936. package/lib-module/utils/info/versions.js +0 -5
  937. package/lib-module/utils/input.js +0 -187
  938. package/lib-module/utils/pressability.js +0 -111
  939. package/lib-module/utils/props/a11yProps.js +0 -308
  940. package/lib-module/utils/props/clickProps.js +0 -26
  941. package/lib-module/utils/props/componentPropType.js +0 -63
  942. package/lib-module/utils/props/copyPropTypes.js +0 -2
  943. package/lib-module/utils/props/getPropSelector.js +0 -48
  944. package/lib-module/utils/props/handlerProps.js +0 -117
  945. package/lib-module/utils/props/hrefAttrsProp.js +0 -33
  946. package/lib-module/utils/props/index.js +0 -19
  947. package/lib-module/utils/props/inputSupportsProps.js +0 -62
  948. package/lib-module/utils/props/linkProps.js +0 -44
  949. package/lib-module/utils/props/paddingProp.js +0 -9
  950. package/lib-module/utils/props/pressProps.js +0 -42
  951. package/lib-module/utils/props/rectProp.js +0 -9
  952. package/lib-module/utils/props/responsiveProps.js +0 -30
  953. package/lib-module/utils/props/selectSystemProps.js +0 -24
  954. package/lib-module/utils/props/spacingProps.js +0 -56
  955. package/lib-module/utils/props/textInputProps.js +0 -201
  956. package/lib-module/utils/props/textProps.js +0 -59
  957. package/lib-module/utils/props/tokens.js +0 -133
  958. package/lib-module/utils/props/variantProp.js +0 -18
  959. package/lib-module/utils/props/viewProps.js +0 -22
  960. package/lib-module/utils/ssr.js +0 -144
  961. package/lib-module/utils/useCopy.js +0 -44
  962. package/lib-module/utils/useHash.js +0 -45
  963. package/lib-module/utils/useHash.native.js +0 -7
  964. package/lib-module/utils/useResponsiveProp.js +0 -46
  965. package/lib-module/utils/useSafeLayoutEffect.js +0 -30
  966. package/lib-module/utils/useScrollBlocking.js +0 -58
  967. package/lib-module/utils/useScrollBlocking.native.js +0 -2
  968. package/lib-module/utils/useSpacingScale.js +0 -125
  969. package/lib-module/utils/useUniqueId.js +0 -13
  970. package/lib-module/utils/withLinkRouter.js +0 -81
@@ -1,5 +1,5 @@
1
1
  import React from 'react'
2
- import { View, Animated, PanResponder, StyleSheet, Platform } from 'react-native'
2
+ import { View, Animated, PanResponder, StyleSheet, Platform, Dimensions } from 'react-native'
3
3
  import PropTypes from 'prop-types'
4
4
  import { useThemeTokens } from '../ThemeProvider'
5
5
  import { useViewport } from '../ViewportProvider'
@@ -26,6 +26,12 @@ import CarouselTabsPanel from './CarouselTabs/CarouselTabsPanel'
26
26
  import CarouselTabsPanelItem from './CarouselTabs/CarouselTabsPanelItem'
27
27
  import dictionary from './dictionary'
28
28
 
29
+ const TRANSITION_MODES = {
30
+ MANUAL: 'manual',
31
+ AUTOMATIC: 'automatic',
32
+ SWIPE: 'swipe'
33
+ }
34
+
29
35
  const staticStyles = StyleSheet.create({
30
36
  root: {
31
37
  backgroundColor: 'transparent',
@@ -34,6 +40,12 @@ const staticStyles = StyleSheet.create({
34
40
  position: 'relative',
35
41
  top: 0,
36
42
  left: 0
43
+ },
44
+ animationControlButton: {
45
+ position: 'absolute',
46
+ zIndex: 1,
47
+ right: Platform.OS === 'web' ? undefined : 40,
48
+ top: 40
37
49
  }
38
50
  })
39
51
 
@@ -43,25 +55,50 @@ const selectContainerStyles = (width) => ({
43
55
  width
44
56
  })
45
57
 
46
- const selectSwipeAreaStyles = (count, width) => ({
58
+ const selectSwipeAreaStyles = (count, width, enablePeeking) => ({
47
59
  width: width * count,
48
- justifyContent: 'space-between',
60
+ justifyContent: enablePeeking ? 'flex-start' : 'space-between',
49
61
  flexDirection: 'row'
50
62
  })
51
63
 
64
+ const getDynamicPositionProperty = (areStylesAppliedOnPreviousButton) =>
65
+ areStylesAppliedOnPreviousButton ? 'left' : 'right'
66
+
67
+ const selectControlButtonPositionStyles = ({
68
+ positionVariant,
69
+ buttonWidth,
70
+ positionProperty = getDynamicPositionProperty(),
71
+ spaceBetweenSlideAndButton,
72
+ enablePeeking
73
+ }) => {
74
+ const styles = {}
75
+ if (positionVariant === 'edge') {
76
+ styles[positionProperty] = -1 * (buttonWidth / 2)
77
+ } else if (positionVariant === 'inside') {
78
+ styles[positionProperty] = 0
79
+ } else if (positionVariant === 'outside') {
80
+ if (enablePeeking) {
81
+ styles[positionProperty] = 0
82
+ } else {
83
+ styles[positionProperty] = -1 * (spaceBetweenSlideAndButton + buttonWidth)
84
+ }
85
+ }
86
+ return styles
87
+ }
88
+
52
89
  const selectPreviousNextNavigationButtonStyles = (
53
90
  previousNextNavigationButtonWidth,
54
91
  previousNextNavigationPosition,
55
92
  spaceBetweenSlideAndPreviousNextNavigation,
56
93
  isFirstSlide,
57
94
  isLastSlide,
58
- areStylesAppliedOnPreviousButton
95
+ areStylesAppliedOnPreviousButton,
96
+ enablePeeking
59
97
  ) => {
60
98
  const styles = {
61
99
  zIndex: 1,
62
100
  position: 'absolute'
63
101
  }
64
- const dynamicPositionProperty = areStylesAppliedOnPreviousButton ? 'left' : 'right'
65
102
  if (isFirstSlide) {
66
103
  styles.visibility = areStylesAppliedOnPreviousButton ? 'hidden' : 'visible'
67
104
  } else if (isLastSlide) {
@@ -70,17 +107,41 @@ const selectPreviousNextNavigationButtonStyles = (
70
107
  styles.visibility = 'visible'
71
108
  }
72
109
 
73
- if (previousNextNavigationPosition === 'edge') {
74
- styles[dynamicPositionProperty] = -1 * (previousNextNavigationButtonWidth / 2)
75
- } else if (previousNextNavigationPosition === 'inside') {
76
- styles[dynamicPositionProperty] = 0
77
- } else if (previousNextNavigationPosition === 'outside') {
78
- styles[dynamicPositionProperty] =
79
- -1 * (spaceBetweenSlideAndPreviousNextNavigation + previousNextNavigationButtonWidth)
110
+ return {
111
+ ...styles,
112
+ ...selectControlButtonPositionStyles({
113
+ positionVariant: previousNextNavigationPosition,
114
+ buttonWidth: previousNextNavigationButtonWidth,
115
+ positionProperty: getDynamicPositionProperty(areStylesAppliedOnPreviousButton),
116
+ spaceBetweenSlideAndButton: spaceBetweenSlideAndPreviousNextNavigation,
117
+ enablePeeking
118
+ })
119
+ }
120
+ }
121
+
122
+ const getPeekingProps = (viewport) => {
123
+ if (viewport === 'xs' || viewport === 'sm' || viewport === 'md') {
124
+ return {
125
+ peekingFirstSpace: 48,
126
+ peekingGap: 16,
127
+ peekingLastSpace: 48,
128
+ peekingMarginLeft: 24,
129
+ peekingMarginRight: 24,
130
+ peekingMiddleSpace: 28
131
+ }
132
+ }
133
+ return {
134
+ peekingFirstSpace: 48,
135
+ peekingGap: 16,
136
+ peekingLastSpace: 48,
137
+ peekingMarginLeft: 16,
138
+ peekingMarginRight: 16,
139
+ peekingMiddleSpace: 24
80
140
  }
81
- return styles
82
141
  }
83
142
 
143
+ const selectIconStyles = ({ iconBackgroundColor }) => ({ backgroundColor: iconBackgroundColor })
144
+
84
145
  const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
85
146
 
86
147
  /**
@@ -168,10 +229,22 @@ const Carousel = React.forwardRef(
168
229
  accessibilityLabel,
169
230
  accessibilityLiveRegion = 'polite',
170
231
  copy,
232
+ slideDuration = 0,
233
+ transitionDuration = 0,
234
+ autoPlay = false,
235
+ enablePeeking = false,
171
236
  ...rest
172
237
  },
173
238
  ref
174
239
  ) => {
240
+ let childrenArray = unpackFragment(children)
241
+ const autoPlayFeatureEnabled =
242
+ autoPlay && slideDuration > 0 && transitionDuration > 0 && childrenArray.length > 1
243
+ // if `Carousel` only has one `Carousel.Item`, convert this to a single-item array
244
+ if (!Array.isArray(childrenArray)) {
245
+ childrenArray = [childrenArray]
246
+ }
247
+ const getCopy = useCopy({ dictionary, copy })
175
248
  const viewport = useViewport()
176
249
  const themeTokens = useThemeTokens('Carousel', tokens, variant, {
177
250
  viewport
@@ -179,14 +252,45 @@ const Carousel = React.forwardRef(
179
252
  const {
180
253
  previousIcon,
181
254
  nextIcon,
255
+ playIcon,
256
+ pauseIcon,
182
257
  showPreviousNextNavigation,
183
258
  showPanelNavigation,
184
259
  showPanelTabs,
185
260
  spaceBetweenSlideAndPreviousNextNavigation
186
261
  } = themeTokens
187
262
  const [activeIndex, setActiveIndex] = React.useState(0)
263
+ const activeIndexRef = React.useRef(activeIndex)
264
+ const { reduceMotionEnabled } = useA11yInfo()
265
+ const reduceMotionRef = React.useRef(reduceMotionEnabled)
266
+ const [containerLayout, setContainerLayout] = React.useState({
267
+ x: 0,
268
+ y: 0,
269
+ width: 0
270
+ })
271
+ const containerLayoutRef = React.useRef(containerLayout)
188
272
 
273
+ const [previousNextNavigationButtonWidth, setPreviousNextNavigationButtonWidth] =
274
+ React.useState(0)
275
+ const firstFocusRef = React.useRef(null)
276
+ const pan = React.useRef(new Animated.ValueXY()).current
277
+ const animatedX = React.useRef(0)
278
+ const animatedY = React.useRef(0)
189
279
  const [isAnimating, setIsAnimating] = React.useState(false)
280
+ /**
281
+ * While having the same starting point, `isAutoPlayEnabled` and `isCarouselPlaying` are different states
282
+ *
283
+ * `isAutoPlayEnabled` is a state to determine if the autoplay feature is enabled or disabled
284
+ * `isCarouselPlaying` is a state to determine if the carousel is currently playing or paused
285
+ */
286
+ const [isAutoPlayEnabled, setIsAutoPlayEnabled] = React.useState(autoPlayFeatureEnabled)
287
+ const [isCarouselPlaying, setisCarouselPlaying] = React.useState(autoPlayFeatureEnabled)
288
+ const isSwiping = React.useRef(false)
289
+ const autoPlayRef = React.useRef(null)
290
+
291
+ const isFirstSlide = !activeIndex
292
+ const isLastSlide = activeIndex + 1 >= childrenArray.length
293
+
190
294
  const handleAnimationStart = React.useCallback(
191
295
  (...args) => {
192
296
  if (typeof onAnimationStart === 'function') onAnimationStart(...args)
@@ -202,63 +306,37 @@ const Carousel = React.forwardRef(
202
306
  [onAnimationEnd]
203
307
  )
204
308
 
205
- const getCopy = useCopy({ dictionary, copy })
206
-
207
- const childrenArray = unpackFragment(children)
208
- const systemProps = selectProps({
209
- ...rest,
210
- accessibilityRole,
211
- accessibilityLabel,
212
- accessibilityValue: {
213
- min: 1,
214
- max: childrenArray.length,
215
- now: activeIndex + 1
216
- }
217
- })
218
- const { reduceMotionEnabled } = useA11yInfo()
219
- const [containerLayout, setContainerLayout] = React.useState({
220
- x: 0,
221
- y: 0,
222
- width: 0
223
- })
224
- const [previousNextNavigationButtonWidth, setPreviousNextNavigationButtonWidth] =
225
- React.useState(0)
226
- const firstFocusRef = React.useRef(null)
227
- const pan = React.useRef(new Animated.ValueXY()).current
228
- const animatedX = React.useRef(0)
229
- const animatedY = React.useRef(0)
230
- const isFirstSlide = !activeIndex
231
- const isLastSlide = activeIndex + 1 >= children.length
232
-
233
- const onContainerLayout = ({
234
- nativeEvent: {
235
- layout: { x, y, width }
236
- }
237
- }) => setContainerLayout((prevState) => ({ ...prevState, x, y, width }))
238
-
239
- const onPreviousNextNavigationButtonLayout = ({
240
- nativeEvent: {
241
- layout: { width }
242
- }
243
- }) => setPreviousNextNavigationButtonWidth(width)
244
-
245
309
  const updateOffset = React.useCallback(() => {
246
- animatedX.current = containerLayout.width * activeIndex * -1
310
+ animatedX.current = containerLayoutRef.current.width * activeIndexRef.current * -1
247
311
  animatedY.current = 0
248
312
  pan.setOffset({
249
313
  x: animatedX.current,
250
314
  y: animatedY.current
251
315
  })
252
316
  pan.setValue({ x: 0, y: 0 })
253
- }, [activeIndex, containerLayout.width, pan, animatedX])
317
+ }, [pan, animatedX])
254
318
 
255
319
  const animate = React.useCallback(
256
320
  (toValue, toIndex) => {
257
321
  const handleAnimationEndToIndex = (...args) => handleAnimationEnd(toIndex, ...args)
258
- if (reduceMotionEnabled) {
322
+ if (reduceMotionRef.current || isSwiping.current) {
259
323
  Animated.timing(pan, { toValue, duration: 1, useNativeDriver: false }).start(
260
324
  handleAnimationEndToIndex
261
325
  )
326
+ } else if (isAutoPlayEnabled) {
327
+ Animated.timing(pan, {
328
+ ...springConfig,
329
+ toValue,
330
+ useNativeDriver: false,
331
+ duration: transitionDuration * 1000
332
+ }).start(handleAnimationEndToIndex)
333
+ } else if (enablePeeking) {
334
+ Animated.timing(pan, {
335
+ ...springConfig,
336
+ toValue,
337
+ useNativeDriver: false,
338
+ duration: transitionDuration ? transitionDuration * 1000 : 1000
339
+ }).start(handleAnimationEndToIndex)
262
340
  } else {
263
341
  Animated.spring(pan, {
264
342
  ...springConfig,
@@ -267,65 +345,192 @@ const Carousel = React.forwardRef(
267
345
  }).start(handleAnimationEndToIndex)
268
346
  }
269
347
  },
270
- [pan, springConfig, reduceMotionEnabled, handleAnimationEnd]
348
+ [pan, springConfig, handleAnimationEnd, transitionDuration, isAutoPlayEnabled, enablePeeking]
271
349
  )
272
350
 
351
+ const stopAutoplay = React.useCallback(() => {
352
+ if (autoPlayRef?.current) {
353
+ clearTimeout(autoPlayRef?.current)
354
+ }
355
+ }, [])
356
+
357
+ const triggerRefocus = React.useCallback(() => {
358
+ if (refocus && Platform.OS === 'web') {
359
+ firstFocusRef.current?.focus({ preventScroll: true, focusVisible: false })
360
+ }
361
+ }, [refocus, firstFocusRef])
362
+
273
363
  const updateIndex = React.useCallback(
274
- (delta = 1) => {
364
+ (delta = 1, transitionMode) => {
275
365
  const toValue = { x: 0, y: 0 }
276
366
  let skipChanges = !delta
277
367
  let calcDelta = delta
278
-
279
- if (activeIndex <= 0 && delta < 0) {
280
- skipChanges = true
281
- calcDelta = children.length + delta
282
- } else if (activeIndex + 1 >= children.length && delta > 0) {
283
- skipChanges = true
284
- calcDelta = -1 * activeIndex + delta - 1
368
+ if (activeIndexRef.current <= 0 && delta < 0) {
369
+ skipChanges = transitionMode !== TRANSITION_MODES.AUTOMATIC
370
+ calcDelta = childrenArray.length + delta
371
+ } else if (activeIndexRef.current + 1 >= childrenArray.length && delta > 0) {
372
+ skipChanges = transitionMode !== TRANSITION_MODES.AUTOMATIC
373
+ calcDelta = -1 * activeIndexRef.current + delta - 1
285
374
  }
286
375
 
287
- const index = activeIndex + calcDelta
288
-
376
+ const index = activeIndexRef.current + calcDelta
289
377
  if (skipChanges) {
290
378
  animate(toValue, index)
291
379
  return calcDelta
292
380
  }
293
381
 
382
+ stopAutoplay()
294
383
  setActiveIndex(index)
295
384
 
296
- toValue.x = containerLayout.width * -1 * calcDelta
297
-
385
+ toValue.x = containerLayoutRef.current.width * -1 * calcDelta
298
386
  animate(toValue, index)
299
-
387
+ if (isCarouselPlaying) {
388
+ stopAutoplay()
389
+ if (
390
+ index === 0 &&
391
+ activeIndexRef.current + 1 === childrenArray.length &&
392
+ transitionMode === TRANSITION_MODES.AUTOMATIC
393
+ ) {
394
+ setisCarouselPlaying(false)
395
+ } else if (isAutoPlayEnabled) {
396
+ autoPlayRef.current = setTimeout(() => {
397
+ updateOffset()
398
+ handleAnimationStart(activeIndexRef.current)
399
+ updateIndex(slideDuration < 0 ? -1 : 1, TRANSITION_MODES.AUTOMATIC)
400
+ triggerRefocus()
401
+ }, Math.abs(slideDuration) * 1000)
402
+ }
403
+ }
300
404
  if (onIndexChanged) onIndexChanged(calcDelta, index)
301
405
  return calcDelta
302
406
  },
303
- [containerLayout.width, activeIndex, animate, children.length, onIndexChanged]
407
+ [
408
+ handleAnimationStart,
409
+ triggerRefocus,
410
+ slideDuration,
411
+ updateOffset,
412
+ animate,
413
+ childrenArray.length,
414
+ onIndexChanged,
415
+ isCarouselPlaying,
416
+ stopAutoplay,
417
+ isAutoPlayEnabled
418
+ ]
304
419
  )
305
420
 
421
+ const startAutoplay = React.useCallback(() => {
422
+ stopAutoplay()
423
+ if (isAutoPlayEnabled) {
424
+ autoPlayRef.current = setTimeout(() => {
425
+ updateOffset()
426
+ handleAnimationStart(activeIndexRef.current)
427
+ updateIndex(slideDuration < 0 ? -1 : 1, TRANSITION_MODES.AUTOMATIC)
428
+ triggerRefocus()
429
+ }, Math.abs(slideDuration) * 1000)
430
+ }
431
+ }, [
432
+ handleAnimationStart,
433
+ triggerRefocus,
434
+ updateIndex,
435
+ updateOffset,
436
+ slideDuration,
437
+ stopAutoplay,
438
+ isAutoPlayEnabled
439
+ ])
440
+
306
441
  const fixOffsetAndGo = React.useCallback(
307
- (delta) => {
442
+ (delta, transitionMode) => {
308
443
  updateOffset()
309
- handleAnimationStart(activeIndex)
310
- updateIndex(delta)
311
- if (refocus) firstFocusRef.current?.focus()
444
+ handleAnimationStart(activeIndexRef.current)
445
+ updateIndex(delta, transitionMode)
446
+ triggerRefocus()
312
447
  },
313
- [updateIndex, updateOffset, activeIndex, handleAnimationStart, refocus]
448
+ [updateIndex, updateOffset, handleAnimationStart, triggerRefocus]
314
449
  )
315
450
 
316
451
  const goToNeighboring = React.useCallback(
317
- (toPrev = false) => {
318
- fixOffsetAndGo(toPrev ? -1 : 1)
452
+ (toPrev = false, transitionMode = TRANSITION_MODES.MANUAL) => {
453
+ fixOffsetAndGo(toPrev ? -1 : 1, transitionMode)
319
454
  },
320
455
  [fixOffsetAndGo]
321
456
  )
322
457
 
458
+ React.useEffect(() => {
459
+ activeIndexRef.current = activeIndex
460
+ }, [activeIndex])
461
+
462
+ React.useEffect(() => {
463
+ reduceMotionRef.current = reduceMotionEnabled
464
+ }, [reduceMotionEnabled])
465
+
466
+ React.useEffect(() => {
467
+ containerLayoutRef.current = containerLayout
468
+ }, [containerLayout])
469
+
470
+ React.useEffect(() => {
471
+ pan.x.addListener(({ value }) => {
472
+ animatedX.current = value
473
+ })
474
+ pan.y.addListener(({ value }) => {
475
+ animatedY.current = value
476
+ })
477
+ if (isCarouselPlaying) {
478
+ startAutoplay()
479
+ }
480
+ return () => {
481
+ stopAutoplay()
482
+ pan.x.removeAllListeners()
483
+ pan.y.removeAllListeners()
484
+ }
485
+ }, [pan.x, pan.y, startAutoplay, stopAutoplay, isCarouselPlaying])
486
+
487
+ React.useEffect(() => {
488
+ const subscription = Dimensions.addEventListener('change', () => {
489
+ updateOffset()
490
+ })
491
+
492
+ return () => {
493
+ if (subscription.remove) {
494
+ subscription.remove()
495
+ } else {
496
+ Dimensions.removeEventListener('change', updateOffset)
497
+ }
498
+ }
499
+ }, [updateOffset])
500
+
501
+ React.useEffect(() => {
502
+ setIsAutoPlayEnabled(
503
+ autoPlay && slideDuration > 0 && transitionDuration > 0 && childrenArray.length > 1
504
+ )
505
+ }, [autoPlay, slideDuration, transitionDuration, childrenArray.length])
506
+
507
+ React.useEffect(() => {
508
+ return () => {
509
+ stopAutoplay()
510
+ }
511
+ }, [stopAutoplay])
512
+
513
+ const onContainerLayout = ({
514
+ nativeEvent: {
515
+ layout: { x, y, width }
516
+ }
517
+ }) => setContainerLayout((prevState) => ({ ...prevState, x, y, width }))
518
+
519
+ const onPreviousNextNavigationButtonLayout = ({
520
+ nativeEvent: {
521
+ layout: { width }
522
+ }
523
+ }) => setPreviousNextNavigationButtonWidth(width)
524
+
323
525
  const isSwipeAllowed = React.useCallback(() => {
526
+ if (childrenArray.length === 1) {
527
+ return false
528
+ }
324
529
  if (Platform.OS === 'web') {
325
530
  return !!(viewport === 'xs' || viewport === 'sm')
326
531
  }
327
532
  return true
328
- }, [viewport])
533
+ }, [viewport, childrenArray.length])
329
534
 
330
535
  const panResponder = React.useMemo(
331
536
  () =>
@@ -337,52 +542,54 @@ const Carousel = React.forwardRef(
337
542
  return false
338
543
  }
339
544
 
340
- handleAnimationStart(activeIndex)
545
+ handleAnimationStart(activeIndexRef.current)
546
+
547
+ const allow = Math.abs(gestureState.dx) > minDistanceToCapture
548
+
549
+ if (allow) {
550
+ isSwiping.current = true
551
+ stopAutoplay()
552
+ }
341
553
 
342
- return Math.abs(gestureState.dx) > minDistanceToCapture
554
+ return allow
555
+ },
556
+ onPanResponderGrant: () => {
557
+ updateOffset()
343
558
  },
344
- onPanResponderGrant: () => updateOffset(),
345
559
  onPanResponderMove: Animated.event([null, { dx: pan.x }], {
346
560
  useNativeDriver: false
347
561
  }),
348
562
  onPanResponderRelease: (_, gesture) => {
563
+ if (isCarouselPlaying) {
564
+ startAutoplay()
565
+ }
349
566
  const correction = gesture.moveX - gesture.x0
350
567
 
351
- if (Math.abs(correction) < containerLayout.width * minDistanceForAction) {
568
+ if (Math.abs(correction) < containerLayoutRef.current.width * minDistanceForAction) {
352
569
  animate({ x: 0, y: 0 }, 0)
353
570
  } else {
354
571
  const delta = correction > 0 ? -1 : 1
355
- updateIndex(delta)
572
+ updateIndex(delta, TRANSITION_MODES.SWIPE)
356
573
  }
574
+
575
+ isSwiping.current = false
357
576
  }
358
577
  }),
359
578
  [
360
- containerLayout.width,
361
579
  updateIndex,
362
580
  updateOffset,
363
581
  animate,
364
582
  isSwipeAllowed,
365
- activeIndex,
366
583
  minDistanceForAction,
367
584
  handleAnimationStart,
368
585
  minDistanceToCapture,
369
- pan.x
586
+ pan.x,
587
+ startAutoplay,
588
+ stopAutoplay,
589
+ isCarouselPlaying
370
590
  ]
371
591
  )
372
592
 
373
- React.useEffect(() => {
374
- pan.x.addListener(({ value }) => {
375
- animatedX.current = value
376
- })
377
- pan.y.addListener(({ value }) => {
378
- animatedY.current = value
379
- })
380
- return () => {
381
- pan.x.removeAllListeners()
382
- pan.y.removeAllListeners()
383
- }
384
- }, [pan.x, pan.y])
385
-
386
593
  const goToNext = React.useCallback(() => {
387
594
  goToNeighboring()
388
595
  }, [goToNeighboring])
@@ -393,18 +600,22 @@ const Carousel = React.forwardRef(
393
600
 
394
601
  const goTo = React.useCallback(
395
602
  (index = 0) => {
396
- const delta = index - activeIndex
603
+ const delta = index - activeIndexRef.current
397
604
  if (delta) {
398
- fixOffsetAndGo(delta)
605
+ fixOffsetAndGo(delta, TRANSITION_MODES.MANUAL)
399
606
  }
400
607
  },
401
- [fixOffsetAndGo, activeIndex]
608
+ [fixOffsetAndGo]
402
609
  )
403
610
 
404
611
  // @TODO: - these are Allium-theme variants and won't have any effect in themes that don't implement them.
405
612
  // Normally we avoid setting variants of subcomponents, however this could be re-considered.
406
613
  // Related discussion - https://github.com/telus/universal-design-system/issues/1549
407
- const previousNextIconButtonVariants = { size: previousNextIconSize, raised: true }
614
+ const previousNextIconButtonVariants = {
615
+ size: previousNextIconSize,
616
+ raised: !variant?.inverse && true,
617
+ inverse: variant?.inverse
618
+ }
408
619
 
409
620
  const getCopyWithPlaceholders = React.useCallback(
410
621
  (copyKey) => {
@@ -437,6 +648,13 @@ const Carousel = React.forwardRef(
437
648
  }
438
649
  }
439
650
  }
651
+
652
+ const systemProps = selectProps({
653
+ ...rest,
654
+ accessibilityRole,
655
+ accessibilityLabel
656
+ })
657
+
440
658
  // If container isn't used for focus, give it a label of title if none is passed in,
441
659
  // otherwise read the current position on focus
442
660
  const containerAccessibilityLabel =
@@ -449,6 +667,15 @@ const Carousel = React.forwardRef(
449
667
  ...(isFirstFocusContainer && { ref: containerRef, focusable: true })
450
668
  }
451
669
 
670
+ const onAnimationControlButtonPress = React.useCallback(() => {
671
+ if (isCarouselPlaying) {
672
+ stopAutoplay()
673
+ } else {
674
+ startAutoplay()
675
+ }
676
+ setisCarouselPlaying((prevState) => !prevState)
677
+ }, [isCarouselPlaying, stopAutoplay, startAutoplay])
678
+
452
679
  return (
453
680
  <CarouselProvider
454
681
  activeIndex={activeIndex}
@@ -462,13 +689,45 @@ const Carousel = React.forwardRef(
462
689
  width={containerLayout.width}
463
690
  >
464
691
  <View
465
- style={staticStyles.root}
692
+ style={[
693
+ staticStyles.root,
694
+ {
695
+ ...Platform.select({
696
+ web: {
697
+ outline: 'none'
698
+ }
699
+ })
700
+ }
701
+ ]}
466
702
  onLayout={onContainerLayout}
467
703
  ref={ref}
468
704
  {...systemProps}
469
705
  {...containerProps}
470
706
  >
471
- {showPreviousNextNavigation && (
707
+ {isAutoPlayEnabled ? (
708
+ <View
709
+ style={[
710
+ staticStyles.animationControlButton,
711
+ selectControlButtonPositionStyles({
712
+ positionVariant: previousNextNavigationPosition,
713
+ buttonWidth: previousNextNavigationButtonWidth,
714
+ positionProperty: getDynamicPositionProperty(),
715
+ spaceBetweenSlideAndButton: spaceBetweenSlideAndPreviousNextNavigation,
716
+ enablePeeking
717
+ })
718
+ ]}
719
+ >
720
+ <IconButton
721
+ icon={isCarouselPlaying ? pauseIcon : playIcon}
722
+ accessibilityLabel={
723
+ isCarouselPlaying ? getCopy('pauseButtonLabel') : getCopy('playButtonLabel')
724
+ }
725
+ variant={previousNextIconButtonVariants}
726
+ onPress={onAnimationControlButtonPress}
727
+ />
728
+ </View>
729
+ ) : null}
730
+ {showPreviousNextNavigation && childrenArray.length > 1 ? (
472
731
  <View
473
732
  style={selectPreviousNextNavigationButtonStyles(
474
733
  previousNextNavigationButtonWidth,
@@ -476,7 +735,8 @@ const Carousel = React.forwardRef(
476
735
  spaceBetweenSlideAndPreviousNextNavigation,
477
736
  isFirstSlide,
478
737
  isLastSlide,
479
- true
738
+ true,
739
+ enablePeeking
480
740
  )}
481
741
  testID="previous-button-container"
482
742
  >
@@ -489,9 +749,10 @@ const Carousel = React.forwardRef(
489
749
  '%{targetStep}',
490
750
  activeIndex
491
751
  )}
752
+ tokens={selectIconStyles(themeTokens)}
492
753
  />
493
754
  </View>
494
- )}
755
+ ) : null}
495
756
  {Boolean(skipLinkHref) && (
496
757
  <SkipLink ref={firstFocusRef} href={skipLinkHref}>
497
758
  {getCopyWithPlaceholders('skipLink')}
@@ -508,7 +769,7 @@ const Carousel = React.forwardRef(
508
769
  <View style={selectContainerStyles(containerLayout.width)}>
509
770
  <Animated.View
510
771
  style={StyleSheet.flatten([
511
- selectSwipeAreaStyles(children.length, containerLayout.width),
772
+ selectSwipeAreaStyles(childrenArray.length, containerLayout.width, enablePeeking),
512
773
  {
513
774
  transform: [{ translateX: pan.x }, { translateY: pan.y }]
514
775
  }
@@ -523,13 +784,15 @@ const Carousel = React.forwardRef(
523
784
  const hidden = !isAnimating && index !== activeIndex
524
785
  const clonedElement = React.cloneElement(element, {
525
786
  elementIndex: index,
526
- hidden
787
+ hidden: enablePeeking ? false : hidden,
788
+ enablePeeking,
789
+ peekingProps: getPeekingProps(viewport)
527
790
  })
528
791
  return <React.Fragment key={index.toFixed(2)}>{clonedElement}</React.Fragment>
529
792
  })}
530
793
  </Animated.View>
531
794
  </View>
532
- {showPreviousNextNavigation && (
795
+ {showPreviousNextNavigation && childrenArray.length > 1 ? (
533
796
  <View
534
797
  style={selectPreviousNextNavigationButtonStyles(
535
798
  previousNextNavigationButtonWidth,
@@ -537,7 +800,8 @@ const Carousel = React.forwardRef(
537
800
  spaceBetweenSlideAndPreviousNextNavigation,
538
801
  isFirstSlide,
539
802
  isLastSlide,
540
- false
803
+ false,
804
+ enablePeeking
541
805
  )}
542
806
  testID="next-button-container"
543
807
  >
@@ -550,9 +814,10 @@ const Carousel = React.forwardRef(
550
814
  '%{targetStep}',
551
815
  activeIndex + 2
552
816
  )}
817
+ tokens={selectIconStyles(themeTokens)}
553
818
  />
554
819
  </View>
555
- )}
820
+ ) : null}
556
821
  </View>
557
822
  {showPanelNavigation ? activePanelNavigation : null}
558
823
  </CarouselProvider>
@@ -626,7 +891,7 @@ Carousel.propTypes = {
626
891
  * <Carousel.Item>First Slide</Carousel.Item>
627
892
  * </Carousel>
628
893
  * ```
629
- * Caution: Always consider wrapping your callback for `onIndexChanged` in `useCallback` in order to avoid bugs and performance issues
894
+ * Caution: Always consider wrapping your callback for `onIndexChanged` in `React.useCallback` in order to avoid bugs and performance issues
630
895
  */
631
896
  onIndexChanged: PropTypes.func,
632
897
  /**
@@ -677,7 +942,7 @@ Carousel.propTypes = {
677
942
  * <Carousel.Item>First Slide</Carousel.Item>
678
943
  * </Carousel>
679
944
  * ```
680
- * Caution: Always consider wrapping your callback for `onAnimationStart` in `useCallback` in order to avoid bugs and performance issues
945
+ * Caution: Always consider wrapping your callback for `onAnimationStart` in `React.useCallback` in order to avoid bugs and performance issues
681
946
  */
682
947
  onAnimationStart: PropTypes.func,
683
948
  /**
@@ -694,7 +959,7 @@ Carousel.propTypes = {
694
959
  * <Carousel.Item>First Slide</Carousel.Item>
695
960
  * </Carousel>
696
961
  * ```
697
- * Caution: Always consider wrapping your callback for `onAnimationEnd` in `useCallback` in order to avoid bugs and performance issues
962
+ * Caution: Always consider wrapping your callback for `onAnimationEnd` in `React.useCallback` in order to avoid bugs and performance issues
698
963
  */
699
964
  onAnimationEnd: PropTypes.func,
700
965
  /**
@@ -719,7 +984,31 @@ Carousel.propTypes = {
719
984
  * Note that if the immediate Carousel children do not all render as `'li'` elements,
720
985
  * this should be changed (e.g. pass tag="div") because only 'li' is a valid child of 'ul'.
721
986
  */
722
- tag: PropTypes.oneOf(layoutTags)
987
+ tag: PropTypes.oneOf(layoutTags),
988
+ /**
989
+ * If set to `true`, the Carousel will automatically transition between slides
990
+ * and show the play/pause button
991
+ * - Default value is `false`
992
+ * - `slideDuration` and `transitionDuration` are required to be set for this to work
993
+ */
994
+ autoPlay: PropTypes.bool,
995
+ /**
996
+ * Duration of the time in seconds spent on each slide
997
+ * - Default value is `0`
998
+ * - `autoPlay` and `transitionDuration` are required to be set for this to work
999
+ */
1000
+ slideDuration: PropTypes.number,
1001
+ /**
1002
+ * Duration of the time in seconds between each slide transition
1003
+ * - Default value is `0`
1004
+ * - `autoPlay` and `slideDuration` are required to be set for this to work
1005
+ */
1006
+ transitionDuration: PropTypes.number,
1007
+ /**
1008
+ * If set to `true`, the Carousel will show the previous and next slides
1009
+ * - Default value is `false`
1010
+ */
1011
+ enablePeeking: PropTypes.bool
723
1012
  }
724
1013
 
725
1014
  Carousel.Item = CarouselItem