{"version":3,"file":"catrx-ui-snackbar.mjs","sources":["../../../../projects/catrx/ui/snackbar/src/snackbar.component.ts","../../../../projects/catrx/ui/snackbar/src/cat-snackbar.service.ts","../../../../projects/catrx/ui/snackbar/catrx-ui-snackbar.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, Inject, OnInit } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\nimport { interval } from 'rxjs/internal/observable/interval';\nimport {\n  CatSnackbarConfig,\n  CatSnackbarRef,\n  CAT_SNACKBAR_CONFIG,\n} from './cat-snackbar.service';\nimport { Subscription } from 'rxjs/internal/Subscription';\nimport { startWith } from 'rxjs/operators';\n\n@Component({\n  template: `<div class=\"cat-snackbar-container\">\n    <div class=\"cat-snackbar-content\" [ngClass]=\"config.type\">\n      <h2 class=\"title\">\n        <i [ngClass]=\"getIcon()\"></i>\n        {{ config.title }}\n      </h2>\n      <p\n        *ngIf=\"config.message\"\n        class=\"message\"\n        [innerHTML]=\"config.message\"\n      ></p>\n      <button (click)=\"close()\" class=\"btn-snackbar-close\">\n        <i class=\"fa-solid fa-xmark\"></i>\n      </button>\n    </div>\n    <ng-container *ngIf=\"progress$ | async as progress\">\n      <div\n        *ngIf=\"progress !== null && progress >= 0\"\n        class=\"cat-snackbar-progress-container animate__animated animate__fadeIn\"\n      >\n        <div\n          class=\"cat-snackbar-progress-bar\"\n          [style.width]=\"progress + '%'\"\n        ></div>\n      </div>\n    </ng-container>\n  </div>`,\n  standalone: true,\n  imports: [CommonModule],\n})\nexport class SnackbarComponent implements OnInit {\n  public progress$ = new BehaviorSubject<number>(null);\n  private intervalToClose?: Subscription;\n\n  constructor(\n    private snackbarRef: CatSnackbarRef,\n    @Inject(CAT_SNACKBAR_CONFIG) public config: CatSnackbarConfig\n  ) {}\n\n  ngOnInit(): void {\n    if (this.config.openedTime) {\n      let passTime = 0;\n      const intervalTime = 100;\n      this.intervalToClose = interval(intervalTime)\n        .pipe(startWith(0))\n        .subscribe(() => {\n          passTime += intervalTime;\n          this.progress$.next(\n            Math.ceil((passTime * 100) / this.config.openedTime)\n          );\n          if (passTime >= this.config.openedTime) {\n            this.close();\n          }\n        });\n    }\n  }\n\n  getIcon() {\n    switch (this.config.type) {\n      case 'success':\n        return 'fa-regular fa-circle-check';\n      case 'warning':\n        return 'fa-solid fa-triangle-exclamation';\n      case 'error':\n        return 'fa-regular fa-circle-xmark';\n      case 'info':\n        return 'fa-solid fa-circle-exclamation';\n    }\n  }\n\n  close() {\n    this.intervalToClose?.unsubscribe();\n    this.snackbarRef.close();\n  }\n}\n","import {\n  ApplicationRef,\n  ComponentFactoryResolver,\n  EmbeddedViewRef,\n  Inject,\n  Injectable,\n  InjectionToken,\n  Injector,\n} from '@angular/core';\nimport { randomString } from '@koalarx/utils/operators/string';\nimport { SnackbarComponent } from './snackbar.component';\n\nexport const CAT_SNACKBAR_CONFIG = new InjectionToken('CatSnackbarConfig');\nexport const CAT_SNACKBAR_REF_TOKEN = new InjectionToken('CatSnackbarRefToken');\n\nexport type CatSnackbarType = 'success' | 'warning' | 'error' | 'info';\nexport interface CatSnackbarConfig {\n  type: CatSnackbarType;\n  title: string;\n  message?: string;\n  openedTime?: number;\n}\n\n@Injectable()\nexport class CatSnackbarRef {\n  constructor(\n    @Inject(CAT_SNACKBAR_CONFIG) private config: CatSnackbarConfig,\n    @Inject(CAT_SNACKBAR_REF_TOKEN) private elementId: string\n  ) {}\n\n  close() {\n    const elDialog = document.getElementById(this.elementId);\n    if (elDialog) {\n      const elDialogContent = document.querySelector(\n        `#${this.elementId} .cat-snackbar-container`\n      );\n      elDialogContent?.classList.add('animate__animated');\n      elDialogContent?.classList.add('animate__zoomOut');\n      setTimeout(() => elDialog.remove(), 200);\n    }\n  }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CatSnackbarService {\n  constructor(\n    private componentFactoryResolver: ComponentFactoryResolver,\n    private appRef: ApplicationRef\n  ) {}\n\n  public open(config: CatSnackbarConfig) {\n    const elementId = this.generateElementId();\n    const main = document.querySelector('main');\n    const componentRef = this.componentFactoryResolver\n      .resolveComponentFactory(SnackbarComponent)\n      .create(\n        Injector.create({\n          providers: [\n            { provide: CAT_SNACKBAR_CONFIG, useValue: config },\n            { provide: CAT_SNACKBAR_REF_TOKEN, useValue: elementId },\n            {\n              provide: CatSnackbarRef,\n              deps: [CAT_SNACKBAR_CONFIG, CAT_SNACKBAR_REF_TOKEN],\n            },\n          ],\n        })\n      );\n\n    this.appRef.attachView(componentRef.hostView);\n\n    const elDialog = (componentRef.hostView as EmbeddedViewRef<any>)\n      .rootNodes[0] as HTMLElement;\n    elDialog.id = elementId;\n\n    main.appendChild(elDialog);\n\n    const elDialogContent = document.querySelector(\n      `#${elementId} .cat-snackbar-container`\n    );\n    elDialogContent?.classList.add('animate__animated');\n    elDialogContent?.classList.add('animate__zoomIn');\n  }\n\n  private generateElementId() {\n    let elementId: string;\n\n    do {\n      elementId = randomString(50, {\n        numbers: false,\n        lowercase: true,\n        uppercase: true,\n        specialCharacters: false,\n      });\n    } while (document.getElementById(elementId));\n\n    return elementId;\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}