angular-toaster
Version:
An Angular Toaster Notification library based on AngularJS-Toaster
1 lines • 51.3 kB
Source Map (JSON)
{"version":3,"file":"angular-toaster.mjs","sources":["../../../packages/angular-toaster/src/angular-toaster.service.ts","../../../packages/angular-toaster/src/angular-toaster-config.ts","../../../packages/angular-toaster/src/angular-toaster-animations.ts","../../../packages/angular-toaster/src/trust-html.pipe.ts","../../../packages/angular-toaster/src/angular-toaster.component.ts","../../../packages/angular-toaster/src/angular-toaster.component.html","../../../packages/angular-toaster/src/angular-toaster-container.component.ts","../../../packages/angular-toaster/src/angular-toaster-container.component.html","../../../packages/angular-toaster/src/angular-toaster.injectors.ts","../../../packages/angular-toaster/src/angular-toaster.module.ts","../../../packages/angular-toaster/src/angular-toaster.provider.ts","../../../packages/angular-toaster/src/public-api.ts","../../../packages/angular-toaster/src/angular-toaster.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Observable, Observer, Subject, share } from 'rxjs';\nimport { IClearWrapper, Toast, ToastType } from './angular-toaster-config';\n\nclass Guid {\n static newGuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ToasterService {\n\n public addToast: Observable<Toast>;\n private _addToast!: Observer<Toast>;\n\n public clearToasts: Observable<IClearWrapper>;\n private _clearToasts!: Observer<IClearWrapper>;\n\n removeToast: Observable<IClearWrapper>;\n /** @internal */\n _removeToastSubject: Subject<IClearWrapper>;\n\n constructor() {\n this.addToast = new Observable<Toast>((observer) => this._addToast = observer).pipe(share());\n this.clearToasts = new Observable<IClearWrapper>((observer) => this._clearToasts = observer).pipe(share());\n this._removeToastSubject = new Subject<IClearWrapper>()\n this.removeToast = this._removeToastSubject.pipe(share());\n }\n\n /**\n * Synchronously create and show a new toast instance.\n *\n * @param {(string | Toast)} type The type of the toast, or a Toast object.\n * @param {string=} title The toast title.\n * @param {string=} body The toast body.\n * @returns {Toast}\n * The newly created Toast instance with a randomly generated GUID Id.\n */\n pop(type: ToastType | Toast, title?: string, body?: string): Toast {\n const toast = typeof type === 'string' ? { type: type, title: title, body: body } : type;\n\n if (!toast.toastId) {\n toast.toastId = Guid.newGuid();\n }\n\n if (!this._addToast) {\n throw new Error('No Toaster Containers have been initialized to receive toasts.');\n }\n\n this._addToast.next(toast);\n return toast;\n }\n\n /**\n * Asynchronously create and show a new toast instance.\n *\n * @param {(string | Toast)} type The type of the toast, or a Toast object.\n * @param {string=} title The toast title.\n * @param {string=} body The toast body.\n * @returns {Observable<Toast>}\n * A hot Observable that can be subscribed to in order to receive the Toast instance\n * with a randomly generated GUID Id.\n */\n popAsync(type: ToastType | Toast, title?: string, body?: string): Observable<Toast> {\n setTimeout(() => {\n this.pop(type, title, body);\n }, 0);\n\n return this.addToast;\n }\n\n /**\n * Clears a toast by toastId and/or toastContainerId.\n *\n * @param {string} toastId The toastId to clear.\n * @param {number=} toastContainerId\n * The toastContainerId of the container to remove toasts from.\n */\n clear(toastId?: string, toastContainerId?: number) {\n const clearWrapper: IClearWrapper = {\n toastId: toastId, toastContainerId: toastContainerId\n };\n\n this._clearToasts.next(clearWrapper)\n }\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport type ToastType = \"success\" | \"info\" | \"warning\" | \"wait\" | \"error\";\nexport type OnActionCallback = (_toast: Toast) => void;\nexport type ProgressBarDirection = \"decreasing\" | \"increasing\";\n\nexport enum BodyOutputType {\n Default,\n TrustedHtml,\n Component,\n}\n\nexport interface IClearWrapper {\n toastId?: string;\n toastContainerId?: number;\n}\n\nexport interface Toast {\n type: ToastType;\n title?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n body?: any;\n toastId?: string;\n toastContainerId?: number;\n onShowCallback?: OnActionCallback;\n onHideCallback?: OnActionCallback;\n onClickCallback?: OnActionCallback;\n timeout?: number;\n bodyOutputType?: BodyOutputType;\n showCloseButton?: boolean;\n closeHtml?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data?: any;\n tapToDismiss?: boolean;\n progressBar?: boolean;\n progressBarDirection?: ProgressBarDirection;\n}\n\nexport const DefaultTypeClasses: Partial<Record<ToastType, string>> = {\n error: \"angular-toast-error\",\n info: \"angular-toast-info\",\n wait: \"angular-toast-wait\",\n success: \"angular-toast-success\",\n warning: \"angular-toast-warning\",\n};\n\nexport const DefaultIconClasses: Partial<Record<ToastType, string>> = {\n error: \"icon-error\",\n info: \"icon-info\",\n wait: \"icon-wait\",\n success: \"icon-success\",\n warning: \"icon-warning\",\n};\n\nexport interface IToasterConfig {\n limit?: number | null;\n tapToDismiss?: boolean;\n showCloseButton?: boolean | Partial<Record<ToastType, boolean>>;\n closeHtml?: string;\n newestOnTop?: boolean;\n timeout?: number | Partial<Record<ToastType, number>>;\n typeClasses?: Partial<Record<ToastType, string>>;\n iconClasses?: Partial<Record<ToastType, string>>;\n bodyOutputType?: BodyOutputType;\n bodyTemplate?: string;\n defaultToastType?: ToastType;\n // Options (see CSS):\n // 'angular-toast-top-full-width', 'angular-toast-bottom-full-width', 'angular-toast-center',\n // 'angular-toast-top-left', 'angular-toast-top-center', 'angular-toast-top-right',\n // 'angular-toast-bottom-left', 'angular-toast-bottom-center', 'angular-toast-bottom-right',\n positionClass?: string;\n titleClass?: string;\n messageClass?: string;\n animation?: string;\n preventDuplicates?: boolean;\n mouseoverTimerStop?: boolean;\n toastContainerId?: number | null;\n}\n\nexport const defaultToasterConfig: IToasterConfig = {\n limit: null,\n tapToDismiss: true,\n showCloseButton: false,\n closeHtml: \"<span>×</span>\",\n newestOnTop: true,\n timeout: 5000,\n typeClasses: DefaultTypeClasses,\n iconClasses: DefaultIconClasses,\n bodyOutputType: BodyOutputType.Default,\n bodyTemplate: \"toasterBodyTmpl.html\",\n defaultToastType: \"info\",\n positionClass: \"angular-toast-top-right\",\n titleClass: \"angular-toast-title\",\n messageClass: \"angular-toast-message\",\n animation: \"\",\n preventDuplicates: false,\n mouseoverTimerStop: false,\n toastContainerId: null,\n};\n\nexport const ToasterConfigInjectionToken: InjectionToken<IToasterConfig> =\n new InjectionToken<IToasterConfig>(\"ToasterConfig\");\n\nexport class ToasterConfig implements IToasterConfig {\n limit?: number | null;\n tapToDismiss: boolean;\n showCloseButton: boolean | Partial<Record<ToastType, boolean>>;\n closeHtml: string;\n newestOnTop: boolean;\n timeout: number | Partial<Record<ToastType, number>>;\n typeClasses: Partial<Record<ToastType, string>>;\n iconClasses: Partial<Record<ToastType, string>>;\n bodyOutputType: BodyOutputType;\n bodyTemplate: string;\n defaultToastType: ToastType;\n // Options (see CSS):\n // 'angular-toast-top-full-width', 'angular-toast-bottom-full-width', 'angular-toast-center',\n // 'angular-toast-top-left', 'angular-toast-top-center', 'angular-toast-top-right',\n // 'angular-toast-bottom-left', 'angular-toast-bottom-center', 'angular-toast-bottom-right',\n positionClass: string;\n titleClass: string;\n messageClass: string;\n animation: string;\n preventDuplicates: boolean;\n mouseoverTimerStop: boolean;\n toastContainerId?: number | null;\n\n constructor(configOverrides?: IToasterConfig) {\n configOverrides = configOverrides || {};\n this.limit = configOverrides.limit || null;\n this.tapToDismiss =\n configOverrides.tapToDismiss != null\n ? configOverrides.tapToDismiss\n : true;\n this.showCloseButton =\n configOverrides.showCloseButton != null\n ? configOverrides.showCloseButton\n : false;\n this.closeHtml = configOverrides.closeHtml || \"<span>×</span>\";\n this.newestOnTop =\n configOverrides.newestOnTop != null ? configOverrides.newestOnTop : true;\n this.timeout =\n configOverrides.timeout != null ? configOverrides.timeout : 5000;\n this.typeClasses = configOverrides.typeClasses || DefaultTypeClasses;\n this.iconClasses = configOverrides.iconClasses || DefaultIconClasses;\n this.bodyOutputType =\n configOverrides.bodyOutputType || BodyOutputType.Default;\n this.bodyTemplate = configOverrides.bodyTemplate || \"toasterBodyTmpl.html\";\n this.defaultToastType = configOverrides.defaultToastType || \"info\";\n this.positionClass =\n configOverrides.positionClass || \"angular-toast-top-right\";\n this.titleClass = configOverrides.titleClass || \"angular-toast-title\";\n this.messageClass = configOverrides.messageClass || \"angular-toast-message\";\n this.animation = configOverrides.animation || \"\";\n this.preventDuplicates =\n configOverrides.preventDuplicates != null\n ? configOverrides.preventDuplicates\n : false;\n this.mouseoverTimerStop =\n configOverrides.mouseoverTimerStop != null\n ? configOverrides.mouseoverTimerStop\n : false;\n this.toastContainerId =\n configOverrides.toastContainerId != null\n ? configOverrides.toastContainerId\n : null;\n }\n}\n","import {\n trigger, state, style, animate, transition, group\n} from '@angular/animations';\n\nexport const Transitions = [\n trigger('toastState', [\n state('flyRight, flyLeft, slideDown, slideDown, slideUp, slideUp, fade',\n style({ opacity: 1, transform: 'translate(0,0)' })),\n transition('void => flyRight', [\n style({\n opacity: 0,\n transform: 'translateX(100%)',\n height: 0\n }),\n animate('0.15s ease-in', style({\n opacity: 1,\n height: '*'\n })),\n animate('0.25s 15ms ease-in')\n ]),\n transition('flyRight => void', [\n animate('0.25s ease-out', style({\n opacity: 0,\n transform: 'translateX(100%)'\n })),\n animate('0.15s ease-out', style({\n height: 0\n }))\n ]),\n transition('void => flyLeft', [\n style({\n opacity: 0,\n transform: 'translateX(-100%)',\n height: 0\n }),\n animate('0.15s ease-in', style({\n opacity: 1,\n height: '*'\n })),\n animate('0.25s 15ms ease-in')\n ]),\n transition('flyLeft => void', [\n animate('0.25s 10ms ease-out', style({\n opacity: 0,\n transform: 'translateX(-100%)'\n })),\n animate('0.15s ease-out', style({\n height: 0\n }))\n ]),\n transition('void => slideDown', [\n style({\n opacity: 0,\n transform: 'translateY(-500%)',\n height: 0\n }),\n group([\n animate('0.2s ease-in', style({\n height: '*'\n })),\n animate('0.4s ease-in', style({\n transform: 'translate(0,0)'\n })),\n animate('0.3s 0.1s ease-in', style({\n opacity: 1\n }))\n ])\n ]),\n transition('slideDown => void', group([\n animate('0.3s ease-out', style({\n opacity: 0\n })),\n animate('0.4s ease-out', style({\n transform: 'translateY(-500%)'\n })),\n animate('0.2s 0.2s ease-out', style({\n height: 0\n }))\n ])),\n transition('void => slideUp', [\n style({\n opacity: 0,\n transform: 'translateY(1000%)',\n height: 0\n }),\n group([\n animate('0.2s ease-in', style({\n height: '*'\n })),\n animate('0.5s ease-in', style({\n transform: 'translate(0,0)'\n })),\n animate('0.3s 0.1s ease-in', style({\n opacity: 1\n }))\n ])\n ]),\n transition('slideUp => void', group([\n animate('0.3s ease-out', style({\n opacity: 0\n })),\n animate('0.5s ease-out', style({\n transform: 'translateY(1000%)'\n })),\n animate('0.3s 0.15s ease-out', style({\n height: 0\n }))\n ])),\n transition('void => fade', [\n style({\n opacity: 0,\n height: 0\n }),\n animate('0.20s ease-in', style({\n height: '*'\n })),\n animate('0.15s ease-in', style({\n opacity: 1\n }))\n\n ]),\n transition('fade => void', [\n group([\n animate('0.0s ease-out', style({\n // reposition the background to prevent\n // a ghost image during transition\n 'background-position': '-99999px'\n })),\n animate('0.15s ease-out', style({\n opacity: 0,\n //'background-image': ''\n })),\n animate('0.3s 20ms ease-out', style({\n height: 0\n }))\n ])\n ])\n ]),\n]\n","import { Pipe, PipeTransform, inject } from \"@angular/core\";\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\n\n@Pipe({\n name: \"trustHtml\",\n pure: true,\n standalone: true,\n})\nexport class TrustHtmlPipe implements PipeTransform {\n private sanitizer: DomSanitizer = inject(DomSanitizer);\n transform(content: string | undefined): SafeHtml {\n return this.sanitizer.bypassSecurityTrustHtml(content ?? \"\");\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n ViewChild,\n ViewContainerRef,\n inject,\n} from \"@angular/core\";\nimport { NgClass } from \"@angular/common\";\nimport {\n BodyOutputType,\n IToasterConfig,\n Toast,\n} from \"./angular-toaster-config\";\nimport { TrustHtmlPipe } from \"./trust-html.pipe\";\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: \"[toastComp]\",\n templateUrl: \"./angular-toaster.component.html\",\n styleUrls: [\"./angular-toaster.component.css\"],\n imports: [NgClass, TrustHtmlPipe],\n})\nexport class ToasterComponent implements OnInit, AfterViewInit, OnDestroy {\n @Input() toasterconfig!: IToasterConfig;\n @Input() toast!: Toast;\n @Input() titleClass!: string;\n @Input() messageClass!: string;\n @ViewChild(\"componentBody\", { read: ViewContainerRef, static: false })\n componentBody!: ViewContainerRef;\n\n private viewContainerRef: ViewContainerRef = inject(ViewContainerRef);\n private changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n private ngZone: NgZone = inject(NgZone);\n private element: ElementRef = inject(ElementRef);\n private renderer2: Renderer2 = inject(Renderer2);\n\n public progressBarWidth = -1;\n public bodyOutputType = BodyOutputType;\n\n @Output()\n public clickEvent = new EventEmitter();\n @Output()\n public removeToastEvent = new EventEmitter<Toast>();\n\n private timeoutId?: number | null = null;\n private timeout: number | null = 0;\n private progressBarIntervalId?: number | null = null;\n private removeToastTick!: number | null;\n\n private removeMouseOverListener!: () => void;\n\n ngOnInit() {\n if (this.toast.progressBar) {\n this.toast.progressBarDirection =\n this.toast.progressBarDirection || \"decreasing\";\n }\n\n let timeout =\n typeof this.toast.timeout === \"number\"\n ? this.toast.timeout\n : this.toasterconfig.timeout;\n\n if (typeof timeout === \"object\") {\n timeout = timeout[this.toast.type];\n }\n\n this.timeout = timeout!;\n }\n\n ngAfterViewInit() {\n if (this.toast.bodyOutputType === this.bodyOutputType.Component) {\n const componentInstance: ComponentRef<typeof this.toast.body> =\n this.viewContainerRef.createComponent(\n this.toast.body,\n undefined,\n this.componentBody.injector\n );\n componentInstance.instance.toast = this.toast;\n this.changeDetectorRef.detectChanges();\n }\n\n if (this.toasterconfig.mouseoverTimerStop) {\n // only apply a mouseenter event when necessary to avoid\n // unnecessary event and change detection cycles.\n this.removeMouseOverListener = this.renderer2.listen(\n this.element.nativeElement,\n \"mouseenter\",\n () => this.stopTimer()\n );\n }\n\n this.configureTimer();\n }\n\n click(event: MouseEvent, toast: Toast) {\n event.stopPropagation();\n this.clickEvent.emit({ value: { toast: toast, isCloseButton: true } });\n }\n\n stopTimer() {\n this.progressBarWidth = 0;\n this.clearTimers();\n }\n\n @HostListener(\"mouseleave\")\n restartTimer() {\n if (this.toasterconfig.mouseoverTimerStop) {\n if (!this.timeoutId) {\n this.configureTimer();\n }\n } else if (this.timeout && !this.timeoutId) {\n this.removeToast();\n }\n }\n\n ngOnDestroy() {\n if (this.removeMouseOverListener) {\n this.removeMouseOverListener();\n }\n this.clearTimers();\n }\n\n private configureTimer() {\n if (!this.timeout || this.timeout < 1) {\n return;\n }\n\n if (this.toast.progressBar) {\n this.removeToastTick = new Date().getTime() + this.timeout;\n this.progressBarWidth = -1;\n }\n\n this.ngZone.runOutsideAngular(() => {\n this.timeoutId = window.setTimeout(() => {\n this.ngZone.run(() => {\n this.changeDetectorRef.markForCheck();\n this.removeToast();\n });\n }, this.timeout!);\n\n if (this.toast.progressBar) {\n this.progressBarIntervalId = window.setInterval(() => {\n this.ngZone.run(() => {\n this.updateProgressBar();\n });\n }, 10);\n }\n });\n }\n\n private updateProgressBar() {\n if (this.progressBarWidth === 0 || this.progressBarWidth === 100) {\n return;\n }\n\n this.progressBarWidth =\n ((this.removeToastTick! - new Date().getTime()) / this.timeout!) * 100;\n\n if (this.toast.progressBarDirection === \"increasing\") {\n this.progressBarWidth = 100 - this.progressBarWidth;\n }\n if (this.progressBarWidth < 0) {\n this.progressBarWidth = 0;\n }\n if (this.progressBarWidth > 100) {\n this.progressBarWidth = 100;\n }\n }\n\n private clearTimers() {\n if (this.timeoutId) {\n window.clearTimeout(this.timeoutId);\n }\n\n if (this.progressBarIntervalId) {\n window.clearInterval(this.progressBarIntervalId);\n }\n\n this.timeoutId = null;\n this.progressBarIntervalId = null;\n }\n\n private removeToast() {\n this.removeToastEvent.emit(this.toast);\n }\n}\n","<div class=\"angular-toast-content\">\n <div [ngClass]=\"titleClass\">{{toast.title}}</div>\n <div [ngClass]=\"messageClass\">\n @switch (toast.bodyOutputType) {\n @case (bodyOutputType.Component) {\n <div #componentBody></div>\n }\n @case (bodyOutputType.TrustedHtml) {\n <div [innerHTML]=\"toast.body | trustHtml\"></div>\n }\n @case (bodyOutputType.Default) {\n <div>{{toast.body}}</div>\n }\n }\n </div>\n</div>\n@if (toast.showCloseButton) {\n<button class=\"angular-toast-close-button\" (click)=\"click($event, toast)\" [innerHTML]=\"toast.closeHtml | trustHtml\">\n</button>\n}\n@if (toast.progressBar) {\n<div>\n <div class=\"angular-toast-progress-bar\" [style.width]=\"progressBarWidth + '%'\"></div>\n</div>\n\n}\n","import { Component, Input, OnDestroy, OnInit, inject } from \"@angular/core\";\nimport { NgClass } from \"@angular/common\";\nimport { Subscription } from \"rxjs\";\nimport {\n IClearWrapper,\n IToasterConfig,\n Toast,\n ToasterConfigInjectionToken,\n defaultToasterConfig,\n} from \"./angular-toaster-config\";\nimport { ToasterService } from \"./angular-toaster.service\";\nimport { Transitions } from \"./angular-toaster-animations\";\nimport { ToasterComponent } from \"./angular-toaster.component\";\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: `toaster-container, angular-toaster-container, div[toaster-container], div[angular-toaster-container]`,\n templateUrl: \"./angular-toaster-container.component.html\",\n styleUrl: \"./angular-toaster-container.component.css\",\n animations: Transitions,\n imports: [NgClass, ToasterComponent],\n})\nexport class ToasterContainerComponent implements OnInit, OnDestroy {\n private _defaultToasterConfig = inject<IToasterConfig>(ToasterConfigInjectionToken, { optional: true });\n\n private _toasterconfig: IToasterConfig;\n\n @Input() public set toasterconfig(_toasterconfig: IToasterConfig) {\n this._toasterconfig = (\n this._defaultToasterConfig\n ? {\n ...defaultToasterConfig,\n ...this._defaultToasterConfig,\n ..._toasterconfig,\n }\n : { ...defaultToasterConfig, ..._toasterconfig }\n ) as Required<IToasterConfig>;\n }\n\n public get toasterconfig(): IToasterConfig {\n return this._toasterconfig;\n }\n\n public toasts: Toast[] = [];\n\n private toasterService = inject<ToasterService>(ToasterService);\n\n private addToastSubscriber!: Subscription;\n private clearToastsSubscriber!: Subscription;\n\n constructor() {\n this._toasterconfig = (\n this._defaultToasterConfig\n ? { ...defaultToasterConfig, ...this._defaultToasterConfig }\n : defaultToasterConfig\n ) as Required<IToasterConfig>;\n }\n\n ngOnInit(): void {\n this.registerSubscribers();\n }\n\n ngOnDestroy(): void {\n if (this.addToastSubscriber) {\n this.addToastSubscriber.unsubscribe();\n }\n if (this.clearToastsSubscriber) {\n this.clearToastsSubscriber.unsubscribe();\n }\n }\n\n // event handlers\n click(toast: Toast, isCloseButton?: boolean) {\n if (toast.onClickCallback) {\n toast.onClickCallback(toast);\n }\n\n const tapToDismiss = !this.isNullOrUndefined(toast.tapToDismiss)\n ? toast.tapToDismiss\n : this.toasterconfig.tapToDismiss;\n\n if (tapToDismiss || (toast.showCloseButton && isCloseButton)) {\n this.removeToast(toast);\n }\n }\n\n keypress(toast: Toast) {\n this.removeToast(toast);\n }\n\n childClick($event: { value: { toast: Toast; isCloseButton?: boolean } }) {\n this.click($event.value.toast, $event.value.isCloseButton);\n }\n\n removeToast(toast: Toast) {\n const index = this.toasts.indexOf(toast);\n if (index < 0) {\n return;\n }\n\n const toastId = this.toastIdOrDefault(toast);\n\n this.toasts.splice(index, 1);\n\n if (toast.onHideCallback) {\n toast.onHideCallback(toast);\n }\n this.toasterService._removeToastSubject.next({\n toastId: toastId,\n toastContainerId: toast.toastContainerId,\n });\n }\n\n protected buildPositionClass(): string[] {\n const classes: string[] = [\"angular-toast-container\"];\n const position = this.toasterconfig.positionClass;\n if (position) {\n classes.push(position);\n }\n return classes;\n }\n\n protected buildToastCompClasses(toast: Toast): string[] {\n const classes: string[] = [];\n if (\n this.toasterconfig.iconClasses &&\n this.toasterconfig.iconClasses?.[toast.type]\n ) {\n classes.push(this.toasterconfig.iconClasses?.[toast.type] as string);\n }\n if (\n this.toasterconfig.typeClasses &&\n this.toasterconfig.typeClasses?.[toast.type]\n ) {\n classes.push(this.toasterconfig.typeClasses?.[toast.type] as string);\n }\n return classes;\n }\n\n // private functions\n private registerSubscribers() {\n this.addToastSubscriber = this.toasterService.addToast.subscribe(\n (toast: Toast) => {\n this.addToast(toast);\n }\n );\n\n this.clearToastsSubscriber = this.toasterService.clearToasts.subscribe(\n (clearWrapper: IClearWrapper) => {\n this.clearToasts(clearWrapper);\n }\n );\n }\n\n private addToast(toast: Toast) {\n if (\n toast.toastContainerId &&\n this.toasterconfig.toastContainerId &&\n toast.toastContainerId !== this.toasterconfig.toastContainerId\n ) {\n return;\n }\n\n if (\n !toast.type ||\n !this.toasterconfig.typeClasses?.[toast.type] ||\n !this.toasterconfig.iconClasses?.[toast.type]\n ) {\n toast.type = this.toasterconfig.defaultToastType!;\n }\n\n if (this.toasterconfig.preventDuplicates && this.toasts.length > 0) {\n if (\n toast.toastId &&\n this.toasts.some((t) => t.toastId === toast.toastId)\n ) {\n return;\n } else if (this.toasts.some((t) => t.body === toast.body)) {\n return;\n }\n }\n\n if (this.isNullOrUndefined(toast.showCloseButton)) {\n if (typeof this.toasterconfig.showCloseButton === \"object\") {\n toast.showCloseButton = this.toasterconfig.showCloseButton[toast.type];\n } else if (typeof this.toasterconfig.showCloseButton === \"boolean\") {\n toast.showCloseButton = this.toasterconfig.showCloseButton as boolean;\n }\n }\n\n if (toast.showCloseButton) {\n toast.closeHtml = toast.closeHtml || this.toasterconfig.closeHtml;\n }\n\n toast.bodyOutputType =\n toast.bodyOutputType || this.toasterconfig.bodyOutputType;\n\n if (this.toasterconfig.newestOnTop) {\n this.toasts.unshift(toast);\n if (this.isLimitExceeded()) {\n this.toasts.pop();\n }\n } else {\n this.toasts.push(toast);\n if (this.isLimitExceeded()) {\n this.toasts.shift();\n }\n }\n\n if (toast.onShowCallback) {\n toast.onShowCallback(toast);\n }\n }\n\n private isLimitExceeded() {\n return (\n this.toasterconfig.limit && this.toasts.length > this.toasterconfig.limit\n );\n }\n\n private removeAllToasts() {\n for (let i = this.toasts.length - 1; i >= 0; i--) {\n this.removeToast(this.toasts[i]);\n }\n }\n\n private clearToasts(clearWrapper: IClearWrapper) {\n const toastId = clearWrapper.toastId;\n const toastContainerId = clearWrapper.toastContainerId;\n\n if (\n this.isNullOrUndefined(toastContainerId) ||\n toastContainerId === this.toasterconfig.toastContainerId\n ) {\n this.clearToastsAction(toastId);\n }\n }\n\n private clearToastsAction(toastId?: string) {\n if (toastId) {\n this.removeToast(this.toasts.filter((t) => t.toastId === toastId)[0]);\n } else {\n this.removeAllToasts();\n }\n }\n\n private toastIdOrDefault(toast: Toast) {\n return toast.toastId || \"\";\n }\n\n private isNullOrUndefined(value: unknown): boolean {\n return value === null || typeof value === \"undefined\";\n }\n}\n","<div [ngClass]=\"buildPositionClass()\">\n @for (toast of toasts; track $index) {\n <div\n toastComp\n class=\"angular-toast\"\n aria-hidden=\"true\"\n tabIndex=\"0\"\n [toast]=\"toast\"\n [toasterconfig]=\"toasterconfig\"\n [@toastState]=\"toasterconfig.animation\"\n [titleClass]=\"toasterconfig.titleClass!\"\n [messageClass]=\"toasterconfig.messageClass!\"\n [ngClass]=\"buildToastCompClasses(toast)\"\n (click)=\"click(toast)\"\n (keypress)=\"keypress(toast)\"\n (clickEvent)=\"childClick($event)\"\n (removeToastEvent)=\"removeToast($event)\"\n ></div>\n }\n</div>\n","import { IToasterConfig, ToasterConfigInjectionToken, defaultToasterConfig } from './angular-toaster-config';\n\nexport const toasterConfigProvider = (config?: IToasterConfig) => {\n return {\n provide: ToasterConfigInjectionToken, useFactory: () => {\n const defaultConfig: IToasterConfig = config ? { ...defaultToasterConfig, ...config } : defaultToasterConfig;\n return defaultConfig;\n }\n }\n }","import { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { IToasterConfig } from \"./angular-toaster-config\";\nimport { ToasterContainerComponent } from \"./angular-toaster-container.component\";\nimport { ToasterComponent } from \"./angular-toaster.component\";\nimport { ToasterService } from \"./angular-toaster.service\";\nimport { toasterConfigProvider } from \"./angular-toaster.injectors\";\n\n\n@NgModule({\n imports: [\n CommonModule,\n ToasterComponent,\n ToasterContainerComponent,\n ],\n declarations: [],\n exports: [\n ToasterContainerComponent,\n ToasterComponent\n ]\n})\nexport class ToasterModule {\n\n static forRoot(config?: IToasterConfig): ModuleWithProviders<ToasterModule> {\n return {\n ngModule: ToasterModule,\n providers: [\n toasterConfigProvider(config),\n ToasterService,\n ToasterContainerComponent\n ]\n };\n }\n\n static forChild(config?: IToasterConfig): ModuleWithProviders<ToasterModule> {\n return {\n ngModule: ToasterModule,\n providers: [\n toasterConfigProvider(config),\n ToasterContainerComponent\n ]\n }\n }\n}\n","import { makeEnvironmentProviders } from '@angular/core';\nimport { IToasterConfig } from './angular-toaster-config';\nimport { toasterConfigProvider } from './angular-toaster.injectors';\nimport { ToasterService } from './angular-toaster.service';\nimport { ToasterContainerComponent } from './angular-toaster-container.component';\n\nexport const provideAngularToaster = (config?: IToasterConfig) => {\n return makeEnvironmentProviders([\n toasterConfigProvider(config),\n ToasterService,\n ToasterContainerComponent\n ])\n}\n\n","/*\n * Public API Surface of angular-toaster\n */\n\nexport * from './angular-toaster.service';\nexport * from './angular-toaster-container.component';\nexport * from './angular-toaster.component';\nexport * from './angular-toaster-config';\nexport * from './angular-toaster.module';\nexport * from './angular-toaster.provider';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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