UNPKG

ngx-french-toast

Version:

<p align="center"> <img src="./projects/ngx-french-toast/logo.png" alt="ngx-french-toast logo" width="200px" /> </p>

1 lines 31.6 kB
{"version":3,"file":"ngx-french-toast.mjs","sources":["../../../projects/ngx-french-toast/src/lib/enums/enums.ts","../../../projects/ngx-french-toast/src/lib/toast.tokens.ts","../../../projects/ngx-french-toast/src/lib/french-toast.service.ts","../../../projects/ngx-french-toast/src/lib/utils/utils.ts","../../../projects/ngx-french-toast/src/lib/components/toasts/toast/toast.component.ts","../../../projects/ngx-french-toast/src/lib/components/toasts/toast/toast.component.html","../../../projects/ngx-french-toast/src/lib/components/toasts/toasts.component.ts","../../../projects/ngx-french-toast/src/lib/components/toasts/toasts.component.html","../../../projects/ngx-french-toast/src/lib/french-toast.module.ts","../../../projects/ngx-french-toast/src/lib/providers/french-toast.provider.ts","../../../projects/ngx-french-toast/src/public-api.ts","../../../projects/ngx-french-toast/src/ngx-french-toast.ts"],"sourcesContent":["export enum ToastPosition {\r\n TOP_RIGHT = 'top-right',\r\n BOTTOM_RIGHT = 'bottom-right',\r\n TOP_LEFT = 'top-left',\r\n BOTTOM_LEFT = 'bottom-left'\r\n}\r\n\r\nexport enum ToastType {\r\n SUCCESS = 'success',\r\n DANGER = 'danger',\r\n WARNING = 'warning',\r\n INFO = 'info'\r\n}","import { InjectionToken, Type } from '@angular/core';\r\nimport { ToastConfig } from './interfaces/interfaces';\r\n\r\nexport const TOAST_CONFIG = new InjectionToken<ToastConfig>('TOAST_CONFIG');\r\nexport const TOASTS_CONTAINER = new InjectionToken<Type<any>>('TOASTS_CONTAINER');","import { Injectable, Type, inject, signal } from '@angular/core';\r\nimport { ToastConfig, ToastInputModel, ToastModel } from './interfaces/interfaces';\r\nimport { ToastType } from './enums/enums';\r\nimport { TOAST_CONFIG, TOASTS_CONTAINER } from './toast.tokens';\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ToastService {\r\n private readonly config = inject<ToastConfig>(TOAST_CONFIG);\r\n private readonly overlay = inject(Overlay);\r\n private readonly toastsContainer = inject<Type<any>>(TOASTS_CONTAINER, { optional: true });\r\n private readonly _toasts = signal<ToastModel[]>([]);\r\n private readonly defaultDuration: number;\r\n private overlayRef: OverlayRef | null = null;\r\n\r\n /** Read-only view of active toasts — consumed by ToastsComponent. */\r\n readonly toasts = this._toasts.asReadonly();\r\n\r\n constructor() {\r\n this.defaultDuration = this.config?.defaultDuration ?? 7000;\r\n }\r\n\r\n success(toastInput: ToastInputModel): void {\r\n this.add(toastInput, ToastType.SUCCESS);\r\n }\r\n\r\n danger(toastInput: ToastInputModel): void {\r\n this.add(toastInput, ToastType.DANGER);\r\n }\r\n\r\n info(toastInput: ToastInputModel): void {\r\n this.add(toastInput, ToastType.INFO);\r\n }\r\n\r\n warning(toastInput: ToastInputModel): void {\r\n this.add(toastInput, ToastType.WARNING);\r\n }\r\n\r\n clearAllToasts(): void {\r\n this._toasts.update((toasts) => toasts.map((t) => ({ ...t, _markedForRemoval: true })));\r\n }\r\n\r\n destroyToast(toastComponent: { toast(): { _uId: string } }): void {\r\n const uid = toastComponent.toast()._uId;\r\n this._toasts.update((toasts) =>\r\n toasts.map((t) => (t._uId === uid ? { ...t, _markedForRemoval: true } : t))\r\n );\r\n }\r\n\r\n /**\r\n * @internal — called by ToastComponent after its exit animation completes.\r\n */\r\n remove(uid: string): void {\r\n this._toasts.update((toasts) => toasts.filter((t) => t._uId !== uid));\r\n if (this._toasts().length === 0) {\r\n this.overlayRef?.dispose();\r\n this.overlayRef = null;\r\n }\r\n }\r\n\r\n private add(toastInput: ToastInputModel, type: ToastType): void {\r\n const toast: ToastModel = {\r\n ...toastInput,\r\n _id: toastInput._id ?? this.generateId(),\r\n _uId: this.generateId(),\r\n type,\r\n isVisible: true,\r\n duration: toastInput.duration ?? this.defaultDuration,\r\n };\r\n\r\n const limit = this.config?.limit ?? 3;\r\n\r\n this._toasts.update((toasts) => {\r\n const updated = [...toasts, toast];\r\n if (updated.length > limit) {\r\n const allPinned = updated.every((t) => t.pinned);\r\n const idx = allPinned ? 0 : updated.findIndex((t) => !t.pinned);\r\n if (idx !== -1) {\r\n updated[idx] = { ...updated[idx], _markedForRemoval: true };\r\n }\r\n }\r\n return updated;\r\n });\r\n\r\n if (!this.overlayRef?.hasAttached()) {\r\n this.createOverlay();\r\n }\r\n }\r\n\r\n private createOverlay(): void {\r\n if (!this.toastsContainer) return;\r\n this.overlayRef = this.overlay.create();\r\n this.overlayRef.attach(new ComponentPortal(this.toastsContainer));\r\n }\r\n\r\n private generateId(): string {\r\n return typeof crypto !== 'undefined' && crypto.randomUUID\r\n ? crypto.randomUUID()\r\n : Math.random().toString(36).slice(2) + Date.now().toString(36);\r\n }\r\n}\r\n","export function darkenHexColor(hexColor: string, factor: number): string {\r\n hexColor = hexColor.replace('#', '');\r\n\r\n const r = parseInt(hexColor.substring(0, 2), 16);\r\n const g = parseInt(hexColor.substring(2, 4), 16);\r\n const b = parseInt(hexColor.substring(4, 6), 16);\r\n\r\n const hsl = rgbToHsl(r, g, b);\r\n const darkenedHsl = { ...hsl, l: hsl.l * factor };\r\n\r\n // 0.125 black overlay keeps the gradient visually grounded\r\n const darkenedL = darkenedHsl.l * (1 - 0.125);\r\n\r\n const rgb = hslToRgb(darkenedHsl.h, darkenedHsl.s, darkenedL);\r\n\r\n return `#${padZero(rgb.r.toString(16))}${padZero(rgb.g.toString(16))}${padZero(rgb.b.toString(16))}`;\r\n}\r\n\r\nfunction rgbToHsl(r: number, g: number, b: number): { h: number; s: number; l: number } {\r\n r /= 255;\r\n g /= 255;\r\n b /= 255;\r\n\r\n const max = Math.max(r, g, b);\r\n const min = Math.min(r, g, b);\r\n let h = 0,\r\n s = 0,\r\n l = (max + min) / 2;\r\n\r\n if (max !== min) {\r\n const d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n\r\n switch (max) {\r\n case r:\r\n h = (g - b) / d + (g < b ? 6 : 0);\r\n break;\r\n case g:\r\n h = (b - r) / d + 2;\r\n break;\r\n case b:\r\n h = (r - g) / d + 4;\r\n break;\r\n }\r\n\r\n h /= 6;\r\n }\r\n return { h, s, l };\r\n}\r\n\r\nfunction hslToRgb(h: number, s: number, l: number): { r: number; g: number; b: number } {\r\n let r, g, b;\r\n\r\n if (s === 0) {\r\n r = g = b = l;\r\n } else {\r\n const hue2rgb = (p: number, q: number, t: number): number => {\r\n if (t < 0) t += 1;\r\n if (t > 1) t -= 1;\r\n if (t < 1 / 6) return p + (q - p) * 6 * t;\r\n if (t < 1 / 2) return q;\r\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\r\n return p;\r\n };\r\n\r\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\r\n const p = 2 * l - q;\r\n\r\n r = hue2rgb(p, q, h + 1 / 3) * 255;\r\n g = hue2rgb(p, q, h) * 255;\r\n b = hue2rgb(p, q, h - 1 / 3) * 255;\r\n }\r\n\r\n return {\r\n r: Math.round(r),\r\n g: Math.round(g),\r\n b: Math.round(b),\r\n };\r\n}\r\n\r\nfunction padZero(hex: string): string {\r\n return hex.length === 1 ? `0${hex}` : hex;\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ComponentRef,\r\n effect,\r\n HostListener,\r\n OnDestroy,\r\n OnInit,\r\n untracked,\r\n ViewContainerRef,\r\n input,\r\n viewChild,\r\n inject,\r\n signal\r\n} from '@angular/core';\r\nimport { ToastConfig, ToastModel } from '../../../interfaces/interfaces';\r\nimport { TOAST_CONFIG } from '../../../toast.tokens';\r\nimport { ToastPosition } from '../../../enums/enums';\r\nimport { ToastService } from '../../../french-toast.service';\r\nimport { darkenHexColor } from '../../../utils/utils';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'toast',\r\n templateUrl: './toast.component.html',\r\n styleUrls: ['./toast.component.scss', '../../../styles/common-styles.scss'],\r\n imports: [NgStyle]\r\n})\r\nexport class ToastComponent implements OnInit, AfterViewInit, OnDestroy {\r\n private readonly config = inject<ToastConfig>(TOAST_CONFIG);\r\n private readonly toastService = inject(ToastService);\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(event: MouseEvent): void {\r\n event.stopPropagation();\r\n }\r\n\r\n readonly container = viewChild.required('container', { read: ViewContainerRef });\r\n readonly toast = input.required<ToastModel>();\r\n\r\n isVisible = signal(false);\r\n duration!: number;\r\n private remainingTime!: number;\r\n timeout: ReturnType<typeof setTimeout> | undefined;\r\n private resumeTime!: Date;\r\n private componentRef: ComponentRef<any> | undefined;\r\n svgUrlIsFromSprite = false;\r\n readonly position: ToastPosition;\r\n readonly bottomRight = ToastPosition.BOTTOM_RIGHT;\r\n readonly bottomLeft = ToastPosition.BOTTOM_LEFT;\r\n readonly topRight = ToastPosition.TOP_RIGHT;\r\n readonly topLeft = ToastPosition.TOP_LEFT;\r\n timebarColor: { background: string } | undefined;\r\n textColor = '';\r\n style = '';\r\n\r\n constructor() {\r\n this.position = this.config.position ?? ToastPosition.BOTTOM_RIGHT;\r\n\r\n effect(() => {\r\n if (this.toast()._markedForRemoval) {\r\n untracked(() => this.dismiss());\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.getColors();\r\n const toast = this.toast();\r\n this.svgUrlIsFromSprite = !!toast.icon?.includes('.svg#');\r\n if (toast.infinite) return;\r\n this.duration = Number(toast.duration);\r\n this.remainingTime = this.duration;\r\n this.resumeTime = new Date();\r\n this.timeout = setTimeout(() => this.dismiss(), this.duration);\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this.toast().component) {\r\n this.createDynamicToast();\r\n }\r\n requestAnimationFrame(() => {\r\n this.isVisible.set(true);\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n clearTimeout(this.timeout);\r\n }\r\n\r\n dismiss(): void {\r\n if (!this.isVisible()) return;\r\n clearTimeout(this.timeout);\r\n this.isVisible.set(false);\r\n setTimeout(() => {\r\n this.toastService.remove(this.toast()._uId);\r\n }, 100);\r\n }\r\n\r\n onMouseEnter(): void {\r\n if (this.toast().infinite) return;\r\n clearTimeout(this.timeout);\r\n this.remainingTime -= new Date().getTime() - this.resumeTime.getTime();\r\n }\r\n\r\n onMouseLeave(): void {\r\n if (this.toast().infinite) return;\r\n this.resumeTime = new Date();\r\n this.timeout = setTimeout(() => this.dismiss(), this.remainingTime);\r\n }\r\n\r\n private createDynamicToast(): void {\r\n this.container().clear();\r\n this.componentRef = this.container().createComponent(this.toast().component!);\r\n this.componentRef.instance.content = this.toast().content;\r\n if (this.toast().context) {\r\n this.componentRef.instance.context = this.toast().context;\r\n }\r\n }\r\n\r\n private getColors(): void {\r\n this.getToastStyle();\r\n this.getTimebarColor();\r\n }\r\n\r\n private getToastStyle(): void {\r\n this.textColor = this.getToastTextColor();\r\n this.style = `--text-color: ${this.textColor};`;\r\n const colorHexCode = this.config?.colors?.[this.toast().type] as string;\r\n if (!colorHexCode) return;\r\n const darkened = darkenHexColor(colorHexCode, 0.725);\r\n const linearGradient = this.config.colors?.autoGradient\r\n ? `linear-gradient(45deg, ${darkened}, ${colorHexCode})`\r\n : colorHexCode;\r\n this.style += `background: ${linearGradient}`;\r\n }\r\n\r\n private getToastTextColor(): string {\r\n const key = (this.toast().type + 'Text') as 'successText' | 'dangerText' | 'infoText' | 'warningText';\r\n return this.config.colors?.[key] ?? '#ffffff';\r\n }\r\n\r\n private getTimebarColor(): void {\r\n if (!this.config.colors?.timebar) return;\r\n this.timebarColor = { background: this.config.colors.timebar as string };\r\n }\r\n}\r\n","<div\r\n class=\"toast-container\"\r\n [id]=\"toast()._id\"\r\n [style]=\"style\"\r\n [class.right]=\"position === bottomRight || position === topRight\"\r\n [class.left]=\"position === bottomLeft || position === topLeft\"\r\n [class.visible]=\"isVisible()\"\r\n [class]=\"toast().type\"\r\n [class.dynamic]=\"toast().component\"\r\n (click)=\"toast().component ? null : dismiss()\"\r\n (mouseenter)=\"onMouseEnter()\"\r\n (mouseleave)=\"onMouseLeave()\"\r\n>\r\n @if (toast().component) {\r\n <div class=\"close\">\r\n <button class=\"icon\" (click)=\"dismiss()\"></button>\r\n </div>\r\n }\r\n @if (!toast().infinite) {\r\n <div class=\"toast-timer\" [style]=\"'--animation-speed: ' + duration / 1000 + 's;'\" [ngStyle]=\"timebarColor\"></div>\r\n }\r\n <div class=\"toast-group\">\r\n @if (toast().icon) {\r\n <div class=\"toast-group__icon\">\r\n @if (svgUrlIsFromSprite) {\r\n <svg>\r\n <use [attr.xlink:href]=\"toast().icon\"></use>\r\n </svg>\r\n } @else {\r\n <img [src]=\"toast().icon\" />\r\n }\r\n </div>\r\n }\r\n <div class=\"toast-group__text\">\r\n <span class=\"toast-group__text--title\">{{ toast().title }}</span>\r\n @if (toast().component || toast().content) {\r\n @if (toast().component) {\r\n <ng-template #container />\r\n } @else {\r\n <span class=\"toast-group__text--content\">{{ toast().content }}</span>\r\n }\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, inject } from '@angular/core';\r\nimport { ToastConfig } from '../../interfaces/interfaces';\r\nimport { ToastComponent } from './toast/toast.component';\r\nimport { ToastService } from '../../french-toast.service';\r\nimport { TOAST_CONFIG } from '../../toast.tokens';\r\nimport { ToastPosition } from '../../enums/enums';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'french-toast',\r\n templateUrl: './toasts.component.html',\r\n styleUrls: ['./toasts.component.scss', '../../styles/common-styles.scss'],\r\n imports: [ToastComponent]\r\n})\r\nexport class ToastsComponent {\r\n private readonly toastService = inject(ToastService);\r\n private readonly config = inject<ToastConfig>(TOAST_CONFIG);\r\n\r\n readonly toasts = this.toastService.toasts;\r\n\r\n readonly position: ToastPosition;\r\n readonly bottomRight = ToastPosition.BOTTOM_RIGHT;\r\n readonly bottomLeft = ToastPosition.BOTTOM_LEFT;\r\n readonly topRight = ToastPosition.TOP_RIGHT;\r\n readonly topLeft = ToastPosition.TOP_LEFT;\r\n readonly style: string;\r\n\r\n constructor() {\r\n this.position = this.config.position ?? ToastPosition.BOTTOM_RIGHT;\r\n this.style = this.buildStyles();\r\n }\r\n\r\n private buildStyles(): string {\r\n const family = `--font-family: ${this.config.font?.family ?? 'sans-serif'}`;\r\n const titleSize = `--title-font-size: ${this.config.font?.titleFontSize ?? '1.2rem'}`;\r\n const contentSize = `--content-font-size: ${this.config.font?.contentFontSize ?? '1rem'}`;\r\n return `${family}; ${titleSize}; ${contentSize}`;\r\n }\r\n}\r\n","@if (toasts().length) {\r\n <div\r\n class=\"toasts-container\"\r\n [style]=\"style\"\r\n [class.bottom-right]=\"position === bottomRight\"\r\n [class.bottom-left]=\"position === bottomLeft\"\r\n [class.top-left]=\"position === topLeft\"\r\n [class.top-right]=\"position === topRight\"\r\n >\r\n @for (toast of toasts(); track toast._uId) {\r\n <toast [toast]=\"toast\" />\r\n }\r\n </div>\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { ToastConfig } from './interfaces/interfaces';\r\nimport { TOAST_CONFIG, TOASTS_CONTAINER } from './toast.tokens';\r\nimport { ToastsComponent } from './components/toasts/toasts.component';\r\n\r\n@NgModule({})\r\n\r\nexport class FrenchToastModule {\r\n static forRoot(config: Partial<ToastConfig> = {}): ModuleWithProviders<FrenchToastModule> {\r\n return {\r\n ngModule: FrenchToastModule,\r\n providers: [\r\n { provide: TOAST_CONFIG, useValue: config },\r\n { provide: TOASTS_CONTAINER, useValue: ToastsComponent }\r\n ]\r\n };\r\n }\r\n}","import { EnvironmentProviders, Provider, makeEnvironmentProviders } from \"@angular/core\";\r\nimport { ToastConfig } from \"../interfaces/interfaces\";\r\nimport { TOAST_CONFIG, TOASTS_CONTAINER } from \"../toast.tokens\";\r\nimport { ToastsComponent } from \"../components/toasts/toasts.component\";\r\n\r\nexport const provideFrenchToast = (config: Partial<ToastConfig> = {}): EnvironmentProviders => {\r\n const providers: Provider[] = [\r\n { provide: TOAST_CONFIG, useValue: config },\r\n { provide: TOASTS_CONTAINER, useValue: ToastsComponent }\r\n ];\r\n return makeEnvironmentProviders(providers);\r\n};","/*\r\n * Public API Surface of ngx-french-toast\r\n */\r\n\r\nexport * from './lib/french-toast.service';\r\nexport * from './lib/french-toast.module';\r\nexport * from './lib/components/toasts/toasts.component';\r\nexport * from './lib/components/toasts/toast/toast.component';\r\nexport * from './lib/enums/enums';\r\nexport * from './lib/interfaces/interfaces';\r\nexport * from './lib/providers/french-toast.provider';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}