@telefonica/mistica 16.58.0 → 16.59.0-beta.1

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 (537) hide show
  1. package/css/mistica.css +1 -1
  2. package/dist/accordion.css-mistica.js +16 -16
  3. package/dist/align.css-mistica.js +2 -2
  4. package/dist/autocomplete.css-mistica.js +6 -6
  5. package/dist/avatar.css-mistica.js +3 -3
  6. package/dist/badge.css-mistica.js +7 -7
  7. package/dist/box.css-mistica.js +15 -15
  8. package/dist/boxed.css-mistica.js +31 -31
  9. package/dist/button-group.css-mistica.js +10 -10
  10. package/dist/button-layout.css-mistica.js +21 -21
  11. package/dist/button.css-mistica.js +51 -51
  12. package/dist/callout.css-mistica.js +16 -16
  13. package/dist/card-internal.css-mistica.js +38 -38
  14. package/dist/carousel.css-mistica.js +18 -18
  15. package/dist/checkbox.css-mistica.js +21 -21
  16. package/dist/chip.css-mistica.js +30 -30
  17. package/dist/circle.css-mistica.js +2 -2
  18. package/dist/community/advanced-data-card.css-mistica.js +26 -26
  19. package/dist/community/blocks.css-mistica.js +3 -3
  20. package/dist/community/example-component.css-mistica.js +2 -2
  21. package/dist/counter.css-mistica.js +12 -12
  22. package/dist/cover-hero.css-mistica.js +16 -16
  23. package/dist/credit-card-number-field.css-mistica.js +6 -6
  24. package/dist/date-field.css-mistica.js +1 -1
  25. package/dist/date-time-picker.css-mistica.js +2 -2
  26. package/dist/dialog.css-mistica.js +15 -15
  27. package/dist/divider.css-mistica.js +5 -5
  28. package/dist/double-field.css-mistica.js +4 -4
  29. package/dist/drawer.css-mistica.js +15 -15
  30. package/dist/empty-state-card.css-mistica.js +4 -4
  31. package/dist/empty-state.css-mistica.js +14 -14
  32. package/dist/fade-in.css-mistica.js +1 -1
  33. package/dist/feedback.css-mistica.js +14 -14
  34. package/dist/file-upload.css-mistica.js +14 -14
  35. package/dist/fixed-footer-layout.css-mistica.js +12 -12
  36. package/dist/form.css-mistica.js +2 -2
  37. package/dist/grid-layout.css-mistica.js +9 -9
  38. package/dist/grid.css-mistica.js +147 -147
  39. package/dist/header.css-mistica.js +5 -5
  40. package/dist/hero.css-mistica.js +11 -11
  41. package/dist/horizontal-scroll.css-mistica.js +3 -3
  42. package/dist/icon-button.css-mistica.js +66 -66
  43. package/dist/icons/icon-chevron.css-mistica.js +6 -6
  44. package/dist/icons/icon-error.css-mistica.js +3 -3
  45. package/dist/image.css-mistica.js +11 -11
  46. package/dist/inline.css-mistica.js +16 -16
  47. package/dist/list.css-mistica.js +15 -15
  48. package/dist/loading-bar.css-mistica.js +5 -5
  49. package/dist/loading-screen.css-mistica.js +15 -15
  50. package/dist/logo.css-mistica.js +9 -9
  51. package/dist/menu.css-mistica.js +24 -24
  52. package/dist/mosaic.css-mistica.js +3 -3
  53. package/dist/navigation-bar.css-mistica.js +45 -45
  54. package/dist/navigation-breadcrumbs.css-mistica.js +5 -5
  55. package/dist/package-version.js +2 -2
  56. package/dist/pin-field.css-mistica.js +10 -10
  57. package/dist/popover.css-mistica.js +2 -2
  58. package/dist/progress-bar.css-mistica.js +12 -12
  59. package/dist/radio-button.css-mistica.js +33 -33
  60. package/dist/rating.css-mistica.js +12 -12
  61. package/dist/responsive-layout.css-mistica.js +20 -20
  62. package/dist/screen-reader-only.css-mistica.js +2 -2
  63. package/dist/select.css-mistica.js +29 -29
  64. package/dist/sheet-action-row.css-mistica.js +2 -2
  65. package/dist/sheet-common.css-mistica.js +16 -16
  66. package/dist/sheet-info.css-mistica.js +4 -4
  67. package/dist/skeletons.css-mistica.js +12 -12
  68. package/dist/skins/skin-contract.css-mistica.js +686 -686
  69. package/dist/skip-link.css-mistica.js +3 -3
  70. package/dist/slider.css-mistica.js +28 -28
  71. package/dist/snackbar.css-mistica.js +16 -16
  72. package/dist/spinner.css-mistica.js +5 -5
  73. package/dist/square.css-mistica.js +2 -2
  74. package/dist/stack.css-mistica.js +9 -9
  75. package/dist/stacking-group.css-mistica.js +2 -2
  76. package/dist/stepper.css-mistica.js +16 -16
  77. package/dist/switch-component.css-mistica.js +53 -53
  78. package/dist/table.css-mistica.js +24 -24
  79. package/dist/tabs.css-mistica.js +30 -30
  80. package/dist/tag.css-mistica.js +5 -5
  81. package/dist/text-field-base.css-mistica.js +30 -30
  82. package/dist/text-field-components.css-mistica.js +20 -20
  83. package/dist/text-link.css-mistica.js +10 -10
  84. package/dist/text.css-mistica.js +13 -13
  85. package/dist/theme-context.css-mistica.js +2 -2
  86. package/dist/timeline.css-mistica.js +18 -18
  87. package/dist/timer.css-mistica.js +13 -13
  88. package/dist/tooltip.css-mistica.js +12 -12
  89. package/dist/touchable.css-mistica.js +5 -5
  90. package/dist/utils/aspect-ratio-support.css-mistica.js +7 -7
  91. package/dist/video.css-mistica.js +2 -2
  92. package/dist/vivinho-loading-animation/vivinho-loading-animation.css-mistica.js +3 -3
  93. package/dist-es/accordion.css-mistica.js +7 -7
  94. package/dist-es/align.css-mistica.js +2 -2
  95. package/dist-es/autocomplete.css-mistica.js +2 -2
  96. package/dist-es/avatar.css-mistica.js +2 -2
  97. package/dist-es/badge.css-mistica.js +2 -2
  98. package/dist-es/box.css-mistica.js +15 -15
  99. package/dist-es/boxed.css-mistica.js +25 -25
  100. package/dist-es/button-group.css-mistica.js +2 -2
  101. package/dist-es/button-layout.css-mistica.js +16 -16
  102. package/dist-es/button.css-mistica.js +38 -38
  103. package/dist-es/callout.css-mistica.js +12 -12
  104. package/dist-es/card-internal.css-mistica.js +20 -20
  105. package/dist-es/carousel.css-mistica.js +10 -10
  106. package/dist-es/checkbox.css-mistica.js +14 -14
  107. package/dist-es/chip.css-mistica.js +17 -17
  108. package/dist-es/circle.css-mistica.js +2 -2
  109. package/dist-es/community/advanced-data-card.css-mistica.js +7 -7
  110. package/dist-es/community/blocks.css-mistica.js +2 -2
  111. package/dist-es/community/example-component.css-mistica.js +2 -2
  112. package/dist-es/counter.css-mistica.js +2 -2
  113. package/dist-es/cover-hero.css-mistica.js +4 -4
  114. package/dist-es/credit-card-number-field.css-mistica.js +4 -4
  115. package/dist-es/date-field.css-mistica.js +1 -1
  116. package/dist-es/date-time-picker.css-mistica.js +2 -2
  117. package/dist-es/dialog.css-mistica.js +5 -5
  118. package/dist-es/divider.css-mistica.js +5 -5
  119. package/dist-es/double-field.css-mistica.js +4 -4
  120. package/dist-es/drawer.css-mistica.js +2 -2
  121. package/dist-es/empty-state-card.css-mistica.js +2 -2
  122. package/dist-es/empty-state.css-mistica.js +7 -7
  123. package/dist-es/fade-in.css-mistica.js +1 -1
  124. package/dist-es/feedback.css-mistica.js +2 -2
  125. package/dist-es/file-upload.css-mistica.js +8 -8
  126. package/dist-es/fixed-footer-layout.css-mistica.js +4 -4
  127. package/dist-es/form.css-mistica.js +2 -2
  128. package/dist-es/grid-layout.css-mistica.js +4 -4
  129. package/dist-es/grid.css-mistica.js +127 -127
  130. package/dist-es/header.css-mistica.js +2 -2
  131. package/dist-es/hero.css-mistica.js +4 -4
  132. package/dist-es/horizontal-scroll.css-mistica.js +2 -2
  133. package/dist-es/icon-button.css-mistica.js +56 -56
  134. package/dist-es/icons/icon-chevron.css-mistica.js +4 -4
  135. package/dist-es/icons/icon-error.css-mistica.js +2 -2
  136. package/dist-es/image.css-mistica.js +4 -4
  137. package/dist-es/inline.css-mistica.js +10 -10
  138. package/dist-es/list.css-mistica.js +2 -2
  139. package/dist-es/loading-bar.css-mistica.js +2 -2
  140. package/dist-es/loading-screen.css-mistica.js +5 -5
  141. package/dist-es/logo.css-mistica.js +7 -7
  142. package/dist-es/menu.css-mistica.js +15 -15
  143. package/dist-es/mosaic.css-mistica.js +2 -2
  144. package/dist-es/navigation-bar.css-mistica.js +20 -20
  145. package/dist-es/navigation-breadcrumbs.css-mistica.js +2 -2
  146. package/dist-es/package-version.js +2 -2
  147. package/dist-es/pin-field.css-mistica.js +2 -2
  148. package/dist-es/popover.css-mistica.js +2 -2
  149. package/dist-es/progress-bar.css-mistica.js +8 -8
  150. package/dist-es/radio-button.css-mistica.js +25 -25
  151. package/dist-es/rating.css-mistica.js +4 -4
  152. package/dist-es/responsive-layout.css-mistica.js +7 -7
  153. package/dist-es/screen-reader-only.css-mistica.js +2 -2
  154. package/dist-es/select.css-mistica.js +20 -20
  155. package/dist-es/sheet-action-row.css-mistica.js +2 -2
  156. package/dist-es/sheet-common.css-mistica.js +2 -2
  157. package/dist-es/sheet-info.css-mistica.js +2 -2
  158. package/dist-es/skeletons.css-mistica.js +8 -8
  159. package/dist-es/skins/skin-contract.css-mistica.js +686 -686
  160. package/dist-es/skip-link.css-mistica.js +2 -2
  161. package/dist-es/slider.css-mistica.js +20 -20
  162. package/dist-es/snackbar.css-mistica.js +5 -5
  163. package/dist-es/spinner.css-mistica.js +2 -2
  164. package/dist-es/square.css-mistica.js +2 -2
  165. package/dist-es/stack.css-mistica.js +7 -7
  166. package/dist-es/stacking-group.css-mistica.js +2 -2
  167. package/dist-es/stepper.css-mistica.js +4 -4
  168. package/dist-es/style.css +1 -1
  169. package/dist-es/switch-component.css-mistica.js +41 -41
  170. package/dist-es/table.css-mistica.js +11 -11
  171. package/dist-es/tabs.css-mistica.js +21 -21
  172. package/dist-es/tag.css-mistica.js +2 -2
  173. package/dist-es/text-field-base.css-mistica.js +17 -17
  174. package/dist-es/text-field-components.css-mistica.js +4 -4
  175. package/dist-es/text-link.css-mistica.js +9 -9
  176. package/dist-es/text.css-mistica.js +8 -8
  177. package/dist-es/theme-context.css-mistica.js +2 -2
  178. package/dist-es/timeline.css-mistica.js +11 -11
  179. package/dist-es/timer.css-mistica.js +7 -7
  180. package/dist-es/tooltip.css-mistica.js +3 -3
  181. package/dist-es/touchable.css-mistica.js +2 -2
  182. package/dist-es/utils/aspect-ratio-support.css-mistica.js +4 -4
  183. package/dist-es/video.css-mistica.js +2 -2
  184. package/dist-es/vivinho-loading-animation/vivinho-loading-animation.css-mistica.js +2 -2
  185. package/doc/llms.md +60 -1
  186. package/doc/patterns.md +22 -20
  187. package/package.json +13 -1
  188. package/src/accordion.css.ts +121 -0
  189. package/src/accordion.tsx +366 -0
  190. package/src/align.css.ts +7 -0
  191. package/src/align.tsx +32 -0
  192. package/src/autocomplete.css.ts +62 -0
  193. package/src/autocomplete.tsx +239 -0
  194. package/src/avatar.css.ts +14 -0
  195. package/src/avatar.tsx +120 -0
  196. package/src/badge.css.ts +51 -0
  197. package/src/badge.tsx +79 -0
  198. package/src/box.css.ts +51 -0
  199. package/src/box.tsx +114 -0
  200. package/src/boxed.css.ts +132 -0
  201. package/src/boxed.tsx +153 -0
  202. package/src/button-fixed-footer-layout.tsx +62 -0
  203. package/src/button-group.css.ts +75 -0
  204. package/src/button-group.tsx +91 -0
  205. package/src/button-layout.css.ts +162 -0
  206. package/src/button-layout.tsx +91 -0
  207. package/src/button.css.ts +758 -0
  208. package/src/button.tsx +632 -0
  209. package/src/callout.css.ts +50 -0
  210. package/src/callout.tsx +147 -0
  211. package/src/card-cover.tsx +242 -0
  212. package/src/card-data.tsx +152 -0
  213. package/src/card-internal.css.ts +271 -0
  214. package/src/card-internal.tsx +1724 -0
  215. package/src/card-media.tsx +157 -0
  216. package/src/card-naked.tsx +63 -0
  217. package/src/carousel.css.ts +522 -0
  218. package/src/carousel.tsx +1300 -0
  219. package/src/checkbox.css.ts +94 -0
  220. package/src/checkbox.tsx +192 -0
  221. package/src/chip.css.ts +204 -0
  222. package/src/chip.tsx +191 -0
  223. package/src/circle.css.ts +14 -0
  224. package/src/circle.tsx +52 -0
  225. 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
  226. 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
  227. 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
  228. 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
  229. 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
  230. 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
  231. 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
  232. 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
  233. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-extras-0-1-snap.png +0 -0
  234. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-extras-1-1-snap.png +0 -0
  235. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-extras-3-1-snap.png +0 -0
  236. 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
  237. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-inside-carousel-1-snap.png +0 -0
  238. 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
  239. package/src/community/__screenshot_tests__/__image_snapshots__/blocks-screenshot-test-tsx-blocks-highlighted-value-block-1-snap.png +0 -0
  240. package/src/community/__screenshot_tests__/__image_snapshots__/blocks-screenshot-test-tsx-blocks-information-block-1-snap.png +0 -0
  241. package/src/community/__screenshot_tests__/__image_snapshots__/blocks-screenshot-test-tsx-blocks-progress-block-1-snap.png +0 -0
  242. package/src/community/__screenshot_tests__/__image_snapshots__/blocks-screenshot-test-tsx-blocks-progress-block-2-snap.png +0 -0
  243. package/src/community/__screenshot_tests__/__image_snapshots__/blocks-screenshot-test-tsx-blocks-row-block-1-snap.png +0 -0
  244. package/src/community/__screenshot_tests__/__image_snapshots__/blocks-screenshot-test-tsx-blocks-simple-block-1-snap.png +0 -0
  245. package/src/community/__screenshot_tests__/__image_snapshots__/blocks-screenshot-test-tsx-blocks-value-block-1-snap.png +0 -0
  246. package/src/community/__screenshot_tests__/advanced-data-card-screenshot-test.tsx +84 -0
  247. package/src/community/__screenshot_tests__/blocks-screenshot-test.tsx +72 -0
  248. package/src/community/__stories__/advanced-data-card-carousel-story.tsx +66 -0
  249. package/src/community/__stories__/advanced-data-card-story.tsx +158 -0
  250. package/src/community/__stories__/blocks-story.tsx +272 -0
  251. package/src/community/__stories__/example-component-story.tsx +15 -0
  252. package/src/community/__stories__/index-story.tsx +154 -0
  253. package/src/community/__type_tests__/advanced-data-card-type-test.tsx +40 -0
  254. package/src/community/advanced-data-card.css.ts +271 -0
  255. package/src/community/advanced-data-card.tsx +431 -0
  256. package/src/community/blocks.css.ts +12 -0
  257. package/src/community/blocks.tsx +290 -0
  258. package/src/community/example-component.css.ts +7 -0
  259. package/src/community/example-component.tsx +17 -0
  260. package/src/community/index.tsx +10 -0
  261. package/src/counter.css.ts +150 -0
  262. package/src/counter.tsx +215 -0
  263. package/src/cover-hero-media.tsx +39 -0
  264. package/src/cover-hero.css.ts +133 -0
  265. package/src/cover-hero.tsx +262 -0
  266. package/src/credit-card-expiration-field.tsx +187 -0
  267. package/src/credit-card-fields.tsx +56 -0
  268. package/src/credit-card-number-field.css.ts +47 -0
  269. package/src/credit-card-number-field.tsx +245 -0
  270. package/src/cvv-field.tsx +169 -0
  271. package/src/date-field.css.ts +14 -0
  272. package/src/date-field.tsx +130 -0
  273. package/src/date-time-field.tsx +141 -0
  274. package/src/date-time-picker.css.ts +126 -0
  275. package/src/date-time-picker.tsx +188 -0
  276. package/src/decimal-field.tsx +160 -0
  277. package/src/desktop-container-type-context.tsx +15 -0
  278. package/src/dialog-context.tsx +81 -0
  279. package/src/dialog.css.ts +155 -0
  280. package/src/dialog.tsx +423 -0
  281. package/src/divider.css.ts +10 -0
  282. package/src/divider.tsx +11 -0
  283. package/src/double-field.css.ts +33 -0
  284. package/src/double-field.tsx +71 -0
  285. package/src/drawer.css.ts +123 -0
  286. package/src/drawer.tsx +304 -0
  287. package/src/email-field.tsx +76 -0
  288. package/src/empty-state-card.css.ts +40 -0
  289. package/src/empty-state-card.tsx +92 -0
  290. package/src/empty-state.css.ts +119 -0
  291. package/src/empty-state.tsx +141 -0
  292. package/src/fade-in.css.ts +12 -0
  293. package/src/fade-in.tsx +40 -0
  294. package/src/feedback.css.ts +119 -0
  295. package/src/feedback.tsx +432 -0
  296. package/src/file-upload.css.ts +156 -0
  297. package/src/file-upload.tsx +612 -0
  298. package/src/fixed-footer-layout.css.ts +96 -0
  299. package/src/fixed-footer-layout.tsx +215 -0
  300. package/src/fixed-to-top.tsx +21 -0
  301. package/src/focus-trap.tsx +17 -0
  302. package/src/form-context.tsx +198 -0
  303. package/src/form.css.ts +5 -0
  304. package/src/form.tsx +287 -0
  305. package/src/grid-layout.css.ts +68 -0
  306. package/src/grid-layout.tsx +201 -0
  307. package/src/grid.css.ts +203 -0
  308. package/src/grid.tsx +241 -0
  309. package/src/header.css.ts +30 -0
  310. package/src/header.tsx +319 -0
  311. package/src/hero.css.ts +71 -0
  312. package/src/hero.tsx +318 -0
  313. package/src/hooks.tsx +313 -0
  314. package/src/horizontal-scroll.css.ts +43 -0
  315. package/src/horizontal-scroll.tsx +18 -0
  316. package/src/iban-field.tsx +218 -0
  317. package/src/icon-button.css.ts +561 -0
  318. package/src/icon-button.tsx +221 -0
  319. package/src/icons/__stories__/mistica-icons-story.tsx +192 -0
  320. package/src/icons/icon-amex.tsx +40 -0
  321. package/src/icons/icon-chevron.css.ts +23 -0
  322. package/src/icons/icon-chevron.tsx +150 -0
  323. package/src/icons/icon-cvv-amex.tsx +31 -0
  324. package/src/icons/icon-cvv-visa-mc.tsx +31 -0
  325. package/src/icons/icon-error.css.ts +27 -0
  326. package/src/icons/icon-error.tsx +207 -0
  327. package/src/icons/icon-info.tsx +86 -0
  328. package/src/icons/icon-mastercard.tsx +36 -0
  329. package/src/icons/icon-success-vivo-new.tsx +51 -0
  330. package/src/icons/icon-success-vivo.tsx +36 -0
  331. package/src/icons/icon-success.tsx +211 -0
  332. package/src/icons/icon-visa.tsx +32 -0
  333. package/src/image.css.ts +48 -0
  334. package/src/image.tsx +345 -0
  335. package/src/index.tsx +2466 -0
  336. package/src/inline.css.ts +131 -0
  337. package/src/inline.tsx +135 -0
  338. package/src/integer-field.tsx +93 -0
  339. package/src/list.css.ts +281 -0
  340. package/src/list.tsx +963 -0
  341. package/src/loading-bar.css.ts +69 -0
  342. package/src/loading-bar.tsx +25 -0
  343. package/src/loading-screen.css.ts +114 -0
  344. package/src/loading-screen.tsx +376 -0
  345. package/src/logo-blau-shell.tsx +30 -0
  346. package/src/logo-blau.tsx +60 -0
  347. package/src/logo-common.tsx +29 -0
  348. package/src/logo-esimflag-shell.tsx +30 -0
  349. package/src/logo-esimflag.tsx +56 -0
  350. package/src/logo-movistar-new-shell.tsx +30 -0
  351. package/src/logo-movistar-new.tsx +85 -0
  352. package/src/logo-movistar-shell.tsx +30 -0
  353. package/src/logo-movistar.tsx +63 -0
  354. package/src/logo-o2-new-shell.tsx +26 -0
  355. package/src/logo-o2-new.tsx +27 -0
  356. package/src/logo-o2-shell.tsx +26 -0
  357. package/src/logo-o2.tsx +27 -0
  358. package/src/logo-telefonica-shell.tsx +30 -0
  359. package/src/logo-telefonica.tsx +95 -0
  360. package/src/logo-tu-shell.tsx +26 -0
  361. package/src/logo-tu.tsx +28 -0
  362. package/src/logo-vivo-shell.tsx +30 -0
  363. package/src/logo-vivo.tsx +53 -0
  364. package/src/logo.css.ts +33 -0
  365. package/src/logo.tsx +313 -0
  366. package/src/master-detail-layout.tsx +28 -0
  367. package/src/maybe-dismissable.css.ts +37 -0
  368. package/src/maybe-dismissable.tsx +58 -0
  369. package/src/media-queries.css.ts +67 -0
  370. package/src/menu.css.ts +132 -0
  371. package/src/menu.tsx +468 -0
  372. package/src/meter.tsx +516 -0
  373. package/src/modal-context-provider.tsx +45 -0
  374. package/src/month-field.tsx +124 -0
  375. package/src/mosaic.css.ts +73 -0
  376. package/src/mosaic.tsx +205 -0
  377. package/src/navigation-bar.css.ts +558 -0
  378. package/src/navigation-bar.tsx +1637 -0
  379. package/src/navigation-breadcrumbs.css.ts +22 -0
  380. package/src/navigation-breadcrumbs.tsx +69 -0
  381. package/src/negative-box.tsx +15 -0
  382. package/src/nestable-context.tsx +139 -0
  383. package/src/overlay.tsx +86 -0
  384. package/src/overscroll-color-context.tsx +141 -0
  385. package/src/package-version.tsx +2 -0
  386. package/src/password-field.tsx +126 -0
  387. package/src/phone-number-field-lite.tsx +265 -0
  388. package/src/phone-number-field.tsx +171 -0
  389. package/src/pin-field.css.ts +90 -0
  390. package/src/pin-field.tsx +346 -0
  391. package/src/placeholder.tsx +41 -0
  392. package/src/popover.css.ts +8 -0
  393. package/src/popover.tsx +85 -0
  394. package/src/portal.tsx +43 -0
  395. package/src/progress-bar.css.ts +61 -0
  396. package/src/progress-bar.tsx +174 -0
  397. package/src/radio-button.css.ts +174 -0
  398. package/src/radio-button.tsx +322 -0
  399. package/src/rating.css.ts +128 -0
  400. package/src/rating.tsx +351 -0
  401. package/src/responsive-layout.css.ts +162 -0
  402. package/src/responsive-layout.tsx +106 -0
  403. package/src/screen-reader-only.css.ts +27 -0
  404. package/src/screen-reader-only.tsx +33 -0
  405. package/src/screen-size-context-provider.tsx +96 -0
  406. package/src/screen-size-context.tsx +23 -0
  407. package/src/search-field.tsx +126 -0
  408. package/src/select.css.ts +226 -0
  409. package/src/select.tsx +513 -0
  410. package/src/sheet-action-row.css.ts +33 -0
  411. package/src/sheet-actions-list.tsx +113 -0
  412. package/src/sheet-actions.tsx +95 -0
  413. package/src/sheet-common.css.ts +254 -0
  414. package/src/sheet-common.tsx +402 -0
  415. package/src/sheet-info.css.ts +19 -0
  416. package/src/sheet-info.tsx +127 -0
  417. package/src/sheet-native.tsx +189 -0
  418. package/src/sheet-radio-list.tsx +118 -0
  419. package/src/sheet-root.tsx +127 -0
  420. package/src/sheet-types.tsx +94 -0
  421. package/src/sheet-web.tsx +140 -0
  422. package/src/skeleton-base.tsx +38 -0
  423. package/src/skeletons.css.ts +56 -0
  424. package/src/skeletons.tsx +133 -0
  425. package/src/skins/blau.tsx +724 -0
  426. package/src/skins/constants.tsx +10 -0
  427. package/src/skins/defaults.tsx +104 -0
  428. package/src/skins/esimflag.tsx +728 -0
  429. package/src/skins/movistar-new.tsx +735 -0
  430. package/src/skins/movistar.tsx +740 -0
  431. package/src/skins/o2-new.tsx +731 -0
  432. package/src/skins/o2.tsx +727 -0
  433. package/src/skins/skin-contract.css.ts +380 -0
  434. package/src/skins/telefonica.tsx +768 -0
  435. package/src/skins/tu.tsx +741 -0
  436. package/src/skins/types/colors.tsx +286 -0
  437. package/src/skins/types/index.tsx +153 -0
  438. package/src/skins/utils.tsx +66 -0
  439. package/src/skins/vivo-new.tsx +745 -0
  440. package/src/skins/vivo.tsx +720 -0
  441. package/src/skip-link.css.ts +34 -0
  442. package/src/skip-link.tsx +52 -0
  443. package/src/slider.css.ts +181 -0
  444. package/src/slider.tsx +384 -0
  445. package/src/snackbar-context.tsx +98 -0
  446. package/src/snackbar-native.ts +37 -0
  447. package/src/snackbar.css.ts +176 -0
  448. package/src/snackbar.tsx +258 -0
  449. package/src/spinner.css.ts +66 -0
  450. package/src/spinner.tsx +136 -0
  451. package/src/sprinkles.css.ts +83 -0
  452. package/src/square.css.ts +15 -0
  453. package/src/square.tsx +55 -0
  454. package/src/stack.css.ts +44 -0
  455. package/src/stack.tsx +79 -0
  456. package/src/stacking-group.css.ts +15 -0
  457. package/src/stacking-group.tsx +82 -0
  458. package/src/stepper.css.ts +233 -0
  459. package/src/stepper.tsx +156 -0
  460. package/src/switch-component.css.ts +181 -0
  461. package/src/switch-component.tsx +187 -0
  462. package/src/tab-focus.tsx +68 -0
  463. package/src/table-actions-header.tsx +21 -0
  464. package/src/table-cell-text.tsx +35 -0
  465. package/src/table.css.ts +297 -0
  466. package/src/table.tsx +398 -0
  467. package/src/tabs.css.ts +212 -0
  468. package/src/tabs.tsx +263 -0
  469. package/src/tag.css.ts +42 -0
  470. package/src/tag.tsx +161 -0
  471. package/src/test-utils/environment/setup-ssr.tsx +10 -0
  472. package/src/test-utils/fail-test-on-console-error.tsx +22 -0
  473. package/src/test-utils/index.tsx +341 -0
  474. package/src/test-utils/setup-ssr-test-env.tsx +13 -0
  475. package/src/test-utils/ssr.tsx +197 -0
  476. package/src/text-field-base.css.ts +416 -0
  477. package/src/text-field-base.tsx +628 -0
  478. package/src/text-field-components.css.ts +159 -0
  479. package/src/text-field-components.tsx +225 -0
  480. package/src/text-field.tsx +118 -0
  481. package/src/text-link.css.ts +83 -0
  482. package/src/text-link.tsx +85 -0
  483. package/src/text-tokens.tsx +708 -0
  484. package/src/text.css.ts +60 -0
  485. package/src/text.tsx +516 -0
  486. package/src/theme-context-provider.tsx +370 -0
  487. package/src/theme-context.css.ts +3 -0
  488. package/src/theme-context.tsx +8 -0
  489. package/src/theme-variant-context.tsx +51 -0
  490. package/src/theme.tsx +184 -0
  491. package/src/time-field.tsx +99 -0
  492. package/src/timeline.css.ts +135 -0
  493. package/src/timeline.tsx +250 -0
  494. package/src/timer.css.ts +99 -0
  495. package/src/timer.tsx +420 -0
  496. package/src/title.tsx +119 -0
  497. package/src/tooltip-context-provider.tsx +57 -0
  498. package/src/tooltip.css.ts +106 -0
  499. package/src/tooltip.tsx +649 -0
  500. package/src/touchable.css.ts +56 -0
  501. package/src/touchable.tsx +355 -0
  502. package/src/types/font-face.d.ts +47 -0
  503. package/src/types/libs.d.ts +3 -0
  504. package/src/utils/__tests__/analytics-test.tsx +35 -0
  505. package/src/utils/__tests__/browser-test.tsx +28 -0
  506. package/src/utils/__tests__/dom-test.tsx +23 -0
  507. package/src/utils/__tests__/helpers-test.tsx +166 -0
  508. package/src/utils/analytics.tsx +28 -0
  509. package/src/utils/animation.tsx +201 -0
  510. package/src/utils/aspect-ratio-support.css.ts +28 -0
  511. package/src/utils/aspect-ratio-support.tsx +141 -0
  512. package/src/utils/browser.tsx +9 -0
  513. package/src/utils/color.tsx +46 -0
  514. package/src/utils/common.tsx +27 -0
  515. package/src/utils/credit-card.tsx +46 -0
  516. package/src/utils/css.tsx +25 -0
  517. package/src/utils/document-visibility.tsx +52 -0
  518. package/src/utils/dom.tsx +155 -0
  519. package/src/utils/environment.tsx +6 -0
  520. package/src/utils/headings.tsx +18 -0
  521. package/src/utils/helpers.tsx +182 -0
  522. package/src/utils/keys.tsx +8 -0
  523. package/src/utils/locale.tsx +27 -0
  524. package/src/utils/platform.tsx +94 -0
  525. package/src/utils/region-code.tsx +1 -0
  526. package/src/utils/renders-element.tsx +6 -0
  527. package/src/utils/time.tsx +22 -0
  528. package/src/utils/types.tsx +19 -0
  529. package/src/utils/utility-types.tsx +8 -0
  530. package/src/video.css.ts +11 -0
  531. package/src/video.tsx +355 -0
  532. package/src/vivinho-loading-animation/in-lottie.json +402 -0
  533. package/src/vivinho-loading-animation/index.tsx +90 -0
  534. package/src/vivinho-loading-animation/out-lottie.json +575 -0
  535. package/src/vivinho-loading-animation/pulse-lottie.json +551 -0
  536. package/src/vivinho-loading-animation/vivinho-loading-animation.css.ts +15 -0
  537. package/src/vivinho-loading-animation/wave-lottie.json +2829 -0
@@ -0,0 +1,155 @@
1
+ import {isServerSide} from './environment';
2
+
3
+ import type {DataAttributes} from './types';
4
+
5
+ /**
6
+ * Returns true if provided type is supported <input> type
7
+ */
8
+ export const isInputTypeSupported = (type: string): boolean => {
9
+ if (isServerSide()) {
10
+ return false;
11
+ }
12
+ const input = document.createElement('input');
13
+ input.setAttribute('type', type);
14
+ return input.type === type;
15
+ };
16
+
17
+ export const cancelEvent = (event: Event | React.SyntheticEvent): void => {
18
+ event.stopPropagation();
19
+ event.preventDefault();
20
+ };
21
+
22
+ export const createChangeEvent = (
23
+ target: HTMLInputElement,
24
+ value: string
25
+ ): React.ChangeEvent<HTMLInputElement> => {
26
+ const event = new Event('change') as any;
27
+ target.value = value;
28
+ return {...event, target, currentTarget: target};
29
+ };
30
+
31
+ /**
32
+ * Detect passive event listeners support
33
+ * See passiveeventlisteners.js at https://github.com/Modernizr/Modernizr/
34
+ */
35
+ let supportsPassive = false;
36
+ try {
37
+ const options = Object.defineProperty({}, 'passive', {
38
+ get() {
39
+ supportsPassive = true;
40
+ return undefined;
41
+ },
42
+ });
43
+ window.addEventListener('test' as any, () => {}, options);
44
+ } catch (e) {
45
+ // does not support passive event listeners :(
46
+ }
47
+
48
+ export const addPassiveEventListener = (
49
+ el: EventTarget,
50
+ eventName: string,
51
+ listener: (e: any) => void
52
+ ): void => el.addEventListener(eventName, listener, supportsPassive ? {passive: true} : false);
53
+
54
+ export const removePassiveEventListener = (
55
+ el: EventTarget,
56
+ eventName: string,
57
+ listener: (e: any) => void
58
+ ): void => el.removeEventListener(eventName, listener, false);
59
+
60
+ /**
61
+ * Prefixes given attributes with `data-`
62
+ *
63
+ * For example: `{foo: 'bar'}` => `{data-foo: 'bar'}`
64
+ */
65
+ export const getPrefixedDataAttributes = (attrs?: DataAttributes, componentName?: string): DataAttributes => {
66
+ const result: DataAttributes = componentName
67
+ ? // TODO: remove deprecated component-name in next major release
68
+ {'data-component-name': componentName, 'data-testid': componentName}
69
+ : {};
70
+ if (attrs) {
71
+ Object.keys(attrs).forEach((key) => {
72
+ result['data-' + key] = attrs[key];
73
+ });
74
+ }
75
+ return result;
76
+ };
77
+
78
+ type ScrollAxis = 'X' | 'Y';
79
+
80
+ const isScrollable = (el: Element, axis: ScrollAxis): boolean => {
81
+ const overflowKey: 'overflowX' | 'overflowY' = `overflow${axis}`;
82
+ const overflowValue = window.getComputedStyle(el)[overflowKey];
83
+ return ['auto', 'scroll', 'overlay'].includes(overflowValue);
84
+ };
85
+
86
+ export const getScrollableParentElement = (el?: HTMLElement | null, axis: ScrollAxis = 'Y'): HTMLElement => {
87
+ let result = el?.parentElement;
88
+ while (result && !isScrollable(result, axis)) {
89
+ result = result.parentElement;
90
+ }
91
+ return result || document.documentElement;
92
+ };
93
+
94
+ export const getScrollDistanceToBottom = (el: HTMLElement): number =>
95
+ el.scrollHeight - el.scrollTop - el.clientHeight;
96
+
97
+ export const hasScroll = (el: HTMLElement): boolean => el.scrollHeight > el.clientHeight;
98
+
99
+ type ResizeListener = (entries: Array<ResizeObserverEntry>, observer: ResizeObserver) => void;
100
+ export const listenResize = (element: Element, handler: ResizeListener): (() => void) => {
101
+ const getResizeObserverPromise = (): Promise<typeof window.ResizeObserver | null> => {
102
+ if (isServerSide()) {
103
+ return Promise.resolve(null);
104
+ }
105
+ return window.ResizeObserver
106
+ ? Promise.resolve(ResizeObserver)
107
+ : import(/* webpackChunkName: "@juggle/resize-observer" */ '@juggle/resize-observer').then(
108
+ (m: any) => m.ResizeObserver
109
+ );
110
+ };
111
+ let cancelled = false;
112
+ let resizeObserver: ResizeObserver | null = null;
113
+ getResizeObserverPromise().then((ResizeObserver) => {
114
+ if (!cancelled && ResizeObserver) {
115
+ resizeObserver = new ResizeObserver(handler);
116
+ resizeObserver.observe(element);
117
+ }
118
+ });
119
+
120
+ return () => {
121
+ cancelled = true;
122
+ if (resizeObserver) {
123
+ resizeObserver.disconnect();
124
+ }
125
+ };
126
+ };
127
+
128
+ const parseVarCall = (cssVar: string) => {
129
+ const [varName, fallback] = cssVar
130
+ .replace(/^var\(/, '')
131
+ .replace(/\)$/, '')
132
+ .split(/\s*,\s*(.*)/);
133
+ return {varName, fallback};
134
+ };
135
+
136
+ export const isCssVar = (cssVar: string): boolean => cssVar.startsWith('var(') || cssVar.startsWith('--');
137
+
138
+ export const getCssVarValue = (cssVar: string, element?: Element): string => {
139
+ if (!isCssVar(cssVar)) {
140
+ throw new Error(`Invalid css var: ${cssVar}`);
141
+ }
142
+
143
+ if (cssVar.startsWith('var(')) {
144
+ const {varName, fallback} = parseVarCall(cssVar);
145
+ const value = getCssVarValue(varName, element);
146
+ if (!value && fallback) {
147
+ if (!isCssVar(fallback)) {
148
+ return fallback;
149
+ }
150
+ return getCssVarValue(fallback, element);
151
+ }
152
+ return value;
153
+ }
154
+ return getComputedStyle(element ?? document.documentElement).getPropertyValue(cssVar);
155
+ };
@@ -0,0 +1,6 @@
1
+ export const isServerSide = (): boolean => typeof window === 'undefined';
2
+
3
+ export const isClientSide = (): boolean => !isServerSide();
4
+
5
+ export const isTouchableDevice = (): boolean =>
6
+ isClientSide() ? window.matchMedia('(pointer: coarse)').matches : false;
@@ -0,0 +1,18 @@
1
+ import type {HeadingType} from './types';
2
+
3
+ /**
4
+ * @returns {boolean} - Returns true if the first heading is bigger, false otherwise.
5
+ */
6
+ export const isBiggerHeading = (heading: HeadingType, otherHeading?: HeadingType): boolean => {
7
+ // In case headings are equal, we consider that the first one has more priority
8
+ if (!otherHeading || heading === otherHeading) {
9
+ return true;
10
+ }
11
+
12
+ if (heading === 'span') {
13
+ return false;
14
+ }
15
+
16
+ // Both are header tags
17
+ return heading < otherHeading;
18
+ };
@@ -0,0 +1,182 @@
1
+ /** These functions are copies of the ones located in webapp packages */
2
+
3
+ type Debounced<T> = T & {cancel: () => void; flush: () => void};
4
+
5
+ /**
6
+ * Creates a debounced function that delays invoking func until after wait milliseconds
7
+ * have elapsed since the last time the debounced function was invoked. The debounced function
8
+ * comes with a cancel method to cancel delayed func invocations and a flush method to immediately
9
+ * invoke them. The func is invoked with the last arguments provided to the debounced function.
10
+ * Subsequent calls to the debounced function return the result of the last func invocation.
11
+ */
12
+ export const debounce = <T extends (...args: Array<any>) => any>(
13
+ func: T,
14
+ wait: number,
15
+ options: {
16
+ leading?: boolean;
17
+ trailing?: boolean;
18
+ maxWait?: number;
19
+ } = {}
20
+ ): Debounced<T> => {
21
+ const waitTime = wait;
22
+ const leading = options.leading ?? false;
23
+ const trailing = options.trailing ?? true;
24
+ const maxWait = options.maxWait !== undefined ? Math.max(options.maxWait, waitTime) : undefined;
25
+
26
+ let currentArgs: Parameters<T> | undefined;
27
+ let lastInvokeTime = 0;
28
+ let lastCallTime = -1;
29
+ let result: any;
30
+
31
+ let timerId: ReturnType<typeof setTimeout> | undefined;
32
+
33
+ const invokeFunction = (time: number): any => {
34
+ lastInvokeTime = time;
35
+ if (currentArgs) {
36
+ result = func(...currentArgs);
37
+ }
38
+ currentArgs = undefined;
39
+ return result;
40
+ };
41
+
42
+ const shouldInvoke = (time: number): boolean => {
43
+ const timeSinceLastCall = time - lastCallTime;
44
+ const timeSinceLastInvoke = time - lastInvokeTime;
45
+
46
+ return (
47
+ lastCallTime < 0 ||
48
+ timeSinceLastCall >= wait ||
49
+ timeSinceLastCall < 0 ||
50
+ (maxWait !== undefined && timeSinceLastInvoke >= maxWait)
51
+ );
52
+ };
53
+
54
+ const remainingWait = (time: number): number => {
55
+ const timeSinceLastCall = time - lastCallTime;
56
+ const timeSinceLastInvoke = time - lastInvokeTime;
57
+ const timeWaiting = wait - timeSinceLastCall;
58
+ return maxWait !== undefined ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
59
+ };
60
+
61
+ const trailingEdge = (time: number): any => {
62
+ timerId = undefined;
63
+
64
+ if (trailing && currentArgs) {
65
+ return invokeFunction(time);
66
+ }
67
+
68
+ currentArgs = undefined;
69
+ return result;
70
+ };
71
+
72
+ const timerExpired = (): any => {
73
+ const time = Date.now();
74
+ if (shouldInvoke(time)) {
75
+ return trailingEdge(time);
76
+ }
77
+ timerId = setTimeout(timerExpired, remainingWait(time));
78
+ };
79
+
80
+ const leadingEdge = (time: number): any => {
81
+ lastInvokeTime = time;
82
+
83
+ timerId = setTimeout(timerExpired, waitTime);
84
+ return leading ? invokeFunction(time) : result;
85
+ };
86
+
87
+ const debounced = (...args: Parameters<T>) => {
88
+ const time = Date.now();
89
+ const isInvoking = shouldInvoke(time);
90
+
91
+ currentArgs = args;
92
+ lastCallTime = time;
93
+
94
+ if (isInvoking) {
95
+ if (timerId === undefined) {
96
+ return leadingEdge(lastCallTime);
97
+ }
98
+ if (maxWait !== undefined) {
99
+ timerId = setTimeout(timerExpired, waitTime);
100
+ return invokeFunction(lastCallTime);
101
+ }
102
+ }
103
+ if (timerId === undefined) {
104
+ timerId = setTimeout(timerExpired, waitTime);
105
+ }
106
+ return result;
107
+ };
108
+
109
+ debounced.cancel = (): void => {
110
+ if (timerId !== undefined) {
111
+ clearTimeout(timerId);
112
+ timerId = undefined;
113
+ }
114
+ lastInvokeTime = 0;
115
+ lastCallTime = -1;
116
+ currentArgs = undefined;
117
+ };
118
+
119
+ debounced.flush = (): any => {
120
+ return timerId === undefined ? result : trailingEdge(Date.now());
121
+ };
122
+
123
+ return debounced as Debounced<T>;
124
+ };
125
+
126
+ const isPrimitive = (v: unknown): v is string | number | undefined | null | boolean | symbol => {
127
+ if (v === null) {
128
+ return true;
129
+ }
130
+ if (typeof v === 'object' || typeof v === 'function') {
131
+ return false;
132
+ }
133
+ return true;
134
+ };
135
+
136
+ /**
137
+ * Performs a deep comparison between two values to determine if they are equivalent.
138
+ */
139
+ export const isEqual = (a: unknown, b: unknown): boolean => {
140
+ if (a === b) {
141
+ return true;
142
+ }
143
+
144
+ if (typeof a === 'number' && typeof b === 'number' && isNaN(a) && isNaN(b)) {
145
+ return true;
146
+ }
147
+
148
+ if (isPrimitive(a) || isPrimitive(b)) {
149
+ return false;
150
+ }
151
+
152
+ if (typeof a !== typeof b) {
153
+ return false;
154
+ }
155
+
156
+ if (typeof a === 'function') {
157
+ // no need to check typeof b === 'function' because of the previous check
158
+ return false;
159
+ }
160
+
161
+ if (Array.isArray(a) || Array.isArray(b)) {
162
+ if (Array.isArray(a) && Array.isArray(b)) {
163
+ return a.length === b.length && a.every((value, index) => isEqual(value, b[index]));
164
+ }
165
+ return false;
166
+ }
167
+
168
+ if (a instanceof Date || b instanceof Date) {
169
+ if (a instanceof Date && b instanceof Date) {
170
+ return a.getTime() === b.getTime();
171
+ }
172
+ return false;
173
+ }
174
+
175
+ const keysA = Object.keys(a as any);
176
+ const keysB = Object.keys(b as any);
177
+ if (keysA.length === keysB.length) {
178
+ return keysA.every((key) => isEqual((a as any)[key], (b as any)[key]));
179
+ }
180
+
181
+ return false;
182
+ };
@@ -0,0 +1,8 @@
1
+ export const LEFT = 'ArrowLeft';
2
+ export const UP = 'ArrowUp';
3
+ export const RIGHT = 'ArrowRight';
4
+ export const DOWN = 'ArrowDown';
5
+ export const ENTER = 'Enter';
6
+ export const ESC = 'Escape';
7
+ export const SPACE = ' ';
8
+ export const TAB = 'Tab';
@@ -0,0 +1,27 @@
1
+ export type Locale =
2
+ | 'ca-ES'
3
+ | 'en-US'
4
+ | 'en-GB'
5
+ | 'de-DE'
6
+ | 'es-AR'
7
+ | 'es-CO'
8
+ | 'es-EC'
9
+ | 'es-ES'
10
+ | 'es-MX'
11
+ | 'es-PE'
12
+ | 'es-UY'
13
+ | 'eu-ES'
14
+ | 'gl-ES'
15
+ | 'pt-BR';
16
+
17
+ const SUPPORTED_LANGUAGES = ['en', 'es', 'pt', 'de'] as const;
18
+
19
+ export type Language = (typeof SUPPORTED_LANGUAGES)[number];
20
+
21
+ export const localeToLanguage = (locale: Locale): Language => {
22
+ const lang = locale.split('-')[0] as Language;
23
+ if (SUPPORTED_LANGUAGES.includes(lang)) {
24
+ return lang;
25
+ }
26
+ return 'en';
27
+ };
@@ -0,0 +1,94 @@
1
+ import {isWebViewBridgeAvailable} from '@tef-novum/webview-bridge';
2
+
3
+ import type {Theme} from '../theme';
4
+
5
+ const getUserAgent = (platformOverrides: Theme['platformOverrides'] = {}): string => {
6
+ if (typeof self === 'undefined') {
7
+ return platformOverrides.userAgent ?? '';
8
+ }
9
+ return self.navigator?.userAgent ?? '';
10
+ };
11
+
12
+ export const isInsideNovumNativeApp = (platformOverrides: Theme['platformOverrides'] = {}): boolean => {
13
+ if (typeof platformOverrides.insideNovumNativeApp !== 'undefined') {
14
+ return platformOverrides.insideNovumNativeApp;
15
+ }
16
+ return isWebViewBridgeAvailable();
17
+ };
18
+
19
+ export const isRunningAcceptanceTest = (platformOverrides: Theme['platformOverrides'] = {}): boolean =>
20
+ getUserAgent(platformOverrides).includes('acceptance-test') && !process.env.SSR_TEST;
21
+
22
+ const isEdgeOrIE = Boolean(typeof self !== 'undefined' && (self as any).MSStream);
23
+
24
+ export const isAndroid = (platformOverrides: Theme['platformOverrides']): boolean => {
25
+ if (platformOverrides.platform === 'android') {
26
+ return true;
27
+ }
28
+
29
+ return getUserAgent(platformOverrides).toLowerCase().includes('android') && !isEdgeOrIE;
30
+ };
31
+
32
+ export const isIos = (platformOverrides: Theme['platformOverrides']): boolean => {
33
+ if (platformOverrides.platform === 'ios') {
34
+ return true;
35
+ }
36
+
37
+ // IE and Edge mobile browsers includes Android and iPhone in the user agent
38
+ if (/iPad|iPhone|iPod/.test(getUserAgent(platformOverrides)) && !isEdgeOrIE) {
39
+ return true;
40
+ }
41
+
42
+ // In iOS13, iPad uses the Mac OS user-agent, but we know it's an iOS device when it runs inside our
43
+ // native app and is not Android
44
+ if (isInsideNovumNativeApp(platformOverrides) && !isAndroid(platformOverrides)) {
45
+ return true;
46
+ }
47
+
48
+ return false;
49
+ };
50
+
51
+ /**
52
+ * Returns true if the browser is a safari browser:
53
+ * webview, mobile, desktop or a browser like Chrome for iOS which is just a safari with a skin
54
+ *
55
+ * Note that this function checks the navigator vendor. It doesn't use platformOverrides or userAgent.
56
+ */
57
+ export const isSafari = (): boolean => {
58
+ return navigator.vendor.includes('Apple');
59
+ };
60
+
61
+ export const isFirefox = (platformOverrides?: Theme['platformOverrides']): boolean =>
62
+ !!getUserAgent(platformOverrides).match(/Firefox\/([0-9]+)\./);
63
+
64
+ export const isChrome = (platformOverrides: Theme['platformOverrides']): boolean =>
65
+ !!getUserAgent(platformOverrides).match(/Chrom(e|ium)\/([0-9]+)\./);
66
+
67
+ const SEMVER_ZERO = '0.0.0';
68
+ export const getIosVersion = (platformOverrides: Theme['platformOverrides']): string => {
69
+ if (!isIos(platformOverrides)) {
70
+ return SEMVER_ZERO;
71
+ }
72
+ const raw = getUserAgent(platformOverrides).match(/OS ((\d+_?){1,3})[\s_]/);
73
+ if (!raw || !raw[1]) {
74
+ return SEMVER_ZERO;
75
+ }
76
+ const [major, minor = '0', patch = '0'] = raw[1].split('_');
77
+ return [major, minor, patch].join('.');
78
+ };
79
+
80
+ export const getPlatform = (
81
+ platformOverrides: Theme['platformOverrides'] = {}
82
+ ): 'ios' | 'android' | 'desktop' => {
83
+ const overridenPlatform = platformOverrides.platform;
84
+ if (overridenPlatform) {
85
+ return overridenPlatform;
86
+ }
87
+ if (isIos(platformOverrides)) {
88
+ return 'ios';
89
+ }
90
+ if (isAndroid(platformOverrides)) {
91
+ return 'android';
92
+ }
93
+ return 'desktop';
94
+ };
@@ -0,0 +1 @@
1
+ export type RegionCode = 'AR' | 'BR' | 'CO' | 'DE' | 'EC' | 'ES' | 'GB' | 'MX' | 'PE' | 'UY';
@@ -0,0 +1,6 @@
1
+ import type * as React from 'react';
2
+
3
+ export type RendersElement<T extends keyof JSX.IntrinsicElements | React.JSXElementConstructor<any>> =
4
+ React.ReactComponentElement<T>;
5
+ export type RendersNullableElement<T extends keyof JSX.IntrinsicElements | React.JSXElementConstructor<any>> =
6
+ React.ReactComponentElement<T> | null;
@@ -0,0 +1,22 @@
1
+ export const getLocalDateString = (date: Date): string => {
2
+ const yyyy = date.getFullYear();
3
+ const mm = String(date.getMonth() + 1).padStart(2, '0');
4
+ const dd = String(date.getDate()).padStart(2, '0');
5
+ return `${yyyy}-${mm}-${dd}`;
6
+ };
7
+
8
+ export const getLocalYearMonthString = (date: Date): string => {
9
+ const yyyy = date.getFullYear();
10
+ const mm = String(date.getMonth() + 1).padStart(2, '0');
11
+ return `${yyyy}-${mm}`;
12
+ };
13
+
14
+ export const getLocalTimeString = (date: Date): string => {
15
+ const h = String(date.getHours()).padStart(2, '0');
16
+ const m = String(date.getMinutes()).padStart(2, '0');
17
+ return `${h}:${m}`;
18
+ };
19
+
20
+ export const getLocalDateTimeString = (date: Date): string => {
21
+ return `${getLocalDateString(date)}T${getLocalTimeString(date)}`;
22
+ };
@@ -0,0 +1,19 @@
1
+ export type {RendersElement, RendersNullableElement} from './renders-element';
2
+
3
+ export type {TrackingEvent} from '@tef-novum/webview-bridge';
4
+
5
+ export type DataAttributes = {
6
+ [name: string]: string | number | boolean | undefined;
7
+ testid?: string;
8
+ };
9
+
10
+ export type IconProps = {
11
+ color?: string;
12
+ size?: string | number;
13
+ className?: string;
14
+ style?: React.CSSProperties;
15
+ };
16
+
17
+ export type ByBreakpoint<T> = T | {mobile: T; tablet?: T; desktop: T};
18
+
19
+ export type HeadingType = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'span';
@@ -0,0 +1,8 @@
1
+ type AllKeys<T> = T extends unknown ? keyof T : never;
2
+ export type Id<T> = T extends infer U ? {[K in keyof U]: U[K]} : never;
3
+ type _ExclusifyUnion<T, K extends PropertyKey> = T extends unknown
4
+ ? Id<T & Partial<Record<Exclude<K, keyof T>, never>>>
5
+ : never;
6
+
7
+ // https://juhanajauhiainen.com/posts/how-to-type-an-object-with-exclusive-or-properties-in-typescript
8
+ export type ExclusifyUnion<T> = _ExclusifyUnion<T, AllKeys<T>>;
@@ -0,0 +1,11 @@
1
+ import {sprinkles} from './sprinkles.css';
2
+
3
+ export const video = sprinkles({
4
+ top: 0,
5
+ left: 0,
6
+ display: 'block',
7
+ background: 'transparent',
8
+ maxWidth: '100%',
9
+ maxHeight: '100%',
10
+ objectFit: 'cover',
11
+ });