@telus-uds/components-web 3.3.0 → 4.0.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 (378) hide show
  1. package/.eslintrc.cjs +7 -1
  2. package/CHANGELOG.md +38 -2
  3. package/jest.config.cjs +1 -1
  4. package/lib/cjs/Badge/Badge.js +128 -0
  5. package/lib/cjs/Badge/index.js +9 -0
  6. package/lib/cjs/BlockQuote/BlockQuote.js +256 -0
  7. package/lib/cjs/BlockQuote/index.js +9 -0
  8. package/lib/cjs/Breadcrumbs/Breadcrumbs.js +264 -0
  9. package/lib/cjs/Breadcrumbs/Item/Item.js +180 -0
  10. package/lib/cjs/Breadcrumbs/index.js +13 -0
  11. package/lib/cjs/Callout/Callout.js +141 -0
  12. package/lib/cjs/Callout/index.js +9 -0
  13. package/lib/cjs/Card/Card.js +257 -0
  14. package/lib/cjs/Card/CardContent.js +97 -0
  15. package/lib/cjs/Card/CardFooter.js +85 -0
  16. package/lib/cjs/Card/index.js +9 -0
  17. package/lib/cjs/Countdown/Countdown.js +268 -0
  18. package/lib/cjs/Countdown/Segment.js +108 -0
  19. package/lib/cjs/Countdown/constants.js +10 -0
  20. package/lib/cjs/Countdown/dictionary.js +28 -0
  21. package/lib/cjs/Countdown/index.js +9 -0
  22. package/lib/cjs/Countdown/types.js +31 -0
  23. package/lib/cjs/Countdown/useCountdown.js +32 -0
  24. package/lib/cjs/DatePicker/CalendarContainer.js +214 -0
  25. package/lib/cjs/DatePicker/DatePicker.js +525 -0
  26. package/lib/cjs/DatePicker/dictionary.js +125 -0
  27. package/lib/cjs/DatePicker/index.js +9 -0
  28. package/lib/cjs/DatePicker/reactDatesCss.js +9 -0
  29. package/lib/cjs/Disclaimer/Disclaimer.js +61 -0
  30. package/lib/cjs/Disclaimer/index.js +13 -0
  31. package/lib/cjs/Footnote/Footnote.js +637 -0
  32. package/lib/cjs/Footnote/FootnoteLink.js +125 -0
  33. package/lib/cjs/Footnote/dictionary.js +18 -0
  34. package/lib/cjs/Footnote/index.js +11 -0
  35. package/lib/cjs/IconButton/IconButton.js +62 -0
  36. package/lib/cjs/IconButton/index.js +9 -0
  37. package/lib/cjs/Image/Image.js +90 -0
  38. package/lib/cjs/Image/index.js +20 -0
  39. package/lib/cjs/Image/server.js +11 -0
  40. package/lib/cjs/List/List.js +8 -0
  41. package/lib/cjs/List/ListItem.js +34 -0
  42. package/lib/cjs/List/index.js +11 -0
  43. package/lib/cjs/NavigationBar/NavigationBar.js +282 -0
  44. package/lib/cjs/NavigationBar/NavigationItem.js +94 -0
  45. package/lib/cjs/NavigationBar/NavigationSubMenu.js +164 -0
  46. package/lib/{NavigationBar → cjs/NavigationBar}/collapseItems.js +9 -4
  47. package/lib/cjs/NavigationBar/index.js +11 -0
  48. package/lib/cjs/NavigationBar/resolveItemSelection.js +22 -0
  49. package/lib/cjs/OptimizeImage/OptimizeImage.js +99 -0
  50. package/lib/cjs/OptimizeImage/index.js +9 -0
  51. package/lib/cjs/OptimizeImage/utils/getFallbackUrl.js +14 -0
  52. package/lib/cjs/OptimizeImage/utils/getImageUrls.js +19 -0
  53. package/lib/cjs/OptimizeImage/utils/getOptimizedUrl.js +24 -0
  54. package/lib/cjs/OptimizeImage/utils/hasWebpSupport.js +34 -0
  55. package/lib/cjs/OptimizeImage/utils/index.js +34 -0
  56. package/lib/cjs/OptimizeImage/utils/isSvgUrl.js +9 -0
  57. package/lib/cjs/OrderedList/Item.js +151 -0
  58. package/lib/cjs/OrderedList/ItemBase.js +34 -0
  59. package/lib/cjs/OrderedList/OrderedList.js +92 -0
  60. package/lib/cjs/OrderedList/OrderedListBase.js +52 -0
  61. package/lib/cjs/OrderedList/constants.js +8 -0
  62. package/lib/cjs/OrderedList/index.js +11 -0
  63. package/lib/cjs/Paragraph/Paragraph.js +97 -0
  64. package/lib/cjs/Paragraph/index.js +9 -0
  65. package/lib/cjs/PreviewCard/AuthorDate.js +63 -0
  66. package/lib/cjs/PreviewCard/PreviewCard.js +215 -0
  67. package/lib/cjs/PreviewCard/index.js +9 -0
  68. package/lib/cjs/PriceLockup/PriceLockup.js +356 -0
  69. package/lib/cjs/PriceLockup/index.js +9 -0
  70. package/lib/cjs/PriceLockup/tokens.js +66 -0
  71. package/lib/cjs/Progress/ProgressBar.js +99 -0
  72. package/lib/cjs/Progress/index.js +11 -0
  73. package/lib/cjs/QuantitySelector/QuantitySelector.js +267 -0
  74. package/lib/cjs/QuantitySelector/SideButton.js +77 -0
  75. package/lib/cjs/QuantitySelector/dictionary.js +32 -0
  76. package/lib/cjs/QuantitySelector/index.js +9 -0
  77. package/lib/cjs/QuantitySelector/styles.js +16 -0
  78. package/lib/cjs/ResponsiveImage/ResponsiveImage.js +107 -0
  79. package/lib/cjs/ResponsiveImage/index.js +9 -0
  80. package/lib/cjs/Ribbon/Ribbon.js +222 -0
  81. package/lib/cjs/Ribbon/index.js +9 -0
  82. package/lib/cjs/SkeletonProvider/SkeletonImage.js +45 -0
  83. package/lib/cjs/SkeletonProvider/SkeletonProvider.js +63 -0
  84. package/lib/cjs/SkeletonProvider/SkeletonTypography.js +44 -0
  85. package/lib/cjs/SkeletonProvider/index.js +9 -0
  86. package/lib/cjs/Span/Span.js +79 -0
  87. package/lib/cjs/Span/index.js +9 -0
  88. package/lib/cjs/Spinner/Spinner.js +221 -0
  89. package/lib/cjs/Spinner/SpinnerContent.js +100 -0
  90. package/lib/cjs/Spinner/constants.js +10 -0
  91. package/lib/cjs/Spinner/index.js +9 -0
  92. package/lib/cjs/StoryCard/StoryCard.js +219 -0
  93. package/lib/cjs/StoryCard/index.js +9 -0
  94. package/lib/cjs/Table/Body.js +24 -0
  95. package/lib/cjs/Table/Cell.js +187 -0
  96. package/lib/cjs/Table/Header.js +32 -0
  97. package/lib/cjs/Table/Row.js +41 -0
  98. package/lib/cjs/Table/SubHeading.js +30 -0
  99. package/lib/cjs/Table/Table.js +124 -0
  100. package/lib/cjs/Table/index.js +19 -0
  101. package/lib/cjs/TermsAndConditions/ExpandCollapse.js +160 -0
  102. package/lib/cjs/TermsAndConditions/TermsAndConditions.js +283 -0
  103. package/lib/cjs/TermsAndConditions/dictionary.js +22 -0
  104. package/lib/cjs/TermsAndConditions/index.js +13 -0
  105. package/lib/cjs/Testimonial/Testimonial.js +240 -0
  106. package/lib/cjs/Testimonial/index.js +9 -0
  107. package/lib/cjs/Toast/Toast.js +165 -0
  108. package/lib/cjs/Toast/index.js +9 -0
  109. package/lib/cjs/Video/ControlBar/ControlBar.js +294 -0
  110. package/lib/cjs/Video/ControlBar/Controls/VideoButton/VideoButton.js +76 -0
  111. package/lib/cjs/Video/ControlBar/Controls/VideoMenu/VideoMenu.js +169 -0
  112. package/lib/cjs/Video/ControlBar/Controls/VideoProgressBar/VideoProgressBar.js +211 -0
  113. package/lib/cjs/Video/ControlBar/Controls/VolumeSlider/VolumeSlider.js +197 -0
  114. package/lib/cjs/Video/MiddleControlButton/MiddleControlButton.js +78 -0
  115. package/lib/cjs/Video/Video.js +964 -0
  116. package/lib/cjs/Video/index.js +9 -0
  117. package/lib/cjs/Video/videoText.js +61 -0
  118. package/lib/cjs/VideoPicker/VideoPicker.js +197 -0
  119. package/lib/cjs/VideoPicker/VideoPickerPlayer.js +54 -0
  120. package/lib/cjs/VideoPicker/VideoPickerThumbnail.js +223 -0
  121. package/lib/cjs/VideoPicker/VideoSlider.js +88 -0
  122. package/lib/cjs/VideoPicker/index.js +9 -0
  123. package/lib/cjs/VideoPicker/videoPropType.js +17 -0
  124. package/lib/cjs/WaffleGrid/WaffleGrid.js +164 -0
  125. package/lib/cjs/WaffleGrid/index.js +9 -0
  126. package/lib/cjs/WebVideo/WebVideo.js +197 -0
  127. package/lib/cjs/WebVideo/index.js +9 -0
  128. package/lib/cjs/WebVideo/utils/index.js +57 -0
  129. package/lib/cjs/baseExports.js +438 -0
  130. package/lib/cjs/index.js +317 -0
  131. package/lib/cjs/server.js +13 -0
  132. package/lib/cjs/shared/ConditionalWrapper/ConditionalWrapper.js +29 -0
  133. package/lib/cjs/shared/ConditionalWrapper/index.js +9 -0
  134. package/lib/cjs/shared/FullBleedContent/FullBleedContent.js +108 -0
  135. package/lib/cjs/shared/FullBleedContent/getFullBleedBorderRadius.js +61 -0
  136. package/lib/cjs/shared/FullBleedContent/index.js +23 -0
  137. package/lib/cjs/shared/FullBleedContent/useFullBleedContentProps.js +61 -0
  138. package/lib/cjs/shared/VideoSplash/SplashButton/SplashButton.js +91 -0
  139. package/lib/cjs/shared/VideoSplash/SplashButtonWithDetails/SplashButtonWithDetails.js +229 -0
  140. package/lib/cjs/shared/VideoSplash/VideoSplash.js +72 -0
  141. package/lib/cjs/shared/VideoSplash/helpers.js +32 -0
  142. package/lib/cjs/utils/index.js +88 -0
  143. package/lib/cjs/utils/isElementFocusable.js +14 -0
  144. package/lib/cjs/utils/logger.js +24 -0
  145. package/lib/cjs/utils/media.js +45 -0
  146. package/lib/cjs/utils/renderStructuredContent.js +71 -0
  147. package/lib/cjs/utils/scrollToAnchor.js +25 -0
  148. package/lib/cjs/utils/ssr.js +50 -0
  149. package/lib/cjs/utils/theming/get-theme-from-server.js +24 -0
  150. package/lib/cjs/utils/theming/with-client-theme.js +31 -0
  151. package/lib/cjs/utils/theming/with-server-theme.js +33 -0
  152. package/lib/cjs/utils/transforms.js +11 -0
  153. package/lib/cjs/utils/useOverlaidPosition.js +222 -0
  154. package/lib/cjs/utils/useTypographyTheme.js +30 -0
  155. package/lib/{Badge → esm/Badge}/Badge.js +11 -19
  156. package/lib/{BlockQuote → esm/BlockQuote}/BlockQuote.js +17 -31
  157. package/lib/{Breadcrumbs → esm/Breadcrumbs}/Breadcrumbs.js +6 -5
  158. package/lib/{Breadcrumbs → esm/Breadcrumbs}/Item/Item.js +10 -6
  159. package/lib/{Callout → esm/Callout}/Callout.js +6 -5
  160. package/lib/{Card → esm/Card}/Card.js +10 -10
  161. package/lib/{Card → esm/Card}/CardContent.js +6 -5
  162. package/lib/{Card → esm/Card}/CardFooter.js +6 -5
  163. package/lib/{Countdown → esm/Countdown}/Countdown.js +53 -32
  164. package/lib/{Countdown → esm/Countdown}/Segment.js +6 -6
  165. package/lib/{DatePicker → esm/DatePicker}/CalendarContainer.js +5 -5
  166. package/lib/{DatePicker → esm/DatePicker}/DatePicker.js +24 -20
  167. package/lib/esm/DatePicker/reactDatesCss.js +3 -0
  168. package/lib/{Disclaimer → esm/Disclaimer}/Disclaimer.js +6 -5
  169. package/lib/{Footnote → esm/Footnote}/Footnote.js +43 -22
  170. package/lib/{Footnote → esm/Footnote}/FootnoteLink.js +6 -5
  171. package/lib/{NavigationBar → esm/NavigationBar}/NavigationBar.js +19 -20
  172. package/lib/{NavigationBar → esm/NavigationBar}/NavigationItem.js +6 -5
  173. package/lib/{NavigationBar → esm/NavigationBar}/NavigationSubMenu.js +1 -2
  174. package/lib/esm/NavigationBar/collapseItems.js +37 -0
  175. package/lib/{NavigationBar → esm/NavigationBar}/resolveItemSelection.js +1 -1
  176. package/lib/{OrderedList → esm/OrderedList}/Item.js +10 -6
  177. package/lib/{OrderedList → esm/OrderedList}/ItemBase.js +5 -5
  178. package/lib/{OrderedList → esm/OrderedList}/OrderedList.js +8 -8
  179. package/lib/{OrderedList → esm/OrderedList}/OrderedListBase.js +5 -5
  180. package/lib/{Paragraph → esm/Paragraph}/Paragraph.js +8 -16
  181. package/lib/{PreviewCard → esm/PreviewCard}/PreviewCard.js +10 -7
  182. package/lib/{PriceLockup → esm/PriceLockup}/PriceLockup.js +59 -69
  183. package/lib/{Progress → esm/Progress}/ProgressBar.js +6 -6
  184. package/lib/esm/QuantitySelector/styles.js +9 -0
  185. package/lib/{Ribbon → esm/Ribbon}/Ribbon.js +31 -57
  186. package/lib/{SkeletonProvider → esm/SkeletonProvider}/SkeletonImage.js +3 -4
  187. package/lib/esm/SkeletonProvider/SkeletonTypography.js +37 -0
  188. package/lib/{Span → esm/Span}/Span.js +7 -6
  189. package/lib/{Spinner → esm/Spinner}/Spinner.js +18 -8
  190. package/lib/{Spinner → esm/Spinner}/SpinnerContent.js +6 -5
  191. package/lib/{StoryCard → esm/StoryCard}/StoryCard.js +10 -7
  192. package/lib/{Table → esm/Table}/Cell.js +16 -45
  193. package/lib/esm/Table/Row.js +34 -0
  194. package/lib/{Table → esm/Table}/Table.js +18 -20
  195. package/lib/{TermsAndConditions → esm/TermsAndConditions}/ExpandCollapse.js +15 -8
  196. package/lib/{TermsAndConditions → esm/TermsAndConditions}/TermsAndConditions.js +22 -9
  197. package/lib/{Testimonial → esm/Testimonial}/Testimonial.js +26 -10
  198. package/lib/{Toast → esm/Toast}/Toast.js +15 -67
  199. package/lib/{Video → esm/Video}/ControlBar/ControlBar.js +18 -8
  200. package/lib/{Video → esm/Video}/ControlBar/Controls/VideoButton/VideoButton.js +7 -7
  201. package/lib/{Video → esm/Video}/ControlBar/Controls/VideoMenu/VideoMenu.js +14 -7
  202. package/lib/{Video → esm/Video}/ControlBar/Controls/VideoProgressBar/VideoProgressBar.js +14 -7
  203. package/lib/{Video → esm/Video}/ControlBar/Controls/VolumeSlider/VolumeSlider.js +10 -6
  204. package/lib/{Video → esm/Video}/MiddleControlButton/MiddleControlButton.js +6 -5
  205. package/lib/{Video → esm/Video}/Video.js +28 -12
  206. package/lib/{VideoPicker → esm/VideoPicker}/VideoPicker.js +21 -46
  207. package/lib/{VideoPicker → esm/VideoPicker}/VideoPickerThumbnail.js +19 -54
  208. package/lib/{WaffleGrid → esm/WaffleGrid}/WaffleGrid.js +14 -7
  209. package/lib/{WebVideo → esm/WebVideo}/WebVideo.js +14 -9
  210. package/lib/{baseExports.js → esm/baseExports.js} +1 -1
  211. package/lib/{index.js → esm/index.js} +1 -2
  212. package/lib/{shared → esm/shared}/FullBleedContent/FullBleedContent.js +5 -5
  213. package/lib/{shared → esm/shared}/VideoSplash/SplashButton/SplashButton.js +9 -6
  214. package/lib/{shared → esm/shared}/VideoSplash/SplashButtonWithDetails/SplashButtonWithDetails.js +17 -8
  215. package/lib/{shared → esm/shared}/VideoSplash/VideoSplash.js +6 -5
  216. package/lib/{utils → esm/utils}/index.js +1 -2
  217. package/lib/{utils → esm/utils}/scrollToAnchor.js +2 -2
  218. package/lib/{utils → esm/utils}/ssr.js +8 -4
  219. package/lib/{utils → esm/utils}/useOverlaidPosition.js +2 -4
  220. package/package.json +17 -16
  221. package/src/Badge/Badge.jsx +4 -3
  222. package/src/BlockQuote/BlockQuote.jsx +2 -3
  223. package/src/Breadcrumbs/Breadcrumbs.jsx +2 -3
  224. package/src/Breadcrumbs/Item/Item.jsx +2 -3
  225. package/src/Callout/Callout.jsx +2 -4
  226. package/src/Card/Card.jsx +1 -3
  227. package/src/Card/CardContent.jsx +2 -3
  228. package/src/Card/CardFooter.jsx +2 -3
  229. package/src/Countdown/Countdown.jsx +62 -36
  230. package/src/Countdown/Segment.jsx +1 -3
  231. package/src/DatePicker/CalendarContainer.jsx +1 -3
  232. package/src/DatePicker/DatePicker.jsx +2 -3
  233. package/src/DatePicker/reactDatesCss.js +1 -3
  234. package/src/Disclaimer/Disclaimer.jsx +2 -3
  235. package/src/Footnote/Footnote.jsx +2 -10
  236. package/src/Footnote/FootnoteLink.jsx +2 -3
  237. package/src/NavigationBar/NavigationBar.jsx +2 -3
  238. package/src/NavigationBar/NavigationItem.jsx +2 -3
  239. package/src/OrderedList/Item.jsx +2 -3
  240. package/src/OrderedList/ItemBase.jsx +1 -3
  241. package/src/OrderedList/OrderedList.jsx +2 -3
  242. package/src/OrderedList/OrderedListBase.jsx +1 -3
  243. package/src/Paragraph/Paragraph.jsx +2 -4
  244. package/src/PreviewCard/PreviewCard.jsx +1 -3
  245. package/src/PriceLockup/PriceLockup.jsx +2 -3
  246. package/src/Progress/ProgressBar.jsx +1 -3
  247. package/src/QuantitySelector/styles.js +1 -3
  248. package/src/Ribbon/Ribbon.jsx +2 -3
  249. package/src/Span/Span.jsx +2 -4
  250. package/src/Spinner/Spinner.jsx +2 -3
  251. package/src/Spinner/SpinnerContent.jsx +2 -3
  252. package/src/StoryCard/StoryCard.jsx +1 -3
  253. package/src/Table/Cell.jsx +4 -5
  254. package/src/Table/Row.jsx +13 -2
  255. package/src/Table/Table.jsx +14 -5
  256. package/src/TermsAndConditions/ExpandCollapse.jsx +6 -4
  257. package/src/TermsAndConditions/TermsAndConditions.jsx +2 -3
  258. package/src/Testimonial/Testimonial.jsx +2 -3
  259. package/src/Toast/Toast.jsx +2 -3
  260. package/src/Video/ControlBar/ControlBar.jsx +2 -4
  261. package/src/Video/ControlBar/Controls/VideoButton/VideoButton.jsx +2 -4
  262. package/src/Video/ControlBar/Controls/VideoMenu/VideoMenu.jsx +2 -4
  263. package/src/Video/ControlBar/Controls/VideoProgressBar/VideoProgressBar.jsx +2 -4
  264. package/src/Video/ControlBar/Controls/VolumeSlider/VolumeSlider.jsx +2 -4
  265. package/src/Video/MiddleControlButton/MiddleControlButton.jsx +2 -4
  266. package/src/Video/Video.jsx +2 -4
  267. package/src/VideoPicker/VideoPicker.jsx +2 -4
  268. package/src/VideoPicker/VideoPickerThumbnail.jsx +1 -3
  269. package/src/WaffleGrid/WaffleGrid.jsx +2 -3
  270. package/src/WebVideo/WebVideo.jsx +3 -4
  271. package/src/baseExports.js +1 -0
  272. package/src/index.js +1 -2
  273. package/src/shared/FullBleedContent/FullBleedContent.jsx +1 -3
  274. package/src/shared/VideoSplash/SplashButton/SplashButton.jsx +1 -3
  275. package/src/shared/VideoSplash/SplashButtonWithDetails/SplashButtonWithDetails.jsx +1 -4
  276. package/src/shared/VideoSplash/VideoSplash.jsx +2 -3
  277. package/src/utils/index.js +1 -3
  278. package/src/utils/ssr.js +10 -3
  279. package/types/Callout.d.ts +2 -1
  280. package/types/Tooltip.d.ts +1 -0
  281. package/lib/DatePicker/reactDatesCss.js +0 -830
  282. package/lib/ExpandCollapseMini/ExpandCollapseMini.js +0 -73
  283. package/lib/ExpandCollapseMini/ExpandCollapseMiniControl.js +0 -116
  284. package/lib/ExpandCollapseMini/index.js +0 -2
  285. package/lib/QuantitySelector/styles.js +0 -18
  286. package/lib/SkeletonProvider/SkeletonTypography.js +0 -38
  287. package/lib/Table/Row.js +0 -19
  288. package/lib/utils/theming/styled-components.js +0 -26
  289. package/src/ExpandCollapseMini/ExpandCollapseMini.jsx +0 -72
  290. package/src/ExpandCollapseMini/ExpandCollapseMiniControl.jsx +0 -104
  291. package/src/ExpandCollapseMini/index.js +0 -3
  292. package/src/utils/theming/styled-components.js +0 -23
  293. /package/lib/{Badge → esm/Badge}/index.js +0 -0
  294. /package/lib/{BlockQuote → esm/BlockQuote}/index.js +0 -0
  295. /package/lib/{Breadcrumbs → esm/Breadcrumbs}/index.js +0 -0
  296. /package/lib/{Callout → esm/Callout}/index.js +0 -0
  297. /package/lib/{Card → esm/Card}/index.js +0 -0
  298. /package/lib/{Countdown → esm/Countdown}/constants.js +0 -0
  299. /package/lib/{Countdown → esm/Countdown}/dictionary.js +0 -0
  300. /package/lib/{Countdown → esm/Countdown}/index.js +0 -0
  301. /package/lib/{Countdown → esm/Countdown}/types.js +0 -0
  302. /package/lib/{Countdown → esm/Countdown}/useCountdown.js +0 -0
  303. /package/lib/{DatePicker → esm/DatePicker}/dictionary.js +0 -0
  304. /package/lib/{DatePicker → esm/DatePicker}/index.js +0 -0
  305. /package/lib/{Disclaimer → esm/Disclaimer}/index.js +0 -0
  306. /package/lib/{Footnote → esm/Footnote}/dictionary.js +0 -0
  307. /package/lib/{Footnote → esm/Footnote}/index.js +0 -0
  308. /package/lib/{IconButton → esm/IconButton}/IconButton.js +0 -0
  309. /package/lib/{IconButton → esm/IconButton}/index.js +0 -0
  310. /package/lib/{Image → esm/Image}/Image.js +0 -0
  311. /package/lib/{Image → esm/Image}/index.js +0 -0
  312. /package/lib/{Image → esm/Image}/server.js +0 -0
  313. /package/lib/{List → esm/List}/List.js +0 -0
  314. /package/lib/{List → esm/List}/ListItem.js +0 -0
  315. /package/lib/{List → esm/List}/index.js +0 -0
  316. /package/lib/{NavigationBar → esm/NavigationBar}/index.js +0 -0
  317. /package/lib/{OptimizeImage → esm/OptimizeImage}/OptimizeImage.js +0 -0
  318. /package/lib/{OptimizeImage → esm/OptimizeImage}/index.js +0 -0
  319. /package/lib/{OptimizeImage → esm/OptimizeImage}/utils/getFallbackUrl.js +0 -0
  320. /package/lib/{OptimizeImage → esm/OptimizeImage}/utils/getImageUrls.js +0 -0
  321. /package/lib/{OptimizeImage → esm/OptimizeImage}/utils/getOptimizedUrl.js +0 -0
  322. /package/lib/{OptimizeImage → esm/OptimizeImage}/utils/hasWebpSupport.js +0 -0
  323. /package/lib/{OptimizeImage → esm/OptimizeImage}/utils/index.js +0 -0
  324. /package/lib/{OptimizeImage → esm/OptimizeImage}/utils/isSvgUrl.js +0 -0
  325. /package/lib/{OrderedList → esm/OrderedList}/constants.js +0 -0
  326. /package/lib/{OrderedList → esm/OrderedList}/index.js +0 -0
  327. /package/lib/{Paragraph → esm/Paragraph}/index.js +0 -0
  328. /package/lib/{PreviewCard → esm/PreviewCard}/AuthorDate.js +0 -0
  329. /package/lib/{PreviewCard → esm/PreviewCard}/index.js +0 -0
  330. /package/lib/{PriceLockup → esm/PriceLockup}/index.js +0 -0
  331. /package/lib/{PriceLockup → esm/PriceLockup}/tokens.js +0 -0
  332. /package/lib/{Progress → esm/Progress}/index.js +0 -0
  333. /package/lib/{QuantitySelector → esm/QuantitySelector}/QuantitySelector.js +0 -0
  334. /package/lib/{QuantitySelector → esm/QuantitySelector}/SideButton.js +0 -0
  335. /package/lib/{QuantitySelector → esm/QuantitySelector}/dictionary.js +0 -0
  336. /package/lib/{QuantitySelector → esm/QuantitySelector}/index.js +0 -0
  337. /package/lib/{ResponsiveImage → esm/ResponsiveImage}/ResponsiveImage.js +0 -0
  338. /package/lib/{ResponsiveImage → esm/ResponsiveImage}/index.js +0 -0
  339. /package/lib/{Ribbon → esm/Ribbon}/index.js +0 -0
  340. /package/lib/{SkeletonProvider → esm/SkeletonProvider}/SkeletonProvider.js +0 -0
  341. /package/lib/{SkeletonProvider → esm/SkeletonProvider}/index.js +0 -0
  342. /package/lib/{Span → esm/Span}/index.js +0 -0
  343. /package/lib/{Spinner → esm/Spinner}/constants.js +0 -0
  344. /package/lib/{Spinner → esm/Spinner}/index.js +0 -0
  345. /package/lib/{StoryCard → esm/StoryCard}/index.js +0 -0
  346. /package/lib/{Table → esm/Table}/Body.js +0 -0
  347. /package/lib/{Table → esm/Table}/Header.js +0 -0
  348. /package/lib/{Table → esm/Table}/SubHeading.js +0 -0
  349. /package/lib/{Table → esm/Table}/index.js +0 -0
  350. /package/lib/{TermsAndConditions → esm/TermsAndConditions}/dictionary.js +0 -0
  351. /package/lib/{TermsAndConditions → esm/TermsAndConditions}/index.js +0 -0
  352. /package/lib/{Testimonial → esm/Testimonial}/index.js +0 -0
  353. /package/lib/{Toast → esm/Toast}/index.js +0 -0
  354. /package/lib/{Video → esm/Video}/index.js +0 -0
  355. /package/lib/{Video → esm/Video}/videoText.js +0 -0
  356. /package/lib/{VideoPicker → esm/VideoPicker}/VideoPickerPlayer.js +0 -0
  357. /package/lib/{VideoPicker → esm/VideoPicker}/VideoSlider.js +0 -0
  358. /package/lib/{VideoPicker → esm/VideoPicker}/index.js +0 -0
  359. /package/lib/{VideoPicker → esm/VideoPicker}/videoPropType.js +0 -0
  360. /package/lib/{WaffleGrid → esm/WaffleGrid}/index.js +0 -0
  361. /package/lib/{WebVideo → esm/WebVideo}/index.js +0 -0
  362. /package/lib/{WebVideo → esm/WebVideo}/utils/index.js +0 -0
  363. /package/lib/{server.js → esm/server.js} +0 -0
  364. /package/lib/{shared → esm/shared}/ConditionalWrapper/ConditionalWrapper.js +0 -0
  365. /package/lib/{shared → esm/shared}/ConditionalWrapper/index.js +0 -0
  366. /package/lib/{shared → esm/shared}/FullBleedContent/getFullBleedBorderRadius.js +0 -0
  367. /package/lib/{shared → esm/shared}/FullBleedContent/index.js +0 -0
  368. /package/lib/{shared → esm/shared}/FullBleedContent/useFullBleedContentProps.js +0 -0
  369. /package/lib/{shared → esm/shared}/VideoSplash/helpers.js +0 -0
  370. /package/lib/{utils → esm/utils}/isElementFocusable.js +0 -0
  371. /package/lib/{utils → esm/utils}/logger.js +0 -0
  372. /package/lib/{utils → esm/utils}/media.js +0 -0
  373. /package/lib/{utils → esm/utils}/renderStructuredContent.js +0 -0
  374. /package/lib/{utils → esm/utils}/theming/get-theme-from-server.js +0 -0
  375. /package/lib/{utils → esm/utils}/theming/with-client-theme.js +0 -0
  376. /package/lib/{utils → esm/utils}/theming/with-server-theme.js +0 -0
  377. /package/lib/{utils → esm/utils}/transforms.js +0 -0
  378. /package/lib/{utils → esm/utils}/useTypographyTheme.js +0 -0
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _componentsBase = require("@telus-uds/components-base");
10
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+ var _dictionary = _interopRequireDefault(require("./dictionary"));
12
+ var _utils = require("../utils");
13
+ var _jsxRuntime = require("react/jsx-runtime");
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
+ const [selectProps, selectedSystemPropTypes] = (0, _componentsBase.selectSystemProps)([_utils.htmlAttrs]);
16
+ const StyledSup = /*#__PURE__*/_styledComponents.default.sup.withConfig({
17
+ displayName: "FootnoteLink__StyledSup",
18
+ componentId: "components-web__sc-17nd7xo-0"
19
+ })(_ref => {
20
+ let {
21
+ fontSize,
22
+ lineHeight,
23
+ paddingLeft,
24
+ paddingRight,
25
+ ...fontNameAndWeight
26
+ } = _ref;
27
+ return {
28
+ border: 0,
29
+ color: 'inherit',
30
+ cursor: 'pointer',
31
+ // we want to fallback on 'smaller' but have a valid size when a custom font size is provided.
32
+ fontSize: fontSize ? `${fontSize}px` : 'smaller',
33
+ lineHeight: lineHeight ?? `${fontSize * 2}px`,
34
+ margin: 0,
35
+ paddingVertical: 0,
36
+ paddingLeft,
37
+ paddingRight,
38
+ textDecoration: 'underline',
39
+ // apply font family
40
+ ...(0, _componentsBase.applyTextStyles)(fontNameAndWeight)
41
+ };
42
+ });
43
+
44
+ /**
45
+ * Use `FootnoteLink` to open `Footnote` component and display related legal content.
46
+ *
47
+ * ## Usage Criteria
48
+ *
49
+ * - Use FootnoteLink to open a Footnote component and display related legal content.
50
+ * - Avoid using FootnoteLink if there is only one annotation on a page. Consider including
51
+ * the annotation as part of the content whenever possible.
52
+ */
53
+ const FootnoteLink = /*#__PURE__*/_react.default.forwardRef((_ref2, ref) => {
54
+ let {
55
+ copy = 'en',
56
+ number = [],
57
+ onClick,
58
+ fontSize,
59
+ tokens,
60
+ variant = {},
61
+ ...rest
62
+ } = _ref2;
63
+ const themeTokens = (0, _componentsBase.useThemeTokens)('FootnoteLink', tokens, variant);
64
+ const numbers = Array.isArray(number) ? number : [number];
65
+ const refs = numbers.map(() => /*#__PURE__*/_react.default.createRef());
66
+ const handleClick = index => {
67
+ onClick(numbers[index], refs[index]);
68
+ };
69
+ const getCopy = (0, _componentsBase.useCopy)({
70
+ dictionary: _dictionary.default,
71
+ copy
72
+ });
73
+ const handleOnClick = (event, index) => {
74
+ event.preventDefault();
75
+ event.stopPropagation();
76
+ handleClick(index);
77
+ };
78
+ const handleOnKeyDown = (event, index) => {
79
+ if (event.key === 'Enter' || event.key === 13) {
80
+ handleClick(index);
81
+ }
82
+ };
83
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
84
+ ref: ref,
85
+ children: numbers.map((num, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(StyledSup, {
86
+ onKeyDown: event => handleOnKeyDown(event, index),
87
+ role: "button",
88
+ "aria-label": getCopy('a11yLabel'),
89
+ ref: refs[index],
90
+ onClick: event => handleOnClick(event, index),
91
+ tabIndex: 0,
92
+ ...selectProps(rest),
93
+ ...themeTokens,
94
+ fontSize: fontSize ?? themeTokens.fontSize,
95
+ children: `${num}${index !== numbers.length - 1 ? ',' : ''}`
96
+ }, num))
97
+ });
98
+ });
99
+ FootnoteLink.displayName = 'FootnoteLink';
100
+ const copyShape = _propTypes.default.shape({
101
+ a11yLabel: _propTypes.default.string.isRequired
102
+ });
103
+ FootnoteLink.propTypes = {
104
+ ...selectedSystemPropTypes,
105
+ variant: _componentsBase.variantProp.propType,
106
+ /**
107
+ * Use the `copy` prop to either select provided English or French copy by passing 'en' or 'fr' respectively.
108
+ * To provide your own, pass a JSON object with the key `a11yLabel`.
109
+ */
110
+ copy: _propTypes.default.oneOfType([_propTypes.default.oneOf(['en', 'fr']), copyShape]),
111
+ /**
112
+ * The footnote number, or multiple numbers if passed as an array.
113
+ * If using an array, a comma-separated group of numbers will be rendered as superscript.
114
+ */
115
+ number: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.arrayOf(_propTypes.default.number), _propTypes.default.string, _propTypes.default.arrayOf(_propTypes.default.string)]).isRequired,
116
+ /**
117
+ * A callback function to handle the click of a FootnoteLink.
118
+ */
119
+ onClick: _propTypes.default.func.isRequired,
120
+ /**
121
+ * Override default `fontSize` to set specific font size value
122
+ */
123
+ fontSize: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string])
124
+ };
125
+ var _default = exports.default = FootnoteLink;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _default = exports.default = {
8
+ en: {
9
+ a11yLabel: 'Read legal footnote',
10
+ close: 'close',
11
+ heading: 'Terms and conditions'
12
+ },
13
+ fr: {
14
+ a11yLabel: 'Lire la note de bas de page légale',
15
+ close: 'fermer',
16
+ heading: 'Modalités et conditions'
17
+ }
18
+ };
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _Footnote = _interopRequireDefault(require("./Footnote"));
8
+ var _FootnoteLink = _interopRequireDefault(require("./FootnoteLink"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ _Footnote.default.Link = _FootnoteLink.default;
11
+ var _default = exports.default = _Footnote.default;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _componentsBase = require("@telus-uds/components-base");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
+ const IconButton = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => {
13
+ let {
14
+ icon = null,
15
+ action,
16
+ tokens = {},
17
+ variant = {},
18
+ ...iconButtonProps
19
+ } = _ref;
20
+ const variantWithAction = action && !variant.action ? {
21
+ ...variant,
22
+ action
23
+ } : variant;
24
+ const {
25
+ icon: themeIcon
26
+ } = (0, _componentsBase.useThemeTokens)('IconButton', tokens, variantWithAction);
27
+ return (
28
+ /*#__PURE__*/
29
+ // If we want the arrow icons to have directional animation instead of scale, we can pass
30
+ // either appropriate iconTransateX/Y here, or define and pass variants like { direction: 'left' }
31
+ // which have theme rules that set `iconTranslateX` tokens in the theme rules and unset `iconScale`.
32
+ (0, _jsxRuntime.jsx)(_componentsBase.IconButton, {
33
+ ref: ref,
34
+ ...iconButtonProps,
35
+ tokens: tokens,
36
+ variant: variant,
37
+ icon: icon ?? themeIcon
38
+ })
39
+ );
40
+ });
41
+ const multiBrandIconNames = ['add', 'subtract', 'close', 'play', 'moveUp', 'moveDown', 'moveLeft', 'moveRight', 'expand'];
42
+ IconButton.displayName = 'IconButton';
43
+ const propsWithoutIcon = _ref2 => {
44
+ let {
45
+ icon,
46
+ ...props
47
+ } = _ref2;
48
+ return props;
49
+ };
50
+ IconButton.propTypes = {
51
+ ...propsWithoutIcon(_componentsBase.IconButton.propTypes),
52
+ tokens: (0, _componentsBase.getTokensPropType)('IconButton'),
53
+ /**
54
+ * To set the icon to a multi-brand compatabile icon
55
+ */
56
+ action: _propTypes.default.oneOf(multiBrandIconNames),
57
+ /**
58
+ * To set a custom icon
59
+ */
60
+ icon: _propTypes.default.func
61
+ };
62
+ var _default = exports.default = IconButton;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _IconButton = _interopRequireDefault(require("./IconButton"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ var _default = exports.default = _IconButton.default;
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _server = require("@telus-uds/components-base/server");
10
+ var _logger = require("../utils/logger");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
+ const [selectProps, selectedSystemPropTypes] = (0, _server.selectSystemProps)([_server.htmlAttrs]);
14
+ const Image = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => {
15
+ let {
16
+ src,
17
+ width,
18
+ height,
19
+ alt,
20
+ rounded,
21
+ loading = 'eager',
22
+ tokens,
23
+ theme,
24
+ variant,
25
+ ...rest
26
+ } = _ref;
27
+ let {
28
+ borderRadius
29
+ } = theme;
30
+ const isCircle = rounded === 'circle';
31
+ const isCorners = rounded === 'corners';
32
+ const isSquare = width === height;
33
+ if (isCircle && !isSquare) {
34
+ (0, _logger.warn)('Image', 'rounded="circle" is not supported for non-square images. Please provide a square image, otherwise the resulting shape will not be a circle.');
35
+ }
36
+ if (isCircle) {
37
+ borderRadius = '50%';
38
+ } else if (isCorners) {
39
+ borderRadius = '4px';
40
+ }
41
+ const style = {
42
+ borderRadius,
43
+ height: height ?? 'auto',
44
+ maxWidth: '100%'
45
+ };
46
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
47
+ ...selectProps(rest),
48
+ style: style,
49
+ src: src,
50
+ width: width,
51
+ height: height,
52
+ alt: alt,
53
+ loading: loading,
54
+ ref: ref
55
+ });
56
+ });
57
+ Image.displayName = 'Image';
58
+ Image.propTypes = {
59
+ ...selectedSystemPropTypes,
60
+ /**
61
+ * The src attribute for the HTML img element.
62
+ */
63
+
64
+ src: _propTypes.default.string.isRequired,
65
+ /**
66
+ * The alt attribute for the HTML img element. Setting this attribute to an empty string (alt="") indicates that this image is not a key part of the content, and that non-visual browsers may omit it from rendering.
67
+ */
68
+ alt: _propTypes.default.string.isRequired,
69
+ /**
70
+ * The image's width.
71
+ */
72
+ width: _propTypes.default.number.isRequired,
73
+ /**
74
+ * The image's height.
75
+ */
76
+ height: _propTypes.default.number,
77
+ /**
78
+ * Loading strategy.
79
+ * @default 'eager'
80
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-loading
81
+ */
82
+ loading: _propTypes.default.oneOf(['eager', 'lazy']),
83
+ /**
84
+ * Make image render as a circle or with rounded corners.
85
+ */
86
+ rounded: _propTypes.default.oneOf(['circle', 'corners']),
87
+ tokens: (0, _server.getTokensPropType)('Image')
88
+ };
89
+ Image.displayName = 'Image';
90
+ var _default = exports.default = Image;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ 'use client';
3
+
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, "DefaultImage", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _Image.default;
11
+ }
12
+ });
13
+ exports.default = void 0;
14
+ var _Image = _interopRequireDefault(require("./Image"));
15
+ var _withClientTheme = _interopRequireDefault(require("../utils/theming/with-client-theme"));
16
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
+ // Exporting the unwrapped component separately for react-docgen to extract info for docsite
18
+
19
+ const ClientThemedImage = (0, _withClientTheme.default)(_Image.default);
20
+ var _default = exports.default = ClientThemedImage;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _withServerTheme = _interopRequireDefault(require("../utils/theming/with-server-theme"));
8
+ var _Image = _interopRequireDefault(require("./Image"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ const ServerThemedImage = (0, _withServerTheme.default)(_Image.default, 'Image');
11
+ var _default = exports.default = ServerThemedImage;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _componentsBase = require("@telus-uds/components-base");
8
+ var _default = exports.default = _componentsBase.ListBase;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _componentsBase = require("@telus-uds/components-base");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
+ const ListItem = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => {
13
+ let {
14
+ children,
15
+ title,
16
+ ...rest
17
+ } = _ref;
18
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_componentsBase.ListItem, {
19
+ ref: ref,
20
+ ...rest,
21
+ children: [Boolean(title) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_componentsBase.Typography, {
22
+ variant: {
23
+ size: 'h4'
24
+ },
25
+ children: title
26
+ }), children]
27
+ });
28
+ });
29
+ ListItem.displayName = 'ListItem';
30
+ ListItem.propTypes = {
31
+ children: _propTypes.default.node.isRequired,
32
+ title: _propTypes.default.string
33
+ };
34
+ var _default = exports.default = ListItem;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _List = _interopRequireDefault(require("./List"));
8
+ var _ListItem = _interopRequireDefault(require("./ListItem"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ _List.default.Item = _ListItem.default;
11
+ var _default = exports.default = _List.default;
@@ -0,0 +1,282 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _componentsBase = require("@telus-uds/components-base");
10
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+ var _utils = require("../utils");
12
+ var _NavigationItem = _interopRequireDefault(require("./NavigationItem"));
13
+ var _NavigationSubMenu = _interopRequireDefault(require("./NavigationSubMenu"));
14
+ var _collapseItems = _interopRequireDefault(require("./collapseItems"));
15
+ var _jsxRuntime = require("react/jsx-runtime");
16
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
+ const [selectProps, selectedSystemPropTypes] = (0, _componentsBase.selectSystemProps)([_utils.htmlAttrs]);
18
+ const Heading = /*#__PURE__*/_styledComponents.default.div.withConfig({
19
+ displayName: "NavigationBar__Heading",
20
+ componentId: "components-web__sc-1vis1gt-0"
21
+ })({
22
+ alignItems: 'center',
23
+ display: 'flex',
24
+ flex: 1,
25
+ justifyContent: 'flex-start',
26
+ '> *': {
27
+ display: 'contents',
28
+ letterSpacing: 0
29
+ }
30
+ });
31
+
32
+ /**
33
+ * NavigationBar can be used to allow customers to consistently navigate across
34
+ * key pages within a specific product line
35
+ */
36
+ const NavigationBar = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => {
37
+ let {
38
+ accessibilityRole = 'navigation',
39
+ heading,
40
+ headingLevel = 'h1',
41
+ items,
42
+ onChange,
43
+ selectedId,
44
+ value,
45
+ LinkRouter,
46
+ linkRouterProps,
47
+ ...rest
48
+ } = _ref;
49
+ const {
50
+ currentValue,
51
+ setValue
52
+ } = (0, _componentsBase.useInputValue)({
53
+ value,
54
+ initialValue: selectedId,
55
+ onChange
56
+ });
57
+ (0, _componentsBase.useHash)((hash, event) => {
58
+ let hashItem = hash && items.find(_ref2 => {
59
+ let {
60
+ href
61
+ } = _ref2;
62
+ return hash === href;
63
+ });
64
+ if (!hashItem) {
65
+ const parentItem = items.find(_ref3 => {
66
+ let {
67
+ items: parentItems
68
+ } = _ref3;
69
+ return parentItems?.some(_ref4 => {
70
+ let {
71
+ href
72
+ } = _ref4;
73
+ return hash === href;
74
+ });
75
+ });
76
+ hashItem = parentItem?.items.find(_ref5 => {
77
+ let {
78
+ href
79
+ } = _ref5;
80
+ return hash === href;
81
+ });
82
+ }
83
+ const hashId = hashItem && (hashItem.id || hashItem.label);
84
+ if (hashId) setValue(hashId, event);
85
+ }, [items, setValue]);
86
+ const direction = (0, _componentsBase.useResponsiveProp)({
87
+ xs: 'column',
88
+ sm: 'row'
89
+ });
90
+ const itemsForViewport = (0, _componentsBase.useResponsiveProp)({
91
+ xs: (0, _collapseItems.default)(items, currentValue),
92
+ lg: items
93
+ });
94
+ const openOverlayRef = _react.default.useRef(null);
95
+ const [openSubMenuId, setOpenSubMenuId] = _react.default.useState(null);
96
+ const handleSubMenuClose = event => {
97
+ if (event.type === 'keydown') {
98
+ if (event.key === 'Escape' || event.key === 27) {
99
+ setOpenSubMenuId(null);
100
+ }
101
+ } else if (event.type === 'click' && openOverlayRef?.current && event.target && !openOverlayRef?.current?.contains(event.target)) {
102
+ setOpenSubMenuId(null);
103
+ } else if (event.type === 'touchstart' && openOverlayRef?.current && event.touches[0].target && !openOverlayRef?.current?.contains(event.touches[0].target)) {
104
+ setOpenSubMenuId(null);
105
+ }
106
+ };
107
+ const navRefDefault = _react.default.useRef(null);
108
+ const navRef = ref ?? navRefDefault;
109
+ const itemsRef = _react.default.useRef(null);
110
+
111
+ // Close the submenu when the user clicks outside the navigation bar
112
+ const handleMouseDown = _react.default.useCallback(event => {
113
+ if (navRef.current && itemsRef.current) {
114
+ // Get the bounding rectangles of the navigation bar and the items container
115
+ const navRect = navRef.current.getBoundingClientRect();
116
+ const itemsRect = itemsRef.current.getBoundingClientRect();
117
+
118
+ // Check if the click was outside the navigation bar and the items container
119
+ const isOutsideNav = event.clientX < navRect.left || event.clientX > navRect.right || event.clientY < navRect.top || event.clientY > navRect.bottom;
120
+ const isOutsideItems = event.clientX < itemsRect.left || event.clientX > itemsRect.right || event.clientY < itemsRect.top || event.clientY > itemsRect.bottom;
121
+ if (isOutsideNav && isOutsideItems) {
122
+ setOpenSubMenuId(null);
123
+ }
124
+ }
125
+ }, [navRef, itemsRef, setOpenSubMenuId]);
126
+
127
+ // TODO: create a custom hook for that and use here and in the Footnote
128
+ _react.default.useEffect(() => {
129
+ // Add listeners for mouse clicks outside and for key presses
130
+ document.addEventListener('mousedown', handleMouseDown);
131
+ if (openSubMenuId !== null) {
132
+ window.addEventListener('click', handleSubMenuClose);
133
+ window.addEventListener('keydown', handleSubMenuClose);
134
+ window.addEventListener('touchstart', handleSubMenuClose);
135
+ }
136
+ return () => {
137
+ // Remove listeners when the component is unmounted
138
+ document.removeEventListener('mousedown', handleMouseDown);
139
+ if (openSubMenuId !== null) {
140
+ window.removeEventListener('click', handleSubMenuClose);
141
+ window.removeEventListener('keydown', handleSubMenuClose);
142
+ window.removeEventListener('touchstart', handleSubMenuClose);
143
+ }
144
+ };
145
+ }, [openSubMenuId, handleMouseDown]);
146
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_componentsBase.StackView, {
147
+ accessibilityRole: accessibilityRole,
148
+ direction: direction,
149
+ ref: navRef,
150
+ space: 2,
151
+ tokens: {
152
+ alignItems: direction === 'column' ? 'flex-start' : 'center',
153
+ justifyContent: 'flex-end'
154
+ },
155
+ ...selectProps(rest),
156
+ children: [heading && /*#__PURE__*/(0, _jsxRuntime.jsx)(Heading, {
157
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_componentsBase.Typography, {
158
+ variant: {
159
+ size: 'h5'
160
+ },
161
+ heading: headingLevel,
162
+ children: heading
163
+ })
164
+ }), itemsForViewport?.map((_ref6, index) => {
165
+ let {
166
+ href,
167
+ label,
168
+ id,
169
+ onClick,
170
+ ref: itemRef,
171
+ LinkRouter: ItemLinkRouter = LinkRouter,
172
+ linkRouterProps: itemLinkRouterProps,
173
+ items: nestedItems,
174
+ ...itemRest
175
+ } = _ref6;
176
+ const itemId = id ?? label;
177
+ const handleClick = event => {
178
+ if (nestedItems) {
179
+ setOpenSubMenuId(openSubMenuId !== itemId ? itemId : null);
180
+ return;
181
+ }
182
+ if (href?.startsWith('#')) {
183
+ (0, _utils.scrollToAnchor)(href, event, () => setValue(itemId, event));
184
+ } else {
185
+ setValue(itemId, event);
186
+ }
187
+ onClick?.(event);
188
+ };
189
+ const ItemComponent = nestedItems ? _NavigationSubMenu.default : _NavigationItem.default;
190
+ const isOpen = itemId === openSubMenuId;
191
+ const scrollableNestedItems = nestedItems?.map(item => ({
192
+ ...item,
193
+ onPress: event => {
194
+ const nestedItemId = item.id ?? item.label;
195
+ (0, _utils.scrollToAnchor)(item.href, event, () => setValue(nestedItemId, event));
196
+ }
197
+ })) ?? nestedItems;
198
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(ItemComponent, {
199
+ ref: itemRef,
200
+ href: href,
201
+ onClick: handleClick
202
+ // TODO: refactor to pass selected ID via context
203
+ ,
204
+ selectedId: currentValue,
205
+ index: index,
206
+ LinkRouter: ItemLinkRouter,
207
+ linkRouterProps: {
208
+ ...linkRouterProps,
209
+ ...itemLinkRouterProps
210
+ },
211
+ items: scrollableNestedItems,
212
+ selected: itemId === currentValue,
213
+ itemsContainerRef: itemsRef,
214
+ ...itemRest,
215
+ ...(scrollableNestedItems && {
216
+ isOpen
217
+ }),
218
+ ...(scrollableNestedItems && isOpen && {
219
+ openOverlayRef
220
+ }),
221
+ children: label
222
+ }, itemId);
223
+ })]
224
+ });
225
+ });
226
+ NavigationBar.displayName = 'NavigationBar';
227
+ NavigationBar.propTypes = {
228
+ ...selectedSystemPropTypes,
229
+ ..._componentsBase.withLinkRouter.propTypes,
230
+ /**
231
+ * NavigationBar pages
232
+ *
233
+ * Each `item` object must contain:
234
+ * - `heading` - user-facing text in the tab link
235
+ * - `href` - the URL of the page linked to.
236
+ * - `id` - a stable, unique identifier of the page within the set. Not written into the HTML.
237
+ */
238
+ items: _propTypes.default.arrayOf(_propTypes.default.shape({
239
+ label: _propTypes.default.string.isRequired,
240
+ href: _propTypes.default.string,
241
+ id: _propTypes.default.string.isRequired,
242
+ onClick: _propTypes.default.func,
243
+ selected: _propTypes.default.bool,
244
+ LinkRouter: _componentsBase.withLinkRouter.propTypes?.LinkRouter,
245
+ linkRouterProps: _componentsBase.withLinkRouter.propTypes?.linkRouterProps,
246
+ // One layer of nested links is allowed
247
+ items: _propTypes.default.arrayOf(_propTypes.default.shape({
248
+ label: _propTypes.default.string.isRequired,
249
+ href: _propTypes.default.string,
250
+ id: _propTypes.default.string.isRequired,
251
+ onClick: _propTypes.default.func,
252
+ selected: _propTypes.default.bool,
253
+ LinkRouter: _componentsBase.withLinkRouter.propTypes?.LinkRouter,
254
+ linkRouterProps: _componentsBase.withLinkRouter.propTypes?.linkRouterProps
255
+ }))
256
+ })).isRequired,
257
+ /**
258
+ * Common navigation bar heading.
259
+ */
260
+ heading: _propTypes.default.string,
261
+ /**
262
+ * Sets the `headingLevel` of the `heading`
263
+ */
264
+ headingLevel: _propTypes.default.oneOf(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']),
265
+ /**
266
+ * Initial selected item ID
267
+ */
268
+ selectedId: _propTypes.default.string,
269
+ /**
270
+ * Optional function to be called on pressing a link
271
+ */
272
+ onChange: _propTypes.default.func,
273
+ /**
274
+ * Controlled value for selected item ID
275
+ */
276
+ value: _propTypes.default.string,
277
+ /**
278
+ * Accesibility role for stackview
279
+ */
280
+ accessibilityRole: _propTypes.default.string
281
+ };
282
+ var _default = exports.default = NavigationBar;