@axos-web-dev/shared-components 2.0.0-dev.rateWatch → 2.0.0-dev.scroll-fix

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.
@@ -74,8 +74,8 @@ import "../Carousel/index.js";
74
74
  /* empty css */
75
75
  import "../Chatbot/store/chat.js";
76
76
  import "../Chatbot/Chatbot.js";
77
- import "../Chatbot/Chatbot.css.ts.vanilla.css.js";
78
77
  import "../LoadingIndicator/LoadingIndicator.css.js";
78
+ import "../Chatbot/Chatbot.css.ts.vanilla.css.js";
79
79
  /* empty css */
80
80
  import "../Chatbot/store/messages.js";
81
81
  import { Hyperlink } from "../Hyperlink/index.js";
@@ -54,9 +54,9 @@ import "../Carousel/index.js";
54
54
  /* empty css */
55
55
  import "../Chatbot/store/chat.js";
56
56
  import "../Chatbot/Chatbot.js";
57
- import "../Chatbot/Chatbot.css.ts.vanilla.css.js";
58
57
  import "../LoadingIndicator/LoadingIndicator.css.js";
59
58
  import "react-use";
59
+ import "../Chatbot/Chatbot.css.ts.vanilla.css.js";
60
60
  /* empty css */
61
61
  import "../Chatbot/store/messages.js";
62
62
  /* empty css */
@@ -3,6 +3,7 @@ import '../assets/Chatbot/ChatWindow.css';import '../assets/Typography/Typograph
3
3
  /* empty css */
4
4
  /* empty css */
5
5
  /* empty css */
6
+ import "./Chatbot.css.ts.vanilla.css.js";
6
7
  /* empty css */
7
8
  var windowStyle = "_13n1jqk1";
8
9
  var windowExpandedStyle = "_13n1jqk2";
@@ -1,4 +1,3 @@
1
- import "./Chatbot.css.ts.vanilla.css.js";
2
1
  var chatbotAXB = "_1hpv6vm0";
3
2
  var chatbotUFB = "_1hpv6vm1";
4
3
  export {
@@ -11,10 +11,22 @@ export declare const Purposes: {
11
11
  value: string;
12
12
  text: string;
13
13
  }[];
14
+ export declare const LoanPurposes: {
15
+ value: string;
16
+ text: string;
17
+ }[];
18
+ export declare const LoanTypeDetails: {
19
+ value: string;
20
+ text: string;
21
+ }[];
14
22
  export declare const RepresentativesFico: {
15
23
  value: string;
16
24
  text: string;
17
25
  }[];
26
+ export declare const CreditScore: {
27
+ value: string;
28
+ text: string;
29
+ }[];
18
30
  export declare const DocType: {
19
31
  value: string;
20
32
  text: string;
@@ -51,6 +63,10 @@ export declare const PropertyType: {
51
63
  value: string;
52
64
  text: string;
53
65
  }[];
66
+ export declare const PropertyIntendedUse: {
67
+ value: string;
68
+ text: string;
69
+ }[];
54
70
  export declare const Occupancy: {
55
71
  value: string;
56
72
  text: string;
@@ -50,6 +50,14 @@ const Purposes = [
50
50
  { value: "RefiCashout", text: "Refi Cashout" },
51
51
  { value: "RefiRateTermLimitedCO", text: "Refi Rate-Term/Limited C.O." }
52
52
  ];
53
+ const LoanPurposes = [
54
+ { value: "Purchase", text: "Purchase" },
55
+ { value: "Refinance", text: "Refinance" }
56
+ ];
57
+ const LoanTypeDetails = [
58
+ { value: "DSCR", text: "DSCR" },
59
+ { value: "Bank Statement Loan", text: "Bank Statement Loan" }
60
+ ];
53
61
  const RepresentativesFico = [
54
62
  { value: "780", text: "780+" },
55
63
  { value: "760", text: "779 - 760" },
@@ -62,6 +70,16 @@ const RepresentativesFico = [
62
70
  { value: "620", text: "639 - 620" },
63
71
  { value: "600", text: "Below 620" }
64
72
  ];
73
+ const CreditScore = [
74
+ { value: "740+", text: "740+" },
75
+ { value: "720", text: "739 - 720" },
76
+ { value: "700", text: "719 - 700" },
77
+ { value: "680", text: "699 - 680" },
78
+ { value: "660", text: "679 - 660" },
79
+ { value: "640", text: "659 - 640" },
80
+ { value: "620", text: "639 - 620" },
81
+ { value: "Below 620 ", text: "Below 620" }
82
+ ];
65
83
  const DocType = [
66
84
  { value: "FullDoc", text: "Full Doc" },
67
85
  // { value: "AssetDepletion", text: "Asset Depletion" },
@@ -133,6 +151,11 @@ const PropertyType = [
133
151
  { value: "Coop", text: "Co-op" },
134
152
  { value: "Condotel", text: "Condotel" }
135
153
  ];
154
+ const PropertyIntendedUse = [
155
+ { value: "Primary Residence", text: "Primary Residence" },
156
+ { value: "Second / Vacation Home", text: "Vacation Home" },
157
+ { value: "Investment", text: "Investment" }
158
+ ];
136
159
  const Occupancy = [
137
160
  { value: "PrimaryResidence", text: "Principal Residence" },
138
161
  { value: "SecondHome", text: "Second Home" },
@@ -456,19 +479,23 @@ export {
456
479
  BuydownRate,
457
480
  BuydownTerm,
458
481
  Citizenship,
482
+ CreditScore,
459
483
  CurrentAssets,
460
484
  DocType,
461
485
  Fico,
462
486
  HousingEventHistory,
463
487
  HousingEventType,
464
488
  LeadType,
489
+ LoanPurposes,
465
490
  LoanRates,
491
+ LoanTypeDetails,
466
492
  MortgageLates12,
467
493
  MortgageLates24,
468
494
  NumberOfUnits,
469
495
  Occupancy,
470
496
  PrepaymentPenalty,
471
497
  Program,
498
+ PropertyIntendedUse,
472
499
  PropertyType,
473
500
  PurposeOfLoan,
474
501
  Purposes,
@@ -22,7 +22,7 @@ import clsx from "clsx";
22
22
  import "../../Accordion/Accordion.js";
23
23
  import "../../Accordion/Accordion.css.js";
24
24
  import "../../AlertBanner/AlertBanner.css.js";
25
- import { useState, useEffect } from "react";
25
+ import { useState, useRef, useEffect, useLayoutEffect } from "react";
26
26
  import "../../Article/Article.css.js";
27
27
  import "../../ArticlesSet/ArticlesSet.css.js";
28
28
  import "../../Calculators/calculator.css.js";
@@ -138,6 +138,7 @@ import "../../StepItemSet/StepItemSet.css.js";
138
138
  /* empty css */
139
139
  /* empty css */
140
140
  import { honeyPotSchema, isValidHoneyPot } from "../HoneyPot/honeyPotValidation.js";
141
+ const useIsomorphicLayoutEffect = typeof window !== "undefined" ? useLayoutEffect : useEffect;
141
142
  const MortgageRate = ({
142
143
  icon = false,
143
144
  children,
@@ -163,6 +164,8 @@ const MortgageRate = ({
163
164
  const [_downPayment, setDownPayment] = useState(0);
164
165
  const [isTypingDownPayment, setIsTypingDownPayment] = useState(false);
165
166
  const [salesPriceVal, setSalesPriceVal] = useState(0);
167
+ const containerRef = useRef(null);
168
+ const restoreScrollOnNextRender = useRef(false);
166
169
  const cachedEmailValidator = useCachedEmailValidator(validateEmail);
167
170
  const schema = z.object({
168
171
  firstName: z.string({ message: "First Name is required." }).regex(/^[A-Za-z][^0-9_!¡?÷?¿/\\+=@#$%ˆ&*,.^(){}|~<>;:[\]]{1,}$/g, {
@@ -299,6 +302,14 @@ const MortgageRate = ({
299
302
  methods.setValue("downPayment", calculatedDownPayment);
300
303
  }
301
304
  }, [salesPrice, downPaymentPercentage]);
305
+ useIsomorphicLayoutEffect(() => {
306
+ if (!restoreScrollOnNextRender.current) return;
307
+ restoreScrollOnNextRender.current = false;
308
+ containerRef.current?.scrollIntoView({
309
+ block: "start",
310
+ behavior: "smooth"
311
+ });
312
+ }, [hideModal, showingTables]);
302
313
  const submitForm = async (data) => {
303
314
  const processData = {
304
315
  ...data
@@ -307,6 +318,7 @@ const MortgageRate = ({
307
318
  if (setRateWatchSubmitted) {
308
319
  setRateWatchSubmitted(false);
309
320
  }
321
+ restoreScrollOnNextRender.current = true;
310
322
  setHideModal(true);
311
323
  };
312
324
  const variant = getVariant(fullVariant);
@@ -370,7 +382,7 @@ const MortgageRate = ({
370
382
  }
371
383
  return value;
372
384
  };
373
- return /* @__PURE__ */ jsxs(Fragment, { children: [
385
+ return /* @__PURE__ */ jsxs("div", { ref: containerRef, children: [
374
386
  hideModal && !showingTables && /* @__PURE__ */ jsx(
375
387
  "section",
376
388
  {
@@ -446,9 +458,9 @@ const MortgageRate = ({
446
458
  {
447
459
  className: form,
448
460
  onSubmit: async (e) => {
461
+ e.preventDefault();
449
462
  onValidate && onValidate(e);
450
463
  await handleSubmit(submitForm)(e);
451
- e.preventDefault();
452
464
  },
453
465
  children: [
454
466
  /* @__PURE__ */ jsxs("div", { className: clsx(formWrapper({ variant })), children: [
@@ -798,12 +810,15 @@ const MortgageRate = ({
798
810
  {
799
811
  id,
800
812
  className: `${chevron({ variant })} ${!isValid ? na_cursor : ""}`,
801
- onClick: isValid ? handleSubmit(async (data) => {
802
- await onSubmit(data);
803
- toggleModal();
804
- setHideModal(false);
805
- }) : (e) => {
813
+ onClick: (e) => {
806
814
  e.preventDefault();
815
+ if (!isValid) return;
816
+ handleSubmit(async (data) => {
817
+ await onSubmit(data);
818
+ restoreScrollOnNextRender.current = true;
819
+ toggleModal();
820
+ setHideModal(false);
821
+ })(e);
807
822
  },
808
823
  children: "Sign Up For Ratewatch"
809
824
  }
@@ -1,6 +1,6 @@
1
1
  export type RateWatchInputs = {
2
2
  updateType: string;
3
- updateCadence: string;
3
+ updateCadence?: string;
4
4
  loanTerms?: string;
5
5
  hasSmsConsent: boolean;
6
6
  tR1DesiredRate?: string;
@@ -167,7 +167,7 @@ const RateWatchForm = ({
167
167
  );
168
168
  const schema = z.object({
169
169
  updateType: z.string().min(1, { message: "Update type is required." }),
170
- updateCadence: z.string().refine((val) => !(updateType === "Frequency" && !val), {
170
+ updateCadence: z.string().optional().refine((val) => !(updateType === "Frequency" && !val), {
171
171
  message: "Frequency is required."
172
172
  }),
173
173
  loanTerms: z.string().optional().refine((val) => !(updateType === "Frequency" && !val), {
@@ -176,11 +176,13 @@ const RateWatchForm = ({
176
176
  hasSmsConsent: z.boolean().refine((val) => val === true, {
177
177
  message: "You must agree to receive SMS messages."
178
178
  }),
179
- tR1DesiredRate: z.string().optional().refine(
179
+ tR1DesiredRate: z.string().optional().refine((val) => updateType === "Target Rate" ? !!val : true, {
180
+ message: "Desired Rate is required."
181
+ }).refine(
180
182
  (val) => {
181
183
  if (val && updateType === "Target Rate") {
182
184
  const numericValue = +val;
183
- return !val || numericValue >= 2 && numericValue <= 10;
185
+ return numericValue >= 2 && numericValue <= 10;
184
186
  }
185
187
  return true;
186
188
  },
@@ -272,6 +274,7 @@ const RateWatchForm = ({
272
274
  const handleTypeChange = (event) => {
273
275
  const value = event.target.value;
274
276
  setUpdateType(value);
277
+ methods.setValue("updateType", value, { shouldValidate: true });
275
278
  };
276
279
  const handleDesiredRateChange = (fieldName) => (event) => {
277
280
  const sanitizedValue = sanitizeDesiredRate(event.target.value);
@@ -286,7 +289,7 @@ const RateWatchForm = ({
286
289
  handleSubmit(submitForm)();
287
290
  };
288
291
  useEffect(() => {
289
- methods.reset();
292
+ methods.reset({ updateType });
290
293
  }, [updateType]);
291
294
  return /* @__PURE__ */ jsx("section", { className: "rate-watch-form", children: /* @__PURE__ */ jsx(FormProvider, { ...methods, children: /* @__PURE__ */ jsx(
292
295
  SuccesFormWrapper,
@@ -399,7 +402,7 @@ const RateWatchForm = ({
399
402
  min: "2",
400
403
  max: "10",
401
404
  placeholder: "Desired Rate",
402
- error: isDesiredRateOutOfRange(watch("tR1DesiredRate")),
405
+ error: !!errors.tR1DesiredRate,
403
406
  helperText: isDesiredRateOutOfRange(watch("tR1DesiredRate")) ? "Desired Rate must be between 2 and 10." : errors.tR1DesiredRate?.message
404
407
  }
405
408
  )
@@ -551,8 +554,7 @@ const RateWatchForm = ({
551
554
  },
552
555
  children: [
553
556
  /* @__PURE__ */ jsx("sup", { children: "*" }),
554
- " ",
555
- "Please enter a desired rate between 2% and 10%"
557
+ " Please enter a desired rate between 2% and 10%"
556
558
  ]
557
559
  }
558
560
  )
@@ -0,0 +1,16 @@
1
+ import { FormProps } from './FormProps';
2
+
3
+ export type NonQMLoansInputs = {
4
+ first_name: string;
5
+ last_name: string;
6
+ phone: string;
7
+ email: string;
8
+ Loan_Amount_c: number;
9
+ Loan_c: string;
10
+ Loan_Type_c: string;
11
+ Property_Value_c: number;
12
+ Property_Type_c: string;
13
+ zip: string;
14
+ Credit_Score_OB_c: string;
15
+ };
16
+ export declare const NonQMLoans: ({ icon, children, onSubmit, disclosure, variant: fullVariant, headline, description, callToAction, validateEmail, onValidate, id, }: FormProps) => import("react").JSX.Element;
@@ -0,0 +1,464 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import z__default from "zod";
4
+ import { associatedEmail } from "../utils/EverestValidity.js";
5
+ import { getVariant } from "../utils/getVariant.js";
6
+ import { useCachedEmailValidator } from "../utils/useCachedValidators.js";
7
+ import { CreditScore, PropertyIntendedUse, LoanTypeDetails, LoanPurposes } from "./FormEnums.js";
8
+ import { useForm, FormProvider } from "react-hook-form";
9
+ import { zodResolver } from "@hookform/resolvers/zod";
10
+ import { HoneyPot } from "./HoneyPot/index.js";
11
+ import { SalesforceSchema } from "./SalesforceFieldsForm.js";
12
+ import clsx from "clsx";
13
+ import { iconForm, headerContainer, headerForm, form, descriptionField, formWrapper, disclosureForm, actions, formContainer } from "./Forms.css.js";
14
+ import "../icons/ArrowIcon/ArrowIcon.css.js";
15
+ import SvgAxosX from "../icons/AxosX/index.js";
16
+ import SvgComponent from "../icons/AxosX/Blue.js";
17
+ import "../icons/CheckIcon/CheckIcon.css.js";
18
+ import '../assets/VideoWrapper/VideoWrapper.css';import '../assets/TopicalNavSet/TopicalNavSet.css';import '../assets/TopicalNavItem/TopicalNavItem.css';import '../assets/Topic/Topic.css';import '../assets/TextBlock/TextBlock.css';import '../assets/SocialMediaBar/SocialMediaBar.css';import '../assets/SecondaryFooter/SecondaryFooter.css';import '../assets/Pagination/Pagination.css';import '../assets/PageNavSet/PageNavigationSet.css';import '../assets/NavigationMenu/LaVictoire/NavBar2.css';import '../assets/NavigationMenu/AxosALTS/NavBar2.css';import '../assets/NavigationMenu/AxosClearing/NavBar2.css';import '../assets/NavigationMenu/AxosBank/SubNavbar.css';import '../assets/NavigationMenu/ServerNavigation/NavigationBar.css';import '../assets/NavigationMenu/AxosAdvisorServices/SubNavbar.css';import '../assets/NavigationMenu/AxosAdvisorServices/NavBar2.css';import '../assets/NavigationMenu/AxosAdvisor/SubNavbar.css';import '../assets/NavigationMenu/AxosAdvisor/NavBar2.css';import '../assets/NavigationMenu/AxosBank/NavBar2.css';import '../assets/Insight/Featured/Header.css';import '../assets/Insight/Featured/CategorySelector.css';import '../assets/Insight/Featured/Featured.css';import '../assets/ImageLink/ImageLink.css';import '../assets/VideoTile/VideoTile.css';import '../assets/HelpArticle/HelpArticle.css';import '../assets/FooterSiteMap/AxosBank/FooterSiteMap.css';import '../assets/FooterDisclosure/LVF/LaVictorieFooter.css';import '../assets/DownloadTile/DownloadTile.css';import '../assets/CollectInformationAlert/CollectInformationAlert.css';import '../assets/Chatbot/ChatWindow.css';import '../assets/Chatbot/Bubble.css';import '../assets/Chatbot/AnimatedGradientBorder.css';import '../assets/CallToActionBar/CallToActionBar.css';import '../assets/Insight/Insight.css';import '../assets/AwardsItem/AwardsItem.css';import '../assets/AwardsBanner/AwardsBanner.css';import '../assets/Auth/SignIn.css';import '../assets/Auth/ErrorAlert.css';import '../assets/Calculators/MarginTradingCalculator/MarginTradingCalculator.css';import '../assets/Forms/QuickPricer/UserInformation.css';import '../assets/Forms/QuickPricer/QuickPricerResults.css';import '../assets/Modal/Modal.css';import '../assets/ImageToast/ImageToast.css';import '../assets/BulletItem/BulletItem.css';import '../assets/Typography/Typography.css';import '../assets/icons/FollowIcon/FollowIcon.css';import '../assets/icons/DownloadIcon/DownloadIcon.css';import '../assets/themes/victorie.css';import '../assets/themes/ufb.css';import '../assets/themes/premier.css';import '../assets/themes/axos.css';/* empty css */
19
+ /* empty css */
20
+ /* empty css */
21
+ /* empty css */
22
+ /* empty css */
23
+ /* empty css */
24
+ import "../Input/Checkbox.js";
25
+ import { CurrencyInput } from "../Input/CurrencyInput.js";
26
+ import { Dropdown } from "../Input/Dropdown.js";
27
+ import "../Input/Dropdown.css.js";
28
+ import { Input } from "../Input/Input.js";
29
+ import "../Input/Input.css.js";
30
+ import "../Input/InputAmount.js";
31
+ import { InputPhone } from "../Input/InputPhone.js";
32
+ import "../Input/InputTextArea.js";
33
+ import "../Input/DownPaymentInput.js";
34
+ import "../Input/RadioButton.js";
35
+ import "../Accordion/Accordion.js";
36
+ import "../Accordion/Accordion.css.js";
37
+ import "react";
38
+ import "../Chevron/Chevron.css.js";
39
+ import "../AlertBanner/AlertBanner.css.js";
40
+ import "../Article/Article.css.js";
41
+ import { Button } from "../Button/Button.js";
42
+ import "../Button/Button.css.js";
43
+ import "react-use";
44
+ import "../ArticlesSet/ArticlesSet.css.js";
45
+ import "../IconBillboard/IconBillboard.css.js";
46
+ import "../Calculators/calculator.css.js";
47
+ import "../Calculators/AnnualFeeCalculator/AnnualFeeCalculator.css.js";
48
+ import "../Modal/contextApi/store.js";
49
+ import "next/image.js";
50
+ import "../Calculators/ApyCalculator/ApyCalculator.css.js";
51
+ import "../Calculators/ApyCalculatorUserTest/ApyCalculatorUserTest.css.js";
52
+ import "../HeroBanner/LargeBanner.css.js";
53
+ import "../HeroBanner/HeroBanner.css.js";
54
+ import "../HeroBanner/SelectionBanner.css.js";
55
+ /* empty css */
56
+ /* empty css */
57
+ /* empty css */
58
+ import "../SetContainer/SetContainer.css.js";
59
+ import "../Table/Table.css.js";
60
+ import "../Calculators/AxosOneCalculator/BalanceAPYCalculator.css.js";
61
+ import "../Calculators/BalanceAPYCalculator/BalanceAPYCalculator.css.js";
62
+ import "../Input/PercentageInput.js";
63
+ import "../Calculators/BuyDownCalculator/BuyDownCalculator.css.js";
64
+ import "../Input/RadioButton.css.js";
65
+ import "../Input/Checkbox.css.js";
66
+ import "../LoadingIndicator/LoadingIndicator.css.js";
67
+ /* empty css */
68
+ import "../Interstitial/Interstitial-variants.css.js";
69
+ import "../Inputs/Input.css.js";
70
+ /* empty css */
71
+ import "../Hyperlink/Hyperlink.css.js";
72
+ /* empty css */
73
+ import "iframe-resizer";
74
+ /* empty css */
75
+ import "../Calculators/MonthlyPaymentCalculator/MonthlyPaymentCalculator.css.js";
76
+ import "../Calculators/MonthlyPaymentLVFCalculator/MonthlyPaymentCalculator.css.js";
77
+ import "../Calculators/SummitApyCalculator/BalanceAPYCalculator.css.js";
78
+ /* empty css */
79
+ import "react-dom";
80
+ /* empty css */
81
+ import "../Auth/SignInPassword.js";
82
+ /* empty css */
83
+ /* empty css */
84
+ /* empty css */
85
+ /* empty css */
86
+ import "../Carousel/index.js";
87
+ /* empty css */
88
+ /* empty css */
89
+ import "../Chatbot/store/chat.js";
90
+ import "../Chatbot/Chatbot.js";
91
+ import "../Chatbot/Chatbot.css.ts.vanilla.css.js";
92
+ /* empty css */
93
+ import "../Chatbot/store/messages.js";
94
+ /* empty css */
95
+ import "../Comparison/Comparison.css.js";
96
+ import "../Tab/Tab.css.js";
97
+ import "../icons/Star/Star.css.js";
98
+ import "../ContentBanner/ContentBanner.css.js";
99
+ /* empty css */
100
+ import "../ExecutiveBio/ExecutiveBio.css.js";
101
+ import "../FaqAccordion/index.js";
102
+ import "../FooterDisclosure/FooterDisclosure.css.js";
103
+ /* empty css */
104
+ /* empty css */
105
+ /* empty css */
106
+ import "../ImageBillboard/ImageBillboard.css.js";
107
+ import "next/script.js";
108
+ /* empty css */
109
+ /* empty css */
110
+ /* empty css */
111
+ /* empty css */
112
+ /* empty css */
113
+ import "../LandingPageHeader/LandingPageHeader.css.js";
114
+ import "next/link.js";
115
+ /* empty css */
116
+ /* empty css */
117
+ import "next/navigation.js";
118
+ /* empty css */
119
+ /* empty css */
120
+ /* empty css */
121
+ /* empty css */
122
+ import "../NavigationMenu/ServerNavigation/Menu.js";
123
+ import "../NavigationMenu/ServerNavigation/SubNavbar.css.js";
124
+ /* empty css */
125
+ /* empty css */
126
+ /* empty css */
127
+ /* empty css */
128
+ import "../PageNavItem/PageNavItem.css.js";
129
+ import "react-slick";
130
+ /* empty css */
131
+ /* empty css */
132
+ /* empty css */
133
+ /* empty css */
134
+ import "../StepItem/StepItem.css.js";
135
+ import "../StepItemSet/StepItemSet.css.js";
136
+ /* empty css */
137
+ /* empty css */
138
+ /* empty css */
139
+ /* empty css */
140
+ /* empty css */
141
+ import { honeyPotSchema, isValidHoneyPot } from "./HoneyPot/honeyPotValidation.js";
142
+ const NonQMLoans = ({
143
+ icon = false,
144
+ children,
145
+ onSubmit = (values) => {
146
+ console.log(values);
147
+ },
148
+ disclosure,
149
+ variant: fullVariant = "primary",
150
+ headline,
151
+ description,
152
+ callToAction,
153
+ validateEmail,
154
+ onValidate,
155
+ id
156
+ }) => {
157
+ const cachedEmailValidator = useCachedEmailValidator(validateEmail);
158
+ const schema = z__default.object({
159
+ first_name: z__default.string().regex(/^[A-Za-z][^0-9_!¡?÷?¿/\\+=@#$%ˆ&*,.^(){}|~<>;:[\]]{1,}$/g).trim().min(1, { message: "First Name is required." }),
160
+ last_name: z__default.string().regex(/^[A-Za-z][^0-9_!¡?÷?¿/\\+=@#$%ˆ&*,.^(){}|~<>;:[\]]{1,}$/g).trim().min(1, { message: "Last Name is required." }),
161
+ phone: z__default.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) => {
162
+ const removeDashes = val.replace(/-/gi, "");
163
+ if (removeDashes.length !== 10) {
164
+ ctx.addIssue({
165
+ code: z__default.ZodIssueCode.custom,
166
+ message: "Phone must have at least 10 and no more than 10 characters."
167
+ });
168
+ return z__default.NEVER;
169
+ }
170
+ if (removeDashes.endsWith("00000") || removeDashes.startsWith("999") || removeDashes.length === 10 && /^[01]/.test(removeDashes)) {
171
+ ctx.addIssue({
172
+ code: z__default.ZodIssueCode.custom,
173
+ message: "Invalid phone number."
174
+ });
175
+ return z__default.NEVER;
176
+ }
177
+ return removeDashes;
178
+ }),
179
+ email: z__default.string().email({ message: "Email is required." }).refine(cachedEmailValidator, { message: "Invalid email address." }),
180
+ Loan__c: z__default.string().min(1, { message: "Purpose is required" }).refine((val) => LoanPurposes.map((item) => item.value).includes(val), {
181
+ message: "Loan Purpose is required"
182
+ }),
183
+ Loan_Type: z__default.string().min(1, { message: "Loan Type is required" }).refine(
184
+ (val) => LoanTypeDetails.map((item) => item.value).includes(val),
185
+ {
186
+ message: "Loan Type is required"
187
+ }
188
+ ),
189
+ Loan_Amount__c: z__default.string({
190
+ message: "Please provide a valid base loan amount"
191
+ }).min(1, "Base loan amount is required").transform((val) => {
192
+ const loan_amount = val.replace(/[$ ]/gi, "");
193
+ const new_loan_amount = loan_amount.replaceAll(",", "");
194
+ return parseInt(new_loan_amount);
195
+ }),
196
+ Property_Value__c: z__default.string({
197
+ message: "Please provide a valid property value"
198
+ }).min(1, "Property value is required").transform((val) => {
199
+ const property_value = val.replace(/[$ ]/gi, "");
200
+ const new_property_value = property_value.replaceAll(",", "");
201
+ return parseInt(new_property_value);
202
+ }),
203
+ Property_Intended_Use__c: z__default.string().min(1, { message: "Intended use is required" }).refine((val) => PropertyIntendedUse.map((item) => item.value).includes(val), {
204
+ message: "Intended use is required"
205
+ }),
206
+ zip: z__default.string().trim().min(1, { message: "Zip Code is required." }).regex(/^\d{5}$/, { message: "ZIP code must be 5 digits." }),
207
+ Credit_Score_OB__c: z__default.string().min(1, { message: "Credit Score is required" }).refine((val) => CreditScore.map((item) => item.value).includes(val), {
208
+ message: "Credit Score is required"
209
+ })
210
+ });
211
+ const gen_schema = schema.merge(SalesforceSchema).merge(honeyPotSchema).superRefine((data, ctx) => {
212
+ if (!isValidHoneyPot(data)) {
213
+ ctx.addIssue({
214
+ code: z__default.ZodIssueCode.custom,
215
+ message: "fields are not valid."
216
+ });
217
+ }
218
+ });
219
+ const methods = useForm({
220
+ resolver: zodResolver(gen_schema),
221
+ mode: "all"
222
+ });
223
+ const {
224
+ handleSubmit,
225
+ register,
226
+ formState: { errors, isValid, isSubmitting }
227
+ } = methods;
228
+ const submitForm = async (data) => {
229
+ await onSubmit(data);
230
+ };
231
+ const variant = getVariant(fullVariant);
232
+ return /* @__PURE__ */ jsx("section", { id, className: clsx(formContainer({ variant })), children: /* @__PURE__ */ jsx("div", { className: clsx("containment"), children: /* @__PURE__ */ jsxs(FormProvider, { ...methods, children: [
233
+ icon && /* @__PURE__ */ jsx("div", { className: clsx("text_center", iconForm), children: ["primary", "secondary"].includes(variant) ? /* @__PURE__ */ jsx(SvgComponent, {}) : /* @__PURE__ */ jsx(SvgAxosX, {}) }),
234
+ /* @__PURE__ */ jsxs("div", { className: `${headerContainer} text_center`, children: [
235
+ /* @__PURE__ */ jsx("h2", { className: clsx("header_2", headerForm({ variant })), children: headline }),
236
+ description && /* @__PURE__ */ jsx(
237
+ "div",
238
+ {
239
+ className: `${form} ${descriptionField({ variant })} text_center`,
240
+ children: description
241
+ }
242
+ )
243
+ ] }),
244
+ /* @__PURE__ */ jsxs(
245
+ "form",
246
+ {
247
+ className: form,
248
+ onSubmit: async (e) => {
249
+ onValidate && onValidate(e);
250
+ await handleSubmit(submitForm)(e);
251
+ e.preventDefault();
252
+ },
253
+ children: [
254
+ /* @__PURE__ */ jsxs("div", { className: clsx(formWrapper({ variant })), children: [
255
+ /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(
256
+ Input,
257
+ {
258
+ id: "first_name",
259
+ ...register("first_name", { required: true }),
260
+ label: "First Name",
261
+ sizes: "medium",
262
+ placeholder: "First Name",
263
+ required: true,
264
+ error: !!errors.first_name,
265
+ helperText: errors.first_name?.message,
266
+ variant
267
+ }
268
+ ) }),
269
+ /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(
270
+ Input,
271
+ {
272
+ id: "last_name",
273
+ ...register("last_name", { required: true }),
274
+ label: "Last Name",
275
+ sizes: "medium",
276
+ placeholder: "Last Name",
277
+ required: true,
278
+ error: !!errors.last_name,
279
+ helperText: errors.last_name?.message,
280
+ variant
281
+ }
282
+ ) }),
283
+ /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(
284
+ InputPhone,
285
+ {
286
+ id: "phone",
287
+ ...register("phone", { required: true, maxLength: 12 }),
288
+ label: "Phone number",
289
+ sizes: "medium",
290
+ placeholder: "Phone",
291
+ required: true,
292
+ error: !!errors.phone,
293
+ helperText: errors.phone?.message,
294
+ variant
295
+ }
296
+ ) }),
297
+ /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(
298
+ Input,
299
+ {
300
+ id: "email",
301
+ ...register("email", {
302
+ required: true,
303
+ validate: {
304
+ isValid: associatedEmail
305
+ }
306
+ }),
307
+ label: "Email",
308
+ sizes: "medium",
309
+ placeholder: "Email",
310
+ required: true,
311
+ error: !!errors.email,
312
+ helperText: errors.email?.message,
313
+ variant
314
+ }
315
+ ) }),
316
+ /* @__PURE__ */ jsxs(
317
+ Dropdown,
318
+ {
319
+ id: "Loan__c",
320
+ ...register("Loan__c", {
321
+ required: true
322
+ }),
323
+ label: "Loan purpose",
324
+ sizes: "medium",
325
+ required: true,
326
+ error: !!errors.Loan__c,
327
+ helperText: errors.Loan__c?.message,
328
+ variant,
329
+ defaultValue: "",
330
+ children: [
331
+ /* @__PURE__ */ jsx("option", { value: "", disabled: true, children: "Select option" }),
332
+ LoanPurposes.map((item) => /* @__PURE__ */ jsx("option", { value: item.value, children: item.text }, item.value))
333
+ ]
334
+ }
335
+ ),
336
+ /* @__PURE__ */ jsxs(
337
+ Dropdown,
338
+ {
339
+ id: "Loan_Type",
340
+ ...register("Loan_Type", {
341
+ required: true
342
+ }),
343
+ label: "Loan type",
344
+ sizes: "medium",
345
+ required: true,
346
+ error: !!errors.Loan_Type,
347
+ helperText: errors.Loan_Type?.message,
348
+ variant,
349
+ defaultValue: "",
350
+ children: [
351
+ /* @__PURE__ */ jsx("option", { value: "", disabled: true, children: "Select option" }),
352
+ LoanTypeDetails.map((item) => /* @__PURE__ */ jsx("option", { value: item.value, children: item.text }, item.value))
353
+ ]
354
+ }
355
+ ),
356
+ /* @__PURE__ */ jsx(
357
+ CurrencyInput,
358
+ {
359
+ id: "Loan_Amount__c",
360
+ ...register("Loan_Amount__c", {
361
+ required: true
362
+ }),
363
+ label: "Estimated loan amount",
364
+ sizes: "medium",
365
+ required: true,
366
+ error: !!errors.Loan_Amount__c,
367
+ helperText: errors.Loan_Amount__c?.message,
368
+ variant,
369
+ maxfractiondigits: 0,
370
+ minfractiondigits: 0
371
+ }
372
+ ),
373
+ /* @__PURE__ */ jsx(
374
+ CurrencyInput,
375
+ {
376
+ id: "Property_Value__c",
377
+ ...register("Property_Value__c", {
378
+ required: true
379
+ }),
380
+ label: "Property value",
381
+ sizes: "medium",
382
+ required: true,
383
+ error: !!errors.Property_Value__c,
384
+ helperText: errors.Property_Value__c?.message,
385
+ variant,
386
+ maxfractiondigits: 0,
387
+ minfractiondigits: 0
388
+ }
389
+ ),
390
+ /* @__PURE__ */ jsxs(
391
+ Dropdown,
392
+ {
393
+ id: "Property_Intended_Use__c",
394
+ ...register("Property_Intended_Use__c", {
395
+ required: true
396
+ }),
397
+ label: "Property usage",
398
+ sizes: "medium",
399
+ required: true,
400
+ error: !!errors.Property_Intended_Use__c,
401
+ helperText: errors.Property_Intended_Use__c?.message,
402
+ variant,
403
+ defaultValue: "",
404
+ children: [
405
+ /* @__PURE__ */ jsx("option", { value: "", disabled: true, children: "Select option" }),
406
+ PropertyIntendedUse.map((item) => /* @__PURE__ */ jsx("option", { value: item.value, children: item.text }, item.value))
407
+ ]
408
+ }
409
+ ),
410
+ /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(
411
+ Input,
412
+ {
413
+ id: "zip",
414
+ ...register("zip", { required: true }),
415
+ label: "Zip code",
416
+ sizes: "medium",
417
+ required: true,
418
+ error: !!errors.zip,
419
+ helperText: errors.zip?.message,
420
+ variant
421
+ }
422
+ ) }),
423
+ /* @__PURE__ */ jsxs(
424
+ Dropdown,
425
+ {
426
+ id: "Credit_Score_OB__c",
427
+ ...register("Credit_Score_OB__c", {
428
+ required: true
429
+ }),
430
+ label: "Credit score",
431
+ sizes: "medium",
432
+ required: true,
433
+ error: !!errors.Credit_Score_OB__c,
434
+ helperText: errors.Credit_Score_OB__c?.message,
435
+ variant,
436
+ defaultValue: "",
437
+ children: [
438
+ /* @__PURE__ */ jsx("option", { value: "", disabled: true, children: "Select option" }),
439
+ CreditScore.map((item) => /* @__PURE__ */ jsx("option", { value: item.value, children: item.text }, item.value))
440
+ ]
441
+ }
442
+ ),
443
+ /* @__PURE__ */ jsx(HoneyPot, { register, variant })
444
+ ] }),
445
+ children,
446
+ /* @__PURE__ */ jsx("div", { className: disclosureForm({ variant }), children: disclosure }),
447
+ /* @__PURE__ */ jsx("div", { className: actions, children: /* @__PURE__ */ jsx(
448
+ Button,
449
+ {
450
+ color: getVariant(callToAction?.variant),
451
+ as: "button",
452
+ type: "submit",
453
+ disabled: !isValid || isSubmitting,
454
+ children: callToAction?.displayText
455
+ }
456
+ ) })
457
+ ]
458
+ }
459
+ )
460
+ ] }) }) }, id);
461
+ };
462
+ export {
463
+ NonQMLoans
464
+ };
@@ -69,9 +69,9 @@ import "../Carousel/index.js";
69
69
  /* empty css */
70
70
  import "../Chatbot/store/chat.js";
71
71
  import "../Chatbot/Chatbot.js";
72
- import "../Chatbot/Chatbot.css.ts.vanilla.css.js";
73
72
  import "../LoadingIndicator/LoadingIndicator.css.js";
74
73
  import "react-use";
74
+ import "../Chatbot/Chatbot.css.ts.vanilla.css.js";
75
75
  /* empty css */
76
76
  import "../Chatbot/store/messages.js";
77
77
  /* empty css */
@@ -39,3 +39,4 @@ export * from './SuccesForm';
39
39
  export * from './VendorQuestionnaire';
40
40
  export * from './WcplSurvey';
41
41
  export * from './BoatMooringLocation';
42
+ export * from './NonQMLoans';
@@ -45,6 +45,7 @@ import { SuccesFormWrapper } from "./SuccesForm.js";
45
45
  import { VendorQuestionnaire } from "./VendorQuestionnaire.js";
46
46
  import { WCPLSurvey } from "./WcplSurvey.js";
47
47
  import { BoatMooringLocation } from "./BoatMooringLocation.js";
48
+ import { NonQMLoans } from "./NonQMLoans.js";
48
49
  import { honeyPotFieldsSchema, honeyPotSchema, isValidHoneyPot } from "./HoneyPot/honeyPotValidation.js";
49
50
  export {
50
51
  ApplicationStart,
@@ -76,6 +77,7 @@ export {
76
77
  MortgageRate,
77
78
  MortgageRateFilters,
78
79
  MortgageWarehouseLending,
80
+ NonQMLoans,
79
81
  QuickPricer,
80
82
  RateWatchForm,
81
83
  SalesforceFieldsForm,
@@ -17,6 +17,7 @@ const DownPaymentInput = forwardRef(
17
17
  disabled,
18
18
  helperText: helper,
19
19
  error = false,
20
+ defaultValue,
20
21
  ...rest
21
22
  }, ref) => {
22
23
  const [downPayment, setDownPayment] = useState(0);
@@ -25,7 +25,7 @@ const mobileData = (menu, resolveUrl) => {
25
25
  return {
26
26
  id: last.id,
27
27
  label: last.label,
28
- url: last.url
28
+ url: resolveUrl(last.url)
29
29
  };
30
30
  })
31
31
  };
@@ -35,12 +35,12 @@ const mobileData = (menu, resolveUrl) => {
35
35
  return {
36
36
  id: bl_item.id,
37
37
  label: bl_item.label,
38
- url: bl_item.url,
38
+ url: resolveUrl(bl_item.url),
39
39
  items: bl_item.items?.map((subitem) => {
40
40
  return {
41
41
  id: subitem.id,
42
42
  label: subitem.label,
43
- url: subitem.url
43
+ url: resolveUrl(subitem.url)
44
44
  };
45
45
  }) ?? []
46
46
  };
package/dist/main.js CHANGED
@@ -108,6 +108,7 @@ import { SuccesFormWrapper } from "./Forms/SuccesForm.js";
108
108
  import { VendorQuestionnaire } from "./Forms/VendorQuestionnaire.js";
109
109
  import { WCPLSurvey } from "./Forms/WcplSurvey.js";
110
110
  import { BoatMooringLocation } from "./Forms/BoatMooringLocation.js";
111
+ import { NonQMLoans } from "./Forms/NonQMLoans.js";
111
112
  import { helpArticle_container, helpArticle_headline, helpArticle_p, insight_headline_2 } from "./HelpArticle/HelpArticle.css.js";
112
113
  import { HeroBanner } from "./HeroBanner/HeroBanner.js";
113
114
  import { headline_text, heroSupertag, hero_banner, hero_btns, hero_bullet_item, hero_content, hero_embedded_image, hero_img, hero_sub_bullets, hero_text, hero_wrapper, img_contents, logout, reversed, reversed_lg_image, xl } from "./HeroBanner/HeroBanner.css.js";
@@ -367,6 +368,7 @@ export {
367
368
  default33 as NavBarAXB,
368
369
  default34 as NavBarAXC,
369
370
  default37 as NavBarLVF,
371
+ NonQMLoans,
370
372
  PageNavItem,
371
373
  PageNavSet,
372
374
  Pagination,
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": "2.0.0-dev.rateWatch",
4
+ "version": "2.0.0-dev.scroll-fix",
5
5
  "type": "module",
6
6
  "main": "index.js",
7
7
  "module": "dist/main.js",