{"version":3,"file":"angular-press-hold-button.mjs","sources":["../../../projects/angular-press-hold-button/src/lib/angular-press-hold-button.service.ts","../../../projects/angular-press-hold-button/src/lib/angular-press-hold-button.component.ts","../../../projects/angular-press-hold-button/src/lib/angular-press-hold-button.component.html","../../../projects/angular-press-hold-button/src/public-api.ts","../../../projects/angular-press-hold-button/src/angular-press-hold-button.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AngularPressHoldButtonService {\n  constructor() {}\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  Renderer2,\n  ViewChild,\n} from '@angular/core';\n\n@Component({\n  selector: 'angular-press-hold-button',\n  templateUrl: './angular-press-hold-button.component.html',\n  styleUrls: ['./angular-press-hold-button.component.scss'],\n  imports: [CommonModule],\n  standalone: true,\n})\nexport class AngularPressHoldButton implements OnInit {\n  @ViewChild('progressBar') progressBar: ElementRef | undefined;\n\n  @Input() duration: number = 1500;\n  @Input() backgroundColor: string = '#3498db';\n  @Input() progressColor: string = '#2980b9';\n  @Input() labelStart: string = '';\n  @Input() labelProgress: string = '';\n  @Input() labelFinish: string = '';\n\n  @Output() actionStarted = new EventEmitter<void>();\n  @Output() actionCancelled = new EventEmitter<void>();\n  @Output() actionFinished = new EventEmitter<void>();\n\n  label: string = '';\n\n  currentState: 'start' | 'progress' | 'finish' = 'start';\n\n  private progressInterval: any;\n  private progressWidth: number = 0;\n\n  constructor(private renderer: Renderer2) {}\n\n  ngOnInit(): void {\n    this.label = this.labelStart;\n  }\n\n  startAction(event: Event): void {\n    event.preventDefault();\n    if (this.progressWidth < 100) {\n      this.clearProgress();\n      this.label = this.labelProgress;\n      this.currentState = 'progress';\n      this.actionStarted.emit();\n      this.progressInterval = setInterval(() => {\n        this.progressWidth = Math.min(\n          100,\n          this.progressWidth + 100 / (this.duration / 100)\n        );\n        this.updateProgress();\n        if (this.progressWidth >= 100) {\n          this.actionSuccess();\n        }\n      }, 100);\n    }\n  }\n\n  stopAction(event?: Event): void {\n    if (event) {\n      event.preventDefault();\n    }\n    if (this.progressWidth < 100) {\n      this.label = this.labelStart;\n      this.currentState = 'start';\n      this.actionCancelled.emit();\n      clearInterval(this.progressInterval);\n      this.progressInterval = setInterval(() => {\n        this.progressWidth = Math.max(\n          0,\n          this.progressWidth - 100 / (this.duration / 100)\n        );\n        this.updateProgress();\n        if (this.progressWidth <= 0) {\n          clearInterval(this.progressInterval);\n        }\n      }, 100);\n    }\n  }\n\n  private actionSuccess(): void {\n    clearInterval(this.progressInterval);\n    this.label = this.labelFinish;\n    this.currentState = 'finish';\n    this.actionFinished.emit();\n  }\n\n  private updateProgress(): void {\n    if (this.progressBar && this.progressBar.nativeElement) {\n      this.renderer.setStyle(\n        this.progressBar.nativeElement,\n        'width',\n        `${this.progressWidth}%`\n      );\n    }\n  }\n\n  private clearProgress(): void {\n    if (this.progressWidth < 100 && this.progressInterval) {\n      clearInterval(this.progressInterval);\n    }\n    this.progressWidth = 0;\n    this.updateProgress();\n  }\n}\n","<button\n  (mousedown)=\"startAction($event)\"\n  (mouseup)=\"stopAction()\"\n  (mouseleave)=\"stopAction()\"\n  (touchstart)=\"startAction($event)\"\n  (touchend)=\"stopAction()\"\n  (touchcancel)=\"stopAction()\"\n  [ngStyle]=\"{ 'background-color': backgroundColor }\"\n  class=\"press-hold-button\"\n>\n  <div class=\"icon-container\">\n    <ng-container *ngIf=\"currentState === 'start'\">\n      <ng-content select=\"[slot='left'][when='start']\"></ng-content>\n    </ng-container>\n    <ng-container *ngIf=\"currentState === 'progress'\">\n      <ng-content select=\"[slot='left'][when='progress']\"></ng-content>\n    </ng-container>\n    <ng-container *ngIf=\"currentState === 'finish'\">\n      <ng-content select=\"[slot='left'][when='finish']\"></ng-content>\n    </ng-container>\n  </div>\n\n  <span class=\"label-container\">{{ label }}</span>\n\n  <div class=\"icon-container\">\n    <ng-container *ngIf=\"currentState === 'start'\">\n      <ng-content select=\"[slot='right'][when='start']\"></ng-content>\n    </ng-container>\n    <ng-container *ngIf=\"currentState === 'progress'\">\n      <ng-content select=\"[slot='right'][when='progress']\"></ng-content>\n    </ng-container>\n    <ng-container *ngIf=\"currentState === 'finish'\">\n      <ng-content select=\"[slot='right'][when='finish']\"></ng-content>\n    </ng-container>\n  </div>\n\n  <div\n    #progressBar\n    class=\"progress-bar\"\n    [ngStyle]=\"{ 'background-color': progressColor }\"\n  ></div>\n</button>\n","/*\n * Public API Surface of angular-press-hold-button\n */\n\nexport * from './lib/angular-press-hold-button.service';\nexport * from './lib/angular-press-hold-button.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}