@telefonica/mistica 17.3.0 → 17.5.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 (609) hide show
  1. package/css/blau.css +29 -16
  2. package/css/esimflag.css +40 -18
  3. package/css/mistica-common.css +5 -0
  4. package/css/mistica.css +1 -1
  5. package/css/movistar.css +34 -18
  6. package/css/o2.css +31 -18
  7. package/css/telefonica.css +43 -18
  8. package/css/vivo-evolution.css +71 -20
  9. package/css/vivo.css +31 -18
  10. package/dist/accordion.css-mistica.js +10 -10
  11. package/dist/align.css-mistica.js +1 -1
  12. package/dist/autocomplete.css-mistica.js +4 -4
  13. package/dist/avatar.css-mistica.js +1 -1
  14. package/dist/badge.css-mistica.js +1 -1
  15. package/dist/box.css-mistica.js +13 -13
  16. package/dist/boxed.css-mistica.js +24 -24
  17. package/dist/boxed.d.ts +9 -0
  18. package/dist/boxed.js +18 -15
  19. package/dist/button-group.css-mistica.js +1 -1
  20. package/dist/button-layout.css-mistica.js +19 -19
  21. package/dist/button.css-mistica.js +51 -51
  22. package/dist/callout.css-mistica.js +13 -13
  23. package/dist/card-internal.css-mistica.js +22 -22
  24. package/dist/carousel.css-mistica.js +30 -30
  25. package/dist/checkbox.css-mistica.js +15 -15
  26. package/dist/chip.css-mistica.js +18 -18
  27. package/dist/circle.css-mistica.js +2 -2
  28. package/dist/community/advanced-data-card.css-mistica.js +19 -19
  29. package/dist/community/ai-card.css-mistica.js +11 -11
  30. package/dist/community/blocks.css-mistica.js +1 -1
  31. package/dist/community/cyber/example-component.css-mistica.js +1 -1
  32. package/dist/community/example-component.css-mistica.js +1 -1
  33. package/dist/community/skins/cyber-skin.js +19 -17
  34. package/dist/counter.css-mistica.js +6 -6
  35. package/dist/cover-hero.css-mistica.js +7 -7
  36. package/dist/credit-card-number-field.css-mistica.js +3 -3
  37. package/dist/date-field.css-mistica.js +1 -1
  38. package/dist/date-time-picker.css-mistica.js +1 -1
  39. package/dist/dialog.css-mistica.js +10 -10
  40. package/dist/divider.css-mistica.js +5 -5
  41. package/dist/double-field.css-mistica.js +2 -2
  42. package/dist/drawer.css-mistica.js +4 -4
  43. package/dist/empty-state-card.css-mistica.js +1 -1
  44. package/dist/empty-state.css-mistica.js +8 -8
  45. package/dist/fade-in.css-mistica.js +1 -1
  46. package/dist/fade-out.css-mistica.js +11 -0
  47. package/dist/fade-out.css.d.ts +1 -0
  48. package/dist/fade-out.d.ts +11 -0
  49. package/dist/fade-out.js +88 -0
  50. package/dist/feedback.css-mistica.js +5 -5
  51. package/dist/file-upload.css-mistica.js +10 -10
  52. package/dist/fixed-footer-layout.css-mistica.js +6 -6
  53. package/dist/form.css-mistica.js +1 -1
  54. package/dist/generated/mistica-icons/icon-antenna-filled.js +40 -12
  55. package/dist/generated/mistica-icons/icon-antenna-light.js +37 -17
  56. package/dist/generated/mistica-icons/icon-antenna-regular.js +42 -14
  57. package/dist/generated/mistica-icons/icon-arrow-up-down-filled.js +26 -16
  58. package/dist/generated/mistica-icons/icon-arrow-up-down-light.js +22 -12
  59. package/dist/generated/mistica-icons/icon-arrow-up-down-regular.js +30 -20
  60. package/dist/generated/mistica-icons/icon-arrows-left-and-right-filled.js +26 -16
  61. package/dist/generated/mistica-icons/icon-arrows-left-and-right-light.js +24 -14
  62. package/dist/generated/mistica-icons/icon-arrows-left-and-right-regular.js +26 -16
  63. package/dist/generated/mistica-icons/icon-authentication-success-filled.js +31 -11
  64. package/dist/generated/mistica-icons/icon-authentication-success-light.js +33 -17
  65. package/dist/generated/mistica-icons/icon-authentication-success-regular.js +29 -13
  66. package/dist/generated/mistica-icons/icon-blog-filled.js +36 -16
  67. package/dist/generated/mistica-icons/icon-blog-light.js +34 -14
  68. package/dist/generated/mistica-icons/icon-blog-regular.js +32 -16
  69. package/dist/generated/mistica-icons/icon-book-filled.js +19 -9
  70. package/dist/generated/mistica-icons/icon-book-light.js +25 -15
  71. package/dist/generated/mistica-icons/icon-book-regular.js +16 -6
  72. package/dist/generated/mistica-icons/icon-box-filled.js +35 -19
  73. package/dist/generated/mistica-icons/icon-box-light.js +28 -18
  74. package/dist/generated/mistica-icons/icon-box-regular.js +26 -16
  75. package/dist/generated/mistica-icons/icon-box-star-filled.js +37 -17
  76. package/dist/generated/mistica-icons/icon-box-star-light.js +22 -6
  77. package/dist/generated/mistica-icons/icon-box-star-regular.js +30 -14
  78. package/dist/generated/mistica-icons/icon-briefcase-filled.js +28 -12
  79. package/dist/generated/mistica-icons/icon-briefcase-light.js +21 -11
  80. package/dist/generated/mistica-icons/icon-briefcase-regular.js +29 -19
  81. package/dist/generated/mistica-icons/icon-calendar-event-filled.js +23 -12
  82. package/dist/generated/mistica-icons/icon-calendar-event-light.js +28 -11
  83. package/dist/generated/mistica-icons/icon-calendar-event-regular.js +30 -13
  84. package/dist/generated/mistica-icons/icon-calendar-filled.js +32 -22
  85. package/dist/generated/mistica-icons/icon-calendar-light.js +39 -23
  86. package/dist/generated/mistica-icons/icon-calendar-month-filled.js +23 -12
  87. package/dist/generated/mistica-icons/icon-calendar-month-light.js +30 -13
  88. package/dist/generated/mistica-icons/icon-calendar-month-regular.js +30 -13
  89. package/dist/generated/mistica-icons/icon-calendar-regular.js +33 -17
  90. package/dist/generated/mistica-icons/icon-car-filled.js +25 -9
  91. package/dist/generated/mistica-icons/icon-car-light.js +24 -14
  92. package/dist/generated/mistica-icons/icon-car-regular.js +24 -14
  93. package/dist/generated/mistica-icons/icon-care-briefcase-filled.js +23 -12
  94. package/dist/generated/mistica-icons/icon-care-briefcase-light.js +25 -14
  95. package/dist/generated/mistica-icons/icon-care-briefcase-regular.js +18 -8
  96. package/dist/generated/mistica-icons/icon-care-filled.js +25 -15
  97. package/dist/generated/mistica-icons/icon-care-home-filled.js +24 -13
  98. package/dist/generated/mistica-icons/icon-care-home-light.js +24 -13
  99. package/dist/generated/mistica-icons/icon-care-home-regular.js +26 -16
  100. package/dist/generated/mistica-icons/icon-care-laptop-filled.js +22 -11
  101. package/dist/generated/mistica-icons/icon-care-laptop-light.js +24 -13
  102. package/dist/generated/mistica-icons/icon-care-laptop-regular.js +28 -18
  103. package/dist/generated/mistica-icons/icon-care-light.js +22 -12
  104. package/dist/generated/mistica-icons/icon-care-mobile-filled.js +22 -11
  105. package/dist/generated/mistica-icons/icon-care-mobile-light.js +29 -12
  106. package/dist/generated/mistica-icons/icon-care-mobile-regular.js +33 -17
  107. package/dist/generated/mistica-icons/icon-care-regular.js +23 -13
  108. package/dist/generated/mistica-icons/icon-care-shield-filled.js +24 -14
  109. package/dist/generated/mistica-icons/icon-care-shield-light.js +23 -13
  110. package/dist/generated/mistica-icons/icon-care-shield-regular.js +26 -16
  111. package/dist/generated/mistica-icons/icon-change-plan-filled.js +36 -16
  112. package/dist/generated/mistica-icons/icon-change-plan-light.js +38 -18
  113. package/dist/generated/mistica-icons/icon-change-plan-regular.js +30 -14
  114. package/dist/generated/mistica-icons/icon-chip-device-filled.js +32 -16
  115. package/dist/generated/mistica-icons/icon-chip-device-light.js +33 -17
  116. package/dist/generated/mistica-icons/icon-chip-device-regular.js +36 -20
  117. package/dist/generated/mistica-icons/icon-chip-sim-card-filled.js +25 -15
  118. package/dist/generated/mistica-icons/icon-chip-sim-card-light.js +36 -20
  119. package/dist/generated/mistica-icons/icon-chip-sim-card-regular.js +42 -26
  120. package/dist/generated/mistica-icons/icon-credit-card-filled.js +20 -10
  121. package/dist/generated/mistica-icons/icon-credit-card-light.js +18 -8
  122. package/dist/generated/mistica-icons/icon-credit-card-regular.js +23 -13
  123. package/dist/generated/mistica-icons/icon-document-information-filled.d.ts +3 -0
  124. package/dist/generated/mistica-icons/icon-document-information-light.d.ts +3 -0
  125. package/dist/generated/mistica-icons/icon-document-information-regular.d.ts +3 -0
  126. package/dist/generated/mistica-icons/icon-document-other-filled.js +25 -9
  127. package/dist/generated/mistica-icons/icon-document-other-light.js +33 -17
  128. package/dist/generated/mistica-icons/icon-document-other-regular.js +25 -9
  129. package/dist/generated/mistica-icons/icon-dollar-symbol-circle-filled.js +25 -15
  130. package/dist/generated/mistica-icons/icon-dollar-symbol-circle-light.js +30 -14
  131. package/dist/generated/mistica-icons/icon-dollar-symbol-circle-regular.js +29 -13
  132. package/dist/generated/mistica-icons/icon-error-filled.js +33 -17
  133. package/dist/generated/mistica-icons/icon-error-light.js +29 -13
  134. package/dist/generated/mistica-icons/icon-error-regular.js +32 -16
  135. package/dist/generated/mistica-icons/icon-esim-filled.js +33 -17
  136. package/dist/generated/mistica-icons/icon-esim-light.js +43 -23
  137. package/dist/generated/mistica-icons/icon-esim-regular.js +29 -9
  138. package/dist/generated/mistica-icons/icon-eye-filled.js +18 -8
  139. package/dist/generated/mistica-icons/icon-eye-light.js +31 -15
  140. package/dist/generated/mistica-icons/icon-eye-regular.js +29 -13
  141. package/dist/generated/mistica-icons/icon-file-ok-filled.js +30 -14
  142. package/dist/generated/mistica-icons/icon-file-ok-light.js +29 -13
  143. package/dist/generated/mistica-icons/icon-file-ok-regular.js +31 -15
  144. package/dist/generated/mistica-icons/icon-fingerprint-filled.js +36 -15
  145. package/dist/generated/mistica-icons/icon-fingerprint-light.js +35 -14
  146. package/dist/generated/mistica-icons/icon-fingerprint-regular.js +29 -9
  147. package/dist/generated/mistica-icons/icon-home-filled.js +17 -7
  148. package/dist/generated/mistica-icons/icon-home-light.js +21 -11
  149. package/dist/generated/mistica-icons/icon-home-regular.js +29 -19
  150. package/dist/generated/mistica-icons/icon-home-wifi-filled.js +39 -19
  151. package/dist/generated/mistica-icons/icon-home-wifi-light.js +30 -14
  152. package/dist/generated/mistica-icons/icon-home-wifi-regular.js +37 -17
  153. package/dist/generated/mistica-icons/icon-id-card-filled.js +32 -16
  154. package/dist/generated/mistica-icons/icon-id-card-light.js +27 -11
  155. package/dist/generated/mistica-icons/icon-id-card-regular.js +31 -15
  156. package/dist/generated/mistica-icons/icon-information-user-filled.js +32 -12
  157. package/dist/generated/mistica-icons/icon-information-user-light.js +37 -21
  158. package/dist/generated/mistica-icons/icon-information-user-regular.js +44 -28
  159. package/dist/generated/mistica-icons/icon-internet-filled.js +18 -8
  160. package/dist/generated/mistica-icons/icon-internet-light.js +21 -11
  161. package/dist/generated/mistica-icons/icon-internet-regular.js +19 -9
  162. package/dist/generated/mistica-icons/icon-internet-roaming-filled.d.ts +3 -0
  163. package/dist/generated/mistica-icons/icon-internet-roaming-light.d.ts +3 -0
  164. package/dist/generated/mistica-icons/icon-internet-roaming-regular.d.ts +3 -0
  165. package/dist/generated/mistica-icons/icon-key-filled.js +21 -11
  166. package/dist/generated/mistica-icons/icon-key-light.js +31 -15
  167. package/dist/generated/mistica-icons/icon-key-regular.js +32 -16
  168. package/dist/generated/mistica-icons/icon-list-filled.js +23 -12
  169. package/dist/generated/mistica-icons/icon-list-light.js +31 -15
  170. package/dist/generated/mistica-icons/icon-list-regular.js +34 -18
  171. package/dist/generated/mistica-icons/icon-location-filled.js +25 -15
  172. package/dist/generated/mistica-icons/icon-location-light.js +30 -14
  173. package/dist/generated/mistica-icons/icon-location-regular.js +30 -14
  174. package/dist/generated/mistica-icons/icon-lock-closed-filled.js +25 -15
  175. package/dist/generated/mistica-icons/icon-lock-closed-light.js +31 -15
  176. package/dist/generated/mistica-icons/icon-lock-closed-regular.js +35 -19
  177. package/dist/generated/mistica-icons/icon-message-filled.js +23 -12
  178. package/dist/generated/mistica-icons/icon-message-light.js +28 -11
  179. package/dist/generated/mistica-icons/icon-message-regular.js +27 -10
  180. package/dist/generated/mistica-icons/icon-mobile-device-filled.js +25 -15
  181. package/dist/generated/mistica-icons/icon-mobile-device-light.js +26 -10
  182. package/dist/generated/mistica-icons/icon-mobile-device-regular.js +32 -16
  183. package/dist/generated/mistica-icons/icon-mobile-information-filled.d.ts +3 -0
  184. package/dist/generated/mistica-icons/icon-mobile-information-light.d.ts +3 -0
  185. package/dist/generated/mistica-icons/icon-mobile-information-regular.d.ts +3 -0
  186. package/dist/generated/mistica-icons/icon-panel-collapse-regular.js +165 -0
  187. package/dist/generated/mistica-icons/icon-panel-expand-regular.js +159 -0
  188. package/dist/generated/mistica-icons/icons-keywords.js +57 -0
  189. package/dist/grid-layout.css-mistica.js +3 -3
  190. package/dist/grid.css-mistica.js +120 -120
  191. package/dist/header.css-mistica.js +1 -1
  192. package/dist/header.d.ts +3 -1
  193. package/dist/header.js +81 -73
  194. package/dist/hero.css-mistica.js +4 -4
  195. package/dist/horizontal-scroll.css-mistica.js +1 -1
  196. package/dist/icon-button.css-mistica.js +53 -53
  197. package/dist/icons/icon-chevron.css-mistica.js +2 -2
  198. package/dist/icons/icon-error.css-mistica.js +1 -1
  199. package/dist/image.css-mistica.js +6 -6
  200. package/dist/index.d.ts +6 -0
  201. package/dist/index.js +14 -1
  202. package/dist/inline.css-mistica.js +11 -11
  203. package/dist/list.css-mistica.js +40 -28
  204. package/dist/list.css.d.ts +2 -0
  205. package/dist/list.d.ts +3 -1
  206. package/dist/list.js +176 -165
  207. package/dist/loading-bar.css-mistica.js +1 -1
  208. package/dist/loading-screen.css-mistica.js +12 -12
  209. package/dist/logo.css-mistica.js +5 -5
  210. package/dist/menu.css-mistica.js +13 -13
  211. package/dist/mobile-navigation-menu.d.ts +26 -0
  212. package/dist/mobile-navigation-menu.js +145 -0
  213. package/dist/mosaic.css-mistica.js +1 -1
  214. package/dist/navigation-bar.css-mistica.js +31 -97
  215. package/dist/navigation-bar.css.d.ts +0 -24
  216. package/dist/navigation-bar.d.ts +3 -38
  217. package/dist/navigation-bar.js +399 -586
  218. package/dist/navigation-breadcrumbs.css-mistica.js +1 -1
  219. package/dist/navigation-shared.css-mistica.js +79 -0
  220. package/dist/navigation-shared.css.d.ts +26 -0
  221. package/dist/navigation-shared.d.ts +66 -0
  222. package/dist/navigation-shared.js +264 -0
  223. package/dist/package-version.js +1 -1
  224. package/dist/pagination.css-mistica.js +22 -22
  225. package/dist/pin-field.css-mistica.js +4 -4
  226. package/dist/popover.css-mistica.js +1 -1
  227. package/dist/portal.d.ts +1 -1
  228. package/dist/progress-bar.css-mistica.js +7 -7
  229. package/dist/radio-button.css-mistica.js +27 -27
  230. package/dist/rating.css-mistica.js +4 -4
  231. package/dist/responsive-layout.css-mistica.js +6 -6
  232. package/dist/screen-reader-only.css-mistica.js +1 -1
  233. package/dist/select.css-mistica.js +21 -21
  234. package/dist/sheet-action-row.css-mistica.js +1 -1
  235. package/dist/sheet-common.css-mistica.js +7 -7
  236. package/dist/sheet-info.css-mistica.js +1 -1
  237. package/dist/sidenav-bar-context.d.ts +25 -0
  238. package/dist/sidenav-bar-context.js +72 -0
  239. package/dist/sidenav-bar-data.d.ts +15 -0
  240. package/dist/sidenav-bar-data.js +38 -0
  241. package/dist/sidenav-bar-first-level-item.d.ts +42 -0
  242. package/dist/sidenav-bar-first-level-item.js +174 -0
  243. package/dist/sidenav-bar-keyboard.d.ts +13 -0
  244. package/dist/sidenav-bar-keyboard.js +314 -0
  245. package/dist/sidenav-bar-layout.css-mistica.js +28 -0
  246. package/dist/sidenav-bar-layout.css.d.ts +5 -0
  247. package/dist/sidenav-bar-layout.d.ts +22 -0
  248. package/dist/sidenav-bar-layout.js +103 -0
  249. package/dist/sidenav-bar-mobile.d.ts +24 -0
  250. package/dist/sidenav-bar-mobile.js +332 -0
  251. package/dist/sidenav-bar-motion.d.ts +32 -0
  252. package/dist/sidenav-bar-motion.js +84 -0
  253. package/dist/sidenav-bar-panel.d.ts +31 -0
  254. package/dist/sidenav-bar-panel.js +208 -0
  255. package/dist/sidenav-bar-row.d.ts +82 -0
  256. package/dist/sidenav-bar-row.js +230 -0
  257. package/dist/sidenav-bar-second-level-item.d.ts +43 -0
  258. package/dist/sidenav-bar-second-level-item.js +89 -0
  259. package/dist/sidenav-bar-section.d.ts +23 -0
  260. package/dist/sidenav-bar-section.js +167 -0
  261. package/dist/sidenav-bar-types.d.ts +192 -0
  262. package/dist/sidenav-bar-types.js +11 -0
  263. package/dist/sidenav-bar.css-mistica.js +325 -0
  264. package/dist/sidenav-bar.css.d.ts +93 -0
  265. package/dist/sidenav-bar.d.ts +102 -0
  266. package/dist/sidenav-bar.js +492 -0
  267. package/dist/skeletons.css-mistica.js +8 -8
  268. package/dist/skins/blau.js +23 -8
  269. package/dist/skins/defaults.js +11 -0
  270. package/dist/skins/esimflag.js +24 -9
  271. package/dist/skins/movistar.js +24 -9
  272. package/dist/skins/o2.js +24 -9
  273. package/dist/skins/skin-contract.css-mistica.js +740 -731
  274. package/dist/skins/skin-contract.css.d.ts +9 -0
  275. package/dist/skins/telefonica.js +24 -9
  276. package/dist/skins/types/colors.d.ts +2 -0
  277. package/dist/skins/types/index.d.ts +1 -0
  278. package/dist/skins/vivo-evolution.js +25 -10
  279. package/dist/skins/vivo.js +24 -9
  280. package/dist/skip-link.css-mistica.js +2 -2
  281. package/dist/slider.css-mistica.js +24 -24
  282. package/dist/snackbar.css-mistica.js +14 -14
  283. package/dist/spinner.css-mistica.js +1 -1
  284. package/dist/square.css-mistica.js +1 -1
  285. package/dist/stack.css-mistica.js +5 -5
  286. package/dist/stacking-group.css-mistica.js +1 -1
  287. package/dist/stepper.css-mistica.js +9 -9
  288. package/dist/switch-component.css-mistica.js +48 -42
  289. package/dist/switch-component.css.d.ts +2 -0
  290. package/dist/switch-component.js +18 -18
  291. package/dist/table.css-mistica.js +9 -9
  292. package/dist/tabs.css-mistica.js +22 -22
  293. package/dist/tag.css-mistica.js +3 -3
  294. package/dist/text-field-base.css-mistica.js +20 -20
  295. package/dist/text-field-components.css-mistica.js +10 -10
  296. package/dist/text-link.css-mistica.js +6 -6
  297. package/dist/text-tokens.d.ts +6 -0
  298. package/dist/text-tokens.js +157 -133
  299. package/dist/text.css-mistica.js +6 -6
  300. package/dist/timeline.css-mistica.js +11 -11
  301. package/dist/timer.css-mistica.js +6 -6
  302. package/dist/tooltip.css-mistica.js +2 -2
  303. package/dist/touchable.css-mistica.js +4 -4
  304. package/dist/utils/aspect-ratio-support.css-mistica.js +2 -2
  305. package/dist/video.css-mistica.js +1 -1
  306. package/dist/vivinho-loading-animation/vivinho-loading-animation.css-mistica.js +1 -1
  307. package/dist-es/accordion.css-mistica.js +7 -7
  308. package/dist-es/align.css-mistica.js +1 -1
  309. package/dist-es/autocomplete.css-mistica.js +2 -2
  310. package/dist-es/avatar.css-mistica.js +1 -1
  311. package/dist-es/badge.css-mistica.js +1 -1
  312. package/dist-es/box.css-mistica.js +13 -13
  313. package/dist-es/boxed.css-mistica.js +23 -23
  314. package/dist-es/boxed.js +25 -25
  315. package/dist-es/button-group.css-mistica.js +1 -1
  316. package/dist-es/button-layout.css-mistica.js +16 -16
  317. package/dist-es/button.css-mistica.js +38 -38
  318. package/dist-es/callout.css-mistica.js +12 -12
  319. package/dist-es/card-internal.css-mistica.js +17 -17
  320. package/dist-es/carousel.css-mistica.js +10 -10
  321. package/dist-es/checkbox.css-mistica.js +13 -13
  322. package/dist-es/chip.css-mistica.js +17 -17
  323. package/dist-es/circle.css-mistica.js +2 -2
  324. package/dist-es/community/advanced-data-card.css-mistica.js +7 -7
  325. package/dist-es/community/ai-card.css-mistica.js +4 -4
  326. package/dist-es/community/blocks.css-mistica.js +1 -1
  327. package/dist-es/community/cyber/example-component.css-mistica.js +1 -1
  328. package/dist-es/community/example-component.css-mistica.js +1 -1
  329. package/dist-es/community/skins/cyber-skin.js +19 -17
  330. package/dist-es/counter.css-mistica.js +2 -2
  331. package/dist-es/cover-hero.css-mistica.js +4 -4
  332. package/dist-es/credit-card-number-field.css-mistica.js +3 -3
  333. package/dist-es/date-field.css-mistica.js +1 -1
  334. package/dist-es/date-time-picker.css-mistica.js +1 -1
  335. package/dist-es/dialog.css-mistica.js +5 -5
  336. package/dist-es/divider.css-mistica.js +5 -5
  337. package/dist-es/double-field.css-mistica.js +2 -2
  338. package/dist-es/drawer.css-mistica.js +2 -2
  339. package/dist-es/empty-state-card.css-mistica.js +1 -1
  340. package/dist-es/empty-state.css-mistica.js +7 -7
  341. package/dist-es/fade-in.css-mistica.js +1 -1
  342. package/dist-es/fade-out.css-mistica.js +2 -0
  343. package/dist-es/fade-out.js +79 -0
  344. package/dist-es/feedback.css-mistica.js +2 -2
  345. package/dist-es/file-upload.css-mistica.js +8 -8
  346. package/dist-es/fixed-footer-layout.css-mistica.js +3 -3
  347. package/dist-es/form.css-mistica.js +1 -1
  348. package/dist-es/generated/mistica-icons/icon-antenna-filled.js +50 -22
  349. package/dist-es/generated/mistica-icons/icon-antenna-light.js +47 -27
  350. package/dist-es/generated/mistica-icons/icon-antenna-regular.js +52 -24
  351. package/dist-es/generated/mistica-icons/icon-arrow-up-down-filled.js +29 -19
  352. package/dist-es/generated/mistica-icons/icon-arrow-up-down-light.js +26 -16
  353. package/dist-es/generated/mistica-icons/icon-arrow-up-down-regular.js +34 -24
  354. package/dist-es/generated/mistica-icons/icon-arrows-left-and-right-filled.js +30 -20
  355. package/dist-es/generated/mistica-icons/icon-arrows-left-and-right-light.js +32 -22
  356. package/dist-es/generated/mistica-icons/icon-arrows-left-and-right-regular.js +34 -24
  357. package/dist-es/generated/mistica-icons/icon-authentication-success-filled.js +42 -22
  358. package/dist-es/generated/mistica-icons/icon-authentication-success-light.js +44 -28
  359. package/dist-es/generated/mistica-icons/icon-authentication-success-regular.js +42 -26
  360. package/dist-es/generated/mistica-icons/icon-blog-filled.js +44 -24
  361. package/dist-es/generated/mistica-icons/icon-blog-light.js +45 -25
  362. package/dist-es/generated/mistica-icons/icon-blog-regular.js +45 -29
  363. package/dist-es/generated/mistica-icons/icon-book-filled.js +23 -13
  364. package/dist-es/generated/mistica-icons/icon-book-light.js +33 -23
  365. package/dist-es/generated/mistica-icons/icon-book-regular.js +22 -12
  366. package/dist-es/generated/mistica-icons/icon-box-filled.js +38 -22
  367. package/dist-es/generated/mistica-icons/icon-box-light.js +38 -28
  368. package/dist-es/generated/mistica-icons/icon-box-regular.js +37 -27
  369. package/dist-es/generated/mistica-icons/icon-box-star-filled.js +49 -29
  370. package/dist-es/generated/mistica-icons/icon-box-star-light.js +29 -13
  371. package/dist-es/generated/mistica-icons/icon-box-star-regular.js +33 -17
  372. package/dist-es/generated/mistica-icons/icon-briefcase-filled.js +32 -16
  373. package/dist-es/generated/mistica-icons/icon-briefcase-light.js +24 -14
  374. package/dist-es/generated/mistica-icons/icon-briefcase-regular.js +32 -22
  375. package/dist-es/generated/mistica-icons/icon-calendar-event-filled.js +28 -17
  376. package/dist-es/generated/mistica-icons/icon-calendar-event-light.js +34 -17
  377. package/dist-es/generated/mistica-icons/icon-calendar-event-regular.js +36 -19
  378. package/dist-es/generated/mistica-icons/icon-calendar-filled.js +42 -32
  379. package/dist-es/generated/mistica-icons/icon-calendar-light.js +45 -29
  380. package/dist-es/generated/mistica-icons/icon-calendar-month-filled.js +31 -20
  381. package/dist-es/generated/mistica-icons/icon-calendar-month-light.js +38 -21
  382. package/dist-es/generated/mistica-icons/icon-calendar-month-regular.js +38 -21
  383. package/dist-es/generated/mistica-icons/icon-calendar-regular.js +45 -29
  384. package/dist-es/generated/mistica-icons/icon-car-filled.js +26 -10
  385. package/dist-es/generated/mistica-icons/icon-car-light.js +33 -23
  386. package/dist-es/generated/mistica-icons/icon-car-regular.js +29 -19
  387. package/dist-es/generated/mistica-icons/icon-care-briefcase-filled.js +30 -19
  388. package/dist-es/generated/mistica-icons/icon-care-briefcase-light.js +28 -17
  389. package/dist-es/generated/mistica-icons/icon-care-briefcase-regular.js +24 -14
  390. package/dist-es/generated/mistica-icons/icon-care-filled.js +29 -19
  391. package/dist-es/generated/mistica-icons/icon-care-home-filled.js +32 -21
  392. package/dist-es/generated/mistica-icons/icon-care-home-light.js +31 -20
  393. package/dist-es/generated/mistica-icons/icon-care-home-regular.js +40 -30
  394. package/dist-es/generated/mistica-icons/icon-care-laptop-filled.js +29 -18
  395. package/dist-es/generated/mistica-icons/icon-care-laptop-light.js +31 -20
  396. package/dist-es/generated/mistica-icons/icon-care-laptop-regular.js +33 -23
  397. package/dist-es/generated/mistica-icons/icon-care-light.js +24 -14
  398. package/dist-es/generated/mistica-icons/icon-care-mobile-filled.js +30 -19
  399. package/dist-es/generated/mistica-icons/icon-care-mobile-light.js +35 -18
  400. package/dist-es/generated/mistica-icons/icon-care-mobile-regular.js +50 -34
  401. package/dist-es/generated/mistica-icons/icon-care-regular.js +38 -28
  402. package/dist-es/generated/mistica-icons/icon-care-shield-filled.js +33 -23
  403. package/dist-es/generated/mistica-icons/icon-care-shield-light.js +27 -17
  404. package/dist-es/generated/mistica-icons/icon-care-shield-regular.js +33 -23
  405. package/dist-es/generated/mistica-icons/icon-change-plan-filled.js +41 -21
  406. package/dist-es/generated/mistica-icons/icon-change-plan-light.js +42 -22
  407. package/dist-es/generated/mistica-icons/icon-change-plan-regular.js +35 -19
  408. package/dist-es/generated/mistica-icons/icon-chip-device-filled.js +37 -21
  409. package/dist-es/generated/mistica-icons/icon-chip-device-light.js +46 -30
  410. package/dist-es/generated/mistica-icons/icon-chip-device-regular.js +48 -32
  411. package/dist-es/generated/mistica-icons/icon-chip-sim-card-filled.js +26 -16
  412. package/dist-es/generated/mistica-icons/icon-chip-sim-card-light.js +43 -27
  413. package/dist-es/generated/mistica-icons/icon-chip-sim-card-regular.js +59 -43
  414. package/dist-es/generated/mistica-icons/icon-credit-card-filled.js +24 -14
  415. package/dist-es/generated/mistica-icons/icon-credit-card-light.js +19 -9
  416. package/dist-es/generated/mistica-icons/icon-credit-card-regular.js +26 -16
  417. package/dist-es/generated/mistica-icons/icon-document-other-filled.js +31 -15
  418. package/dist-es/generated/mistica-icons/icon-document-other-light.js +42 -26
  419. package/dist-es/generated/mistica-icons/icon-document-other-regular.js +32 -16
  420. package/dist-es/generated/mistica-icons/icon-dollar-symbol-circle-filled.js +28 -18
  421. package/dist-es/generated/mistica-icons/icon-dollar-symbol-circle-light.js +41 -25
  422. package/dist-es/generated/mistica-icons/icon-dollar-symbol-circle-regular.js +42 -26
  423. package/dist-es/generated/mistica-icons/icon-error-filled.js +44 -28
  424. package/dist-es/generated/mistica-icons/icon-error-light.js +37 -21
  425. package/dist-es/generated/mistica-icons/icon-error-regular.js +40 -24
  426. package/dist-es/generated/mistica-icons/icon-esim-filled.js +48 -32
  427. package/dist-es/generated/mistica-icons/icon-esim-light.js +58 -38
  428. package/dist-es/generated/mistica-icons/icon-esim-regular.js +35 -15
  429. package/dist-es/generated/mistica-icons/icon-eye-filled.js +24 -14
  430. package/dist-es/generated/mistica-icons/icon-eye-light.js +43 -27
  431. package/dist-es/generated/mistica-icons/icon-eye-regular.js +33 -17
  432. package/dist-es/generated/mistica-icons/icon-file-ok-filled.js +41 -25
  433. package/dist-es/generated/mistica-icons/icon-file-ok-light.js +37 -21
  434. package/dist-es/generated/mistica-icons/icon-file-ok-regular.js +41 -25
  435. package/dist-es/generated/mistica-icons/icon-fingerprint-filled.js +45 -24
  436. package/dist-es/generated/mistica-icons/icon-fingerprint-light.js +39 -18
  437. package/dist-es/generated/mistica-icons/icon-fingerprint-regular.js +32 -12
  438. package/dist-es/generated/mistica-icons/icon-home-filled.js +19 -9
  439. package/dist-es/generated/mistica-icons/icon-home-light.js +24 -14
  440. package/dist-es/generated/mistica-icons/icon-home-regular.js +30 -20
  441. package/dist-es/generated/mistica-icons/icon-home-wifi-filled.js +51 -31
  442. package/dist-es/generated/mistica-icons/icon-home-wifi-light.js +36 -20
  443. package/dist-es/generated/mistica-icons/icon-home-wifi-regular.js +51 -31
  444. package/dist-es/generated/mistica-icons/icon-id-card-filled.js +40 -24
  445. package/dist-es/generated/mistica-icons/icon-id-card-light.js +38 -22
  446. package/dist-es/generated/mistica-icons/icon-id-card-regular.js +42 -26
  447. package/dist-es/generated/mistica-icons/icon-information-user-filled.js +36 -16
  448. package/dist-es/generated/mistica-icons/icon-information-user-light.js +51 -35
  449. package/dist-es/generated/mistica-icons/icon-information-user-regular.js +58 -42
  450. package/dist-es/generated/mistica-icons/icon-internet-filled.js +22 -12
  451. package/dist-es/generated/mistica-icons/icon-internet-light.js +25 -15
  452. package/dist-es/generated/mistica-icons/icon-internet-regular.js +22 -12
  453. package/dist-es/generated/mistica-icons/icon-key-filled.js +23 -13
  454. package/dist-es/generated/mistica-icons/icon-key-light.js +40 -24
  455. package/dist-es/generated/mistica-icons/icon-key-regular.js +40 -24
  456. package/dist-es/generated/mistica-icons/icon-list-filled.js +29 -18
  457. package/dist-es/generated/mistica-icons/icon-list-light.js +38 -22
  458. package/dist-es/generated/mistica-icons/icon-list-regular.js +42 -26
  459. package/dist-es/generated/mistica-icons/icon-location-filled.js +29 -19
  460. package/dist-es/generated/mistica-icons/icon-location-light.js +37 -21
  461. package/dist-es/generated/mistica-icons/icon-location-regular.js +37 -21
  462. package/dist-es/generated/mistica-icons/icon-lock-closed-filled.js +28 -18
  463. package/dist-es/generated/mistica-icons/icon-lock-closed-light.js +35 -19
  464. package/dist-es/generated/mistica-icons/icon-lock-closed-regular.js +40 -24
  465. package/dist-es/generated/mistica-icons/icon-message-filled.js +29 -18
  466. package/dist-es/generated/mistica-icons/icon-message-light.js +36 -19
  467. package/dist-es/generated/mistica-icons/icon-message-regular.js +35 -18
  468. package/dist-es/generated/mistica-icons/icon-mobile-device-filled.js +30 -20
  469. package/dist-es/generated/mistica-icons/icon-mobile-device-light.js +34 -18
  470. package/dist-es/generated/mistica-icons/icon-mobile-device-regular.js +37 -21
  471. package/dist-es/generated/mistica-icons/icon-panel-collapse-regular.js +115 -0
  472. package/dist-es/generated/mistica-icons/icon-panel-expand-regular.js +109 -0
  473. package/dist-es/generated/mistica-icons/icons-keywords.js +57 -0
  474. package/dist-es/grid-layout.css-mistica.js +3 -3
  475. package/dist-es/grid.css-mistica.js +120 -120
  476. package/dist-es/header.css-mistica.js +1 -1
  477. package/dist-es/header.js +113 -105
  478. package/dist-es/hero.css-mistica.js +3 -3
  479. package/dist-es/horizontal-scroll.css-mistica.js +1 -1
  480. package/dist-es/icon-button.css-mistica.js +53 -53
  481. package/dist-es/icons/icon-chevron.css-mistica.js +2 -2
  482. package/dist-es/icons/icon-error.css-mistica.js +1 -1
  483. package/dist-es/image.css-mistica.js +4 -4
  484. package/dist-es/index.js +2349 -2345
  485. package/dist-es/inline.css-mistica.js +11 -11
  486. package/dist-es/list.css-mistica.js +8 -2
  487. package/dist-es/list.js +275 -264
  488. package/dist-es/loading-bar.css-mistica.js +1 -1
  489. package/dist-es/loading-screen.css-mistica.js +5 -5
  490. package/dist-es/logo.css-mistica.js +5 -5
  491. package/dist-es/menu.css-mistica.js +13 -13
  492. package/dist-es/mobile-navigation-menu.js +90 -0
  493. package/dist-es/mosaic.css-mistica.js +1 -1
  494. package/dist-es/navigation-bar.css-mistica.js +11 -20
  495. package/dist-es/navigation-bar.js +469 -656
  496. package/dist-es/navigation-breadcrumbs.css-mistica.js +1 -1
  497. package/dist-es/navigation-shared.css-mistica.js +11 -0
  498. package/dist-es/navigation-shared.js +192 -0
  499. package/dist-es/package-version.js +1 -1
  500. package/dist-es/pagination.css-mistica.js +19 -19
  501. package/dist-es/pin-field.css-mistica.js +2 -2
  502. package/dist-es/popover.css-mistica.js +1 -1
  503. package/dist-es/progress-bar.css-mistica.js +7 -7
  504. package/dist-es/radio-button.css-mistica.js +22 -22
  505. package/dist-es/rating.css-mistica.js +3 -3
  506. package/dist-es/responsive-layout.css-mistica.js +6 -6
  507. package/dist-es/screen-reader-only.css-mistica.js +1 -1
  508. package/dist-es/select.css-mistica.js +18 -18
  509. package/dist-es/sheet-action-row.css-mistica.js +1 -1
  510. package/dist-es/sheet-common.css-mistica.js +2 -2
  511. package/dist-es/sheet-info.css-mistica.js +1 -1
  512. package/dist-es/sidenav-bar-context.js +14 -0
  513. package/dist-es/sidenav-bar-data.js +12 -0
  514. package/dist-es/sidenav-bar-first-level-item.js +124 -0
  515. package/dist-es/sidenav-bar-keyboard.js +253 -0
  516. package/dist-es/sidenav-bar-layout.css-mistica.js +2 -0
  517. package/dist-es/sidenav-bar-layout.js +86 -0
  518. package/dist-es/sidenav-bar-mobile.js +277 -0
  519. package/dist-es/sidenav-bar-motion.js +26 -0
  520. package/dist-es/sidenav-bar-panel.js +146 -0
  521. package/dist-es/sidenav-bar-row.js +208 -0
  522. package/dist-es/sidenav-bar-second-level-item.js +72 -0
  523. package/dist-es/sidenav-bar-section.js +112 -0
  524. package/dist-es/sidenav-bar-types.js +2 -0
  525. package/dist-es/sidenav-bar.css-mistica.js +74 -0
  526. package/dist-es/sidenav-bar.js +429 -0
  527. package/dist-es/skeletons.css-mistica.js +7 -7
  528. package/dist-es/skins/blau.js +23 -8
  529. package/dist-es/skins/defaults.js +11 -0
  530. package/dist-es/skins/esimflag.js +24 -9
  531. package/dist-es/skins/movistar.js +24 -9
  532. package/dist-es/skins/o2.js +24 -9
  533. package/dist-es/skins/skin-contract.css-mistica.js +740 -731
  534. package/dist-es/skins/telefonica.js +24 -9
  535. package/dist-es/skins/vivo-evolution.js +25 -10
  536. package/dist-es/skins/vivo.js +24 -9
  537. package/dist-es/skip-link.css-mistica.js +2 -2
  538. package/dist-es/slider.css-mistica.js +20 -20
  539. package/dist-es/snackbar.css-mistica.js +5 -5
  540. package/dist-es/spinner.css-mistica.js +1 -1
  541. package/dist-es/square.css-mistica.js +1 -1
  542. package/dist-es/stack.css-mistica.js +5 -5
  543. package/dist-es/stacking-group.css-mistica.js +1 -1
  544. package/dist-es/stepper.css-mistica.js +3 -3
  545. package/dist-es/style.css +1 -1
  546. package/dist-es/switch-component.css-mistica.js +37 -37
  547. package/dist-es/switch-component.js +26 -26
  548. package/dist-es/table.css-mistica.js +9 -9
  549. package/dist-es/tabs.css-mistica.js +19 -19
  550. package/dist-es/tag.css-mistica.js +2 -2
  551. package/dist-es/text-field-base.css-mistica.js +17 -17
  552. package/dist-es/text-field-components.css-mistica.js +4 -4
  553. package/dist-es/text-link.css-mistica.js +6 -6
  554. package/dist-es/text-tokens.js +82 -67
  555. package/dist-es/text.css-mistica.js +6 -6
  556. package/dist-es/timeline.css-mistica.js +10 -10
  557. package/dist-es/timer.css-mistica.js +6 -6
  558. package/dist-es/tooltip.css-mistica.js +2 -2
  559. package/dist-es/touchable.css-mistica.js +2 -2
  560. package/dist-es/utils/aspect-ratio-support.css-mistica.js +2 -2
  561. package/dist-es/video.css-mistica.js +1 -1
  562. package/dist-es/vivinho-loading-animation/vivinho-loading-animation.css-mistica.js +1 -1
  563. package/package.json +2 -1
  564. package/src/boxed.css.ts +1 -0
  565. package/src/boxed.tsx +18 -5
  566. package/src/callout.css.ts +4 -2
  567. package/src/community/skins/cyber-skin.tsx +19 -16
  568. package/src/fade-out.css.ts +12 -0
  569. package/src/fade-out.tsx +50 -0
  570. package/src/header.tsx +39 -17
  571. package/src/index.tsx +15 -0
  572. package/src/list.css.ts +36 -1
  573. package/src/list.tsx +370 -344
  574. package/src/mobile-navigation-menu.tsx +168 -0
  575. package/src/navigation-bar.css.ts +2 -267
  576. package/src/navigation-bar.tsx +77 -370
  577. package/src/navigation-shared.css.ts +289 -0
  578. package/src/navigation-shared.tsx +262 -0
  579. package/src/package-version.tsx +1 -1
  580. package/src/portal.tsx +1 -1
  581. package/src/sidenav-bar-context.tsx +41 -0
  582. package/src/sidenav-bar-data.ts +49 -0
  583. package/src/sidenav-bar-first-level-item.tsx +203 -0
  584. package/src/sidenav-bar-keyboard.tsx +393 -0
  585. package/src/sidenav-bar-layout.css.ts +89 -0
  586. package/src/sidenav-bar-layout.tsx +61 -0
  587. package/src/sidenav-bar-mobile.tsx +302 -0
  588. package/src/sidenav-bar-motion.tsx +70 -0
  589. package/src/sidenav-bar-panel.tsx +269 -0
  590. package/src/sidenav-bar-row.tsx +272 -0
  591. package/src/sidenav-bar-second-level-item.tsx +99 -0
  592. package/src/sidenav-bar-section.tsx +98 -0
  593. package/src/sidenav-bar-types.ts +224 -0
  594. package/src/sidenav-bar.css.ts +1018 -0
  595. package/src/sidenav-bar.tsx +821 -0
  596. package/src/skins/blau.tsx +17 -8
  597. package/src/skins/defaults.tsx +5 -0
  598. package/src/skins/esimflag.tsx +18 -9
  599. package/src/skins/movistar.tsx +18 -9
  600. package/src/skins/o2.tsx +18 -9
  601. package/src/skins/skin-contract.css.ts +3 -0
  602. package/src/skins/telefonica.tsx +18 -9
  603. package/src/skins/types/colors.tsx +2 -0
  604. package/src/skins/types/index.tsx +1 -0
  605. package/src/skins/vivo-evolution.tsx +19 -10
  606. package/src/skins/vivo.tsx +18 -9
  607. package/src/switch-component.css.ts +20 -0
  608. package/src/switch-component.tsx +9 -1
  609. package/src/text-tokens.tsx +24 -0
@@ -0,0 +1,61 @@
1
+ 'use client';
2
+ import * as React from 'react';
3
+ import * as styles from './sidenav-bar-layout.css';
4
+ import {InternalResponsiveLayout} from './responsive-layout';
5
+ import {getPrefixedDataAttributes} from './utils/dom';
6
+ import {applyCssVars} from './utils/css';
7
+
8
+ import type {DataAttributes} from './utils/types';
9
+
10
+ type SidenavLayoutProps = {
11
+ /** Content of the sidenav column (typically SidenavBar). */
12
+ sidenav: React.ReactNode;
13
+ /** Content of the main area, which sits beside the sidenav. */
14
+ children: React.ReactNode;
15
+ /** Layout mode: 'whole-viewport' spans full width, 'centered' wraps in responsive container. @default 'whole-viewport' */
16
+ mode?: 'whole-viewport' | 'centered';
17
+ /**
18
+ * Height in px of a persistent band above the layout (a fixed or sticky top header). The sidenav
19
+ * sticks below it instead of taking the whole viewport. A header that scrolls away with the page
20
+ * needs no offset. @default 0
21
+ */
22
+ topOffset?: number;
23
+ /** Custom data attributes for testing and tracking. */
24
+ dataAttributes?: DataAttributes;
25
+ };
26
+
27
+ const SidenavLayout = ({
28
+ sidenav,
29
+ children,
30
+ mode = 'whole-viewport',
31
+ topOffset,
32
+ dataAttributes,
33
+ }: SidenavLayoutProps): JSX.Element => {
34
+ const layout = (
35
+ <div
36
+ className={styles.container}
37
+ style={topOffset ? applyCssVars({[styles.topOffsetVar]: `${topOffset}px`}) : undefined}
38
+ {...getPrefixedDataAttributes({testid: 'SidenavLayout', ...dataAttributes})}
39
+ >
40
+ <div className={styles.sidenav}>{sidenav}</div>
41
+ <div className={styles.content}>{children}</div>
42
+ </div>
43
+ );
44
+
45
+ if (mode === 'centered') {
46
+ return (
47
+ <InternalResponsiveLayout
48
+ innerDivClassName={styles.centeredResponsiveLayout}
49
+ shouldExpandWhenNested
50
+ >
51
+ {layout}
52
+ </InternalResponsiveLayout>
53
+ );
54
+ }
55
+
56
+ return layout;
57
+ };
58
+
59
+ export default SidenavLayout;
60
+ export {SidenavLayout};
61
+ export type {SidenavLayoutProps};
@@ -0,0 +1,302 @@
1
+ 'use client';
2
+ import * as React from 'react';
3
+ import {
4
+ BurgerMenuIcon,
5
+ Header,
6
+ NavigationBar,
7
+ NavigationBarContentContainer,
8
+ NavigationBarSideMargins,
9
+ } from './navigation-shared';
10
+ import {MobileNavigationMenu} from './mobile-navigation-menu';
11
+ import * as sharedStyles from './navigation-shared.css';
12
+ import ResponsiveLayout, {ResetResponsiveLayout} from './responsive-layout';
13
+ import {Row, RowList} from './list';
14
+ import {Title1, Title3} from './title';
15
+ import Touchable from './touchable';
16
+ import FocusTrap from './focus-trap';
17
+ import Stack from './stack';
18
+ import Box from './box';
19
+ import {Logo} from './logo';
20
+ import {ThemeVariant} from './theme-variant-context';
21
+ import {useDisableBodyScroll, useTheme} from './hooks';
22
+ import {useSetModalState} from './modal-context-provider';
23
+ import {NAVBAR_HEIGHT_MOBILE} from './theme';
24
+ import * as tokens from './text-tokens';
25
+ import {
26
+ isSidenavSection,
27
+ getFirstLevelItems,
28
+ getSidenavSectionTitle,
29
+ renderSidenavSlot,
30
+ renderSidenavLogo,
31
+ } from './sidenav-bar-data';
32
+
33
+ import type {NonDeprecatedVariant} from './theme-variant-context';
34
+ import type {DataAttributes} from './utils/types';
35
+ import type {
36
+ SidenavEntry,
37
+ SidenavFirstLevelItem,
38
+ SidenavSecondLevelItem,
39
+ SidenavLogo,
40
+ SidenavSlot,
41
+ SidenavSlotRenderProps,
42
+ } from './sidenav-bar-types';
43
+
44
+ /*
45
+ * The mobile sidenav follows the mobile Main Navigation Bar as closely as the spec asks:
46
+ * https://github.com/Telefonica/mistica-design/blob/aweell-generate-figma-specs/specs/sidenav.md
47
+ *
48
+ * It shares the panel of that component (see `MobileNavigationMenu`) and the chrome of its top bar, so
49
+ * both keep the same animation, the same margins and the same tokens. The differences that the spec lists:
50
+ *
51
+ * - An item paints its right slot before the chevron.
52
+ * - A section paints its title, and never its dividers.
53
+ * - The second level shows the label of the parent, and no action of its own, because a parent with
54
+ * children does not navigate.
55
+ * - The footer slot flows at the end of the content of the panel.
56
+ */
57
+
58
+ // The top bar matches the mobile main navigation bar: the isotype of the skin at the same size.
59
+ const MOBILE_LOGO_SIZE = 40;
60
+
61
+ const PANEL_TOP_PADDING = 24;
62
+ const FOOTER_SLOT_PADDING = 16;
63
+ const ENTRY_SPACE = 32;
64
+ const SECTION_TITLE_SPACE = 8;
65
+ const BACK_BAR_SPACE = 16;
66
+
67
+ // The top bar and the panel share one focus trap, so the focus moves between the two of them. The group is
68
+ // not the group of the main navigation bar: a page that holds both components traps each one on its own.
69
+ const SIDENAV_FOCUS_TRAP_GROUP = 'sidenav-burger-menu-lock';
70
+
71
+ type SidenavBarMobileProps = {
72
+ /** First-level entries of the panel. */
73
+ entries?: ReadonlyArray<SidenavEntry>;
74
+ /** Accessible name of the navigation landmark. */
75
+ 'aria-label': string;
76
+ /** Variant of the top bar. The panel always renders in the default variant. */
77
+ variant: NonDeprecatedVariant;
78
+ /** Logo of the top bar. */
79
+ logo?: SidenavLogo;
80
+ /** Content of the right side of the top bar. */
81
+ headerSlot?: SidenavSlot;
82
+ /** Content of the end of the panel. */
83
+ footerSlot?: SidenavSlot;
84
+ /** ID of the currently selected item. It marks the item for a screen reader, and paints nothing. */
85
+ selectedItemId: string | null;
86
+ /** Called when the user presses an item that navigates. */
87
+ onSelectedItemIdChange?: (id: string | null) => void;
88
+ dataAttributes?: DataAttributes;
89
+ };
90
+
91
+ const SidenavBarMobile = ({
92
+ entries,
93
+ 'aria-label': ariaLabel,
94
+ variant,
95
+ logo,
96
+ headerSlot,
97
+ footerSlot,
98
+ selectedItemId,
99
+ onSelectedItemIdChange,
100
+ dataAttributes,
101
+ }: SidenavBarMobileProps): JSX.Element => {
102
+ const {texts, t} = useTheme();
103
+ const menuId = React.useId();
104
+ const setModalState = useSetModalState();
105
+ const [isMenuOpen, setIsMenuOpen] = React.useState(false);
106
+ const [disableFocusTrap, setDisableFocusTrap] = React.useState(true);
107
+ const [openedFirstLevelItemId, setOpenedFirstLevelItemId] = React.useState<string | null>(null);
108
+ const [isSecondLevelOpen, setIsSecondLevelOpen] = React.useState(false);
109
+
110
+ useDisableBodyScroll(isMenuOpen);
111
+
112
+ const openMenu = () => {
113
+ setIsMenuOpen(true);
114
+ setModalState({isModalOpen: true});
115
+ };
116
+
117
+ const closeMenu = React.useCallback(() => {
118
+ setIsMenuOpen(false);
119
+ setModalState({isModalOpen: false});
120
+ }, [setModalState]);
121
+
122
+ // The top bar is not a rail: it reports the expanded state, at rest, to every slot.
123
+ const slotRenderProps: SidenavSlotRenderProps = {collapsed: false, state: 'expanded'};
124
+ const headerSlotElement = renderSidenavSlot(headerSlot, slotRenderProps);
125
+ const footerSlotElement = renderSidenavSlot(footerSlot, slotRenderProps);
126
+ const logoElement = renderSidenavLogo(logo, slotRenderProps, <Logo size={MOBILE_LOGO_SIZE} />);
127
+
128
+ const renderRow = (item: SidenavFirstLevelItem | SidenavSecondLevelItem): JSX.Element => {
129
+ const commonProps = {
130
+ title: item.label,
131
+ right: item.rightSlot,
132
+ 'aria-current': selectedItemId === item.id ? ('page' as const) : undefined,
133
+ };
134
+
135
+ if (item.children?.length) {
136
+ return (
137
+ <Row
138
+ key={item.id}
139
+ {...commonProps}
140
+ onPress={() => {
141
+ setOpenedFirstLevelItemId(item.id);
142
+ setIsSecondLevelOpen(true);
143
+ }}
144
+ />
145
+ );
146
+ }
147
+
148
+ const navigate = async (callback?: () => void | Promise<void>) => {
149
+ onSelectedItemIdChange?.(item.id);
150
+ try {
151
+ await callback?.();
152
+ } finally {
153
+ closeMenu();
154
+ }
155
+ };
156
+
157
+ if (item.href !== undefined) {
158
+ return (
159
+ <Row
160
+ key={item.id}
161
+ {...commonProps}
162
+ href={item.href}
163
+ newTab={item.newTab}
164
+ onNavigate={() => navigate(item.onNavigate)}
165
+ />
166
+ );
167
+ }
168
+
169
+ if (item.to !== undefined) {
170
+ return (
171
+ <Row
172
+ key={item.id}
173
+ {...commonProps}
174
+ to={item.to}
175
+ newTab={item.newTab}
176
+ onNavigate={() => navigate(item.onNavigate)}
177
+ />
178
+ );
179
+ }
180
+
181
+ return <Row key={item.id} {...commonProps} onPress={() => navigate(item.onPress)} />;
182
+ };
183
+
184
+ const renderEntry = (entry: SidenavEntry, entryIndex: number): JSX.Element => {
185
+ if (!isSidenavSection(entry)) {
186
+ return (
187
+ <ResetResponsiveLayout key={(entry as SidenavFirstLevelItem).id}>
188
+ <RowList>{renderRow(entry as SidenavFirstLevelItem)}</RowList>
189
+ </ResetResponsiveLayout>
190
+ );
191
+ }
192
+
193
+ // A hidden title paints no heading, and it still names the list of the section.
194
+ const {text: title, isHeadingVisible} = getSidenavSectionTitle(entry.title);
195
+
196
+ return (
197
+ <Stack space={SECTION_TITLE_SPACE} key={`${title}-${entryIndex}`}>
198
+ {isHeadingVisible && <Title1>{title}</Title1>}
199
+ <ResetResponsiveLayout>
200
+ <RowList aria-label={title}>{entry.items.map((item) => renderRow(item))}</RowList>
201
+ </ResetResponsiveLayout>
202
+ </Stack>
203
+ );
204
+ };
205
+
206
+ const openedFirstLevelItem = openedFirstLevelItemId
207
+ ? getFirstLevelItems(entries ?? []).find((item) => item.id === openedFirstLevelItemId)
208
+ : undefined;
209
+
210
+ const topBar = (
211
+ <Header
212
+ topFixed
213
+ withBorder
214
+ isBurgerMenuOpen={isMenuOpen}
215
+ variant={variant}
216
+ dataAttributes={{testid: 'SidenavBar', ...dataAttributes}}
217
+ >
218
+ <NavigationBarSideMargins wide={false}>
219
+ <NavigationBarContentContainer right={headerSlotElement}>
220
+ <Touchable
221
+ className={sharedStyles.burgerMenuButton}
222
+ aria-live="polite"
223
+ aria-label={
224
+ isMenuOpen
225
+ ? texts.closeNavigationMenu || t(tokens.closeNavigationMenu)
226
+ : texts.openNavigationMenu || t(tokens.openNavigationMenu)
227
+ }
228
+ aria-expanded={isMenuOpen}
229
+ aria-controls={menuId}
230
+ onPress={isMenuOpen ? closeMenu : openMenu}
231
+ >
232
+ <BurgerMenuIcon isOpen={isMenuOpen} />
233
+ </Touchable>
234
+ {logoElement && <div className={sharedStyles.logoContainer}>{logoElement}</div>}
235
+ </NavigationBarContentContainer>
236
+ </NavigationBarSideMargins>
237
+ </Header>
238
+ );
239
+
240
+ // The variant paints the top bar alone. The panel always renders in the default variant, so it stays
241
+ // outside of this context: a portal keeps the context of the tree that renders it.
242
+ return (
243
+ <>
244
+ <ThemeVariant variant={variant}>
245
+ <FocusTrap disabled={disableFocusTrap} group={SIDENAV_FOCUS_TRAP_GROUP}>
246
+ {topBar}
247
+ </FocusTrap>
248
+ </ThemeVariant>
249
+ <div className={sharedStyles.spacer} />
250
+ <MobileNavigationMenu
251
+ open={isMenuOpen}
252
+ id={menuId}
253
+ aria-label={ariaLabel}
254
+ topOffset={NAVBAR_HEIGHT_MOBILE}
255
+ showSecondLevel={isSecondLevelOpen}
256
+ onExited={() => {
257
+ setIsSecondLevelOpen(false);
258
+ setOpenedFirstLevelItemId(null);
259
+ }}
260
+ focusTrapGroup={SIDENAV_FOCUS_TRAP_GROUP}
261
+ disableFocusTrap={disableFocusTrap}
262
+ setDisableFocusTrap={setDisableFocusTrap}
263
+ firstLevel={
264
+ <ResponsiveLayout>
265
+ <Box paddingTop={PANEL_TOP_PADDING}>
266
+ <Stack space={ENTRY_SPACE}>
267
+ {(entries ?? []).map((entry, entryIndex) => renderEntry(entry, entryIndex))}
268
+ </Stack>
269
+ </Box>
270
+ {footerSlotElement && <Box paddingY={FOOTER_SLOT_PADDING}>{footerSlotElement}</Box>}
271
+ </ResponsiveLayout>
272
+ }
273
+ secondLevel={
274
+ openedFirstLevelItem ? (
275
+ <ResponsiveLayout>
276
+ <Stack space={ENTRY_SPACE}>
277
+ <Stack space={BACK_BAR_SPACE}>
278
+ <NavigationBar
279
+ title={texts.backNavigationBar || t(tokens.backNavigationBar)}
280
+ onBack={() => setIsSecondLevelOpen(false)}
281
+ topFixed={false}
282
+ withBorder={false}
283
+ />
284
+ <Title3>{openedFirstLevelItem.label}</Title3>
285
+ </Stack>
286
+ <ResetResponsiveLayout>
287
+ <RowList aria-label={openedFirstLevelItem.label}>
288
+ {(openedFirstLevelItem.children ?? []).map((child) =>
289
+ renderRow(child)
290
+ )}
291
+ </RowList>
292
+ </ResetResponsiveLayout>
293
+ </Stack>
294
+ </ResponsiveLayout>
295
+ ) : null
296
+ }
297
+ />
298
+ </>
299
+ );
300
+ };
301
+
302
+ export {SidenavBarMobile};
@@ -0,0 +1,70 @@
1
+ 'use client';
2
+ import * as React from 'react';
3
+ import {useIsomorphicLayoutEffect, useTheme} from './hooks';
4
+ import {isRunningAcceptanceTest} from './utils/platform';
5
+
6
+ const REDUCED_MOTION_QUERY = '(prefers-reduced-motion)';
7
+
8
+ /**
9
+ * Whether the sidenav must move with zero duration: the user asked the operating system for less motion,
10
+ * or an acceptance test runs, where no half-animated node may stay in the DOM after the state that
11
+ * removed it.
12
+ *
13
+ * Every animated rule of the sidenav already drops its transition through the same media query, so the
14
+ * screen answers on its own. This hook gives the answer to the parts that run in JavaScript instead: the
15
+ * timeouts that keep a box in the document until it finished closing, and the delay after which the
16
+ * sidenav reports that its rail stopped.
17
+ *
18
+ * The media query reports `false` on the server and for the first render, where it does not exist. A
19
+ * toggle of the sidenav always comes later than that, so the value is settled by the time anything reads it.
20
+ */
21
+ const useIsMotionOff = (): boolean => {
22
+ const {platformOverrides} = useTheme();
23
+ const [isReducedMotion, setIsReducedMotion] = React.useState(false);
24
+
25
+ React.useEffect(() => {
26
+ const mediaQuery = window.matchMedia?.(REDUCED_MOTION_QUERY);
27
+ if (!mediaQuery) {
28
+ return;
29
+ }
30
+ setIsReducedMotion(mediaQuery.matches);
31
+
32
+ const handleChange = (event: MediaQueryListEvent) => setIsReducedMotion(event.matches);
33
+ mediaQuery.addEventListener('change', handleChange);
34
+ return () => mediaQuery.removeEventListener('change', handleChange);
35
+ }, []);
36
+
37
+ return isRunningAcceptanceTest(platformOverrides) || isReducedMotion;
38
+ };
39
+
40
+ /**
41
+ * The width that a text had at rest, so that it can keep it while the rail moves.
42
+ *
43
+ * A label or a section title that takes its width from the layout re-cuts itself as the rail narrows, and
44
+ * a `max-content` width turns a wrapped text into one line at the first frame, which makes its row jump.
45
+ * Freezing the width that the text had at rest keeps its lines while its box folds, so the height of the
46
+ * row animates with the rail.
47
+ *
48
+ * The hook measures the element after every render at rest, and it returns that width while `isFrozen`
49
+ * is true. It returns `undefined` when it has no measurement yet, for example when the sidenav mounted
50
+ * collapsed or on the server: the caller then falls back to `max-content`.
51
+ */
52
+ const useRestWidth = (
53
+ isFrozen: boolean
54
+ ): {ref: React.RefObject<HTMLDivElement | null>; frozenWidth?: number} => {
55
+ const ref = React.useRef<HTMLDivElement>(null);
56
+ const restWidthRef = React.useRef(0);
57
+
58
+ // A layout effect reads the width before the browser paints, so the first frame after a collapse
59
+ // already sees the frozen width.
60
+ useIsomorphicLayoutEffect(() => {
61
+ if (!isFrozen && ref.current) {
62
+ restWidthRef.current = ref.current.offsetWidth;
63
+ }
64
+ });
65
+
66
+ const frozenWidth = isFrozen && restWidthRef.current > 0 ? restWidthRef.current : undefined;
67
+ return {ref, frozenWidth};
68
+ };
69
+
70
+ export {useIsMotionOff, useRestWidth};