UNPKG

mk-magic-alerts

Version:
1 lines 21 kB
{"version":3,"file":"mk-magic-alerts.mjs","sources":["../../../projects/mk-magic-alerts/src/lib/core/models/alert-state.ts","../../../projects/mk-magic-alerts/src/lib/core/pipes/new-line-and-tabs.pipe.ts","../../../projects/mk-magic-alerts/src/lib/core/alert/alert-animations.ts","../../../projects/mk-magic-alerts/src/lib/core/models/alert.model.ts","../../../projects/mk-magic-alerts/src/lib/alerts.store.ts","../../../projects/mk-magic-alerts/src/lib/core/alert/alert.component.ts","../../../projects/mk-magic-alerts/src/lib/core/alert/alert.component.html","../../../projects/mk-magic-alerts/src/lib/alerts.component.ts","../../../projects/mk-magic-alerts/src/lib/alerts.component.html","../../../projects/mk-magic-alerts/src/lib/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 { 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 { trigger, state, style, transition, animate, query, group, sequence } from '@angular/animations';\nimport { AlertState } from '../models/alert-state';\n\nexport const alertAnimations = [\n trigger('state', [\n state(\n 'void',\n style({\n height: '0',\n width: '0',\n 'padding-top': '0',\n 'padding-bottom': '0',\n 'margin-top': '5px',\n 'margin-bottom': '0',\n opacity: '0',\n })\n ),\n state(\n AlertState.DISPLAY,\n style({\n height: '*',\n 'padding-top': '*',\n 'padding-bottom': '*',\n 'margin-top': '5px',\n 'margin-bottom': '0',\n })\n ),\n state(\n AlertState.DISMISS,\n style({\n height: '0',\n width: '0',\n 'padding-top': '0',\n 'padding-bottom': '0',\n 'margin-top': '5px',\n 'margin-bottom': '0',\n 'border-width': '0',\n opacity: '0',\n })\n ),\n state(\n AlertState.DISMISSED,\n style({\n height: '0',\n width: '0',\n 'padding-top': '0',\n 'padding-bottom': '0',\n 'margin-top': '0',\n 'margin-bottom': '0',\n 'border-width': '0',\n opacity: '0',\n })\n ),\n transition('* => display',\n // sequence = sequential actions:\n sequence([\n query('.alert-text', [ style({ opacity: 0 }) ]),\n animate('0.3s ease'),\n query('.alert-text', [ animate('0.1s', style({ opacity: 1 })) ])\n ]\n )),\n transition('display => dismiss', \n // group = parallel actions:\n group([\n query('.alert-text', [ animate('0.05s', style({ opacity: 0 })) ]),\n animate('0.5s ease')\n ]\n )),\n transition('dismiss => dismissed',\n // group = parallel actions:\n group([\n query('.alert-text', [ animate('0.05s', style({ opacity: 0 })) ]),\n animate('0.3s ease')\n ]\n ))\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 './core/models/alert-state';\nimport { AlertType } from './core/models/alert-type';\nimport { Alert } from './core/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 { AnimationEvent } from '@angular/animations';\nimport { ChangeDetectorRef, Component, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Observable, Subject, fromEvent, race, timer } from 'rxjs';\nimport { first, repeat, 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';\nimport { alertAnimations } from './alert-animations';\n\n@Component({\n selector: 'app-alert',\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss'],\n animations: alertAnimations,\n imports: [NewlineAndTabsPipe]\n})\n\nexport class AlertComponent implements OnInit, OnDestroy {\n\n\t@Input({ required: true })\n\talertParams!: Alert;\n\n\t@Input()\n\tdismissTimeInMillis = 2_147_483_647;\n\n\tprivate destroy$ = new Subject<void>();\n\n\tconstructor(private readonly elementRef: ElementRef<HTMLElement>,\n\t\t\t\tprivate alertsStore: AlertsStore,\n\t\t\t\tprivate cdRef: ChangeDetectorRef) {}\n\n\tngOnInit(): void {\n\n\t\tconst mouseenter$: Observable<Event> = fromEvent(this.elementRef.nativeElement, 'mouseenter');\n\t\tconst mouseleave$: Observable<Event> = fromEvent(this.elementRef.nativeElement, 'mouseleave');\n\n\t\t// Observable that allows closing of the alert by user-click:\n\t\tconst dismissalByUser$: Observable<Event> = fromEvent(this.elementRef.nativeElement, '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\tfirst(), // 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\tthis.alertParams.state = AlertState.DISMISS;\n\t\tthis.cdRef.detectChanges();\n\t}\n\n\t/* Is evoked at the end of the animated disappearing of the alert */\n\tonDismissalCompleted(event: AnimationEvent) {\n\t\tif (event.fromState === AlertState.DISPLAY && event.toState === AlertState.DISMISS) {\n\t\t\tthis.alertParams.state = AlertState.DISMISSED;\n\t\t\tthis.cdRef.detectChanges();\n\t\t}\n\t}\n\n\n\tngOnDestroy(): void {\n\t\tthis.destroy$.next();\n\t\tthis.destroy$.unsubscribe();\n\t}\n}\n","@if (alertParams) {\n\t<div class=\"clickable-area\">\n\t\t<div class=\"alert-container alert-{{ alertParams.type }}\" [@state]=\"alertParams.state\" (@state.done)=\"onDismissalCompleted($event)\">\n\t\t\t\n\t\t\t<div class=\"alert-text\" [innerHtml]=\"alertParams.text | newlineAndTabs\"></div>\n\t\n\t\t\t<div class=\"btn-dismiss\">\n\t\t\t\t<i class=\"fa fa-times\"></i>\n\t\t\t</div>\n\t\n\t\t</div>\n\t</div>\n}\n","import { AsyncPipe } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { AlertsStore } from './alerts.store';\nimport { AlertComponent } from './core/alert/alert.component';\nimport { Alert } from './core/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\n\talerts$: Observable<Alert[]> = this.alertsStore.alerts$;\n\n\tconstructor(private alertsStore: AlertsStore) { }\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 } 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\n\tprivate alertsComponentRef!: ComponentRef<AlertsComponent>;\n\n\tconstructor(private alertsStore: AlertsStore,\n\t\t\t\tprivate applicationRef: ApplicationRef,\n \t\tprivate injector: Injector) {\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.service';\n\n// Export the mocks\nexport * from './lib/mocks/mock-alerts-service';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AlertsStore"],"mappings":"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"}