| 
						
						
							
								
							
						
						
					 | 
					@ -17,6 +17,7 @@ import { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  OnChanges, | 
					 | 
					 | 
					  OnChanges, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  OnDestroy, | 
					 | 
					 | 
					  OnDestroy, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  Output, | 
					 | 
					 | 
					  Output, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  SimpleChanges, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  ViewChild | 
					 | 
					 | 
					  ViewChild | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					} from '@angular/core'; | 
					 | 
					 | 
					} from '@angular/core'; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import { | 
					 | 
					 | 
					import { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -91,6 +92,11 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  @Output() projectedTotalAmountChanged = new EventEmitter<number>(); | 
					 | 
					 | 
					  @Output() projectedTotalAmountChanged = new EventEmitter<number>(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  @Output() retirementDateChanged = new EventEmitter<Date>(); | 
					 | 
					 | 
					  @Output() retirementDateChanged = new EventEmitter<Date>(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  @Output() savingsRateChanged = new EventEmitter<number>(); | 
					 | 
					 | 
					  @Output() savingsRateChanged = new EventEmitter<number>(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  @Output() calculationComplete = new EventEmitter<{ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    projectedTotalAmount: number; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    retirementDate: Date | undefined; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    annualInterestRate: number; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  }>(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  @ViewChild('chartCanvas') chartCanvas: ElementRef<HTMLCanvasElement>; | 
					 | 
					 | 
					  @ViewChild('chartCanvas') chartCanvas: ElementRef<HTMLCanvasElement>; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -157,7 +163,7 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      }); | 
					 | 
					 | 
					      }); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  } | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					  public ngOnChanges() { | 
					 | 
					 | 
					  public ngOnChanges(_changes?: SimpleChanges) { | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					    if (isNumber(this.fireWealth) && this.fireWealth >= 0) { | 
					 | 
					 | 
					    if (isNumber(this.fireWealth) && this.fireWealth >= 0) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      this.calculatorForm.setValue( | 
					 | 
					 | 
					      this.calculatorForm.setValue( | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        { | 
					 | 
					 | 
					        { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -195,6 +201,9 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        ); | 
					 | 
					 | 
					        ); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        this.calculatorForm.get('principalInvestmentAmount').disable(); | 
					 | 
					 | 
					        this.calculatorForm.get('principalInvestmentAmount').disable(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        // Emit initial calculation payload
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        this.emitCalculationComplete(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        this.changeDetectorRef.markForCheck(); | 
					 | 
					 | 
					        this.changeDetectorRef.markForCheck(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      }); | 
					 | 
					 | 
					      }); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    } | 
					 | 
					 | 
					    } | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -328,6 +337,9 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    } | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    this.isLoading = false; | 
					 | 
					 | 
					    this.isLoading = false; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    // Emit after (re)initialization to keep consumers updated
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    this.emitCalculationComplete(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  } | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  private getChartData() { | 
					 | 
					 | 
					  private getChartData() { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -345,7 +357,8 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    // Calculate retirement date
 | 
					 | 
					 | 
					    // Calculate retirement date
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    // if we want to retire at month x, we need the projectedTotalAmount at month x-1
 | 
					 | 
					 | 
					    // if we want to retire at month x, we need the projectedTotalAmount at month x-1
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    const lastPeriodDate = sub(this.getRetirementDate(), { months: 1 }); | 
					 | 
					 | 
					    const safeRetirementDate = this.getRetirementDate() ?? this.DEFAULT_RETIREMENT_DATE; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    const lastPeriodDate = sub(safeRetirementDate, { months: 1 }); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    const yearsToRetire = lastPeriodDate.getFullYear() - currentYear; | 
					 | 
					 | 
					    const yearsToRetire = lastPeriodDate.getFullYear() - currentYear; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    // Time
 | 
					 | 
					 | 
					    // Time
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -476,4 +489,18 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      }) | 
					 | 
					 | 
					      }) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    ); | 
					 | 
					 | 
					    ); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  } | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  private emitCalculationComplete() { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    // Use current form values and calculated helpers
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    const projectedTotalAmount = Number(this.getProjectedTotalAmount()); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    const retirementDate = this.getRetirementDate(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    const annualInterestRate = this.calculatorForm.get('annualInterestRate') | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      .value; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    this.calculationComplete.emit({ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      projectedTotalAmount, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      retirementDate, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      annualInterestRate | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    }); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					} | 
					 | 
					 | 
					} | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
					 | 
					
  |