{"version":3,"file":"serene-dev-toast-notifications.mjs","sources":["../../../../projects/toast-notifications/src/lib/toast-notifications.model.ts","../../../../projects/toast-notifications/src/lib/toast-notifications.internal.service.ts","../../../../projects/toast-notifications/src/lib/toast-notifications.service.ts","../../../../projects/toast-notifications/src/lib/toast-notifications.pipe.ts","../../../../projects/toast-notifications/src/lib/toast-notifications.component.ts","../../../../projects/toast-notifications/src/lib/toast-notifications.component.html","../../../../projects/toast-notifications/src/public-api.ts","../../../../projects/toast-notifications/src/serene-dev-toast-notifications.ts"],"sourcesContent":["import { Subject } from 'rxjs';\n\n/**\n * An interface to guide the creation of a notification.\n */\nexport interface IAddToastNotification {\n  /**Text to display in the header of the notification */\n  header: string;\n  /**Message to display in the body of the notification */\n  body?: string;\n  /**Time to display the notification in milliseconds */\n  duration?: number;\n  /**Indicates if the notification stays up until the consumer triggers a close action */\n  manuallyDismiss?: boolean;\n  /**Indicates if the notification is in a loading state */\n  loading?: boolean;\n  /**Class name to wrap around the notification */\n  toastClass?: string;\n  /**Class icon name to use for the icon. Overrides the default icon set. */\n  iconClass?: string;\n  /**Preferred colour tag*/\n  tag?: EToastTag | 0 | 1 | 2 | 3;\n  /**Callback function to handle the expansion button click */\n  expansionHandler?: (item: IToastNotification) => any;\n}\n\n/**\n * Interface for toast notification configuration\n * @remarks\n * This interface defines the structure for configuring toast notifications,\n * including their appearance, behavior, and actions.\n */\nexport interface IToastNotification extends IAddToastNotification {\n  /**An RXJS observable the tells the subscriber when the notification is closed */\n  closed: Subject<{\n    /**Indicates if the closure was manually triggered or not */ manuallyClosed: boolean;\n  }>;\n  /**The id generated for the notification */\n  id: string;\n  /**Icon class  */\n  _iconClass?: string;\n  /**Generated tag */\n  _tag?: EToastTag;\n  /**Date time when the notification was created */\n  datetime: number;\n  /**If the notification is expanded currently */\n  expanded?: boolean;\n  /**If the notification is expandable */\n  expandable: boolean;\n} \n\n/**\n * Enum for the different notification tags\n */\nexport enum EToastTag {\n  /** Danger */\n  danger = 'DANGER',\n  /** Success */\n  success = 'SUCCESS',\n  /** Info */\n  info = 'INFO',\n  /** Warning */\n  warning = 'WARNING',\n}\n/**Maps tag enum values to tag numerical values */\nexport const ToastTagMap: { [e in EToastTag]: 0 | 1 | 2 | 3 } = {\n  [EToastTag.danger]: 0,\n  [EToastTag.success]: 1,\n  [EToastTag.info]: 2,\n  [EToastTag.warning]: 3,\n};\n/**Maps the numerical tags to the enums */\nexport const ToastTagReverseMap: { [e in 0 | 1 | 2 | 3]: EToastTag } = {\n  0: EToastTag.danger,\n  1: EToastTag.success,\n  2: EToastTag.info,\n  3: EToastTag.warning,\n};\n\n/**\n * General configuration for all instances of the toast notification\n */\nexport interface IToastComponentConfig {\n  /**In milliseconds */\n  defaultDuration: number;\n  /**Show the expansion button */\n  showExpansionButton?: boolean;\n  /**Horizontal position of the notification panel */\n  xPosition?: 'left' | 'right' | 'center';\n  /**Function to handle the expansion button */\n  expandHandler?: (item: IToastNotification) => any;\n}\n","import { Injectable, computed, inject, signal } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport {\n  IToastNotification,\n  IAddToastNotification,\n  ToastTagReverseMap,\n  EToastTag,\n  IToastComponentConfig,\n} from './toast-notifications.model';\n\n/**Service to manage all instances of the notification component internally.  */\n@Injectable({\n  providedIn: 'root',\n})\nexport class ToastNotificationsInternalService {\n  protected readonly _toastNotifications = signal<{ [id: string]: IToastNotification }>({});\n\n  readonly toastNotifications = computed(\n    () => Object.values(this._toastNotifications())?.reverse() || ([] as IToastNotification[]),\n  );\n\n  protected readonly _config = signal<IToastComponentConfig>({\n    showExpansionButton: true,\n    xPosition: 'left',\n    defaultDuration: 5000,\n  });\n  readonly config = computed(() => this._config());\n\n  updateConfig(val: Partial<IToastComponentConfig>) {\n    this._config.update((config) => ({ ...config, ...val }));\n  }\n\n  generateUUID = () => {\n    let d = new Date().getTime();\n    let d2 =\n      (typeof performance !== 'undefined' && performance.now && performance.now() * 1000) || 0; //Time in microseconds since page-load or 0 if unsupported\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n      let r = Math.random() * 16; //random number between 0 and 16\n      if (d > 0) {\n        //Use timestamp until depleted\n        r = (d + r) % 16 | 0;\n        d = Math.floor(d / 16);\n      } else {\n        //Use microseconds since page-load if supported\n        r = (d2 + r) % 16 | 0;\n        d2 = Math.floor(d2 / 16);\n      }\n      return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);\n    });\n  };\n\n  /**\n   * Adds a new notification item\n   * @param item\n   * @returns\n   */\n  addToastNotification = (item: IAddToastNotification) => {\n    const id = this.generateUUID();\n\n    const { defaultDuration } = this._config(),\n      duration = item.manuallyDismiss ? null : item.duration || defaultDuration,\n      closed: IToastNotification['closed'] = new Subject(),\n      formattedItem = this.formatToast({\n        ...item,\n        duration,\n        datetime: Date.now(),\n        id,\n        closed,\n        expandable: false,\n      });\n    this._toastNotifications.update((map) => ({\n      ...map,\n      [id]: formattedItem,\n    }));\n    this.handleDuration(formattedItem);\n    return {\n      id,\n      update: (update: Partial<IAddToastNotification>) => this.updateToastNotification(id, update),\n      close: () => this.closeToastNotification(id, false),\n      loader: {\n        play: () => this.updateToastNotification(id, { loading: true }),\n        stop: () => this.updateToastNotification(id, { loading: false }),\n      },\n      closed: closed,\n    };\n  };\n\n  formatToast = (item: IToastNotification): IToastNotification => {\n    item._tag =\n      typeof item.tag == 'string' ? item.tag : ToastTagReverseMap[item.tag] || EToastTag.info;\n    item._iconClass =\n      item.iconClass ||\n      `fa fa-${\n        item._tag == EToastTag.success\n          ? 'check-circle'\n          : item._tag == EToastTag.info\n            ? 'info-circle'\n            : 'warning'\n      }`;\n\n    item.expandable = !!item.body;\n    return item;\n  };\n\n  handleDuration = (item: Partial<IToastNotification>) => {\n    if (item?.duration != null)\n      setTimeout(() => this.closeToastNotification(item.id, false), item.duration || 0);\n  };\n\n  /**Update the details of a notification */\n  updateToastNotification = (id: string, item: Partial<IAddToastNotification>) => {\n    this._toastNotifications.update((map) => {\n      if (!map[id]) return map;\n      const f = this.formatToast({ ...map[id], ...item });\n      this.handleDuration({ id, duration: f.duration });\n      return { ...map, [id]: f };\n    });\n  };\n\n  /**Toggle the expansion state of a notification */\n  toggleToastNotification = (id: string, expand?: boolean) =>\n    this._toastNotifications.update((map) => {\n      if (!map[id]) return map;\n      return {\n        ...map,\n        [id]: { ...map[id], expanded: expand == null ? !map[id].expanded : expand },\n      };\n    });\n\n  /**Close a notification */\n  closeToastNotification = (id: string, manualDismissal: boolean) => {\n    return this._toastNotifications.update((map) => {\n      if (map[id]) {\n        map[id].closed.next({ manuallyClosed: manualDismissal });\n        map[id].closed.complete();\n        delete map[id];\n      }\n      return { ...map };\n    });\n  };\n}\n","import { Injectable, computed, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n  IToastComponentConfig\n} from './toast-notifications.model';\nimport { ToastNotificationsInternalService } from './toast-notifications.internal.service';\n\n/**Service to manage all instances of the notification component.  */\n@Injectable({\n  providedIn: 'root',\n})\nexport class ToastNotificationsService {\n  /**Set this to configure a custom label formatter. */\n  labelPipe: (value: string) => Observable<string>;\n\n  protected internalService = inject(ToastNotificationsInternalService);\n\n  /**Global configuration */\n  readonly config = computed(() => this.internalService.config());\n\n  /**\n   * Update the global configuration.\n   * @param val\n   */\n  updateConfig(val: Partial<IToastComponentConfig>) {\n    this.internalService.updateConfig(val);\n  }\n\n  /**Shortcut functions for managing the notifications */\n  toastShortcut = () => ({\n    add: this.internalService.addToastNotification,\n    close: this.internalService.closeToastNotification,\n    // toggle: this.internalService.toggleToastNotification,\n    update: this.internalService.updateToastNotification,\n  });\n}\n","import { Pipe, type PipeTransform } from '@angular/core';\nimport { ToastNotificationsService } from './toast-notifications.service';\nimport { Observable, of } from 'rxjs';\n\n/**\n * Value formatter pipe.\n */\n@Pipe({\n  name: 'tnLabelPipe',\n  standalone: true,\n})\nexport class ToastNotificationsLabelPipe implements PipeTransform {\n  /**\n   * Transforms the string texts passed into it using the preferred formatter function. The formatter function can be set in the Toast Notification Service\n   * @param value\n   * @returns\n   */\n  transform(value: string): Observable<string> {\n    return this.service.labelPipe ? this.service.labelPipe(value) : of(value);\n  }\n\n  constructor(protected service: ToastNotificationsService) {}\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  computed,\n  effect,\n  inject,\n  input,\n  output,\n} from '@angular/core';\nimport {\n  IAddToastNotification,\n  IToastComponentConfig,\n  IToastNotification,\n} from './toast-notifications.model';\nimport { ToastNotificationsInternalService } from './toast-notifications.internal.service';\nimport { ToastNotificationsLabelPipe } from './toast-notifications.pipe';\n\n/**Toast notification component.\n *\n * Reference this in your app.html file to display the notifications in the root of your UI */\n@Component({\n  selector: 'toast-notifications',\n  templateUrl: './toast-notifications.component.html',\n  styleUrl: './toast-notifications.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [CommonModule, ToastNotificationsLabelPipe],\n})\nexport class ToastNotificationsComponent {\n  protected readonly service = inject(ToastNotificationsInternalService);\n  protected readonly cdr = inject(ChangeDetectorRef);\n\n  /**Specify if to show the expansion button for all notifications. It overrides the global settings. */\n  readonly _showExpansionButton = input<IToastComponentConfig['showExpansionButton']>(undefined, {\n    alias: 'showExpansionButton',\n  });\n  /**Horizontal position of the notification panel. It overrides the global settings. */\n  readonly _xPosition = input<IToastComponentConfig['xPosition']>(undefined, {\n    alias: 'xPosition',\n  });\n  /**Expansion handler in the event that the expand button is clicked. */\n  readonly _expandHandler = input<IToastComponentConfig['expandHandler']>(undefined, {\n    alias: 'expandHandler',\n  });\n\n  /**Output emitter to notify if the expansion button is clicked. */\n  readonly expanded = output<IToastNotification>();\n\n  protected readonly showExpansionButton = computed(() => {\n    const genConfig = this.service.config();\n    return this._showExpansionButton() != null\n      ? this._showExpansionButton()\n      : genConfig?.showExpansionButton;\n  });\n\n  protected readonly xPosition = computed(() => {\n    const genConfig = this.service.config();\n    return this._xPosition() != null ? this._xPosition() : genConfig?.xPosition;\n  });\n\n  protected readonly expandHandler = computed(() => {\n    const genConfig = this.service.config();\n    return this._expandHandler() != null ? this._expandHandler() : genConfig?.expandHandler;\n  });\n\n  protected readonly style = computed<{ [x: string]: any }>(() => {\n    const xPosition = this.xPosition();\n    if (xPosition == 'right') return { right: 0 };\n    else if (xPosition == 'left') return { left: 0 };\n    else if (xPosition == 'center')\n      return { left: '50%', right: '50%', transform: 'translate(-50%, 0%)' };\n    return {};\n  });\n  protected readonly notifications = computed(() => this.service.toastNotifications());\n\n  protected readonly notificationsEffect = effect(() => {\n    this.notifications();\n    this.cdr.markForCheck();\n    setTimeout(() => this.cdr.markForCheck(), 500);\n    setTimeout(() => this.cdr.markForCheck(), 1000);\n  });\n\n  protected expand(item: IToastNotification) {\n    (item.expansionHandler ?? this.expandHandler())?.(item);\n    this.expanded.emit(item);\n  }\n\n  /**\n   * Adds a new notification item\n   * @param item\n   * @returns\n   */\n  add(item: IAddToastNotification) {\n    return this.service.addToastNotification(item);\n  }\n  /**\n   * Close a notification item\n   * @param id ID of the notification\n   * @param manualDismissal Indicate if it is a manual dismissal\n   * @returns\n   */\n  close(id: string, manualDismissal: boolean) {\n    return this.service.closeToastNotification(id, manualDismissal);\n  }\n  /**\n   * Update the details of a notification item\n   * @param id ID of the notification\n   * @param item Notification item\n   * @returns\n   */\n  update(id: string, item: Partial<IAddToastNotification>) {\n    return this.service.updateToastNotification(id, item);\n  }\n}\n","<div class=\"toast-list\" [style]=\"style()\">\n  @for (item of notifications(); track item.id) {\n    <div class=\"toast-item toast-tag-{{ item._tag | lowercase }} {{ item.toastClass }} \">\n      <div class=\"toast-item-content\" [style.width]=\"'calc(100% - ' + side.offsetWidth + 'px )'\">\n        <div\n          class=\"toast-item-header\"\n          [ngClass]=\"{ compact: !item.expanded }\"\n          (click)=\"service.toggleToastNotification(item.id)\"\n        >\n          <i class=\"toast-icon {{ item._iconClass }}\"></i>\n          <span [innerHTML]=\"item.header | tnLabelPipe | async\"></span>\n        </div>\n        <!-- <hr [hidden]=\"!item.expanded\" class=\"toast-item-divider\" /> -->\n        <div\n          [hidden]=\"!item.expanded || !item.expandable\"\n          class=\"toast-item-body\"\n          [innerHTML]=\"item.body | tnLabelPipe | async\"\n        ></div>\n      </div>\n      <div class=\"d-flex align-items-center\" #side>\n        @if (item.loading) {\n          <div class=\"toast-item-loader\">\n            <i class=\"fa fa-spinner fa-spin\"></i>\n          </div>\n        }\n        <div class=\"toast-item-action\">\n          @if ((showExpansionButton() && item.expandable) || item.expansionHandler) {\n            <button class=\"cbtn\" (click)=\"expand(item)\">\n              <i class=\"fa fa-expand\"></i>\n            </button>\n          }\n          <button class=\"cbtn\" (click)=\"service.closeToastNotification(item.id, true)\">\n            <i class=\"fa fa-close\"></i>\n          </button>\n        </div>\n      </div>\n    </div>\n  }\n</div>\n","/*\n * Public API Surface of toast-notifications\n */\n\nexport * from './lib/toast-notifications.service';\nexport * from './lib/toast-notifications.component';\nexport * from './lib/toast-notifications.pipe';\nexport * from './lib/toast-notifications.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ToastNotificationsService"],"mappings":"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"}