@xyo-network/react-form-credit-card 10.0.5 → 10.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/dist/browser/index.d.ts +1 -5
  2. package/dist/browser/index.d.ts.map +1 -1
  3. package/dist/browser/index.mjs +2 -1113
  4. package/dist/browser/index.mjs.map +4 -4
  5. package/package.json +36 -10
  6. package/dist/browser/components/controls/WithFormControlProps.d.ts +0 -6
  7. package/dist/browser/components/controls/WithFormControlProps.d.ts.map +0 -1
  8. package/dist/browser/components/controls/card/Email.d.ts +0 -4
  9. package/dist/browser/components/controls/card/Email.d.ts.map +0 -1
  10. package/dist/browser/components/controls/card/Expiration.d.ts +0 -4
  11. package/dist/browser/components/controls/card/Expiration.d.ts.map +0 -1
  12. package/dist/browser/components/controls/card/FormControlTextField.d.ts +0 -13
  13. package/dist/browser/components/controls/card/FormControlTextField.d.ts.map +0 -1
  14. package/dist/browser/components/controls/card/Name.d.ts +0 -7
  15. package/dist/browser/components/controls/card/Name.d.ts.map +0 -1
  16. package/dist/browser/components/controls/card/Options.d.ts +0 -12
  17. package/dist/browser/components/controls/card/Options.d.ts.map +0 -1
  18. package/dist/browser/components/controls/card/Zip.d.ts +0 -4
  19. package/dist/browser/components/controls/card/Zip.d.ts.map +0 -1
  20. package/dist/browser/components/controls/card/cvv/Cvv.d.ts +0 -4
  21. package/dist/browser/components/controls/card/cvv/Cvv.d.ts.map +0 -1
  22. package/dist/browser/components/controls/card/cvv/index.d.ts +0 -3
  23. package/dist/browser/components/controls/card/cvv/index.d.ts.map +0 -1
  24. package/dist/browser/components/controls/card/cvv/use.d.ts +0 -9
  25. package/dist/browser/components/controls/card/cvv/use.d.ts.map +0 -1
  26. package/dist/browser/components/controls/card/index.d.ts +0 -10
  27. package/dist/browser/components/controls/card/index.d.ts.map +0 -1
  28. package/dist/browser/components/controls/card/number/Number.d.ts +0 -4
  29. package/dist/browser/components/controls/card/number/Number.d.ts.map +0 -1
  30. package/dist/browser/components/controls/card/number/index.d.ts +0 -3
  31. package/dist/browser/components/controls/card/number/index.d.ts.map +0 -1
  32. package/dist/browser/components/controls/card/number/use.d.ts +0 -10
  33. package/dist/browser/components/controls/card/number/use.d.ts.map +0 -1
  34. package/dist/browser/components/controls/card/useCreditCardFormControl.d.ts +0 -9
  35. package/dist/browser/components/controls/card/useCreditCardFormControl.d.ts.map +0 -1
  36. package/dist/browser/components/controls/index.d.ts +0 -3
  37. package/dist/browser/components/controls/index.d.ts.map +0 -1
  38. package/dist/browser/components/form/Form.d.ts +0 -5
  39. package/dist/browser/components/form/Form.d.ts.map +0 -1
  40. package/dist/browser/components/form/InputFieldsStack.d.ts +0 -7
  41. package/dist/browser/components/form/InputFieldsStack.d.ts.map +0 -1
  42. package/dist/browser/components/form/Props.d.ts +0 -14
  43. package/dist/browser/components/form/Props.d.ts.map +0 -1
  44. package/dist/browser/components/form/index.d.ts +0 -5
  45. package/dist/browser/components/form/index.d.ts.map +0 -1
  46. package/dist/browser/components/form/useFormStorage.d.ts +0 -4
  47. package/dist/browser/components/form/useFormStorage.d.ts.map +0 -1
  48. package/dist/browser/components/img/index.d.ts +0 -5
  49. package/dist/browser/components/img/index.d.ts.map +0 -1
  50. package/dist/browser/components/index.d.ts +0 -4
  51. package/dist/browser/components/index.d.ts.map +0 -1
  52. package/dist/browser/components/support/Fields.d.ts +0 -4
  53. package/dist/browser/components/support/Fields.d.ts.map +0 -1
  54. package/dist/browser/components/support/InputError.d.ts +0 -5
  55. package/dist/browser/components/support/InputError.d.ts.map +0 -1
  56. package/dist/browser/components/support/index.d.ts +0 -4
  57. package/dist/browser/components/support/index.d.ts.map +0 -1
  58. package/dist/browser/components/support/validateCreditCardInputs.d.ts +0 -3
  59. package/dist/browser/components/support/validateCreditCardInputs.d.ts.map +0 -1
  60. package/dist/browser/context/FormGroupCreditCardContext.d.ts +0 -15
  61. package/dist/browser/context/FormGroupCreditCardContext.d.ts.map +0 -1
  62. package/dist/browser/context/FormGroupCreditCardProvider.d.ts +0 -10
  63. package/dist/browser/context/FormGroupCreditCardProvider.d.ts.map +0 -1
  64. package/dist/browser/context/index.d.ts +0 -4
  65. package/dist/browser/context/index.d.ts.map +0 -1
  66. package/dist/browser/context/useFormGroupWithCreditCard.d.ts +0 -6
  67. package/dist/browser/context/useFormGroupWithCreditCard.d.ts.map +0 -1
  68. package/dist/browser/controls/CreditCardCvv.d.ts +0 -20
  69. package/dist/browser/controls/CreditCardCvv.d.ts.map +0 -1
  70. package/dist/browser/controls/CreditCardExpiry.d.ts +0 -21
  71. package/dist/browser/controls/CreditCardExpiry.d.ts.map +0 -1
  72. package/dist/browser/controls/CreditCardNumber.d.ts +0 -23
  73. package/dist/browser/controls/CreditCardNumber.d.ts.map +0 -1
  74. package/dist/browser/controls/Email.d.ts +0 -14
  75. package/dist/browser/controls/Email.d.ts.map +0 -1
  76. package/dist/browser/controls/Name.d.ts +0 -10
  77. package/dist/browser/controls/Name.d.ts.map +0 -1
  78. package/dist/browser/controls/Zip.d.ts +0 -13
  79. package/dist/browser/controls/Zip.d.ts.map +0 -1
  80. package/dist/browser/controls/index.d.ts +0 -7
  81. package/dist/browser/controls/index.d.ts.map +0 -1
  82. package/dist/browser/models/CreditCardInput.d.ts +0 -18
  83. package/dist/browser/models/CreditCardInput.d.ts.map +0 -1
  84. package/dist/browser/models/index.d.ts +0 -2
  85. package/dist/browser/models/index.d.ts.map +0 -1
  86. package/dist/browser/utils/index.d.ts +0 -2
  87. package/dist/browser/utils/index.d.ts.map +0 -1
  88. package/dist/browser/utils/umask.d.ts +0 -2
  89. package/dist/browser/utils/umask.d.ts.map +0 -1
@@ -1,1114 +1,3 @@
1
- // src/controls/CreditCardCvv.ts
2
- import { assertEx } from "@ariestools/sdk";
3
- import { FormControlBase } from "@xyo-network/react-form-group";
4
- import valid from "card-validator";
5
-
6
- // src/utils/umask.ts
7
- function unmask(value) {
8
- return value.replaceAll(/\D/g, "");
9
- }
10
-
11
- // src/controls/CreditCardCvv.ts
12
- var CONTROL_NAME = "cvv";
13
- var CreditCardCvvFormControl = class extends FormControlBase {
14
- invalidMessage = "Your card cvc is invalid.";
15
- pattern = /^\d{0,4}$/;
16
- patternStrict = /^\d{1,4}$/;
17
- props = {
18
- autoComplete: "cc-csc",
19
- autoCorrect: "off",
20
- id: CONTROL_NAME,
21
- inputMode: "numeric",
22
- name: CONTROL_NAME,
23
- placeholder: "CVC",
24
- spellCheck: false
25
- };
26
- required = true;
27
- unmask = unmask;
28
- _cardNumberFormControl = void 0;
29
- constructor() {
30
- super();
31
- super.setName(CONTROL_NAME);
32
- this.setSerializeSettings({ sensitive: true, serializable: true });
33
- }
34
- get cardNumberFormControl() {
35
- return assertEx(this._cardNumberFormControl, () => "Card number form control is not set");
36
- }
37
- blurError(value) {
38
- const num = this.cardNumberFormControl.value;
39
- const max = this.getCardNumberCvcMax(num);
40
- const cvvValidation = valid.cvv(value, max);
41
- if (cvvValidation.isValid) {
42
- this.setError("");
43
- this.setStatus("VALID");
44
- } else {
45
- this.setError(this.invalidMessage);
46
- this.setStatus("INVALID");
47
- }
48
- }
49
- changeError(value) {
50
- const unmasked = this.unmask(value);
51
- const match = RegExp(this.patternStrict).exec(unmasked);
52
- if (match) {
53
- const num = this.cardNumberFormControl.value;
54
- const max = this.getCardNumberCvcMax(num);
55
- const cvvValidation = valid.cvv(value, max);
56
- if (cvvValidation.isPotentiallyValid) {
57
- this.setError("");
58
- this.setStatus("VALID");
59
- } else {
60
- this.setError("Your card cvc is invalid.");
61
- this.setStatus("INVALID");
62
- }
63
- } else {
64
- this.setError(this.invalidMessage);
65
- this.setStatus("INVALID");
66
- }
67
- }
68
- setCardNumberFormControl(cardNumberFormControl) {
69
- this._cardNumberFormControl = cardNumberFormControl;
70
- }
71
- getCardNumberCvcMax(num) {
72
- if (!num) return 3;
73
- const numberValidation = valid.number(num);
74
- return numberValidation.card ? numberValidation.card.code.size : 3;
75
- }
76
- };
77
-
78
- // src/controls/CreditCardExpiry.ts
79
- import { assertEx as assertEx2 } from "@ariestools/sdk";
80
- import { FormControlBase as FormControlBase2 } from "@xyo-network/react-form-group";
81
- import valid2 from "card-validator";
82
- var CONTROL_NAME2 = "expiration";
83
- var CreditCardExpirationFormControl = class extends FormControlBase2 {
84
- invalidMessage = "Card Expiration is invalid";
85
- pattern = /^\d{0,4}$/;
86
- patternStrict = /^\d{1,4}$/;
87
- props = {
88
- autoComplete: "cc-exp",
89
- autoCorrect: "off",
90
- id: CONTROL_NAME2,
91
- inputMode: "numeric",
92
- name: CONTROL_NAME2,
93
- placeholder: "MM / YY",
94
- spellCheck: false
95
- };
96
- required = true;
97
- unmask = unmask;
98
- _cardNumberFormControl = void 0;
99
- constructor() {
100
- super();
101
- super.setName(CONTROL_NAME2);
102
- this.setSerializeSettings({ sensitive: true, serializable: true });
103
- }
104
- get cardNumberFormControl() {
105
- return assertEx2(this._cardNumberFormControl, () => "Card number form control is not set");
106
- }
107
- // make it so the raw value is the same to preserve the / separator in the value
108
- get rawValue() {
109
- return this.value;
110
- }
111
- blurError(value) {
112
- const unmasked = unmask(value);
113
- const expirationValid = valid2.expirationDate(unmasked);
114
- if (!unmasked || unmasked && unmasked.length !== 4) {
115
- this.setErrorAndValidity("Your card expiration is incomplete.", "INVALID");
116
- } else if (expirationValid.isValid) {
117
- this.setErrorAndValidity("", "VALID");
118
- } else {
119
- this.setErrorAndValidity("Your card's expiration year is in the past.", "INVALID");
120
- }
121
- }
122
- changeError(value) {
123
- const unmasked = this.unmask(value);
124
- const expirationValid = valid2.expirationDate(unmasked);
125
- if (expirationValid.isPotentiallyValid) {
126
- this.setErrorAndValidity("", "VALID");
127
- } else if (expirationValid.isValid) {
128
- this.setErrorAndValidity("", "VALID");
129
- } else {
130
- this.setErrorAndValidity("Your card's expiration year is in the past.", "INVALID");
131
- }
132
- }
133
- mask(value) {
134
- if (/^[2-9]/.test(unmask(value))) {
135
- return this.makeMask(" / ", 2)(`0${value}`);
136
- }
137
- return this.makeMask(" / ", 2)(value);
138
- }
139
- makeMask(separator, limit) {
140
- return (value) => {
141
- const output = [];
142
- for (let i = 0; i < value.length; i++) {
143
- if (i !== 0 && i % limit === 0) {
144
- output.push(separator);
145
- }
146
- output.push(value[i]);
147
- }
148
- return output.join("");
149
- };
150
- }
151
- };
152
-
153
- // src/controls/CreditCardNumber.ts
154
- import { FormControlBase as FormControlBase3 } from "@xyo-network/react-form-group";
155
- import valid3 from "card-validator";
156
- var CONTROL_NAME3 = "cardNumber2";
157
- var CreditCardNumberFormControl = class extends FormControlBase3 {
158
- creditCardType = "";
159
- invalidMessage = "Card Number is invalid";
160
- pattern = /^(\d+)?$/;
161
- patternStrict = /^\d+$/;
162
- props = {
163
- autoComplete: "cc-number",
164
- autoCorrect: "off",
165
- id: CONTROL_NAME3,
166
- inputMode: "numeric",
167
- name: CONTROL_NAME3,
168
- placeholder: "1234 1234 1234 1234",
169
- spellCheck: false
170
- };
171
- required = true;
172
- unmask = unmask;
173
- constructor() {
174
- super();
175
- super.setName(CONTROL_NAME3);
176
- this.setSerializeSettings({ sensitive: true, serializable: true });
177
- }
178
- blurError(value) {
179
- const unmasked = unmask(value);
180
- const numberValidation = valid3.number(unmasked);
181
- if (!numberValidation.isValid) {
182
- this.setErrorAndValidity(this.invalidMessage, "INVALID");
183
- return;
184
- }
185
- this.setErrorAndValidity("", "VALID");
186
- }
187
- changeError(value) {
188
- const unmasked = unmask(value);
189
- const match = RegExp(this.patternStrict).exec(unmasked);
190
- if (match) {
191
- const numberValidation = valid3.number(unmasked);
192
- if (!numberValidation.isPotentiallyValid) {
193
- this.setErrorAndValidity(this.invalidMessage, "INVALID");
194
- return;
195
- }
196
- this.setErrorAndValidity("", "VALID");
197
- } else {
198
- this.setErrorAndValidity(this.invalidMessage, "INVALID");
199
- }
200
- }
201
- earlyNumberCheck(number) {
202
- switch (number) {
203
- case "4": {
204
- this.setCreditCardType("visa");
205
- break;
206
- }
207
- case "5": {
208
- this.setCreditCardType("mastercard");
209
- break;
210
- }
211
- case "3": {
212
- this.setCreditCardType("amex");
213
- break;
214
- }
215
- case "6": {
216
- this.setCreditCardType("discover");
217
- break;
218
- }
219
- default: {
220
- this.setCreditCardType("");
221
- }
222
- }
223
- }
224
- getCursorPosition() {
225
- if (this.value) {
226
- const previousValue = this.previousValue ?? "";
227
- const unmasked = unmask(this.value);
228
- const numberValidation = valid3.number(unmasked);
229
- const card = numberValidation.card;
230
- const lengthChange = this.value.length - (previousValue?.length ?? 0);
231
- const unmaskedChange = unmask(this.value).length - unmask(previousValue).length;
232
- if (card) {
233
- const gaps = card.gaps;
234
- const oldCursor = this.cursorPosition.previous ?? 0;
235
- const oldSeparation = gaps.filter((gap, i) => gap + i < oldCursor).length;
236
- const newSeparation = gaps.filter((gap, i) => gap + i < oldCursor + lengthChange).length;
237
- const newCursor = oldCursor - oldSeparation + newSeparation + unmaskedChange;
238
- return newCursor;
239
- }
240
- }
241
- }
242
- mask(value = "") {
243
- const unmasked = unmask(value);
244
- const numberValidation = valid3.number(unmasked);
245
- const card = numberValidation.card;
246
- if (card) {
247
- const max = card.lengths.includes(16) ? 16 : card.lengths[0];
248
- const gaps = [...card.gaps, max];
249
- const newVal = gaps.map((gap, i) => unmasked.slice(gaps[i - 1] || 0, gap)).filter(Boolean).join(" ");
250
- return newVal;
251
- }
252
- return value;
253
- }
254
- onCreditCardTypeChange = () => {
255
- };
256
- setCreditCardType(type) {
257
- this.creditCardType = type;
258
- this.onCreditCardTypeChange(type);
259
- }
260
- setValue(value = "", options) {
261
- const umMasked = this.unmask(value);
262
- super.setValue(umMasked, options);
263
- this.earlyNumberCheck(umMasked.charAt(0));
264
- }
265
- };
266
-
267
- // src/controls/Email.ts
268
- import { FormControlBase as FormControlBase4 } from "@xyo-network/react-form-group";
269
- var CONTROL_NAME4 = "Email";
270
- var CreditCardEmailFormControl = class extends FormControlBase4 {
271
- invalidMessage = "Your email is invalid.";
272
- pattern = /^.*$/;
273
- patternStrict = /^([\w+.\-])+@(([\dA-Za-z-])+\.)+([\dA-Za-z]{2,4})+$/;
274
- props = {
275
- autoComplete: "email",
276
- autoCorrect: "off",
277
- id: CONTROL_NAME4.toLocaleLowerCase(),
278
- name: CONTROL_NAME4.toLocaleLowerCase(),
279
- placeholder: "jerry.smith@email.com",
280
- spellCheck: false
281
- };
282
- required = true;
283
- constructor() {
284
- super();
285
- super.setName(CONTROL_NAME4);
286
- this.setSerializeSettings({ sensitive: false, serializable: true });
287
- }
288
- blurError(value) {
289
- const match = RegExp(this.patternStrict).exec(value);
290
- this.updateValidation(match);
291
- }
292
- changeError(value) {
293
- if (this.error) {
294
- this.blurError(value);
295
- }
296
- }
297
- updateValidation(match) {
298
- if (match) {
299
- this.setErrorAndValidity("", "VALID");
300
- } else {
301
- this.setErrorAndValidity(this.invalidMessage, "INVALID");
302
- }
303
- }
304
- };
305
-
306
- // src/controls/Name.ts
307
- import { FormControlBase as FormControlBase5 } from "@xyo-network/react-form-group";
308
- var NameFormControl = class extends FormControlBase5 {
309
- required = true;
310
- nameLabel;
311
- constructor(nameLabel, autoCompleteLabel, placeholder) {
312
- super();
313
- this.nameLabel = nameLabel;
314
- super.setName(nameLabel);
315
- this.setSerializeSettings({ sensitive: false, serializable: true });
316
- this.invalidMessage = `${nameLabel} name is missing.`;
317
- this.props = {
318
- autoComplete: autoCompleteLabel,
319
- autoCorrect: "off",
320
- id: this.nameLabel,
321
- name: this.nameLabel,
322
- placeholder,
323
- spellCheck: false
324
- };
325
- }
326
- blurError(value) {
327
- if (value) {
328
- this.setErrorAndValidity("", "VALID");
329
- } else {
330
- this.setErrorAndValidity(this.invalidMessage, "INVALID");
331
- }
332
- }
333
- changeError(value) {
334
- this.blurError(value);
335
- }
336
- };
337
-
338
- // src/controls/Zip.ts
339
- import { FormControlBase as FormControlBase6 } from "@xyo-network/react-form-group";
340
- import valid4 from "card-validator";
341
- var CONTROL_NAME5 = "Zip";
342
- var CreditCardZipFormControl = class extends FormControlBase6 {
343
- invalidMessage = "Your zip code is invalid.";
344
- props = {
345
- autoComplete: "postal-code",
346
- autoCorrect: "off",
347
- id: CONTROL_NAME5.toLocaleLowerCase(),
348
- name: CONTROL_NAME5.toLocaleLowerCase(),
349
- placeholder: "12345",
350
- spellCheck: false
351
- };
352
- required = true;
353
- unmask = unmask;
354
- constructor() {
355
- super();
356
- super.setName(CONTROL_NAME5);
357
- this.setSerializeSettings({ sensitive: true, serializable: true });
358
- }
359
- blurError(value) {
360
- const postalCodeValidation = valid4.postalCode(value);
361
- if (postalCodeValidation.isValid) {
362
- this.setErrorAndValidity("", "VALID");
363
- } else {
364
- this.setErrorAndValidity(this.invalidMessage, "INVALID");
365
- }
366
- }
367
- changeError(value) {
368
- const unmasked = this.unmask(value);
369
- const match = RegExp(this.patternStrict).exec(unmasked);
370
- if (match) {
371
- const postalCodeValidation = valid4.postalCode(value);
372
- if (postalCodeValidation.isPotentiallyValid) {
373
- this.setErrorAndValidity("", "VALID");
374
- } else {
375
- this.setErrorAndValidity("Your zip code is invalid.", "INVALID");
376
- }
377
- } else {
378
- this.setErrorAndValidity(this.invalidMessage, "INVALID");
379
- }
380
- }
381
- };
382
-
383
- // src/components/controls/card/FormControlTextField.tsx
384
- import { FormControl as MuiFormControl, TextField } from "@mui/material";
385
- import { LabeledTextFieldWrapper } from "@xyo-network/react-shared";
386
- import { jsx } from "react/jsx-runtime";
387
- var FormControlTextField = ({
388
- ref,
389
- formControl,
390
- formControlError,
391
- fieldLabel = "",
392
- ...props
393
- }) => {
394
- const { name } = formControl?.props ?? {};
395
- const handleChange = (event) => {
396
- formControl?.setValue(event.target.value);
397
- };
398
- const handleBlur = (event) => {
399
- formControl?.blurError?.(event.target.value);
400
- formControl?.setTouched(true);
401
- };
402
- return /* @__PURE__ */ jsx(MuiFormControl, { fullWidth: true, children: /* @__PURE__ */ jsx(LabeledTextFieldWrapper, { label: fieldLabel, children: /* @__PURE__ */ jsx("label", { htmlFor: name, children: /* @__PURE__ */ jsx(
403
- TextField,
404
- {
405
- error: !!formControlError,
406
- helperText: formControlError || " ",
407
- fullWidth: true,
408
- hiddenLabel: true,
409
- name,
410
- onBlur: handleBlur,
411
- onChange: handleChange,
412
- onKeyDown: (event) => {
413
- const selectionEnd = event.target.selectionEnd;
414
- if (selectionEnd && formControl) {
415
- formControl.cursorPosition = { ...formControl.cursorPosition, previous: selectionEnd };
416
- }
417
- },
418
- ref,
419
- required: formControl?.required,
420
- size: "small",
421
- variant: "filled",
422
- ...props
423
- }
424
- ) }) }) });
425
- };
426
- FormControlTextField.displayName = "FormControlTextField";
427
-
428
- // src/components/controls/card/cvv/use.ts
429
- import { useEffect } from "react";
430
-
431
- // src/context/FormGroupCreditCardContext.ts
432
- import { createContextEx } from "@ariestools/sdk-react/shared";
433
- var FormGroupCreditCardContext = createContextEx();
434
-
435
- // src/context/FormGroupCreditCardProvider.tsx
436
- import { FormGroup } from "@xyo-network/react-form-group";
437
- import { useMemo } from "react";
438
- import { jsx as jsx2 } from "react/jsx-runtime";
439
- var FormGroupCreditCardProvider = ({
440
- children,
441
- params,
442
- ...props
443
- }) => {
444
- const formGroup = useMemo(() => {
445
- const formGroup2 = new FormGroup(params);
446
- return formGroup2;
447
- }, [params]);
448
- const value = useMemo(() => ({ formGroup, provided: true }), [formGroup]);
449
- return /* @__PURE__ */ jsx2(
450
- FormGroupCreditCardContext,
451
- {
452
- value,
453
- ...props,
454
- children
455
- }
456
- );
457
- };
458
-
459
- // src/context/useFormGroupWithCreditCard.tsx
460
- import { useContextEx } from "@ariestools/sdk-react/shared";
461
- var useFormGroupWithCreditCardInput = (required = false) => {
462
- return useContextEx(FormGroupCreditCardContext, "FormGroupCreditCard", required);
463
- };
464
-
465
- // src/components/controls/card/useCreditCardFormControl.tsx
466
- import {
467
- useMemo as useMemo2,
468
- useRef,
469
- useState
470
- } from "react";
471
- var STABLE_DEFAULT_ARGS = [];
472
- var useCreditCardFormControl = (formControlName, Control, args = STABLE_DEFAULT_ARGS) => {
473
- const [error, setError] = useState("");
474
- const [value, setValue] = useState("");
475
- const inputRef = useRef(null);
476
- const { formGroup } = useFormGroupWithCreditCardInput(!!formControlName);
477
- const creditCardFormControl = useMemo2(() => {
478
- if (Control) {
479
- const control = new Control(...args);
480
- control.registerOnErrorChange((newError) => setError(newError));
481
- control.registerOnChange((value2) => setValue(value2));
482
- if (formControlName) formGroup?.registerControl(formControlName, control);
483
- return control;
484
- }
485
- }, [Control, args, formControlName, formGroup]);
486
- return {
487
- creditCardFormControl,
488
- error,
489
- inputRef,
490
- value
491
- };
492
- };
493
-
494
- // src/components/controls/card/cvv/use.ts
495
- var useCreditCardCvvFormControl = (formControlName, cardNumberControlName = "cardNumber", control) => {
496
- const {
497
- creditCardFormControl,
498
- error,
499
- value,
500
- inputRef
501
- } = useCreditCardFormControl(formControlName, control);
502
- const { formGroup } = useFormGroupWithCreditCardInput(!!formControlName);
503
- const creditCardNumberFormControl = formGroup?.getControl?.(cardNumberControlName);
504
- useEffect(() => {
505
- if (creditCardNumberFormControl) {
506
- const castControl = creditCardFormControl;
507
- if (!castControl.setCardNumberFormControl) {
508
- console.error("cannot setCardNumberFormControl on control because it is not a CreditCardCvvFormControl");
509
- return;
510
- }
511
- castControl.setCardNumberFormControl(creditCardNumberFormControl);
512
- }
513
- }, [creditCardFormControl, creditCardNumberFormControl]);
514
- return {
515
- creditCardFormControl,
516
- error,
517
- inputRef,
518
- value
519
- };
520
- };
521
-
522
- // src/components/controls/card/cvv/Cvv.tsx
523
- import { jsx as jsx3 } from "react/jsx-runtime";
524
- var CreditCardCvvWithFormControl = ({
525
- formControlName = "cvc",
526
- fieldLabel = "CVC",
527
- ...props
528
- }) => {
529
- const {
530
- creditCardFormControl,
531
- error,
532
- inputRef,
533
- value
534
- } = useCreditCardCvvFormControl(formControlName, void 0, CreditCardCvvFormControl);
535
- const {
536
- autoComplete,
537
- autoCorrect,
538
- id,
539
- inputMode,
540
- name,
541
- spellCheck,
542
- ...cvcProps
543
- } = creditCardFormControl?.props ?? {};
544
- return /* @__PURE__ */ jsx3(
545
- FormControlTextField,
546
- {
547
- fieldLabel,
548
- formControl: creditCardFormControl,
549
- formControlError: error,
550
- inputMode,
551
- slotProps: {
552
- htmlInput: {
553
- "aria-label": `${fieldLabel} number on the back of your card`,
554
- autoComplete,
555
- autoCorrect,
556
- id,
557
- name,
558
- spellCheck
559
- }
560
- },
561
- inputRef,
562
- value,
563
- ...cvcProps,
564
- ...props
565
- }
566
- );
567
- };
568
-
569
- // src/components/controls/card/Email.tsx
570
- import { jsx as jsx4 } from "react/jsx-runtime";
571
- var CreditCardEmailWithFormControl = ({
572
- formControlName = "emailAddress",
573
- fieldLabel = "Email",
574
- ...props
575
- }) => {
576
- const {
577
- creditCardFormControl,
578
- error,
579
- inputRef,
580
- value
581
- } = useCreditCardFormControl(formControlName, CreditCardEmailFormControl);
582
- const {
583
- autoComplete,
584
- autoCorrect,
585
- id,
586
- inputMode,
587
- name,
588
- spellCheck,
589
- ...cvcProps
590
- } = creditCardFormControl?.props ?? {};
591
- return /* @__PURE__ */ jsx4(
592
- FormControlTextField,
593
- {
594
- fieldLabel,
595
- formControl: creditCardFormControl,
596
- formControlError: error,
597
- inputMode,
598
- slotProps: {
599
- htmlInput: {
600
- "aria-label": `${fieldLabel} for your purchase`,
601
- autoComplete,
602
- autoCorrect,
603
- id,
604
- name,
605
- spellCheck
606
- }
607
- },
608
- inputRef,
609
- value,
610
- ...cvcProps,
611
- ...props
612
- }
613
- );
614
- };
615
-
616
- // src/components/controls/card/Expiration.tsx
617
- import { jsx as jsx5 } from "react/jsx-runtime";
618
- var CreditCardExpirationWithFormControl = ({
619
- formControlName = "expiration",
620
- fieldLabel = "Expiration",
621
- ...props
622
- }) => {
623
- const {
624
- creditCardFormControl,
625
- error,
626
- inputRef,
627
- value
628
- } = useCreditCardFormControl(formControlName, CreditCardExpirationFormControl);
629
- const {
630
- autoComplete,
631
- autoCorrect,
632
- id,
633
- inputMode,
634
- name,
635
- spellCheck,
636
- ...expirationProps
637
- } = creditCardFormControl?.props ?? {};
638
- return /* @__PURE__ */ jsx5(
639
- FormControlTextField,
640
- {
641
- inputRef,
642
- formControl: creditCardFormControl,
643
- fieldLabel,
644
- formControlError: error,
645
- inputMode,
646
- slotProps: {
647
- htmlInput: {
648
- "aria-label": `${fieldLabel} of the card`,
649
- autoComplete,
650
- autoCorrect,
651
- id,
652
- name,
653
- spellCheck
654
- }
655
- },
656
- value,
657
- ...expirationProps,
658
- ...props
659
- }
660
- );
661
- };
662
-
663
- // src/components/controls/card/Name.tsx
664
- import { useMemo as useMemo3 } from "react";
665
- import { jsx as jsx6 } from "react/jsx-runtime";
666
- var NameWithFormControl = ({
667
- autoCompleteLabel,
668
- fieldLabel = "Name",
669
- formControlName,
670
- placeholder,
671
- tabIndex,
672
- ...props
673
- }) => {
674
- const args = useMemo3(() => [fieldLabel, autoCompleteLabel, placeholder ?? ""], [autoCompleteLabel, fieldLabel, placeholder]);
675
- const {
676
- creditCardFormControl,
677
- error,
678
- inputRef,
679
- value
680
- } = useCreditCardFormControl(formControlName, NameFormControl, args);
681
- const {
682
- autoComplete,
683
- autoCorrect,
684
- id,
685
- inputMode,
686
- name,
687
- spellCheck,
688
- ...cvcProps
689
- } = creditCardFormControl?.props ?? {};
690
- return /* @__PURE__ */ jsx6(
691
- FormControlTextField,
692
- {
693
- fieldLabel,
694
- formControl: creditCardFormControl,
695
- formControlError: error,
696
- inputMode,
697
- slotProps: {
698
- htmlInput: {
699
- "aria-label": `${fieldLabel} name on your card`,
700
- autoComplete,
701
- autoCorrect,
702
- id,
703
- name,
704
- spellCheck,
705
- tabIndex
706
- }
707
- },
708
- inputRef,
709
- value,
710
- ...cvcProps,
711
- ...props
712
- }
713
- );
714
- };
715
-
716
- // src/components/controls/card/number/Number.tsx
717
- import { InputAdornment } from "@mui/material";
718
-
719
- // src/components/img/american-express.svg
720
- var american_express_default = '<svg height="800px" width="800px" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \n viewBox="0 0 512 512" xml:space="preserve">\n<path style="fill:#306FC5;" d="M512,402.281c0,16.716-13.55,30.267-30.265,30.267H30.265C13.55,432.549,0,418.997,0,402.281V109.717\n c0-16.715,13.55-30.266,30.265-30.266h451.47c16.716,0,30.265,13.551,30.265,30.266V402.281L512,402.281z"/>\n<path style="opacity:0.15;fill:#202121;enable-background:new ;" d="M21.517,402.281V109.717\n c0-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\n C35.07,432.549,21.517,418.997,21.517,402.281z"/>\n<g>\n <polygon style="fill:#FFFFFF;" points="74.59,220.748 89.888,220.748 82.241,201.278 "/>\n <polygon style="fill:#FFFFFF;" points="155.946,286.107 155.946,295.148 181.675,295.148 181.675,304.885 155.946,304.885 \n 155.946,315.318 184.455,315.318 197.666,300.712 185.151,286.107 "/>\n <polygon style="fill:#FFFFFF;" points="356.898,201.278 348.553,220.748 364.548,220.748 "/>\n <polygon style="fill:#FFFFFF;" points="230.348,320.875 230.348,281.241 212.268,300.712 "/>\n <path style="fill:#FFFFFF;" d="M264.42,292.368c-0.696-4.172-3.48-6.261-7.654-6.261h-14.599v12.516h15.299\n C261.637,298.624,264.42,296.539,264.42,292.368z"/>\n <path style="fill:#FFFFFF;" d="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\n c-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"/>\n <path style="fill:#FFFFFF;" d="M413.217,183.198v8.344l-4.169-8.344H376.37v8.344l-4.174-8.344h-44.502\n c-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\n l-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\n l0.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\n h0.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\n h9.732l4.172,11.123h40.328v-6.952v-3.476l6.261,10.428h1.387h0.698h30.595v-68.143h-31.291l0,0H413.217z M177.501,241.609h-6.955\n h-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\n H70.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\n l0.223-0.721l13.906-33.375H177.5v48.674H177.501L177.501,241.609z M225.481,203.364h-27.119v9.039h26.423v9.734h-26.423v9.738\n h27.119v10.427h-38.939v-49.367h38.939V203.364L225.481,203.364z M275.076,221.294c0.018,0.016,0.041,0.027,0.063,0.042\n c0.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\n c0,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\n c0-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\n v-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\n C270.676,218.662,272.996,219.129,275.076,221.294z M298.491,241.609h-11.822v-48.675h11.822V241.609z M434.083,241.609h-15.3\n l-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\n c-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\n c3.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\n c-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\n h6.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\n L434.083,241.609z"/>\n <path style="fill:#FFFFFF;" d="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\n c-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\n c-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\n l0.002,0.009C264.996,213.389,265.067,213.315,265.161,213.207z"/>\n <path style="fill:#FFFFFF;" d="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\n c-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\n c-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\n l-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\n v-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\n h94.563c6.263,0,12.517-1.394,15.993-4.175v2.781v1.394h29.902c6.254,0,12.517-0.695,16.689-3.478\n c6.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\n C475.087,312.043,475.105,311.598,475.105,311.144z M256.076,306.973h-13.91v2.081v4.174v4.173v7.649h-22.855l-13.302-15.299\n l-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\n c7.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\n M325.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\n c-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\n c3.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\n M373.589,286.107h-27.122v9.04h26.424v9.737h-26.424v9.736h27.122v10.429H334.65V275.68h38.939V286.107z M402.791,325.05h-22.252\n v-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\n c-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\n h-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\n c1.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\n C420.869,320.179,414.611,325.05,402.791,325.05z M462.59,320.179c-2.778,2.785-7.648,4.871-14.604,4.871H425.74v-10.429h22.245\n c2.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\n c-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\n c1.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\n c-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\n c3.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\n C466.761,313.925,465.37,317.401,462.59,320.179z"/>\n</g>\n</svg>';
721
-
722
- // src/components/img/discover.svg
723
- var discover_default = '<svg width="800px" height="800px" viewBox="0 -140 780 780" xmlns="http://www.w3.org/2000/svg">\n\n<g fill-rule="evenodd">\n\n<path d="M54.992 0C24.627 0 0 24.63 0 55.004v390.992C0 476.376 24.619 501 54.992 501h670.016C755.373 501 780 476.37 780 445.996V55.004C780 24.624 755.381 0 725.008 0H54.992z" fill="#4D4D4D"/>\n\n<path d="M327.152 161.893c8.837 0 16.248 1.784 25.268 6.09v22.751c-8.544-7.863-15.955-11.154-25.756-11.154-19.264 0-34.414 15.015-34.414 34.05 0 20.075 14.681 34.196 35.37 34.196 9.312 0 16.586-3.12 24.8-10.857v22.763c-9.341 4.14-16.911 5.776-25.756 5.776-31.278 0-55.582-22.596-55.582-51.737 0-28.826 24.951-51.878 56.07-51.878zm-97.113.627c11.546 0 22.11 3.72 30.943 10.994l-10.748 13.248c-5.35-5.646-10.41-8.028-16.564-8.028-8.853 0-15.3 4.745-15.3 10.989 0 5.354 3.619 8.188 15.944 12.482 23.365 8.044 30.29 15.176 30.29 30.926 0 19.193-14.976 32.553-36.32 32.553-15.63 0-26.994-5.795-36.458-18.872l13.268-12.03c4.73 8.61 12.622 13.222 22.42 13.222 9.163 0 15.947-5.952 15.947-13.984 0-4.164-2.055-7.734-6.158-10.258-2.066-1.195-6.158-2.977-14.2-5.647-19.291-6.538-25.91-13.527-25.91-27.185 0-16.225 14.214-28.41 32.846-28.41zm234.723 1.728h22.437l28.084 66.592 28.446-66.592h22.267l-45.494 101.686h-11.053l-44.687-101.686zm-397.348.152h30.15c33.312 0 56.534 20.382 56.534 49.641 0 14.59-7.104 28.696-19.118 38.057-10.108 7.901-21.626 11.445-37.574 11.445H67.414V164.4zm96.135 0h20.54v99.143h-20.54V164.4zm411.734 0h58.252v16.8H595.81v22.005h36.336v16.791h-36.336v26.762h37.726v16.785h-58.252V164.4zm71.858 0h30.455c23.69 0 37.265 10.71 37.265 29.272 0 15.18-8.514 25.14-23.986 28.105l33.148 41.766h-25.26l-28.429-39.828h-2.678v39.828h-20.515V164.4zm20.515 15.616v30.025h6.002c13.117 0 20.069-5.362 20.069-15.328 0-9.648-6.954-14.697-19.745-14.697h-6.326zM87.94 181.199v65.559h5.512c13.273 0 21.656-2.394 28.11-7.88 7.103-5.955 11.376-15.465 11.376-24.98 0-9.499-4.273-18.725-11.376-24.681-6.785-5.78-14.837-8.018-28.11-8.018H87.94z" fill="#FFF"/>\n\n<path d="m415.13 161.21c30.941 0 56.022 23.58 56.022 52.709v0.033c0 29.13-25.081 52.742-56.021 52.742s-56.022-23.613-56.022-52.742v-0.033c0-29.13 25.082-52.71 56.022-52.71zm364.85 127.15c-26.05 18.33-221.08 149.34-558.75 212.62h503.76c30.365 0 54.992-24.63 54.992-55.004v-157.62z" fill="#F47216"/>\n\n</g>\n\n</svg>';
724
-
725
- // src/components/img/mastercard.svg
726
- var mastercard_default = '<svg width="800px" height="800px" viewBox="0 -28.5 256 256" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid">\n <g>\n <path d="M46.5392504,198.011312 L46.5392504,184.839826 C46.5392504,179.790757 43.4659038,176.497885 38.1973096,176.497885 C35.5630125,176.497885 32.7091906,177.375984 30.7334678,180.229806 C29.1967945,177.815034 27.0015469,176.497885 23.7086756,176.497885 C21.513428,176.497885 19.3181804,177.15646 17.5619824,179.571233 L17.5619824,176.936935 L12.9519625,176.936935 L12.9519625,198.011312 L17.5619824,198.011312 L17.5619824,186.3765 C17.5619824,182.644579 19.5377052,180.888381 22.6110518,180.888381 C25.6843984,180.888381 27.2210717,182.864103 27.2210717,186.3765 L27.2210717,198.011312 L31.8310916,198.011312 L31.8310916,186.3765 C31.8310916,182.644579 34.0263392,180.888381 36.880161,180.888381 C39.9535076,180.888381 41.490181,182.864103 41.490181,186.3765 L41.490181,198.011312 L46.5392504,198.011312 L46.5392504,198.011312 Z M114.81145,176.936935 L107.347608,176.936935 L107.347608,170.570717 L102.737589,170.570717 L102.737589,176.936935 L98.566618,176.936935 L98.566618,181.107905 L102.737589,181.107905 L102.737589,190.766995 C102.737589,195.59654 104.713311,198.450362 109.981906,198.450362 C111.957628,198.450362 114.152876,197.791787 115.689549,196.913688 L114.372401,192.962243 C113.055252,193.840341 111.518579,194.059866 110.420955,194.059866 C108.225708,194.059866 107.347608,192.742718 107.347608,190.54747 L107.347608,181.107905 L114.81145,181.107905 L114.81145,176.936935 L114.81145,176.936935 Z M153.886857,176.497885 C151.25256,176.497885 149.496362,177.815034 148.398738,179.571233 L148.398738,176.936935 L143.788718,176.936935 L143.788718,198.011312 L148.398738,198.011312 L148.398738,186.156975 C148.398738,182.644579 149.935411,180.668856 152.789233,180.668856 C153.667332,180.668856 154.764956,180.888381 155.643055,181.107905 L156.960204,176.71741 C156.082105,176.497885 154.764956,176.497885 153.886857,176.497885 L153.886857,176.497885 L153.886857,176.497885 Z M94.834697,178.693133 C92.6394495,177.15646 89.566103,176.497885 86.2732315,176.497885 C81.0046375,176.497885 77.492241,179.132183 77.492241,183.303153 C77.492241,186.81555 80.1265385,188.791272 84.736558,189.449847 L86.931806,189.669371 C89.346578,190.10842 90.6637265,190.766995 90.6637265,191.864619 C90.6637265,193.401292 88.9075285,194.498916 85.834182,194.498916 C82.7608355,194.498916 80.346063,193.401292 78.8093895,192.303668 L76.614142,195.816065 C79.0289145,197.572262 82.321786,198.450362 85.614657,198.450362 C91.7613505,198.450362 95.2737465,195.59654 95.2737465,191.645094 C95.2737465,187.913173 92.4199245,185.937451 88.0294295,185.278876 L85.834182,185.059351 C83.858459,184.839826 82.321786,184.400777 82.321786,183.083629 C82.321786,181.546955 83.858459,180.668856 86.2732315,180.668856 C88.9075285,180.668856 91.5418255,181.76648 92.858974,182.425054 L94.834697,178.693133 L94.834697,178.693133 Z M217.329512,176.497885 C214.695215,176.497885 212.939017,177.815034 211.841393,179.571233 L211.841393,176.936935 L207.231373,176.936935 L207.231373,198.011312 L211.841393,198.011312 L211.841393,186.156975 C211.841393,182.644579 213.378066,180.668856 216.231888,180.668856 C217.109987,180.668856 218.207611,180.888381 219.08571,181.107905 L220.402859,176.71741 C219.52476,176.497885 218.207611,176.497885 217.329512,176.497885 L217.329512,176.497885 L217.329512,176.497885 Z M158.496877,187.474123 C158.496877,193.840341 162.887372,198.450362 169.69264,198.450362 C172.765986,198.450362 174.961234,197.791787 177.156481,196.035589 L174.961234,192.303668 C173.205036,193.620817 171.448838,194.279391 169.473115,194.279391 C165.741194,194.279391 163.106897,191.645094 163.106897,187.474123 C163.106897,183.522678 165.741194,180.888381 169.473115,180.668856 C171.448838,180.668856 173.205036,181.32743 174.961234,182.644579 L177.156481,178.912658 C174.961234,177.15646 172.765986,176.497885 169.69264,176.497885 C162.887372,176.497885 158.496877,181.107905 158.496877,187.474123 L158.496877,187.474123 L158.496877,187.474123 Z M201.08468,187.474123 L201.08468,176.936935 L196.47466,176.936935 L196.47466,179.571233 C194.937987,177.595509 192.742739,176.497885 189.888917,176.497885 C183.961749,176.497885 179.351729,181.107905 179.351729,187.474123 C179.351729,193.840341 183.961749,198.450362 189.888917,198.450362 C192.962264,198.450362 195.157512,197.352737 196.47466,195.377015 L196.47466,198.011312 L201.08468,198.011312 L201.08468,187.474123 Z M184.181274,187.474123 C184.181274,183.742202 186.596046,180.668856 190.547492,180.668856 C194.279413,180.668856 196.91371,183.522678 196.91371,187.474123 C196.91371,191.206044 194.279413,194.279391 190.547492,194.279391 C186.596046,194.059866 184.181274,191.206044 184.181274,187.474123 L184.181274,187.474123 Z M129.080559,176.497885 C122.933866,176.497885 118.543371,180.888381 118.543371,187.474123 C118.543371,194.059866 122.933866,198.450362 129.300084,198.450362 C132.373431,198.450362 135.446777,197.572262 137.861549,195.59654 L135.666302,192.303668 C133.910104,193.620817 131.714856,194.498916 129.519609,194.498916 C126.665787,194.498916 123.811965,193.181768 123.153391,189.449847 L138.739648,189.449847 L138.739648,187.693648 C138.959173,180.888381 135.007727,176.497885 129.080559,176.497885 L129.080559,176.497885 L129.080559,176.497885 Z M129.080559,180.449331 C131.934381,180.449331 133.910104,182.20553 134.349153,185.498401 L123.372916,185.498401 C123.811965,182.644579 125.787688,180.449331 129.080559,180.449331 L129.080559,180.449331 Z M243.452958,187.474123 L243.452958,168.594995 L238.842938,168.594995 L238.842938,179.571233 C237.306265,177.595509 235.111017,176.497885 232.257196,176.497885 C226.330027,176.497885 221.720007,181.107905 221.720007,187.474123 C221.720007,193.840341 226.330027,198.450362 232.257196,198.450362 C235.330542,198.450362 237.52579,197.352737 238.842938,195.377015 L238.842938,198.011312 L243.452958,198.011312 L243.452958,187.474123 Z M226.549552,187.474123 C226.549552,183.742202 228.964324,180.668856 232.91577,180.668856 C236.647691,180.668856 239.281988,183.522678 239.281988,187.474123 C239.281988,191.206044 236.647691,194.279391 232.91577,194.279391 C228.964324,194.059866 226.549552,191.206044 226.549552,187.474123 L226.549552,187.474123 Z M72.443172,187.474123 L72.443172,176.936935 L67.833152,176.936935 L67.833152,179.571233 C66.2964785,177.595509 64.101231,176.497885 61.247409,176.497885 C55.3202405,176.497885 50.7102205,181.107905 50.7102205,187.474123 C50.7102205,193.840341 55.3202405,198.450362 61.247409,198.450362 C64.3207555,198.450362 66.5160035,197.352737 67.833152,195.377015 L67.833152,198.011312 L72.443172,198.011312 L72.443172,187.474123 Z M55.3202405,187.474123 C55.3202405,183.742202 57.735013,180.668856 61.6864585,180.668856 C65.4183795,180.668856 68.0526765,183.522678 68.0526765,187.474123 C68.0526765,191.206044 65.4183795,194.279391 61.6864585,194.279391 C57.735013,194.059866 55.3202405,191.206044 55.3202405,187.474123 Z" fill="#000000">\n\n</path>\n <rect fill="#FF5F00" x="93.2980455" y="16.9034088" width="69.1502985" height="124.251009">\n\n</rect>\n <path d="M97.688519,79.0288935 C97.688519,53.783546 109.542856,31.3920209 127.763411,16.9033869 C114.3724,6.3661985 97.468994,-1.94737475e-05 79.0289145,-1.94737475e-05 C35.3434877,-1.94737475e-05 1.7258174e-06,35.3434665 1.7258174e-06,79.0288935 C1.7258174e-06,122.71432 35.3434877,158.057806 79.0289145,158.057806 C97.468994,158.057806 114.3724,151.691588 127.763411,141.1544 C109.542856,126.88529 97.688519,104.274241 97.688519,79.0288935 Z" fill="#EB001B">\n\n</path>\n <path d="M255.746345,79.0288935 C255.746345,122.71432 220.402859,158.057806 176.717432,158.057806 C158.277352,158.057806 141.373945,151.691588 127.982936,141.1544 C146.423015,126.665766 158.057827,104.274241 158.057827,79.0288935 C158.057827,53.783546 146.20349,31.3920209 127.982936,16.9033869 C141.373945,6.3661985 158.277352,-1.94737475e-05 176.717432,-1.94737475e-05 C220.402859,-1.94737475e-05 255.746345,35.5629913 255.746345,79.0288935 Z" fill="#F79E1B">\n\n</path>\n </g>\n</svg>';
727
-
728
- // src/components/img/visa.svg
729
- var visa_default = '<svg width="800px" height="800px" viewBox="0 -140 780 780" enable-background="new 0 0 780 500" version="1.1" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="M40,0h700c22.092,0,40,17.909,40,40v420c0,22.092-17.908,40-40,40H40c-22.091,0-40-17.908-40-40V40 C0,17.909,17.909,0,40,0z" fill="#0E4595"/><path d="m293.2 348.73l33.361-195.76h53.36l-33.385 195.76h-53.336zm246.11-191.54c-10.57-3.966-27.137-8.222-47.822-8.222-52.725 0-89.865 26.55-90.18 64.603-0.299 28.13 26.514 43.822 46.752 53.186 20.771 9.595 27.752 15.714 27.654 24.283-0.131 13.121-16.586 19.116-31.922 19.116-21.357 0-32.703-2.967-50.227-10.276l-6.876-3.11-7.489 43.823c12.463 5.464 35.51 10.198 59.438 10.443 56.09 0 92.5-26.246 92.916-66.882 0.199-22.269-14.016-39.216-44.801-53.188-18.65-9.055-30.072-15.099-29.951-24.268 0-8.137 9.668-16.839 30.557-16.839 17.449-0.27 30.09 3.535 39.938 7.5l4.781 2.26 7.232-42.429m137.31-4.223h-41.232c-12.773 0-22.332 3.487-27.941 16.234l-79.244 179.4h56.031s9.16-24.123 11.232-29.418c6.125 0 60.555 0.084 68.338 0.084 1.596 6.853 6.49 29.334 6.49 29.334h49.514l-43.188-195.64zm-65.418 126.41c4.412-11.279 21.26-54.723 21.26-54.723-0.316 0.522 4.379-11.334 7.074-18.684l3.605 16.879s10.219 46.729 12.354 56.528h-44.293zm-363.3-126.41l-52.24 133.5-5.567-27.13c-9.725-31.273-40.025-65.155-73.898-82.118l47.766 171.2 56.456-0.064 84.004-195.39h-56.521" fill="#ffffff"/><path d="m146.92 152.96h-86.041l-0.681 4.073c66.938 16.204 111.23 55.363 129.62 102.41l-18.71-89.96c-3.23-12.395-12.597-16.094-24.186-16.527" fill="#F2AE14"/></svg>';
730
-
731
- // src/components/controls/card/Options.ts
732
- var CreditCardData = {
733
- amex: { icon: american_express_default, name: "American Express" },
734
- discover: { icon: discover_default, name: "Discover" },
735
- mastercard: { icon: mastercard_default, name: "Mastercard" },
736
- visa: { icon: visa_default, name: "Visa" }
737
- };
738
-
739
- // src/components/controls/card/number/use.ts
740
- import { useEffect as useEffect2, useState as useState2 } from "react";
741
- var useCreditCardNumberFormControl = (formControlName, control) => {
742
- const {
743
- creditCardFormControl,
744
- error,
745
- inputRef,
746
- value
747
- } = useCreditCardFormControl(formControlName, control);
748
- const [type, setType] = useState2("");
749
- useEffect2(() => {
750
- if (creditCardFormControl) {
751
- const castControl = creditCardFormControl;
752
- if (!castControl.onCreditCardTypeChange) {
753
- console.error("cannot set onCreditCardTypeChange on control because it is not a CreditCardNumberFormControl");
754
- return;
755
- }
756
- Object.assign(castControl, { onCreditCardTypeChange: (type2) => setType(type2) });
757
- Object.assign(castControl, {
758
- onCursorChange: (cursor) => {
759
- if (inputRef.current && cursor) {
760
- inputRef.current.setSelectionRange(cursor, cursor);
761
- }
762
- }
763
- });
764
- }
765
- }, [creditCardFormControl, inputRef]);
766
- return {
767
- creditCardFormControl,
768
- error,
769
- inputRef,
770
- type,
771
- value
772
- };
773
- };
774
-
775
- // src/components/controls/card/number/Number.tsx
776
- import { jsx as jsx7 } from "react/jsx-runtime";
777
- var CreditCardNumberWithFormControl = ({
778
- fieldLabel = "Card Number",
779
- formControlName = "cardNumber",
780
- ...props
781
- }) => {
782
- const {
783
- creditCardFormControl,
784
- error,
785
- inputRef,
786
- type,
787
- value
788
- } = useCreditCardNumberFormControl(formControlName, CreditCardNumberFormControl);
789
- const {
790
- autoComplete,
791
- autoCorrect,
792
- id,
793
- inputMode,
794
- name,
795
- spellCheck,
796
- ...cardProps
797
- } = creditCardFormControl?.props ?? {};
798
- return /* @__PURE__ */ jsx7(
799
- FormControlTextField,
800
- {
801
- fieldLabel,
802
- formControl: creditCardFormControl,
803
- formControlError: error,
804
- inputRef,
805
- inputMode,
806
- slotProps: {
807
- htmlInput: {
808
- "aria-label": fieldLabel,
809
- autoComplete,
810
- autoCorrect,
811
- id,
812
- inputMode,
813
- name,
814
- spellCheck
815
- },
816
- input: {
817
- startAdornment: type.length > 0 ? /* @__PURE__ */ jsx7(InputAdornment, { position: "start", children: /* @__PURE__ */ jsx7("img", { height: "30px", width: "40px", src: CreditCardData[type].icon }) }) : null
818
- }
819
- },
820
- value,
821
- ...cardProps,
822
- ...props
823
- }
824
- );
825
- };
826
-
827
- // src/components/controls/card/Zip.tsx
828
- import { jsx as jsx8 } from "react/jsx-runtime";
829
- var CreditCardZipWithFormControl = ({
830
- formControlName = "zip",
831
- fieldLabel = "Zip",
832
- ...props
833
- }) => {
834
- const {
835
- creditCardFormControl,
836
- error,
837
- inputRef,
838
- value
839
- } = useCreditCardFormControl(formControlName, CreditCardZipFormControl);
840
- const {
841
- autoComplete,
842
- autoCorrect,
843
- id,
844
- inputMode,
845
- name,
846
- spellCheck,
847
- ...cvcProps
848
- } = creditCardFormControl?.props ?? {};
849
- return /* @__PURE__ */ jsx8(
850
- FormControlTextField,
851
- {
852
- fieldLabel,
853
- formControl: creditCardFormControl,
854
- formControlError: error,
855
- inputMode,
856
- slotProps: {
857
- htmlInput: {
858
- "aria-label": `${fieldLabel} code for your card`,
859
- autoComplete,
860
- autoCorrect,
861
- id,
862
- name,
863
- spellCheck
864
- }
865
- },
866
- inputRef,
867
- value,
868
- ...cvcProps,
869
- ...props
870
- }
871
- );
872
- };
873
-
874
- // src/components/form/Form.tsx
875
- import { ErrorRender } from "@ariestools/sdk-react/error";
876
- import { FlexCol } from "@ariestools/sdk-react/flexbox";
877
- import { Stack as Stack2 } from "@mui/material";
878
- import { useState as useState3 } from "react";
879
-
880
- // src/components/support/Fields.ts
881
- var NameFields = ["firstName", "lastName"];
882
- var NameLabels = ["First", "Last"];
883
-
884
- // src/components/support/validateCreditCardInputs.ts
885
- import { assertEx as assertEx3 } from "@ariestools/sdk";
886
-
887
- // src/models/CreditCardInput.ts
888
- import { asSchema, isPayloadOfSchemaType } from "@xyo-network/sdk";
889
- var CreditCardInputSchema = asSchema("network.xyo.credit.card.input", true);
890
- var isCreditCardInput = isPayloadOfSchemaType(CreditCardInputSchema);
891
-
892
- // src/components/support/validateCreditCardInputs.ts
893
- var validateCreditCardInputs = (values) => {
894
- return {
895
- cardNumber: assertEx3(values.cardNumber, () => "card number is not a string"),
896
- cvc: assertEx3(values.cvc, () => "card cvc is not a string"),
897
- emailAddress: assertEx3(values.emailAddress, () => "emailAddress is not a string"),
898
- expiration: assertEx3(values.expiration, () => "card expiration is not a string"),
899
- firstName: assertEx3(values.firstName, () => "first name is not a string"),
900
- lastName: assertEx3(values.lastName, () => "last name is not a string"),
901
- schema: CreditCardInputSchema,
902
- timestamp: values.timestamp,
903
- zip: assertEx3(values.zip, () => "zip is not a string")
904
- };
905
- };
906
-
907
- // src/components/form/InputFieldsStack.tsx
908
- import { Stack } from "@mui/material";
909
- import { Fragment, jsx as jsx9, jsxs } from "react/jsx-runtime";
910
- var InputFieldsStack = (props) => {
911
- const { sx } = props;
912
- return /* @__PURE__ */ jsxs(Fragment, { children: [
913
- /* @__PURE__ */ jsxs(
914
- Stack,
915
- {
916
- ...props,
917
- sx: [{
918
- gap: 2,
919
- flexDirection: { md: "row", xs: "column" },
920
- ...sx
921
- }, ...Array.isArray(props.sx) ? props.sx : [props.sx]],
922
- children: [
923
- /* @__PURE__ */ jsx9(NameWithFormControl, { autoCompleteLabel: "given-name", fieldLabel: "First", formControlName: "firstName", placeholder: "Jerry" }),
924
- /* @__PURE__ */ jsx9(NameWithFormControl, { autoCompleteLabel: "family-name", fieldLabel: "Last", formControlName: "lastName", placeholder: "Smith" })
925
- ]
926
- }
927
- ),
928
- /* @__PURE__ */ jsxs(
929
- Stack,
930
- {
931
- ...props,
932
- sx: [{
933
- gap: 2,
934
- flexDirection: { lg: "row", xs: "column" },
935
- ...sx
936
- }, ...Array.isArray(props.sx) ? props.sx : [props.sx]],
937
- children: [
938
- /* @__PURE__ */ jsx9(Stack, { sx: { width: { lg: "50%", xs: "100%" } }, children: /* @__PURE__ */ jsx9(CreditCardNumberWithFormControl, {}) }),
939
- /* @__PURE__ */ jsxs(
940
- Stack,
941
- {
942
- direction: { lg: "row", xs: "column" },
943
- sx: {
944
- gap: 2,
945
- width: { lg: "50%", xs: "100%" }
946
- },
947
- children: [
948
- /* @__PURE__ */ jsx9(CreditCardCvvWithFormControl, {}),
949
- /* @__PURE__ */ jsx9(CreditCardExpirationWithFormControl, {})
950
- ]
951
- }
952
- )
953
- ]
954
- }
955
- ),
956
- /* @__PURE__ */ jsxs(
957
- Stack,
958
- {
959
- ...props,
960
- sx: [{
961
- gap: 2,
962
- flexDirection: { md: "row", xs: "column" },
963
- ...sx
964
- }, ...Array.isArray(props.sx) ? props.sx : [props.sx]],
965
- children: [
966
- /* @__PURE__ */ jsx9(Stack, { sx: { width: { md: "25%", xs: "100%" } }, children: /* @__PURE__ */ jsx9(CreditCardZipWithFormControl, {}) }),
967
- /* @__PURE__ */ jsx9(Stack, { sx: { width: { md: "75%", xs: "100%" } }, children: /* @__PURE__ */ jsx9(CreditCardEmailWithFormControl, {}) })
968
- ]
969
- }
970
- )
971
- ] });
972
- };
973
-
974
- // src/components/form/useFormStorage.tsx
975
- import { usePromise } from "@ariestools/sdk-react/promise";
976
- import { StorageArchivist, StorageArchivistConfigSchema } from "@xyo-network/archivist-storage";
977
- import { ArchivistFormGroupStorage } from "@xyo-network/react-form-group";
978
- var STORAGE_NAME_SPACE = "credit-card-fields";
979
- var calculateTTL = (months = 6) => {
980
- const MS_PER_DAY = 24 * 60 * 60 * 1e3;
981
- const DAYS_PER_MONTH = 30.44;
982
- return months * DAYS_PER_MONTH * MS_PER_DAY;
983
- };
984
- var useFormStorage = () => {
985
- return usePromise(async () => {
986
- const localStorageArchivist = await StorageArchivist.create({
987
- account: "random",
988
- config: {
989
- namespace: STORAGE_NAME_SPACE,
990
- schema: StorageArchivistConfigSchema,
991
- type: "local"
992
- }
993
- });
994
- const sessionStorageArchivist = await StorageArchivist.create({
995
- account: "random",
996
- config: {
997
- namespace: STORAGE_NAME_SPACE,
998
- schema: StorageArchivistConfigSchema,
999
- type: "session"
1000
- }
1001
- });
1002
- const storage = {
1003
- sensitive: new ArchivistFormGroupStorage(sessionStorageArchivist),
1004
- storage: new ArchivistFormGroupStorage(localStorageArchivist)
1005
- };
1006
- return {
1007
- serialize: true,
1008
- storage,
1009
- ttlStorage: calculateTTL()
1010
- };
1011
- }, []);
1012
- };
1013
-
1014
- // src/components/form/Form.tsx
1015
- import { Fragment as Fragment2, jsx as jsx10, jsxs as jsxs2 } from "react/jsx-runtime";
1016
- var CreditCardFormFlexbox = ({
1017
- ConfirmationButton,
1018
- displayErrors,
1019
- onErrorDuringSubmit,
1020
- onInvalidSubmit,
1021
- onSuccessfulSubmit,
1022
- onValidSubmit,
1023
- ...props
1024
- }) => {
1025
- const { formGroup } = useFormGroupWithCreditCardInput(true);
1026
- const [error, setError] = useState3();
1027
- const handleConfirmPayment = async () => {
1028
- try {
1029
- if (!formGroup) {
1030
- throw new Error("formGroup is not defined");
1031
- }
1032
- formGroup.validateFields();
1033
- const errorSummary = formGroup.errorSummary;
1034
- if (errorSummary.invalidFields.length > 0) {
1035
- onInvalidSubmit?.(errorSummary);
1036
- }
1037
- if (errorSummary.invalidFields.length > 0) return;
1038
- const formOutput = validateCreditCardInputs(formGroup.values);
1039
- await onValidSubmit?.(formOutput);
1040
- onSuccessfulSubmit?.();
1041
- } catch (error2) {
1042
- onErrorDuringSubmit?.(error2);
1043
- if (displayErrors) setError(error2);
1044
- }
1045
- };
1046
- return /* @__PURE__ */ jsxs2(Fragment2, { children: [
1047
- /* @__PURE__ */ jsx10(ErrorRender, { error }),
1048
- /* @__PURE__ */ jsx10(
1049
- FlexCol,
1050
- {
1051
- ...props,
1052
- sx: [{
1053
- width: "100%",
1054
- gap: 2,
1055
- flexDirection: { md: "row", xs: "column" }
1056
- }, ...Array.isArray(props.sx) ? props.sx : [props.sx]],
1057
- children: /* @__PURE__ */ jsxs2(
1058
- Stack2,
1059
- {
1060
- sx: {
1061
- flexDirection: "column",
1062
- gap: 2,
1063
- width: "100%"
1064
- },
1065
- children: [
1066
- /* @__PURE__ */ jsx10(InputFieldsStack, {}),
1067
- ConfirmationButton ? /* @__PURE__ */ jsx10(ConfirmationButton, { onClick: handleConfirmPayment, variant: "contained", sx: { alignSelf: "end" }, children: "Confirm Payment" }) : null
1068
- ]
1069
- }
1070
- )
1071
- }
1072
- )
1073
- ] });
1074
- };
1075
- var CreditCardFormFlexboxWithFormGroupProvider = (props) => {
1076
- const [params, error] = useFormStorage();
1077
- return /* @__PURE__ */ jsxs2(FormGroupCreditCardProvider, { params, children: [
1078
- /* @__PURE__ */ jsx10(ErrorRender, { error }),
1079
- /* @__PURE__ */ jsx10(CreditCardFormFlexbox, { ...props })
1080
- ] });
1081
- };
1082
- export {
1083
- CreditCardCvvFormControl,
1084
- CreditCardCvvWithFormControl,
1085
- CreditCardData,
1086
- CreditCardEmailFormControl,
1087
- CreditCardEmailWithFormControl,
1088
- CreditCardExpirationFormControl,
1089
- CreditCardExpirationWithFormControl,
1090
- CreditCardFormFlexbox,
1091
- CreditCardFormFlexboxWithFormGroupProvider,
1092
- CreditCardInputSchema,
1093
- CreditCardNumberFormControl,
1094
- CreditCardNumberWithFormControl,
1095
- CreditCardZipFormControl,
1096
- CreditCardZipWithFormControl,
1097
- FormControlTextField,
1098
- FormGroupCreditCardContext,
1099
- FormGroupCreditCardProvider,
1100
- InputFieldsStack,
1101
- NameFields,
1102
- NameFormControl,
1103
- NameLabels,
1104
- NameWithFormControl,
1105
- isCreditCardInput,
1106
- unmask,
1107
- useCreditCardCvvFormControl,
1108
- useCreditCardFormControl,
1109
- useCreditCardNumberFormControl,
1110
- useFormGroupWithCreditCardInput,
1111
- useFormStorage,
1112
- validateCreditCardInputs
1113
- };
1
+ // src/index.ts
2
+ export * from "@xyo-network/react-sdk/form-credit-card";
1114
3
  //# sourceMappingURL=index.mjs.map