rebill-web-components-sdk 1.10.10-beta.1 → 1.10.10-beta.3

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 (170) hide show
  1. package/dist/cjs/card-fields-wrapper_11.cjs.entry.js +8 -8
  2. package/dist/cjs/index-C-VTnc0I.js.map +1 -1
  3. package/dist/cjs/input-otp.cjs.entry.js +2 -2
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/cjs/rebill-card.rebill-input-email.entry.cjs.js.map +1 -1
  6. package/dist/cjs/rebill-card_2.cjs.entry.js +78 -84
  7. package/dist/cjs/rebill-container_2.cjs.entry.js +1 -1
  8. package/dist/cjs/rebill-flex-container.cjs.entry.js +1 -1
  9. package/dist/cjs/rebill-grid-container.cjs.entry.js +1 -1
  10. package/dist/cjs/rebill-input-select.cjs.entry.js +2 -2
  11. package/dist/cjs/rebill-input-text.cjs.entry.js +2 -2
  12. package/dist/cjs/rebill-mode-sandbox_2.cjs.entry.js +1 -1
  13. package/dist/cjs/rebill-timeline-debit-day_2.cjs.entry.js +2 -2
  14. package/dist/cjs/rebill-web-components-sdk.cjs.js +1 -1
  15. package/dist/collection/components/shared/inputs/input-email/input-email.css +19 -8
  16. package/dist/collection/components/shared/inputs/input-email/input-email.js +85 -75
  17. package/dist/collection/components/shared/inputs/input-email/input-email.js.map +1 -1
  18. package/dist/collection/components/shared/inputs/input-otp/input-otp.js +2 -2
  19. package/dist/collection/components/shared/inputs/input-phone/input-phone.js +2 -2
  20. package/dist/collection/components/shared/inputs/input-select/input-select.js +2 -2
  21. package/dist/collection/components/shared/inputs/input-text/input-text.js +2 -2
  22. package/dist/collection/components/shared/layouts/generics/container.js +1 -1
  23. package/dist/collection/components/shared/layouts/generics/flex.js +1 -1
  24. package/dist/collection/components/shared/layouts/generics/grid.js +1 -1
  25. package/dist/collection/components/shared/mode-sandbox/mode-sandbox-mobile.js +1 -1
  26. package/dist/collection/components/shared/selectable-card/selectable-card.js +2 -2
  27. package/dist/collection/components/shared/singlePaymentMethod/singlePaymentMethod.js +4 -4
  28. package/dist/collection/components/shared/timeline/timeline-debit-day.js +1 -1
  29. package/dist/collection/components/shared/timeline/timeline-free-trial.js +1 -1
  30. package/dist/collection/utils/email-validation.js +11 -1
  31. package/dist/collection/utils/email-validation.js.map +1 -1
  32. package/dist/components/card-fields-wrapper.js +1 -1
  33. package/dist/components/change-card-success.js +1 -1
  34. package/dist/components/discount-coupon.js +1 -1
  35. package/dist/components/input-otp.js +1 -1
  36. package/dist/components/otp-component.js +1 -1
  37. package/dist/components/{p-xKyxKtdF.js → p-30DP4s-1.js} +4 -4
  38. package/dist/components/{p-xKyxKtdF.js.map → p-30DP4s-1.js.map} +1 -1
  39. package/dist/components/p-8BpuJ_V5.js.map +1 -1
  40. package/dist/components/{p-Cg8vTcm1.js → p-B28tIeVs.js} +3 -3
  41. package/dist/components/{p-Cg8vTcm1.js.map → p-B28tIeVs.js.map} +1 -1
  42. package/dist/components/{p-PtbrPqLv.js → p-B2zhJUcA.js} +4 -4
  43. package/dist/components/{p-PtbrPqLv.js.map → p-B2zhJUcA.js.map} +1 -1
  44. package/dist/components/{p-0K5ek-gN.js → p-B3jFm6B_.js} +4 -4
  45. package/dist/components/{p-0K5ek-gN.js.map → p-B3jFm6B_.js.map} +1 -1
  46. package/dist/components/{p-BGrQjFTc.js → p-BOYVvAQB.js} +3 -3
  47. package/dist/components/{p-BGrQjFTc.js.map → p-BOYVvAQB.js.map} +1 -1
  48. package/dist/components/{p-BgLkcEoy.js → p-BR18G7Pq.js} +4 -4
  49. package/dist/components/{p-BgLkcEoy.js.map → p-BR18G7Pq.js.map} +1 -1
  50. package/dist/components/{p-BwbfTRHn.js → p-Ba3VDw-H.js} +3 -3
  51. package/dist/components/{p-BwbfTRHn.js.map → p-Ba3VDw-H.js.map} +1 -1
  52. package/dist/components/{p-h01Qiljf.js → p-Ba8zuq-V.js} +3 -3
  53. package/dist/components/{p-h01Qiljf.js.map → p-Ba8zuq-V.js.map} +1 -1
  54. package/dist/components/{p-B0tiz_Xb.js → p-C7654vE1.js} +4 -4
  55. package/dist/components/{p-B0tiz_Xb.js.map → p-C7654vE1.js.map} +1 -1
  56. package/dist/components/{p-CiOrml-5.js → p-CFLYpSRc.js} +3 -3
  57. package/dist/components/{p-CiOrml-5.js.map → p-CFLYpSRc.js.map} +1 -1
  58. package/dist/components/{p-VlzBlwUc.js → p-CMVxImmw.js} +5 -5
  59. package/dist/components/{p-VlzBlwUc.js.map → p-CMVxImmw.js.map} +1 -1
  60. package/dist/components/{p-Cthy0N10.js → p-CP4gYqda.js} +5 -5
  61. package/dist/components/{p-Cthy0N10.js.map → p-CP4gYqda.js.map} +1 -1
  62. package/dist/components/{p-CSeC5LGG.js → p-Ch0U0Vmb.js} +3 -3
  63. package/dist/components/{p-CSeC5LGG.js.map → p-Ch0U0Vmb.js.map} +1 -1
  64. package/dist/components/{p-CamHvHq5.js → p-ChYpVv-Q.js} +4 -4
  65. package/dist/components/{p-CamHvHq5.js.map → p-ChYpVv-Q.js.map} +1 -1
  66. package/dist/components/{p-CtFu9Z9D.js → p-CypPi9fK.js} +4 -4
  67. package/dist/components/{p-CtFu9Z9D.js.map → p-CypPi9fK.js.map} +1 -1
  68. package/dist/components/{p-BOYEmkB-.js → p-D19UjlNC.js} +5 -5
  69. package/dist/components/{p-BOYEmkB-.js.map → p-D19UjlNC.js.map} +1 -1
  70. package/dist/components/{p-BqeCVajN.js → p-D6CVLxdH.js} +4 -4
  71. package/dist/components/{p-BqeCVajN.js.map → p-D6CVLxdH.js.map} +1 -1
  72. package/dist/components/{p-CVq9IPp4.js → p-DPB4aAQa.js} +6 -6
  73. package/dist/components/{p-CVq9IPp4.js.map → p-DPB4aAQa.js.map} +1 -1
  74. package/dist/components/{p-6IQljT42.js → p-Dhm2b0J_.js} +7 -7
  75. package/dist/components/{p-6IQljT42.js.map → p-Dhm2b0J_.js.map} +1 -1
  76. package/dist/components/{p-Dvnf-j7X.js → p-Dhs3vhG4.js} +5 -5
  77. package/dist/components/{p-Dvnf-j7X.js.map → p-Dhs3vhG4.js.map} +1 -1
  78. package/dist/components/{p-DR6_SaU9.js → p-Dp-CUwYp.js} +3 -3
  79. package/dist/components/{p-DR6_SaU9.js.map → p-Dp-CUwYp.js.map} +1 -1
  80. package/dist/components/{p-DeStKoNN.js → p-Dsrpb4rI.js} +3 -3
  81. package/dist/components/{p-DeStKoNN.js.map → p-Dsrpb4rI.js.map} +1 -1
  82. package/dist/components/{p-De7T_ng8.js → p-G3CHdt_U.js} +6 -6
  83. package/dist/components/{p-De7T_ng8.js.map → p-G3CHdt_U.js.map} +1 -1
  84. package/dist/components/{p-CN-2D26g.js → p-Pg_gixIL.js} +3 -3
  85. package/dist/components/{p-CN-2D26g.js.map → p-Pg_gixIL.js.map} +1 -1
  86. package/dist/components/{p-d40T-Ru7.js → p-fJpj0Zb5.js} +4 -4
  87. package/dist/components/{p-d40T-Ru7.js.map → p-fJpj0Zb5.js.map} +1 -1
  88. package/dist/components/{p-Czjk80qD.js → p-fXuAmVVV.js} +6 -6
  89. package/dist/components/{p-Czjk80qD.js.map → p-fXuAmVVV.js.map} +1 -1
  90. package/dist/components/{p-BMlyFJD4.js → p-iM2t1WOr.js} +3 -3
  91. package/dist/components/{p-BMlyFJD4.js.map → p-iM2t1WOr.js.map} +1 -1
  92. package/dist/components/{p-C-mZ7tbj.js → p-lrqPOj5Q.js} +3 -3
  93. package/dist/components/{p-C-mZ7tbj.js.map → p-lrqPOj5Q.js.map} +1 -1
  94. package/dist/components/{p-Bnocq8Cb.js → p-mSjgruQE.js} +4 -4
  95. package/dist/components/{p-Bnocq8Cb.js.map → p-mSjgruQE.js.map} +1 -1
  96. package/dist/components/{p-DP1RHUGR.js → p-r59n4m0a.js} +82 -90
  97. package/dist/components/p-r59n4m0a.js.map +1 -0
  98. package/dist/components/payment-method-selector.js +1 -1
  99. package/dist/components/rebill-address-form.js +1 -1
  100. package/dist/components/rebill-address-search.js +1 -1
  101. package/dist/components/rebill-address.js +1 -1
  102. package/dist/components/rebill-bank-selector.js +1 -1
  103. package/dist/components/rebill-change-card.js +19 -19
  104. package/dist/components/rebill-checkout-single-column.js +1 -1
  105. package/dist/components/rebill-checkout.js +26 -26
  106. package/dist/components/rebill-container.js +1 -1
  107. package/dist/components/rebill-flex-container.js +1 -1
  108. package/dist/components/rebill-footer.js +1 -1
  109. package/dist/components/rebill-grid-container.js +1 -1
  110. package/dist/components/rebill-input-email.js +1 -1
  111. package/dist/components/rebill-input-phone.js +1 -1
  112. package/dist/components/rebill-input-select.js +1 -1
  113. package/dist/components/rebill-input-text.js +1 -1
  114. package/dist/components/rebill-installments.js +1 -1
  115. package/dist/components/rebill-mode-sandbox-mobile.js +1 -1
  116. package/dist/components/rebill-processing-payment.js +1 -1
  117. package/dist/components/rebill-renewal.js +19 -19
  118. package/dist/components/rebill-summary.js +1 -1
  119. package/dist/components/rebill-timeline-debit-day.js +1 -1
  120. package/dist/components/rebill-timeline-free-trial.js +1 -1
  121. package/dist/components/renewal-success-page.js +1 -1
  122. package/dist/components/renewal-summary.js +1 -1
  123. package/dist/components/root-component.js +3 -3
  124. package/dist/components/selectable-card.js +1 -1
  125. package/dist/components/single-payment-method.js +1 -1
  126. package/dist/components/success-page.js +1 -1
  127. package/dist/components/user-information-phone.js +1 -1
  128. package/dist/components/user-information.js +1 -1
  129. package/dist/esm/card-fields-wrapper_11.entry.js +8 -8
  130. package/dist/esm/index-BTZ7D7jU.js.map +1 -1
  131. package/dist/esm/input-otp.entry.js +2 -2
  132. package/dist/esm/loader.js +1 -1
  133. package/dist/esm/rebill-card.rebill-input-email.entry.js.map +1 -1
  134. package/dist/esm/rebill-card_2.entry.js +78 -84
  135. package/dist/esm/rebill-container_2.entry.js +1 -1
  136. package/dist/esm/rebill-flex-container.entry.js +1 -1
  137. package/dist/esm/rebill-grid-container.entry.js +1 -1
  138. package/dist/esm/rebill-input-select.entry.js +2 -2
  139. package/dist/esm/rebill-input-text.entry.js +2 -2
  140. package/dist/esm/rebill-mode-sandbox_2.entry.js +1 -1
  141. package/dist/esm/rebill-timeline-debit-day_2.entry.js +2 -2
  142. package/dist/esm/rebill-web-components-sdk.js +1 -1
  143. package/dist/rebill-web-components-sdk/{p-2b3cb9b5.entry.js → p-11ee0328.entry.js} +2 -2
  144. package/dist/rebill-web-components-sdk/{p-24a79725.entry.js → p-130877f9.entry.js} +2 -2
  145. package/dist/rebill-web-components-sdk/{p-734696df.entry.js → p-16e7646e.entry.js} +2 -2
  146. package/dist/rebill-web-components-sdk/{p-c6c8bf05.entry.js → p-6eede717.entry.js} +2 -2
  147. package/dist/rebill-web-components-sdk/p-BTZ7D7jU.js.map +1 -1
  148. package/dist/rebill-web-components-sdk/p-b2fe4694.entry.js +2 -0
  149. package/dist/rebill-web-components-sdk/p-b2fe4694.entry.js.map +1 -0
  150. package/dist/rebill-web-components-sdk/{p-a09a0d53.entry.js → p-b350f63e.entry.js} +2 -2
  151. package/dist/rebill-web-components-sdk/{p-c38319c1.entry.js → p-be004b4f.entry.js} +2 -2
  152. package/dist/rebill-web-components-sdk/{p-894d7d00.entry.js → p-d73d7c39.entry.js} +2 -2
  153. package/dist/rebill-web-components-sdk/{p-45d1115b.entry.js → p-dd44d494.entry.js} +2 -2
  154. package/dist/rebill-web-components-sdk/{p-6ab7c3bc.entry.js → p-e54f571c.entry.js} +2 -2
  155. package/dist/rebill-web-components-sdk/rebill-card.rebill-input-email.entry.esm.js.map +1 -1
  156. package/dist/rebill-web-components-sdk/rebill-web-components-sdk.esm.js +1 -1
  157. package/dist/types/components/shared/inputs/input-email/input-email.d.ts +8 -17
  158. package/package.json +1 -1
  159. package/dist/components/p-DP1RHUGR.js.map +0 -1
  160. package/dist/rebill-web-components-sdk/p-8a2f420d.entry.js +0 -2
  161. package/dist/rebill-web-components-sdk/p-8a2f420d.entry.js.map +0 -1
  162. /package/dist/rebill-web-components-sdk/{p-2b3cb9b5.entry.js.map → p-11ee0328.entry.js.map} +0 -0
  163. /package/dist/rebill-web-components-sdk/{p-24a79725.entry.js.map → p-130877f9.entry.js.map} +0 -0
  164. /package/dist/rebill-web-components-sdk/{p-734696df.entry.js.map → p-16e7646e.entry.js.map} +0 -0
  165. /package/dist/rebill-web-components-sdk/{p-c6c8bf05.entry.js.map → p-6eede717.entry.js.map} +0 -0
  166. /package/dist/rebill-web-components-sdk/{p-a09a0d53.entry.js.map → p-b350f63e.entry.js.map} +0 -0
  167. /package/dist/rebill-web-components-sdk/{p-c38319c1.entry.js.map → p-be004b4f.entry.js.map} +0 -0
  168. /package/dist/rebill-web-components-sdk/{p-894d7d00.entry.js.map → p-d73d7c39.entry.js.map} +0 -0
  169. /package/dist/rebill-web-components-sdk/{p-45d1115b.entry.js.map → p-dd44d494.entry.js.map} +0 -0
  170. /package/dist/rebill-web-components-sdk/{p-6ab7c3bc.entry.js.map → p-e54f571c.entry.js.map} +0 -0
@@ -1,17 +1,12 @@
1
1
  import { h, } from "@stencil/core";
2
2
  import { I18nService } from "../../../../i18n/i18n.service";
3
- import { COLORS_ENUM } from "../../../../utils/color-class-mapper";
4
- import { getEmailSuggestions, suggestEmailCorrection, validateEmailFormat, } from "../../../../utils/email-validation";
3
+ import { getEmailSuggestions, suggestEmailCorrection } from "../../../../utils/email-validation";
5
4
  import { BLUR_DELAY_MS } from "../../../../utils/email-validation.constants";
6
5
  export class InputEmail {
7
6
  el;
8
7
  inputElement;
9
8
  suggestionsDropdownRef;
10
- isMouseOverSuggestions = false;
11
9
  blurTimeout;
12
- // Constants
13
- INPUT_PADDING_WITH_ICON = '2.5rem';
14
- INPUT_PADDING_DEFAULT = '0.75rem';
15
10
  /** Etiqueta que se muestra arriba del input */
16
11
  label = '';
17
12
  /** Placeholder del input */
@@ -40,10 +35,8 @@ export class InputEmail {
40
35
  highlightedSuggestionIndex = -1;
41
36
  /** Sugerencia de corrección de email (para errores tipográficos) */
42
37
  emailCorrectionSuggestion = null;
43
- /** Indica si el formato del email es válido */
44
- isValidFormat = true;
45
- /** Indica si el usuario ya salió del campo (blur) */
46
- hasBlurred = false;
38
+ /** Posición del dropdown (arriba o abajo) */
39
+ dropdownPosition = 'down';
47
40
  handleFormChange(event) {
48
41
  const formData = event.detail;
49
42
  if (formData && this.id in formData) {
@@ -53,8 +46,17 @@ export class InputEmail {
53
46
  handleDocumentClick(event) {
54
47
  if (this.suggestionsDropdownRef &&
55
48
  !this.suggestionsDropdownRef.contains(event.target) &&
56
- !this.inputElement?.contains(event.target) &&
57
- !this.isMouseOverSuggestions) {
49
+ !this.inputElement?.contains(event.target)) {
50
+ this.emailSuggestions = [];
51
+ this.highlightedSuggestionIndex = -1;
52
+ }
53
+ }
54
+ handleDocumentTouchEnd(event) {
55
+ const target = event.changedTouches?.[0]?.target;
56
+ if (this.suggestionsDropdownRef &&
57
+ target &&
58
+ !this.suggestionsDropdownRef.contains(target) &&
59
+ !this.inputElement?.contains(target)) {
58
60
  this.emailSuggestions = [];
59
61
  this.highlightedSuggestionIndex = -1;
60
62
  }
@@ -68,6 +70,24 @@ export class InputEmail {
68
70
  checkForTypo(emailValue) {
69
71
  this.emailCorrectionSuggestion = suggestEmailCorrection(emailValue);
70
72
  }
73
+ /**
74
+ * Calcula si el dropdown debe posicionarse arriba o abajo según el espacio disponible
75
+ */
76
+ calculateDropdownPosition() {
77
+ if (!this.inputElement || !this.suggestionsDropdownRef)
78
+ return;
79
+ const inputRect = this.inputElement.getBoundingClientRect();
80
+ const dropdownHeight = this.suggestionsDropdownRef.offsetHeight || 200; // max-height del CSS
81
+ const spaceBelow = window.innerHeight - inputRect.bottom;
82
+ const spaceAbove = inputRect.top;
83
+ // Si no hay espacio abajo pero sí arriba, posicionar arriba
84
+ if (spaceBelow < dropdownHeight && spaceAbove > spaceBelow) {
85
+ this.dropdownPosition = 'up';
86
+ }
87
+ else {
88
+ this.dropdownPosition = 'down';
89
+ }
90
+ }
71
91
  // ============================================================================
72
92
  // INPUT EVENT HANDLERS
73
93
  // ============================================================================
@@ -75,15 +95,15 @@ export class InputEmail {
75
95
  return value.toLowerCase();
76
96
  }
77
97
  updateEmailState(inputValue) {
78
- this.isValidFormat = validateEmailFormat(inputValue);
79
98
  this.emailSuggestions = getEmailSuggestions(inputValue);
80
99
  this.highlightedSuggestionIndex = -1;
81
100
  // Limpiar sugerencia de corrección al modificar el input
82
101
  this.emailCorrectionSuggestion = null;
83
102
  this.value = inputValue;
84
- }
85
- emitInputEvent(value) {
86
- this.input.emit({ id: this.id, value });
103
+ // Calcular posición del dropdown después de actualizar sugerencias
104
+ if (this.emailSuggestions.length > 0) {
105
+ setTimeout(() => this.calculateDropdownPosition(), 0);
106
+ }
87
107
  }
88
108
  onInput = (event) => {
89
109
  if (this.disabled)
@@ -92,14 +112,12 @@ export class InputEmail {
92
112
  const inputValue = this.normalizeEmailInput(input.value);
93
113
  input.value = inputValue;
94
114
  this.updateEmailState(inputValue);
95
- this.emitInputEvent(inputValue);
115
+ this.input.emit({ id: this.id, value: inputValue });
96
116
  };
97
117
  resetValidationState() {
98
- this.isValidFormat = true;
99
118
  this.emailSuggestions = [];
100
119
  this.highlightedSuggestionIndex = -1;
101
120
  this.emailCorrectionSuggestion = null;
102
- this.hasBlurred = false;
103
121
  }
104
122
  onClear = () => {
105
123
  if (this.disabled)
@@ -125,11 +143,11 @@ export class InputEmail {
125
143
  clearTimeout(this.blurTimeout);
126
144
  }
127
145
  this.blurTimeout = window.setTimeout(() => {
128
- if (!this.isMouseOverSuggestions) {
129
- this.hasBlurred = true;
146
+ // Verificar si el elemento activo está dentro del dropdown o es el input
147
+ const activeElement = document.activeElement;
148
+ const isClickingSuggestion = this.suggestionsDropdownRef?.contains(activeElement) || activeElement === this.inputElement;
149
+ if (!isClickingSuggestion) {
130
150
  this.trimAndUpdateValue();
131
- // Revalidar formato después del trim
132
- this.isValidFormat = validateEmailFormat(this.value);
133
151
  this.clearSuggestions();
134
152
  // Verificar errores tipográficos solo cuando sale del campo
135
153
  this.checkForTypo(this.value);
@@ -140,43 +158,38 @@ export class InputEmail {
140
158
  onFocus = () => {
141
159
  if (this.value) {
142
160
  this.emailSuggestions = getEmailSuggestions(this.value);
161
+ // Calcular posición después de que se rendericen las sugerencias
162
+ setTimeout(() => this.calculateDropdownPosition(), 0);
143
163
  }
144
164
  };
145
165
  // ============================================================================
146
166
  // SUGGESTION INTERACTION HANDLERS
147
167
  // ============================================================================
148
- moveHighlightDown() {
149
- this.highlightedSuggestionIndex = Math.min(this.highlightedSuggestionIndex + 1, this.emailSuggestions.length - 1);
150
- }
151
- moveHighlightUp() {
152
- this.highlightedSuggestionIndex = Math.max(this.highlightedSuggestionIndex - 1, -1);
153
- }
154
- selectHighlightedSuggestion() {
155
- if (this.highlightedSuggestionIndex >= 0) {
156
- this.selectSuggestion(this.emailSuggestions[this.highlightedSuggestionIndex]);
157
- }
158
- }
159
- closeSuggestions() {
160
- this.emailSuggestions = [];
161
- this.highlightedSuggestionIndex = -1;
162
- }
163
168
  onKeyDown = (event) => {
164
169
  if (this.emailSuggestions.length === 0) {
165
170
  return;
166
171
  }
167
- const keyHandlers = {
168
- ArrowDown: () => this.moveHighlightDown(),
169
- ArrowUp: () => this.moveHighlightUp(),
170
- Escape: () => this.closeSuggestions(),
171
- };
172
- const handler = keyHandlers[event.key];
173
- if (handler) {
174
- event.preventDefault();
175
- handler();
176
- }
177
- else if (event.key === 'Enter' && this.highlightedSuggestionIndex >= 0) {
178
- event.preventDefault();
179
- this.selectHighlightedSuggestion();
172
+ switch (event.key) {
173
+ case 'ArrowDown':
174
+ event.preventDefault();
175
+ this.highlightedSuggestionIndex = Math.min(this.highlightedSuggestionIndex + 1, this.emailSuggestions.length - 1);
176
+ break;
177
+ case 'ArrowUp':
178
+ event.preventDefault();
179
+ this.highlightedSuggestionIndex = Math.max(this.highlightedSuggestionIndex - 1, -1);
180
+ break;
181
+ case 'Escape':
182
+ event.preventDefault();
183
+ this.emailSuggestions = [];
184
+ this.highlightedSuggestionIndex = -1;
185
+ break;
186
+ case 'Enter':
187
+ if (this.highlightedSuggestionIndex >= 0 &&
188
+ this.highlightedSuggestionIndex < this.emailSuggestions.length) {
189
+ event.preventDefault();
190
+ this.selectSuggestion(this.emailSuggestions[this.highlightedSuggestionIndex]);
191
+ }
192
+ break;
180
193
  }
181
194
  };
182
195
  selectSuggestion = (suggestion) => {
@@ -198,11 +211,10 @@ export class InputEmail {
198
211
  handleSuggestionMouseEnter = (index) => {
199
212
  this.highlightedSuggestionIndex = index;
200
213
  };
201
- handleSuggestionsMouseEnter = () => {
202
- this.isMouseOverSuggestions = true;
203
- };
204
- handleSuggestionsMouseLeave = () => {
205
- this.isMouseOverSuggestions = false;
214
+ handleSuggestionTouchEnd = (suggestion, event) => {
215
+ event.preventDefault();
216
+ event.stopPropagation();
217
+ this.selectSuggestion(suggestion);
206
218
  };
207
219
  // ============================================================================
208
220
  // PUBLIC METHODS
@@ -218,18 +230,6 @@ export class InputEmail {
218
230
  // ============================================================================
219
231
  // RENDER HELPERS
220
232
  // ============================================================================
221
- getInputPaddingStyles() {
222
- return {
223
- paddingLeft: this.leftIcon ? this.INPUT_PADDING_WITH_ICON : this.INPUT_PADDING_DEFAULT,
224
- paddingRight: this.clearable ? this.INPUT_PADDING_WITH_ICON : this.INPUT_PADDING_DEFAULT,
225
- };
226
- }
227
- shouldShowInvalidFormat() {
228
- return !this.isValidFormat && this.value && !this.error && this.hasBlurred;
229
- }
230
- shouldShowInvalidFormatError() {
231
- return !this.isValidFormat && this.value && !this.error && this.hasBlurred;
232
- }
233
233
  renderEmailCorrectionSuggestion() {
234
234
  if (!this.emailCorrectionSuggestion)
235
235
  return null;
@@ -237,7 +237,7 @@ export class InputEmail {
237
237
  email: this.emailCorrectionSuggestion,
238
238
  });
239
239
  const parts = translatedText.split(this.emailCorrectionSuggestion);
240
- return (h("div", { class: "email-correction-suggestion", role: "status", "aria-live": "polite" }, h("rebill-icon", { name: "circle-info-outline", size: "16px", color: COLORS_ENUM.NEUTRALS_500 }), h("span", { class: "email-correction-text" }, parts.map((part, index) => (h("span", { key: index }, part, index < parts.length - 1 && (h("span", { class: "email-correction-link", onClick: this.applyCorrection }, this.emailCorrectionSuggestion))))))));
240
+ return (h("div", { class: "email-correction-suggestion", role: "status", "aria-live": "polite" }, h("rebill-icon", { name: "circle-info-outline", size: "16px" }), h("span", { class: "email-correction-text" }, parts.map((part, index) => (h("span", { key: index }, part, index < parts.length - 1 && (h("span", { class: "email-correction-link", onClick: this.applyCorrection }, this.emailCorrectionSuggestion))))))));
241
241
  }
242
242
  render() {
243
243
  const isFloating = this.variant === 'floating';
@@ -251,11 +251,16 @@ export class InputEmail {
251
251
  'floating-label': isFloating,
252
252
  'has-left-icon': !!this.leftIcon,
253
253
  'has-email-suggestions': showEmailSuggestions,
254
- 'has-invalid-format': this.shouldShowInvalidFormat(),
255
254
  };
256
- return (h("div", { key: '5e40ed1a07b4d6c4b8aa7d4296613d4972a9f53c', class: "input-container" }, !isFloating && this.label && (h("label", { key: 'c9495052e17b8a3809b27eca34d0d13b6e2d4659', class: `input-label ${this.disabled ? 'disabled' : ''}` }, this.label)), h("div", { key: '27464568b4aa841a1563bc251ec278316e5b98f2', class: wrapperClasses }, this.leftIcon && (h("div", { key: '0087a2c77deb8a5b5e47fb89ed07130a98775056', class: "icon-left" }, h("rebill-icon", { key: '53422720b4914238bdf07ef6e2366c6b687fb18f', name: this.leftIcon }))), h("input", { key: 'ec35a711e007049c0d83efc4f81a83bc593f7808', ref: el => (this.inputElement = el), type: "email", class: inputClasses, placeholder: isFloating ? this.label : this.placeholder, value: this.value, onInput: this.onInput, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeyDown, disabled: this.disabled, autocomplete: "email", autocapitalize: "none", autocorrect: "off", spellcheck: "false", "aria-autocomplete": "list", "aria-expanded": showEmailSuggestions ? 'true' : 'false', "aria-haspopup": "listbox", "aria-owns": showEmailSuggestions ? 'email-suggestions' : undefined, "aria-invalid": !this.isValidFormat && this.value && this.hasBlurred ? 'true' : 'false', "aria-describedby": this.error || (!this.isValidFormat && this.value && this.hasBlurred)
257
- ? `${this.id}-error`
258
- : undefined, style: this.getInputPaddingStyles() }), isFloating && h("label", { key: 'd6c0532aaa21de0fa4f02670b1e13f848ea10663', class: "input-text__input-label input-label" }, this.label), this.clearable && this.value && (h("div", { key: '9d005dae6956ccc5210edec04d591e05c8e7badd', class: "icon-right", onClick: this.onClear }, h("rebill-icon", { key: 'ab11a4670e21d4da92aadaff27d63bf4f4b33a71', name: "x" }))), showEmailSuggestions && (h("div", { key: 'ed65d951fc245455cf6b2cd6b3e31f20ed7af55b', id: "email-suggestions", ref: el => (this.suggestionsDropdownRef = el), class: "email-suggestions-dropdown", role: "listbox", "aria-label": I18nService.translate('userInformation.suggestionsLabel', 'Email suggestions'), onMouseEnter: this.handleSuggestionsMouseEnter, onMouseLeave: this.handleSuggestionsMouseLeave }, h("div", { key: '2229c646e008d7d06e8367557f51242353eb1262', class: "email-suggestions-header" }, I18nService.translate('userInformation.suggestionsHeader', 'Suggestion')), this.emailSuggestions.map((suggestion, index) => (h("div", { key: suggestion, role: "option", "aria-selected": this.highlightedSuggestionIndex === index ? 'true' : 'false', class: `email-suggestion-item ${this.highlightedSuggestionIndex === index ? 'highlighted' : ''}`, onClick: () => this.selectSuggestion(suggestion), onMouseEnter: () => this.handleSuggestionMouseEnter(index) }, suggestion)))))), this.error && (h("span", { key: 'e52aa1a0bb4a601956736ae5560d2e1185504587', id: `${this.id}-error`, class: "error-message", role: "alert" }, this.error)), this.shouldShowInvalidFormatError() && (h("span", { key: '2335067645f44850b24459788a818062a1eb368a', id: `${this.id}-error`, class: "error-message", role: "alert" }, I18nService.translate('paymentErrors.emailInvalid', 'The email address is not valid'))), this.renderEmailCorrectionSuggestion()));
255
+ return (h("div", { key: 'ed7774a2ea20bf39efc4ea94cb06a4a9c105b663', class: "input-container" }, !isFloating && this.label && (h("label", { key: 'cf2ec695410acf32c321b9a069aa59a6f6470dc3', class: `input-label ${this.disabled ? 'disabled' : ''}` }, this.label)), h("div", { key: 'e543a97cdc613fca6167dadf8a07b2777e90a495', class: wrapperClasses }, this.leftIcon && (h("div", { key: '03df3d4cc8c33c1759e2ed0fb18947d25e5a8e11', class: "icon-left" }, h("rebill-icon", { key: '67abed1bc54b6a64141744cbb32a0be15880a298', name: this.leftIcon }))), h("input", { key: '99c93d4e17b0dc740a53002c871fc57d406475c1', ref: el => (this.inputElement = el), type: "email", class: inputClasses, placeholder: isFloating ? this.label : this.placeholder, value: this.value, onInput: this.onInput, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeyDown, disabled: this.disabled, autocomplete: "email", autocapitalize: "none", autocorrect: "off", spellcheck: "false", "aria-autocomplete": "list", "aria-expanded": showEmailSuggestions ? 'true' : 'false', "aria-haspopup": "listbox", "aria-owns": showEmailSuggestions ? 'email-suggestions' : undefined, "aria-invalid": !!this.error ? 'true' : 'false', "aria-describedby": this.error ? `${this.id}-error` : undefined, style: {
256
+ paddingLeft: this.leftIcon ? '2.5rem' : '0.75rem',
257
+ paddingRight: this.clearable && this.value ? '2.5rem' : '0.75rem',
258
+ } }), isFloating && h("label", { key: '88a949293b8ebe6bcce0b734f764a85d5b71236c', class: "input-text__input-label input-label" }, this.label), this.clearable && this.value && (h("div", { key: 'c048feb271e68b3ff7fd6c7cc8f33c6f8d4433a4', class: "icon-right", onClick: this.onClear }, h("rebill-icon", { key: '0ab75a65fac36cd6528c4ac396f044452f2df7a2', name: "x" }))), showEmailSuggestions && (h("div", { key: '2db5ec50f09ac0c993f22a9346027ee8eba5f12c', id: "email-suggestions", ref: el => {
259
+ this.suggestionsDropdownRef = el;
260
+ if (el) {
261
+ setTimeout(() => this.calculateDropdownPosition(), 0);
262
+ }
263
+ }, class: `email-suggestions-dropdown ${this.dropdownPosition === 'up' ? 'dropdown-up' : ''}`, role: "listbox", "aria-label": I18nService.translate('userInformation.suggestionsLabel', 'Email suggestions') }, h("div", { key: 'bb037425cb813cfde02c24600ab36e114d2560a5', class: "email-suggestions-header" }, I18nService.translate('userInformation.suggestionsHeader', 'Suggestion')), this.emailSuggestions.map((suggestion, index) => (h("div", { key: suggestion, role: "option", "aria-selected": this.highlightedSuggestionIndex === index ? 'true' : 'false', class: `email-suggestion-item ${this.highlightedSuggestionIndex === index ? 'highlighted' : ''}`, onClick: () => this.selectSuggestion(suggestion), onTouchEnd: e => this.handleSuggestionTouchEnd(suggestion, e), onMouseEnter: () => this.handleSuggestionMouseEnter(index) }, suggestion)))))), this.error && (h("span", { key: '6450cd4636ec361fe0fe0f9044feb7a3d8329118', id: `${this.id}-error`, class: "error-message", role: "alert" }, this.error)), this.renderEmailCorrectionSuggestion()));
259
264
  }
260
265
  static get is() { return "rebill-input-email"; }
261
266
  static get originalStyleUrls() {
@@ -456,8 +461,7 @@ export class InputEmail {
456
461
  "emailSuggestions": {},
457
462
  "highlightedSuggestionIndex": {},
458
463
  "emailCorrectionSuggestion": {},
459
- "isValidFormat": {},
460
- "hasBlurred": {}
464
+ "dropdownPosition": {}
461
465
  };
462
466
  }
463
467
  static get events() {
@@ -532,6 +536,12 @@ export class InputEmail {
532
536
  "target": "document",
533
537
  "capture": false,
534
538
  "passive": false
539
+ }, {
540
+ "name": "touchend",
541
+ "method": "handleDocumentTouchEnd",
542
+ "target": "document",
543
+ "capture": false,
544
+ "passive": true
535
545
  }];
536
546
  }
537
547
  }
@@ -1 +1 @@
1
- {"version":3,"file":"input-email.js","sourceRoot":"","sources":["../../../../../src/components/shared/inputs/input-email/input-email.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n Listen,\n Method,\n Prop,\n State,\n h,\n} from '@stencil/core';\nimport { I18nService } from '../../../../i18n/i18n.service';\nimport { COLORS_ENUM } from '../../../../utils/color-class-mapper';\nimport {\n getEmailSuggestions,\n suggestEmailCorrection,\n validateEmailFormat,\n} from '../../../../utils/email-validation';\nimport { BLUR_DELAY_MS } from '../../../../utils/email-validation.constants';\n\n@Component({\n tag: 'rebill-input-email',\n styleUrl: 'input-email.css',\n shadow: false,\n})\nexport class InputEmail {\n @Element() el: HTMLElement;\n private inputElement: HTMLInputElement;\n private suggestionsDropdownRef?: HTMLDivElement;\n private isMouseOverSuggestions: boolean = false;\n private blurTimeout?: number;\n\n // Constants\n private readonly INPUT_PADDING_WITH_ICON = '2.5rem';\n private readonly INPUT_PADDING_DEFAULT = '0.75rem';\n\n /** Etiqueta que se muestra arriba del input */\n @Prop() label: string = '';\n /** Placeholder del input */\n @Prop() placeholder: string = '';\n /** Valor del input */\n @Prop({ mutable: true, reflect: true }) value: string = '';\n /** Mensaje de error */\n @Prop() error: string = '';\n /** ID del input */\n @Prop() id: string = 'email';\n /** Estado deshabilitado */\n @Prop() disabled: boolean = false;\n /** Icono a la izquierda */\n @Prop() leftIcon: string;\n /** Permitir limpiar el input */\n @Prop() clearable: boolean = false;\n /** Variacion de estilo del input */\n @Prop() variant: 'default' | 'floating' = 'default';\n /** Evento al cambiar el valor */\n @Event() input: EventEmitter<{ id: string; value: string }>;\n /** Evento al salir del input */\n @Event() blur: EventEmitter<{ id: string; value: string }>;\n /** Sugerencias de email */\n @State() emailSuggestions: string[] = [];\n /** Índice de la sugerencia resaltada */\n @State() highlightedSuggestionIndex: number = -1;\n /** Sugerencia de corrección de email (para errores tipográficos) */\n @State() emailCorrectionSuggestion: string | null = null;\n /** Indica si el formato del email es válido */\n @State() isValidFormat: boolean = true;\n /** Indica si el usuario ya salió del campo (blur) */\n @State() hasBlurred: boolean = false;\n\n @Listen('change', { target: 'document' })\n handleFormChange(event: CustomEvent) {\n const formData = event.detail;\n if (formData && this.id in formData) {\n this.value = formData[this.id];\n }\n }\n\n @Listen('click', { target: 'document' })\n handleDocumentClick(event: MouseEvent) {\n if (\n this.suggestionsDropdownRef &&\n !this.suggestionsDropdownRef.contains(event.target as Node) &&\n !this.inputElement?.contains(event.target as Node) &&\n !this.isMouseOverSuggestions\n ) {\n this.emailSuggestions = [];\n this.highlightedSuggestionIndex = -1;\n }\n }\n\n // ============================================================================\n // EMAIL VALIDATION & SUGGESTIONS\n // ============================================================================\n\n /**\n * Detecta si hay un error tipográfico en el email y actualiza el estado\n */\n private checkForTypo(emailValue: string): void {\n this.emailCorrectionSuggestion = suggestEmailCorrection(emailValue);\n }\n\n // ============================================================================\n // INPUT EVENT HANDLERS\n // ============================================================================\n\n private normalizeEmailInput(value: string): string {\n return value.toLowerCase();\n }\n\n private updateEmailState(inputValue: string): void {\n this.isValidFormat = validateEmailFormat(inputValue);\n this.emailSuggestions = getEmailSuggestions(inputValue);\n this.highlightedSuggestionIndex = -1;\n // Limpiar sugerencia de corrección al modificar el input\n this.emailCorrectionSuggestion = null;\n this.value = inputValue;\n }\n\n private emitInputEvent(value: string): void {\n this.input.emit({ id: this.id, value });\n }\n\n private onInput = (event: Event) => {\n if (this.disabled) return;\n\n const input = event.target as HTMLInputElement;\n const inputValue = this.normalizeEmailInput(input.value);\n\n input.value = inputValue;\n this.updateEmailState(inputValue);\n this.emitInputEvent(inputValue);\n };\n\n private resetValidationState(): void {\n this.isValidFormat = true;\n this.emailSuggestions = [];\n this.highlightedSuggestionIndex = -1;\n this.emailCorrectionSuggestion = null;\n this.hasBlurred = false;\n }\n\n private onClear = () => {\n if (this.disabled) return;\n\n this.value = '';\n this.resetValidationState();\n this.input.emit({ id: this.id, value: this.value });\n };\n\n private trimAndUpdateValue(): void {\n const trimmedValue = this.value.trim();\n if (trimmedValue !== this.value) {\n this.value = trimmedValue;\n this.input.emit({ id: this.id, value: this.value });\n }\n }\n\n private clearSuggestions(): void {\n this.emailSuggestions = [];\n this.highlightedSuggestionIndex = -1;\n // Nota: No limpiamos emailCorrectionSuggestion para que el usuario pueda verla\n }\n\n private onBlur = () => {\n if (this.blurTimeout) {\n clearTimeout(this.blurTimeout);\n }\n\n this.blurTimeout = window.setTimeout(() => {\n if (!this.isMouseOverSuggestions) {\n this.hasBlurred = true;\n this.trimAndUpdateValue();\n // Revalidar formato después del trim\n this.isValidFormat = validateEmailFormat(this.value);\n this.clearSuggestions();\n // Verificar errores tipográficos solo cuando sale del campo\n this.checkForTypo(this.value);\n this.blur.emit({ id: this.id, value: this.value });\n }\n }, BLUR_DELAY_MS);\n };\n\n private onFocus = () => {\n if (this.value) {\n this.emailSuggestions = getEmailSuggestions(this.value);\n }\n };\n\n // ============================================================================\n // SUGGESTION INTERACTION HANDLERS\n // ============================================================================\n\n private moveHighlightDown(): void {\n this.highlightedSuggestionIndex = Math.min(\n this.highlightedSuggestionIndex + 1,\n this.emailSuggestions.length - 1,\n );\n }\n\n private moveHighlightUp(): void {\n this.highlightedSuggestionIndex = Math.max(this.highlightedSuggestionIndex - 1, -1);\n }\n\n private selectHighlightedSuggestion(): void {\n if (this.highlightedSuggestionIndex >= 0) {\n this.selectSuggestion(this.emailSuggestions[this.highlightedSuggestionIndex]);\n }\n }\n\n private closeSuggestions(): void {\n this.emailSuggestions = [];\n this.highlightedSuggestionIndex = -1;\n }\n\n private onKeyDown = (event: KeyboardEvent) => {\n if (this.emailSuggestions.length === 0) {\n return;\n }\n\n const keyHandlers: Record<string, () => void> = {\n ArrowDown: () => this.moveHighlightDown(),\n ArrowUp: () => this.moveHighlightUp(),\n Escape: () => this.closeSuggestions(),\n };\n\n const handler = keyHandlers[event.key];\n if (handler) {\n event.preventDefault();\n handler();\n } else if (event.key === 'Enter' && this.highlightedSuggestionIndex >= 0) {\n event.preventDefault();\n this.selectHighlightedSuggestion();\n }\n };\n\n private selectSuggestion = (suggestion: string) => {\n this.value = suggestion;\n this.emailSuggestions = [];\n this.highlightedSuggestionIndex = -1;\n this.emailCorrectionSuggestion = null;\n if (this.inputElement) {\n this.inputElement.value = suggestion;\n }\n this.input.emit({ id: this.id, value: this.value });\n this.inputElement?.focus();\n };\n\n private applyCorrection = () => {\n if (this.emailCorrectionSuggestion) {\n this.selectSuggestion(this.emailCorrectionSuggestion);\n }\n };\n\n private handleSuggestionMouseEnter = (index: number) => {\n this.highlightedSuggestionIndex = index;\n };\n\n private handleSuggestionsMouseEnter = () => {\n this.isMouseOverSuggestions = true;\n };\n\n private handleSuggestionsMouseLeave = () => {\n this.isMouseOverSuggestions = false;\n };\n\n // ============================================================================\n // PUBLIC METHODS\n // ============================================================================\n\n @Method()\n async getInputElement(): Promise<HTMLInputElement | null> {\n return this.inputElement;\n }\n\n disconnectedCallback() {\n if (this.blurTimeout) {\n clearTimeout(this.blurTimeout);\n }\n }\n\n // ============================================================================\n // RENDER HELPERS\n // ============================================================================\n\n private getInputPaddingStyles() {\n return {\n paddingLeft: this.leftIcon ? this.INPUT_PADDING_WITH_ICON : this.INPUT_PADDING_DEFAULT,\n paddingRight: this.clearable ? this.INPUT_PADDING_WITH_ICON : this.INPUT_PADDING_DEFAULT,\n };\n }\n\n private shouldShowInvalidFormat(): boolean {\n return !this.isValidFormat && this.value && !this.error && this.hasBlurred;\n }\n\n private shouldShowInvalidFormatError(): boolean {\n return !this.isValidFormat && this.value && !this.error && this.hasBlurred;\n }\n\n private renderEmailCorrectionSuggestion() {\n if (!this.emailCorrectionSuggestion) return null;\n\n const translatedText = I18nService.translate('userInformation.emailCorrectionSuggestion', {\n email: this.emailCorrectionSuggestion,\n });\n const parts = translatedText.split(this.emailCorrectionSuggestion);\n\n return (\n <div class=\"email-correction-suggestion\" role=\"status\" aria-live=\"polite\">\n <rebill-icon name=\"circle-info-outline\" size=\"16px\" color={COLORS_ENUM.NEUTRALS_500} />\n <span class=\"email-correction-text\">\n {parts.map((part, index) => (\n <span key={index}>\n {part}\n {index < parts.length - 1 && (\n <span class=\"email-correction-link\" onClick={this.applyCorrection}>\n {this.emailCorrectionSuggestion}\n </span>\n )}\n </span>\n ))}\n </span>\n </div>\n );\n }\n\n render() {\n const isFloating = this.variant === 'floating';\n const showEmailSuggestions = this.emailSuggestions.length > 0;\n\n const inputClasses = {\n 'input-element': true,\n 'input-error': !!this.error,\n };\n\n const wrapperClasses = {\n 'input-wrapper': true,\n 'floating-label': isFloating,\n 'has-left-icon': !!this.leftIcon,\n 'has-email-suggestions': showEmailSuggestions,\n 'has-invalid-format': this.shouldShowInvalidFormat(),\n };\n\n return (\n <div class=\"input-container\">\n {!isFloating && this.label && (\n <label class={`input-label ${this.disabled ? 'disabled' : ''}`}>{this.label}</label>\n )}\n <div class={wrapperClasses}>\n {this.leftIcon && (\n <div class=\"icon-left\">\n <rebill-icon name={this.leftIcon}></rebill-icon>\n </div>\n )}\n <input\n ref={el => (this.inputElement = el)}\n type=\"email\"\n class={inputClasses}\n placeholder={isFloating ? this.label : this.placeholder}\n value={this.value}\n onInput={this.onInput}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onKeyDown={this.onKeyDown}\n disabled={this.disabled}\n autocomplete=\"email\"\n autocapitalize=\"none\"\n autocorrect=\"off\"\n spellcheck=\"false\"\n aria-autocomplete=\"list\"\n aria-expanded={showEmailSuggestions ? 'true' : 'false'}\n aria-haspopup=\"listbox\"\n aria-owns={showEmailSuggestions ? 'email-suggestions' : undefined}\n aria-invalid={!this.isValidFormat && this.value && this.hasBlurred ? 'true' : 'false'}\n aria-describedby={\n this.error || (!this.isValidFormat && this.value && this.hasBlurred)\n ? `${this.id}-error`\n : undefined\n }\n style={this.getInputPaddingStyles()}\n />\n {isFloating && <label class=\"input-text__input-label input-label\">{this.label}</label>}\n {this.clearable && this.value && (\n <div class=\"icon-right\" onClick={this.onClear}>\n <rebill-icon name=\"x\"></rebill-icon>\n </div>\n )}\n {showEmailSuggestions && (\n <div\n id=\"email-suggestions\"\n ref={el => (this.suggestionsDropdownRef = el)}\n class=\"email-suggestions-dropdown\"\n role=\"listbox\"\n aria-label={I18nService.translate(\n 'userInformation.suggestionsLabel',\n 'Email suggestions',\n )}\n onMouseEnter={this.handleSuggestionsMouseEnter}\n onMouseLeave={this.handleSuggestionsMouseLeave}\n >\n <div class=\"email-suggestions-header\">\n {I18nService.translate('userInformation.suggestionsHeader', 'Suggestion')}\n </div>\n {this.emailSuggestions.map((suggestion, index) => (\n <div\n key={suggestion}\n role=\"option\"\n aria-selected={this.highlightedSuggestionIndex === index ? 'true' : 'false'}\n class={`email-suggestion-item ${this.highlightedSuggestionIndex === index ? 'highlighted' : ''}`}\n onClick={() => this.selectSuggestion(suggestion)}\n onMouseEnter={() => this.handleSuggestionMouseEnter(index)}\n >\n {suggestion}\n </div>\n ))}\n </div>\n )}\n </div>\n {this.error && (\n <span id={`${this.id}-error`} class=\"error-message\" role=\"alert\">\n {this.error}\n </span>\n )}\n {this.shouldShowInvalidFormatError() && (\n <span id={`${this.id}-error`} class=\"error-message\" role=\"alert\">\n {I18nService.translate('paymentErrors.emailInvalid', 'The email address is not valid')}\n </span>\n )}\n {this.renderEmailCorrectionSuggestion()}\n </div>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"input-email.js","sourceRoot":"","sources":["../../../../../src/components/shared/inputs/input-email/input-email.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n Listen,\n Method,\n Prop,\n State,\n h,\n} from '@stencil/core';\nimport { I18nService } from '../../../../i18n/i18n.service';\nimport { getEmailSuggestions, suggestEmailCorrection } from '../../../../utils/email-validation';\nimport { BLUR_DELAY_MS } from '../../../../utils/email-validation.constants';\n\n@Component({\n tag: 'rebill-input-email',\n styleUrl: 'input-email.css',\n shadow: false,\n})\nexport class InputEmail {\n @Element() el: HTMLElement;\n private inputElement: HTMLInputElement;\n private suggestionsDropdownRef?: HTMLDivElement;\n private blurTimeout?: number;\n\n /** Etiqueta que se muestra arriba del input */\n @Prop() label: string = '';\n /** Placeholder del input */\n @Prop() placeholder: string = '';\n /** Valor del input */\n @Prop({ mutable: true, reflect: true }) value: string = '';\n /** Mensaje de error */\n @Prop() error: string = '';\n /** ID del input */\n @Prop() id: string = 'email';\n /** Estado deshabilitado */\n @Prop() disabled: boolean = false;\n /** Icono a la izquierda */\n @Prop() leftIcon: string;\n /** Permitir limpiar el input */\n @Prop() clearable: boolean = false;\n /** Variacion de estilo del input */\n @Prop() variant: 'default' | 'floating' = 'default';\n /** Evento al cambiar el valor */\n @Event() input: EventEmitter<{ id: string; value: string }>;\n /** Evento al salir del input */\n @Event() blur: EventEmitter<{ id: string; value: string }>;\n /** Sugerencias de email */\n @State() emailSuggestions: string[] = [];\n /** Índice de la sugerencia resaltada */\n @State() highlightedSuggestionIndex: number = -1;\n /** Sugerencia de corrección de email (para errores tipográficos) */\n @State() emailCorrectionSuggestion: string | null = null;\n /** Posición del dropdown (arriba o abajo) */\n @State() dropdownPosition: 'down' | 'up' = 'down';\n\n @Listen('change', { target: 'document' })\n handleFormChange(event: CustomEvent) {\n const formData = event.detail;\n if (formData && this.id in formData) {\n this.value = formData[this.id];\n }\n }\n\n @Listen('click', { target: 'document' })\n handleDocumentClick(event: MouseEvent) {\n if (\n this.suggestionsDropdownRef &&\n !this.suggestionsDropdownRef.contains(event.target as Node) &&\n !this.inputElement?.contains(event.target as Node)\n ) {\n this.emailSuggestions = [];\n this.highlightedSuggestionIndex = -1;\n }\n }\n\n @Listen('touchend', { target: 'document' })\n handleDocumentTouchEnd(event: TouchEvent) {\n const target = event.changedTouches?.[0]?.target as Node;\n if (\n this.suggestionsDropdownRef &&\n target &&\n !this.suggestionsDropdownRef.contains(target) &&\n !this.inputElement?.contains(target)\n ) {\n this.emailSuggestions = [];\n this.highlightedSuggestionIndex = -1;\n }\n }\n\n // ============================================================================\n // EMAIL VALIDATION & SUGGESTIONS\n // ============================================================================\n\n /**\n * Detecta si hay un error tipográfico en el email y actualiza el estado\n */\n private checkForTypo(emailValue: string): void {\n this.emailCorrectionSuggestion = suggestEmailCorrection(emailValue);\n }\n\n /**\n * Calcula si el dropdown debe posicionarse arriba o abajo según el espacio disponible\n */\n private calculateDropdownPosition(): void {\n if (!this.inputElement || !this.suggestionsDropdownRef) return;\n\n const inputRect = this.inputElement.getBoundingClientRect();\n const dropdownHeight = this.suggestionsDropdownRef.offsetHeight || 200; // max-height del CSS\n const spaceBelow = window.innerHeight - inputRect.bottom;\n const spaceAbove = inputRect.top;\n\n // Si no hay espacio abajo pero sí arriba, posicionar arriba\n if (spaceBelow < dropdownHeight && spaceAbove > spaceBelow) {\n this.dropdownPosition = 'up';\n } else {\n this.dropdownPosition = 'down';\n }\n }\n\n // ============================================================================\n // INPUT EVENT HANDLERS\n // ============================================================================\n\n private normalizeEmailInput(value: string): string {\n return value.toLowerCase();\n }\n\n private updateEmailState(inputValue: string): void {\n this.emailSuggestions = getEmailSuggestions(inputValue);\n this.highlightedSuggestionIndex = -1;\n // Limpiar sugerencia de corrección al modificar el input\n this.emailCorrectionSuggestion = null;\n this.value = inputValue;\n\n // Calcular posición del dropdown después de actualizar sugerencias\n if (this.emailSuggestions.length > 0) {\n setTimeout(() => this.calculateDropdownPosition(), 0);\n }\n }\n\n private onInput = (event: Event) => {\n if (this.disabled) return;\n\n const input = event.target as HTMLInputElement;\n const inputValue = this.normalizeEmailInput(input.value);\n\n input.value = inputValue;\n this.updateEmailState(inputValue);\n this.input.emit({ id: this.id, value: inputValue });\n };\n\n private resetValidationState(): void {\n this.emailSuggestions = [];\n this.highlightedSuggestionIndex = -1;\n this.emailCorrectionSuggestion = null;\n }\n\n private onClear = () => {\n if (this.disabled) return;\n\n this.value = '';\n this.resetValidationState();\n this.input.emit({ id: this.id, value: this.value });\n };\n\n private trimAndUpdateValue(): void {\n const trimmedValue = this.value.trim();\n if (trimmedValue !== this.value) {\n this.value = trimmedValue;\n this.input.emit({ id: this.id, value: this.value });\n }\n }\n\n private clearSuggestions(): void {\n this.emailSuggestions = [];\n this.highlightedSuggestionIndex = -1;\n // Nota: No limpiamos emailCorrectionSuggestion para que el usuario pueda verla\n }\n\n private onBlur = () => {\n if (this.blurTimeout) {\n clearTimeout(this.blurTimeout);\n }\n\n this.blurTimeout = window.setTimeout(() => {\n // Verificar si el elemento activo está dentro del dropdown o es el input\n const activeElement = document.activeElement;\n const isClickingSuggestion =\n this.suggestionsDropdownRef?.contains(activeElement) || activeElement === this.inputElement;\n\n if (!isClickingSuggestion) {\n this.trimAndUpdateValue();\n this.clearSuggestions();\n // Verificar errores tipográficos solo cuando sale del campo\n this.checkForTypo(this.value);\n this.blur.emit({ id: this.id, value: this.value });\n }\n }, BLUR_DELAY_MS);\n };\n\n private onFocus = () => {\n if (this.value) {\n this.emailSuggestions = getEmailSuggestions(this.value);\n // Calcular posición después de que se rendericen las sugerencias\n setTimeout(() => this.calculateDropdownPosition(), 0);\n }\n };\n\n // ============================================================================\n // SUGGESTION INTERACTION HANDLERS\n // ============================================================================\n\n private onKeyDown = (event: KeyboardEvent) => {\n if (this.emailSuggestions.length === 0) {\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.highlightedSuggestionIndex = Math.min(\n this.highlightedSuggestionIndex + 1,\n this.emailSuggestions.length - 1,\n );\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.highlightedSuggestionIndex = Math.max(this.highlightedSuggestionIndex - 1, -1);\n break;\n case 'Escape':\n event.preventDefault();\n this.emailSuggestions = [];\n this.highlightedSuggestionIndex = -1;\n break;\n case 'Enter':\n if (\n this.highlightedSuggestionIndex >= 0 &&\n this.highlightedSuggestionIndex < this.emailSuggestions.length\n ) {\n event.preventDefault();\n this.selectSuggestion(this.emailSuggestions[this.highlightedSuggestionIndex]);\n }\n break;\n }\n };\n\n private selectSuggestion = (suggestion: string) => {\n this.value = suggestion;\n this.emailSuggestions = [];\n this.highlightedSuggestionIndex = -1;\n this.emailCorrectionSuggestion = null;\n if (this.inputElement) {\n this.inputElement.value = suggestion;\n }\n this.input.emit({ id: this.id, value: this.value });\n this.inputElement?.focus();\n };\n\n private applyCorrection = () => {\n if (this.emailCorrectionSuggestion) {\n this.selectSuggestion(this.emailCorrectionSuggestion);\n }\n };\n\n private handleSuggestionMouseEnter = (index: number) => {\n this.highlightedSuggestionIndex = index;\n };\n\n private handleSuggestionTouchEnd = (suggestion: string, event: TouchEvent) => {\n event.preventDefault();\n event.stopPropagation();\n this.selectSuggestion(suggestion);\n };\n\n // ============================================================================\n // PUBLIC METHODS\n // ============================================================================\n\n @Method()\n async getInputElement(): Promise<HTMLInputElement | null> {\n return this.inputElement;\n }\n\n disconnectedCallback() {\n if (this.blurTimeout) {\n clearTimeout(this.blurTimeout);\n }\n }\n\n // ============================================================================\n // RENDER HELPERS\n // ============================================================================\n\n private renderEmailCorrectionSuggestion() {\n if (!this.emailCorrectionSuggestion) return null;\n\n const translatedText = I18nService.translate('userInformation.emailCorrectionSuggestion', {\n email: this.emailCorrectionSuggestion,\n });\n const parts = translatedText.split(this.emailCorrectionSuggestion);\n\n return (\n <div class=\"email-correction-suggestion\" role=\"status\" aria-live=\"polite\">\n <rebill-icon name=\"circle-info-outline\" size=\"16px\" />\n <span class=\"email-correction-text\">\n {parts.map((part, index) => (\n <span key={index}>\n {part}\n {index < parts.length - 1 && (\n <span class=\"email-correction-link\" onClick={this.applyCorrection}>\n {this.emailCorrectionSuggestion}\n </span>\n )}\n </span>\n ))}\n </span>\n </div>\n );\n }\n\n render() {\n const isFloating = this.variant === 'floating';\n const showEmailSuggestions = this.emailSuggestions.length > 0;\n\n const inputClasses = {\n 'input-element': true,\n 'input-error': !!this.error,\n };\n\n const wrapperClasses = {\n 'input-wrapper': true,\n 'floating-label': isFloating,\n 'has-left-icon': !!this.leftIcon,\n 'has-email-suggestions': showEmailSuggestions,\n };\n\n return (\n <div class=\"input-container\">\n {!isFloating && this.label && (\n <label class={`input-label ${this.disabled ? 'disabled' : ''}`}>{this.label}</label>\n )}\n <div class={wrapperClasses}>\n {this.leftIcon && (\n <div class=\"icon-left\">\n <rebill-icon name={this.leftIcon}></rebill-icon>\n </div>\n )}\n <input\n ref={el => (this.inputElement = el)}\n type=\"email\"\n class={inputClasses}\n placeholder={isFloating ? this.label : this.placeholder}\n value={this.value}\n onInput={this.onInput}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onKeyDown={this.onKeyDown}\n disabled={this.disabled}\n autocomplete=\"email\"\n autocapitalize=\"none\"\n autocorrect=\"off\"\n spellcheck=\"false\"\n aria-autocomplete=\"list\"\n aria-expanded={showEmailSuggestions ? 'true' : 'false'}\n aria-haspopup=\"listbox\"\n aria-owns={showEmailSuggestions ? 'email-suggestions' : undefined}\n aria-invalid={!!this.error ? 'true' : 'false'}\n aria-describedby={this.error ? `${this.id}-error` : undefined}\n style={{\n paddingLeft: this.leftIcon ? '2.5rem' : '0.75rem',\n paddingRight: this.clearable && this.value ? '2.5rem' : '0.75rem',\n }}\n />\n {isFloating && <label class=\"input-text__input-label input-label\">{this.label}</label>}\n {this.clearable && this.value && (\n <div class=\"icon-right\" onClick={this.onClear}>\n <rebill-icon name=\"x\"></rebill-icon>\n </div>\n )}\n {showEmailSuggestions && (\n <div\n id=\"email-suggestions\"\n ref={el => {\n this.suggestionsDropdownRef = el;\n if (el) {\n setTimeout(() => this.calculateDropdownPosition(), 0);\n }\n }}\n class={`email-suggestions-dropdown ${this.dropdownPosition === 'up' ? 'dropdown-up' : ''}`}\n role=\"listbox\"\n aria-label={I18nService.translate(\n 'userInformation.suggestionsLabel',\n 'Email suggestions',\n )}\n >\n <div class=\"email-suggestions-header\">\n {I18nService.translate('userInformation.suggestionsHeader', 'Suggestion')}\n </div>\n {this.emailSuggestions.map((suggestion, index) => (\n <div\n key={suggestion}\n role=\"option\"\n aria-selected={this.highlightedSuggestionIndex === index ? 'true' : 'false'}\n class={`email-suggestion-item ${this.highlightedSuggestionIndex === index ? 'highlighted' : ''}`}\n onClick={() => this.selectSuggestion(suggestion)}\n onTouchEnd={e => this.handleSuggestionTouchEnd(suggestion, e)}\n onMouseEnter={() => this.handleSuggestionMouseEnter(index)}\n >\n {suggestion}\n </div>\n ))}\n </div>\n )}\n </div>\n {this.error && (\n <span id={`${this.id}-error`} class=\"error-message\" role=\"alert\">\n {this.error}\n </span>\n )}\n {this.renderEmailCorrectionSuggestion()}\n </div>\n );\n }\n}\n"]}
@@ -96,14 +96,14 @@ export class InputOtp {
96
96
  }
97
97
  };
98
98
  render() {
99
- return (h("div", { key: '8f324c2d6a73de5de5b83d4b00632e7182ea3695', class: "otp-container" }, h("div", { key: '4a9d719f15a25cb7bb457b1e07aa2b2d214edf26', class: "email-icon" }, h("rebill-icon", { key: '8248ca0435594b7325930055f578c9188f5d12ca', name: "invite" })), h("div", { key: 'def3880f5a8ad7403e63f9f7fa2067972718fa16', class: "otp-input-container", onClick: this.handleFieldClick }, h("div", { key: '316ccdd7ffed1251fa6efbff1695b34735e54de2', class: "otp-fields" }, [0, 1, 2, 3, 4, 5].map(index => (h("div", { key: index, style: { display: 'flex', alignItems: 'center' } }, h("div", { class: `otp-field ${this.error ? 'error' : ''}` }, h("input", { type: "text", maxlength: "1", placeholder: this.placeholder, value: this.otpValue[index] || '', onInput: e => this.handleInput(e, index), onClick: () => this.handleInputClick(), onKeyDown: e => this.handleKeyDown(e, index), onPaste: e => this.handlePaste(e), onFocus: e => {
99
+ return (h("div", { key: '615be7ff9ad29a0873228f501be83d0891bc74af', class: "otp-container" }, h("div", { key: 'e03de7a45bb1673738f4ef9f416300e08852bcc6', class: "email-icon" }, h("rebill-icon", { key: 'b595dfa8ab4849e199a162a38c3eb5cc0ae8b1ac', name: "invite" })), h("div", { key: '5b790fac0488f00ff68f6cf8ce4f0ed680b9b1db', class: "otp-input-container", onClick: this.handleFieldClick }, h("div", { key: '2cd37978e718e40280387d9eac57db16f10a9c3d', class: "otp-fields" }, [0, 1, 2, 3, 4, 5].map(index => (h("div", { key: index, style: { display: 'flex', alignItems: 'center' } }, h("div", { class: `otp-field ${this.error ? 'error' : ''}` }, h("input", { type: "text", maxlength: "1", placeholder: this.placeholder, value: this.otpValue[index] || '', onInput: e => this.handleInput(e, index), onClick: () => this.handleInputClick(), onKeyDown: e => this.handleKeyDown(e, index), onPaste: e => this.handlePaste(e), onFocus: e => {
100
100
  this.el
101
101
  ?.querySelectorAll('.otp-field')
102
102
  .forEach(field => field.classList.remove('active'));
103
103
  e.target.parentElement?.classList.add('active');
104
104
  }, onBlur: e => {
105
105
  e.target.parentElement?.classList.remove('active');
106
- } })), index === 2 && h("div", { class: "otp-separator" }, "-")))))), this.error && h("div", { key: '27f7bd5e8d35b95867e27ad8a7ec2591761f3ebd', class: "otp-error" }, this.error)));
106
+ } })), index === 2 && h("div", { class: "otp-separator" }, "-")))))), this.error && h("div", { key: 'fabee9ad77fa762f6b2e6f267d47c323bd7b88cb', class: "otp-error" }, this.error)));
107
107
  }
108
108
  static get is() { return "input-otp"; }
109
109
  static get originalStyleUrls() {
@@ -230,10 +230,10 @@ export class InputPhone {
230
230
  const translatedError = this.translateError(this.error);
231
231
  const translatedValidationError = this.translateError(this.validationError);
232
232
  const displayError = translatedValidationError || translatedError;
233
- return (h("div", { key: '93eab235bf7e6c8b066eccf5217843c47cae7060', class: "input-container" }, h("div", { key: '1882948328830eb6d12fec9a948e2f72c6c57141', class: inputClasses }, h("div", { key: '3ab0db212bf7dcabac8a19fdfc699af2523801c6', class: "input-combo-select country-selector", onClick: this.toggleDropdown }, h("span", { key: '8b962c76b799c661eda46eea81319ae9209a45e5', class: "flag" }, this.selectedCountry.flag), h("span", { key: '4ad929ede1ec71a3b08a4277e8b29fc2f766c841', class: "dial-code" }, this.selectedCountry.dialCode), h("span", { key: '6dbe62e602de2fa0dd7d37703801ef992ae982e8', class: `dropdown-arrow ${this.isDropdownOpen ? 'open' : ''}` }, "\u25BC")), this.isDropdownOpen && (h("div", { key: '3caee85fddec1eae868d1caf1c0da3ce12c0d370', class: "country-dropdown" }, this.searchable && (h("div", { key: '819fe233e3cf13d732e5f62a1e9e2e683a5e7304', class: "search-container", onClick: this.handleSearchClick }, h("div", { key: 'e2ddd5531c02fda461b521722c7be14494d7bc7d', class: "search-input-wrapper" }, h("rebill-icon", { key: '4ac0d06fa9dc2030ea812fdd063e437e831a8ebd', name: "search", size: "16px", class: "search-icon" }), h("input", { key: 'f005e7c8ccebda04eadfbe50a9d1a01f6b9e79b6', ref: el => (this.searchInputRef = el), type: "text", class: "search-input", placeholder: this.searchPlaceholder, value: this.searchTerm, onInput: this.handleSearchInput, onClick: this.handleSearchClick }), this.searchTerm && (h("button", { key: '555a03acec479967f787b4ddb07410f5ef5160d8', type: "button", class: "clear-search", onClick: event => {
233
+ return (h("div", { key: '86806d2c401c9de8a1267dfee742f05ad301a6b8', class: "input-container" }, h("div", { key: '3efa804b16358cc980aba0133830499e17c93a52', class: inputClasses }, h("div", { key: 'a871c178e883e2df6ce482b3002514e995cb92b8', class: "input-combo-select country-selector", onClick: this.toggleDropdown }, h("span", { key: '834868a9602efc68f24c97dc93b1feac23e811c9', class: "flag" }, this.selectedCountry.flag), h("span", { key: '49b3566e44b2cadfa387534fe121522bcfd38616', class: "dial-code" }, this.selectedCountry.dialCode), h("span", { key: '230c7dd4bad5ed9e04fc24a8a2cf40afa59e380b', class: `dropdown-arrow ${this.isDropdownOpen ? 'open' : ''}` }, "\u25BC")), this.isDropdownOpen && (h("div", { key: 'f6d8f07f4d077c986fc853f447feb8e45057b2c1', class: "country-dropdown" }, this.searchable && (h("div", { key: '7b1e49fddc1dcee59e55e7441fe427a67c789933', class: "search-container", onClick: this.handleSearchClick }, h("div", { key: 'e36e23c80c8615e8557fb453ad9217bc02679bb0', class: "search-input-wrapper" }, h("rebill-icon", { key: 'f1a62cad8488bb87f90324e96fb9c5db31ae3586', name: "search", size: "16px", class: "search-icon" }), h("input", { key: '44204f2d039489fa9486cf2d27c76e7a01e0e9e8', ref: el => (this.searchInputRef = el), type: "text", class: "search-input", placeholder: this.searchPlaceholder, value: this.searchTerm, onInput: this.handleSearchInput, onClick: this.handleSearchClick }), this.searchTerm && (h("button", { key: '88713e09141e9c0378939f5a7de68520b8b56802', type: "button", class: "clear-search", onClick: event => {
234
234
  event.stopPropagation();
235
235
  this.clearSearch();
236
- }, "aria-label": "Clear search" }, h("rebill-icon", { key: 'c37eb08ec3ea630a3069a2e205e1bf89998d15c8', name: "x", size: "16px" })))))), this.filteredCountries.length > 0 ? (this.filteredCountries.map(country => (h("div", { key: country.code, class: "country-option", onClick: e => this.selectCountry(country, e) }, h("span", { class: "flag" }, country.flag), h("span", { class: "country-name" }, country.name), h("span", { class: "dial-code" }, country.dialCode))))) : (h("div", { class: "no-results" }, "No se encontraron resultados")))), h("input", { key: '04436bbeca6c611f3683eb5849ca6fd1d73a1e1f', id: this.phoneNumberId, type: "tel", class: "input-combo-element phone-number-input", placeholder: this.placeholder, value: this.value, onInput: this.onInput, onBlur: this.onPhoneBlurPhone, disabled: this.disabled, required: this.required })), displayError && h("span", { key: '3c951eaab6a3b907939e2b6f4c2a4bcc920acca3', class: "error-message" }, displayError)));
236
+ }, "aria-label": "Clear search" }, h("rebill-icon", { key: '34b6821cbf7eb8cf45781edb17e7b92a9029fe8b', name: "x", size: "16px" })))))), this.filteredCountries.length > 0 ? (this.filteredCountries.map(country => (h("div", { key: country.code, class: "country-option", onClick: e => this.selectCountry(country, e) }, h("span", { class: "flag" }, country.flag), h("span", { class: "country-name" }, country.name), h("span", { class: "dial-code" }, country.dialCode))))) : (h("div", { class: "no-results" }, "No se encontraron resultados")))), h("input", { key: 'a3e90dbc14a2a0b1f41bfb9fe2c3a4be30b52913', id: this.phoneNumberId, type: "tel", class: "input-combo-element phone-number-input", placeholder: this.placeholder, value: this.value, onInput: this.onInput, onBlur: this.onPhoneBlurPhone, disabled: this.disabled, required: this.required })), displayError && h("span", { key: 'eef5aefcd44f05877670f2818e0290d8e2480f6d', class: "error-message" }, displayError)));
237
237
  }
238
238
  static get is() { return "rebill-input-phone"; }
239
239
  static get originalStyleUrls() {
@@ -228,10 +228,10 @@ export class InputSelect {
228
228
  render() {
229
229
  const selectedLabel = this.getSelectedOptionLabel();
230
230
  const hasValue = this.value !== '';
231
- return (h("div", { key: '32f4999edb4d4da2812560c63946e05c950caee5', class: "input-container" }, this.label && (h("label", { key: '70445887d1b5d440b22cf938e56b16cc3f02b0e0', class: `input-label ${this.disabled ? 'disabled' : ''}` }, this.label)), h("div", { key: '7f5ff1a2db4226036f41063d29b20b8f40422e32', class: `select-wrapper ${this.disabled ? 'disabled' : ''} ${this.isOpen ? 'open' : ''}` }, h("div", { key: '062cdd5aecbb1bceaa415aaf2f6296e80541ed37', ref: el => (this.triggerRef = el), class: `input-element select-trigger ${this.error ? 'input-error' : ''} ${!hasValue ? 'placeholder' : ''} ${this.variant === 'underlined' ? 'underlined' : ''}`, style: { backgroundColor: this.backgroundColor }, onClick: this.toggleDropdown, tabIndex: this.disabled ? -1 : 0, role: "combobox", "aria-expanded": this.isOpen.toString(), "aria-haspopup": "listbox", "aria-labelledby": this.label ? `${this.id}-label` : undefined }, h("span", { key: 'b92ecf5026213ec910b88d79ba4de80dfd73cf84', class: "select-value", style: { fontSize: this.fontSize }, innerHTML: selectedLabel }), h("div", { key: 'b36d9acfbbb2cfbd095528fae43530c27d933fa3', class: "icon-wrapper" }, this.loading ? (h("div", { class: "spinner" })) : (h("rebill-icon", { name: this.getArrowIcon(), size: "20px", class: `select-icon ${this.isOpen && this.arrowIcon === 'down' ? 'rotated' : ''}` })))), this.isOpen && (h("div", { key: '3ff2163c2dfbb2f175a433cc98155eebf22b577f', ref: el => (this.dropdownRef = el), class: `select-dropPosition ${this.dropPosition === 'up' ? 'open-up' : 'open-down'}`, role: "listbox" }, this.searchable && (h("div", { key: '603ff27e7ffcb72ab9a534a9f2a15a710e32ddb1', class: "search-container", onClick: this.handleSearchClick }, h("div", { key: 'a6f1c006b21d3dfd7f21093a38cf599a71e1f704', class: "search-input-wrapper" }, h("rebill-icon", { key: '97dc7561f5a63c44c96cb91f8ed17fa95c002d11', name: "search", size: "16px", class: "search-icon" }), h("input", { key: 'f14c4907a47f1d42094ff4f3dd34c3b9ee0bbfd5', ref: el => (this.searchInputRef = el), type: "text", class: "search-input", placeholder: this.searchPlaceholder, value: this.searchTerm, onInput: this.handleSearchInput, onClick: this.handleSearchClick, style: { fontSize: this.fontSize } }), this.searchTerm && (h("button", { key: '343ebb91f0a3fd3653a4b2ddc35f9fb6888cf018', type: "button", class: "clear-search", onClick: event => {
231
+ return (h("div", { key: '0e6f5c3da18fb9dbeb93f45162041b5505097564', class: "input-container" }, this.label && (h("label", { key: '9505b104c9e3f3f1a364ed6d2d780bfeb7a69012', class: `input-label ${this.disabled ? 'disabled' : ''}` }, this.label)), h("div", { key: '55243fa12938ade6c83007c446b7b1f616d444aa', class: `select-wrapper ${this.disabled ? 'disabled' : ''} ${this.isOpen ? 'open' : ''}` }, h("div", { key: '2720934fc5005d0e8e4317a79edc4bde4b82a7d8', ref: el => (this.triggerRef = el), class: `input-element select-trigger ${this.error ? 'input-error' : ''} ${!hasValue ? 'placeholder' : ''} ${this.variant === 'underlined' ? 'underlined' : ''}`, style: { backgroundColor: this.backgroundColor }, onClick: this.toggleDropdown, tabIndex: this.disabled ? -1 : 0, role: "combobox", "aria-expanded": this.isOpen.toString(), "aria-haspopup": "listbox", "aria-labelledby": this.label ? `${this.id}-label` : undefined }, h("span", { key: 'd8ed0ea9ebe50c4cbd669ad7e13e305300e15dc4', class: "select-value", style: { fontSize: this.fontSize }, innerHTML: selectedLabel }), h("div", { key: 'ed8f0cfb60ce0d98439e2349d03b1bda7ef195e8', class: "icon-wrapper" }, this.loading ? (h("div", { class: "spinner" })) : (h("rebill-icon", { name: this.getArrowIcon(), size: "20px", class: `select-icon ${this.isOpen && this.arrowIcon === 'down' ? 'rotated' : ''}` })))), this.isOpen && (h("div", { key: '533d68b163dd306e4ad1430c00fab0e40f3eb1c9', ref: el => (this.dropdownRef = el), class: `select-dropPosition ${this.dropPosition === 'up' ? 'open-up' : 'open-down'}`, role: "listbox" }, this.searchable && (h("div", { key: '1b4735d29d10550a7ad375909b2096d6b57df0be', class: "search-container", onClick: this.handleSearchClick }, h("div", { key: 'a8fe85af07599b66006e4682436b8c25189a503e', class: "search-input-wrapper" }, h("rebill-icon", { key: '738e594819d828b0c6239a1fb86e5aea9b23879f', name: "search", size: "16px", class: "search-icon" }), h("input", { key: '604587d45d3d22f209afef0fc052fbab41fcaae4', ref: el => (this.searchInputRef = el), type: "text", class: "search-input", placeholder: this.searchPlaceholder, value: this.searchTerm, onInput: this.handleSearchInput, onClick: this.handleSearchClick, style: { fontSize: this.fontSize } }), this.searchTerm && (h("button", { key: '6e05c7c4c2c13eb282a15111c20363cca444a577', type: "button", class: "clear-search", onClick: event => {
232
232
  event.stopPropagation();
233
233
  this.clearSearch();
234
- }, "aria-label": "Clear search" }, h("rebill-icon", { key: '64414b770dc61ff142733c04858282c8a2e60bf6', name: "x", size: "16px" })))))), this.loading && this.filteredOptions.length === 0 ? (h("div", { class: "loading-message", style: { fontSize: this.fontSize } }, h("div", { class: "spinner" }), I18nService.translate('common.loadingOptions'))) : this.filteredOptions.length > 0 ? (this.filteredOptions.map((option, index) => (h("div", { class: `select-option ${this.value === option.value ? 'selected' : ''} ${this.highlightedIndex === index ? 'highlighted' : ''}`, style: { fontSize: this.fontSize }, onClick: () => this.selectOption(option), role: "option", "aria-selected": this.value === option.value ? 'true' : 'false' }, h("span", { innerHTML: option.label }))))) : (h("div", { class: "no-results", style: { fontSize: this.fontSize } }, "No se encontraron resultados"))))), this.error && h("span", { key: '58eb536511f2474d888f28a475f8f1abe224e306', class: "error-message" }, this.error)));
234
+ }, "aria-label": "Clear search" }, h("rebill-icon", { key: '069c433dbbe800c3f25141c17c10c8f62efe4d7b', name: "x", size: "16px" })))))), this.loading && this.filteredOptions.length === 0 ? (h("div", { class: "loading-message", style: { fontSize: this.fontSize } }, h("div", { class: "spinner" }), I18nService.translate('common.loadingOptions'))) : this.filteredOptions.length > 0 ? (this.filteredOptions.map((option, index) => (h("div", { class: `select-option ${this.value === option.value ? 'selected' : ''} ${this.highlightedIndex === index ? 'highlighted' : ''}`, style: { fontSize: this.fontSize }, onClick: () => this.selectOption(option), role: "option", "aria-selected": this.value === option.value ? 'true' : 'false' }, h("span", { innerHTML: option.label }))))) : (h("div", { class: "no-results", style: { fontSize: this.fontSize } }, "No se encontraron resultados"))))), this.error && h("span", { key: 'c989c9ff8ee1ddb81013ccb0718e963a1ee6bf6f', class: "error-message" }, this.error)));
235
235
  }
236
236
  static get is() { return "rebill-input-select"; }
237
237
  static get originalStyleUrls() {
@@ -86,10 +86,10 @@ export class InputText {
86
86
  'has-left-icon': !!this.leftIcon,
87
87
  'has-right-icon': !!this.rightIcon,
88
88
  };
89
- return (h("div", { key: 'a3d0bd612daa9ad4fddf6a7d85fc9f2d46cc86bc', class: "input-container" }, !isFloating && this.label && (h("label", { key: '9c55c4cada7abb35c1a482e87a864219f6cc346a', class: `input-label ${this.disabled ? 'disabled' : ''}` }, this.label)), h("div", { key: 'fd64863ef20f9108722a10bf2eede2cc95e2321c', class: wrapperClasses }, this.leftIcon && (h("div", { key: 'acd1194024d73669edfde75f03a0e970991322c5', class: "icon-left" }, h("rebill-icon", { key: '045e9d287bce636f3f837856b24005599daace57', name: this.leftIcon }))), h("input", { key: '125cf5671e779abb0489a53c0afc805ed6e7f25e', ref: el => (this.inputElement = el), type: "text", class: inputClasses, placeholder: isFloating ? this.label : this.placeholder, value: this.value, onInput: this.onInput, onBlur: this.onBlur, disabled: this.disabled, style: {
89
+ return (h("div", { key: 'f39ee322584b38eefca85033e0220b97ef9f9b51', class: "input-container" }, !isFloating && this.label && (h("label", { key: '818a1267b8a3787fc3b7444a3e82513556e87a9d', class: `input-label ${this.disabled ? 'disabled' : ''}` }, this.label)), h("div", { key: 'd82e674e2557e7cec8c4e847e174aaa03f9ce2d9', class: wrapperClasses }, this.leftIcon && (h("div", { key: '95f41d7ed56d021bed85e2082e0d23ccb03bca7a', class: "icon-left" }, h("rebill-icon", { key: '772fd006b5c9d327c2749d187ab92b8272a0f524', name: this.leftIcon }))), h("input", { key: '8e4436a3934da7e2be2eab7147da2f31db80b2f0', ref: el => (this.inputElement = el), type: "text", class: inputClasses, placeholder: isFloating ? this.label : this.placeholder, value: this.value, onInput: this.onInput, onBlur: this.onBlur, disabled: this.disabled, style: {
90
90
  paddingLeft: this.leftIcon ? '2.5rem' : '0.75rem',
91
91
  paddingRight: this.clearable || this.rightIcon ? '2.5rem' : '0.75rem',
92
- } }), isFloating && h("label", { key: 'a51395c4c9d342dd0e7d1f8c42cfa5b6ac5e2ba2', class: "input-text__input-label input-label" }, this.label), this.clearable && this.value && (h("div", { key: 'f22ad3a3651fe21b629fb5233a047970645e8506', class: "icon-right", onClick: this.onClear }, h("rebill-icon", { key: '721b242dcbbd866c1f33052f3988575035f7d853', name: "x" }))), this.rightIcon && !this.clearable && (h("div", { key: '61d2fdec691068b75406082e5ea6f56bab293447', class: "icon-right", onClick: this.onRightIconClick }, h("rebill-icon", { key: '754ea312e234565f4a2cf2a5ffd46bf9e68df76f', name: this.rightIcon })))), this.error && h("span", { key: '9adb4fd1af1f9cafc003e26b4d4eb627af0f6777', class: "error-message" }, this.error)));
92
+ } }), isFloating && h("label", { key: '709ec4e0444199fa2dc57dc8b871bb0dff88ce2d', class: "input-text__input-label input-label" }, this.label), this.clearable && this.value && (h("div", { key: '52582fdcc09045442d83c4b032c60d7a11c4ff41', class: "icon-right", onClick: this.onClear }, h("rebill-icon", { key: '12ec41dc2c903798cad6ce8227e4a1fe4831aa9a', name: "x" }))), this.rightIcon && !this.clearable && (h("div", { key: '7d4c13ea33047fc711f6ec8400ea2a70efd9ec35', class: "icon-right", onClick: this.onRightIconClick }, h("rebill-icon", { key: '9ccd12f6e50f3915e67df6361ecb9d371707e446', name: this.rightIcon })))), this.error && h("span", { key: 'a49f52502b59e6a8d36b48decc7173e073b4b9c2', class: "error-message" }, this.error)));
93
93
  }
94
94
  static get is() { return "rebill-input-text"; }
95
95
  static get originalStyleUrls() {
@@ -11,7 +11,7 @@ export class Container {
11
11
  width: '100%',
12
12
  boxSizing: 'border-box',
13
13
  };
14
- return (h("div", { key: '7272386504f5139e50c7dcbcd1bd9af9d74db240', style: style }, h("slot", { key: 'e8392ee249029ce6855ba51090a112ed3556f68c' })));
14
+ return (h("div", { key: 'e6642934b751eeb1d114359dd472a34d83d8e283', style: style }, h("slot", { key: 'a76a04056d9dc961af0f99926c997d62dcaf8f4f' })));
15
15
  }
16
16
  static get is() { return "rebill-container"; }
17
17
  static get properties() {
@@ -15,7 +15,7 @@ export class Flex {
15
15
  justifyContent: this.justifyContent,
16
16
  width: '100%',
17
17
  };
18
- return (h("div", { key: '4ca133b15fe8e79987cb07a366baccb6c84bce07', style: style }, h("slot", { key: '4b5798ba07b73e2e0a9e9b6d3651ac75a5e4a370' })));
18
+ return (h("div", { key: 'f5a4af11499bd6308a53ed1815db55e66bbb5184', style: style }, h("slot", { key: 'f614aec1f97f3267433108f36640c941d7e17211' })));
19
19
  }
20
20
  static get is() { return "rebill-flex-container"; }
21
21
  static get properties() {
@@ -13,7 +13,7 @@ export class Grid {
13
13
  justifyContent: this.justifyContent,
14
14
  width: '100%',
15
15
  };
16
- return (h("div", { key: '0422ed7c62a86eb1e8b9d02ed1bbeba95ae8dc1b', style: style }, h("slot", { key: '12bf0f464bd1a909ae6ec861d84b428d1b34a6f0' })));
16
+ return (h("div", { key: 'cf0e3291790f754b73e6ade2e8a99cfc8a1dd593', style: style }, h("slot", { key: '8e026097c4529e75831e51e62f625bac6700e63f' })));
17
17
  }
18
18
  static get is() { return "rebill-grid-container"; }
19
19
  static get properties() {
@@ -33,7 +33,7 @@ export class RebillTestModeChipMobile {
33
33
  return (h("div", { class: "mode-sandbox-mobile__cards-dropdown-panel" }, h("div", { class: "mode-sandbox-mobile__cards-dropdown-panel-header" }, h("rebill-icon", { name: "card-test" }), h("rebill-typography", { variant: "subtitle2", color: COLORS_ENUM.PRIMARY_DARK }, I18nService.translate('sandbox.cardTest'))), h("div", { class: "mode-sandbox-mobile__card-details" }, h("div", { class: "mode-sandbox-mobile__card-section" }, h("div", { class: "mode-sandbox-mobile__header-content" }, h("rebill-icon", { name: "succes", color: COLORS_ENUM.GREEN }), h("rebill-typography", { variant: "subtitle2", color: COLORS_ENUM.PRIMARY_DARK }, I18nService.translate('sandbox.successPayment'))), h("div", { class: "mode-sandbox-mobile__card-row" }, h("div", { class: "mode-sandbox-mobile__card-value" }, h("rebill-typography", { variant: "subtitle3", color: COLORS_ENUM.GREY_700 }, I18nService.translate('sandbox.cardNumber')), h("div", { class: "mode-sandbox-mobile__field-value" }, h("rebill-icon", { name: "visa" }), h("rebill-typography", { variant: "subtitle2", color: COLORS_ENUM.PRIMARY_DARK }, "4539148803436467"))), h("div", { class: "mode-sandbox-mobile__card-value" }, h("rebill-typography", { variant: "subtitle3", color: COLORS_ENUM.GREY_700 }, I18nService.translate('sandbox.exp')), h("div", { class: "mode-sandbox-mobile__field-value" }, h("rebill-typography", { variant: "subtitle2", color: COLORS_ENUM.PRIMARY_DARK }, "01/99"))), h("div", { class: "mode-sandbox-mobile__card-value" }, h("rebill-typography", { variant: "subtitle3", color: COLORS_ENUM.GREY_700 }, I18nService.translate('sandbox.cvv')), h("div", { class: "mode-sandbox-mobile__field-value mode-sandbox-mobile__field-value-with-copy" }, h("rebill-typography", { variant: "subtitle2", color: COLORS_ENUM.PRIMARY_DARK }, "123"), h("div", { class: "mode-sandbox-mobile__copy-button" }, h("rebill-button", { variant: "text", size: "small", onClick: () => this.handleCopy('4539148803436467 01/99 123') }, h("rebill-icon", { name: "copy" }))))))), h("div", { class: "mode-sandbox-mobile__card-section" }, h("div", { class: "mode-sandbox-mobile__header-content" }, h("rebill-icon", { name: "rejected", color: COLORS_ENUM.ERROR }), h("rebill-typography", { variant: "subtitle2", color: COLORS_ENUM.PRIMARY_DARK }, I18nService.translate('sandbox.rejectedPayment'))), h("div", { class: "mode-sandbox-mobile__card-row" }, h("div", { class: "mode-sandbox-mobile__card-value" }, h("rebill-typography", { variant: "subtitle3", color: COLORS_ENUM.GREY_700 }, I18nService.translate('sandbox.cardNumber')), h("div", { class: "mode-sandbox-mobile__field-value" }, h("rebill-icon", { name: "visa" }), h("rebill-typography", { variant: "subtitle2", color: COLORS_ENUM.PRIMARY_DARK }, "4485364739527352"))), h("div", { class: "mode-sandbox-mobile__card-value" }, h("rebill-typography", { variant: "subtitle3", color: COLORS_ENUM.GREY_700 }, I18nService.translate('sandbox.exp')), h("div", { class: "mode-sandbox-mobile__field-value" }, h("rebill-typography", { variant: "subtitle2", color: COLORS_ENUM.PRIMARY_DARK }, "01/99"))), h("div", { class: "mode-sandbox-mobile__card-value" }, h("rebill-typography", { variant: "subtitle3", color: COLORS_ENUM.GREY_700 }, I18nService.translate('sandbox.cvv')), h("div", { class: "mode-sandbox-mobile__field-value mode-sandbox-mobile__field-value-with-copy" }, h("rebill-typography", { variant: "subtitle2", color: COLORS_ENUM.PRIMARY_DARK }, "123"), h("div", { class: "mode-sandbox-mobile__copy-button" }, h("rebill-button", { variant: "text", size: "small", onClick: () => this.handleCopy('4485364739527352 01/99 123') }, h("rebill-icon", { name: "copy" })))))))), h("div", { class: "mode-sandbox-mobile__docs-section", onClick: this.handleDocsClick }, h("rebill-typography", { variant: "subtitle2", color: COLORS_ENUM.PRIMARY }, I18nService.translate('sandbox.docs')), h("rebill-icon", { name: "external-link" }))));
34
34
  }
35
35
  render() {
36
- return (h("div", { key: '87089a0a8516fe3ad86536546193d7194dde574b', class: `mode-sandbox-mobile__test-mode-container ${this.isPanelVisible ? 'cards-visible' : ''}` }, this.isPanelVisible && h("div", { key: '7568ef4acbea4aa4ab1a938ce65adcebe2508174', class: "mode-sandbox-mobile__overlay" }), h("div", { key: 'aa874a4196885c323c418438fb0a05b2ecc5aa87', class: `mode-sandbox-mobile__test-mode-chip-mobile ${this.isPanelVisible ? 'expanded' : ''}` }, this.renderBasicChip()), this.isPanelVisible && this.renderCardsPanel()));
36
+ return (h("div", { key: 'bf0bf6d7f48bf92f5f20f225e00740ccb3141bae', class: `mode-sandbox-mobile__test-mode-container ${this.isPanelVisible ? 'cards-visible' : ''}` }, this.isPanelVisible && h("div", { key: 'a3b5f53e5246435952cf04247425b3c8f492fd5e', class: "mode-sandbox-mobile__overlay" }), h("div", { key: '65a06a99311b5eb39ca2ece44a5a4169d7f8e495', class: `mode-sandbox-mobile__test-mode-chip-mobile ${this.isPanelVisible ? 'expanded' : ''}` }, this.renderBasicChip()), this.isPanelVisible && this.renderCardsPanel()));
37
37
  }
38
38
  static get is() { return "rebill-mode-sandbox-mobile"; }
39
39
  static get originalStyleUrls() {
@@ -16,11 +16,11 @@ export class SelectableCard {
16
16
  this.selectableCardClick.emit(this.cardKey);
17
17
  };
18
18
  render() {
19
- return (h("button", { key: '53bab5d8611b6b473fc5056d0e5aad0bc548dc49', class: {
19
+ return (h("button", { key: 'b2fa45aaf8dd5c5a5678080518f0e809378bc532', class: {
20
20
  'selectable-card': true,
21
21
  'selected': this.selected,
22
22
  'disabled': this.disabled,
23
- }, onClick: this.handleClick, disabled: this.disabled, part: "button", type: "button" }, h("div", { key: 'bc07f0625e6eee85d6330f23f7370b629fd86db8', class: "icon" }, h("slot", { key: '79235ed059e6abc4de536dd92eb59c94ac4fc7b5', name: "icon" })), h("span", { key: '821cea793c73041083acae37db86de5a20277c4d', class: "label" }, this.label)));
23
+ }, onClick: this.handleClick, disabled: this.disabled, part: "button", type: "button" }, h("div", { key: 'ea25c877a90ddb2def1a302106015dee606d9488', class: "icon" }, h("slot", { key: 'd46105a5771519df425a451217316e1f7f59fc1b', name: "icon" })), h("span", { key: '0d03a17125068d811421fdafc0669b5da3f659fb', class: "label" }, this.label)));
24
24
  }
25
25
  static get is() { return "selectable-card"; }
26
26
  static get originalStyleUrls() {