{"version":3,"file":"mk-magic-alerts.mjs","sources":["../../../projects/mk-magic-alerts/src/lib/alerts/models/alert-state.ts","../../../projects/mk-magic-alerts/src/lib/alerts/models/alert.model.ts","../../../projects/mk-magic-alerts/src/lib/alerts/alerts.store.ts","../../../projects/mk-magic-alerts/src/lib/alerts/pipes/new-line-and-tabs.pipe.ts","../../../projects/mk-magic-alerts/src/lib/alerts/alert/alert.component.ts","../../../projects/mk-magic-alerts/src/lib/alerts/alert/alert.component.html","../../../projects/mk-magic-alerts/src/lib/alerts/alerts.component.ts","../../../projects/mk-magic-alerts/src/lib/alerts/alerts.component.html","../../../projects/mk-magic-alerts/src/lib/alerts/alerts.service.ts","../../../projects/mk-magic-alerts/src/lib/mocks/mock-alerts-service.ts","../../../projects/mk-magic-alerts/src/public-api.ts","../../../projects/mk-magic-alerts/src/mk-magic-alerts.ts"],"sourcesContent":["export const AlertState = {\n\tDISPLAY: 'display',\n\tDISMISS: 'dismiss',\n\tDISMISSED: 'dismissed',\n};\n","import { AlertState } from './alert-state';\n\nexport class Alert {\n\n\tpublic text: string;\n\tpublic type: string;\n\tpublic state: string;\n\tpublic dismissTimeInMillis: number;\n\n\tconstructor(text: string, type: string, dismissTime: number) {\n\t\tthis.text = text;\n\t\tthis.type = type;\n\t\tthis.dismissTimeInMillis = dismissTime;\n\t\tthis.state = AlertState.DISPLAY;\n\t}\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject, auditTime } from 'rxjs';\nimport { AlertState } from './models/alert-state';\nimport { AlertType } from './models/alert-type';\nimport { Alert } from './models/alert.model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AlertsStore {\n\n\tprivate alertsSubject = new BehaviorSubject<Alert[]>([]);\n\n\t// Added 'auditTime(100)' to prevent error 'NG0100: Expression has changed after it was checked'\n\talerts$: Observable<Alert[]> = this.alertsSubject.asObservable().pipe(auditTime(100));\n\n\tprivate dismissAllSubject = new Subject<void>();\n\n\tdismissAll$: Observable<void> = this.dismissAllSubject.asObservable();\n\n\tdismissAll() {\n\t\tthis.dismissAllSubject.next();\n\t}\n\n\taddAlert(text: string, type: AlertType, dismissTime: number) {\n\t\t// Remove already dismissed alerts\n\t\t// filter() makes a shallow copy of the array (a new array, but pointing to the same objects)\n\t\tconst activeAlerts = this.alertsSubject.getValue().filter((m) => m.state !== AlertState.DISMISSED);\n\n\t\t// Create and add new message:\n\t\tactiveAlerts.push(new Alert(text, type, dismissTime));\n\n\t\t// Trigger Observable to display alerts:\n\t\tthis.alertsSubject.next(activeAlerts);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ \n\tname: 'newlineAndTabs',\n\tstandalone: true\n })\n\nexport class NewlineAndTabsPipe implements PipeTransform {\n\t\n\ttransform(value: any): any {\n\t\treturn value?.toString().replace(/(?:\\r\\n|\\r|\\n)/g, '<br />').replace(/(?:\\t)/g, '&nbsp;&nbsp;&nbsp;&nbsp;') ?? '';\n\t}\n}\n","import { ChangeDetectorRef, Component, ElementRef, inject, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { Observable, Subject, fromEvent, race, timer } from 'rxjs';\nimport { repeat, take, takeUntil, tap } from 'rxjs/operators';\nimport { AlertsStore } from '../alerts.store';\nimport { AlertState } from '../models/alert-state';\nimport { Alert } from '../models/alert.model';\nimport { NewlineAndTabsPipe } from '../pipes/new-line-and-tabs.pipe';\n\n@Component({\n    selector: 'app-alert',\n    templateUrl: './alert.component.html',\n    styleUrls: ['./alert.component.scss'],\n    imports: [NewlineAndTabsPipe]\n})\n\nexport class AlertComponent implements OnInit, OnDestroy {\n\tprivate readonly elementRef = inject(ElementRef<HTMLElement>);\n\tprivate readonly alertsStore = inject(AlertsStore);\n\tprivate readonly cdr = inject(ChangeDetectorRef);\n\n\t@Input({ required: true })\n\talertParams!: Alert;\n\n\t@Input()\n\tdismissTimeInMillis = 2_147_483_647;\n\n\t@ViewChild('container', { static: false }) container!: ElementRef<HTMLElement>;\n\n\tprivate destroy$ = new Subject<void>();\n\n\n\tngOnInit(): void {\n\t\tconst el = this.elementRef.nativeElement;\n\n\t\tconst mouseenter$: Observable<Event> = fromEvent(el, 'mouseenter');\n\t\tconst mouseleave$: Observable<Event> = fromEvent(el, 'mouseleave');\n\n\t\t// Observable that allows closing of the alert by user-click:\n\t\tconst dismissalByUser$: Observable<Event> = fromEvent(el, 'mouseup');\n\n\t\t// If dismissal is requested programmatically from alerts-service:\n\t\tconst dismissalByService$: Observable<void> = this.alertsStore.dismissAll$;\n\n\t\t// Observable that closes the alert after a given time,\n\t\t// unless user hovers over the alert with a cursor => 'takeUntil()' and 'repeat()'\n\t\tconst dismissalAfterTimeout$: Observable<0> = timer(this.dismissTimeInMillis).pipe(\n\t\t\ttakeUntil(mouseenter$),\n\t\t\trepeat({ delay: () => mouseleave$ })); // on mouseleave: Resubscribe to source (here: 'timer()')\n\n\t\trace([dismissalByUser$, dismissalByService$, dismissalAfterTimeout$])\n\t\t\t.pipe(\n\t\t\t\ttake(1), // after first emission, unsubscribe also from the winning observable\n\t\t\t\ttap(() => this.setDismissalStart()),\n\t\t\t\ttakeUntil(this.destroy$)\n\t\t\t)\n\t\t\t.subscribe();\n\t}\n\n\t/* Triggers the animated disappearing of the alert */\n\tsetDismissalStart() {\n\t\tif (this.alertParams.state !== AlertState.DISMISS) {\n    \t\tconst el = this.container?.nativeElement;\n\t\t\tif (el) {\n\t\t\t\t// lock current height via CSS var used by the stylesheet\n\t\t\t\tel.style.setProperty('--h', `${el.offsetHeight}px`);\n\t\t\t}\n\n\t\t\tthis.alertParams.state = AlertState.DISMISS;\n\t\t\t// Zoneless: this runs from RxJS/DOM listeners, so request a render\n\t\t\tthis.cdr.detectChanges();\n\t\t}\n\t}\n\n\t/** After the leave transition finishes, mark as DISMISSED */\n\tonContainerTransitionEnd(e: TransitionEvent) {\n\t\t// Listen for a property used in your leave transition\n\t\tif (this.alertParams.state === AlertState.DISMISS &&\n\t\t\t(e.propertyName === 'height' || e.propertyName === 'opacity')) {\n\t\t\tthis.alertParams.state = AlertState.DISMISSED;\n\t\t\tthis.cdr.detectChanges();\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.destroy$.next();\n\t\tthis.destroy$.complete();\n\t}\n}\n","@if (alertParams) {\n  <div class=\"clickable-area\">\n    @if (alertParams.state === 'display') {\n      <div\n\t  \t#container\n        class=\"alert-container alert-{{ alertParams.type }}\"\n        animate.enter=\"alert-enter\"\n        animate.leave=\"alert-leave\"\n        (transitionend)=\"onContainerTransitionEnd($event)\">\n\n        <div class=\"alert-text\" [innerHtml]=\"alertParams.text | newlineAndTabs\"></div>\n\n        <div class=\"btn-dismiss\">\n          <i class=\"fa fa-times\"></i>\n        </div>\n      </div>\n    }\n  </div>\n}\n","import { AsyncPipe } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { AlertsStore } from './alerts.store';\nimport { AlertComponent } from './alert/alert.component';\nimport { Alert } from './models/alert.model';\n\n@Component({\n    selector: 'magic-alerts',\n    templateUrl: './alerts.component.html',\n    styleUrls: ['./alerts.component.scss'],\n    imports: [AlertComponent, AsyncPipe]\n})\nexport class AlertsComponent {\n\tprivate readonly alertsStore = inject(AlertsStore);\n\n\talerts$: Observable<Alert[]> = this.alertsStore.alerts$;\n}\n","\n\n<link href=\"https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap\" rel=\"stylesheet\">\n<link href=\"https://use.fontawesome.com/releases/v5.3.1/css/all.css\" rel=\"stylesheet\" integrity=\"sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU\" crossorigin=\"anonymous\">\n\n<!-- Alerts Container -->\n<div id=\"mk-magic-messages\" class=\"alerts-container\">\n\t@for(alertParams of alerts$ | async; track alertParams) {\n\t\t<app-alert\n\t\t\t[alertParams]=\"alertParams\"\n\t\t\t[dismissTimeInMillis]=\"alertParams.dismissTimeInMillis\">\n\t\t</app-alert>\n\t}\n</div>","import { ApplicationRef, ComponentRef, Injectable, Injector, createComponent, inject } from '@angular/core';\nimport { AlertsStore } from './alerts.store';\nimport { AlertsComponent } from './alerts.component';\n\n@Injectable({\n  providedIn: 'root'\n})\n\nexport class AlertsService {\n\tprivate readonly alertsStore = inject(AlertsStore);\n\tprivate readonly applicationRef = inject(ApplicationRef);\n\tprivate readonly injector = inject(Injector);\n\n\tprivate alertsComponentRef!: ComponentRef<AlertsComponent>;\n\n\tconstructor() {\n\t\tthis.initializeAlertsComponent();\n\t}\n\n\tprivate initializeAlertsComponent(): void {\n\t\t// Create a div element and append it to the document body\n\t\tconst hostElement = document.createElement('div');\n\t\tdocument.body.appendChild(hostElement);\n\t\n\t\t// Create AlertsComponent and attach it to the DOM\n\t\tthis.alertsComponentRef = createComponent(AlertsComponent, {\n\t\thostElement,\n\t\tenvironmentInjector: this.applicationRef.injector,\n\t\telementInjector: this.injector\n\t\t});\n\t\n\t\t// Attach the AlertsComponent to the application\n\t\tthis.applicationRef.attachView(this.alertsComponentRef.hostView);\n\t}\n\n\tshowInfo(text: string, dismissTimeInMillis: number = 10_000) {\n\t\tthis.alertsStore.addAlert(text, 'info', dismissTimeInMillis);\n\t}\n\n\tshowSuccess(text: string, dismissTimeInMillis: number = 4_000) {\n\t\tthis.alertsStore.addAlert(text, 'success', dismissTimeInMillis);\n\t}\n\n\tshowWarning(text: string, dismissTimeInMillis: number = 10_000) {\n\t\tthis.alertsStore.addAlert(text, 'warning', dismissTimeInMillis);\n\t}\n\n\tshowError(text: string, dismissTimeInMillis: number = 2_147_483_647) {\n\t\tthis.alertsStore.addAlert(text, 'error', dismissTimeInMillis);\n\t}\n\n\tclear() {\n\t\tthis.alertsStore.dismissAll();\n\t}\n}\n","\nexport class MockAlertsService {\n  showInfo(text: string, dismissTimeInMillis: number = 10_000): void {}\n  showSuccess(text: string, dismissTimeInMillis: number = 4_000): void {}\n  showWarning(text: string, dismissTimeInMillis: number = 10_000): void {}\n  showError(text: string, dismissTimeInMillis: number = 2_147_483_647): void {}\n  clear(): void {}\n}","/*\n * Public API Surface of mk-magic-alerts\n */\n\nexport * from './lib/alerts/alerts.service';\n\n// Export the mocks\nexport * from './lib/mocks/mock-alerts-service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}