{"version":3,"file":"ems-web-app-messages.mjs","sources":["../../src/lib/messages.service.ts","../../src/lib/messages.enums.ts","../../src/lib/messages.component.ts","../../src/lib/messages.module.ts","../../src/public-api.ts","../../src/ems-web-app-messages.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Observable, Subject, BehaviorSubject, throwError, of } from 'rxjs';\nimport { IMessage } from \"./messages.interfaces\";\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class MessagesService {\n\n  private currentMessageSource:BehaviorSubject<IMessage | undefined> = new BehaviorSubject< IMessage | undefined>(undefined);\n  public currentMessage = this.currentMessageSource.asObservable();\n\n  constructor() { }\n\n  public setCurrentMessage(message: IMessage | undefined) {\n    this.currentMessageSource.next(message);\n  }\n}\n","export enum MessageType {\n\tGrowl = \"growl\",\n\tSnackbar = \"snackbar\"\n}\n\nexport enum MessagePosition {\n\tTopLeft = \"top left\",\n\tTopCenter = \"top center\",\n\tTopRight = \"top right\",\n\tBottomLeft = \"bottom left\",\n\tBottomCenter = \"bottom center\",\n\tBottomRight = \"bottom right\"\n}","import { Component, OnInit, Input, HostListener, HostBinding } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { MessageType, MessagePosition } from \"./messages.enums\";\nimport { IMessage } from \"./messages.interfaces\";\nimport { MessagesService } from \"./messages.service\";\n\n@Component({\n  selector: 'messages',\n  template: `\n    <ng-container *ngTemplateOutlet=\"currentMessage?.template ?? null\"></ng-container>\n    <div *ngIf=\"!currentMessage?.template\" [attr.role]=\"currentMessage ? 'alert':'generic'\" class=\"message-text\" [innerHtml]=\"sanitizer.bypassSecurityTrustHtml(currentMessage?.message || ' ')\"></div>\n    <div class=\"style-container\" [innerHtml]=\"styles\"></div>\n  `,\n  styleUrls: [ './messages.component.less' ]\n})\nexport class MessagesComponent implements OnInit  {\n\n  @HostBinding('class.render') render: boolean = false;\n  @HostBinding('class') classes: string = \"\";\n  @Input(\"background\") background: string = \"rgba(0,0,0,0.75)\";\n  @Input(\"color\") color: string = \"#fff\";\n  @Input(\"z-index\") zIndex: number = 1000;\n  @Input(\"transition-speed\") speed: number = 0.5;\n\n\n  public styles!: SafeHtml;\n  public currentMessage?: IMessage;\n  public queue: IMessage[] = [];\n\n  private timeout: number = 0;\n\n  constructor(private service: MessagesService, public sanitizer: DomSanitizer) { }\n\n  ngOnInit(): void {\n    this.service.currentMessage.subscribe(message => {\n      if(!message && !this.currentMessage) return;\n      if(!message) this.processMessageQueue(true);\n      if(!this.validateMessage(message!)) return;\n      this.queue.push(message!);\n      this.processMessageQueue();\n    });\n  }\n\n  @HostListener('click', ['$event.target'])\n  onContainerClick = (element: HTMLElement) => {\n    this.processMessageQueue(true);\n  }\n\n  private initializeStyles() {\n    if(!this.currentMessage) return;\n    const duration = this.currentMessage.duration ?? 1;\n    const output = `messages { \n      background: ${this.background}; \n      color: ${this.color}; \n      transition-duration: ${this.speed}s; \n      z-index: ${this.zIndex};\n    } \n    messages.render {\n      transition-duration: ${this.speed}s;\n    }`;\n    this.styles = this.sanitizer.bypassSecurityTrustHtml(`<style>${output}</style>`);\n  }\n\n  private async processMessageQueue(force: boolean = false) {\n    if(this.currentMessage && !force) return;\n    await this.removeCurrentMessage();\n    this.currentMessage = this.queue.shift();\n    this.classes = `${this.currentMessage?.position} ${this.currentMessage?.type} ${this.currentMessage?.classes ?? ''}`;\n    await this.tick();\n    this.initializeStyles();\n    this.showNextMessage();\n  }\n\n  private removeCurrentMessage() {\n    clearTimeout(this.timeout);\n\n    return new Promise((resolve: (message?: IMessage) => void) => {\n      if(!this.currentMessage) {\n        setTimeout(() => resolve());\n      } else {\n        this.render = false;\n        setTimeout(() => resolve(), this.speed * 1000);\n      }\n    });\n  }\n\n  private tick() {\n    return new Promise((resolve: (message?: IMessage) => void) => {\n        setTimeout(() => resolve(), this.speed * 1000);\n    });\n  }\n\n  private showNextMessage() {\n    if(!this.currentMessage) return;\n    setTimeout(() => this.render = true);\n    this.timeout = window.setTimeout(() => this.processMessageQueue(true), this.currentMessage.duration * 1000);\n  }\n\n  private validateMessage(message: IMessage): boolean {\n    const growlPositions = [MessagePosition.BottomLeft, MessagePosition.BottomRight, MessagePosition.TopLeft, MessagePosition.TopRight];\n    const snackbarPositions = [MessagePosition.TopCenter, MessagePosition.BottomCenter];\n    if(!message) return false;\n    \n    if(message.type === MessageType.Growl && growlPositions.indexOf(message.position) === -1) {\n      throw new Error(\"Growl messages must use one of the following positions: MessagePosition.BottomLeft, MessagePosition.BottomRight, MessagePosition.TopLeft, MessagePosition.TopRight\")\n      return false;\n    }\n\n    if(message.type === MessageType.Snackbar && snackbarPositions.indexOf(message.position) === -1) {\n      throw new Error(\"Snackbar messages must use one of the following positions: MessagePosition.TopCenter, MessagePosition.BottomCenter\")\n      return false;\n    }\n\n    return true;\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MessagesComponent } from './messages.component';\n\n\n\n@NgModule({\n  declarations: [\n    MessagesComponent\n  ],\n  imports: [\n    CommonModule\n  ],\n  exports: [\n    MessagesComponent\n  ]\n})\nexport class MessagesModule { }\n","/*\n * Public API Surface of messages\n */\n\nexport * from './lib/messages.service';\nexport * from './lib/messages.component';\nexport * from './lib/messages.module';\nexport * from \"./lib/messages.enums\";\nexport * from \"./lib/messages.interfaces\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.MessagesService"],"mappings":"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"}