{"version":3,"file":"tapsellorg-angular-material-library-src-lib-countdown-timer.mjs","sources":["../../projects/pegah-library/src/lib/countdown-timer/countdown-timer.service.ts","../../projects/pegah-library/src/lib/countdown-timer/countdown-timer.component.ts","../../projects/pegah-library/src/lib/countdown-timer/countdown-timer.component.html","../../projects/pegah-library/src/lib/countdown-timer/countdown-timer.module.ts","../../projects/pegah-library/src/lib/countdown-timer/tapsellorg-angular-material-library-src-lib-countdown-timer.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class PghCountdownTimerService {\n  static readonly DEFAULT_DURATION = 20;\n\n  restartTimerSubject = new Subject<number>();\n  restartTimer$ = this.restartTimerSubject.asObservable();\n\n  restartTimer(duration?: number) {\n    this.restartTimerSubject.next(duration ?? PghCountdownTimerService.DEFAULT_DURATION);\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  input,\n  model,\n  OnInit,\n  output,\n  signal,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { merge, Subject, timer } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { withDestroy } from '@tapsellorg/angular-material-library/src/lib/common';\nimport { PghCountdownTimerService } from './countdown-timer.service';\n\n@Component({\n  selector: 'pgh-countdown-timer',\n  templateUrl: './countdown-timer.component.html',\n  styleUrls: ['./countdown-timer.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false,\n})\nexport class PghCountdownTimerComponent extends withDestroy() implements OnInit {\n  durationInSeconds = model<number>(PghCountdownTimerService.DEFAULT_DURATION);\n  startAutomatically = input<boolean>(true);\n  restartButtonText = input<string>('RESTART_BUTTON_TEXT');\n  buttonType = input<'button' | 'submit'>('button');\n  timerFinished = output<boolean>();\n  restartTimerClick = output();\n\n  private readonly _stop = new Subject<void>();\n\n  public remainingSeconds = signal<number>(0);\n  public remainingMinutes = signal<number>(0);\n  private elapsedTime: number = 0;\n\n  isTimerRunning = signal<boolean>(false);\n\n  private readonly TIMER_DELAY = 1000;\n  private readonly TIMER_INTERVAL = 1000;\n  private readonly SECONDS_IN_A_MINUTE = 60;\n\n  constructor(\n    private changeDetectorRef: ChangeDetectorRef,\n    private pghCountdownTimerService: PghCountdownTimerService,\n  ) {\n    super();\n  }\n\n  ngOnInit(): void {\n    if (this.startAutomatically()) {\n      this.startTimer();\n    }\n    this.pghCountdownTimerService.restartTimer$\n      .pipe(takeUntil(this._destroyed$))\n      .subscribe(duration => {\n        this.startTimer(duration);\n      });\n  }\n\n  onRestartTimerClick() {\n    this.restartTimerClick.emit();\n  }\n\n  private startTimer(duration: number = this.durationInSeconds()) {\n    if (this.isTimerRunning()) {\n      console.error('The countdown timer is already running.');\n      return;\n    }\n\n    if (duration <= 0) {\n      console.error('The countdown timer duration must be a positive integer.');\n      return;\n    }\n\n    this.durationInSeconds.set(duration);\n\n    this.isTimerRunning.set(true);\n    this.elapsedTime = 0;\n\n    this.allocateTimeUnits(this.durationInSeconds());\n    this.changeDetectorRef.markForCheck();\n\n    timer(this.TIMER_DELAY, this.TIMER_INTERVAL)\n      .pipe(takeUntil(merge(this._destroyed$, this._stop)))\n      .subscribe(() => {\n        this.getTimeDifference();\n      });\n  }\n\n  private getTimeDifference() {\n    this.elapsedTime++;\n    const remainingDuration = this.durationInSeconds() - this.elapsedTime;\n\n    if (remainingDuration < 0) {\n      this._stop.next();\n      this.timerFinished.emit(true);\n      this.isTimerRunning.set(false);\n    } else {\n      this.allocateTimeUnits(remainingDuration);\n    }\n\n    this.changeDetectorRef.markForCheck();\n  }\n\n  private allocateTimeUnits(timeDifference: number) {\n    this.remainingSeconds.set(timeDifference % this.SECONDS_IN_A_MINUTE);\n    this.remainingMinutes.set(Math.floor(timeDifference / this.SECONDS_IN_A_MINUTE));\n  }\n}\n","<button\n  mat-stroked-button\n  color=\"primary\"\n  class=\"big-mat-button font-monospaced-numbers w-100\"\n  (click)=\"onRestartTimerClick()\"\n  [disabled]=\"isTimerRunning()\"\n  [type]=\"buttonType()\"\n>\n  <div class=\"d-flex align-items-center justify-content-center\">\n    @if (!isTimerRunning()) {\n    <mat-icon svgIcon=\"update\" class=\"square-24 me-1\"></mat-icon>\n    } @if (!isTimerRunning()) {\n    <span>{{ restartButtonText() | translate }}</span>\n    } @if (isTimerRunning()) {\n    <span>\n      {{ restartButtonText() | translate }} {{ 'RESTART_BUTTON_TEXT_CONJUNCTION' | translate\n      }}{{ ' ' }}{{ remainingMinutes() | number : '2.0' }}:{{ remainingSeconds() | number : '2.0' }}\n    </span>\n    }\n  </div>\n</button>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PghCountdownTimerComponent } from './countdown-timer.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslateModule } from '@tapsellorg/angular-material-library/src/lib/translate';\n\n@NgModule({\n  declarations: [PghCountdownTimerComponent],\n  imports: [CommonModule, MatButtonModule, MatIconModule, TranslateModule],\n  exports: [PghCountdownTimerComponent],\n})\nexport class PghCountdownTimerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PghCountdownTimerService"],"mappings":"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"}