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