@telefonica/mistica 16.60.0 → 16.61.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 (544) hide show
  1. package/css/mistica.css +1 -1
  2. package/dist/accordion.css-mistica.js +6 -6
  3. package/dist/align.css-mistica.js +1 -1
  4. package/dist/autocomplete.css-mistica.js +1 -1
  5. package/dist/avatar.css-mistica.js +1 -1
  6. package/dist/badge.css-mistica.js +1 -1
  7. package/dist/box.css-mistica.js +13 -13
  8. package/dist/boxed.css-mistica.js +24 -24
  9. package/dist/button-fixed-footer-layout.d.ts +2 -1
  10. package/dist/button-fixed-footer-layout.js +4 -3
  11. package/dist/button-group.css-mistica.js +1 -1
  12. package/dist/button-layout.css-mistica.js +14 -14
  13. package/dist/button.css-mistica.js +30 -30
  14. package/dist/callout.css-mistica.js +11 -11
  15. package/dist/card-internal.css-mistica.js +15 -15
  16. package/dist/carousel.css-mistica.js +8 -8
  17. package/dist/checkbox.css-mistica.js +11 -11
  18. package/dist/chip.css-mistica.js +15 -15
  19. package/dist/circle.css-mistica.js +1 -1
  20. package/dist/community/advanced-data-card.css-mistica.js +6 -6
  21. package/dist/community/blocks.css-mistica.js +1 -1
  22. package/dist/community/example-component.css-mistica.js +1 -1
  23. package/dist/counter.css-mistica.js +1 -1
  24. package/dist/cover-hero.css-mistica.js +2 -2
  25. package/dist/credit-card-number-field.css-mistica.js +3 -3
  26. package/dist/date-field.css-mistica.js +1 -1
  27. package/dist/date-time-picker.css-mistica.js +1 -1
  28. package/dist/dialog.css-mistica.js +4 -4
  29. package/dist/divider.css-mistica.js +5 -5
  30. package/dist/double-field.css-mistica.js +2 -2
  31. package/dist/drawer.css-mistica.js +1 -1
  32. package/dist/empty-state-card.css-mistica.js +1 -1
  33. package/dist/empty-state.css-mistica.js +5 -5
  34. package/dist/fade-in.css-mistica.js +1 -1
  35. package/dist/feedback.css-mistica.js +1 -1
  36. package/dist/file-upload.css-mistica.js +7 -7
  37. package/dist/fixed-footer-layout.css-mistica.js +2 -2
  38. package/dist/fixed-footer-layout.d.ts +6 -1
  39. package/dist/fixed-footer-layout.js +29 -28
  40. package/dist/form.css-mistica.js +1 -1
  41. package/dist/grid-layout.css-mistica.js +3 -3
  42. package/dist/grid.css-mistica.js +120 -120
  43. package/dist/header.css-mistica.js +1 -1
  44. package/dist/hero.css-mistica.js +2 -2
  45. package/dist/horizontal-scroll.css-mistica.js +1 -1
  46. package/dist/icon-button.css-mistica.js +53 -53
  47. package/dist/icons/icon-chevron.css-mistica.js +2 -2
  48. package/dist/icons/icon-error.css-mistica.js +1 -1
  49. package/dist/image.css-mistica.js +2 -2
  50. package/dist/image.js +8 -1
  51. package/dist/inline.css-mistica.js +9 -9
  52. package/dist/list.css-mistica.js +1 -1
  53. package/dist/loading-bar.css-mistica.js +1 -1
  54. package/dist/loading-screen.css-mistica.js +4 -4
  55. package/dist/logo.css-mistica.js +5 -5
  56. package/dist/menu.css-mistica.js +13 -13
  57. package/dist/mosaic.css-mistica.js +1 -1
  58. package/dist/navigation-bar.css-mistica.js +18 -18
  59. package/dist/navigation-breadcrumbs.css-mistica.js +1 -1
  60. package/dist/package-version.js +1 -1
  61. package/dist/pin-field.css-mistica.js +1 -1
  62. package/dist/popover.css-mistica.js +1 -1
  63. package/dist/progress-bar.css-mistica.js +6 -6
  64. package/dist/radio-button.css-mistica.js +19 -19
  65. package/dist/rating.css-mistica.js +2 -2
  66. package/dist/responsive-layout.css-mistica.js +6 -6
  67. package/dist/screen-reader-only.css-mistica.js +1 -1
  68. package/dist/select.css-mistica.js +15 -15
  69. package/dist/sheet-action-row.css-mistica.js +1 -1
  70. package/dist/sheet-common.css-mistica.js +1 -1
  71. package/dist/sheet-info.css-mistica.js +1 -1
  72. package/dist/skeletons.css-mistica.js +6 -6
  73. package/dist/skins/skin-contract.css-mistica.js +684 -684
  74. package/dist/skip-link.css-mistica.js +1 -1
  75. package/dist/slider.css-mistica.js +18 -18
  76. package/dist/snackbar.css-mistica.js +4 -4
  77. package/dist/spinner.css-mistica.js +1 -1
  78. package/dist/square.css-mistica.js +1 -1
  79. package/dist/stack.css-mistica.js +5 -5
  80. package/dist/stacking-group.css-mistica.js +1 -1
  81. package/dist/stepper.css-mistica.js +2 -2
  82. package/dist/switch-component.css-mistica.js +35 -35
  83. package/dist/table.css-mistica.js +9 -9
  84. package/dist/tabs.css-mistica.js +17 -17
  85. package/dist/tag.css-mistica.js +1 -1
  86. package/dist/text-field-base.css-mistica.js +15 -15
  87. package/dist/text-field-components.css-mistica.js +3 -3
  88. package/dist/text-link.css-mistica.js +6 -6
  89. package/dist/text.css-mistica.js +6 -6
  90. package/dist/theme-context.css-mistica.js +1 -1
  91. package/dist/timeline.css-mistica.js +9 -9
  92. package/dist/timer.css-mistica.js +6 -6
  93. package/dist/tooltip.css-mistica.js +1 -1
  94. package/dist/touchable.css-mistica.js +1 -1
  95. package/dist/utils/aspect-ratio-support.css-mistica.js +2 -2
  96. package/dist/video.css-mistica.js +1 -1
  97. package/dist/vivinho-loading-animation/vivinho-loading-animation.css-mistica.js +1 -1
  98. package/dist-es/accordion.css-mistica.js +6 -6
  99. package/dist-es/align.css-mistica.js +1 -1
  100. package/dist-es/autocomplete.css-mistica.js +1 -1
  101. package/dist-es/avatar.css-mistica.js +1 -1
  102. package/dist-es/badge.css-mistica.js +1 -1
  103. package/dist-es/box.css-mistica.js +13 -13
  104. package/dist-es/boxed.css-mistica.js +23 -23
  105. package/dist-es/button-fixed-footer-layout.js +12 -11
  106. package/dist-es/button-group.css-mistica.js +1 -1
  107. package/dist-es/button-layout.css-mistica.js +14 -14
  108. package/dist-es/button.css-mistica.js +30 -30
  109. package/dist-es/callout.css-mistica.js +11 -11
  110. package/dist-es/card-internal.css-mistica.js +15 -15
  111. package/dist-es/carousel.css-mistica.js +8 -8
  112. package/dist-es/checkbox.css-mistica.js +11 -11
  113. package/dist-es/chip.css-mistica.js +15 -15
  114. package/dist-es/circle.css-mistica.js +1 -1
  115. package/dist-es/community/advanced-data-card.css-mistica.js +6 -6
  116. package/dist-es/community/blocks.css-mistica.js +1 -1
  117. package/dist-es/community/example-component.css-mistica.js +1 -1
  118. package/dist-es/counter.css-mistica.js +1 -1
  119. package/dist-es/cover-hero.css-mistica.js +2 -2
  120. package/dist-es/credit-card-number-field.css-mistica.js +3 -3
  121. package/dist-es/date-field.css-mistica.js +1 -1
  122. package/dist-es/date-time-picker.css-mistica.js +1 -1
  123. package/dist-es/dialog.css-mistica.js +4 -4
  124. package/dist-es/divider.css-mistica.js +5 -5
  125. package/dist-es/double-field.css-mistica.js +2 -2
  126. package/dist-es/drawer.css-mistica.js +1 -1
  127. package/dist-es/empty-state-card.css-mistica.js +1 -1
  128. package/dist-es/empty-state.css-mistica.js +5 -5
  129. package/dist-es/fade-in.css-mistica.js +1 -1
  130. package/dist-es/feedback.css-mistica.js +1 -1
  131. package/dist-es/file-upload.css-mistica.js +7 -7
  132. package/dist-es/fixed-footer-layout.css-mistica.js +2 -2
  133. package/dist-es/fixed-footer-layout.js +57 -56
  134. package/dist-es/form.css-mistica.js +1 -1
  135. package/dist-es/grid-layout.css-mistica.js +3 -3
  136. package/dist-es/grid.css-mistica.js +120 -120
  137. package/dist-es/header.css-mistica.js +1 -1
  138. package/dist-es/hero.css-mistica.js +2 -2
  139. package/dist-es/horizontal-scroll.css-mistica.js +1 -1
  140. package/dist-es/icon-button.css-mistica.js +53 -53
  141. package/dist-es/icons/icon-chevron.css-mistica.js +2 -2
  142. package/dist-es/icons/icon-error.css-mistica.js +1 -1
  143. package/dist-es/image.css-mistica.js +2 -2
  144. package/dist-es/image.js +8 -1
  145. package/dist-es/inline.css-mistica.js +9 -9
  146. package/dist-es/list.css-mistica.js +1 -1
  147. package/dist-es/loading-bar.css-mistica.js +1 -1
  148. package/dist-es/loading-screen.css-mistica.js +4 -4
  149. package/dist-es/logo.css-mistica.js +5 -5
  150. package/dist-es/menu.css-mistica.js +13 -13
  151. package/dist-es/mosaic.css-mistica.js +1 -1
  152. package/dist-es/navigation-bar.css-mistica.js +18 -18
  153. package/dist-es/navigation-breadcrumbs.css-mistica.js +1 -1
  154. package/dist-es/package-version.js +1 -1
  155. package/dist-es/pin-field.css-mistica.js +1 -1
  156. package/dist-es/popover.css-mistica.js +1 -1
  157. package/dist-es/progress-bar.css-mistica.js +6 -6
  158. package/dist-es/radio-button.css-mistica.js +19 -19
  159. package/dist-es/rating.css-mistica.js +2 -2
  160. package/dist-es/responsive-layout.css-mistica.js +6 -6
  161. package/dist-es/screen-reader-only.css-mistica.js +1 -1
  162. package/dist-es/select.css-mistica.js +15 -15
  163. package/dist-es/sheet-action-row.css-mistica.js +1 -1
  164. package/dist-es/sheet-common.css-mistica.js +1 -1
  165. package/dist-es/sheet-info.css-mistica.js +1 -1
  166. package/dist-es/skeletons.css-mistica.js +6 -6
  167. package/dist-es/skins/skin-contract.css-mistica.js +684 -684
  168. package/dist-es/skip-link.css-mistica.js +1 -1
  169. package/dist-es/slider.css-mistica.js +18 -18
  170. package/dist-es/snackbar.css-mistica.js +4 -4
  171. package/dist-es/spinner.css-mistica.js +1 -1
  172. package/dist-es/square.css-mistica.js +1 -1
  173. package/dist-es/stack.css-mistica.js +5 -5
  174. package/dist-es/stacking-group.css-mistica.js +1 -1
  175. package/dist-es/stepper.css-mistica.js +2 -2
  176. package/dist-es/style.css +1 -1
  177. package/dist-es/switch-component.css-mistica.js +35 -35
  178. package/dist-es/table.css-mistica.js +9 -9
  179. package/dist-es/tabs.css-mistica.js +17 -17
  180. package/dist-es/tag.css-mistica.js +1 -1
  181. package/dist-es/text-field-base.css-mistica.js +15 -15
  182. package/dist-es/text-field-components.css-mistica.js +3 -3
  183. package/dist-es/text-link.css-mistica.js +6 -6
  184. package/dist-es/text.css-mistica.js +6 -6
  185. package/dist-es/theme-context.css-mistica.js +1 -1
  186. package/dist-es/timeline.css-mistica.js +9 -9
  187. package/dist-es/timer.css-mistica.js +6 -6
  188. package/dist-es/tooltip.css-mistica.js +1 -1
  189. package/dist-es/touchable.css-mistica.js +1 -1
  190. package/dist-es/utils/aspect-ratio-support.css-mistica.js +2 -2
  191. package/dist-es/video.css-mistica.js +1 -1
  192. package/dist-es/vivinho-loading-animation/vivinho-loading-animation.css-mistica.js +1 -1
  193. package/doc/llms.md +11 -0
  194. package/package.json +13 -1
  195. package/src/accordion.css.ts +121 -0
  196. package/src/accordion.tsx +366 -0
  197. package/src/align.css.ts +7 -0
  198. package/src/align.tsx +32 -0
  199. package/src/autocomplete.css.ts +62 -0
  200. package/src/autocomplete.tsx +239 -0
  201. package/src/avatar.css.ts +14 -0
  202. package/src/avatar.tsx +120 -0
  203. package/src/badge.css.ts +51 -0
  204. package/src/badge.tsx +79 -0
  205. package/src/box.css.ts +51 -0
  206. package/src/box.tsx +114 -0
  207. package/src/boxed.css.ts +132 -0
  208. package/src/boxed.tsx +153 -0
  209. package/src/button-fixed-footer-layout.tsx +65 -0
  210. package/src/button-group.css.ts +75 -0
  211. package/src/button-group.tsx +91 -0
  212. package/src/button-layout.css.ts +162 -0
  213. package/src/button-layout.tsx +91 -0
  214. package/src/button.css.ts +758 -0
  215. package/src/button.tsx +632 -0
  216. package/src/callout.css.ts +50 -0
  217. package/src/callout.tsx +147 -0
  218. package/src/card-cover.tsx +242 -0
  219. package/src/card-data.tsx +152 -0
  220. package/src/card-internal.css.ts +271 -0
  221. package/src/card-internal.tsx +1724 -0
  222. package/src/card-media.tsx +157 -0
  223. package/src/card-naked.tsx +63 -0
  224. package/src/carousel.css.ts +522 -0
  225. package/src/carousel.tsx +1300 -0
  226. package/src/checkbox.css.ts +94 -0
  227. package/src/checkbox.tsx +192 -0
  228. package/src/chip.css.ts +204 -0
  229. package/src/chip.tsx +191 -0
  230. package/src/circle.css.ts +14 -0
  231. package/src/circle.tsx +52 -0
  232. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-actions-button-and-link-footer-image-false-1-snap.png +0 -0
  233. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-actions-button-and-link-footer-image-true-1-snap.png +0 -0
  234. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-actions-button-footer-image-false-1-snap.png +0 -0
  235. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-actions-button-footer-image-true-1-snap.png +0 -0
  236. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-actions-link-footer-image-false-1-snap.png +0 -0
  237. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-actions-link-footer-image-true-1-snap.png +0 -0
  238. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-actions-none-footer-image-false-1-snap.png +0 -0
  239. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-actions-none-footer-image-true-1-snap.png +0 -0
  240. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-extras-0-1-snap.png +0 -0
  241. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-extras-1-1-snap.png +0 -0
  242. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-extras-3-1-snap.png +0 -0
  243. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-extras-3-no-divider-1-snap.png +0 -0
  244. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-inside-carousel-1-snap.png +0 -0
  245. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-without-stacking-group-with-top-actions-and-too-long-title-1-snap.png +0 -0
  246. package/src/community/__screenshot_tests__/__image_snapshots__/blocks-screenshot-test-tsx-blocks-highlighted-value-block-1-snap.png +0 -0
  247. package/src/community/__screenshot_tests__/__image_snapshots__/blocks-screenshot-test-tsx-blocks-information-block-1-snap.png +0 -0
  248. package/src/community/__screenshot_tests__/__image_snapshots__/blocks-screenshot-test-tsx-blocks-progress-block-1-snap.png +0 -0
  249. package/src/community/__screenshot_tests__/__image_snapshots__/blocks-screenshot-test-tsx-blocks-progress-block-2-snap.png +0 -0
  250. package/src/community/__screenshot_tests__/__image_snapshots__/blocks-screenshot-test-tsx-blocks-row-block-1-snap.png +0 -0
  251. package/src/community/__screenshot_tests__/__image_snapshots__/blocks-screenshot-test-tsx-blocks-simple-block-1-snap.png +0 -0
  252. package/src/community/__screenshot_tests__/__image_snapshots__/blocks-screenshot-test-tsx-blocks-value-block-1-snap.png +0 -0
  253. package/src/community/__screenshot_tests__/advanced-data-card-screenshot-test.tsx +84 -0
  254. package/src/community/__screenshot_tests__/blocks-screenshot-test.tsx +72 -0
  255. package/src/community/__stories__/advanced-data-card-carousel-story.tsx +66 -0
  256. package/src/community/__stories__/advanced-data-card-story.tsx +158 -0
  257. package/src/community/__stories__/blocks-story.tsx +272 -0
  258. package/src/community/__stories__/example-component-story.tsx +15 -0
  259. package/src/community/__stories__/index-story.tsx +154 -0
  260. package/src/community/__type_tests__/advanced-data-card-type-test.tsx +40 -0
  261. package/src/community/advanced-data-card.css.ts +271 -0
  262. package/src/community/advanced-data-card.tsx +431 -0
  263. package/src/community/blocks.css.ts +12 -0
  264. package/src/community/blocks.tsx +290 -0
  265. package/src/community/example-component.css.ts +7 -0
  266. package/src/community/example-component.tsx +17 -0
  267. package/src/community/index.tsx +10 -0
  268. package/src/counter.css.ts +150 -0
  269. package/src/counter.tsx +215 -0
  270. package/src/cover-hero-media.tsx +39 -0
  271. package/src/cover-hero.css.ts +133 -0
  272. package/src/cover-hero.tsx +262 -0
  273. package/src/credit-card-expiration-field.tsx +187 -0
  274. package/src/credit-card-fields.tsx +56 -0
  275. package/src/credit-card-number-field.css.ts +47 -0
  276. package/src/credit-card-number-field.tsx +245 -0
  277. package/src/cvv-field.tsx +169 -0
  278. package/src/date-field.css.ts +14 -0
  279. package/src/date-field.tsx +130 -0
  280. package/src/date-time-field.tsx +141 -0
  281. package/src/date-time-picker.css.ts +126 -0
  282. package/src/date-time-picker.tsx +188 -0
  283. package/src/decimal-field.tsx +160 -0
  284. package/src/desktop-container-type-context.tsx +15 -0
  285. package/src/dialog-context.tsx +81 -0
  286. package/src/dialog.css.ts +155 -0
  287. package/src/dialog.tsx +423 -0
  288. package/src/divider.css.ts +10 -0
  289. package/src/divider.tsx +11 -0
  290. package/src/double-field.css.ts +33 -0
  291. package/src/double-field.tsx +71 -0
  292. package/src/drawer.css.ts +123 -0
  293. package/src/drawer.tsx +304 -0
  294. package/src/email-field.tsx +76 -0
  295. package/src/empty-state-card.css.ts +40 -0
  296. package/src/empty-state-card.tsx +92 -0
  297. package/src/empty-state.css.ts +119 -0
  298. package/src/empty-state.tsx +141 -0
  299. package/src/fade-in.css.ts +12 -0
  300. package/src/fade-in.tsx +40 -0
  301. package/src/feedback.css.ts +119 -0
  302. package/src/feedback.tsx +432 -0
  303. package/src/file-upload.css.ts +156 -0
  304. package/src/file-upload.tsx +612 -0
  305. package/src/fixed-footer-layout.css.ts +96 -0
  306. package/src/fixed-footer-layout.tsx +227 -0
  307. package/src/fixed-to-top.tsx +21 -0
  308. package/src/focus-trap.tsx +17 -0
  309. package/src/form-context.tsx +198 -0
  310. package/src/form.css.ts +5 -0
  311. package/src/form.tsx +287 -0
  312. package/src/grid-layout.css.ts +68 -0
  313. package/src/grid-layout.tsx +201 -0
  314. package/src/grid.css.ts +203 -0
  315. package/src/grid.tsx +241 -0
  316. package/src/header.css.ts +30 -0
  317. package/src/header.tsx +319 -0
  318. package/src/hero.css.ts +71 -0
  319. package/src/hero.tsx +318 -0
  320. package/src/hooks.tsx +313 -0
  321. package/src/horizontal-scroll.css.ts +43 -0
  322. package/src/horizontal-scroll.tsx +18 -0
  323. package/src/iban-field.tsx +218 -0
  324. package/src/icon-button.css.ts +561 -0
  325. package/src/icon-button.tsx +221 -0
  326. package/src/icons/__stories__/mistica-icons-story.tsx +192 -0
  327. package/src/icons/icon-amex.tsx +40 -0
  328. package/src/icons/icon-chevron.css.ts +23 -0
  329. package/src/icons/icon-chevron.tsx +150 -0
  330. package/src/icons/icon-cvv-amex.tsx +31 -0
  331. package/src/icons/icon-cvv-visa-mc.tsx +31 -0
  332. package/src/icons/icon-error.css.ts +27 -0
  333. package/src/icons/icon-error.tsx +207 -0
  334. package/src/icons/icon-info.tsx +86 -0
  335. package/src/icons/icon-mastercard.tsx +36 -0
  336. package/src/icons/icon-success-vivo-new.tsx +51 -0
  337. package/src/icons/icon-success-vivo.tsx +36 -0
  338. package/src/icons/icon-success.tsx +211 -0
  339. package/src/icons/icon-visa.tsx +32 -0
  340. package/src/image.css.ts +48 -0
  341. package/src/image.tsx +352 -0
  342. package/src/index.tsx +2466 -0
  343. package/src/inline.css.ts +131 -0
  344. package/src/inline.tsx +135 -0
  345. package/src/integer-field.tsx +93 -0
  346. package/src/list.css.ts +281 -0
  347. package/src/list.tsx +963 -0
  348. package/src/loading-bar.css.ts +69 -0
  349. package/src/loading-bar.tsx +25 -0
  350. package/src/loading-screen.css.ts +114 -0
  351. package/src/loading-screen.tsx +376 -0
  352. package/src/logo-blau-shell.tsx +30 -0
  353. package/src/logo-blau.tsx +60 -0
  354. package/src/logo-common.tsx +29 -0
  355. package/src/logo-esimflag-shell.tsx +30 -0
  356. package/src/logo-esimflag.tsx +56 -0
  357. package/src/logo-movistar-new-shell.tsx +30 -0
  358. package/src/logo-movistar-new.tsx +85 -0
  359. package/src/logo-movistar-shell.tsx +30 -0
  360. package/src/logo-movistar.tsx +63 -0
  361. package/src/logo-o2-new-shell.tsx +26 -0
  362. package/src/logo-o2-new.tsx +27 -0
  363. package/src/logo-o2-shell.tsx +26 -0
  364. package/src/logo-o2.tsx +27 -0
  365. package/src/logo-telefonica-shell.tsx +30 -0
  366. package/src/logo-telefonica.tsx +95 -0
  367. package/src/logo-tu-shell.tsx +26 -0
  368. package/src/logo-tu.tsx +28 -0
  369. package/src/logo-vivo-shell.tsx +30 -0
  370. package/src/logo-vivo.tsx +53 -0
  371. package/src/logo.css.ts +33 -0
  372. package/src/logo.tsx +313 -0
  373. package/src/master-detail-layout.tsx +28 -0
  374. package/src/maybe-dismissable.css.ts +37 -0
  375. package/src/maybe-dismissable.tsx +58 -0
  376. package/src/media-queries.css.ts +67 -0
  377. package/src/menu.css.ts +132 -0
  378. package/src/menu.tsx +468 -0
  379. package/src/meter.tsx +516 -0
  380. package/src/modal-context-provider.tsx +45 -0
  381. package/src/month-field.tsx +124 -0
  382. package/src/mosaic.css.ts +73 -0
  383. package/src/mosaic.tsx +205 -0
  384. package/src/navigation-bar.css.ts +558 -0
  385. package/src/navigation-bar.tsx +1637 -0
  386. package/src/navigation-breadcrumbs.css.ts +22 -0
  387. package/src/navigation-breadcrumbs.tsx +69 -0
  388. package/src/negative-box.tsx +15 -0
  389. package/src/nestable-context.tsx +139 -0
  390. package/src/overlay.tsx +86 -0
  391. package/src/overscroll-color-context.tsx +141 -0
  392. package/src/package-version.tsx +2 -0
  393. package/src/password-field.tsx +126 -0
  394. package/src/phone-number-field-lite.tsx +265 -0
  395. package/src/phone-number-field.tsx +171 -0
  396. package/src/pin-field.css.ts +90 -0
  397. package/src/pin-field.tsx +346 -0
  398. package/src/placeholder.tsx +41 -0
  399. package/src/popover.css.ts +8 -0
  400. package/src/popover.tsx +85 -0
  401. package/src/portal.tsx +43 -0
  402. package/src/progress-bar.css.ts +61 -0
  403. package/src/progress-bar.tsx +174 -0
  404. package/src/radio-button.css.ts +174 -0
  405. package/src/radio-button.tsx +322 -0
  406. package/src/rating.css.ts +128 -0
  407. package/src/rating.tsx +351 -0
  408. package/src/responsive-layout.css.ts +162 -0
  409. package/src/responsive-layout.tsx +106 -0
  410. package/src/screen-reader-only.css.ts +27 -0
  411. package/src/screen-reader-only.tsx +33 -0
  412. package/src/screen-size-context-provider.tsx +96 -0
  413. package/src/screen-size-context.tsx +23 -0
  414. package/src/search-field.tsx +126 -0
  415. package/src/select.css.ts +226 -0
  416. package/src/select.tsx +513 -0
  417. package/src/sheet-action-row.css.ts +33 -0
  418. package/src/sheet-actions-list.tsx +113 -0
  419. package/src/sheet-actions.tsx +95 -0
  420. package/src/sheet-common.css.ts +254 -0
  421. package/src/sheet-common.tsx +402 -0
  422. package/src/sheet-info.css.ts +19 -0
  423. package/src/sheet-info.tsx +127 -0
  424. package/src/sheet-native.tsx +189 -0
  425. package/src/sheet-radio-list.tsx +118 -0
  426. package/src/sheet-root.tsx +127 -0
  427. package/src/sheet-types.tsx +94 -0
  428. package/src/sheet-web.tsx +140 -0
  429. package/src/skeleton-base.tsx +38 -0
  430. package/src/skeletons.css.ts +56 -0
  431. package/src/skeletons.tsx +133 -0
  432. package/src/skins/blau.tsx +724 -0
  433. package/src/skins/constants.tsx +10 -0
  434. package/src/skins/defaults.tsx +104 -0
  435. package/src/skins/esimflag.tsx +728 -0
  436. package/src/skins/movistar-new.tsx +735 -0
  437. package/src/skins/movistar.tsx +740 -0
  438. package/src/skins/o2-new.tsx +731 -0
  439. package/src/skins/o2.tsx +727 -0
  440. package/src/skins/skin-contract.css.ts +380 -0
  441. package/src/skins/telefonica.tsx +768 -0
  442. package/src/skins/tu.tsx +741 -0
  443. package/src/skins/types/colors.tsx +286 -0
  444. package/src/skins/types/index.tsx +153 -0
  445. package/src/skins/utils.tsx +66 -0
  446. package/src/skins/vivo-new.tsx +745 -0
  447. package/src/skins/vivo.tsx +720 -0
  448. package/src/skip-link.css.ts +34 -0
  449. package/src/skip-link.tsx +52 -0
  450. package/src/slider.css.ts +181 -0
  451. package/src/slider.tsx +384 -0
  452. package/src/snackbar-context.tsx +98 -0
  453. package/src/snackbar-native.ts +37 -0
  454. package/src/snackbar.css.ts +176 -0
  455. package/src/snackbar.tsx +258 -0
  456. package/src/spinner.css.ts +66 -0
  457. package/src/spinner.tsx +136 -0
  458. package/src/sprinkles.css.ts +83 -0
  459. package/src/square.css.ts +15 -0
  460. package/src/square.tsx +55 -0
  461. package/src/stack.css.ts +44 -0
  462. package/src/stack.tsx +79 -0
  463. package/src/stacking-group.css.ts +15 -0
  464. package/src/stacking-group.tsx +82 -0
  465. package/src/stepper.css.ts +233 -0
  466. package/src/stepper.tsx +156 -0
  467. package/src/switch-component.css.ts +181 -0
  468. package/src/switch-component.tsx +187 -0
  469. package/src/tab-focus.tsx +68 -0
  470. package/src/table-actions-header.tsx +21 -0
  471. package/src/table-cell-text.tsx +35 -0
  472. package/src/table.css.ts +297 -0
  473. package/src/table.tsx +398 -0
  474. package/src/tabs.css.ts +212 -0
  475. package/src/tabs.tsx +263 -0
  476. package/src/tag.css.ts +42 -0
  477. package/src/tag.tsx +161 -0
  478. package/src/test-utils/environment/setup-ssr.tsx +10 -0
  479. package/src/test-utils/fail-test-on-console-error.tsx +22 -0
  480. package/src/test-utils/index.tsx +341 -0
  481. package/src/test-utils/setup-ssr-test-env.tsx +13 -0
  482. package/src/test-utils/ssr.tsx +197 -0
  483. package/src/text-field-base.css.ts +416 -0
  484. package/src/text-field-base.tsx +628 -0
  485. package/src/text-field-components.css.ts +165 -0
  486. package/src/text-field-components.tsx +230 -0
  487. package/src/text-field.tsx +118 -0
  488. package/src/text-link.css.ts +83 -0
  489. package/src/text-link.tsx +85 -0
  490. package/src/text-tokens.tsx +708 -0
  491. package/src/text.css.ts +60 -0
  492. package/src/text.tsx +516 -0
  493. package/src/theme-context-provider.tsx +370 -0
  494. package/src/theme-context.css.ts +3 -0
  495. package/src/theme-context.tsx +8 -0
  496. package/src/theme-variant-context.tsx +51 -0
  497. package/src/theme.tsx +184 -0
  498. package/src/time-field.tsx +99 -0
  499. package/src/timeline.css.ts +135 -0
  500. package/src/timeline.tsx +250 -0
  501. package/src/timer.css.ts +99 -0
  502. package/src/timer.tsx +420 -0
  503. package/src/title.tsx +119 -0
  504. package/src/tooltip-context-provider.tsx +57 -0
  505. package/src/tooltip.css.ts +106 -0
  506. package/src/tooltip.tsx +649 -0
  507. package/src/touchable.css.ts +56 -0
  508. package/src/touchable.tsx +355 -0
  509. package/src/types/font-face.d.ts +47 -0
  510. package/src/types/libs.d.ts +3 -0
  511. package/src/utils/__tests__/analytics-test.tsx +35 -0
  512. package/src/utils/__tests__/browser-test.tsx +28 -0
  513. package/src/utils/__tests__/dom-test.tsx +23 -0
  514. package/src/utils/__tests__/helpers-test.tsx +166 -0
  515. package/src/utils/analytics.tsx +28 -0
  516. package/src/utils/animation.tsx +201 -0
  517. package/src/utils/aspect-ratio-support.css.ts +28 -0
  518. package/src/utils/aspect-ratio-support.tsx +141 -0
  519. package/src/utils/browser.tsx +9 -0
  520. package/src/utils/color.tsx +46 -0
  521. package/src/utils/common.tsx +27 -0
  522. package/src/utils/credit-card.tsx +46 -0
  523. package/src/utils/css.tsx +25 -0
  524. package/src/utils/document-visibility.tsx +52 -0
  525. package/src/utils/dom.tsx +155 -0
  526. package/src/utils/environment.tsx +6 -0
  527. package/src/utils/headings.tsx +18 -0
  528. package/src/utils/helpers.tsx +182 -0
  529. package/src/utils/keys.tsx +8 -0
  530. package/src/utils/locale.tsx +27 -0
  531. package/src/utils/platform.tsx +94 -0
  532. package/src/utils/region-code.tsx +1 -0
  533. package/src/utils/renders-element.tsx +6 -0
  534. package/src/utils/time.tsx +22 -0
  535. package/src/utils/types.tsx +19 -0
  536. package/src/utils/utility-types.tsx +8 -0
  537. package/src/video.css.ts +11 -0
  538. package/src/video.tsx +355 -0
  539. package/src/vivinho-loading-animation/in-lottie.json +402 -0
  540. package/src/vivinho-loading-animation/index.tsx +90 -0
  541. package/src/vivinho-loading-animation/out-lottie.json +575 -0
  542. package/src/vivinho-loading-animation/pulse-lottie.json +551 -0
  543. package/src/vivinho-loading-animation/vivinho-loading-animation.css.ts +15 -0
  544. package/src/vivinho-loading-animation/wave-lottie.json +2829 -0
@@ -0,0 +1,69 @@
1
+ import {style, keyframes} from '@vanilla-extract/css';
2
+ import {sprinkles} from './sprinkles.css';
3
+ import {vars} from './skins/skin-contract.css';
4
+
5
+ const TRANSITION_DURATION_MS = 400;
6
+ const ANIMATION_DURATION_MS = 1800;
7
+
8
+ const enterAnimation = keyframes({
9
+ from: {
10
+ transform: 'translateY(-4px)',
11
+ },
12
+ to: {
13
+ transform: 'translateY(0)',
14
+ },
15
+ });
16
+
17
+ export const portal = style([
18
+ sprinkles({
19
+ position: 'fixed',
20
+ top: 0,
21
+ left: 0,
22
+ right: 0,
23
+ }),
24
+ {
25
+ zIndex: 1, // Render above everything, including other portals
26
+ animation: `${enterAnimation} ${TRANSITION_DURATION_MS}ms ease-out`,
27
+ transition: `transform ${TRANSITION_DURATION_MS}ms ease-out`,
28
+ },
29
+ ]);
30
+
31
+ export const hidden = style({
32
+ transform: 'translateY(-4px)',
33
+ });
34
+
35
+ export const progressContainer = sprinkles({
36
+ width: '100%',
37
+ overflow: 'hidden',
38
+ position: 'relative',
39
+ background: vars.colors.loadingBar,
40
+ height: 4,
41
+ });
42
+
43
+ const progressIndicator = keyframes({
44
+ '0%': {
45
+ transform: 'translateX(0%)',
46
+ },
47
+ '50%': {
48
+ transform: 'translateX(100%)',
49
+ animationTimingFunction: 'ease-in-out',
50
+ },
51
+ '100%': {
52
+ transform: 'translateX(200%)',
53
+ animationTimingFunction: 'ease-in-out',
54
+ },
55
+ });
56
+
57
+ export const progress = style([
58
+ sprinkles({
59
+ position: 'absolute',
60
+ width: '100%',
61
+ height: '100%',
62
+ }),
63
+ {
64
+ left: '-100%',
65
+ animation: `${progressIndicator} ${ANIMATION_DURATION_MS}ms infinite`,
66
+ animationDelay: `${TRANSITION_DURATION_MS}ms`,
67
+ background: vars.colors.loadingBarBackground,
68
+ },
69
+ ]);
@@ -0,0 +1,25 @@
1
+ 'use client';
2
+ import * as React from 'react';
3
+ import {Portal} from './portal';
4
+ import * as styles from './loading-bar.css';
5
+ import {getPrefixedDataAttributes} from './utils/dom';
6
+ import classnames from 'classnames';
7
+
8
+ import type {DataAttributes} from './utils/types';
9
+
10
+ type Props = {visible: boolean; children?: void; dataAttributes?: DataAttributes};
11
+
12
+ const LoadingBar = ({visible, dataAttributes}: Props): JSX.Element => {
13
+ return (
14
+ <Portal className={classnames(styles.portal, {[styles.hidden]: !visible})}>
15
+ <div
16
+ className={styles.progressContainer}
17
+ {...getPrefixedDataAttributes(dataAttributes, 'LoadingBar')}
18
+ >
19
+ <div className={styles.progress} />
20
+ </div>
21
+ </Portal>
22
+ );
23
+ };
24
+
25
+ export default LoadingBar;
@@ -0,0 +1,114 @@
1
+ import {keyframes, style, styleVariants} from '@vanilla-extract/css';
2
+ import {sprinkles} from './sprinkles.css';
3
+ import {vars as skinVars} from './skins/skin-contract.css';
4
+ import * as mq from './media-queries.css';
5
+
6
+ export const loadingScreen = style([
7
+ sprinkles({
8
+ display: 'flex',
9
+ flexDirection: 'column',
10
+ alignItems: 'center',
11
+ }),
12
+ {
13
+ minHeight: '100vh',
14
+ },
15
+ ]);
16
+
17
+ export const inOutAnimationMs = 500;
18
+ const backgroundAnimationTiming = `${inOutAnimationMs}ms cubic-bezier(.1,0,.7,1)`;
19
+ const backgroundFadeIn = keyframes({
20
+ '0%': {
21
+ opacity: 0,
22
+ },
23
+ '100%': {
24
+ opacity: 1,
25
+ },
26
+ });
27
+
28
+ export const screenBackgroundAnimated = style({
29
+ animation: `${backgroundFadeIn} ${backgroundAnimationTiming}`,
30
+ });
31
+
32
+ export const screenBackground = styleVariants({
33
+ default: {
34
+ background: skinVars.colors.background,
35
+ },
36
+ brand: {
37
+ background: skinVars.colors.backgroundBrand,
38
+ },
39
+ });
40
+
41
+ export const screenBackgroundFadeOut = style({
42
+ transition: `opacity ${backgroundAnimationTiming}`,
43
+ opacity: 0,
44
+ });
45
+
46
+ export const loadingScreenChildren = sprinkles({
47
+ flex: 1,
48
+ display: 'flex',
49
+ flexDirection: 'column',
50
+ alignItems: 'center',
51
+ justifyContent: 'center',
52
+ });
53
+
54
+ export const loadingScreenText = style([
55
+ sprinkles({
56
+ paddingTop: 24,
57
+ }),
58
+ {
59
+ margin: '0 auto',
60
+ '@media': {
61
+ [mq.tablet]: {
62
+ maxWidth: 496,
63
+ },
64
+ [mq.desktopOrBigger]: {
65
+ maxWidth: 600,
66
+ },
67
+ },
68
+ },
69
+ ]);
70
+
71
+ const textInOutAnimationMs = 1000;
72
+ const textAnimationTiming = `${textInOutAnimationMs}ms cubic-bezier(.215,.61,.355,1)`;
73
+
74
+ const textIn = keyframes({
75
+ '0%': {
76
+ transform: 'translateY(50px)',
77
+ opacity: 0,
78
+ },
79
+ '100%': {
80
+ transform: 'translateY(0)',
81
+ opacity: 1,
82
+ },
83
+ });
84
+
85
+ export const loadingScreenTextAnimated = style({
86
+ animation: `${textIn} ${textAnimationTiming}`,
87
+ animationFillMode: 'both',
88
+ });
89
+
90
+ export const loadingScreenTextAnimatedOut = style({
91
+ transition: `opacity ${textAnimationTiming}`,
92
+ opacity: 0,
93
+ });
94
+
95
+ const pulseAnimation = keyframes({
96
+ '0%': {
97
+ transform: 'scale3d(.95, .95, .95)',
98
+ },
99
+ '50%': {
100
+ transform: 'scale3d(1, 1, 1)',
101
+ },
102
+ '100%': {
103
+ transform: 'scale3d(.95, .95, .95)',
104
+ },
105
+ });
106
+
107
+ export const pulseLogo = style({
108
+ animation: `${pulseAnimation} 1.4s infinite ease-out`,
109
+ transformOrigin: 'center',
110
+ });
111
+
112
+ export const logo = style({
113
+ transform: 'scale3d(.95, .95, .95)',
114
+ });
@@ -0,0 +1,376 @@
1
+ 'use client';
2
+ import * as React from 'react';
3
+ import {useSetOverscrollColor} from './overscroll-color-context';
4
+ import {ThemeVariant} from './theme-variant-context';
5
+ import {vars} from './skins/skin-contract.css';
6
+ import ResponsiveLayout from './responsive-layout';
7
+ import {Text2, Text, getTextSizes} from './text';
8
+ import Stack from './stack';
9
+ import * as styles from './loading-screen.css';
10
+ import Spinner from './spinner';
11
+ import classnames from 'classnames';
12
+ import {Logo} from './logo';
13
+ import ScreenReaderOnly from './screen-reader-only';
14
+ import {useTheme} from './hooks';
15
+ import {VIVO_NEW_SKIN} from './skins/constants';
16
+ import {getPrefixedDataAttributes} from './utils/dom';
17
+ import * as tokens from './text-tokens';
18
+
19
+ import type {ExclusifyUnion} from './utils/utility-types';
20
+ import type {DataAttributes} from './utils/types';
21
+
22
+ const BackgroundColor = ({isBrandVariant}: {isBrandVariant: boolean}) => {
23
+ const css = `body {background:${isBrandVariant ? vars.colors.backgroundBrand : vars.colors.background}}`;
24
+ return <style>{css}</style>;
25
+ };
26
+
27
+ type TextProps = ExclusifyUnion<
28
+ | {
29
+ title?: string;
30
+ description?: string;
31
+ }
32
+ | {
33
+ texts: ReadonlyArray<{
34
+ title?: string;
35
+ description?: string;
36
+ duration?: number;
37
+ }>;
38
+ }
39
+ >;
40
+
41
+ type LoadingScreenTextsProps = {
42
+ animateText?: boolean;
43
+ isLoading?: boolean;
44
+ onClose?: () => void;
45
+ texts: ReadonlyArray<{
46
+ title?: string;
47
+ description?: string;
48
+ duration?: number;
49
+ }>;
50
+ };
51
+
52
+ const LoadingScreenTexts = ({animateText, isLoading, onClose, texts}: LoadingScreenTextsProps) => {
53
+ const {textPresets} = useTheme();
54
+ const [currentTextsIndex, setCurrentTextsIndex] = React.useState(0);
55
+ const [isClosing, setIsClosing] = React.useState(false);
56
+
57
+ const showNextText = React.useCallback(() => {
58
+ setCurrentTextsIndex((currentTextsIndex + 1) % texts.length);
59
+ setIsClosing(false);
60
+ }, [currentTextsIndex, texts.length]);
61
+
62
+ React.useEffect(() => {
63
+ if (!isLoading) {
64
+ return;
65
+ }
66
+
67
+ if (texts.length === 1) {
68
+ return;
69
+ }
70
+
71
+ const timeout = setTimeout(() => {
72
+ if (animateText) {
73
+ setIsClosing(true);
74
+ } else {
75
+ showNextText();
76
+ }
77
+ }, texts[currentTextsIndex].duration ?? 5000);
78
+
79
+ return () => {
80
+ clearTimeout(timeout);
81
+ };
82
+ }, [animateText, currentTextsIndex, isClosing, isLoading, showNextText, texts]);
83
+
84
+ const handleOutTransitionEnd = () => {
85
+ if (!isLoading) {
86
+ onClose?.();
87
+ return;
88
+ }
89
+ if (!isClosing) {
90
+ return;
91
+ }
92
+
93
+ showNextText();
94
+ };
95
+
96
+ const {title: currentTitle, description: currentDescription} = texts[currentTextsIndex % texts.length];
97
+
98
+ return (
99
+ <ResponsiveLayout>
100
+ <div
101
+ // changing the key triggers the css animation for next texts
102
+ key={currentTextsIndex}
103
+ className={classnames(styles.loadingScreenText, {
104
+ [styles.loadingScreenTextAnimatedOut]: animateText && (!isLoading || isClosing),
105
+ })}
106
+ onTransitionEnd={handleOutTransitionEnd}
107
+ >
108
+ <Stack space={8}>
109
+ {currentTitle && (
110
+ <div className={animateText ? styles.loadingScreenTextAnimated : undefined}>
111
+ <Text
112
+ {...getTextSizes({textPreset: textPresets.loadingScreenTitle})}
113
+ textAlign="center"
114
+ weight="regular"
115
+ as="h1"
116
+ >
117
+ {currentTitle}
118
+ </Text>
119
+ </div>
120
+ )}
121
+ {currentDescription && (
122
+ <div
123
+ className={animateText ? styles.loadingScreenTextAnimated : undefined}
124
+ style={{animationDelay: '200ms'}}
125
+ >
126
+ <Text2 textAlign="center" regular as="p" color={vars.colors.textSecondary}>
127
+ {currentDescription}
128
+ </Text2>
129
+ </div>
130
+ )}
131
+ </Stack>
132
+ </div>
133
+ </ResponsiveLayout>
134
+ );
135
+ };
136
+
137
+ type Props = {
138
+ variant: 'default' | 'brand';
139
+ isLoading?: boolean;
140
+ animateText?: boolean;
141
+ animateBackground?: boolean;
142
+ onClose?: () => void;
143
+ children?: React.ReactNode;
144
+ dataAttributes?: DataAttributes;
145
+ } & TextProps;
146
+
147
+ const BaseLoadingScreen = React.forwardRef<HTMLDivElement, Props>(
148
+ (
149
+ {
150
+ variant,
151
+ children,
152
+ isLoading = true,
153
+ animateText,
154
+ animateBackground,
155
+ onClose,
156
+ dataAttributes,
157
+ title,
158
+ description,
159
+ texts = [{title, description}],
160
+ },
161
+ ref
162
+ ) => {
163
+ const [inAnimationEnd, setInAnimationEnd] = React.useState(false);
164
+
165
+ // just in case the animationend event is not fired
166
+ React.useEffect(() => {
167
+ if (!isLoading) {
168
+ return;
169
+ }
170
+ const timeout = setTimeout(() => {
171
+ setInAnimationEnd(true);
172
+ }, styles.inOutAnimationMs);
173
+ return () => {
174
+ clearTimeout(timeout);
175
+ };
176
+ }, [isLoading]);
177
+
178
+ const closeCalled = React.useRef(false);
179
+
180
+ const handleTransitionEnd = React.useCallback(() => {
181
+ if (!isLoading && !closeCalled.current) {
182
+ closeCalled.current = true;
183
+ onClose?.();
184
+ }
185
+ }, [isLoading, onClose]);
186
+
187
+ React.useEffect(() => {
188
+ if (isLoading) {
189
+ return;
190
+ }
191
+ if (!animateText && !animateBackground) {
192
+ onClose?.();
193
+ return;
194
+ }
195
+
196
+ // just in case the transitionend event is not fired
197
+ const timeout = setTimeout(() => {
198
+ handleTransitionEnd();
199
+ }, styles.inOutAnimationMs);
200
+ return () => {
201
+ clearTimeout(timeout);
202
+ };
203
+ }, [animateBackground, animateText, handleTransitionEnd, isLoading, onClose]);
204
+
205
+ const centerContent = !children;
206
+
207
+ useSetOverscrollColor(variant === 'brand' ? {topColor: vars.colors.backgroundBrandTop} : {});
208
+
209
+ return (
210
+ <ThemeVariant variant={variant}>
211
+ <div
212
+ ref={ref}
213
+ {...getPrefixedDataAttributes(dataAttributes)}
214
+ className={classnames(styles.loadingScreen, styles.screenBackground[variant], {
215
+ [styles.screenBackgroundFadeOut]: !isLoading && animateBackground,
216
+ [styles.screenBackgroundAnimated]: animateBackground,
217
+ })}
218
+ style={{
219
+ justifyContent: centerContent ? 'center' : 'space-between',
220
+ }}
221
+ onAnimationEnd={() => {
222
+ setInAnimationEnd(true);
223
+ }}
224
+ onTransitionEnd={handleTransitionEnd}
225
+ >
226
+ {children ? (
227
+ <div className={styles.loadingScreenChildren}>{children}</div>
228
+ ) : (
229
+ <Spinner
230
+ delay="0s"
231
+ size={32}
232
+ color={variant === 'brand' ? vars.colors.inverse : undefined}
233
+ />
234
+ )}
235
+ <LoadingScreenTexts
236
+ animateText={animateText}
237
+ isLoading={isLoading}
238
+ texts={texts}
239
+ onClose={handleTransitionEnd}
240
+ />
241
+ {!centerContent && <div style={{height: 104}} />}
242
+ </div>
243
+ {/* needed for overscroll. TODO: review the case for brands with gradient like O2 */}
244
+ {isLoading && inAnimationEnd && <BackgroundColor isBrandVariant={variant === 'brand'} />}
245
+ </ThemeVariant>
246
+ );
247
+ }
248
+ );
249
+
250
+ type LoadingScreenProps = {
251
+ /** @deprecated use variant="brand" instead */
252
+ isInverse?: boolean;
253
+ variant?: 'default' | 'brand';
254
+ isLoading?: boolean;
255
+ onClose?: () => void;
256
+ children?: React.ReactNode;
257
+ dataAttributes?: DataAttributes;
258
+ } & TextProps;
259
+
260
+ export const LoadingScreen = React.forwardRef<HTMLDivElement, LoadingScreenProps>((props, ref) => {
261
+ return (
262
+ <BaseLoadingScreen
263
+ ref={ref}
264
+ {...props}
265
+ variant={props.variant ?? (props.isInverse ? 'brand' : 'default')}
266
+ dataAttributes={{'component-name': 'LoadingScreen', ...props.dataAttributes}}
267
+ animateBackground
268
+ />
269
+ );
270
+ });
271
+
272
+ type BrandLoadingAnimationProps = {
273
+ isLoading?: boolean;
274
+ onCloseStart?: () => void;
275
+ onCloseEnd?: () => void;
276
+ };
277
+
278
+ const PulseBrandLogoAnimation = ({isLoading, onCloseStart, onCloseEnd}: BrandLoadingAnimationProps) => {
279
+ const {texts, t} = useTheme();
280
+ const [pulse, setPulse] = React.useState(true);
281
+
282
+ const handleAnimationIteration = () => {
283
+ if (!isLoading) {
284
+ onCloseStart?.();
285
+ setPulse(false);
286
+ onCloseEnd?.();
287
+ }
288
+ };
289
+
290
+ return (
291
+ <div
292
+ className={classnames(styles.logo, {[styles.pulseLogo]: pulse})}
293
+ onAnimationIteration={handleAnimationIteration}
294
+ >
295
+ <ScreenReaderOnly>
296
+ <div>{texts.loading || t(tokens.loading)}</div>
297
+ </ScreenReaderOnly>
298
+ <Logo size={128} />
299
+ </div>
300
+ );
301
+ };
302
+
303
+ const VivinhoLoadingAnimation = React.lazy(() => import('./vivinho-loading-animation'));
304
+
305
+ const BrandLoadingAnimation = ({isLoading, onCloseStart, onCloseEnd}: BrandLoadingAnimationProps) => {
306
+ const {skinName} = useTheme();
307
+
308
+ if (skinName === VIVO_NEW_SKIN) {
309
+ return (
310
+ <React.Suspense fallback={null}>
311
+ <VivinhoLoadingAnimation
312
+ isLoading={isLoading}
313
+ onCloseStart={onCloseStart}
314
+ onCloseEnd={onCloseEnd}
315
+ />
316
+ </React.Suspense>
317
+ );
318
+ }
319
+ return (
320
+ <PulseBrandLogoAnimation isLoading={isLoading} onCloseStart={onCloseStart} onCloseEnd={onCloseEnd} />
321
+ );
322
+ };
323
+
324
+ type BrandLoadingScreenProps = {
325
+ isLoading?: boolean;
326
+ onClose?: () => void;
327
+ dataAttributes?: DataAttributes;
328
+ } & TextProps;
329
+
330
+ export const BrandLoadingScreen = React.forwardRef<HTMLDivElement, BrandLoadingScreenProps>(
331
+ ({isLoading = true, onClose, dataAttributes, ...textProps}, ref) => {
332
+ const {themeVariants} = useTheme();
333
+ const [isClosing, setIsClosing] = React.useState(false);
334
+ const logoClosedRef = React.useRef(false);
335
+ const textClosedRef = React.useRef(false);
336
+
337
+ const handleCloseStart = () => {
338
+ setIsClosing(true);
339
+ };
340
+
341
+ const handleCloseEnd = () => {
342
+ if (logoClosedRef.current && textClosedRef.current) {
343
+ onClose?.();
344
+ }
345
+ };
346
+
347
+ return (
348
+ <BaseLoadingScreen
349
+ ref={ref}
350
+ variant={
351
+ themeVariants.brandLoadingScreen === 'inverse' ||
352
+ themeVariants.brandLoadingScreen === 'brand'
353
+ ? 'brand'
354
+ : 'default'
355
+ }
356
+ {...textProps}
357
+ isLoading={isLoading || !isClosing}
358
+ onClose={() => {
359
+ textClosedRef.current = true;
360
+ handleCloseEnd();
361
+ }}
362
+ animateText
363
+ dataAttributes={{'component-name': 'BrandLoadingScreen', ...dataAttributes}}
364
+ >
365
+ <BrandLoadingAnimation
366
+ isLoading={isLoading}
367
+ onCloseStart={handleCloseStart}
368
+ onCloseEnd={() => {
369
+ logoClosedRef.current = true;
370
+ handleCloseEnd();
371
+ }}
372
+ />
373
+ </BaseLoadingScreen>
374
+ );
375
+ }
376
+ );
@@ -0,0 +1,30 @@
1
+ import * as React from 'react';
2
+ import * as styles from './logo.css';
3
+ import {calcInlineVars} from './logo-common';
4
+ import {applyCssVars} from './utils/css';
5
+
6
+ import type {ByBreakpoint} from './utils/types';
7
+ import type {LogoType} from './logo-common';
8
+
9
+ type Props = {
10
+ size: ByBreakpoint<number>;
11
+ type: LogoType;
12
+ children: React.ReactNode;
13
+ };
14
+
15
+ const BlauLogoShell = ({size, type, children}: Props): JSX.Element => {
16
+ const viewBox = type === 'imagotype' ? '0 0 138 72' : type === 'vertical' ? '0 0 73 72' : '0 0 72 72';
17
+
18
+ return (
19
+ <svg
20
+ className={styles.svg}
21
+ style={applyCssVars(calcInlineVars(size))}
22
+ viewBox={viewBox}
23
+ role="presentation"
24
+ >
25
+ {children}
26
+ </svg>
27
+ );
28
+ };
29
+
30
+ export default BlauLogoShell;
@@ -0,0 +1,60 @@
1
+ import * as React from 'react';
2
+ import {getBlauSkin} from './skins/blau';
3
+
4
+ import type {LogoImageProps} from './logo-common';
5
+
6
+ const BlauLogoImage = ({type, isDarkMode, themeVariant, color: colorProp}: LogoImageProps): JSX.Element => {
7
+ const {colors} = getBlauSkin();
8
+ const color =
9
+ colorProp ||
10
+ (isDarkMode
11
+ ? colors.brand
12
+ : {
13
+ default: colors.brand,
14
+ alternative: colors.brand,
15
+ brand: colors.neutralHighNegative,
16
+ media: colors.neutralHighNegative,
17
+ negative: colors.neutralHighNegative,
18
+ }[themeVariant]);
19
+ const colorSecondary =
20
+ colorProp ||
21
+ (isDarkMode
22
+ ? colors.promo
23
+ : {
24
+ default: colors.promo,
25
+ alternative: colors.promo,
26
+ brand: colors.promo,
27
+ media: colors.promo,
28
+ negative: colors.neutralHighNegative,
29
+ }[themeVariant]);
30
+
31
+ if (type === 'vertical') {
32
+ return (
33
+ <g fill={color}>
34
+ <path d="M56.42 52.2003H18.2V63.0003H56.42V52.2003Z" fill={colorSecondary} />
35
+ <path d="M38.8069 36.431H35.0651V31.658H38.8069C40.7615 31.658 41.5432 32.865 41.5432 34.0171C41.5432 35.2789 40.7615 36.431 38.8069 36.431ZM35.121 19.0948H37.9132C40.6496 19.0948 40.4821 23.0447 37.9132 23.0447H35.121V19.0948ZM49.6963 26.2267C52.7119 25.1844 54.3312 22.3864 54.3871 19.369C54.5546 13.7182 50.0316 9 44.3355 9H18.2V19.0398H21.8859V36.7602H18.2V46.8H44.2237C50.925 46.8 56.1188 42.3013 56.3981 35.8276C56.6773 30.89 54.2756 27.9275 49.6963 26.2267Z" />
36
+ </g>
37
+ );
38
+ }
39
+
40
+ if (type === 'imagotype') {
41
+ return (
42
+ <g fill={color}>
43
+ <path d="M135.557 54.5729H6.16162V65.184H135.557V54.5729Z" fill={colorSecondary} />
44
+ <path d="M37.7269 25.9921C42.1878 27.7129 44.5575 30.6343 44.2869 35.6127C44.0163 42.0913 38.9696 46.5732 32.3623 46.5732H6.83155V36.5296H10.4229V18.8042H6.83155V8.75793H32.47C38.0579 8.75793 42.5215 13.5131 42.3507 19.1299C42.2929 22.1512 40.6877 24.9701 37.7269 25.9921ZM26.1359 17.9477H22.7942V23.2703H26.1359C29.4277 23.2703 29.6484 17.9477 26.1359 17.9477ZM30.3393 34.0259C30.3393 32.4812 29.3437 30.9443 27.0449 30.9443H22.7915V37.1076H27.0423C29.2806 37.1102 30.3393 35.5917 30.3393 34.0259Z" />
45
+ <path d="M45.2905 8.75794V18.8042H48.8477V46.5732H61.8442V8.75794H45.2905Z" />
46
+ <path d="M99.2576 46.5732H87.0676L86.7996 43.7674C84.8108 46.1975 81.8553 47.0592 79.0705 47.117C60.5884 47.3325 60.5884 16.6525 79.0705 16.8627C81.8553 16.8627 84.8108 17.727 86.7996 20.1572L87.0676 17.3435H99.2576V46.5732ZM86.3188 31.9846C86.3188 26.3126 78.3191 26.3704 78.3191 31.9846C78.3191 37.6067 86.3188 37.6619 86.3188 31.9846Z" />
47
+ <path d="M134.858 17.3435H121.972V33.1222C121.972 35.2844 120.359 36.309 118.748 36.309C117.13 36.309 115.843 35.2345 115.843 33.1774V17.3435H102.949V33.2378C102.949 41.072 106.009 46.9043 114.661 47.1171C117.506 47.1696 120.467 46.2501 122.5 43.6571L122.773 46.5733L134.861 46.5917L134.858 17.3435Z" />
48
+ </g>
49
+ );
50
+ }
51
+
52
+ return (
53
+ <g fill={color}>
54
+ <path d="M55.8 52.2003H18V63.0003H55.8V52.2003Z" fill={colorSecondary} />
55
+ <path d="M38.3805 36.431H34.6798V31.658H38.3805C40.3136 31.658 41.0868 32.865 41.0868 34.0171C41.0868 35.2789 40.3136 36.431 38.3805 36.431ZM34.7351 19.0948H37.4966C40.2029 19.0948 40.0373 23.0447 37.4966 23.0447H34.7351V19.0948ZM49.1503 26.2267C52.1327 25.1844 53.7342 22.3864 53.7895 19.369C53.9552 13.7182 49.4819 9 43.8483 9H18V19.0398H21.6454V36.7602H18V46.8H43.7377C50.3654 46.8 55.5022 42.3013 55.7784 35.8276C56.0545 30.89 53.6792 27.9275 49.1503 26.2267Z" />
56
+ </g>
57
+ );
58
+ };
59
+
60
+ export default BlauLogoImage;