notify-dash
Version:
A modern, beautiful toast notification library for Angular
1 lines • 22.4 kB
Source Map (JSON)
{"version":3,"file":"notify-dash.mjs","sources":["../../../projects/toast/src/lib/toast.service.ts","../../../projects/toast/src/lib/toast.component.ts","../../../projects/toast/src/lib/toast.module.ts","../../../projects/toast/src/public-api.ts","../../../projects/toast/src/notify-dash.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nexport interface ToastConfig {\n message: string;\n type: 'success' | 'error' | 'warning' | 'info';\n duration?: number;\n position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n}\n\nexport interface Toast extends ToastConfig {\n id: string;\n visible: boolean;\n timeoutId?: number;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ToastService {\n private toastsByPosition: { [key: string]: Toast[] } = {\n 'top-right': [],\n 'top-left': [],\n 'bottom-right': [],\n 'bottom-left': []\n };\n private toastsSubject = new BehaviorSubject<Toast[]>([]);\n\n constructor() { }\n\n getToasts(): Observable<Toast[]> {\n return this.toastsSubject.asObservable();\n }\n\n show(config: ToastConfig): void {\n const toast: Toast = {\n id: Math.random().toString(36).substr(2, 9),\n visible: true,\n duration: config.duration || 3000,\n position: config.position || 'top-right',\n ...config\n };\n\n const position = toast.position || 'top-right';\n this.toastsByPosition[position] = [...this.toastsByPosition[position], toast];\n this.toastsSubject.next(Object.values(this.toastsByPosition).flat());\n\n setTimeout(() => {\n this.hide(toast.id);\n }, toast.duration);\n }\n\n success(message: string, duration?: number, position?: ToastConfig['position']): void {\n this.show({ message, type: 'success', duration, position });\n }\n\n error(message: string, duration?: number, position?: ToastConfig['position']): void {\n this.show({ message, type: 'error', duration, position });\n }\n\n warning(message: string, duration?: number, position?: ToastConfig['position']): void {\n this.show({ message, type: 'warning', duration, position });\n }\n\n info(message: string, duration?: number, position?: ToastConfig['position']): void {\n this.show({ message, type: 'info', duration, position });\n }\n\n hide(id: string): void {\n for (const position in this.toastsByPosition) {\n const toast = this.toastsByPosition[position].find(t => t.id === id);\n if (toast) {\n toast.visible = false;\n this.toastsSubject.next(Object.values(this.toastsByPosition).flat());\n setTimeout(() => {\n this.toastsByPosition[position] = this.toastsByPosition[position].filter(t => t.id !== id);\n this.toastsSubject.next(Object.values(this.toastsByPosition).flat());\n }, 300);\n break;\n }\n }\n }\n}\n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { ToastService, Toast } from './toast.service';\nimport { Subscription } from 'rxjs';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Component({\n selector: 'notify-toast',\n template: `\n <ng-container *ngFor=\"let position of getUniquePositions()\">\n <div class=\"toast-container\" [ngClass]=\"getPositionClasses(position)\">\n <div *ngFor=\"let toast of getToastsByPosition(position)\"\n class=\"toast\"\n [id]=\"'toast-' + toast.id\"\n [ngClass]=\"['toast-enter', 'toast-' + toast.type]\">\n <!-- Progress bar -->\n <div class=\"progress-bar\" [ngClass]=\"'progress-' + toast.type\"></div>\n\n <!-- Content -->\n <div class=\"toast-content\">\n <div class=\"icon-circle\" [ngClass]=\"'icon-' + toast.type\">\n <div class=\"icon-core\" [innerHTML]=\"getIcon(toast.type)\"></div>\n </div>\n\n <div class=\"toast-text\">\n <h3 class=\"toast-title\">{{getTitle(toast.type)}}</h3>\n <p class=\"toast-message\">{{toast.message}}</p>\n </div>\n\n <!-- Close button -->\n <button (click)=\"dismissToast(toast.id)\" class=\"toast-close\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n </ng-container>\n `,\n styles: [`\n :host {\n display: contents;\n font-family: inherit;\n }\n\n .icon-core {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n }\n\n .icon-core svg {\n width: 100%;\n height: 100%;\n }\n\n .toast-container {\n position: fixed;\n z-index: 50;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n padding: 0.5rem;\n width: 22rem;\n }\n\n .toast-container.top-right {\n top: 0.5rem;\n right: 0.5rem;\n }\n\n .toast-container.top-left {\n top: 0.5rem;\n left: 0.5rem;\n }\n\n .toast-container.bottom-right {\n bottom: 0.5rem;\n right: 0.5rem;\n }\n\n .toast-container.bottom-left {\n bottom: 0.5rem;\n left: 0.5rem;\n }\n\n .toast {\n backdrop-filter: blur(16px);\n -webkit-backdrop-filter: blur(16px);\n background: rgba(255, 255, 255, 0.65);\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08);\n border-radius: 0.75rem;\n border: 1px solid;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n }\n\n .toast.toast-success {\n border-color: #d1fae5;\n }\n\n .toast.toast-error {\n border-color: #fee2e2;\n }\n\n .toast.toast-warning {\n border-color: #fef3c7;\n }\n\n .toast.toast-info {\n border-color: #dbeafe;\n }\n\n .toast-content {\n display: flex;\n align-items: flex-start;\n padding: 1rem;\n gap: 0.75rem;\n }\n\n .icon-circle {\n border-radius: 9999px;\n width: 2.5rem;\n height: 2.5rem;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n box-shadow: 0 4px 12px -2px rgba(0, 0, 0, 0.1),\n inset 0 -1px 4px rgba(0, 0, 0, 0.05),\n inset 0 1px 4px rgba(255, 255, 255, 0.4);\n }\n\n .icon-circle.icon-success {\n background-color: rgba(16, 185, 129, 0.1);\n color: #059669;\n }\n\n .icon-circle.icon-error {\n background-color: rgba(239, 68, 68, 0.1);\n color: #dc2626;\n }\n\n .icon-circle.icon-warning {\n background-color: rgba(245, 158, 11, 0.1);\n color: #d97706;\n }\n\n .icon-circle.icon-info {\n background-color: rgba(59, 130, 246, 0.1);\n color: #2563eb;\n }\n\n .icon-circle svg {\n width: 1.25rem;\n height: 1.25rem;\n }\n\n .toast-text {\n flex: 1;\n }\n\n .toast-title {\n font-weight: 600;\n color: #1f2937;\n font-size: 1rem;\n line-height: 1.5;\n margin: 0;\n }\n\n .toast-message {\n color: #4b5563;\n font-size: 0.875rem;\n line-height: 1.5;\n margin-top: 0.25rem;\n margin-bottom: 0;\n }\n\n .toast-close {\n color: #9ca3af;\n background: none;\n border: none;\n padding: 0.25rem;\n cursor: pointer;\n transition: color 0.2s;\n }\n\n .toast-close:hover {\n color: #4b5563;\n }\n\n .toast-close svg {\n width: 1.25rem;\n height: 1.25rem;\n }\n\n .progress-bar {\n height: 3px;\n width: 100%;\n animation: progress 3.5s linear forwards;\n }\n\n .progress-bar.progress-success {\n background: linear-gradient(90deg, #34d399, #a7f3d0);\n }\n\n .progress-bar.progress-error {\n background: linear-gradient(90deg, #f87171, #fecaca);\n }\n\n .progress-bar.progress-warning {\n background: linear-gradient(90deg, #fbbf24, #fde68a);\n }\n\n .progress-bar.progress-info {\n background: linear-gradient(90deg, #60a5fa, #bfdbfe);\n }\n\n @keyframes slideIn {\n 0% {\n opacity: 0;\n transform: translateY(20px) scale(0.95);\n }\n 100% {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n }\n\n @keyframes slideOut {\n 0% {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n 100% {\n opacity: 0;\n transform: translateY(20px) scale(0.95);\n }\n }\n\n @keyframes progress {\n 0% {\n width: 100%;\n }\n 100% {\n width: 0%;\n }\n }\n\n .toast-enter {\n animation: slideIn 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards;\n }\n\n .toast-exit {\n animation: slideOut 0.3s ease-out forwards;\n }\n\n :host-context(.dark) .toast {\n background: rgba(15, 15, 20, 0.85);\n }\n\n :host-context(.dark) .toast-title {\n color: rgba(255, 255, 255, 0.9);\n }\n\n :host-context(.dark) .toast-message {\n color: rgba(156, 163, 175, 0.9);\n }\n\n :host-context(.dark) .toast-close:hover {\n color: rgba(209, 213, 219, 1);\n }\n `]\n})\nexport class ToastComponent implements OnInit, OnDestroy {\n toasts: Toast[] = [];\n private subscription?: Subscription;\n\n constructor(\n private toastService: ToastService,\n private sanitizer: DomSanitizer\n ) {}\n\n dismissToast(id: string): void {\n const toastElement = document.getElementById(`toast-${id}`);\n if (toastElement) {\n const progressBar = toastElement.querySelector('.progress-bar');\n if (progressBar) {\n (progressBar as HTMLElement).style.animation = 'none';\n }\n toastElement.classList.remove('toast-enter');\n toastElement.classList.add('toast-exit');\n\n // Clear the timeout to prevent duplicate dismissals\n const toast = this.toasts.find(t => t.id === id);\n if (toast && (toast as any).timeoutId) {\n clearTimeout((toast as any).timeoutId);\n }\n\n setTimeout(() => {\n this.toastService.hide(id);\n }, 300);\n }\n }\n\n ngOnInit(): void {\n this.subscription = this.toastService.getToasts().subscribe(toasts => {\n // Filter out toasts that already have timeouts\n const newToasts = toasts.filter((toast) => !(toast as any).timeoutId);\n\n // Set timeouts only for new toasts\n newToasts.forEach((toast) => {\n const timeoutId = setTimeout(() => {\n const toastElement = document.getElementById(`toast-${toast.id}`);\n if (toastElement) {\n toastElement.classList.remove('toast-enter');\n toastElement.classList.add('toast-exit');\n setTimeout(() => {\n this.toastService.hide(toast.id);\n }, 300);\n }\n }, 4700);\n (toast as any).timeoutId = timeoutId;\n });\n\n this.toasts = toasts;\n });\n }\n\n ngOnDestroy(): void {\n // Clear all timeouts\n this.toasts.forEach((toast) => {\n if ((toast as any).timeoutId) {\n clearTimeout((toast as any).timeoutId);\n }\n });\n this.subscription?.unsubscribe();\n }\n\n getUniquePositions(): string[] {\n return [...new Set(this.toasts.map(t => t.position || 'top-right'))];\n }\n\n getPositionClasses(position: string): string {\n return position;\n }\n\n getToastClasses(type: string): string {\n return type;\n }\n\n getGlowClass(type: string): string {\n return `glow-${type}`;\n }\n\n getIconContainerClasses(type: string): string {\n return type;\n }\n\n getToastsByPosition(position: string): Toast[] {\n return this.toasts.filter(t => (t.position || 'top-right') === position);\n }\n\n getIcon(type: string): SafeHtml {\n const icons: any = {\n success: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clip-rule=\"evenodd\"></path>\n </svg>`,\n error: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\" clip-rule=\"evenodd\"></path>\n </svg>`,\n warning: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\" clip-rule=\"evenodd\"></path>\n </svg>`,\n info: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2h-1V9z\" clip-rule=\"evenodd\"></path>\n </svg>`\n };\n return this.sanitizer.bypassSecurityTrustHtml(icons[type] || icons.info);\n }\n\n getTitle(type: string): string {\n const titles: any = {\n success: 'Success!',\n error: 'Error!',\n warning: 'Warning!',\n info: 'Information'\n };\n return titles[type] || titles.info;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ToastComponent } from './toast.component';\nimport { ToastService } from './toast.service';\n\n@NgModule({\n declarations: [\n ToastComponent\n ],\n imports: [\n CommonModule\n ],\n exports: [\n ToastComponent\n ],\n providers: [\n ToastService\n ]\n})\nexport class ToastModule { }\n","/*\n * Public API Surface of toast\n */\n\nexport * from './lib/toast.service';\nexport * from './lib/toast.component';\nexport * from './lib/toast.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ToastService"],"mappings":"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"}