diff --git a/app/interactives/inflation-impact-calculator/page.tsx b/app/interactives/inflation-impact-calculator/page.tsx index 37fbb8e..d8aa7e7 100644 --- a/app/interactives/inflation-impact-calculator/page.tsx +++ b/app/interactives/inflation-impact-calculator/page.tsx @@ -151,7 +151,7 @@ export default function InflationCalculator() { Future price:
- ${futureValue.toFixed(2)} + {`$${futureValue.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`}
diff --git a/app/interactives/interest-calculator/page.tsx b/app/interactives/interest-calculator/page.tsx index 066728d..46fb9a7 100644 --- a/app/interactives/interest-calculator/page.tsx +++ b/app/interactives/interest-calculator/page.tsx @@ -63,24 +63,26 @@ const InterestRateVisual = () => {
+ +
+

{monthsRemaining || "0"} months = {(Number.parseFloat(monthsRemaining || "0") / 12).toFixed(1)} years

+ + +
+ + setAnnualRate(e.target.value)} + min="0" + step="0.1" + className="text-lagunita font-bold [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none" + /> +
+ + +
+
+ +
+ + setMonthlyPayment(e.target.value)} + min="0" + step="0.01" + className="[appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none" + /> +
+ + +
+
+ {currentBalance !== null && ( +
+

Current Mortgage Balance

+

+ ${currentBalance.toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 })} +

+
+ )} + + + + + + + + + Refinance Analysis + Analyze if refinancing makes financial sense for your situation. + + + +
+
+

Current Loan Term

+ +
+ + setRefCurrentBalance(e.target.value)} + min="0" + step="0.01" + className="text-black font-bold [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none" + /> +
+ + +
+
+ +
+ + setRefCurrentMonths(e.target.value)} + min="0" + step="1" + className="text-black font-bold [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none" + /> +
+ + +
+
+ +
+ + setRefCurrentRate(e.target.value)} + min="0" + step="0.01" + className="text-lagunita font-bold [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none" + /> +
+ + +
+
+ +
+ + setRefCurrentMonthlyPayment(e.target.value)} + min="0" + step="0.01" + className="text-black font-bold [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none" + /> +
+ + +
+
+
+
+

New Loan Terms

+ +
+ + setRefNewLoanAmount(e.target.value)} + min="0" + step="0.01" + className="text-black font-bold [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none" + /> +
+ + +
+
+ +
+ + setRefNewMonths(e.target.value)} + min="0" + step="1" + className="text-black font-bold [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none" + /> +
+ + +
+

{refNewMonths || "0"} months = {(Number.parseFloat(refNewMonths || "0") / 12).toFixed(1)} years

+
+ +
+ + setRefNewRate(e.target.value)} + min="0" + step="0.1" + className="text-lagunita font-bold [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none" + /> +
+ + +
+
+ +
+ +
+ + setRefClosingCosts(e.target.value)} + min="0" + step="0.01" + className="text-black font-bold [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none" + /> +
+ + +
+
+ +
+ + setRefYearsIn(e.target.value)} + min="0" + step="1" + className="text-black font-bold [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none" + /> +
+ + +
+
+
+
+ + {refinanceResults && ( +
+ +
+

New monthly payment

+

+ ${formatCurrency(refinanceResults.newMonthlyPayment)} +

+
+ +
+

+ {refinanceResults.monthlySavings >= 0 ? "Monthly savings" : "Monthly increase"} +

+

= 0 + ? "bg-lagunita-lighter text-black border-1 border-lagunita" + : "bg-berry-light border-berry text-black" + }`}> + {refinanceResults.monthlySavings >= 0 ? "+" : "-"}$ + {formatCurrency(Math.abs(refinanceResults.monthlySavings))} +

+
+ +
+

+ {refinanceResults.totalSavings >= 0 ? "Refinancing saves you" : "Refinancing costs you"} +

+

= 0 ? "text-lagunita" : "text-berry" + }`}> + {refinanceResults.totalSavings >= 0 ? "" : "-"}$ + {formatCurrency(Math.abs(refinanceResults.totalSavings))} +

+
+
+ )} + + {refinanceResults ? ( +
+ + +
+ ) : ( + + )} + + + + + +
+ + + ) +} \ No newline at end of file diff --git a/app/interactives/present-value-calculator/page.tsx b/app/interactives/present-value-calculator/page.tsx index 5f77bb3..09f74de 100644 --- a/app/interactives/present-value-calculator/page.tsx +++ b/app/interactives/present-value-calculator/page.tsx @@ -128,7 +128,7 @@ export default function PresentValueCalculator() { {/* Watch Time Impact Button */}