{"version":3,"file":"usitsdasdesign-dds-ng-toast.mjs","sources":["../../src/app/dds/toast/constants.ts","../../src/app/dds/toast/typings.ts","../../src/app/dds/toast/toast/constants.ts","../../src/app/dds/toast/toast/toast.component.ts","../../src/app/dds/toast/toast/toast.component.html","../../src/app/dds/toast/services/toast.service.ts","../../src/app/dds/toast/toast.module.ts","../../src/app/dds/toast/usitsdasdesign-dds-ng-toast.ts"],"sourcesContent":["export const BUTTON_SPINNER_SIZE = '16px';\nexport const TOAST_CLASS = '.dds-toast-item';\n","import { Themes } from '@usitsdasdesign/dds-ng/shared';\n\nexport interface ToastAction {\n  title: string;\n  actionFunc: ($event: Event) => unknown;\n}\n\nexport enum ToastPosition {\n  topLeft = 'top-left',\n  topCenter = 'top-center',\n  topRight = 'top-right',\n  bottomLeft = 'bottom-left',\n  bottomCenter = 'bottom-center',\n  bottomRight = 'bottom-right',\n}\n\nexport enum ToastClass {\n  toastItem = 'dds-toast-item',\n  toastContainer = 'dds-toast-container',\n}\n\nexport interface ToastOptions {\n  title?: string;\n  message?: string;\n  closeBtnIcon?: string;\n  theme?: Themes | string;\n  customClass?: string;\n  lifeTime?: number;\n  withProgressBar?: boolean;\n  limit?: number;\n  action?: ToastAction;\n  position?: ToastPosition | string;\n  isCloseIcon?: boolean;\n  isLoading?: boolean;\n  isInverse?: boolean;\n  isError?: boolean;\n}\n","import { ThemeClassesMap, ThemeMapEnum } from '@usitsdasdesign/dds-ng/core/theme';\nimport { Themes } from '@usitsdasdesign/dds-ng/shared';\n\nexport const themeClassesMap: ThemeClassesMap = {\n  [ThemeMapEnum.Themes]: {\n    [Themes.green]: 'dds-toast_green',\n    [Themes.blue]: 'dds-toast_blue',\n  },\n};\n\nexport const DEFAULT_CLOSE_BTN_ICON = 'dds-icon_close';\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  HostBinding,\n  OnDestroy,\n  OnInit,\n  Renderer2,\n  TemplateRef,\n  ViewChild,\n} from '@angular/core';\nimport { ButtonModule } from '@usitsdasdesign/dds-ng/button';\nimport { ThemeClassesMap, ThemeModule } from '@usitsdasdesign/dds-ng/core/theme';\nimport { ProgressModule } from '@usitsdasdesign/dds-ng/progress';\nimport { AdditionalClass, ExtThemes, SpinnerThemes, Themes } from '@usitsdasdesign/dds-ng/shared';\nimport { DdsConfigService } from '@usitsdasdesign/dds-ng/shared/dds-config';\nimport { SpinnerModule, SpinnerOptions } from '@usitsdasdesign/dds-ng/spinner';\nimport { EMPTY, Observable, Subscription, fromEvent, interval, map, merge, of, startWith, switchMap } from 'rxjs';\nimport { BUTTON_SPINNER_SIZE } from '../constants';\nimport { ToastAction, ToastClass, ToastPosition } from '../typings';\nimport { DEFAULT_CLOSE_BTN_ICON, themeClassesMap } from './constants';\n\n@Component({\n  selector: 'dds-toast',\n  templateUrl: 'toast.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [CommonModule, ButtonModule, SpinnerModule, ThemeModule, ProgressModule],\n})\nexport class ToastComponent implements OnInit, OnDestroy {\n  // ViewChild decorator to get references to template elements\n  @ViewChild('toastContainer', { static: true }) toastContainer: TemplateRef<HTMLElement>;\n  @ViewChild('wrap', { static: true }) wrap: ElementRef<HTMLElement>;\n  @ViewChild('actionBtn', { static: true }) actionBtn: ElementRef<HTMLElement>;\n  @ViewChild('closeBtn', { static: true }) closeBtn: ElementRef<HTMLElement>;\n\n  // HostBinding to bind the class property to the host element\n  @HostBinding('class') class: string = ToastClass.toastItem;\n\n  // Public properties for the toast component\n  public isLoading: boolean;\n  public isCloseIcon: boolean;\n  public isError: boolean;\n  public isInverse: boolean;\n  public message: string;\n  public title: string;\n  public lifeTime: number;\n  public withProgressBar: boolean;\n  public customClass: string;\n  public closeBtnIcon: string = DEFAULT_CLOSE_BTN_ICON;\n  public theme: Themes | string = this.ddsConfig.getConfig().theme;\n  public action: ToastAction;\n  public themeConfig: ThemeClassesMap = themeClassesMap;\n  public destroy: () => void;\n  public progressValue = 100;\n  public position: ToastPosition = ToastPosition.topRight;\n  public spinnerOptions: SpinnerOptions = {\n    size: BUTTON_SPINNER_SIZE,\n    theme: SpinnerThemes.dark\n  };\n\n  // Private properties for internal use\n  private openTriggerEl: HTMLButtonElement;\n  private timer$: Subscription;\n  private interval$: Observable<number>;\n  private pause$: Observable<boolean>;\n  private resume$: Observable<boolean>;\n\n  // Determines if the spinner should be inverse based on the isInverse property\n  get isSpinnerInverse(): boolean {\n    return !this.isInverse;\n  }\n\n  // Checks if there should be a divider based on the presence of action and isCloseIcon\n  get hasDivider(): boolean {\n    return this.action && this.isCloseIcon;\n  }\n\n  // Determines the button theme based on error state or provided theme\n  get btnTheme(): ExtThemes | string {\n    return this.isError ? ExtThemes.danger : this.theme ? this.theme : ExtThemes.dark;\n  }\n\n  constructor(public elementRef: ElementRef<Element>, public cdr: ChangeDetectorRef, private ddsConfig: DdsConfigService, private renderer: Renderer2) { }\n\n  // Initializes the component, sets focus, and configures the timer if lifeTime is set\n  public ngOnInit(): void {\n    this.openTriggerEl = <HTMLButtonElement>document.activeElement;\n    this.wrap.nativeElement.focus();\n    if (this.lifeTime) {\n      this.timerConfig();\n    }\n  }\n\n  // Cleans up the component, removes focus class, and unsubscribes from the timer\n  public ngOnDestroy(): void {\n    this.renderer.removeClass(document.activeElement, AdditionalClass.keyboardFocus);\n    this.openTriggerEl.focus();\n    if (this.timer$) this.timer$.unsubscribe();\n  }\n\n  // Hides the toast by calling the destroy function\n  public hideToast(): void {\n    this.destroy();\n  }\n\n  // Configures the timer for the toast's lifetime and progress bar\n  private timerConfig(): void {\n    const intervalValue = this.lifeTime / this.progressValue;\n\n    setTimeout(() => {\n      const progressEl = this.elementRef.nativeElement.querySelector('.dds-progress__value') as HTMLElement;\n      if (progressEl) progressEl.style.transition = `width ${intervalValue}ms linear`;\n    });\n\n    this.interval$ = interval(intervalValue).pipe(\n      map(() => this.progressValue - 1)\n    );\n    this.pause$ = this.withProgressBar ? fromEvent(this.elementRef.nativeElement, 'mouseenter').pipe(map(() => false)) : of(false);\n    this.resume$ = this.withProgressBar ? fromEvent(this.elementRef.nativeElement, 'mouseleave').pipe(map(() => true)) : of(true);\n\n    this.timer$ = this.setTimer();\n  }\n\n  // Sets the timer observable to handle pause and resume functionality\n  private setTimer() {\n    return merge(this.pause$, this.resume$).pipe(\n      startWith(this.interval$),\n      switchMap(val => {\n        return val ? this.interval$ : EMPTY\n      })\n    ).subscribe((value) => {\n      this.progressValue = value;\n      this.cdr.detectChanges();\n      if (!value) this.hideToast();\n    });\n  }\n}\n","<div [ngClass]=\"{\n        'dds-toast_danger': isError,\n        'dds-toast_inverse': isInverse\n      }\"\n     [theme]=\"theme\"\n     [ddsTheme]=\"themeConfig\"\n     [attr.aria-invalid]=\"isError\"\n     class=\"dds-toast {{customClass}}\"\n     role=\"alert\"\n     aria-live=\"assertive\"\n     tabindex=\"-1\"\n     #wrap>\n  <div class=\"dds-toast__wrapper\">\n    @if (isLoading) {\n      <div class=\"dds-toast__spinner\">\n        <dds-spinner [size]=\"spinnerOptions.size\"\n                     [theme]=\"spinnerOptions.theme\"\n                     [isInverse]=\"isSpinnerInverse\"></dds-spinner>\n      </div>\n    }\n\n    <div class=\"dds-toast__content\">\n      <span class=\"dds-toast__title\">{{ title }}</span>\n      <span class=\"dds-toast__message\"\n            [innerHTML]=\"message\"></span>\n    </div>\n\n    <div class=\"dds-toast__btn-container\">\n      @if (action) {\n        <dds-button [theme]=\"btnTheme\"\n                    [isInverse]=\"isInverse\"\n                    [ariaLabel]=\"action.title\"\n                    class=\"dds-toast__btn dds-toast__btn_action\"\n                    (clicked)=\"action.actionFunc($event)\"\n                    #actionBtn>{{action.title}}</dds-button>\n      }\n\n      @if (isCloseIcon) {\n        <dds-button [theme]=\"btnTheme\"\n                    [isInverse]=\"isInverse\"\n                    [ngClass]=\"{'dds-toast__btn_with-divider': hasDivider}\"\n                    [icon]=\"closeBtnIcon\"\n                    ariaLabel=\"Close\"\n                    class=\"dds-toast__btn dds-toast__btn_close\"\n                    (clicked)=\"hideToast()\"\n                    #closeBtn></dds-button>\n      }\n    </div>\n  </div>\n  @if (lifeTime && withProgressBar) {\n    <dds-progress [value]=\"progressValue\"\n                  [isInverse]=\"isInverse\"\n                  [theme]=\"theme\"\n                  class=\"dds-toast__progress\"></dds-progress>\n  }\n</div>\n\n<ng-template #toastContainer>\n  <div class=\"dds-toast-container\"></div>\n</ng-template>\n","\nimport {\n  ApplicationRef,\n  ComponentFactoryResolver,\n  ComponentRef,\n  EmbeddedViewRef,\n  Inject,\n  Injectable,\n  Injector,\n  Renderer2,\n  RendererFactory2,\n  DOCUMENT\n} from '@angular/core';\nimport { TOAST_CLASS } from '../constants';\nimport { ToastComponent } from '../toast/toast.component';\nimport { ToastClass, ToastOptions } from '../typings';\n\n// @dynamic\n@Injectable({\n  providedIn: 'root'\n})\nexport class ToastService {\n  private toastContainers = {};\n  private renderer: Renderer2;\n  private toastList: { component: ComponentRef<ToastComponent> }[] = [];\n\n  constructor(\n    private resolver: ComponentFactoryResolver,\n    private appRef: ApplicationRef,\n    private injector: Injector,\n    protected rendererFactory: RendererFactory2,\n    @Inject(DOCUMENT) private document: Document\n  ) {\n    this.renderer = rendererFactory.createRenderer(null, null);\n  }\n\n  // Create a new toast with the given options\n  public createToast(options: ToastOptions): void {\n    const toastRef = this.resolver.resolveComponentFactory(ToastComponent).create(this.injector);\n\n    this.setToastOptions(toastRef, options);\n    this.addToastToContainer(toastRef, this.getOrCreateToastContainer(toastRef), options.limit);\n    this.toastList.push({ component: toastRef });\n  }\n\n  // Close all toasts\n  public closeAll(): void {\n    this.toastList.forEach((toast) => {\n      this.remove(toast.component);\n    });\n  }\n\n  // Set options for the toast component\n  private setToastOptions(toastRef: ComponentRef<ToastComponent>, options: ToastOptions): void {\n    const toastRefInstance = toastRef.instance;\n\n    Object.keys(options).forEach((key) => {\n      toastRefInstance[key] = options[key];\n    });\n\n    toastRefInstance.destroy = () => this.remove(toastRef);\n\n    if (options.action) {\n      toastRefInstance.action = {\n        title: options.action.title,\n        actionFunc: ($event: Event) => {\n          toastRefInstance.hideToast();\n          return options.action.actionFunc($event);\n        },\n      };\n    }\n  }\n\n  // Get or create a container for the toast\n  private getOrCreateToastContainer(toastRef: ComponentRef<ToastComponent>): HTMLElement {\n    const toastContainerEmbeddedView = toastRef.instance.toastContainer.createEmbeddedView(this.document.body);\n    const toastPosition = toastRef.instance.position;\n\n    if (\n      !Object.keys(this.toastContainers).length ||\n      !this.toastContainers[toastPosition] ||\n      !this.toastContainers[toastPosition].parentNode\n    ) {\n      this.toastContainers[toastPosition] = toastContainerEmbeddedView.rootNodes[0];\n      this.renderer.addClass(this.toastContainers[toastPosition], toastPosition);\n      this.renderer.appendChild(this.document.body, this.toastContainers[toastPosition]);\n    }\n\n    return this.toastContainers[toastPosition];\n  }\n\n  // Get the number of visible toasts\n  private get numberOfToastsVisible(): number {\n    return this.document.body.querySelectorAll(TOAST_CLASS).length;\n  }\n\n  // Remove the first toast in the container\n  private removeFirstToast(): void {\n    const item = this.document.body.querySelector(TOAST_CLASS);\n\n    this.renderer.removeChild(item.parentNode, item);\n  }\n\n  // Add a toast to the container and enforce the limit\n  private addToastToContainer(toastRef: ComponentRef<ToastComponent>, container: HTMLElement, limit?: number): void {\n    const elViewRef = toastRef.hostView as EmbeddedViewRef<HTMLElement>;\n\n    this.appRef.attachView(elViewRef);\n    this.renderer.appendChild(container, elViewRef.rootNodes[0]);\n\n    if (this.numberOfToastsVisible >= limit) {\n      this.removeFirstToast();\n    }\n  }\n\n  // Remove a toast component\n  private remove(toastRef: ComponentRef<ToastComponent>): void {\n    this.appRef.detachView(toastRef.hostView);\n    toastRef.destroy();\n    this.removeEmptyContainer();\n  }\n\n  // Remove empty toast containers\n  private removeEmptyContainer(): void {\n    const containerElms = document.querySelectorAll(`.${ToastClass.toastContainer}`);\n\n    containerElms.forEach((item) => {\n      if (!item.childNodes.length && item.parentNode) {\n        this.renderer.removeChild(item.parentNode, item);\n      }\n    });\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { ToastService } from './services/toast.service';\nimport { ToastComponent } from './toast/toast.component';\n\n@NgModule({\n  declarations: [],\n  imports: [ToastComponent],\n  exports: [ToastComponent],\n  providers: [ToastService],\n})\nexport class ToastModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}