@telefonica/mistica 16.59.0-beta.1 → 16.60.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 (539) 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 +23 -20
  83. package/dist/text-field-components.css.d.ts +1 -0
  84. package/dist/text-field-components.js +31 -25
  85. package/dist/text-link.css-mistica.js +10 -10
  86. package/dist/text.css-mistica.js +13 -13
  87. package/dist/theme-context.css-mistica.js +2 -2
  88. package/dist/timeline.css-mistica.js +18 -18
  89. package/dist/timer.css-mistica.js +13 -13
  90. package/dist/tooltip.css-mistica.js +12 -12
  91. package/dist/touchable.css-mistica.js +5 -5
  92. package/dist/utils/aspect-ratio-support.css-mistica.js +7 -7
  93. package/dist/video.css-mistica.js +2 -2
  94. package/dist/vivinho-loading-animation/vivinho-loading-animation.css-mistica.js +3 -3
  95. package/dist-es/accordion.css-mistica.js +7 -7
  96. package/dist-es/align.css-mistica.js +2 -2
  97. package/dist-es/autocomplete.css-mistica.js +2 -2
  98. package/dist-es/avatar.css-mistica.js +2 -2
  99. package/dist-es/badge.css-mistica.js +2 -2
  100. package/dist-es/box.css-mistica.js +15 -15
  101. package/dist-es/boxed.css-mistica.js +25 -25
  102. package/dist-es/button-group.css-mistica.js +2 -2
  103. package/dist-es/button-layout.css-mistica.js +16 -16
  104. package/dist-es/button.css-mistica.js +38 -38
  105. package/dist-es/callout.css-mistica.js +12 -12
  106. package/dist-es/card-internal.css-mistica.js +20 -20
  107. package/dist-es/carousel.css-mistica.js +10 -10
  108. package/dist-es/checkbox.css-mistica.js +14 -14
  109. package/dist-es/chip.css-mistica.js +17 -17
  110. package/dist-es/circle.css-mistica.js +2 -2
  111. package/dist-es/community/advanced-data-card.css-mistica.js +7 -7
  112. package/dist-es/community/blocks.css-mistica.js +2 -2
  113. package/dist-es/community/example-component.css-mistica.js +2 -2
  114. package/dist-es/counter.css-mistica.js +2 -2
  115. package/dist-es/cover-hero.css-mistica.js +4 -4
  116. package/dist-es/credit-card-number-field.css-mistica.js +4 -4
  117. package/dist-es/date-field.css-mistica.js +1 -1
  118. package/dist-es/date-time-picker.css-mistica.js +2 -2
  119. package/dist-es/dialog.css-mistica.js +5 -5
  120. package/dist-es/divider.css-mistica.js +5 -5
  121. package/dist-es/double-field.css-mistica.js +4 -4
  122. package/dist-es/drawer.css-mistica.js +2 -2
  123. package/dist-es/empty-state-card.css-mistica.js +2 -2
  124. package/dist-es/empty-state.css-mistica.js +7 -7
  125. package/dist-es/fade-in.css-mistica.js +1 -1
  126. package/dist-es/feedback.css-mistica.js +2 -2
  127. package/dist-es/file-upload.css-mistica.js +8 -8
  128. package/dist-es/fixed-footer-layout.css-mistica.js +4 -4
  129. package/dist-es/form.css-mistica.js +2 -2
  130. package/dist-es/grid-layout.css-mistica.js +4 -4
  131. package/dist-es/grid.css-mistica.js +127 -127
  132. package/dist-es/header.css-mistica.js +2 -2
  133. package/dist-es/hero.css-mistica.js +4 -4
  134. package/dist-es/horizontal-scroll.css-mistica.js +2 -2
  135. package/dist-es/icon-button.css-mistica.js +56 -56
  136. package/dist-es/icons/icon-chevron.css-mistica.js +4 -4
  137. package/dist-es/icons/icon-error.css-mistica.js +2 -2
  138. package/dist-es/image.css-mistica.js +4 -4
  139. package/dist-es/inline.css-mistica.js +10 -10
  140. package/dist-es/list.css-mistica.js +2 -2
  141. package/dist-es/loading-bar.css-mistica.js +2 -2
  142. package/dist-es/loading-screen.css-mistica.js +5 -5
  143. package/dist-es/logo.css-mistica.js +7 -7
  144. package/dist-es/menu.css-mistica.js +15 -15
  145. package/dist-es/mosaic.css-mistica.js +2 -2
  146. package/dist-es/navigation-bar.css-mistica.js +20 -20
  147. package/dist-es/navigation-breadcrumbs.css-mistica.js +2 -2
  148. package/dist-es/package-version.js +2 -2
  149. package/dist-es/pin-field.css-mistica.js +2 -2
  150. package/dist-es/popover.css-mistica.js +2 -2
  151. package/dist-es/progress-bar.css-mistica.js +8 -8
  152. package/dist-es/radio-button.css-mistica.js +25 -25
  153. package/dist-es/rating.css-mistica.js +4 -4
  154. package/dist-es/responsive-layout.css-mistica.js +7 -7
  155. package/dist-es/screen-reader-only.css-mistica.js +2 -2
  156. package/dist-es/select.css-mistica.js +20 -20
  157. package/dist-es/sheet-action-row.css-mistica.js +2 -2
  158. package/dist-es/sheet-common.css-mistica.js +2 -2
  159. package/dist-es/sheet-info.css-mistica.js +2 -2
  160. package/dist-es/skeletons.css-mistica.js +8 -8
  161. package/dist-es/skins/skin-contract.css-mistica.js +686 -686
  162. package/dist-es/skip-link.css-mistica.js +2 -2
  163. package/dist-es/slider.css-mistica.js +20 -20
  164. package/dist-es/snackbar.css-mistica.js +5 -5
  165. package/dist-es/spinner.css-mistica.js +2 -2
  166. package/dist-es/square.css-mistica.js +2 -2
  167. package/dist-es/stack.css-mistica.js +7 -7
  168. package/dist-es/stacking-group.css-mistica.js +2 -2
  169. package/dist-es/stepper.css-mistica.js +4 -4
  170. package/dist-es/style.css +1 -1
  171. package/dist-es/switch-component.css-mistica.js +41 -41
  172. package/dist-es/table.css-mistica.js +11 -11
  173. package/dist-es/tabs.css-mistica.js +21 -21
  174. package/dist-es/tag.css-mistica.js +2 -2
  175. package/dist-es/text-field-base.css-mistica.js +17 -17
  176. package/dist-es/text-field-components.css-mistica.js +4 -4
  177. package/dist-es/text-field-components.js +52 -46
  178. package/dist-es/text-link.css-mistica.js +9 -9
  179. package/dist-es/text.css-mistica.js +8 -8
  180. package/dist-es/theme-context.css-mistica.js +2 -2
  181. package/dist-es/timeline.css-mistica.js +11 -11
  182. package/dist-es/timer.css-mistica.js +7 -7
  183. package/dist-es/tooltip.css-mistica.js +3 -3
  184. package/dist-es/touchable.css-mistica.js +2 -2
  185. package/dist-es/utils/aspect-ratio-support.css-mistica.js +4 -4
  186. package/dist-es/video.css-mistica.js +2 -2
  187. package/dist-es/vivinho-loading-animation/vivinho-loading-animation.css-mistica.js +2 -2
  188. package/doc/llms.md +0 -24
  189. package/package.json +2 -14
  190. package/src/accordion.css.ts +0 -121
  191. package/src/accordion.tsx +0 -366
  192. package/src/align.css.ts +0 -7
  193. package/src/align.tsx +0 -32
  194. package/src/autocomplete.css.ts +0 -62
  195. package/src/autocomplete.tsx +0 -239
  196. package/src/avatar.css.ts +0 -14
  197. package/src/avatar.tsx +0 -120
  198. package/src/badge.css.ts +0 -51
  199. package/src/badge.tsx +0 -79
  200. package/src/box.css.ts +0 -51
  201. package/src/box.tsx +0 -114
  202. package/src/boxed.css.ts +0 -132
  203. package/src/boxed.tsx +0 -153
  204. package/src/button-fixed-footer-layout.tsx +0 -62
  205. package/src/button-group.css.ts +0 -75
  206. package/src/button-group.tsx +0 -91
  207. package/src/button-layout.css.ts +0 -162
  208. package/src/button-layout.tsx +0 -91
  209. package/src/button.css.ts +0 -758
  210. package/src/button.tsx +0 -632
  211. package/src/callout.css.ts +0 -50
  212. package/src/callout.tsx +0 -147
  213. package/src/card-cover.tsx +0 -242
  214. package/src/card-data.tsx +0 -152
  215. package/src/card-internal.css.ts +0 -271
  216. package/src/card-internal.tsx +0 -1724
  217. package/src/card-media.tsx +0 -157
  218. package/src/card-naked.tsx +0 -63
  219. package/src/carousel.css.ts +0 -522
  220. package/src/carousel.tsx +0 -1300
  221. package/src/checkbox.css.ts +0 -94
  222. package/src/checkbox.tsx +0 -192
  223. package/src/chip.css.ts +0 -204
  224. package/src/chip.tsx +0 -191
  225. package/src/circle.css.ts +0 -14
  226. package/src/circle.tsx +0 -52
  227. 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
  228. 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
  229. 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
  230. 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
  231. 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
  232. 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
  233. 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
  234. 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
  235. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-extras-0-1-snap.png +0 -0
  236. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-extras-1-1-snap.png +0 -0
  237. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-extras-3-1-snap.png +0 -0
  238. 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
  239. package/src/community/__screenshot_tests__/__image_snapshots__/advanced-data-card-screenshot-test-tsx-advanced-data-card-inside-carousel-1-snap.png +0 -0
  240. 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
  241. package/src/community/__screenshot_tests__/__image_snapshots__/blocks-screenshot-test-tsx-blocks-highlighted-value-block-1-snap.png +0 -0
  242. package/src/community/__screenshot_tests__/__image_snapshots__/blocks-screenshot-test-tsx-blocks-information-block-1-snap.png +0 -0
  243. package/src/community/__screenshot_tests__/__image_snapshots__/blocks-screenshot-test-tsx-blocks-progress-block-1-snap.png +0 -0
  244. package/src/community/__screenshot_tests__/__image_snapshots__/blocks-screenshot-test-tsx-blocks-progress-block-2-snap.png +0 -0
  245. package/src/community/__screenshot_tests__/__image_snapshots__/blocks-screenshot-test-tsx-blocks-row-block-1-snap.png +0 -0
  246. package/src/community/__screenshot_tests__/__image_snapshots__/blocks-screenshot-test-tsx-blocks-simple-block-1-snap.png +0 -0
  247. package/src/community/__screenshot_tests__/__image_snapshots__/blocks-screenshot-test-tsx-blocks-value-block-1-snap.png +0 -0
  248. package/src/community/__screenshot_tests__/advanced-data-card-screenshot-test.tsx +0 -84
  249. package/src/community/__screenshot_tests__/blocks-screenshot-test.tsx +0 -72
  250. package/src/community/__stories__/advanced-data-card-carousel-story.tsx +0 -66
  251. package/src/community/__stories__/advanced-data-card-story.tsx +0 -158
  252. package/src/community/__stories__/blocks-story.tsx +0 -272
  253. package/src/community/__stories__/example-component-story.tsx +0 -15
  254. package/src/community/__stories__/index-story.tsx +0 -154
  255. package/src/community/__type_tests__/advanced-data-card-type-test.tsx +0 -40
  256. package/src/community/advanced-data-card.css.ts +0 -271
  257. package/src/community/advanced-data-card.tsx +0 -431
  258. package/src/community/blocks.css.ts +0 -12
  259. package/src/community/blocks.tsx +0 -290
  260. package/src/community/example-component.css.ts +0 -7
  261. package/src/community/example-component.tsx +0 -17
  262. package/src/community/index.tsx +0 -10
  263. package/src/counter.css.ts +0 -150
  264. package/src/counter.tsx +0 -215
  265. package/src/cover-hero-media.tsx +0 -39
  266. package/src/cover-hero.css.ts +0 -133
  267. package/src/cover-hero.tsx +0 -262
  268. package/src/credit-card-expiration-field.tsx +0 -187
  269. package/src/credit-card-fields.tsx +0 -56
  270. package/src/credit-card-number-field.css.ts +0 -47
  271. package/src/credit-card-number-field.tsx +0 -245
  272. package/src/cvv-field.tsx +0 -169
  273. package/src/date-field.css.ts +0 -14
  274. package/src/date-field.tsx +0 -130
  275. package/src/date-time-field.tsx +0 -141
  276. package/src/date-time-picker.css.ts +0 -126
  277. package/src/date-time-picker.tsx +0 -188
  278. package/src/decimal-field.tsx +0 -160
  279. package/src/desktop-container-type-context.tsx +0 -15
  280. package/src/dialog-context.tsx +0 -81
  281. package/src/dialog.css.ts +0 -155
  282. package/src/dialog.tsx +0 -423
  283. package/src/divider.css.ts +0 -10
  284. package/src/divider.tsx +0 -11
  285. package/src/double-field.css.ts +0 -33
  286. package/src/double-field.tsx +0 -71
  287. package/src/drawer.css.ts +0 -123
  288. package/src/drawer.tsx +0 -304
  289. package/src/email-field.tsx +0 -76
  290. package/src/empty-state-card.css.ts +0 -40
  291. package/src/empty-state-card.tsx +0 -92
  292. package/src/empty-state.css.ts +0 -119
  293. package/src/empty-state.tsx +0 -141
  294. package/src/fade-in.css.ts +0 -12
  295. package/src/fade-in.tsx +0 -40
  296. package/src/feedback.css.ts +0 -119
  297. package/src/feedback.tsx +0 -432
  298. package/src/file-upload.css.ts +0 -156
  299. package/src/file-upload.tsx +0 -612
  300. package/src/fixed-footer-layout.css.ts +0 -96
  301. package/src/fixed-footer-layout.tsx +0 -215
  302. package/src/fixed-to-top.tsx +0 -21
  303. package/src/focus-trap.tsx +0 -17
  304. package/src/form-context.tsx +0 -198
  305. package/src/form.css.ts +0 -5
  306. package/src/form.tsx +0 -287
  307. package/src/grid-layout.css.ts +0 -68
  308. package/src/grid-layout.tsx +0 -201
  309. package/src/grid.css.ts +0 -203
  310. package/src/grid.tsx +0 -241
  311. package/src/header.css.ts +0 -30
  312. package/src/header.tsx +0 -319
  313. package/src/hero.css.ts +0 -71
  314. package/src/hero.tsx +0 -318
  315. package/src/hooks.tsx +0 -313
  316. package/src/horizontal-scroll.css.ts +0 -43
  317. package/src/horizontal-scroll.tsx +0 -18
  318. package/src/iban-field.tsx +0 -218
  319. package/src/icon-button.css.ts +0 -561
  320. package/src/icon-button.tsx +0 -221
  321. package/src/icons/__stories__/mistica-icons-story.tsx +0 -192
  322. package/src/icons/icon-amex.tsx +0 -40
  323. package/src/icons/icon-chevron.css.ts +0 -23
  324. package/src/icons/icon-chevron.tsx +0 -150
  325. package/src/icons/icon-cvv-amex.tsx +0 -31
  326. package/src/icons/icon-cvv-visa-mc.tsx +0 -31
  327. package/src/icons/icon-error.css.ts +0 -27
  328. package/src/icons/icon-error.tsx +0 -207
  329. package/src/icons/icon-info.tsx +0 -86
  330. package/src/icons/icon-mastercard.tsx +0 -36
  331. package/src/icons/icon-success-vivo-new.tsx +0 -51
  332. package/src/icons/icon-success-vivo.tsx +0 -36
  333. package/src/icons/icon-success.tsx +0 -211
  334. package/src/icons/icon-visa.tsx +0 -32
  335. package/src/image.css.ts +0 -48
  336. package/src/image.tsx +0 -345
  337. package/src/index.tsx +0 -2466
  338. package/src/inline.css.ts +0 -131
  339. package/src/inline.tsx +0 -135
  340. package/src/integer-field.tsx +0 -93
  341. package/src/list.css.ts +0 -281
  342. package/src/list.tsx +0 -963
  343. package/src/loading-bar.css.ts +0 -69
  344. package/src/loading-bar.tsx +0 -25
  345. package/src/loading-screen.css.ts +0 -114
  346. package/src/loading-screen.tsx +0 -376
  347. package/src/logo-blau-shell.tsx +0 -30
  348. package/src/logo-blau.tsx +0 -60
  349. package/src/logo-common.tsx +0 -29
  350. package/src/logo-esimflag-shell.tsx +0 -30
  351. package/src/logo-esimflag.tsx +0 -56
  352. package/src/logo-movistar-new-shell.tsx +0 -30
  353. package/src/logo-movistar-new.tsx +0 -85
  354. package/src/logo-movistar-shell.tsx +0 -30
  355. package/src/logo-movistar.tsx +0 -63
  356. package/src/logo-o2-new-shell.tsx +0 -26
  357. package/src/logo-o2-new.tsx +0 -27
  358. package/src/logo-o2-shell.tsx +0 -26
  359. package/src/logo-o2.tsx +0 -27
  360. package/src/logo-telefonica-shell.tsx +0 -30
  361. package/src/logo-telefonica.tsx +0 -95
  362. package/src/logo-tu-shell.tsx +0 -26
  363. package/src/logo-tu.tsx +0 -28
  364. package/src/logo-vivo-shell.tsx +0 -30
  365. package/src/logo-vivo.tsx +0 -53
  366. package/src/logo.css.ts +0 -33
  367. package/src/logo.tsx +0 -313
  368. package/src/master-detail-layout.tsx +0 -28
  369. package/src/maybe-dismissable.css.ts +0 -37
  370. package/src/maybe-dismissable.tsx +0 -58
  371. package/src/media-queries.css.ts +0 -67
  372. package/src/menu.css.ts +0 -132
  373. package/src/menu.tsx +0 -468
  374. package/src/meter.tsx +0 -516
  375. package/src/modal-context-provider.tsx +0 -45
  376. package/src/month-field.tsx +0 -124
  377. package/src/mosaic.css.ts +0 -73
  378. package/src/mosaic.tsx +0 -205
  379. package/src/navigation-bar.css.ts +0 -558
  380. package/src/navigation-bar.tsx +0 -1637
  381. package/src/navigation-breadcrumbs.css.ts +0 -22
  382. package/src/navigation-breadcrumbs.tsx +0 -69
  383. package/src/negative-box.tsx +0 -15
  384. package/src/nestable-context.tsx +0 -139
  385. package/src/overlay.tsx +0 -86
  386. package/src/overscroll-color-context.tsx +0 -141
  387. package/src/package-version.tsx +0 -2
  388. package/src/password-field.tsx +0 -126
  389. package/src/phone-number-field-lite.tsx +0 -265
  390. package/src/phone-number-field.tsx +0 -171
  391. package/src/pin-field.css.ts +0 -90
  392. package/src/pin-field.tsx +0 -346
  393. package/src/placeholder.tsx +0 -41
  394. package/src/popover.css.ts +0 -8
  395. package/src/popover.tsx +0 -85
  396. package/src/portal.tsx +0 -43
  397. package/src/progress-bar.css.ts +0 -61
  398. package/src/progress-bar.tsx +0 -174
  399. package/src/radio-button.css.ts +0 -174
  400. package/src/radio-button.tsx +0 -322
  401. package/src/rating.css.ts +0 -128
  402. package/src/rating.tsx +0 -351
  403. package/src/responsive-layout.css.ts +0 -162
  404. package/src/responsive-layout.tsx +0 -106
  405. package/src/screen-reader-only.css.ts +0 -27
  406. package/src/screen-reader-only.tsx +0 -33
  407. package/src/screen-size-context-provider.tsx +0 -96
  408. package/src/screen-size-context.tsx +0 -23
  409. package/src/search-field.tsx +0 -126
  410. package/src/select.css.ts +0 -226
  411. package/src/select.tsx +0 -513
  412. package/src/sheet-action-row.css.ts +0 -33
  413. package/src/sheet-actions-list.tsx +0 -113
  414. package/src/sheet-actions.tsx +0 -95
  415. package/src/sheet-common.css.ts +0 -254
  416. package/src/sheet-common.tsx +0 -402
  417. package/src/sheet-info.css.ts +0 -19
  418. package/src/sheet-info.tsx +0 -127
  419. package/src/sheet-native.tsx +0 -189
  420. package/src/sheet-radio-list.tsx +0 -118
  421. package/src/sheet-root.tsx +0 -127
  422. package/src/sheet-types.tsx +0 -94
  423. package/src/sheet-web.tsx +0 -140
  424. package/src/skeleton-base.tsx +0 -38
  425. package/src/skeletons.css.ts +0 -56
  426. package/src/skeletons.tsx +0 -133
  427. package/src/skins/blau.tsx +0 -724
  428. package/src/skins/constants.tsx +0 -10
  429. package/src/skins/defaults.tsx +0 -104
  430. package/src/skins/esimflag.tsx +0 -728
  431. package/src/skins/movistar-new.tsx +0 -735
  432. package/src/skins/movistar.tsx +0 -740
  433. package/src/skins/o2-new.tsx +0 -731
  434. package/src/skins/o2.tsx +0 -727
  435. package/src/skins/skin-contract.css.ts +0 -380
  436. package/src/skins/telefonica.tsx +0 -768
  437. package/src/skins/tu.tsx +0 -741
  438. package/src/skins/types/colors.tsx +0 -286
  439. package/src/skins/types/index.tsx +0 -153
  440. package/src/skins/utils.tsx +0 -66
  441. package/src/skins/vivo-new.tsx +0 -745
  442. package/src/skins/vivo.tsx +0 -720
  443. package/src/skip-link.css.ts +0 -34
  444. package/src/skip-link.tsx +0 -52
  445. package/src/slider.css.ts +0 -181
  446. package/src/slider.tsx +0 -384
  447. package/src/snackbar-context.tsx +0 -98
  448. package/src/snackbar-native.ts +0 -37
  449. package/src/snackbar.css.ts +0 -176
  450. package/src/snackbar.tsx +0 -258
  451. package/src/spinner.css.ts +0 -66
  452. package/src/spinner.tsx +0 -136
  453. package/src/sprinkles.css.ts +0 -83
  454. package/src/square.css.ts +0 -15
  455. package/src/square.tsx +0 -55
  456. package/src/stack.css.ts +0 -44
  457. package/src/stack.tsx +0 -79
  458. package/src/stacking-group.css.ts +0 -15
  459. package/src/stacking-group.tsx +0 -82
  460. package/src/stepper.css.ts +0 -233
  461. package/src/stepper.tsx +0 -156
  462. package/src/switch-component.css.ts +0 -181
  463. package/src/switch-component.tsx +0 -187
  464. package/src/tab-focus.tsx +0 -68
  465. package/src/table-actions-header.tsx +0 -21
  466. package/src/table-cell-text.tsx +0 -35
  467. package/src/table.css.ts +0 -297
  468. package/src/table.tsx +0 -398
  469. package/src/tabs.css.ts +0 -212
  470. package/src/tabs.tsx +0 -263
  471. package/src/tag.css.ts +0 -42
  472. package/src/tag.tsx +0 -161
  473. package/src/test-utils/environment/setup-ssr.tsx +0 -10
  474. package/src/test-utils/fail-test-on-console-error.tsx +0 -22
  475. package/src/test-utils/index.tsx +0 -341
  476. package/src/test-utils/setup-ssr-test-env.tsx +0 -13
  477. package/src/test-utils/ssr.tsx +0 -197
  478. package/src/text-field-base.css.ts +0 -416
  479. package/src/text-field-base.tsx +0 -628
  480. package/src/text-field-components.css.ts +0 -159
  481. package/src/text-field-components.tsx +0 -225
  482. package/src/text-field.tsx +0 -118
  483. package/src/text-link.css.ts +0 -83
  484. package/src/text-link.tsx +0 -85
  485. package/src/text-tokens.tsx +0 -708
  486. package/src/text.css.ts +0 -60
  487. package/src/text.tsx +0 -516
  488. package/src/theme-context-provider.tsx +0 -370
  489. package/src/theme-context.css.ts +0 -3
  490. package/src/theme-context.tsx +0 -8
  491. package/src/theme-variant-context.tsx +0 -51
  492. package/src/theme.tsx +0 -184
  493. package/src/time-field.tsx +0 -99
  494. package/src/timeline.css.ts +0 -135
  495. package/src/timeline.tsx +0 -250
  496. package/src/timer.css.ts +0 -99
  497. package/src/timer.tsx +0 -420
  498. package/src/title.tsx +0 -119
  499. package/src/tooltip-context-provider.tsx +0 -57
  500. package/src/tooltip.css.ts +0 -106
  501. package/src/tooltip.tsx +0 -649
  502. package/src/touchable.css.ts +0 -56
  503. package/src/touchable.tsx +0 -355
  504. package/src/types/font-face.d.ts +0 -47
  505. package/src/types/libs.d.ts +0 -3
  506. package/src/utils/__tests__/analytics-test.tsx +0 -35
  507. package/src/utils/__tests__/browser-test.tsx +0 -28
  508. package/src/utils/__tests__/dom-test.tsx +0 -23
  509. package/src/utils/__tests__/helpers-test.tsx +0 -166
  510. package/src/utils/analytics.tsx +0 -28
  511. package/src/utils/animation.tsx +0 -201
  512. package/src/utils/aspect-ratio-support.css.ts +0 -28
  513. package/src/utils/aspect-ratio-support.tsx +0 -141
  514. package/src/utils/browser.tsx +0 -9
  515. package/src/utils/color.tsx +0 -46
  516. package/src/utils/common.tsx +0 -27
  517. package/src/utils/credit-card.tsx +0 -46
  518. package/src/utils/css.tsx +0 -25
  519. package/src/utils/document-visibility.tsx +0 -52
  520. package/src/utils/dom.tsx +0 -155
  521. package/src/utils/environment.tsx +0 -6
  522. package/src/utils/headings.tsx +0 -18
  523. package/src/utils/helpers.tsx +0 -182
  524. package/src/utils/keys.tsx +0 -8
  525. package/src/utils/locale.tsx +0 -27
  526. package/src/utils/platform.tsx +0 -94
  527. package/src/utils/region-code.tsx +0 -1
  528. package/src/utils/renders-element.tsx +0 -6
  529. package/src/utils/time.tsx +0 -22
  530. package/src/utils/types.tsx +0 -19
  531. package/src/utils/utility-types.tsx +0 -8
  532. package/src/video.css.ts +0 -11
  533. package/src/video.tsx +0 -355
  534. package/src/vivinho-loading-animation/in-lottie.json +0 -402
  535. package/src/vivinho-loading-animation/index.tsx +0 -90
  536. package/src/vivinho-loading-animation/out-lottie.json +0 -575
  537. package/src/vivinho-loading-animation/pulse-lottie.json +0 -551
  538. package/src/vivinho-loading-animation/vivinho-loading-animation.css.ts +0 -15
  539. package/src/vivinho-loading-animation/wave-lottie.json +0 -2829
@@ -1,628 +0,0 @@
1
- 'use client';
2
- import classNames from 'classnames';
3
- import * as React from 'react';
4
- import {useIsomorphicLayoutEffect, useScreenSize, useTheme} from './hooks';
5
- import {InternalIconButton, InternalToggleIconButton} from './icon-button';
6
- import {iconSize} from './icon-button.css';
7
- import {vars} from './skins/skin-contract.css';
8
- import {Text3} from './text';
9
- import * as styles from './text-field-base.css';
10
- import {FieldContainer, HelperText, Label} from './text-field-components';
11
- import {fieldVars} from './text-field-base.css';
12
- import * as tokens from './text-tokens';
13
- import {ThemeVariant} from './theme-variant-context';
14
- import {combineRefs} from './utils/common';
15
- import {isFirefox, isRunningAcceptanceTest} from './utils/platform';
16
-
17
- import type {FieldValidator} from './form-context';
18
- import type {InputState} from './text-field-components';
19
- import type {DataAttributes, IconProps} from './utils/types';
20
- import type {ExclusifyUnion} from './utils/utility-types';
21
-
22
- const isValidInputValue = (value?: string, inputType?: React.HTMLInputTypeAttribute) => {
23
- if (!inputType) {
24
- return true;
25
- }
26
-
27
- const input = document.createElement('input');
28
- input.type = inputType;
29
- input.value = value || '';
30
- return input.value !== '';
31
- };
32
-
33
- type FieldEndIconProps = {
34
- /** In date fields, we want the icon's background to stay transparent when hovering/pressing it */
35
- hasBackgroundColor?: boolean;
36
- disabled?: boolean;
37
- } & ExclusifyUnion<
38
- | {
39
- Icon: (props: IconProps) => JSX.Element;
40
- 'aria-label'?: string;
41
- onPress: (event: React.MouseEvent<HTMLElement>) => void;
42
- }
43
- | {
44
- checkedProps: {Icon: (props: IconProps) => JSX.Element; 'aria-label'?: string};
45
- uncheckedProps: {Icon: (props: IconProps) => JSX.Element; 'aria-label'?: string};
46
- onChange?: (checked: boolean) => void | undefined | Promise<void>;
47
- checked?: boolean;
48
- }
49
- >;
50
-
51
- export const FieldEndIcon = ({
52
- hasBackgroundColor = true,
53
- onPress,
54
- onChange,
55
- disabled,
56
- Icon,
57
- checkedProps,
58
- uncheckedProps,
59
- 'aria-label': ariaLabel,
60
- }: FieldEndIconProps): JSX.Element => {
61
- return checkedProps ? (
62
- <InternalToggleIconButton
63
- checkedProps={{...checkedProps, 'aria-label': checkedProps['aria-label'] || ''}}
64
- uncheckedProps={{...uncheckedProps, 'aria-label': uncheckedProps['aria-label'] || ''}}
65
- onChange={onChange}
66
- hasOverlay={hasBackgroundColor}
67
- disabled={disabled}
68
- small
69
- bleedRight
70
- />
71
- ) : (
72
- <InternalIconButton
73
- Icon={Icon}
74
- disabled={disabled}
75
- aria-label={ariaLabel || ''}
76
- onPress={onPress}
77
- hasOverlay={hasBackgroundColor}
78
- small
79
- bleedRight
80
- />
81
- );
82
- };
83
-
84
- /**
85
- * Incomplete list, add more if needed
86
- * https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete
87
- */
88
- export type AutoComplete =
89
- | 'on'
90
- | 'off'
91
- | 'name' // full name
92
- | 'given-name' // first name
93
- | 'additional-name' // middle name
94
- | 'family-name' // last name
95
- | 'email'
96
- | 'tel'
97
- | 'street-address'
98
- | 'address-line1' // for two address inputs
99
- | 'address-line2' // for two address inputs
100
- | 'address-level1' // state or province
101
- | 'address-level2' // city
102
- | 'country'
103
- | 'postal-code'
104
- | 'transaction-amount'
105
- | 'new-password'
106
- | 'current-password'
107
- | 'cc-type' // The type of payment instrument (such as "Visa" or "Master Card")
108
- | 'cc-name' // The full name as printed on or associated with a payment instrument such as a credit card
109
- | 'cc-number' // A credit card number or other number identifying a payment method, such as an account number
110
- | 'cc-exp' // A payment method expiration date, typically in the form "MM/YY" or "MM/YYYY"
111
- | 'cc-csc' // The security code; on credit cards, this is the 3-digit verification number on the back of the card
112
- | 'username'; // Username or account name, when used with a password field the browser offers to save credentials together
113
-
114
- export interface CommonFormFieldProps<T = HTMLInputElement> {
115
- autoFocus?: boolean;
116
- disabled?: boolean;
117
- error?: boolean;
118
- helperText?: string;
119
- id?: string;
120
- label: string;
121
- name: string;
122
- optional?: boolean;
123
- showOptionalLabel?: boolean;
124
- maxLength?: number;
125
- validate?: FieldValidator;
126
- validateOnBlurInsideForm?: boolean;
127
- autoComplete?: AutoComplete;
128
- onFocus?: React.FocusEventHandler<T>;
129
- onBlur?: React.FocusEventHandler<T>;
130
- fullWidth?: boolean;
131
- getSuggestions?: (text: string) => ReadonlyArray<string>;
132
- placeholder?: string;
133
- value?: string;
134
- defaultValue?: string;
135
- onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
136
- children?: void;
137
- readOnly?: boolean;
138
- preventCopy?: boolean;
139
- dataAttributes?: DataAttributes;
140
- }
141
-
142
- interface TextFieldBaseProps {
143
- id?: string;
144
- type?: string;
145
- autoComplete?: AutoComplete;
146
- autoFocus?: boolean;
147
- disabled?: boolean;
148
- error?: boolean;
149
- pattern?: string;
150
- required?: boolean;
151
- showOptionalLabel?: boolean;
152
- fullWidth?: boolean;
153
- helperText?: string;
154
- label?: string;
155
- placeholder?: string;
156
- defaultValue?: string;
157
- name?: string;
158
- maxLength?: number;
159
- prefix?: React.ReactNode;
160
- startIcon?: React.ReactNode;
161
- endIcon?: React.ReactNode;
162
- endIconOverlay?: React.ReactNode;
163
- style?: React.CSSProperties;
164
- value?: string;
165
- inputRef?: React.Ref<HTMLInputElement | HTMLSelectElement>;
166
- getSuggestions?: (value: string) => ReadonlyArray<string>;
167
- withSuggestionsEmptyCase?: boolean | string;
168
- shouldShowSuggestions?: 'focus' | number;
169
- onClick?: (event: React.MouseEvent) => void;
170
- onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
171
- onBlur?: React.FocusEventHandler;
172
- onFocus?: React.FocusEventHandler;
173
- onKeyDown?: (event: React.KeyboardEvent) => void;
174
- inputProps?: {[name: string]: string | number | undefined};
175
- inputComponent?: React.ComponentType<any>;
176
- shrinkLabel?: boolean;
177
- focus?: boolean;
178
- fieldRef?: React.RefObject<HTMLDivElement | null>;
179
- onInput?: (event: React.FormEvent<HTMLInputElement>) => void;
180
- multiline?: boolean;
181
- inputMode?: string;
182
- readOnly?: boolean;
183
- preventCopy?: boolean;
184
- min?: string;
185
- max?: string;
186
- role?: string;
187
- dataAttributes?: DataAttributes;
188
- }
189
-
190
- const preventCopyHandler = (e: React.ClipboardEvent<HTMLInputElement>) => {
191
- e.preventDefault();
192
- };
193
-
194
- export const TextFieldBase = React.forwardRef<any, TextFieldBaseProps>(
195
- (
196
- {
197
- error,
198
- helperText,
199
- label,
200
- inputProps,
201
- inputRef,
202
- defaultValue,
203
- value,
204
- onFocus,
205
- onBlur,
206
- inputComponent,
207
- prefix,
208
- startIcon,
209
- endIcon,
210
- endIconOverlay,
211
- shrinkLabel,
212
- multiline = false,
213
- focus,
214
- fieldRef,
215
- maxLength,
216
- id: idProp,
217
- autoComplete: autoCompleteProp,
218
- fullWidth,
219
- dataAttributes,
220
- preventCopy,
221
- showOptionalLabel = true,
222
- required,
223
- ...rest
224
- },
225
- ref
226
- ) => {
227
- const {preventCopyInFormFields, texts, t} = useTheme();
228
- preventCopy = preventCopy ?? preventCopyInFormFields;
229
- const reactId = React.useId();
230
- const id = idProp || reactId;
231
- const leftHelperTextid = React.useId();
232
- const rightHelperTextid = React.useId();
233
-
234
- const [inputState, setInputState] = React.useState<InputState>(
235
- defaultValue?.length || value?.length ? 'filled' : 'default'
236
- );
237
- const {isTabletOrSmaller} = useScreenSize();
238
- const [characterCount, setCharacterCount] = React.useState(defaultValue?.length ?? 0);
239
- const hasLabel = !!label || !required;
240
-
241
- const isDateInput =
242
- rest.type === 'date' ||
243
- rest.type === 'datetime-local' ||
244
- rest.type === 'time' ||
245
- rest.type === 'month';
246
- const valueRef = React.useRef<string | undefined>(undefined);
247
-
248
- useIsomorphicLayoutEffect(() => {
249
- /**
250
- * If the date format is invalid, value will be empty in the DOM element. We treat it like the
251
- * case of an empty input. We have to do this because in some browsers, like Chrome, when the
252
- * date value is empty it displays a placeholder (mm/dd/yyyy) that can't be removed, so we set
253
- * it's opacity to 0 to avoid showing it.
254
- */
255
- const finalValue = isDateInput && !isValidInputValue(value, rest.type) ? '' : value;
256
- const isControlled = value !== undefined;
257
-
258
- // if value prop has changed, we need to set the input state to default if the new value is not valid
259
- if (
260
- valueRef.current !== value &&
261
- isDateInput &&
262
- !finalValue?.length &&
263
- inputState === 'filled' &&
264
- focus === undefined
265
- ) {
266
- setInputState('default');
267
- }
268
- valueRef.current = value;
269
-
270
- if (inputState !== 'focused' && isControlled) {
271
- setCharacterCount(finalValue?.length ?? 0);
272
- setInputState(finalValue?.length ? 'filled' : 'default');
273
- }
274
- if (focus) {
275
- setInputState('focused');
276
- }
277
- if (focus === false && !finalValue?.length) {
278
- // when textfield is used in selects it doesn't get or lose focus
279
- setInputState('default');
280
- }
281
- if (focus === false && finalValue?.length) {
282
- setInputState('filled');
283
- }
284
- }, [inputState, value, focus, isDateInput, rest.type]);
285
-
286
- React.useEffect(() => {
287
- if (rest.autoFocus) {
288
- setInputState('focused');
289
- }
290
- }, [rest.autoFocus]);
291
-
292
- const defaultInputElement = multiline ? 'textarea' : 'input';
293
-
294
- // FIXME it should be enough to forward refs. inputRef could be removed
295
- const inputRefProps = inputComponent
296
- ? {inputRef}
297
- : {
298
- ref: combineRefs(ref, inputRef),
299
- };
300
-
301
- const props = {
302
- ...rest,
303
- maxLength,
304
- autoComplete: autoCompleteProp,
305
- ...inputProps,
306
- };
307
-
308
- const startIconWidth = `calc(${iconSize.small} + ${styles.fieldElementsGap}px)`;
309
- const endIconWidth = `calc(${styles.iconButtonSize} + ${styles.fieldEndIconGap}px)`;
310
-
311
- const isShrinked = shrinkLabel || inputState === 'focused' || inputState === 'filled';
312
- const scale = isShrinked
313
- ? isTabletOrSmaller
314
- ? fieldVars.labelScaleMobile
315
- : fieldVars.labelScaleDesktop
316
- : 1;
317
- const labelStyle = {
318
- left: `calc(${styles.fieldLeftPadding}px + ${startIcon ? startIconWidth : '0px'})`,
319
- // shrinking means applying a scale transformation, so width will be proportionally reduced.
320
- // Let's keep the original width.
321
- width: `calc((100% - ${styles.fieldLeftPadding}px - ${startIcon ? startIconWidth : '0px'} - ${
322
- endIcon || endIconOverlay ? endIconWidth : `${styles.fieldRightPadding}px`
323
- }) / ${scale})`,
324
- };
325
-
326
- /* Workaround to avoid huge bullets on ios devices (-apple-system font related) */
327
- const fontFamily =
328
- rest.type === 'password' && characterCount > 0 ? 'Lucida Grande, Arial, sans-serif' : 'inherit';
329
-
330
- return (
331
- <FieldContainer
332
- disabled={rest.disabled}
333
- helperText={
334
- <HelperText
335
- error={error}
336
- leftText={helperText}
337
- leftTextId={leftHelperTextid}
338
- rightTextId={rightHelperTextid}
339
- rightText={multiline && maxLength ? `${characterCount}/${maxLength}` : undefined}
340
- rightTextLabel={
341
- multiline && maxLength
342
- ? t(
343
- texts.formTextMultilineMaxCount || tokens.formTextMultilineMaxCount,
344
- characterCount,
345
- maxLength
346
- )
347
- : undefined
348
- }
349
- />
350
- }
351
- multiline={multiline}
352
- fullWidth={fullWidth}
353
- fieldRef={fieldRef}
354
- readOnly={rest.readOnly}
355
- dataAttributes={dataAttributes}
356
- focus={focus}
357
- >
358
- <ThemeVariant variant="default">
359
- {startIcon && (
360
- <div className={styles.startIcon} data-testid="startIcon">
361
- {startIcon}
362
- </div>
363
- )}
364
-
365
- {prefix && (
366
- <div
367
- aria-hidden
368
- className={classNames(
369
- styles.prefix,
370
- hasLabel ? styles.inputWithLabel : styles.inputWithoutLabel
371
- )}
372
- style={{
373
- opacity: inputState === 'default' ? 0 : 1,
374
- }}
375
- >
376
- <Text3 color={vars.colors.textSecondary} regular wordBreak={false}>
377
- {prefix}
378
- </Text3>
379
- </div>
380
- )}
381
- {label && (
382
- <Label
383
- style={labelStyle}
384
- error={error}
385
- forId={id}
386
- inputState={inputState}
387
- shrinkLabel={shrinkLabel}
388
- showOptional={!required && showOptionalLabel}
389
- >
390
- {label}
391
- </Label>
392
- )}
393
- <div className={styles.fullWidth}>
394
- <Text3 as="div" regular>
395
- {React.createElement(inputComponent || defaultInputElement, {
396
- ...inputRefProps,
397
- ...props,
398
- id,
399
- ...(required && {'aria-required': true}),
400
- ...(error && {'aria-invalid': true}),
401
- style: {
402
- paddingRight: endIcon
403
- ? 0
404
- : endIconOverlay
405
- ? endIconWidth
406
- : styles.fieldRightPadding,
407
- paddingLeft: prefix
408
- ? 0
409
- : startIcon
410
- ? `calc(${startIconWidth} + ${styles.fieldLeftPadding}px)`
411
- : styles.fieldLeftPadding,
412
- ...props.style,
413
- fontFamily,
414
- },
415
- className: multiline
416
- ? classNames(
417
- styles.textArea,
418
- hasLabel ? styles.textAreaWithLabel : styles.textAreaWithoutLabel
419
- )
420
- : classNames(
421
- styles.input,
422
- hasLabel ? styles.inputWithLabel : styles.inputWithoutLabel,
423
- {
424
- [styles.inputFirefoxStyles]: isFirefox(),
425
- // Hide webkit placeholder when label is not shrinked and value is empty
426
- [styles.hiddenDatePlaceholder]:
427
- isDateInput && inputState === 'default',
428
- // Force height of input when value is empty to avoid field from having height 0 in iOS
429
- [styles.emptyDateValue]: isDateInput && inputState !== 'filled',
430
- }
431
- ),
432
- onFocus: (event: React.FocusEvent<HTMLInputElement>) => {
433
- setInputState('focused');
434
- onFocus?.(event);
435
- },
436
- onBlur: (event: React.FocusEvent<HTMLInputElement>) => {
437
- if (event.target.value.length > 0) {
438
- setInputState('filled');
439
- } else {
440
- setInputState('default');
441
- }
442
- onBlur?.(event);
443
- },
444
- onChange: (event: React.ChangeEvent<HTMLInputElement>) => {
445
- // Workaround for systems where maxlength prop is applied onBlur (https://caniuse.com/#feat=maxlength)
446
- if (maxLength === undefined || event.target.value.length <= maxLength) {
447
- setCharacterCount(event.target.value.length);
448
-
449
- // Browser's autofill can change the value without focusing
450
- if (event.target.value.length > 0 && inputState !== 'focused') {
451
- setInputState(
452
- event.target.value.length > 0 ? 'filled' : 'default'
453
- );
454
- }
455
-
456
- props.onChange?.(event);
457
- } else {
458
- event.stopPropagation();
459
- event.preventDefault();
460
- }
461
- },
462
- defaultValue,
463
- value,
464
- ...(error && {'aria-invalid': true}),
465
- ...((helperText || (multiline && maxLength)) && {
466
- 'aria-describedby': `${leftHelperTextid} ${rightHelperTextid}`,
467
- }),
468
- ...(preventCopy && {
469
- onCopy: preventCopyHandler,
470
- onCut: preventCopyHandler,
471
- }),
472
- })}
473
- </Text3>
474
- </div>
475
- {endIcon && (
476
- <div className={styles.endIconContainer} data-testid="endIcon">
477
- {endIcon}
478
- </div>
479
- )}
480
- {endIconOverlay}
481
- </ThemeVariant>
482
- </FieldContainer>
483
- );
484
- }
485
- );
486
-
487
- const Autosuggest = React.lazy(() => import(/* webpackChunkName: "react-autosuggest" */ 'react-autosuggest'));
488
-
489
- export const TextFieldBaseAutosuggest = React.forwardRef<any, TextFieldBaseProps>(
490
- (
491
- {
492
- getSuggestions,
493
- id: idProp,
494
- shouldShowSuggestions = 'focus',
495
- withSuggestionsEmptyCase = false,
496
- ...props
497
- },
498
- ref
499
- ) => {
500
- const [suggestions, setSuggestions] = React.useState<ReadonlyArray<string>>([]);
501
- const [areSuggestionsShown, setAreSuggestionsShown] = React.useState(false);
502
- const inputRef = React.useRef<HTMLInputElement>(null);
503
- const containerRef = React.useRef<HTMLDivElement>(null);
504
- const {platformOverrides, texts, t} = useTheme();
505
- const reactId = React.useId();
506
- const id = idProp || reactId;
507
- const autoSuggestId = React.useId();
508
-
509
- const suggestionEmptyCaseText =
510
- typeof withSuggestionsEmptyCase === 'string'
511
- ? withSuggestionsEmptyCase
512
- : texts.searchFieldSuggestionsEmptyCase || t(tokens.searchFieldSuggestionsEmptyCase);
513
-
514
- if (getSuggestions && (props.value === undefined || props.defaultValue !== undefined)) {
515
- throw Error('Fields with suggestions must be used in controlled mode');
516
- }
517
- return getSuggestions ? (
518
- <React.Suspense
519
- fallback={
520
- <TextFieldBase
521
- {...props}
522
- // This label override while loading is needed in acceptance tests because
523
- // while the test is typing, the component could be remounted.
524
- // By hiding the label, we ensure that the test selects the loaded component
525
- label={isRunningAcceptanceTest(platformOverrides) ? '' : props.label}
526
- autoComplete="off"
527
- ref={ref}
528
- id={id}
529
- />
530
- }
531
- >
532
- <Autosuggest
533
- id={autoSuggestId}
534
- inputProps={{
535
- ...props,
536
- id,
537
- autoComplete: 'off',
538
- // @ts-expect-error Autosuggest expects slightly different types
539
- onChange: (e: React.ChangeEvent<HTMLInputElement>, {newValue}) => {
540
- // hack to mutate event value
541
- e.target = {...e.target, value: newValue};
542
- e.currentTarget = {...e.currentTarget, value: newValue};
543
- props.onChange?.(e);
544
- },
545
- }}
546
- renderInputComponent={(inputProps) => {
547
- // The `Autosuggest.RenderInputComponentProps` type is missing the `key` property
548
- const {key, ...inputPropsWithoutKey} = inputProps as Record<string, any>;
549
- // extract key from inputProps to avoid React warning:
550
- // "A props object containing a "key" prop is being spread into JSX"
551
- return (
552
- <TextFieldBase
553
- key={key}
554
- role="combobox" // react-autosuggest adds this role to the container, but according to ARIA specs it should be on the input
555
- {...(inputPropsWithoutKey as TextFieldBaseProps)}
556
- fieldRef={containerRef}
557
- inputRef={combineRefs(inputRef, props.inputRef, ref)}
558
- />
559
- );
560
- }}
561
- suggestions={suggestions}
562
- shouldRenderSuggestions={(value) =>
563
- shouldShowSuggestions === 'focus' || value.trim().length >= shouldShowSuggestions
564
- }
565
- onSuggestionsFetchRequested={({value}) => {
566
- const matchedSuggestions = getSuggestions(value);
567
- setAreSuggestionsShown(true);
568
- setSuggestions(matchedSuggestions);
569
- }}
570
- onSuggestionsClearRequested={() => {
571
- setAreSuggestionsShown(false);
572
- setSuggestions([]);
573
- }}
574
- getSuggestionValue={(suggestion: any) => suggestion}
575
- renderSuggestion={(suggestion: any, {isHighlighted}) => (
576
- <div
577
- role="menuitem"
578
- className={classNames(styles.menuItem, {
579
- [styles.menuItemSelected]: isHighlighted,
580
- })}
581
- >
582
- <Text3 regular>{suggestion}</Text3>
583
- </div>
584
- )}
585
- renderSuggestionsContainer={(options) => {
586
- if (!areSuggestionsShown) {
587
- return null;
588
- }
589
-
590
- // extract key from containerProps to avoid React warning:
591
- // "A props object containing a "key" prop is being spread into JSX"
592
- const {key, ...containerPropsWithoutKey} = options.containerProps;
593
- const children =
594
- suggestions.length === 0 && withSuggestionsEmptyCase ? (
595
- <div role="status" className={classNames(styles.menuItemBase)}>
596
- <Text3 regular color={vars.colors.textSecondary}>
597
- {suggestionEmptyCaseText}
598
- </Text3>
599
- </div>
600
- ) : (
601
- options.children
602
- );
603
-
604
- if (!children) {
605
- return null;
606
- }
607
-
608
- return (
609
- <div
610
- {...containerPropsWithoutKey}
611
- key={key}
612
- style={{
613
- width: containerRef.current ? containerRef.current.clientWidth + 2 : 0, // +2 due to borders (input)
614
- }}
615
- className={styles.suggestionsContainer}
616
- aria-label={`${props.label} ${texts.menuLabelSuffix || t(tokens.menuLabelSuffix)}`}
617
- >
618
- {children}
619
- </div>
620
- );
621
- }}
622
- />
623
- </React.Suspense>
624
- ) : (
625
- <TextFieldBase {...props} id={id} ref={ref} />
626
- );
627
- }
628
- );