rebill-web-components-sdk 1.10.10-beta.1 → 1.10.10-beta.2
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.
- package/dist/cjs/card-fields-wrapper_11.cjs.entry.js +8 -8
- package/dist/cjs/index-C-VTnc0I.js.map +1 -1
- package/dist/cjs/input-otp.cjs.entry.js +2 -2
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/rebill-card.rebill-input-email.entry.cjs.js.map +1 -1
- package/dist/cjs/rebill-card_2.cjs.entry.js +77 -83
- package/dist/cjs/rebill-container_2.cjs.entry.js +1 -1
- package/dist/cjs/rebill-flex-container.cjs.entry.js +1 -1
- package/dist/cjs/rebill-grid-container.cjs.entry.js +1 -1
- package/dist/cjs/rebill-input-select.cjs.entry.js +2 -2
- package/dist/cjs/rebill-input-text.cjs.entry.js +2 -2
- package/dist/cjs/rebill-mode-sandbox_2.cjs.entry.js +1 -1
- package/dist/cjs/rebill-timeline-debit-day_2.cjs.entry.js +2 -2
- package/dist/cjs/rebill-web-components-sdk.cjs.js +1 -1
- package/dist/collection/components/shared/inputs/input-email/input-email.css +19 -8
- package/dist/collection/components/shared/inputs/input-email/input-email.js +84 -73
- package/dist/collection/components/shared/inputs/input-email/input-email.js.map +1 -1
- package/dist/collection/components/shared/inputs/input-otp/input-otp.js +2 -2
- package/dist/collection/components/shared/inputs/input-phone/input-phone.js +2 -2
- package/dist/collection/components/shared/inputs/input-select/input-select.js +2 -2
- package/dist/collection/components/shared/inputs/input-text/input-text.js +2 -2
- package/dist/collection/components/shared/layouts/generics/container.js +1 -1
- package/dist/collection/components/shared/layouts/generics/flex.js +1 -1
- package/dist/collection/components/shared/layouts/generics/grid.js +1 -1
- package/dist/collection/components/shared/mode-sandbox/mode-sandbox-mobile.js +1 -1
- package/dist/collection/components/shared/selectable-card/selectable-card.js +2 -2
- package/dist/collection/components/shared/singlePaymentMethod/singlePaymentMethod.js +4 -4
- package/dist/collection/components/shared/timeline/timeline-debit-day.js +1 -1
- package/dist/collection/components/shared/timeline/timeline-free-trial.js +1 -1
- package/dist/collection/utils/email-validation.js +11 -1
- package/dist/collection/utils/email-validation.js.map +1 -1
- package/dist/components/card-fields-wrapper.js +1 -1
- package/dist/components/change-card-success.js +1 -1
- package/dist/components/discount-coupon.js +1 -1
- package/dist/components/input-otp.js +1 -1
- package/dist/components/otp-component.js +1 -1
- package/dist/components/{p-xKyxKtdF.js → p-30DP4s-1.js} +4 -4
- package/dist/components/{p-xKyxKtdF.js.map → p-30DP4s-1.js.map} +1 -1
- package/dist/components/p-8BpuJ_V5.js.map +1 -1
- package/dist/components/{p-Cg8vTcm1.js → p-B28tIeVs.js} +3 -3
- package/dist/components/{p-Cg8vTcm1.js.map → p-B28tIeVs.js.map} +1 -1
- package/dist/components/{p-PtbrPqLv.js → p-B2zhJUcA.js} +4 -4
- package/dist/components/{p-PtbrPqLv.js.map → p-B2zhJUcA.js.map} +1 -1
- package/dist/components/{p-0K5ek-gN.js → p-B3jFm6B_.js} +4 -4
- package/dist/components/{p-0K5ek-gN.js.map → p-B3jFm6B_.js.map} +1 -1
- package/dist/components/{p-BGrQjFTc.js → p-BOYVvAQB.js} +3 -3
- package/dist/components/{p-BGrQjFTc.js.map → p-BOYVvAQB.js.map} +1 -1
- package/dist/components/{p-BgLkcEoy.js → p-BR18G7Pq.js} +4 -4
- package/dist/components/{p-BgLkcEoy.js.map → p-BR18G7Pq.js.map} +1 -1
- package/dist/components/{p-BwbfTRHn.js → p-Ba3VDw-H.js} +3 -3
- package/dist/components/{p-BwbfTRHn.js.map → p-Ba3VDw-H.js.map} +1 -1
- package/dist/components/{p-h01Qiljf.js → p-Ba8zuq-V.js} +3 -3
- package/dist/components/{p-h01Qiljf.js.map → p-Ba8zuq-V.js.map} +1 -1
- package/dist/components/{p-CiOrml-5.js → p-CFLYpSRc.js} +3 -3
- package/dist/components/{p-CiOrml-5.js.map → p-CFLYpSRc.js.map} +1 -1
- package/dist/components/{p-VlzBlwUc.js → p-CMVxImmw.js} +5 -5
- package/dist/components/{p-VlzBlwUc.js.map → p-CMVxImmw.js.map} +1 -1
- package/dist/components/{p-Cthy0N10.js → p-CP4gYqda.js} +5 -5
- package/dist/components/{p-Cthy0N10.js.map → p-CP4gYqda.js.map} +1 -1
- package/dist/components/{p-CSeC5LGG.js → p-Ch0U0Vmb.js} +3 -3
- package/dist/components/{p-CSeC5LGG.js.map → p-Ch0U0Vmb.js.map} +1 -1
- package/dist/components/{p-CamHvHq5.js → p-ChYpVv-Q.js} +4 -4
- package/dist/components/{p-CamHvHq5.js.map → p-ChYpVv-Q.js.map} +1 -1
- package/dist/components/{p-CtFu9Z9D.js → p-CypPi9fK.js} +4 -4
- package/dist/components/{p-CtFu9Z9D.js.map → p-CypPi9fK.js.map} +1 -1
- package/dist/components/{p-BOYEmkB-.js → p-D19UjlNC.js} +5 -5
- package/dist/components/{p-BOYEmkB-.js.map → p-D19UjlNC.js.map} +1 -1
- package/dist/components/{p-BqeCVajN.js → p-D6CVLxdH.js} +4 -4
- package/dist/components/{p-BqeCVajN.js.map → p-D6CVLxdH.js.map} +1 -1
- package/dist/components/{p-CVq9IPp4.js → p-DPB4aAQa.js} +6 -6
- package/dist/components/{p-CVq9IPp4.js.map → p-DPB4aAQa.js.map} +1 -1
- package/dist/components/{p-DP1RHUGR.js → p-DWbH_VvT.js} +81 -88
- package/dist/components/p-DWbH_VvT.js.map +1 -0
- package/dist/components/{p-B0tiz_Xb.js → p-DcwjZ5a1.js} +4 -4
- package/dist/components/{p-B0tiz_Xb.js.map → p-DcwjZ5a1.js.map} +1 -1
- package/dist/components/{p-6IQljT42.js → p-Dhm2b0J_.js} +7 -7
- package/dist/components/{p-6IQljT42.js.map → p-Dhm2b0J_.js.map} +1 -1
- package/dist/components/{p-Dvnf-j7X.js → p-Dhs3vhG4.js} +5 -5
- package/dist/components/{p-Dvnf-j7X.js.map → p-Dhs3vhG4.js.map} +1 -1
- package/dist/components/{p-DR6_SaU9.js → p-Dp-CUwYp.js} +3 -3
- package/dist/components/{p-DR6_SaU9.js.map → p-Dp-CUwYp.js.map} +1 -1
- package/dist/components/{p-DeStKoNN.js → p-Dsrpb4rI.js} +3 -3
- package/dist/components/{p-DeStKoNN.js.map → p-Dsrpb4rI.js.map} +1 -1
- package/dist/components/{p-De7T_ng8.js → p-G3CHdt_U.js} +6 -6
- package/dist/components/{p-De7T_ng8.js.map → p-G3CHdt_U.js.map} +1 -1
- package/dist/components/{p-CN-2D26g.js → p-Pg_gixIL.js} +3 -3
- package/dist/components/{p-CN-2D26g.js.map → p-Pg_gixIL.js.map} +1 -1
- package/dist/components/{p-d40T-Ru7.js → p-fJpj0Zb5.js} +4 -4
- package/dist/components/{p-d40T-Ru7.js.map → p-fJpj0Zb5.js.map} +1 -1
- package/dist/components/{p-Czjk80qD.js → p-fXuAmVVV.js} +6 -6
- package/dist/components/{p-Czjk80qD.js.map → p-fXuAmVVV.js.map} +1 -1
- package/dist/components/{p-BMlyFJD4.js → p-iM2t1WOr.js} +3 -3
- package/dist/components/{p-BMlyFJD4.js.map → p-iM2t1WOr.js.map} +1 -1
- package/dist/components/{p-C-mZ7tbj.js → p-lrqPOj5Q.js} +3 -3
- package/dist/components/{p-C-mZ7tbj.js.map → p-lrqPOj5Q.js.map} +1 -1
- package/dist/components/{p-Bnocq8Cb.js → p-mSjgruQE.js} +4 -4
- package/dist/components/{p-Bnocq8Cb.js.map → p-mSjgruQE.js.map} +1 -1
- package/dist/components/payment-method-selector.js +1 -1
- package/dist/components/rebill-address-form.js +1 -1
- package/dist/components/rebill-address-search.js +1 -1
- package/dist/components/rebill-address.js +1 -1
- package/dist/components/rebill-bank-selector.js +1 -1
- package/dist/components/rebill-change-card.js +19 -19
- package/dist/components/rebill-checkout-single-column.js +1 -1
- package/dist/components/rebill-checkout.js +26 -26
- package/dist/components/rebill-container.js +1 -1
- package/dist/components/rebill-flex-container.js +1 -1
- package/dist/components/rebill-footer.js +1 -1
- package/dist/components/rebill-grid-container.js +1 -1
- package/dist/components/rebill-input-email.js +1 -1
- package/dist/components/rebill-input-phone.js +1 -1
- package/dist/components/rebill-input-select.js +1 -1
- package/dist/components/rebill-input-text.js +1 -1
- package/dist/components/rebill-installments.js +1 -1
- package/dist/components/rebill-mode-sandbox-mobile.js +1 -1
- package/dist/components/rebill-processing-payment.js +1 -1
- package/dist/components/rebill-renewal.js +19 -19
- package/dist/components/rebill-summary.js +1 -1
- package/dist/components/rebill-timeline-debit-day.js +1 -1
- package/dist/components/rebill-timeline-free-trial.js +1 -1
- package/dist/components/renewal-success-page.js +1 -1
- package/dist/components/renewal-summary.js +1 -1
- package/dist/components/root-component.js +3 -3
- package/dist/components/selectable-card.js +1 -1
- package/dist/components/single-payment-method.js +1 -1
- package/dist/components/success-page.js +1 -1
- package/dist/components/user-information-phone.js +1 -1
- package/dist/components/user-information.js +1 -1
- package/dist/esm/card-fields-wrapper_11.entry.js +8 -8
- package/dist/esm/index-BTZ7D7jU.js.map +1 -1
- package/dist/esm/input-otp.entry.js +2 -2
- package/dist/esm/loader.js +1 -1
- package/dist/esm/rebill-card.rebill-input-email.entry.js.map +1 -1
- package/dist/esm/rebill-card_2.entry.js +77 -83
- package/dist/esm/rebill-container_2.entry.js +1 -1
- package/dist/esm/rebill-flex-container.entry.js +1 -1
- package/dist/esm/rebill-grid-container.entry.js +1 -1
- package/dist/esm/rebill-input-select.entry.js +2 -2
- package/dist/esm/rebill-input-text.entry.js +2 -2
- package/dist/esm/rebill-mode-sandbox_2.entry.js +1 -1
- package/dist/esm/rebill-timeline-debit-day_2.entry.js +2 -2
- package/dist/esm/rebill-web-components-sdk.js +1 -1
- package/dist/rebill-web-components-sdk/{p-2b3cb9b5.entry.js → p-11ee0328.entry.js} +2 -2
- package/dist/rebill-web-components-sdk/{p-24a79725.entry.js → p-130877f9.entry.js} +2 -2
- package/dist/rebill-web-components-sdk/{p-734696df.entry.js → p-16e7646e.entry.js} +2 -2
- package/dist/rebill-web-components-sdk/{p-c6c8bf05.entry.js → p-6eede717.entry.js} +2 -2
- package/dist/rebill-web-components-sdk/p-98fc2da1.entry.js +2 -0
- package/dist/rebill-web-components-sdk/p-98fc2da1.entry.js.map +1 -0
- package/dist/rebill-web-components-sdk/p-BTZ7D7jU.js.map +1 -1
- package/dist/rebill-web-components-sdk/{p-a09a0d53.entry.js → p-b350f63e.entry.js} +2 -2
- package/dist/rebill-web-components-sdk/{p-c38319c1.entry.js → p-be004b4f.entry.js} +2 -2
- package/dist/rebill-web-components-sdk/{p-894d7d00.entry.js → p-d73d7c39.entry.js} +2 -2
- package/dist/rebill-web-components-sdk/{p-45d1115b.entry.js → p-dd44d494.entry.js} +2 -2
- package/dist/rebill-web-components-sdk/{p-6ab7c3bc.entry.js → p-e54f571c.entry.js} +2 -2
- package/dist/rebill-web-components-sdk/rebill-card.rebill-input-email.entry.esm.js.map +1 -1
- package/dist/rebill-web-components-sdk/rebill-web-components-sdk.esm.js +1 -1
- package/dist/types/components/shared/inputs/input-email/input-email.d.ts +8 -17
- package/package.json +1 -1
- package/dist/components/p-DP1RHUGR.js.map +0 -1
- package/dist/rebill-web-components-sdk/p-8a2f420d.entry.js +0 -2
- package/dist/rebill-web-components-sdk/p-8a2f420d.entry.js.map +0 -1
- /package/dist/rebill-web-components-sdk/{p-2b3cb9b5.entry.js.map → p-11ee0328.entry.js.map} +0 -0
- /package/dist/rebill-web-components-sdk/{p-24a79725.entry.js.map → p-130877f9.entry.js.map} +0 -0
- /package/dist/rebill-web-components-sdk/{p-734696df.entry.js.map → p-16e7646e.entry.js.map} +0 -0
- /package/dist/rebill-web-components-sdk/{p-c6c8bf05.entry.js.map → p-6eede717.entry.js.map} +0 -0
- /package/dist/rebill-web-components-sdk/{p-a09a0d53.entry.js.map → p-b350f63e.entry.js.map} +0 -0
- /package/dist/rebill-web-components-sdk/{p-c38319c1.entry.js.map → p-be004b4f.entry.js.map} +0 -0
- /package/dist/rebill-web-components-sdk/{p-894d7d00.entry.js.map → p-d73d7c39.entry.js.map} +0 -0
- /package/dist/rebill-web-components-sdk/{p-45d1115b.entry.js.map → p-dd44d494.entry.js.map} +0 -0
- /package/dist/rebill-web-components-sdk/{p-6ab7c3bc.entry.js.map → p-e54f571c.entry.js.map} +0 -0
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
import { h, } from "@stencil/core";
|
|
2
2
|
import { I18nService } from "../../../../i18n/i18n.service";
|
|
3
3
|
import { COLORS_ENUM } from "../../../../utils/color-class-mapper";
|
|
4
|
-
import { getEmailSuggestions, suggestEmailCorrection
|
|
4
|
+
import { getEmailSuggestions, suggestEmailCorrection } from "../../../../utils/email-validation";
|
|
5
5
|
import { BLUR_DELAY_MS } from "../../../../utils/email-validation.constants";
|
|
6
6
|
export class InputEmail {
|
|
7
7
|
el;
|
|
8
8
|
inputElement;
|
|
9
9
|
suggestionsDropdownRef;
|
|
10
|
-
isMouseOverSuggestions = false;
|
|
11
10
|
blurTimeout;
|
|
12
|
-
// Constants
|
|
13
|
-
INPUT_PADDING_WITH_ICON = '2.5rem';
|
|
14
|
-
INPUT_PADDING_DEFAULT = '0.75rem';
|
|
15
11
|
/** Etiqueta que se muestra arriba del input */
|
|
16
12
|
label = '';
|
|
17
13
|
/** Placeholder del input */
|
|
@@ -40,10 +36,8 @@ export class InputEmail {
|
|
|
40
36
|
highlightedSuggestionIndex = -1;
|
|
41
37
|
/** Sugerencia de corrección de email (para errores tipográficos) */
|
|
42
38
|
emailCorrectionSuggestion = null;
|
|
43
|
-
/**
|
|
44
|
-
|
|
45
|
-
/** Indica si el usuario ya salió del campo (blur) */
|
|
46
|
-
hasBlurred = false;
|
|
39
|
+
/** Posición del dropdown (arriba o abajo) */
|
|
40
|
+
dropdownPosition = 'down';
|
|
47
41
|
handleFormChange(event) {
|
|
48
42
|
const formData = event.detail;
|
|
49
43
|
if (formData && this.id in formData) {
|
|
@@ -53,8 +47,17 @@ export class InputEmail {
|
|
|
53
47
|
handleDocumentClick(event) {
|
|
54
48
|
if (this.suggestionsDropdownRef &&
|
|
55
49
|
!this.suggestionsDropdownRef.contains(event.target) &&
|
|
56
|
-
!this.inputElement?.contains(event.target)
|
|
57
|
-
|
|
50
|
+
!this.inputElement?.contains(event.target)) {
|
|
51
|
+
this.emailSuggestions = [];
|
|
52
|
+
this.highlightedSuggestionIndex = -1;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
handleDocumentTouchEnd(event) {
|
|
56
|
+
const target = event.changedTouches?.[0]?.target;
|
|
57
|
+
if (this.suggestionsDropdownRef &&
|
|
58
|
+
target &&
|
|
59
|
+
!this.suggestionsDropdownRef.contains(target) &&
|
|
60
|
+
!this.inputElement?.contains(target)) {
|
|
58
61
|
this.emailSuggestions = [];
|
|
59
62
|
this.highlightedSuggestionIndex = -1;
|
|
60
63
|
}
|
|
@@ -68,6 +71,24 @@ export class InputEmail {
|
|
|
68
71
|
checkForTypo(emailValue) {
|
|
69
72
|
this.emailCorrectionSuggestion = suggestEmailCorrection(emailValue);
|
|
70
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Calcula si el dropdown debe posicionarse arriba o abajo según el espacio disponible
|
|
76
|
+
*/
|
|
77
|
+
calculateDropdownPosition() {
|
|
78
|
+
if (!this.inputElement || !this.suggestionsDropdownRef)
|
|
79
|
+
return;
|
|
80
|
+
const inputRect = this.inputElement.getBoundingClientRect();
|
|
81
|
+
const dropdownHeight = this.suggestionsDropdownRef.offsetHeight || 200; // max-height del CSS
|
|
82
|
+
const spaceBelow = window.innerHeight - inputRect.bottom;
|
|
83
|
+
const spaceAbove = inputRect.top;
|
|
84
|
+
// Si no hay espacio abajo pero sí arriba, posicionar arriba
|
|
85
|
+
if (spaceBelow < dropdownHeight && spaceAbove > spaceBelow) {
|
|
86
|
+
this.dropdownPosition = 'up';
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
this.dropdownPosition = 'down';
|
|
90
|
+
}
|
|
91
|
+
}
|
|
71
92
|
// ============================================================================
|
|
72
93
|
// INPUT EVENT HANDLERS
|
|
73
94
|
// ============================================================================
|
|
@@ -75,15 +96,15 @@ export class InputEmail {
|
|
|
75
96
|
return value.toLowerCase();
|
|
76
97
|
}
|
|
77
98
|
updateEmailState(inputValue) {
|
|
78
|
-
this.isValidFormat = validateEmailFormat(inputValue);
|
|
79
99
|
this.emailSuggestions = getEmailSuggestions(inputValue);
|
|
80
100
|
this.highlightedSuggestionIndex = -1;
|
|
81
101
|
// Limpiar sugerencia de corrección al modificar el input
|
|
82
102
|
this.emailCorrectionSuggestion = null;
|
|
83
103
|
this.value = inputValue;
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
104
|
+
// Calcular posición del dropdown después de actualizar sugerencias
|
|
105
|
+
if (this.emailSuggestions.length > 0) {
|
|
106
|
+
setTimeout(() => this.calculateDropdownPosition(), 0);
|
|
107
|
+
}
|
|
87
108
|
}
|
|
88
109
|
onInput = (event) => {
|
|
89
110
|
if (this.disabled)
|
|
@@ -92,14 +113,12 @@ export class InputEmail {
|
|
|
92
113
|
const inputValue = this.normalizeEmailInput(input.value);
|
|
93
114
|
input.value = inputValue;
|
|
94
115
|
this.updateEmailState(inputValue);
|
|
95
|
-
this.
|
|
116
|
+
this.input.emit({ id: this.id, value: inputValue });
|
|
96
117
|
};
|
|
97
118
|
resetValidationState() {
|
|
98
|
-
this.isValidFormat = true;
|
|
99
119
|
this.emailSuggestions = [];
|
|
100
120
|
this.highlightedSuggestionIndex = -1;
|
|
101
121
|
this.emailCorrectionSuggestion = null;
|
|
102
|
-
this.hasBlurred = false;
|
|
103
122
|
}
|
|
104
123
|
onClear = () => {
|
|
105
124
|
if (this.disabled)
|
|
@@ -125,11 +144,11 @@ export class InputEmail {
|
|
|
125
144
|
clearTimeout(this.blurTimeout);
|
|
126
145
|
}
|
|
127
146
|
this.blurTimeout = window.setTimeout(() => {
|
|
128
|
-
|
|
129
|
-
|
|
147
|
+
// Verificar si el elemento activo está dentro del dropdown o es el input
|
|
148
|
+
const activeElement = document.activeElement;
|
|
149
|
+
const isClickingSuggestion = this.suggestionsDropdownRef?.contains(activeElement) || activeElement === this.inputElement;
|
|
150
|
+
if (!isClickingSuggestion) {
|
|
130
151
|
this.trimAndUpdateValue();
|
|
131
|
-
// Revalidar formato después del trim
|
|
132
|
-
this.isValidFormat = validateEmailFormat(this.value);
|
|
133
152
|
this.clearSuggestions();
|
|
134
153
|
// Verificar errores tipográficos solo cuando sale del campo
|
|
135
154
|
this.checkForTypo(this.value);
|
|
@@ -140,43 +159,38 @@ export class InputEmail {
|
|
|
140
159
|
onFocus = () => {
|
|
141
160
|
if (this.value) {
|
|
142
161
|
this.emailSuggestions = getEmailSuggestions(this.value);
|
|
162
|
+
// Calcular posición después de que se rendericen las sugerencias
|
|
163
|
+
setTimeout(() => this.calculateDropdownPosition(), 0);
|
|
143
164
|
}
|
|
144
165
|
};
|
|
145
166
|
// ============================================================================
|
|
146
167
|
// SUGGESTION INTERACTION HANDLERS
|
|
147
168
|
// ============================================================================
|
|
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
169
|
onKeyDown = (event) => {
|
|
164
170
|
if (this.emailSuggestions.length === 0) {
|
|
165
171
|
return;
|
|
166
172
|
}
|
|
167
|
-
|
|
168
|
-
ArrowDown:
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
173
|
+
switch (event.key) {
|
|
174
|
+
case 'ArrowDown':
|
|
175
|
+
event.preventDefault();
|
|
176
|
+
this.highlightedSuggestionIndex = Math.min(this.highlightedSuggestionIndex + 1, this.emailSuggestions.length - 1);
|
|
177
|
+
break;
|
|
178
|
+
case 'ArrowUp':
|
|
179
|
+
event.preventDefault();
|
|
180
|
+
this.highlightedSuggestionIndex = Math.max(this.highlightedSuggestionIndex - 1, -1);
|
|
181
|
+
break;
|
|
182
|
+
case 'Escape':
|
|
183
|
+
event.preventDefault();
|
|
184
|
+
this.emailSuggestions = [];
|
|
185
|
+
this.highlightedSuggestionIndex = -1;
|
|
186
|
+
break;
|
|
187
|
+
case 'Enter':
|
|
188
|
+
if (this.highlightedSuggestionIndex >= 0 &&
|
|
189
|
+
this.highlightedSuggestionIndex < this.emailSuggestions.length) {
|
|
190
|
+
event.preventDefault();
|
|
191
|
+
this.selectSuggestion(this.emailSuggestions[this.highlightedSuggestionIndex]);
|
|
192
|
+
}
|
|
193
|
+
break;
|
|
180
194
|
}
|
|
181
195
|
};
|
|
182
196
|
selectSuggestion = (suggestion) => {
|
|
@@ -198,11 +212,10 @@ export class InputEmail {
|
|
|
198
212
|
handleSuggestionMouseEnter = (index) => {
|
|
199
213
|
this.highlightedSuggestionIndex = index;
|
|
200
214
|
};
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
this.isMouseOverSuggestions = false;
|
|
215
|
+
handleSuggestionTouchEnd = (suggestion, event) => {
|
|
216
|
+
event.preventDefault();
|
|
217
|
+
event.stopPropagation();
|
|
218
|
+
this.selectSuggestion(suggestion);
|
|
206
219
|
};
|
|
207
220
|
// ============================================================================
|
|
208
221
|
// PUBLIC METHODS
|
|
@@ -218,18 +231,6 @@ export class InputEmail {
|
|
|
218
231
|
// ============================================================================
|
|
219
232
|
// RENDER HELPERS
|
|
220
233
|
// ============================================================================
|
|
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
234
|
renderEmailCorrectionSuggestion() {
|
|
234
235
|
if (!this.emailCorrectionSuggestion)
|
|
235
236
|
return null;
|
|
@@ -251,11 +252,16 @@ export class InputEmail {
|
|
|
251
252
|
'floating-label': isFloating,
|
|
252
253
|
'has-left-icon': !!this.leftIcon,
|
|
253
254
|
'has-email-suggestions': showEmailSuggestions,
|
|
254
|
-
'has-invalid-format': this.shouldShowInvalidFormat(),
|
|
255
255
|
};
|
|
256
|
-
return (h("div", { key: '
|
|
257
|
-
|
|
258
|
-
:
|
|
256
|
+
return (h("div", { key: '666b8971fd42b59ea3beaf4ded1a59e06845f837', class: "input-container" }, !isFloating && this.label && (h("label", { key: '0f0e777f7b3c256b42c9dec1e0f0ab1c50bc0013', class: `input-label ${this.disabled ? 'disabled' : ''}` }, this.label)), h("div", { key: 'e506b42d62d357aa3f71c4b0435ab2d08f145f53', class: wrapperClasses }, this.leftIcon && (h("div", { key: '84c0f9dad6724a5192494e082b126cbd66c47436', class: "icon-left" }, h("rebill-icon", { key: 'a02a67a6f03b06b2b331670e8caded3b26b4c327', name: this.leftIcon }))), h("input", { key: 'c444b2daedd46fafdec07df2e79e01be454ef58c', 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: {
|
|
257
|
+
paddingLeft: this.leftIcon ? '2.5rem' : '0.75rem',
|
|
258
|
+
paddingRight: this.clearable && this.value ? '2.5rem' : '0.75rem',
|
|
259
|
+
} }), isFloating && h("label", { key: 'ae7e8e67032665f90a2b24b136dfc2124073d24a', class: "input-text__input-label input-label" }, this.label), this.clearable && this.value && (h("div", { key: 'cb4ff25b6d53cb1c0fdd568f8896463980e10234', class: "icon-right", onClick: this.onClear }, h("rebill-icon", { key: 'bd7b1aa188127120065e06e02f79bdf6f4a2eb0c', name: "x" }))), showEmailSuggestions && (h("div", { key: 'd75a859066fcf750b34d4c479631aada67278925', id: "email-suggestions", ref: el => {
|
|
260
|
+
this.suggestionsDropdownRef = el;
|
|
261
|
+
if (el) {
|
|
262
|
+
setTimeout(() => this.calculateDropdownPosition(), 0);
|
|
263
|
+
}
|
|
264
|
+
}, class: `email-suggestions-dropdown ${this.dropdownPosition === 'up' ? 'dropdown-up' : ''}`, role: "listbox", "aria-label": I18nService.translate('userInformation.suggestionsLabel', 'Email suggestions') }, h("div", { key: '0c8cfa0656426b99cbce234cc7afb073aec36f2c', 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: '57058ce993cfe690470cb002cdc3e3939d120fe0', id: `${this.id}-error`, class: "error-message", role: "alert" }, this.error)), this.renderEmailCorrectionSuggestion()));
|
|
259
265
|
}
|
|
260
266
|
static get is() { return "rebill-input-email"; }
|
|
261
267
|
static get originalStyleUrls() {
|
|
@@ -456,8 +462,7 @@ export class InputEmail {
|
|
|
456
462
|
"emailSuggestions": {},
|
|
457
463
|
"highlightedSuggestionIndex": {},
|
|
458
464
|
"emailCorrectionSuggestion": {},
|
|
459
|
-
"
|
|
460
|
-
"hasBlurred": {}
|
|
465
|
+
"dropdownPosition": {}
|
|
461
466
|
};
|
|
462
467
|
}
|
|
463
468
|
static get events() {
|
|
@@ -532,6 +537,12 @@ export class InputEmail {
|
|
|
532
537
|
"target": "document",
|
|
533
538
|
"capture": false,
|
|
534
539
|
"passive": false
|
|
540
|
+
}, {
|
|
541
|
+
"name": "touchend",
|
|
542
|
+
"method": "handleDocumentTouchEnd",
|
|
543
|
+
"target": "document",
|
|
544
|
+
"capture": false,
|
|
545
|
+
"passive": true
|
|
535
546
|
}];
|
|
536
547
|
}
|
|
537
548
|
}
|
|
@@ -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 { COLORS_ENUM } from '../../../../utils/color-class-mapper';\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\" 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 };\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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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() {
|