{"version":3,"file":"ng-vagabond-lab-ng-dsv-ds-toast.mjs","sources":["../../../projects/ng-dsv/ds/toast/service/toast.service.ts","../../../projects/ng-dsv/ds/toast/component/toast.component.ts","../../../projects/ng-dsv/ds/toast/component/toast.component.html","../../../projects/ng-dsv/ds/toast/ng-vagabond-lab-ng-dsv-ds-toast.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\nimport { ToastDto } from '../dto/toast.dto';\n\nexport const MAX_TOASTS = 10;\nexport const DURATION_DEFAULT = 5000;\nexport const DURATION_TIMEOUT = 10;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ToastService {\n  toastShows = signal<ToastDto[]>([]);\n  toasts = signal<ToastDto[]>([]);\n\n  showToast(toast: ToastDto) {\n    toast.uuid = crypto.randomUUID();\n    toast.type = toast.type ?? 'success';\n    toast.duration = toast.duration ?? DURATION_DEFAULT;\n    toast.durationLeft = toast.duration;\n    toast.filled = toast.filled ?? false;\n    const find = this.toastShows().find((t) => t.text === toast.text);\n    !find && this.toasts.update((toasts) => [...toasts, toast]);\n  }\n\n  consumeToast(toast: ToastDto) {\n    this.toastShows.update((toasts) => [...toasts, toast]);\n    let duration = 0;\n    const interval = setInterval(() => {\n      duration += DURATION_TIMEOUT;\n      if (duration > toast.duration!) {\n        clearInterval(interval);\n        this.closeToast(toast.uuid!);\n      } else {\n        this.toastShows.update((toasts) =>\n          toasts.map((oneToast) => {\n            if (oneToast.uuid === toast.uuid) {\n              oneToast.durationLeft = toast.duration! - duration;\n            }\n            return oneToast;\n          })\n        );\n      }\n    }, DURATION_TIMEOUT);\n    this.removeToastFromQueue(toast.uuid!);\n  }\n\n  closeToast(uuid: string) {\n    this.toastShows.update((toasts) => toasts.filter((t) => t.uuid !== uuid));\n  }\n\n  removeToastFromQueue(uuid: string) {\n    this.toasts.update((toasts) => toasts.filter((t) => t.uuid !== uuid));\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, inject } from '@angular/core';\nimport { MAX_TOASTS, ToastService } from '../service/toast.service';\n\n@Component({\n  selector: 'dsv-toast',\n  imports: [CommonModule],\n  templateUrl: './toast.component.html',\n  styleUrls: ['./toast.component.scss'],\n})\nexport class DsvToastComponent {\n  protected readonly toastService = inject(ToastService);\n\n  constructor() {\n    effect(() => {\n      for (const toast of this.toastService.toasts()) {\n        if (this.toastService.toastShows().length < MAX_TOASTS) {\n          this.toastService.consumeToast(toast);\n        }\n      }\n    });\n  }\n}\n","<div class=\"dsv-toast-container\">\n  @for (toast of toastService.toastShows(); track toast.uuid) {\n    <div\n      class=\"dsv-toast\"\n      [ngClass]=\"toast.type + ' ' + (toast.filled ? 'filled' : '')\"\n    >\n      <button\n        class=\"close-button\"\n        type=\"button\"\n        (click)=\"toastService.closeToast(toast.uuid!)\"\n      >\n        X\n      </button>\n      @if (toast.type === \"success\") {\n        <i class=\"ri-check-fill\"></i>\n      } @else if (toast.type === \"info\") {\n        <i class=\"ri-information-2-line\"></i>\n      } @else if (toast.type === \"warning\") {\n        <i class=\"ri-alert-line\"></i>\n      } @else if (toast.type === \"error\") {\n        <i class=\"ri-close-line\"></i>\n      }\n\n      {{ toast.text }}\n      <div class=\"loader-container\">\n        <div\n          class=\"loader\"\n          [style.width]=\"(toast.durationLeft! / toast.duration!) * 100 + '%'\"\n        ></div>\n      </div>\n    </div>\n  }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}