@hyahfoufi/ng-snotify
Version:
Angular 2+ alternative notifications center
1 lines • 67.7 kB
Source Map (JSON)
{"version":3,"file":"hyahfoufi-ng-snotify.mjs","sources":["../../../projects/ng-snotify/src/lib/enums/snotify-style.enum.ts","../../../projects/ng-snotify/src/lib/decorators/transform-argument.decorator.ts","../../../projects/ng-snotify/src/lib/utils.ts","../../../projects/ng-snotify/src/lib/decorators/set-toast-type.decorator.ts","../../../projects/ng-snotify/src/lib/models/snotify-toast.model.ts","../../../projects/ng-snotify/src/lib/services/snotify.service.ts","../../../projects/ng-snotify/src/lib/components/buttons/buttons.component.ts","../../../projects/ng-snotify/src/lib/components/buttons/buttons.component.html","../../../projects/ng-snotify/src/lib/pipes/truncate.pipe.ts","../../../projects/ng-snotify/src/lib/components/prompt/prompt.component.ts","../../../projects/ng-snotify/src/lib/components/prompt/prompt.component.html","../../../projects/ng-snotify/src/lib/enums/snotify-position.enum.ts","../../../projects/ng-snotify/src/lib/components/toast/toast.component.ts","../../../projects/ng-snotify/src/lib/components/toast/toast.component.html","../../../projects/ng-snotify/src/lib/pipes/keys.pipe.ts","../../../projects/ng-snotify/src/lib/components/snotify/snotify.component.ts","../../../projects/ng-snotify/src/lib/components/snotify/snotify.component.html","../../../projects/ng-snotify/src/lib/snotify.module.ts","../../../projects/ng-snotify/src/lib/toast-defaults.ts","../../../projects/ng-snotify/src/public-api.ts","../../../projects/ng-snotify/src/hyahfoufi-ng-snotify.ts"],"sourcesContent":["/**\n * Toast style.\n */\nexport enum SnotifyStyle {\n simple = 'simple',\n success = 'success',\n error = 'error',\n warning = 'warning',\n info = 'info',\n async = 'async',\n confirm = 'confirm',\n prompt = 'prompt'\n}\n","import { Snotify } from '../interfaces/snotify.interface';\nimport { SnotifyTypeType } from '../types/snotify-type.type';\nimport { SnotifyStyle } from '../enums/snotify-style.enum';\n\n/**\n * Transform arguments to Snotify object\n * @param target any\n * @param propertyKey SnotifyTypeType\n * @param descriptor PropertyDescriptor\n * @returns Snotify\n */\nexport function TransformArgument(target: any, propertyKey: SnotifyTypeType, descriptor: PropertyDescriptor) {\n if (propertyKey === SnotifyStyle.async) {\n return {\n value(...args: any[]) {\n let result;\n if (args.length === 2) {\n result = {\n title: null,\n body: args[0],\n config: null,\n action: args[1]\n };\n } else if (args.length === 3) {\n if (typeof args[1] === 'string') {\n result = {\n title: args[1],\n body: args[0],\n config: null,\n action: args[2]\n };\n } else {\n result = {\n title: null,\n body: args[0],\n config: args[2],\n action: args[1]\n };\n }\n } else {\n result = {\n title: args[1],\n body: args[0],\n config: args[3],\n action: args[2]\n };\n }\n return descriptor.value.apply(this, [result as Snotify]);\n }\n };\n } else {\n return {\n value(...args: any[]) {\n let result;\n if (args.length === 1) {\n result = {\n title: null,\n body: args[0],\n config: null\n };\n } else if (args.length === 3) {\n result = {\n title: args[1],\n body: args[0],\n config: args[2]\n };\n } else {\n result = {\n title: null,\n config: null,\n body: args[0],\n [typeof args[1] === 'string' ? 'title' : 'config']: args[1]\n };\n }\n return descriptor.value.apply(this, [result as Snotify]);\n }\n };\n }\n}\n","/**\n * Generates random id\n * @return number\n */\nexport function uuid(): number {\n return Math.floor(Math.random() * (Date.now() - 1)) + 1;\n}\n\n/**\n * Simple is object check.\n * @param item Object<any>\n * @returns boolean\n */\nexport function isObject(item): boolean {\n return item && typeof item === 'object' && !Array.isArray(item);\n}\n\n/**\n * Deep merge objects.\n * @param sources Array<Object<any>>\n * @returns Object<any>\n */\nexport function mergeDeep(...sources) {\n const target = {};\n if (!sources.length) {\n return target;\n }\n\n while (sources.length > 0) {\n const source = sources.shift();\n if (isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n target[key] = mergeDeep(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n }\n return target;\n}\n\nexport function animate(start: number, duration: number, callback: (currentValue: number, progress: number) => {}) {\n let endTime;\n requestAnimationFrame(timestamp => (endTime = timestamp + duration));\n const calculate = () => {\n requestAnimationFrame(timestamp => {\n const runtime = timestamp - endTime;\n const progress = Math.min(runtime / duration, 1) + start;\n if (runtime < duration) {\n if (callback(+(100 * progress).toFixed(2), progress)) {\n calculate();\n }\n }\n });\n };\n}\n","import { SnotifyTypeType } from '../types/snotify-type.type';\nimport { Snotify } from '../interfaces/snotify.interface';\n\n/**\n * Defines toast style depending on method name\n * @param target any\n * @param propertyKey SnotifyTypeType\n * @param descriptor PropertyDescriptor\n * @returns value: ((...args: any[]) => any)\n */\nexport function SetToastType(target: any, propertyKey: SnotifyTypeType, descriptor: PropertyDescriptor) {\n return {\n value(...args: any[]) {\n (args[0] as Snotify).config = {\n ...(args[0] as Snotify).config,\n type: propertyKey\n };\n return descriptor.value.apply(this, args);\n }\n };\n}\n","import { SnotifyToastConfig } from '../interfaces/snotify-toast-config.interface';\nimport { Subject, Subscription } from 'rxjs';\nimport { SnotifyEventType } from '../types/snotify-event.type';\nimport { SnotifyStyle } from '../enums/snotify-style.enum';\n// @TODO remove method in observable way\n/**\n * Toast main model\n */\nexport class SnotifyToast {\n /**\n * Emits SnotifyEventType\n */\n readonly eventEmitter = new Subject<SnotifyEventType>();\n /**\n * Holds all subscribers because we need to unsubscribe from all before toast get destroyed\n */\n private eventsHolder: Subscription[] = [];\n /**\n * Toast prompt value\n */\n value: string;\n /**\n * Toast validator\n */\n valid: boolean;\n constructor(public id: number, public title: string, public body: string, public config: SnotifyToastConfig) {\n if (this.config.type === SnotifyStyle.prompt) {\n this.value = '';\n }\n this.on('hidden', () => {\n this.eventsHolder.forEach((subscription: Subscription) => {\n subscription.unsubscribe();\n });\n });\n }\n\n /**\n * Subscribe to toast events\n * @returns this\n * @param event SnotifyEventType\n * @param action (toast: this) => void\n */\n on(event: SnotifyEventType, action: (toast: this) => void): this {\n this.eventsHolder.push(\n this.eventEmitter.subscribe((e: SnotifyEventType) => {\n if (e === event) {\n action(this);\n }\n })\n );\n return this;\n }\n\n /**\n * Tests if a toast equals this toast.\n * @returns boolean true then equals else false.\n * @param toast SnotifyToast\n */\n equals(toast: SnotifyToast): boolean {\n return this.body === toast.body && this.title === toast.title && this.config.type === toast.config.type;\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Observable, Subject, Subscription, from } from 'rxjs';\nimport { SnotifyToastConfig } from '../interfaces/snotify-toast-config.interface';\nimport { Snotify } from '../interfaces/snotify.interface';\nimport { SnotifyTypeType } from '../types/snotify-type.type';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { TransformArgument } from '../decorators/transform-argument.decorator';\nimport { mergeDeep, uuid } from '../utils';\nimport { SetToastType } from '../decorators/set-toast-type.decorator';\nimport { SnotifyDefaults } from '../interfaces/snotify-defaults.interface';\nimport { SnotifyToast } from '../models/snotify-toast.model';\nimport { SnotifyStyle } from '../enums/snotify-style.enum';\n\n/**\n * SnotifyService - create, remove, config toasts\n */\n@Injectable()\n// tslint:disable:unified-signatures\nexport class SnotifyService {\n readonly emitter = new Subject<SnotifyToast[]>();\n readonly toastChanged = new Subject<SnotifyToast>();\n readonly toastDeleted = new Subject<number>();\n private notifications: SnotifyToast[] = [];\n\n constructor(@Inject('SnotifyToastConfig') public config: SnotifyDefaults) {}\n /**\n * emit changes in notifications array\n */\n private emit(): void {\n this.emitter.next(this.notifications.slice());\n }\n\n /**\n * returns SnotifyToast object\n * @param id Number\n * @return SnotifyToast|undefined\n */\n get(id: number): SnotifyToast {\n return this.notifications.find(toast => toast.id === id);\n }\n\n /**\n * add SnotifyToast to notifications array\n * @param toast SnotifyToast\n */\n private add(toast: SnotifyToast): void {\n if (this.config.global.filterDuplicates && this.containsToast(toast)) {\n return;\n }\n if (this.config.global.newOnTop) {\n this.notifications.unshift(toast);\n } else {\n this.notifications.push(toast);\n }\n this.emit();\n }\n\n /**\n * checks if the toast is in the collection.\n * @param inToast SnotifyToast\n * @returns boolean\n */\n private containsToast(inToast: SnotifyToast): boolean {\n return this.notifications.some(toast => toast.equals(inToast));\n }\n\n /**\n * If ID passed, emits toast animation remove, if ID & REMOVE passed, removes toast from notifications array\n * @param id number\n * @param remove boolean\n */\n remove(id?: number, remove?: boolean): void {\n if (!id) {\n return this.clear();\n } else if (remove) {\n this.notifications = this.notifications.filter(toast => toast.id !== id);\n return this.emit();\n }\n this.toastDeleted.next(id);\n }\n\n /**\n * Clear notifications array\n */\n clear(): void {\n this.notifications = [];\n this.emit();\n }\n\n /**\n * Creates toast and add it to array, returns toast id\n * @param snotify Snotify\n * @return number\n */\n create(snotify: Snotify): SnotifyToast {\n const config = mergeDeep(this.config.toast, this.config.type[snotify.config.type], snotify.config);\n const toast = new SnotifyToast(uuid(), snotify.title, snotify.body, config);\n this.add(toast);\n return toast;\n }\n\n setDefaults(defaults: SnotifyDefaults): SnotifyDefaults {\n return (this.config = mergeDeep(this.config, defaults) as SnotifyDefaults);\n }\n\n /**\n * Create toast with simple style returns toast id;\n * @param body string\n * @returns number\n */\n simple(body: string): SnotifyToast;\n /**\n * Create toast with simple style returns toast id;\n * @param body string\n * @param title string\n * @returns number\n */\n simple(body: string, title: string): SnotifyToast;\n /**\n * Create toast with simple style returns toast id;\n * @param body string\n * @param config SnotifyToastConfig\n * @returns number\n */\n simple(body: string, config: SnotifyToastConfig): SnotifyToast;\n /**\n * Create toast with simple style returns toast id;\n * @param [body] string\n * @param [title] string\n * @param [config] SnotifyToastConfig\n * @returns number\n */\n simple(body: string, title: string, config: SnotifyToastConfig): SnotifyToast;\n /**\n * Transform toast arguments into Snotify object\n */\n @TransformArgument\n /**\n * Determines current toast type and collects default configuration\n */\n @SetToastType\n simple(args: any): SnotifyToast {\n return this.create(args);\n }\n\n /**\n * Create toast with success style returns toast id;\n * @param body string\n * @returns number\n */\n success(body: string): SnotifyToast;\n /**\n * Create toast with success style returns toast id;\n * @param body string\n * @param title string\n * @returns number\n */\n success(body: string, title: string): SnotifyToast;\n /**\n * Create toast with success style returns toast id;\n * @param body string\n * @param config SnotifyToastConfig\n * @returns number\n */\n success(body: string, config: SnotifyToastConfig): SnotifyToast;\n /**\n * Create toast with success style returns toast id;\n * @param [body] string\n * @param [title] string\n * @param [config] SnotifyToastConfig\n * @returns number\n */\n success(body: string, title: string, config: SnotifyToastConfig): SnotifyToast;\n /**\n * Transform toast arguments into Snotify object\n */\n @TransformArgument\n /**\n * Determines current toast type and collects default configuration\n */\n @SetToastType\n success(args: any): SnotifyToast {\n return this.create(args);\n }\n\n /**\n * Create toast with error style returns toast id;\n * @param body string\n * @returns number\n */\n error(body: string): SnotifyToast;\n /**\n * Create toast with error style returns toast id;\n * @param body string\n * @param title string\n * @returns number\n */\n error(body: string, title: string): SnotifyToast;\n /**\n * Create toast with error style returns toast id;\n * @param body string\n * @param config SnotifyToastConfig\n * @returns number\n */\n error(body: string, config: SnotifyToastConfig): SnotifyToast;\n /**\n * Create toast with error style returns toast id;\n * @param [body] string\n * @param [title] string\n * @param [config] SnotifyToastConfig\n * @returns number\n */\n error(body: string, title: string, config: SnotifyToastConfig): SnotifyToast;\n /**\n * Transform toast arguments into Snotify object\n */\n @TransformArgument\n /**\n * Determines current toast type and collects default configuration\n */\n @SetToastType\n error(args: any): SnotifyToast {\n return this.create(args);\n }\n\n /**\n * Create toast with info style returns toast id;\n * @param body string\n * @returns number\n */\n info(body: string): SnotifyToast;\n /**\n * Create toast with info style returns toast id;\n * @param body string\n * @param title string\n * @returns number\n */\n info(body: string, title: string): SnotifyToast;\n /**\n * Create toast with info style returns toast id;\n * @param body string\n * @param config SnotifyToastConfig\n * @returns number\n */\n info(body: string, config: SnotifyToastConfig): SnotifyToast;\n /**\n * Create toast with info style returns toast id;\n * @param [body] string\n * @param [title] string\n * @param [config] SnotifyToastConfig\n * @returns number\n */\n info(body: string, title: string, config: SnotifyToastConfig): SnotifyToast;\n /**\n * Transform toast arguments into Snotify object\n */\n @TransformArgument\n /**\n * Determines current toast type and collects default configuration\n */\n @SetToastType\n info(args: any): SnotifyToast {\n return this.create(args);\n }\n\n /**\n * Create toast with warning style returns toast id;\n * @param body string\n * @returns number\n */\n warning(body: string): SnotifyToast;\n /**\n * Create toast with warning style returns toast id;\n * @param body string\n * @param title string\n * @returns number\n */\n warning(body: string, title: string): SnotifyToast;\n /**\n * Create toast with warning style returns toast id;\n * @param body string\n * @param config SnotifyToastConfig\n * @returns number\n */\n warning(body: string, config: SnotifyToastConfig): SnotifyToast;\n /**\n * Create toast with warning style returns toast id;\n * @param [body] string\n * @param [title] string\n * @param [config] SnotifyToastConfig\n * @returns number\n */\n warning(body: string, title: string, config: SnotifyToastConfig): SnotifyToast;\n /**\n * Transform toast arguments into Snotify object\n */\n @TransformArgument\n /**\n * Determines current toast type and collects default configuration\n */\n @SetToastType\n warning(args: any): SnotifyToast {\n return this.create(args);\n }\n\n /**\n * Create toast with confirm style returns toast id;\n * @param body string\n * @returns number\n */\n confirm(body: string): SnotifyToast;\n /**\n * Create toast with confirm style returns toast id;\n * @param body string\n * @param title string\n * @returns number\n */\n confirm(body: string, title: string): SnotifyToast;\n /**\n * Create toast with confirm style returns toast id;\n * @param body string\n * @param config SnotifyToastConfig\n * @returns number\n */\n confirm(body: string, config: SnotifyToastConfig): SnotifyToast;\n /**\n * Create toast with confirm style returns toast id;\n * @param [body] string\n * @param [title] string\n * @param [config] SnotifyToastConfig\n * @returns number\n */\n confirm(body: string, title: string, config: SnotifyToastConfig): SnotifyToast;\n /**\n * Transform toast arguments into Snotify object\n */\n @TransformArgument\n /**\n * Determines current toast type and collects default configuration\n */\n @SetToastType\n confirm(args: any): SnotifyToast {\n return this.create(args);\n }\n\n /**\n * Create toast with Prompt style with two buttons, returns toast id;\n * @param body string\n * @returns number\n */\n prompt(body: string): SnotifyToast;\n /**\n * Create toast with Prompt style with two buttons, returns toast id;\n * @param body string\n * @param title string\n * @returns number\n */\n prompt(body: string, title: string): SnotifyToast;\n /**\n * Create toast with Prompt style with two buttons, returns toast id;\n * @param body string\n * @param config SnotifyToastConfig\n * @returns number\n */\n prompt(body: string, config: SnotifyToastConfig): SnotifyToast;\n /**\n * Create toast with Prompt style with two buttons, returns toast id;\n * @param [body] string\n * @param [title] string\n * @param [config] SnotifyToastConfig\n * @returns number\n */\n prompt(body: string, title: string, config: SnotifyToastConfig): SnotifyToast;\n /**\n * Transform toast arguments into Snotify object\n */\n @TransformArgument\n /**\n * Determines current toast type and collects default configuration\n */\n @SetToastType\n prompt(args: any): SnotifyToast {\n return this.create(args);\n }\n\n /**\n * Creates async toast with Info style. Pass action, and resolve or reject it.\n * @param body string\n * @param action Promise<Snotify> | Observable<Snotify>\n * @returns number\n */\n async(body: string, action: Promise<Snotify> | Observable<Snotify>): SnotifyToast;\n /**\n * Creates async toast with Info style. Pass action, and resolve or reject it.\n * @param body string\n * @param title string\n * @param action Promise<Snotify> | Observable<Snotify>\n * @returns number\n */\n async(body: string, title: string, action: Promise<Snotify> | Observable<Snotify>): SnotifyToast;\n /**\n * Creates async toast with Info style. Pass action, and resolve or reject it.\n * @param body string\n * @param action Promise<Snotify> | Observable<Snotify>\n * @param [config] SnotifyToastConfig\n * @returns number\n */\n async(body: string, action: Promise<Snotify> | Observable<Snotify>, config: SnotifyToastConfig): SnotifyToast;\n /**\n * Creates async toast with Info style. Pass action, and resolve or reject it.\n * @param body string\n * @param title string\n * @param action Promise<Snotify> | Observable<Snotify>\n * @param [config] SnotifyToastConfig\n * @returns number\n */\n async(\n body: string,\n title: string,\n action: Promise<Snotify> | Observable<Snotify>,\n config: SnotifyToastConfig\n ): SnotifyToast;\n /**\n * Transform toast arguments into Snotify object\n */\n @TransformArgument\n /**\n * Determines current toast type and collects default configuration\n */\n @SetToastType\n async(args: any): SnotifyToast {\n let async: Observable<any>;\n if (args.action instanceof Promise) {\n async = from(args.action);\n } else {\n async = args.action;\n }\n\n const toast = this.create(args);\n\n toast.on('mounted', () => {\n const subscription: Subscription = async.subscribe(\n (next?: Snotify) => {\n this.mergeToast(toast, next);\n },\n (error?: Snotify) => {\n this.mergeToast(toast, error, SnotifyStyle.error);\n subscription.unsubscribe();\n },\n () => {\n this.mergeToast(toast, {}, SnotifyStyle.success);\n subscription.unsubscribe();\n }\n );\n });\n\n return toast;\n }\n\n private mergeToast(toast, next, type?: SnotifyTypeType) {\n if (next.body) {\n toast.body = next.body;\n }\n if (next.title) {\n toast.title = next.title;\n }\n if (type) {\n toast.config = mergeDeep(toast.config, this.config.global, this.config.toast[type], { type }, next.config);\n } else {\n toast.config = mergeDeep(toast.config, next.config);\n }\n if (next.html) {\n toast.config.html = next.html;\n }\n this.emit();\n this.toastChanged.next(toast);\n }\n\n /**\n * Creates empty toast with html string inside\n * @param html string | SafeHtml\n * @param config SnotifyToastConfig\n * @returns number\n */\n html(html: string | SafeHtml, config?: SnotifyToastConfig): SnotifyToast {\n return this.create({\n title: null,\n body: null,\n config: {\n ...config,\n ...{ html }\n }\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\nimport { SnotifyService } from '../../services/snotify.service';\nimport { SnotifyToast } from '../../models/snotify-toast.model';\n\n@Component({\n selector: 'ng-snotify-button',\n templateUrl: './buttons.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\n\n/**\n * Buttons component\n */\nexport class ButtonsComponent {\n /**\n * Get buttons Array\n */\n @Input() toast: SnotifyToast;\n constructor(private service: SnotifyService) {}\n\n /**\n * remove toast\n */\n remove() {\n this.service.remove(this.toast.id);\n }\n}\n","<div class=\"snotifyToast__buttons\">\n <button\n type=\"button\"\n *ngFor=\"let button of toast.config.buttons\"\n [ngClass]=\"{ 'snotifyToast__buttons--bold': button.bold }\"\n (click)=\"button.action ? button.action(toast) : remove()\"\n >\n {{ button.text }}\n </button>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'truncate'\n})\n\n/**\n * Truncate toast text pipe\n */\nexport class TruncatePipe implements PipeTransform {\n transform(value: string, ...args: Array<any>): any {\n let limit = 40;\n let trail = '...';\n if (args.length > 0) {\n limit = args.length > 0 ? parseInt(args[0], 10) : limit;\n trail = args.length > 1 ? args[1] : trail;\n }\n\n return value.length > limit ? value.substring(0, limit) + trail : value;\n }\n}\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\nimport { SnotifyToast } from '../../models/snotify-toast.model';\n\n@Component({\n selector: 'ng-snotify-prompt',\n templateUrl: './prompt.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\n\n/**\n * Prompt component. Part of PROMPT type\n */\nexport class PromptComponent {\n /**\n * Get PROMPT placeholder\n */\n @Input() toast: SnotifyToast;\n /**\n * Is PROMPT focused\n */\n isPromptFocused = false;\n\n handleInput($event: Event) {\n this.toast.value = ($event.target as HTMLInputElement).value;\n this.toast.eventEmitter.next('input');\n }\n}\n","<span class=\"snotifyToast__input\" [ngClass]=\"{ 'snotifyToast__input--filled': isPromptFocused }\">\n <input\n (input)=\"handleInput($event)\"\n autofocus\n class=\"snotifyToast__input__field\"\n type=\"text\"\n [id]=\"toast.id\"\n (focus)=\"isPromptFocused = true\"\n (blur)=\"isPromptFocused = !!toast.value.length\"\n />\n <label class=\"snotifyToast__input__label\" [for]=\"toast.id\">\n <span class=\"snotifyToast__input__labelContent\">{{ toast.config.placeholder | truncate }}</span>\n </label>\n</span>\n","/**\n * Toast position\n */\nexport enum SnotifyPosition {\n leftTop = 'leftTop',\n leftCenter = 'leftCenter',\n leftBottom = 'leftBottom',\n rightTop = 'rightTop',\n rightCenter = 'rightCenter',\n rightBottom = 'rightBottom',\n centerTop = 'centerTop',\n centerCenter = 'centerCenter',\n centerBottom = 'centerBottom'\n}\n","import {\n AfterContentInit,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewEncapsulation\n} from '@angular/core';\nimport { SnotifyService } from '../../services/snotify.service';\nimport { SnotifyToast } from '../../models/snotify-toast.model';\nimport { Subscription } from 'rxjs';\nimport { SnotifyEventType } from '../../types/snotify-event.type';\nimport { SnotifyStyle } from '../../enums/snotify-style.enum';\n\n@Component({\n selector: 'ng-snotify-toast',\n templateUrl: './toast.component.html',\n encapsulation: ViewEncapsulation.None\n})\nexport class ToastComponent implements OnInit, OnDestroy, AfterContentInit {\n /**\n * Get toast from notifications array\n */\n @Input() toast: any | SnotifyToast;\n @Output() stateChanged = new EventEmitter<SnotifyEventType>();\n\n toastDeletedSubscription: Subscription;\n toastChangedSubscription: Subscription;\n\n /**\n * requestAnimationFrame id\n */\n animationFrame: number;\n\n /**\n * Toast state\n */\n state = {\n paused: false,\n progress: 0,\n animation: '',\n isDestroying: false,\n promptType: SnotifyStyle.prompt\n };\n\n constructor(private service: SnotifyService) {}\n\n // Lifecycles\n\n /**\n * Init base options. Subscribe to toast changed, toast deleted\n */\n ngOnInit() {\n this.toastChangedSubscription = this.service.toastChanged.subscribe((toast: SnotifyToast) => {\n if (this.toast.id === toast.id) {\n this.initToast();\n }\n });\n this.toastDeletedSubscription = this.service.toastDeleted.subscribe(id => {\n if (this.toast.id === id) {\n this.onRemove();\n }\n });\n if (!this.toast.config.timeout) {\n this.toast.config.showProgressBar = false;\n }\n this.toast.eventEmitter.next('mounted');\n this.state.animation = 'snotifyToast--in';\n }\n\n ngAfterContentInit() {\n setTimeout(() => {\n this.stateChanged.emit('beforeShow');\n this.toast.eventEmitter.next('beforeShow');\n this.state.animation = this.toast.config.animation.enter;\n }, this.service.config.toast.animation.time / 5); // time to show toast push animation (snotifyToast--in)\n }\n\n /**\n * Unsubscribe subscriptions\n */\n ngOnDestroy(): void {\n cancelAnimationFrame(this.animationFrame);\n this.toast.eventEmitter.next('destroyed');\n this.toastChangedSubscription.unsubscribe();\n this.toastDeletedSubscription.unsubscribe();\n }\n\n /*\n Event hooks\n */\n\n /**\n * Trigger OnClick lifecycle\n */\n onClick() {\n this.toast.eventEmitter.next('click');\n if (this.toast.config.closeOnClick) {\n this.service.remove(this.toast.id);\n }\n }\n\n /**\n * Trigger beforeDestroy lifecycle. Removes toast\n */\n onRemove() {\n this.state.isDestroying = true;\n this.toast.eventEmitter.next('beforeHide');\n this.stateChanged.emit('beforeHide');\n this.state.animation = this.toast.config.animation.exit;\n setTimeout(() => {\n this.stateChanged.emit('hidden');\n this.state.animation = 'snotifyToast--out';\n this.toast.eventEmitter.next('hidden');\n setTimeout(() => this.service.remove(this.toast.id, true), this.toast.config.animation.time / 2);\n }, this.toast.config.animation.time / 2);\n }\n\n /**\n * Trigger onHoverEnter lifecycle\n */\n onMouseEnter() {\n this.toast.eventEmitter.next('mouseenter');\n if (this.toast.config.pauseOnHover) {\n this.state.paused = true;\n }\n }\n\n /**\n * Trigger onHoverLeave lifecycle\n */\n onMouseLeave() {\n if (this.toast.config.pauseOnHover && this.toast.config.timeout) {\n this.state.paused = false;\n this.startTimeout(this.toast.config.timeout * this.state.progress);\n }\n this.toast.eventEmitter.next('mouseleave');\n }\n\n /**\n * Remove toast completely after animation\n */\n onExitTransitionEnd() {\n if (this.state.isDestroying) {\n return;\n }\n this.initToast();\n this.toast.eventEmitter.next('shown');\n }\n\n /*\n Common\n */\n\n /**\n * Initialize base toast config\n *\n */\n initToast(): void {\n if (this.toast.config.timeout > 0) {\n this.startTimeout(0);\n }\n }\n\n /**\n * Start progress bar\n * @param startTime number\n */\n startTimeout(startTime: number = 0) {\n const start = performance.now();\n const calculate = () => {\n this.animationFrame = requestAnimationFrame(timestamp => {\n const runtime = timestamp + startTime - start;\n const progress = Math.min(runtime / this.toast.config.timeout, 1);\n if (this.state.paused) {\n cancelAnimationFrame(this.animationFrame);\n } else if (runtime < this.toast.config.timeout) {\n this.state.progress = progress;\n calculate();\n } else {\n this.state.progress = 1;\n cancelAnimationFrame(this.animationFrame);\n this.service.remove(this.toast.id);\n }\n });\n };\n calculate();\n }\n}\n","<div\n [attr.role]=\"toast.config.type === state.promptType ? 'dialog' : 'alert'\"\n [attr.aria-labelledby]=\"'snotify_' + toast.id\"\n [attr.aria-modal]=\"toast.config.type === state.promptType\"\n [ngClass]=\"[\n 'snotifyToast animated',\n 'snotify-' + toast.config.type,\n state.animation,\n toast.valid === undefined ? '' : toast.valid ? 'snotifyToast--valid' : 'snotifyToast--invalid'\n ]\"\n [ngStyle]=\"{\n '-webkit-transition': toast.config.animation.time + 'ms',\n transition: toast.config.animation.time + 'ms',\n '-webkit-animation-duration': toast.config.animation.time + 'ms',\n 'animation-duration': toast.config.animation.time + 'ms'\n }\"\n (animationend)=\"onExitTransitionEnd()\"\n (click)=\"onClick()\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n>\n <div class=\"snotifyToast__progressBar\" *ngIf=\"toast.config.showProgressBar\">\n <span class=\"snotifyToast__progressBar__percentage\" [ngStyle]=\"{ width: state.progress * 100 + '%' }\"></span>\n </div>\n <div class=\"snotifyToast__inner\" *ngIf=\"!toast.config.html; else toastHTML\">\n <div class=\"snotifyToast__title\" [attr.id]=\"'snotify_' + toast.id\" *ngIf=\"toast.title\">\n {{ toast.title | truncate: toast.config.titleMaxLength }}\n </div>\n <div class=\"snotifyToast__body\" *ngIf=\"toast.body\">{{ toast.body | truncate: toast.config.bodyMaxLength }}</div>\n <ng-snotify-prompt *ngIf=\"toast.config.type === state.promptType\" [toast]=\"toast\"> </ng-snotify-prompt>\n <div\n *ngIf=\"!toast.config.icon; else elseBlock\"\n [ngClass]=\"['snotify-icon', toast.config.iconClass || 'snotify-icon--' + toast.config.type]\"\n ></div>\n <ng-template #elseBlock>\n <img class=\"snotify-icon\" [src]=\"toast.config.icon\" />\n </ng-template>\n </div>\n <ng-template #toastHTML>\n <div class=\"snotifyToast__inner\" [innerHTML]=\"toast.config.html\"></div>\n </ng-template>\n <ng-snotify-button *ngIf=\"toast.config.buttons\" [toast]=\"toast\"></ng-snotify-button>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'keys',\n pure: false\n})\n/**\n * Extract object keys pipe\n */\nexport class KeysPipe implements PipeTransform {\n transform(value: any, args: any[] = null): any {\n if (!value) {\n return value;\n }\n return Object.keys(value);\n }\n}\n","import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\nimport { SnotifyService } from '../../services/snotify.service';\nimport { SnotifyToast } from '../../models/snotify-toast.model';\nimport { Subscription } from 'rxjs';\nimport { SnotifyNotifications } from '../../interfaces/snotify-notifications.interface';\nimport { SnotifyPosition } from '../../enums/snotify-position.enum';\nimport { SnotifyEventType } from '../../types/snotify-event.type';\n\n@Component({\n selector: 'ng-snotify',\n templateUrl: './snotify.component.html',\n encapsulation: ViewEncapsulation.None\n})\nexport class SnotifyComponent implements OnInit, OnDestroy {\n /**\n * Toasts array\n */\n notifications: SnotifyNotifications;\n /**\n * Toasts emitter\n */\n emitter: Subscription;\n /**\n * Helper for slice pipe (maxOnScreen)\n */\n dockSizeA: number;\n /**\n * Helper for slice pipe (maxOnScreen)\n */\n dockSizeB: number | undefined;\n /**\n * Helper for slice pipe (maxAtPosition)\n */\n blockSizeA: number;\n /**\n * Helper for slice pipe (maxAtPosition)\n */\n blockSizeB: number | undefined;\n /**\n * Backdrop Opacity\n */\n backdrop = -1;\n /**\n * How many toasts with backdrop in current queue\n */\n withBackdrop: SnotifyToast[];\n\n constructor(private service: SnotifyService) {}\n\n /**\n * Init base options. Subscribe to options, lifecycle change\n */\n ngOnInit() {\n this.emitter = this.service.emitter.subscribe((toasts: SnotifyToast[]) => {\n if (this.service.config.global.newOnTop) {\n this.dockSizeA = -this.service.config.global.maxOnScreen;\n this.dockSizeB = undefined;\n this.blockSizeA = -this.service.config.global.maxAtPosition;\n this.blockSizeB = undefined;\n this.withBackdrop = toasts.filter(toast => toast.config.backdrop >= 0);\n } else {\n this.dockSizeA = 0;\n this.dockSizeB = this.service.config.global.maxOnScreen;\n this.blockSizeA = 0;\n this.blockSizeB = this.service.config.global.maxAtPosition;\n this.withBackdrop = toasts.filter(toast => toast.config.backdrop >= 0).reverse();\n }\n this.notifications = this.splitToasts(toasts.slice(this.dockSizeA, this.dockSizeB));\n this.stateChanged('mounted');\n });\n }\n\n // TODO: fix backdrop if more than one toast called in a row\n /**\n * Changes the backdrop opacity\n * @param event SnotifyEventType\n */\n stateChanged(event: SnotifyEventType) {\n if (!this.withBackdrop.length) {\n if (this.backdrop >= 0) {\n this.backdrop = -1;\n }\n return;\n }\n switch (event) {\n case 'mounted':\n if (this.backdrop < 0) {\n this.backdrop = 0;\n }\n break;\n case 'beforeShow':\n this.backdrop = this.withBackdrop[this.withBackdrop.length - 1].config.backdrop;\n break;\n case 'beforeHide':\n if (this.withBackdrop.length === 1) {\n this.backdrop = 0;\n }\n break;\n case 'hidden':\n if (this.withBackdrop.length === 1) {\n this.backdrop = -1;\n }\n break;\n }\n }\n\n /**\n * Split toasts toasts into different objects\n * @param toasts SnotifyToast[]\n * @returns SnotifyNotifications\n */\n splitToasts(toasts: SnotifyToast[]): SnotifyNotifications {\n const result: SnotifyNotifications = {};\n\n for (const property in SnotifyPosition) {\n if (SnotifyPosition.hasOwnProperty(property)) {\n result[SnotifyPosition[property]] = [];\n }\n }\n\n toasts.forEach((toast: SnotifyToast) => {\n result[toast.config.position as string].push(toast);\n });\n\n return result;\n }\n\n /**\n * Unsubscribe subscriptions\n */\n ngOnDestroy() {\n this.emitter.unsubscribe();\n }\n}\n","<div class=\"snotify-backdrop\" *ngIf=\"backdrop >= 0\" [style.opacity]=\"backdrop\"></div>\n<div *ngFor=\"let position of notifications | keys\" class=\"snotify snotify-{{ position }}\">\n <ng-snotify-toast\n *ngFor=\"let notification of notifications[position] | slice: blockSizeA:blockSizeB\"\n [toast]=\"notification\"\n (stateChanged)=\"stateChanged($event)\"\n >\n </ng-snotify-toast>\n</div>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { SnotifyComponent } from './components/snotify/snotify.component';\nimport { SnotifyService } from './services/snotify.service';\nimport { KeysPipe } from './pipes/keys.pipe';\nimport { TruncatePipe } from './pipes/truncate.pipe';\nimport { CommonModule } from '@angular/common';\nimport { ButtonsComponent } from './components/buttons/buttons.component';\nimport { PromptComponent } from './components/prompt/prompt.component';\nimport { ToastComponent } from './components/toast/toast.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [SnotifyComponent, ToastComponent, TruncatePipe, ButtonsComponent, PromptComponent, KeysPipe],\n exports: [SnotifyComponent, TruncatePipe, KeysPipe]\n})\nexport class SnotifyModule {\n static forRoot(): ModuleWithProviders<SnotifyModule> {\n return {\n ngModule: SnotifyModule,\n providers: [SnotifyService]\n };\n }\n}\n","import { SnotifyPosition } from './enums/snotify-position.enum';\nimport { SnotifyStyle } from './enums/snotify-style.enum';\n\n/**\n * Snotify default configuration object\n */\nexport const ToastDefaults = {\n global: {\n newOnTop: true,\n maxOnScreen: 8,\n maxAtPosition: 8,\n filterDuplicates: false\n },\n toast: {\n type: SnotifyStyle.simple,\n showProgressBar: true,\n timeout: 2000,\n closeOnClick: true,\n pauseOnHover: true,\n bodyMaxLength: 150,\n titleMaxLength: 16,\n backdrop: -1,\n icon: null,\n iconClass: null,\n html: null,\n position: SnotifyPosition.rightBottom,\n animation: { enter: 'fadeIn', exit: 'fadeOut', time: 400 }\n },\n type: {\n [SnotifyStyle.prompt]: {\n timeout: 0,\n closeOnClick: false,\n buttons: [\n { text: 'Ok', action: null, bold: true },\n { text: 'Cancel', action: null, bold: false }\n ],\n placeholder: 'Enter answer here...',\n type: SnotifyStyle.prompt\n },\n [SnotifyStyle.confirm]: {\n timeout: 0,\n closeOnClick: false,\n buttons: [\n { text: 'Ok', action: null, bold: true },\n { text: 'Cancel', action: null, bold: false }\n ],\n type: SnotifyStyle.confirm\n },\n [SnotifyStyle.simple]: {\n type: SnotifyStyle.simple\n },\n [SnotifyStyle.success]: {\n type: SnotifyStyle.success\n },\n [SnotifyStyle.error]: {\n type: SnotifyStyle.error\n },\n [SnotifyStyle.warning]: {\n type: SnotifyStyle.warning\n },\n [SnotifyStyle.info]: {\n type: SnotifyStyle.info\n },\n [SnotifyStyle.async]: {\n pauseOnHover: false,\n closeOnClick: false,\n timeout: 0,\n showProgressBar: false,\n type: SnotifyStyle.async\n }\n }\n};\n","/*\n * Public API Surface of ng-snotify\n */\n\nexport * from './lib/components';\nexport * from './lib/enums';\nexport * from './lib/interfaces';\nexport * from './lib/models';\nexport * from './lib/pipes';\nexport * from './lib/services';\nexport * from './lib/snotify.module';\nexport * from './lib/toast-defaults';\nexport * from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SnotifyService","i1","i2.TruncatePipe","i3.ButtonsComponent","i4.PromptComponent","i5.TruncatePipe","i3.ToastComponent","i4.KeysPipe"],"mappings":"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"}