@libs-ui/services-notification 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # notification
2
+
3
+ This library was generated with [Nx](https://nx.dev).
@@ -0,0 +1,15 @@
1
+ import { Subject } from 'rxjs';
2
+ import { INotificationTextConfig } from '../interfaces/notification';
3
+ import { OnDestroy } from '@angular/core';
4
+ import * as i0 from "@angular/core";
5
+ export declare class LibUiServiceNotificationBaseComponent implements OnDestroy {
6
+ protected message: string;
7
+ protected interpolateParams: Record<string, unknown>;
8
+ protected title: string;
9
+ protected config: INotificationTextConfig;
10
+ protected removeComponent: () => void;
11
+ protected onDestroy: Subject<void>;
12
+ ngOnDestroy(): void;
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<LibUiServiceNotificationBaseComponent, never>;
14
+ static ɵdir: i0.ɵɵDirectiveDeclaration<LibUiServiceNotificationBaseComponent, never, never, {}, {}, never, never, false, never>;
15
+ }
@@ -0,0 +1 @@
1
+ export * from './text/text.component';
@@ -0,0 +1,13 @@
1
+ import { OnDestroy, OnInit } from '@angular/core';
2
+ import { LibUiServiceNotificationBaseComponent } from '../base.component';
3
+ import * as i0 from "@angular/core";
4
+ export declare class LibUiServicesComponentsTextComponent extends LibUiServiceNotificationBaseComponent implements OnInit, OnDestroy {
5
+ protected containerClass: string;
6
+ protected icon: string;
7
+ private elementRef;
8
+ constructor();
9
+ ngOnInit(): void;
10
+ protected handlerClickClose(e: Event): void;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<LibUiServicesComponentsTextComponent, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<LibUiServicesComponentsTextComponent, "libs_ui-services-notification-components-text", never, {}, {}, never, never, true, never>;
13
+ }
@@ -0,0 +1,21 @@
1
+ import { Subject } from 'rxjs';
2
+ import { Directive } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export class LibUiServiceNotificationBaseComponent {
5
+ message;
6
+ interpolateParams;
7
+ title;
8
+ config;
9
+ removeComponent;
10
+ onDestroy = new Subject();
11
+ ngOnDestroy() {
12
+ this.onDestroy.next();
13
+ this.onDestroy.complete();
14
+ }
15
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibUiServiceNotificationBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
16
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: LibUiServiceNotificationBaseComponent, ngImport: i0 });
17
+ }
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibUiServiceNotificationBaseComponent, decorators: [{
19
+ type: Directive
20
+ }] });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL25vdGlmaWNhdGlvbi9zcmMvY29tcG9uZW50cy9iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7O0FBRXJELE1BQU0sT0FBTyxxQ0FBcUM7SUFDdEMsT0FBTyxDQUFVO0lBQ2pCLGlCQUFpQixDQUEyQjtJQUM1QyxLQUFLLENBQVU7SUFDZixNQUFNLENBQTJCO0lBQ2pDLGVBQWUsQ0FBYztJQUM3QixTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUUxQyxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7d0dBWFUscUNBQXFDOzRGQUFyQyxxQ0FBcUM7OzRGQUFyQyxxQ0FBcUM7a0JBRGpELFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJTm90aWZpY2F0aW9uVGV4dENvbmZpZyB9IGZyb20gJy4uL2ludGVyZmFjZXMvbm90aWZpY2F0aW9uJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBMaWJVaVNlcnZpY2VOb3RpZmljYXRpb25CYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJvdGVjdGVkIG1lc3NhZ2UhOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBpbnRlcnBvbGF0ZVBhcmFtcyE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBwcm90ZWN0ZWQgdGl0bGUhOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBjb25maWchOiBJTm90aWZpY2F0aW9uVGV4dENvbmZpZztcbiAgcHJvdGVjdGVkIHJlbW92ZUNvbXBvbmVudCE6ICgpID0+IHZvaWQ7XG4gIHByb3RlY3RlZCBvbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './text/text.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL25vdGlmaWNhdGlvbi9zcmMvY29tcG9uZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90ZXh0L3RleHQuY29tcG9uZW50JztcbiJdfQ==
@@ -0,0 +1,57 @@
1
+ import { ChangeDetectionStrategy, Component, ElementRef, inject } from '@angular/core';
2
+ import { TranslateModule } from '@ngx-translate/core';
3
+ import { fromEvent } from 'rxjs';
4
+ import { take, takeUntil } from 'rxjs/operators';
5
+ import { LibUiServiceNotificationBaseComponent } from '../base.component';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@ngx-translate/core";
8
+ export class LibUiServicesComponentsTextComponent extends LibUiServiceNotificationBaseComponent {
9
+ containerClass;
10
+ icon;
11
+ elementRef = inject(ElementRef);
12
+ constructor() {
13
+ super();
14
+ }
15
+ ngOnInit() {
16
+ switch (this.config?.type) {
17
+ case 'success':
18
+ this.containerClass = 'libs-ui-toast_success';
19
+ this.icon = 'libs-ui-icon-check-circle-solid';
20
+ break;
21
+ case 'info':
22
+ this.containerClass = 'libs-ui-toast_info';
23
+ this.icon = 'libs-ui-icon-tooltip-solid';
24
+ break;
25
+ case 'error':
26
+ this.containerClass = 'libs-ui-toast_error';
27
+ this.icon = 'libs-ui-icon-close-circle-solid';
28
+ break;
29
+ case 'warn':
30
+ this.containerClass = 'libs-ui-toast_warning';
31
+ this.icon = 'libs-ui-icon-alert-triangle-solid';
32
+ break;
33
+ default:
34
+ this.containerClass = 'bg-[#6fd100] libs-ui-toast_success';
35
+ this.icon = 'mo-icn-toast_success';
36
+ }
37
+ const { eventName, callback } = this.config;
38
+ if (!eventName || !callback) {
39
+ return;
40
+ }
41
+ if (eventName === 'click') {
42
+ this.containerClass = `${this.containerClass} cursor-pointer`;
43
+ }
44
+ fromEvent(this.elementRef.nativeElement, eventName).pipe(takeUntil(this.onDestroy), take(1)).subscribe(callback);
45
+ }
46
+ handlerClickClose(e) {
47
+ e.stopPropagation();
48
+ this.removeComponent();
49
+ }
50
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibUiServicesComponentsTextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
51
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibUiServicesComponentsTextComponent, isStandalone: true, selector: "libs_ui-services-notification-components-text", usesInheritance: true, ngImport: i0, template: "<div class=\"libs-ui-toast\"\n [class]=\"containerClass\"\n [style.zIndex]=\"config.zIndex || 2000\">\n <div class=\"flex items-center\">\n <i class=\"{{icon}}\"></i>\n </div>\n <div class=\"flex flex-col w-full\">\n @if (title) {\n <div class=\"libs-ui-font-h5m text-break\"\n [innerHtml]=\"title | translate \">\n </div>\n }\n @if (message) {\n <div class=\"text-break\"\n [class.libs-ui-font-h5r]=\"!title\"\n [class.libs-ui-font-h7r]=\"title\"\n [class.mt-[4ppx]]=\"title\"\n [innerHtml]=\"message | translate: (interpolateParams || {})\">\n </div>\n }\n </div>\n <div class=\"flex items-center\">\n <i class=\"libs-ui-icon-close mr-0 ml-[8px] cursor-pointer\"\n (click)=\"handlerClickClose($event)\">\n </i>\n </div>\n</div>", styles: ["@-webkit-keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}.libs-ui-toast{position:fixed;padding:12px 16px;display:flex;width:300px;flex-shrink:0;border-radius:8px;animation:animation-move .3s linear}.libs-ui-toast [class*=libs-ui-icon]{font-size:16px;margin-right:16px}.libs-ui-toast.libs-ui-toast_success{background-color:#e6faf0;color:#00bc62}.libs-ui-toast.libs-ui-toast_success [class*=libs-ui-icon]:before{color:#00bc62}.libs-ui-toast.libs-ui-toast_warning{background-color:#feeee6;color:#f05800}.libs-ui-toast.libs-ui-toast_warning [class*=libs-ui-icon]:before{color:#f05800}.libs-ui-toast.libs-ui-toast_error{background-color:#fdeaec;color:#ee2d41}.libs-ui-toast.libs-ui-toast_error [class*=libs-ui-icon]:before{color:#ee2d41}.libs-ui-toast.libs-ui-toast_info{background-color:#e9f1fe;color:#226ff5}.libs-ui-toast.libs-ui-toast_info [class*=libs-ui-icon]:before{color:#226ff5}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
52
+ }
53
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibUiServicesComponentsTextComponent, decorators: [{
54
+ type: Component,
55
+ args: [{ selector: 'libs_ui-services-notification-components-text', standalone: true, imports: [TranslateModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"libs-ui-toast\"\n [class]=\"containerClass\"\n [style.zIndex]=\"config.zIndex || 2000\">\n <div class=\"flex items-center\">\n <i class=\"{{icon}}\"></i>\n </div>\n <div class=\"flex flex-col w-full\">\n @if (title) {\n <div class=\"libs-ui-font-h5m text-break\"\n [innerHtml]=\"title | translate \">\n </div>\n }\n @if (message) {\n <div class=\"text-break\"\n [class.libs-ui-font-h5r]=\"!title\"\n [class.libs-ui-font-h7r]=\"title\"\n [class.mt-[4ppx]]=\"title\"\n [innerHtml]=\"message | translate: (interpolateParams || {})\">\n </div>\n }\n </div>\n <div class=\"flex items-center\">\n <i class=\"libs-ui-icon-close mr-0 ml-[8px] cursor-pointer\"\n (click)=\"handlerClickClose($event)\">\n </i>\n </div>\n</div>", styles: ["@-webkit-keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}.libs-ui-toast{position:fixed;padding:12px 16px;display:flex;width:300px;flex-shrink:0;border-radius:8px;animation:animation-move .3s linear}.libs-ui-toast [class*=libs-ui-icon]{font-size:16px;margin-right:16px}.libs-ui-toast.libs-ui-toast_success{background-color:#e6faf0;color:#00bc62}.libs-ui-toast.libs-ui-toast_success [class*=libs-ui-icon]:before{color:#00bc62}.libs-ui-toast.libs-ui-toast_warning{background-color:#feeee6;color:#f05800}.libs-ui-toast.libs-ui-toast_warning [class*=libs-ui-icon]:before{color:#f05800}.libs-ui-toast.libs-ui-toast_error{background-color:#fdeaec;color:#ee2d41}.libs-ui-toast.libs-ui-toast_error [class*=libs-ui-icon]:before{color:#ee2d41}.libs-ui-toast.libs-ui-toast_info{background-color:#e9f1fe;color:#226ff5}.libs-ui-toast.libs-ui-toast_info [class*=libs-ui-icon]:before{color:#226ff5}\n"] }]
56
+ }], ctorParameters: () => [] });
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL25vdGlmaWNhdGlvbi9zcmMvY29tcG9uZW50cy90ZXh0L3RleHQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9zZXJ2aWNlcy9ub3RpZmljYXRpb24vc3JjL2NvbXBvbmVudHMvdGV4dC90ZXh0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7O0FBVzFFLE1BQU0sT0FBTyxvQ0FBcUMsU0FBUSxxQ0FBcUM7SUFDbkYsY0FBYyxDQUFVO0lBQ3hCLElBQUksQ0FBVTtJQUVoQixVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBRXZDO1FBQ0UsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDO0lBRUQsUUFBUTtRQUNOLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUMxQixLQUFLLFNBQVM7Z0JBQ1osSUFBSSxDQUFDLGNBQWMsR0FBRyx1QkFBdUIsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLElBQUksR0FBRyxpQ0FBaUMsQ0FBQztnQkFDOUMsTUFBTTtZQUVSLEtBQUssTUFBTTtnQkFDVCxJQUFJLENBQUMsY0FBYyxHQUFHLG9CQUFvQixDQUFDO2dCQUMzQyxJQUFJLENBQUMsSUFBSSxHQUFHLDRCQUE0QixDQUFDO2dCQUN6QyxNQUFNO1lBRVIsS0FBSyxPQUFPO2dCQUNWLElBQUksQ0FBQyxjQUFjLEdBQUcscUJBQXFCLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxJQUFJLEdBQUcsaUNBQWlDLENBQUM7Z0JBQzlDLE1BQU07WUFFUixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxDQUFDLGNBQWMsR0FBRyx1QkFBdUIsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLElBQUksR0FBRyxtQ0FBbUMsQ0FBQztnQkFDaEQsTUFBTTtZQUVSO2dCQUNFLElBQUksQ0FBQyxjQUFjLEdBQUcsb0NBQW9DLENBQUM7Z0JBQzNELElBQUksQ0FBQyxJQUFJLEdBQUcsc0JBQXNCLENBQUM7UUFDdkMsQ0FBQztRQUNELE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUU1QyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLFNBQVMsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsY0FBYyxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsaUJBQWlCLENBQUM7UUFDaEUsQ0FBQztRQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkgsQ0FBQztJQUVTLGlCQUFpQixDQUFDLENBQVE7UUFDbEMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO3dHQWxEVSxvQ0FBb0M7NEZBQXBDLG9DQUFvQyxnSUNmakQsa3lCQTBCTSxzaENEZE0sZUFBZTs7NEZBR2Qsb0NBQW9DO2tCQVRoRCxTQUFTOytCQUVFLCtDQUErQyxjQUc3QyxJQUFJLFdBQ1AsQ0FBQyxlQUFlLENBQUMsbUJBQ1QsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMaWJVaVNlcnZpY2VOb3RpZmljYXRpb25CYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLXNlcnZpY2VzLW5vdGlmaWNhdGlvbi1jb21wb25lbnRzLXRleHQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RleHQuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1RyYW5zbGF0ZU1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIExpYlVpU2VydmljZXNDb21wb25lbnRzVGV4dENvbXBvbmVudCBleHRlbmRzIExpYlVpU2VydmljZU5vdGlmaWNhdGlvbkJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByb3RlY3RlZCBjb250YWluZXJDbGFzcyE6IHN0cmluZztcbiAgcHJvdGVjdGVkIGljb24hOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN3aXRjaCAodGhpcy5jb25maWc/LnR5cGUpIHtcbiAgICAgIGNhc2UgJ3N1Y2Nlc3MnOlxuICAgICAgICB0aGlzLmNvbnRhaW5lckNsYXNzID0gJ2xpYnMtdWktdG9hc3Rfc3VjY2Vzcyc7XG4gICAgICAgIHRoaXMuaWNvbiA9ICdsaWJzLXVpLWljb24tY2hlY2stY2lyY2xlLXNvbGlkJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2luZm8nOlxuICAgICAgICB0aGlzLmNvbnRhaW5lckNsYXNzID0gJ2xpYnMtdWktdG9hc3RfaW5mbyc7XG4gICAgICAgIHRoaXMuaWNvbiA9ICdsaWJzLXVpLWljb24tdG9vbHRpcC1zb2xpZCc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHRoaXMuY29udGFpbmVyQ2xhc3MgPSAnbGlicy11aS10b2FzdF9lcnJvcic7XG4gICAgICAgIHRoaXMuaWNvbiA9ICdsaWJzLXVpLWljb24tY2xvc2UtY2lyY2xlLXNvbGlkJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3dhcm4nOlxuICAgICAgICB0aGlzLmNvbnRhaW5lckNsYXNzID0gJ2xpYnMtdWktdG9hc3Rfd2FybmluZyc7XG4gICAgICAgIHRoaXMuaWNvbiA9ICdsaWJzLXVpLWljb24tYWxlcnQtdHJpYW5nbGUtc29saWQnO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5jb250YWluZXJDbGFzcyA9ICdiZy1bIzZmZDEwMF0gbGlicy11aS10b2FzdF9zdWNjZXNzJztcbiAgICAgICAgdGhpcy5pY29uID0gJ21vLWljbi10b2FzdF9zdWNjZXNzJztcbiAgICB9XG4gICAgY29uc3QgeyBldmVudE5hbWUsIGNhbGxiYWNrIH0gPSB0aGlzLmNvbmZpZztcblxuICAgIGlmICghZXZlbnROYW1lIHx8ICFjYWxsYmFjaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnROYW1lID09PSAnY2xpY2snKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lckNsYXNzID0gYCR7dGhpcy5jb250YWluZXJDbGFzc30gY3Vyc29yLXBvaW50ZXJgO1xuICAgIH1cbiAgICBmcm9tRXZlbnQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIGV2ZW50TmFtZSkucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpLCB0YWtlKDEpKS5zdWJzY3JpYmUoY2FsbGJhY2spO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGlja0Nsb3NlKGU6IEV2ZW50KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnJlbW92ZUNvbXBvbmVudCgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibGlicy11aS10b2FzdFwiXG4gIFtjbGFzc109XCJjb250YWluZXJDbGFzc1wiXG4gIFtzdHlsZS56SW5kZXhdPVwiY29uZmlnLnpJbmRleCB8fCAyMDAwXCI+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgIDxpIGNsYXNzPVwie3tpY29ufX1cIj48L2k+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGxcIj5cbiAgICBAaWYgKHRpdGxlKSB7XG4gICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNW0gdGV4dC1icmVha1wiXG4gICAgICBbaW5uZXJIdG1sXT1cInRpdGxlIHwgdHJhbnNsYXRlIFwiPlxuICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKG1lc3NhZ2UpIHtcbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1icmVha1wiXG4gICAgICBbY2xhc3MubGlicy11aS1mb250LWg1cl09XCIhdGl0bGVcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZm9udC1oN3JdPVwidGl0bGVcIlxuICAgICAgW2NsYXNzLm10LVs0cHB4XV09XCJ0aXRsZVwiXG4gICAgICBbaW5uZXJIdG1sXT1cIm1lc3NhZ2UgfCB0cmFuc2xhdGU6IChpbnRlcnBvbGF0ZVBhcmFtcyB8fCB7fSlcIj5cbiAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICA8aSBjbGFzcz1cImxpYnMtdWktaWNvbi1jbG9zZSBtci0wIG1sLVs4cHhdIGN1cnNvci1wb2ludGVyXCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVyQ2xpY2tDbG9zZSgkZXZlbnQpXCI+XG4gICAgPC9pPlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './notification.service';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL25vdGlmaWNhdGlvbi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbm90aWZpY2F0aW9uLnNlcnZpY2UnOyJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9zZXJ2aWNlcy9ub3RpZmljYXRpb24vc3JjL2ludGVyZmFjZXMvbm90aWZpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBDb21wb25lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBJTm90aWZpY2F0aW9uUXVldWUge1xuICBjb25maWc6IElOb3RpZmljYXRpb25UZXh0Q29uZmlnO1xuICBjb21wb25lbnQ6IENvbXBvbmVudFJlZjxhbnk+O1xuICB0aW1lb3V0OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5vdGlmaWNhdGlvblRleHRDb25maWcge1xuICB0eXBlOiAnc3VjY2VzcycgfCAnaW5mbycgfCAnZXJyb3InIHwgJ3dhcm4nO1xuICBwb3NpdGlvblJpZ2h0PzogbnVtYmVyO1xuICB6SW5kZXg/OiBudW1iZXI7XG4gIHRpbWVSZW1vdmU6IG51bWJlcjtcbiAgZXZlbnROYW1lPzogJ2NsaWNrJyB8ICdtb3VzZWVudGVyJztcbiAgY2FsbGJhY2s/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElOb3RpZmljYXRpb25UZXh0UHVibGljQ29uZmlnIHtcbiAgaW50ZXJwb2xhdGVQYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLGFueT4sXG4gIHRpdGxlPzogc3RyaW5nLFxuICBwb3NpdGlvblJpZ2h0PzogbnVtYmVyO1xuICB6SW5kZXg/OiBudW1iZXI7XG4gIHRpbWVSZW1vdmU/OiBudW1iZXI7XG4gIGV2ZW50TmFtZT86ICdjbGljaycgfCAnbW91c2VlbnRlcic7XG4gIGNhbGxiYWNrPzogKCkgPT4gdm9pZDtcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIElOb3RpZmljYXRpb25QdXNoRnJvbUlGcmFtZSB7XG5cdGZ1bmN0aW9uTmFtZTogJ3N1Y2Nlc3MnIHwgJ2luZm8nIHwgJ2Vycm9yJyB8ICd3YXJuJztcblx0bWVzc2FnZTogc3RyaW5nO1xuXHR0aXRsZT86IHN0cmluZztcblx0dGltZVJlbW92ZT86IG51bWJlcjtcbn1cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicy11aS1zZXJ2aWNlcy1ub3RpZmljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL25vdGlmaWNhdGlvbi9zcmMvbGlicy11aS1zZXJ2aWNlcy1ub3RpZmljYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,179 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { Injectable, inject } from '@angular/core';
3
+ import { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';
4
+ import { encrypt, escapeHtml, isEmbedFrame, UtilsCommunicateMicro } from '@libs-ui/utils';
5
+ import { TranslateService } from '@ngx-translate/core';
6
+ import { Observable } from 'rxjs';
7
+ import { LibUiServicesComponentsTextComponent } from './components';
8
+ import * as i0 from "@angular/core";
9
+ export class LibsUiNotificationService {
10
+ notificationPermission;
11
+ queueMessage = [];
12
+ timeoutUpdatePosition;
13
+ MAX_QUEUE_MESSAGE = 5;
14
+ isInit = false;
15
+ dynamicService = inject(LibsUiDynamicComponentService);
16
+ translateService = inject(TranslateService);
17
+ constructor() {
18
+ this.notificationPermission = this.systemSupportNotification() ? 'default' : 'denied';
19
+ }
20
+ init(messageNameHandler) {
21
+ if (this.isInit) {
22
+ return;
23
+ }
24
+ this.isInit = true;
25
+ UtilsCommunicateMicro.GetMessage(messageNameHandler).subscribe(e => {
26
+ if (isEmbedFrame()) {
27
+ const dataMessage = e.data.response;
28
+ this.showCompTypeText(dataMessage.message, undefined, dataMessage.title, { type: dataMessage.functionName, timeRemove: dataMessage.timeRemove || 2000 });
29
+ return;
30
+ }
31
+ UtilsCommunicateMicro.PostMessageToParent(e.data);
32
+ });
33
+ }
34
+ get TranslateService() {
35
+ return this.translateService;
36
+ }
37
+ systemSupportNotification() {
38
+ return 'Notification' in window;
39
+ }
40
+ systemRequestPermission() {
41
+ if (!this.systemSupportNotification()) {
42
+ return;
43
+ }
44
+ try {
45
+ Notification.requestPermission().then((permission) => this.Permission = permission);
46
+ }
47
+ catch (error) {
48
+ if (error instanceof TypeError) {
49
+ Notification.requestPermission((permission) => this.Permission = permission);
50
+ }
51
+ }
52
+ }
53
+ set Permission(permission) {
54
+ this.notificationPermission = permission;
55
+ }
56
+ systemSpawnNotification(title, options) {
57
+ return new Observable((obs) => {
58
+ if (!this.systemSupportNotification()) {
59
+ obs.complete();
60
+ }
61
+ if (this.notificationPermission !== 'granted') {
62
+ obs.complete();
63
+ }
64
+ const notify = new Notification(title, options);
65
+ notify.onshow = (e) => {
66
+ return obs.next({
67
+ notification: notify,
68
+ event: e
69
+ });
70
+ };
71
+ notify.onclick = (e) => {
72
+ notify.close();
73
+ window.focus();
74
+ return obs.next({
75
+ notification: notify,
76
+ event: e
77
+ });
78
+ };
79
+ notify.onerror = (e) => {
80
+ return obs.error({
81
+ notification: notify,
82
+ event: e
83
+ });
84
+ };
85
+ notify.onclose = () => {
86
+ return obs.complete();
87
+ };
88
+ });
89
+ }
90
+ showCompTypeTextSuccess(message, config) {
91
+ this.showCompTypeText(message, config?.interpolateParams, config?.title, { type: 'success', timeRemove: config?.timeRemove || 3000, positionRight: config?.positionRight, eventName: config?.eventName, callback: config?.callback });
92
+ }
93
+ showCompTypeTextError(message, config) {
94
+ this.showCompTypeText(message, config?.interpolateParams, config?.title, { type: 'error', timeRemove: config?.timeRemove || 3000, positionRight: config?.positionRight, eventName: config?.eventName, callback: config?.callback });
95
+ }
96
+ showCompTypeTextInfo(message, config) {
97
+ this.showCompTypeText(message, config?.interpolateParams, config?.title, { type: 'info', timeRemove: config?.timeRemove || 3000, positionRight: config?.positionRight, eventName: config?.eventName, callback: config?.callback });
98
+ }
99
+ showCompTypeTextWarning(message, config) {
100
+ this.showCompTypeText(message, config?.interpolateParams, config?.title, { type: 'warn', timeRemove: config?.timeRemove || 3000, positionRight: config?.positionRight, eventName: config?.eventName, callback: config?.callback });
101
+ }
102
+ showCompTypeText(message, interpolateParams, title, config = { type: 'success', timeRemove: 2000 }) {
103
+ if (!message) {
104
+ return;
105
+ }
106
+ this.checkQueueMessage();
107
+ if (interpolateParams && typeof interpolateParams === 'object') {
108
+ Object.keys(interpolateParams).forEach((key) => {
109
+ interpolateParams[key] = escapeHtml(interpolateParams[key]);
110
+ });
111
+ }
112
+ if (isEmbedFrame()) {
113
+ const messageTranslate = this.translateService.instant(message, interpolateParams);
114
+ return UtilsCommunicateMicro.PostMessageToParent({ type: 'MICRO_SITE_PUSH_MESSAGE_FROM_CHILD', response: encrypt(JSON.stringify({ functionName: config.type, message: messageTranslate, title, timeRemove: config.timeRemove || 2000 })) });
115
+ }
116
+ const component = this.dynamicService.resolveComponentFactory(LibUiServicesComponentsTextComponent);
117
+ const instance = component.instance;
118
+ instance.title = title;
119
+ instance.message = message;
120
+ instance.interpolateParams = interpolateParams;
121
+ instance.config = config;
122
+ instance.removeComponent = () => this.removeComponent(component);
123
+ const timeout = setTimeout(() => {
124
+ this.removeComponent(component);
125
+ }, config?.timeRemove);
126
+ this.queueMessage.push({
127
+ component,
128
+ config,
129
+ timeout
130
+ });
131
+ this.dynamicService.addToBody(component);
132
+ this.updatePositionMessage();
133
+ }
134
+ removeComponent(component) {
135
+ this.dynamicService.remove(component);
136
+ const indexRemove = this.queueMessage.findIndex(config => config.component === component);
137
+ if (indexRemove !== -1) {
138
+ this.queueMessage.splice(indexRemove, 1);
139
+ }
140
+ }
141
+ checkQueueMessage() {
142
+ if (this.queueMessage.length < this.MAX_QUEUE_MESSAGE) {
143
+ return;
144
+ }
145
+ const firstQueue = this.queueMessage.shift();
146
+ clearTimeout(firstQueue.timeout);
147
+ this.dynamicService.remove(firstQueue.component);
148
+ this.updatePositionMessage();
149
+ }
150
+ updatePositionMessage() {
151
+ if (!this.queueMessage.length) {
152
+ return;
153
+ }
154
+ clearTimeout(this.timeoutUpdatePosition);
155
+ this.timeoutUpdatePosition = setTimeout(() => {
156
+ let topMessage = 12;
157
+ this.queueMessage.forEach((message) => {
158
+ const firstEl = message.component.instance.elementRef.nativeElement.firstElementChild;
159
+ const rect = firstEl.getBoundingClientRect();
160
+ firstEl.style.top = `${topMessage}px`;
161
+ topMessage += rect.height + 12;
162
+ let right = message.config.positionRight ?? 12;
163
+ if (isEmbedFrame()) {
164
+ right = 40;
165
+ }
166
+ firstEl.style.right = `${right}px`;
167
+ });
168
+ });
169
+ }
170
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiNotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
171
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiNotificationService, providedIn: 'root' });
172
+ }
173
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiNotificationService, decorators: [{
174
+ type: Injectable,
175
+ args: [{
176
+ providedIn: 'root'
177
+ }]
178
+ }], ctorParameters: () => [] });
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL25vdGlmaWNhdGlvbi9zcmMvbm90aWZpY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBZ0IsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFPcEUsTUFBTSxPQUFPLHlCQUF5QjtJQUM1QixzQkFBc0IsQ0FBeUI7SUFDL0MsWUFBWSxHQUE4QixFQUFFLENBQUM7SUFDN0MscUJBQXFCLENBQU07SUFDbEIsaUJBQWlCLEdBQVcsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFFZixjQUFjLEdBQUcsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDdkQsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFcEQ7UUFDRSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3hGLENBQUM7SUFFTSxJQUFJLENBQUMsa0JBQWlDO1FBQzNDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLE9BQU87UUFDVCxD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QU8sQ0FBQyxDQUFDLE9BQTJCLEVBQUUsRUFBRTtnQkFDeEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDdEYsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBRTdDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsVUFBVSxJQUFJLENBQUM7Z0JBQ3RDLFVBQVUsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO2dCQUUvQyxJQUFJLFlBQVksRUFBRSxFQUFFLENBQUM7b0JBQ25CLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ2IsQ0FBQztnQkFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLEtBQUssSUFBSSxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO3dHQTdMVSx5QkFBeUI7NEdBQXpCLHlCQUF5QixjQUh4QixNQUFNOzs0RkFHUCx5QkFBeUI7a0JBSnJDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtZHluYW1pYy1jb21wb25lbnQnO1xuaW1wb3J0IHsgZW5jcnlwdCwgZXNjYXBlSHRtbCwgaXNFbWJlZEZyYW1lLCBVdGlsc0NvbW11bmljYXRlTWljcm8gfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMaWJVaVNlcnZpY2VzQ29tcG9uZW50c1RleHRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgSU5vdGlmaWNhdGlvblB1c2hGcm9tSUZyYW1lLCBJTm90aWZpY2F0aW9uUXVldWUsIElOb3RpZmljYXRpb25UZXh0Q29uZmlnLCBJTm90aWZpY2F0aW9uVGV4dFB1YmxpY0NvbmZpZyB9IGZyb20gJy4vaW50ZXJmYWNlcy9ub3RpZmljYXRpb24nO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcblxuZXhwb3J0IGNsYXNzIExpYnNVaU5vdGlmaWNhdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIG5vdGlmaWNhdGlvblBlcm1pc3Npb246IE5vdGlmaWNhdGlvblBlcm1pc3Npb247XG4gIHByaXZhdGUgcXVldWVNZXNzYWdlOiBBcnJheTxJTm90aWZpY2F0aW9uUXVldWU+ID0gW107XG4gIHByaXZhdGUgdGltZW91dFVwZGF0ZVBvc2l0aW9uOiBhbnk7XG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX1FVRVVFX01FU1NBR0U6IG51bWJlciA9IDU7XG4gIHByaXZhdGUgaXNJbml0ID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBkeW5hbWljU2VydmljZSA9IGluamVjdChMaWJzVWlEeW5hbWljQ29tcG9uZW50U2VydmljZSk7XG4gIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblBlcm1pc3Npb24gPSB0aGlzLnN5c3RlbVN1cHBvcnROb3RpZmljYXRpb24oKSA/ICdkZWZhdWx0JyA6ICdkZW5pZWQnO1xuICB9XG5cbiAgcHVibGljIGluaXQobWVzc2FnZU5hbWVIYW5kbGVyOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgaWYgKHRoaXMuaXNJbml0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNJbml0ID0gdHJ1ZTtcbiAgICBVdGlsc0NvbW11bmljYXRlTWljcm8uR2V0TWVzc2FnZShtZXNzYWdlTmFtZUhhbmRsZXIpLnN1YnNjcmliZShlID0+IHtcbiAgICAgIGlmIChpc0VtYmVkRnJhbWUoKSkge1xuICAgICAgICBjb25zdCBkYXRhTWVzc2FnZSA9IGUuZGF0YS5yZXNwb25zZSBhcyBJTm90aWZpY2F0aW9uUHVzaEZyb21JRnJhbWU7XG5cbiAgICAgICAgdGhpcy5zaG93Q29tcFR5cGVUZXh0KGRhdGFNZXNzYWdlLm1lc3NhZ2UsIHVuZGVmaW5lZCwgZGF0YU1lc3NhZ2UudGl0bGUsIHsgdHlwZTogZGF0YU1lc3NhZ2UuZnVuY3Rpb25OYW1lLCB0aW1lUmVtb3ZlOiBkYXRhTWVzc2FnZS50aW1lUmVtb3ZlIHx8IDIwMDAgfSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgVXRpbHNDb21tdW5pY2F0ZU1pY3JvLlBvc3RNZXNzYWdlVG9QYXJlbnQoZS5kYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgVHJhbnNsYXRlU2VydmljZSgpIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlO1xuICB9XG5cbiAgcHJpdmF0ZSBzeXN0ZW1TdXBwb3J0Tm90aWZpY2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAnTm90aWZpY2F0aW9uJyBpbiB3aW5kb3c7XG4gIH1cblxuICBwdWJsaWMgc3lzdGVtUmVxdWVzdFBlcm1pc3Npb24oKSB7XG4gICAgaWYgKCF0aGlzLnN5c3RlbVN1cHBvcnROb3RpZmljYXRpb24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgTm90aWZpY2F0aW9uLnJlcXVlc3RQZXJtaXNzaW9uKCkudGhlbigocGVybWlzc2lvbjogTm90aWZpY2F0aW9uUGVybWlzc2lvbikgPT4gdGhpcy5QZXJtaXNzaW9uID0gcGVybWlzc2lvbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcikge1xuICAgICAgICBOb3RpZmljYXRpb24ucmVxdWVzdFBlcm1pc3Npb24oKHBlcm1pc3Npb246IE5vdGlmaWNhdGlvblBlcm1pc3Npb24pID0+IHRoaXMuUGVybWlzc2lvbiA9IHBlcm1pc3Npb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0IFBlcm1pc3Npb24ocGVybWlzc2lvbjogTm90aWZpY2F0aW9uUGVybWlzc2lvbikge1xuICAgIHRoaXMubm90aWZpY2F0aW9uUGVybWlzc2lvbiA9IHBlcm1pc3Npb247XG4gIH1cblxuICBwdWJsaWMgc3lzdGVtU3Bhd25Ob3RpZmljYXRpb24odGl0bGU6IHN0cmluZywgb3B0aW9ucz86IE5vdGlmaWNhdGlvbk9wdGlvbnMpOiBhbnkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzOiBhbnkpID0+IHtcbiAgICAgIGlmICghdGhpcy5zeXN0ZW1TdXBwb3J0Tm90aWZpY2F0aW9uKCkpIHtcbiAgICAgICAgb2JzLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5ub3RpZmljYXRpb25QZXJtaXNzaW9uICE9PSAnZ3JhbnRlZCcpIHtcbiAgICAgICAgb2JzLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBub3RpZnkgPSBuZXcgTm90aWZpY2F0aW9uKHRpdGxlLCBvcHRpb25zKTtcblxuICAgICAgbm90aWZ5Lm9uc2hvdyA9IChlKSA9PiB7XG4gICAgICAgIHJldHVybiBvYnMubmV4dCh7XG4gICAgICAgICAgbm90aWZpY2F0aW9uOiBub3RpZnksXG4gICAgICAgICAgZXZlbnQ6IGVcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgbm90aWZ5Lm9uY2xpY2sgPSAoZSkgPT4ge1xuICAgICAgICBub3RpZnkuY2xvc2UoKTtcbiAgICAgICAgd2luZG93LmZvY3VzKCk7XG5cbiAgICAgICAgcmV0dXJuIG9icy5uZXh0KHtcbiAgICAgICAgICBub3RpZmljYXRpb246IG5vdGlmeSxcbiAgICAgICAgICBldmVudDogZVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBub3RpZnkub25lcnJvciA9IChlKSA9PiB7XG4gICAgICAgIHJldHVybiBvYnMuZXJyb3Ioe1xuICAgICAgICAgIG5vdGlmaWNhdGlvbjogbm90aWZ5LFxuICAgICAgICAgIGV2ZW50OiBlXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIG5vdGlmeS5vbmNsb3NlID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gb2JzLmNvbXBsZXRlKCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNob3dDb21wVHlwZVRleHRTdWNjZXNzKG1lc3NhZ2U6IHN0cmluZywgY29uZmlnPzogSU5vdGlmaWNhdGlvblRleHRQdWJsaWNDb25maWcpIHtcbiAgICB0aGlzLnNob3dDb21wVHlwZVRleHQobWVzc2FnZSwgY29uZmlnPy5pbnRlcnBvbGF0ZVBhcmFtcywgY29uZmlnPy50aXRsZSwgeyB0eXBlOiAnc3VjY2VzcycsIHRpbWVSZW1vdmU6IGNvbmZpZz8udGltZVJlbW92ZSB8fCAzMDAwLCBwb3NpdGlvblJpZ2h0OiBjb25maWc/LnBvc2l0aW9uUmlnaHQsIGV2ZW50TmFtZTogY29uZmlnPy5ldmVudE5hbWUsIGNhbGxiYWNrOiBjb25maWc/LmNhbGxiYWNrIH0pO1xuICB9XG5cbiAgcHVibGljIHNob3dDb21wVHlwZVRleHRFcnJvcihtZXNzYWdlOiBzdHJpbmcsIGNvbmZpZz86IElOb3RpZmljYXRpb25UZXh0UHVibGljQ29uZmlnKSB7XG4gICAgdGhpcy5zaG93Q29tcFR5cGVUZXh0KG1lc3NhZ2UsIGNvbmZpZz8uaW50ZXJwb2xhdGVQYXJhbXMsIGNvbmZpZz8udGl0bGUsIHsgdHlwZTogJ2Vycm9yJywgdGltZVJlbW92ZTogY29uZmlnPy50aW1lUmVtb3ZlIHx8IDMwMDAsIHBvc2l0aW9uUmlnaHQ6IGNvbmZpZz8ucG9zaXRpb25SaWdodCwgZXZlbnROYW1lOiBjb25maWc/LmV2ZW50TmFtZSwgY2FsbGJhY2s6IGNvbmZpZz8uY2FsbGJhY2sgfSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd0NvbXBUeXBlVGV4dEluZm8obWVzc2FnZTogc3RyaW5nLCBjb25maWc/OiBJTm90aWZpY2F0aW9uVGV4dFB1YmxpY0NvbmZpZykge1xuICAgIHRoaXMuc2hvd0NvbXBUeXBlVGV4dChtZXNzYWdlLCBjb25maWc/LmludGVycG9sYXRlUGFyYW1zLCBjb25maWc/LnRpdGxlLCB7IHR5cGU6ICdpbmZvJywgdGltZVJlbW92ZTogY29uZmlnPy50aW1lUmVtb3ZlIHx8IDMwMDAsIHBvc2l0aW9uUmlnaHQ6IGNvbmZpZz8ucG9zaXRpb25SaWdodCwgZXZlbnROYW1lOiBjb25maWc/LmV2ZW50TmFtZSwgY2FsbGJhY2s6IGNvbmZpZz8uY2FsbGJhY2sgfSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd0NvbXBUeXBlVGV4dFdhcm5pbmcobWVzc2FnZTogc3RyaW5nLCBjb25maWc/OiBJTm90aWZpY2F0aW9uVGV4dFB1YmxpY0NvbmZpZykge1xuICAgIHRoaXMuc2hvd0NvbXBUeXBlVGV4dChtZXNzYWdlLCBjb25maWc/LmludGVycG9sYXRlUGFyYW1zLCBjb25maWc/LnRpdGxlLCB7IHR5cGU6ICd3YXJuJywgdGltZVJlbW92ZTogY29uZmlnPy50aW1lUmVtb3ZlIHx8IDMwMDAsIHBvc2l0aW9uUmlnaHQ6IGNvbmZpZz8ucG9zaXRpb25SaWdodCwgZXZlbnROYW1lOiBjb25maWc/LmV2ZW50TmFtZSwgY2FsbGJhY2s6IGNvbmZpZz8uY2FsbGJhY2sgfSk7XG4gIH1cblxuICBwcml2YXRlIHNob3dDb21wVHlwZVRleHQobWVzc2FnZTogc3RyaW5nLCBpbnRlcnBvbGF0ZVBhcmFtcz86IFJlY29yZDxzdHJpbmcsIGFueT4sIHRpdGxlPzogc3RyaW5nLCBjb25maWc6IElOb3RpZmljYXRpb25UZXh0Q29uZmlnID0geyB0eXBlOiAnc3VjY2VzcycsIHRpbWVSZW1vdmU6IDIwMDAgfSk6IHZvaWQge1xuICAgIGlmICghbWVzc2FnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2hlY2tRdWV1ZU1lc3NhZ2UoKTtcbiAgICBpZiAoaW50ZXJwb2xhdGVQYXJhbXMgJiYgdHlwZW9mIGludGVycG9sYXRlUGFyYW1zID09PSAnb2JqZWN0Jykge1xuICAgICAgT2JqZWN0LmtleXMoaW50ZXJwb2xhdGVQYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpbnRlcnBvbGF0ZVBhcmFtc1trZXldID0gZXNjYXBlSHRtbChpbnRlcnBvbGF0ZVBhcmFtc1trZXldKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpc0VtYmVkRnJhbWUoKSkge1xuICAgICAgY29uc3QgbWVzc2FnZVRyYW5zbGF0ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KG1lc3NhZ2UsIGludGVycG9sYXRlUGFyYW1zKSBhcyBzdHJpbmc7XG5cbiAgICAgIHJldHVybiBVdGlsc0NvbW11bmljYXRlTWljcm8uUG9zdE1lc3NhZ2VUb1BhcmVudCh7IHR5cGU6ICdNSUNST19TSVRFX1BVU0hfTUVTU0FHRV9GUk9NX0NISUxEJywgcmVzcG9uc2U6IGVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoeyBmdW5jdGlvbk5hbWU6IGNvbmZpZy50eXBlLCBtZXNzYWdlOiBtZXNzYWdlVHJhbnNsYXRlLCB0aXRsZSwgdGltZVJlbW92ZTogY29uZmlnLnRpbWVSZW1vdmUgfHwgMjAwMCB9KSkgfSk7XG4gICAgfVxuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuZHluYW1pY1NlcnZpY2UucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTGliVWlTZXJ2aWNlc0NvbXBvbmVudHNUZXh0Q29tcG9uZW50KTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudC5pbnN0YW5jZTtcblxuICAgIGluc3RhbmNlLnRpdGxlID0gdGl0bGU7XG4gICAgaW5zdGFuY2UubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgaW5zdGFuY2UuaW50ZXJwb2xhdGVQYXJhbXMgPSBpbnRlcnBvbGF0ZVBhcmFtcztcbiAgICBpbnN0YW5jZS5jb25maWcgPSBjb25maWc7XG4gICAgaW5zdGFuY2UucmVtb3ZlQ29tcG9uZW50ID0gKCkgPT4gdGhpcy5yZW1vdmVDb21wb25lbnQoY29tcG9uZW50KTtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlbW92ZUNvbXBvbmVudChjb21wb25lbnQpO1xuICAgIH0sIGNvbmZpZz8udGltZVJlbW92ZSk7XG5cbiAgICB0aGlzLnF1ZXVlTWVzc2FnZS5wdXNoKHtcbiAgICAgIGNvbXBvbmVudCxcbiAgICAgIGNvbmZpZyxcbiAgICAgIHRpbWVvdXRcbiAgICB9KTtcbiAgICB0aGlzLmR5bmFtaWNTZXJ2aWNlLmFkZFRvQm9keShjb21wb25lbnQpO1xuICAgIHRoaXMudXBkYXRlUG9zaXRpb25NZXNzYWdlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUNvbXBvbmVudChjb21wb25lbnQ6IENvbXBvbmVudFJlZjxhbnk+KSB7XG4gICAgdGhpcy5keW5hbWljU2VydmljZS5yZW1vdmUoY29tcG9uZW50KTtcbiAgICBjb25zdCBpbmRleFJlbW92ZSA9IHRoaXMucXVldWVNZXNzYWdlLmZpbmRJbmRleChjb25maWcgPT4gY29uZmlnLmNvbXBvbmVudCA9PT0gY29tcG9uZW50KTtcblxuICAgIGlmIChpbmRleFJlbW92ZSAhPT0gLTEpIHtcbiAgICAgIHRoaXMucXVldWVNZXNzYWdlLnNwbGljZShpbmRleFJlbW92ZSwgMSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1F1ZXVlTWVzc2FnZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5xdWV1ZU1lc3NhZ2UubGVuZ3RoIDwgdGhpcy5NQVhfUVVFVUVfTUVTU0FHRSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdFF1ZXVlID0gdGhpcy5xdWV1ZU1lc3NhZ2Uuc2hpZnQoKSBhcyBJTm90aWZpY2F0aW9uUXVldWU7XG5cbiAgICBjbGVhclRpbWVvdXQoZmlyc3RRdWV1ZS50aW1lb3V0KTtcbiAgICB0aGlzLmR5bmFtaWNTZXJ2aWNlLnJlbW92ZShmaXJzdFF1ZXVlLmNvbXBvbmVudCk7XG4gICAgdGhpcy51cGRhdGVQb3NpdGlvbk1lc3NhZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUG9zaXRpb25NZXNzYWdlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5xdWV1ZU1lc3NhZ2UubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRVcGRhdGVQb3NpdGlvbik7XG4gICAgdGhpcy50aW1lb3V0VXBkYXRlUG9zaXRpb24gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGxldCB0b3BNZXNzYWdlID0gMTI7XG5cbiAgICAgIHRoaXMucXVldWVNZXNzYWdlLmZvckVhY2goKG1lc3NhZ2U6IElOb3RpZmljYXRpb25RdWV1ZSkgPT4ge1xuICAgICAgICBjb25zdCBmaXJzdEVsID0gbWVzc2FnZS5jb21wb25lbnQuaW5zdGFuY2UuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICBjb25zdCByZWN0ID0gZmlyc3RFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBmaXJzdEVsLnN0eWxlLnRvcCA9IGAke3RvcE1lc3NhZ2V9cHhgO1xuICAgICAgICB0b3BNZXNzYWdlICs9IHJlY3QuaGVpZ2h0ICsgMTI7XG4gICAgICAgIGxldCByaWdodCA9IG1lc3NhZ2UuY29uZmlnLnBvc2l0aW9uUmlnaHQgPz8gMTI7XG5cbiAgICAgICAgaWYgKGlzRW1iZWRGcmFtZSgpKSB7XG4gICAgICAgICAgcmlnaHQgPSA0MDtcbiAgICAgICAgfVxuICAgICAgICBmaXJzdEVsLnN0eWxlLnJpZ2h0ID0gYCR7cmlnaHR9cHhgO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,255 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Directive, inject, ElementRef, Component, ChangeDetectionStrategy, Injectable } from '@angular/core';
3
+ import { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';
4
+ import { UtilsCommunicateMicro, isEmbedFrame, escapeHtml, encrypt } from '@libs-ui/utils';
5
+ import * as i1 from '@ngx-translate/core';
6
+ import { TranslateModule, TranslateService } from '@ngx-translate/core';
7
+ import { Subject, fromEvent, Observable } from 'rxjs';
8
+ import { takeUntil, take } from 'rxjs/operators';
9
+
10
+ class LibUiServiceNotificationBaseComponent {
11
+ message;
12
+ interpolateParams;
13
+ title;
14
+ config;
15
+ removeComponent;
16
+ onDestroy = new Subject();
17
+ ngOnDestroy() {
18
+ this.onDestroy.next();
19
+ this.onDestroy.complete();
20
+ }
21
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibUiServiceNotificationBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
22
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: LibUiServiceNotificationBaseComponent, ngImport: i0 });
23
+ }
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibUiServiceNotificationBaseComponent, decorators: [{
25
+ type: Directive
26
+ }] });
27
+
28
+ class LibUiServicesComponentsTextComponent extends LibUiServiceNotificationBaseComponent {
29
+ containerClass;
30
+ icon;
31
+ elementRef = inject(ElementRef);
32
+ constructor() {
33
+ super();
34
+ }
35
+ ngOnInit() {
36
+ switch (this.config?.type) {
37
+ case 'success':
38
+ this.containerClass = 'libs-ui-toast_success';
39
+ this.icon = 'libs-ui-icon-check-circle-solid';
40
+ break;
41
+ case 'info':
42
+ this.containerClass = 'libs-ui-toast_info';
43
+ this.icon = 'libs-ui-icon-tooltip-solid';
44
+ break;
45
+ case 'error':
46
+ this.containerClass = 'libs-ui-toast_error';
47
+ this.icon = 'libs-ui-icon-close-circle-solid';
48
+ break;
49
+ case 'warn':
50
+ this.containerClass = 'libs-ui-toast_warning';
51
+ this.icon = 'libs-ui-icon-alert-triangle-solid';
52
+ break;
53
+ default:
54
+ this.containerClass = 'bg-[#6fd100] libs-ui-toast_success';
55
+ this.icon = 'mo-icn-toast_success';
56
+ }
57
+ const { eventName, callback } = this.config;
58
+ if (!eventName || !callback) {
59
+ return;
60
+ }
61
+ if (eventName === 'click') {
62
+ this.containerClass = `${this.containerClass} cursor-pointer`;
63
+ }
64
+ fromEvent(this.elementRef.nativeElement, eventName).pipe(takeUntil(this.onDestroy), take(1)).subscribe(callback);
65
+ }
66
+ handlerClickClose(e) {
67
+ e.stopPropagation();
68
+ this.removeComponent();
69
+ }
70
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibUiServicesComponentsTextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
71
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibUiServicesComponentsTextComponent, isStandalone: true, selector: "libs_ui-services-notification-components-text", usesInheritance: true, ngImport: i0, template: "<div class=\"libs-ui-toast\"\n [class]=\"containerClass\"\n [style.zIndex]=\"config.zIndex || 2000\">\n <div class=\"flex items-center\">\n <i class=\"{{icon}}\"></i>\n </div>\n <div class=\"flex flex-col w-full\">\n @if (title) {\n <div class=\"libs-ui-font-h5m text-break\"\n [innerHtml]=\"title | translate \">\n </div>\n }\n @if (message) {\n <div class=\"text-break\"\n [class.libs-ui-font-h5r]=\"!title\"\n [class.libs-ui-font-h7r]=\"title\"\n [class.mt-[4ppx]]=\"title\"\n [innerHtml]=\"message | translate: (interpolateParams || {})\">\n </div>\n }\n </div>\n <div class=\"flex items-center\">\n <i class=\"libs-ui-icon-close mr-0 ml-[8px] cursor-pointer\"\n (click)=\"handlerClickClose($event)\">\n </i>\n </div>\n</div>", styles: ["@-webkit-keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}.libs-ui-toast{position:fixed;padding:12px 16px;display:flex;width:300px;flex-shrink:0;border-radius:8px;animation:animation-move .3s linear}.libs-ui-toast [class*=libs-ui-icon]{font-size:16px;margin-right:16px}.libs-ui-toast.libs-ui-toast_success{background-color:#e6faf0;color:#00bc62}.libs-ui-toast.libs-ui-toast_success [class*=libs-ui-icon]:before{color:#00bc62}.libs-ui-toast.libs-ui-toast_warning{background-color:#feeee6;color:#f05800}.libs-ui-toast.libs-ui-toast_warning [class*=libs-ui-icon]:before{color:#f05800}.libs-ui-toast.libs-ui-toast_error{background-color:#fdeaec;color:#ee2d41}.libs-ui-toast.libs-ui-toast_error [class*=libs-ui-icon]:before{color:#ee2d41}.libs-ui-toast.libs-ui-toast_info{background-color:#e9f1fe;color:#226ff5}.libs-ui-toast.libs-ui-toast_info [class*=libs-ui-icon]:before{color:#226ff5}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
72
+ }
73
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibUiServicesComponentsTextComponent, decorators: [{
74
+ type: Component,
75
+ args: [{ selector: 'libs_ui-services-notification-components-text', standalone: true, imports: [TranslateModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"libs-ui-toast\"\n [class]=\"containerClass\"\n [style.zIndex]=\"config.zIndex || 2000\">\n <div class=\"flex items-center\">\n <i class=\"{{icon}}\"></i>\n </div>\n <div class=\"flex flex-col w-full\">\n @if (title) {\n <div class=\"libs-ui-font-h5m text-break\"\n [innerHtml]=\"title | translate \">\n </div>\n }\n @if (message) {\n <div class=\"text-break\"\n [class.libs-ui-font-h5r]=\"!title\"\n [class.libs-ui-font-h7r]=\"title\"\n [class.mt-[4ppx]]=\"title\"\n [innerHtml]=\"message | translate: (interpolateParams || {})\">\n </div>\n }\n </div>\n <div class=\"flex items-center\">\n <i class=\"libs-ui-icon-close mr-0 ml-[8px] cursor-pointer\"\n (click)=\"handlerClickClose($event)\">\n </i>\n </div>\n</div>", styles: ["@-webkit-keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}.libs-ui-toast{position:fixed;padding:12px 16px;display:flex;width:300px;flex-shrink:0;border-radius:8px;animation:animation-move .3s linear}.libs-ui-toast [class*=libs-ui-icon]{font-size:16px;margin-right:16px}.libs-ui-toast.libs-ui-toast_success{background-color:#e6faf0;color:#00bc62}.libs-ui-toast.libs-ui-toast_success [class*=libs-ui-icon]:before{color:#00bc62}.libs-ui-toast.libs-ui-toast_warning{background-color:#feeee6;color:#f05800}.libs-ui-toast.libs-ui-toast_warning [class*=libs-ui-icon]:before{color:#f05800}.libs-ui-toast.libs-ui-toast_error{background-color:#fdeaec;color:#ee2d41}.libs-ui-toast.libs-ui-toast_error [class*=libs-ui-icon]:before{color:#ee2d41}.libs-ui-toast.libs-ui-toast_info{background-color:#e9f1fe;color:#226ff5}.libs-ui-toast.libs-ui-toast_info [class*=libs-ui-icon]:before{color:#226ff5}\n"] }]
76
+ }], ctorParameters: () => [] });
77
+
78
+ /* eslint-disable @typescript-eslint/no-explicit-any */
79
+ class LibsUiNotificationService {
80
+ notificationPermission;
81
+ queueMessage = [];
82
+ timeoutUpdatePosition;
83
+ MAX_QUEUE_MESSAGE = 5;
84
+ isInit = false;
85
+ dynamicService = inject(LibsUiDynamicComponentService);
86
+ translateService = inject(TranslateService);
87
+ constructor() {
88
+ this.notificationPermission = this.systemSupportNotification() ? 'default' : 'denied';
89
+ }
90
+ init(messageNameHandler) {
91
+ if (this.isInit) {
92
+ return;
93
+ }
94
+ this.isInit = true;
95
+ UtilsCommunicateMicro.GetMessage(messageNameHandler).subscribe(e => {
96
+ if (isEmbedFrame()) {
97
+ const dataMessage = e.data.response;
98
+ this.showCompTypeText(dataMessage.message, undefined, dataMessage.title, { type: dataMessage.functionName, timeRemove: dataMessage.timeRemove || 2000 });
99
+ return;
100
+ }
101
+ UtilsCommunicateMicro.PostMessageToParent(e.data);
102
+ });
103
+ }
104
+ get TranslateService() {
105
+ return this.translateService;
106
+ }
107
+ systemSupportNotification() {
108
+ return 'Notification' in window;
109
+ }
110
+ systemRequestPermission() {
111
+ if (!this.systemSupportNotification()) {
112
+ return;
113
+ }
114
+ try {
115
+ Notification.requestPermission().then((permission) => this.Permission = permission);
116
+ }
117
+ catch (error) {
118
+ if (error instanceof TypeError) {
119
+ Notification.requestPermission((permission) => this.Permission = permission);
120
+ }
121
+ }
122
+ }
123
+ set Permission(permission) {
124
+ this.notificationPermission = permission;
125
+ }
126
+ systemSpawnNotification(title, options) {
127
+ return new Observable((obs) => {
128
+ if (!this.systemSupportNotification()) {
129
+ obs.complete();
130
+ }
131
+ if (this.notificationPermission !== 'granted') {
132
+ obs.complete();
133
+ }
134
+ const notify = new Notification(title, options);
135
+ notify.onshow = (e) => {
136
+ return obs.next({
137
+ notification: notify,
138
+ event: e
139
+ });
140
+ };
141
+ notify.onclick = (e) => {
142
+ notify.close();
143
+ window.focus();
144
+ return obs.next({
145
+ notification: notify,
146
+ event: e
147
+ });
148
+ };
149
+ notify.onerror = (e) => {
150
+ return obs.error({
151
+ notification: notify,
152
+ event: e
153
+ });
154
+ };
155
+ notify.onclose = () => {
156
+ return obs.complete();
157
+ };
158
+ });
159
+ }
160
+ showCompTypeTextSuccess(message, config) {
161
+ this.showCompTypeText(message, config?.interpolateParams, config?.title, { type: 'success', timeRemove: config?.timeRemove || 3000, positionRight: config?.positionRight, eventName: config?.eventName, callback: config?.callback });
162
+ }
163
+ showCompTypeTextError(message, config) {
164
+ this.showCompTypeText(message, config?.interpolateParams, config?.title, { type: 'error', timeRemove: config?.timeRemove || 3000, positionRight: config?.positionRight, eventName: config?.eventName, callback: config?.callback });
165
+ }
166
+ showCompTypeTextInfo(message, config) {
167
+ this.showCompTypeText(message, config?.interpolateParams, config?.title, { type: 'info', timeRemove: config?.timeRemove || 3000, positionRight: config?.positionRight, eventName: config?.eventName, callback: config?.callback });
168
+ }
169
+ showCompTypeTextWarning(message, config) {
170
+ this.showCompTypeText(message, config?.interpolateParams, config?.title, { type: 'warn', timeRemove: config?.timeRemove || 3000, positionRight: config?.positionRight, eventName: config?.eventName, callback: config?.callback });
171
+ }
172
+ showCompTypeText(message, interpolateParams, title, config = { type: 'success', timeRemove: 2000 }) {
173
+ if (!message) {
174
+ return;
175
+ }
176
+ this.checkQueueMessage();
177
+ if (interpolateParams && typeof interpolateParams === 'object') {
178
+ Object.keys(interpolateParams).forEach((key) => {
179
+ interpolateParams[key] = escapeHtml(interpolateParams[key]);
180
+ });
181
+ }
182
+ if (isEmbedFrame()) {
183
+ const messageTranslate = this.translateService.instant(message, interpolateParams);
184
+ return UtilsCommunicateMicro.PostMessageToParent({ type: 'MICRO_SITE_PUSH_MESSAGE_FROM_CHILD', response: encrypt(JSON.stringify({ functionName: config.type, message: messageTranslate, title, timeRemove: config.timeRemove || 2000 })) });
185
+ }
186
+ const component = this.dynamicService.resolveComponentFactory(LibUiServicesComponentsTextComponent);
187
+ const instance = component.instance;
188
+ instance.title = title;
189
+ instance.message = message;
190
+ instance.interpolateParams = interpolateParams;
191
+ instance.config = config;
192
+ instance.removeComponent = () => this.removeComponent(component);
193
+ const timeout = setTimeout(() => {
194
+ this.removeComponent(component);
195
+ }, config?.timeRemove);
196
+ this.queueMessage.push({
197
+ component,
198
+ config,
199
+ timeout
200
+ });
201
+ this.dynamicService.addToBody(component);
202
+ this.updatePositionMessage();
203
+ }
204
+ removeComponent(component) {
205
+ this.dynamicService.remove(component);
206
+ const indexRemove = this.queueMessage.findIndex(config => config.component === component);
207
+ if (indexRemove !== -1) {
208
+ this.queueMessage.splice(indexRemove, 1);
209
+ }
210
+ }
211
+ checkQueueMessage() {
212
+ if (this.queueMessage.length < this.MAX_QUEUE_MESSAGE) {
213
+ return;
214
+ }
215
+ const firstQueue = this.queueMessage.shift();
216
+ clearTimeout(firstQueue.timeout);
217
+ this.dynamicService.remove(firstQueue.component);
218
+ this.updatePositionMessage();
219
+ }
220
+ updatePositionMessage() {
221
+ if (!this.queueMessage.length) {
222
+ return;
223
+ }
224
+ clearTimeout(this.timeoutUpdatePosition);
225
+ this.timeoutUpdatePosition = setTimeout(() => {
226
+ let topMessage = 12;
227
+ this.queueMessage.forEach((message) => {
228
+ const firstEl = message.component.instance.elementRef.nativeElement.firstElementChild;
229
+ const rect = firstEl.getBoundingClientRect();
230
+ firstEl.style.top = `${topMessage}px`;
231
+ topMessage += rect.height + 12;
232
+ let right = message.config.positionRight ?? 12;
233
+ if (isEmbedFrame()) {
234
+ right = 40;
235
+ }
236
+ firstEl.style.right = `${right}px`;
237
+ });
238
+ });
239
+ }
240
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiNotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
241
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiNotificationService, providedIn: 'root' });
242
+ }
243
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiNotificationService, decorators: [{
244
+ type: Injectable,
245
+ args: [{
246
+ providedIn: 'root'
247
+ }]
248
+ }], ctorParameters: () => [] });
249
+
250
+ /**
251
+ * Generated bundle index. Do not edit.
252
+ */
253
+
254
+ export { LibsUiNotificationService };
255
+ //# sourceMappingURL=libs-ui-services-notification.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"libs-ui-services-notification.mjs","sources":["../../../../../libs-ui/services/notification/src/components/base.component.ts","../../../../../libs-ui/services/notification/src/components/text/text.component.ts","../../../../../libs-ui/services/notification/src/components/text/text.component.html","../../../../../libs-ui/services/notification/src/notification.service.ts","../../../../../libs-ui/services/notification/src/libs-ui-services-notification.ts"],"sourcesContent":["import { Subject } from 'rxjs';\nimport { INotificationTextConfig } from '../interfaces/notification';\nimport { Directive, OnDestroy } from '@angular/core';\n@Directive()\nexport class LibUiServiceNotificationBaseComponent implements OnDestroy {\n protected message!: string;\n protected interpolateParams!: Record<string, unknown>;\n protected title!: string;\n protected config!: INotificationTextConfig;\n protected removeComponent!: () => void;\n protected onDestroy = new Subject<void>();\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, OnDestroy, OnInit, inject } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { fromEvent } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { LibUiServiceNotificationBaseComponent } from '../base.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-services-notification-components-text',\n templateUrl: './text.component.html',\n styleUrls: ['./text.component.scss'],\n standalone: true,\n imports: [TranslateModule],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LibUiServicesComponentsTextComponent extends LibUiServiceNotificationBaseComponent implements OnInit, OnDestroy {\n protected containerClass!: string;\n protected icon!: string;\n\n private elementRef = inject(ElementRef)\n\n constructor() {\n super();\n }\n\n ngOnInit(): void {\n switch (this.config?.type) {\n case 'success':\n this.containerClass = 'libs-ui-toast_success';\n this.icon = 'libs-ui-icon-check-circle-solid';\n break;\n\n case 'info':\n this.containerClass = 'libs-ui-toast_info';\n this.icon = 'libs-ui-icon-tooltip-solid';\n break;\n\n case 'error':\n this.containerClass = 'libs-ui-toast_error';\n this.icon = 'libs-ui-icon-close-circle-solid';\n break;\n\n case 'warn':\n this.containerClass = 'libs-ui-toast_warning';\n this.icon = 'libs-ui-icon-alert-triangle-solid';\n break;\n\n default:\n this.containerClass = 'bg-[#6fd100] libs-ui-toast_success';\n this.icon = 'mo-icn-toast_success';\n }\n const { eventName, callback } = this.config;\n\n if (!eventName || !callback) {\n return;\n }\n if (eventName === 'click') {\n this.containerClass = `${this.containerClass} cursor-pointer`;\n }\n fromEvent(this.elementRef.nativeElement, eventName).pipe(takeUntil(this.onDestroy), take(1)).subscribe(callback);\n }\n\n protected handlerClickClose(e: Event) {\n e.stopPropagation();\n this.removeComponent();\n }\n}\n","<div class=\"libs-ui-toast\"\n [class]=\"containerClass\"\n [style.zIndex]=\"config.zIndex || 2000\">\n <div class=\"flex items-center\">\n <i class=\"{{icon}}\"></i>\n </div>\n <div class=\"flex flex-col w-full\">\n @if (title) {\n <div class=\"libs-ui-font-h5m text-break\"\n [innerHtml]=\"title | translate \">\n </div>\n }\n @if (message) {\n <div class=\"text-break\"\n [class.libs-ui-font-h5r]=\"!title\"\n [class.libs-ui-font-h7r]=\"title\"\n [class.mt-[4ppx]]=\"title\"\n [innerHtml]=\"message | translate: (interpolateParams || {})\">\n </div>\n }\n </div>\n <div class=\"flex items-center\">\n <i class=\"libs-ui-icon-close mr-0 ml-[8px] cursor-pointer\"\n (click)=\"handlerClickClose($event)\">\n </i>\n </div>\n</div>","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ComponentRef, Injectable, inject } from '@angular/core';\nimport { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';\nimport { encrypt, escapeHtml, isEmbedFrame, UtilsCommunicateMicro } from '@libs-ui/utils';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\nimport { LibUiServicesComponentsTextComponent } from './components';\nimport { INotificationPushFromIFrame, INotificationQueue, INotificationTextConfig, INotificationTextPublicConfig } from './interfaces/notification';\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class LibsUiNotificationService {\n private notificationPermission: NotificationPermission;\n private queueMessage: Array<INotificationQueue> = [];\n private timeoutUpdatePosition: any;\n private readonly MAX_QUEUE_MESSAGE: number = 5;\n private isInit = false;\n\n private dynamicService = inject(LibsUiDynamicComponentService);\n private translateService = inject(TranslateService);\n\n constructor() {\n this.notificationPermission = this.systemSupportNotification() ? 'default' : 'denied';\n }\n\n public init(messageNameHandler: Array<string>) {\n if (this.isInit) {\n return;\n }\n this.isInit = true;\n UtilsCommunicateMicro.GetMessage(messageNameHandler).subscribe(e => {\n if (isEmbedFrame()) {\n const dataMessage = e.data.response as INotificationPushFromIFrame;\n\n this.showCompTypeText(dataMessage.message, undefined, dataMessage.title, { type: dataMessage.functionName, timeRemove: dataMessage.timeRemove || 2000 });\n\n return;\n }\n UtilsCommunicateMicro.PostMessageToParent(e.data);\n });\n }\n\n public get TranslateService() {\n return this.translateService;\n }\n\n private systemSupportNotification(): boolean {\n return 'Notification' in window;\n }\n\n public systemRequestPermission() {\n if (!this.systemSupportNotification()) {\n return;\n }\n try {\n Notification.requestPermission().then((permission: NotificationPermission) => this.Permission = permission);\n } catch (error) {\n if (error instanceof TypeError) {\n Notification.requestPermission((permission: NotificationPermission) => this.Permission = permission);\n }\n }\n }\n\n private set Permission(permission: NotificationPermission) {\n this.notificationPermission = permission;\n }\n\n public systemSpawnNotification(title: string, options?: NotificationOptions): any {\n return new Observable((obs: any) => {\n if (!this.systemSupportNotification()) {\n obs.complete();\n }\n if (this.notificationPermission !== 'granted') {\n obs.complete();\n }\n const notify = new Notification(title, options);\n\n notify.onshow = (e) => {\n return obs.next({\n notification: notify,\n event: e\n });\n };\n notify.onclick = (e) => {\n notify.close();\n window.focus();\n\n return obs.next({\n notification: notify,\n event: e\n });\n };\n notify.onerror = (e) => {\n return obs.error({\n notification: notify,\n event: e\n });\n };\n notify.onclose = () => {\n return obs.complete();\n };\n });\n }\n\n public showCompTypeTextSuccess(message: string, config?: INotificationTextPublicConfig) {\n this.showCompTypeText(message, config?.interpolateParams, config?.title, { type: 'success', timeRemove: config?.timeRemove || 3000, positionRight: config?.positionRight, eventName: config?.eventName, callback: config?.callback });\n }\n\n public showCompTypeTextError(message: string, config?: INotificationTextPublicConfig) {\n this.showCompTypeText(message, config?.interpolateParams, config?.title, { type: 'error', timeRemove: config?.timeRemove || 3000, positionRight: config?.positionRight, eventName: config?.eventName, callback: config?.callback });\n }\n\n public showCompTypeTextInfo(message: string, config?: INotificationTextPublicConfig) {\n this.showCompTypeText(message, config?.interpolateParams, config?.title, { type: 'info', timeRemove: config?.timeRemove || 3000, positionRight: config?.positionRight, eventName: config?.eventName, callback: config?.callback });\n }\n\n public showCompTypeTextWarning(message: string, config?: INotificationTextPublicConfig) {\n this.showCompTypeText(message, config?.interpolateParams, config?.title, { type: 'warn', timeRemove: config?.timeRemove || 3000, positionRight: config?.positionRight, eventName: config?.eventName, callback: config?.callback });\n }\n\n private showCompTypeText(message: string, interpolateParams?: Record<string, any>, title?: string, config: INotificationTextConfig = { type: 'success', timeRemove: 2000 }): void {\n if (!message) {\n return;\n }\n\n this.checkQueueMessage();\n if (interpolateParams && typeof interpolateParams === 'object') {\n Object.keys(interpolateParams).forEach((key) => {\n interpolateParams[key] = escapeHtml(interpolateParams[key]);\n });\n }\n\n if (isEmbedFrame()) {\n const messageTranslate = this.translateService.instant(message, interpolateParams) as string;\n\n return UtilsCommunicateMicro.PostMessageToParent({ type: 'MICRO_SITE_PUSH_MESSAGE_FROM_CHILD', response: encrypt(JSON.stringify({ functionName: config.type, message: messageTranslate, title, timeRemove: config.timeRemove || 2000 })) });\n }\n const component = this.dynamicService.resolveComponentFactory(LibUiServicesComponentsTextComponent);\n const instance = component.instance;\n\n instance.title = title;\n instance.message = message;\n instance.interpolateParams = interpolateParams;\n instance.config = config;\n instance.removeComponent = () => this.removeComponent(component);\n const timeout = setTimeout(() => {\n this.removeComponent(component);\n }, config?.timeRemove);\n\n this.queueMessage.push({\n component,\n config,\n timeout\n });\n this.dynamicService.addToBody(component);\n this.updatePositionMessage();\n }\n\n private removeComponent(component: ComponentRef<any>) {\n this.dynamicService.remove(component);\n const indexRemove = this.queueMessage.findIndex(config => config.component === component);\n\n if (indexRemove !== -1) {\n this.queueMessage.splice(indexRemove, 1);\n }\n }\n\n private checkQueueMessage(): void {\n if (this.queueMessage.length < this.MAX_QUEUE_MESSAGE) {\n return;\n }\n const firstQueue = this.queueMessage.shift() as INotificationQueue;\n\n clearTimeout(firstQueue.timeout);\n this.dynamicService.remove(firstQueue.component);\n this.updatePositionMessage();\n }\n\n private updatePositionMessage(): void {\n if (!this.queueMessage.length) {\n return;\n }\n clearTimeout(this.timeoutUpdatePosition);\n this.timeoutUpdatePosition = setTimeout(() => {\n let topMessage = 12;\n\n this.queueMessage.forEach((message: INotificationQueue) => {\n const firstEl = message.component.instance.elementRef.nativeElement.firstElementChild;\n const rect = firstEl.getBoundingClientRect();\n\n firstEl.style.top = `${topMessage}px`;\n topMessage += rect.height + 12;\n let right = message.config.positionRight ?? 12;\n\n if (isEmbedFrame()) {\n right = 40;\n }\n firstEl.style.right = `${right}px`;\n });\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './notification.service';
@@ -0,0 +1,29 @@
1
+ import { ComponentRef } from '@angular/core';
2
+ export interface INotificationQueue {
3
+ config: INotificationTextConfig;
4
+ component: ComponentRef<any>;
5
+ timeout: any;
6
+ }
7
+ export interface INotificationTextConfig {
8
+ type: 'success' | 'info' | 'error' | 'warn';
9
+ positionRight?: number;
10
+ zIndex?: number;
11
+ timeRemove: number;
12
+ eventName?: 'click' | 'mouseenter';
13
+ callback?: () => void;
14
+ }
15
+ export interface INotificationTextPublicConfig {
16
+ interpolateParams?: Record<string, any>;
17
+ title?: string;
18
+ positionRight?: number;
19
+ zIndex?: number;
20
+ timeRemove?: number;
21
+ eventName?: 'click' | 'mouseenter';
22
+ callback?: () => void;
23
+ }
24
+ export interface INotificationPushFromIFrame {
25
+ functionName: 'success' | 'info' | 'error' | 'warn';
26
+ message: string;
27
+ title?: string;
28
+ timeRemove?: number;
29
+ }
@@ -0,0 +1,29 @@
1
+ import { TranslateService } from '@ngx-translate/core';
2
+ import { INotificationTextPublicConfig } from './interfaces/notification';
3
+ import * as i0 from "@angular/core";
4
+ export declare class LibsUiNotificationService {
5
+ private notificationPermission;
6
+ private queueMessage;
7
+ private timeoutUpdatePosition;
8
+ private readonly MAX_QUEUE_MESSAGE;
9
+ private isInit;
10
+ private dynamicService;
11
+ private translateService;
12
+ constructor();
13
+ init(messageNameHandler: Array<string>): void;
14
+ get TranslateService(): TranslateService;
15
+ private systemSupportNotification;
16
+ systemRequestPermission(): void;
17
+ private set Permission(value);
18
+ systemSpawnNotification(title: string, options?: NotificationOptions): any;
19
+ showCompTypeTextSuccess(message: string, config?: INotificationTextPublicConfig): void;
20
+ showCompTypeTextError(message: string, config?: INotificationTextPublicConfig): void;
21
+ showCompTypeTextInfo(message: string, config?: INotificationTextPublicConfig): void;
22
+ showCompTypeTextWarning(message: string, config?: INotificationTextPublicConfig): void;
23
+ private showCompTypeText;
24
+ private removeComponent;
25
+ private checkQueueMessage;
26
+ private updatePositionMessage;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiNotificationService, never>;
28
+ static ɵprov: i0.ɵɵInjectableDeclaration<LibsUiNotificationService>;
29
+ }
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@libs-ui/services-notification",
3
+ "version": "0.2.5",
4
+ "peerDependencies": {
5
+ "@angular/common": "^18.2.0",
6
+ "@angular/core": "^18.2.0"
7
+ },
8
+ "sideEffects": false,
9
+ "module": "fesm2022/libs-ui-services-notification.mjs",
10
+ "typings": "index.d.ts",
11
+ "exports": {
12
+ "./package.json": {
13
+ "default": "./package.json"
14
+ },
15
+ ".": {
16
+ "types": "./index.d.ts",
17
+ "esm2022": "./esm2022/libs-ui-services-notification.mjs",
18
+ "esm": "./esm2022/libs-ui-services-notification.mjs",
19
+ "default": "./fesm2022/libs-ui-services-notification.mjs"
20
+ }
21
+ },
22
+ "dependencies": {
23
+ "tslib": "^2.3.0"
24
+ }
25
+ }