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
@@ -9,9 +9,9 @@ export class SinglePaymentMethod {
9
9
  paymentMethodDetails;
10
10
  icons = [];
11
11
  render() {
12
- return (h("div", { key: '5122e8aea614b933b61e8ea8442e8135af660464', class: "single-payment-method" }, h("div", { key: 'aaff46a008eb03149d754cbe9b023797075c438d', class: "payment-method" }, this.paymentMethod === PAYMENT_METHOD_ENUM.CARD && h("rebill-icon", { key: '88be17c0cf51dca791486ae34e54de4bf00ea30c', name: "card" }), this.paymentMethod === PAYMENT_METHOD_ENUM.CASH && (h("rebill-icon", { key: 'b1ada6c7b426f7a9c4818e2d7b741efe0188ae86', name: "cash" })), this.paymentMethod === PAYMENT_METHOD_ENUM.BANK_TRANSFER &&
13
- this.currencyCountry === 'AR' && h("rebill-icon", { key: '8334e3117f6a1fc268ed9de18ec6026baefad83e', name: "qr-code" }), this.paymentMethod === PAYMENT_METHOD_ENUM.BANK_TRANSFER &&
14
- this.currencyCountry !== 'AR' && h("rebill-icon", { key: '94e87d5eae6f576ab53940e20240e50f77bbad4c', name: "bank" }), h("rebill-typography", { key: 'd30d521f3028e08afd970dc4b9ee6c041877fd7d', variant: "body2-small", color: COLORS_ENUM.NEUTRALS_700, style: { display: 'flex', alignItems: 'center' } }, this.paymentMethod === PAYMENT_METHOD_ENUM.CARD
12
+ return (h("div", { key: '7d272962812338bd346b458abc8c01daafd6b6a0', class: "single-payment-method" }, h("div", { key: 'c8189b29ba5e5466994f9a426c971d255bd0af63', class: "payment-method" }, this.paymentMethod === PAYMENT_METHOD_ENUM.CARD && h("rebill-icon", { key: 'd158957213e375adccf8167341c21333da44f1fb', name: "card" }), this.paymentMethod === PAYMENT_METHOD_ENUM.CASH && (h("rebill-icon", { key: '8d4f791061649ef90dfc843f2f55f171331e42f1', name: "cash" })), this.paymentMethod === PAYMENT_METHOD_ENUM.BANK_TRANSFER &&
13
+ this.currencyCountry === 'AR' && h("rebill-icon", { key: '06592c686b79377560dcbd54322667eaf7258495', name: "qr-code" }), this.paymentMethod === PAYMENT_METHOD_ENUM.BANK_TRANSFER &&
14
+ this.currencyCountry !== 'AR' && h("rebill-icon", { key: '1a61ab4db46181482bf047d64dcc9ba961950ce0', name: "bank" }), h("rebill-typography", { key: '7c80a95e1f049ac31433a2036989ff3953be2bfa', variant: "body2-small", color: COLORS_ENUM.NEUTRALS_700, style: { display: 'flex', alignItems: 'center' } }, this.paymentMethod === PAYMENT_METHOD_ENUM.CARD
15
15
  ? I18nService.translate('paymentMethods.cardDescription')
16
16
  : this.paymentMethod === PAYMENT_METHOD_ENUM.BANK_TRANSFER &&
17
17
  this.currencyCountry === 'AR'
@@ -21,7 +21,7 @@ export class SinglePaymentMethod {
21
21
  ? getPaymentMethodDisplayName(PAYMENT_METHOD_ENUM.CASH, this.currencyCountry) ||
22
22
  I18nService.translate('paymentMethods.cash')
23
23
  : I18nService.translate(`paymentMethods.${this.paymentMethod}`))), (this.paymentMethod === PAYMENT_METHOD_ENUM.BANK_TRANSFER ||
24
- this.paymentMethod === PAYMENT_METHOD_ENUM.CASH) && (h("div", { key: 'd835c4af0d97b582254d75555e0ca10f4d4b2aa9', class: "icon-container" }, this.icons.length > 0 ? (this.icons.map(iconName => h("rebill-icon", { name: iconName, key: iconName }))) : (h("rebill-icon", { name: "card" }))))));
24
+ this.paymentMethod === PAYMENT_METHOD_ENUM.CASH) && (h("div", { key: '3947082b76e3849c0383a973248de647f1b8b548', class: "icon-container" }, this.icons.length > 0 ? (this.icons.map(iconName => h("rebill-icon", { name: iconName, key: iconName }))) : (h("rebill-icon", { name: "card" }))))));
25
25
  }
26
26
  static get is() { return "single-payment-method"; }
27
27
  static get originalStyleUrls() {
@@ -242,7 +242,7 @@ export class TimelineDebitDay {
242
242
  }
243
243
  render() {
244
244
  const events = this.buildEvents();
245
- return (h("div", { key: 'cd9013c62915566d11b8185e75a66171529ea7ae', class: "timeline-container" }, h("div", { key: '178e2be3dc4eb0a4070b9885046886d4bf147fdc', class: "timeline" }, events.map((event, index) => this.renderEvent(event, index === events.length - 1, index === 0)))));
245
+ return (h("div", { key: 'fe87dc3ef6ae5d6314205788e1ae723b1db4aba6', class: "timeline-container" }, h("div", { key: 'e58f1748dff622f4572e37b9ae2151bfeb78e0a7', class: "timeline" }, events.map((event, index) => this.renderEvent(event, index === events.length - 1, index === 0)))));
246
246
  }
247
247
  static get is() { return "rebill-timeline-debit-day"; }
248
248
  static get originalStyleUrls() {
@@ -163,7 +163,7 @@ export class Timeline {
163
163
  }
164
164
  render() {
165
165
  const events = this.buildEvents();
166
- return (h("div", { key: 'e98d65f75f58db57b8c15192ebdb0ec3988aabe2', class: "timeline-container" }, h("div", { key: 'a3a8408576290c7c988663cf3d2c4c83e55b7fc0', class: "timeline" }, events.map((event, index) => this.renderEvent(event, index === events.length - 1, index === 0, events.length)))));
166
+ return (h("div", { key: '2cde72b516f13999861cadcdb655adbc4ee06012', class: "timeline-container" }, h("div", { key: '3b3906f2ed887a67f992fabefc40cc01ab503c1b', class: "timeline" }, events.map((event, index) => this.renderEvent(event, index === events.length - 1, index === 0, events.length)))));
167
167
  }
168
168
  static get is() { return "rebill-timeline-free-trial"; }
169
169
  static get originalStyleUrls() {
@@ -185,7 +185,17 @@ export function validateEmailFormat(email) {
185
185
  return true;
186
186
  }
187
187
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
188
- return emailRegex.test(email);
188
+ if (!emailRegex.test(email)) {
189
+ return false;
190
+ }
191
+ // Extraer la parte del dominio para validar formato completo (incluyendo TLD de al menos 2 caracteres)
192
+ const parts = email.split('@');
193
+ if (parts.length !== 2) {
194
+ return false;
195
+ }
196
+ const domainPart = parts[1];
197
+ // Usar hasEmailFormatError para validar el dominio (incluye validación de TLD de 1 carácter)
198
+ return !hasEmailFormatError(domainPart);
189
199
  }
190
200
  /**
191
201
  * Genera sugerencias de email basadas en dominios comunes
@@ -1 +1 @@
1
- {"version":3,"file":"email-validation.js","sourceRoot":"","sources":["../../src/utils/email-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n COMMON_EMAIL_DOMAINS,\n MAX_LEVENSHTEIN_DISTANCE_DOMAIN,\n MAX_LEVENSHTEIN_DISTANCE_TLD,\n VALID_TLDS,\n} from './email-validation.constants';\n\n// ============================================================================\n// HELPER FUNCTIONS\n// ============================================================================\n\nfunction normalizeDomain(domain: string): string {\n return domain?.toLowerCase().trim() || '';\n}\n\nfunction normalizeTLD(tld: string): string {\n if (!tld) return '';\n return tld.toLowerCase().replace(/^\\./, '');\n}\n\nfunction isExactCommonDomain(domain: string): boolean {\n return COMMON_EMAIL_DOMAINS.some(\n commonDomain => normalizeDomain(commonDomain) === normalizeDomain(domain),\n );\n}\n\nfunction buildEmailCorrection(localPart: string, domain: string): string {\n return `${localPart}@${domain}`;\n}\n\nfunction getDomainParts(commonDomain: string): { name: string; tld: string } {\n const parts = commonDomain.split('.');\n return {\n name: parts[0],\n tld: parts[1] || '',\n };\n}\n\nfunction levenshteinDistance(str1: string, str2: string): number {\n const matrix: number[][] = [];\n\n for (let i = 0; i <= str2.length; i++) {\n matrix[i] = [i];\n }\n\n for (let j = 0; j <= str1.length; j++) {\n matrix[0][j] = j;\n }\n\n for (let i = 1; i <= str2.length; i++) {\n for (let j = 1; j <= str1.length; j++) {\n if (str2.charAt(i - 1) === str1.charAt(j - 1)) {\n matrix[i][j] = matrix[i - 1][j - 1];\n } else {\n matrix[i][j] = Math.min(\n matrix[i - 1][j - 1] + 1,\n matrix[i][j - 1] + 1,\n matrix[i - 1][j] + 1,\n );\n }\n }\n }\n\n return matrix[str2.length][str1.length];\n}\n\nfunction extractDomainName(domain: string): string {\n return domain.split('.')[0];\n}\n\n/**\n * Valida si el TLD es válido\n * Los TLDs en VALID_TLDS no tienen punto (ej: \"com\")\n */\nexport function isValidTLD(tld: string): boolean {\n if (!tld) return false;\n return VALID_TLDS.includes(normalizeTLD(tld));\n}\n\n/**\n * Encuentra un TLD válido similar al ingresado\n * Retorna el TLD sin punto porque se usa en join('.')\n */\nexport function findSimilarTLD(inputTLD: string): string | null {\n if (!inputTLD) return null;\n\n const normalized = normalizeTLD(inputTLD);\n\n if (VALID_TLDS.includes(normalized)) {\n return null;\n }\n let bestMatch: string | null = null;\n let minDistance = Infinity;\n\n for (const validTLD of VALID_TLDS) {\n const distance = levenshteinDistance(normalized, validTLD);\n\n if (distance < minDistance && distance > 0 && distance <= MAX_LEVENSHTEIN_DISTANCE_TLD) {\n minDistance = distance;\n bestMatch = validTLD;\n }\n }\n\n return bestMatch;\n}\n\n/**\n * Encuentra el dominio más similar a uno de los dominios comunes\n */\nexport function findSimilarDomain(inputDomain: string): string | null {\n if (!inputDomain || inputDomain.trim() === '') {\n return null;\n }\n\n const normalizedInput = inputDomain.toLowerCase().trim();\n const domainName = extractDomainName(normalizedInput);\n\n let bestMatch: string | null = null;\n let minDistance = Infinity;\n\n for (const domain of COMMON_EMAIL_DOMAINS) {\n const commonDomainName = extractDomainName(domain);\n const distance = levenshteinDistance(domainName, commonDomainName);\n\n if (distance < minDistance && distance > 0 && distance <= MAX_LEVENSHTEIN_DISTANCE_DOMAIN) {\n minDistance = distance;\n bestMatch = domain;\n }\n }\n\n return bestMatch;\n}\n\n/**\n * Detecta si hay errores de formato en el dominio (no errores tipográficos)\n * ej: doble punto (..), punto al inicio/final, caracteres inválidos\n */\nexport function hasEmailFormatError(domainPart: string): boolean {\n if (!domainPart) return false;\n\n if (domainPart.includes('..')) {\n return true;\n }\n\n if (domainPart.startsWith('.') || domainPart.endsWith('.')) {\n return true;\n }\n\n const validDomainPattern = /^[a-zA-Z0-9.-]+$/;\n if (!validDomainPattern.test(domainPart)) {\n return true;\n }\n\n // Validar que el TLD (después del último punto) tenga al menos 2 caracteres\n const lastDotIndex = domainPart.lastIndexOf('.');\n if (lastDotIndex !== -1) {\n const tld = domainPart.substring(lastDotIndex + 1);\n if (tld.length < 2) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Detecta si falta un punto en el dominio (ej: \"gmailcom\" -> \"gmail.com\")\n */\nexport function detectMissingDot(\n domainPart: string,\n isValidTLDFn: (tld: string) => boolean,\n): string | null {\n if (!domainPart || domainPart.includes('.')) {\n return null;\n }\n\n for (const commonDomain of COMMON_EMAIL_DOMAINS) {\n const commonDomainName = extractDomainName(commonDomain);\n const normalizedDomain = normalizeDomain(domainPart);\n const normalizedCommonName = normalizeDomain(commonDomainName);\n\n if (normalizedDomain.startsWith(normalizedCommonName)) {\n const remaining = normalizedDomain.substring(normalizedCommonName.length);\n\n if (isValidTLDFn(remaining)) {\n return `${commonDomainName}.${remaining}`;\n }\n }\n }\n for (const commonDomain of COMMON_EMAIL_DOMAINS) {\n const commonDomainName = extractDomainName(commonDomain);\n const { tld: commonTLD } = getDomainParts(commonDomain);\n\n const expectedWithoutDot = `${commonDomainName}${commonTLD}`;\n if (normalizeDomain(domainPart) === normalizeDomain(expectedWithoutDot)) {\n return commonDomain;\n }\n }\n\n return null;\n}\n\n/**\n * Detecta si falta un punto en un dominio de múltiples partes\n * ej: \"gmailcom.ar\" -> \"gmail.com.ar\"\n */\nexport function detectMissingDotInMultiPartDomain(domainPart: string): string | null {\n if (!domainPart || !domainPart.includes('.')) {\n return null;\n }\n\n const domainParts = domainPart.split('.');\n const firstPart = domainParts[0];\n const restParts = domainParts.slice(1);\n\n for (const commonDomain of COMMON_EMAIL_DOMAINS) {\n const commonDomainName = extractDomainName(commonDomain);\n const { tld: commonTLD } = getDomainParts(commonDomain);\n\n const expectedWithoutDot = `${commonDomainName}${commonTLD}`;\n if (normalizeDomain(firstPart) === normalizeDomain(expectedWithoutDot)) {\n const correctedParts = [commonDomainName, commonTLD, ...restParts];\n return correctedParts.join('.');\n }\n }\n\n return null;\n}\n\n/**\n * Valida el formato básico del email completo\n * @param email - El email a validar\n * @returns true si el formato es válido, false en caso contrario\n */\nexport function validateEmailFormat(email: string): boolean {\n if (!email || email.trim() === '') {\n return true;\n }\n\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n}\n\n/**\n * Genera sugerencias de email basadas en dominios comunes\n * @param emailValue - El valor actual del email que el usuario está escribiendo\n * @returns Array de emails sugeridos\n */\nexport function getEmailSuggestions(emailValue: string): string[] {\n if (!emailValue || !emailValue.includes('@')) {\n return [];\n }\n\n const [localPart, domainPart] = emailValue.split('@');\n\n if (!localPart) {\n return [];\n }\n\n if (domainPart && domainPart.includes('.') && !domainPart.endsWith('.')) {\n return [];\n }\n\n const filteredDomains = COMMON_EMAIL_DOMAINS.filter(domain => {\n if (!domainPart || domainPart.trim() === '') {\n return true;\n }\n return domain.startsWith(domainPart.toLowerCase());\n });\n\n return filteredDomains.map(domain => `${localPart}@${domain}`);\n}\n\n/**\n * Corrige errores tipográficos en un dominio que ya tiene puntos\n * @param localPart - La parte local del email (antes del @)\n * @param domainPart - La parte del dominio (después del @)\n * @returns El email corregido sugerido, o null si no hay corrección\n */\nfunction correctDomainTypos(localPart: string, domainPart: string): string | null {\n const domainParts = domainPart.split('.');\n const domainName = domainParts[0];\n const isDomainNameValid = COMMON_EMAIL_DOMAINS.some(domain => {\n const { name } = getDomainParts(domain);\n return normalizeDomain(name) === normalizeDomain(domainName);\n });\n\n let correctedDomainParts = [...domainParts];\n let hasCorrection = false;\n\n if (!isDomainNameValid) {\n const similarDomain = findSimilarDomain(domainPart);\n if (similarDomain) {\n const { name } = getDomainParts(similarDomain);\n correctedDomainParts[0] = name;\n hasCorrection = true;\n }\n }\n\n for (let i = 1; i < correctedDomainParts.length; i++) {\n const part = correctedDomainParts[i];\n if (!isValidTLD(part)) {\n const similarTLD = findSimilarTLD(part);\n if (similarTLD) {\n correctedDomainParts[i] = similarTLD;\n hasCorrection = true;\n }\n }\n }\n\n return hasCorrection ? buildEmailCorrection(localPart, correctedDomainParts.join('.')) : null;\n}\n\n/**\n * Detecta si hay un error tipográfico en el email y sugiere una corrección\n * @param emailValue - El email a verificar\n * @returns El email corregido sugerido, o null si no hay corrección\n */\nexport function suggestEmailCorrection(emailValue: string): string | null {\n if (!emailValue || !emailValue.includes('@')) {\n return null;\n }\n\n const [localPart, domainPart] = emailValue.split('@');\n\n if (!localPart || !domainPart) {\n return null;\n }\n\n if (hasEmailFormatError(domainPart)) {\n return null;\n }\n\n if (isExactCommonDomain(domainPart)) {\n return null;\n }\n\n if (!domainPart.includes('.')) {\n const correctedDomain = detectMissingDot(domainPart, isValidTLD);\n return correctedDomain ? buildEmailCorrection(localPart, correctedDomain) : null;\n }\n\n const missingDotCorrection = detectMissingDotInMultiPartDomain(domainPart);\n if (missingDotCorrection) {\n return buildEmailCorrection(localPart, missingDotCorrection);\n }\n\n return correctDomainTypos(localPart, domainPart);\n}\n"]}
1
+ {"version":3,"file":"email-validation.js","sourceRoot":"","sources":["../../src/utils/email-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n COMMON_EMAIL_DOMAINS,\n MAX_LEVENSHTEIN_DISTANCE_DOMAIN,\n MAX_LEVENSHTEIN_DISTANCE_TLD,\n VALID_TLDS,\n} from './email-validation.constants';\n\n// ============================================================================\n// HELPER FUNCTIONS\n// ============================================================================\n\nfunction normalizeDomain(domain: string): string {\n return domain?.toLowerCase().trim() || '';\n}\n\nfunction normalizeTLD(tld: string): string {\n if (!tld) return '';\n return tld.toLowerCase().replace(/^\\./, '');\n}\n\nfunction isExactCommonDomain(domain: string): boolean {\n return COMMON_EMAIL_DOMAINS.some(\n commonDomain => normalizeDomain(commonDomain) === normalizeDomain(domain),\n );\n}\n\nfunction buildEmailCorrection(localPart: string, domain: string): string {\n return `${localPart}@${domain}`;\n}\n\nfunction getDomainParts(commonDomain: string): { name: string; tld: string } {\n const parts = commonDomain.split('.');\n return {\n name: parts[0],\n tld: parts[1] || '',\n };\n}\n\nfunction levenshteinDistance(str1: string, str2: string): number {\n const matrix: number[][] = [];\n\n for (let i = 0; i <= str2.length; i++) {\n matrix[i] = [i];\n }\n\n for (let j = 0; j <= str1.length; j++) {\n matrix[0][j] = j;\n }\n\n for (let i = 1; i <= str2.length; i++) {\n for (let j = 1; j <= str1.length; j++) {\n if (str2.charAt(i - 1) === str1.charAt(j - 1)) {\n matrix[i][j] = matrix[i - 1][j - 1];\n } else {\n matrix[i][j] = Math.min(\n matrix[i - 1][j - 1] + 1,\n matrix[i][j - 1] + 1,\n matrix[i - 1][j] + 1,\n );\n }\n }\n }\n\n return matrix[str2.length][str1.length];\n}\n\nfunction extractDomainName(domain: string): string {\n return domain.split('.')[0];\n}\n\n/**\n * Valida si el TLD es válido\n * Los TLDs en VALID_TLDS no tienen punto (ej: \"com\")\n */\nexport function isValidTLD(tld: string): boolean {\n if (!tld) return false;\n return VALID_TLDS.includes(normalizeTLD(tld));\n}\n\n/**\n * Encuentra un TLD válido similar al ingresado\n * Retorna el TLD sin punto porque se usa en join('.')\n */\nexport function findSimilarTLD(inputTLD: string): string | null {\n if (!inputTLD) return null;\n\n const normalized = normalizeTLD(inputTLD);\n\n if (VALID_TLDS.includes(normalized)) {\n return null;\n }\n let bestMatch: string | null = null;\n let minDistance = Infinity;\n\n for (const validTLD of VALID_TLDS) {\n const distance = levenshteinDistance(normalized, validTLD);\n\n if (distance < minDistance && distance > 0 && distance <= MAX_LEVENSHTEIN_DISTANCE_TLD) {\n minDistance = distance;\n bestMatch = validTLD;\n }\n }\n\n return bestMatch;\n}\n\n/**\n * Encuentra el dominio más similar a uno de los dominios comunes\n */\nexport function findSimilarDomain(inputDomain: string): string | null {\n if (!inputDomain || inputDomain.trim() === '') {\n return null;\n }\n\n const normalizedInput = inputDomain.toLowerCase().trim();\n const domainName = extractDomainName(normalizedInput);\n\n let bestMatch: string | null = null;\n let minDistance = Infinity;\n\n for (const domain of COMMON_EMAIL_DOMAINS) {\n const commonDomainName = extractDomainName(domain);\n const distance = levenshteinDistance(domainName, commonDomainName);\n\n if (distance < minDistance && distance > 0 && distance <= MAX_LEVENSHTEIN_DISTANCE_DOMAIN) {\n minDistance = distance;\n bestMatch = domain;\n }\n }\n\n return bestMatch;\n}\n\n/**\n * Detecta si hay errores de formato en el dominio (no errores tipográficos)\n * ej: doble punto (..), punto al inicio/final, caracteres inválidos\n */\nexport function hasEmailFormatError(domainPart: string): boolean {\n if (!domainPart) return false;\n\n if (domainPart.includes('..')) {\n return true;\n }\n\n if (domainPart.startsWith('.') || domainPart.endsWith('.')) {\n return true;\n }\n\n const validDomainPattern = /^[a-zA-Z0-9.-]+$/;\n if (!validDomainPattern.test(domainPart)) {\n return true;\n }\n\n // Validar que el TLD (después del último punto) tenga al menos 2 caracteres\n const lastDotIndex = domainPart.lastIndexOf('.');\n if (lastDotIndex !== -1) {\n const tld = domainPart.substring(lastDotIndex + 1);\n if (tld.length < 2) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Detecta si falta un punto en el dominio (ej: \"gmailcom\" -> \"gmail.com\")\n */\nexport function detectMissingDot(\n domainPart: string,\n isValidTLDFn: (tld: string) => boolean,\n): string | null {\n if (!domainPart || domainPart.includes('.')) {\n return null;\n }\n\n for (const commonDomain of COMMON_EMAIL_DOMAINS) {\n const commonDomainName = extractDomainName(commonDomain);\n const normalizedDomain = normalizeDomain(domainPart);\n const normalizedCommonName = normalizeDomain(commonDomainName);\n\n if (normalizedDomain.startsWith(normalizedCommonName)) {\n const remaining = normalizedDomain.substring(normalizedCommonName.length);\n\n if (isValidTLDFn(remaining)) {\n return `${commonDomainName}.${remaining}`;\n }\n }\n }\n for (const commonDomain of COMMON_EMAIL_DOMAINS) {\n const commonDomainName = extractDomainName(commonDomain);\n const { tld: commonTLD } = getDomainParts(commonDomain);\n\n const expectedWithoutDot = `${commonDomainName}${commonTLD}`;\n if (normalizeDomain(domainPart) === normalizeDomain(expectedWithoutDot)) {\n return commonDomain;\n }\n }\n\n return null;\n}\n\n/**\n * Detecta si falta un punto en un dominio de múltiples partes\n * ej: \"gmailcom.ar\" -> \"gmail.com.ar\"\n */\nexport function detectMissingDotInMultiPartDomain(domainPart: string): string | null {\n if (!domainPart || !domainPart.includes('.')) {\n return null;\n }\n\n const domainParts = domainPart.split('.');\n const firstPart = domainParts[0];\n const restParts = domainParts.slice(1);\n\n for (const commonDomain of COMMON_EMAIL_DOMAINS) {\n const commonDomainName = extractDomainName(commonDomain);\n const { tld: commonTLD } = getDomainParts(commonDomain);\n\n const expectedWithoutDot = `${commonDomainName}${commonTLD}`;\n if (normalizeDomain(firstPart) === normalizeDomain(expectedWithoutDot)) {\n const correctedParts = [commonDomainName, commonTLD, ...restParts];\n return correctedParts.join('.');\n }\n }\n\n return null;\n}\n\n/**\n * Valida el formato básico del email completo\n * @param email - El email a validar\n * @returns true si el formato es válido, false en caso contrario\n */\nexport function validateEmailFormat(email: string): boolean {\n if (!email || email.trim() === '') {\n return true;\n }\n\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(email)) {\n return false;\n }\n\n // Extraer la parte del dominio para validar formato completo (incluyendo TLD de al menos 2 caracteres)\n const parts = email.split('@');\n if (parts.length !== 2) {\n return false;\n }\n\n const domainPart = parts[1];\n // Usar hasEmailFormatError para validar el dominio (incluye validación de TLD de 1 carácter)\n return !hasEmailFormatError(domainPart);\n}\n\n/**\n * Genera sugerencias de email basadas en dominios comunes\n * @param emailValue - El valor actual del email que el usuario está escribiendo\n * @returns Array de emails sugeridos\n */\nexport function getEmailSuggestions(emailValue: string): string[] {\n if (!emailValue || !emailValue.includes('@')) {\n return [];\n }\n\n const [localPart, domainPart] = emailValue.split('@');\n\n if (!localPart) {\n return [];\n }\n\n if (domainPart && domainPart.includes('.') && !domainPart.endsWith('.')) {\n return [];\n }\n\n const filteredDomains = COMMON_EMAIL_DOMAINS.filter(domain => {\n if (!domainPart || domainPart.trim() === '') {\n return true;\n }\n return domain.startsWith(domainPart.toLowerCase());\n });\n\n return filteredDomains.map(domain => `${localPart}@${domain}`);\n}\n\n/**\n * Corrige errores tipográficos en un dominio que ya tiene puntos\n * @param localPart - La parte local del email (antes del @)\n * @param domainPart - La parte del dominio (después del @)\n * @returns El email corregido sugerido, o null si no hay corrección\n */\nfunction correctDomainTypos(localPart: string, domainPart: string): string | null {\n const domainParts = domainPart.split('.');\n const domainName = domainParts[0];\n const isDomainNameValid = COMMON_EMAIL_DOMAINS.some(domain => {\n const { name } = getDomainParts(domain);\n return normalizeDomain(name) === normalizeDomain(domainName);\n });\n\n let correctedDomainParts = [...domainParts];\n let hasCorrection = false;\n\n if (!isDomainNameValid) {\n const similarDomain = findSimilarDomain(domainPart);\n if (similarDomain) {\n const { name } = getDomainParts(similarDomain);\n correctedDomainParts[0] = name;\n hasCorrection = true;\n }\n }\n\n for (let i = 1; i < correctedDomainParts.length; i++) {\n const part = correctedDomainParts[i];\n if (!isValidTLD(part)) {\n const similarTLD = findSimilarTLD(part);\n if (similarTLD) {\n correctedDomainParts[i] = similarTLD;\n hasCorrection = true;\n }\n }\n }\n\n return hasCorrection ? buildEmailCorrection(localPart, correctedDomainParts.join('.')) : null;\n}\n\n/**\n * Detecta si hay un error tipográfico en el email y sugiere una corrección\n * @param emailValue - El email a verificar\n * @returns El email corregido sugerido, o null si no hay corrección\n */\nexport function suggestEmailCorrection(emailValue: string): string | null {\n if (!emailValue || !emailValue.includes('@')) {\n return null;\n }\n\n const [localPart, domainPart] = emailValue.split('@');\n\n if (!localPart || !domainPart) {\n return null;\n }\n\n if (hasEmailFormatError(domainPart)) {\n return null;\n }\n\n if (isExactCommonDomain(domainPart)) {\n return null;\n }\n\n if (!domainPart.includes('.')) {\n const correctedDomain = detectMissingDot(domainPart, isValidTLD);\n return correctedDomain ? buildEmailCorrection(localPart, correctedDomain) : null;\n }\n\n const missingDotCorrection = detectMissingDotInMultiPartDomain(domainPart);\n if (missingDotCorrection) {\n return buildEmailCorrection(localPart, missingDotCorrection);\n }\n\n return correctDomainTypos(localPart, domainPart);\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { C as CardFieldsWrapper$1, d as defineCustomElement$1 } from './p-PtbrPqLv.js';
1
+ import { C as CardFieldsWrapper$1, d as defineCustomElement$1 } from './p-B2zhJUcA.js';
2
2
 
3
3
  const CardFieldsWrapper = CardFieldsWrapper$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -1,4 +1,4 @@
1
- import { C as ChangeCardSuccess$1, d as defineCustomElement$1 } from './p-Dvnf-j7X.js';
1
+ import { C as ChangeCardSuccess$1, d as defineCustomElement$1 } from './p-Dhs3vhG4.js';
2
2
 
3
3
  const ChangeCardSuccess = ChangeCardSuccess$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -1,4 +1,4 @@
1
- import { D as DiscountCoupon$1, d as defineCustomElement$1 } from './p-CN-2D26g.js';
1
+ import { D as DiscountCoupon$1, d as defineCustomElement$1 } from './p-Pg_gixIL.js';
2
2
 
3
3
  const DiscountCoupon = DiscountCoupon$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -1,4 +1,4 @@
1
- import { I as InputOtp$1, d as defineCustomElement$1 } from './p-0K5ek-gN.js';
1
+ import { I as InputOtp$1, d as defineCustomElement$1 } from './p-B3jFm6B_.js';
2
2
 
3
3
  const InputOtp = InputOtp$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -1,4 +1,4 @@
1
- import { O as Otp, d as defineCustomElement$1 } from './p-h01Qiljf.js';
1
+ import { O as Otp, d as defineCustomElement$1 } from './p-Ba8zuq-V.js';
2
2
 
3
3
  const OtpComponent = Otp;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -238,10 +238,10 @@ const InputSelect = /*@__PURE__*/ proxyCustomElement(class InputSelect extends H
238
238
  render() {
239
239
  const selectedLabel = this.getSelectedOptionLabel();
240
240
  const hasValue = this.value !== '';
241
- 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 => {
241
+ 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 => {
242
242
  event.stopPropagation();
243
243
  this.clearSearch();
244
- }, "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)));
244
+ }, "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)));
245
245
  }
246
246
  static get style() { return inputSelectCss; }
247
247
  }, [256, "rebill-input-select", {
@@ -288,6 +288,6 @@ function defineCustomElement() {
288
288
  defineCustomElement();
289
289
 
290
290
  export { InputSelect as I, defineCustomElement as d };
291
- //# sourceMappingURL=p-xKyxKtdF.js.map
291
+ //# sourceMappingURL=p-30DP4s-1.js.map
292
292
 
293
- //# sourceMappingURL=p-xKyxKtdF.js.map
293
+ //# sourceMappingURL=p-30DP4s-1.js.map
@@ -1 +1 @@
1
- {"file":"p-xKyxKtdF.js","mappings":"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","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/shared/inputs/input-select/input-select.css?tag=rebill-input-select","src/components/shared/inputs/input-select/input-select.tsx"],"sourcesContent":["@import '../shared-input.css';\n\n:host {\n display: block;\n width: 100%;\n box-sizing: border-box;\n}\n\n.select-wrapper {\n position: relative;\n width: 100%;\n box-sizing: border-box;\n}\n\n.select-trigger {\n width: 100%;\n height: 38.33px;\n border-radius: var(--input-group-inner-border-radius, 8px);\n border: 1.5px solid var(--rebill-color-border);\n padding: 10px 14px;\n padding-right: 30px; /* Espacio para el icono */\n font-size: 0.875rem;\n font-weight: normal;\n color: var(--rebill-color-text-primary);\n outline: none;\n transition: border-color 0.2s;\n background: var(--rebill-color-background);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: space-between;\n user-select: none;\n box-sizing: border-box;\n min-width: 0; /* Allow the element to shrink below its content size */\n}\n\n.select-trigger:focus {\n outline: none;\n border-color: var(--rebill-color-primary);\n box-shadow: 0 0 0 2px var(--rebill-color-primary-light);\n}\n\n.select-trigger:hover:not(.disabled) {\n border-color: var(--rebill-color-primary);\n}\n\n.select-trigger.input-error {\n border-color: var(--rebill-color-error) !important;\n}\n\n.select-trigger.placeholder .select-value {\n color: var(--rebill-color-text-secondary-light);\n font-size: 0.875rem;\n}\n\n.select-wrapper.disabled .select-trigger {\n background-color: var(--rebill-color-background);\n /* border-color: var(--rebill-color-disabled); */\n color: var(--rebill-color-text-secondary);\n cursor: not-allowed;\n opacity: 0.7;\n}\n\n.select-value {\n flex: 1;\n text-align: left;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.icon-wrapper {\n position: absolute;\n right: 0.75rem;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n height: 20px;\n width: 20px;\n}\n\n.select-icon {\n color: var(--rebill-color-text-secondary);\n transition: transform 0.2s ease;\n transform-origin: 50% 50%;\n display: block;\n}\n\n.select-icon.rotated {\n transform: rotateX(180deg);\n}\n\n.select-wrapper.disabled .select-icon {\n color: var(--rebill-color-disabled);\n}\n\n/* Variante undelineated - sin borde */\n.select-trigger.underlined {\n width: 100%;\n height: 38.33px;\n padding: 10px 14px;\n padding-right: 40px;\n font-size: 0.875rem;\n font-weight: normal;\n color: var(--rebill-color-text-primary);\n outline: none;\n background: var(--rebill-color-background);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: space-between;\n user-select: none;\n min-width: 0;\n border: none;\n}\n\n.select-trigger.underlined:focus {\n border: none;\n box-shadow: none;\n}\n\n.select-dropPosition.open-down {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n z-index: 1000;\n background-color: var(--rebill-color-background);\n border: 1px solid var(--rebill-color-border);\n border-radius: 0.375rem;\n box-shadow:\n 0 4px 6px -1px rgba(0, 0, 0, 0.1),\n 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n margin-top: 0.25rem;\n max-height: 200px;\n overflow-y: auto;\n animation: slideDown 0.15s ease-out;\n box-sizing: border-box;\n width: 100%;\n}\n\n.select-dropPosition.open-up {\n position: absolute;\n bottom: 100%;\n left: 0;\n right: 0;\n z-index: 1000;\n background-color: var(--rebill-color-background);\n border: 1px solid var(--rebill-color-border);\n border-radius: 0.375rem;\n box-shadow:\n 0 4px 6px -1px rgba(0, 0, 0, 0.1),\n 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n margin-bottom: 0.25rem;\n margin-top: 0;\n max-height: 200px;\n overflow-y: auto;\n animation: slideUp 0.15s ease-out;\n box-sizing: border-box;\n width: 100%;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.select-option {\n padding: 0.75rem;\n font-size: 0.875rem;\n color: var(--rebill-color-text-primary);\n cursor: pointer;\n border-bottom: 1px solid var(--rebill-color-border);\n transition: background-color 0.15s ease;\n}\n\n.select-option:last-child {\n border-bottom: none;\n}\n\n.select-option:hover,\n.select-option.highlighted {\n background-color: #f0f9ff;\n}\n\n.select-option.selected {\n background-color: var(--rebill-color-primary);\n color: white;\n}\n\n.select-option.selected:hover,\n.select-option.selected.highlighted {\n background-color: var(--rebill-color-primary);\n}\n\n/* Scrollbar styling for the dropdown */\n.select-dropdown::-webkit-scrollbar {\n width: 6px;\n}\n\n.select-dropdown::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.select-dropdown::-webkit-scrollbar-thumb {\n background-color: var(--rebill-color-border);\n border-radius: 3px;\n}\n\n.select-dropdown::-webkit-scrollbar-thumb:hover {\n background-color: var(--rebill-color-text-secondary);\n}\n\n/* Estilos para la funcionalidad de búsqueda */\n.search-container {\n padding: 0.75rem;\n border-bottom: 1px solid var(--rebill-color-border);\n background-color: var(--rebill-color-background);\n}\n\n.search-input-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n}\n\n.search-icon {\n position: absolute;\n left: 0.75rem;\n color: var(--rebill-color-text-secondary);\n z-index: 1;\n pointer-events: none;\n}\n\n.search-input {\n width: 100%;\n padding: 0.5rem 0.75rem 0.5rem 2.5rem;\n border: 1px solid var(--rebill-color-border);\n border-radius: 0.375rem;\n font-size: 0.875rem;\n color: var(--rebill-color-text-primary);\n background-color: var(--rebill-color-background);\n outline: none;\n transition: border-color 0.2s ease;\n box-sizing: border-box;\n}\n\n.search-input:focus {\n border-color: var(--rebill-color-primary);\n box-shadow: 0 0 0 2px var(--rebill-color-primary-light);\n}\n\n.search-input::placeholder {\n color: var(--rebill-color-text-secondary-light);\n font-size: 0.875rem;\n}\n\n.clear-search {\n position: absolute;\n right: 0.75rem;\n background: none;\n border: none;\n cursor: pointer;\n padding: 0.25rem;\n border-radius: 0.25rem;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--rebill-color-text-secondary);\n transition: background-color 0.2s ease;\n}\n\n.clear-search:hover {\n background-color: var(--rebill-color-background-hover);\n color: var(--rebill-color-text-primary);\n}\n\n.no-results {\n padding: 0.75rem;\n text-align: center;\n color: var(--rebill-color-text-secondary);\n font-style: italic;\n border-bottom: 1px solid var(--rebill-color-border);\n}\n\n.loading-message {\n padding: 0.75rem;\n text-align: center;\n color: var(--rebill-color-text-secondary);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border-bottom: 1px solid var(--rebill-color-border);\n}\n\n.loading-message .spinner {\n width: 14px;\n height: 14px;\n border: 2px solid rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n border-top-color: var(--rebill-color-primary, #007bff);\n animation: spin 1s linear infinite;\n}\n\n/* Spinner styles */\n.spinner {\n width: 16px;\n height: 16px;\n border: 2px solid rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n border-top-color: var(--rebill-color-primary, #007bff);\n animation: spin 1s linear infinite;\n display: inline-block;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n/* Fix para evitar zoom en dispositivos móviles */\n@media screen and (max-width: 768px) {\n .select-trigger {\n font-size: 1rem;\n }\n\n .select-trigger.placeholder .select-value {\n font-size: 1rem;\n }\n\n .select-option {\n font-size: 1rem;\n }\n\n .search-input {\n font-size: 1rem;\n }\n\n .search-input::placeholder {\n font-size: 1rem;\n }\n\n .loading-message {\n font-size: 1rem;\n }\n\n .no-results {\n font-size: 1rem;\n }\n}\n","import { Component, Event, EventEmitter, h, Listen, Prop, State } from '@stencil/core';\nimport { I18nService } from '../../../../i18n/i18n.service';\nimport { SessionStore } from '../../../../store/session.store';\n@Component({\n tag: 'rebill-input-select',\n styleUrl: 'input-select.css',\n shadow: false,\n})\nexport class InputSelect {\n private dropdownRef?: HTMLDivElement;\n private triggerRef?: HTMLDivElement;\n private searchInputRef?: HTMLInputElement;\n private unsubscribeCurrentLocaleStore?: () => void;\n\n /** Etiqueta que se muestra arriba del select */\n @Prop() label: string = '';\n /** Opciones del select */\n @Prop() options: { label: string; value: string }[] = [];\n /** Valor seleccionado */\n @Prop({ mutable: true, reflect: true }) value: string = '';\n /** Mensaje de error */\n @Prop() error: string = '';\n /** ID del select */\n @Prop() id: string = '';\n /** Estado deshabilitado */\n @Prop() disabled: boolean = false;\n /** Placeholder text */\n @Prop() placeholder: string = 'Selecciona una opción';\n /** Variant input select */\n @Prop() variant: 'outlined' | 'underlined';\n /** Icono de flecha hacia abajo */\n @Prop() arrowIcon: 'up-down' | 'down' = 'up-down';\n /** Posición del dropdown */\n @Prop() dropPosition: 'up' | 'down' = 'down';\n /** Tamaño de la fuente */\n @Prop() fontSize: string = '14px';\n /** Estilos personalizados */\n @Prop() backgroundColor: string = '';\n /** Habilitar funcionalidad de búsqueda */\n @Prop() searchable: boolean = false;\n /** Placeholder del campo de búsqueda */\n @Prop() searchPlaceholder: string = 'Search for options...';\n /** Estado de carga */\n @Prop() loading: boolean = false;\n /** Estado interno para mostrar/ocultar el dropdown */\n @State() isOpen: boolean = false;\n /** ID único del componente */\n @State() componentId: string = '';\n /** Índice de la opción resaltada para navegación con teclado */\n @State() highlightedIndex: number = -1;\n /** Término de búsqueda */\n @State() searchTerm: string = '';\n /** Opciones filtradas */\n @State() filteredOptions: { label: string; value: string }[] = [];\n /** Estado para forzar re-render cuando cambia el idioma */\n @State() languageUpdateTrigger: number = 0;\n /** Evento al cambiar el valor */\n @Event() input: EventEmitter<{ id: string; value: string; disabled?: boolean }>;\n\n componentWillLoad() {\n this.filteredOptions = [...this.options];\n this.componentId = this.id || `select-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n componentDidLoad() {\n this.unsubscribeCurrentLocaleStore = SessionStore.onChange('currentLocale', () => {\n this.languageUpdateTrigger++;\n });\n }\n\n disconnectedCallback() {\n if (this.unsubscribeCurrentLocaleStore) {\n this.unsubscribeCurrentLocaleStore();\n }\n }\n\n componentWillUpdate() {\n this.filteredOptions = [...this.options];\n\n if (this.searchable) {\n this.filterOptions();\n }\n }\n\n @Listen('change', { target: 'document' })\n handleFormChange(event: CustomEvent) {\n const formData = event.detail;\n if (formData && this.id in formData) {\n const newValue = formData[this.id];\n // Only update if the new value is different and ensure it's a string\n if (newValue !== this.value && typeof newValue === 'string') {\n this.value = newValue;\n this.input.emit({ id: this.id, value: this.value });\n }\n }\n }\n\n @Listen('closeAllSelects', { target: 'document' })\n handleCloseAllSelects(event: CustomEvent) {\n if (event.detail !== this.componentId) {\n this.closeDropdown();\n }\n }\n\n @Listen('click', { target: 'document' })\n handleDocumentClick(event: Event) {\n if (\n this.dropdownRef &&\n this.triggerRef &&\n !this.dropdownRef.contains(event.target as Node) &&\n !this.triggerRef.contains(event.target as Node)\n ) {\n this.closeDropdown();\n }\n }\n\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n if (this.disabled) return;\n\n if (this.searchable && this.searchInputRef && event.target === this.searchInputRef) {\n return;\n }\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (this.isOpen && this.highlightedIndex >= 0) {\n this.selectOption(this.filteredOptions[this.highlightedIndex]);\n } else {\n this.toggleDropdown();\n }\n break;\n case 'Escape':\n event.preventDefault();\n this.closeDropdown();\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen) {\n this.openDropdown();\n } else {\n this.highlightedIndex = Math.min(\n this.highlightedIndex + 1,\n this.filteredOptions.length - 1,\n );\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (this.isOpen) {\n this.highlightedIndex = Math.max(this.highlightedIndex - 1, 0);\n }\n break;\n }\n }\n\n private toggleDropdown = () => {\n if (this.disabled) return;\n\n const wasOpen = this.isOpen;\n this.isOpen = !this.isOpen;\n\n if (this.isOpen) {\n if (!wasOpen) {\n document.dispatchEvent(new CustomEvent('closeAllSelects', { detail: this.componentId }));\n }\n\n this.highlightedIndex = this.filteredOptions.findIndex(opt => opt.value === this.value);\n if (this.highlightedIndex === -1) {\n this.highlightedIndex = 0;\n }\n\n if (this.searchable) {\n this.focusSearchInput();\n }\n } else {\n this.searchTerm = '';\n this.filterOptions();\n }\n };\n\n private openDropdown = () => {\n if (this.disabled) return;\n document.dispatchEvent(new CustomEvent('closeAllSelects', { detail: this.componentId }));\n this.isOpen = true;\n this.highlightedIndex = this.filteredOptions.findIndex(opt => opt.value === this.value);\n if (this.highlightedIndex === -1) {\n this.highlightedIndex = 0;\n }\n\n if (this.searchable) {\n this.focusSearchInput();\n }\n };\n\n private focusSearchInput = () => {\n const focusInput = () => {\n if (this.searchInputRef) {\n this.searchInputRef.focus();\n this.searchInputRef.select();\n }\n };\n focusInput();\n\n requestAnimationFrame(() => {\n focusInput();\n });\n setTimeout(() => {\n focusInput();\n }, 10);\n };\n\n private closeDropdown = () => {\n this.isOpen = false;\n this.highlightedIndex = -1;\n this.searchTerm = '';\n this.filterOptions();\n };\n\n private selectOption = (option: { label: string; value: string }) => {\n if (this.disabled) return;\n this.value = option.value;\n this.closeDropdown();\n this.input.emit({ id: this.id, value: this.value, disabled: this.disabled });\n };\n\n private getSelectedOptionLabel = (): string => {\n const selectedOption = this.options.find(opt => opt.value === this.value);\n return selectedOption ? selectedOption.label : this.placeholder;\n };\n\n private getArrowIcon = () => {\n if (this.arrowIcon === 'up-down') return 'chevron-up-down';\n return 'chevron-down';\n };\n\n private filterOptions = () => {\n if (!this.searchTerm.trim()) {\n this.filteredOptions = [...this.options];\n } else {\n this.filteredOptions = this.options.filter(option =>\n option.label.toLowerCase().includes(this.searchTerm.toLowerCase()),\n );\n }\n this.highlightedIndex = -1;\n };\n\n private handleSearchInput = (event: Event) => {\n const target = event.target as HTMLInputElement;\n this.searchTerm = target.value;\n this.filterOptions();\n };\n\n private clearSearch = () => {\n this.searchTerm = '';\n this.filterOptions();\n };\n\n private handleSearchClick = (event: Event) => {\n event.stopPropagation();\n };\n\n render() {\n const selectedLabel = this.getSelectedOptionLabel();\n const hasValue = this.value !== '';\n\n return (\n <div class=\"input-container\">\n {this.label && (\n <label class={`input-label ${this.disabled ? 'disabled' : ''}`}>{this.label}</label>\n )}\n <div\n class={`select-wrapper ${this.disabled ? 'disabled' : ''} ${this.isOpen ? 'open' : ''}`}\n >\n <div\n ref={el => (this.triggerRef = el)}\n class={`input-element select-trigger ${this.error ? 'input-error' : ''} ${!hasValue ? 'placeholder' : ''} ${this.variant === 'underlined' ? 'underlined' : ''}`}\n style={{ backgroundColor: this.backgroundColor }}\n onClick={this.toggleDropdown}\n tabIndex={this.disabled ? -1 : 0}\n role=\"combobox\"\n aria-expanded={this.isOpen.toString()}\n aria-haspopup=\"listbox\"\n aria-labelledby={this.label ? `${this.id}-label` : undefined}\n >\n <span\n class=\"select-value\"\n style={{ fontSize: this.fontSize }}\n innerHTML={selectedLabel}\n ></span>\n <div class=\"icon-wrapper\">\n {this.loading ? (\n <div class=\"spinner\"></div>\n ) : (\n <rebill-icon\n name={this.getArrowIcon()}\n size=\"20px\"\n class={`select-icon ${this.isOpen && this.arrowIcon === 'down' ? 'rotated' : ''}`}\n />\n )}\n </div>\n </div>\n\n {this.isOpen && (\n <div\n ref={el => (this.dropdownRef = el)}\n class={`select-dropPosition ${this.dropPosition === 'up' ? 'open-up' : 'open-down'}`}\n role=\"listbox\"\n >\n {this.searchable && (\n <div class=\"search-container\" onClick={this.handleSearchClick}>\n <div class=\"search-input-wrapper\">\n <rebill-icon name=\"search\" size=\"16px\" class=\"search-icon\" />\n <input\n ref={el => (this.searchInputRef = el)}\n type=\"text\"\n class=\"search-input\"\n placeholder={this.searchPlaceholder}\n value={this.searchTerm}\n onInput={this.handleSearchInput}\n onClick={this.handleSearchClick}\n style={{ fontSize: this.fontSize }}\n />\n {this.searchTerm && (\n <button\n type=\"button\"\n class=\"clear-search\"\n onClick={event => {\n event.stopPropagation();\n this.clearSearch();\n }}\n aria-label=\"Clear search\"\n >\n <rebill-icon name=\"x\" size=\"16px\" />\n </button>\n )}\n </div>\n </div>\n )}\n {this.loading && this.filteredOptions.length === 0 ? (\n <div class=\"loading-message\" style={{ fontSize: this.fontSize }}>\n <div class=\"spinner\"></div>\n {I18nService.translate('common.loadingOptions')}\n </div>\n ) : this.filteredOptions.length > 0 ? (\n this.filteredOptions.map((option, index) => (\n <div\n class={`select-option ${this.value === option.value ? 'selected' : ''} ${this.highlightedIndex === index ? 'highlighted' : ''}`}\n style={{ fontSize: this.fontSize }}\n onClick={() => this.selectOption(option)}\n role=\"option\"\n aria-selected={this.value === option.value ? 'true' : 'false'}\n >\n <span innerHTML={option.label}></span>\n </div>\n ))\n ) : (\n <div class=\"no-results\" style={{ fontSize: this.fontSize }}>\n No se encontraron resultados\n </div>\n )}\n </div>\n )}\n </div>\n {this.error && <span class=\"error-message\">{this.error}</span>}\n </div>\n );\n }\n}\n"],"version":3}
1
+ {"file":"p-30DP4s-1.js","mappings":"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","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/shared/inputs/input-select/input-select.css?tag=rebill-input-select","src/components/shared/inputs/input-select/input-select.tsx"],"sourcesContent":["@import '../shared-input.css';\n\n:host {\n display: block;\n width: 100%;\n box-sizing: border-box;\n}\n\n.select-wrapper {\n position: relative;\n width: 100%;\n box-sizing: border-box;\n}\n\n.select-trigger {\n width: 100%;\n height: 38.33px;\n border-radius: var(--input-group-inner-border-radius, 8px);\n border: 1.5px solid var(--rebill-color-border);\n padding: 10px 14px;\n padding-right: 30px; /* Espacio para el icono */\n font-size: 0.875rem;\n font-weight: normal;\n color: var(--rebill-color-text-primary);\n outline: none;\n transition: border-color 0.2s;\n background: var(--rebill-color-background);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: space-between;\n user-select: none;\n box-sizing: border-box;\n min-width: 0; /* Allow the element to shrink below its content size */\n}\n\n.select-trigger:focus {\n outline: none;\n border-color: var(--rebill-color-primary);\n box-shadow: 0 0 0 2px var(--rebill-color-primary-light);\n}\n\n.select-trigger:hover:not(.disabled) {\n border-color: var(--rebill-color-primary);\n}\n\n.select-trigger.input-error {\n border-color: var(--rebill-color-error) !important;\n}\n\n.select-trigger.placeholder .select-value {\n color: var(--rebill-color-text-secondary-light);\n font-size: 0.875rem;\n}\n\n.select-wrapper.disabled .select-trigger {\n background-color: var(--rebill-color-background);\n /* border-color: var(--rebill-color-disabled); */\n color: var(--rebill-color-text-secondary);\n cursor: not-allowed;\n opacity: 0.7;\n}\n\n.select-value {\n flex: 1;\n text-align: left;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.icon-wrapper {\n position: absolute;\n right: 0.75rem;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n height: 20px;\n width: 20px;\n}\n\n.select-icon {\n color: var(--rebill-color-text-secondary);\n transition: transform 0.2s ease;\n transform-origin: 50% 50%;\n display: block;\n}\n\n.select-icon.rotated {\n transform: rotateX(180deg);\n}\n\n.select-wrapper.disabled .select-icon {\n color: var(--rebill-color-disabled);\n}\n\n/* Variante undelineated - sin borde */\n.select-trigger.underlined {\n width: 100%;\n height: 38.33px;\n padding: 10px 14px;\n padding-right: 40px;\n font-size: 0.875rem;\n font-weight: normal;\n color: var(--rebill-color-text-primary);\n outline: none;\n background: var(--rebill-color-background);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: space-between;\n user-select: none;\n min-width: 0;\n border: none;\n}\n\n.select-trigger.underlined:focus {\n border: none;\n box-shadow: none;\n}\n\n.select-dropPosition.open-down {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n z-index: 1000;\n background-color: var(--rebill-color-background);\n border: 1px solid var(--rebill-color-border);\n border-radius: 0.375rem;\n box-shadow:\n 0 4px 6px -1px rgba(0, 0, 0, 0.1),\n 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n margin-top: 0.25rem;\n max-height: 200px;\n overflow-y: auto;\n animation: slideDown 0.15s ease-out;\n box-sizing: border-box;\n width: 100%;\n}\n\n.select-dropPosition.open-up {\n position: absolute;\n bottom: 100%;\n left: 0;\n right: 0;\n z-index: 1000;\n background-color: var(--rebill-color-background);\n border: 1px solid var(--rebill-color-border);\n border-radius: 0.375rem;\n box-shadow:\n 0 4px 6px -1px rgba(0, 0, 0, 0.1),\n 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n margin-bottom: 0.25rem;\n margin-top: 0;\n max-height: 200px;\n overflow-y: auto;\n animation: slideUp 0.15s ease-out;\n box-sizing: border-box;\n width: 100%;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.select-option {\n padding: 0.75rem;\n font-size: 0.875rem;\n color: var(--rebill-color-text-primary);\n cursor: pointer;\n border-bottom: 1px solid var(--rebill-color-border);\n transition: background-color 0.15s ease;\n}\n\n.select-option:last-child {\n border-bottom: none;\n}\n\n.select-option:hover,\n.select-option.highlighted {\n background-color: #f0f9ff;\n}\n\n.select-option.selected {\n background-color: var(--rebill-color-primary);\n color: white;\n}\n\n.select-option.selected:hover,\n.select-option.selected.highlighted {\n background-color: var(--rebill-color-primary);\n}\n\n/* Scrollbar styling for the dropdown */\n.select-dropdown::-webkit-scrollbar {\n width: 6px;\n}\n\n.select-dropdown::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.select-dropdown::-webkit-scrollbar-thumb {\n background-color: var(--rebill-color-border);\n border-radius: 3px;\n}\n\n.select-dropdown::-webkit-scrollbar-thumb:hover {\n background-color: var(--rebill-color-text-secondary);\n}\n\n/* Estilos para la funcionalidad de búsqueda */\n.search-container {\n padding: 0.75rem;\n border-bottom: 1px solid var(--rebill-color-border);\n background-color: var(--rebill-color-background);\n}\n\n.search-input-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n}\n\n.search-icon {\n position: absolute;\n left: 0.75rem;\n color: var(--rebill-color-text-secondary);\n z-index: 1;\n pointer-events: none;\n}\n\n.search-input {\n width: 100%;\n padding: 0.5rem 0.75rem 0.5rem 2.5rem;\n border: 1px solid var(--rebill-color-border);\n border-radius: 0.375rem;\n font-size: 0.875rem;\n color: var(--rebill-color-text-primary);\n background-color: var(--rebill-color-background);\n outline: none;\n transition: border-color 0.2s ease;\n box-sizing: border-box;\n}\n\n.search-input:focus {\n border-color: var(--rebill-color-primary);\n box-shadow: 0 0 0 2px var(--rebill-color-primary-light);\n}\n\n.search-input::placeholder {\n color: var(--rebill-color-text-secondary-light);\n font-size: 0.875rem;\n}\n\n.clear-search {\n position: absolute;\n right: 0.75rem;\n background: none;\n border: none;\n cursor: pointer;\n padding: 0.25rem;\n border-radius: 0.25rem;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--rebill-color-text-secondary);\n transition: background-color 0.2s ease;\n}\n\n.clear-search:hover {\n background-color: var(--rebill-color-background-hover);\n color: var(--rebill-color-text-primary);\n}\n\n.no-results {\n padding: 0.75rem;\n text-align: center;\n color: var(--rebill-color-text-secondary);\n font-style: italic;\n border-bottom: 1px solid var(--rebill-color-border);\n}\n\n.loading-message {\n padding: 0.75rem;\n text-align: center;\n color: var(--rebill-color-text-secondary);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border-bottom: 1px solid var(--rebill-color-border);\n}\n\n.loading-message .spinner {\n width: 14px;\n height: 14px;\n border: 2px solid rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n border-top-color: var(--rebill-color-primary, #007bff);\n animation: spin 1s linear infinite;\n}\n\n/* Spinner styles */\n.spinner {\n width: 16px;\n height: 16px;\n border: 2px solid rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n border-top-color: var(--rebill-color-primary, #007bff);\n animation: spin 1s linear infinite;\n display: inline-block;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n/* Fix para evitar zoom en dispositivos móviles */\n@media screen and (max-width: 768px) {\n .select-trigger {\n font-size: 1rem;\n }\n\n .select-trigger.placeholder .select-value {\n font-size: 1rem;\n }\n\n .select-option {\n font-size: 1rem;\n }\n\n .search-input {\n font-size: 1rem;\n }\n\n .search-input::placeholder {\n font-size: 1rem;\n }\n\n .loading-message {\n font-size: 1rem;\n }\n\n .no-results {\n font-size: 1rem;\n }\n}\n","import { Component, Event, EventEmitter, h, Listen, Prop, State } from '@stencil/core';\nimport { I18nService } from '../../../../i18n/i18n.service';\nimport { SessionStore } from '../../../../store/session.store';\n@Component({\n tag: 'rebill-input-select',\n styleUrl: 'input-select.css',\n shadow: false,\n})\nexport class InputSelect {\n private dropdownRef?: HTMLDivElement;\n private triggerRef?: HTMLDivElement;\n private searchInputRef?: HTMLInputElement;\n private unsubscribeCurrentLocaleStore?: () => void;\n\n /** Etiqueta que se muestra arriba del select */\n @Prop() label: string = '';\n /** Opciones del select */\n @Prop() options: { label: string; value: string }[] = [];\n /** Valor seleccionado */\n @Prop({ mutable: true, reflect: true }) value: string = '';\n /** Mensaje de error */\n @Prop() error: string = '';\n /** ID del select */\n @Prop() id: string = '';\n /** Estado deshabilitado */\n @Prop() disabled: boolean = false;\n /** Placeholder text */\n @Prop() placeholder: string = 'Selecciona una opción';\n /** Variant input select */\n @Prop() variant: 'outlined' | 'underlined';\n /** Icono de flecha hacia abajo */\n @Prop() arrowIcon: 'up-down' | 'down' = 'up-down';\n /** Posición del dropdown */\n @Prop() dropPosition: 'up' | 'down' = 'down';\n /** Tamaño de la fuente */\n @Prop() fontSize: string = '14px';\n /** Estilos personalizados */\n @Prop() backgroundColor: string = '';\n /** Habilitar funcionalidad de búsqueda */\n @Prop() searchable: boolean = false;\n /** Placeholder del campo de búsqueda */\n @Prop() searchPlaceholder: string = 'Search for options...';\n /** Estado de carga */\n @Prop() loading: boolean = false;\n /** Estado interno para mostrar/ocultar el dropdown */\n @State() isOpen: boolean = false;\n /** ID único del componente */\n @State() componentId: string = '';\n /** Índice de la opción resaltada para navegación con teclado */\n @State() highlightedIndex: number = -1;\n /** Término de búsqueda */\n @State() searchTerm: string = '';\n /** Opciones filtradas */\n @State() filteredOptions: { label: string; value: string }[] = [];\n /** Estado para forzar re-render cuando cambia el idioma */\n @State() languageUpdateTrigger: number = 0;\n /** Evento al cambiar el valor */\n @Event() input: EventEmitter<{ id: string; value: string; disabled?: boolean }>;\n\n componentWillLoad() {\n this.filteredOptions = [...this.options];\n this.componentId = this.id || `select-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n componentDidLoad() {\n this.unsubscribeCurrentLocaleStore = SessionStore.onChange('currentLocale', () => {\n this.languageUpdateTrigger++;\n });\n }\n\n disconnectedCallback() {\n if (this.unsubscribeCurrentLocaleStore) {\n this.unsubscribeCurrentLocaleStore();\n }\n }\n\n componentWillUpdate() {\n this.filteredOptions = [...this.options];\n\n if (this.searchable) {\n this.filterOptions();\n }\n }\n\n @Listen('change', { target: 'document' })\n handleFormChange(event: CustomEvent) {\n const formData = event.detail;\n if (formData && this.id in formData) {\n const newValue = formData[this.id];\n // Only update if the new value is different and ensure it's a string\n if (newValue !== this.value && typeof newValue === 'string') {\n this.value = newValue;\n this.input.emit({ id: this.id, value: this.value });\n }\n }\n }\n\n @Listen('closeAllSelects', { target: 'document' })\n handleCloseAllSelects(event: CustomEvent) {\n if (event.detail !== this.componentId) {\n this.closeDropdown();\n }\n }\n\n @Listen('click', { target: 'document' })\n handleDocumentClick(event: Event) {\n if (\n this.dropdownRef &&\n this.triggerRef &&\n !this.dropdownRef.contains(event.target as Node) &&\n !this.triggerRef.contains(event.target as Node)\n ) {\n this.closeDropdown();\n }\n }\n\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n if (this.disabled) return;\n\n if (this.searchable && this.searchInputRef && event.target === this.searchInputRef) {\n return;\n }\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (this.isOpen && this.highlightedIndex >= 0) {\n this.selectOption(this.filteredOptions[this.highlightedIndex]);\n } else {\n this.toggleDropdown();\n }\n break;\n case 'Escape':\n event.preventDefault();\n this.closeDropdown();\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen) {\n this.openDropdown();\n } else {\n this.highlightedIndex = Math.min(\n this.highlightedIndex + 1,\n this.filteredOptions.length - 1,\n );\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (this.isOpen) {\n this.highlightedIndex = Math.max(this.highlightedIndex - 1, 0);\n }\n break;\n }\n }\n\n private toggleDropdown = () => {\n if (this.disabled) return;\n\n const wasOpen = this.isOpen;\n this.isOpen = !this.isOpen;\n\n if (this.isOpen) {\n if (!wasOpen) {\n document.dispatchEvent(new CustomEvent('closeAllSelects', { detail: this.componentId }));\n }\n\n this.highlightedIndex = this.filteredOptions.findIndex(opt => opt.value === this.value);\n if (this.highlightedIndex === -1) {\n this.highlightedIndex = 0;\n }\n\n if (this.searchable) {\n this.focusSearchInput();\n }\n } else {\n this.searchTerm = '';\n this.filterOptions();\n }\n };\n\n private openDropdown = () => {\n if (this.disabled) return;\n document.dispatchEvent(new CustomEvent('closeAllSelects', { detail: this.componentId }));\n this.isOpen = true;\n this.highlightedIndex = this.filteredOptions.findIndex(opt => opt.value === this.value);\n if (this.highlightedIndex === -1) {\n this.highlightedIndex = 0;\n }\n\n if (this.searchable) {\n this.focusSearchInput();\n }\n };\n\n private focusSearchInput = () => {\n const focusInput = () => {\n if (this.searchInputRef) {\n this.searchInputRef.focus();\n this.searchInputRef.select();\n }\n };\n focusInput();\n\n requestAnimationFrame(() => {\n focusInput();\n });\n setTimeout(() => {\n focusInput();\n }, 10);\n };\n\n private closeDropdown = () => {\n this.isOpen = false;\n this.highlightedIndex = -1;\n this.searchTerm = '';\n this.filterOptions();\n };\n\n private selectOption = (option: { label: string; value: string }) => {\n if (this.disabled) return;\n this.value = option.value;\n this.closeDropdown();\n this.input.emit({ id: this.id, value: this.value, disabled: this.disabled });\n };\n\n private getSelectedOptionLabel = (): string => {\n const selectedOption = this.options.find(opt => opt.value === this.value);\n return selectedOption ? selectedOption.label : this.placeholder;\n };\n\n private getArrowIcon = () => {\n if (this.arrowIcon === 'up-down') return 'chevron-up-down';\n return 'chevron-down';\n };\n\n private filterOptions = () => {\n if (!this.searchTerm.trim()) {\n this.filteredOptions = [...this.options];\n } else {\n this.filteredOptions = this.options.filter(option =>\n option.label.toLowerCase().includes(this.searchTerm.toLowerCase()),\n );\n }\n this.highlightedIndex = -1;\n };\n\n private handleSearchInput = (event: Event) => {\n const target = event.target as HTMLInputElement;\n this.searchTerm = target.value;\n this.filterOptions();\n };\n\n private clearSearch = () => {\n this.searchTerm = '';\n this.filterOptions();\n };\n\n private handleSearchClick = (event: Event) => {\n event.stopPropagation();\n };\n\n render() {\n const selectedLabel = this.getSelectedOptionLabel();\n const hasValue = this.value !== '';\n\n return (\n <div class=\"input-container\">\n {this.label && (\n <label class={`input-label ${this.disabled ? 'disabled' : ''}`}>{this.label}</label>\n )}\n <div\n class={`select-wrapper ${this.disabled ? 'disabled' : ''} ${this.isOpen ? 'open' : ''}`}\n >\n <div\n ref={el => (this.triggerRef = el)}\n class={`input-element select-trigger ${this.error ? 'input-error' : ''} ${!hasValue ? 'placeholder' : ''} ${this.variant === 'underlined' ? 'underlined' : ''}`}\n style={{ backgroundColor: this.backgroundColor }}\n onClick={this.toggleDropdown}\n tabIndex={this.disabled ? -1 : 0}\n role=\"combobox\"\n aria-expanded={this.isOpen.toString()}\n aria-haspopup=\"listbox\"\n aria-labelledby={this.label ? `${this.id}-label` : undefined}\n >\n <span\n class=\"select-value\"\n style={{ fontSize: this.fontSize }}\n innerHTML={selectedLabel}\n ></span>\n <div class=\"icon-wrapper\">\n {this.loading ? (\n <div class=\"spinner\"></div>\n ) : (\n <rebill-icon\n name={this.getArrowIcon()}\n size=\"20px\"\n class={`select-icon ${this.isOpen && this.arrowIcon === 'down' ? 'rotated' : ''}`}\n />\n )}\n </div>\n </div>\n\n {this.isOpen && (\n <div\n ref={el => (this.dropdownRef = el)}\n class={`select-dropPosition ${this.dropPosition === 'up' ? 'open-up' : 'open-down'}`}\n role=\"listbox\"\n >\n {this.searchable && (\n <div class=\"search-container\" onClick={this.handleSearchClick}>\n <div class=\"search-input-wrapper\">\n <rebill-icon name=\"search\" size=\"16px\" class=\"search-icon\" />\n <input\n ref={el => (this.searchInputRef = el)}\n type=\"text\"\n class=\"search-input\"\n placeholder={this.searchPlaceholder}\n value={this.searchTerm}\n onInput={this.handleSearchInput}\n onClick={this.handleSearchClick}\n style={{ fontSize: this.fontSize }}\n />\n {this.searchTerm && (\n <button\n type=\"button\"\n class=\"clear-search\"\n onClick={event => {\n event.stopPropagation();\n this.clearSearch();\n }}\n aria-label=\"Clear search\"\n >\n <rebill-icon name=\"x\" size=\"16px\" />\n </button>\n )}\n </div>\n </div>\n )}\n {this.loading && this.filteredOptions.length === 0 ? (\n <div class=\"loading-message\" style={{ fontSize: this.fontSize }}>\n <div class=\"spinner\"></div>\n {I18nService.translate('common.loadingOptions')}\n </div>\n ) : this.filteredOptions.length > 0 ? (\n this.filteredOptions.map((option, index) => (\n <div\n class={`select-option ${this.value === option.value ? 'selected' : ''} ${this.highlightedIndex === index ? 'highlighted' : ''}`}\n style={{ fontSize: this.fontSize }}\n onClick={() => this.selectOption(option)}\n role=\"option\"\n aria-selected={this.value === option.value ? 'true' : 'false'}\n >\n <span innerHTML={option.label}></span>\n </div>\n ))\n ) : (\n <div class=\"no-results\" style={{ fontSize: this.fontSize }}>\n No se encontraron resultados\n </div>\n )}\n </div>\n )}\n </div>\n {this.error && <span class=\"error-message\">{this.error}</span>}\n </div>\n );\n }\n}\n"],"version":3}