{"version":3,"file":"ngx-snotifire.mjs","sources":["../../../projects/ngx-snotifire/src/lib/decorators/set-toast-type.decorator.ts","../../../projects/ngx-snotifire/src/lib/models/snotifire-event.type.ts","../../../projects/ngx-snotifire/src/lib/models/snotifire-position.type.ts","../../../projects/ngx-snotifire/src/lib/models/snotifire.type.ts","../../../projects/ngx-snotifire/src/lib/models/snotifire.model.ts","../../../projects/ngx-snotifire/src/lib/decorators/transform-argument.decorator.ts","../../../projects/ngx-snotifire/src/lib/components/toast/notifire-toast.model.ts","../../../projects/ngx-snotifire/src/lib/utils.ts","../../../projects/ngx-snotifire/src/lib/services/notification.service.ts","../../../projects/ngx-snotifire/src/lib/components/buttons/buttons.component.ts","../../../projects/ngx-snotifire/src/lib/components/buttons/buttons.component.html","../../../projects/ngx-snotifire/src/lib/pipes/truncate.pipe.ts","../../../projects/ngx-snotifire/src/lib/components/prompt/prompt.component.ts","../../../projects/ngx-snotifire/src/lib/components/prompt/prompt.component.html","../../../projects/ngx-snotifire/src/lib/components/toast/toast.component.ts","../../../projects/ngx-snotifire/src/lib/components/toast/toast.component.html","../../../projects/ngx-snotifire/src/lib/pipes/keys.pipe.ts","../../../projects/ngx-snotifire/src/lib/components/ngx-notifire/ngx-snotifire.component.ts","../../../projects/ngx-snotifire/src/lib/components/ngx-notifire/ngx-snotifire.component.html","../../../projects/ngx-snotifire/src/lib/ngx-snotifire.module.ts","../../../projects/ngx-snotifire/src/lib/defaults/toast-defaults.ts","../../../projects/ngx-snotifire/src/public-api.ts","../../../projects/ngx-snotifire/src/ngx-snotifire.ts"],"sourcesContent":["import { SnotifireModel, SnotifireType } from '../models';\n\n/**\n * Defines toast style depending on method name\n * @param target any\n * @param propertyKey NotificationType\n * @param descriptor PropertyDescriptor\n * @returns value: ((...args: any[]) => any)\n */\nexport function SetToastType(\n  target: any,\n  propertyKey: string,\n  descriptor: PropertyDescriptor\n) {\n  return {\n    value(...args: any[]) {\n      (args[0] as SnotifireModel).config = {\n        ...(args[0] as SnotifireModel).config,\n        type: propertyKey as SnotifireType,\n      };\n      return descriptor.value.apply(this, args);\n    },\n  };\n}\n","export enum SnotifireEventType {\n  MOUNTED = 'mounted',\n  BEFORE_SHOW = 'beforeShow',\n  SHOWN = 'shown',\n  INPUT = 'input',\n  CLICK = 'click',\n  MOUSE_ENTER = 'mouseenter',\n  MOUSE_LEAVE = 'mouseleave',\n  BEFORE_HIDE = 'beforeHide',\n  HIDDEN = 'hidden',\n  DESTROYED = 'destroyed',\n}\n","export enum SnotificationPositionType {\n  LEFT_TOP = 'leftTop',\n  LEFT_CENTER = 'leftCenter',\n  LEFT_BOTTOM = 'leftBottom',\n  RIGHT_TOP = 'rightTop',\n  RIGHT_CENTER = 'rightCenter',\n  RIGHT_BOTTOM = 'rightBottom',\n  CENTER_TOP = 'centerTop',\n  CENTER_CENTER = 'centerCenter',\n  CENTER_BOTTOM = 'centerBottom',\n}\n","export enum SnotifireType {\n  SUCCESS = 'success',\n  INFO = 'info',\n  WARNING = 'warning',\n  ERROR = 'error',\n  ASYNC = 'async',\n  CONFIRM = 'confirm',\n  PROMPT = 'prompt',\n}\n","import { SafeHtml } from '@angular/platform-browser';\nimport { SnotifireConfig } from './snotifire-config.interface';\nimport { SnotifireType } from './snotifire.type';\n\nexport class SnotifireModel {\n  constructor(\n    public type?: SnotifireType,\n    /**\n     * Notification Title\n     */\n    public title?: string,\n    /**\n     * Notification message\n     */\n    public body?: string,\n    /**\n     * Config object\n     */\n    public config?: SnotifireConfig,\n    /**\n     * Html content\n     */\n    public html?: string | SafeHtml\n  ) {}\n}\n","import { SnotifireConfig, SnotifireModel, SnotifireType } from '../models';\n\n//todo: cp check if async\n/**\n * Transform arguments to Snotify object\n * @param target any\n * @param propertyKey SnotifyTypeType\n * @param descriptor PropertyDescriptor\n * @returns Snotify\n */\nexport function TransformArgument(\n  target: any,\n  propertyKey: string,\n  descriptor: PropertyDescriptor\n) {\n  if (propertyKey === SnotifireType.ASYNC) {\n    return {\n      value(...args: any[]) {\n        let result;\n        if (args.length === 2) {\n          result = {\n            title: null,\n            body: args[0],\n            config: null,\n            action: args[1],\n          };\n        } else if (args.length === 3) {\n          if (typeof args[1] === 'string') {\n            result = {\n              title: args[1],\n              body: args[0],\n              config: null,\n              action: args[2],\n            };\n          } else {\n            result = {\n              title: null,\n              body: args[0],\n              config: args[2],\n              action: args[1],\n            };\n          }\n        } else {\n          result = {\n            title: args[1],\n            body: args[0],\n            config: args[3],\n            action: args[2],\n          };\n        }\n        return descriptor.value.apply(this, [\n          result as unknown as Notification,\n        ]);\n      },\n    };\n  } else {\n    return {\n      value(...args: any[]) {\n        let result;\n        if (args.length === 1) {\n          result = {\n            title: null,\n            body: args[0],\n            config: null,\n          };\n        } else if (args.length === 3) {\n          result = {\n            title: args[1],\n            body: args[0],\n            config: args[2],\n          };\n        } else {\n          result = {\n            title: null,\n            config: null,\n            body: args[0],\n            [typeof args[1] === 'string' ? 'title' : 'config']: args[1],\n          };\n        }\n        return descriptor.value.apply(this, [\n          result as unknown as Notification,\n        ]);\n      },\n    };\n  }\n}\n","import { Subject, Subscription } from 'rxjs';\nimport { SnotifireConfig } from '../../models/snotifire-config.interface';\nimport { SnotifireEventType } from '../../models/snotifire-event.type';\nimport { SnotifireType } from '../../models/snotifire.type';\n\n/**\n * Toast main model\n */\nexport class SnotifireToastModel {\n  /**\n   * Emits NotifireEventType\n   */\n  readonly eventEmitter = new Subject<SnotifireEventType>();\n\n  /**\n   * Holds all subscribers because we need to unsubscribe from all before toast get destroyed\n   */\n  private eventsHolder: Subscription[] = [];\n\n  /**\n   * Toast prompt value\n   */\n  value?: string;\n\n  /**\n   * Toast validator\n   */\n  valid: boolean = true;\n\n  constructor(\n    public readonly id: number,\n    public readonly title: string,\n    public readonly body: string,\n    public readonly config: SnotifireConfig\n  ) {\n    if (this.config && this.config.type === SnotifireType.PROMPT) {\n      this.value = '';\n    }\n    this.on(SnotifireEventType.HIDDEN, () => {\n      this.eventsHolder.forEach((subscription: Subscription) => {\n        subscription.unsubscribe();\n      });\n    });\n  }\n  /**\n   * Subscribe to toast events\n   * @returns this\n   * @param event NotificationEventType\n   * @param action (toast: this) => void\n   */\n  on(event: SnotifireEventType, action: (toast: this) => void): this {\n    this.eventsHolder.push(\n      this.eventEmitter.subscribe((e: SnotifireEventType) => {\n        if (e === event) {\n          action(this);\n        }\n      })\n    );\n    return this;\n  }\n\n  /**\n   * Tests if a toast equals this toast.\n   * @returns boolean true then equals else false.\n   * @param toast notifire-toast\n   */\n  equals(toast: SnotifireToastModel): boolean {\n    return this.config && toast.config\n      ? this.body === toast.body &&\n          this.title === toast.title &&\n          this.config.type === toast.config.type\n      : this.body === toast.body && this.title === toast.title;\n  }\n}\n","/**\n * Deep merge objects.\n * @param sources Array<Object<any>>\n * @returns Object<any>\n */\nexport function mergeDeep(...sources: any[]) {\n  const target: any = {};\n  if (!sources.length) {\n    return target;\n  }\n\n  while (sources.length > 0) {\n    const source = sources.shift();\n    if (isObject(source)) {\n      for (const key in source) {\n        if (isObject(source[key])) {\n          target[key] = mergeDeep(target[key], source[key]);\n        } else {\n          Object.assign(target, { [key]: source[key] });\n        }\n      }\n    }\n  }\n  return target;\n}\n/**\n * Generates random id\n * @return number\n */\nexport function uuid(): number {\n  return Math.floor(Math.random() * (Date.now() - 1)) + 1;\n}\n/**\n * Simple is object check.\n * @param item Object<any>\n * @returns boolean\n */\nexport function isObject(item: any): boolean {\n  return item && typeof item === 'object' && !Array.isArray(item);\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { SafeHtml } from '@angular/platform-browser';\nimport {\n  catchError,\n  finalize,\n  from,\n  Observable,\n  of,\n  Subject,\n  tap,\n  throwError,\n} from 'rxjs';\nimport { SetToastType } from '../decorators/set-toast-type.decorator';\nimport { TransformArgument } from '../decorators/transform-argument.decorator';\nimport { SnotifireConfig, SnotifireEventType, SnotifireType } from '../models';\nimport { SnotifireDefaults } from '../defaults/defaults.interface';\nimport { SnotifireModel } from '../models/snotifire.model';\nimport { SnotifireToastModel } from '../components/toast/notifire-toast.model';\nimport { mergeDeep, uuid } from '../utils';\n\n@Injectable()\nexport class SnotifireService {\n  /**\n   * Minimum display time of the notification message\n   */\n  private readonly minimumDisplayedTime = 3000;\n\n  /**\n   * Emits Notifire Notifications\n   */\n  readonly emitter = new Subject<SnotifireToastModel[]>();\n\n  readonly toastDeleted = new Subject<number>();\n  readonly toastChanged = new Subject<SnotifireToastModel>();\n\n  notifications: Array<SnotifireToastModel> = [];\n\n  constructor(\n    @Inject('snotifireConfig') public defaultConfig: SnotifireDefaults\n  ) {}\n\n  /**\n   * Creates toast and add it to array, returns toast id\n   * @param NotificationModel NotificationModel\n   * @return number\n   */\n  create(notif: SnotifireModel): SnotifireToastModel {\n    if (this.defaultConfig.type && notif.config && notif.config.type) {\n      const config = mergeDeep(\n        this.defaultConfig.snotifireConfig,\n        this.defaultConfig.type[notif.config.type],\n        notif.config\n      );\n      const toast = new SnotifireToastModel(\n        uuid(),\n        notif.title ? notif.title : '',\n        notif.body ? notif.body : '',\n        config\n      );\n      this.add(toast);\n      return toast;\n    }\n    const config = mergeDeep(this.defaultConfig.snotifireConfig, notif.config);\n    const defaulToast = new SnotifireToastModel(\n      uuid(),\n      notif.title ? notif.title : '',\n      notif.body ? notif.body : '',\n      config\n    );\n    this.add(defaulToast);\n    return defaulToast;\n  }\n  /**\n   * If ID passed, emits toast animation remove, if ID & REMOVE passed, removes toast from notifications array\n   * @param id number\n   * @param remove boolean\n   */\n  remove(id: number, remove?: boolean): void {\n    if (!id) {\n      return this.clear();\n    }\n    if (remove) {\n      this.notifications = this.notifications.filter(\n        (toast) => toast.id !== id\n      );\n      return this.emit();\n    }\n    this.toastDeleted.next(id);\n  }\n\n  setDefaults(defaults: SnotifireDefaults): SnotifireDefaults {\n    const mergedConfig = (this.defaultConfig = mergeDeep(\n      this.defaultConfig,\n      defaults\n    ) as SnotifireDefaults);\n    return mergedConfig;\n  }\n\n  /**\n   * Clear notifications array\n   */\n  clear(): void {\n    this.notifications = [];\n    this.emit();\n  }\n\n  /**\n   * add NotifireToast to notifications array\n   * @param toast NotifireToast\n   */\n  private add(toast: SnotifireToastModel): void {\n    if (\n      this.defaultConfig &&\n      this.defaultConfig.global &&\n      this.defaultConfig.global.filterDuplicates &&\n      this.containsToast(toast)\n    ) {\n      if (!this.defaultConfig.global.filterDuplicates) {\n        throw new Error('Missing global config');\n      }\n      return;\n    }\n    if (\n      this.defaultConfig &&\n      this.defaultConfig.global &&\n      this.defaultConfig.global.newOnTop\n    ) {\n      this.notifications.unshift(toast);\n    } else {\n      this.notifications.push(toast);\n    }\n    this.emit();\n  }\n\n  /**\n   * emit changes in notifications array\n   */\n  private emit(): void {\n    this.emitter.next(this.notifications.slice());\n  }\n\n  /**\n   * checks if the toast is in the collection.\n   * @param inToast NotifireToast\n   * @returns boolean\n   */\n  private containsToast(inToast: SnotifireToastModel): boolean {\n    return this.notifications.some((toast) => toast.equals(inToast));\n  }\n\n  /**\n   * Creates empty toast with html string inside\n   * @param html string | SafeHtml\n   * @param config NotifireConfig\n   * @returns number\n   */\n  html(html: string | SafeHtml, config?: SnotifireConfig): SnotifireToastModel {\n    return this.create({\n      title: undefined,\n      body: undefined,\n      config: {\n        ...config,\n        ...{ html },\n      },\n    });\n  }\n  /**\n   * Create toast with success style returns toast id;\n   * @param body string\n   * @returns number\n   */\n  success(body: string): SnotifireToastModel;\n  /**\n   * Create toast with success style returns toast id;\n   * @param body string\n   * @param title string\n   * @returns number\n   */\n  success(body: string, title: string): SnotifireToastModel;\n  /**\n   * Create toast with success style returns toast id;\n   * @param body string\n   * @param config NotificationConfig\n   * @returns number\n   */\n  success(body: string, config: SnotifireConfig): SnotifireToastModel;\n  /**\n   * Create toast with success style  returns toast id;\n   * @param [body] string\n   * @param [title] string\n   * @param [config] NotificationConfig\n   * @returns number\n   */\n  success(\n    body: string,\n    title: string,\n    config: SnotifireConfig\n  ): SnotifireToastModel;\n\n  /**\n   * Transform toast arguments into NotificationModel object\n   */\n  @TransformArgument\n  /**\n   * Determines current toast type and collects default configuration\n   */\n  @SetToastType\n  success(args: any): SnotifireToastModel {\n    if (!args.config) {\n      throw new Error('Missing config, please configure service accordingly');\n    }\n    return this.create(args);\n  }\n\n  /**\n   * Create toast with error style returns toast id;\n   * @param body string\n   * @returns number\n   */\n  error(body: string): SnotifireToastModel;\n  /**\n   * Create toast with error style returns toast id;\n   * @param body string\n   * @param title string\n   * @returns number\n   */\n  error(body: string, title: string): SnotifireToastModel;\n  /**\n   * Create toast with error style returns toast id;\n   * @param body string\n   * @param config NotificationConfig\n   * @returns number\n   */\n  error(body: string, config: SnotifireConfig): SnotifireToastModel;\n  /**\n   * Create toast with error style  returns toast id;\n   * @param [body] string\n   * @param [title] string\n   * @param [config] NotificationConfig\n   * @returns number\n   */\n  error(\n    body: string,\n    title: string,\n    config: SnotifireConfig\n  ): SnotifireToastModel;\n  /**\n   * Transform toast arguments into NotificationModel object\n   */\n  @TransformArgument\n  /**\n   * Determines current toast type and collects default configuration\n   */\n  @SetToastType\n  error(args: any): SnotifireToastModel {\n    return this.create(args);\n  }\n\n  /**\n   * Create toast with info style returns toast id;\n   * @param body string\n   * @returns number\n   */\n  info(body: string): SnotifireToastModel;\n  /**\n   * Create toast with info style returns toast id;\n   * @param body string\n   * @param title string\n   * @returns number\n   */\n  info(body: string, title: string): SnotifireToastModel;\n  /**\n   * Create toast with info style returns toast id;\n   * @param body string\n   * @param config NotificationConfig\n   * @returns number\n   */\n  info(body: string, config: SnotifireConfig): SnotifireToastModel;\n  /**\n   * Create toast with info style  returns toast id;\n   * @param [body] string\n   * @param [title] string\n   * @param [config] NotificationConfig\n   * @returns number\n   */\n  info(\n    body: string,\n    title: string,\n    config: SnotifireConfig\n  ): SnotifireToastModel;\n  /**\n   * Transform toast arguments into NotificationModel object\n   */\n  @TransformArgument\n  /**\n   * Determines current toast type and collects default configuration\n   */\n  @SetToastType\n  info(args: any): SnotifireToastModel {\n    return this.create(args);\n  }\n\n  /**\n   * Create toast with warning style returns toast id;\n   * @param body string\n   * @returns number\n   */\n  warning(body: string): SnotifireToastModel;\n  /**\n   * Create toast with warning style returns toast id;\n   * @param body string\n   * @param title string\n   * @returns number\n   */\n  warning(body: string, title: string): SnotifireToastModel;\n  /**\n   * Create toast with warning style returns toast id;\n   * @param body string\n   * @param config NotificationConfig\n   * @returns number\n   */\n  warning(body: string, config: SnotifireConfig): SnotifireToastModel;\n  /**\n   * Create toast with warning style  returns toast id;\n   * @param [body] string\n   * @param [title] string\n   * @param [config] NotificationConfig\n   * @returns number\n   */\n  warning(\n    body: string,\n    title: string,\n    config: SnotifireConfig\n  ): SnotifireToastModel;\n  /**\n   * Transform toast arguments into NotificationModel object\n   */\n  @TransformArgument\n  /**\n   * Determines current toast type and collects default configuration\n   */\n  @SetToastType\n  warning(args: any): SnotifireToastModel {\n    return this.create(args);\n  }\n\n  /**\n   * Create toast with confirm style returns toast id;\n   * @param body string\n   * @returns number\n   */\n  confirm(body: string): SnotifireToastModel;\n  /**\n   * Create toast with confirm style returns toast id;\n   * @param body string\n   * @param title string\n   * @returns number\n   */\n  confirm(body: string, title: string): SnotifireToastModel;\n  /**\n   * Create toast with confirm style returns toast id;\n   * @param body string\n   * @param config NotificationConfig\n   * @returns number\n   */\n  confirm(body: string, config: SnotifireConfig): SnotifireToastModel;\n  /**\n   * Create toast with confirm style  returns toast id;\n   * @param [body] string\n   * @param [title] string\n   * @param [config] NotificationConfig\n   * @returns number\n   */\n  confirm(\n    body: string,\n    title: string,\n    config: SnotifireConfig\n  ): SnotifireToastModel;\n  /**\n   * Transform toast arguments into NotificationModel object\n   */\n  @TransformArgument\n  /**\n   * Determines current toast type and collects default configuration\n   */\n  @SetToastType\n  confirm(args: any): SnotifireToastModel {\n    return this.create(args);\n  }\n\n  /**\n   * Create toast with Prompt style with two buttons, returns toast id;\n   * @param body string\n   * @returns number\n   */\n  prompt(body: string): SnotifireToastModel;\n  /**\n   * Create toast with Prompt style with two buttons, returns toast id;\n   * @param body string\n   * @param title string\n   * @returns number\n   */\n  prompt(body: string, title: string): SnotifireToastModel;\n  /**\n   * Create toast with Prompt style with two buttons, returns toast id;\n   * @param body string\n   * @param config NotificationConfig\n   * @returns number\n   */\n  prompt(body: string, config: SnotifireConfig): SnotifireToastModel;\n  /**\n   * Create toast with Prompt style with two buttons, returns toast id;\n   * @param [body] string\n   * @param [title] string\n   * @param [config] NotificationConfig\n   * @returns number\n   */\n  prompt(\n    body: string,\n    title: string,\n    config: SnotifireConfig\n  ): SnotifireToastModel;\n  /**\n   * Transform toast arguments into NotificationModel object\n   */\n  @TransformArgument\n  /**\n   * Determines current toast type and collects default configuration\n   */\n  @SetToastType\n  prompt(args: any): SnotifireToastModel {\n    return this.create(args);\n  }\n\n  /**\n   * Creates async toast with Info style. Pass action, and resolve or reject it.\n   * @param body string\n   * @param action Promise<NotificationModel> | Observable<NotificationModel>\n   * @returns number\n   */\n  async(\n    body: string,\n    action: Promise<SnotifireModel> | Observable<SnotifireModel>\n  ): Observable<any>;\n  /**\n   * Creates async toast with Info style. Pass action, and resolve or reject it.\n   * @param body string\n   * @param title string\n   * @param action Promise<NotificationModel> | Observable<NotificationModel>\n   * @returns number\n   */\n  async(\n    body: string,\n    title: string,\n    action: Promise<SnotifireModel> | Observable<SnotifireModel>\n  ): Observable<any>;\n  /**\n   * Creates async toast with Info style. Pass action, and resolve or reject it.\n   * @param body string\n   * @param action Promise<NotificationModel> | Observable<NotificationModel>\n   * @param [config] NotificationConfig\n   * @returns number\n   */\n  async(\n    body: string,\n    action: Promise<SnotifireModel> | Observable<SnotifireModel>,\n    config: SnotifireConfig\n  ): Observable<any>;\n  /**\n   * Creates async toast with Info style. Pass action, and resolve or reject it.\n   * @param body string\n   * @param title string\n   * @param action Promise<NotificationModel> | Observable<NotificationModel>\n   * @param [config] NotificationConfig\n   * @returns number\n   */\n  async(\n    body: string,\n    title: string,\n    action: Promise<SnotifireModel> | Observable<SnotifireModel>,\n    config: SnotifireConfig\n  ): Observable<any>;\n  /**\n   * Transform toast arguments into NotificationModel object\n   */\n  @TransformArgument\n  /**\n   * Determines current toast type and collects default configuration\n   */\n  @SetToastType\n  async(args: any): Observable<any> {\n    let async: Observable<any>;\n    if (args.action instanceof Promise) {\n      async = from(args.action);\n    } else {\n      async = args.action;\n    }\n\n    const toast = this.create(args);\n    let failed = false;\n    const asyncAtion = async.pipe(\n      tap((next) => {\n        console.log('called'), this.mergeToast(toast, next);\n      }),\n      catchError((error) => {\n        failed = true;\n        return throwError(() => error);\n      }),\n      finalize(() => {\n        this.mergeToast(\n          toast,\n          {},\n          failed === true ? SnotifireType.ERROR : SnotifireType.SUCCESS\n        );\n      })\n    );\n    toast.on(SnotifireEventType.MOUNTED, () => {\n      console.log('mounted');\n      return asyncAtion;\n    });\n    return asyncAtion;\n\n    // const toast = this.create(args);\n\n    // toast.on(SnotifireEventType.MOUNTED, () => {\n    //   const subscription: Subscription = async.subscribe({\n    //     next: (next?: SnotifireModel) => {\n    //       this.mergeToast(toast, next);\n    //     },\n    //     error: (error?: SnotifireModel) => {\n    //       this.mergeToast(toast, error, SnotifireType.ERROR);\n    //       subscription.unsubscribe();\n    //     },\n    //     complete: () => {\n    //       this.mergeToast(toast, {}, SnotifireType.SUCCESS);\n    //       subscription.unsubscribe();\n    //     },\n    //   });\n    // });\n\n    // return toast;\n  }\n\n  private mergeToast(toast: any, next: any, type?: SnotifireType) {\n    if (next.body) {\n      toast.body = next.body;\n    }\n    if (next.title) {\n      toast.title = next.title;\n    }\n\n    if (type && this.defaultConfig) {\n      console.log(type);\n      toast.config = mergeDeep(\n        toast.config,\n        this.defaultConfig.global,\n        this.defaultConfig.snotifireConfig?.type,\n        { type },\n        next.config\n      );\n    } else {\n      toast.config = mergeDeep(toast.config, next.config);\n    }\n    if (next.html) {\n      toast.config.html = next.html;\n    }\n    this.emit();\n    this.toastChanged.next(toast);\n  }\n  /**\n   * returns SnotifyToast object\n   * @param id Number\n   * @return SnotifyToast|undefined\n   */\n  get(id: number): SnotifireToastModel | undefined {\n    return (\n      this.notifications && this.notifications.find((toast) => toast.id === id)\n    );\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  OnInit,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { SnotifireToastModel } from '../toast/notifire-toast.model';\nimport { SnotifireService } from '../../services';\n\n@Component({\n  selector: 'notifire-button',\n  templateUrl: './buttons.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\n/**\n * Buttons component\n */\nexport class ButtonsComponent {\n  /**\n   * Get buttons Array\n   */\n  @Input() toast!: SnotifireToastModel;\n\n  constructor(private readonly service: SnotifireService) {}\n\n  /**\n   * remove toast\n   */\n  remove() {\n    this.service.remove(this.toast.id);\n  }\n}\n","<div class=\"notifire-toast__buttons\">\n    <ng-container *ngIf=\"toast.config\">\n        <button\n            type=\"button\"\n            *ngFor=\"let button of toast.config.buttons\"\n            [ngClass]=\"{ 'notifire-toast__buttons--bold': button.bold }\"\n            (click)=\"button.action ? button.action(toast) : remove()\"\n        >\n            {{ button.text }}\n        </button>\n    </ng-container>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'truncate',\n})\n\n/**\n * Truncate toast text pipe\n */\nexport class TruncatePipe implements PipeTransform {\n  private readonly DEFAULT_LIMIT = 40;\n  private readonly DEFAULT_TRAIL = '...';\n  transform(value: string, ...args: Array<any>): any {\n    const limit = args.length > 0 ? parseInt(args[0], 10) : this.DEFAULT_LIMIT;\n\n    return value.length > limit\n      ? value.substring(0, limit) +\n          (args.length > 1 ? args[1] : this.DEFAULT_TRAIL)\n      : value;\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  OnInit,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { SnotifireEventType } from '../../models';\nimport { SnotifireToastModel } from '../toast/notifire-toast.model';\n\n@Component({\n  selector: 'ngx-snotify-prompt',\n  templateUrl: './prompt.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class PromptComponent {\n  inputType = SnotifireEventType.INPUT;\n  /**\n   * Get PROMPT placeholder\n   */\n  @Input() toast!: SnotifireToastModel;\n  /**\n   * Is PROMPT focused\n   */\n  isPromptFocused = false;\n\n  getValue($event: any): string {\n    return $event.target.value;\n  }\n}\n","<span\n    class=\"notifire-toast__input\"\n    [ngClass]=\"{ 'notifire-toast__input--filled': isPromptFocused }\"\n>\n    <input\n        (input)=\"toast.value = getValue($event); toast.eventEmitter.next(inputType)\"\n        autofocus\n        class=\"notifire-toast__input__field\"\n        type=\"text\"\n        [id]=\"toast.id\"\n        (focus)=\"isPromptFocused = true\"\n        (blur)=\"isPromptFocused = !!toast.value && !!toast.value.length\"\n    >\n    <label\n        class=\"notifire-toast__input__label\"\n        [for]=\"toast.id\"\n    >\n        <span\n            class=\"notifire-toast__input__labelContent\"\n            *ngIf=\"toast.config && toast.config.placeholder \"\n        >\n            {{ toast.config.placeholder | truncate }}\n        </span>\n    </label>\n</span>\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { Subject, takeUntil } from 'rxjs';\nimport { SnotifireEventType, SnotifireType } from '../../models';\nimport { SnotifireToastModel } from './notifire-toast.model';\nimport { SnotifireService } from '../../services';\n\n@Component({\n  selector: 'ngx-toast',\n  templateUrl: './toast.component.html',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class ToastComponent implements OnInit, OnDestroy {\n  private unsubscribe$ = new Subject<void>();\n\n  /**\n   * Get toast from notifications array\n   */\n  @Input() toast!: SnotifireToastModel;\n  @Output() stateChanged = new EventEmitter<SnotifireEventType>();\n\n  /**\n   * requestAnimationFrame id\n   */\n  animationFrame!: number;\n\n  /**\n   * Toast state\n   */\n  state = {\n    paused: false,\n    progress: 0,\n    animation: '',\n    isDestroying: false,\n    promptType: SnotifireType.PROMPT,\n  };\n\n  constructor(private readonly service: SnotifireService) {}\n\n  ngOnInit(): void {\n    this.service.toastChanged\n      .pipe(takeUntil(this.unsubscribe$))\n      .subscribe((toast: SnotifireToastModel) => {\n        if (this.toast.id === toast.id) {\n          this.initToast();\n        }\n      });\n\n    this.service.toastDeleted\n      .pipe(takeUntil(this.unsubscribe$))\n      .subscribe((id) => {\n        if (this.toast.id === id) {\n          this.onRemove();\n        }\n      });\n    if (this.toast && this.toast.config && !this.toast.config.timeout) {\n      this.toast.config.showProgressBar = false;\n    }\n\n    this.toast.eventEmitter.next(SnotifireEventType.MOUNTED);\n    this.state.animation = 'notifire-toast--in';\n  }\n  ngAfterContentInit() {\n    if (\n      this.service.defaultConfig.snotifireConfig &&\n      this.service.defaultConfig.snotifireConfig.animation\n    ) {\n      setTimeout(() => {\n        this.stateChanged.emit(SnotifireEventType.BEFORE_SHOW);\n        this.toast.eventEmitter.next(SnotifireEventType.BEFORE_SHOW);\n        this.state.animation =\n          this.toast.config &&\n          this.toast.config.animation &&\n          this.toast.config.animation.enter\n            ? this.toast.config.animation.enter\n            : '';\n      }, this.service.defaultConfig.snotifireConfig.animation.time / 5); // time to show toast push animation (notifire-toast--in)\n    }\n  }\n  /**\n   * Trigger beforeDestroy lifecycle. Removes toast\n   */\n  onRemove() {\n    this.state.isDestroying = true;\n    this.toast.eventEmitter.next(SnotifireEventType.BEFORE_HIDE);\n    this.stateChanged.emit(SnotifireEventType.BEFORE_HIDE);\n    this.state.animation =\n      (this.toast.config &&\n        this.toast.config.animation &&\n        this.toast.config.animation.exit) ||\n      '';\n    setTimeout(() => {\n      this.stateChanged.emit(SnotifireEventType.HIDDEN);\n      this.state.animation = 'notifire-toast--out';\n      this.toast.eventEmitter.next(SnotifireEventType.HIDDEN);\n      setTimeout(\n        () => this.service.remove(this.toast.id, true),\n        this.toast.config &&\n          this.toast.config.animation &&\n          this.toast.config.animation.time / 2\n      );\n    }, this.toast.config && this.toast.config.animation && this.toast.config.animation.time / 2);\n  }\n  /**\n   * Trigger OnClick lifecycle\n   */\n  onClick() {\n    this.toast.eventEmitter.next(SnotifireEventType.CLICK);\n    if (this.toast && this.toast.config && this.toast.config.closeOnClick) {\n      this.service.remove(this.toast.id);\n    }\n  }\n  /**\n   * Trigger onHoverEnter lifecycle\n   */\n  onMouseEnter() {\n    this.toast.eventEmitter.next(SnotifireEventType.MOUSE_ENTER);\n    if (this.toast && this.toast.config && this.toast.config.pauseOnHover) {\n      this.state.paused = true;\n    }\n  }\n\n  /**\n   * Trigger onHoverLeave lifecycle\n   */\n  onMouseLeave() {\n    if (\n      this.toast &&\n      this.toast.config &&\n      this.toast.config.pauseOnHover &&\n      this.toast.config.timeout\n    ) {\n      this.state.paused = false;\n      this.startTimeout(this.toast.config.timeout * this.state.progress);\n    }\n    this.toast.eventEmitter.next(SnotifireEventType.MOUSE_LEAVE);\n  }\n  /**\n   * Remove toast completely after animation\n   */\n  onExitTransitionEnd() {\n    if (this.state.isDestroying) {\n      return;\n    }\n    this.initToast();\n    this.toast.eventEmitter.next(SnotifireEventType.SHOWN);\n  }\n\n  /*\n   Common\n   */\n\n  /**\n   * Initialize base toast config\n   *\n   */\n  initToast(): void {\n    if (\n      (this.toast && this.toast.config && this.toast.config.timeout\n        ? this.toast.config.timeout\n        : 0) > 0\n    ) {\n      this.startTimeout(0);\n    }\n  }\n  /**\n   * Start progress bar\n   * @param startTime number\n   */\n  startTimeout(startTime: number = 0) {\n    const start = performance.now();\n    const calculate = () => {\n      this.animationFrame = requestAnimationFrame((timestamp) => {\n        const runtime = timestamp + startTime - start;\n        const progress = Math.min(\n          runtime /\n            (this.toast && this.toast.config && this.toast.config.timeout\n              ? this.toast.config.timeout\n              : 1),\n          1\n        );\n        if (this.state.paused) {\n          cancelAnimationFrame(this.animationFrame);\n        } else if (\n          runtime <\n          (this.toast && this.toast.config && this.toast.config.timeout\n            ? this.toast.config.timeout\n            : 1)\n        ) {\n          this.state.progress = progress;\n          calculate();\n        } else {\n          this.state.progress = 1;\n          cancelAnimationFrame(this.animationFrame);\n          this.service.remove(this.toast.id);\n        }\n      });\n    };\n    calculate();\n  }\n\n  ngOnDestroy(): void {\n    this.unsubscribe$.next();\n    this.unsubscribe$.complete();\n  }\n}\n","<ng-container *ngIf=\"toast && toast.config\">\n    <div\n        [attr.role]=\"toast.config.type === state.promptType ? 'dialog' : 'alert'\"\n        [attr.aria-labelledby]=\"'snotify_' + toast.id\"\n        [attr.aria-modal]=\"toast.config.type === state.promptType\"\n        [ngClass]=\"[\n  'notifire-toast animated',\n  'snotify-' + toast.config.type,\n  state.animation,  toast.valid === undefined ? '' : toast.valid ? 'snotifyToast--valid' : 'snotifyToast--invalid'\n]\"\n        [ngStyle]=\"{\n  '-webkit-transition': toast.config.animation && toast.config.animation.time  + 'ms',\n  transition:  toast.config.animation && toast.config.animation.time + 'ms',\n  '-webkit-animation-duration':  toast.config.animation &&  toast.config.animation.time + 'ms',\n  'animation-duration':  toast.config.animation && toast.config.animation.time + 'ms'\n}\"\n        (animationend)=\"onExitTransitionEnd()\"\n        (click)=\"onClick()\"\n        (mouseenter)=\"onMouseEnter()\"\n        (mouseleave)=\"onMouseLeave()\"\n    >\n        <div\n            class=\"notifire-toast__progressBar\"\n            *ngIf=\"toast.config.showProgressBar\"\n        >\n            <span\n                class=\"notifire-toast__progressBar__percentage\"\n                [ngStyle]=\"{ width: state.progress * 100 + '%' }\"\n            ></span>\n        </div>\n        <div\n            class=\"notifire-toast__inner\"\n            *ngIf=\"!toast.config.html; else toastHTML\"\n        >\n            <div\n                class=\"notifire-toast__title\"\n                [attr.id]=\"'snotify_' + toast.id\"\n                *ngIf=\"toast.title\"\n            >\n                {{ toast.title | truncate: toast.config.titleMaxLength }}\n            </div>\n            <div\n                class=\"notifire-toast__body\"\n                *ngIf=\"toast.body\"\n            >\n                {{ toast.body | truncate: toast.config.bodyMaxLength }}\n            </div>\n            <ngx-snotify-prompt\n                *ngIf=\"toast.config.type === state.promptType\"\n                [toast]=\"toast\"\n            >\n            </ngx-snotify-prompt>\n            <div\n                *ngIf=\"!toast.config.icon; else elseBlock\"\n                [ngClass]=\"['snotifire-icon', toast.config.iconClass || 'snotifire-icon--' + toast.config.type]\"\n            ></div>\n            <ng-template #elseBlock>\n                <img\n                    class=\"snotifire-icon\"\n                    [src]=\"toast.config.icon\"\n                >\n            </ng-template>\n        </div>\n        <ng-template #toastHTML>\n            <div\n                class=\"notifire-toast__inner\"\n                [innerHTML]=\"toast.config.html\"\n            ></div>\n        </ng-template>\n        <notifire-button\n            *ngIf=\"toast.config.buttons\"\n            [toast]=\"toast\"\n        ></notifire-button>\n    </div>\n</ng-container>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'keys',\n  pure: false,\n})\n/**\n * Extract object keys pipe\n */\nexport class KeysPipe implements PipeTransform {\n  transform(value: any): any {\n    if (!value) {\n      return value;\n    }\n    return Object.keys(value);\n  }\n}\n","import {\n  AfterViewInit,\n  Component,\n  OnDestroy,\n  OnInit,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { Subject, Subscription, takeUntil } from 'rxjs';\nimport { SnotifireEventType, SnotificationPositionType } from '../../models';\nimport { SnotifireNotifications } from '../../models/snotifire-notifications.interface';\nimport { SnotifireToastModel } from '../toast/notifire-toast.model';\nimport { SnotifireService } from '../../services';\n\n@Component({\n  selector: 'ngx-snotifire',\n  templateUrl: './ngx-snotifire.component.html',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class NgxSnotifireComponent implements OnInit, OnDestroy, AfterViewInit {\n  private readonly unsubscribe$ = new Subject<void>();\n  /**\n   * Toasts array\n   */\n  notifications!: SnotifireNotifications;\n  /**\n   * Toasts emitter\n   */\n  emitter!: Subscription;\n  /**\n   * Helper for slice pipe (maxOnScreen)\n   */\n  dockSizeA!: number;\n  /**\n   * Helper for slice pipe (maxOnScreen)\n   */\n  dockSizeB!: number | undefined;\n  /**\n   * Helper for slice pipe (maxAtPosition)\n   */\n  blockSizeA!: number;\n  /**\n   * Helper for slice pipe (maxAtPosition)\n   */\n  blockSizeB!: number | undefined;\n  /**\n   * Backdrop Opacity\n   */\n  backdrop: number | undefined = -1;\n  /**\n   * How many toasts with backdrop in current queue\n   */\n  withBackdrop: SnotifireToastModel[] = [];\n\n  constructor(readonly service: SnotifireService) {}\n  ngAfterViewInit(): void {}\n\n  ngOnInit(): void {\n    this.service.emitter\n      .pipe(takeUntil(this.unsubscribe$))\n      .subscribe((toasts: SnotifireToastModel[]) => {\n        if (\n          this.service.defaultConfig &&\n          this.service.defaultConfig.global &&\n          this.service.defaultConfig.global.newOnTop\n        ) {\n          this.dockSizeA = this.service.defaultConfig.global.maxOnScreen\n            ? -this.service.defaultConfig.global.maxOnScreen\n            : 6;\n          this.dockSizeB = undefined;\n          this.blockSizeA = this.service.defaultConfig.global.maxAtPosition\n            ? -this.service.defaultConfig.global.maxAtPosition\n            : 4;\n          this.blockSizeB = undefined;\n          this.withBackdrop = toasts.filter(\n            (toast) =>\n              toast.config &&\n              toast.config.backdrop &&\n              toast.config.backdrop >= 0\n          );\n        } else {\n          this.dockSizeA = 0;\n          this.dockSizeB =\n            this.service.defaultConfig.global &&\n            this.service.defaultConfig.global.maxOnScreen;\n          this.blockSizeA = 0;\n          this.blockSizeB =\n            this.service.defaultConfig.global &&\n            this.service.defaultConfig.global.maxAtPosition;\n          this.withBackdrop = toasts\n            .filter(\n              (toast) =>\n                toast.config &&\n                toast.config.backdrop &&\n                toast.config.backdrop >= 0\n            )\n            .reverse();\n        }\n        this.notifications = this.splitToasts(\n          toasts.slice(this.dockSizeA, this.dockSizeB)\n        );\n        this.stateChanged(SnotifireEventType.MOUNTED);\n      });\n  }\n\n  /**\n   * Split toasts toasts into different objects\n   * @param toasts notifire-toast[]\n   * @returns SnotifyNotifications\n   */\n  splitToasts(toasts: SnotifireToastModel[]): SnotifireNotifications {\n    const result: SnotifireNotifications = {};\n\n    for (const property in SnotificationPositionType) {\n      if (SnotificationPositionType.hasOwnProperty(property)) {\n        result[\n          SnotificationPositionType[\n            property as keyof typeof SnotificationPositionType\n          ]\n        ] = [];\n      }\n    }\n\n    toasts.forEach((toast: SnotifireToastModel) => {\n      if (toast.config.position) {\n        const keyIndex = Object.keys(SnotificationPositionType).indexOf(\n          toast.config.position\n        );\n        const searchedString = Object.values(SnotificationPositionType)[\n          keyIndex\n        ];\n        result[searchedString]?.push(toast);\n      }\n    });\n    return result;\n  }\n\n  getNotificationArray(\n    notifications: SnotifireNotifications,\n    position: SnotificationPositionType\n  ): SnotifireToastModel[] | undefined {\n    return notifications[position];\n  }\n\n  /**\n   * Changes the backdrop opacity\n   * @param event NotificationEventType\n   */\n  stateChanged(event: SnotifireEventType) {\n    if (!this.withBackdrop.length) {\n      if (this.backdrop && this.backdrop >= 0) {\n        this.backdrop = -1;\n      }\n      return;\n    }\n    switch (event) {\n      case 'mounted':\n        if (this.backdrop && this.backdrop < 0) {\n          this.backdrop = 0;\n        }\n        break;\n      case 'beforeShow':\n        this.backdrop =\n          this.withBackdrop[this.withBackdrop.length - 1].config?.backdrop;\n        break;\n      case 'beforeHide':\n        if (this.withBackdrop.length === 1) {\n          this.backdrop = 0;\n        }\n        break;\n      case 'hidden':\n        if (this.withBackdrop.length === 1) {\n          this.backdrop = -1;\n        }\n        break;\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.unsubscribe$.next();\n    this.unsubscribe$.complete();\n  }\n}\n","<div\n    class=\"snotifire-backdrop\"\n    *ngIf=\"backdrop && backdrop >= 0\"\n    [style.opacity]=\"backdrop\"\n></div>\n\n<div\n    *ngFor=\"let position of notifications | keys\"\n    class=\"snotify snotify-{{ position }}\"\n>\n    <ngx-toast\n        *ngFor=\"let notification of getNotificationArray(notifications, position) | slice: blockSizeA:blockSizeB\"\n        [toast]=\"notification\"\n        (stateChanged)=\"stateChanged($event)\"\n    >\n    </ngx-toast>\n\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport {\n  ButtonsComponent,\n  NgxSnotifireComponent,\n  PromptComponent,\n  ToastComponent,\n} from './components';\nimport { KeysPipe, TruncatePipe } from './pipes';\nimport { SnotifireService } from './services';\n\n@NgModule({\n  declarations: [\n    PromptComponent,\n    ToastComponent,\n    ButtonsComponent,\n    TruncatePipe,\n    KeysPipe,\n    NgxSnotifireComponent,\n  ],\n  imports: [CommonModule],\n  exports: [NgxSnotifireComponent],\n})\nexport class NgxSnotifireModule {\n  static forRoot(): ModuleWithProviders<NgxSnotifireModule> {\n    return {\n      ngModule: NgxSnotifireModule,\n      providers: [SnotifireService],\n    };\n  }\n}\n","import { SnotificationPositionType, SnotifireType } from '../models';\n\n/**\n * Snotify default configuration object\n */\nexport const ToastDefaults = {\n  global: {\n    newOnTop: true,\n    maxOnScreen: 8,\n    maxAtPosition: 8,\n    filterDuplicates: false,\n  },\n  snotifireConfig: {\n    type: SnotifireType.INFO,\n    showProgressBar: true,\n    timeout: 5000,\n    closeOnClick: true,\n    pauseOnHover: true,\n    bodyMaxLength: 150,\n    titleMaxLength: 16,\n    backdrop: -1,\n    icon: undefined,\n    iconClass: undefined,\n    html: undefined,\n    position: 'RIGHT_TOP' as SnotificationPositionType,\n    animation: { enter: 'fadeIn', exit: 'fadeOut', time: 400 },\n  },\n  type: {\n    [SnotifireType.PROMPT]: {\n      timeout: 0,\n      closeOnClick: false,\n      buttons: [\n        { text: 'Ok', action: null, bold: true },\n        { text: 'Cancel', action: null, bold: false },\n      ],\n      placeholder: 'Enter answer here...',\n      type: SnotifireType.PROMPT,\n    },\n    [SnotifireType.CONFIRM]: {\n      timeout: 0,\n      closeOnClick: false,\n      buttons: [\n        { text: 'Ok', action: null, bold: true },\n        { text: 'Cancel', action: null, bold: false },\n      ],\n      type: SnotifireType.CONFIRM,\n    },\n    [SnotifireType.SUCCESS]: {\n      type: SnotifireType.SUCCESS,\n    },\n    [SnotifireType.ERROR]: {\n      type: SnotifireType.ERROR,\n    },\n    [SnotifireType.WARNING]: {\n      type: SnotifireType.WARNING,\n    },\n    [SnotifireType.INFO]: {\n      type: SnotifireType.INFO,\n    },\n    [SnotifireType.ASYNC]: {\n      pauseOnHover: false,\n      closeOnClick: false,\n      timeout: 0,\n      showProgressBar: false,\n      type: SnotifireType.ASYNC,\n    },\n  },\n};\n","/*\n * Public API Surface of ngx-notifire\n */\n\nexport * from './lib/ngx-snotifire.module';\nexport * from './lib/components';\n\nexport * from './lib/models';\nexport * from './lib/pipes';\nexport * from './lib/services';\nexport * from './lib/defaults';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SnotifireService","i1","i2.TruncatePipe","i3.PromptComponent","i4.ButtonsComponent","i5.TruncatePipe","i3.ToastComponent","i4.KeysPipe"],"mappings":"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"}