@telefonica/mistica 17.2.0 → 17.4.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 (347) hide show
  1. package/css/blau.css +30 -16
  2. package/css/community/cyber.css +1491 -0
  3. package/css/esimflag.css +41 -18
  4. package/css/mistica-common.css +6 -0
  5. package/css/mistica.css +1 -1
  6. package/css/movistar.css +35 -18
  7. package/css/o2.css +32 -18
  8. package/css/telefonica.css +44 -18
  9. package/css/vivo-evolution.css +72 -20
  10. package/css/vivo.css +32 -18
  11. package/dist/accordion.css-mistica.js +10 -10
  12. package/dist/align.css-mistica.js +1 -1
  13. package/dist/autocomplete.css-mistica.js +4 -4
  14. package/dist/avatar.css-mistica.js +1 -1
  15. package/dist/badge.css-mistica.js +1 -1
  16. package/dist/box.css-mistica.js +13 -13
  17. package/dist/boxed.css-mistica.js +24 -24
  18. package/dist/boxed.d.ts +9 -0
  19. package/dist/boxed.js +18 -15
  20. package/dist/button-group.css-mistica.js +1 -1
  21. package/dist/button-layout.css-mistica.js +19 -19
  22. package/dist/button.css-mistica.js +50 -50
  23. package/dist/callout.css-mistica.js +13 -13
  24. package/dist/card-internal.css-mistica.js +22 -22
  25. package/dist/carousel.css-mistica.js +30 -30
  26. package/dist/checkbox.css-mistica.js +15 -15
  27. package/dist/chip.css-mistica.js +18 -18
  28. package/dist/circle.css-mistica.js +2 -2
  29. package/dist/community/advanced-data-card.css-mistica.js +19 -19
  30. package/dist/community/ai-card.css-mistica.js +9 -9
  31. package/dist/community/blocks.css-mistica.js +3 -3
  32. package/dist/community/cyber/example-component.css-mistica.js +1 -1
  33. package/dist/community/example-component.css-mistica.js +1 -1
  34. package/dist/community/skins/cyber-skin.d.ts +5 -0
  35. package/dist/community/skins/cyber-skin.js +289 -256
  36. package/dist/counter.css-mistica.js +6 -6
  37. package/dist/cover-hero.css-mistica.js +7 -7
  38. package/dist/credit-card-number-field.css-mistica.js +3 -3
  39. package/dist/date-field.css-mistica.js +1 -1
  40. package/dist/date-time-picker.css-mistica.js +1 -1
  41. package/dist/dialog.css-mistica.js +10 -10
  42. package/dist/divider.css-mistica.js +5 -5
  43. package/dist/double-field.css-mistica.js +2 -2
  44. package/dist/drawer.css-mistica.js +4 -4
  45. package/dist/empty-state-card.css-mistica.js +1 -1
  46. package/dist/empty-state.css-mistica.js +8 -8
  47. package/dist/fade-in.css-mistica.js +1 -1
  48. package/dist/feedback.css-mistica.js +5 -5
  49. package/dist/file-upload.css-mistica.js +10 -10
  50. package/dist/fixed-footer-layout.css-mistica.js +6 -6
  51. package/dist/form.css-mistica.js +1 -1
  52. package/dist/generated/mistica-icons/icon-panel-collapse-regular.js +165 -0
  53. package/dist/generated/mistica-icons/icon-panel-expand-regular.js +159 -0
  54. package/dist/grid-layout.css-mistica.js +3 -3
  55. package/dist/grid.css-mistica.js +120 -120
  56. package/dist/header.css-mistica.js +1 -1
  57. package/dist/hero.css-mistica.js +4 -4
  58. package/dist/horizontal-scroll.css-mistica.js +1 -1
  59. package/dist/icon-button.css-mistica.js +53 -53
  60. package/dist/icons/icon-chevron.css-mistica.js +2 -2
  61. package/dist/icons/icon-error.css-mistica.js +1 -1
  62. package/dist/image.css-mistica.js +8 -8
  63. package/dist/index.d.ts +5 -0
  64. package/dist/index.js +10 -1
  65. package/dist/inline.css-mistica.js +11 -11
  66. package/dist/list.css-mistica.js +40 -28
  67. package/dist/list.css.d.ts +2 -0
  68. package/dist/list.d.ts +3 -1
  69. package/dist/list.js +176 -165
  70. package/dist/loading-bar.css-mistica.js +1 -1
  71. package/dist/loading-screen.css-mistica.js +12 -12
  72. package/dist/logo-movistar.js +1 -1
  73. package/dist/logo.css-mistica.js +5 -5
  74. package/dist/menu.css-mistica.js +13 -13
  75. package/dist/mobile-navigation-menu.d.ts +26 -0
  76. package/dist/mobile-navigation-menu.js +145 -0
  77. package/dist/mosaic.css-mistica.js +1 -1
  78. package/dist/navigation-bar.css-mistica.js +31 -97
  79. package/dist/navigation-bar.css.d.ts +0 -24
  80. package/dist/navigation-bar.d.ts +3 -38
  81. package/dist/navigation-bar.js +399 -586
  82. package/dist/navigation-breadcrumbs.css-mistica.js +1 -1
  83. package/dist/navigation-shared.css-mistica.js +79 -0
  84. package/dist/navigation-shared.css.d.ts +26 -0
  85. package/dist/navigation-shared.d.ts +66 -0
  86. package/dist/navigation-shared.js +264 -0
  87. package/dist/package-version.js +1 -1
  88. package/dist/pagination.css-mistica.js +22 -22
  89. package/dist/pin-field.css-mistica.js +4 -4
  90. package/dist/popover.css-mistica.js +1 -1
  91. package/dist/portal.d.ts +1 -1
  92. package/dist/progress-bar.css-mistica.js +7 -7
  93. package/dist/radio-button.css-mistica.js +27 -27
  94. package/dist/rating.css-mistica.js +4 -4
  95. package/dist/responsive-layout.css-mistica.js +6 -6
  96. package/dist/screen-reader-only.css-mistica.js +1 -1
  97. package/dist/select.css-mistica.js +21 -21
  98. package/dist/sheet-action-row.css-mistica.js +1 -1
  99. package/dist/sheet-common.css-mistica.js +7 -7
  100. package/dist/sheet-info.css-mistica.js +1 -1
  101. package/dist/sidenav-bar-context.d.ts +25 -0
  102. package/dist/sidenav-bar-context.js +72 -0
  103. package/dist/sidenav-bar-data.d.ts +15 -0
  104. package/dist/sidenav-bar-data.js +38 -0
  105. package/dist/sidenav-bar-first-level-item.d.ts +42 -0
  106. package/dist/sidenav-bar-first-level-item.js +174 -0
  107. package/dist/sidenav-bar-keyboard.d.ts +13 -0
  108. package/dist/sidenav-bar-keyboard.js +314 -0
  109. package/dist/sidenav-bar-layout.css-mistica.js +28 -0
  110. package/dist/sidenav-bar-layout.css.d.ts +5 -0
  111. package/dist/sidenav-bar-layout.d.ts +22 -0
  112. package/dist/sidenav-bar-layout.js +103 -0
  113. package/dist/sidenav-bar-mobile.d.ts +24 -0
  114. package/dist/sidenav-bar-mobile.js +332 -0
  115. package/dist/sidenav-bar-motion.d.ts +32 -0
  116. package/dist/sidenav-bar-motion.js +84 -0
  117. package/dist/sidenav-bar-panel.d.ts +31 -0
  118. package/dist/sidenav-bar-panel.js +208 -0
  119. package/dist/sidenav-bar-row.d.ts +82 -0
  120. package/dist/sidenav-bar-row.js +230 -0
  121. package/dist/sidenav-bar-second-level-item.d.ts +43 -0
  122. package/dist/sidenav-bar-second-level-item.js +89 -0
  123. package/dist/sidenav-bar-section.d.ts +23 -0
  124. package/dist/sidenav-bar-section.js +167 -0
  125. package/dist/sidenav-bar-types.d.ts +192 -0
  126. package/dist/sidenav-bar-types.js +11 -0
  127. package/dist/sidenav-bar.css-mistica.js +325 -0
  128. package/dist/sidenav-bar.css.d.ts +93 -0
  129. package/dist/sidenav-bar.d.ts +102 -0
  130. package/dist/sidenav-bar.js +492 -0
  131. package/dist/skeletons.css-mistica.js +8 -8
  132. package/dist/skins/blau.d.ts +5 -0
  133. package/dist/skins/blau.js +12 -8
  134. package/dist/skins/esimflag.d.ts +5 -0
  135. package/dist/skins/esimflag.js +13 -9
  136. package/dist/skins/movistar.d.ts +5 -0
  137. package/dist/skins/movistar.js +13 -9
  138. package/dist/skins/o2.d.ts +5 -0
  139. package/dist/skins/o2.js +13 -9
  140. package/dist/skins/skin-contract.css-mistica.js +735 -731
  141. package/dist/skins/skin-contract.css.d.ts +16 -12
  142. package/dist/skins/telefonica.d.ts +5 -0
  143. package/dist/skins/telefonica.js +13 -9
  144. package/dist/skins/types/colors.d.ts +13 -6
  145. package/dist/skins/vivo-evolution.d.ts +5 -0
  146. package/dist/skins/vivo-evolution.js +14 -10
  147. package/dist/skins/vivo.d.ts +5 -0
  148. package/dist/skins/vivo.js +13 -9
  149. package/dist/skip-link.css-mistica.js +2 -2
  150. package/dist/slider.css-mistica.js +24 -24
  151. package/dist/snackbar.css-mistica.js +14 -14
  152. package/dist/spinner.css-mistica.js +1 -1
  153. package/dist/square.css-mistica.js +1 -1
  154. package/dist/stack.css-mistica.js +5 -5
  155. package/dist/stacking-group.css-mistica.js +1 -1
  156. package/dist/stepper.css-mistica.js +9 -9
  157. package/dist/switch-component.css-mistica.js +48 -42
  158. package/dist/switch-component.css.d.ts +2 -0
  159. package/dist/switch-component.js +18 -18
  160. package/dist/table.css-mistica.js +9 -9
  161. package/dist/tabs.css-mistica.js +22 -22
  162. package/dist/tag.css-mistica.js +3 -3
  163. package/dist/text-field-base.css-mistica.js +19 -19
  164. package/dist/text-field-components.css-mistica.js +10 -10
  165. package/dist/text-link.css-mistica.js +6 -6
  166. package/dist/text-tokens.d.ts +6 -0
  167. package/dist/text-tokens.js +157 -133
  168. package/dist/text.css-mistica.js +6 -6
  169. package/dist/timeline.css-mistica.js +11 -11
  170. package/dist/timer.css-mistica.js +6 -6
  171. package/dist/tooltip.css-mistica.js +2 -2
  172. package/dist/touchable.css-mistica.js +4 -4
  173. package/dist/utils/aspect-ratio-support.css-mistica.js +2 -2
  174. package/dist/video.css-mistica.js +1 -1
  175. package/dist/vivinho-loading-animation/vivinho-loading-animation.css-mistica.js +1 -1
  176. package/dist-es/accordion.css-mistica.js +7 -7
  177. package/dist-es/align.css-mistica.js +1 -1
  178. package/dist-es/autocomplete.css-mistica.js +2 -2
  179. package/dist-es/avatar.css-mistica.js +1 -1
  180. package/dist-es/badge.css-mistica.js +1 -1
  181. package/dist-es/box.css-mistica.js +13 -13
  182. package/dist-es/boxed.css-mistica.js +23 -23
  183. package/dist-es/boxed.js +25 -25
  184. package/dist-es/button-group.css-mistica.js +1 -1
  185. package/dist-es/button-layout.css-mistica.js +16 -16
  186. package/dist-es/button.css-mistica.js +38 -38
  187. package/dist-es/callout.css-mistica.js +12 -12
  188. package/dist-es/card-internal.css-mistica.js +17 -17
  189. package/dist-es/carousel.css-mistica.js +10 -10
  190. package/dist-es/checkbox.css-mistica.js +13 -13
  191. package/dist-es/chip.css-mistica.js +17 -17
  192. package/dist-es/circle.css-mistica.js +2 -2
  193. package/dist-es/community/advanced-data-card.css-mistica.js +7 -7
  194. package/dist-es/community/ai-card.css-mistica.js +3 -3
  195. package/dist-es/community/blocks.css-mistica.js +2 -2
  196. package/dist-es/community/cyber/example-component.css-mistica.js +1 -1
  197. package/dist-es/community/example-component.css-mistica.js +1 -1
  198. package/dist-es/community/skins/cyber-skin.js +289 -256
  199. package/dist-es/counter.css-mistica.js +2 -2
  200. package/dist-es/cover-hero.css-mistica.js +4 -4
  201. package/dist-es/credit-card-number-field.css-mistica.js +3 -3
  202. package/dist-es/date-field.css-mistica.js +1 -1
  203. package/dist-es/date-time-picker.css-mistica.js +1 -1
  204. package/dist-es/dialog.css-mistica.js +5 -5
  205. package/dist-es/divider.css-mistica.js +5 -5
  206. package/dist-es/double-field.css-mistica.js +2 -2
  207. package/dist-es/drawer.css-mistica.js +2 -2
  208. package/dist-es/empty-state-card.css-mistica.js +1 -1
  209. package/dist-es/empty-state.css-mistica.js +7 -7
  210. package/dist-es/fade-in.css-mistica.js +1 -1
  211. package/dist-es/feedback.css-mistica.js +2 -2
  212. package/dist-es/file-upload.css-mistica.js +8 -8
  213. package/dist-es/fixed-footer-layout.css-mistica.js +3 -3
  214. package/dist-es/form.css-mistica.js +1 -1
  215. package/dist-es/generated/mistica-icons/icon-panel-collapse-regular.js +115 -0
  216. package/dist-es/generated/mistica-icons/icon-panel-expand-regular.js +109 -0
  217. package/dist-es/grid-layout.css-mistica.js +3 -3
  218. package/dist-es/grid.css-mistica.js +120 -120
  219. package/dist-es/header.css-mistica.js +1 -1
  220. package/dist-es/hero.css-mistica.js +3 -3
  221. package/dist-es/horizontal-scroll.css-mistica.js +1 -1
  222. package/dist-es/icon-button.css-mistica.js +53 -53
  223. package/dist-es/icons/icon-chevron.css-mistica.js +2 -2
  224. package/dist-es/icons/icon-error.css-mistica.js +1 -1
  225. package/dist-es/image.css-mistica.js +4 -4
  226. package/dist-es/index.js +2279 -2276
  227. package/dist-es/inline.css-mistica.js +11 -11
  228. package/dist-es/list.css-mistica.js +8 -2
  229. package/dist-es/list.js +275 -264
  230. package/dist-es/loading-bar.css-mistica.js +1 -1
  231. package/dist-es/loading-screen.css-mistica.js +5 -5
  232. package/dist-es/logo-movistar.js +1 -1
  233. package/dist-es/logo.css-mistica.js +5 -5
  234. package/dist-es/menu.css-mistica.js +13 -13
  235. package/dist-es/mobile-navigation-menu.js +90 -0
  236. package/dist-es/mosaic.css-mistica.js +1 -1
  237. package/dist-es/navigation-bar.css-mistica.js +11 -20
  238. package/dist-es/navigation-bar.js +469 -656
  239. package/dist-es/navigation-breadcrumbs.css-mistica.js +1 -1
  240. package/dist-es/navigation-shared.css-mistica.js +11 -0
  241. package/dist-es/navigation-shared.js +192 -0
  242. package/dist-es/package-version.js +1 -1
  243. package/dist-es/pagination.css-mistica.js +19 -19
  244. package/dist-es/pin-field.css-mistica.js +2 -2
  245. package/dist-es/popover.css-mistica.js +1 -1
  246. package/dist-es/progress-bar.css-mistica.js +7 -7
  247. package/dist-es/radio-button.css-mistica.js +22 -22
  248. package/dist-es/rating.css-mistica.js +3 -3
  249. package/dist-es/responsive-layout.css-mistica.js +6 -6
  250. package/dist-es/screen-reader-only.css-mistica.js +1 -1
  251. package/dist-es/select.css-mistica.js +18 -18
  252. package/dist-es/sheet-action-row.css-mistica.js +1 -1
  253. package/dist-es/sheet-common.css-mistica.js +2 -2
  254. package/dist-es/sheet-info.css-mistica.js +1 -1
  255. package/dist-es/sidenav-bar-context.js +14 -0
  256. package/dist-es/sidenav-bar-data.js +12 -0
  257. package/dist-es/sidenav-bar-first-level-item.js +124 -0
  258. package/dist-es/sidenav-bar-keyboard.js +253 -0
  259. package/dist-es/sidenav-bar-layout.css-mistica.js +2 -0
  260. package/dist-es/sidenav-bar-layout.js +86 -0
  261. package/dist-es/sidenav-bar-mobile.js +277 -0
  262. package/dist-es/sidenav-bar-motion.js +26 -0
  263. package/dist-es/sidenav-bar-panel.js +146 -0
  264. package/dist-es/sidenav-bar-row.js +208 -0
  265. package/dist-es/sidenav-bar-second-level-item.js +72 -0
  266. package/dist-es/sidenav-bar-section.js +112 -0
  267. package/dist-es/sidenav-bar-types.js +2 -0
  268. package/dist-es/sidenav-bar.css-mistica.js +74 -0
  269. package/dist-es/sidenav-bar.js +429 -0
  270. package/dist-es/skeletons.css-mistica.js +7 -7
  271. package/dist-es/skins/blau.js +12 -8
  272. package/dist-es/skins/esimflag.js +13 -9
  273. package/dist-es/skins/movistar.js +13 -9
  274. package/dist-es/skins/o2.js +13 -9
  275. package/dist-es/skins/skin-contract.css-mistica.js +735 -731
  276. package/dist-es/skins/telefonica.js +13 -9
  277. package/dist-es/skins/vivo-evolution.js +14 -10
  278. package/dist-es/skins/vivo.js +13 -9
  279. package/dist-es/skip-link.css-mistica.js +2 -2
  280. package/dist-es/slider.css-mistica.js +20 -20
  281. package/dist-es/snackbar.css-mistica.js +5 -5
  282. package/dist-es/spinner.css-mistica.js +1 -1
  283. package/dist-es/square.css-mistica.js +1 -1
  284. package/dist-es/stack.css-mistica.js +5 -5
  285. package/dist-es/stacking-group.css-mistica.js +1 -1
  286. package/dist-es/stepper.css-mistica.js +3 -3
  287. package/dist-es/style.css +1 -1
  288. package/dist-es/switch-component.css-mistica.js +37 -37
  289. package/dist-es/switch-component.js +26 -26
  290. package/dist-es/table.css-mistica.js +9 -9
  291. package/dist-es/tabs.css-mistica.js +19 -19
  292. package/dist-es/tag.css-mistica.js +2 -2
  293. package/dist-es/text-field-base.css-mistica.js +17 -17
  294. package/dist-es/text-field-components.css-mistica.js +4 -4
  295. package/dist-es/text-link.css-mistica.js +6 -6
  296. package/dist-es/text-tokens.js +82 -67
  297. package/dist-es/text.css-mistica.js +6 -6
  298. package/dist-es/timeline.css-mistica.js +10 -10
  299. package/dist-es/timer.css-mistica.js +6 -6
  300. package/dist-es/tooltip.css-mistica.js +2 -2
  301. package/dist-es/touchable.css-mistica.js +2 -2
  302. package/dist-es/utils/aspect-ratio-support.css-mistica.js +2 -2
  303. package/dist-es/video.css-mistica.js +1 -1
  304. package/dist-es/vivinho-loading-animation/vivinho-loading-animation.css-mistica.js +1 -1
  305. package/package.json +3 -2
  306. package/src/boxed.css.ts +1 -0
  307. package/src/boxed.tsx +18 -5
  308. package/src/callout.css.ts +4 -2
  309. package/src/community/skins/cyber-skin.tsx +127 -439
  310. package/src/index.tsx +14 -0
  311. package/src/list.css.ts +36 -1
  312. package/src/list.tsx +370 -344
  313. package/src/logo-movistar.tsx +1 -1
  314. package/src/mobile-navigation-menu.tsx +168 -0
  315. package/src/navigation-bar.css.ts +2 -267
  316. package/src/navigation-bar.tsx +77 -370
  317. package/src/navigation-shared.css.ts +289 -0
  318. package/src/navigation-shared.tsx +262 -0
  319. package/src/package-version.tsx +1 -1
  320. package/src/portal.tsx +1 -1
  321. package/src/sidenav-bar-context.tsx +41 -0
  322. package/src/sidenav-bar-data.ts +49 -0
  323. package/src/sidenav-bar-first-level-item.tsx +203 -0
  324. package/src/sidenav-bar-keyboard.tsx +393 -0
  325. package/src/sidenav-bar-layout.css.ts +89 -0
  326. package/src/sidenav-bar-layout.tsx +61 -0
  327. package/src/sidenav-bar-mobile.tsx +302 -0
  328. package/src/sidenav-bar-motion.tsx +70 -0
  329. package/src/sidenav-bar-panel.tsx +269 -0
  330. package/src/sidenav-bar-row.tsx +272 -0
  331. package/src/sidenav-bar-second-level-item.tsx +99 -0
  332. package/src/sidenav-bar-section.tsx +98 -0
  333. package/src/sidenav-bar-types.ts +224 -0
  334. package/src/sidenav-bar.css.ts +1018 -0
  335. package/src/sidenav-bar.tsx +821 -0
  336. package/src/skins/blau.tsx +18 -8
  337. package/src/skins/esimflag.tsx +19 -9
  338. package/src/skins/movistar.tsx +19 -9
  339. package/src/skins/o2.tsx +19 -9
  340. package/src/skins/skin-contract.css.ts +2 -0
  341. package/src/skins/telefonica.tsx +19 -9
  342. package/src/skins/types/colors.tsx +14 -6
  343. package/src/skins/vivo-evolution.tsx +20 -10
  344. package/src/skins/vivo.tsx +19 -9
  345. package/src/switch-component.css.ts +20 -0
  346. package/src/switch-component.tsx +9 -1
  347. package/src/text-tokens.tsx +24 -0
@@ -77,7 +77,7 @@ const MovistarLogoImage = ({
77
77
 
78
78
  return (
79
79
  <g fill={color}>
80
- <path d="M17.2797 17.2124C14.4995 17.2572 9.36782 18.6502 7.02384 28.3781C6.00256 32.6168 5.60793 37.0347 6.4823 42.2938C7.28828 47.1441 8.71635 51.3303 9.67886 53.6376C10.0107 54.4324 10.5244 55.2617 10.9215 55.7719C12.0639 57.239 13.9651 57.1453 14.764 56.7453C15.6348 56.3098 16.6358 55.2581 16.2736 52.8561C16.0983 51.6958 15.5933 49.9981 15.3091 49.0545C14.4367 46.1588 13.2756 42.6649 13.1743 40.176C13.039 36.8468 14.3308 36.4108 15.1885 36.2193C16.6312 35.8965 17.8405 37.5063 18.9894 39.5237C20.3607 41.9314 22.7108 46.1974 24.6277 49.456C26.3582 52.3975 29.5517 55.5469 34.6804 55.3307C39.9089 55.1109 43.763 53.0837 45.7483 46.7014C47.2341 41.9267 48.2468 38.3588 49.8765 34.7048C51.7503 30.5031 54.2498 28.254 56.3547 28.9408C58.3091 29.5781 58.7969 31.5193 58.8202 34.3728C58.841 36.8968 58.5538 39.6792 58.3304 41.7234C58.2493 42.4652 58.1024 43.9576 58.1622 44.7859C58.2802 46.4146 58.9742 48.0414 60.7792 48.3018C62.7017 48.5788 64.2443 47.0174 64.8603 45.1302C65.1034 44.3864 65.3106 43.2482 65.4226 42.4405C65.9874 38.3618 66.1338 35.6206 65.8795 31.4473C65.5811 26.5676 64.6414 22.1178 63.0021 18.2667C61.4337 14.5839 58.9145 12.2236 55.6835 12.0151C52.107 11.7845 48.0026 14.1958 45.8496 18.8741C43.8648 23.1865 42.2772 27.6136 41.3141 29.873C40.3374 32.1643 38.9018 33.5764 36.6946 33.8127C33.996 34.101 31.6708 32.1103 29.9676 29.2718C28.4828 26.7977 25.5401 22.0869 23.9656 20.5039C22.4864 19.0167 20.7969 17.1558 17.2797 17.2124Z" />
80
+ <path d="M63.9489 19.7664C62.3545 16.0836 59.7935 13.7229 56.5087 13.5152C52.8722 13.2842 48.7008 15.6958 46.5119 20.3736C44.4945 24.6854 42.8797 29.1134 41.9015 31.3724C40.9088 33.6634 39.4496 35.0755 37.2054 35.3123C34.4613 35.6014 32.098 33.6097 30.367 30.7724C28.8568 28.2984 25.8656 23.5871 24.2654 22.0036C22.7611 20.5175 21.0445 18.655 17.4676 18.7131C14.6407 18.7582 9.42423 20.1514 7.04057 29.879C6.00281 34.1181 5.60166 38.536 6.48971 43.7935C7.30946 48.6442 8.76145 52.8311 9.73962 55.1381C10.0768 55.9327 10.5986 56.7622 11.0027 57.2721C12.164 58.7394 14.0971 58.645 14.9095 58.2455C15.7947 57.8097 16.8121 56.7579 16.4444 54.3565C16.2671 53.1957 15.7525 51.4989 15.4633 50.5546C14.5767 47.6593 13.3965 44.1654 13.2933 41.6768C13.1552 38.3486 14.4691 37.9127 15.3412 37.721C16.8077 37.3985 18.0374 39.0081 19.2059 41.026C20.5998 43.4332 22.9893 47.6999 24.9383 50.9585C26.697 53.9003 29.944 57.0499 35.159 56.8334C40.4742 56.6141 44.3927 54.586 46.4116 48.2041C47.9217 43.4288 48.9522 39.8609 50.6077 36.2072C52.5132 32.0058 55.0538 29.757 57.1933 30.4427C59.1801 31.0804 59.6758 33.0213 59.7005 35.8745C59.7223 38.398 59.4301 41.1814 59.2019 43.2255C59.1191 43.9678 58.9708 45.4598 59.0319 46.2879C59.1525 47.9164 59.8574 49.5435 61.6917 49.8035C63.6466 50.081 65.2148 48.5193 65.8413 46.6322C66.0884 45.8884 66.2991 44.7494 66.4125 43.9417C66.9866 39.8638 67.1363 37.1224 66.8776 32.9487C66.5738 28.0689 65.6189 23.6191 63.9518 19.7678L63.9489 19.7664Z" />
81
81
  </g>
82
82
  );
83
83
  };
@@ -0,0 +1,168 @@
1
+ 'use client';
2
+ import * as React from 'react';
3
+ import {CSSTransition} from 'react-transition-group';
4
+ import FocusTrap from './focus-trap';
5
+ import {Portal} from './portal';
6
+ import {useTheme} from './hooks';
7
+ import {isRunningAcceptanceTest} from './utils/platform';
8
+ import * as tokens from './text-tokens';
9
+ import * as styles from './navigation-shared.css';
10
+
11
+ /**
12
+ * The panel that a burger menu opens on mobile. It holds two panes that slide horizontally: the first
13
+ * level, and the second level of the item the user pressed. `MainNavigationBar` and `SidenavBar` share it,
14
+ * so both keep the same animation, the same focus behavior and the same overlay.
15
+ *
16
+ * The panel is a shell: each component passes the content of the two panes, because their data models
17
+ * differ.
18
+ */
19
+
20
+ type MobileNavigationMenuStatus = 'opening' | 'opened' | 'closing' | 'closed';
21
+ type MobileNavigationMenuAction = 'open' | 'finishOpen' | 'close' | 'finishClose';
22
+
23
+ const mobileNavigationMenuTransitions: Record<
24
+ MobileNavigationMenuStatus,
25
+ Partial<Record<MobileNavigationMenuAction, MobileNavigationMenuStatus>>
26
+ > = {
27
+ opening: {
28
+ close: 'closing',
29
+ finishOpen: 'opened',
30
+ },
31
+ opened: {
32
+ close: 'closing',
33
+ },
34
+ closing: {
35
+ open: 'opening',
36
+ finishClose: 'closed',
37
+ },
38
+ closed: {
39
+ open: 'opening',
40
+ },
41
+ };
42
+
43
+ const secondLevelReducer = (state: MobileNavigationMenuStatus, action: MobileNavigationMenuAction) => {
44
+ return mobileNavigationMenuTransitions[state][action] || state;
45
+ };
46
+
47
+ type MobileNavigationMenuProps = {
48
+ /** True while the menu shows. The panel animates on every change of this prop. */
49
+ open: boolean;
50
+ /** Id of the panel, which the burger button points to with `aria-controls`. */
51
+ id: string;
52
+ /** Distance from the top of the viewport, which leaves the top bar visible. */
53
+ topOffset: number;
54
+ /** Content of the first pane. */
55
+ firstLevel: React.ReactNode;
56
+ /** Content of the second pane. */
57
+ secondLevel?: React.ReactNode;
58
+ /** True if the second pane must show. The panel slides both panes on every change of this prop. */
59
+ showSecondLevel?: boolean;
60
+ /** Called once the panel finished its exit, so the consumer resets its own state. */
61
+ onExited?: () => void;
62
+ /** Accessible name of the navigation landmark. */
63
+ 'aria-label'?: string;
64
+ /** Group of the focus trap, which the consumer shares with its own top bar. */
65
+ focusTrapGroup: string;
66
+ disableFocusTrap: boolean;
67
+ setDisableFocusTrap: (value: boolean) => void;
68
+ };
69
+
70
+ const MobileNavigationMenu = ({
71
+ open,
72
+ id,
73
+ topOffset,
74
+ firstLevel,
75
+ secondLevel,
76
+ showSecondLevel = false,
77
+ onExited,
78
+ 'aria-label': ariaLabel,
79
+ focusTrapGroup,
80
+ disableFocusTrap,
81
+ setDisableFocusTrap,
82
+ }: MobileNavigationMenuProps): JSX.Element => {
83
+ const {isDarkMode, texts, t} = useTheme();
84
+ const [secondLevelStatus, dispatch] = React.useReducer(secondLevelReducer, 'closed');
85
+ const menuRef = React.useRef<HTMLDivElement>(null);
86
+ const secondLevelRef = React.useRef<HTMLDivElement>(null);
87
+
88
+ const shadowAlpha = isDarkMode ? 1 : 0.2;
89
+ const menuAnimationDuration = isRunningAcceptanceTest() ? 0 : styles.BURGER_MENU_ANIMATION_DURATION_MS;
90
+
91
+ React.useEffect(() => {
92
+ let id: NodeJS.Timeout;
93
+
94
+ if (showSecondLevel) {
95
+ dispatch('open');
96
+ id = setTimeout(() => dispatch('finishOpen'), menuAnimationDuration);
97
+ } else {
98
+ dispatch('close');
99
+ id = setTimeout(() => dispatch('finishClose'), menuAnimationDuration);
100
+ }
101
+
102
+ return () => clearTimeout(id);
103
+ }, [showSecondLevel, menuAnimationDuration]);
104
+
105
+ React.useEffect(() => {
106
+ // Make screen reader focus on back button when opening any section's menu
107
+ if (secondLevelStatus === 'opening') {
108
+ const backButtonElement = secondLevelRef.current?.querySelector<HTMLButtonElement>(
109
+ `button[aria-label="${texts.backNavigationBar || t(tokens.backNavigationBar)}"]`
110
+ );
111
+
112
+ backButtonElement?.focus();
113
+ }
114
+ }, [secondLevelStatus, t, texts]);
115
+
116
+ return (
117
+ <Portal>
118
+ <FocusTrap disabled={disableFocusTrap} group={focusTrapGroup}>
119
+ <CSSTransition
120
+ onEntered={() => setDisableFocusTrap(false)}
121
+ onExiting={() => setDisableFocusTrap(true)}
122
+ onExited={onExited}
123
+ classNames={styles.burgerMenuTransition}
124
+ in={open}
125
+ nodeRef={menuRef}
126
+ timeout={menuAnimationDuration}
127
+ mountOnEnter
128
+ unmountOnExit
129
+ >
130
+ <nav
131
+ className={styles.burgerMenu}
132
+ style={{
133
+ boxShadow: `6px 0 4px -4px rgba(0, 0, 0, ${shadowAlpha})`,
134
+ top: topOffset,
135
+ }}
136
+ id={id}
137
+ ref={menuRef}
138
+ aria-label={ariaLabel}
139
+ >
140
+ <div className={styles.burgerMenuContainer}>
141
+ <div
142
+ className={styles.burgerMenuContentContainer}
143
+ style={{
144
+ transform: `translate(${showSecondLevel ? '-100vw' : '0'})`,
145
+ }}
146
+ >
147
+ {secondLevelStatus !== 'opened' && firstLevel}
148
+ </div>
149
+
150
+ <div
151
+ className={styles.burgerMenuContentContainer}
152
+ ref={secondLevelRef}
153
+ style={{
154
+ transform: `translate(${showSecondLevel ? '0' : '100vw'})`,
155
+ }}
156
+ >
157
+ {secondLevelStatus !== 'closed' && secondLevel}
158
+ </div>
159
+ </div>
160
+ </nav>
161
+ </CSSTransition>
162
+ </FocusTrap>
163
+ </Portal>
164
+ );
165
+ };
166
+
167
+ export {MobileNavigationMenu};
168
+ export type {MobileNavigationMenuProps};
@@ -1,121 +1,15 @@
1
1
  import {style, styleVariants} from '@vanilla-extract/css';
2
2
  import {sprinkles} from './sprinkles.css';
3
- import {NAVBAR_HEIGHT_DESKTOP, NAVBAR_HEIGHT_DESKTOP_LARGE, NAVBAR_HEIGHT_MOBILE} from './theme';
3
+ import {NAVBAR_HEIGHT_DESKTOP, NAVBAR_HEIGHT_DESKTOP_LARGE} from './theme';
4
4
  import * as mq from './media-queries.css';
5
5
  import {vars} from './skins/skin-contract.css';
6
-
7
- const NAVBAR_ZINDEX = 25;
6
+ import {NAVBAR_ZINDEX, spacerMobile} from './navigation-shared.css';
8
7
 
9
8
  export const DESKTOP_SMALL_MENU_WIDTH = 184;
10
9
 
11
- export const BURGER_MENU_ANIMATION_DURATION_MS = 300;
12
10
  export const DESKTOP_MENU_ANIMATION_DURATION_MS = 400;
13
11
  const DESKTOP_MENU_CONTENT_ANIMATION_DURATION_MS = 800;
14
12
 
15
- export const burgerIconContainer = style([
16
- sprinkles({
17
- position: 'relative',
18
- width: 24,
19
- height: 24,
20
- }),
21
- {
22
- verticalAlign: 'middle',
23
- borderRadius: 50,
24
- },
25
- ]);
26
-
27
- const iconBase = style([
28
- sprinkles({
29
- position: 'absolute',
30
- }),
31
- {
32
- top: 0,
33
- left: 0,
34
- transition: 'transform 300ms, opacity 100ms',
35
- },
36
- ]);
37
-
38
- export const iconCloseOpen = style([
39
- iconBase,
40
- {
41
- opacity: 1,
42
- transform: 'rotate(0) scale(1)',
43
- },
44
- ]);
45
-
46
- export const iconCloseHidden = style([
47
- iconBase,
48
- {
49
- opacity: 0,
50
- transform: 'rotate(-45deg) scale(0.9)',
51
- },
52
- ]);
53
-
54
- export const iconMenuOpen = style([
55
- iconBase,
56
- {
57
- opacity: 1,
58
- transform: 'scale(1)',
59
- },
60
- ]);
61
-
62
- export const iconMenuHidden = style([
63
- iconBase,
64
- {
65
- opacity: 0,
66
- transform: 'scale(0.7)',
67
- },
68
- ]);
69
-
70
- export const topFixed = style([
71
- sprinkles({
72
- position: 'fixed',
73
- top: 0,
74
- left: 0,
75
- right: 0,
76
- }),
77
- {
78
- zIndex: NAVBAR_ZINDEX,
79
- },
80
- ]);
81
-
82
- const borderWidth = 1;
83
-
84
- const navbarBase = style([
85
- sprinkles({
86
- display: 'flex',
87
- alignItems: 'center',
88
- width: '100%',
89
- }),
90
- {
91
- borderWidth,
92
- borderBottomStyle: 'solid',
93
-
94
- '@media': {
95
- [mq.tabletOrSmaller]: {
96
- transition: 'border-color 300ms',
97
- },
98
- },
99
- },
100
- ]);
101
-
102
- export const navbarBorderColorVariants = styleVariants({
103
- default: [navbarBase, {borderColor: vars.colors.divider}],
104
- noBorder: [navbarBase, {borderColor: 'transparent'}],
105
- menuOpen: [
106
- navbarBase,
107
- {
108
- borderColor: vars.colors.divider,
109
-
110
- '@media': {
111
- [mq.tabletOrSmaller]: {
112
- borderColor: 'transparent',
113
- },
114
- },
115
- },
116
- ],
117
- });
118
-
119
13
  export const desktopMenuFirstSection = style({});
120
14
  export const desktopMenuLastSection = style({});
121
15
 
@@ -248,89 +142,12 @@ export const textWrapperVariants = styleVariants({
248
142
  },
249
143
  });
250
144
 
251
- export const navigationBarContent = style([
252
- sprinkles({
253
- alignItems: 'center',
254
- width: '100%',
255
- display: 'flex',
256
- }),
257
- {
258
- height: NAVBAR_HEIGHT_DESKTOP,
259
- '@media': {
260
- [mq.tabletOrSmaller]: {
261
- height: NAVBAR_HEIGHT_MOBILE - borderWidth,
262
- },
263
- [mq.desktopOrBigger]: {
264
- ':last-child': {
265
- height: NAVBAR_HEIGHT_DESKTOP - borderWidth,
266
- },
267
- },
268
- },
269
- },
270
- ]);
271
-
272
145
  export const navigationBarAction = sprinkles({
273
146
  border: 'none',
274
147
  background: 'transparent',
275
148
  padding: 0,
276
149
  });
277
150
 
278
- export const desktopOnly = style({
279
- '@media': {
280
- [mq.tabletOrSmaller]: {
281
- display: 'none',
282
- },
283
- },
284
- });
285
-
286
- export const navigationBarContentRight = style([
287
- sprinkles({
288
- display: 'flex',
289
- alignItems: 'center',
290
- justifyContent: 'flex-end',
291
- }),
292
- {
293
- height: NAVBAR_HEIGHT_DESKTOP,
294
- '@media': {
295
- [mq.tabletOrSmaller]: {
296
- paddingLeft: 24,
297
- flex: 1,
298
- height: NAVBAR_HEIGHT_MOBILE - borderWidth,
299
- },
300
- [mq.desktopOrBigger]: {
301
- ':last-child': {
302
- height: NAVBAR_HEIGHT_DESKTOP - borderWidth,
303
- },
304
- },
305
- },
306
- },
307
- ]);
308
-
309
- export const navigationBarContentRightExpanded = style([
310
- navigationBarContentRight,
311
- sprinkles({
312
- flex: 1,
313
- }),
314
- {
315
- paddingLeft: 56,
316
- },
317
- ]);
318
-
319
- const spacerMobile = style({
320
- '@media': {
321
- [mq.tabletOrSmaller]: {
322
- height: NAVBAR_HEIGHT_MOBILE,
323
- },
324
- },
325
- });
326
-
327
- export const spacer = style([
328
- sprinkles({
329
- height: NAVBAR_HEIGHT_DESKTOP,
330
- }),
331
- spacerMobile,
332
- ]);
333
-
334
151
  export const spacerLarge = style([
335
152
  {
336
153
  height: NAVBAR_HEIGHT_DESKTOP_LARGE,
@@ -338,33 +155,6 @@ export const spacerLarge = style([
338
155
  spacerMobile,
339
156
  ]);
340
157
 
341
- export const burgerMenuTransition = {
342
- enter: style({
343
- transform: 'translate(-100vw)',
344
- }),
345
- enterActive: style({
346
- transform: 'translate(0)',
347
- transition: `transform ${BURGER_MENU_ANIMATION_DURATION_MS}ms ease-out`,
348
- '@media': {
349
- ['(prefers-reduced-motion)']: {
350
- transition: 'none',
351
- },
352
- },
353
- }),
354
- exit: style({
355
- transform: 'translate(0)',
356
- }),
357
- exitActive: style({
358
- transform: 'translate(-100vw)',
359
- transition: `transform ${BURGER_MENU_ANIMATION_DURATION_MS}ms ease-out`,
360
- '@media': {
361
- ['(prefers-reduced-motion)']: {
362
- transition: 'none',
363
- },
364
- },
365
- }),
366
- };
367
-
368
158
  export const mainNavbarContent = sprinkles({
369
159
  display: 'flex',
370
160
  alignItems: 'center',
@@ -375,61 +165,6 @@ export const mainNavBarSectionsContainer = style([
375
165
  {minWidth: 'fit-content'},
376
166
  ]);
377
167
 
378
- export const logoContainer = style([
379
- sprinkles({
380
- display: 'flex',
381
- justifyContent: 'center',
382
- }),
383
- {
384
- '@media': {
385
- [mq.tabletOrSmaller]: {
386
- marginRight: 0,
387
- },
388
- },
389
- },
390
- ]);
391
-
392
- export const burgerMenuButton = style({
393
- marginRight: 24,
394
- width: 'fit-content',
395
- '@media': {
396
- [mq.desktopOrBigger]: {
397
- display: 'none',
398
- },
399
- },
400
- });
401
-
402
- export const burgerMenu = sprinkles({
403
- position: 'fixed',
404
- left: 0,
405
- right: 0,
406
- bottom: 0,
407
- background: vars.colors.background,
408
- });
409
-
410
- export const burgerMenuContainer = sprinkles({
411
- height: '100%',
412
- position: 'relative',
413
- });
414
-
415
- export const burgerMenuContentContainer = style([
416
- sprinkles({
417
- overflowY: 'auto',
418
- width: '100%',
419
- height: '100%',
420
- position: 'absolute',
421
- top: 0,
422
- }),
423
- {
424
- transition: `transform ${BURGER_MENU_ANIMATION_DURATION_MS}ms ease-out`,
425
- '@media': {
426
- ['(prefers-reduced-motion)']: {
427
- transition: 'none',
428
- },
429
- },
430
- },
431
- ]);
432
-
433
168
  export const iconButtonVariants = styleVariants({
434
169
  default: [
435
170
  sprinkles({color: vars.colors.neutralHigh}),