@odus/checkout 0.5.9 → 0.6.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,89 +1,89 @@
1
- const k = (s) => s === "test" ? "https://sandbox-api.odus.com" : s === "live" ? "https://api.odus.com" : "http://localhost:3000";
2
- class $ {
1
+ const I = (o) => o === "test" ? "https://sandbox-api.odus.com" : o === "live" ? "https://api.odus.com" : "http://localhost:3000";
2
+ class B {
3
3
  apiKey;
4
4
  baseUrl;
5
5
  browserInfo;
6
- constructor(e, t, a) {
7
- this.apiKey = e, this.baseUrl = k(t), this.browserInfo = a || { userAgent: navigator.userAgent };
6
+ constructor(e, t, i) {
7
+ this.apiKey = e, this.baseUrl = I(t), this.browserInfo = i || { userAgent: navigator.userAgent };
8
8
  }
9
9
  async fetchApi({
10
10
  endpoint: e,
11
11
  method: t = "POST",
12
- body: a,
13
- customHeaders: r = {}
12
+ body: i,
13
+ customHeaders: a = {}
14
14
  }) {
15
- const i = {
15
+ const r = {
16
16
  Authorization: `Bearer ${this.apiKey}`,
17
17
  "Content-Type": "application/json",
18
- ...r
18
+ ...a
19
19
  };
20
20
  try {
21
- const n = await fetch(`${this.baseUrl}${e}`, {
21
+ const s = await fetch(`${this.baseUrl}${e}`, {
22
22
  method: t,
23
- headers: i,
24
- body: a ? JSON.stringify(a) : void 0
23
+ headers: r,
24
+ body: i ? JSON.stringify(i) : void 0
25
25
  });
26
- if (!n.ok) {
27
- let o;
26
+ if (!s.ok) {
27
+ let n;
28
28
  try {
29
- o = await n.json();
29
+ n = await s.json();
30
30
  } catch (c) {
31
31
  console.log("error", c);
32
32
  }
33
33
  throw {
34
- message: o?.message[0] || `API request failed: ${n.status} ${n.statusText}`,
35
- status: n.status,
36
- statusText: n.statusText,
37
- details: o
34
+ message: n?.message[0] || `API request failed: ${s.status} ${s.statusText}`,
35
+ status: s.status,
36
+ statusText: s.statusText,
37
+ details: n
38
38
  };
39
39
  }
40
- return n.json();
41
- } catch (n) {
42
- throw n instanceof Error ? {
43
- message: n.message,
40
+ return s.json();
41
+ } catch (s) {
42
+ throw s instanceof Error ? {
43
+ message: s.message,
44
44
  status: 0,
45
45
  // Use 0 for network/client errors
46
46
  statusText: "Network Error",
47
- details: { message: n.message }
48
- } : n;
47
+ details: { message: s.message }
48
+ } : s;
49
49
  }
50
50
  }
51
51
  async authorizePayment({
52
52
  paymentId: e,
53
53
  checkoutKey: t,
54
- formData: a,
55
- token: r,
56
- returnUrl: i
54
+ formData: i,
55
+ token: a,
56
+ returnUrl: r
57
57
  }) {
58
- let n = {};
59
- if (r && a) {
60
- const o = a.cardExpiry.replace(/\s+/g, "").split("/"), l = o[0], c = o[1];
61
- n = {
58
+ let s = {};
59
+ if (a && i) {
60
+ const n = i.cardExpiry.replace(/\s+/g, "").split("/"), l = n[0], c = n[1];
61
+ s = {
62
62
  paymentMethodData: {
63
63
  type: "card",
64
64
  card: {
65
- token: r,
65
+ token: a,
66
66
  expMonth: l,
67
67
  expYear: `20${c}`,
68
- cardholderName: a.name
68
+ cardholderName: i.name
69
69
  }
70
70
  },
71
71
  customerData: {
72
- email: a.email,
73
- name: a.name
72
+ email: i.email,
73
+ name: i.name
74
74
  },
75
75
  context: {
76
- returnUrl: i,
76
+ returnUrl: r,
77
77
  browserInfo: this.browserInfo
78
78
  }
79
79
  };
80
80
  } else
81
- n = {
81
+ s = {
82
82
  paymentMethodData: {
83
83
  type: "paypal"
84
84
  },
85
85
  context: {
86
- returnUrl: i,
86
+ returnUrl: r,
87
87
  browserInfo: this.browserInfo
88
88
  }
89
89
  };
@@ -92,27 +92,27 @@ class $ {
92
92
  customHeaders: {
93
93
  Authorization: `Bearer ${t}`
94
94
  },
95
- body: n
95
+ body: s
96
96
  });
97
97
  }
98
98
  }
99
- const R = async ({
100
- id: s,
99
+ const O = async ({
100
+ id: o,
101
101
  apiKey: e,
102
102
  environment: t
103
103
  }) => {
104
- const a = k(t), r = await fetch(`${a}/checkout-profiles/${s}`, {
104
+ const i = I(t), a = await fetch(`${i}/checkout-profiles/${o}`, {
105
105
  method: "GET",
106
106
  headers: {
107
107
  "Content-Type": "application/json",
108
108
  Authorization: `Bearer ${e}`
109
109
  }
110
110
  });
111
- if (!r.ok)
112
- throw new Error(`HTTP error! Status: ${r.status}`);
113
- return await r.json();
111
+ if (!a.ok)
112
+ throw new Error(`HTTP error! Status: ${a.status}`);
113
+ return await a.json();
114
114
  };
115
- class V {
115
+ class H {
116
116
  events = /* @__PURE__ */ new Map();
117
117
  /**
118
118
  * Subscribe to an event
@@ -122,8 +122,8 @@ class V {
122
122
  */
123
123
  subscribe(e, t) {
124
124
  return this.events.has(e) || this.events.set(e, /* @__PURE__ */ new Set()), this.events.get(e)?.add(t), () => {
125
- const a = this.events.get(e);
126
- a && (a.delete(t), a.size === 0 && this.events.delete(e));
125
+ const i = this.events.get(e);
126
+ i && (i.delete(t), i.size === 0 && this.events.delete(e));
127
127
  };
128
128
  }
129
129
  /**
@@ -132,8 +132,8 @@ class V {
132
132
  * @param data - The data to pass to subscribers
133
133
  */
134
134
  publish(e, t) {
135
- const a = this.events.get(e);
136
- a && a.forEach((r) => r(t));
135
+ const i = this.events.get(e);
136
+ i && i.forEach((a) => a(t));
137
137
  }
138
138
  /**
139
139
  * Clear all event subscriptions
@@ -150,13 +150,13 @@ class V {
150
150
  return this.events.get(e)?.size || 0;
151
151
  }
152
152
  }
153
- const B = new V();
154
- class O {
153
+ const K = new H();
154
+ class j {
155
155
  state;
156
156
  initialState;
157
157
  eventBus;
158
158
  stateChangedEvent = "state-changed";
159
- constructor(e, t = B) {
159
+ constructor(e, t = K) {
160
160
  this.initialState = { ...e }, this.state = { ...e }, this.eventBus = t;
161
161
  }
162
162
  /**
@@ -196,51 +196,51 @@ class O {
196
196
  return this.state[e];
197
197
  }
198
198
  }
199
- function L(s) {
200
- return new O(s);
199
+ function L(o) {
200
+ return new j(o);
201
201
  }
202
- function H({
203
- apiKey: s,
202
+ function U({
203
+ apiKey: o,
204
204
  profileId: e,
205
205
  environment: t
206
206
  }) {
207
- const a = L({
207
+ const i = L({
208
208
  checkoutProfile: void 0,
209
209
  isLoading: !0,
210
210
  error: null
211
- }), r = async () => {
211
+ }), a = async () => {
212
212
  try {
213
- a.setState({ isLoading: !0 });
214
- const i = await R({
215
- apiKey: s,
213
+ i.setState({ isLoading: !0 });
214
+ const r = await O({
215
+ apiKey: o,
216
216
  id: e,
217
217
  environment: t
218
218
  });
219
- i && a.setState({
220
- checkoutProfile: i,
219
+ r && i.setState({
220
+ checkoutProfile: r,
221
221
  isLoading: !1,
222
222
  error: null
223
223
  });
224
- } catch (i) {
225
- a.setState({
224
+ } catch (r) {
225
+ i.setState({
226
226
  error: "Failed to load checkout profile",
227
227
  isLoading: !1
228
- }), console.error(i);
228
+ }), console.error(r);
229
229
  }
230
230
  };
231
- return r(), {
232
- getState: a.getState.bind(a),
233
- subscribe: a.subscribe.bind(a),
234
- reload: r
231
+ return a(), {
232
+ getState: i.getState.bind(i),
233
+ subscribe: i.subscribe.bind(i),
234
+ reload: a
235
235
  };
236
236
  }
237
- const z = {
238
- cardNumber: (s) => (s.replace(/\s/g, "").match(/.{1,4}/g) || []).join(" "),
239
- cardExpiry: (s) => {
240
- const t = s.replace(/\D/g, "").slice(0, 4);
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);
241
241
  return t.length > 2 ? `${t.slice(0, 2)} / ${t.slice(2)}` : t;
242
242
  }
243
- }, D = {
243
+ }, $ = {
244
244
  "gmail.com": [
245
245
  "gmal.com",
246
246
  "gmil.com",
@@ -312,98 +312,98 @@ const z = {
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
- }, K = (s) => {
316
- if (!s || s.includes("."))
315
+ }, q = (o) => {
316
+ if (!o || o.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 (s === "companycok" && t === "co")
320
+ if (o === "companycok" && t === "co")
321
321
  return "company.co";
322
- if (s.endsWith(t) && !s.includes(".")) {
323
- const a = s.length - t.length;
324
- return `${s.substring(0, a)}.${t}`;
322
+ if (o.endsWith(t) && !o.includes(".")) {
323
+ const i = o.length - t.length;
324
+ return `${o.substring(0, i)}.${t}`;
325
325
  }
326
326
  }
327
327
  return null;
328
- }, j = (s, e) => {
329
- if (s.length === 0) return e.length;
330
- if (e.length === 0) return s.length;
331
- const t = e.length + 1, a = s.length + 1, r = Array.from(
328
+ }, G = (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(
332
332
  { length: t },
333
- (i, n) => Array.from({ length: a }, (o, l) => n === 0 ? l : l === 0 ? n : 0)
333
+ (r, s) => Array.from({ length: i }, (n, l) => s === 0 ? l : l === 0 ? s : 0)
334
334
  );
335
- for (let i = 1; i < t; i++)
336
- for (let n = 1; n < a; n++) {
337
- const o = s[n - 1] === e[i - 1] ? 0 : 1;
338
- r[i][n] = Math.min(
339
- r[i - 1][n] + 1,
335
+ for (let r = 1; r < t; r++)
336
+ for (let s = 1; s < i; s++) {
337
+ const n = o[s - 1] === e[r - 1] ? 0 : 1;
338
+ a[r][s] = Math.min(
339
+ a[r - 1][s] + 1,
340
340
  // deletion
341
- r[i][n - 1] + 1,
341
+ a[r][s - 1] + 1,
342
342
  // insertion
343
- r[i - 1][n - 1] + o
343
+ a[r - 1][s - 1] + n
344
344
  // substitution
345
345
  );
346
346
  }
347
- return r[e.length][s.length];
348
- }, U = (s) => {
349
- let t = null, a = 3;
350
- const r = s.toLowerCase();
351
- for (const i of Object.keys(D)) {
352
- const n = j(r, i);
353
- n <= 2 && n < a && (a = n, t = i);
347
+ return a[e.length][o.length];
348
+ }, _ = (o) => {
349
+ let t = null, i = 3;
350
+ const a = o.toLowerCase();
351
+ for (const r of Object.keys($)) {
352
+ const s = G(a, r);
353
+ s <= 2 && s < i && (i = s, t = r);
354
354
  }
355
355
  return t;
356
- }, _ = () => {
357
- const { t: s } = I();
356
+ }, Y = () => {
357
+ const { t: o } = z();
358
358
  return {
359
359
  validateEmail: (t) => {
360
- const a = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
360
+ const i = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
361
361
  if (!t)
362
362
  return {
363
363
  isValid: !1,
364
- message: s("validation.emailInvalid"),
364
+ message: o("validation.emailInvalid"),
365
365
  suggestion: null
366
366
  };
367
- const r = t.indexOf("@");
368
- if (r === -1)
367
+ const a = t.indexOf("@");
368
+ if (a === -1)
369
369
  return {
370
370
  isValid: !1,
371
- message: s("validation.emailInvalid"),
371
+ message: o("validation.emailInvalid"),
372
372
  suggestion: null
373
373
  };
374
- const i = t.substring(0, r), n = t.substring(r + 1);
375
- if (!n.includes(".")) {
376
- const l = K(n);
374
+ const r = t.substring(0, a), s = t.substring(a + 1);
375
+ if (!s.includes(".")) {
376
+ const l = q(s);
377
377
  if (l)
378
378
  return {
379
379
  isValid: !1,
380
- message: s("validation.emailSuggestion", {
381
- email: `${i}@${l}`
380
+ message: o("validation.emailSuggestion", {
381
+ email: `${r}@${l}`
382
382
  }),
383
- suggestion: `${i}@${l}`
383
+ suggestion: `${r}@${l}`
384
384
  };
385
- for (const c of Object.keys(D))
386
- if (c.replace(/\./g, "") === n)
385
+ for (const c of Object.keys($))
386
+ if (c.replace(/\./g, "") === s)
387
387
  return {
388
388
  isValid: !1,
389
- message: s("validation.emailSuggestion", {
390
- email: `${i}@${c}`
389
+ message: o("validation.emailSuggestion", {
390
+ email: `${r}@${c}`
391
391
  }),
392
- suggestion: `${i}@${c}`
392
+ suggestion: `${r}@${c}`
393
393
  };
394
394
  }
395
- if (!a.test(t))
395
+ if (!i.test(t))
396
396
  return {
397
397
  isValid: !1,
398
- message: s("validation.emailInvalid"),
398
+ message: o("validation.emailInvalid"),
399
399
  suggestion: null
400
400
  };
401
- const o = U(n);
402
- if (o && o !== n) {
403
- const l = `${i}@${o}`;
401
+ const n = _(s);
402
+ if (n && n !== s) {
403
+ const l = `${r}@${n}`;
404
404
  return {
405
405
  isValid: !1,
406
- message: s("validation.emailSuggestion", { email: l }),
406
+ message: o("validation.emailSuggestion", { email: l }),
407
407
  suggestion: l
408
408
  };
409
409
  }
@@ -414,30 +414,30 @@ const z = {
414
414
  };
415
415
  }
416
416
  };
417
- }, q = () => {
418
- const { t: s } = I(), { validateEmail: e } = _();
417
+ }, Z = () => {
418
+ const { t: o } = z(), { validateEmail: e } = Y();
419
419
  return {
420
420
  email: (t) => {
421
- const a = e(t);
422
- return a.isValid ? void 0 : a.message;
421
+ const i = e(t);
422
+ return i.isValid ? void 0 : i.message;
423
423
  },
424
424
  name: (t) => {
425
425
  if (!t.trim())
426
- return s("validation.nameRequired");
426
+ return o("validation.nameRequired");
427
427
  },
428
428
  cardExpiry: (t) => {
429
- const a = t.replace(/\s/g, ""), [r, i] = a.split("/").map((u) => u.trim());
430
- if (!r || !i || r.length !== 2 || i.length !== 2)
431
- return s("validation.cardExpiryFormat");
432
- const n = /* @__PURE__ */ new Date(), o = n.getFullYear() % 100, l = n.getMonth() + 1, c = parseInt(r, 10), d = parseInt(i, 10);
429
+ const i = t.replace(/\s/g, ""), [a, r] = i.split("/").map((u) => u.trim());
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);
433
433
  if (c < 1 || c > 12)
434
- return s("validation.cardExpiryFormat");
435
- if (d < o || d === o && c < l)
436
- return s("validation.cardExpiryInvalid");
434
+ return o("validation.cardExpiryFormat");
435
+ if (d < n || d === n && c < l)
436
+ return o("validation.cardExpiryInvalid");
437
437
  }
438
438
  };
439
- }, Y = () => {
440
- const s = q(), e = L({
439
+ }, J = () => {
440
+ const o = Z(), e = L({
441
441
  formData: {
442
442
  name: "",
443
443
  email: "",
@@ -451,90 +451,87 @@ const z = {
451
451
  },
452
452
  isValid: !1
453
453
  }), t = (l, c) => {
454
- const d = s[l];
454
+ const d = o[l];
455
455
  return d?.(c);
456
- }, a = (l) => {
456
+ }, i = (l) => {
457
457
  const c = {};
458
458
  return Object.keys(l).forEach((d) => {
459
459
  const u = t(d, l[d]);
460
460
  u && (c[d] = u);
461
461
  }), c;
462
- }, r = (l) => {
463
- const c = a(l);
462
+ }, a = (l) => {
463
+ const c = i(l);
464
464
  return Object.keys(c).length === 0;
465
- }, i = (l, c) => {
465
+ }, r = (l, c) => {
466
466
  const d = e.getState();
467
467
  let u = c;
468
- l in z && (u = z[l](c));
469
- const E = {
468
+ l in N && (u = N[l](c));
469
+ const p = {
470
470
  ...d.formData,
471
471
  [l]: u
472
- }, f = { ...d.errors };
472
+ }, g = { ...d.errors };
473
473
  if (d.touched[l]) {
474
474
  const m = t(l, u);
475
- m ? f[l] = m : delete f[l];
475
+ m ? g[l] = m : delete g[l];
476
476
  }
477
477
  e.setState({
478
- formData: E,
479
- errors: f,
480
- isValid: r(E)
478
+ formData: p,
479
+ errors: g,
480
+ isValid: a(p)
481
481
  });
482
- }, n = (l, c) => {
482
+ }, s = (l, c) => {
483
483
  const d = e.getState(), u = {
484
484
  ...d.touched,
485
485
  [l]: !0
486
- }, E = t(l, c), f = { ...d.errors };
487
- E ? f[l] = E : delete f[l], e.setState({
486
+ }, p = t(l, c), g = { ...d.errors };
487
+ p ? g[l] = p : delete g[l], e.setState({
488
488
  touched: u,
489
- errors: f
489
+ errors: g
490
490
  });
491
- }, o = (l) => {
491
+ }, n = (l) => {
492
492
  const d = {
493
493
  ...e.getState().formData,
494
494
  ...l
495
495
  };
496
496
  e.setState({
497
497
  formData: d,
498
- isValid: r(d)
498
+ isValid: a(d)
499
499
  });
500
500
  };
501
501
  return {
502
502
  getFormState: e.getState.bind(e),
503
503
  subscribe: e.subscribe.bind(e),
504
- handleChange: i,
505
- handleBlur: n,
506
- setFormData: o,
504
+ handleChange: r,
505
+ handleBlur: s,
506
+ setFormData: n,
507
507
  reset: e.resetState.bind(e)
508
508
  };
509
- }, G = async ({
510
- props: s,
509
+ }, W = async ({
510
+ props: o,
511
511
  apiKey: e,
512
512
  environment: t
513
513
  }) => {
514
- const a = k(t), r = await fetch(
515
- `${a}/tokenization/generate-iframe-configuration`,
516
- {
517
- method: "POST",
518
- headers: {
519
- "Content-Type": "application/json",
520
- Authorization: `Bearer ${e}`
521
- },
522
- body: JSON.stringify(s)
523
- }
524
- );
525
- if (!r.ok)
526
- throw new Error(`HTTP error! Status: ${r.status}`);
527
- return await r.json();
528
- }, Z = 100, J = 2, W = 2e3, X = 5;
529
- function Q({
530
- apiKey: s,
531
- // scriptLoaded,
514
+ const i = I(t), a = await fetch(`${i}/checkout/init`, {
515
+ method: "POST",
516
+ headers: {
517
+ "Content-Type": "application/json",
518
+ Authorization: `Bearer ${e}`
519
+ },
520
+ body: JSON.stringify(o)
521
+ });
522
+ if (!a.ok)
523
+ throw new Error(`HTTP error! Status: ${a.status}`);
524
+ return await a.json();
525
+ };
526
+ function X({
527
+ apiKey: o,
532
528
  checkoutProfile: e,
533
529
  inputStyles: t,
534
- setFormData: a,
535
- environment: r
530
+ setFormData: i,
531
+ environment: a,
532
+ paymentId: r
536
533
  }) {
537
- const i = L({
534
+ const s = L({
538
535
  iframeConfig: void 0,
539
536
  loadingIframe: !0,
540
537
  isCcValid: !1,
@@ -544,16 +541,17 @@ function Q({
544
541
  possibleCardType: "unknown"
545
542
  });
546
543
  let n = null;
547
- const o = async () => {
544
+ const l = async () => {
548
545
  try {
549
- const m = await G({
546
+ console.log("[IframeConfig] Generating iframe configuration...");
547
+ const m = await W({
550
548
  props: {
551
- allowedOrigins: [globalThis.location.origin]
549
+ payment: r
552
550
  },
553
- apiKey: s,
554
- environment: r
551
+ apiKey: o,
552
+ environment: a
555
553
  });
556
- m && (i.setState({
554
+ m && (console.log("[IframeConfig] Iframe config generated successfully."), s.setState({
557
555
  iframeConfig: {
558
556
  ...m,
559
557
  origin: globalThis.location.origin
@@ -562,14 +560,18 @@ function Q({
562
560
  } catch (m) {
563
561
  console.error("Failed to generate iframe config:", m);
564
562
  }
565
- }, l = () => {
566
- const m = i.getState();
567
- if (!m.iframeConfig || !e)
563
+ }, c = () => {
564
+ const m = s.getState();
565
+ if (console.log("[IframeConfig] createTokenExIframe started."), !m.iframeConfig || !e) {
566
+ console.error(
567
+ "[IframeConfig] Missing iframe config or checkout profile."
568
+ );
568
569
  return;
569
- const y = document.getElementById("card-element"), v = document.getElementById("card-cvv-element");
570
- if (!y || !v)
570
+ }
571
+ const b = document.getElementById("card-element"), S = document.getElementById("card-cvv-element");
572
+ if (!b || !S)
571
573
  throw new Error("Card elements not found in DOM");
572
- n = new globalThis.TokenEx.Iframe("card-element", {
574
+ console.log("[IframeConfig] Creating TokenEx.Iframe instance."), n = new globalThis.TokenEx.Iframe("card-element", {
573
575
  ...m.iframeConfig,
574
576
  placeholder: "1234 1234 1234 1234",
575
577
  cvvPlaceholder: "CVC",
@@ -594,178 +596,153 @@ function Q({
594
596
  }
595
597
  }
596
598
  }), n.on("load", () => {
597
- i.setState({ loadingIframe: !1 });
598
- }), n.on("autoCompleteValues", function(p) {
599
- const { nameOnCard: C, cardExp: b } = p;
600
- a({
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;
602
+ i({
601
603
  name: C,
602
- cardExpiry: b
604
+ cardExpiry: v
603
605
  });
604
- }), n.on("validate", function(p) {
605
- const { isValid: C, isCvvValid: b } = p;
606
- i.setState({
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({
607
611
  isCcValid: C,
608
- isCvvValid: b
612
+ isCvvValid: v
609
613
  });
610
614
  }), n.on("focus", function() {
611
- i.setState({ isFocused: !0 });
615
+ s.setState({ isFocused: !0 });
612
616
  }), n.on("blur", function() {
613
- i.setState({ isFocused: !1 });
617
+ s.setState({ isFocused: !1 });
614
618
  }), n.on("cvvFocus", function() {
615
- i.setState({ isCvvFocused: !0 });
619
+ s.setState({ isCvvFocused: !0 });
616
620
  }), n.on("cvvBlur", function() {
617
- i.setState({ isCvvFocused: !1 });
621
+ s.setState({ isCvvFocused: !1 });
618
622
  }), n.on(
619
623
  "cardTypeChange",
620
- function({ possibleCardType: p }) {
621
- i.setState({ possibleCardType: p });
624
+ function({ possibleCardType: x }) {
625
+ s.setState({ possibleCardType: x });
622
626
  }
623
627
  ), n.load();
624
- }, c = () => {
625
- let m = 0;
626
- const y = X;
627
- console.warn(
628
- "Card elements not found in DOM, retrying iframe initialization..."
629
- );
630
- const v = () => {
631
- if (m++, m > y) {
632
- console.error("Failed to find card elements after maximum retries");
633
- return;
634
- }
635
- const p = Math.min(
636
- Z * Math.pow(J, m - 1),
637
- W
638
- );
639
- setTimeout(() => {
640
- const C = document.getElementById("card-element"), b = document.getElementById("card-cvv-element");
641
- if (C && b)
642
- try {
643
- l();
644
- } catch (g) {
645
- console.error("Failed to create TokenEx iframe:", g);
646
- }
647
- else m < y && v();
648
- }, p);
649
- };
650
- v();
651
628
  }, d = () => {
652
- if (!i.getState().iframeConfig || !e)
629
+ const m = s.getState();
630
+ if (console.log("[IframeConfig] initializeIframe started."), !m.iframeConfig || !e) {
631
+ console.error(
632
+ "[IframeConfig] Missing iframe config or checkout profile for initialization."
633
+ );
653
634
  return;
635
+ }
654
636
  if (!globalThis.TokenEx?.Iframe) {
655
637
  console.error("TokenEx script not loaded correctly");
656
638
  return;
657
639
  }
658
- const y = document.getElementById("card-element"), v = document.getElementById("card-cvv-element");
659
- if (!y || !v) {
660
- c();
661
- return;
662
- }
663
640
  try {
664
- l();
665
- } catch (p) {
666
- console.error("Failed to create TokenEx iframe:", p);
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);
667
644
  }
668
645
  }, u = async () => {
669
- s && await o();
670
- }, E = () => {
646
+ o && (console.log("[IframeConfig] Manual initialization triggered."), await l());
647
+ }, p = () => {
671
648
  n && (n.remove(), n = null);
672
- }, f = async (m) => {
673
- n && (n.on("tokenize", async function(y) {
674
- await m(y);
649
+ }, g = async (m) => {
650
+ n && (n.on("tokenize", async function(b) {
651
+ await m(b);
675
652
  }), n.tokenize());
676
653
  };
677
654
  return {
678
- getState: i.getState.bind(i),
679
- subscribe: i.subscribe.bind(i),
680
- tokenize: f,
681
- cleanup: E,
655
+ getState: s.getState.bind(s),
656
+ subscribe: s.subscribe.bind(s),
657
+ tokenize: g,
658
+ cleanup: p,
682
659
  initialize: u
683
660
  };
684
661
  }
685
- const ee = "E-Mail", te = "Name des/der Karteninhaber/in", ae = "Kartendaten", re = "Vollständiger Name", ie = "MM / JJ", ne = "Das Fenster nicht schließen", se = { pay: "ZAHLEN", submit: "ABSENDEN", getPlan: "MEINEN PLAN ERHALTEN", donate: "spenden", book: "jetzt buchen", order: "jetzt bestellen" }, oe = { 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" }, le = {
686
- email: ee,
687
- cardholderNameLabel: te,
688
- cardInformation: ae,
689
- cardholderNamePlaceholder: re,
690
- cardExpiry: ie,
691
- loading: ne,
662
+ const Q = "E-Mail", ee = "Name des/der Karteninhaber/in", te = "Kartendaten", ie = "Vollständiger Name", ae = "MM / JJ", re = "Das Fenster nicht schließen", se = { pay: "ZAHLEN", submit: "ABSENDEN", getPlan: "MEINEN PLAN ERHALTEN", donate: "spenden", book: "jetzt buchen", order: "jetzt bestellen" }, oe = { 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" }, ne = {
663
+ email: Q,
664
+ cardholderNameLabel: ee,
665
+ cardInformation: te,
666
+ cardholderNamePlaceholder: ie,
667
+ cardExpiry: ae,
668
+ loading: re,
692
669
  buttonTexts: se,
693
670
  validation: oe
694
- }, ce = "Email", de = "Cardholder name", he = "Card information", me = "Full name on card", ue = "MM / YY", pe = "Do not close the window", fe = { pay: "PAY", submit: "SUBMIT", getPlan: "GET MY PLAN", donate: "DONATE", book: "BOOK NOW", order: "ORDER NOW" }, ge = { 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" }, ye = {
695
- email: ce,
696
- cardholderNameLabel: de,
697
- cardInformation: he,
698
- cardholderNamePlaceholder: me,
699
- cardExpiry: ue,
700
- loading: pe,
701
- buttonTexts: fe,
671
+ }, le = "Email", ce = "Cardholder name", de = "Card information", he = "Full name on card", me = "MM / YY", ue = "Do not close the window", pe = { pay: "PAY", submit: "SUBMIT", getPlan: "GET MY PLAN", donate: "DONATE", book: "BOOK NOW", order: "ORDER NOW" }, ge = { 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" }, fe = {
672
+ email: le,
673
+ cardholderNameLabel: ce,
674
+ cardInformation: de,
675
+ cardholderNamePlaceholder: he,
676
+ cardExpiry: me,
677
+ loading: ue,
678
+ buttonTexts: pe,
702
679
  validation: ge
703
- }, ve = "Correo electrónico", Ee = "Nombre del titular de la tarjeta", be = "Información de la tarjeta", Ce = "Nombre completo en la tarjeta", Se = "MM / AA", xe = "Por favor, no cierre esta ventana", Fe = { pay: "PAGAR", submit: "ENVIAR", getPlan: "OBTENER MI PLAN", donate: "DONAR", book: "RESERVAR AHORA", order: "ORDENAR AHORA" }, we = { 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 = {
704
- email: ve,
705
- cardholderNameLabel: Ee,
706
- cardInformation: be,
680
+ }, ye = "Correo electrónico", ve = "Nombre del titular de la tarjeta", Ee = "Información de la tarjeta", Ce = "Nombre completo en la tarjeta", be = "MM / AA", xe = "Por favor, no cierre esta ventana", Se = { pay: "PAGAR", submit: "ENVIAR", getPlan: "OBTENER MI PLAN", donate: "DONAR", book: "RESERVAR AHORA", order: "ORDENAR AHORA" }, Fe = { 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" }, we = {
681
+ email: ye,
682
+ cardholderNameLabel: ve,
683
+ cardInformation: Ee,
707
684
  cardholderNamePlaceholder: Ce,
708
- cardExpiry: Se,
685
+ cardExpiry: be,
709
686
  loading: xe,
710
- buttonTexts: Fe,
711
- validation: we
712
- }, Me = "E-mail", ke = "Nom du titulaire de la carte", Ie = "Informations de la carte", Te = "Nom complet figurant sur la carte", ze = "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" }, Pe = { 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 = {
687
+ buttonTexts: Se,
688
+ validation: Fe
689
+ }, Me = "E-mail", Le = "Nom du titulaire de la carte", ke = "Informations de la carte", Te = "Nom complet figurant sur la carte", Ie = "MM / AA", ze = "Veuillez ne pas fermer cette fenêtre", Pe = { pay: "PAYER", submit: "ENVOYER", getPlan: "OBTENIR MON PLAN", donate: "FAIRE UN DON", book: "RÉSERVER MAINTENANT", order: "COMMANDER MAINTENANT" }, Ne = { 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" }, Ae = {
713
690
  email: Me,
714
- cardholderNameLabel: ke,
715
- cardInformation: Ie,
691
+ cardholderNameLabel: Le,
692
+ cardInformation: ke,
716
693
  cardholderNamePlaceholder: Te,
717
- cardExpiry: ze,
718
- loading: Ne,
719
- buttonTexts: Ae,
720
- validation: Pe
721
- }, $e = "Email", Re = "Nome del titolare della carta", Ve = "Informazioni sulla carta", Be = "Nome completo sulla carta", Oe = "MM / AA", He = "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 = {
722
- email: $e,
723
- cardholderNameLabel: Re,
724
- cardInformation: Ve,
725
- cardholderNamePlaceholder: Be,
726
- cardExpiry: Oe,
727
- loading: He,
728
- buttonTexts: Ke,
729
- validation: je
730
- }, _e = "Adres e-mail", qe = "Imię i nazwisko posiadacza karty", Ye = "Informacje o karcie", Ge = "Imię i nazwisko na karcie", Ze = "MM / RR", Je = "Proszę nie zamykać tego okna", We = { pay: "ZAPŁAĆ", submit: "WYŚLIJ", getPlan: "POBIERZ MÓJ PLAN", donate: "PRZEKAŻ DAROWIZNĘ", book: "ZAREZERWUJ TERAZ", order: "ZAMÓW TERAZ" }, Xe = { 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" }, Qe = {
731
- email: _e,
694
+ cardExpiry: Ie,
695
+ loading: ze,
696
+ buttonTexts: Pe,
697
+ validation: Ne
698
+ }, De = "Email", Ve = "Nome del titolare della carta", $e = "Informazioni sulla carta", Re = "Nome completo sulla carta", Be = "MM / AA", Oe = "Non chiudere la finestra", He = { pay: "PAGA", submit: "INVIA", getPlan: "OTTIENI IL MIO PIANO", donate: "DONARE", book: "PRENOTA ORA", order: "ORDINA ORA" }, Ke = { 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" }, je = {
699
+ email: De,
700
+ cardholderNameLabel: Ve,
701
+ cardInformation: $e,
702
+ cardholderNamePlaceholder: Re,
703
+ cardExpiry: Be,
704
+ loading: Oe,
705
+ buttonTexts: He,
706
+ validation: Ke
707
+ }, Ue = "Adres e-mail", qe = "Imię i nazwisko posiadacza karty", Ge = "Informacje o karcie", _e = "Imię i nazwisko na karcie", Ye = "MM / RR", Ze = "Proszę nie zamykać tego okna", Je = { pay: "ZAPŁAĆ", submit: "WYŚLIJ", getPlan: "POBIERZ MÓJ PLAN", donate: "PRZEKAŻ DAROWIZNĘ", book: "ZAREZERWUJ TERAZ", order: "ZAMÓW TERAZ" }, We = { 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" }, Xe = {
708
+ email: Ue,
732
709
  cardholderNameLabel: qe,
733
- cardInformation: Ye,
734
- cardholderNamePlaceholder: Ge,
735
- cardExpiry: Ze,
736
- loading: Je,
737
- buttonTexts: We,
738
- validation: Xe
739
- }, et = "E-mail", tt = "Nome do titular do cartão", at = "Informações do cartão", rt = "Nome completo no cartão", it = "MM / AA", nt = "Por favor, não feche esta janela", st = { pay: "PAGAR", submit: "ENVIAR", getPlan: "OBTER MEU PLANO", donate: "DOAR", book: "RESERVAR AGORA", order: "FAZER PEDIDO" }, ot = { emailSuggestion: "Você quis dizer {{email}}?", emailInvalid: "O seu endereço de e-mail não é válido", cardExpiryInvalid: "A data de validade do seu cartão está no passado", cardExpiryFormat: "A data de validade do seu cartão está incompleta", cardSecurityFormat: "O código de segurança do seu cartão está incompleto", nameRequired: "Por favor, insira o nome conforme aparece no cartão", cardNumberInvalid: "O número do seu cartão é inválido" }, lt = {
740
- email: et,
741
- cardholderNameLabel: tt,
742
- cardInformation: at,
743
- cardholderNamePlaceholder: rt,
744
- cardExpiry: it,
745
- loading: nt,
710
+ cardInformation: Ge,
711
+ cardholderNamePlaceholder: _e,
712
+ cardExpiry: Ye,
713
+ loading: Ze,
714
+ buttonTexts: Je,
715
+ validation: We
716
+ }, Qe = "E-mail", et = "Nome do titular do cartão", tt = "Informações do cartão", it = "Nome completo no cartão", at = "MM / AA", rt = "Por favor, não feche esta janela", st = { pay: "PAGAR", submit: "ENVIAR", getPlan: "OBTER MEU PLANO", donate: "DOAR", book: "RESERVAR AGORA", order: "FAZER PEDIDO" }, ot = { emailSuggestion: "Você quis dizer {{email}}?", emailInvalid: "O seu endereço de e-mail não é válido", cardExpiryInvalid: "A data de validade do seu cartão está no passado", cardExpiryFormat: "A data de validade do seu cartão está incompleta", cardSecurityFormat: "O código de segurança do seu cartão está incompleto", nameRequired: "Por favor, insira o nome conforme aparece no cartão", cardNumberInvalid: "O número do seu cartão é inválido" }, nt = {
717
+ email: Qe,
718
+ cardholderNameLabel: et,
719
+ cardInformation: tt,
720
+ cardholderNamePlaceholder: it,
721
+ cardExpiry: at,
722
+ loading: rt,
746
723
  buttonTexts: st,
747
724
  validation: ot
748
- }, ct = "E-posta", dt = "Kart sahibinin adı", ht = "Kart bilgileri", mt = "Kart üzerindeki tam ad", ut = "AA / YY", pt = "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" }, gt = { 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" }, yt = {
749
- email: ct,
750
- cardholderNameLabel: dt,
751
- cardInformation: ht,
752
- cardholderNamePlaceholder: mt,
753
- cardExpiry: ut,
754
- loading: pt,
755
- buttonTexts: ft,
725
+ }, lt = "E-posta", ct = "Kart sahibinin adı", dt = "Kart bilgileri", ht = "Kart üzerindeki tam ad", mt = "AA / YY", ut = "Lütfen pencereyi kapatmayın", pt = { pay: "ÖDE", submit: "GÖNDER", getPlan: "PLANIMI AL", donate: "BAĞIŞ YAP", book: "ŞİMDİ REZERVASYON YAP", order: "ŞİMDİ SİPARİŞ VER" }, gt = { 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" }, ft = {
726
+ email: lt,
727
+ cardholderNameLabel: ct,
728
+ cardInformation: dt,
729
+ cardholderNamePlaceholder: ht,
730
+ cardExpiry: mt,
731
+ loading: ut,
732
+ buttonTexts: pt,
756
733
  validation: gt
757
- }, N = {
758
- en: ye,
759
- de: le,
760
- es: Le,
761
- fr: De,
762
- pl: Qe,
763
- pt: lt,
764
- tr: yt,
765
- it: Ue
734
+ }, A = {
735
+ en: fe,
736
+ de: ne,
737
+ es: we,
738
+ fr: Ae,
739
+ pl: Xe,
740
+ pt: nt,
741
+ tr: ft,
742
+ it: je
766
743
  // Add other locales here
767
744
  };
768
- class vt {
745
+ class yt {
769
746
  locale;
770
747
  loadedLocales = /* @__PURE__ */ new Set();
771
748
  constructor(e = "en") {
@@ -778,32 +755,32 @@ class vt {
778
755
  return this.locale;
779
756
  }
780
757
  translate(e, t) {
781
- const a = this.getNestedTranslation(e);
782
- return !t || a === e ? a : this.interpolate(a, t);
758
+ const i = this.getNestedTranslation(e);
759
+ return !t || i === e ? i : this.interpolate(i, t);
783
760
  }
784
761
  /* eslint-disable @typescript-eslint/no-explicit-any */
785
762
  getNestedTranslation(e) {
786
- const t = this.locale in N ? N[this.locale] : {}, a = this.findNestedValue(t, e);
787
- return a === void 0 ? e : a;
763
+ const t = this.locale in A ? A[this.locale] : {}, i = this.findNestedValue(t, e);
764
+ return i === void 0 ? e : i;
788
765
  }
789
766
  findNestedValue(e, t) {
790
- const a = t.split(".");
791
- let r = e;
792
- for (const i of a) {
793
- if (r == null || !Object.prototype.hasOwnProperty.call(r, i))
767
+ const i = t.split(".");
768
+ let a = e;
769
+ for (const r of i) {
770
+ if (a == null || !Object.prototype.hasOwnProperty.call(a, r))
794
771
  return;
795
- r = r[i];
772
+ a = a[r];
796
773
  }
797
- return typeof r == "string" ? r : void 0;
774
+ return typeof a == "string" ? a : void 0;
798
775
  }
799
776
  interpolate(e, t) {
800
- return e.replace(/{{(\w+)}}/g, (a, r) => {
801
- const i = t[r];
802
- return i === void 0 ? a : String(i);
777
+ return e.replace(/{{(\w+)}}/g, (i, a) => {
778
+ const r = t[a];
779
+ return r === void 0 ? i : String(r);
803
780
  });
804
781
  }
805
782
  }
806
- const A = [
783
+ const D = [
807
784
  "en",
808
785
  "de",
809
786
  "es",
@@ -812,96 +789,96 @@ const A = [
812
789
  "pt",
813
790
  "it",
814
791
  "tr"
815
- ], Et = "en";
816
- function bt(s) {
817
- const e = new vt(), a = (() => {
818
- const o = navigator?.language?.split("-")[0]?.toLowerCase();
819
- return A.includes(o) ? o : Et;
792
+ ], vt = "en";
793
+ function Et(o) {
794
+ const e = new yt(), i = (() => {
795
+ const n = navigator?.language?.split("-")[0]?.toLowerCase();
796
+ return D.includes(n) ? n : vt;
820
797
  })();
821
- e.setLocale(a);
822
- const r = L({
823
- locale: a,
798
+ e.setLocale(i);
799
+ const a = L({
800
+ locale: i,
824
801
  translationService: e
825
802
  });
826
803
  return {
827
- store: r,
828
- translate: (o, l) => r.getState().translationService.translate(o, l),
829
- setLocale: (o) => {
830
- A.includes(o) && (r.getState().translationService.setLocale(o), r.setState({ locale: o }));
804
+ 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 }));
831
808
  },
832
- getLocale: () => r.getValue("locale"),
833
- subscribe: r.subscribe.bind(r)
809
+ getLocale: () => a.getValue("locale"),
810
+ subscribe: a.subscribe.bind(a)
834
811
  };
835
812
  }
836
- const Ct = bt(), I = () => {
837
- const { translate: s, getLocale: e, setLocale: t, subscribe: a } = Ct;
813
+ const Ct = Et(), z = () => {
814
+ const { translate: o, getLocale: e, setLocale: t, subscribe: i } = Ct;
838
815
  return {
839
- t: s,
840
- translate: s,
816
+ t: o,
817
+ translate: o,
841
818
  locale: e(),
842
819
  setLocale: t,
843
- subscribe: a
820
+ subscribe: i
844
821
  };
845
- }, St = ({ fontFamily: s }) => {
846
- if (!s)
822
+ }, bt = ({ fontFamily: o }) => {
823
+ if (!o)
847
824
  return { cleanup: () => {
848
825
  } };
849
- const e = s.replace(/\s+/g, "+"), t = `https://fonts.googleapis.com/css2?family=${e}:wght@400;700&display=swap`, a = [...document.head.querySelectorAll("link")].filter(
850
- (o) => o.href.includes("fonts.googleapis.com/css2") && o.rel === "stylesheet"
851
- ), r = document.createElement("link");
852
- r.rel = "stylesheet", r.href = t;
853
- const i = a.find(
854
- (o) => o.href.includes(`family=${e}`)
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"
828
+ ), a = document.createElement("link");
829
+ a.rel = "stylesheet", a.href = t;
830
+ const r = i.find(
831
+ (n) => n.href.includes(`family=${e}`)
855
832
  );
856
- if (i)
857
- i.href = t;
858
- else if (a.length > 0) {
859
- const o = a.at(
833
+ if (r)
834
+ r.href = t;
835
+ else if (i.length > 0) {
836
+ const n = i.at(
860
837
  -1
861
838
  );
862
- o?.nextSibling ? document.head.insertBefore(r, o.nextSibling) : document.head.appendChild(r);
839
+ n?.nextSibling ? document.head.insertBefore(a, n.nextSibling) : document.head.appendChild(a);
863
840
  } else
864
- document.head.appendChild(r);
841
+ document.head.appendChild(a);
865
842
  return { cleanup: () => {
866
- document.head.contains(r) && document.head.removeChild(r);
843
+ document.head.contains(a) && document.head.removeChild(a);
867
844
  } };
868
845
  }, xt = ({
869
- scriptSrc: s,
870
- async: e = !1
846
+ scriptSrc: o,
847
+ async: e = !0
871
848
  }) => {
872
- if (!s)
849
+ if (!o)
873
850
  return {
874
851
  cleanup: () => {
875
852
  },
876
853
  isLoaded: Promise.resolve(!1)
877
854
  };
878
855
  if ([...document.head.querySelectorAll("script")].filter(
879
- (n) => n.src === s
856
+ (s) => s.src === o
880
857
  ).length > 0)
881
858
  return {
882
859
  cleanup: () => {
883
860
  },
884
861
  isLoaded: Promise.resolve(!0)
885
862
  };
886
- const a = document.createElement("script");
887
- a.src = s, a.async = e;
888
- const r = new Promise((n, o) => {
889
- a.onload = () => n(!0), a.onerror = () => {
890
- console.error(`Failed to load script: ${s}`), o(new Error(`Failed to load script: ${s}`));
863
+ const i = document.createElement("script");
864
+ i.src = o, i.async = e;
865
+ const a = new Promise((s, n) => {
866
+ i.onload = () => s(!0), i.onerror = () => {
867
+ console.error(`Failed to load script: ${o}`), n(new Error(`Failed to load script: ${o}`));
891
868
  };
892
869
  });
893
- return document.head.appendChild(a), {
870
+ return document.head.appendChild(i), {
894
871
  cleanup: () => {
895
- document.head.contains(a) && document.head.removeChild(a);
872
+ document.head.contains(i) && document.head.removeChild(i);
896
873
  },
897
- isLoaded: r
874
+ isLoaded: a
898
875
  };
899
- }, w = (s) => Object.entries(s).map(([e, t]) => {
900
- const a = e.replace(/([A-Z])/g, "-$1").toLowerCase(), r = typeof t == "number" ? `${t}px` : t;
901
- return `${a}: ${r}`;
876
+ }, M = (o) => Object.entries(o).map(([e, t]) => {
877
+ const i = e.replace(/([A-Z])/g, "-$1").toLowerCase(), a = typeof t == "number" ? `${t}px` : t;
878
+ return `${i}: ${a}`;
902
879
  }).join("; ");
903
- function Ft(s) {
904
- if (!s)
880
+ function St(o) {
881
+ if (!o)
905
882
  return {
906
883
  formContainerStyle: {},
907
884
  baseStyles: {},
@@ -917,39 +894,40 @@ function Ft(s) {
917
894
  };
918
895
  const e = {
919
896
  opacity: "1",
920
- background: "#fff",
897
+ backgroundColor: "transparent",
898
+ display: "block",
921
899
  border: "none",
922
900
  outline: "none",
923
- fontSize: `${s.styles.fontSize}px`,
901
+ fontSize: `${o.styles.fontSize}px`,
924
902
  lineHeight: 30,
925
903
  boxSizing: "border-box",
926
904
  padding: "0px 12px",
927
905
  height: 36,
928
906
  width: "100%",
929
- fontFamily: `${s.styles.fontFamily}, sans-serif`
907
+ fontFamily: `${o.styles.fontFamily}, sans-serif`
930
908
  }, t = {
931
909
  color: "#717173",
932
910
  opacity: "0.3",
933
- fontFamily: `${s.styles.fontFamily}, sans-serif`
934
- }, a = {
911
+ fontFamily: `${o.styles.fontFamily}, sans-serif`
912
+ }, i = {
935
913
  color: "#dc2727"
914
+ }, a = {
915
+ outline: "none"
936
916
  }, r = {
937
- outline: 0
938
- }, i = {
939
- fontFamily: `${s.styles.fontFamily}, sans-serif`
940
- }, n = {
941
- base: w(e),
942
- error: w(a),
943
- focus: w(r),
944
- placeholder: w(t)
917
+ fontFamily: `${o.styles.fontFamily}, sans-serif`
918
+ }, s = {
919
+ base: M(e),
920
+ error: M(i),
921
+ focus: M(a),
922
+ placeholder: M(t)
945
923
  };
946
924
  return {
947
- formContainerStyle: i,
925
+ formContainerStyle: r,
948
926
  baseStyles: e,
949
927
  placeholderStyles: t,
950
- errorStyles: a,
951
- focusStyles: r,
952
- inputStyles: n
928
+ errorStyles: i,
929
+ focusStyles: a,
930
+ inputStyles: s
953
931
  };
954
932
  }
955
933
  class h {
@@ -962,9 +940,9 @@ class h {
962
940
  * @param classNames Optional CSS class names to add
963
941
  * @param attributes Optional attributes to set on the element
964
942
  */
965
- constructor(e, t = [], a = {}) {
966
- this.element = document.createElement(e), t.length > 0 && this.addClass(...t), Object.entries(a).forEach(([r, i]) => {
967
- this.setAttribute(r, i);
943
+ constructor(e, t = [], i = {}) {
944
+ this.element = document.createElement(e), t.length > 0 && this.addClass(...t), Object.entries(i).forEach(([a, r]) => {
945
+ this.setAttribute(a, r);
968
946
  });
969
947
  }
970
948
  /**
@@ -1019,14 +997,14 @@ class h {
1019
997
  /**
1020
998
  * Add an event listener to the element
1021
999
  */
1022
- addEventListener(e, t, a) {
1023
- return this.element.addEventListener(e, t, a), this.eventListeners.push({ type: e, listener: t }), this;
1000
+ addEventListener(e, t, i) {
1001
+ return this.element.addEventListener(e, t, i), this.eventListeners.push({ type: e, listener: t }), this;
1024
1002
  }
1025
1003
  /**
1026
1004
  * Remove an event listener from the element
1027
1005
  */
1028
- removeEventListener(e, t, a) {
1029
- return this.element.removeEventListener(e, t, a), this;
1006
+ removeEventListener(e, t, i) {
1007
+ return this.element.removeEventListener(e, t, i), this;
1030
1008
  }
1031
1009
  /**
1032
1010
  * Hide this component
@@ -1049,7 +1027,7 @@ class h {
1049
1027
  }), this.eventListeners = [], this.children.forEach((e) => e.destroy()), this.children = [], this.element.parentNode && this.element.parentNode.removeChild(this.element);
1050
1028
  }
1051
1029
  }
1052
- class S {
1030
+ class F {
1053
1031
  /**
1054
1032
  * Create a div element
1055
1033
  */
@@ -1065,27 +1043,27 @@ class S {
1065
1043
  /**
1066
1044
  * Create a button element
1067
1045
  */
1068
- static createButton(e, t = [], a = {}) {
1069
- const r = new h("button", t, a);
1070
- return r.setText(e), r;
1046
+ static createButton(e, t = [], i = {}) {
1047
+ const a = new h("button", t, i);
1048
+ return a.setText(e), a;
1071
1049
  }
1072
1050
  /**
1073
1051
  * Create an input element
1074
1052
  */
1075
- static createInput(e, t = [], a = {}) {
1076
- const r = { type: e, ...a };
1077
- return new h("input", t, r);
1053
+ static createInput(e, t = [], i = {}) {
1054
+ const a = { type: e, ...i };
1055
+ return new h("input", t, a);
1078
1056
  }
1079
1057
  /**
1080
1058
  * Create a text input
1081
1059
  */
1082
- static createTextInput(e = "", t = [], a = {}) {
1083
- const r = {
1060
+ static createTextInput(e = "", t = [], i = {}) {
1061
+ const a = {
1084
1062
  type: "text",
1085
1063
  placeholder: e,
1086
- ...a
1064
+ ...i
1087
1065
  };
1088
- return new h("input", t, r);
1066
+ return new h("input", t, a);
1089
1067
  }
1090
1068
  /**
1091
1069
  * Create a form element
@@ -1096,47 +1074,47 @@ class S {
1096
1074
  /**
1097
1075
  * Create a label element
1098
1076
  */
1099
- static createLabel(e, t = "", a = [], r = {}) {
1100
- const i = t ? { for: t, ...r } : r, n = new h("label", a, i);
1101
- return n.setText(e), n;
1077
+ static createLabel(e, t = "", i = [], a = {}) {
1078
+ const r = t ? { for: t, ...a } : a, s = new h("label", i, r);
1079
+ return s.setText(e), s;
1102
1080
  }
1103
1081
  /**
1104
1082
  * Create a select element
1105
1083
  */
1106
- static createSelect(e, t = [], a = {}) {
1107
- const r = new h("select", t, a);
1108
- return e.forEach((i) => {
1109
- const n = document.createElement("option");
1110
- n.value = i.value, n.textContent = i.text, i.selected && (n.selected = !0), r.getElement().appendChild(n);
1111
- }), r;
1084
+ static createSelect(e, t = [], i = {}) {
1085
+ const a = new h("select", t, i);
1086
+ return e.forEach((r) => {
1087
+ const s = document.createElement("option");
1088
+ s.value = r.value, s.textContent = r.text, r.selected && (s.selected = !0), a.getElement().appendChild(s);
1089
+ }), a;
1112
1090
  }
1113
1091
  /**
1114
1092
  * Create an image element
1115
1093
  */
1116
- static createImage(e, t = "", a = [], r = {}) {
1117
- const i = { src: e, alt: t, ...r };
1118
- return new h("img", a, i);
1094
+ static createImage(e, t = "", i = [], a = {}) {
1095
+ const r = { src: e, alt: t, ...a };
1096
+ return new h("img", i, r);
1119
1097
  }
1120
1098
  }
1121
- class wt extends h {
1099
+ class Ft extends h {
1122
1100
  messageComponent;
1123
1101
  constructor(e) {
1124
1102
  super("div", []);
1125
- const t = S.createDiv(["error-alert"], {
1103
+ const t = F.createDiv(["error-alert"], {
1126
1104
  role: "alert",
1127
1105
  "aria-live": "polite"
1128
- }), a = S.createDiv(["error-alert-content"]), r = S.createDiv([
1106
+ }), i = F.createDiv(["error-alert-content"]), a = F.createDiv([
1129
1107
  "error-alert-icon-container"
1130
1108
  ]);
1131
- r.getElement().innerHTML = this.createAlertCircleSVG();
1132
- const i = S.createDiv([
1109
+ a.getElement().innerHTML = this.createAlertCircleSVG();
1110
+ const r = F.createDiv([
1133
1111
  "error-alert-text-container"
1134
- ]), n = new h("h4", [
1112
+ ]), s = new h("h4", [
1135
1113
  "error-alert-title"
1136
1114
  ]);
1137
- n.setText("Checkout Error"), this.messageComponent = new h("p", [
1115
+ s.setText("Checkout Error"), this.messageComponent = new h("p", [
1138
1116
  "error-alert-message"
1139
- ]), this.messageComponent.setText(e.message || "Bad request"), i.appendChild(n), i.appendChild(this.messageComponent), a.appendChild(r), a.appendChild(i), t.appendChild(a), this.appendChild(t);
1117
+ ]), this.messageComponent.setText(e.message || "Bad request"), r.appendChild(s), r.appendChild(this.messageComponent), i.appendChild(a), i.appendChild(r), t.appendChild(i), this.appendChild(t);
1140
1118
  }
1141
1119
  createAlertCircleSVG() {
1142
1120
  return `
@@ -1161,29 +1139,36 @@ class wt extends h {
1161
1139
  return this.messageComponent.setText(e), this;
1162
1140
  }
1163
1141
  }
1164
- class P extends h {
1142
+ class V extends h {
1165
1143
  titleElement;
1166
1144
  constructor(e = {}) {
1167
1145
  super("div", ["blur-bg"]);
1168
- const t = S.createDiv(["loader"]);
1146
+ const t = F.createDiv(["loader"]);
1169
1147
  this.titleElement = new h("h3", ["title"]), this.titleElement.setText(e.text || ""), this.appendChild(t), this.appendChild(this.titleElement);
1170
1148
  }
1171
1149
  setText(e) {
1172
1150
  return this.titleElement.setText(e), this;
1173
1151
  }
1174
1152
  }
1175
- class x extends h {
1153
+ class E extends h {
1154
+ span;
1176
1155
  constructor(e) {
1177
- super("div", []);
1178
- const t = document.createElement("span");
1179
- t.className = "form-helper-text", t.textContent = e.text || "", this.getElement().appendChild(t);
1156
+ super("div", []), this.span = document.createElement("span"), this.span.className = "form-helper-text", e.visible === !1 && this.span.classList.add("form-helper-text-hidden"), this.span.textContent = e.text || "", this.getElement().appendChild(this.span);
1180
1157
  }
1181
1158
  setText(e) {
1182
- const t = this.getElement().querySelector(".form-helper-text");
1183
- return t && (t.textContent = e), this;
1159
+ return this.span && (this.span.textContent = e), this;
1160
+ }
1161
+ toggleVisibility(e) {
1162
+ return e ? this.showMessage() : this.hideMessage(), this;
1163
+ }
1164
+ showMessage() {
1165
+ return this.span && this.span.classList.remove("form-helper-text-hidden"), this;
1166
+ }
1167
+ hideMessage() {
1168
+ return this.span && this.span.classList.add("form-helper-text-hidden"), this;
1184
1169
  }
1185
1170
  }
1186
- class Lt extends h {
1171
+ class wt extends h {
1187
1172
  constructor(e) {
1188
1173
  super("label", ["input-label"], {
1189
1174
  for: e.id
@@ -1192,12 +1177,12 @@ class Lt extends h {
1192
1177
  t.style.fontFamily = "inherit", t.style.color = e.styles.color, t.style.fontSize = `${e.styles.fontSize}px`;
1193
1178
  }
1194
1179
  }
1195
- class T extends h {
1180
+ class P extends h {
1196
1181
  inputElement;
1197
1182
  helperText = null;
1198
1183
  constructor(e) {
1199
1184
  if (super("div", ["input-wrapper"]), e.label && e.styles) {
1200
- const a = new Lt({
1185
+ const i = new wt({
1201
1186
  styles: {
1202
1187
  color: e.styles.color,
1203
1188
  fontSize: e.styles.fontSize
@@ -1205,22 +1190,25 @@ class T extends h {
1205
1190
  label: e.label,
1206
1191
  id: e.name
1207
1192
  });
1208
- this.appendChild(a);
1193
+ this.appendChild(i);
1209
1194
  }
1210
1195
  const t = {
1211
1196
  id: e.name,
1212
1197
  name: e.name,
1213
1198
  class: `form-input ${e.error ? "form-input-error" : ""}`
1214
1199
  };
1215
- if (e.placeholder && (t.placeholder = e.placeholder), e.value && (t.value = e.value), e.required && (t.required = String(e.required)), e.disabled && (t.disabled = String(e.disabled)), e.autocomplete && (t.autocomplete = e.autocomplete), this.inputElement = S.createInput(
1200
+ if (e.placeholder && (t.placeholder = e.placeholder), e.value && (t.value = e.value), e.required && (t.required = String(e.required)), e.disabled && (t.disabled = String(e.disabled)), e.autocomplete && (t.autocomplete = e.autocomplete), this.inputElement = F.createInput(
1216
1201
  e.type || "text",
1217
1202
  [],
1218
1203
  t
1219
1204
  ), e.styles) {
1220
- const a = this.inputElement.getElement();
1221
- a.style.fontFamily = `"${e.styles.fontFamily}", sans-serif`, a.style.color = e.styles.color, a.style.fontSize = `${e.styles.fontSize}px`, a.style.borderRadius = e.styles.borderRadius;
1205
+ const i = this.inputElement.getElement();
1206
+ i.style.fontFamily = `"${e.styles.fontFamily}", sans-serif`, i.style.color = e.styles.color, i.style.fontSize = `${e.styles.fontSize}px`, i.style.borderRadius = e.styles.borderRadius;
1222
1207
  }
1223
- e.onChange && this.inputElement.getElement().addEventListener("input", e.onChange), this.getElement().appendChild(this.inputElement.getElement()), e.error && (this.helperText = new x({ text: e.errorMsg }), this.appendChild(this.helperText));
1208
+ e.onChange && this.inputElement.getElement().addEventListener("input", e.onChange), this.getElement().appendChild(this.inputElement.getElement()), e.error ? (this.helperText = new E({
1209
+ text: e.errorMsg,
1210
+ visible: !0
1211
+ }), this.appendChild(this.helperText)) : (this.helperText = new E({ text: "", visible: !1 }), this.appendChild(this.helperText));
1224
1212
  }
1225
1213
  getValue() {
1226
1214
  return this.inputElement.getElement().value;
@@ -1229,11 +1217,11 @@ class T extends h {
1229
1217
  return this.inputElement.getElement().value = e, this;
1230
1218
  }
1231
1219
  setError(e, t) {
1232
- const a = this.inputElement.getElement();
1233
- return e ? (a.classList.add("form-input-error"), !this.helperText && t ? (this.helperText = new x({ text: t }), this.appendChild(this.helperText)) : this.helperText && t && this.helperText.setText(t)) : (a.classList.remove("form-input-error"), this.helperText && (this.helperText.getElement().remove(), this.helperText = null)), this;
1220
+ const i = this.inputElement.getElement();
1221
+ return e ? (i.classList.add("form-input-error"), !this.helperText && t ? (this.helperText = new E({ text: t }), this.appendChild(this.helperText)) : this.helperText && t ? this.helperText.setText(t).toggleVisibility(!0) : this.helperText && this.helperText.toggleVisibility(!0)) : (i.classList.remove("form-input-error"), this.helperText && this.helperText.toggleVisibility(!1)), this;
1234
1222
  }
1235
- addEventListener(e, t, a) {
1236
- return this.inputElement.getElement().addEventListener(e, t, a), this;
1223
+ addEventListener(e, t, i) {
1224
+ return this.inputElement.getElement().addEventListener(e, t, i), this;
1237
1225
  }
1238
1226
  }
1239
1227
  class Mt {
@@ -1241,33 +1229,33 @@ class Mt {
1241
1229
  constructor(e) {
1242
1230
  const {
1243
1231
  value: t,
1244
- onChange: a,
1245
- onBlur: r,
1246
- error: i,
1247
- errorMsg: n,
1248
- checkoutProfile: o,
1232
+ onChange: i,
1233
+ onBlur: a,
1234
+ error: r,
1235
+ errorMsg: s,
1236
+ checkoutProfile: n,
1249
1237
  translationFunc: l,
1250
1238
  autocomplete: c = "cc-name"
1251
1239
  } = e;
1252
- this.input = new T({
1240
+ this.input = new P({
1253
1241
  name: "name",
1254
1242
  label: l("cardholderNameLabel"),
1255
- error: i,
1256
- errorMsg: n,
1243
+ error: r,
1244
+ errorMsg: s,
1257
1245
  styles: {
1258
- color: o.styles.textColor,
1259
- borderRadius: `${o.styles.borderRadius}px`,
1260
- fontSize: o.styles.fontSize,
1261
- fontFamily: o.styles.fontFamily
1246
+ color: n.styles.textColor,
1247
+ borderRadius: `${n.styles.borderRadius}px`,
1248
+ fontSize: n.styles.fontSize,
1249
+ fontFamily: n.styles.fontFamily
1262
1250
  },
1263
1251
  placeholder: l("cardholderNamePlaceholder"),
1264
1252
  value: t,
1265
1253
  autocomplete: c,
1266
1254
  onChange: (d) => {
1267
- this.trim(), a(d);
1255
+ this.trim(), i(d);
1268
1256
  }
1269
1257
  }), this.input.addEventListener("blur", (d) => {
1270
- r(d);
1258
+ a(d);
1271
1259
  });
1272
1260
  }
1273
1261
  getValue() {
@@ -1290,13 +1278,13 @@ class Mt {
1290
1278
  return this.input.appendTo(e), this;
1291
1279
  }
1292
1280
  }
1293
- class kt extends h {
1281
+ class Lt extends h {
1294
1282
  constructor(e) {
1295
1283
  super("div", []);
1296
1284
  const t = document.createElement("div");
1297
1285
  t.className = e.isLoading ? "loading" : "", t.style.borderRadius = `0px 0px ${e.styles.borderRadius}px 0px`;
1298
- const a = document.createElement("div");
1299
- a.id = "card-cvv-element", a.className = `card-element ${e.isFocused ? "card-element-focus" : ""}`, a.style.zIndex = e.isFocused ? "2" : "0", t.appendChild(a), this.getElement().appendChild(t);
1286
+ const i = document.createElement("div");
1287
+ i.id = "card-cvv-element", i.className = `card-element ${e.isFocused ? "card-element-focus" : ""}`, i.style.zIndex = e.isFocused ? "2" : "0", t.appendChild(i), this.getElement().appendChild(t);
1300
1288
  }
1301
1289
  setFocused(e) {
1302
1290
  const t = this.getElement().querySelector("#card-cvv-element");
@@ -1307,50 +1295,50 @@ class kt extends h {
1307
1295
  return t && (e ? t.classList.add("loading") : t.classList.remove("loading")), this;
1308
1296
  }
1309
1297
  }
1310
- 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", Tt = "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", 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='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", F = [
1298
+ const kt = "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", Tt = "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", 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='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", w = [
1311
1299
  {
1312
1300
  type: "visa",
1313
- imgSrc: Nt
1301
+ imgSrc: zt
1314
1302
  },
1315
1303
  {
1316
1304
  type: "masterCard",
1317
- imgSrc: zt
1305
+ imgSrc: It
1318
1306
  },
1319
1307
  {
1320
1308
  type: "americanExpress",
1321
- imgSrc: It
1309
+ imgSrc: kt
1322
1310
  },
1323
1311
  {
1324
1312
  type: "discover",
1325
1313
  imgSrc: Tt
1326
1314
  }
1327
1315
  ];
1328
- class At extends h {
1316
+ class Pt extends h {
1329
1317
  cardType;
1330
1318
  constructor(e) {
1331
1319
  super("div", []), this.cardType = e.cardType;
1332
1320
  const t = document.createElement("label");
1333
1321
  t.setAttribute("for", "cardNumber"), t.textContent = e.label, t.style.color = e.styles.color, t.style.fontSize = `${e.styles.fontSize}px`, t.style.display = "block", t.style.marginBottom = "6px", this.getElement().appendChild(t);
1322
+ const i = document.createElement("div");
1323
+ i.className = e.isLoading ? "loading" : "", i.style.borderRadius = `${e.styles.borderRadius}px ${e.styles.borderRadius}px 0px 0px`;
1334
1324
  const a = document.createElement("div");
1335
- a.className = e.isLoading ? "loading" : "", a.style.borderRadius = `${e.styles.borderRadius}px ${e.styles.borderRadius}px 0px 0px`;
1325
+ a.id = "card-element", a.className = `card-element ${e.isFocused ? "card-element-focus" : ""}`, a.style.zIndex = e.isFocused ? "2" : "0";
1336
1326
  const r = document.createElement("div");
1337
- r.id = "card-element", r.className = `card-element ${e.isFocused ? "card-element-focus" : ""}`, r.style.zIndex = e.isFocused ? "2" : "0";
1338
- const i = document.createElement("div");
1339
- if (i.className = "cards-position", e.cardType === "unknown")
1340
- F.forEach((n) => {
1341
- i.appendChild(this.createCardIcon(n));
1327
+ if (r.className = "cards-position", e.cardType === "unknown")
1328
+ w.forEach((s) => {
1329
+ r.appendChild(this.createCardIcon(s));
1342
1330
  });
1343
1331
  else {
1344
- const n = F.find((o) => o.type === e.cardType);
1345
- n && i.appendChild(this.createCardIcon(n));
1332
+ const s = w.find((n) => n.type === e.cardType);
1333
+ s && r.appendChild(this.createCardIcon(s));
1346
1334
  }
1347
- r.appendChild(i), a.appendChild(r), this.getElement().appendChild(a);
1335
+ a.appendChild(r), i.appendChild(a), this.getElement().appendChild(i);
1348
1336
  }
1349
1337
  createCardIcon(e) {
1350
1338
  const t = document.createElement("div");
1351
1339
  t.className = "card-icon";
1352
- const a = document.createElement("img");
1353
- return a.src = e.imgSrc, t.appendChild(a), t;
1340
+ const i = document.createElement("img");
1341
+ return i.src = e.imgSrc, t.appendChild(i), t;
1354
1342
  }
1355
1343
  setFocused(e) {
1356
1344
  const t = this.getElement().querySelector(
@@ -1369,22 +1357,22 @@ class At extends h {
1369
1357
  if (this.cardType === t)
1370
1358
  return this;
1371
1359
  this.cardType = t;
1372
- const a = this.getElement().querySelector(".cards-position");
1373
- if (a)
1374
- if (a.innerHTML = "", this.cardType === "unknown")
1375
- F.forEach((r) => {
1376
- a.appendChild(this.createCardIcon(r));
1360
+ const i = this.getElement().querySelector(".cards-position");
1361
+ if (i)
1362
+ if (i.innerHTML = "", this.cardType === "unknown")
1363
+ w.forEach((a) => {
1364
+ i.appendChild(this.createCardIcon(a));
1377
1365
  });
1378
1366
  else {
1379
- const r = F.find((i) => i.type === this.cardType);
1380
- r ? a.appendChild(this.createCardIcon(r)) : F.forEach((i) => {
1381
- a.appendChild(this.createCardIcon(i));
1367
+ const a = w.find((r) => r.type === this.cardType);
1368
+ a ? i.appendChild(this.createCardIcon(a)) : w.forEach((r) => {
1369
+ i.appendChild(this.createCardIcon(r));
1382
1370
  });
1383
1371
  }
1384
1372
  return this;
1385
1373
  }
1386
1374
  }
1387
- class Pt extends h {
1375
+ class Nt extends h {
1388
1376
  cardNumber;
1389
1377
  cardExpiry;
1390
1378
  cardCvv;
@@ -1393,41 +1381,44 @@ class Pt extends h {
1393
1381
  super("div", []);
1394
1382
  const {
1395
1383
  checkoutProfile: t,
1396
- isLoading: a,
1397
- isFocused: r,
1398
- isCvvFocused: i,
1399
- isCcValid: n,
1400
- isCvvValid: o,
1401
- cardType: l,
1402
- cardExpiry: c,
1403
- cardExpiryError: d,
1404
- cardExpiryTouched: u,
1405
- onChange: E,
1406
- onBlur: f,
1407
- translationFunc: m,
1408
- cardExpiryAutocomplete: y = "cc-exp"
1409
- } = e, v = document.createElement("div");
1410
- this.cardNumber = new At({
1384
+ isLoading: i,
1385
+ isFocused: a,
1386
+ isCvvFocused: r,
1387
+ isCcValid: s,
1388
+ isCvvValid: n,
1389
+ isCcTouched: l,
1390
+ isCvvTouched: c,
1391
+ cardType: d,
1392
+ cardExpiry: u,
1393
+ cardExpiryError: p,
1394
+ cardExpiryTouched: g,
1395
+ onChange: m,
1396
+ onBlur: b,
1397
+ translationFunc: S,
1398
+ cardExpiryAutocomplete: x = "cc-exp"
1399
+ } = e, C = document.createElement("div");
1400
+ this.cardNumber = new Pt({
1411
1401
  styles: {
1412
1402
  color: t.styles.textColor,
1413
1403
  fontSize: t.styles.fontSize,
1414
1404
  borderRadius: t.styles.borderRadius
1415
1405
  },
1416
- label: m("cardInformation"),
1417
- isLoading: a,
1418
- isFocused: r,
1419
- cardType: l
1420
- }), v.appendChild(this.cardNumber.getElement());
1421
- const p = document.createElement("div");
1422
- p.className = "card-details", this.cardExpiry = new T({
1406
+ label: S("cardInformation"),
1407
+ isLoading: i,
1408
+ isFocused: a,
1409
+ cardType: d
1410
+ }), C.appendChild(this.cardNumber.getElement());
1411
+ const v = document.createElement("div");
1412
+ v.className = "card-details", this.cardExpiry = new P({
1423
1413
  name: "cardExpiry",
1424
- placeholder: m("cardExpiry"),
1425
- error: !!(d && u),
1426
- errorMsg: d,
1427
- value: c,
1428
- autocomplete: y,
1429
- onChange: (g) => {
1430
- this.trimCardExpiry(), E(g);
1414
+ type: "tel",
1415
+ placeholder: S("cardExpiry"),
1416
+ error: !!(p && g),
1417
+ errorMsg: p,
1418
+ value: u,
1419
+ autocomplete: x,
1420
+ onChange: (f) => {
1421
+ this.trimCardExpiry(), m(f);
1431
1422
  },
1432
1423
  styles: {
1433
1424
  color: t.styles.textColor,
@@ -1435,43 +1426,70 @@ class Pt extends h {
1435
1426
  fontSize: t.styles.fontSize,
1436
1427
  fontFamily: t.styles.fontFamily
1437
1428
  }
1438
- }), this.cardExpiry.addEventListener("blur", f), this.cardExpiry.addEventListener("keydown", (g) => {
1439
- const M = g;
1429
+ }), this.cardExpiry.addEventListener("blur", b), this.cardExpiry.addEventListener("keydown", (f) => {
1430
+ const T = f;
1440
1431
  ![
1441
1432
  "Backspace",
1442
1433
  "Delete",
1443
1434
  "ArrowLeft",
1444
1435
  "ArrowRight",
1445
1436
  "Tab"
1446
- ].includes(M.key) && !/^\d$/.test(M.key) && M.preventDefault();
1437
+ ].includes(T.key) && !/^\d$/.test(T.key) && T.preventDefault();
1447
1438
  });
1448
- const C = this.cardExpiry.getElement();
1449
- C.style.height = "100%";
1450
- const b = document.createElement("div");
1451
- if (b.className = "input-wrapper", this.cardCvv = new kt({
1439
+ const R = this.cardExpiry.getElement();
1440
+ R.style.height = "38.5px";
1441
+ const k = document.createElement("div");
1442
+ k.className = "input-wrapper", this.cardCvv = new Lt({
1452
1443
  styles: {
1453
1444
  borderRadius: typeof t.styles.borderRadius == "number" ? t.styles.borderRadius : 0
1454
1445
  },
1455
- isLoading: a,
1456
- isFocused: i
1457
- }), b.appendChild(this.cardCvv.getElement()), p.appendChild(this.cardExpiry.getElement()), p.appendChild(b), v.appendChild(p), this.getElement().appendChild(v), r && !n) {
1458
- const g = new x({
1459
- text: m("validation.cardNumberInvalid")
1446
+ isLoading: i,
1447
+ isFocused: r
1448
+ }), k.appendChild(this.cardCvv.getElement()), v.appendChild(this.cardExpiry.getElement()), v.appendChild(k), 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")
1453
+ });
1454
+ this.validationMessages.set("cardNumber", f), y.appendChild(f.getElement());
1455
+ }
1456
+ if ((r || c) && !n) {
1457
+ const f = new E({
1458
+ text: S("validation.cardSecurityFormat")
1460
1459
  });
1461
- this.validationMessages.set("cardNumber", g), this.appendChild(g);
1460
+ this.validationMessages.set("cardCvv", f), y.appendChild(f.getElement());
1462
1461
  }
1463
- if (i && !o) {
1464
- const g = new x({
1465
- text: m("validation.cardSecurityFormat")
1462
+ if (p && g) {
1463
+ const f = new E({
1464
+ text: p
1466
1465
  });
1467
- this.validationMessages.set("cardCvv", g), this.appendChild(g);
1466
+ this.validationMessages.set("cardExpiry", f), y.appendChild(f.getElement());
1468
1467
  }
1468
+ setTimeout(() => this.updateErrorContainerHeight(), 0);
1469
1469
  }
1470
1470
  updateCardType(e) {
1471
1471
  return this.cardNumber.updateCardType(e), this;
1472
1472
  }
1473
- updateCardExpiry(e, t, a) {
1474
- return this.cardExpiry.setValue(e), t && a ? this.cardExpiry.setError(!0, t) : this.cardExpiry.setError(!1), this;
1473
+ updateCardExpiry(e, t, i) {
1474
+ this.cardExpiry.setValue(e);
1475
+ const a = this.getElement().querySelector(
1476
+ ".error-messages-container"
1477
+ );
1478
+ if (t && i)
1479
+ if (this.cardExpiry.setError(!1), this.validationMessages.has("cardExpiry"))
1480
+ this.validationMessages.get("cardExpiry")?.setText(t);
1481
+ else {
1482
+ const r = new E({
1483
+ text: t
1484
+ });
1485
+ this.validationMessages.set("cardExpiry", r), a.appendChild(r.getElement()), setTimeout(() => this.updateErrorContainerHeight(), 0);
1486
+ }
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());
1491
+ }
1492
+ return this;
1475
1493
  }
1476
1494
  getCardExpiryValue() {
1477
1495
  return this.cardExpiry.getValue();
@@ -1480,61 +1498,87 @@ class Pt extends h {
1480
1498
  const e = this.getCardExpiryValue().trim();
1481
1499
  return this.cardExpiry.setValue(e), this;
1482
1500
  }
1483
- updateCardNumberValidation(e, t, a) {
1484
- if (this.cardNumber.setFocused(e), e && !t) {
1501
+ updateCardNumberValidation(e, t, i, a = !1) {
1502
+ this.cardNumber.setFocused(e);
1503
+ const r = this.getElement().querySelector(
1504
+ ".error-messages-container"
1505
+ );
1506
+ if (!e && a && !(t !== !1)) {
1485
1507
  if (!this.validationMessages.has("cardNumber")) {
1486
- const r = new x({
1487
- text: a("validation.cardNumberInvalid")
1508
+ const n = new E({
1509
+ text: i("validation.cardNumberInvalid")
1488
1510
  });
1489
- this.validationMessages.set("cardNumber", r), this.appendChild(r);
1511
+ this.validationMessages.set("cardNumber", n), r.appendChild(n.getElement()), setTimeout(() => this.updateErrorContainerHeight(), 0);
1490
1512
  }
1491
1513
  } else {
1492
- const r = this.validationMessages.get("cardNumber");
1493
- r && (r.getElement().remove(), this.validationMessages.delete("cardNumber"));
1514
+ const n = this.validationMessages.get("cardNumber");
1515
+ n && (n.getElement().remove(), this.validationMessages.delete("cardNumber"), this.updateErrorContainerHeight());
1494
1516
  }
1495
1517
  return this;
1496
1518
  }
1497
- updateCardCvvValidation(e, t, a) {
1498
- if (this.cardCvv.setFocused(e), e && !t) {
1519
+ updateCardCvvValidation(e, t, i, a = !1) {
1520
+ this.cardCvv.setFocused(e);
1521
+ const r = this.getElement().querySelector(
1522
+ ".error-messages-container"
1523
+ );
1524
+ if (!e && a && !(t !== !1)) {
1499
1525
  if (!this.validationMessages.has("cardCvv")) {
1500
- const r = new x({
1501
- text: a("validation.cardSecurityFormat")
1526
+ const n = new E({
1527
+ text: i("validation.cardSecurityFormat")
1502
1528
  });
1503
- this.validationMessages.set("cardCvv", r), this.appendChild(r);
1529
+ this.validationMessages.set("cardCvv", n), r.appendChild(n.getElement()), setTimeout(() => this.updateErrorContainerHeight(), 0);
1504
1530
  }
1505
1531
  } else {
1506
- const r = this.validationMessages.get("cardCvv");
1507
- r && (r.getElement().remove(), this.validationMessages.delete("cardCvv"));
1532
+ const n = this.validationMessages.get("cardCvv");
1533
+ n && (n.getElement().remove(), this.validationMessages.delete("cardCvv"), this.updateErrorContainerHeight());
1508
1534
  }
1509
1535
  return this;
1510
1536
  }
1511
1537
  setLoading(e) {
1512
1538
  return this.cardNumber.setLoading(e), this.cardCvv.setLoading(e), this;
1513
1539
  }
1540
+ /**
1541
+ * Updates the height of the error messages container based on its content
1542
+ * to ensure smooth animations when adding/removing error messages
1543
+ */
1544
+ updateErrorContainerHeight() {
1545
+ const e = this.getElement().querySelector(
1546
+ ".error-messages-container"
1547
+ );
1548
+ if (e)
1549
+ if (this.validationMessages.size === 0)
1550
+ e.style.height = "0px", e.style.opacity = "0";
1551
+ else {
1552
+ const t = e.style.height, i = e.style.overflow;
1553
+ e.style.height = "auto", e.style.overflow = "visible";
1554
+ const a = e.scrollHeight;
1555
+ e.style.overflow = i, e.style.height = t, e.offsetHeight, e.style.height = a + 4 + "px", e.style.opacity = "1";
1556
+ }
1557
+ }
1514
1558
  }
1515
- class Dt {
1559
+ class At {
1516
1560
  input;
1517
1561
  constructor(e) {
1518
1562
  const {
1519
1563
  value: t,
1520
- onChange: a,
1521
- onBlur: r,
1522
- error: i,
1523
- errorMsg: n,
1524
- checkoutProfile: o,
1564
+ onChange: i,
1565
+ onBlur: a,
1566
+ error: r,
1567
+ errorMsg: s,
1568
+ checkoutProfile: n,
1525
1569
  translationFunc: l,
1526
1570
  autocomplete: c = "email"
1527
1571
  } = e;
1528
- this.input = new T({
1572
+ this.input = new P({
1529
1573
  name: "email",
1530
1574
  label: l("email"),
1531
- error: i,
1532
- errorMsg: n,
1575
+ error: r,
1576
+ errorMsg: s,
1533
1577
  styles: {
1534
- color: o.styles.textColor,
1535
- borderRadius: `${o.styles.borderRadius}px`,
1536
- fontSize: o.styles.fontSize,
1537
- fontFamily: o.styles.fontFamily
1578
+ color: n.styles.textColor,
1579
+ borderRadius: `${n.styles.borderRadius}px`,
1580
+ fontSize: n.styles.fontSize,
1581
+ fontFamily: n.styles.fontFamily
1538
1582
  },
1539
1583
  placeholder: l("email"),
1540
1584
  type: "email",
@@ -1542,9 +1586,9 @@ class Dt {
1542
1586
  autocomplete: c,
1543
1587
  // Wrap the original onChange to apply trim before calling it
1544
1588
  onChange: (d) => {
1545
- this.trim(), a(d);
1589
+ this.trim(), i(d);
1546
1590
  }
1547
- }), this.input.addEventListener("blur", r);
1591
+ }), this.input.addEventListener("blur", a);
1548
1592
  }
1549
1593
  getValue() {
1550
1594
  return this.input.getValue();
@@ -1566,19 +1610,19 @@ class Dt {
1566
1610
  return this.input.appendTo(e), this;
1567
1611
  }
1568
1612
  }
1569
- 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";
1570
- class Rt extends h {
1613
+ const Dt = "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 Vt extends h {
1571
1615
  formData;
1572
1616
  onSubmit;
1573
1617
  isSubmitting = !1;
1574
1618
  constructor(e) {
1575
1619
  super("div", ["paypal"]);
1576
- const { formData: t, onSubmit: a } = e;
1577
- this.formData = t, this.onSubmit = a, this.getElement().style.cursor = a ? "pointer" : "default", this.getElement().style.opacity = "1";
1578
- const r = document.createElement("div");
1579
- r.className = "paypal-icon-container";
1580
- const i = document.createElement("img");
1581
- i.src = $t, i.style.width = "69px", i.style.height = "22px", i.style.maxWidth = "100%", i.style.display = "block", i.style.height = "auto", r.appendChild(i), this.getElement().appendChild(r), a && this.getElement().addEventListener("click", () => this.handleSubmit());
1620
+ const { formData: t, onSubmit: i } = e;
1621
+ this.formData = t, this.onSubmit = i, this.getElement().style.cursor = i ? "pointer" : "default", this.getElement().style.opacity = "1";
1622
+ const a = document.createElement("div");
1623
+ a.className = "paypal-icon-container";
1624
+ const r = document.createElement("img");
1625
+ r.src = Dt, 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());
1582
1626
  }
1583
1627
  async handleSubmit() {
1584
1628
  if (!(!this.onSubmit || this.isSubmitting)) {
@@ -1599,34 +1643,64 @@ class Rt extends h {
1599
1643
  return this.isSubmitting = e, this.getElement().style.opacity = e ? "0.7" : "1", this;
1600
1644
  }
1601
1645
  }
1602
- class Vt extends h {
1646
+ class $t extends h {
1603
1647
  paymentMethods;
1604
1648
  constructor(e) {
1605
- const { checkoutProfile: t, formData: a, onPaypalSubmit: r } = e;
1649
+ const {
1650
+ checkoutProfile: t,
1651
+ formData: i,
1652
+ onPaypalSubmit: a,
1653
+ supportedPaymentMethods: r
1654
+ } = e;
1606
1655
  if (super("div", ["payment-methods"]), this.paymentMethods = /* @__PURE__ */ new Map(), !t?.additionalPaymentMethods) {
1607
1656
  this.getElement().style.display = "none";
1608
1657
  return;
1609
1658
  }
1610
- const i = Object.entries(
1659
+ if (r === void 0) {
1660
+ console.log(
1661
+ "[PaymentMethods] No supportedPaymentMethods provided, hiding payment methods"
1662
+ ), this.getElement().style.display = "none";
1663
+ return;
1664
+ }
1665
+ const s = Object.entries(
1611
1666
  t.additionalPaymentMethods
1612
- ).filter(([, n]) => n.enabled).sort((n, o) => n[1].order - o[1].order);
1613
- if (i.length === 0) {
1667
+ ).filter(([n, l]) => {
1668
+ const c = l.enabled, d = r ? r[n] === !0 : !0;
1669
+ return c && d;
1670
+ }).sort((n, l) => n[1].order - l[1].order);
1671
+ if (s.length === 0) {
1614
1672
  this.getElement().style.display = "none";
1615
1673
  return;
1616
1674
  }
1617
- for (const [n] of i)
1675
+ for (const [n] of s)
1618
1676
  switch (n) {
1619
1677
  case "paypal": {
1620
- if (r) {
1621
- const o = new Rt({
1678
+ if (a) {
1679
+ const l = new Vt({
1622
1680
  checkoutProfile: t,
1623
- formData: a,
1624
- onSubmit: r
1681
+ formData: i,
1682
+ onSubmit: a
1625
1683
  });
1626
- this.paymentMethods.set("paypal", o), o.appendTo(this.getElement());
1684
+ this.paymentMethods.set("paypal", l), l.appendTo(this.getElement());
1627
1685
  }
1628
1686
  break;
1629
1687
  }
1688
+ // Add cases for other payment methods when they become available
1689
+ // case 'googlepay':
1690
+ // const googlePayButton = new GooglePayButton({ checkoutProfile });
1691
+ // this.paymentMethods.set('googlepay', googlePayButton);
1692
+ // googlePayButton.appendTo(this.getElement());
1693
+ // break;
1694
+ // case 'applepay':
1695
+ // const applePayButton = new ApplePayButton({ checkoutProfile });
1696
+ // this.paymentMethods.set('applepay', applePayButton);
1697
+ // applePayButton.appendTo(this.getElement());
1698
+ // break;
1699
+ default:
1700
+ console.warn(
1701
+ `[PaymentMethods] Unsupported payment method: ${n}`
1702
+ );
1703
+ break;
1630
1704
  }
1631
1705
  }
1632
1706
  updateFormData(e) {
@@ -1637,8 +1711,8 @@ class Vt extends h {
1637
1711
  return this.paymentMethods.size > 0 && this.getElement().style.display !== "none";
1638
1712
  }
1639
1713
  }
1640
- const Bt = 17;
1641
- class Ot extends h {
1714
+ const Rt = 17;
1715
+ class Bt extends h {
1642
1716
  styles;
1643
1717
  isHovered = !1;
1644
1718
  constructor(e) {
@@ -1649,7 +1723,7 @@ class Ot extends h {
1649
1723
  }
1650
1724
  applyStyles() {
1651
1725
  const e = this.getElement();
1652
- e.style.backgroundColor = this.isHovered ? `color-mix(in srgb, ${this.styles.backgroundColor} 80%, transparent)` : this.styles.backgroundColor, e.disabled ? e.style.color = "#cccccc" : e.style.color = this.styles.color, e.style.borderRadius = this.styles.borderRadius === Bt ? "100vmax" : `${this.styles.borderRadius}px`, e.style.fontSize = `${this.styles.fontSize}px`, e.style.fontFamily = `${this.styles.fontFamily}, sans-serif`;
1726
+ e.style.backgroundColor = this.isHovered ? `color-mix(in srgb, ${this.styles.backgroundColor} 80%, transparent)` : this.styles.backgroundColor, e.disabled ? e.style.color = "#cccccc" : e.style.color = this.styles.color, e.style.borderRadius = this.styles.borderRadius === Rt ? "100vmax" : `${this.styles.borderRadius}px`, e.style.fontSize = `${this.styles.fontSize}px`, e.style.fontFamily = `${this.styles.fontFamily}, sans-serif`;
1653
1727
  }
1654
1728
  handleMouseEnter() {
1655
1729
  this.isHovered = !0, this.applyStyles();
@@ -1661,20 +1735,20 @@ class Ot extends h {
1661
1735
  return this.getElement().disabled = e, e ? (this.addClass("disabled"), this.removeClass("valid")) : (this.removeClass("disabled"), this.addClass("valid")), this.applyStyles(), this;
1662
1736
  }
1663
1737
  }
1664
- class Ht {
1738
+ class Ot {
1665
1739
  button;
1666
1740
  constructor(e) {
1667
- const { disabled: t, checkoutProfile: a, translationFunc: r } = e;
1668
- this.button = new Ot({
1669
- text: r(
1670
- `buttonTexts.${a?.layout.actionButton.translationKey}`
1741
+ const { disabled: t, checkoutProfile: i, translationFunc: a } = e;
1742
+ this.button = new Bt({
1743
+ text: a(
1744
+ `buttonTexts.${i?.layout.actionButton.translationKey}`
1671
1745
  ),
1672
1746
  styles: {
1673
- backgroundColor: a.styles.buttonColor,
1674
- color: a.styles.buttonTextColor,
1675
- fontFamily: a.styles.fontFamily,
1676
- borderRadius: a.styles.borderRadius,
1677
- fontSize: a.styles.buttonFontSize
1747
+ backgroundColor: i.styles.buttonColor,
1748
+ color: i.styles.buttonTextColor,
1749
+ fontFamily: i.styles.fontFamily,
1750
+ borderRadius: i.styles.borderRadius,
1751
+ fontSize: i.styles.buttonFontSize
1678
1752
  },
1679
1753
  disabled: t
1680
1754
  });
@@ -1685,19 +1759,20 @@ class Ht {
1685
1759
  setDisabled(e) {
1686
1760
  return this.button.setDisabled(e), this;
1687
1761
  }
1688
- addEventListener(e, t, a) {
1689
- return this.button.addEventListener(e, t, a), this;
1762
+ addEventListener(e, t, i) {
1763
+ return this.button.addEventListener(e, t, i), this;
1690
1764
  }
1691
1765
  appendTo(e) {
1692
1766
  return this.button.appendTo(e), this;
1693
1767
  }
1694
1768
  }
1695
- const Kt = "https://test-htp.tokenex.com/Iframe/Iframe-v3.min.js", jt = "https://htp.tokenex.com/iframe/iframe-v3.min.js";
1696
- class Ut extends h {
1769
+ const Ht = "https://test-htp.tokenex.com/Iframe/Iframe-v3.min.js", Kt = "https://htp.tokenex.com/iframe/iframe-v3.min.js";
1770
+ class jt extends h {
1697
1771
  options;
1698
1772
  isSubmitting = !1;
1699
1773
  scriptCleanup;
1700
1774
  fontCleanup;
1775
+ tokenExScriptPromise;
1701
1776
  // Form components
1702
1777
  emailField;
1703
1778
  cardSection;
@@ -1707,12 +1782,12 @@ class Ut extends h {
1707
1782
  spinner;
1708
1783
  alert;
1709
1784
  // factories
1710
- formManager = Y();
1785
+ formManager = J();
1711
1786
  checkoutProfile;
1712
- translation = I();
1787
+ translation = z();
1713
1788
  iframeHook;
1714
1789
  constructor(e) {
1715
- super("form", ["form-container"]), this.options = e, this.checkoutProfile = H({
1790
+ super("form", ["form-container"]), this.options = e, this.checkoutProfile = U({
1716
1791
  apiKey: e.apiKey,
1717
1792
  profileId: e.profileId,
1718
1793
  environment: e.environment
@@ -1735,31 +1810,32 @@ class Ut extends h {
1735
1810
  };
1736
1811
  handleProfileStateChange = (e) => {
1737
1812
  if (!e.isLoading)
1738
- if (this.setLoadingState(!1), e.checkoutProfile)
1813
+ if (e.checkoutProfile)
1739
1814
  try {
1740
- if (e.checkoutProfile.styles?.fontFamily)
1815
+ if (console.log("[Form] Profile loaded, starting render."), e.checkoutProfile.styles?.fontFamily)
1741
1816
  try {
1742
- const { cleanup: t } = St({
1817
+ const { cleanup: t } = bt({
1743
1818
  fontFamily: e.checkoutProfile.styles.fontFamily
1744
1819
  });
1745
1820
  this.fontCleanup = t;
1746
1821
  } catch (t) {
1747
1822
  console.error("Error loading Google Font:", t);
1748
1823
  }
1749
- this.renderFormComponents(), this.initializeTokenExIframe().catch((t) => {
1824
+ this.renderFormComponents(), console.log("[Form] Initializing TokenEx iframe..."), this.initializeTokenExIframe().catch((t) => {
1750
1825
  console.error("Error initializing TokenEx iframe:", t);
1751
1826
  });
1752
1827
  } catch (t) {
1753
1828
  console.error("Error in profile state change:", t);
1754
- const a = e.error || "Failed to load checkout profile data";
1755
- this.setErrorMessage(a);
1829
+ const i = e.error || "Failed to load checkout profile data";
1830
+ this.setErrorMessage(i);
1756
1831
  }
1757
- else e.error && (console.error("NO profile found", e.error), this.setErrorMessage(e.error));
1832
+ else e.error && (console.error("NO profile found", e.error), this.setErrorMessage(e.error), this.setLoadingState(!1));
1758
1833
  };
1759
1834
  applyFormContainerStyles(e) {
1760
1835
  e.fontFamily && (this.getElement().style.fontFamily = e.fontFamily);
1761
1836
  }
1762
1837
  initializeTokenExIframe = async () => {
1838
+ console.log("[Form] initializeTokenExIframe started.");
1763
1839
  const e = this.checkoutProfile.getState();
1764
1840
  if (!e.checkoutProfile) {
1765
1841
  console.error("Cannot initialize iframe: No checkout profile available");
@@ -1767,57 +1843,64 @@ class Ut extends h {
1767
1843
  }
1768
1844
  if (!this.iframeHook)
1769
1845
  try {
1770
- if (!("TokenEx" in globalThis))
1771
- return new Promise((n) => {
1772
- setTimeout(() => {
1773
- this.initializeTokenExIframe().then(n);
1774
- }, 500);
1775
- });
1776
- const { inputStyles: t, formContainerStyle: a } = Ft(
1846
+ if (await this.tokenExScriptPromise, console.log(
1847
+ "[Form] TokenEx script is loaded, proceeding with iframe initialization."
1848
+ ), !("TokenEx" in globalThis)) {
1849
+ console.error(
1850
+ "[Form] TokenEx script loaded but TokenEx is not available in globalThis."
1851
+ );
1852
+ return;
1853
+ }
1854
+ const { inputStyles: t, formContainerStyle: i } = St(
1777
1855
  e.checkoutProfile
1778
1856
  );
1779
- this.applyFormContainerStyles(a);
1780
- try {
1781
- this.cardSection || this.createCardSection(e.checkoutProfile);
1782
- } catch (n) {
1783
- console.error("Failed to create card section:", n);
1784
- }
1785
- const r = document.getElementById("card-element"), i = document.getElementById("card-cvv-element");
1786
- if (!r || !i) {
1857
+ this.applyFormContainerStyles(i);
1858
+ const a = document.getElementById("card-element"), r = document.getElementById("card-cvv-element");
1859
+ if (!a || !r) {
1787
1860
  console.error(
1788
- "Card elements not found, cannot initialize TokenEx iframe"
1861
+ "[Form] Card elements not found, cannot initialize TokenEx iframe."
1789
1862
  );
1790
1863
  return;
1791
1864
  }
1792
- this.iframeHook = Q({
1865
+ this.iframeHook = X({
1793
1866
  apiKey: this.options.apiKey,
1794
1867
  checkoutProfile: e.checkoutProfile,
1795
1868
  inputStyles: t,
1796
- setFormData: (n) => {
1797
- this.formManager.setFormData(n);
1869
+ setFormData: (s) => {
1870
+ this.formManager.setFormData(s);
1798
1871
  },
1799
- environment: this.options.environment
1800
- }), this.iframeHook?.subscribe(this.handleIframeStateChange), await this.iframeHook?.initialize();
1872
+ environment: this.options.environment,
1873
+ 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.");
1801
1875
  } catch (t) {
1802
1876
  throw console.error("Failed to initialize payment form:", t), t;
1803
1877
  }
1804
1878
  };
1879
+ // Track if the card number and CVV have been touched
1880
+ isCcTouched = !1;
1881
+ isCvvTouched = !1;
1805
1882
  handleIframeStateChange = (e) => {
1806
- this.cardSection && (this.cardSection.updateCardNumberValidation(
1883
+ 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));
1886
+ }
1887
+ this.cardSection && (e.isFocused && (this.isCcTouched = !0), e.isCvvFocused && (this.isCvvTouched = !0), this.cardSection.updateCardNumberValidation(
1807
1888
  e.isFocused,
1808
1889
  e.isCcValid,
1809
- this.translation.t
1890
+ this.translation.t,
1891
+ this.isCcTouched
1810
1892
  ), this.cardSection.updateCardCvvValidation(
1811
1893
  e.isCvvFocused,
1812
1894
  e.isCvvValid,
1813
- this.translation.t
1814
- ), this.cardSection.updateCardType(e.possibleCardType), this.cardSection.setLoading(e.loadingIframe)), this.submitButton && this.submitButton.setDisabled(this.isFormDisabled());
1895
+ this.translation.t,
1896
+ this.isCvvTouched
1897
+ ), this.cardSection.updateCardType(e.possibleCardType), this.cardSection.setLoading(e.loadingIframe)), e.loadingIframe || this.setLoadingState(!1), this.submitButton && this.submitButton.setDisabled(this.isFormDisabled());
1815
1898
  };
1816
1899
  createCardSection = (e) => {
1817
1900
  if (!this.cardSection)
1818
1901
  try {
1819
- const { formData: t, errors: a, touched: r } = this._getFormStateData();
1820
- let i = {
1902
+ const { formData: t, errors: i, touched: a } = this._getFormStateData();
1903
+ let r = {
1821
1904
  loadingIframe: !0,
1822
1905
  isFocused: !1,
1823
1906
  isCvvFocused: !1,
@@ -1825,46 +1908,38 @@ class Ut extends h {
1825
1908
  isCvvValid: !1,
1826
1909
  possibleCardType: "unknown"
1827
1910
  };
1828
- if (this.iframeHook && (i = this.iframeHook.getState()), this.cardSection = new Pt({
1911
+ this.iframeHook && (r = this.iframeHook.getState()), this.cardSection = new Nt({
1829
1912
  checkoutProfile: e,
1830
- isLoading: i.loadingIframe,
1831
- isFocused: i.isFocused,
1832
- isCvvFocused: i.isCvvFocused,
1833
- isCcValid: i.isCcValid,
1834
- isCvvValid: i.isCvvValid,
1835
- cardType: i.possibleCardType,
1913
+ isLoading: r.loadingIframe,
1914
+ isFocused: r.isFocused,
1915
+ isCvvFocused: r.isCvvFocused,
1916
+ isCcValid: r.isCcValid,
1917
+ isCvvValid: r.isCvvValid,
1918
+ isCcTouched: !1,
1919
+ // Initially not touched
1920
+ isCvvTouched: !1,
1921
+ // Initially not touched
1922
+ cardType: r.possibleCardType,
1836
1923
  cardExpiry: t.cardExpiry,
1837
- cardExpiryError: a.cardExpiry,
1838
- cardExpiryTouched: !!r.cardExpiry,
1924
+ cardExpiryError: i.cardExpiry,
1925
+ cardExpiryTouched: !!a.cardExpiry,
1839
1926
  onChange: this.handleChange,
1840
1927
  onBlur: this.handleBlur,
1841
1928
  translationFunc: this.translation.t
1842
- }), this.emailField && this.cardholderSection)
1843
- this.element.insertBefore(
1844
- this.cardSection.getElement(),
1845
- this.cardholderSection.getElement()
1846
- );
1847
- else if (this.emailField) {
1848
- const n = this.emailField.getElement().nextSibling;
1849
- n ? this.element.insertBefore(
1850
- this.cardSection.getElement(),
1851
- n
1852
- ) : this.element.appendChild(this.cardSection.getElement());
1853
- } else
1854
- this.element.appendChild(this.cardSection.getElement()), console.warn(
1855
- "Card section inserted at end of form - component order may be incorrect"
1856
- );
1857
- this.updateFormUI(), this.cardSection && this.emailField && this.cardholderSection && this.submitButton;
1929
+ }), this.element.appendChild(this.cardSection.getElement());
1858
1930
  } catch (t) {
1859
1931
  console.error("Error creating card section:", t), this.setErrorMessage("Card section temporarily unavailable");
1860
1932
  }
1861
1933
  };
1862
1934
  initializeForm() {
1863
- this.setLoadingState(!0), this.options.errorMsg && this.setErrorMessage(this.options.errorMsg);
1864
- const e = this.options.environment === "test" ? Kt : jt, { cleanup: t, isLoaded: a } = xt({
1935
+ console.log("[Form] initializeForm started."), this.setLoadingState(!0), this.options.errorMsg && this.setErrorMessage(this.options.errorMsg);
1936
+ const e = this.options.environment === "test" ? Ht : Kt;
1937
+ console.log("[Form] Appending TokenEx script.");
1938
+ const { cleanup: t, isLoaded: i } = xt({
1865
1939
  scriptSrc: e
1866
1940
  });
1867
- this.scriptCleanup = t, a.then(() => {
1941
+ this.scriptCleanup = t, this.tokenExScriptPromise = i, i.then(() => {
1942
+ console.log("[Form] TokenEx script loaded successfully.");
1868
1943
  }).catch(() => {
1869
1944
  this.setLoadingState(!1), this.setErrorMessage(
1870
1945
  "Failed to load payment system. Please try again later."
@@ -1872,61 +1947,70 @@ class Ut extends h {
1872
1947
  });
1873
1948
  }
1874
1949
  renderFormComponents() {
1875
- if (this.emailField)
1950
+ if (console.log("[Form] renderFormComponents started."), this.emailField) {
1951
+ console.log("[Form] Components already rendered, skipping.");
1876
1952
  return;
1953
+ }
1877
1954
  const e = this.checkoutProfile.getState();
1878
1955
  if (!e.checkoutProfile) {
1879
1956
  this.setErrorMessage("Failed to load checkout configuration");
1880
1957
  return;
1881
1958
  }
1882
1959
  try {
1883
- this.createPaymentMethods(e.checkoutProfile);
1960
+ console.log("[Form] Creating payment methods."), this.createPaymentMethods(e.checkoutProfile);
1884
1961
  } catch (t) {
1885
1962
  console.error("Failed to create payment methods:", t);
1886
1963
  }
1887
1964
  try {
1888
- this.createEmailField(e.checkoutProfile);
1965
+ console.log("[Form] Creating email field."), this.createEmailField(e.checkoutProfile);
1889
1966
  } catch (t) {
1890
1967
  console.error("Failed to create email field:", t);
1891
1968
  }
1892
1969
  try {
1893
- this.createCardholderSection(e.checkoutProfile);
1970
+ console.log("[Form] Creating card section."), this.createCardSection(e.checkoutProfile);
1971
+ } catch (t) {
1972
+ console.error("Failed to create card section:", t);
1973
+ }
1974
+ try {
1975
+ console.log("[Form] Creating cardholder section."), this.createCardholderSection(e.checkoutProfile);
1894
1976
  } catch (t) {
1895
1977
  console.error("Failed to create cardholder section:", t);
1896
1978
  }
1897
1979
  try {
1898
- this.createSubmitButton(e.checkoutProfile);
1980
+ console.log("[Form] Creating submit button."), this.createSubmitButton(e.checkoutProfile);
1899
1981
  } catch (t) {
1900
1982
  console.error("Failed to create submit button:", t);
1901
1983
  }
1902
1984
  }
1903
- createPaymentMethods(e) {
1985
+ createPaymentMethods(e, t = !1) {
1904
1986
  try {
1905
- if (!e?.additionalPaymentMethods || Object.entries(
1906
- e.additionalPaymentMethods
1907
- ).filter(([, r]) => r.enabled).length === 0)
1987
+ if (!e?.additionalPaymentMethods)
1908
1988
  return;
1909
- const { formData: a } = this._getFormStateData();
1910
- this.paymentMethods = new Vt({
1989
+ const i = this.iframeHook?.getState().iframeConfig?.supportedPaymentMethods, { formData: a } = this._getFormStateData();
1990
+ this.paymentMethods = new $t({
1911
1991
  checkoutProfile: e,
1912
1992
  formData: a,
1993
+ supportedPaymentMethods: i,
1913
1994
  onPaypalSubmit: async () => {
1914
1995
  await this.handlePaypalSubmit();
1915
1996
  }
1916
- }), this.element.appendChild(this.paymentMethods.getElement());
1917
- } catch (t) {
1918
- throw console.error("Error creating payment methods:", t), t;
1997
+ }), t ? this.element.insertBefore(
1998
+ this.paymentMethods.getElement(),
1999
+ this.element.firstChild
2000
+ ) : this.element.appendChild(this.paymentMethods.getElement());
2001
+ } catch (i) {
2002
+ throw console.error("Error creating payment methods:", i), i;
1919
2003
  }
1920
2004
  }
1921
2005
  createEmailField(e) {
1922
2006
  try {
1923
- const { formData: t, errors: a, touched: r } = this._getFormStateData();
1924
- this.emailField = new Dt({
2007
+ const { formData: t, errors: i, touched: a } = this._getFormStateData();
2008
+ this.emailField = new At({
1925
2009
  value: t.email,
1926
2010
  onChange: this.handleChange,
1927
2011
  onBlur: this.handleBlur,
1928
- error: !!(a.email && r.email),
1929
- errorMsg: a.email,
2012
+ error: !!(i.email && a.email),
2013
+ errorMsg: i.email,
1930
2014
  checkoutProfile: e,
1931
2015
  translationFunc: this.translation.t
1932
2016
  }), this.element.appendChild(this.emailField.getElement());
@@ -1936,13 +2020,13 @@ class Ut extends h {
1936
2020
  }
1937
2021
  createCardholderSection(e) {
1938
2022
  try {
1939
- const { formData: t, errors: a, touched: r } = this._getFormStateData();
2023
+ const { formData: t, errors: i, touched: a } = this._getFormStateData();
1940
2024
  this.cardholderSection = new Mt({
1941
2025
  value: t.name,
1942
2026
  onChange: this.handleChange,
1943
2027
  onBlur: this.handleBlur,
1944
- error: !!(a.name && r.name),
1945
- errorMsg: a.name,
2028
+ error: !!(i.name && a.name),
2029
+ errorMsg: i.name,
1946
2030
  checkoutProfile: e,
1947
2031
  translationFunc: this.translation.t
1948
2032
  }), this.element.appendChild(this.cardholderSection.getElement());
@@ -1952,7 +2036,7 @@ class Ut extends h {
1952
2036
  }
1953
2037
  createSubmitButton(e) {
1954
2038
  try {
1955
- this.submitButton = new Ht({
2039
+ this.submitButton = new Ot({
1956
2040
  disabled: this.isFormDisabled(),
1957
2041
  checkoutProfile: e,
1958
2042
  translationFunc: this.translation.t
@@ -1962,12 +2046,12 @@ class Ut extends h {
1962
2046
  }
1963
2047
  }
1964
2048
  handleChange = (e) => {
1965
- const t = e.target, { name: a, value: r } = t;
1966
- this.formManager.handleChange(a, r);
2049
+ const t = e.target, { name: i, value: a } = t;
2050
+ this.formManager.handleChange(i, a);
1967
2051
  };
1968
2052
  handleBlur = (e) => {
1969
- const t = e.target, { name: a, value: r } = t;
1970
- this.formManager.handleBlur(a, r);
2053
+ const t = e.target, { name: i, value: a } = t;
2054
+ this.formManager.handleBlur(i, a);
1971
2055
  };
1972
2056
  updateFormUI() {
1973
2057
  const e = this.formManager.getFormState();
@@ -1990,22 +2074,22 @@ class Ut extends h {
1990
2074
  isCvvValid: !1
1991
2075
  };
1992
2076
  this.iframeHook && (t = this.iframeHook.getState());
1993
- const a = Object.keys(e.errors).length > 0, r = (
2077
+ const i = Object.keys(e.errors).length > 0, a = (
1994
2078
  // Only require card validation if CardSection exists
1995
2079
  (!this.cardSection || t.isCcValid && t.isCvvValid) && !!e.formData.email && !!e.formData.name && // Only require card expiry if CardSection exists
1996
2080
  (!this.cardSection || !!e.formData.cardExpiry)
1997
2081
  );
1998
- return a || !r || this.isSubmitting;
2082
+ return i || !a || this.isSubmitting;
1999
2083
  }
2000
2084
  setLoadingState(e) {
2001
2085
  if (this.options.onLoadingStateChange) {
2002
2086
  this.options.onLoadingStateChange(e);
2003
2087
  return;
2004
2088
  }
2005
- e ? (this.hideSpinner(), this.spinner = new P(), this.element.appendChild(this.spinner.getElement())) : this.hideSpinner();
2089
+ e ? (this.hideSpinner(), this.spinner = new V(), this.element.appendChild(this.spinner.getElement())) : this.hideSpinner();
2006
2090
  }
2007
2091
  showSpinner(e) {
2008
- this.hideSpinner(), this.spinner = new P({ text: e }), this.element.appendChild(this.spinner.getElement());
2092
+ this.hideSpinner(), this.spinner = new V({ text: e }), this.element.appendChild(this.spinner.getElement());
2009
2093
  }
2010
2094
  hideSpinner() {
2011
2095
  this.spinner && (this.spinner.getElement().remove(), this.spinner = void 0);
@@ -2053,7 +2137,7 @@ class Ut extends h {
2053
2137
  * Update the form error message
2054
2138
  */
2055
2139
  setErrorMessage(e) {
2056
- return this.alert && (this.alert.getElement().remove(), this.alert = void 0), this.alert = new wt({ message: e }), this.element.insertBefore(this.alert.getElement(), this.element.firstChild), this;
2140
+ return this.alert && (this.alert.getElement().remove(), this.alert = void 0), this.alert = new Ft({ message: e }), this.element.insertBefore(this.alert.getElement(), this.element.firstChild), this;
2057
2141
  }
2058
2142
  /**
2059
2143
  * Clean up resources when the form is destroyed
@@ -2065,7 +2149,7 @@ class Ut extends h {
2065
2149
  e.key === "Enter" && !this.isFormDisabled() && (e.target instanceof HTMLTextAreaElement || (e.preventDefault(), this.handleSubmit(e)));
2066
2150
  };
2067
2151
  }
2068
- class _t {
2152
+ class Ut {
2069
2153
  container = null;
2070
2154
  options;
2071
2155
  onSubmit;
@@ -2080,7 +2164,7 @@ class _t {
2080
2164
  this.container && this.form && (this.form && e.errorMsg && !this.options.disableErrorMessages ? this.form.setErrorMessage(e.errorMsg) : this.renderForm(e.errorMsg));
2081
2165
  }
2082
2166
  renderForm(e) {
2083
- this.container && (this.form && (this.form.destroy(), this.form = null), this.form = new Ut({
2167
+ this.container && (this.form && (this.form.destroy(), this.form = null), this.form = new jt({
2084
2168
  apiKey: this.options.apiKey,
2085
2169
  onSubmit: this.onSubmit,
2086
2170
  locale: this.options.locale,
@@ -2088,7 +2172,8 @@ class _t {
2088
2172
  profileId: this.options.profileId,
2089
2173
  container: this.container,
2090
2174
  environment: this.options.environment,
2091
- onLoadingStateChange: this.options.onLoadingStateChange
2175
+ onLoadingStateChange: this.options.onLoadingStateChange,
2176
+ paymentId: this.options.paymentId
2092
2177
  }));
2093
2178
  }
2094
2179
  unmount() {
@@ -2117,26 +2202,27 @@ class qt {
2117
2202
  this.listeners.forEach((t) => t(e));
2118
2203
  }
2119
2204
  }
2120
- class Yt {
2205
+ class Gt {
2121
2206
  config;
2122
2207
  apiService;
2123
2208
  formManager;
2124
2209
  stateManager;
2125
2210
  constructor(e) {
2126
- this.config = this.validateConfig(e), this.apiService = new $(
2211
+ this.config = this.validateConfig(e), this.apiService = new B(
2127
2212
  this.config.apiKey,
2128
2213
  this.config.environment
2129
2214
  ), this.stateManager = new qt({
2130
2215
  mounted: !1,
2131
2216
  form: null
2132
- }), this.formManager = new _t(
2217
+ }), this.formManager = new Ut(
2133
2218
  {
2134
2219
  locale: this.config.locale,
2135
2220
  apiKey: this.config.apiKey,
2136
2221
  profileId: this.config.profileId,
2137
2222
  disableErrorMessages: this.config.disableErrorMessages,
2138
2223
  environment: this.config.environment,
2139
- onLoadingStateChange: this.config.callbacks.onLoadingStateChange
2224
+ onLoadingStateChange: this.config.callbacks.onLoadingStateChange,
2225
+ paymentId: this.config.paymentId
2140
2226
  },
2141
2227
  this.handleSubmit.bind(this)
2142
2228
  );
@@ -2168,11 +2254,11 @@ class Yt {
2168
2254
  const t = document.querySelector(e);
2169
2255
  if (!t)
2170
2256
  throw new Error(`Container ${e} not found`);
2171
- const a = document.createElement("div");
2172
- return t.appendChild(a), this.stateManager.updateState({
2173
- form: a,
2257
+ const i = document.createElement("div");
2258
+ return t.appendChild(i), this.stateManager.updateState({
2259
+ form: i,
2174
2260
  mounted: !0
2175
- }), this.formManager.mount(a), this;
2261
+ }), this.formManager.mount(i), this;
2176
2262
  }
2177
2263
  unmount() {
2178
2264
  const { mounted: e } = this.stateManager.getState();
@@ -2190,16 +2276,16 @@ class Yt {
2190
2276
  formData: t
2191
2277
  }) {
2192
2278
  try {
2193
- const a = await this.apiService.authorizePayment({
2279
+ const i = await this.apiService.authorizePayment({
2194
2280
  checkoutKey: this.config.checkoutKey,
2195
2281
  formData: t || null,
2196
2282
  token: e?.token || null,
2197
2283
  paymentId: this.config.paymentId,
2198
2284
  returnUrl: this.config.returnUrl
2199
2285
  });
2200
- this.handlePaymentResponse(a);
2201
- } catch (a) {
2202
- this.handleAuthorizationError(a);
2286
+ this.handlePaymentResponse(i);
2287
+ } catch (i) {
2288
+ this.handleAuthorizationError(i);
2203
2289
  }
2204
2290
  }
2205
2291
  handlePaymentResponse(e) {
@@ -2216,15 +2302,15 @@ class Yt {
2216
2302
  t && this.formManager.update({ errorMsg: e.details?.message });
2217
2303
  }
2218
2304
  }
2219
- typeof globalThis < "u" && (globalThis.OdusCheckout = Yt);
2305
+ typeof globalThis < "u" && (globalThis.OdusCheckout = Gt);
2220
2306
  export {
2221
- Yt as OdusCheckout,
2222
- le as deLocale,
2223
- ye as enLocale,
2224
- Le as esLocale,
2225
- De as frLocale,
2226
- Ue as itLocale,
2227
- Qe as plLocale,
2228
- lt as ptLocale,
2229
- yt as trLocale
2307
+ Gt as OdusCheckout,
2308
+ ne as deLocale,
2309
+ fe as enLocale,
2310
+ we as esLocale,
2311
+ Ae as frLocale,
2312
+ je as itLocale,
2313
+ Xe as plLocale,
2314
+ nt as ptLocale,
2315
+ ft as trLocale
2230
2316
  };