@odus/checkout 0.6.2 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1,10 @@
1
- const I = (o) => o === "test" ? "https://sandbox-api.odus.com" : o === "live" ? "https://api.odus.com" : "http://localhost:3000";
2
- class H {
1
+ const N = (n) => n === "test" ? "https://sandbox-api.odus.com" : n === "live" ? "https://api.odus.com" : "http://localhost:3000";
2
+ class O {
3
3
  apiKey;
4
4
  baseUrl;
5
5
  browserInfo;
6
6
  constructor(e, t, i) {
7
- this.apiKey = e, this.baseUrl = I(t), this.browserInfo = i || { userAgent: navigator.userAgent };
7
+ this.apiKey = e, this.baseUrl = N(t), this.browserInfo = i || { userAgent: navigator.userAgent };
8
8
  }
9
9
  async fetchApi({
10
10
  endpoint: e,
@@ -24,17 +24,17 @@ class H {
24
24
  body: i ? JSON.stringify(i) : void 0
25
25
  });
26
26
  if (!s.ok) {
27
- let n;
27
+ let o;
28
28
  try {
29
- n = await s.json();
29
+ o = await s.json();
30
30
  } catch (c) {
31
31
  console.log("error", c);
32
32
  }
33
33
  throw {
34
- message: n?.message[0] || `API request failed: ${s.status} ${s.statusText}`,
34
+ message: o?.message[0] || `API request failed: ${s.status} ${s.statusText}`,
35
35
  status: s.status,
36
36
  statusText: s.statusText,
37
- details: n
37
+ details: o
38
38
  };
39
39
  }
40
40
  return s.json();
@@ -57,7 +57,7 @@ class H {
57
57
  }) {
58
58
  let s = {};
59
59
  if (a && i) {
60
- const n = i.cardExpiry.replace(/\s+/g, "").split("/"), l = n[0], c = n[1];
60
+ const o = i.cardExpiry.replace(/\s+/g, "").split("/"), l = o[0], c = o[1];
61
61
  s = {
62
62
  paymentMethodData: {
63
63
  type: "card",
@@ -96,12 +96,12 @@ class H {
96
96
  });
97
97
  }
98
98
  }
99
- const K = async ({
100
- id: o,
99
+ const q = async ({
100
+ id: n,
101
101
  apiKey: e,
102
102
  environment: t
103
103
  }) => {
104
- const i = I(t), a = await fetch(`${i}/checkout-profiles/${o}`, {
104
+ const i = N(t), a = await fetch(`${i}/checkout-profiles/${n}`, {
105
105
  method: "GET",
106
106
  headers: {
107
107
  "Content-Type": "application/json",
@@ -112,7 +112,7 @@ const K = async ({
112
112
  throw new Error(`HTTP error! Status: ${a.status}`);
113
113
  return await a.json();
114
114
  };
115
- class j {
115
+ class K {
116
116
  events = /* @__PURE__ */ new Map();
117
117
  /**
118
118
  * Subscribe to an event
@@ -150,13 +150,13 @@ class j {
150
150
  return this.events.get(e)?.size || 0;
151
151
  }
152
152
  }
153
- const U = new j();
154
- class q {
153
+ const j = new K();
154
+ class U {
155
155
  state;
156
156
  initialState;
157
157
  eventBus;
158
158
  stateChangedEvent = "state-changed";
159
- constructor(e, t = U) {
159
+ constructor(e, t = j) {
160
160
  this.initialState = { ...e }, this.state = { ...e }, this.eventBus = t;
161
161
  }
162
162
  /**
@@ -196,11 +196,11 @@ class q {
196
196
  return this.state[e];
197
197
  }
198
198
  }
199
- function k(o) {
200
- return new q(o);
199
+ function k(n) {
200
+ return new U(n);
201
201
  }
202
202
  function _({
203
- apiKey: o,
203
+ apiKey: n,
204
204
  profileId: e,
205
205
  environment: t
206
206
  }) {
@@ -211,8 +211,8 @@ function _({
211
211
  }), a = async () => {
212
212
  try {
213
213
  i.setState({ isLoading: !0 });
214
- const r = await K({
215
- apiKey: o,
214
+ const r = await q({
215
+ apiKey: n,
216
216
  id: e,
217
217
  environment: t
218
218
  });
@@ -234,13 +234,13 @@ function _({
234
234
  reload: a
235
235
  };
236
236
  }
237
- const N = {
238
- cardNumber: (o) => (o.replace(/\s/g, "").match(/.{1,4}/g) || []).join(" "),
239
- cardExpiry: (o) => {
240
- const t = o.replace(/\D/g, "").slice(0, 4);
237
+ const z = {
238
+ cardNumber: (n) => (n.replace(/\s/g, "").match(/.{1,4}/g) || []).join(" "),
239
+ cardExpiry: (n) => {
240
+ const t = n.replace(/\D/g, "").slice(0, 4);
241
241
  return t.length > 2 ? `${t.slice(0, 2)} / ${t.slice(2, 4)}` : t;
242
242
  }
243
- }, $ = {
243
+ }, R = {
244
244
  "gmail.com": [
245
245
  "gmal.com",
246
246
  "gmil.com",
@@ -312,63 +312,63 @@ const N = {
312
312
  "comcast.net": ["comcast.com", "comcat.net", "comcst.net", "comcastnet", "comcast.nt", "comcas.net"],
313
313
  "verizon.net": ["verizon.com", "verizon.nt", "verizonnet", "verizn.net", "verizon.ne", "verzon.net"],
314
314
  "att.net": ["att.com", "at.net", "att.nt", "attnet", "att.ne", "attt.net"]
315
- }, G = (o) => {
316
- if (!o || o.includes("."))
315
+ }, G = (n) => {
316
+ if (!n || n.includes("."))
317
317
  return null;
318
318
  const e = ["com", "net", "org", "edu", "gov", "io", "co"];
319
319
  for (const t of e) {
320
- if (o === "companycok" && t === "co")
320
+ if (n === "companycok" && t === "co")
321
321
  return "company.co";
322
- if (o.endsWith(t) && !o.includes(".")) {
323
- const i = o.length - t.length;
324
- return `${o.substring(0, i)}.${t}`;
322
+ if (n.endsWith(t) && !n.includes(".")) {
323
+ const i = n.length - t.length;
324
+ return `${n.substring(0, i)}.${t}`;
325
325
  }
326
326
  }
327
327
  return null;
328
- }, Y = (o, e) => {
329
- if (o.length === 0) return e.length;
330
- if (e.length === 0) return o.length;
331
- const t = e.length + 1, i = o.length + 1, a = Array.from(
328
+ }, Y = (n, e) => {
329
+ if (n.length === 0) return e.length;
330
+ if (e.length === 0) return n.length;
331
+ const t = e.length + 1, i = n.length + 1, a = Array.from(
332
332
  { length: t },
333
- (r, s) => Array.from({ length: i }, (n, l) => s === 0 ? l : l === 0 ? s : 0)
333
+ (r, s) => Array.from({ length: i }, (o, l) => s === 0 ? l : l === 0 ? s : 0)
334
334
  );
335
335
  for (let r = 1; r < t; r++)
336
336
  for (let s = 1; s < i; s++) {
337
- const n = o[s - 1] === e[r - 1] ? 0 : 1;
337
+ const o = n[s - 1] === e[r - 1] ? 0 : 1;
338
338
  a[r][s] = Math.min(
339
339
  a[r - 1][s] + 1,
340
340
  // deletion
341
341
  a[r][s - 1] + 1,
342
342
  // insertion
343
- a[r - 1][s - 1] + n
343
+ a[r - 1][s - 1] + o
344
344
  // substitution
345
345
  );
346
346
  }
347
- return a[e.length][o.length];
348
- }, Z = (o) => {
347
+ return a[e.length][n.length];
348
+ }, Z = (n) => {
349
349
  let t = null, i = 3;
350
- const a = o.toLowerCase();
351
- for (const r of Object.keys($)) {
350
+ const a = n.toLowerCase();
351
+ for (const r of Object.keys(R)) {
352
352
  const s = Y(a, r);
353
353
  s <= 2 && s < i && (i = s, t = r);
354
354
  }
355
355
  return t;
356
356
  }, J = () => {
357
- const { t: o } = z();
357
+ const { t: n } = P();
358
358
  return {
359
359
  validateEmail: (t) => {
360
360
  const i = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
361
361
  if (!t)
362
362
  return {
363
363
  isValid: !1,
364
- message: o("validation.emailInvalid"),
364
+ message: n("validation.emailInvalid"),
365
365
  suggestion: null
366
366
  };
367
367
  const a = t.indexOf("@");
368
368
  if (a === -1)
369
369
  return {
370
370
  isValid: !1,
371
- message: o("validation.emailInvalid"),
371
+ message: n("validation.emailInvalid"),
372
372
  suggestion: null
373
373
  };
374
374
  const r = t.substring(0, a), s = t.substring(a + 1);
@@ -377,16 +377,16 @@ const N = {
377
377
  if (l)
378
378
  return {
379
379
  isValid: !1,
380
- message: o("validation.emailSuggestion", {
380
+ message: n("validation.emailSuggestion", {
381
381
  email: `${r}@${l}`
382
382
  }),
383
383
  suggestion: `${r}@${l}`
384
384
  };
385
- for (const c of Object.keys($))
385
+ for (const c of Object.keys(R))
386
386
  if (c.replace(/\./g, "") === s)
387
387
  return {
388
388
  isValid: !1,
389
- message: o("validation.emailSuggestion", {
389
+ message: n("validation.emailSuggestion", {
390
390
  email: `${r}@${c}`
391
391
  }),
392
392
  suggestion: `${r}@${c}`
@@ -395,15 +395,15 @@ const N = {
395
395
  if (!i.test(t))
396
396
  return {
397
397
  isValid: !1,
398
- message: o("validation.emailInvalid"),
398
+ message: n("validation.emailInvalid"),
399
399
  suggestion: null
400
400
  };
401
- const n = Z(s);
402
- if (n && n !== s) {
403
- const l = `${r}@${n}`;
401
+ const o = Z(s);
402
+ if (o && o !== s) {
403
+ const l = `${r}@${o}`;
404
404
  return {
405
405
  isValid: !1,
406
- message: o("validation.emailSuggestion", { email: l }),
406
+ message: n("validation.emailSuggestion", { email: l }),
407
407
  suggestion: l
408
408
  };
409
409
  }
@@ -415,7 +415,7 @@ const N = {
415
415
  }
416
416
  };
417
417
  }, W = () => {
418
- const { t: o } = z(), { validateEmail: e } = J();
418
+ const { t: n } = P(), { validateEmail: e } = J();
419
419
  return {
420
420
  email: (t) => {
421
421
  const i = e(t);
@@ -423,21 +423,21 @@ const N = {
423
423
  },
424
424
  name: (t) => {
425
425
  if (!t.trim())
426
- return o("validation.nameRequired");
426
+ return n("validation.nameRequired");
427
427
  },
428
428
  cardExpiry: (t) => {
429
429
  const i = t.replace(/\s/g, ""), [a, r] = i.split("/").map((u) => u.trim());
430
430
  if (!a || !r || a.length !== 2 || r.length !== 2)
431
- return o("validation.cardExpiryFormat");
432
- const s = /* @__PURE__ */ new Date(), n = s.getFullYear() % 100, l = s.getMonth() + 1, c = parseInt(a, 10), d = parseInt(r, 10);
431
+ return n("validation.cardExpiryFormat");
432
+ const s = /* @__PURE__ */ new Date(), o = s.getFullYear() % 100, l = s.getMonth() + 1, c = parseInt(a, 10), d = parseInt(r, 10);
433
433
  if (c < 1 || c > 12)
434
- return o("validation.cardExpiryFormat");
435
- if (d < n || d === n && c < l)
436
- return o("validation.cardExpiryInvalid");
434
+ return n("validation.cardExpiryFormat");
435
+ if (d < o || d === o && c < l)
436
+ return n("validation.cardExpiryInvalid");
437
437
  }
438
438
  };
439
439
  }, X = () => {
440
- const o = W(), e = k({
440
+ const n = W(), e = k({
441
441
  formData: {
442
442
  name: "",
443
443
  email: "",
@@ -451,7 +451,7 @@ const N = {
451
451
  },
452
452
  isValid: !1
453
453
  }), t = (l, c) => {
454
- const d = o[l];
454
+ const d = n[l];
455
455
  return d?.(c);
456
456
  }, i = (l) => {
457
457
  const c = {};
@@ -465,30 +465,30 @@ const N = {
465
465
  }, r = (l, c) => {
466
466
  const d = e.getState();
467
467
  let u = c;
468
- l in N && (u = N[l](c));
469
- const p = {
468
+ l in z && (u = z[l](c));
469
+ const f = {
470
470
  ...d.formData,
471
471
  [l]: u
472
472
  }, g = { ...d.errors };
473
473
  if (d.touched[l]) {
474
- const m = t(l, u);
475
- m ? g[l] = m : delete g[l];
474
+ const x = t(l, u);
475
+ x ? g[l] = x : delete g[l];
476
476
  }
477
477
  e.setState({
478
- formData: p,
478
+ formData: f,
479
479
  errors: g,
480
- isValid: a(p)
480
+ isValid: a(f)
481
481
  });
482
482
  }, s = (l, c) => {
483
483
  const d = e.getState(), u = {
484
484
  ...d.touched,
485
485
  [l]: !0
486
- }, p = t(l, c), g = { ...d.errors };
487
- p ? g[l] = p : delete g[l], e.setState({
486
+ }, f = t(l, c), g = { ...d.errors };
487
+ f ? g[l] = f : delete g[l], e.setState({
488
488
  touched: u,
489
489
  errors: g
490
490
  });
491
- }, n = (l) => {
491
+ }, o = (l) => {
492
492
  const d = {
493
493
  ...e.getState().formData,
494
494
  ...l
@@ -503,28 +503,28 @@ const N = {
503
503
  subscribe: e.subscribe.bind(e),
504
504
  handleChange: r,
505
505
  handleBlur: s,
506
- setFormData: n,
506
+ setFormData: o,
507
507
  reset: e.resetState.bind(e)
508
508
  };
509
509
  }, Q = async ({
510
- props: o,
510
+ props: n,
511
511
  apiKey: e,
512
512
  environment: t
513
513
  }) => {
514
- const i = I(t), a = await fetch(`${i}/checkout/init`, {
514
+ const i = N(t), a = await fetch(`${i}/checkout/init`, {
515
515
  method: "POST",
516
516
  headers: {
517
517
  "Content-Type": "application/json",
518
518
  Authorization: `Bearer ${e}`
519
519
  },
520
- body: JSON.stringify(o)
520
+ body: JSON.stringify(n)
521
521
  });
522
522
  if (!a.ok)
523
523
  throw new Error(`HTTP error! Status: ${a.status}`);
524
524
  return await a.json();
525
525
  };
526
526
  function ee({
527
- apiKey: o,
527
+ apiKey: n,
528
528
  checkoutProfile: e,
529
529
  inputStyles: t,
530
530
  setFormData: i,
@@ -540,18 +540,17 @@ function ee({
540
540
  isCvvFocused: !1,
541
541
  possibleCardType: "unknown"
542
542
  });
543
- let n = null;
543
+ let o = null;
544
544
  const l = async () => {
545
545
  try {
546
- console.log("[IframeConfig] Generating iframe configuration...");
547
546
  const m = await Q({
548
547
  props: {
549
548
  payment: r
550
549
  },
551
- apiKey: o,
550
+ apiKey: n,
552
551
  environment: a
553
552
  });
554
- m && (console.log("[IframeConfig] Iframe config generated successfully."), s.setState({
553
+ m && (s.setState({
555
554
  iframeConfig: {
556
555
  ...m,
557
556
  origin: globalThis.location.origin
@@ -562,16 +561,16 @@ function ee({
562
561
  }
563
562
  }, c = () => {
564
563
  const m = s.getState();
565
- if (console.log("[IframeConfig] createTokenExIframe started."), !m.iframeConfig || !e) {
564
+ if (!m.iframeConfig || !e) {
566
565
  console.error(
567
566
  "[IframeConfig] Missing iframe config or checkout profile."
568
567
  );
569
568
  return;
570
569
  }
571
- const b = document.getElementById("card-element"), S = document.getElementById("card-cvv-element");
572
- if (!b || !S)
570
+ const C = document.getElementById("card-element"), w = document.getElementById("card-cvv-element");
571
+ if (!C || !w)
573
572
  throw new Error("Card elements not found in DOM");
574
- console.log("[IframeConfig] Creating TokenEx.Iframe instance."), n = new globalThis.TokenEx.Iframe("card-element", {
573
+ o = new globalThis.TokenEx.Iframe("card-element", {
575
574
  ...m.iframeConfig,
576
575
  placeholder: "1234 1234 1234 1234",
577
576
  cvvPlaceholder: "CVC",
@@ -595,39 +594,36 @@ function ee({
595
594
  base: `${t.base}; border-radius: 0px 0px ${e.styles.borderRadius}px 0px`
596
595
  }
597
596
  }
598
- }), n.on("load", () => {
599
- console.log("[IframeConfig] Iframe loaded event received."), s.setState({ loadingIframe: !1 });
600
- }), n.on("autoCompleteValues", function(x) {
601
- const { nameOnCard: C, cardExp: v } = x;
597
+ }), o.on("load", () => {
598
+ s.setState({ loadingIframe: !1 });
599
+ }), o.on("autoCompleteValues", function(y) {
600
+ const { nameOnCard: M, cardExp: b } = y;
602
601
  i({
603
- name: C,
604
- cardExpiry: v
602
+ name: M,
603
+ cardExpiry: b
605
604
  });
606
- }), n.on("validate", function(x) {
607
- const { isValid: C, isCvvValid: v } = x;
608
- console.log(
609
- `[IframeConfig] Validation event: isCardValid=${C}, isCvvValid=${v}`
610
- ), s.setState({
611
- isCcValid: C,
612
- isCvvValid: v
605
+ }), o.on("validate", function(y) {
606
+ const { isValid: M, isCvvValid: b } = y;
607
+ s.setState({
608
+ isCcValid: M,
609
+ isCvvValid: b
613
610
  });
614
- }), n.on("focus", function() {
611
+ }), o.on("focus", function() {
615
612
  s.setState({ isFocused: !0 });
616
- }), n.on("blur", function() {
613
+ }), o.on("blur", function() {
617
614
  s.setState({ isFocused: !1 });
618
- }), n.on("cvvFocus", function() {
615
+ }), o.on("cvvFocus", function() {
619
616
  s.setState({ isCvvFocused: !0 });
620
- }), n.on("cvvBlur", function() {
617
+ }), o.on("cvvBlur", function() {
621
618
  s.setState({ isCvvFocused: !1 });
622
- }), n.on(
619
+ }), o.on(
623
620
  "cardTypeChange",
624
- function({ possibleCardType: x }) {
625
- s.setState({ possibleCardType: x });
621
+ function({ possibleCardType: y }) {
622
+ s.setState({ possibleCardType: y });
626
623
  }
627
- ), n.load();
624
+ ), o.load();
628
625
  }, d = () => {
629
- const m = s.getState();
630
- if (console.log("[IframeConfig] initializeIframe started."), !m.iframeConfig || !e) {
626
+ if (!s.getState().iframeConfig || !e) {
631
627
  console.error(
632
628
  "[IframeConfig] Missing iframe config or checkout profile for initialization."
633
629
  );
@@ -638,25 +634,41 @@ function ee({
638
634
  return;
639
635
  }
640
636
  try {
641
- console.log("[IframeConfig] Creating TokenEx iframe..."), c(), console.log("[IframeConfig] TokenEx iframe created successfully");
642
- } catch (b) {
643
- console.error("Failed to create TokenEx iframe:", b);
637
+ c();
638
+ } catch (C) {
639
+ console.error("Failed to create TokenEx iframe:", C);
644
640
  }
645
641
  }, u = async () => {
646
- o && (console.log("[IframeConfig] Manual initialization triggered."), await l());
647
- }, p = () => {
648
- n && (n.remove(), n = null);
642
+ n && await l();
643
+ }, f = () => {
644
+ o && (o.remove(), o = null);
649
645
  }, g = async (m) => {
650
- n && (n.on("tokenize", async function(b) {
651
- await m(b);
652
- }), n.tokenize());
646
+ o && (o.on("tokenize", async function(C) {
647
+ await m(C);
648
+ }), o.tokenize());
649
+ }, x = () => {
650
+ if (o)
651
+ try {
652
+ o.focus();
653
+ } catch (m) {
654
+ console.error("Failed to focus card number iframe:", m);
655
+ }
656
+ }, I = () => {
657
+ if (o)
658
+ try {
659
+ o.cvvFocus();
660
+ } catch (m) {
661
+ console.error("Failed to focus CVV iframe:", m);
662
+ }
653
663
  };
654
664
  return {
655
665
  getState: s.getState.bind(s),
656
666
  subscribe: s.subscribe.bind(s),
657
667
  tokenize: g,
658
- cleanup: p,
659
- initialize: u
668
+ cleanup: f,
669
+ initialize: u,
670
+ focusCardNumber: x,
671
+ focusCvv: I
660
672
  };
661
673
  }
662
674
  const te = "E-Mail", ie = "Name des/der Karteninhaber/in", ae = "Kartendaten", re = "Vollständiger Name", se = "MM / JJ", oe = "Das Fenster nicht schließen", ne = { pay: "ZAHLEN", submit: "ABSENDEN", getPlan: "MEINEN PLAN ERHALTEN", donate: "spenden", book: "jetzt buchen", order: "jetzt bestellen" }, le = { emailSuggestion: "Meinten Sie {{email}}?", emailInvalid: "Ihre E-Mail-Adresse ist nicht korrekt", cardExpiryInvalid: "Das Ablaufdatum Ihrer Karte liegt in der Vergangenheit", cardExpiryFormat: "Das Ablaufdatum Ihrer Karte ist unvollständig", cardSecurityFormat: "Der Sicherheitscode Ihrer Karte ist unvollständig", nameRequired: "Gib deinen Namen genau so ein, wie er auf deiner Karte steht", cardNumberInvalid: "Die Kartennummer ist unvollständig" }, ce = {
@@ -668,42 +680,42 @@ const te = "E-Mail", ie = "Name des/der Karteninhaber/in", ae = "Kartendaten", r
668
680
  loading: oe,
669
681
  buttonTexts: ne,
670
682
  validation: le
671
- }, de = "Email", he = "Cardholder name", me = "Card information", ue = "Full name on card", pe = "MM / YY", ge = "Do not close the window", fe = { pay: "PAY", submit: "SUBMIT", getPlan: "GET MY PLAN", donate: "DONATE", book: "BOOK NOW", order: "ORDER NOW" }, ye = { emailSuggestion: "Did you mean {{email}}?", emailInvalid: "Your email is not correct", cardExpiryInvalid: "Your card's expiration date is in the past", cardExpiryFormat: "Your card’s expiration date is incomplete", cardSecurityFormat: "Your card’s security code is incomplete", nameRequired: "Please enter the name as it appears on your card", cardNumberInvalid: "Your card number is invalid" }, ve = {
683
+ }, de = "Email", he = "Cardholder name", me = "Card information", ue = "Full name on card", pe = "MM / YY", fe = "Do not close the window", ge = { pay: "PAY", submit: "SUBMIT", getPlan: "GET MY PLAN", donate: "DONATE", book: "BOOK NOW", order: "ORDER NOW" }, ye = { emailSuggestion: "Did you mean {{email}}?", emailInvalid: "Your email is not correct", cardExpiryInvalid: "Your card's expiration date is in the past", cardExpiryFormat: "Your card’s expiration date is incomplete", cardSecurityFormat: "Your card’s security code is incomplete", nameRequired: "Please enter the name as it appears on your card", cardNumberInvalid: "Your card number is invalid" }, ve = {
672
684
  email: de,
673
685
  cardholderNameLabel: he,
674
686
  cardInformation: me,
675
687
  cardholderNamePlaceholder: ue,
676
688
  cardExpiry: pe,
677
- loading: ge,
678
- buttonTexts: fe,
689
+ loading: fe,
690
+ buttonTexts: ge,
679
691
  validation: ye
680
- }, Ee = "Correo electrónico", Ce = "Nombre del titular de la tarjeta", be = "Información de la tarjeta", xe = "Nombre completo en la tarjeta", Se = "MM / AA", Fe = "Por favor, no cierre esta ventana", we = { pay: "PAGAR", submit: "ENVIAR", getPlan: "OBTENER MI PLAN", donate: "DONAR", book: "RESERVAR AHORA", order: "ORDENAR AHORA" }, Le = { emailSuggestion: "¿Quisiste decir {{email}}?", emailInvalid: "Su correo electrónico no es válido", cardExpiryInvalid: "La fecha de vencimiento de la tarjeta ya pasó", cardExpiryFormat: "La fecha de vencimiento de su tarjeta está incompleta", cardSecurityFormat: "El código de seguridad de su tarjeta está incompleto", nameRequired: "Por favor, ingrese el nombre tal como aparece en su tarjeta", cardNumberInvalid: "Su número de tarjeta no es válido" }, Me = {
692
+ }, Ee = "Correo electrónico", Ce = "Nombre del titular de la tarjeta", be = "Información de la tarjeta", Se = "Nombre completo en la tarjeta", xe = "MM / AA", Fe = "Por favor, no cierre esta ventana", we = { pay: "PAGAR", submit: "ENVIAR", getPlan: "OBTENER MI PLAN", donate: "DONAR", book: "RESERVAR AHORA", order: "ORDENAR AHORA" }, Me = { emailSuggestion: "¿Quisiste decir {{email}}?", emailInvalid: "Su correo electrónico no es válido", cardExpiryInvalid: "La fecha de vencimiento de la tarjeta ya pasó", cardExpiryFormat: "La fecha de vencimiento de su tarjeta está incompleta", cardSecurityFormat: "El código de seguridad de su tarjeta está incompleto", nameRequired: "Por favor, ingrese el nombre tal como aparece en su tarjeta", cardNumberInvalid: "Su número de tarjeta no es válido" }, Le = {
681
693
  email: Ee,
682
694
  cardholderNameLabel: Ce,
683
695
  cardInformation: be,
684
- cardholderNamePlaceholder: xe,
685
- cardExpiry: Se,
696
+ cardholderNamePlaceholder: Se,
697
+ cardExpiry: xe,
686
698
  loading: Fe,
687
699
  buttonTexts: we,
688
- validation: Le
689
- }, ke = "E-mail", Te = "Nom du titulaire de la carte", Ie = "Informations de la carte", ze = "Nom complet figurant sur la carte", Pe = "MM / AA", Ne = "Veuillez ne pas fermer cette fenêtre", Ae = { pay: "PAYER", submit: "ENVOYER", getPlan: "OBTENIR MON PLAN", donate: "FAIRE UN DON", book: "RÉSERVER MAINTENANT", order: "COMMANDER MAINTENANT" }, De = { emailSuggestion: "Vouliez-vous dire {{email}}?", emailInvalid: "Votre adresse e-mail n’est pas valide", cardExpiryInvalid: "La date d'expiration de votre carte est dans le passé", cardExpiryFormat: "La date d’expiration de votre carte est incomplète", cardSecurityFormat: "Le code de sécurité de votre carte est incomplet", nameRequired: "Veuillez saisir le nom tel qu’il figure sur votre carte", cardNumberInvalid: "Votre numéro de carte est invalide" }, Ve = {
690
- email: ke,
691
- cardholderNameLabel: Te,
700
+ validation: Me
701
+ }, Te = "E-mail", ke = "Nom du titulaire de la carte", Ie = "Informations de la carte", Ne = "Nom complet figurant sur la carte", Pe = "MM / AA", Ve = "Veuillez ne pas fermer cette fenêtre", ze = { pay: "PAYER", submit: "ENVOYER", getPlan: "OBTENIR MON PLAN", donate: "FAIRE UN DON", book: "RÉSERVER MAINTENANT", order: "COMMANDER MAINTENANT" }, Ae = { emailSuggestion: "Vouliez-vous dire {{email}}?", emailInvalid: "Votre adresse e-mail n’est pas valide", cardExpiryInvalid: "La date d'expiration de votre carte est dans le passé", cardExpiryFormat: "La date d’expiration de votre carte est incomplète", cardSecurityFormat: "Le code de sécurité de votre carte est incomplet", nameRequired: "Veuillez saisir le nom tel qu’il figure sur votre carte", cardNumberInvalid: "Votre numéro de carte est invalide" }, De = {
702
+ email: Te,
703
+ cardholderNameLabel: ke,
692
704
  cardInformation: Ie,
693
- cardholderNamePlaceholder: ze,
705
+ cardholderNamePlaceholder: Ne,
694
706
  cardExpiry: Pe,
695
- loading: Ne,
696
- buttonTexts: Ae,
697
- validation: De
698
- }, $e = "Email", Re = "Nome del titolare della carta", Be = "Informazioni sulla carta", Oe = "Nome completo sulla carta", He = "MM / AA", Ke = "Non chiudere la finestra", je = { pay: "PAGA", submit: "INVIA", getPlan: "OTTIENI IL MIO PIANO", donate: "DONARE", book: "PRENOTA ORA", order: "ORDINA ORA" }, Ue = { emailSuggestion: "Intendevi {{email}}?", emailInvalid: "La tua email non è corretta", cardExpiryInvalid: "La data di scadenza della tua carta è nel passato", cardExpiryFormat: "La data di scadenza della tua carta è incompleta", cardSecurityFormat: "Il codice di sicurezza della tua carta è incompleto", nameRequired: "Inserisci il nome come appare sulla tua carta", cardNumberInvalid: "Il numero della tua carta non è valido" }, qe = {
707
+ loading: Ve,
708
+ buttonTexts: ze,
709
+ validation: Ae
710
+ }, $e = "Email", Re = "Nome del titolare della carta", Be = "Informazioni sulla carta", He = "Nome completo sulla carta", Oe = "MM / AA", qe = "Non chiudere la finestra", Ke = { pay: "PAGA", submit: "INVIA", getPlan: "OTTIENI IL MIO PIANO", donate: "DONARE", book: "PRENOTA ORA", order: "ORDINA ORA" }, je = { emailSuggestion: "Intendevi {{email}}?", emailInvalid: "La tua email non è corretta", cardExpiryInvalid: "La data di scadenza della tua carta è nel passato", cardExpiryFormat: "La data di scadenza della tua carta è incompleta", cardSecurityFormat: "Il codice di sicurezza della tua carta è incompleto", nameRequired: "Inserisci il nome come appare sulla tua carta", cardNumberInvalid: "Il numero della tua carta non è valido" }, Ue = {
699
711
  email: $e,
700
712
  cardholderNameLabel: Re,
701
713
  cardInformation: Be,
702
- cardholderNamePlaceholder: Oe,
703
- cardExpiry: He,
704
- loading: Ke,
705
- buttonTexts: je,
706
- validation: Ue
714
+ cardholderNamePlaceholder: He,
715
+ cardExpiry: Oe,
716
+ loading: qe,
717
+ buttonTexts: Ke,
718
+ validation: je
707
719
  }, _e = "Adres e-mail", Ge = "Imię i nazwisko posiadacza karty", Ye = "Informacje o karcie", Ze = "Imię i nazwisko na karcie", Je = "MM / RR", We = "Proszę nie zamykać tego okna", Xe = { pay: "ZAPŁAĆ", submit: "WYŚLIJ", getPlan: "POBIERZ MÓJ PLAN", donate: "PRZEKAŻ DAROWIZNĘ", book: "ZAREZERWUJ TERAZ", order: "ZAMÓW TERAZ" }, Qe = { emailSuggestion: "Czy chodziło Ci o {{email}}?", emailInvalid: "Państwa adres e-mail jest nieprawidłowy", cardExpiryInvalid: "Data ważności Państwa karty jest w przeszłości", cardExpiryFormat: "Data ważności Państwa karty jest niekompletna", cardSecurityFormat: "Kod zabezpieczający Państwa karty jest niekompletny", nameRequired: "Proszę wpisać imię i nazwisko tak, jak widnieje na karcie", cardNumberInvalid: "Numer Państwa karty jest nieprawidłowy" }, et = {
708
720
  email: _e,
709
721
  cardholderNameLabel: Ge,
@@ -722,24 +734,24 @@ const te = "E-Mail", ie = "Name des/der Karteninhaber/in", ae = "Kartendaten", r
722
734
  loading: ot,
723
735
  buttonTexts: nt,
724
736
  validation: lt
725
- }, dt = "E-posta", ht = "Kart sahibinin adı", mt = "Kart bilgileri", ut = "Kart üzerindeki tam ad", pt = "AA / YY", gt = "Lütfen pencereyi kapatmayın", ft = { pay: "ÖDE", submit: "GÖNDER", getPlan: "PLANIMI AL", donate: "BAĞIŞ YAP", book: "ŞİMDİ REZERVASYON YAP", order: "ŞİMDİ SİPARİŞ VER" }, yt = { emailSuggestion: "{{email}} demek mi istediniz?", emailInvalid: "E-posta adresiniz geçerli değil", cardExpiryInvalid: "Kartınızın son kullanma tarihi geçmiş", cardExpiryFormat: "Kartınızın son kullanma tarihi eksik", cardSecurityFormat: "Kartınızın güvenlik kodu eksik", nameRequired: "Lütfen kart üzerindeki ismi girin", cardNumberInvalid: "Kart numaranız geçersiz" }, vt = {
737
+ }, dt = "E-posta", ht = "Kart sahibinin adı", mt = "Kart bilgileri", ut = "Kart üzerindeki tam ad", pt = "AA / YY", ft = "Lütfen pencereyi kapatmayın", gt = { pay: "ÖDE", submit: "GÖNDER", getPlan: "PLANIMI AL", donate: "BAĞIŞ YAP", book: "ŞİMDİ REZERVASYON YAP", order: "ŞİMDİ SİPARİŞ VER" }, yt = { emailSuggestion: "{{email}} demek mi istediniz?", emailInvalid: "E-posta adresiniz geçerli değil", cardExpiryInvalid: "Kartınızın son kullanma tarihi geçmiş", cardExpiryFormat: "Kartınızın son kullanma tarihi eksik", cardSecurityFormat: "Kartınızın güvenlik kodu eksik", nameRequired: "Lütfen kart üzerindeki ismi girin", cardNumberInvalid: "Kart numaranız geçersiz" }, vt = {
726
738
  email: dt,
727
739
  cardholderNameLabel: ht,
728
740
  cardInformation: mt,
729
741
  cardholderNamePlaceholder: ut,
730
742
  cardExpiry: pt,
731
- loading: gt,
732
- buttonTexts: ft,
743
+ loading: ft,
744
+ buttonTexts: gt,
733
745
  validation: yt
734
746
  }, A = {
735
747
  en: ve,
736
748
  de: ce,
737
- es: Me,
738
- fr: Ve,
749
+ es: Le,
750
+ fr: De,
739
751
  pl: et,
740
752
  pt: ct,
741
753
  tr: vt,
742
- it: qe
754
+ it: Ue
743
755
  // Add other locales here
744
756
  };
745
757
  class Et {
@@ -790,10 +802,10 @@ const D = [
790
802
  "it",
791
803
  "tr"
792
804
  ], Ct = "en";
793
- function bt(o) {
805
+ function bt(n) {
794
806
  const e = new Et(), i = (() => {
795
- const n = navigator?.language?.split("-")[0]?.toLowerCase();
796
- return D.includes(n) ? n : Ct;
807
+ const o = navigator?.language?.split("-")[0]?.toLowerCase();
808
+ return D.includes(o) ? o : Ct;
797
809
  })();
798
810
  e.setLocale(i);
799
811
  const a = k({
@@ -802,58 +814,58 @@ function bt(o) {
802
814
  });
803
815
  return {
804
816
  store: a,
805
- translate: (n, l) => a.getState().translationService.translate(n, l),
806
- setLocale: (n) => {
807
- D.includes(n) && (a.getState().translationService.setLocale(n), a.setState({ locale: n }));
817
+ translate: (o, l) => a.getState().translationService.translate(o, l),
818
+ setLocale: (o) => {
819
+ D.includes(o) && (a.getState().translationService.setLocale(o), a.setState({ locale: o }));
808
820
  },
809
821
  getLocale: () => a.getValue("locale"),
810
822
  subscribe: a.subscribe.bind(a)
811
823
  };
812
824
  }
813
- const xt = bt(), z = () => {
814
- const { translate: o, getLocale: e, setLocale: t, subscribe: i } = xt;
825
+ const St = bt(), P = () => {
826
+ const { translate: n, getLocale: e, setLocale: t, subscribe: i } = St;
815
827
  return {
816
- t: o,
817
- translate: o,
828
+ t: n,
829
+ translate: n,
818
830
  locale: e(),
819
831
  setLocale: t,
820
832
  subscribe: i
821
833
  };
822
- }, St = ({ fontFamily: o }) => {
823
- if (!o)
834
+ }, xt = ({ fontFamily: n }) => {
835
+ if (!n)
824
836
  return { cleanup: () => {
825
837
  } };
826
- const e = o.replace(/\s+/g, "+"), t = `https://fonts.googleapis.com/css2?family=${e}:wght@400;700&display=swap`, i = [...document.head.querySelectorAll("link")].filter(
827
- (n) => n.href.includes("fonts.googleapis.com/css2") && n.rel === "stylesheet"
838
+ const e = n.replace(/\s+/g, "+"), t = `https://fonts.googleapis.com/css2?family=${e}:wght@400;700&display=swap`, i = [...document.head.querySelectorAll("link")].filter(
839
+ (o) => o.href.includes("fonts.googleapis.com/css2") && o.rel === "stylesheet"
828
840
  ), a = document.createElement("link");
829
841
  a.rel = "stylesheet", a.href = t;
830
842
  const r = i.find(
831
- (n) => n.href.includes(`family=${e}`)
843
+ (o) => o.href.includes(`family=${e}`)
832
844
  );
833
845
  if (r)
834
846
  r.href = t;
835
847
  else if (i.length > 0) {
836
- const n = i.at(
848
+ const o = i.at(
837
849
  -1
838
850
  );
839
- n?.nextSibling ? document.head.insertBefore(a, n.nextSibling) : document.head.appendChild(a);
851
+ o?.nextSibling ? document.head.insertBefore(a, o.nextSibling) : document.head.appendChild(a);
840
852
  } else
841
853
  document.head.appendChild(a);
842
854
  return { cleanup: () => {
843
855
  document.head.contains(a) && document.head.removeChild(a);
844
856
  } };
845
857
  }, Ft = ({
846
- scriptSrc: o,
858
+ scriptSrc: n,
847
859
  async: e = !0
848
860
  }) => {
849
- if (!o)
861
+ if (!n)
850
862
  return {
851
863
  cleanup: () => {
852
864
  },
853
865
  isLoaded: Promise.resolve(!1)
854
866
  };
855
867
  if ([...document.head.querySelectorAll("script")].filter(
856
- (s) => s.src === o
868
+ (s) => s.src === n
857
869
  ).length > 0)
858
870
  return {
859
871
  cleanup: () => {
@@ -861,10 +873,10 @@ const xt = bt(), z = () => {
861
873
  isLoaded: Promise.resolve(!0)
862
874
  };
863
875
  const i = document.createElement("script");
864
- i.src = o, i.async = e;
865
- const a = new Promise((s, n) => {
876
+ i.src = n, i.async = e;
877
+ const a = new Promise((s, o) => {
866
878
  i.onload = () => s(!0), i.onerror = () => {
867
- console.error(`Failed to load script: ${o}`), n(new Error(`Failed to load script: ${o}`));
879
+ console.error(`Failed to load script: ${n}`), o(new Error(`Failed to load script: ${n}`));
868
880
  };
869
881
  });
870
882
  return document.head.appendChild(i), {
@@ -873,12 +885,117 @@ const xt = bt(), z = () => {
873
885
  },
874
886
  isLoaded: a
875
887
  };
876
- }, M = (o) => Object.entries(o).map(([e, t]) => {
888
+ };
889
+ class wt {
890
+ // The sequence of fields to focus in order
891
+ focusSequence = [
892
+ "cardNumber",
893
+ "cardExpiry",
894
+ "cardCvv",
895
+ "name"
896
+ ];
897
+ // Track the current focus index
898
+ currentFocusIndex = 0;
899
+ // Map of field names to their focus functions
900
+ fields = {
901
+ email: null,
902
+ cardNumber: null,
903
+ cardExpiry: null,
904
+ cardCvv: null,
905
+ name: null
906
+ };
907
+ // Track the validation state of each field
908
+ fieldValidState = {
909
+ email: !1,
910
+ cardNumber: !1,
911
+ cardExpiry: !1,
912
+ cardCvv: !1,
913
+ name: !1
914
+ };
915
+ // Track if field was previously valid (to detect transitions)
916
+ previousFieldValidState = {
917
+ email: !1,
918
+ cardNumber: !1,
919
+ cardExpiry: !1,
920
+ cardCvv: !1,
921
+ name: !1
922
+ };
923
+ /**
924
+ * Register a field with the focus manager
925
+ */
926
+ registerField(e, t) {
927
+ this.fields[e] = t;
928
+ }
929
+ /**
930
+ * Handle field focus events
931
+ */
932
+ handleFieldFocus(e) {
933
+ const t = this.focusSequence.findIndex(
934
+ (i) => i === e
935
+ );
936
+ t >= 0 && (this.currentFocusIndex = t);
937
+ }
938
+ /**
939
+ * Update the validation state of fields based on form and iframe state
940
+ */
941
+ handleStateUpdate(e, t, i, a) {
942
+ Object.assign(this.previousFieldValidState, this.fieldValidState);
943
+ const r = !!e.email && !t.email && !!i.email;
944
+ this.fieldValidState.email = r;
945
+ const s = !!a.isCcValid;
946
+ this.fieldValidState.cardNumber = s;
947
+ const o = !!e.cardExpiry && !t.cardExpiry && !!i.cardExpiry;
948
+ this.fieldValidState.cardExpiry = o;
949
+ const l = !!a.isCvvValid;
950
+ this.fieldValidState.cardCvv = l;
951
+ const c = !!e.name && !t.name && !!i.name;
952
+ this.fieldValidState.name = c, this.checkForValidTransitions();
953
+ }
954
+ /**
955
+ * Check if any fields have transitioned from invalid to valid and progress focus if needed
956
+ */
957
+ checkForValidTransitions() {
958
+ const e = this.focusSequence[this.currentFocusIndex];
959
+ e && this.fieldValidState[e] && !this.previousFieldValidState[e] && this.focusNextField();
960
+ }
961
+ /**
962
+ * Focus the next field in sequence
963
+ */
964
+ focusNextField() {
965
+ this.currentFocusIndex = Math.min(
966
+ this.currentFocusIndex + 1,
967
+ this.focusSequence.length - 1
968
+ ), this.applyFocusToCurrentField();
969
+ }
970
+ /**
971
+ * Focus a specific field by its index in the sequence
972
+ */
973
+ focusFieldByIndex(e) {
974
+ e >= 0 && e < this.focusSequence.length && (this.currentFocusIndex = e, this.applyFocusToCurrentField());
975
+ }
976
+ /**
977
+ * Apply focus to the current field based on focus index
978
+ */
979
+ applyFocusToCurrentField() {
980
+ const e = this.focusSequence[this.currentFocusIndex], t = this.fields[e];
981
+ t && setTimeout(() => {
982
+ t.focus();
983
+ }, 0);
984
+ }
985
+ /**
986
+ * Focus the card number field (first field)
987
+ * Used for setting initial focus on page load
988
+ */
989
+ focusCardNumberField() {
990
+ this.currentFocusIndex = 0, this.applyFocusToCurrentField();
991
+ }
992
+ }
993
+ const T = (n) => Object.entries(n).map(([e, t]) => {
877
994
  const i = e.replace(/([A-Z])/g, "-$1").toLowerCase(), a = typeof t == "number" ? `${t}px` : t;
878
995
  return `${i}: ${a}`;
879
996
  }).join("; ");
880
- function wt(o) {
881
- if (!o)
997
+ function Mt(n) {
998
+ if (!n)
882
999
  return {
883
1000
  formContainerStyle: {},
884
1001
  baseStyles: {},
@@ -898,28 +1015,28 @@ function wt(o) {
898
1015
  display: "block",
899
1016
  border: "none",
900
1017
  outline: "none",
901
- fontSize: `${o.styles.fontSize}px`,
1018
+ fontSize: `${n.styles.fontSize}px`,
902
1019
  lineHeight: 30,
903
1020
  boxSizing: "border-box",
904
1021
  padding: "0px 12px",
905
1022
  height: 36,
906
1023
  width: "100%",
907
- fontFamily: `${o.styles.fontFamily}, sans-serif`
1024
+ fontFamily: `${n.styles.fontFamily}, sans-serif`
908
1025
  }, t = {
909
1026
  color: "#717173",
910
1027
  opacity: "0.3",
911
- fontFamily: `${o.styles.fontFamily}, sans-serif`
1028
+ fontFamily: `${n.styles.fontFamily}, sans-serif`
912
1029
  }, i = {
913
1030
  color: "#dc2727"
914
1031
  }, a = {
915
1032
  outline: "none"
916
1033
  }, r = {
917
- fontFamily: `${o.styles.fontFamily}, sans-serif`
1034
+ fontFamily: `${n.styles.fontFamily}, sans-serif`
918
1035
  }, s = {
919
- base: M(e),
920
- error: M(i),
921
- focus: M(a),
922
- placeholder: M(t)
1036
+ base: T(e),
1037
+ error: T(i),
1038
+ focus: T(a),
1039
+ placeholder: T(t)
923
1040
  };
924
1041
  return {
925
1042
  formContainerStyle: r,
@@ -1139,7 +1256,7 @@ class Lt extends h {
1139
1256
  return this.messageComponent.setText(e), this;
1140
1257
  }
1141
1258
  }
1142
- class V extends h {
1259
+ class $ extends h {
1143
1260
  titleElement;
1144
1261
  constructor(e = {}) {
1145
1262
  super("div", ["blur-bg"]);
@@ -1168,7 +1285,7 @@ class E extends h {
1168
1285
  return this.span && this.span.classList.add("form-helper-text-hidden"), this;
1169
1286
  }
1170
1287
  }
1171
- class Mt extends h {
1288
+ class Tt extends h {
1172
1289
  constructor(e) {
1173
1290
  super("label", ["input-label"], {
1174
1291
  for: e.id
@@ -1177,12 +1294,12 @@ class Mt extends h {
1177
1294
  t.style.fontFamily = "inherit", t.style.color = e.styles.color, t.style.fontSize = `${e.styles.fontSize}px`;
1178
1295
  }
1179
1296
  }
1180
- class P extends h {
1297
+ class V extends h {
1181
1298
  inputElement;
1182
1299
  helperText = null;
1183
1300
  constructor(e) {
1184
1301
  if (super("div", ["input-wrapper"]), e.label && e.styles) {
1185
- const i = new Mt({
1302
+ const i = new Tt({
1186
1303
  styles: {
1187
1304
  color: e.styles.color,
1188
1305
  fontSize: e.styles.fontSize
@@ -1223,6 +1340,12 @@ class P extends h {
1223
1340
  addEventListener(e, t, i) {
1224
1341
  return this.inputElement.getElement().addEventListener(e, t, i), this;
1225
1342
  }
1343
+ /**
1344
+ * Focus the input element
1345
+ */
1346
+ focus() {
1347
+ this.inputElement.getElement().focus();
1348
+ }
1226
1349
  }
1227
1350
  class kt {
1228
1351
  input;
@@ -1233,29 +1356,30 @@ class kt {
1233
1356
  onBlur: a,
1234
1357
  error: r,
1235
1358
  errorMsg: s,
1236
- checkoutProfile: n,
1359
+ checkoutProfile: o,
1237
1360
  translationFunc: l,
1238
1361
  autocomplete: c = "cc-name"
1239
1362
  } = e;
1240
- this.input = new P({
1363
+ this.input = new V({
1241
1364
  name: "name",
1242
1365
  label: l("cardholderNameLabel"),
1243
- error: r,
1366
+ // Always hide error initially - we'll show it only on blur if needed
1367
+ error: !1,
1244
1368
  errorMsg: s,
1245
1369
  styles: {
1246
- color: n.styles.textColor,
1247
- borderRadius: `${n.styles.borderRadius}px`,
1248
- fontSize: n.styles.fontSize,
1249
- fontFamily: n.styles.fontFamily
1370
+ color: o.styles.textColor,
1371
+ borderRadius: `${o.styles.borderRadius}px`,
1372
+ fontSize: o.styles.fontSize,
1373
+ fontFamily: o.styles.fontFamily
1250
1374
  },
1251
1375
  placeholder: l("cardholderNamePlaceholder"),
1252
1376
  value: t,
1253
1377
  autocomplete: c,
1254
1378
  onChange: (d) => {
1255
- this.trim(), i(d);
1379
+ this.input.setError(!1), this.trim(), i(d);
1256
1380
  }
1257
1381
  }), this.input.addEventListener("blur", (d) => {
1258
- a(d);
1382
+ r && this.input.setError(r, s), a(d);
1259
1383
  });
1260
1384
  }
1261
1385
  getValue() {
@@ -1269,7 +1393,7 @@ class kt {
1269
1393
  return this.setValue(e), this;
1270
1394
  }
1271
1395
  setError(e, t) {
1272
- return this.input.setError(e, t), this;
1396
+ return document.activeElement !== this.input.getElement().querySelector("input") ? this.input.setError(e, t) : this.input.setError(!1), this;
1273
1397
  }
1274
1398
  getElement() {
1275
1399
  return this.input.getElement();
@@ -1277,8 +1401,11 @@ class kt {
1277
1401
  appendTo(e) {
1278
1402
  return this.input.appendTo(e), this;
1279
1403
  }
1404
+ focus() {
1405
+ this.input.focus();
1406
+ }
1280
1407
  }
1281
- class Tt extends h {
1408
+ class It extends h {
1282
1409
  constructor(e) {
1283
1410
  super("div", []);
1284
1411
  const t = document.createElement("div");
@@ -1295,22 +1422,22 @@ class Tt extends h {
1295
1422
  return t && (e ? t.classList.add("loading") : t.classList.remove("loading")), this;
1296
1423
  }
1297
1424
  }
1298
- const It = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='iso-8859-1'?%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Generator:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20height='30px'%20width='30px'%20version='1.1'%20id='Capa_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20viewBox='0%200%20512%20512'%20xml:space='preserve'%3e%3cpath%20style='fill:%23306FC5;'%20d='M512,402.281c0,16.716-13.55,30.267-30.265,30.267H30.265C13.55,432.549,0,418.997,0,402.281V109.717%20c0-16.715,13.55-30.266,30.265-30.266h451.47c16.716,0,30.265,13.551,30.265,30.266V402.281L512,402.281z'/%3e%3cpath%20style='opacity:0.15;fill:%23202121;enable-background:new%20;'%20d='M21.517,402.281V109.717%20c0-16.715,13.552-30.266,30.267-30.266h-21.52C13.55,79.451,0,93.001,0,109.717v292.565c0,16.716,13.55,30.267,30.265,30.267h21.52%20C35.07,432.549,21.517,418.997,21.517,402.281z'/%3e%3cg%3e%3cpolygon%20style='fill:%23FFFFFF;'%20points='74.59,220.748%2089.888,220.748%2082.241,201.278%20'/%3e%3cpolygon%20style='fill:%23FFFFFF;'%20points='155.946,286.107%20155.946,295.148%20181.675,295.148%20181.675,304.885%20155.946,304.885%20155.946,315.318%20184.455,315.318%20197.666,300.712%20185.151,286.107%20'/%3e%3cpolygon%20style='fill:%23FFFFFF;'%20points='356.898,201.278%20348.553,220.748%20364.548,220.748%20'/%3e%3cpolygon%20style='fill:%23FFFFFF;'%20points='230.348,320.875%20230.348,281.241%20212.268,300.712%20'/%3e%3cpath%20style='fill:%23FFFFFF;'%20d='M264.42,292.368c-0.696-4.172-3.48-6.261-7.654-6.261h-14.599v12.516h15.299%20C261.637,298.624,264.42,296.539,264.42,292.368z'/%3e%3cpath%20style='fill:%23FFFFFF;'%20d='M313.09,297.236c1.391-0.697,2.089-2.785,2.089-4.867c0.696-2.779-0.698-4.172-2.089-4.868%20c-1.387-0.696-3.476-0.696-5.559-0.696h-13.91v11.127h13.909C309.613,297.932,311.702,297.932,313.09,297.236z'/%3e%3cpath%20style='fill:%23FFFFFF;'%20d='M413.217,183.198v8.344l-4.169-8.344H376.37v8.344l-4.174-8.344h-44.502%20c-7.648,0-13.909,1.392-19.469,4.173v-4.173h-31.289v0.696v3.477c-3.476-2.78-7.648-4.173-13.211-4.173h-111.95l-7.652,17.384%20l-7.647-17.384h-25.031h-10.431v8.344l-3.477-8.344h-0.696H66.942l-13.909,32.68L37.042,251.34l-0.294,0.697h0.294h35.463h0.444%20l0.252-0.697l4.174-10.428h9.039l4.172,11.125h40.326v-0.697v-7.647l3.479,8.343h20.163l3.475-8.343v7.647v0.697h15.993h79.965%20h0.696v-18.08h1.394c1.389,0,1.389,0,1.389,2.087v15.297h50.065v-4.172c4.172,2.089,10.426,4.172,18.771,4.172h20.863l4.172-11.123%20h9.732l4.172,11.123h40.328v-6.952v-3.476l6.261,10.428h1.387h0.698h30.595v-68.143h-31.291l0,0H413.217z%20M177.501,241.609h-6.955%20h-4.171v-4.169v-34.076l-0.696,1.595v-0.019l-16.176,36.669h-0.512h-3.719h-6.017l-16.687-38.245v38.245h-23.64l-4.867-10.43%20H70.417l-4.868,10.43H53.326l20.57-48.675h17.382l19.469,46.587v-46.587h4.171h14.251l0.328,0.697h0.024l8.773,19.094l6.3,14.306%20l0.223-0.721l13.906-33.375H177.5v48.674H177.501L177.501,241.609z%20M225.481,203.364h-27.119v9.039h26.423v9.734h-26.423v9.738%20h27.119v10.427h-38.939v-49.367h38.939V203.364L225.481,203.364z%20M275.076,221.294c0.018,0.016,0.041,0.027,0.063,0.042%20c0.263,0.278,0.488,0.557,0.68,0.824c1.332,1.746,2.409,4.343,2.463,8.151c0.004,0.066,0.007,0.131,0.011,0.197%20c0,0.038,0.007,0.071,0.007,0.11c0,0.022-0.002,0.039-0.002,0.06c0.016,0.383,0.026,0.774,0.026,1.197v9.735h-10.428v-5.565%20c0-2.781,0-6.954-2.089-9.735c-0.657-0.657-1.322-1.09-2.046-1.398c-1.042-0.675-3.017-0.686-6.295-0.686h-12.52v17.384h-11.818%20v-48.675h26.425c6.254,0,10.428,0,13.906,2.086c3.407,2.046,5.465,5.439,5.543,10.812c-0.161,7.4-4.911,11.46-8.326,12.829%20C270.676,218.662,272.996,219.129,275.076,221.294z%20M298.491,241.609h-11.822v-48.675h11.822V241.609z%20M434.083,241.609h-15.3%20l-22.25-36.855v30.595l-0.073-0.072v6.362h-11.747v-0.029h-11.822l-4.172-10.43H344.38l-4.172,11.123h-13.211%20c-5.559,0-12.517-1.389-16.687-5.561c-4.172-4.172-6.256-9.735-6.256-18.773c0-6.953,1.389-13.911,6.256-19.472%20c3.474-4.175,9.735-5.562,17.382-5.562h11.128v10.429h-11.128c-4.172,0-6.254,0.693-9.041,2.783%20c-2.082,2.085-3.474,6.256-3.474,11.123c0,5.564,0.696,9.04,3.474,11.821c2.091,2.089,4.87,2.785,8.346,2.785h4.867l15.991-38.243%20h6.957h10.428l19.472,46.587v-2.376v-15.705v-1.389v-27.116h17.382l20.161,34.07v-34.07h11.826v47.977h0.002L434.083,241.609%20L434.083,241.609z'/%3e%3cpath%20style='fill:%23FFFFFF;'%20d='M265.161,213.207c0.203-0.217,0.387-0.463,0.543-0.745c0.63-0.997,1.352-2.793,0.963-5.244%20c-0.016-0.225-0.057-0.433-0.105-0.634c-0.013-0.056-0.011-0.105-0.026-0.161l-0.007,0.001c-0.346-1.191-1.229-1.923-2.11-2.367%20c-1.394-0.693-3.48-0.693-5.565-0.693h-13.909v11.127h13.909c2.085,0,4.172,0,5.565-0.697c0.209-0.106,0.395-0.25,0.574-0.413%20l0.002,0.009C264.996,213.389,265.067,213.315,265.161,213.207z'/%3e%3cpath%20style='fill:%23FFFFFF;'%20d='M475.105,311.144c0-4.867-1.389-9.736-3.474-13.212v-31.289h-0.032v-2.089c0,0-29.145,0-33.483,0%20c-4.336,0-9.598,4.171-9.598,4.171v-4.171h-31.984c-4.87,0-11.124,1.392-13.909,4.171v-4.171h-57.016v2.089v2.081%20c-4.169-3.474-11.824-4.171-15.298-4.171h-37.549v2.089v2.081c-3.476-3.474-11.824-4.171-15.998-4.171H215.05l-9.737,10.431%20l-9.04-10.431h-2.911h-4.737h-54.93v2.089v5.493v62.651h61.19l10.054-10.057l8.715,10.057h0.698h35.258h1.598h0.696h0.692v-6.953%20v-9.039h3.479c4.863,0,11.124,0,15.991-2.089v17.382v1.394h31.291v-1.394V317.4h1.387c2.089,0,2.089,0,2.089,2.086v14.6v1.394%20h94.563c6.263,0,12.517-1.394,15.993-4.175v2.781v1.394h29.902c6.254,0,12.517-0.695,16.689-3.478%20c6.402-3.841,10.437-10.64,11.037-18.749c0.028-0.24,0.063-0.48,0.085-0.721l-0.041-0.039%20C475.087,312.043,475.105,311.598,475.105,311.144z%20M256.076,306.973h-13.91v2.081v4.174v4.173v7.649h-22.855l-13.302-15.299%20l-0.046,0.051l-0.65-0.748l-15.297,15.996h-44.501v-48.673h45.197l12.348,13.525l2.596,2.832l0.352-0.365l14.604-15.991h36.852%20c7.152,0,15.161,1.765,18.196,9.042c0.365,1.441,0.577,3.043,0.577,4.863C276.237,304.189,266.502,306.973,256.076,306.973z%20M325.609,306.276c1.389,2.081,2.085,4.867,2.085,9.041v9.732h-11.819v-6.256c0-2.786,0-7.65-2.089-9.739%20c-1.387-2.081-4.172-2.081-8.341-2.081H292.93v18.077h-11.82v-49.369h26.421c5.559,0,10.426,0,13.909,2.084%20c3.474,2.088,6.254,5.565,6.254,11.128c0,7.647-4.865,11.819-8.343,13.212C322.829,303.49,324.914,304.885,325.609,306.276z%20M373.589,286.107h-27.122v9.04h26.424v9.737h-26.424v9.736h27.122v10.429H334.65V275.68h38.939V286.107z%20M402.791,325.05h-22.252%20v-10.429h22.252c2.082,0,3.476,0,4.87-1.392c0.696-0.697,1.387-2.085,1.387-3.477c0-1.394-0.691-2.778-1.387-3.475%20c-0.698-0.695-2.091-1.391-4.176-1.391c-11.126-0.696-24.337,0-24.337-15.296c0-6.954,4.172-14.604,16.689-14.604h22.945v11.819%20h-21.554c-2.085,0-3.478,0-4.87,0.696c-1.387,0.697-1.387,2.089-1.387,3.478c0,2.087,1.387,2.783,2.778,3.473%20c1.394,0.697,2.783,0.697,4.172,0.697h6.259c6.259,0,10.43,1.391,13.211,4.173c2.087,2.087,3.478,5.564,3.478,10.43%20C420.869,320.179,414.611,325.05,402.791,325.05z%20M462.59,320.179c-2.778,2.785-7.648,4.871-14.604,4.871H425.74v-10.429h22.245%20c2.087,0,3.481,0,4.87-1.392c0.693-0.697,1.391-2.085,1.391-3.477c0-1.394-0.698-2.778-1.391-3.475%20c-0.696-0.695-2.085-1.391-4.172-1.391c-11.122-0.696-24.337,0-24.337-15.295c0-6.609,3.781-12.579,13.106-14.352%20c1.115-0.154,2.293-0.253,3.583-0.253h22.948v11.819h-15.3h-5.561h-0.696c-2.087,0-3.476,0-4.865,0.696%20c-0.7,0.697-1.396,2.089-1.396,3.478c0,2.087,0.696,2.783,2.785,3.473c1.389,0.697,2.78,0.697,4.172,0.697h0.691h5.565%20c3.039,0,5.337,0.375,7.44,1.114c1.926,0.697,8.302,3.549,9.728,10.994c0.124,0.78,0.215,1.594,0.215,2.495%20C466.761,313.925,465.37,317.401,462.59,320.179z'/%3e%3c/g%3e%3c/svg%3e", zt = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='iso-8859-1'?%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Generator:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20height='30px'%20width='30px'%20version='1.1'%20id='Capa_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20viewBox='0%200%20512%20512'%20xml:space='preserve'%3e%3cpath%20style='fill:%2334495E;'%20d='M512,402.282c0,16.716-13.55,30.267-30.265,30.267H30.265C13.55,432.549,0,418.996,0,402.282V109.717%20c0-16.716,13.55-30.266,30.265-30.266h451.469c16.716,0,30.265,13.551,30.265,30.266L512,402.282L512,402.282z'/%3e%3cpath%20style='opacity:0.15;fill:%23202121;enable-background:new%20;'%20d='M21.517,402.282V109.717%20c0-16.716,13.552-30.266,30.267-30.266h-21.52C13.55,79.451,0,93.003,0,109.717v292.565c0,16.716,13.55,30.267,30.265,30.267h21.52%20C35.07,432.549,21.517,418.996,21.517,402.282z'/%3e%3cpath%20style='fill:%23F26E21;'%20d='M309.389,255.801c0.041-9.636-3.572-19.286-10.843-26.558c-7.287-7.287-16.961-10.897-26.617-10.839%20c-0.046,0-0.091-0.003-0.139-0.003c-20.968,0-37.6,16.628-37.6,37.602c0,20.767,16.837,37.599,37.6,37.599%20c20.974,0,37.604-16.631,37.604-37.599C309.394,255.934,309.389,255.869,309.389,255.801z'/%3e%3cg%3e%3cpath%20style='fill:%23E7E8E3;'%20d='M227.198,271.909c-5.62,5.626-10.807,7.824-16.394,7.943c-13.611-0.122-23.618-10.202-23.618-24.573%20c0-7.234,2.739-13.163,7.078-18.228l0,0c4.069-3.863,9.311-6.359,15.339-6.359c6.507,0,11.571,2.169,17.352,7.954v-16.631%20c-5.78-2.891-10.846-4.338-17.352-4.338c-9.192,0.657-17.859,4.371-24.507,10.203l0,0c-1.916,1.724-3.752,3.627-5.309,5.805%20c-4.856,6.294-7.791,14.001-7.791,22.32c0,20.967,16.637,36.875,37.606,36.875c0.102,0,0.203-0.009,0.302-0.01%20c0.141,0.002,0.28,0.01,0.42,0.01c5.784,0,10.85-1.443,17.357-4.336L227.198,271.909c-0.244,0.244,0.242,0.471,0,0.702V271.909z'/%3e%3cpolygon%20style='fill:%23E7E8E3;'%20points='356.863,228.033%20356.863,228.033%20340.487,268.295%20321.685,220.566%20306.502,220.566%20336.148,293.601%20344.102,293.601%20375.196,220.566%20360.013,220.566%20'/%3e%3cpolygon%20style='fill:%23E7E8E3;'%20points='380.983,252.384%20380.983,291.435%20420.033,291.435%20420.753,291.435%20420.753,279.861%20408.461,279.861%20395.445,279.861%20395.445,266.848%20395.445,260.342%20420.033,260.342%20420.033,248.045%20395.445,248.045%20395.445,232.861%20420.753,232.861%20420.753,220.566%20380.983,220.566%20'/%3e%3cpath%20style='fill:%23E7E8E3;'%20d='M54.135,220.566H33.884v70.869h20.25c10.845,0,18.798-2.895,25.306-7.957%20c7.953-6.508,13.017-16.629,13.017-27.474C92.458,235.028,77.27,220.566,54.135,220.566z%20M70.765,274.08%20c-4.339,3.614-10.124,5.781-18.802,5.781h-4.339V232.86h3.615c8.678,0,14.463,1.446,18.803,5.783%20c5.061,4.336,7.955,10.848,7.955,17.358C78.72,262.509,75.828,269.737,70.765,274.08z'/%3e%3crect%20x='98.97'%20y='220.56'%20style='fill:%23E7E8E3;'%20width='13.739'%20height='70.867'/%3e%3cpath%20style='fill:%23E7E8E3;'%20d='M147.415,248.045c-8.676-2.892-10.848-5.063-10.848-8.677c0-4.339,4.339-7.954,10.124-7.954%20c4.339,0,7.954,1.447,11.57,5.786l7.233-9.4c-5.787-5.064-13.015-7.953-20.97-7.953c-12.296,0-22.42,8.678-22.42,20.244%20c0,10.126,4.343,14.464,17.357,19.526c5.785,2.166,7.955,2.892,9.404,4.338c2.887,1.444,4.336,4.339,4.336,7.228%20c0,5.786-4.336,10.126-10.848,10.126c-6.514,0-12.294-3.615-15.187-9.401l-8.678,8.678c6.511,9.4,14.465,13.738,24.589,13.738%20c14.461,0,24.58-9.4,24.58-23.141C167.659,258.893,163.324,253.831,147.415,248.045z'/%3e%3cpath%20style='fill:%23E7E8E3;'%20d='M459.804,261.783c10.843-2.166,16.63-9.4,16.63-20.244c0-13.014-9.402-20.973-25.308-20.973h-20.972%20v70.869h13.739V263.23h2.172l19.519,28.205h16.634L459.804,261.783z%20M448.23,253.105h-4.336v-21.691h4.336%20c8.678,0,13.742,3.614,13.742,10.85C461.972,249.492,456.909,253.105,448.23,253.105z'/%3e%3c/g%3e%3c/svg%3e", Pt = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='iso-8859-1'?%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Generator:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20height='800px'%20width='800px'%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20viewBox='0%200%20291.791%20291.791'%20xml:space='preserve'%3e%3cg%3e%3cpath%20style='fill:%23E2574C;'%20d='M182.298,145.895c0,50.366-40.801,91.176-91.149,91.176S0,196.252,0,145.895%20s40.811-91.176,91.149-91.176S182.298,95.538,182.298,145.895z'/%3e%3cpath%20style='fill:%23F4B459;'%20d='M200.616,54.719c-20.442,0-39.261,6.811-54.469,18.181l0.073,0.009%20c2.991,2.89,6.291,4.924,8.835,8.251l-18.965,0.301c-2.972,3-5.68,6.264-8.233,9.656H161.3c2.544,3.054,4.896,5.708,7.03,9.081%20h-46.536c-1.705,2.936-3.282,5.954-4.659,9.09h56.493c1.477,3.127,2.799,5.489,3.921,8.799h-63.76%20c-1.012,3.146-1.878,6.364-2.535,9.646h68.966c0.675,3.155,1.194,6.072,1.55,9.045h-71.884c-0.301,3-0.456,6.045-0.456,9.118%20h72.859c0,3.228-0.228,6.218-0.556,9.118h-71.847c0.31,3.091,0.766,6.127,1.368,9.118h68.856c-0.711,2.954-1.532,5.926-2.562,9.008%20h-63.969c0.966,3.118,2.143,6.145,3.428,9.099h56.621c-1.568,3.319-3.346,5.972-5.306,9.081h-46.691%20c1.842,3.191,3.875,6.236,6.081,9.154l33.589,0.501c-2.863,3.437-6.537,5.507-9.884,8.516c0.182,0.146-5.352-0.018-16.248-0.191%20c16.576,17.105,39.744,27.772,65.446,27.772c50.357,0,91.176-40.82,91.176-91.176S250.981,54.719,200.616,54.719z'/%3e%3c/g%3e%3c/svg%3e", Nt = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Generator:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20width='800px'%20height='800px'%20viewBox='0%20-140%20780%20780'%20enable-background='new%200%200%20780%20500'%20version='1.1'%20xml:space='preserve'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M40,0h700c22.092,0,40,17.909,40,40v420c0,22.092-17.908,40-40,40H40c-22.091,0-40-17.908-40-40V40%20C0,17.909,17.909,0,40,0z'%20fill='%230E4595'/%3e%3cpath%20d='m293.2%20348.73l33.361-195.76h53.36l-33.385%20195.76h-53.336zm246.11-191.54c-10.57-3.966-27.137-8.222-47.822-8.222-52.725%200-89.865%2026.55-90.18%2064.603-0.299%2028.13%2026.514%2043.822%2046.752%2053.186%2020.771%209.595%2027.752%2015.714%2027.654%2024.283-0.131%2013.121-16.586%2019.116-31.922%2019.116-21.357%200-32.703-2.967-50.227-10.276l-6.876-3.11-7.489%2043.823c12.463%205.464%2035.51%2010.198%2059.438%2010.443%2056.09%200%2092.5-26.246%2092.916-66.882%200.199-22.269-14.016-39.216-44.801-53.188-18.65-9.055-30.072-15.099-29.951-24.268%200-8.137%209.668-16.839%2030.557-16.839%2017.449-0.27%2030.09%203.535%2039.938%207.5l4.781%202.26%207.232-42.429m137.31-4.223h-41.232c-12.773%200-22.332%203.487-27.941%2016.234l-79.244%20179.4h56.031s9.16-24.123%2011.232-29.418c6.125%200%2060.555%200.084%2068.338%200.084%201.596%206.853%206.49%2029.334%206.49%2029.334h49.514l-43.188-195.64zm-65.418%20126.41c4.412-11.279%2021.26-54.723%2021.26-54.723-0.316%200.522%204.379-11.334%207.074-18.684l3.605%2016.879s10.219%2046.729%2012.354%2056.528h-44.293zm-363.3-126.41l-52.24%20133.5-5.567-27.13c-9.725-31.273-40.025-65.155-73.898-82.118l47.766%20171.2%2056.456-0.064%2084.004-195.39h-56.521'%20fill='%23ffffff'/%3e%3cpath%20d='m146.92%20152.96h-86.041l-0.681%204.073c66.938%2016.204%20111.23%2055.363%20129.62%20102.41l-18.71-89.96c-3.23-12.395-12.597-16.094-24.186-16.527'%20fill='%23F2AE14'/%3e%3c/svg%3e", w = [
1425
+ const Nt = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='iso-8859-1'?%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Generator:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20height='30px'%20width='30px'%20version='1.1'%20id='Capa_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20viewBox='0%200%20512%20512'%20xml:space='preserve'%3e%3cpath%20style='fill:%23306FC5;'%20d='M512,402.281c0,16.716-13.55,30.267-30.265,30.267H30.265C13.55,432.549,0,418.997,0,402.281V109.717%20c0-16.715,13.55-30.266,30.265-30.266h451.47c16.716,0,30.265,13.551,30.265,30.266V402.281L512,402.281z'/%3e%3cpath%20style='opacity:0.15;fill:%23202121;enable-background:new%20;'%20d='M21.517,402.281V109.717%20c0-16.715,13.552-30.266,30.267-30.266h-21.52C13.55,79.451,0,93.001,0,109.717v292.565c0,16.716,13.55,30.267,30.265,30.267h21.52%20C35.07,432.549,21.517,418.997,21.517,402.281z'/%3e%3cg%3e%3cpolygon%20style='fill:%23FFFFFF;'%20points='74.59,220.748%2089.888,220.748%2082.241,201.278%20'/%3e%3cpolygon%20style='fill:%23FFFFFF;'%20points='155.946,286.107%20155.946,295.148%20181.675,295.148%20181.675,304.885%20155.946,304.885%20155.946,315.318%20184.455,315.318%20197.666,300.712%20185.151,286.107%20'/%3e%3cpolygon%20style='fill:%23FFFFFF;'%20points='356.898,201.278%20348.553,220.748%20364.548,220.748%20'/%3e%3cpolygon%20style='fill:%23FFFFFF;'%20points='230.348,320.875%20230.348,281.241%20212.268,300.712%20'/%3e%3cpath%20style='fill:%23FFFFFF;'%20d='M264.42,292.368c-0.696-4.172-3.48-6.261-7.654-6.261h-14.599v12.516h15.299%20C261.637,298.624,264.42,296.539,264.42,292.368z'/%3e%3cpath%20style='fill:%23FFFFFF;'%20d='M313.09,297.236c1.391-0.697,2.089-2.785,2.089-4.867c0.696-2.779-0.698-4.172-2.089-4.868%20c-1.387-0.696-3.476-0.696-5.559-0.696h-13.91v11.127h13.909C309.613,297.932,311.702,297.932,313.09,297.236z'/%3e%3cpath%20style='fill:%23FFFFFF;'%20d='M413.217,183.198v8.344l-4.169-8.344H376.37v8.344l-4.174-8.344h-44.502%20c-7.648,0-13.909,1.392-19.469,4.173v-4.173h-31.289v0.696v3.477c-3.476-2.78-7.648-4.173-13.211-4.173h-111.95l-7.652,17.384%20l-7.647-17.384h-25.031h-10.431v8.344l-3.477-8.344h-0.696H66.942l-13.909,32.68L37.042,251.34l-0.294,0.697h0.294h35.463h0.444%20l0.252-0.697l4.174-10.428h9.039l4.172,11.125h40.326v-0.697v-7.647l3.479,8.343h20.163l3.475-8.343v7.647v0.697h15.993h79.965%20h0.696v-18.08h1.394c1.389,0,1.389,0,1.389,2.087v15.297h50.065v-4.172c4.172,2.089,10.426,4.172,18.771,4.172h20.863l4.172-11.123%20h9.732l4.172,11.123h40.328v-6.952v-3.476l6.261,10.428h1.387h0.698h30.595v-68.143h-31.291l0,0H413.217z%20M177.501,241.609h-6.955%20h-4.171v-4.169v-34.076l-0.696,1.595v-0.019l-16.176,36.669h-0.512h-3.719h-6.017l-16.687-38.245v38.245h-23.64l-4.867-10.43%20H70.417l-4.868,10.43H53.326l20.57-48.675h17.382l19.469,46.587v-46.587h4.171h14.251l0.328,0.697h0.024l8.773,19.094l6.3,14.306%20l0.223-0.721l13.906-33.375H177.5v48.674H177.501L177.501,241.609z%20M225.481,203.364h-27.119v9.039h26.423v9.734h-26.423v9.738%20h27.119v10.427h-38.939v-49.367h38.939V203.364L225.481,203.364z%20M275.076,221.294c0.018,0.016,0.041,0.027,0.063,0.042%20c0.263,0.278,0.488,0.557,0.68,0.824c1.332,1.746,2.409,4.343,2.463,8.151c0.004,0.066,0.007,0.131,0.011,0.197%20c0,0.038,0.007,0.071,0.007,0.11c0,0.022-0.002,0.039-0.002,0.06c0.016,0.383,0.026,0.774,0.026,1.197v9.735h-10.428v-5.565%20c0-2.781,0-6.954-2.089-9.735c-0.657-0.657-1.322-1.09-2.046-1.398c-1.042-0.675-3.017-0.686-6.295-0.686h-12.52v17.384h-11.818%20v-48.675h26.425c6.254,0,10.428,0,13.906,2.086c3.407,2.046,5.465,5.439,5.543,10.812c-0.161,7.4-4.911,11.46-8.326,12.829%20C270.676,218.662,272.996,219.129,275.076,221.294z%20M298.491,241.609h-11.822v-48.675h11.822V241.609z%20M434.083,241.609h-15.3%20l-22.25-36.855v30.595l-0.073-0.072v6.362h-11.747v-0.029h-11.822l-4.172-10.43H344.38l-4.172,11.123h-13.211%20c-5.559,0-12.517-1.389-16.687-5.561c-4.172-4.172-6.256-9.735-6.256-18.773c0-6.953,1.389-13.911,6.256-19.472%20c3.474-4.175,9.735-5.562,17.382-5.562h11.128v10.429h-11.128c-4.172,0-6.254,0.693-9.041,2.783%20c-2.082,2.085-3.474,6.256-3.474,11.123c0,5.564,0.696,9.04,3.474,11.821c2.091,2.089,4.87,2.785,8.346,2.785h4.867l15.991-38.243%20h6.957h10.428l19.472,46.587v-2.376v-15.705v-1.389v-27.116h17.382l20.161,34.07v-34.07h11.826v47.977h0.002L434.083,241.609%20L434.083,241.609z'/%3e%3cpath%20style='fill:%23FFFFFF;'%20d='M265.161,213.207c0.203-0.217,0.387-0.463,0.543-0.745c0.63-0.997,1.352-2.793,0.963-5.244%20c-0.016-0.225-0.057-0.433-0.105-0.634c-0.013-0.056-0.011-0.105-0.026-0.161l-0.007,0.001c-0.346-1.191-1.229-1.923-2.11-2.367%20c-1.394-0.693-3.48-0.693-5.565-0.693h-13.909v11.127h13.909c2.085,0,4.172,0,5.565-0.697c0.209-0.106,0.395-0.25,0.574-0.413%20l0.002,0.009C264.996,213.389,265.067,213.315,265.161,213.207z'/%3e%3cpath%20style='fill:%23FFFFFF;'%20d='M475.105,311.144c0-4.867-1.389-9.736-3.474-13.212v-31.289h-0.032v-2.089c0,0-29.145,0-33.483,0%20c-4.336,0-9.598,4.171-9.598,4.171v-4.171h-31.984c-4.87,0-11.124,1.392-13.909,4.171v-4.171h-57.016v2.089v2.081%20c-4.169-3.474-11.824-4.171-15.298-4.171h-37.549v2.089v2.081c-3.476-3.474-11.824-4.171-15.998-4.171H215.05l-9.737,10.431%20l-9.04-10.431h-2.911h-4.737h-54.93v2.089v5.493v62.651h61.19l10.054-10.057l8.715,10.057h0.698h35.258h1.598h0.696h0.692v-6.953%20v-9.039h3.479c4.863,0,11.124,0,15.991-2.089v17.382v1.394h31.291v-1.394V317.4h1.387c2.089,0,2.089,0,2.089,2.086v14.6v1.394%20h94.563c6.263,0,12.517-1.394,15.993-4.175v2.781v1.394h29.902c6.254,0,12.517-0.695,16.689-3.478%20c6.402-3.841,10.437-10.64,11.037-18.749c0.028-0.24,0.063-0.48,0.085-0.721l-0.041-0.039%20C475.087,312.043,475.105,311.598,475.105,311.144z%20M256.076,306.973h-13.91v2.081v4.174v4.173v7.649h-22.855l-13.302-15.299%20l-0.046,0.051l-0.65-0.748l-15.297,15.996h-44.501v-48.673h45.197l12.348,13.525l2.596,2.832l0.352-0.365l14.604-15.991h36.852%20c7.152,0,15.161,1.765,18.196,9.042c0.365,1.441,0.577,3.043,0.577,4.863C276.237,304.189,266.502,306.973,256.076,306.973z%20M325.609,306.276c1.389,2.081,2.085,4.867,2.085,9.041v9.732h-11.819v-6.256c0-2.786,0-7.65-2.089-9.739%20c-1.387-2.081-4.172-2.081-8.341-2.081H292.93v18.077h-11.82v-49.369h26.421c5.559,0,10.426,0,13.909,2.084%20c3.474,2.088,6.254,5.565,6.254,11.128c0,7.647-4.865,11.819-8.343,13.212C322.829,303.49,324.914,304.885,325.609,306.276z%20M373.589,286.107h-27.122v9.04h26.424v9.737h-26.424v9.736h27.122v10.429H334.65V275.68h38.939V286.107z%20M402.791,325.05h-22.252%20v-10.429h22.252c2.082,0,3.476,0,4.87-1.392c0.696-0.697,1.387-2.085,1.387-3.477c0-1.394-0.691-2.778-1.387-3.475%20c-0.698-0.695-2.091-1.391-4.176-1.391c-11.126-0.696-24.337,0-24.337-15.296c0-6.954,4.172-14.604,16.689-14.604h22.945v11.819%20h-21.554c-2.085,0-3.478,0-4.87,0.696c-1.387,0.697-1.387,2.089-1.387,3.478c0,2.087,1.387,2.783,2.778,3.473%20c1.394,0.697,2.783,0.697,4.172,0.697h6.259c6.259,0,10.43,1.391,13.211,4.173c2.087,2.087,3.478,5.564,3.478,10.43%20C420.869,320.179,414.611,325.05,402.791,325.05z%20M462.59,320.179c-2.778,2.785-7.648,4.871-14.604,4.871H425.74v-10.429h22.245%20c2.087,0,3.481,0,4.87-1.392c0.693-0.697,1.391-2.085,1.391-3.477c0-1.394-0.698-2.778-1.391-3.475%20c-0.696-0.695-2.085-1.391-4.172-1.391c-11.122-0.696-24.337,0-24.337-15.295c0-6.609,3.781-12.579,13.106-14.352%20c1.115-0.154,2.293-0.253,3.583-0.253h22.948v11.819h-15.3h-5.561h-0.696c-2.087,0-3.476,0-4.865,0.696%20c-0.7,0.697-1.396,2.089-1.396,3.478c0,2.087,0.696,2.783,2.785,3.473c1.389,0.697,2.78,0.697,4.172,0.697h0.691h5.565%20c3.039,0,5.337,0.375,7.44,1.114c1.926,0.697,8.302,3.549,9.728,10.994c0.124,0.78,0.215,1.594,0.215,2.495%20C466.761,313.925,465.37,317.401,462.59,320.179z'/%3e%3c/g%3e%3c/svg%3e", Pt = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='iso-8859-1'?%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Generator:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20height='30px'%20width='30px'%20version='1.1'%20id='Capa_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20viewBox='0%200%20512%20512'%20xml:space='preserve'%3e%3cpath%20style='fill:%2334495E;'%20d='M512,402.282c0,16.716-13.55,30.267-30.265,30.267H30.265C13.55,432.549,0,418.996,0,402.282V109.717%20c0-16.716,13.55-30.266,30.265-30.266h451.469c16.716,0,30.265,13.551,30.265,30.266L512,402.282L512,402.282z'/%3e%3cpath%20style='opacity:0.15;fill:%23202121;enable-background:new%20;'%20d='M21.517,402.282V109.717%20c0-16.716,13.552-30.266,30.267-30.266h-21.52C13.55,79.451,0,93.003,0,109.717v292.565c0,16.716,13.55,30.267,30.265,30.267h21.52%20C35.07,432.549,21.517,418.996,21.517,402.282z'/%3e%3cpath%20style='fill:%23F26E21;'%20d='M309.389,255.801c0.041-9.636-3.572-19.286-10.843-26.558c-7.287-7.287-16.961-10.897-26.617-10.839%20c-0.046,0-0.091-0.003-0.139-0.003c-20.968,0-37.6,16.628-37.6,37.602c0,20.767,16.837,37.599,37.6,37.599%20c20.974,0,37.604-16.631,37.604-37.599C309.394,255.934,309.389,255.869,309.389,255.801z'/%3e%3cg%3e%3cpath%20style='fill:%23E7E8E3;'%20d='M227.198,271.909c-5.62,5.626-10.807,7.824-16.394,7.943c-13.611-0.122-23.618-10.202-23.618-24.573%20c0-7.234,2.739-13.163,7.078-18.228l0,0c4.069-3.863,9.311-6.359,15.339-6.359c6.507,0,11.571,2.169,17.352,7.954v-16.631%20c-5.78-2.891-10.846-4.338-17.352-4.338c-9.192,0.657-17.859,4.371-24.507,10.203l0,0c-1.916,1.724-3.752,3.627-5.309,5.805%20c-4.856,6.294-7.791,14.001-7.791,22.32c0,20.967,16.637,36.875,37.606,36.875c0.102,0,0.203-0.009,0.302-0.01%20c0.141,0.002,0.28,0.01,0.42,0.01c5.784,0,10.85-1.443,17.357-4.336L227.198,271.909c-0.244,0.244,0.242,0.471,0,0.702V271.909z'/%3e%3cpolygon%20style='fill:%23E7E8E3;'%20points='356.863,228.033%20356.863,228.033%20340.487,268.295%20321.685,220.566%20306.502,220.566%20336.148,293.601%20344.102,293.601%20375.196,220.566%20360.013,220.566%20'/%3e%3cpolygon%20style='fill:%23E7E8E3;'%20points='380.983,252.384%20380.983,291.435%20420.033,291.435%20420.753,291.435%20420.753,279.861%20408.461,279.861%20395.445,279.861%20395.445,266.848%20395.445,260.342%20420.033,260.342%20420.033,248.045%20395.445,248.045%20395.445,232.861%20420.753,232.861%20420.753,220.566%20380.983,220.566%20'/%3e%3cpath%20style='fill:%23E7E8E3;'%20d='M54.135,220.566H33.884v70.869h20.25c10.845,0,18.798-2.895,25.306-7.957%20c7.953-6.508,13.017-16.629,13.017-27.474C92.458,235.028,77.27,220.566,54.135,220.566z%20M70.765,274.08%20c-4.339,3.614-10.124,5.781-18.802,5.781h-4.339V232.86h3.615c8.678,0,14.463,1.446,18.803,5.783%20c5.061,4.336,7.955,10.848,7.955,17.358C78.72,262.509,75.828,269.737,70.765,274.08z'/%3e%3crect%20x='98.97'%20y='220.56'%20style='fill:%23E7E8E3;'%20width='13.739'%20height='70.867'/%3e%3cpath%20style='fill:%23E7E8E3;'%20d='M147.415,248.045c-8.676-2.892-10.848-5.063-10.848-8.677c0-4.339,4.339-7.954,10.124-7.954%20c4.339,0,7.954,1.447,11.57,5.786l7.233-9.4c-5.787-5.064-13.015-7.953-20.97-7.953c-12.296,0-22.42,8.678-22.42,20.244%20c0,10.126,4.343,14.464,17.357,19.526c5.785,2.166,7.955,2.892,9.404,4.338c2.887,1.444,4.336,4.339,4.336,7.228%20c0,5.786-4.336,10.126-10.848,10.126c-6.514,0-12.294-3.615-15.187-9.401l-8.678,8.678c6.511,9.4,14.465,13.738,24.589,13.738%20c14.461,0,24.58-9.4,24.58-23.141C167.659,258.893,163.324,253.831,147.415,248.045z'/%3e%3cpath%20style='fill:%23E7E8E3;'%20d='M459.804,261.783c10.843-2.166,16.63-9.4,16.63-20.244c0-13.014-9.402-20.973-25.308-20.973h-20.972%20v70.869h13.739V263.23h2.172l19.519,28.205h16.634L459.804,261.783z%20M448.23,253.105h-4.336v-21.691h4.336%20c8.678,0,13.742,3.614,13.742,10.85C461.972,249.492,456.909,253.105,448.23,253.105z'/%3e%3c/g%3e%3c/svg%3e", Vt = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='iso-8859-1'?%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Generator:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20height='800px'%20width='800px'%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20viewBox='0%200%20291.791%20291.791'%20xml:space='preserve'%3e%3cg%3e%3cpath%20style='fill:%23E2574C;'%20d='M182.298,145.895c0,50.366-40.801,91.176-91.149,91.176S0,196.252,0,145.895%20s40.811-91.176,91.149-91.176S182.298,95.538,182.298,145.895z'/%3e%3cpath%20style='fill:%23F4B459;'%20d='M200.616,54.719c-20.442,0-39.261,6.811-54.469,18.181l0.073,0.009%20c2.991,2.89,6.291,4.924,8.835,8.251l-18.965,0.301c-2.972,3-5.68,6.264-8.233,9.656H161.3c2.544,3.054,4.896,5.708,7.03,9.081%20h-46.536c-1.705,2.936-3.282,5.954-4.659,9.09h56.493c1.477,3.127,2.799,5.489,3.921,8.799h-63.76%20c-1.012,3.146-1.878,6.364-2.535,9.646h68.966c0.675,3.155,1.194,6.072,1.55,9.045h-71.884c-0.301,3-0.456,6.045-0.456,9.118%20h72.859c0,3.228-0.228,6.218-0.556,9.118h-71.847c0.31,3.091,0.766,6.127,1.368,9.118h68.856c-0.711,2.954-1.532,5.926-2.562,9.008%20h-63.969c0.966,3.118,2.143,6.145,3.428,9.099h56.621c-1.568,3.319-3.346,5.972-5.306,9.081h-46.691%20c1.842,3.191,3.875,6.236,6.081,9.154l33.589,0.501c-2.863,3.437-6.537,5.507-9.884,8.516c0.182,0.146-5.352-0.018-16.248-0.191%20c16.576,17.105,39.744,27.772,65.446,27.772c50.357,0,91.176-40.82,91.176-91.176S250.981,54.719,200.616,54.719z'/%3e%3c/g%3e%3c/svg%3e", zt = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Generator:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20width='800px'%20height='800px'%20viewBox='0%20-140%20780%20780'%20enable-background='new%200%200%20780%20500'%20version='1.1'%20xml:space='preserve'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M40,0h700c22.092,0,40,17.909,40,40v420c0,22.092-17.908,40-40,40H40c-22.091,0-40-17.908-40-40V40%20C0,17.909,17.909,0,40,0z'%20fill='%230E4595'/%3e%3cpath%20d='m293.2%20348.73l33.361-195.76h53.36l-33.385%20195.76h-53.336zm246.11-191.54c-10.57-3.966-27.137-8.222-47.822-8.222-52.725%200-89.865%2026.55-90.18%2064.603-0.299%2028.13%2026.514%2043.822%2046.752%2053.186%2020.771%209.595%2027.752%2015.714%2027.654%2024.283-0.131%2013.121-16.586%2019.116-31.922%2019.116-21.357%200-32.703-2.967-50.227-10.276l-6.876-3.11-7.489%2043.823c12.463%205.464%2035.51%2010.198%2059.438%2010.443%2056.09%200%2092.5-26.246%2092.916-66.882%200.199-22.269-14.016-39.216-44.801-53.188-18.65-9.055-30.072-15.099-29.951-24.268%200-8.137%209.668-16.839%2030.557-16.839%2017.449-0.27%2030.09%203.535%2039.938%207.5l4.781%202.26%207.232-42.429m137.31-4.223h-41.232c-12.773%200-22.332%203.487-27.941%2016.234l-79.244%20179.4h56.031s9.16-24.123%2011.232-29.418c6.125%200%2060.555%200.084%2068.338%200.084%201.596%206.853%206.49%2029.334%206.49%2029.334h49.514l-43.188-195.64zm-65.418%20126.41c4.412-11.279%2021.26-54.723%2021.26-54.723-0.316%200.522%204.379-11.334%207.074-18.684l3.605%2016.879s10.219%2046.729%2012.354%2056.528h-44.293zm-363.3-126.41l-52.24%20133.5-5.567-27.13c-9.725-31.273-40.025-65.155-73.898-82.118l47.766%20171.2%2056.456-0.064%2084.004-195.39h-56.521'%20fill='%23ffffff'/%3e%3cpath%20d='m146.92%20152.96h-86.041l-0.681%204.073c66.938%2016.204%20111.23%2055.363%20129.62%20102.41l-18.71-89.96c-3.23-12.395-12.597-16.094-24.186-16.527'%20fill='%23F2AE14'/%3e%3c/svg%3e", L = [
1299
1426
  {
1300
1427
  type: "visa",
1301
- imgSrc: Nt
1428
+ imgSrc: zt
1302
1429
  },
1303
1430
  {
1304
1431
  type: "masterCard",
1305
- imgSrc: Pt
1432
+ imgSrc: Vt
1306
1433
  },
1307
1434
  {
1308
1435
  type: "americanExpress",
1309
- imgSrc: It
1436
+ imgSrc: Nt
1310
1437
  },
1311
1438
  {
1312
1439
  type: "discover",
1313
- imgSrc: zt
1440
+ imgSrc: Pt
1314
1441
  }
1315
1442
  ];
1316
1443
  class At extends h {
@@ -1325,11 +1452,11 @@ class At extends h {
1325
1452
  a.id = "card-element", a.className = `card-element ${e.isFocused ? "card-element-focus" : ""}`, a.style.zIndex = e.isFocused ? "2" : "0";
1326
1453
  const r = document.createElement("div");
1327
1454
  if (r.className = "cards-position", e.cardType === "unknown")
1328
- w.forEach((s) => {
1455
+ L.forEach((s) => {
1329
1456
  r.appendChild(this.createCardIcon(s));
1330
1457
  });
1331
1458
  else {
1332
- const s = w.find((n) => n.type === e.cardType);
1459
+ const s = L.find((o) => o.type === e.cardType);
1333
1460
  s && r.appendChild(this.createCardIcon(s));
1334
1461
  }
1335
1462
  a.appendChild(r), i.appendChild(a), this.getElement().appendChild(i);
@@ -1360,12 +1487,12 @@ class At extends h {
1360
1487
  const i = this.getElement().querySelector(".cards-position");
1361
1488
  if (i)
1362
1489
  if (i.innerHTML = "", this.cardType === "unknown")
1363
- w.forEach((a) => {
1490
+ L.forEach((a) => {
1364
1491
  i.appendChild(this.createCardIcon(a));
1365
1492
  });
1366
1493
  else {
1367
- const a = w.find((r) => r.type === this.cardType);
1368
- a ? i.appendChild(this.createCardIcon(a)) : w.forEach((r) => {
1494
+ const a = L.find((r) => r.type === this.cardType);
1495
+ a ? i.appendChild(this.createCardIcon(a)) : L.forEach((r) => {
1369
1496
  i.appendChild(this.createCardIcon(r));
1370
1497
  });
1371
1498
  }
@@ -1385,40 +1512,43 @@ class Dt extends h {
1385
1512
  isFocused: a,
1386
1513
  isCvvFocused: r,
1387
1514
  isCcValid: s,
1388
- isCvvValid: n,
1515
+ isCvvValid: o,
1389
1516
  isCcTouched: l,
1390
1517
  isCvvTouched: c,
1391
1518
  cardType: d,
1392
1519
  cardExpiry: u,
1393
- cardExpiryError: p,
1520
+ cardExpiryError: f,
1394
1521
  cardExpiryTouched: g,
1395
- onChange: m,
1396
- onBlur: b,
1397
- translationFunc: S,
1398
- cardExpiryAutocomplete: x = "cc-exp"
1399
- } = e, C = document.createElement("div");
1522
+ onChange: x,
1523
+ onBlur: I,
1524
+ translationFunc: m,
1525
+ cardExpiryAutocomplete: C = "cc-exp"
1526
+ } = e, w = document.createElement("div");
1400
1527
  this.cardNumber = new At({
1401
1528
  styles: {
1402
1529
  color: t.styles.textColor,
1403
1530
  fontSize: t.styles.fontSize,
1404
1531
  borderRadius: t.styles.borderRadius
1405
1532
  },
1406
- label: S("cardInformation"),
1533
+ label: m("cardInformation"),
1407
1534
  isLoading: i,
1408
1535
  isFocused: a,
1409
1536
  cardType: d
1410
- }), C.appendChild(this.cardNumber.getElement());
1411
- const v = document.createElement("div");
1412
- v.className = "card-details", this.cardExpiry = new P({
1537
+ }), w.appendChild(this.cardNumber.getElement());
1538
+ const y = document.createElement("div");
1539
+ y.className = "card-details", this.cardExpiry = new V({
1413
1540
  name: "cardExpiry",
1414
1541
  type: "tel",
1415
- placeholder: S("cardExpiry"),
1416
- error: !!(p && g),
1417
- errorMsg: p,
1542
+ placeholder: m("cardExpiry"),
1543
+ // Always hide error initially
1544
+ error: !1,
1545
+ errorMsg: f,
1418
1546
  value: u,
1419
- autocomplete: x,
1420
- onChange: (f) => {
1421
- this.trimCardExpiry(), m(f);
1547
+ autocomplete: C,
1548
+ onChange: (p) => {
1549
+ this.cardExpiry.setError(!1);
1550
+ const S = this.validationMessages.get("cardExpiry");
1551
+ S && (S.getElement().remove(), this.validationMessages.delete("cardExpiry"), this.updateErrorContainerHeight()), this.trimCardExpiry(), x(p);
1422
1552
  },
1423
1553
  styles: {
1424
1554
  color: t.styles.textColor,
@@ -1426,44 +1556,46 @@ class Dt extends h {
1426
1556
  fontSize: t.styles.fontSize,
1427
1557
  fontFamily: t.styles.fontFamily
1428
1558
  }
1429
- }), this.cardExpiry.addEventListener("blur", b), this.cardExpiry.addEventListener("keydown", (f) => {
1430
- const L = f, B = [
1559
+ }), this.cardExpiry.addEventListener("blur", (p) => {
1560
+ f && g && this.cardExpiry.setError(!0, f), I(p);
1561
+ }), this.cardExpiry.addEventListener("keydown", (p) => {
1562
+ const S = p, B = [
1431
1563
  "Backspace",
1432
1564
  "Delete",
1433
1565
  "ArrowLeft",
1434
1566
  "ArrowRight",
1435
1567
  "Tab"
1436
- ], O = this.cardExpiry.getValue().replace(/\D/g, "");
1437
- B.includes(L.key) || (!/^\d$/.test(L.key) || O.length >= 4 && !L.isComposing) && L.preventDefault();
1568
+ ], H = this.cardExpiry.getValue().replace(/\D/g, "");
1569
+ B.includes(S.key) || (!/^\d$/.test(S.key) || H.length >= 4 && !S.isComposing) && S.preventDefault();
1438
1570
  });
1439
- const R = this.cardExpiry.getElement();
1440
- R.style.height = "38.5px";
1441
- const T = document.createElement("div");
1442
- T.className = "input-wrapper", this.cardCvv = new Tt({
1571
+ const M = this.cardExpiry.getElement();
1572
+ M.style.height = "38.5px";
1573
+ const b = document.createElement("div");
1574
+ b.className = "input-wrapper", this.cardCvv = new It({
1443
1575
  styles: {
1444
1576
  borderRadius: typeof t.styles.borderRadius == "number" ? t.styles.borderRadius : 0
1445
1577
  },
1446
1578
  isLoading: i,
1447
1579
  isFocused: r
1448
- }), T.appendChild(this.cardCvv.getElement()), v.appendChild(this.cardExpiry.getElement()), v.appendChild(T), C.appendChild(v);
1449
- const y = document.createElement("div");
1450
- if (y.className = "error-messages-container", y.style.width = "100%", y.style.transition = "height 0.3s ease-in-out, opacity 0.3s ease-in-out", y.style.overflow = "hidden", y.style.height = "0px", y.style.opacity = "0", this.getElement().appendChild(C), this.getElement().appendChild(y), (a || l) && !s) {
1451
- const f = new E({
1452
- text: S("validation.cardNumberInvalid")
1580
+ }), b.appendChild(this.cardCvv.getElement()), y.appendChild(this.cardExpiry.getElement()), y.appendChild(b), w.appendChild(y);
1581
+ const v = document.createElement("div");
1582
+ if (v.className = "error-messages-container", v.style.width = "100%", v.style.transition = "height 0.3s ease-in-out, opacity 0.3s ease-in-out", v.style.overflow = "hidden", v.style.height = "0px", v.style.opacity = "0", this.getElement().appendChild(w), this.getElement().appendChild(v), (a || l) && !s) {
1583
+ const p = new E({
1584
+ text: m("validation.cardNumberInvalid")
1453
1585
  });
1454
- this.validationMessages.set("cardNumber", f), y.appendChild(f.getElement());
1586
+ this.validationMessages.set("cardNumber", p), v.appendChild(p.getElement());
1455
1587
  }
1456
- if ((r || c) && !n) {
1457
- const f = new E({
1458
- text: S("validation.cardSecurityFormat")
1588
+ if ((r || c) && !o) {
1589
+ const p = new E({
1590
+ text: m("validation.cardSecurityFormat")
1459
1591
  });
1460
- this.validationMessages.set("cardCvv", f), y.appendChild(f.getElement());
1592
+ this.validationMessages.set("cardCvv", p), v.appendChild(p.getElement());
1461
1593
  }
1462
- if (p && g) {
1463
- const f = new E({
1464
- text: p
1594
+ if (f && g) {
1595
+ const p = new E({
1596
+ text: f
1465
1597
  });
1466
- this.validationMessages.set("cardExpiry", f), y.appendChild(f.getElement());
1598
+ this.validationMessages.set("cardExpiry", p), v.appendChild(p.getElement());
1467
1599
  }
1468
1600
  setTimeout(() => this.updateErrorContainerHeight(), 0);
1469
1601
  }
@@ -1474,20 +1606,22 @@ class Dt extends h {
1474
1606
  this.cardExpiry.setValue(e);
1475
1607
  const a = this.getElement().querySelector(
1476
1608
  ".error-messages-container"
1477
- );
1478
- if (t && i)
1609
+ ), r = this.cardExpiry.getElement().querySelector("input"), s = document.activeElement === r;
1610
+ if (t && i && !s)
1479
1611
  if (this.cardExpiry.setError(!1), this.validationMessages.has("cardExpiry"))
1480
1612
  this.validationMessages.get("cardExpiry")?.setText(t);
1481
1613
  else {
1482
- const r = new E({
1614
+ const l = new E({
1483
1615
  text: t
1484
1616
  });
1485
- this.validationMessages.set("cardExpiry", r), a.appendChild(r.getElement()), setTimeout(() => this.updateErrorContainerHeight(), 0);
1617
+ this.validationMessages.set("cardExpiry", l), a.appendChild(l.getElement()), setTimeout(() => this.updateErrorContainerHeight(), 0);
1486
1618
  }
1487
- else {
1488
- this.cardExpiry.setError(!1);
1489
- const r = this.validationMessages.get("cardExpiry");
1490
- r && (r.getElement().remove(), this.validationMessages.delete("cardExpiry"), this.updateErrorContainerHeight());
1619
+ else if (this.cardExpiry.setError(!1), s) {
1620
+ const l = this.validationMessages.get("cardExpiry");
1621
+ l && (l.getElement().remove(), this.validationMessages.delete("cardExpiry"), this.updateErrorContainerHeight());
1622
+ } else if (!t) {
1623
+ const l = this.validationMessages.get("cardExpiry");
1624
+ l && (l.getElement().remove(), this.validationMessages.delete("cardExpiry"), this.updateErrorContainerHeight());
1491
1625
  }
1492
1626
  return this;
1493
1627
  }
@@ -1502,17 +1636,21 @@ class Dt extends h {
1502
1636
  this.cardNumber.setFocused(e);
1503
1637
  const r = this.getElement().querySelector(
1504
1638
  ".error-messages-container"
1505
- );
1506
- if (!e && a && !(t !== !1)) {
1639
+ ), s = t !== !1;
1640
+ if (e) {
1641
+ const o = this.validationMessages.get("cardNumber");
1642
+ return o && (o.getElement().remove(), this.validationMessages.delete("cardNumber"), this.updateErrorContainerHeight()), this;
1643
+ }
1644
+ if (!e && a && !s) {
1507
1645
  if (!this.validationMessages.has("cardNumber")) {
1508
- const n = new E({
1646
+ const o = new E({
1509
1647
  text: i("validation.cardNumberInvalid")
1510
1648
  });
1511
- this.validationMessages.set("cardNumber", n), r.appendChild(n.getElement()), setTimeout(() => this.updateErrorContainerHeight(), 0);
1649
+ this.validationMessages.set("cardNumber", o), r.appendChild(o.getElement()), setTimeout(() => this.updateErrorContainerHeight(), 0);
1512
1650
  }
1513
1651
  } else {
1514
- const n = this.validationMessages.get("cardNumber");
1515
- n && (n.getElement().remove(), this.validationMessages.delete("cardNumber"), this.updateErrorContainerHeight());
1652
+ const o = this.validationMessages.get("cardNumber");
1653
+ o && (o.getElement().remove(), this.validationMessages.delete("cardNumber"), this.updateErrorContainerHeight());
1516
1654
  }
1517
1655
  return this;
1518
1656
  }
@@ -1523,14 +1661,14 @@ class Dt extends h {
1523
1661
  );
1524
1662
  if (!e && a && !(t !== !1)) {
1525
1663
  if (!this.validationMessages.has("cardCvv")) {
1526
- const n = new E({
1664
+ const o = new E({
1527
1665
  text: i("validation.cardSecurityFormat")
1528
1666
  });
1529
- this.validationMessages.set("cardCvv", n), r.appendChild(n.getElement()), setTimeout(() => this.updateErrorContainerHeight(), 0);
1667
+ this.validationMessages.set("cardCvv", o), r.appendChild(o.getElement()), setTimeout(() => this.updateErrorContainerHeight(), 0);
1530
1668
  }
1531
1669
  } else {
1532
- const n = this.validationMessages.get("cardCvv");
1533
- n && (n.getElement().remove(), this.validationMessages.delete("cardCvv"), this.updateErrorContainerHeight());
1670
+ const o = this.validationMessages.get("cardCvv");
1671
+ o && (o.getElement().remove(), this.validationMessages.delete("cardCvv"), this.updateErrorContainerHeight());
1534
1672
  }
1535
1673
  return this;
1536
1674
  }
@@ -1555,8 +1693,26 @@ class Dt extends h {
1555
1693
  e.style.overflow = i, e.style.height = t, e.offsetHeight, e.style.height = a + 4 + "px", e.style.opacity = "1";
1556
1694
  }
1557
1695
  }
1696
+ /**
1697
+ * Focus a specific field in the card section
1698
+ * @param field The field to focus: 'cardNumber', 'cardExpiry', or 'cardCvv'
1699
+ */
1700
+ focusField(e) {
1701
+ switch (e) {
1702
+ case "cardExpiry":
1703
+ this.cardExpiry.focus();
1704
+ break;
1705
+ }
1706
+ }
1707
+ /**
1708
+ * Focus implementation for the Focusable interface
1709
+ * By default, focus on the card expiry field since it's a regular input we can directly control
1710
+ */
1711
+ focus() {
1712
+ this.focusField("cardExpiry");
1713
+ }
1558
1714
  }
1559
- class Vt {
1715
+ class $t {
1560
1716
  input;
1561
1717
  constructor(e) {
1562
1718
  const {
@@ -1565,30 +1721,33 @@ class Vt {
1565
1721
  onBlur: a,
1566
1722
  error: r,
1567
1723
  errorMsg: s,
1568
- checkoutProfile: n,
1724
+ checkoutProfile: o,
1569
1725
  translationFunc: l,
1570
1726
  autocomplete: c = "email"
1571
1727
  } = e;
1572
- this.input = new P({
1728
+ this.input = new V({
1573
1729
  name: "email",
1574
1730
  label: l("email"),
1575
- error: r,
1731
+ // Always hide error initially - we'll show it only on blur if needed
1732
+ error: !1,
1576
1733
  errorMsg: s,
1577
1734
  styles: {
1578
- color: n.styles.textColor,
1579
- borderRadius: `${n.styles.borderRadius}px`,
1580
- fontSize: n.styles.fontSize,
1581
- fontFamily: n.styles.fontFamily
1735
+ color: o.styles.textColor,
1736
+ borderRadius: `${o.styles.borderRadius}px`,
1737
+ fontSize: o.styles.fontSize,
1738
+ fontFamily: o.styles.fontFamily
1582
1739
  },
1583
1740
  placeholder: l("email"),
1584
1741
  type: "email",
1585
1742
  value: t,
1586
1743
  autocomplete: c,
1587
- // Wrap the original onChange to apply trim before calling it
1744
+ // Wrap the original onChange to apply trim and hide errors during typing
1588
1745
  onChange: (d) => {
1589
- this.trim(), i(d);
1746
+ this.input.setError(!1), this.trim(), i(d);
1590
1747
  }
1591
- }), this.input.addEventListener("blur", a);
1748
+ }), this.input.addEventListener("blur", (d) => {
1749
+ r && this.input.setError(r, s), a(d);
1750
+ });
1592
1751
  }
1593
1752
  getValue() {
1594
1753
  return this.input.getValue();
@@ -1601,7 +1760,7 @@ class Vt {
1601
1760
  return this.setValue(e), this;
1602
1761
  }
1603
1762
  setError(e, t) {
1604
- return this.input.setError(e, t), this;
1763
+ return document.activeElement !== this.input.getElement().querySelector("input") ? this.input.setError(e, t) : this.input.setError(!1), this;
1605
1764
  }
1606
1765
  getElement() {
1607
1766
  return this.input.getElement();
@@ -1609,9 +1768,12 @@ class Vt {
1609
1768
  appendTo(e) {
1610
1769
  return this.input.appendTo(e), this;
1611
1770
  }
1771
+ focus() {
1772
+ this.input.focus();
1773
+ }
1612
1774
  }
1613
- const $t = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='101px'%20height='32'%20viewBox='0%200%20101%2032'%20preserveAspectRatio='xMinYMin%20meet'%3e%3cpath%20fill='%23003087'%20d='M%2012.237%202.8%20L%204.437%202.8%20C%203.937%202.8%203.437%203.2%203.337%203.7%20L%200.237%2023.7%20C%200.137%2024.1%200.437%2024.4%200.837%2024.4%20L%204.537%2024.4%20C%205.037%2024.4%205.537%2024%205.637%2023.5%20L%206.437%2018.1%20C%206.537%2017.6%206.937%2017.2%207.537%2017.2%20L%2010.037%2017.2%20C%2015.137%2017.2%2018.137%2014.7%2018.937%209.8%20C%2019.237%207.7%2018.937%206%2017.937%204.8%20C%2016.837%203.5%2014.837%202.8%2012.237%202.8%20Z%20M%2013.137%2010.1%20C%2012.737%2012.9%2010.537%2012.9%208.537%2012.9%20L%207.337%2012.9%20L%208.137%207.7%20C%208.137%207.4%208.437%207.2%208.737%207.2%20L%209.237%207.2%20C%2010.637%207.2%2011.937%207.2%2012.637%208%20C%2013.137%208.4%2013.337%209.1%2013.137%2010.1%20Z'/%3e%3cpath%20fill='%23003087'%20d='M%2035.437%2010%20L%2031.737%2010%20C%2031.437%2010%2031.137%2010.2%2031.137%2010.5%20L%2030.937%2011.5%20L%2030.637%2011.1%20C%2029.837%209.9%2028.037%209.5%2026.237%209.5%20C%2022.137%209.5%2018.637%2012.6%2017.937%2017%20C%2017.537%2019.2%2018.037%2021.3%2019.337%2022.7%20C%2020.437%2024%2022.137%2024.6%2024.037%2024.6%20C%2027.337%2024.6%2029.237%2022.5%2029.237%2022.5%20L%2029.037%2023.5%20C%2028.937%2023.9%2029.237%2024.3%2029.637%2024.3%20L%2033.037%2024.3%20C%2033.537%2024.3%2034.037%2023.9%2034.137%2023.4%20L%2036.137%2010.6%20C%2036.237%2010.4%2035.837%2010%2035.437%2010%20Z%20M%2030.337%2017.2%20C%2029.937%2019.3%2028.337%2020.8%2026.137%2020.8%20C%2025.037%2020.8%2024.237%2020.5%2023.637%2019.8%20C%2023.037%2019.1%2022.837%2018.2%2023.037%2017.2%20C%2023.337%2015.1%2025.137%2013.6%2027.237%2013.6%20C%2028.337%2013.6%2029.137%2014%2029.737%2014.6%20C%2030.237%2015.3%2030.437%2016.2%2030.337%2017.2%20Z'/%3e%3cpath%20fill='%23003087'%20d='M%2055.337%2010%20L%2051.637%2010%20C%2051.237%2010%2050.937%2010.2%2050.737%2010.5%20L%2045.537%2018.1%20L%2043.337%2010.8%20C%2043.237%2010.3%2042.737%2010%2042.337%2010%20L%2038.637%2010%20C%2038.237%2010%2037.837%2010.4%2038.037%2010.9%20L%2042.137%2023%20L%2038.237%2028.4%20C%2037.937%2028.8%2038.237%2029.4%2038.737%2029.4%20L%2042.437%2029.4%20C%2042.837%2029.4%2043.137%2029.2%2043.337%2028.9%20L%2055.837%2010.9%20C%2056.137%2010.6%2055.837%2010%2055.337%2010%20Z'/%3e%3cpath%20fill='%23009cde'%20d='M%2067.737%202.8%20L%2059.937%202.8%20C%2059.437%202.8%2058.937%203.2%2058.837%203.7%20L%2055.737%2023.6%20C%2055.637%2024%2055.937%2024.3%2056.337%2024.3%20L%2060.337%2024.3%20C%2060.737%2024.3%2061.037%2024%2061.037%2023.7%20L%2061.937%2018%20C%2062.037%2017.5%2062.437%2017.1%2063.037%2017.1%20L%2065.537%2017.1%20C%2070.637%2017.1%2073.637%2014.6%2074.437%209.7%20C%2074.737%207.6%2074.437%205.9%2073.437%204.7%20C%2072.237%203.5%2070.337%202.8%2067.737%202.8%20Z%20M%2068.637%2010.1%20C%2068.237%2012.9%2066.037%2012.9%2064.037%2012.9%20L%2062.837%2012.9%20L%2063.637%207.7%20C%2063.637%207.4%2063.937%207.2%2064.237%207.2%20L%2064.737%207.2%20C%2066.137%207.2%2067.437%207.2%2068.137%208%20C%2068.637%208.4%2068.737%209.1%2068.637%2010.1%20Z'/%3e%3cpath%20fill='%23009cde'%20d='M%2090.937%2010%20L%2087.237%2010%20C%2086.937%2010%2086.637%2010.2%2086.637%2010.5%20L%2086.437%2011.5%20L%2086.137%2011.1%20C%2085.337%209.9%2083.537%209.5%2081.737%209.5%20C%2077.637%209.5%2074.137%2012.6%2073.437%2017%20C%2073.037%2019.2%2073.537%2021.3%2074.837%2022.7%20C%2075.937%2024%2077.637%2024.6%2079.537%2024.6%20C%2082.837%2024.6%2084.737%2022.5%2084.737%2022.5%20L%2084.537%2023.5%20C%2084.437%2023.9%2084.737%2024.3%2085.137%2024.3%20L%2088.537%2024.3%20C%2089.037%2024.3%2089.537%2023.9%2089.637%2023.4%20L%2091.637%2010.6%20C%2091.637%2010.4%2091.337%2010%2090.937%2010%20Z%20M%2085.737%2017.2%20C%2085.337%2019.3%2083.737%2020.8%2081.537%2020.8%20C%2080.437%2020.8%2079.637%2020.5%2079.037%2019.8%20C%2078.437%2019.1%2078.237%2018.2%2078.437%2017.2%20C%2078.737%2015.1%2080.537%2013.6%2082.637%2013.6%20C%2083.737%2013.6%2084.537%2014%2085.137%2014.6%20C%2085.737%2015.3%2085.937%2016.2%2085.737%2017.2%20Z'/%3e%3cpath%20fill='%23009cde'%20d='M%2095.337%203.3%20L%2092.137%2023.6%20C%2092.037%2024%2092.337%2024.3%2092.737%2024.3%20L%2095.937%2024.3%20C%2096.437%2024.3%2096.937%2023.9%2097.037%2023.4%20L%20100.237%203.5%20C%20100.337%203.1%20100.037%202.8%2099.637%202.8%20L%2096.037%202.8%20C%2095.637%202.8%2095.437%203%2095.337%203.3%20Z'/%3e%3c/svg%3e";
1614
- class Rt extends h {
1775
+ const Rt = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='101px'%20height='32'%20viewBox='0%200%20101%2032'%20preserveAspectRatio='xMinYMin%20meet'%3e%3cpath%20fill='%23003087'%20d='M%2012.237%202.8%20L%204.437%202.8%20C%203.937%202.8%203.437%203.2%203.337%203.7%20L%200.237%2023.7%20C%200.137%2024.1%200.437%2024.4%200.837%2024.4%20L%204.537%2024.4%20C%205.037%2024.4%205.537%2024%205.637%2023.5%20L%206.437%2018.1%20C%206.537%2017.6%206.937%2017.2%207.537%2017.2%20L%2010.037%2017.2%20C%2015.137%2017.2%2018.137%2014.7%2018.937%209.8%20C%2019.237%207.7%2018.937%206%2017.937%204.8%20C%2016.837%203.5%2014.837%202.8%2012.237%202.8%20Z%20M%2013.137%2010.1%20C%2012.737%2012.9%2010.537%2012.9%208.537%2012.9%20L%207.337%2012.9%20L%208.137%207.7%20C%208.137%207.4%208.437%207.2%208.737%207.2%20L%209.237%207.2%20C%2010.637%207.2%2011.937%207.2%2012.637%208%20C%2013.137%208.4%2013.337%209.1%2013.137%2010.1%20Z'/%3e%3cpath%20fill='%23003087'%20d='M%2035.437%2010%20L%2031.737%2010%20C%2031.437%2010%2031.137%2010.2%2031.137%2010.5%20L%2030.937%2011.5%20L%2030.637%2011.1%20C%2029.837%209.9%2028.037%209.5%2026.237%209.5%20C%2022.137%209.5%2018.637%2012.6%2017.937%2017%20C%2017.537%2019.2%2018.037%2021.3%2019.337%2022.7%20C%2020.437%2024%2022.137%2024.6%2024.037%2024.6%20C%2027.337%2024.6%2029.237%2022.5%2029.237%2022.5%20L%2029.037%2023.5%20C%2028.937%2023.9%2029.237%2024.3%2029.637%2024.3%20L%2033.037%2024.3%20C%2033.537%2024.3%2034.037%2023.9%2034.137%2023.4%20L%2036.137%2010.6%20C%2036.237%2010.4%2035.837%2010%2035.437%2010%20Z%20M%2030.337%2017.2%20C%2029.937%2019.3%2028.337%2020.8%2026.137%2020.8%20C%2025.037%2020.8%2024.237%2020.5%2023.637%2019.8%20C%2023.037%2019.1%2022.837%2018.2%2023.037%2017.2%20C%2023.337%2015.1%2025.137%2013.6%2027.237%2013.6%20C%2028.337%2013.6%2029.137%2014%2029.737%2014.6%20C%2030.237%2015.3%2030.437%2016.2%2030.337%2017.2%20Z'/%3e%3cpath%20fill='%23003087'%20d='M%2055.337%2010%20L%2051.637%2010%20C%2051.237%2010%2050.937%2010.2%2050.737%2010.5%20L%2045.537%2018.1%20L%2043.337%2010.8%20C%2043.237%2010.3%2042.737%2010%2042.337%2010%20L%2038.637%2010%20C%2038.237%2010%2037.837%2010.4%2038.037%2010.9%20L%2042.137%2023%20L%2038.237%2028.4%20C%2037.937%2028.8%2038.237%2029.4%2038.737%2029.4%20L%2042.437%2029.4%20C%2042.837%2029.4%2043.137%2029.2%2043.337%2028.9%20L%2055.837%2010.9%20C%2056.137%2010.6%2055.837%2010%2055.337%2010%20Z'/%3e%3cpath%20fill='%23009cde'%20d='M%2067.737%202.8%20L%2059.937%202.8%20C%2059.437%202.8%2058.937%203.2%2058.837%203.7%20L%2055.737%2023.6%20C%2055.637%2024%2055.937%2024.3%2056.337%2024.3%20L%2060.337%2024.3%20C%2060.737%2024.3%2061.037%2024%2061.037%2023.7%20L%2061.937%2018%20C%2062.037%2017.5%2062.437%2017.1%2063.037%2017.1%20L%2065.537%2017.1%20C%2070.637%2017.1%2073.637%2014.6%2074.437%209.7%20C%2074.737%207.6%2074.437%205.9%2073.437%204.7%20C%2072.237%203.5%2070.337%202.8%2067.737%202.8%20Z%20M%2068.637%2010.1%20C%2068.237%2012.9%2066.037%2012.9%2064.037%2012.9%20L%2062.837%2012.9%20L%2063.637%207.7%20C%2063.637%207.4%2063.937%207.2%2064.237%207.2%20L%2064.737%207.2%20C%2066.137%207.2%2067.437%207.2%2068.137%208%20C%2068.637%208.4%2068.737%209.1%2068.637%2010.1%20Z'/%3e%3cpath%20fill='%23009cde'%20d='M%2090.937%2010%20L%2087.237%2010%20C%2086.937%2010%2086.637%2010.2%2086.637%2010.5%20L%2086.437%2011.5%20L%2086.137%2011.1%20C%2085.337%209.9%2083.537%209.5%2081.737%209.5%20C%2077.637%209.5%2074.137%2012.6%2073.437%2017%20C%2073.037%2019.2%2073.537%2021.3%2074.837%2022.7%20C%2075.937%2024%2077.637%2024.6%2079.537%2024.6%20C%2082.837%2024.6%2084.737%2022.5%2084.737%2022.5%20L%2084.537%2023.5%20C%2084.437%2023.9%2084.737%2024.3%2085.137%2024.3%20L%2088.537%2024.3%20C%2089.037%2024.3%2089.537%2023.9%2089.637%2023.4%20L%2091.637%2010.6%20C%2091.637%2010.4%2091.337%2010%2090.937%2010%20Z%20M%2085.737%2017.2%20C%2085.337%2019.3%2083.737%2020.8%2081.537%2020.8%20C%2080.437%2020.8%2079.637%2020.5%2079.037%2019.8%20C%2078.437%2019.1%2078.237%2018.2%2078.437%2017.2%20C%2078.737%2015.1%2080.537%2013.6%2082.637%2013.6%20C%2083.737%2013.6%2084.537%2014%2085.137%2014.6%20C%2085.737%2015.3%2085.937%2016.2%2085.737%2017.2%20Z'/%3e%3cpath%20fill='%23009cde'%20d='M%2095.337%203.3%20L%2092.137%2023.6%20C%2092.037%2024%2092.337%2024.3%2092.737%2024.3%20L%2095.937%2024.3%20C%2096.437%2024.3%2096.937%2023.9%2097.037%2023.4%20L%20100.237%203.5%20C%20100.337%203.1%20100.037%202.8%2099.637%202.8%20L%2096.037%202.8%20C%2095.637%202.8%2095.437%203%2095.337%203.3%20Z'/%3e%3c/svg%3e";
1776
+ class Bt extends h {
1615
1777
  formData;
1616
1778
  onSubmit;
1617
1779
  isSubmitting = !1;
@@ -1622,7 +1784,7 @@ class Rt extends h {
1622
1784
  const a = document.createElement("div");
1623
1785
  a.className = "paypal-icon-container";
1624
1786
  const r = document.createElement("img");
1625
- r.src = $t, r.style.width = "69px", r.style.height = "22px", r.style.maxWidth = "100%", r.style.display = "block", r.style.height = "auto", a.appendChild(r), this.getElement().appendChild(a), i && this.getElement().addEventListener("click", () => this.handleSubmit());
1787
+ r.src = Rt, r.style.width = "69px", r.style.height = "22px", r.style.maxWidth = "100%", r.style.display = "block", r.style.height = "auto", a.appendChild(r), this.getElement().appendChild(a), i && this.getElement().addEventListener("click", () => this.handleSubmit());
1626
1788
  }
1627
1789
  async handleSubmit() {
1628
1790
  if (!(!this.onSubmit || this.isSubmitting)) {
@@ -1643,7 +1805,7 @@ class Rt extends h {
1643
1805
  return this.isSubmitting = e, this.getElement().style.opacity = e ? "0.7" : "1", this;
1644
1806
  }
1645
1807
  }
1646
- class Bt extends h {
1808
+ class Ht extends h {
1647
1809
  paymentMethods;
1648
1810
  constructor(e) {
1649
1811
  const {
@@ -1657,26 +1819,24 @@ class Bt extends h {
1657
1819
  return;
1658
1820
  }
1659
1821
  if (r === void 0) {
1660
- console.log(
1661
- "[PaymentMethods] No supportedPaymentMethods provided, hiding payment methods"
1662
- ), this.getElement().style.display = "none";
1822
+ this.getElement().style.display = "none";
1663
1823
  return;
1664
1824
  }
1665
1825
  const s = Object.entries(
1666
1826
  t.additionalPaymentMethods
1667
- ).filter(([n, l]) => {
1668
- const c = l.enabled, d = r ? r[n] === !0 : !0;
1827
+ ).filter(([o, l]) => {
1828
+ const c = l.enabled, d = r ? r[o] === !0 : !0;
1669
1829
  return c && d;
1670
- }).sort((n, l) => n[1].order - l[1].order);
1830
+ }).sort((o, l) => o[1].order - l[1].order);
1671
1831
  if (s.length === 0) {
1672
1832
  this.getElement().style.display = "none";
1673
1833
  return;
1674
1834
  }
1675
- for (const [n] of s)
1676
- switch (n) {
1835
+ for (const [o] of s)
1836
+ switch (o) {
1677
1837
  case "paypal": {
1678
1838
  if (a) {
1679
- const l = new Rt({
1839
+ const l = new Bt({
1680
1840
  checkoutProfile: t,
1681
1841
  formData: i,
1682
1842
  onSubmit: a
@@ -1698,7 +1858,7 @@ class Bt extends h {
1698
1858
  // break;
1699
1859
  default:
1700
1860
  console.warn(
1701
- `[PaymentMethods] Unsupported payment method: ${n}`
1861
+ `[PaymentMethods] Unsupported payment method: ${o}`
1702
1862
  );
1703
1863
  break;
1704
1864
  }
@@ -1712,7 +1872,7 @@ class Bt extends h {
1712
1872
  }
1713
1873
  }
1714
1874
  const Ot = 17;
1715
- class Ht extends h {
1875
+ class qt extends h {
1716
1876
  styles;
1717
1877
  isHovered = !1;
1718
1878
  constructor(e) {
@@ -1739,7 +1899,7 @@ class Kt {
1739
1899
  button;
1740
1900
  constructor(e) {
1741
1901
  const { disabled: t, checkoutProfile: i, translationFunc: a } = e;
1742
- this.button = new Ht({
1902
+ this.button = new qt({
1743
1903
  text: a(
1744
1904
  `buttonTexts.${i?.layout.actionButton.translationKey}`
1745
1905
  ),
@@ -1767,7 +1927,7 @@ class Kt {
1767
1927
  }
1768
1928
  }
1769
1929
  const jt = "https://test-htp.tokenex.com/Iframe/Iframe-v3.min.js", Ut = "https://htp.tokenex.com/iframe/iframe-v3.min.js";
1770
- class qt extends h {
1930
+ class _t extends h {
1771
1931
  options;
1772
1932
  isSubmitting = !1;
1773
1933
  scriptCleanup;
@@ -1781,17 +1941,23 @@ class qt extends h {
1781
1941
  paymentMethods;
1782
1942
  spinner;
1783
1943
  alert;
1944
+ // Focus management
1945
+ focusManager = new wt();
1946
+ // Event handler references
1947
+ emailFocusHandler;
1948
+ cardExpiryFocusHandler;
1949
+ nameFocusHandler;
1784
1950
  // factories
1785
1951
  formManager = X();
1786
1952
  checkoutProfile;
1787
- translation = z();
1953
+ translation = P();
1788
1954
  iframeHook;
1789
1955
  constructor(e) {
1790
1956
  super("form", ["form-container"]), this.options = e, this.checkoutProfile = _({
1791
1957
  apiKey: e.apiKey,
1792
1958
  profileId: e.profileId,
1793
1959
  environment: e.environment
1794
- }), e.locale && this.translation.setLocale(e.locale), this.getElement().addEventListener("submit", this.handleSubmit), this.getElement().addEventListener("keydown", this.handleKeyDown), this.formManager.subscribe(this.handleFormStateChange), this.checkoutProfile.subscribe(this.handleProfileStateChange), this.initializeForm(), this.appendTo(e.container);
1960
+ }), e.locale && this.translation.setLocale(e.locale), this.localTouchedFields = /* @__PURE__ */ new Set(), this.getElement().addEventListener("submit", this.handleSubmit), this.getElement().addEventListener("keydown", this.handleKeyDown), this.formManager.subscribe(this.handleFormStateChange), this.checkoutProfile.subscribe(this.handleProfileStateChange), this.initializeForm(), this.appendTo(e.container);
1795
1961
  }
1796
1962
  _getFormStateData() {
1797
1963
  const e = this.formManager.getFormState();
@@ -1806,22 +1972,25 @@ class qt extends h {
1806
1972
  };
1807
1973
  }
1808
1974
  handleFormStateChange = () => {
1809
- this.updateFormUI();
1975
+ const { formData: e, errors: t, touched: i } = this.formManager.getFormState(), a = this.iframeHook?.getState() || {};
1976
+ Object.keys(i).forEach((r) => {
1977
+ i[r] && this.localTouchedFields.add(r);
1978
+ }), this.focusManager.handleStateUpdate(e, t, i, a), this.updateFormUI();
1810
1979
  };
1811
1980
  handleProfileStateChange = (e) => {
1812
1981
  if (!e.isLoading)
1813
1982
  if (e.checkoutProfile)
1814
1983
  try {
1815
- if (console.log("[Form] Profile loaded, starting render."), e.checkoutProfile.styles?.fontFamily)
1984
+ if (e.checkoutProfile.styles?.fontFamily)
1816
1985
  try {
1817
- const { cleanup: t } = St({
1986
+ const { cleanup: t } = xt({
1818
1987
  fontFamily: e.checkoutProfile.styles.fontFamily
1819
1988
  });
1820
1989
  this.fontCleanup = t;
1821
1990
  } catch (t) {
1822
1991
  console.error("Error loading Google Font:", t);
1823
1992
  }
1824
- this.renderFormComponents(), console.log("[Form] Initializing TokenEx iframe..."), this.initializeTokenExIframe().catch((t) => {
1993
+ this.renderFormComponents(), this.initializeTokenExIframe().catch((t) => {
1825
1994
  console.error("Error initializing TokenEx iframe:", t);
1826
1995
  });
1827
1996
  } catch (t) {
@@ -1835,7 +2004,6 @@ class qt extends h {
1835
2004
  e.fontFamily && (this.getElement().style.fontFamily = e.fontFamily);
1836
2005
  }
1837
2006
  initializeTokenExIframe = async () => {
1838
- console.log("[Form] initializeTokenExIframe started.");
1839
2007
  const e = this.checkoutProfile.getState();
1840
2008
  if (!e.checkoutProfile) {
1841
2009
  console.error("Cannot initialize iframe: No checkout profile available");
@@ -1843,15 +2011,13 @@ class qt extends h {
1843
2011
  }
1844
2012
  if (!this.iframeHook)
1845
2013
  try {
1846
- if (await this.tokenExScriptPromise, console.log(
1847
- "[Form] TokenEx script is loaded, proceeding with iframe initialization."
1848
- ), !("TokenEx" in globalThis)) {
2014
+ if (await this.tokenExScriptPromise, !("TokenEx" in globalThis)) {
1849
2015
  console.error(
1850
2016
  "[Form] TokenEx script loaded but TokenEx is not available in globalThis."
1851
2017
  );
1852
2018
  return;
1853
2019
  }
1854
- const { inputStyles: t, formContainerStyle: i } = wt(
2020
+ const { inputStyles: t, formContainerStyle: i } = Mt(
1855
2021
  e.checkoutProfile
1856
2022
  );
1857
2023
  this.applyFormContainerStyles(i);
@@ -1871,7 +2037,7 @@ class qt extends h {
1871
2037
  },
1872
2038
  environment: this.options.environment,
1873
2039
  paymentId: this.options.paymentId || ""
1874
- }), this.iframeHook?.subscribe(this.handleIframeStateChange), console.log("[Form] Calling iframeHook.initialize()."), await this.iframeHook?.initialize(), console.log("[Form] iframeHook.initialize() finished.");
2040
+ }), this.iframeHook?.subscribe(this.handleIframeStateChange), await this.iframeHook?.initialize();
1875
2041
  } catch (t) {
1876
2042
  throw console.error("Failed to initialize payment form:", t), t;
1877
2043
  }
@@ -1881,10 +2047,10 @@ class qt extends h {
1881
2047
  isCvvTouched = !1;
1882
2048
  handleIframeStateChange = (e) => {
1883
2049
  if (e.iframeConfig?.supportedPaymentMethods && this.paymentMethods) {
1884
- const t = this.checkoutProfile.getState();
1885
- t.checkoutProfile && (this.element.removeChild(this.paymentMethods.getElement()), this.createPaymentMethods(t.checkoutProfile, !0));
2050
+ const r = this.checkoutProfile.getState();
2051
+ r.checkoutProfile && (this.element.removeChild(this.paymentMethods.getElement()), this.createPaymentMethods(r.checkoutProfile, !0));
1886
2052
  }
1887
- this.cardSection && (e.isFocused && (this.isCcTouched = !0), e.isCvvFocused && (this.isCvvTouched = !0), this.cardSection.updateCardNumberValidation(
2053
+ this.cardSection && (e.isFocused && (this.isCcTouched = !0, this.handleFieldFocus("cardNumber")), e.isCvvFocused && (this.isCvvTouched = !0, this.handleFieldFocus("cardCvv")), this.cardSection.updateCardNumberValidation(
1888
2054
  e.isFocused,
1889
2055
  e.isCcValid,
1890
2056
  this.translation.t,
@@ -1895,6 +2061,8 @@ class qt extends h {
1895
2061
  this.translation.t,
1896
2062
  this.isCvvTouched
1897
2063
  ), this.cardSection.updateCardType(e.possibleCardType), this.cardSection.setLoading(e.loadingIframe)), e.loadingIframe || this.setLoadingState(!1), this.submitButton && this.submitButton.setDisabled(this.isFormDisabled());
2064
+ const { formData: t, errors: i, touched: a } = this.formManager.getFormState();
2065
+ this.focusManager.handleStateUpdate(t, i, a, e);
1898
2066
  };
1899
2067
  createCardSection = (e) => {
1900
2068
  if (!this.cardSection)
@@ -1926,20 +2094,28 @@ class qt extends h {
1926
2094
  onChange: this.handleChange,
1927
2095
  onBlur: this.handleBlur,
1928
2096
  translationFunc: this.translation.t
2097
+ });
2098
+ const s = this.cardSection.getElement().querySelector('input[name="cardExpiry"]');
2099
+ s && (this.cardExpiryFocusHandler = () => this.handleFieldFocus("cardExpiry"), s.addEventListener(
2100
+ "focus",
2101
+ this.cardExpiryFocusHandler
2102
+ )), this.focusManager.registerField("cardExpiry", {
2103
+ focus: () => this.cardSection?.focusField("cardExpiry")
2104
+ }), this.focusManager.registerField("cardNumber", {
2105
+ focus: () => this.iframeHook?.focusCardNumber()
2106
+ }), this.focusManager.registerField("cardCvv", {
2107
+ focus: () => this.iframeHook?.focusCvv()
1929
2108
  }), this.element.appendChild(this.cardSection.getElement());
1930
2109
  } catch (t) {
1931
2110
  console.error("Error creating card section:", t), this.setErrorMessage("Card section temporarily unavailable");
1932
2111
  }
1933
2112
  };
1934
2113
  initializeForm() {
1935
- console.log("[Form] initializeForm started."), this.setLoadingState(!0), this.options.errorMsg && this.setErrorMessage(this.options.errorMsg);
1936
- const e = this.options.environment === "test" ? jt : Ut;
1937
- console.log("[Form] Appending TokenEx script.");
1938
- const { cleanup: t, isLoaded: i } = Ft({
2114
+ this.setLoadingState(!0), this.options.errorMsg && this.setErrorMessage(this.options.errorMsg);
2115
+ const e = this.options.environment === "test" ? jt : Ut, { cleanup: t, isLoaded: i } = Ft({
1939
2116
  scriptSrc: e
1940
2117
  });
1941
2118
  this.scriptCleanup = t, this.tokenExScriptPromise = i, i.then(() => {
1942
- console.log("[Form] TokenEx script loaded successfully.");
1943
2119
  }).catch(() => {
1944
2120
  this.setLoadingState(!1), this.setErrorMessage(
1945
2121
  "Failed to load payment system. Please try again later."
@@ -1947,37 +2123,35 @@ class qt extends h {
1947
2123
  });
1948
2124
  }
1949
2125
  renderFormComponents() {
1950
- if (console.log("[Form] renderFormComponents started."), this.emailField) {
1951
- console.log("[Form] Components already rendered, skipping.");
2126
+ if (this.emailField)
1952
2127
  return;
1953
- }
1954
2128
  const e = this.checkoutProfile.getState();
1955
2129
  if (!e.checkoutProfile) {
1956
2130
  this.setErrorMessage("Failed to load checkout configuration");
1957
2131
  return;
1958
2132
  }
1959
2133
  try {
1960
- console.log("[Form] Creating payment methods."), this.createPaymentMethods(e.checkoutProfile);
2134
+ this.createPaymentMethods(e.checkoutProfile);
1961
2135
  } catch (t) {
1962
2136
  console.error("Failed to create payment methods:", t);
1963
2137
  }
1964
2138
  try {
1965
- console.log("[Form] Creating email field."), this.createEmailField(e.checkoutProfile);
2139
+ this.createEmailField(e.checkoutProfile);
1966
2140
  } catch (t) {
1967
2141
  console.error("Failed to create email field:", t);
1968
2142
  }
1969
2143
  try {
1970
- console.log("[Form] Creating card section."), this.createCardSection(e.checkoutProfile);
2144
+ this.createCardSection(e.checkoutProfile);
1971
2145
  } catch (t) {
1972
2146
  console.error("Failed to create card section:", t);
1973
2147
  }
1974
2148
  try {
1975
- console.log("[Form] Creating cardholder section."), this.createCardholderSection(e.checkoutProfile);
2149
+ this.createCardholderSection(e.checkoutProfile);
1976
2150
  } catch (t) {
1977
2151
  console.error("Failed to create cardholder section:", t);
1978
2152
  }
1979
2153
  try {
1980
- console.log("[Form] Creating submit button."), this.createSubmitButton(e.checkoutProfile);
2154
+ this.createSubmitButton(e.checkoutProfile);
1981
2155
  } catch (t) {
1982
2156
  console.error("Failed to create submit button:", t);
1983
2157
  }
@@ -1987,7 +2161,7 @@ class qt extends h {
1987
2161
  if (!e?.additionalPaymentMethods)
1988
2162
  return;
1989
2163
  const i = this.iframeHook?.getState().iframeConfig?.supportedPaymentMethods, { formData: a } = this._getFormStateData();
1990
- this.paymentMethods = new Bt({
2164
+ this.paymentMethods = new Ht({
1991
2165
  checkoutProfile: e,
1992
2166
  formData: a,
1993
2167
  supportedPaymentMethods: i,
@@ -2005,7 +2179,7 @@ class qt extends h {
2005
2179
  createEmailField(e) {
2006
2180
  try {
2007
2181
  const { formData: t, errors: i, touched: a } = this._getFormStateData();
2008
- this.emailField = new Vt({
2182
+ this.emailField = new $t({
2009
2183
  value: t.email,
2010
2184
  onChange: this.handleChange,
2011
2185
  onBlur: this.handleBlur,
@@ -2013,7 +2187,7 @@ class qt extends h {
2013
2187
  errorMsg: i.email,
2014
2188
  checkoutProfile: e,
2015
2189
  translationFunc: this.translation.t
2016
- }), this.element.appendChild(this.emailField.getElement());
2190
+ }), this.emailFocusHandler = () => this.handleFieldFocus("email"), this.emailField.getElement().addEventListener("focus", this.emailFocusHandler, !0), this.focusManager.registerField("email", this.emailField), this.element.appendChild(this.emailField.getElement());
2017
2191
  } catch (t) {
2018
2192
  throw console.error("Error creating email field:", t), t;
2019
2193
  }
@@ -2029,7 +2203,9 @@ class qt extends h {
2029
2203
  errorMsg: i.name,
2030
2204
  checkoutProfile: e,
2031
2205
  translationFunc: this.translation.t
2032
- }), this.element.appendChild(this.cardholderSection.getElement());
2206
+ });
2207
+ const r = this.cardholderSection.getElement().querySelector('input[name="name"]');
2208
+ r && (this.nameFocusHandler = () => this.handleFieldFocus("name"), r.addEventListener("focus", this.nameFocusHandler)), this.focusManager.registerField("name", this.cardholderSection), this.element.appendChild(this.cardholderSection.getElement());
2033
2209
  } catch (t) {
2034
2210
  throw console.error("Error creating cardholder section:", t), t;
2035
2211
  }
@@ -2045,13 +2221,24 @@ class qt extends h {
2045
2221
  throw console.error("Error creating submit button:", t), t;
2046
2222
  }
2047
2223
  }
2224
+ // Track locally touched fields to avoid redundant state checks
2225
+ localTouchedFields = /* @__PURE__ */ new Set();
2048
2226
  handleChange = (e) => {
2049
- const t = e.target, { name: i, value: a } = t;
2050
- this.formManager.handleChange(i, a);
2227
+ const t = e.target, { name: i, value: a } = t, r = i;
2228
+ this.formManager.handleChange(r, a), this.localTouchedFields.has(r) || (this.localTouchedFields.add(r), this.formManager.handleBlur(r, a));
2229
+ const { formData: s, errors: o, touched: l } = this.formManager.getFormState(), c = this.iframeHook?.getState() || {};
2230
+ this.focusManager.handleStateUpdate(s, o, l, c);
2051
2231
  };
2052
2232
  handleBlur = (e) => {
2053
- const t = e.target, { name: i, value: a } = t;
2054
- this.formManager.handleBlur(i, a);
2233
+ const t = e.target, { name: i, value: a } = t, r = i;
2234
+ this.localTouchedFields.add(r), this.formManager.handleBlur(r, a);
2235
+ const { formData: s, errors: o, touched: l } = this.formManager.getFormState(), c = this.iframeHook?.getState() || {};
2236
+ l[r] || this.focusManager.handleStateUpdate(
2237
+ s,
2238
+ o,
2239
+ l,
2240
+ c
2241
+ );
2055
2242
  };
2056
2243
  updateFormUI() {
2057
2244
  const e = this.formManager.getFormState();
@@ -2086,10 +2273,10 @@ class qt extends h {
2086
2273
  this.options.onLoadingStateChange(e);
2087
2274
  return;
2088
2275
  }
2089
- e ? (this.hideSpinner(), this.spinner = new V(), this.element.appendChild(this.spinner.getElement())) : this.hideSpinner();
2276
+ e ? (this.hideSpinner(), this.spinner = new $(), this.element.appendChild(this.spinner.getElement())) : this.hideSpinner();
2090
2277
  }
2091
2278
  showSpinner(e) {
2092
- this.hideSpinner(), this.spinner = new V({ text: e }), this.element.appendChild(this.spinner.getElement());
2279
+ this.hideSpinner(), this.spinner = new $({ text: e }), this.element.appendChild(this.spinner.getElement());
2093
2280
  }
2094
2281
  hideSpinner() {
2095
2282
  this.spinner && (this.spinner.getElement().remove(), this.spinner = void 0);
@@ -2143,13 +2330,34 @@ class qt extends h {
2143
2330
  * Clean up resources when the form is destroyed
2144
2331
  */
2145
2332
  destroy() {
2146
- this.scriptCleanup && (this.scriptCleanup(), this.scriptCleanup = void 0), this.fontCleanup && (this.fontCleanup(), this.fontCleanup = void 0), this.iframeHook && this.iframeHook.cleanup(), this.getElement().removeEventListener("submit", this.handleSubmit), this.getElement().removeEventListener("keydown", this.handleKeyDown), this.getElement().removeEventListener("keydown", this.handleKeyDown), this.emailField && (this.emailField.getElement().remove(), this.emailField = void 0), this.cardSection && (this.cardSection.getElement().remove(), this.cardSection = void 0), this.cardholderSection && (this.cardholderSection.getElement().remove(), this.cardholderSection = void 0), this.submitButton && (this.submitButton.getElement().remove(), this.submitButton = void 0), this.paymentMethods && (this.paymentMethods.getElement().remove(), this.paymentMethods = void 0), this.spinner && (this.spinner.getElement().remove(), this.spinner = void 0), this.alert && (this.alert.getElement().remove(), this.alert = void 0), this.getElement().remove();
2333
+ if (this.scriptCleanup && (this.scriptCleanup(), this.scriptCleanup = void 0), this.fontCleanup && (this.fontCleanup(), this.fontCleanup = void 0), this.iframeHook && this.iframeHook.cleanup(), this.localTouchedFields.clear(), this.getElement().removeEventListener("submit", this.handleSubmit), this.getElement().removeEventListener("keydown", this.handleKeyDown), this.getElement().removeEventListener("keydown", this.handleKeyDown), this.emailField) {
2334
+ const e = this.emailField.getElement().querySelector('input[name="email"]');
2335
+ e && this.emailFocusHandler && e.removeEventListener("focus", this.emailFocusHandler), this.emailField.getElement().remove(), this.emailField = void 0;
2336
+ }
2337
+ if (this.cardSection) {
2338
+ const e = this.cardSection.getElement().querySelector('input[name="cardExpiry"]');
2339
+ e && this.cardExpiryFocusHandler && e.removeEventListener(
2340
+ "focus",
2341
+ this.cardExpiryFocusHandler
2342
+ ), this.cardSection.getElement().remove(), this.cardSection = void 0;
2343
+ }
2344
+ if (this.cardholderSection) {
2345
+ const e = this.cardholderSection.getElement().querySelector('input[name="name"]');
2346
+ e && this.nameFocusHandler && e.removeEventListener("focus", this.nameFocusHandler), this.cardholderSection.getElement().remove(), this.cardholderSection = void 0;
2347
+ }
2348
+ this.submitButton && (this.submitButton.getElement().remove(), this.submitButton = void 0), this.paymentMethods && (this.paymentMethods.getElement().remove(), this.paymentMethods = void 0), this.spinner && (this.spinner.getElement().remove(), this.spinner = void 0), this.alert && (this.alert.getElement().remove(), this.alert = void 0), this.getElement().remove();
2147
2349
  }
2148
2350
  handleKeyDown = (e) => {
2149
2351
  e.key === "Enter" && !this.isFormDisabled() && (e.target instanceof HTMLTextAreaElement || (e.preventDefault(), this.handleSubmit(e)));
2150
2352
  };
2353
+ /**
2354
+ * Handle focus events on form fields and update focus manager
2355
+ */
2356
+ handleFieldFocus = (e) => {
2357
+ this.focusManager.handleFieldFocus(e);
2358
+ };
2151
2359
  }
2152
- class _t {
2360
+ class Gt {
2153
2361
  container = null;
2154
2362
  options;
2155
2363
  onSubmit;
@@ -2164,7 +2372,7 @@ class _t {
2164
2372
  this.container && this.form && (this.form && e.errorMsg && !this.options.disableErrorMessages ? this.form.setErrorMessage(e.errorMsg) : this.renderForm(e.errorMsg));
2165
2373
  }
2166
2374
  renderForm(e) {
2167
- this.container && (this.form && (this.form.destroy(), this.form = null), this.form = new qt({
2375
+ this.container && (this.form && (this.form.destroy(), this.form = null), this.form = new _t({
2168
2376
  apiKey: this.options.apiKey,
2169
2377
  onSubmit: this.onSubmit,
2170
2378
  locale: this.options.locale,
@@ -2180,7 +2388,7 @@ class _t {
2180
2388
  this.form && (this.form.destroy(), this.form = null);
2181
2389
  }
2182
2390
  }
2183
- class Gt {
2391
+ class Yt {
2184
2392
  state;
2185
2393
  listeners = /* @__PURE__ */ new Set();
2186
2394
  constructor(e) {
@@ -2202,20 +2410,20 @@ class Gt {
2202
2410
  this.listeners.forEach((t) => t(e));
2203
2411
  }
2204
2412
  }
2205
- const Yt = "en";
2206
- class Zt {
2413
+ const Zt = "en";
2414
+ class Jt {
2207
2415
  config;
2208
2416
  apiService;
2209
2417
  formManager;
2210
2418
  stateManager;
2211
2419
  constructor(e) {
2212
- this.config = this.validateConfig(e), this.apiService = new H(
2420
+ this.config = this.validateConfig(e), this.apiService = new O(
2213
2421
  this.config.apiKey,
2214
2422
  this.config.environment
2215
- ), this.stateManager = new Gt({
2423
+ ), this.stateManager = new Yt({
2216
2424
  mounted: !1,
2217
2425
  form: null
2218
- }), this.formManager = new _t(
2426
+ }), this.formManager = new Gt(
2219
2427
  {
2220
2428
  locale: this.config.locale,
2221
2429
  apiKey: this.config.apiKey,
@@ -2240,7 +2448,7 @@ class Zt {
2240
2448
  paymentId: e.paymentId,
2241
2449
  returnUrl: e.returnUrl,
2242
2450
  environment: e.environment,
2243
- locale: e.locale || Yt,
2451
+ locale: e.locale || Zt,
2244
2452
  disableErrorMessages: e.disableErrorMessages ?? !1,
2245
2453
  manualActionHandling: e.manualActionHandling ?? !1,
2246
2454
  callbacks: {
@@ -2303,14 +2511,14 @@ class Zt {
2303
2511
  t && this.formManager.update({ errorMsg: e.details?.message });
2304
2512
  }
2305
2513
  }
2306
- typeof globalThis < "u" && (globalThis.OdusCheckout = Zt);
2514
+ typeof globalThis < "u" && (globalThis.OdusCheckout = Jt);
2307
2515
  export {
2308
- Zt as OdusCheckout,
2516
+ Jt as OdusCheckout,
2309
2517
  ce as deLocale,
2310
2518
  ve as enLocale,
2311
- Me as esLocale,
2312
- Ve as frLocale,
2313
- qe as itLocale,
2519
+ Le as esLocale,
2520
+ De as frLocale,
2521
+ Ue as itLocale,
2314
2522
  et as plLocale,
2315
2523
  ct as ptLocale,
2316
2524
  vt as trLocale