@christophhu/ngx-notifications
Version:
An Angular notifications library to create beautiful notifications with animations.
1 lines • 23.8 kB
Source Map (JSON)
{"version":3,"file":"christophhu-ngx-notifications.mjs","sources":["../../../projects/ngx-notifications/src/lib/token/ngx-notifications-options-token.ts","../../../projects/ngx-notifications/src/lib/ngx-notifications-initializer.provider.ts","../../../projects/ngx-notifications/src/lib/ngx-notifications.provider.ts","../../../projects/ngx-notifications/src/lib/pipes/save-html.pipe.ts","../../../projects/ngx-notifications/src/lib/animations/fade.ts","../../../projects/ngx-notifications/src/lib/services/notification.service.ts","../../../projects/ngx-notifications/src/lib/components/notification/notification.component.ts","../../../projects/ngx-notifications/src/lib/components/notification/notification.component.html","../../../projects/ngx-notifications/src/public-api.ts","../../../projects/ngx-notifications/src/christophhu-ngx-notifications.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\r\nimport { INotificationsOptions } from '../models/notifications-options'\r\n\r\n/**\r\n * Provide an Injection Token for global settings.\r\n */\r\nexport const NGX_NOTIFICATIONS_OPTIONS_TOKEN = new InjectionToken<INotificationsOptions>('ngx-notifications-options-token', {\r\n factory: () => ({ type: 'info', position: 'top-right', header: '', message: '', autoclose: true, timeout: 15000, max: 5 })\r\n})","import { inject, provideAppInitializer, Provider } from \"@angular/core\"\r\nimport { NGX_NOTIFICATIONS_OPTIONS_TOKEN } from \"./token/ngx-notifications-options-token\"\r\nimport { INotificationsOptions } from \"./models/notifications-options\"\r\n\r\nexport const NGX_NOTIFICATIONS_INITIALIZER_PROVIDER: Provider = [\r\n provideAppInitializer(() => NotificationsInitializer(inject(NGX_NOTIFICATIONS_OPTIONS_TOKEN)))\r\n]\r\n\r\nexport function NotificationsInitializer(options: INotificationsOptions): Promise<void> {\r\n\r\n // const notificationService = inject(NotificationService)\r\n // notificationService.setDefault({ type: 'info', position: 'top-right', header: '', message: '', autoclose: true, timeout: 15000, max: 5 })\r\n\r\n console.log('NotificationsInitializer', options)\r\n\r\n return new Promise<void>((resolve) => {\r\n resolve()\r\n })\r\n}","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core'\r\nimport { NGX_NOTIFICATIONS_OPTIONS_TOKEN } from './token/ngx-notifications-options-token'\r\nimport { NGX_NOTIFICATIONS_INITIALIZER_PROVIDER } from './ngx-notifications-initializer.provider'\r\nimport { INotificationsOptions } from './models/notifications-options'\r\n\r\nexport function provideNotifications(options: INotificationsOptions): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n {\r\n provide: NGX_NOTIFICATIONS_OPTIONS_TOKEN,\r\n useValue: options\r\n },\r\n NGX_NOTIFICATIONS_INITIALIZER_PROVIDER\r\n ])\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Pipe({ \r\n name: 'saveHtml' \r\n})\r\nexport class SaveHtmlPipe implements PipeTransform {\r\n\r\n constructor(private sanitized: DomSanitizer) {}\r\n \r\n transform(value: string) {\r\n return this.sanitized.bypassSecurityTrustHtml(value);\r\n }\r\n}\r\n","import { animate, state, style, transition, trigger } from '@angular/animations'\r\n\r\nexport const fadeInRight = trigger('fadeInRight', [\r\n state('void', style({ opacity: 0, transform: 'translate3d(100%, 0, 0)' })),\r\n state('*', style({ opacity: 1, transform: 'translate3d(0, 0, 0)' })),\r\n transition('void => false', []),\r\n transition('void => *', animate('200ms 200ms cubic-bezier(0.0, 0.0, 0.2, 1)'))\r\n])\r\n\r\nexport const fadeOutRight = trigger('fadeOutRight', [\r\n state('*', style({ opacity: 1, transform: 'translate3d(0, 0, 0)' })),\r\n state('void', style({ opacity: 0, transform: 'translate3d(100%, 0, 0)' })),\r\n transition('false => void', []),\r\n transition('* => void', animate('200ms 50ms cubic-bezier(0.0, 0.0, 0.2, 1)'))\r\n])","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { Notification } from '../models/notification.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NotificationsService {\r\n private _notificationsService = new Subject<any>()\r\n \r\n get() {\r\n return this._notificationsService.asObservable()\r\n }\r\n\r\n open(notification: Partial<Notification>): Observable<any> | void {\r\n return new Observable(observer => {\r\n const note = Object.assign({}, notification, { response: (response: any) => {\r\n observer.next(response)\r\n observer.complete()\r\n }})\r\n this.add(note)\r\n })\r\n }\r\n\r\n add(data: any) {\r\n this._notificationsService.next({ action: 'add', data: data })\r\n }\r\n\r\n remove(id: string) {\r\n this._notificationsService.next({ action: 'remove', id })\r\n }\r\n\r\n clear() {\r\n this._notificationsService.next({ action: 'clear' })\r\n }\r\n}\r\n","import { Component, EventEmitter, Inject, Input, Output } from '@angular/core';\r\nimport { PositionType } from '../../models/position.type';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { NotificationsService } from '../../services/notification.service';\r\nimport { Notification } from '../../models/notification.model';\r\nimport { CommonModule } from '@angular/common';\r\nimport { INotificationsOptions } from '../../models/notifications-options';\r\nimport { NGX_NOTIFICATIONS_OPTIONS_TOKEN } from '../../token/ngx-notifications-options-token';\r\nimport { SaveHtmlPipe } from '../../pipes/save-html.pipe';\r\nimport { fadeInRight, fadeOutRight } from '../../animations/fade'\r\n\r\n@Component({\r\n selector: 'notification',\r\n imports: [\r\n CommonModule\r\n ],\r\n templateUrl: './notification.component.html',\r\n styleUrl: './notification.component.sass',\r\n providers: [\r\n SaveHtmlPipe\r\n ],\r\n animations: [fadeInRight, fadeOutRight]\r\n})\r\nexport class NotificationComponent {\r\n position: PositionType\r\n\r\n @Output() public onAdd: EventEmitter<any> = new EventEmitter<any>()\r\n @Output() public onRemove: EventEmitter<any> = new EventEmitter<any>()\r\n @Output() public onClear: EventEmitter<boolean> = new EventEmitter<boolean>()\r\n\r\n notifications: Array<Notification> = []\r\n private _notifications_options: INotificationsOptions\r\n // private default_values: Partial<Notification>\r\n\r\n destroy$: Subject<boolean> = new Subject<boolean>()\r\n\r\n constructor(private _notificationsService: NotificationsService, @Inject(NGX_NOTIFICATIONS_OPTIONS_TOKEN) public options: INotificationsOptions) {\r\n\r\n this._notifications_options = options\r\n\r\n this.position = this._notifications_options.position\r\n this._notificationsService.get()\r\n .pipe(\r\n takeUntil(this.destroy$)\r\n )\r\n .subscribe((notification: any) => {\r\n if (!notification) return\r\n\r\n switch (notification.action) {\r\n case 'add':\r\n this.add(notification.data)\r\n break\r\n case 'remove':\r\n this.remove(notification.id)\r\n break\r\n case 'clear':\r\n this.clear()\r\n break\r\n }\r\n })\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true)\r\n this.destroy$.unsubscribe()\r\n }\r\n\r\n add(notification: any) {\r\n notification = Object.assign({}, this._notifications_options, notification)\r\n\r\n let timeout\r\n const id = this.uuid()\r\n\r\n if (this._notifications_options.max && this.notifications.length === this._notifications_options.max ) {\r\n this.remove(this.notifications[0].id)\r\n }\r\n\r\n if (notification.autoClose && notification.timeout) {\r\n timeout = setTimeout(() => {\r\n this.remove(id)\r\n }, notification.timeout || this._notifications_options.timeout)\r\n }\r\n\r\n notification = Object.assign({ id: id, timeoutObj: timeout }, notification)\r\n\r\n if (notification.onAdd) {\r\n notification.onAdd(notification)\r\n }\r\n\r\n if (this.onAdd) {\r\n this.onAdd.emit(notification)\r\n }\r\n\r\n this.notifications.push(notification)\r\n }\r\n\r\n remove(id: string) {\r\n const notification = this.notifications.find(obj => obj.id === id)\r\n\r\n if (notification) {\r\n if (notification.onRemove) {\r\n notification.onRemove(notification)\r\n }\r\n\r\n if (this.onRemove) {\r\n this.onRemove.emit(notification)\r\n }\r\n\r\n if (notification.timeoutObj) {\r\n clearTimeout(notification.timeoutObj)\r\n }\r\n }\r\n\r\n this.notifications = this.notifications.filter(obj => obj.id !== id)\r\n }\r\n\r\n clear() {\r\n if (this.notifications.length === 0) return\r\n\r\n this.notifications = []\r\n\r\n if (this.onClear) {\r\n this.onClear.emit(true)\r\n }\r\n }\r\n\r\n private uuid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n const r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8)\r\n return v.toString(16)\r\n })\r\n }\r\n}\r\n","<div class=\"fixed flex flex-col z-110 w-full md:w-128\" [ngClass]=\"position\">\r\n <div *ngFor=\"let notification of notifications\" class=\"flex w-full md:w-128\" @fadeInRight @fadeOutRight>\r\n <ng-container *ngIf=\"notification.type === 'error'\">\r\n <div class=\"relative flex w-full m-2 items-center justify-start bg-tertiary border border-borderline text-darker text-base rounded-lg shadow-lg\">\r\n <div class=\"h-full w-20 p-2 flex flex-none items-center justify-center bg-red-400 w-12 h-12 text-white rounded-l-md\">\r\n <div class=\"h-8 w-8 stroke-2 fill-none\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentFill\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0\" /><path d=\"M12 8v4\" /><path d=\"M12 16h.01\" /></svg>\r\n </div>\r\n </div>\r\n <div class=\"flex flex-col flex-1 justify-center p-4\">\r\n <p class=\"text-lg text-darker font-semibold pb-1\">{{ notification.header }}</p>\r\n <p class=\"text-sm text-dark font-normal line-clamp\">{{ notification.message }}</p>\r\n </div>\r\n <div class=\"flex flex-col flex-none justify-around h-full w-24 border-l border-borderline\">\r\n <div class=\"grid h-full place-items-center text-center cursor-pointer\" (click)=\"notification.response(true); remove(notification.id)\">OK</div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"notification.type === 'request'\">\r\n <div class=\"relative flex w-full m-2 items-center justify-start bg-tertiary border border-borderline text-darker text-base rounded-lg shadow-lg\">\r\n <div class=\"h-full w-20 p-2 flex flex-none items-center justify-center bg-blue-400 w-12 h-12 text-white rounded-l-md\">\r\n <div class=\"h-8 w-8 stroke-2 fill-none\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentFill\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 5.25h.008v.008H12v-.008Z\" /></svg>\r\n </div>\r\n </div>\r\n <div class=\"flex flex-col flex-1 justify-center p-4\">\r\n <p class=\"text-lg text-darker font-semibold pb-1\">{{ notification.header }}</p>\r\n <p class=\"text-sm text-dark font-normal line-clamp\">{{ notification.message }}</p>\r\n </div>\r\n <div class=\"flex flex-col flex-none justify-around h-full w-24 border-l border-borderline\">\r\n <div class=\"grid h-full place-items-center text-center cursor-pointer\" (click)=\"notification.response(true); remove(notification.id)\">Ja</div>\r\n <hr class=\"border-t border-borderline\">\r\n <div class=\"grid h-full place-items-center text-center cursor-pointer\" (click)=\"notification.response(false); remove(notification.id)\">Nein</div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"notification.type === 'success'\">\r\n <div class=\"relative flex w-full m-2 items-center justify-start bg-tertiary border border-borderline text-darker text-base rounded-lg shadow-lg\">\r\n <div class=\"h-full w-20 p-2 flex flex-none items-center justify-center bg-green-400 w-12 h-12 text-white rounded-l-md\">\r\n <div class=\"h-8 w-8 stroke-2 fill-none\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentFill\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0\" /><path d=\"M9 12l2 2l4 -4\" /></svg>\r\n </div>\r\n </div>\r\n <div class=\"flex flex-col flex-1 justify-center p-4\">\r\n <p class=\"text-lg text-darker font-semibold pb-1\">{{ notification.header }}</p>\r\n <p class=\"text-sm text-dark font-normal line-clamp\">{{ notification.message }}</p>\r\n </div>\r\n <div class=\"flex flex-col flex-none justify-around h-full w-24 border-l border-borderline\">\r\n <div class=\"grid h-full place-items-center text-center cursor-pointer\" (click)=\"notification.response(true); remove(notification.id)\">OK</div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"notification.type === 'warning'\">\r\n <div class=\"relative flex w-full m-2 items-center justify-start bg-tertiary border border-borderline text-darker text-base rounded-lg shadow-lg\">\r\n <div class=\"h-full w-20 p-2 flex flex-none items-center justify-center bg-yellow-400 w-12 h-12 text-white rounded-l-md\">\r\n <div class=\"h-8 w-8 stroke-2 fill-none\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentFill\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 5.25h.008v.008H12v-.008Z\" /></svg>\r\n </div>\r\n </div>\r\n <div class=\"flex flex-col flex-1 justify-center p-4\">\r\n <p class=\"text-lg text-darker font-semibold pb-1\">{{ notification.header }}</p>\r\n <p class=\"text-sm text-dark font-normal line-clamp\">{{ notification.message }}</p>\r\n </div>\r\n <div class=\"flex flex-col flex-none justify-around h-full w-24 border-l border-borderline\">\r\n <div class=\"grid h-full place-items-center text-center cursor-pointer\" (click)=\"notification.response(true); remove(notification.id)\">Ja</div>\r\n <hr class=\"border-t border-borderline\">\r\n <div class=\"grid h-full place-items-center text-center cursor-pointer\" (click)=\"notification.response(false); remove(notification.id)\">Nein</div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>","/*\r\n * Public API Surface of ngx-notifications\r\n */\r\n\r\nexport * from './lib/ngx-notifications.provider'\r\nexport * from './lib/components/notification/notification.component'\r\nexport * from './lib/services/notification.service'\r\nexport * from './lib/models/notification.model'\r\nexport * from './lib/models/notifications-options'\r\nexport * from './lib/models/notification.type'\r\nexport * from './lib/models/position.type'\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}