@axos-web-dev/shared-components 0.0.75 → 0.0.76
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AnnualFeeCalculator/AnnualFeeCalculator.css.d.ts +34 -0
- package/dist/AnnualFeeCalculator/AnnualFeeCalculator.css.js +34 -0
- package/dist/AnnualFeeCalculator/index.d.ts +10 -0
- package/dist/AnnualFeeCalculator/index.js +143 -0
- package/dist/ApyCalculator/ApyCalculator.css.d.ts +68 -3
- package/dist/ApyCalculator/ApyCalculator.css.js +29 -22
- package/dist/ApyCalculator/index.d.ts +7 -1
- package/dist/ApyCalculator/index.js +106 -87
- package/dist/Calculators/Calculator.d.ts +2 -0
- package/dist/Calculators/Calculator.js +74 -33
- package/dist/Carousel/index.js +5 -3
- package/dist/Chevron/index.js +6 -4
- package/dist/Comparison/Comparison.js +3 -1
- package/dist/Comparison/ComparisonSet.js +5 -3
- package/dist/FooterSiteMap/AxosBank/FooterSiteMap.js +6 -4
- package/dist/Forms/ContactUsAAS.js +5 -3
- package/dist/Forms/ContactUsBusiness.js +5 -3
- package/dist/Forms/EmailOnly.js +5 -3
- package/dist/Forms/SuccesForm.js +4 -2
- package/dist/Hyperlink/index.js +6 -4
- package/dist/ImageBillboard/ImageBillboard.css.d.ts +1 -0
- package/dist/ImageLink/ImageLink.js +4 -2
- package/dist/ImageLink/ImageLinkSet.js +3 -1
- package/dist/ImageLink/index.js +6 -4
- package/dist/Modal/Modal.js +5 -3
- package/dist/MonthlyPaymentCalculator/MonthlyPaymentCalculator.css.d.ts +27 -0
- package/dist/MonthlyPaymentCalculator/MonthlyPaymentCalculator.css.js +22 -0
- package/dist/MonthlyPaymentCalculator/index.d.ts +8 -0
- package/dist/MonthlyPaymentCalculator/index.js +212 -0
- package/dist/NavigationMenu/AxosBank/SubNavBar.js +7 -5
- package/dist/SetContainer/SetContainer.js +4 -2
- package/dist/assets/AnnualFeeCalculator/AnnualFeeCalculator.css +125 -0
- package/dist/assets/ApyCalculator/ApyCalculator.css +77 -98
- package/dist/assets/IconBillboard/IconBillboard.css +1 -0
- package/dist/assets/ImageBillboard/ImageBillboard.css +1 -0
- package/dist/assets/MonthlyPaymentCalculator/MonthlyPaymentCalculator.css +67 -0
- package/package.json +111 -111
|
@@ -23,16 +23,16 @@ import "../Accordion/Accordion.css.js";
|
|
|
23
23
|
import { getVariant } from "../utils/getVariant.js";
|
|
24
24
|
import "../Chevron/Chevron.css.js";
|
|
25
25
|
import "../AlertBanner/AlertBanner.css.js";
|
|
26
|
-
import { Button } from "../Button/Button.js";
|
|
27
26
|
import "../Button/Button.css.js";
|
|
28
27
|
import "react";
|
|
28
|
+
import "../ApyCalculator/ApyCalculator.css.js";
|
|
29
|
+
import { Button } from "../Button/Button.js";
|
|
29
30
|
import "react-use";
|
|
30
|
-
|
|
31
|
+
import "../IconBillboard/IconBillboard.css.js";
|
|
31
32
|
import "../Article/Article.css.js";
|
|
32
33
|
import "../ArticlesSet/ArticlesSet.css.js";
|
|
33
34
|
/* empty css */
|
|
34
35
|
/* empty css */
|
|
35
|
-
import "../IconBillboard/IconBillboard.css.js";
|
|
36
36
|
/* empty css */
|
|
37
37
|
import clsx from "clsx";
|
|
38
38
|
import { useForm, FormProvider } from "react-hook-form";
|
|
@@ -43,6 +43,8 @@ import "../LoadingIndicator/LoadingIndicator.css.js";
|
|
|
43
43
|
import "../Input/RadioButton.js";
|
|
44
44
|
import "iframe-resizer";
|
|
45
45
|
import "../Calculators/calculator.css.js";
|
|
46
|
+
import "../MonthlyPaymentCalculator/MonthlyPaymentCalculator.css.js";
|
|
47
|
+
import "../AnnualFeeCalculator/AnnualFeeCalculator.css.js";
|
|
46
48
|
/* empty css */
|
|
47
49
|
import "../Carousel/index.js";
|
|
48
50
|
/* empty css */
|
package/dist/Forms/EmailOnly.js
CHANGED
|
@@ -23,16 +23,16 @@ import "../Accordion/Accordion.css.js";
|
|
|
23
23
|
import { getVariant } from "../utils/getVariant.js";
|
|
24
24
|
import "../Chevron/Chevron.css.js";
|
|
25
25
|
import "../AlertBanner/AlertBanner.css.js";
|
|
26
|
-
import { Button } from "../Button/Button.js";
|
|
27
26
|
import "../Button/Button.css.js";
|
|
28
27
|
import "react";
|
|
28
|
+
import "../ApyCalculator/ApyCalculator.css.js";
|
|
29
|
+
import { Button } from "../Button/Button.js";
|
|
29
30
|
import "react-use";
|
|
30
|
-
|
|
31
|
+
import "../IconBillboard/IconBillboard.css.js";
|
|
31
32
|
import "../Article/Article.css.js";
|
|
32
33
|
import "../ArticlesSet/ArticlesSet.css.js";
|
|
33
34
|
/* empty css */
|
|
34
35
|
/* empty css */
|
|
35
|
-
import "../IconBillboard/IconBillboard.css.js";
|
|
36
36
|
/* empty css */
|
|
37
37
|
import { associatedEmail } from "../utils/EverestValidity.js";
|
|
38
38
|
import clsx from "clsx";
|
|
@@ -44,6 +44,8 @@ import "../LoadingIndicator/LoadingIndicator.css.js";
|
|
|
44
44
|
import "../Input/RadioButton.js";
|
|
45
45
|
import "iframe-resizer";
|
|
46
46
|
import "../Calculators/calculator.css.js";
|
|
47
|
+
import "../MonthlyPaymentCalculator/MonthlyPaymentCalculator.css.js";
|
|
48
|
+
import "../AnnualFeeCalculator/AnnualFeeCalculator.css.js";
|
|
47
49
|
/* empty css */
|
|
48
50
|
import "../Carousel/index.js";
|
|
49
51
|
/* empty css */
|
package/dist/Forms/SuccesForm.js
CHANGED
|
@@ -28,15 +28,17 @@ import "../Accordion/Accordion.js";
|
|
|
28
28
|
import "../Accordion/Accordion.css.js";
|
|
29
29
|
import "../Chevron/Chevron.css.js";
|
|
30
30
|
import "../AlertBanner/AlertBanner.css.js";
|
|
31
|
-
|
|
31
|
+
import "../ApyCalculator/ApyCalculator.css.js";
|
|
32
|
+
import "../IconBillboard/IconBillboard.css.js";
|
|
32
33
|
import "../Article/Article.css.js";
|
|
33
34
|
import "../ArticlesSet/ArticlesSet.css.js";
|
|
34
35
|
/* empty css */
|
|
35
36
|
/* empty css */
|
|
36
|
-
import "../IconBillboard/IconBillboard.css.js";
|
|
37
37
|
/* empty css */
|
|
38
38
|
import "iframe-resizer";
|
|
39
39
|
import "../Calculators/calculator.css.js";
|
|
40
|
+
import "../MonthlyPaymentCalculator/MonthlyPaymentCalculator.css.js";
|
|
41
|
+
import "../AnnualFeeCalculator/AnnualFeeCalculator.css.js";
|
|
40
42
|
/* empty css */
|
|
41
43
|
import "../Carousel/index.js";
|
|
42
44
|
/* empty css */
|
package/dist/Hyperlink/index.js
CHANGED
|
@@ -10,20 +10,20 @@ import "../icons/CheckIcon/CheckIcon.css.js";
|
|
|
10
10
|
/* empty css */
|
|
11
11
|
import "../Chevron/Chevron.css.js";
|
|
12
12
|
import "../AlertBanner/AlertBanner.css.js";
|
|
13
|
+
import "../Button/Button.css.js";
|
|
14
|
+
import "react";
|
|
15
|
+
import "../ApyCalculator/ApyCalculator.css.js";
|
|
13
16
|
import { useGlobalContext } from "../Modal/contextApi/store.js";
|
|
14
17
|
import { findMoreAxosDomains } from "../utils/allowedAxosDomains.js";
|
|
15
18
|
import { validateLink } from "../utils/validateExternalLinks.js";
|
|
16
19
|
import "clsx";
|
|
17
|
-
import "react";
|
|
18
|
-
import "../Button/Button.css.js";
|
|
19
20
|
import "react-use";
|
|
20
|
-
|
|
21
|
+
import "../IconBillboard/IconBillboard.css.js";
|
|
21
22
|
import "../Article/Article.css.js";
|
|
22
23
|
import "../ArticlesSet/ArticlesSet.css.js";
|
|
23
24
|
/* empty css */
|
|
24
25
|
/* empty css */
|
|
25
26
|
/* empty css */
|
|
26
|
-
import "../IconBillboard/IconBillboard.css.js";
|
|
27
27
|
/* empty css */
|
|
28
28
|
import "@hookform/resolvers/zod";
|
|
29
29
|
import "../Input/Checkbox.js";
|
|
@@ -41,6 +41,8 @@ import "../LoadingIndicator/LoadingIndicator.css.js";
|
|
|
41
41
|
import "../Input/RadioButton.js";
|
|
42
42
|
import "iframe-resizer";
|
|
43
43
|
import "../Calculators/calculator.css.js";
|
|
44
|
+
import "../MonthlyPaymentCalculator/MonthlyPaymentCalculator.css.js";
|
|
45
|
+
import "../AnnualFeeCalculator/AnnualFeeCalculator.css.js";
|
|
44
46
|
/* empty css */
|
|
45
47
|
import "../Carousel/index.js";
|
|
46
48
|
/* empty css */
|
|
@@ -3,6 +3,7 @@ export declare const billboard: import('@vanilla-extract/recipes').RuntimeFn<{
|
|
|
3
3
|
primary: {
|
|
4
4
|
background: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
5
5
|
color: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
6
|
+
border: "1px solid #D4D4D4";
|
|
6
7
|
};
|
|
7
8
|
secondary: {
|
|
8
9
|
background: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
@@ -14,13 +14,13 @@ import "../icons/CheckIcon/CheckIcon.css.js";
|
|
|
14
14
|
import "../Accordion/Accordion.js";
|
|
15
15
|
import "../Accordion/Accordion.css.js";
|
|
16
16
|
import "../AlertBanner/AlertBanner.css.js";
|
|
17
|
-
|
|
17
|
+
import "../ApyCalculator/ApyCalculator.css.js";
|
|
18
|
+
import "../IconBillboard/IconBillboard.css.js";
|
|
18
19
|
import "../Article/Article.css.js";
|
|
19
20
|
import "../ArticlesSet/ArticlesSet.css.js";
|
|
20
21
|
/* empty css */
|
|
21
22
|
/* empty css */
|
|
22
23
|
/* empty css */
|
|
23
|
-
import "../IconBillboard/IconBillboard.css.js";
|
|
24
24
|
/* empty css */
|
|
25
25
|
import "@hookform/resolvers/zod";
|
|
26
26
|
import "../Input/Checkbox.js";
|
|
@@ -38,6 +38,8 @@ import "../LoadingIndicator/LoadingIndicator.css.js";
|
|
|
38
38
|
import "../Input/RadioButton.js";
|
|
39
39
|
import "iframe-resizer";
|
|
40
40
|
import "../Calculators/calculator.css.js";
|
|
41
|
+
import "../MonthlyPaymentCalculator/MonthlyPaymentCalculator.css.js";
|
|
42
|
+
import "../AnnualFeeCalculator/AnnualFeeCalculator.css.js";
|
|
41
43
|
/* empty css */
|
|
42
44
|
import "../Carousel/index.js";
|
|
43
45
|
/* empty css */
|
|
@@ -20,7 +20,7 @@ import "../SetContainer/SetContainer.css.js";
|
|
|
20
20
|
import "../Accordion/Accordion.js";
|
|
21
21
|
import "../Accordion/Accordion.css.js";
|
|
22
22
|
import "../AlertBanner/AlertBanner.css.js";
|
|
23
|
-
|
|
23
|
+
import "../ApyCalculator/ApyCalculator.css.js";
|
|
24
24
|
import "../Article/Article.css.js";
|
|
25
25
|
import "../ArticlesSet/ArticlesSet.css.js";
|
|
26
26
|
/* empty css */
|
|
@@ -41,6 +41,8 @@ import "../LoadingIndicator/LoadingIndicator.css.js";
|
|
|
41
41
|
import "../Input/RadioButton.js";
|
|
42
42
|
import "iframe-resizer";
|
|
43
43
|
import "../Calculators/calculator.css.js";
|
|
44
|
+
import "../MonthlyPaymentCalculator/MonthlyPaymentCalculator.css.js";
|
|
45
|
+
import "../AnnualFeeCalculator/AnnualFeeCalculator.css.js";
|
|
44
46
|
/* empty css */
|
|
45
47
|
import "../Carousel/index.js";
|
|
46
48
|
/* empty css */
|
package/dist/ImageLink/index.js
CHANGED
|
@@ -9,18 +9,18 @@ import "../icons/CheckIcon/CheckIcon.css.js";
|
|
|
9
9
|
/* empty css */
|
|
10
10
|
import "../Chevron/Chevron.css.js";
|
|
11
11
|
import "../AlertBanner/AlertBanner.css.js";
|
|
12
|
+
import "../Button/Button.css.js";
|
|
13
|
+
import "react";
|
|
14
|
+
import "../ApyCalculator/ApyCalculator.css.js";
|
|
12
15
|
import "../Modal/contextApi/store.js";
|
|
13
16
|
import "clsx";
|
|
14
|
-
import "react";
|
|
15
|
-
import "../Button/Button.css.js";
|
|
16
17
|
import "react-use";
|
|
17
|
-
|
|
18
|
+
import "../IconBillboard/IconBillboard.css.js";
|
|
18
19
|
import "../Article/Article.css.js";
|
|
19
20
|
import "../ArticlesSet/ArticlesSet.css.js";
|
|
20
21
|
/* empty css */
|
|
21
22
|
/* empty css */
|
|
22
23
|
/* empty css */
|
|
23
|
-
import "../IconBillboard/IconBillboard.css.js";
|
|
24
24
|
/* empty css */
|
|
25
25
|
import "@hookform/resolvers/zod";
|
|
26
26
|
import "../Input/Checkbox.js";
|
|
@@ -38,6 +38,8 @@ import "../LoadingIndicator/LoadingIndicator.css.js";
|
|
|
38
38
|
import "../Input/RadioButton.js";
|
|
39
39
|
import "iframe-resizer";
|
|
40
40
|
import "../Calculators/calculator.css.js";
|
|
41
|
+
import "../MonthlyPaymentCalculator/MonthlyPaymentCalculator.css.js";
|
|
42
|
+
import "../AnnualFeeCalculator/AnnualFeeCalculator.css.js";
|
|
41
43
|
/* empty css */
|
|
42
44
|
import "../Carousel/index.js";
|
|
43
45
|
/* empty css */
|
package/dist/Modal/Modal.js
CHANGED
|
@@ -9,17 +9,17 @@ import "../icons/CheckIcon/CheckIcon.css.js";
|
|
|
9
9
|
/* empty css */
|
|
10
10
|
/* empty css */
|
|
11
11
|
import "../AlertBanner/AlertBanner.css.js";
|
|
12
|
-
import { Button } from "../Button/Button.js";
|
|
13
12
|
import "../Button/Button.css.js";
|
|
14
13
|
import "react";
|
|
14
|
+
import "../ApyCalculator/ApyCalculator.css.js";
|
|
15
|
+
import { Button } from "../Button/Button.js";
|
|
15
16
|
import "react-use";
|
|
16
|
-
|
|
17
|
+
import "../IconBillboard/IconBillboard.css.js";
|
|
17
18
|
import "../Article/Article.css.js";
|
|
18
19
|
import "../ArticlesSet/ArticlesSet.css.js";
|
|
19
20
|
/* empty css */
|
|
20
21
|
/* empty css */
|
|
21
22
|
/* empty css */
|
|
22
|
-
import "../IconBillboard/IconBillboard.css.js";
|
|
23
23
|
/* empty css */
|
|
24
24
|
import "@hookform/resolvers/zod";
|
|
25
25
|
import "../Input/Checkbox.js";
|
|
@@ -38,6 +38,8 @@ import "../LoadingIndicator/LoadingIndicator.css.js";
|
|
|
38
38
|
import "../Input/RadioButton.js";
|
|
39
39
|
import "iframe-resizer";
|
|
40
40
|
import "../Calculators/calculator.css.js";
|
|
41
|
+
import "../MonthlyPaymentCalculator/MonthlyPaymentCalculator.css.js";
|
|
42
|
+
import "../AnnualFeeCalculator/AnnualFeeCalculator.css.js";
|
|
41
43
|
/* empty css */
|
|
42
44
|
import "../Carousel/index.js";
|
|
43
45
|
/* empty css */
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export declare const container: import('@vanilla-extract/recipes').RuntimeFn<{
|
|
2
|
+
variant: {
|
|
3
|
+
primary: {
|
|
4
|
+
background: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
5
|
+
color: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
6
|
+
};
|
|
7
|
+
secondary: {
|
|
8
|
+
background: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
9
|
+
color: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
10
|
+
};
|
|
11
|
+
tertiary: {
|
|
12
|
+
background: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
13
|
+
color: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
14
|
+
};
|
|
15
|
+
quaternary: {
|
|
16
|
+
background: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
17
|
+
color: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
}>;
|
|
21
|
+
export declare const input_container: string;
|
|
22
|
+
export declare const input_box: string;
|
|
23
|
+
export declare const payment_results: string;
|
|
24
|
+
export declare const calc_container: string;
|
|
25
|
+
export declare const inputs_container: string;
|
|
26
|
+
export declare const calculation_header: string;
|
|
27
|
+
export declare const error_message: string;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/* empty css */
|
|
2
|
+
/* empty css */
|
|
3
|
+
/* empty css */
|
|
4
|
+
import { createRuntimeFn } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
5
|
+
var container = createRuntimeFn({ defaultClassName: "_17fwn0a0", variantClassNames: { variant: { primary: "_17fwn0a1", secondary: "_17fwn0a2", tertiary: "_17fwn0a3", quaternary: "_17fwn0a4" } }, defaultVariants: {}, compoundVariants: [] });
|
|
6
|
+
var input_container = "_17fwn0a5";
|
|
7
|
+
var input_box = "_17fwn0a6";
|
|
8
|
+
var payment_results = "_17fwn0a7";
|
|
9
|
+
var calc_container = "_17fwn0a8";
|
|
10
|
+
var inputs_container = "_17fwn0a9";
|
|
11
|
+
var calculation_header = "_17fwn0aa";
|
|
12
|
+
var error_message = "_17fwn0ab";
|
|
13
|
+
export {
|
|
14
|
+
calc_container,
|
|
15
|
+
calculation_header,
|
|
16
|
+
container,
|
|
17
|
+
error_message,
|
|
18
|
+
input_box,
|
|
19
|
+
input_container,
|
|
20
|
+
inputs_container,
|
|
21
|
+
payment_results
|
|
22
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { default as React, FC } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface MonthlyPaymentCalculatorProps {
|
|
4
|
+
header?: React.ReactNode | string;
|
|
5
|
+
body?: React.ReactNode | string;
|
|
6
|
+
variant?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const MonthlyPaymentCalculator: FC<MonthlyPaymentCalculatorProps>;
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { calc_container, container, inputs_container, input_container, input_box, error_message, calculation_header, payment_results } from "./MonthlyPaymentCalculator.css.js";
|
|
5
|
+
import { button } from "../Button/Button.css.js";
|
|
6
|
+
import { getVariant } from "../utils/getVariant.js";
|
|
7
|
+
import { title } from "../IconBillboard/IconBillboard.css.js";
|
|
8
|
+
const MonthlyPaymentCalculator = ({
|
|
9
|
+
variant,
|
|
10
|
+
header
|
|
11
|
+
}) => {
|
|
12
|
+
const [loanAmountDisplay, setLoanAmountDisplay] = useState("");
|
|
13
|
+
const [loanAmount, setLoanAmount] = useState(void 0);
|
|
14
|
+
const [loanDuration, setLoanDuration] = useState(60);
|
|
15
|
+
const [interestRateDisplay, setInterestRateDisplay] = useState("");
|
|
16
|
+
const [interestRate, setInterestRate] = useState("");
|
|
17
|
+
const [estimatedPayment, setEstimatedPayment] = useState(0);
|
|
18
|
+
const [loanAmountError, setLoanAmountError] = useState(null);
|
|
19
|
+
const [interestRateError, setInterestRateError] = useState(
|
|
20
|
+
null
|
|
21
|
+
);
|
|
22
|
+
const formatToCurrency = (value) => {
|
|
23
|
+
const numericValue = parseFloat(value.replace(/[^0-9.]/g, ""));
|
|
24
|
+
if (isNaN(numericValue)) {
|
|
25
|
+
return "";
|
|
26
|
+
}
|
|
27
|
+
return numericValue.toLocaleString("en-US", {
|
|
28
|
+
style: "currency",
|
|
29
|
+
currency: "USD",
|
|
30
|
+
minimumFractionDigits: 0,
|
|
31
|
+
maximumFractionDigits: 0
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
const validateInputs = () => {
|
|
35
|
+
let isValid = true;
|
|
36
|
+
if (!loanAmount || isNaN(loanAmount) || loanAmount < 1e4 || loanAmount > 9e4) {
|
|
37
|
+
setLoanAmountError("Please enter an amount between $10,000 and $90,000.");
|
|
38
|
+
isValid = false;
|
|
39
|
+
} else {
|
|
40
|
+
setLoanAmountError(null);
|
|
41
|
+
}
|
|
42
|
+
if (!interestRate || isNaN(parseFloat(interestRate))) {
|
|
43
|
+
setInterestRateError("Please enter an Interest Rate.");
|
|
44
|
+
isValid = false;
|
|
45
|
+
} else {
|
|
46
|
+
setInterestRateError(null);
|
|
47
|
+
}
|
|
48
|
+
return isValid;
|
|
49
|
+
};
|
|
50
|
+
const handleLoanAmountChange = (event) => {
|
|
51
|
+
const value = event.target.value;
|
|
52
|
+
const formattedValue = formatToCurrency(value);
|
|
53
|
+
setLoanAmountDisplay(formattedValue);
|
|
54
|
+
const numericValue = parseFloat(value.replace(/[^0-9.]/g, ""));
|
|
55
|
+
setLoanAmount(isNaN(numericValue) ? void 0 : numericValue);
|
|
56
|
+
};
|
|
57
|
+
const handleLoanDurationChange = (event) => {
|
|
58
|
+
setLoanDuration(Number(event.target.value));
|
|
59
|
+
};
|
|
60
|
+
const formatToPercentage = (value) => {
|
|
61
|
+
const numericValue = value.replace(/[^0-9.]/g, "");
|
|
62
|
+
if (numericValue === "") {
|
|
63
|
+
return "";
|
|
64
|
+
} else if (numericValue.endsWith("%")) {
|
|
65
|
+
return numericValue;
|
|
66
|
+
} else {
|
|
67
|
+
return numericValue.substring(0, numericValue.length - 2) + numericValue.substring(numericValue.length - 2) + "%";
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
const handleInterestRateChange = (event) => {
|
|
71
|
+
let value = event.target.value;
|
|
72
|
+
if (value.length < interestRateDisplay.length) {
|
|
73
|
+
if (interestRateDisplay.length > 1 && interestRateDisplay.endsWith("%")) {
|
|
74
|
+
value = interestRateDisplay.substring(0, interestRateDisplay.length - 2) + "%";
|
|
75
|
+
} else if (interestRateDisplay.length === 1) {
|
|
76
|
+
value = "";
|
|
77
|
+
} else {
|
|
78
|
+
value = interestRateDisplay.substring(
|
|
79
|
+
0,
|
|
80
|
+
interestRateDisplay.length - 1
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
} else {
|
|
84
|
+
value = formatToPercentage(value);
|
|
85
|
+
}
|
|
86
|
+
setInterestRateDisplay(value);
|
|
87
|
+
setInterestRate(value.replace(/[^0-9.]/g, ""));
|
|
88
|
+
};
|
|
89
|
+
const calculateMonthlyPayment = () => {
|
|
90
|
+
const numericInterestRate = parseFloat(interestRate);
|
|
91
|
+
const monthlyInterestRate = numericInterestRate / 100 / 12;
|
|
92
|
+
const months = loanDuration;
|
|
93
|
+
if (!isNaN(loanAmount || 0) && !isNaN(numericInterestRate)) {
|
|
94
|
+
const monthlyPayment = (loanAmount || 0) * monthlyInterestRate / (1 - Math.pow(1 + monthlyInterestRate, -months));
|
|
95
|
+
setEstimatedPayment(monthlyPayment);
|
|
96
|
+
} else {
|
|
97
|
+
setEstimatedPayment(0);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
const handleCalculate = () => {
|
|
101
|
+
if (validateInputs()) {
|
|
102
|
+
calculateMonthlyPayment();
|
|
103
|
+
} else {
|
|
104
|
+
setEstimatedPayment(0);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
return /* @__PURE__ */ jsx("section", { className: `section_spacer`, children: /* @__PURE__ */ jsx("div", { className: "containment", children: /* @__PURE__ */ jsxs(
|
|
108
|
+
"div",
|
|
109
|
+
{
|
|
110
|
+
className: `rounded ${calc_container} ${container({ variant: getVariant(variant) })}`,
|
|
111
|
+
children: [
|
|
112
|
+
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(
|
|
113
|
+
"h2",
|
|
114
|
+
{
|
|
115
|
+
className: `text_center ${title({ variant: getVariant(variant) })}`,
|
|
116
|
+
children: header
|
|
117
|
+
}
|
|
118
|
+
) }),
|
|
119
|
+
/* @__PURE__ */ jsxs(
|
|
120
|
+
"div",
|
|
121
|
+
{
|
|
122
|
+
className: `flex center text_center push_up_32 bottom ${inputs_container}`,
|
|
123
|
+
children: [
|
|
124
|
+
/* @__PURE__ */ jsxs("div", { className: `flex flex_col ${input_container}`, children: [
|
|
125
|
+
/* @__PURE__ */ jsx("label", { htmlFor: "loanAmount", id: "amount1", children: "Loan Amount ($10,000 - $90,000)" }),
|
|
126
|
+
/* @__PURE__ */ jsx(
|
|
127
|
+
"input",
|
|
128
|
+
{
|
|
129
|
+
className: `text_center bordered ${input_box}`,
|
|
130
|
+
id: "loanAmount",
|
|
131
|
+
maxLength: 10,
|
|
132
|
+
name: "loanAmount",
|
|
133
|
+
type: "text",
|
|
134
|
+
placeholder: "$0",
|
|
135
|
+
value: loanAmountDisplay,
|
|
136
|
+
onChange: handleLoanAmountChange
|
|
137
|
+
}
|
|
138
|
+
),
|
|
139
|
+
loanAmountError && /* @__PURE__ */ jsx("span", { className: error_message, children: loanAmountError })
|
|
140
|
+
] }),
|
|
141
|
+
/* @__PURE__ */ jsxs("div", { className: `flex flex_col ${input_container}`, children: [
|
|
142
|
+
/* @__PURE__ */ jsx("label", { htmlFor: "loanDuration", children: "Loan Duration (Months)" }),
|
|
143
|
+
/* @__PURE__ */ jsxs(
|
|
144
|
+
"select",
|
|
145
|
+
{
|
|
146
|
+
className: `text_center bordered ${input_box}`,
|
|
147
|
+
id: "loanDuration",
|
|
148
|
+
name: "loanDuration",
|
|
149
|
+
value: loanDuration,
|
|
150
|
+
onChange: handleLoanDurationChange,
|
|
151
|
+
children: [
|
|
152
|
+
/* @__PURE__ */ jsx("option", { value: "12", children: "12" }),
|
|
153
|
+
/* @__PURE__ */ jsx("option", { value: "24", children: "24" }),
|
|
154
|
+
/* @__PURE__ */ jsx("option", { value: "36", children: "36" }),
|
|
155
|
+
/* @__PURE__ */ jsx("option", { value: "48", children: "48" }),
|
|
156
|
+
/* @__PURE__ */ jsx("option", { value: "60", children: "60" }),
|
|
157
|
+
/* @__PURE__ */ jsx("option", { value: "72", children: "72" }),
|
|
158
|
+
/* @__PURE__ */ jsx("option", { value: "84", children: "84" }),
|
|
159
|
+
/* @__PURE__ */ jsx("option", { value: "96", children: "96" })
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
)
|
|
163
|
+
] }),
|
|
164
|
+
/* @__PURE__ */ jsxs("div", { className: `flex flex_col ${input_container}`, children: [
|
|
165
|
+
/* @__PURE__ */ jsx("label", { htmlFor: "interestRate", children: "Interest Rate" }),
|
|
166
|
+
/* @__PURE__ */ jsx(
|
|
167
|
+
"input",
|
|
168
|
+
{
|
|
169
|
+
className: `text_center bordered ${input_box}`,
|
|
170
|
+
id: "interestRate",
|
|
171
|
+
maxLength: 6,
|
|
172
|
+
name: "interestRate",
|
|
173
|
+
type: "text",
|
|
174
|
+
placeholder: "0.00%",
|
|
175
|
+
value: interestRateDisplay,
|
|
176
|
+
onChange: handleInterestRateChange
|
|
177
|
+
}
|
|
178
|
+
),
|
|
179
|
+
interestRateError && /* @__PURE__ */ jsx("span", { className: error_message, children: interestRateError })
|
|
180
|
+
] })
|
|
181
|
+
]
|
|
182
|
+
}
|
|
183
|
+
),
|
|
184
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
185
|
+
/* @__PURE__ */ jsx("div", { className: `flex center middle push_up_32`, children: /* @__PURE__ */ jsx(
|
|
186
|
+
"input",
|
|
187
|
+
{
|
|
188
|
+
className: `${button({
|
|
189
|
+
color: "primary",
|
|
190
|
+
size: "medium",
|
|
191
|
+
rounded: "medium"
|
|
192
|
+
})} center`,
|
|
193
|
+
type: "button",
|
|
194
|
+
value: "Calculate",
|
|
195
|
+
onClick: handleCalculate
|
|
196
|
+
}
|
|
197
|
+
) }),
|
|
198
|
+
/* @__PURE__ */ jsxs("div", { className: "text_center flex flex_col center middle push_up_32", children: [
|
|
199
|
+
/* @__PURE__ */ jsx("span", { className: calculation_header, children: "Estimated Monthly Payment:" }),
|
|
200
|
+
/* @__PURE__ */ jsxs("span", { id: "estimatedPayment", className: payment_results, children: [
|
|
201
|
+
"$",
|
|
202
|
+
estimatedPayment.toFixed(2)
|
|
203
|
+
] })
|
|
204
|
+
] })
|
|
205
|
+
] })
|
|
206
|
+
]
|
|
207
|
+
}
|
|
208
|
+
) }) });
|
|
209
|
+
};
|
|
210
|
+
export {
|
|
211
|
+
MonthlyPaymentCalculator
|
|
212
|
+
};
|
|
@@ -10,19 +10,19 @@ import "../../icons/CheckIcon/CheckIcon.css.js";
|
|
|
10
10
|
/* empty css */
|
|
11
11
|
import "../../Chevron/Chevron.css.js";
|
|
12
12
|
import "../../AlertBanner/AlertBanner.css.js";
|
|
13
|
+
import "../../Button/Button.css.js";
|
|
14
|
+
import { useState } from "react";
|
|
15
|
+
import "../../ApyCalculator/ApyCalculator.css.js";
|
|
13
16
|
import "../../Modal/contextApi/store.js";
|
|
14
17
|
import { findMoreAxosDomains } from "../../utils/allowedAxosDomains.js";
|
|
15
18
|
import "clsx";
|
|
16
|
-
import { useState } from "react";
|
|
17
|
-
import "../../Button/Button.css.js";
|
|
18
19
|
import { useLocation } from "react-use";
|
|
19
|
-
|
|
20
|
+
import "../../IconBillboard/IconBillboard.css.js";
|
|
20
21
|
import "../../Article/Article.css.js";
|
|
21
22
|
import "../../ArticlesSet/ArticlesSet.css.js";
|
|
22
23
|
/* empty css */
|
|
23
24
|
/* empty css */
|
|
24
25
|
/* empty css */
|
|
25
|
-
import "../../IconBillboard/IconBillboard.css.js";
|
|
26
26
|
/* empty css */
|
|
27
27
|
import "@hookform/resolvers/zod";
|
|
28
28
|
import "../../Input/Checkbox.js";
|
|
@@ -40,6 +40,8 @@ import "../../LoadingIndicator/LoadingIndicator.css.js";
|
|
|
40
40
|
import "../../Input/RadioButton.js";
|
|
41
41
|
import "iframe-resizer";
|
|
42
42
|
import "../../Calculators/calculator.css.js";
|
|
43
|
+
import "../../MonthlyPaymentCalculator/MonthlyPaymentCalculator.css.js";
|
|
44
|
+
import "../../AnnualFeeCalculator/AnnualFeeCalculator.css.js";
|
|
43
45
|
/* empty css */
|
|
44
46
|
import "../../Carousel/index.js";
|
|
45
47
|
/* empty css */
|
|
@@ -2305,7 +2307,7 @@ function SubNavBar() {
|
|
|
2305
2307
|
/* @__PURE__ */ jsx(
|
|
2306
2308
|
Image,
|
|
2307
2309
|
{
|
|
2308
|
-
src: `https
|
|
2310
|
+
src: `https://images.axos.com/o9ov1v03uwqk/cHRJYycmvcbYj6ppcTQvg/ea375c834b0ced5ba646d1e88bb7828e/nav-submenu-lending-icon.svg`,
|
|
2309
2311
|
alt: "",
|
|
2310
2312
|
width: 20,
|
|
2311
2313
|
height: 20
|
|
@@ -16,13 +16,13 @@ import "../icons/CheckIcon/CheckIcon.css.js";
|
|
|
16
16
|
import "../Accordion/Accordion.js";
|
|
17
17
|
import "../Accordion/Accordion.css.js";
|
|
18
18
|
import "../AlertBanner/AlertBanner.css.js";
|
|
19
|
-
|
|
19
|
+
import "../ApyCalculator/ApyCalculator.css.js";
|
|
20
|
+
import { header_section } from "../IconBillboard/IconBillboard.css.js";
|
|
20
21
|
import "../Article/Article.css.js";
|
|
21
22
|
import "../ArticlesSet/ArticlesSet.css.js";
|
|
22
23
|
/* empty css */
|
|
23
24
|
/* empty css */
|
|
24
25
|
/* empty css */
|
|
25
|
-
import { header_section } from "../IconBillboard/IconBillboard.css.js";
|
|
26
26
|
/* empty css */
|
|
27
27
|
import "@hookform/resolvers/zod";
|
|
28
28
|
import "../Input/Checkbox.js";
|
|
@@ -40,6 +40,8 @@ import "../LoadingIndicator/LoadingIndicator.css.js";
|
|
|
40
40
|
import "../Input/RadioButton.js";
|
|
41
41
|
import "iframe-resizer";
|
|
42
42
|
import "../Calculators/calculator.css.js";
|
|
43
|
+
import "../MonthlyPaymentCalculator/MonthlyPaymentCalculator.css.js";
|
|
44
|
+
import "../AnnualFeeCalculator/AnnualFeeCalculator.css.js";
|
|
43
45
|
/* empty css */
|
|
44
46
|
import "../Carousel/index.js";
|
|
45
47
|
/* empty css */
|