ng-toast-notify
Version:
Lightweight and flexible toast notifications for Angular
1 lines • 43.7 kB
Source Map (JSON)
{"version":3,"file":"ng-toast-notify.mjs","sources":["../../../projects/ng-toast-notify/src/lib/toastysound.service.ts","../../../projects/ng-toast-notify/src/lib/toasty.service.ts","../../../projects/ng-toast-notify/src/lib/toasty/toasty.component.ts","../../../projects/ng-toast-notify/src/lib/toasty/toasty.component.html","../../../projects/ng-toast-notify/src/public-api.ts","../../../projects/ng-toast-notify/src/ng-toast-notify.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ToastysoundService {\r\n\r\n constructor() { }\r\n\r\n private oscillatorType: OscillatorType = 'sine';\r\n private frequency: number = 430;\r\n private audioCtx: AudioContext = new AudioContext();\r\n\r\n notify() {\r\n if (this.audioCtx.state === 'suspended') {\r\n this.audioCtx.resume();\r\n }\r\n \r\n const osc = this.audioCtx.createOscillator();\r\n const gain = this.audioCtx.createGain();\r\n\r\n osc.type = this.oscillatorType;\r\n osc.frequency.value = this.frequency;\r\n\r\n gain.gain.setValueAtTime(0.3, this.audioCtx.currentTime);\r\n gain.gain.exponentialRampToValueAtTime(0.00009, this.audioCtx.currentTime + 0.4);\r\n\r\n osc.connect(gain);\r\n gain.connect(this.audioCtx.destination);\r\n\r\n osc.start(0);\r\n osc.stop(this.audioCtx.currentTime + 1);\r\n }\r\n}\r\n","import { Injectable, Type } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\r\nimport { ToastysoundService } from './toastysound.service';\r\n\r\ninterface IServiceConfig {\r\n capacity: number;\r\n duration: number;\r\n grouping: boolean;\r\n messages: Record<string, string>;\r\n threshold_offsetX: number;\r\n}\r\n\r\ninterface IToastQueue<T> {\r\n setCapacity(c: number): void;\r\n getCapacity(): number;\r\n enqueue(item: T): void;\r\n dequeue(): T | undefined;\r\n size(): number;\r\n getElements(): T[];\r\n removeId(id: number): T | undefined;\r\n}\r\n\r\nclass Queue<T> implements IToastQueue<T> {\r\n private storage: T[] = [];\r\n\r\n constructor(private capacity: number = Infinity) {\r\n }\r\n\r\n setCapacity(c: number) {\r\n this.capacity = c;\r\n }\r\n getCapacity() { return this.capacity; }\r\n\r\n enqueue(item: T): void {\r\n if (this.size() >= this.capacity) {\r\n throw Error('Toasty queue has reached max capacity, you cannot add more items.');\r\n }\r\n this.storage.push(item);\r\n }\r\n dequeue(): T | undefined {\r\n return this.storage.shift();\r\n }\r\n size(): number {\r\n return this.storage.length;\r\n }\r\n getElements(): T[] {\r\n return this.storage;\r\n }\r\n removeId(id: number): T | undefined {\r\n const index = this.storage.findIndex(item => (item as any).id === id);\r\n if (index !== -1) {\r\n const [removed] = this.storage.splice(index, 1);\r\n return removed;\r\n }\r\n return undefined;\r\n }\r\n}\r\nexport enum ToastType {\r\n Basic = 'basic',\r\n Success = 'success',\r\n Error = 'error',\r\n Info = 'info',\r\n Warning = 'warning',\r\n Custom = 'custom',\r\n Promise = 'promise',\r\n Component = 'component'\r\n}\r\n\r\ninterface ToastGesture {\r\n date: number;\r\n touchStart?: Touch;\r\n touchEnd?: Touch;\r\n offsetX?: number;\r\n}\r\n\r\nexport interface ToastModel {\r\n id: number;\r\n hash?: string;\r\n title: string;\r\n message: string;\r\n type: ToastType;\r\n timestamp: number;\r\n duration: number;\r\n expires: number;\r\n config?: ToastyConfig;\r\n get icon(): string;\r\n\r\n gesture?: ToastGesture;\r\n animatePbar?: boolean; // Used to animate the progress bar\r\n count: number; // Used to count duplicate toasts\r\n scheduleId?: number;\r\n\r\n timeOutRef?: ReturnType<typeof setTimeout>\r\n}\r\n\r\nexport interface ToastSchedule {\r\n startAt: number; // timestamp in milliseconds\r\n repeatEvery: number; // in milliseconds\r\n repeatCount: number;\r\n}\r\n\r\nexport interface ToastAction {\r\n label: string;\r\n callback: () => void;\r\n class?: string; // Para styling personalizado\r\n}\r\n\r\nexport interface ToastyConfig {\r\n type?: ToastType;\r\n duration?: number;\r\n sticky?: boolean;\r\n enableHtml?: boolean;\r\n customStyle?: Record<string, string>;\r\n loading?: boolean;\r\n beep?: boolean;\r\n progressBar?: boolean;\r\n component?: Type<any>;\r\n componentParams?: Record<string, any>;\r\n schedule?: ToastSchedule;\r\n actions?: ToastAction[]; // Array de botones/acciones\r\n}\r\n\r\nexport interface ToastyPromise<T> {\r\n promise: Promise<T>;\r\n loading: string;\r\n success: string | ((result: T) => string);\r\n error: string | ((err: any) => string);\r\n}\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ToastyService {\r\n\r\n private TOASTY_SERVICE_CONFIG: IServiceConfig = {\r\n capacity: 10,\r\n duration: 5000,\r\n grouping: false,\r\n messages: {\r\n now: 'just now',\r\n seconds: '{0} seconds ago',\r\n minutes: '{0} minutes ago'\r\n },\r\n threshold_offsetX: 170\r\n };\r\n\r\n\r\n private queue: IToastQueue<ToastModel> = new Queue<ToastModel>(this.TOASTY_SERVICE_CONFIG.capacity);\r\n private counter: number = 0;\r\n private newToastBehaviorSubject = new BehaviorSubject<ToastModel[]>([]);\r\n public newToast$ = this.newToastBehaviorSubject.asObservable();\r\n private deleteToastBehaviorSubject = new BehaviorSubject<ToastModel | undefined>(undefined);\r\n public deleteToast$ = this.deleteToastBehaviorSubject.asObservable();\r\n private updateToastBehaviorSubject = new BehaviorSubject<ToastModel | undefined>(undefined);\r\n public updateToast$ = this.updateToastBehaviorSubject.asObservable();\r\n\r\n constructor(private _toastySoundService: ToastysoundService) {\r\n }\r\n\r\n setDefaultDuration(d: number): void { this.TOASTY_SERVICE_CONFIG.duration = d; }\r\n getDefaultDuration(): number { return this.TOASTY_SERVICE_CONFIG.duration; }\r\n setCapacity(c: number) { this.TOASTY_SERVICE_CONFIG.capacity = c; this.queue.setCapacity(c); }\r\n getCapacity(): number { return this.queue.getCapacity(); }\r\n getGrouping(): boolean { return this.TOASTY_SERVICE_CONFIG.grouping; }\r\n setGrouping(g: boolean) { this.TOASTY_SERVICE_CONFIG.grouping = g; }\r\n\r\n showToast(title: string, message: string, toastConfig?: ToastyConfig | undefined): number {\r\n const hash = this.hash(title + message + (toastConfig ? JSON.stringify(toastConfig) : ''));\r\n\r\n if (this.TOASTY_SERVICE_CONFIG.grouping) {\r\n // check if a toast with the same hash already exists\r\n const existingToast = this.queue.getElements().find(t => t.hash === hash);\r\n if (existingToast) {\r\n existingToast.count++;\r\n //TODO: reset expiration time if not sticky, we have to reset the setTimeout associated to the toast too\r\n // if (!existingToast.config?.sticky && !isPromise) {\r\n // existingToast.expires = Date.now() + existingToast.duration;\r\n // }\r\n // this.newToastBehaviorSubject.next([...this.queue.getElements()]); // Trigger re-render to show updated count\r\n this.refreshToastExpiration(existingToast);\r\n return existingToast.id;\r\n }\r\n }\r\n\r\n this.counter++;\r\n\r\n // if sticky is true duration is infinity else use the provided duration or the default one\r\n // promise toasts duration is setted inifity at the beginning and updated when the promise is resolved or rejected\r\n const duration = (toastConfig?.sticky || toastConfig?.type == ToastType.Promise) ? Infinity : (toastConfig?.duration ?? this.TOASTY_SERVICE_CONFIG.duration);\r\n\r\n const toast: ToastModel = {\r\n id: this.counter,\r\n hash: hash,\r\n title: title,\r\n message: message,\r\n type: toastConfig?.type ?? ToastType.Basic,\r\n timestamp: Date.now(),\r\n duration: duration,\r\n expires: Date.now() + duration,\r\n config: toastConfig,\r\n count: 1,\r\n get icon() {\r\n if (toastConfig?.type == ToastType.Success)\r\n return \"✅\";\r\n if (toastConfig?.type == ToastType.Info)\r\n return \"ℹ️\";\r\n if (toastConfig?.type == ToastType.Warning)\r\n return \"⚠️\";\r\n if (toastConfig?.type == ToastType.Error)\r\n return \"❌\";\r\n\r\n return \"\";\r\n }\r\n };\r\n\r\n if (toastConfig?.schedule) {\r\n this.scheduleToast({ ...toast, schedule: toastConfig.schedule });\r\n }\r\n else {\r\n this.queue.enqueue(toast);\r\n this.newToastBehaviorSubject.next([...this.queue.getElements()]);\r\n this.executeToastFinalLogic(toast);\r\n }\r\n\r\n\r\n return toast.id;\r\n }\r\n\r\n private executeToastFinalLogic(toast: ToastModel): void {\r\n if (toast.config?.beep) {\r\n this._toastySoundService.notify();\r\n }\r\n\r\n // if sticky progress bar is not animated and toast will not expire\r\n if (!toast.config?.sticky) {\r\n if (toast.config?.progressBar) {\r\n setTimeout(() => {\r\n this.updateToast(toast.id, { animatePbar: true });\r\n }, 100);\r\n }\r\n\r\n if (toast.config?.type != ToastType.Promise) {\r\n toast.timeOutRef = setTimeout(() => {\r\n this.removeToast(toast.id);\r\n }, toast.expires - Date.now() + 5);\r\n }\r\n }\r\n }\r\n\r\n showToastPromise<T>(title: string, promise: ToastyPromise<T>, config?: ToastyConfig) {\r\n const idtoast = this.showToast(title, promise.loading, { ...config, type: ToastType.Promise, loading: true });\r\n const duration = config?.duration ?? this.TOASTY_SERVICE_CONFIG.duration;\r\n\r\n promise.promise\r\n .then((result) => {\r\n const successMessage =\r\n typeof promise.success === 'function'\r\n ? promise.success(result)\r\n : promise.success;\r\n\r\n this.updateToast(idtoast, {\r\n message: successMessage,\r\n type: ToastType.Success,\r\n expires: Date.now() + duration,\r\n config: { loading: false }\r\n });\r\n })\r\n .catch((err) => {\r\n const errorMessage =\r\n typeof promise.error === 'function'\r\n ? promise.error(err)\r\n : promise.error;\r\n\r\n this.updateToast(idtoast, {\r\n message: errorMessage,\r\n type: ToastType.Error,\r\n expires: Date.now() + duration,\r\n config: { loading: false }\r\n });\r\n })\r\n .finally(() => {\r\n if (!config?.sticky)\r\n setTimeout(() => this.removeToast(idtoast), duration)\r\n }\r\n );\r\n\r\n }\r\n\r\n showToastComponent(component: Type<any>, componentParams: Record<string, any>, config?: ToastyConfig): number {\r\n const toastId = this.showToast('', '', { ...config, component: component, componentParams: componentParams, type: ToastType.Component });\r\n return toastId;\r\n }\r\n\r\n showToastSchedule(title: string, message: string, schedule: ToastSchedule, config: Omit<ToastyConfig, \"schedule\">): void {\r\n const toastId = this.showToast(title, message, { ...config, schedule });\r\n }\r\n\r\n showToastConfirm(title: string, message: string, onConfirm: () => void, onCancel?: () => void, config?: Omit<ToastyConfig, 'actions'>): number {\r\n // Primero creamos el toast sin acciones para obtener el ID\r\n const toastId = this.showToast(title, message, { \r\n ...config, \r\n sticky: true, // Confirmation toasts should not be dismissible by timeout\r\n type: config?.type || ToastType.Info\r\n });\r\n\r\n // Ahora que tenemos el ID, creamos las acciones que lo referencian\r\n const actions: ToastAction[] = [\r\n {\r\n label: 'OK',\r\n callback: () => {\r\n onConfirm();\r\n this.closeToast(toastId);\r\n },\r\n class: 'confirm-btn'\r\n },\r\n {\r\n label: 'Cancel',\r\n callback: () => {\r\n if (onCancel) onCancel();\r\n this.closeToast(toastId);\r\n },\r\n class: 'cancel-btn'\r\n }\r\n ];\r\n\r\n // Actualizamos el toast con las acciones\r\n this.updateToast(toastId, { config: { ...config, actions, sticky: true, type: config?.type || ToastType.Info } });\r\n\r\n return toastId;\r\n }\r\n\r\n private scheduled: Map<number, { timeoutId?: ReturnType<typeof setTimeout> }> = new Map();\r\n\r\n private scheduleToast(toast: ToastModel & Required<Pick<ToastyConfig, \"schedule\">>): void {\r\n\r\n const { startAt, repeatEvery, repeatCount } = toast.schedule;\r\n const now = Date.now();\r\n\r\n let delay = 0;\r\n if (startAt && startAt > now) {\r\n delay = startAt - now;\r\n }\r\n [toast.timestamp, toast.expires] = [startAt, startAt + toast.duration];\r\n\r\n const ref = { timeoutId: undefined as ReturnType<typeof setTimeout> | undefined };\r\n\r\n this.scheduled.set(toast.id, ref);\r\n\r\n ref.timeoutId = setTimeout(() => {\r\n let times = 0;\r\n\r\n const showandrepeat = () => {\r\n const now = Date.now();\r\n [toast.timestamp, toast.expires] = [now, now + toast.duration];\r\n this.queue.enqueue(toast);\r\n this.newToastBehaviorSubject.next([...this.queue.getElements()]);\r\n\r\n this.executeToastFinalLogic(toast);\r\n times++;\r\n\r\n if (repeatEvery && (times < repeatCount || repeatCount == 0)) {\r\n ref.timeoutId = setTimeout(showandrepeat, toast.duration + repeatEvery);\r\n } else {\r\n this.scheduled.delete(toast.id);\r\n }\r\n }\r\n\r\n showandrepeat();\r\n }, delay);\r\n }\r\n\r\n\r\n\r\n removeToast(id: number): void {\r\n this.newToastBehaviorSubject.next([...this.queue.getElements()]); // Trigger re-render to start exit animation\r\n setTimeout(() => { const t = this.queue.removeId(id); this.newToastBehaviorSubject.next([...this.queue.getElements()]); }, 500); // Wait for animation to finish before removing from queue\r\n }\r\n\r\n closeToast(id: number): void {\r\n const t = this.queue.removeId(id);\r\n this.newToastBehaviorSubject.next([...this.queue.getElements()]);\r\n }\r\n\r\n updateTouchStart(id: number, touch: Touch): void {\r\n const gesture: ToastGesture = { date: Date.now(), touchStart: touch };\r\n this.updateToast(id, { gesture: gesture });\r\n }\r\n\r\n // Loops through the toasts to find which one was touched and updates its touchEnd\r\n updateTouchEnd(touch: Touch): void {\r\n const toasts = this.queue.getElements().forEach(\r\n t => {\r\n if (t.gesture) {\r\n const deltaY = Math.abs(touch.clientY - t.gesture.touchStart!.clientY);\r\n const deltaX = Math.abs(touch.clientX - t.gesture.touchStart!.clientX);\r\n const deltaTime = Date.now() - t.gesture.date;\r\n\r\n if (deltaTime < 500 && deltaX > this.TOASTY_SERVICE_CONFIG.threshold_offsetX) {\r\n this.closeToast(t.id);\r\n }\r\n else {\r\n t.gesture = undefined; // Reset gesture if not swiped\r\n }\r\n }\r\n }\r\n )\r\n }\r\n\r\n updateTouchMove(touch: Touch): void {\r\n const toasts = this.queue.getElements();\r\n toasts.forEach(t => {\r\n if (t.gesture) {\r\n const deltaX = touch.clientX - t.gesture.touchStart!.clientX;\r\n t.gesture.offsetX = deltaX; // Store the offset for potential use in UI updates\r\n }\r\n });\r\n }\r\n\r\n private updateToast(id: number, newData: Partial<ToastModel>): void {\r\n const toasts = this.queue.getElements();\r\n const index = toasts.findIndex(t => t.id === id);\r\n\r\n if (index !== -1) {\r\n toasts[index] = { ...toasts[index], ...newData };\r\n this.newToastBehaviorSubject.next([...toasts]);\r\n }\r\n }\r\n\r\n private refreshToastExpiration(param: { id: number } | { toast: ToastModel }): void {\r\n\r\n let toast: ToastModel | undefined;\r\n if ('id' in param) {\r\n const toasts = this.queue.getElements();\r\n toast = toasts.find(t => t.id === param.id);\r\n } else {\r\n toast = param.toast;\r\n }\r\n\r\n if (toast) {\r\n clearTimeout(toast?.timeOutRef);\r\n\r\n toast.expires = Date.now() + toast.duration;\r\n\r\n this.executeToastFinalLogic(toast);\r\n this.newToastBehaviorSubject.next([...this.queue.getElements()]);\r\n }\r\n }\r\n\r\n private hash(str: string): string {\r\n let hash = 5381;\r\n\r\n for (let i = 0; i < str.length; i++) {\r\n hash = (hash * 33) ^ str.charCodeAt(i);\r\n }\r\n\r\n return (hash >>> 0).toString(16);\r\n }\r\n\r\n}\r\n","import { AsyncPipe, NgClass, NgComponentOutlet, NgStyle } from '@angular/common';\r\nimport { Component, HostListener, Input, SimpleChanges } from '@angular/core';\r\nimport { ToastAction, ToastModel, ToastyService, ToastType } from '../toasty.service';\r\n\r\nenum ToastyContainerPosition {\r\n TOP_LEFT = 'top-left',\r\n TOP = 'top',\r\n TOP_RIGHT = 'top-right',\r\n BOTTOM_LEFT = 'bottom-left',\r\n BOTTOM = 'bottom',\r\n BOTTOM_RIGHT = 'bottom-right'\r\n}\r\n\r\n@Component({\r\n selector: 'toasty',\r\n standalone: true,\r\n imports: [NgClass, NgStyle, AsyncPipe, NgComponentOutlet],\r\n templateUrl: './toasty.component.html',\r\n styleUrl: './toasty.component.css'\r\n})\r\nexport class ToastyComponent {\r\n\r\n @Input() position: string = ToastyContainerPosition.BOTTOM_RIGHT;\r\n @Input() duration: number = this._toastService.getDefaultDuration();\r\n @Input() capacity: number = this._toastService.getCapacity();\r\n @Input() grouping: boolean = this._toastService.getGrouping();\r\n\r\n protected ToastType = ToastType; // to use in the template\r\n\r\n protected toasts$ = this._toastService.newToast$;\r\n\r\n private readonly positionMap: Record<string, string[]> = {\r\n 'top-left': ['top', 'left'],\r\n 'top': ['top', 'center'],\r\n 'top-right': ['top', 'right'],\r\n 'bottom-left': ['bottom', 'left'],\r\n 'bottom': ['bottom', 'center'],\r\n 'bottom-right': ['bottom', 'right'],\r\n };\r\n constructor(private _toastService: ToastyService) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n // Subscribe to the toast service to receive new toasts\r\n // this._toastService.newToast$.subscribe(t => {\r\n // if (t) {\r\n // // console.log(t);\r\n // }\r\n // });\r\n\r\n this._toastService.deleteToast$.subscribe(t => {\r\n if (t) {\r\n // we dont need to delete toast, because internally in the service the toast has been deleted and in future toasts, only live toasts will be received from the service\r\n // console.log(t);\r\n }\r\n });\r\n\r\n this._toastService.updateToast$.subscribe(t => {\r\n if (t) {\r\n // console.log(t);\r\n }\r\n })\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['duration']) {\r\n this._toastService.setDefaultDuration(this.duration);\r\n }\r\n if (changes['capacity']) {\r\n this._toastService.setCapacity(changes['capacity'].currentValue);\r\n }\r\n if (changes['grouping']) {\r\n this._toastService.setGrouping(changes['grouping'].currentValue);\r\n }\r\n }\r\n\r\n\r\n closeToast(id: number): void {\r\n this._toastService.closeToast(id);\r\n }\r\n\r\n executeAction(action: ToastAction): void {\r\n action.callback();\r\n }\r\n\r\n containerClass(): string[] {\r\n return this.positionMap[this.position] ?? [ToastyContainerPosition.BOTTOM_RIGHT];\r\n }\r\n\r\n expires(t: ToastModel): boolean {\r\n return (t.expires < Date.now());\r\n }\r\n\r\n getDurationUntilExpire(expires: number): number {\r\n const duration = expires - Date.now();\r\n return duration > 0 ? duration : 0;\r\n }\r\n\r\n // Swipe to close functionality\r\n @HostListener('touchstart', ['$event'])\r\n onTouchStart(event: TouchEvent) {\r\n const toastid = this.localizeToastIdFromTouch(event);\r\n this._toastService.updateTouchStart(toastid, event.changedTouches[0]);\r\n }\r\n\r\n @HostListener('touchend', ['$event'])\r\n onTouchEnd(event: TouchEvent) {\r\n this._toastService.updateTouchEnd(event.changedTouches[0]);\r\n }\r\n\r\n @HostListener('touchmove', ['$event'])\r\n onTouchMove(event: TouchEvent) {\r\n this._toastService.updateTouchMove(event.changedTouches[0]);\r\n }\r\n\r\n private localizeToastIdFromTouch(event: TouchEvent): number {\r\n let current = event.target as HTMLElement;\r\n let maxnesting : number = 4;\r\n while (!current.classList.contains('toasty') && maxnesting > 0) {\r\n current = current.parentElement as HTMLElement;\r\n maxnesting--;\r\n }\r\n\r\n return parseInt(current.getAttribute('data-toast-id') || '0');\r\n }\r\n\r\n}\r\n","<div class=\"toasty-container\" [ngClass]=\"containerClass()\">\r\n @for (item of toasts$ | async; track item.id) {\r\n <div class=\"toasty-wrapper\" [style.transform]=\"'translateX(' + (item.gesture?.offsetX || 0) + 'px)'\"\r\n [style.transition]=\"item.gesture ? 'none' : 'transform 0.3s ease'\">\r\n <div class=\"toasty\" [attr.data-toast-id]=\"item.id\" [ngClass]=\"item.type\" [class.fadeout]=\"expires(item)\"\r\n [ngStyle]=\"item.config?.customStyle\">\r\n\r\n <!-- icon -->\r\n @if (item.config?.loading) {\r\n <div class=\"toasty-loading\"></div>\r\n } @else if (item.type == ToastType.Success) {\r\n <div class=\"toasty-icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-6 w-6 shrink-0 stroke-current\" fill=\"none\"\r\n viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\r\n d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" />\r\n </svg>\r\n </div>\r\n } @else if (item.type == ToastType.Error) {\r\n <div class=\"toasty-icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-6 w-6 shrink-0 stroke-current\" fill=\"none\"\r\n viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\r\n d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\" />\r\n </svg>\r\n </div>\r\n } @else if (item.type == ToastType.Info) {\r\n <div class=\"toasty-icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\"\r\n class=\"h-6 w-6 shrink-0 stroke-current\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\r\n d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"></path>\r\n </svg>\r\n </div>\r\n } @else if (item.type == ToastType.Warning) {\r\n <div class=\"toasty-icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-6 w-6 shrink-0 stroke-current\" fill=\"none\"\r\n viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\r\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\" />\r\n </svg>\r\n </div>\r\n } @else {\r\n <div class=\"toasty-noicon\"></div>\r\n }\r\n\r\n <div class=\"toasty-content\">\r\n @if (item.config?.type == ToastType.Component && item.config?.component) {\r\n <ng-container *ngComponentOutlet=\"item.config?.component ?? null; \r\n inputs: item.config?.componentParams\">\r\n </ng-container>\r\n } @else {\r\n @if (item.title) {\r\n <div class=\"toasty-header\">\r\n <strong class=\"toasty-title\">{{item.title}}</strong>\r\n @if (item.count > 1) {\r\n <span class=\"toasty-badge\">x{{item.count}}</span>\r\n }\r\n <!-- <small class=\"toasty-time\">{{item.timestamp}}</small> -->\r\n </div>\r\n }\r\n @if (item.config?.enableHtml) {\r\n <div class=\"toasty-body\" [innerHTML]=\"item.message\"></div>\r\n } @else {\r\n <div class=\"toasty-body\">{{item.message}}</div>\r\n }\r\n \r\n @if (item.config?.actions?.length) {\r\n <div class=\"toasty-actions\">\r\n @for (action of item.config?.actions; track $index) {\r\n <button type=\"button\" \r\n class=\"toasty-action-btn\"\r\n [ngClass]=\"action?.class\"\r\n (click)=\"executeAction(action)\">\r\n {{action?.label}}\r\n </button>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n <div class=\"toasty-close\">\r\n <button type=\"button\" class=\"toasty-close\" (click)=\"closeToast(item.id)\">×</button>\r\n </div>\r\n @if (item.config?.progressBar) {\r\n <div class=\"toasty-progress\" [class.animate]=\"item.animatePbar\"\r\n [style.transition-duration.ms]=\"item.duration\"></div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n</div>","/*\r\n * Public API Surface of ng-toast-notify\r\n */\r\n\r\nexport * from './lib/toasty.service';\r\nexport * from './lib/toasty/toasty.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ToastysoundService","i1.ToastyService"],"mappings":"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"}