@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
package/src/list.tsx CHANGED
@@ -446,361 +446,373 @@ const getNodeText = (node: HTMLElement | null): string => {
446
446
  return raw;
447
447
  };
448
448
 
449
- const RowContent = React.forwardRef<TouchableElement, RowContentProps & {hasDivider: boolean}>(
450
- (props, ref) => {
451
- const titleId = React.useId();
452
- const outsideVariant = useThemeVariant();
453
- const isOverBrand =
454
- outsideVariant === 'brand' || outsideVariant === 'media' || outsideVariant === 'negative';
455
- const {
456
- asset,
457
- headline,
458
- title,
459
- titleAs,
460
- titleLinesMax,
461
- subtitle,
462
- subtitleLinesMax,
463
- description,
464
- descriptionLinesMax,
465
- detail,
466
- danger,
467
- badge,
468
- role,
469
- touchableRole,
470
- slot,
471
- withChevron,
472
- dataAttributes,
473
- right,
474
- 'aria-label': ariaLabelProp,
475
- tabIndex,
476
- atomicReading,
477
- hasDivider,
478
- } = props;
479
-
480
- const [headlineText, setHeadlineText] = React.useState<string>('');
481
- const [slotText, setSlotText] = React.useState<string>('');
482
- const [rightText, setRightText] = React.useState<string>('');
483
- const assetText = getAssetText(asset);
484
- const [dividerOffset, setDividerOffset] = React.useState(0);
485
- const measureDividerOffset = React.useCallback(
486
- (dualActionContainerElement: HTMLDivElement | null) => {
487
- if (!dualActionContainerElement || !hasDivider) {
488
- return;
489
- }
449
+ const RowContent = React.forwardRef<
450
+ TouchableElement,
451
+ RowContentProps & {hasDivider: boolean; onSelectedChange?: (selected: boolean) => void}
452
+ >((props, ref) => {
453
+ const titleId = React.useId();
454
+ const outsideVariant = useThemeVariant();
455
+ const isOverBrand =
456
+ outsideVariant === 'brand' || outsideVariant === 'media' || outsideVariant === 'negative';
457
+ const {
458
+ asset,
459
+ headline,
460
+ title,
461
+ titleAs,
462
+ titleLinesMax,
463
+ subtitle,
464
+ subtitleLinesMax,
465
+ description,
466
+ descriptionLinesMax,
467
+ detail,
468
+ danger,
469
+ badge,
470
+ role,
471
+ touchableRole,
472
+ slot,
473
+ withChevron,
474
+ dataAttributes,
475
+ right,
476
+ 'aria-label': ariaLabelProp,
477
+ tabIndex,
478
+ atomicReading,
479
+ hasDivider,
480
+ onSelectedChange,
481
+ } = props;
482
+
483
+ const [headlineText, setHeadlineText] = React.useState<string>('');
484
+ const [slotText, setSlotText] = React.useState<string>('');
485
+ const [rightText, setRightText] = React.useState<string>('');
486
+ const assetText = getAssetText(asset);
487
+ const [dividerOffset, setDividerOffset] = React.useState(0);
488
+ const measureDividerOffset = React.useCallback(
489
+ (dualActionContainerElement: HTMLDivElement | null) => {
490
+ if (!dualActionContainerElement || !hasDivider) {
491
+ return;
492
+ }
490
493
 
491
- const innerContentElement = dualActionContainerElement.querySelector<HTMLElement>(
492
- `.${styles.innerContent}`
493
- );
494
+ const innerContentElement = dualActionContainerElement.querySelector<HTMLElement>(
495
+ `.${styles.innerContent}`
496
+ );
494
497
 
495
- if (!innerContentElement) {
496
- return;
497
- }
498
+ if (!innerContentElement) {
499
+ return;
500
+ }
498
501
 
499
- const containerLeft = dualActionContainerElement.getBoundingClientRect().left;
500
- const contentLeft = innerContentElement.getBoundingClientRect().left;
502
+ const containerLeft = dualActionContainerElement.getBoundingClientRect().left;
503
+ const contentLeft = innerContentElement.getBoundingClientRect().left;
501
504
 
502
- setDividerOffset(contentLeft - containerLeft);
503
- },
504
- [hasDivider]
505
- );
505
+ setDividerOffset(contentLeft - containerLeft);
506
+ },
507
+ [hasDivider]
508
+ );
506
509
 
507
- // iOS voiceover reads links with multiple lines as separate links. By setting aria-label and marking content as aria-hidden, we can make it read the whole row as one link.
508
- const computedAriaLabel = [
509
- title,
510
- assetText,
511
- headlineText,
512
- subtitle,
513
- description,
514
- slotText,
515
- detail,
516
- rightText,
517
- ]
518
- .filter(Boolean)
519
- .join(' ');
520
-
521
- const isInteractive = !!props.onPress || !!props.href || !!props.to;
522
- const ariaLabel = ariaLabelProp ?? (isInteractive ? computedAriaLabel : undefined);
523
-
524
- const radioContext = useRadioContext();
525
- const disabled = props.disabled || (props.radioValue !== undefined && radioContext.disabled);
526
- const hasHoverDefault = !disabled && !isOverBrand;
527
- const hasHoverInverse = !disabled && isOverBrand;
528
- const hasControl = hasControlProps(props);
529
- const hasChevron = hasControl ? false : withChevron ?? isInteractive;
530
-
531
- const interactiveProps = {
532
- href: props.href,
533
- newTab: props.newTab,
534
- loadOnTop: props.loadOnTop,
535
-
536
- to: props.to,
537
- fullPageOnWebView: props.fullPageOnWebView,
538
- replace: props.replace,
539
-
540
- onNavigate: props.onNavigate,
541
- onPress: props.onPress,
542
- trackingEvent: props.trackingEvent,
543
-
544
- 'aria-label': ariaLabel,
545
- 'aria-labelledby': props['aria-labelledby'],
546
- 'aria-description': props['aria-description'],
547
- 'aria-describedby': props['aria-describedby'],
548
- 'aria-current': props['aria-current'],
549
- } as TouchableProps;
550
-
551
- const [isChecked, toggle] = useControlState(props.switch || props.checkbox || {});
552
-
553
- const renderContent = (contentProps?: {
554
- control?: React.ReactNode;
555
- labelId?: string;
556
- role?: string;
557
- withDivider?: boolean;
558
- }) => (
559
- <Content
560
- asset={asset}
561
- headline={headline}
562
- headlineRef={(node) => {
563
- if (node) {
564
- setHeadlineText(getNodeText(node));
565
- }
566
- }}
567
- title={title}
568
- titleAs={titleAs}
569
- subtitle={subtitle}
570
- description={description}
571
- badge={badge}
572
- titleLinesMax={titleLinesMax}
573
- subtitleLinesMax={subtitleLinesMax}
574
- descriptionLinesMax={descriptionLinesMax}
575
- detail={detail}
576
- danger={danger}
577
- right={right}
578
- rightRef={(node) => {
579
- if (node) {
580
- setRightText(getNodeText(node));
581
- }
582
- }}
583
- control={contentProps?.control}
584
- role={contentProps?.role}
585
- slot={slot}
586
- slotRef={(node) => {
587
- if (node) {
588
- setSlotText(getNodeText(node));
589
- }
590
- }}
591
- labelId={contentProps?.labelId}
510
+ // iOS voiceover reads links with multiple lines as separate links. By setting aria-label and marking content as aria-hidden, we can make it read the whole row as one link.
511
+ const computedAriaLabel = [
512
+ title,
513
+ assetText,
514
+ headlineText,
515
+ subtitle,
516
+ description,
517
+ slotText,
518
+ detail,
519
+ rightText,
520
+ ]
521
+ .filter(Boolean)
522
+ .join(' ');
523
+
524
+ const isInteractive = !!props.onPress || !!props.href || !!props.to;
525
+ const ariaLabel = ariaLabelProp ?? (isInteractive ? computedAriaLabel : undefined);
526
+
527
+ const radioContext = useRadioContext();
528
+ const disabled = props.disabled || (props.radioValue !== undefined && radioContext.disabled);
529
+ const hasHoverDefault = !disabled && !isOverBrand;
530
+ const hasHoverInverse = !disabled && isOverBrand;
531
+ const hasControl = hasControlProps(props);
532
+ const hasChevron = hasControl ? false : withChevron ?? isInteractive;
533
+
534
+ const interactiveProps = {
535
+ href: props.href,
536
+ newTab: props.newTab,
537
+ loadOnTop: props.loadOnTop,
538
+
539
+ to: props.to,
540
+ fullPageOnWebView: props.fullPageOnWebView,
541
+ replace: props.replace,
542
+
543
+ onNavigate: props.onNavigate,
544
+ onPress: props.onPress,
545
+ trackingEvent: props.trackingEvent,
546
+
547
+ 'aria-label': ariaLabel,
548
+ 'aria-labelledby': props['aria-labelledby'],
549
+ 'aria-description': props['aria-description'],
550
+ 'aria-describedby': props['aria-describedby'],
551
+ 'aria-current': props['aria-current'],
552
+ } as TouchableProps;
553
+
554
+ const [isChecked, toggle] = useControlState(props.switch || props.checkbox || {});
555
+ const isControlSelected =
556
+ props.switch || props.checkbox
557
+ ? isChecked
558
+ : props.radioValue !== undefined
559
+ ? radioContext.selectedValue === props.radioValue
560
+ : undefined;
561
+
562
+ React.useEffect(() => {
563
+ if (isControlSelected !== undefined) {
564
+ onSelectedChange?.(isControlSelected);
565
+ }
566
+ }, [onSelectedChange, isControlSelected]);
567
+
568
+ const renderContent = (contentProps?: {
569
+ control?: React.ReactNode;
570
+ labelId?: string;
571
+ role?: string;
572
+ withDivider?: boolean;
573
+ }) => (
574
+ <Content
575
+ asset={asset}
576
+ headline={headline}
577
+ headlineRef={(node) => {
578
+ if (node) {
579
+ setHeadlineText(getNodeText(node));
580
+ }
581
+ }}
582
+ title={title}
583
+ titleAs={titleAs}
584
+ subtitle={subtitle}
585
+ description={description}
586
+ badge={badge}
587
+ titleLinesMax={titleLinesMax}
588
+ subtitleLinesMax={subtitleLinesMax}
589
+ descriptionLinesMax={descriptionLinesMax}
590
+ detail={detail}
591
+ danger={danger}
592
+ right={right}
593
+ rightRef={(node) => {
594
+ if (node) {
595
+ setRightText(getNodeText(node));
596
+ }
597
+ }}
598
+ control={contentProps?.control}
599
+ role={contentProps?.role}
600
+ slot={slot}
601
+ slotRef={(node) => {
602
+ if (node) {
603
+ setSlotText(getNodeText(node));
604
+ }
605
+ }}
606
+ labelId={contentProps?.labelId}
607
+ disabled={disabled}
608
+ withChevron={hasChevron}
609
+ withDivider={contentProps?.withDivider ?? hasDivider}
610
+ />
611
+ );
612
+
613
+ if (isInteractive && !hasControl) {
614
+ return (
615
+ <BaseTouchable
616
+ ref={ref}
617
+ className={classNames(styles.rowContent, {
618
+ [styles.touchableBackground]: hasHoverDefault,
619
+ [styles.touchableBackgroundBrand]: hasHoverInverse,
620
+ [styles.pointer]: !disabled,
621
+ })}
622
+ {...interactiveProps}
623
+ role={touchableRole}
624
+ dataAttributes={dataAttributes}
592
625
  disabled={disabled}
593
- withChevron={hasChevron}
594
- withDivider={contentProps?.withDivider ?? hasDivider}
595
- />
626
+ tabIndex={tabIndex}
627
+ >
628
+ <div
629
+ className={styles.rowContentPadding}
630
+ aria-hidden={!!props.to || !!props.href || props.touchableRole === 'link' || undefined}
631
+ data-testid="content-container"
632
+ >
633
+ {renderContent({role})}
634
+ </div>
635
+ </BaseTouchable>
596
636
  );
637
+ }
597
638
 
598
- if (isInteractive && !hasControl) {
599
- return (
639
+ const renderRowWithDoubleInteraction = (control: React.ReactNode) => (
640
+ <div
641
+ className={styles.dualActionContainer}
642
+ ref={combineRefs(ref, measureDividerOffset)}
643
+ {...getPrefixedDataAttributes(dataAttributes)}
644
+ >
645
+ <div className={styles.dualActionBody}>
600
646
  <BaseTouchable
601
- ref={ref}
602
- className={classNames(styles.rowContent, {
647
+ disabled={disabled}
648
+ {...interactiveProps}
649
+ role={touchableRole}
650
+ className={classNames(styles.dualActionLeft, {
603
651
  [styles.touchableBackground]: hasHoverDefault,
604
652
  [styles.touchableBackgroundBrand]: hasHoverInverse,
605
- [styles.pointer]: !disabled,
606
653
  })}
607
- {...interactiveProps}
608
- role={touchableRole}
609
- dataAttributes={dataAttributes}
610
- disabled={disabled}
611
654
  tabIndex={tabIndex}
612
655
  >
613
- <div
614
- className={styles.rowContentPadding}
615
- aria-hidden={
616
- !!props.to || !!props.href || props.touchableRole === 'link' || undefined
617
- }
618
- data-testid="content-container"
619
- >
620
- {renderContent({role})}
621
- </div>
656
+ {renderContent({labelId: titleId, role, withDivider: false})}
622
657
  </BaseTouchable>
623
- );
624
- }
625
-
626
- const renderRowWithDoubleInteraction = (control: React.ReactNode) => (
627
- <div
628
- className={styles.dualActionContainer}
629
- ref={combineRefs(ref, measureDividerOffset)}
630
- {...getPrefixedDataAttributes(dataAttributes)}
631
- >
632
- <div className={styles.dualActionBody}>
633
- <BaseTouchable
634
- disabled={disabled}
635
- {...interactiveProps}
636
- role={touchableRole}
637
- className={classNames(styles.dualActionLeft, {
638
- [styles.touchableBackground]: hasHoverDefault,
639
- [styles.touchableBackgroundBrand]: hasHoverInverse,
640
- })}
641
- tabIndex={tabIndex}
642
- >
643
- {renderContent({labelId: titleId, role, withDivider: false})}
644
- </BaseTouchable>
645
- <div className={styles.dualActionDivider} />
646
- {control}
647
- </div>
648
- {hasDivider && (
649
- <div
650
- className={styles.rowDividerDualAction}
651
- data-testid="row-divider-dual-action"
652
- style={{paddingLeft: dividerOffset}}
653
- >
654
- <Divider />
655
- </div>
656
- )}
658
+ <div className={styles.dualActionDivider} />
659
+ {control}
657
660
  </div>
658
- );
661
+ {hasDivider && (
662
+ <div
663
+ className={styles.rowDividerDualAction}
664
+ data-testid="row-divider-dual-action"
665
+ style={{paddingLeft: dividerOffset}}
666
+ >
667
+ <Divider />
668
+ </div>
669
+ )}
670
+ </div>
671
+ );
659
672
 
660
- const renderRowWithSingleControl = (content: React.ReactNode, isContentInsideControl?: boolean) => (
661
- <div
662
- className={classNames(styles.rowContent, {
663
- [styles.touchableBackground]: hasHoverDefault && isContentInsideControl,
664
- [styles.touchableBackgroundBrand]: hasHoverInverse && isContentInsideControl,
665
- [styles.pointer]: !disabled && isContentInsideControl,
666
- })}
667
- ref={ref as React.Ref<HTMLDivElement>}
668
- {...getPrefixedDataAttributes(dataAttributes)}
669
- >
670
- {content}
671
- </div>
672
- );
673
+ const renderRowWithSingleControl = (content: React.ReactNode, isContentInsideControl?: boolean) => (
674
+ <div
675
+ className={classNames(styles.rowContent, {
676
+ [styles.touchableBackground]: hasHoverDefault && isContentInsideControl,
677
+ [styles.touchableBackgroundBrand]: hasHoverInverse && isContentInsideControl,
678
+ [styles.pointer]: !disabled && isContentInsideControl,
679
+ })}
680
+ ref={ref as React.Ref<HTMLDivElement>}
681
+ {...getPrefixedDataAttributes(dataAttributes)}
682
+ >
683
+ {content}
684
+ </div>
685
+ );
673
686
 
674
- const renderDualActionRight = ({controlElement}: {controlElement: React.ReactNode}) => (
675
- <div className={styles.dualActionRight}>{controlElement}</div>
676
- );
687
+ const renderDualActionRight = ({controlElement}: {controlElement: React.ReactNode}) => (
688
+ <div className={styles.dualActionRight}>{controlElement}</div>
689
+ );
677
690
 
678
- if (props.switch || props.checkbox) {
679
- const Control = props.switch ? Switch : Checkbox;
680
- const name = props.switch?.name ?? props.checkbox?.name ?? titleId;
681
-
682
- return isInteractive
683
- ? renderRowWithDoubleInteraction(
684
- <Control
685
- disabled={disabled}
686
- name={name}
687
- checked={isChecked}
688
- aria-label={ariaLabel}
689
- aria-labelledby={titleId}
690
- onChange={toggle}
691
- render={renderDualActionRight}
692
- />
693
- )
694
- : renderRowWithSingleControl(
695
- <Control
696
- disabled={disabled}
697
- name={name}
698
- checked={isChecked}
699
- aria-label={ariaLabel}
700
- aria-labelledby={titleId}
701
- onChange={toggle}
702
- render={({controlElement, labelId}) => (
703
- <div className={styles.rowContentPadding} role={role}>
704
- {renderContent({
705
- labelId,
706
- control: <Stack space="around">{controlElement}</Stack>,
707
- })}
708
- </div>
709
- )}
710
- />,
711
- true
712
- );
713
- }
691
+ if (props.switch || props.checkbox) {
692
+ const Control = props.switch ? Switch : Checkbox;
693
+ const name = props.switch?.name ?? props.checkbox?.name ?? titleId;
694
+
695
+ return isInteractive
696
+ ? renderRowWithDoubleInteraction(
697
+ <Control
698
+ disabled={disabled}
699
+ name={name}
700
+ checked={isChecked}
701
+ aria-label={ariaLabel}
702
+ aria-labelledby={titleId}
703
+ onChange={toggle}
704
+ render={renderDualActionRight}
705
+ />
706
+ )
707
+ : renderRowWithSingleControl(
708
+ <Control
709
+ disabled={disabled}
710
+ name={name}
711
+ checked={isChecked}
712
+ aria-label={ariaLabel}
713
+ aria-labelledby={titleId}
714
+ onChange={toggle}
715
+ render={({controlElement, labelId}) => (
716
+ <div className={styles.rowContentPadding} role={role}>
717
+ {renderContent({
718
+ labelId,
719
+ control: <Stack space="around">{controlElement}</Stack>,
720
+ })}
721
+ </div>
722
+ )}
723
+ />,
724
+ true
725
+ );
726
+ }
714
727
 
715
- if (props.radioValue) {
716
- return isInteractive
717
- ? renderRowWithDoubleInteraction(
718
- <RadioButton
719
- value={props.radioValue}
720
- aria-label={ariaLabel}
721
- aria-labelledby={titleId}
722
- render={renderDualActionRight}
723
- />
724
- )
725
- : renderRowWithSingleControl(
726
- <RadioButton
727
- value={props.radioValue}
728
- aria-label={ariaLabel}
729
- aria-labelledby={titleId}
730
- render={({controlElement}) => (
731
- <div className={styles.rowContentPadding} role={role}>
732
- {renderContent({
733
- labelId: titleId,
734
- control: <Stack space="around">{controlElement}</Stack>,
735
- })}
736
- </div>
737
- )}
738
- />,
739
- true
740
- );
741
- }
728
+ if (props.radioValue) {
729
+ return isInteractive
730
+ ? renderRowWithDoubleInteraction(
731
+ <RadioButton
732
+ value={props.radioValue}
733
+ aria-label={ariaLabel}
734
+ aria-labelledby={titleId}
735
+ render={renderDualActionRight}
736
+ />
737
+ )
738
+ : renderRowWithSingleControl(
739
+ <RadioButton
740
+ value={props.radioValue}
741
+ aria-label={ariaLabel}
742
+ aria-labelledby={titleId}
743
+ render={({controlElement}) => (
744
+ <div className={styles.rowContentPadding} role={role}>
745
+ {renderContent({
746
+ labelId: titleId,
747
+ control: <Stack space="around">{controlElement}</Stack>,
748
+ })}
749
+ </div>
750
+ )}
751
+ />,
752
+ true
753
+ );
754
+ }
742
755
 
743
- if (props.iconButton) {
744
- return isInteractive
745
- ? renderRowWithDoubleInteraction(
746
- <div className={styles.dualActionRightIconButton}>
747
- {props.iconButton.Icon ? (
748
- <IconButton {...props.iconButton} disabled={props.disabled} />
749
- ) : (
750
- <ToggleIconButton {...props.iconButton} disabled={props.disabled} />
751
- )}
752
- </div>
753
- )
754
- : renderRowWithSingleControl(
755
- <div className={styles.rowContentPadding}>
756
- {renderContent({
757
- labelId: titleId,
758
- control: (
759
- <Stack space="around">
760
- {props.iconButton.Icon ? (
761
- <IconButton
762
- {...props.iconButton}
763
- disabled={props.disabled}
764
- role={role}
765
- />
766
- ) : (
767
- <ToggleIconButton
768
- {...props.iconButton}
769
- disabled={props.disabled}
770
- role={role}
771
- />
772
- )}
773
- </Stack>
774
- ),
775
- })}
776
- </div>
777
- );
778
- }
756
+ if (props.iconButton) {
757
+ return isInteractive
758
+ ? renderRowWithDoubleInteraction(
759
+ <div className={styles.dualActionRightIconButton}>
760
+ {props.iconButton.Icon ? (
761
+ <IconButton {...props.iconButton} disabled={props.disabled} />
762
+ ) : (
763
+ <ToggleIconButton {...props.iconButton} disabled={props.disabled} />
764
+ )}
765
+ </div>
766
+ )
767
+ : renderRowWithSingleControl(
768
+ <div className={styles.rowContentPadding}>
769
+ {renderContent({
770
+ labelId: titleId,
771
+ control: (
772
+ <Stack space="around">
773
+ {props.iconButton.Icon ? (
774
+ <IconButton
775
+ {...props.iconButton}
776
+ disabled={props.disabled}
777
+ role={role}
778
+ />
779
+ ) : (
780
+ <ToggleIconButton
781
+ {...props.iconButton}
782
+ disabled={props.disabled}
783
+ role={role}
784
+ />
785
+ )}
786
+ </Stack>
787
+ ),
788
+ })}
789
+ </div>
790
+ );
791
+ }
779
792
 
780
- const shouldRenderScreenReaderOnly = !!ariaLabelProp || atomicReading;
793
+ const shouldRenderScreenReaderOnly = !!ariaLabelProp || atomicReading;
781
794
 
782
- return (
783
- <div role={role}>
784
- <div
785
- className={classNames(styles.rowContent, styles.rowContentPadding)}
786
- // role="text" makes VoiceOver read the whole div as a single text block. This is needed for VoiceOver rectangle to
787
- // cover the whole row, otherwise it only covers the text inside ScreenReaderOnly
788
- role={shouldRenderScreenReaderOnly ? 'text' : undefined}
789
- {...getPrefixedDataAttributes(dataAttributes)}
790
- ref={ref as React.Ref<HTMLDivElement>}
791
- tabIndex={tabIndex}
792
- >
793
- <div aria-hidden={shouldRenderScreenReaderOnly}>{renderContent({role})}</div>
794
- {shouldRenderScreenReaderOnly && (
795
- <ScreenReaderOnly>
796
- <span>{ariaLabelProp ?? computedAriaLabel}</span>
797
- </ScreenReaderOnly>
798
- )}
799
- </div>
795
+ return (
796
+ <div role={role}>
797
+ <div
798
+ className={classNames(styles.rowContent, styles.rowContentPadding)}
799
+ // role="text" makes VoiceOver read the whole div as a single text block. This is needed for VoiceOver rectangle to
800
+ // cover the whole row, otherwise it only covers the text inside ScreenReaderOnly
801
+ role={shouldRenderScreenReaderOnly ? 'text' : undefined}
802
+ {...getPrefixedDataAttributes(dataAttributes)}
803
+ ref={ref as React.Ref<HTMLDivElement>}
804
+ tabIndex={tabIndex}
805
+ >
806
+ <div aria-hidden={shouldRenderScreenReaderOnly}>{renderContent({role})}</div>
807
+ {shouldRenderScreenReaderOnly && (
808
+ <ScreenReaderOnly>
809
+ <span>{ariaLabelProp ?? computedAriaLabel}</span>
810
+ </ScreenReaderOnly>
811
+ )}
800
812
  </div>
801
- );
802
- }
803
- );
813
+ </div>
814
+ );
815
+ });
804
816
 
805
817
  export const Row = React.forwardRef<TouchableElement, RowContentProps>(
806
818
  ({dataAttributes, role = 'listitem', ...props}, ref) => (
@@ -851,7 +863,9 @@ export const RowList = ({
851
863
  };
852
864
 
853
865
  // danger + variant="brand" is not allowed
854
- type CommonBoxedRowProps =
866
+ type CommonBoxedRowProps = {
867
+ selected?: boolean;
868
+ } & (
855
869
  | {
856
870
  variant?: 'default';
857
871
  danger: true;
@@ -863,7 +877,8 @@ type CommonBoxedRowProps =
863
877
  | {
864
878
  variant?: 'default';
865
879
  danger: boolean;
866
- };
880
+ }
881
+ );
867
882
 
868
883
  type BoxedRowProps = ExclusifyUnion<
869
884
  | BasicRowContentProps
@@ -877,17 +892,28 @@ type BoxedRowProps = ExclusifyUnion<
877
892
  > &
878
893
  CommonBoxedRowProps;
879
894
 
880
- export const BoxedRow = React.forwardRef<HTMLDivElement, BoxedRowProps>(({dataAttributes, ...props}, ref) => (
881
- <InternalBoxed
882
- overflow="visible"
883
- className={styles.boxed}
884
- variant={props.variant ?? 'default'}
885
- ref={ref}
886
- dataAttributes={{testid: 'BoxedRow', ...dataAttributes}}
887
- >
888
- <RowContent {...props} hasDivider={false} />
889
- </InternalBoxed>
890
- ));
895
+ export const BoxedRow = React.forwardRef<HTMLDivElement, BoxedRowProps>(({dataAttributes, ...props}, ref) => {
896
+ const {selected, ...rowProps} = props;
897
+ const outsideVariant = useThemeVariant();
898
+ const [controlSelected, setControlSelected] = React.useState(false);
899
+ const isSelected = selected ?? controlSelected;
900
+
901
+ return (
902
+ <InternalBoxed
903
+ overflow="visible"
904
+ className={classNames(
905
+ styles.boxed,
906
+ styles.selectionOutline,
907
+ isSelected && styles.selectionOutlineColor[outsideVariant]
908
+ )}
909
+ variant={rowProps.variant ?? 'default'}
910
+ ref={ref}
911
+ dataAttributes={{testid: 'BoxedRow', ...dataAttributes}}
912
+ >
913
+ <RowContent {...rowProps} hasDivider={false} onSelectedChange={setControlSelected} />
914
+ </InternalBoxed>
915
+ );
916
+ });
891
917
 
892
918
  type BoxedRowListProps = {
893
919
  children: React.ReactNode;