@axos-web-dev/shared-components 1.0.77-patch.50 → 1.0.77-patch.51

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 (60) hide show
  1. package/dist/ATMLocator/ATMLocator.js +1 -1
  2. package/dist/Auth/SignInPassword.js +2 -2
  3. package/dist/Blockquote/Blockquote.module.js +3 -3
  4. package/dist/BulletItem/BulletItem.js +1 -0
  5. package/dist/Calculators/AnnualFeeCalculator/index.js +1 -1
  6. package/dist/Calculators/BuyDownCalculator/index.js +1 -1
  7. package/dist/Calculators/Calculator.js +1 -1
  8. package/dist/Calculators/MarineLoanMonthlyPaymentCalculator/index.js +1 -1
  9. package/dist/Calculators/MaxLoanCalculator/index.js +1 -1
  10. package/dist/Calculators/MonthlyPaymentCalculator/index.js +1 -1
  11. package/dist/Forms/ApplicationStart.js +1 -1
  12. package/dist/Forms/ApplyNow.js +1 -1
  13. package/dist/Forms/ClearingForm.js +1 -1
  14. package/dist/Forms/CommercialDeposits.js +1 -1
  15. package/dist/Forms/CommercialDepositsNoLendingOption.js +1 -1
  16. package/dist/Forms/CommercialLending.js +1 -1
  17. package/dist/Forms/CommercialPremiumFinance.js +1 -1
  18. package/dist/Forms/ContactCompany.js +1 -1
  19. package/dist/Forms/ContactCompanyTitle.js +1 -1
  20. package/dist/Forms/ContactUs.js +1 -1
  21. package/dist/Forms/ContactUsAAS.js +1 -1
  22. package/dist/Forms/ContactUsBusiness.js +1 -1
  23. package/dist/Forms/ContactUsBusinessNameEmail.js +1 -1
  24. package/dist/Forms/ContactUsLVF.js +1 -1
  25. package/dist/Forms/ContactUsNMLSId.js +1 -1
  26. package/dist/Forms/CpraRequest.js +1 -1
  27. package/dist/Forms/CraPublicFile.js +1 -1
  28. package/dist/Forms/DealerServices.js +1 -1
  29. package/dist/Forms/EmailOnly.js +1 -1
  30. package/dist/Forms/EmailUs.js +1 -1
  31. package/dist/Forms/HoneyPot/index.js +2 -1
  32. package/dist/Forms/MortgageRate/MortgageRateForm.d.ts +1 -1
  33. package/dist/Forms/MortgageRate/MortgageRateForm.js +393 -352
  34. package/dist/Forms/MortgageRate/MortgageRateQuoteFilters.js +11 -5
  35. package/dist/Forms/MortgageWarehouseLending.js +1 -1
  36. package/dist/Forms/QuickPricer/QuickPricerForm.js +1 -1
  37. package/dist/Forms/ScheduleCall.js +1 -1
  38. package/dist/Forms/ScheduleCallPremier.js +1 -1
  39. package/dist/Forms/SuccesForm.js +1 -1
  40. package/dist/Forms/VendorQuestionnaire.js +1 -1
  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/NavigationMenu/AxosBank/MobileMenu/MobileNavData.d.ts +0 -1
  46. package/dist/NavigationMenu/AxosBank/MobileMenu/MobileNavData.js +0 -3
  47. package/dist/NavigationMenu/AxosBank/SubNavBar.js +0 -21
  48. package/dist/SetContainer/SetContainer.js +1 -1
  49. package/dist/Tab/Tab.js +1 -0
  50. package/dist/assets/Blockquote/Blockquote.css.css +68 -68
  51. package/dist/main.js +8 -1
  52. package/dist/utils/emailValidation.d.ts +1 -0
  53. package/dist/utils/emailValidation.js +31 -0
  54. package/dist/utils/index.d.ts +4 -1
  55. package/dist/utils/index.js +9 -1
  56. package/dist/utils/nmlsValidation.d.ts +1 -0
  57. package/dist/utils/nmlsValidation.js +34 -0
  58. package/dist/utils/useCachedValidators.d.ts +2 -0
  59. package/dist/utils/useCachedValidators.js +22 -0
  60. package/package.json +1 -1
@@ -16,12 +16,12 @@ import "../../Input/InputPhone.js";
16
16
  import "../../Input/InputTextArea.js";
17
17
  import { DownPaymentInput } from "../../Input/DownPaymentInput.js";
18
18
  import "../../Input/RadioButton.js";
19
+ import { LoadingIndicator } from "../../LoadingIndicator/index.js";
19
20
  import clsx from "clsx";
20
21
  import { useForm, FormProvider } from "react-hook-form";
21
22
  import * as z from "zod";
22
23
  import { headerForm, headerContainer, form, fullRowForm, formWrapper, actions, formContainer } from "../Forms.css.js";
23
24
  import { SalesforceSchema } from "../SalesforceFieldsForm.js";
24
- import { LoadingIndicator } from "../../LoadingIndicator/index.js";
25
25
  const MortgageRateFilters = ({
26
26
  formData,
27
27
  onSubmit
@@ -62,7 +62,7 @@ const MortgageRateFilters = ({
62
62
  }
63
63
  ),
64
64
  creditScore: z.number({ message: "Credit Score is required." }).positive({ message: "Credit Score is required." }),
65
- zipCode: z.number().positive({ message: "Zip Code is required." }),
65
+ zipCode: z.string().trim().min(1, { message: "Zip Code is required." }).regex(/^\d{5}$/, { message: "ZIP code must be 5 digits." }),
66
66
  appraisedValue: z.number({ message: "Home Price is required." }).optional().refine(
67
67
  (val) => {
68
68
  if (loanPurpose === 2) {
@@ -390,10 +390,11 @@ const MortgageRateFilters = ({
390
390
  Input,
391
391
  {
392
392
  id: "zipCode",
393
- type: "number",
393
+ type: "text",
394
+ inputMode: "numeric",
394
395
  ...register("zipCode", {
395
396
  required: true,
396
- setValueAs: (value) => Number(value)
397
+ pattern: /^\d{5}$/
397
398
  }),
398
399
  label: "Zip Code",
399
400
  sizes: "medium",
@@ -401,7 +402,12 @@ const MortgageRateFilters = ({
401
402
  error: !!errors.zipCode,
402
403
  helperText: errors.zipCode?.message,
403
404
  variant: "tertiary",
404
- defaultValue: formData.zipCode
405
+ defaultValue: formData.zipCode,
406
+ maxLength: 5,
407
+ onInput: (e) => {
408
+ const target = e.target;
409
+ target.value = target.value.replace(/\D/g, "");
410
+ }
405
411
  }
406
412
  ) }),
407
413
  loanPurpose === 2 ? /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(
@@ -35,6 +35,7 @@ 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 "../Calculators/calculator.css.js";
39
40
  import "../Calculators/AnnualFeeCalculator/AnnualFeeCalculator.css.js";
40
41
  import "../Calculators/ApyCalculator/ApyCalculator.css.js";
@@ -43,7 +44,6 @@ import "../Calculators/AxosOneCalculator/BalanceAPYCalculator.css.js";
43
44
  import "../Calculators/BalanceAPYCalculator/BalanceAPYCalculator.css.js";
44
45
  import "../Input/PercentageInput.js";
45
46
  import { useForm, FormProvider } from "react-hook-form";
46
- import { z } from "zod";
47
47
  import "../Calculators/BuyDownCalculator/BuyDownCalculator.css.js";
48
48
  import { iconForm, headerContainer, headerForm, form, descriptionField, formWrapper, disclosureForm, actions, formContainer } from "./Forms.css.js";
49
49
  import { honeyPotSchema, isValidHoneyPot, HoneyPot } from "./HoneyPot/index.js";
@@ -26,12 +26,12 @@ 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";
31
32
  import { format } from "@react-input/number-format";
32
33
  import clsx from "clsx";
33
34
  import { useForm, FormProvider } from "react-hook-form";
34
- import * as z from "zod";
35
35
  import { BrokerConpensation, PrepaymentPenalty, NumberOfUnits, Occupancy, PropertyType, BankruptcySeasoning, BankruptcyType, HousingEventHistory, HousingEventType, MortgageLates24, MortgageLates12, Citizenship, DocType, RepresentativesFico, Purposes } from "../FormEnums.js";
36
36
  import { iconForm, headerContainer, headerForm, form, descriptionField, one_row, section_title, checkbox_group, formWrapper, disclosureForm, actions, formContainer } from "../Forms.css.js";
37
37
  import { honeyPotSchema, isValidHoneyPot, HoneyPot } from "../HoneyPot/index.js";
@@ -26,11 +26,11 @@ 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";
31
32
  import clsx from "clsx";
32
33
  import { useForm, FormProvider } from "react-hook-form";
33
- import * as z from "zod";
34
34
  import { iconForm, headerContainer, headerForm, form, descriptionField, formWrapper, disclosureForm, actions, formContainer } from "./Forms.css.js";
35
35
  import { honeyPotSchema, isValidHoneyPot, HoneyPot } from "./HoneyPot/index.js";
36
36
  import { SalesforceSchema } from "./SalesforceFieldsForm.js";
@@ -27,11 +27,11 @@ 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";
32
33
  import clsx from "clsx";
33
34
  import { useForm, FormProvider } from "react-hook-form";
34
- import * as z from "zod";
35
35
  import { iconForm, headerContainer, headerForm, form, descriptionField, fullRowForm, formWrapper, disclosureForm, actions, formContainer } from "./Forms.css.js";
36
36
  import { honeyPotSchema, isValidHoneyPot, HoneyPot } from "./HoneyPot/index.js";
37
37
  import { SalesforceSchema } from "./SalesforceFieldsForm.js";
@@ -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";
@@ -17,10 +17,10 @@ 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";
21
22
  import clsx from "clsx";
22
23
  import { useForm, FormProvider } from "react-hook-form";
23
- import { z } from "zod";
24
24
  import { form, form_row, descriptionField, formWrapper, actions, formContainer } from "./Forms.css.js";
25
25
  import { honeyPotSchema, isValidHoneyPot, HoneyPot } from "./HoneyPot/index.js";
26
26
  const VendorQuestionnaire = ({
@@ -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: () => "",
@@ -18,7 +18,6 @@ export declare const menuData: {
18
18
  "Summit Savings": string;
19
19
  "First Savings": string;
20
20
  };
21
- "Certificates of Deposits": string;
22
21
  Premier: {
23
22
  "Premier Home": string;
24
23
  "Private Client": string;
@@ -168,9 +168,6 @@ const menuData = {
168
168
  "{AXOSBANK}/personal/bank/savings-accounts/first-savings"
169
169
  )
170
170
  },
171
- "Certificates of Deposits": findMoreAxosDomains(
172
- "{AXOSBANK}/personal/bank/savings-accounts/certificates-of-deposit"
173
- ),
174
171
  Premier: {
175
172
  "Premier Home": findMoreAxosDomains("{AXOSBANK}/personal/bank/premier"),
176
173
  "Private Client": findMoreAxosDomains(
@@ -938,27 +938,6 @@ function SubNavBar() {
938
938
  ) })
939
939
  ] })
940
940
  ] }),
941
- /* @__PURE__ */ jsxs("div", { className: "flex_row", children: [
942
- /* @__PURE__ */ jsx(
943
- Image,
944
- {
945
- src: `https://images.axos.com/o9ov1v03uwqk/6HFMuiXSvCndJhrPrt4JYk/0a8b9411818a8116943487f946867fe7/nav-submenu-cds-icon.svg`,
946
- alt: "",
947
- width: 20,
948
- height: 20
949
- }
950
- ),
951
- /* @__PURE__ */ jsx("ul", { className: `${styles.ml_8} list_unstyled`, children: /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
952
- Link,
953
- {
954
- href: findMoreAxosDomains(
955
- "{AXOSBANK}/personal/bank/savings-accounts/certificates-of-deposit"
956
- ),
957
- role: "heading",
958
- children: "Certificates of Deposit"
959
- }
960
- ) }) })
961
- ] }),
962
941
  /* @__PURE__ */ jsxs("div", { className: "flex_row", children: [
963
942
  /* @__PURE__ */ jsx(
964
943
  Image,
@@ -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 = ({
@@ -1,68 +1,68 @@
1
- ._quote_spacer_168r9_1 {
2
- line-height: 1.35;
3
- margin-block: clamp(1.88rem, 1.99vw + 1.41rem, 3rem);
4
- margin-inline: auto;
5
- }
6
-
7
- ._author_168r9_13,
8
- ._quote_168r9_1 {
9
- color: #1f1f1f;
10
- }
11
-
12
- ._author_168r9_13 {
13
- text-align: right;
14
- margin-top: 18px;
15
- }
16
-
17
- ._author_168r9_13 cite {
18
- font-style: normal;
19
- }
20
-
21
- ._quote_spacer_168r9_1 .img_fluid {
22
- margin-right: 24px;
23
- transform: rotateY(180deg) scaleY(-1);
24
- }
25
-
26
- ._quote_spacer_168r9_1 .flex_row {
27
- align-items: flex-start;
28
- }
29
-
30
- ._quote_168r9_1 p {
31
- font-size: clamp(1.22rem, 0.92vw + 1rem, 1.74rem);
32
- font-style: italic;
33
- line-height: 1.2;
34
- }
35
-
36
- @media (max-width: 768px) {
37
- ._quote_spacer_168r9_1 .img_fluid {
38
- max-width: 30px;
39
- margin-right: 12px;
40
- }
41
- ._author_168r9_13 {
42
- margin-top: 14px;
43
- }
44
- ._quote_168r9_1 p {
45
- font-size: 18px;
46
- }
47
- ._author_168r9_13 cite {
48
- font-size: 14px;
49
- }
50
- }
51
-
52
- @media (max-width: 500px) {
53
- ._author_168r9_13 {
54
- margin-top: 12px;
55
- }
56
- }
57
-
58
- @media (min-width: 604px) {
59
- ._quote_spacer_168r9_1 {
60
- width: min(calc(100% - 2rem), 792px);
61
- }
62
- }
63
-
64
- @media (min-width: 1023px) {
65
- ._quote_168r9_1 p {
66
- font-weight: 700;
67
- }
68
- }
1
+ ._quote_spacer_53yiw_1 {
2
+ line-height: 1.35;
3
+ margin-block: clamp(1.88rem, 1.99vw + 1.41rem, 3rem);
4
+ margin-inline: auto;
5
+ }
6
+
7
+ ._author_53yiw_7,
8
+ ._quote_53yiw_1 {
9
+ color: #1f1f1f;
10
+ }
11
+
12
+ ._author_53yiw_7 {
13
+ text-align: right;
14
+ margin-top: 18px;
15
+ }
16
+
17
+ ._author_53yiw_7 cite {
18
+ font-style: normal;
19
+ }
20
+
21
+ ._quote_spacer_53yiw_1 .img_fluid {
22
+ margin-right: 24px;
23
+ transform: rotateY(180deg) scaleY(-1);
24
+ }
25
+
26
+ ._quote_spacer_53yiw_1 .flex_row {
27
+ align-items: flex-start;
28
+ }
29
+
30
+ ._quote_53yiw_1 p {
31
+ font-size: clamp(1.22rem, 0.92vw + 1rem, 1.74rem);
32
+ font-style: italic;
33
+ line-height: 1.2;
34
+ }
35
+
36
+ @media (max-width: 768px) {
37
+ ._quote_spacer_53yiw_1 .img_fluid {
38
+ max-width: 30px;
39
+ margin-right: 12px;
40
+ }
41
+ ._author_53yiw_7 {
42
+ margin-top: 14px;
43
+ }
44
+ ._quote_53yiw_1 p {
45
+ font-size: 18px;
46
+ }
47
+ ._author_53yiw_7 cite {
48
+ font-size: 14px;
49
+ }
50
+ }
51
+
52
+ @media (max-width: 500px) {
53
+ ._author_53yiw_7 {
54
+ margin-top: 12px;
55
+ }
56
+ }
57
+
58
+ @media (min-width: 604px) {
59
+ ._quote_spacer_53yiw_1 {
60
+ width: min(calc(100% - 2rem), 792px);
61
+ }
62
+ }
63
+
64
+ @media (min-width: 1023px) {
65
+ ._quote_53yiw_1 p {
66
+ font-weight: 700;
67
+ }
68
+ }
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,
@@ -502,6 +505,8 @@ export {
502
505
  containerIconBillboard,
503
506
  content,
504
507
  copy,
508
+ createCachedEmailValidator,
509
+ createCachedNMLSValidator,
505
510
  description,
506
511
  descriptionField,
507
512
  details,
@@ -782,6 +787,8 @@ export {
782
787
  ul,
783
788
  up_to,
784
789
  url_row,
790
+ useCachedEmailValidator,
791
+ useCachedNMLSValidator,
785
792
  useGlobalContext,
786
793
  useMessages,
787
794
  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>;
@@ -0,0 +1,34 @@
1
+ function createCachedNMLSValidator(validateNMLS) {
2
+ const nmlsValidationCache = /* @__PURE__ */ new Map();
3
+ const validatingNMLS = /* @__PURE__ */ new Set();
4
+ return async (val) => {
5
+ if (!val || val.trim().length === 0 || val.trim().length < 4) {
6
+ return true;
7
+ }
8
+ if (nmlsValidationCache.has(val)) {
9
+ return nmlsValidationCache.get(val) ?? false;
10
+ }
11
+ if (validatingNMLS.has(val)) {
12
+ await new Promise((resolve) => setTimeout(resolve, 100));
13
+ if (nmlsValidationCache.has(val)) {
14
+ return nmlsValidationCache.get(val) ?? false;
15
+ }
16
+ return true;
17
+ }
18
+ validatingNMLS.add(val);
19
+ try {
20
+ const res = await validateNMLS(val);
21
+ const isValid = Boolean(res?.body?.data?.records?.length > 0);
22
+ nmlsValidationCache.set(val, isValid);
23
+ return isValid;
24
+ } catch (error) {
25
+ nmlsValidationCache.set(val, false);
26
+ return false;
27
+ } finally {
28
+ validatingNMLS.delete(val);
29
+ }
30
+ };
31
+ }
32
+ export {
33
+ createCachedNMLSValidator
34
+ };
@@ -0,0 +1,2 @@
1
+ export declare function useCachedEmailValidator(validateEmail: (email: string) => Promise<boolean>): (val: string) => Promise<boolean>;
2
+ export declare function useCachedNMLSValidator(validateNMLS: (nmls_id: string) => Promise<any>): (val: string) => Promise<boolean>;
@@ -0,0 +1,22 @@
1
+ "use client";
2
+ import { useRef } from "react";
3
+ import { createCachedEmailValidator } from "./emailValidation.js";
4
+ import { createCachedNMLSValidator } from "./nmlsValidation.js";
5
+ function useCachedEmailValidator(validateEmail) {
6
+ const validatorRef = useRef();
7
+ if (!validatorRef.current) {
8
+ validatorRef.current = createCachedEmailValidator(validateEmail);
9
+ }
10
+ return validatorRef.current;
11
+ }
12
+ function useCachedNMLSValidator(validateNMLS) {
13
+ const validatorRef = useRef();
14
+ if (!validatorRef.current) {
15
+ validatorRef.current = createCachedNMLSValidator(validateNMLS);
16
+ }
17
+ return validatorRef.current;
18
+ }
19
+ export {
20
+ useCachedEmailValidator,
21
+ useCachedNMLSValidator
22
+ };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@axos-web-dev/shared-components",
3
3
  "description": "Axos shared components library for web.",
4
- "version": "1.0.77-patch.50",
4
+ "version": "1.0.77-patch.51",
5
5
  "type": "module",
6
6
  "module": "dist/main.js",
7
7
  "types": "dist/main.d.ts",