@axos-web-dev/shared-components 1.0.100-dev.42 → 1.0.100-dev.42-enhancementvalidationcalls.1

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 (57) hide show
  1. package/dist/ATMLocator/ATMLocator.js +1 -1
  2. package/dist/Auth/SignInPassword.js +2 -2
  3. package/dist/BulletItem/BulletItem.js +1 -0
  4. package/dist/Calculators/AnnualFeeCalculator/index.js +1 -1
  5. package/dist/Calculators/BuyDownCalculator/index.js +1 -1
  6. package/dist/Calculators/Calculator.js +2 -2
  7. package/dist/Calculators/MarineLoanMonthlyPaymentCalculator/index.js +1 -1
  8. package/dist/Calculators/MaxLoanCalculator/index.js +1 -1
  9. package/dist/Calculators/MonthlyPaymentCalculator/index.js +1 -1
  10. package/dist/Chatbot/ChatWindow.css.js +1 -0
  11. package/dist/Chatbot/Chatbot.css.js +0 -1
  12. package/dist/Forms/ApplicationStart.js +4 -2
  13. package/dist/Forms/ApplyNow.js +1 -1
  14. package/dist/Forms/ClearingForm.js +4 -2
  15. package/dist/Forms/CommercialDeposits.js +4 -2
  16. package/dist/Forms/CommercialDepositsNoLendingOption.js +4 -2
  17. package/dist/Forms/CommercialLending.js +4 -2
  18. package/dist/Forms/CommercialPremiumFinance.js +4 -2
  19. package/dist/Forms/ContactCompany.js +4 -2
  20. package/dist/Forms/ContactCompanyTitle.js +4 -2
  21. package/dist/Forms/ContactUs.js +4 -2
  22. package/dist/Forms/ContactUsAAS.js +4 -2
  23. package/dist/Forms/ContactUsBusiness.js +4 -2
  24. package/dist/Forms/ContactUsBusinessNameEmail.js +4 -2
  25. package/dist/Forms/ContactUsLVF.js +4 -2
  26. package/dist/Forms/ContactUsNMLSId.js +4 -2
  27. package/dist/Forms/CpraRequest.d.ts +1 -1
  28. package/dist/Forms/CpraRequest.js +5 -2
  29. package/dist/Forms/CraPublicFile.js +4 -2
  30. package/dist/Forms/DealerServices.js +4 -2
  31. package/dist/Forms/EmailOnly.js +4 -2
  32. package/dist/Forms/EmailUs.js +4 -2
  33. package/dist/Forms/HoneyPot/index.js +2 -1
  34. package/dist/Forms/MortgageRate/MortgageRateForm.js +4 -2
  35. package/dist/Forms/MortgageWarehouseLending.js +4 -2
  36. package/dist/Forms/QuickPricer/QuickPricerForm.js +16 -12
  37. package/dist/Forms/ScheduleCall.js +4 -2
  38. package/dist/Forms/ScheduleCallPremier.js +4 -2
  39. package/dist/Forms/SuccesForm.js +2 -2
  40. package/dist/Forms/VendorQuestionnaire.js +6 -2
  41. package/dist/Forms/index.js +1 -0
  42. package/dist/ImageLink/ImageLink.js +1 -1
  43. package/dist/LoadingIndicator/index.js +1 -0
  44. package/dist/Modal/contextApi/store.js +1 -1
  45. package/dist/SetContainer/SetContainer.js +1 -1
  46. package/dist/Tab/Tab.js +1 -0
  47. package/dist/Table/Table.d.ts +1 -1
  48. package/dist/main.js +8 -1
  49. package/dist/utils/emailValidation.d.ts +1 -0
  50. package/dist/utils/emailValidation.js +31 -0
  51. package/dist/utils/index.d.ts +4 -1
  52. package/dist/utils/index.js +9 -1
  53. package/dist/utils/nmlsValidation.d.ts +1 -0
  54. package/dist/utils/nmlsValidation.js +34 -0
  55. package/dist/utils/useCachedValidators.d.ts +2 -0
  56. package/dist/utils/useCachedValidators.js +22 -0
  57. package/package.json +136 -136
@@ -27,11 +27,12 @@ import '../assets/icons/FollowIcon/FollowIcon.css';import '../assets/icons/Downl
27
27
  /* empty css */
28
28
  /* empty css */
29
29
  import { findMoreAxosDomains } from "../utils/allowedAxosDomains.js";
30
+ import * as z from "zod";
30
31
  import { associatedEmail } from "../utils/EverestValidity.js";
31
32
  import { getVariant } from "../utils/getVariant.js";
33
+ import { useCachedEmailValidator } from "../utils/useCachedValidators.js";
32
34
  import clsx from "clsx";
33
35
  import { useForm, FormProvider } from "react-hook-form";
34
- import * as z from "zod";
35
36
  import { iconForm, headerContainer, form, descriptionField, fullRowForm, formWrapper, disclosureForm, actions, formContainer } from "./Forms.css.js";
36
37
  import { honeyPotSchema, isValidHoneyPot, HoneyPot } from "./HoneyPot/index.js";
37
38
  const CpraRequest = ({
@@ -45,9 +46,11 @@ const CpraRequest = ({
45
46
  headline,
46
47
  description,
47
48
  callToAction,
49
+ validateEmail,
48
50
  onValidate,
49
51
  id
50
52
  }) => {
53
+ const cachedEmailValidator = useCachedEmailValidator(validateEmail);
51
54
  const schema = z.object({
52
55
  California_Resident: z.string(),
53
56
  Categories_of_personal_info: z.string(),
@@ -73,7 +76,7 @@ const CpraRequest = ({
73
76
  Last_Name: z.string().regex(/^[A-Za-z][^0-9_!¡?÷?¿/\\+=@#$%ˆ&*,.^(){}|~<>;:[\]]{1,}$/g, {
74
77
  message: "Last Name is required."
75
78
  }).trim().min(1, { message: "Last Name is required." }),
76
- email: z.string().email({ message: "Email is required." }),
79
+ email: z.string().email({ message: "Email is required." }).refine(cachedEmailValidator, { message: "Invalid email address." }),
77
80
  Telephone: z.string({ message: "Phone is required." }).regex(/[\d-]{10}/, "Invalid phone number.").min(10, { message: "Phone is required." }).max(12, { message: "Phone is required." }).transform((val, ctx) => {
78
81
  const removeDashes = val.replace(/-/gi, "");
79
82
  if (removeDashes.length !== 10) {
@@ -35,6 +35,8 @@ import "react-use";
35
35
  import "../ArticlesSet/ArticlesSet.css.js";
36
36
  import "../IconBillboard/IconBillboard.css.js";
37
37
  import "../utils/allowedAxosDomains.js";
38
+ import { z } from "zod";
39
+ import { useCachedEmailValidator } from "../utils/useCachedValidators.js";
38
40
  import "../Calculators/calculator.css.js";
39
41
  import "../Calculators/AnnualFeeCalculator/AnnualFeeCalculator.css.js";
40
42
  import "../Calculators/ApyCalculator/ApyCalculator.css.js";
@@ -43,7 +45,6 @@ import "../Calculators/AxosOneCalculator/BalanceAPYCalculator.css.js";
43
45
  import "../Calculators/BalanceAPYCalculator/BalanceAPYCalculator.css.js";
44
46
  import "../Input/PercentageInput.js";
45
47
  import { useForm, FormProvider } from "react-hook-form";
46
- import { z } from "zod";
47
48
  import "../Calculators/BuyDownCalculator/BuyDownCalculator.css.js";
48
49
  import { iconForm, headerContainer, headerForm, form, descriptionField, fullRowForm, formWrapper, disclosureForm, actions, formContainer } from "./Forms.css.js";
49
50
  import { honeyPotSchema, isValidHoneyPot, HoneyPot } from "./HoneyPot/index.js";
@@ -148,10 +149,11 @@ const CraPublicFile = ({
148
149
  onValidate,
149
150
  id
150
151
  }) => {
152
+ const cachedEmailValidator = useCachedEmailValidator(validateEmail);
151
153
  const schema = z.object({
152
154
  First_Name__c: z.string({ message: "Invalid first name." }).regex(/^[a-zA-Z]*(?:[a-zA-Z][a-zA-Z'-]*\s{0,1}){2,}$/g).trim().min(1, { message: "First Name is required." }).optional().or(z.literal("")),
153
155
  Last_Name__c: z.string({ message: "Invalid last name." }).regex(/^[a-zA-Z]*(?:[a-zA-Z][a-zA-Z'-]*\s{0,1}){2,}$/g).trim().min(1, { message: "Last Name is required." }).optional().or(z.literal("")),
154
- Customer_Email__c: z.string({ message: "Invalid email." }).email({ message: "Email is required." }).refine(async (val) => await validateEmail(val)).optional().or(z.literal("")),
156
+ Customer_Email__c: z.string({ message: "Invalid email." }).email({ message: "Email is required." }).refine(cachedEmailValidator, { message: "Invalid email address." }).optional().or(z.literal("")),
155
157
  Customer_Phone__c: z.string({ message: "Phone is required." }).regex(/[\d-]{10}/, "Invalid phone number.").min(10, { message: "Phone is required." }).max(12, { message: "Phone is required." }).transform((val, ctx) => {
156
158
  const removeDashes = val.replace(/-/gi, "");
157
159
  if (removeDashes.length !== 10) {
@@ -26,11 +26,12 @@ import '../assets/icons/FollowIcon/FollowIcon.css';import '../assets/icons/Downl
26
26
  /* empty css */
27
27
  /* empty css */
28
28
  import "../utils/allowedAxosDomains.js";
29
+ import * as z from "zod";
29
30
  import { associatedEmail } from "../utils/EverestValidity.js";
30
31
  import { getVariant } from "../utils/getVariant.js";
32
+ import { useCachedEmailValidator } from "../utils/useCachedValidators.js";
31
33
  import clsx from "clsx";
32
34
  import { useForm, FormProvider } from "react-hook-form";
33
- import * as z from "zod";
34
35
  import { iconForm, headerContainer, headerForm, form, descriptionField, formWrapper, disclosureForm, actions, formContainer } from "./Forms.css.js";
35
36
  import { honeyPotSchema, isValidHoneyPot, HoneyPot } from "./HoneyPot/index.js";
36
37
  import { SalesforceSchema } from "./SalesforceFieldsForm.js";
@@ -49,10 +50,11 @@ const DealerServices = ({
49
50
  onValidate,
50
51
  id
51
52
  }) => {
53
+ const cachedEmailValidator = useCachedEmailValidator(validateEmail);
52
54
  const schema = z.object({
53
55
  first_name: z.string().regex(/^[A-Za-z][^0-9_!¡?÷?¿/\\+=@#$%ˆ&*,.^(){}|~<>;:[\]]{1,}$/g).trim().min(1, { message: "First Name is required." }),
54
56
  last_name: z.string().regex(/^[A-Za-z][^0-9_!¡?÷?¿/\\+=@#$%ˆ&*,.^(){}|~<>;:[\]]{1,}$/g).trim().min(1, { message: "Last Name is required." }),
55
- email: z.string().email({ message: "Email is required." }),
57
+ email: z.string().email({ message: "Email is required." }).refine(cachedEmailValidator, { message: "Invalid email address." }),
56
58
  phone: z.string({ message: "Phone is required." }).regex(/[\d-]{10}/, "Invalid phone number.").min(10, { message: "Phone is required." }).max(12, { message: "Phone is required." }).transform((val, ctx) => {
57
59
  const removeDashes = val.replace(/-/gi, "");
58
60
  if (removeDashes.length !== 10) {
@@ -35,7 +35,9 @@ import "react-use";
35
35
  import "../ArticlesSet/ArticlesSet.css.js";
36
36
  import "../IconBillboard/IconBillboard.css.js";
37
37
  import "../utils/allowedAxosDomains.js";
38
+ import { z } from "zod";
38
39
  import { associatedEmail } from "../utils/EverestValidity.js";
40
+ import { useCachedEmailValidator } from "../utils/useCachedValidators.js";
39
41
  import "../Calculators/calculator.css.js";
40
42
  import "../Calculators/AnnualFeeCalculator/AnnualFeeCalculator.css.js";
41
43
  import "../Calculators/ApyCalculator/ApyCalculator.css.js";
@@ -44,7 +46,6 @@ import "../Calculators/AxosOneCalculator/BalanceAPYCalculator.css.js";
44
46
  import "../Calculators/BalanceAPYCalculator/BalanceAPYCalculator.css.js";
45
47
  import "../Input/PercentageInput.js";
46
48
  import { useForm, FormProvider } from "react-hook-form";
47
- import { z } from "zod";
48
49
  import "../Calculators/BuyDownCalculator/BuyDownCalculator.css.js";
49
50
  import { iconForm, headerContainer, headerForm, email_only_h2, form, descriptionField, actions, email_only_btn, formWrapper, disclosureForm, formContainer, email_only_padding } from "./Forms.css.js";
50
51
  import { honeyPotSchema, isValidHoneyPot, HoneyPot } from "./HoneyPot/index.js";
@@ -149,8 +150,9 @@ const EmailOnly = ({
149
150
  onValidate,
150
151
  id
151
152
  }) => {
153
+ const cachedEmailValidator = useCachedEmailValidator(validateEmail);
152
154
  const schema = z.object({
153
- email: z.string().email({ message: "Email is required." }).refine(async (val) => await validateEmail(val))
155
+ email: z.string().email({ message: "Email is required." }).refine(cachedEmailValidator, { message: "Invalid email address." })
154
156
  });
155
157
  const gen_schema = schema.merge(SalesforceSchema).merge(honeyPotSchema).superRefine((data, ctx) => {
156
158
  if (!isValidHoneyPot(data)) {
@@ -18,11 +18,12 @@ import '../assets/icons/FollowIcon/FollowIcon.css';import '../assets/icons/Downl
18
18
  /* empty css */
19
19
  /* empty css */
20
20
  import "../utils/allowedAxosDomains.js";
21
+ import * as z from "zod";
21
22
  import { associatedEmail } from "../utils/EverestValidity.js";
22
23
  import { getVariant } from "../utils/getVariant.js";
24
+ import { useCachedEmailValidator } from "../utils/useCachedValidators.js";
23
25
  import clsx from "clsx";
24
26
  import { useForm, FormProvider } from "react-hook-form";
25
- import * as z from "zod";
26
27
  import { iconForm, headerContainer, headerForm, form, descriptionField, formWrapper, disclosureForm, actions, formContainer } from "./Forms.css.js";
27
28
  import { honeyPotSchema, isValidHoneyPot, HoneyPot } from "./HoneyPot/index.js";
28
29
  const EmailUs = ({
@@ -40,8 +41,9 @@ const EmailUs = ({
40
41
  description,
41
42
  id
42
43
  }) => {
44
+ const cachedEmailValidator = useCachedEmailValidator(validateEmail);
43
45
  const schema = z.object({
44
- email: z.string().email({ message: "Email is required." }).refine(async (val) => await validateEmail(val)),
46
+ email: z.string().email({ message: "Email is required." }).refine(cachedEmailValidator, { message: "Invalid email address." }),
45
47
  message: z.string().min(2, "Message is required")
46
48
  });
47
49
  const gen_schema = schema.merge(honeyPotSchema).superRefine((data, ctx) => {
@@ -11,8 +11,9 @@ import "../../Input/InputTextArea.js";
11
11
  import "../../Input/DownPaymentInput.js";
12
12
  import "../../Input/RadioButton.js";
13
13
  import "../../utils/allowedAxosDomains.js";
14
- import { getVariant } from "../../utils/getVariant.js";
15
14
  import { z } from "zod";
15
+ import { getVariant } from "../../utils/getVariant.js";
16
+ import "react";
16
17
  import { form_field_container } from "./HoneyPot.css.js";
17
18
  const honeyPotSchema = z.object({
18
19
  AlternativeEmail: z.string().refine((val) => val === "bestbank@axos.com"),
@@ -12,8 +12,10 @@ import '../../assets/VideoWrapper/VideoWrapper.css';import '../../assets/Topical
12
12
  /* empty css */
13
13
  /* empty css */
14
14
  import "../../utils/allowedAxosDomains.js";
15
+ import * as z from "zod";
15
16
  import { associatedEmail } from "../../utils/EverestValidity.js";
16
17
  import { getVariant } from "../../utils/getVariant.js";
18
+ import { useCachedEmailValidator } from "../../utils/useCachedValidators.js";
17
19
  import clsx from "clsx";
18
20
  /* empty css */
19
21
  /* empty css */
@@ -43,7 +45,6 @@ import { DownPaymentInput } from "../../Input/DownPaymentInput.js";
43
45
  import "../../Input/RadioButton.js";
44
46
  import "../../Input/PercentageInput.js";
45
47
  import { useForm, FormProvider } from "react-hook-form";
46
- import * as z from "zod";
47
48
  import "../../Calculators/BuyDownCalculator/BuyDownCalculator.css.js";
48
49
  import { iconForm, headerForm, form, descriptionField, headerContainer, fullRowSelect, formWrapper, centerSelect, mt2rem, fullRowForm, disclosureForm, actions, formBtns, na_cursor, formContainer } from "../Forms.css.js";
49
50
  import { honeyPotSchema, isValidHoneyPot, HoneyPot } from "../HoneyPot/index.js";
@@ -159,6 +160,7 @@ const MortgageRate = ({
159
160
  const [_downPayment, setDownPayment] = useState(0);
160
161
  const [isTypingDownPayment, setIsTypingDownPayment] = useState(false);
161
162
  const [salesPriceVal, setSalesPriceVal] = useState(0);
163
+ const cachedEmailValidator = useCachedEmailValidator(validateEmail);
162
164
  const schema = z.object({
163
165
  firstName: z.string({ message: "First Name is required." }).regex(/^[A-Za-z][^0-9_!¡?÷?¿/\\+=@#$%ˆ&*,.^(){}|~<>;:[\]]{1,}$/g, {
164
166
  message: "First Name is required."
@@ -166,7 +168,7 @@ const MortgageRate = ({
166
168
  lastName: z.string({ message: "Last Name is required." }).regex(/^[A-Za-z][^0-9_!¡?÷?¿/\\+=@#$%ˆ&*,.^(){}|~<>;:[\]]{1,}$/g, {
167
169
  message: "Last Name is required."
168
170
  }).trim().min(1, { message: "Last Name is required." }),
169
- email: z.string().email({ message: "Email is required." }).refine(async (val) => await validateEmail(val)),
171
+ email: z.string().email({ message: "Email is required." }).refine(cachedEmailValidator, { message: "Invalid email address." }),
170
172
  phone: z.string({ message: "Phone is required." }).regex(/[\d-]{10}/, { message: "Phone is required." }).min(10, { message: "Phone is required." }).max(12, { message: "Phone is required." }).transform((val, ctx) => {
171
173
  const removeDashes = val.replace(/-/gi, "");
172
174
  if (removeDashes.length !== 10) {
@@ -35,6 +35,8 @@ import "react-use";
35
35
  import "../ArticlesSet/ArticlesSet.css.js";
36
36
  import "../IconBillboard/IconBillboard.css.js";
37
37
  import "../utils/allowedAxosDomains.js";
38
+ import { z } from "zod";
39
+ import { useCachedEmailValidator } from "../utils/useCachedValidators.js";
38
40
  import "../Calculators/calculator.css.js";
39
41
  import "../Calculators/AnnualFeeCalculator/AnnualFeeCalculator.css.js";
40
42
  import "../Calculators/ApyCalculator/ApyCalculator.css.js";
@@ -43,7 +45,6 @@ import "../Calculators/AxosOneCalculator/BalanceAPYCalculator.css.js";
43
45
  import "../Calculators/BalanceAPYCalculator/BalanceAPYCalculator.css.js";
44
46
  import "../Input/PercentageInput.js";
45
47
  import { useForm, FormProvider } from "react-hook-form";
46
- import { z } from "zod";
47
48
  import "../Calculators/BuyDownCalculator/BuyDownCalculator.css.js";
48
49
  import { iconForm, headerContainer, headerForm, form, descriptionField, formWrapper, disclosureForm, actions, formContainer } from "./Forms.css.js";
49
50
  import { honeyPotSchema, isValidHoneyPot, HoneyPot } from "./HoneyPot/index.js";
@@ -148,10 +149,11 @@ const MortgageWarehouseLending = ({
148
149
  onValidate,
149
150
  id
150
151
  }) => {
152
+ const cachedEmailValidator = useCachedEmailValidator(validateEmail);
151
153
  const schema = z.object({
152
154
  first_name: z.string().regex(/^[A-Za-z][^0-9_!¡?÷?¿/\\+=@#$%ˆ&*,.^(){}|~<>;:[\]]{1,}$/g).trim().min(1, { message: "First Name is required." }),
153
155
  last_name: z.string().regex(/^[A-Za-z][^0-9_!¡?÷?¿/\\+=@#$%ˆ&*,.^(){}|~<>;:[\]]{1,}$/g).trim().min(1, { message: "Last Name is required." }),
154
- email: z.string().email({ message: "Email is required." }).refine(async (val) => await validateEmail(val)),
156
+ email: z.string().email({ message: "Email is required." }).refine(cachedEmailValidator, { message: "Invalid email address." }),
155
157
  phone: z.string({ message: "Phone is required." }).regex(/[\d-]{10}/, "Invalid phone number.").min(10, { message: "Phone is required." }).max(12, { message: "Phone is required." }).transform((val, ctx) => {
156
158
  const removeDashes = val.replace(/-/gi, "");
157
159
  if (removeDashes.length !== 10) {
@@ -26,12 +26,13 @@ import '../../assets/icons/FollowIcon/FollowIcon.css';import '../../assets/icons
26
26
  /* empty css */
27
27
  /* empty css */
28
28
  import "../../utils/allowedAxosDomains.js";
29
+ import * as z from "zod";
29
30
  import { associatedEmail } from "../../utils/EverestValidity.js";
30
31
  import { getVariant } from "../../utils/getVariant.js";
32
+ import { useCachedEmailValidator, useCachedNMLSValidator } from "../../utils/useCachedValidators.js";
31
33
  import { format } from "@react-input/number-format";
32
34
  import clsx from "clsx";
33
35
  import { useForm, FormProvider } from "react-hook-form";
34
- import * as z from "zod";
35
36
  import { BrokerConpensation, PrepaymentPenalty, NumberOfUnits, Occupancy, PropertyType, BankruptcySeasoning, BankruptcyType, HousingEventHistory, HousingEventType, MortgageLates24, MortgageLates12, Citizenship, DocType, RepresentativesFico, Purposes } from "../FormEnums.js";
36
37
  import { iconForm, headerContainer, headerForm, form, descriptionField, one_row, section_title, checkbox_group, formWrapper, disclosureForm, actions, formContainer } from "../Forms.css.js";
37
38
  import { honeyPotSchema, isValidHoneyPot, HoneyPot } from "../HoneyPot/index.js";
@@ -60,6 +61,8 @@ const QuickPricer = ({
60
61
  const [bankruptcySeasoning, setBankruptcySeasoning] = useState(false);
61
62
  const [numberOfUnits, setNumberOfUnits] = useState(false);
62
63
  const [prepaymentPenalty, setPrepaymentPenalty] = useState(false);
64
+ const cachedEmailValidator = useCachedEmailValidator(validateEmail);
65
+ const cachedNMLSValidator = useCachedNMLSValidator(validateNMLS);
63
66
  const schema = z.object({
64
67
  Base_Loan_Amount__c: z.string({
65
68
  message: "Please provide a valid base loan amount"
@@ -169,11 +172,8 @@ const QuickPricer = ({
169
172
  message: "Broker compensation is required"
170
173
  }
171
174
  ),
172
- NMLS__c: z.string().min(4, "Valid NMLS should have at least 4 characters").max(15, "Valid NMLS should have at most 15 characters").refine(async (val) => {
173
- const res = await validateNMLS(val);
174
- return res?.body?.data?.records?.length > 0;
175
- }, "NMLS ID is not valid"),
176
- Email_Address__c: z.string().email({ message: "Email is required." }).refine(async (val) => await validateEmail(val)),
175
+ NMLS__c: z.string().min(4, "Valid NMLS should have at least 4 characters").max(15, "Valid NMLS should have at most 15 characters").refine(cachedNMLSValidator, "NMLS ID is not valid"),
176
+ Email_Address__c: z.string().email({ message: "Email is required." }).refine(cachedEmailValidator, { message: "Invalid email address." }),
177
177
  Cell_Phone__c: z.string().regex(/[\d-]{10}/).min(10, { message: "Phone is required." }).max(12, { message: "Phone is required." }).transform((val, ctx) => {
178
178
  const removeDashes = val.replace(/-/gi, "");
179
179
  if (removeDashes.length !== 10) {
@@ -216,10 +216,14 @@ const QuickPricer = ({
216
216
  }
217
217
  });
218
218
  const methods = useForm({
219
- resolver: zodResolver(gen_schema, {
220
- async: true
221
- }),
222
- mode: "all",
219
+ resolver: zodResolver(
220
+ gen_schema,
221
+ {
222
+ async: true
223
+ },
224
+ { mode: "async" }
225
+ ),
226
+ mode: "onChange",
223
227
  reValidateMode: "onChange",
224
228
  defaultValues: {
225
229
  Cash_Out_Amount__c: format(0),
@@ -236,7 +240,7 @@ const QuickPricer = ({
236
240
  const {
237
241
  handleSubmit,
238
242
  register,
239
- formState: { errors, isValid },
243
+ formState: { errors, isValid, isValidating },
240
244
  setValue
241
245
  } = methods;
242
246
  const submitForm = async (data) => {
@@ -875,7 +879,7 @@ const QuickPricer = ({
875
879
  color: getVariant(callToAction?.variant),
876
880
  as: "button",
877
881
  type: "submit",
878
- disabled: !isValid,
882
+ disabled: !isValid || isValidating,
879
883
  children: callToAction?.displayText
880
884
  }
881
885
  ) })
@@ -26,11 +26,12 @@ import '../assets/icons/FollowIcon/FollowIcon.css';import '../assets/icons/Downl
26
26
  /* empty css */
27
27
  /* empty css */
28
28
  import "../utils/allowedAxosDomains.js";
29
+ import * as z from "zod";
29
30
  import { associatedEmail } from "../utils/EverestValidity.js";
30
31
  import { getVariant } from "../utils/getVariant.js";
32
+ import { useCachedEmailValidator } from "../utils/useCachedValidators.js";
31
33
  import clsx from "clsx";
32
34
  import { useForm, FormProvider } from "react-hook-form";
33
- import * as z from "zod";
34
35
  import { iconForm, headerContainer, headerForm, form, descriptionField, formWrapper, disclosureForm, actions, formContainer } from "./Forms.css.js";
35
36
  import { honeyPotSchema, isValidHoneyPot, HoneyPot } from "./HoneyPot/index.js";
36
37
  import { SalesforceSchema } from "./SalesforceFieldsForm.js";
@@ -49,10 +50,11 @@ const ScheduleCall = ({
49
50
  id,
50
51
  description
51
52
  }) => {
53
+ const cachedEmailValidator = useCachedEmailValidator(validateEmail);
52
54
  const schema = z.object({
53
55
  first_name: z.string().regex(/^[A-Za-z][^0-9_!¡?÷?¿/\\+=@#$%ˆ&*,.^(){}|~<>;:[\]]{1,}$/g).trim().min(1, { message: "First Name is required." }),
54
56
  last_name: z.string().regex(/^[A-Za-z][^0-9_!¡?÷?¿/\\+=@#$%ˆ&*,.^(){}|~<>;:[\]]{1,}$/g).trim().min(1, { message: "Last Name is required." }),
55
- email: z.string().email({ message: "Email is required." }).refine(async (val) => await validateEmail(val)),
57
+ email: z.string().email({ message: "Email is required." }).refine(cachedEmailValidator, { message: "Invalid email address." }),
56
58
  phone: z.string({ message: "Phone is required." }).regex(/[\d-]{10}/, "Invalid phone number.").min(10, { message: "Phone is required." }).max(12, { message: "Phone is required." }).transform((val, ctx) => {
57
59
  const removeDashes = val.replace(/-/gi, "");
58
60
  if (removeDashes.length !== 10) {
@@ -27,11 +27,12 @@ import '../assets/icons/FollowIcon/FollowIcon.css';import '../assets/icons/Downl
27
27
  /* empty css */
28
28
  /* empty css */
29
29
  import "../utils/allowedAxosDomains.js";
30
+ import * as z from "zod";
30
31
  import { associatedEmail } from "../utils/EverestValidity.js";
31
32
  import { getVariant } from "../utils/getVariant.js";
33
+ import { useCachedEmailValidator } from "../utils/useCachedValidators.js";
32
34
  import clsx from "clsx";
33
35
  import { useForm, FormProvider } from "react-hook-form";
34
- import * as z from "zod";
35
36
  import { iconForm, headerContainer, headerForm, form, descriptionField, fullRowForm, formWrapper, disclosureForm, actions, formContainer } from "./Forms.css.js";
36
37
  import { honeyPotSchema, isValidHoneyPot, HoneyPot } from "./HoneyPot/index.js";
37
38
  import { SalesforceSchema } from "./SalesforceFieldsForm.js";
@@ -50,10 +51,11 @@ const ScheduleCallPremier = ({
50
51
  onValidate,
51
52
  id
52
53
  }) => {
54
+ const cachedEmailValidator = useCachedEmailValidator(validateEmail);
53
55
  const schema = z.object({
54
56
  first_name: z.string().regex(/^[A-Za-z][^0-9_!¡?÷?¿/\\+=@#$%ˆ&*,.^(){}|~<>;:[\]]{1,}$/g).trim().min(1, { message: "First Name is required." }),
55
57
  last_name: z.string().regex(/^[A-Za-z][^0-9_!¡?÷?¿/\\+=@#$%ˆ&*,.^(){}|~<>;:[\]]{1,}$/g).trim().min(1, { message: "Last Name is required." }),
56
- email: z.string().email({ message: "Email is required." }).refine(async (val) => await validateEmail(val)),
58
+ email: z.string().email({ message: "Email is required." }).refine(cachedEmailValidator, { message: "Invalid email address." }),
57
59
  phone: z.string({ message: "Phone is required." }).regex(/[\d-]{10}/, "Invalid phone number.").min(10, { message: "Phone is required." }).max(12, { message: "Phone is required." }).transform((val, ctx) => {
58
60
  const removeDashes = val.replace(/-/gi, "");
59
61
  if (removeDashes.length !== 10) {
@@ -1,6 +1,7 @@
1
1
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
2
  import "../utils/allowedAxosDomains.js";
3
3
  import { getVariant } from "../utils/getVariant.js";
4
+ import "react";
4
5
  import clsx from "clsx";
5
6
  import "@hookform/resolvers/zod";
6
7
  import "../IconBillboard/IconBillboard.css.js";
@@ -16,7 +17,6 @@ import '../assets/Forms/QuickPricer/UserInformation.css';import '../assets/Forms
16
17
  import "../Accordion/Accordion.js";
17
18
  import "../Accordion/Accordion.css.js";
18
19
  import "../AlertBanner/AlertBanner.css.js";
19
- import "react";
20
20
  import "../Article/Article.css.js";
21
21
  import "../ArticlesSet/ArticlesSet.css.js";
22
22
  import "../Calculators/calculator.css.js";
@@ -61,8 +61,8 @@ import "../Carousel/index.js";
61
61
  /* empty css */
62
62
  import "../Chatbot/store/chat.js";
63
63
  import "../Chatbot/authenticate.js";
64
- import "../Chatbot/Chatbot.css.ts.vanilla.css.js";
65
64
  import "react-use";
65
+ import "../Chatbot/Chatbot.css.ts.vanilla.css.js";
66
66
  /* empty css */
67
67
  import "../Chatbot/store/messages.js";
68
68
  /* empty css */
@@ -17,10 +17,11 @@ import { InputTextArea } from "../Input/InputTextArea.js";
17
17
  import "../Input/DownPaymentInput.js";
18
18
  import "../Input/RadioButton.js";
19
19
  import "../utils/allowedAxosDomains.js";
20
+ import { z } from "zod";
20
21
  import { getVariant } from "../utils/getVariant.js";
22
+ import { useCachedEmailValidator } from "../utils/useCachedValidators.js";
21
23
  import clsx from "clsx";
22
24
  import { useForm, FormProvider } from "react-hook-form";
23
- import { z } from "zod";
24
25
  import { form, form_row, descriptionField, formWrapper, actions, formContainer } from "./Forms.css.js";
25
26
  import { honeyPotSchema, isValidHoneyPot, HoneyPot } from "./HoneyPot/index.js";
26
27
  const VendorQuestionnaire = ({
@@ -34,6 +35,7 @@ const VendorQuestionnaire = ({
34
35
  callToAction,
35
36
  id
36
37
  }) => {
38
+ const cachedEmailValidator = useCachedEmailValidator(validateEmail);
37
39
  const schema = z.object({
38
40
  "name/0-2": z.string().min(1, { message: "Please complete this required field." }),
39
41
  "dba/0-2": z.string(),
@@ -87,7 +89,9 @@ const VendorQuestionnaire = ({
87
89
  "firstname/0-1": z.string().regex(/^[a-zA-Z]*(?:[a-zA-Z][a-zA-Z'-]*\s{0,1}){2,}$/g).min(1, { message: "Please complete this required field." }),
88
90
  "lastname/0-1": z.string().regex(/^[a-zA-Z]*(?:[a-zA-Z][a-zA-Z'-]*\s{0,1}){2,}$/g).min(1, { message: "Please complete this required field." }),
89
91
  "jobtitle/0-1": z.string().min(1, { message: "Please complete this required field." }),
90
- "email/0-1": z.string().email({ message: "Please complete this required field." }).refine(async (val) => await validateEmail(val))
92
+ "email/0-1": z.string().email({ message: "Please complete this required field." }).refine(cachedEmailValidator, {
93
+ message: "Invalid email address."
94
+ })
91
95
  });
92
96
  const gen_schema = schema.merge(honeyPotSchema).superRefine((data, ctx) => {
93
97
  if (!isValidHoneyPot(data)) {
@@ -26,6 +26,7 @@ import { MortgageRate } from "./MortgageRate/MortgageRateForm.js";
26
26
  import "react/jsx-runtime";
27
27
  import { RateWatchForm } from "./MortgageRate/MortgageRateWatch.js";
28
28
  import "../utils/allowedAxosDomains.js";
29
+ import "react";
29
30
  import "../LoadingIndicator/LoadingIndicator.css.js";
30
31
  import "../Interstitial/Interstitial-variants.css.js";
31
32
  import { MortgageRateFilters } from "./MortgageRate/MortgageRateQuoteFilters.js";
@@ -9,13 +9,13 @@ import '../assets/VideoWrapper/VideoWrapper.css';import '../assets/TopicalNavSet
9
9
  /* empty css */
10
10
  /* empty css */
11
11
  import "../utils/allowedAxosDomains.js";
12
+ import { isValidElement } from "react";
12
13
  import "clsx";
13
14
  /* empty css */
14
15
  /* empty css */
15
16
  import "../Accordion/Accordion.js";
16
17
  import "../Accordion/Accordion.css.js";
17
18
  import "../AlertBanner/AlertBanner.css.js";
18
- import { isValidElement } from "react";
19
19
  import "../Article/Article.css.js";
20
20
  import "../ArticlesSet/ArticlesSet.css.js";
21
21
  import "../Calculators/calculator.css.js";
@@ -1,6 +1,7 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import "../utils/allowedAxosDomains.js";
3
3
  import { getVariant } from "../utils/getVariant.js";
4
+ import "react";
4
5
  import { loader } from "./LoadingIndicator.css.js";
5
6
  const LoadingIndicator = ({
6
7
  width = 50,
@@ -2,8 +2,8 @@
2
2
  import { jsxs, jsx } from "react/jsx-runtime";
3
3
  import { Modal } from "../Modal.js";
4
4
  import "../../utils/allowedAxosDomains.js";
5
- import { shortUrl } from "../../utils/validateExternalLinks.js";
6
5
  import { createContext, useContext, useState } from "react";
6
+ import { shortUrl } from "../../utils/validateExternalLinks.js";
7
7
  const GlobalContext = createContext({
8
8
  targetLinkUrl: "",
9
9
  setTargetLinkUrl: () => "",
@@ -11,6 +11,7 @@ import '../assets/VideoWrapper/VideoWrapper.css';import '../assets/TopicalNavSet
11
11
  /* empty css */
12
12
  import "../utils/allowedAxosDomains.js";
13
13
  import { getVariant } from "../utils/getVariant.js";
14
+ import "react";
14
15
  import { columnValues } from "../utils/variant.types.js";
15
16
  import clsx from "clsx";
16
17
  /* empty css */
@@ -18,7 +19,6 @@ import clsx from "clsx";
18
19
  import "../Accordion/Accordion.js";
19
20
  import "../Accordion/Accordion.css.js";
20
21
  import "../AlertBanner/AlertBanner.css.js";
21
- import "react";
22
22
  import "../Article/Article.css.js";
23
23
  import "../ArticlesSet/ArticlesSet.css.js";
24
24
  import "../Calculators/calculator.css.js";
package/dist/Tab/Tab.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import "../utils/allowedAxosDomains.js";
3
3
  import { getVariant } from "../utils/getVariant.js";
4
+ import "react";
4
5
  import clsx from "clsx";
5
6
  import { tab } from "./Tab.css.js";
6
7
  const Tab = ({
@@ -61,7 +61,7 @@ export declare const TableCell: ({ children, as, variant, highlighted, colSpan,
61
61
  is?: string | undefined;
62
62
  exportparts?: string | undefined;
63
63
  part?: string | undefined;
64
- popover?: "" | "auto" | "manual" | "hint" | undefined;
64
+ popover?: "" | "auto" | "manual" | undefined;
65
65
  popoverTargetAction?: "toggle" | "show" | "hide" | undefined;
66
66
  popoverTarget?: string | undefined;
67
67
  onToggle?: import('react').ToggleEventHandler<HTMLTableCellElement> | undefined;
package/dist/main.js CHANGED
@@ -205,11 +205,14 @@ import { VideoWrapper } from "./VideoWrapper/index.js";
205
205
  import { Tab } from "./Tab/Tab.js";
206
206
  import { TabContainer } from "./Tab/TabContainer.js";
207
207
  import { findMoreAxosDomains, isAllowedUrl } from "./utils/allowedAxosDomains.js";
208
+ import { appendQueryParams } from "./utils/appendQueryParams.js";
209
+ import { createCachedEmailValidator } from "./utils/emailValidation.js";
208
210
  import { associatedEmail } from "./utils/EverestValidity.js";
209
211
  import { getVariant, getVariantWithRegex } from "./utils/getVariant.js";
212
+ import { createCachedNMLSValidator } from "./utils/nmlsValidation.js";
213
+ import { useCachedEmailValidator, useCachedNMLSValidator } from "./utils/useCachedValidators.js";
210
214
  import { isAbsoluteUrl, isEmailLink, isPhoneLink, shortUrl, validateLink } from "./utils/validateExternalLinks.js";
211
215
  import { columnValues } from "./utils/variant.types.js";
212
- import { appendQueryParams } from "./utils/appendQueryParams.js";
213
216
  import { padding_in_footer, smb_section, smb_wrapper } from "./SocialMediaBar/SocialMediaBar.css.js";
214
217
  export {
215
218
  default20 as AASLogo,
@@ -501,6 +504,8 @@ export {
501
504
  containerIconBillboard,
502
505
  content,
503
506
  copy,
507
+ createCachedEmailValidator,
508
+ createCachedNMLSValidator,
504
509
  description,
505
510
  descriptionField,
506
511
  details,
@@ -778,6 +783,8 @@ export {
778
783
  two_inline,
779
784
  up_to,
780
785
  url_row,
786
+ useCachedEmailValidator,
787
+ useCachedNMLSValidator,
781
788
  useGlobalContext,
782
789
  useMessages,
783
790
  useOpenChat,
@@ -0,0 +1 @@
1
+ export declare function createCachedEmailValidator(validateEmail: (email: string) => Promise<boolean>): (val: string) => Promise<boolean>;
@@ -0,0 +1,31 @@
1
+ import * as z from "zod";
2
+ function createCachedEmailValidator(validateEmail) {
3
+ const emailValidationCache = /* @__PURE__ */ new Map();
4
+ const validatingEmails = /* @__PURE__ */ new Set();
5
+ return async (val) => {
6
+ if (!val || !z.string().email().safeParse(val).success) {
7
+ return true;
8
+ }
9
+ if (emailValidationCache.has(val)) {
10
+ return emailValidationCache.get(val) ?? false;
11
+ }
12
+ if (validatingEmails.has(val)) {
13
+ await new Promise((resolve) => setTimeout(resolve, 100));
14
+ if (emailValidationCache.has(val)) {
15
+ return emailValidationCache.get(val) ?? false;
16
+ }
17
+ return true;
18
+ }
19
+ validatingEmails.add(val);
20
+ try {
21
+ const isValid = await validateEmail(val);
22
+ emailValidationCache.set(val, isValid);
23
+ return isValid;
24
+ } finally {
25
+ validatingEmails.delete(val);
26
+ }
27
+ };
28
+ }
29
+ export {
30
+ createCachedEmailValidator
31
+ };
@@ -1,6 +1,9 @@
1
1
  export * from './allowedAxosDomains';
2
+ export * from './appendQueryParams';
3
+ export * from './emailValidation';
2
4
  export * from './EverestValidity';
3
5
  export * from './getVariant';
6
+ export * from './nmlsValidation';
7
+ export * from './useCachedValidators';
4
8
  export * from './validateExternalLinks';
5
9
  export * from './variant.types';
6
- export * from './appendQueryParams';
@@ -1,13 +1,19 @@
1
+ "use client";
1
2
  import { findMoreAxosDomains, isAllowedUrl } from "./allowedAxosDomains.js";
3
+ import { appendQueryParams } from "./appendQueryParams.js";
4
+ import { createCachedEmailValidator } from "./emailValidation.js";
2
5
  import { associatedEmail } from "./EverestValidity.js";
3
6
  import { getVariant, getVariantWithRegex } from "./getVariant.js";
7
+ import { createCachedNMLSValidator } from "./nmlsValidation.js";
8
+ import { useCachedEmailValidator, useCachedNMLSValidator } from "./useCachedValidators.js";
4
9
  import { isAbsoluteUrl, isEmailLink, isPhoneLink, shortUrl, validateLink } from "./validateExternalLinks.js";
5
10
  import { columnValues } from "./variant.types.js";
6
- import { appendQueryParams } from "./appendQueryParams.js";
7
11
  export {
8
12
  appendQueryParams,
9
13
  associatedEmail,
10
14
  columnValues,
15
+ createCachedEmailValidator,
16
+ createCachedNMLSValidator,
11
17
  findMoreAxosDomains,
12
18
  getVariant,
13
19
  getVariantWithRegex,
@@ -16,5 +22,7 @@ export {
16
22
  isEmailLink,
17
23
  isPhoneLink,
18
24
  shortUrl,
25
+ useCachedEmailValidator,
26
+ useCachedNMLSValidator,
19
27
  validateLink
20
28
  };
@@ -0,0 +1 @@
1
+ export declare function createCachedNMLSValidator(validateNMLS: (nmls_id: string) => Promise<any>): (val: string) => Promise<boolean>;