myrta-ui 17.1.63 → 17.1.64

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.
Files changed (25) hide show
  1. package/esm2022/lib/services/index.mjs +2 -1
  2. package/esm2022/lib/services/notify-service/components/index.mjs +2 -0
  3. package/esm2022/lib/services/notify-service/components/notification/notification.component.mjs +21 -0
  4. package/esm2022/lib/services/notify-service/enums/index.mjs +3 -0
  5. package/esm2022/lib/services/notify-service/enums/notification-position.enum.mjs +8 -0
  6. package/esm2022/lib/services/notify-service/enums/notification-type.enum.mjs +8 -0
  7. package/esm2022/lib/services/notify-service/index.mjs +4 -0
  8. package/esm2022/lib/services/notify-service/models/index.mjs +2 -0
  9. package/esm2022/lib/services/notify-service/models/notification-config.model.mjs +2 -0
  10. package/esm2022/lib/services/notify-service/models/notification-state.model.mjs +2 -0
  11. package/esm2022/lib/services/notify-service/notification.service.mjs +125 -0
  12. package/fesm2022/myrta-ui.mjs +153 -2
  13. package/fesm2022/myrta-ui.mjs.map +1 -1
  14. package/lib/services/index.d.ts +1 -0
  15. package/lib/services/notify-service/components/index.d.ts +1 -0
  16. package/lib/services/notify-service/components/notification/notification.component.d.ts +13 -0
  17. package/lib/services/notify-service/enums/index.d.ts +2 -0
  18. package/lib/services/notify-service/enums/notification-position.enum.d.ts +6 -0
  19. package/lib/services/notify-service/enums/notification-type.enum.d.ts +6 -0
  20. package/lib/services/notify-service/index.d.ts +4 -0
  21. package/lib/services/notify-service/models/index.d.ts +2 -0
  22. package/lib/services/notify-service/models/notification-config.model.d.ts +15 -0
  23. package/lib/services/notify-service/models/notification-state.model.d.ts +11 -0
  24. package/lib/services/notify-service/notification.service.d.ts +27 -0
  25. package/package.json +1 -1
@@ -10,4 +10,5 @@ export * from './toaster-service/toaster-service.module';
10
10
  export * from './toaster-service/toaster-service.service';
11
11
  export * from './toaster-service/models/toaster.model';
12
12
  export * from './toaster-service/config';
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0YS11aS9zcmMvbGliL3NlcnZpY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUNBQW1DLENBQUM7QUFFbEQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDZCQUE2QixDQUFDO0FBRTVDLGNBQWMsY0FBYyxDQUFDO0FBRTdCLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMseUJBQXlCLENBQUM7QUFFeEMsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYywwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZmlsZS11cGxvYWQvZmlsZS11cGxvYWQuc2VydmljZSc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL21yeC1mb3JtLXZhbGlkYXRvci9tcngtZm9ybS12YWxpZGF0b3InO1xyXG5leHBvcnQgKiBmcm9tICcuL21yeC1mb3JtLXZhbGlkYXRvci9tb2RlbHMnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9zYXZlLXN0b3JlJztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kYWwtc2VydmljZS9tb2RhbC1zZXJ2aWNlLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kYWwtc2VydmljZS9tb2RlbHMvbW9kYWwtY29uZmlnLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9tb2RhbC1zZXJ2aWNlL21vZGFsLXNlcnZpY2Uuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kYWwtc2VydmljZS9oZWxwZXJzJztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vdG9hc3Rlci1zZXJ2aWNlL3RvYXN0ZXItc2VydmljZS5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL3RvYXN0ZXItc2VydmljZS90b2FzdGVyLXNlcnZpY2Uuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdG9hc3Rlci1zZXJ2aWNlL21vZGVscy90b2FzdGVyLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi90b2FzdGVyLXNlcnZpY2UvY29uZmlnJztcclxuIl19
13
+ export * from './notify-service';
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0YS11aS9zcmMvbGliL3NlcnZpY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUNBQW1DLENBQUM7QUFFbEQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDZCQUE2QixDQUFDO0FBRTVDLGNBQWMsY0FBYyxDQUFDO0FBRTdCLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMseUJBQXlCLENBQUM7QUFFeEMsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYywwQkFBMEIsQ0FBQztBQUV6QyxjQUFjLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbXJ4LWZvcm0tdmFsaWRhdG9yL21yeC1mb3JtLXZhbGlkYXRvcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vbXJ4LWZvcm0tdmFsaWRhdG9yL21vZGVscyc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL3NhdmUtc3RvcmUnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9tb2RhbC1zZXJ2aWNlL21vZGFsLXNlcnZpY2UubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9tb2RhbC1zZXJ2aWNlL21vZGVscy9tb2RhbC1jb25maWcubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL21vZGFsLXNlcnZpY2UvbW9kYWwtc2VydmljZS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9tb2RhbC1zZXJ2aWNlL2hlbHBlcnMnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi90b2FzdGVyLXNlcnZpY2UvdG9hc3Rlci1zZXJ2aWNlLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdG9hc3Rlci1zZXJ2aWNlL3RvYXN0ZXItc2VydmljZS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi90b2FzdGVyLXNlcnZpY2UvbW9kZWxzL3RvYXN0ZXIubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL3RvYXN0ZXItc2VydmljZS9jb25maWcnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9ub3RpZnktc2VydmljZSc7XHJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export { NotifyComponent } from './notification/notification.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0YS11aS9zcmMvbGliL3NlcnZpY2VzL25vdGlmeS1zZXJ2aWNlL2NvbXBvbmVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgTm90aWZ5Q29tcG9uZW50IH0gZnJvbSAnLi9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLmNvbXBvbmVudCc7XHJcbiJdfQ==
@@ -0,0 +1,21 @@
1
+ import { NotifyType } from '../../enums/notification-type.enum';
2
+ import { ChangeDetectionStrategy, Component, EventEmitter } from '@angular/core';
3
+ import { SafeModule } from '../../../../pipes/safe/safe.module';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../../../pipes/safe/safe.pipe";
6
+ export class NotifyComponent {
7
+ config = { title: '', message: '', type: NotifyType.Info };
8
+ NotifyType = NotifyType;
9
+ close = new EventEmitter();
10
+ pause = new EventEmitter();
11
+ resume = new EventEmitter();
12
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotifyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: NotifyComponent, isStandalone: true, selector: "app-notification", ngImport: i0, template: "<div class=\"mrx-notify-body\" [class]=\"config.type\" (mouseenter)=\"pause.emit()\" (mouseleave)=\"resume.emit()\">\r\n <div class=\"mrx-notify-body__icon\">\r\n @switch (config.type) {\r\n @case (NotifyType.Positive) {\r\n <span class=\"mrx-icon icon-check color-positive icon-font-16\"></span>\r\n }\r\n @case (NotifyType.Negative) {\r\n <span class=\"mrx-icon icon-close color-negative icon-font-16\"></span>\r\n }\r\n @case (NotifyType.Attention) {\r\n <span class=\"mrx-icon icon-attention color-attention icon-font-16\"></span>\r\n }\r\n @default {\r\n <span class=\"mrx-icon icon-info color-info icon-font-16\"></span>\r\n }\r\n }\r\n </div>\r\n <div class=\"mrx-notify-body__content\">\r\n <div class=\"mrx-notify-body__content--title\">{{ config.title }}</div>\r\n\r\n @if (config.message) {\r\n @if (!config.options?.enableHtml) {\r\n <div class=\"mrx-notify-body__content--text\">{{ config.message }}</div>\r\n } @else {\r\n <div class=\"mrx-notify-body__content--text\" [innerHTML]=\"config.message | safe\"></div>\r\n }\r\n }\r\n </div>\r\n\r\n @if (config.options?.closeButton) {\r\n <span (click)=\"close.emit()\" class=\"mrx-icon icon-close icon-font-16 mrx-notify-body__close\"></span>\r\n }\r\n</div>\r\n", styles: [".mrx-notify-body{position:relative;display:flex;align-items:center;gap:var(--spacing-2, 8px);pointer-events:auto;border-radius:var(--border-radius-1, 4px);box-shadow:0 1px 4px #3a3a3a4d;width:300px;max-width:calc(100vw - 32px);min-height:56px;padding:var(--spacing-4, 16px) var(--spacing-6, 24px) var(--spacing-4, 16px) var(--spacing-4, 16px);margin:10px 0}.mrx-notify-body__icon{display:flex;align-items:center;justify-content:center;width:24px;min-width:24px;height:24px;min-height:24px;border-radius:50%;background:#fff}.mrx-notify-body__content{display:flex;flex-direction:column;gap:var(--spacing-1, 4px);width:100%}.mrx-notify-body__content--title{font-family:var(--body-md-bold-font-family, \"PT Sans\");font-size:var(--body-md-bold-font-size, 14px);font-weight:var(--body-md-bold-font-weight, 700);line-height:var(--body-md-bold-line-height, 16px)}.mrx-notify-body__content--text{font-family:var(--body-md-font-family, \"PT Sans\");font-size:var(--body-md-font-size, 14px);font-weight:var(--body-md-font-weight, 400);line-height:var(--body-md-line-height, 20px)}.mrx-notify-body__close{position:absolute;top:8px;right:8px;color:#fff;cursor:pointer}.info{background-color:var(--brand-toast-info-bg-default, #BED6F1)}.info .mrx-notify-body__icon,.info .mrx-notify-body__content--title,.info .mrx-notify-body__content--text,.info .mrx-notify-body__content--close{color:var(--neutral-text-primary, #262626)}.positive{background-color:var(--system-bg-controls-positive-default, #108E3A)}.positive .mrx-notify-body__icon{color:var(--system-icon-positive, #2DA454)}.positive .mrx-notify-body__content--title,.positive .mrx-notify-body__content--text,.positive .mrx-notify-body__content--close{color:var(--neutral-text-inverse, #FFF)}.negative{background-color:var(--system-bg-controls-negative-default, #B83B15)}.negative .mrx-notify-body__icon{color:var(--system-icon-negative, #C65836)}.negative .mrx-notify-body__content--title,.negative .mrx-notify-body__content--text,.negative .mrx-notify-body__content--close{color:var(--neutral-text-inverse, #FFF)}.attention{background-color:var(--system-bg-controls-attention-default, #CC6E07)}.attention .mrx-notify-body__icon{color:var(--system-icon-attention, #D97508)}.attention .mrx-notify-body__content--title,.attention .mrx-notify-body__content--text,.attention .mrx-notify-body__content--close{color:var(--neutral-text-inverse, #FFF)}\n"], dependencies: [{ kind: "ngmodule", type: SafeModule }, { kind: "pipe", type: i1.SafePipe, name: "safe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
14
+ }
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotifyComponent, decorators: [{
16
+ type: Component,
17
+ args: [{ standalone: true, selector: 'app-notification', imports: [
18
+ SafeModule
19
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mrx-notify-body\" [class]=\"config.type\" (mouseenter)=\"pause.emit()\" (mouseleave)=\"resume.emit()\">\r\n <div class=\"mrx-notify-body__icon\">\r\n @switch (config.type) {\r\n @case (NotifyType.Positive) {\r\n <span class=\"mrx-icon icon-check color-positive icon-font-16\"></span>\r\n }\r\n @case (NotifyType.Negative) {\r\n <span class=\"mrx-icon icon-close color-negative icon-font-16\"></span>\r\n }\r\n @case (NotifyType.Attention) {\r\n <span class=\"mrx-icon icon-attention color-attention icon-font-16\"></span>\r\n }\r\n @default {\r\n <span class=\"mrx-icon icon-info color-info icon-font-16\"></span>\r\n }\r\n }\r\n </div>\r\n <div class=\"mrx-notify-body__content\">\r\n <div class=\"mrx-notify-body__content--title\">{{ config.title }}</div>\r\n\r\n @if (config.message) {\r\n @if (!config.options?.enableHtml) {\r\n <div class=\"mrx-notify-body__content--text\">{{ config.message }}</div>\r\n } @else {\r\n <div class=\"mrx-notify-body__content--text\" [innerHTML]=\"config.message | safe\"></div>\r\n }\r\n }\r\n </div>\r\n\r\n @if (config.options?.closeButton) {\r\n <span (click)=\"close.emit()\" class=\"mrx-icon icon-close icon-font-16 mrx-notify-body__close\"></span>\r\n }\r\n</div>\r\n", styles: [".mrx-notify-body{position:relative;display:flex;align-items:center;gap:var(--spacing-2, 8px);pointer-events:auto;border-radius:var(--border-radius-1, 4px);box-shadow:0 1px 4px #3a3a3a4d;width:300px;max-width:calc(100vw - 32px);min-height:56px;padding:var(--spacing-4, 16px) var(--spacing-6, 24px) var(--spacing-4, 16px) var(--spacing-4, 16px);margin:10px 0}.mrx-notify-body__icon{display:flex;align-items:center;justify-content:center;width:24px;min-width:24px;height:24px;min-height:24px;border-radius:50%;background:#fff}.mrx-notify-body__content{display:flex;flex-direction:column;gap:var(--spacing-1, 4px);width:100%}.mrx-notify-body__content--title{font-family:var(--body-md-bold-font-family, \"PT Sans\");font-size:var(--body-md-bold-font-size, 14px);font-weight:var(--body-md-bold-font-weight, 700);line-height:var(--body-md-bold-line-height, 16px)}.mrx-notify-body__content--text{font-family:var(--body-md-font-family, \"PT Sans\");font-size:var(--body-md-font-size, 14px);font-weight:var(--body-md-font-weight, 400);line-height:var(--body-md-line-height, 20px)}.mrx-notify-body__close{position:absolute;top:8px;right:8px;color:#fff;cursor:pointer}.info{background-color:var(--brand-toast-info-bg-default, #BED6F1)}.info .mrx-notify-body__icon,.info .mrx-notify-body__content--title,.info .mrx-notify-body__content--text,.info .mrx-notify-body__content--close{color:var(--neutral-text-primary, #262626)}.positive{background-color:var(--system-bg-controls-positive-default, #108E3A)}.positive .mrx-notify-body__icon{color:var(--system-icon-positive, #2DA454)}.positive .mrx-notify-body__content--title,.positive .mrx-notify-body__content--text,.positive .mrx-notify-body__content--close{color:var(--neutral-text-inverse, #FFF)}.negative{background-color:var(--system-bg-controls-negative-default, #B83B15)}.negative .mrx-notify-body__icon{color:var(--system-icon-negative, #C65836)}.negative .mrx-notify-body__content--title,.negative .mrx-notify-body__content--text,.negative .mrx-notify-body__content--close{color:var(--neutral-text-inverse, #FFF)}.attention{background-color:var(--system-bg-controls-attention-default, #CC6E07)}.attention .mrx-notify-body__icon{color:var(--system-icon-attention, #D97508)}.attention .mrx-notify-body__content--title,.attention .mrx-notify-body__content--text,.attention .mrx-notify-body__content--close{color:var(--neutral-text-inverse, #FFF)}\n"] }]
20
+ }] });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRhLXVpL3NyYy9saWIvc2VydmljZXMvbm90aWZ5LXNlcnZpY2UvY29tcG9uZW50cy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRhLXVpL3NyYy9saWIvc2VydmljZXMvbm90aWZ5LXNlcnZpY2UvY29tcG9uZW50cy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7OztBQVloRSxNQUFNLE9BQU8sZUFBZTtJQUNuQixNQUFNLEdBQWlCLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFekUsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUV4QixLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQUNqQyxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQUNqQyxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQzt3R0FQOUIsZUFBZTs0RkFBZixlQUFlLDRFQ2Y1QixrMENBaUNBLDg0RUR4QkksVUFBVTs7NEZBTUQsZUFBZTtrQkFWM0IsU0FBUztpQ0FDSSxJQUFJLFlBQ04sa0JBQWtCLFdBQ25CO3dCQUNQLFVBQVU7cUJBQ1gsbUJBR2dCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOb3RpZnlDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvbm90aWZpY2F0aW9uLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IE5vdGlmeVR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcy9ub3RpZmljYXRpb24tdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNhZmVNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi8uLi9waXBlcy9zYWZlL3NhZmUubW9kdWxlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgc2VsZWN0b3I6ICdhcHAtbm90aWZpY2F0aW9uJyxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBTYWZlTW9kdWxlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vbm90aWZpY2F0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9ub3RpZmljYXRpb24uY29tcG9uZW50Lmxlc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTm90aWZ5Q29tcG9uZW50IHtcclxuICBwdWJsaWMgY29uZmlnOiBOb3RpZnlDb25maWcgPSB7IHRpdGxlOiAnJywgbWVzc2FnZTogJycsIHR5cGU6IE5vdGlmeVR5cGUuSW5mbyB9O1xyXG5cclxuICBwdWJsaWMgTm90aWZ5VHlwZSA9IE5vdGlmeVR5cGU7XHJcblxyXG4gIHB1YmxpYyBjbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBwdWJsaWMgcGF1c2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgcHVibGljIHJlc3VtZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibXJ4LW5vdGlmeS1ib2R5XCIgW2NsYXNzXT1cImNvbmZpZy50eXBlXCIgKG1vdXNlZW50ZXIpPVwicGF1c2UuZW1pdCgpXCIgKG1vdXNlbGVhdmUpPVwicmVzdW1lLmVtaXQoKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJtcngtbm90aWZ5LWJvZHlfX2ljb25cIj5cclxuICAgIEBzd2l0Y2ggKGNvbmZpZy50eXBlKSB7XHJcbiAgICAgIEBjYXNlIChOb3RpZnlUeXBlLlBvc2l0aXZlKSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtcngtaWNvbiBpY29uLWNoZWNrIGNvbG9yLXBvc2l0aXZlIGljb24tZm9udC0xNlwiPjwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgICBAY2FzZSAoTm90aWZ5VHlwZS5OZWdhdGl2ZSkge1xyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibXJ4LWljb24gaWNvbi1jbG9zZSBjb2xvci1uZWdhdGl2ZSBpY29uLWZvbnQtMTZcIj48L3NwYW4+XHJcbiAgICAgIH1cclxuICAgICAgQGNhc2UgKE5vdGlmeVR5cGUuQXR0ZW50aW9uKSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtcngtaWNvbiBpY29uLWF0dGVudGlvbiBjb2xvci1hdHRlbnRpb24gaWNvbi1mb250LTE2XCI+PC9zcGFuPlxyXG4gICAgICB9XHJcbiAgICAgIEBkZWZhdWx0IHtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24taW5mbyBjb2xvci1pbmZvIGljb24tZm9udC0xNlwiPjwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtcngtbm90aWZ5LWJvZHlfX2NvbnRlbnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtcngtbm90aWZ5LWJvZHlfX2NvbnRlbnQtLXRpdGxlXCI+e3sgY29uZmlnLnRpdGxlIH19PC9kaXY+XHJcblxyXG4gICAgQGlmIChjb25maWcubWVzc2FnZSkge1xyXG4gICAgICBAaWYgKCFjb25maWcub3B0aW9ucz8uZW5hYmxlSHRtbCkge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtcngtbm90aWZ5LWJvZHlfX2NvbnRlbnQtLXRleHRcIj57eyBjb25maWcubWVzc2FnZSB9fTwvZGl2PlxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXJ4LW5vdGlmeS1ib2R5X19jb250ZW50LS10ZXh0XCIgW2lubmVySFRNTF09XCJjb25maWcubWVzc2FnZSB8IHNhZmVcIj48L2Rpdj5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG5cclxuICBAaWYgKGNvbmZpZy5vcHRpb25zPy5jbG9zZUJ1dHRvbikge1xyXG4gICAgPHNwYW4gKGNsaWNrKT1cImNsb3NlLmVtaXQoKVwiIGNsYXNzPVwibXJ4LWljb24gaWNvbi1jbG9zZSBpY29uLWZvbnQtMTYgbXJ4LW5vdGlmeS1ib2R5X19jbG9zZVwiPjwvc3Bhbj5cclxuICB9XHJcbjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,3 @@
1
+ export { NotifyType } from './notification-type.enum';
2
+ export { NotifyPosition } from './notification-position.enum';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0YS11aS9zcmMvbGliL3NlcnZpY2VzL25vdGlmeS1zZXJ2aWNlL2VudW1zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBOb3RpZnlUeXBlIH0gZnJvbSAnLi9ub3RpZmljYXRpb24tdHlwZS5lbnVtJztcclxuZXhwb3J0IHsgTm90aWZ5UG9zaXRpb24gfSBmcm9tICcuL25vdGlmaWNhdGlvbi1wb3NpdGlvbi5lbnVtJztcclxuIl19
@@ -0,0 +1,8 @@
1
+ export var NotifyPosition;
2
+ (function (NotifyPosition) {
3
+ NotifyPosition["TopLeft"] = "top-left";
4
+ NotifyPosition["TopRight"] = "top-right";
5
+ NotifyPosition["BottomLeft"] = "bottom-left";
6
+ NotifyPosition["BottomRight"] = "bottom-right";
7
+ })(NotifyPosition || (NotifyPosition = {}));
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXBvc2l0aW9uLmVudW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0YS11aS9zcmMvbGliL3NlcnZpY2VzL25vdGlmeS1zZXJ2aWNlL2VudW1zL25vdGlmaWNhdGlvbi1wb3NpdGlvbi5lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLGNBS1g7QUFMRCxXQUFZLGNBQWM7SUFDeEIsc0NBQW9CLENBQUE7SUFDcEIsd0NBQXNCLENBQUE7SUFDdEIsNENBQTBCLENBQUE7SUFDMUIsOENBQTRCLENBQUE7QUFDOUIsQ0FBQyxFQUxXLGNBQWMsS0FBZCxjQUFjLFFBS3pCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gTm90aWZ5UG9zaXRpb24ge1xyXG4gIFRvcExlZnQgPSAndG9wLWxlZnQnLFxyXG4gIFRvcFJpZ2h0ID0gJ3RvcC1yaWdodCcsXHJcbiAgQm90dG9tTGVmdCA9ICdib3R0b20tbGVmdCcsXHJcbiAgQm90dG9tUmlnaHQgPSAnYm90dG9tLXJpZ2h0J1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,8 @@
1
+ export var NotifyType;
2
+ (function (NotifyType) {
3
+ NotifyType["Positive"] = "positive";
4
+ NotifyType["Negative"] = "negative";
5
+ NotifyType["Info"] = "info";
6
+ NotifyType["Attention"] = "attention";
7
+ })(NotifyType || (NotifyType = {}));
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXR5cGUuZW51bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRhLXVpL3NyYy9saWIvc2VydmljZXMvbm90aWZ5LXNlcnZpY2UvZW51bXMvbm90aWZpY2F0aW9uLXR5cGUuZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSxVQUtYO0FBTEQsV0FBWSxVQUFVO0lBQ3BCLG1DQUFxQixDQUFBO0lBQ3JCLG1DQUFxQixDQUFBO0lBQ3JCLDJCQUFhLENBQUE7SUFDYixxQ0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBTFcsVUFBVSxLQUFWLFVBQVUsUUFLckIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBOb3RpZnlUeXBlIHtcclxuICBQb3NpdGl2ZSA9ICdwb3NpdGl2ZScsXHJcbiAgTmVnYXRpdmUgPSAnbmVnYXRpdmUnLFxyXG4gIEluZm8gPSAnaW5mbycsXHJcbiAgQXR0ZW50aW9uID0gJ2F0dGVudGlvbidcclxufVxyXG4iXX0=
@@ -0,0 +1,4 @@
1
+ export { NotificationService } from './notification.service';
2
+ export { NotifyComponent } from './components';
3
+ export { NotifyType, NotifyPosition } from './enums';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0YS11aS9zcmMvbGliL3NlcnZpY2VzL25vdGlmeS1zZXJ2aWNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9ub3RpZmljYXRpb24uc2VydmljZSc7XHJcbmV4cG9ydCB7IE5vdGlmeUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cyc7XHJcbmV4cG9ydCB7IE5vdGlmeUNvbmZpZywgTm90aWZ5U3RhdGUgfSBmcm9tICcuL21vZGVscyc7XHJcbmV4cG9ydCB7IE5vdGlmeVR5cGUsIE5vdGlmeVBvc2l0aW9uIH0gZnJvbSAnLi9lbnVtcyc7XHJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0YS11aS9zcmMvbGliL3NlcnZpY2VzL25vdGlmeS1zZXJ2aWNlL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgTm90aWZ5U3RhdGUgfSBmcm9tICcuL25vdGlmaWNhdGlvbi1zdGF0ZS5tb2RlbCc7XHJcbmV4cG9ydCB7IE5vdGlmeUNvbmZpZyB9IGZyb20gJy4vbm90aWZpY2F0aW9uLWNvbmZpZy5tb2RlbCc7XHJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWNvbmZpZy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRhLXVpL3NyYy9saWIvc2VydmljZXMvbm90aWZ5LXNlcnZpY2UvbW9kZWxzL25vdGlmaWNhdGlvbi1jb25maWcubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vdGlmeVR5cGUgfSBmcm9tICcuLi9lbnVtcy9ub3RpZmljYXRpb24tdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgTm90aWZ5UG9zaXRpb24gfSBmcm9tICcuLi9lbnVtcy9ub3RpZmljYXRpb24tcG9zaXRpb24uZW51bSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmeUNvbmZpZyB7XHJcbiAgaWQ/OiBudW1iZXI7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgdHlwZTogTm90aWZ5VHlwZTtcclxuICBvcHRpb25zPzoge1xyXG4gICAgY2xvc2VCdXR0b24/OmJvb2xlYW47XHJcbiAgICBlbmFibGVIdG1sPzogYm9vbGVhbjtcclxuICAgIHBvc2l0aW9uPzogTm90aWZ5UG9zaXRpb247XHJcbiAgICBkdXJhdGlvbj86IG51bWJlcjtcclxuICAgIHN0aWNreT86IGJvb2xlYW47XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXN0YXRlLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGEtdWkvc3JjL2xpYi9zZXJ2aWNlcy9ub3RpZnktc2VydmljZS9tb2RlbHMvbm90aWZpY2F0aW9uLXN0YXRlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTm90aWZ5Q29uZmlnIH0gZnJvbSAnLi9ub3RpZmljYXRpb24tY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgTm90aWZ5Q29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmeVN0YXRlIHtcclxuICBpZDogbnVtYmVyO1xyXG4gIGNvbmZpZzogTm90aWZ5Q29uZmlnO1xyXG4gIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPE5vdGlmeUNvbXBvbmVudD47XHJcbiAgdGltZW91dElkPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+O1xyXG4gIHJlbWFpbmluZ1RpbWU/OiBudW1iZXI7XHJcbiAgc3RhcnRUaW1lPzogbnVtYmVyO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,125 @@
1
+ import { Injectable, ApplicationRef, EnvironmentInjector, inject } from '@angular/core';
2
+ import { signal } from '@angular/core';
3
+ import { createComponent } from '@angular/core';
4
+ import { NotifyPosition } from './enums';
5
+ import { NotifyComponent } from './components';
6
+ import * as i0 from "@angular/core";
7
+ export class NotificationService {
8
+ _appRef = inject(ApplicationRef);
9
+ _environmentInjector = inject(EnvironmentInjector);
10
+ _defaultDuration = 5000;
11
+ _defaultPosition = NotifyPosition.BottomRight;
12
+ _defaultSticky = false;
13
+ _defaultCloseButton = true;
14
+ _defaultEnableHtml = false;
15
+ _defaultNotificationComponent = NotifyComponent;
16
+ _animationDuration = 300;
17
+ _notificationId = 0;
18
+ notifications = signal([]);
19
+ show(config, component) {
20
+ const notificationId = this._notificationId++;
21
+ const notificationConfig = {
22
+ ...config,
23
+ id: notificationId,
24
+ options: {
25
+ position: config.options?.position || this._defaultPosition,
26
+ duration: config.options?.duration || this._defaultDuration,
27
+ sticky: config.options?.sticky || this._defaultSticky,
28
+ closeButton: config.options?.closeButton || this._defaultCloseButton,
29
+ enableHtml: config.options?.enableHtml || this._defaultEnableHtml
30
+ }
31
+ };
32
+ const componentRef = this._createNotificationComponent(notificationConfig, component || this._defaultNotificationComponent);
33
+ const notificationState = {
34
+ id: notificationId,
35
+ config: notificationConfig,
36
+ componentRef,
37
+ remainingTime: notificationConfig.options?.duration,
38
+ startTime: notificationConfig.options?.sticky ? undefined : Date.now()
39
+ };
40
+ componentRef.instance.close.subscribe(() => this.remove(notificationId));
41
+ componentRef.instance.pause.subscribe(() => this._pauseNotification(notificationState));
42
+ componentRef.instance.resume.subscribe(() => this._resumeNotification(notificationState));
43
+ this.notifications.update(notifications => [
44
+ ...notifications,
45
+ notificationState
46
+ ]);
47
+ if (!notificationConfig.options?.sticky) {
48
+ notificationState.timeoutId = setTimeout(() => this.remove(notificationId), notificationConfig.options?.duration);
49
+ }
50
+ return notificationId;
51
+ }
52
+ remove(id) {
53
+ const notification = this.notifications().find(n => n.id === id);
54
+ if (notification) {
55
+ if (notification.timeoutId) {
56
+ clearTimeout(notification.timeoutId);
57
+ }
58
+ this._removeNotification(notification.componentRef);
59
+ }
60
+ }
61
+ _createNotificationComponent(config, component) {
62
+ const componentRef = createComponent(component, {
63
+ environmentInjector: this._environmentInjector
64
+ });
65
+ componentRef.instance.config = config;
66
+ this._appRef.attachView(componentRef.hostView);
67
+ const domElem = componentRef.hostView.rootNodes[0];
68
+ const positionContainer = this._getOrCreatePositionContainer(config.options?.position || this._defaultPosition);
69
+ domElem.classList.add('mrx-notify-item');
70
+ positionContainer.appendChild(domElem);
71
+ setTimeout(() => domElem.classList.add('appearing'), 10);
72
+ return componentRef;
73
+ }
74
+ _removeNotification(componentRef) {
75
+ const domElem = componentRef.hostView.rootNodes[0];
76
+ domElem.classList.add('removing');
77
+ setTimeout(() => {
78
+ this._appRef.detachView(componentRef.hostView);
79
+ componentRef.destroy();
80
+ this.notifications.update(notifications => notifications.filter(n => n.componentRef !== componentRef));
81
+ setTimeout(() => {
82
+ this._cleanupEmptyContainers();
83
+ });
84
+ }, this._animationDuration);
85
+ }
86
+ _pauseNotification(state) {
87
+ if (state.timeoutId && state.remainingTime !== undefined && state.startTime !== undefined) {
88
+ clearTimeout(state.timeoutId);
89
+ state.timeoutId = undefined;
90
+ state.remainingTime = state.config.options?.duration - (Date.now() - state.startTime);
91
+ }
92
+ }
93
+ _resumeNotification(state) {
94
+ if (!state.config.options?.sticky && state.remainingTime !== undefined && !state.timeoutId) {
95
+ state.timeoutId = setTimeout(() => this.remove(state.id), state.remainingTime);
96
+ state.startTime = Date.now();
97
+ }
98
+ }
99
+ _getOrCreatePositionContainer(position) {
100
+ let container = document.querySelector(`.mrx-notify-container.${position}`);
101
+ if (!container) {
102
+ container = document.createElement('div');
103
+ container.classList.add('mrx-notify-container', position);
104
+ document.body.appendChild(container);
105
+ }
106
+ return container;
107
+ }
108
+ _cleanupEmptyContainers() {
109
+ const containers = document.querySelectorAll('.mrx-notify-container');
110
+ containers.forEach(container => {
111
+ if (container.children.length === 0) {
112
+ container.remove();
113
+ }
114
+ });
115
+ }
116
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
117
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotificationService, providedIn: 'root' });
118
+ }
119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotificationService, decorators: [{
120
+ type: Injectable,
121
+ args: [{
122
+ providedIn: 'root'
123
+ }]
124
+ }] });
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0YS11aS9zcmMvbGliL3NlcnZpY2VzL25vdGlmeS1zZXJ2aWNlL25vdGlmaWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWdCLGNBQWMsRUFBRSxtQkFBbUIsRUFBUSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFLL0MsTUFBTSxPQUFPLG1CQUFtQjtJQUNiLE9BQU8sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDakMsb0JBQW9CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFbkQsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLGdCQUFnQixHQUFHLGNBQWMsQ0FBQyxXQUFXLENBQUM7SUFDOUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN2QixtQkFBbUIsR0FBRyxJQUFJLENBQUM7SUFDM0Isa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBQzNCLDZCQUE2QixHQUEwQixlQUFlLENBQUM7SUFDdkUsa0JBQWtCLEdBQUcsR0FBRyxDQUFDO0lBRWxDLGVBQWUsR0FBRyxDQUFDLENBQUM7SUFFckIsYUFBYSxHQUFHLE1BQU0sQ0FBZ0IsRUFBRSxDQUFDLENBQUM7SUFFMUMsSUFBSSxDQUFDLE1BQW9CLEVBQUUsU0FBaUM7UUFDakUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzlDLE1BQU0s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RUFBRSxDQUFDO1lBQ2YsU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDMUQsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUNELE9BQU8sU0FBd0IsQ0FBQztJQUNsQyxDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBRXRFLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBeElVLG1CQUFtQjs0R0FBbkIsbUJBQW1CLGNBRmxCLE1BQU07OzRGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBDb21wb25lbnRSZWYsIEFwcGxpY2F0aW9uUmVmLCBFbnZpcm9ubWVudEluamVjdG9yLCBUeXBlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNyZWF0ZUNvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOb3RpZnlQb3NpdGlvbiB9IGZyb20gJy4vZW51bXMnO1xyXG5pbXBvcnQgeyBOb3RpZnlDb25maWcsIE5vdGlmeVN0YXRlIH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBOb3RpZnlDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uU2VydmljZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwUmVmID0gaW5qZWN0KEFwcGxpY2F0aW9uUmVmKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9lbnZpcm9ubWVudEluamVjdG9yID0gaW5qZWN0KEVudmlyb25tZW50SW5qZWN0b3IpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0RHVyYXRpb24gPSA1MDAwO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRQb3NpdGlvbiA9IE5vdGlmeVBvc2l0aW9uLkJvdHRvbVJpZ2h0O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRTdGlja3kgPSBmYWxzZTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0Q2xvc2VCdXR0b24gPSB0cnVlO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRFbmFibGVIdG1sID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdE5vdGlmaWNhdGlvbkNvbXBvbmVudDogVHlwZTxOb3RpZnlDb21wb25lbnQ+ID0gTm90aWZ5Q29tcG9uZW50O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2FuaW1hdGlvbkR1cmF0aW9uID0gMzAwO1xyXG5cclxuICBwcml2YXRlIF9ub3RpZmljYXRpb25JZCA9IDA7XHJcblxyXG4gIHB1YmxpYyBub3RpZmljYXRpb25zID0gc2lnbmFsPE5vdGlmeVN0YXRlW10+KFtdKTtcclxuXHJcbiAgcHVibGljIHNob3coY29uZmlnOiBOb3RpZnlDb25maWcsIGNvbXBvbmVudD86IFR5cGU8Tm90aWZ5Q29tcG9uZW50Pik6IG51bWJlciB7XHJcbiAgICBjb25zdCBub3RpZmljYXRpb25JZCA9IHRoaXMuX25vdGlmaWNhdGlvbklkKys7XHJcbiAgICBjb25zdCBub3RpZmljYXRpb25Db25maWc6IE5vdGlmeUNvbmZpZyA9IHtcclxuICAgICAgLi4uY29uZmlnLFxyXG4gICAgICBpZDogbm90aWZpY2F0aW9uSWQsXHJcbiAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICBwb3NpdGlvbjogY29uZmlnLm9wdGlvbnM/LnBvc2l0aW9uIHx8IHRoaXMuX2RlZmF1bHRQb3NpdGlvbixcclxuICAgICAgICBkdXJhdGlvbjogY29uZmlnLm9wdGlvbnM/LmR1cmF0aW9uIHx8IHRoaXMuX2RlZmF1bHREdXJhdGlvbixcclxuICAgICAgICBzdGlja3k6IGNvbmZpZy5vcHRpb25zPy5zdGlja3kgfHwgdGhpcy5fZGVmYXVsdFN0aWNreSxcclxuICAgICAgICBjbG9zZUJ1dHRvbjogY29uZmlnLm9wdGlvbnM/LmNsb3NlQnV0dG9uIHx8IHRoaXMuX2RlZmF1bHRDbG9zZUJ1dHRvbixcclxuICAgICAgICBlbmFibGVIdG1sOiBjb25maWcub3B0aW9ucz8uZW5hYmxlSHRtbCB8fCB0aGlzLl9kZWZhdWx0RW5hYmxlSHRtbFxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuX2NyZWF0ZU5vdGlmaWNhdGlvbkNvbXBvbmVudChub3RpZmljYXRpb25Db25maWcsIGNvbXBvbmVudCB8fCB0aGlzLl9kZWZhdWx0Tm90aWZpY2F0aW9uQ29tcG9uZW50KTtcclxuXHJcbiAgICBjb25zdCBub3RpZmljYXRpb25TdGF0ZTogTm90aWZ5U3RhdGUgPSB7XHJcbiAgICAgIGlkOiBub3RpZmljYXRpb25JZCxcclxuICAgICAgY29uZmlnOiBub3RpZmljYXRpb25Db25maWcsXHJcbiAgICAgIGNvbXBvbmVudFJlZixcclxuICAgICAgcmVtYWluaW5nVGltZTogbm90aWZpY2F0aW9uQ29uZmlnLm9wdGlvbnM/LmR1cmF0aW9uLFxyXG4gICAgICBzdGFydFRpbWU6IG5vdGlmaWNhdGlvbkNvbmZpZy5vcHRpb25zPy5zdGlja3kgPyB1bmRlZmluZWQgOiBEYXRlLm5vdygpXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5jbG9zZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZW1vdmUobm90aWZpY2F0aW9uSWQpKTtcclxuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5wYXVzZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fcGF1c2VOb3RpZmljYXRpb24obm90aWZpY2F0aW9uU3RhdGUpKTtcclxuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5yZXN1bWUuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3Jlc3VtZU5vdGlmaWNhdGlvbihub3RpZmljYXRpb25TdGF0ZSkpO1xyXG5cclxuICAgIHRoaXMubm90aWZpY2F0aW9ucy51cGRhdGUobm90aWZpY2F0aW9ucyA9PiBbXHJcbiAgICAgIC4uLm5vdGlmaWNhdGlvbnMsXHJcbiAgICAgIG5vdGlmaWNhdGlvblN0YXRlXHJcbiAgICBdKTtcclxuXHJcbiAgICBpZiAoIW5vdGlmaWNhdGlvbkNvbmZpZy5vcHRpb25zPy5zdGlja3kpIHtcclxuICAgICAgbm90aWZpY2F0aW9uU3RhdGUudGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlbW92ZShub3RpZmljYXRpb25JZCksIG5vdGlmaWNhdGlvbkNvbmZpZy5vcHRpb25zPy5kdXJhdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5vdGlmaWNhdGlvbklkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZShpZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCBub3RpZmljYXRpb24gPSB0aGlzLm5vdGlmaWNhdGlvbnMoKS5maW5kKG4gPT4gbi5pZCA9PT0gaWQpO1xyXG4gICAgaWYgKG5vdGlmaWNhdGlvbikge1xyXG4gICAgICBpZiAobm90aWZpY2F0aW9uLnRpbWVvdXRJZCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dChub3RpZmljYXRpb24udGltZW91dElkKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9yZW1vdmVOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLmNvbXBvbmVudFJlZik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVOb3RpZmljYXRpb25Db21wb25lbnQoY29uZmlnOiBOb3RpZnlDb25maWcsIGNvbXBvbmVudDogVHlwZTxOb3RpZnlDb21wb25lbnQ+KTogQ29tcG9uZW50UmVmPE5vdGlmeUNvbXBvbmVudD4ge1xyXG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCwge1xyXG4gICAgICBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLl9lbnZpcm9ubWVudEluamVjdG9yXHJcbiAgICB9KTtcclxuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5jb25maWcgPSBjb25maWc7XHJcblxyXG4gICAgdGhpcy5fYXBwUmVmLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcclxuXHJcbiAgICBjb25zdCBkb21FbGVtID0gKGNvbXBvbmVudFJlZi5ob3N0VmlldyBhcyBhbnkpLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnN0IHBvc2l0aW9uQ29udGFpbmVyID0gdGhpcy5fZ2V0T3JDcmVhdGVQb3NpdGlvbkNvbnRhaW5lcihjb25maWcub3B0aW9ucz8ucG9zaXRpb24gfHwgdGhpcy5fZGVmYXVsdFBvc2l0aW9uKTtcclxuICAgIGRvbUVsZW0uY2xhc3NMaXN0LmFkZCgnbXJ4LW5vdGlmeS1pdGVtJyk7XHJcbiAgICBwb3NpdGlvbkNvbnRhaW5lci5hcHBlbmRDaGlsZChkb21FbGVtKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IGRvbUVsZW0uY2xhc3NMaXN0LmFkZCgnYXBwZWFyaW5nJyksIDEwKTtcclxuXHJcbiAgICByZXR1cm4gY29tcG9uZW50UmVmO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlTm90aWZpY2F0aW9uKGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPE5vdGlmeUNvbXBvbmVudD4pOiB2b2lkIHtcclxuICAgIGNvbnN0IGRvbUVsZW0gPSAoY29tcG9uZW50UmVmLmhvc3RWaWV3IGFzIGFueSkucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgIGRvbUVsZW0uY2xhc3NMaXN0LmFkZCgncmVtb3ZpbmcnKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5fYXBwUmVmLmRldGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcclxuICAgICAgY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcclxuXHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy51cGRhdGUobm90aWZpY2F0aW9ucyA9PlxyXG4gICAgICAgIG5vdGlmaWNhdGlvbnMuZmlsdGVyKG4gPT4gbi5jb21wb25lbnRSZWYgIT09IGNvbXBvbmVudFJlZilcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXBFbXB0eUNvbnRhaW5lcnMoKTtcclxuICAgICAgfSlcclxuICAgIH0sIHRoaXMuX2FuaW1hdGlvbkR1cmF0aW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3BhdXNlTm90aWZpY2F0aW9uKHN0YXRlOiBOb3RpZnlTdGF0ZSk6IHZvaWQge1xyXG4gICAgaWYgKHN0YXRlLnRpbWVvdXRJZCAmJiBzdGF0ZS5yZW1haW5pbmdUaW1lICE9PSB1bmRlZmluZWQgJiYgc3RhdGUuc3RhcnRUaW1lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHN0YXRlLnRpbWVvdXRJZCk7XHJcbiAgICAgIHN0YXRlLnRpbWVvdXRJZCA9IHVuZGVmaW5lZDtcclxuICAgICAgc3RhdGUucmVtYWluaW5nVGltZSA9IHN0YXRlLmNvbmZpZy5vcHRpb25zPy5kdXJhdGlvbiEgLSAoRGF0ZS5ub3coKSAtIHN0YXRlLnN0YXJ0VGltZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXN1bWVOb3RpZmljYXRpb24oc3RhdGU6IE5vdGlmeVN0YXRlKTogdm9pZCB7XHJcbiAgICBpZiAoIXN0YXRlLmNvbmZpZy5vcHRpb25zPy5zdGlja3kgJiYgc3RhdGUucmVtYWluaW5nVGltZSAhPT0gdW5kZWZpbmVkICYmICFzdGF0ZS50aW1lb3V0SWQpIHtcclxuICAgICAgc3RhdGUudGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlbW92ZShzdGF0ZS5pZCksIHN0YXRlLnJlbWFpbmluZ1RpbWUpO1xyXG4gICAgICBzdGF0ZS5zdGFydFRpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0T3JDcmVhdGVQb3NpdGlvbkNvbnRhaW5lcihwb3NpdGlvbjogTm90aWZ5UG9zaXRpb24pOiBIVE1MRWxlbWVudCB7XHJcbiAgICBsZXQgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLm1yeC1ub3RpZnktY29udGFpbmVyLiR7cG9zaXRpb259YCk7XHJcbiAgICBpZiAoIWNvbnRhaW5lcikge1xyXG4gICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21yeC1ub3RpZnktY29udGFpbmVyJywgcG9zaXRpb24pO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udGFpbmVyIGFzIEhUTUxFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xlYW51cEVtcHR5Q29udGFpbmVycygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lcnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubXJ4LW5vdGlmeS1jb250YWluZXInKTtcclxuXHJcbiAgICBjb250YWluZXJzLmZvckVhY2goY29udGFpbmVyID0+IHtcclxuICAgICAgaWYgKGNvbnRhaW5lci5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBjb250YWluZXIucmVtb3ZlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Input, Component, Pipe, EventEmitter, Output, ChangeDetectionStrategy, NgModule, CUSTOM_ELEMENTS_SCHEMA, Injectable, forwardRef, InjectionToken, TemplateRef, Inject, Injector, HostListener, Directive, ViewChild, ContentChild, ContentChildren, signal, computed, HostBinding, inject, ViewEncapsulation, ViewChildren, viewChild, LOCALE_ID } from '@angular/core';
2
+ import { Input, Component, Pipe, EventEmitter, Output, ChangeDetectionStrategy, NgModule, CUSTOM_ELEMENTS_SCHEMA, Injectable, forwardRef, InjectionToken, TemplateRef, Inject, Injector, HostListener, Directive, ViewChild, ContentChild, ContentChildren, signal, computed, inject, ApplicationRef, EnvironmentInjector, createComponent, HostBinding, ViewEncapsulation, ViewChildren, viewChild, LOCALE_ID } from '@angular/core';
3
3
  import * as i1$1 from '@angular/common';
4
4
  import { CommonModule, NgOptimizedImage, DOCUMENT, registerLocaleData, DatePipe } from '@angular/common';
5
5
  import * as i1$2 from '@angular/router';
@@ -3603,6 +3603,157 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
3603
3603
  }]
3604
3604
  }] });
3605
3605
 
3606
+ var NotifyType;
3607
+ (function (NotifyType) {
3608
+ NotifyType["Positive"] = "positive";
3609
+ NotifyType["Negative"] = "negative";
3610
+ NotifyType["Info"] = "info";
3611
+ NotifyType["Attention"] = "attention";
3612
+ })(NotifyType || (NotifyType = {}));
3613
+
3614
+ var NotifyPosition;
3615
+ (function (NotifyPosition) {
3616
+ NotifyPosition["TopLeft"] = "top-left";
3617
+ NotifyPosition["TopRight"] = "top-right";
3618
+ NotifyPosition["BottomLeft"] = "bottom-left";
3619
+ NotifyPosition["BottomRight"] = "bottom-right";
3620
+ })(NotifyPosition || (NotifyPosition = {}));
3621
+
3622
+ class NotifyComponent {
3623
+ config = { title: '', message: '', type: NotifyType.Info };
3624
+ NotifyType = NotifyType;
3625
+ close = new EventEmitter();
3626
+ pause = new EventEmitter();
3627
+ resume = new EventEmitter();
3628
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotifyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3629
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: NotifyComponent, isStandalone: true, selector: "app-notification", ngImport: i0, template: "<div class=\"mrx-notify-body\" [class]=\"config.type\" (mouseenter)=\"pause.emit()\" (mouseleave)=\"resume.emit()\">\r\n <div class=\"mrx-notify-body__icon\">\r\n @switch (config.type) {\r\n @case (NotifyType.Positive) {\r\n <span class=\"mrx-icon icon-check color-positive icon-font-16\"></span>\r\n }\r\n @case (NotifyType.Negative) {\r\n <span class=\"mrx-icon icon-close color-negative icon-font-16\"></span>\r\n }\r\n @case (NotifyType.Attention) {\r\n <span class=\"mrx-icon icon-attention color-attention icon-font-16\"></span>\r\n }\r\n @default {\r\n <span class=\"mrx-icon icon-info color-info icon-font-16\"></span>\r\n }\r\n }\r\n </div>\r\n <div class=\"mrx-notify-body__content\">\r\n <div class=\"mrx-notify-body__content--title\">{{ config.title }}</div>\r\n\r\n @if (config.message) {\r\n @if (!config.options?.enableHtml) {\r\n <div class=\"mrx-notify-body__content--text\">{{ config.message }}</div>\r\n } @else {\r\n <div class=\"mrx-notify-body__content--text\" [innerHTML]=\"config.message | safe\"></div>\r\n }\r\n }\r\n </div>\r\n\r\n @if (config.options?.closeButton) {\r\n <span (click)=\"close.emit()\" class=\"mrx-icon icon-close icon-font-16 mrx-notify-body__close\"></span>\r\n }\r\n</div>\r\n", styles: [".mrx-notify-body{position:relative;display:flex;align-items:center;gap:var(--spacing-2, 8px);pointer-events:auto;border-radius:var(--border-radius-1, 4px);box-shadow:0 1px 4px #3a3a3a4d;width:300px;max-width:calc(100vw - 32px);min-height:56px;padding:var(--spacing-4, 16px) var(--spacing-6, 24px) var(--spacing-4, 16px) var(--spacing-4, 16px);margin:10px 0}.mrx-notify-body__icon{display:flex;align-items:center;justify-content:center;width:24px;min-width:24px;height:24px;min-height:24px;border-radius:50%;background:#fff}.mrx-notify-body__content{display:flex;flex-direction:column;gap:var(--spacing-1, 4px);width:100%}.mrx-notify-body__content--title{font-family:var(--body-md-bold-font-family, \"PT Sans\");font-size:var(--body-md-bold-font-size, 14px);font-weight:var(--body-md-bold-font-weight, 700);line-height:var(--body-md-bold-line-height, 16px)}.mrx-notify-body__content--text{font-family:var(--body-md-font-family, \"PT Sans\");font-size:var(--body-md-font-size, 14px);font-weight:var(--body-md-font-weight, 400);line-height:var(--body-md-line-height, 20px)}.mrx-notify-body__close{position:absolute;top:8px;right:8px;color:#fff;cursor:pointer}.info{background-color:var(--brand-toast-info-bg-default, #BED6F1)}.info .mrx-notify-body__icon,.info .mrx-notify-body__content--title,.info .mrx-notify-body__content--text,.info .mrx-notify-body__content--close{color:var(--neutral-text-primary, #262626)}.positive{background-color:var(--system-bg-controls-positive-default, #108E3A)}.positive .mrx-notify-body__icon{color:var(--system-icon-positive, #2DA454)}.positive .mrx-notify-body__content--title,.positive .mrx-notify-body__content--text,.positive .mrx-notify-body__content--close{color:var(--neutral-text-inverse, #FFF)}.negative{background-color:var(--system-bg-controls-negative-default, #B83B15)}.negative .mrx-notify-body__icon{color:var(--system-icon-negative, #C65836)}.negative .mrx-notify-body__content--title,.negative .mrx-notify-body__content--text,.negative .mrx-notify-body__content--close{color:var(--neutral-text-inverse, #FFF)}.attention{background-color:var(--system-bg-controls-attention-default, #CC6E07)}.attention .mrx-notify-body__icon{color:var(--system-icon-attention, #D97508)}.attention .mrx-notify-body__content--title,.attention .mrx-notify-body__content--text,.attention .mrx-notify-body__content--close{color:var(--neutral-text-inverse, #FFF)}\n"], dependencies: [{ kind: "ngmodule", type: SafeModule }, { kind: "pipe", type: SafePipe, name: "safe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3630
+ }
3631
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotifyComponent, decorators: [{
3632
+ type: Component,
3633
+ args: [{ standalone: true, selector: 'app-notification', imports: [
3634
+ SafeModule
3635
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mrx-notify-body\" [class]=\"config.type\" (mouseenter)=\"pause.emit()\" (mouseleave)=\"resume.emit()\">\r\n <div class=\"mrx-notify-body__icon\">\r\n @switch (config.type) {\r\n @case (NotifyType.Positive) {\r\n <span class=\"mrx-icon icon-check color-positive icon-font-16\"></span>\r\n }\r\n @case (NotifyType.Negative) {\r\n <span class=\"mrx-icon icon-close color-negative icon-font-16\"></span>\r\n }\r\n @case (NotifyType.Attention) {\r\n <span class=\"mrx-icon icon-attention color-attention icon-font-16\"></span>\r\n }\r\n @default {\r\n <span class=\"mrx-icon icon-info color-info icon-font-16\"></span>\r\n }\r\n }\r\n </div>\r\n <div class=\"mrx-notify-body__content\">\r\n <div class=\"mrx-notify-body__content--title\">{{ config.title }}</div>\r\n\r\n @if (config.message) {\r\n @if (!config.options?.enableHtml) {\r\n <div class=\"mrx-notify-body__content--text\">{{ config.message }}</div>\r\n } @else {\r\n <div class=\"mrx-notify-body__content--text\" [innerHTML]=\"config.message | safe\"></div>\r\n }\r\n }\r\n </div>\r\n\r\n @if (config.options?.closeButton) {\r\n <span (click)=\"close.emit()\" class=\"mrx-icon icon-close icon-font-16 mrx-notify-body__close\"></span>\r\n }\r\n</div>\r\n", styles: [".mrx-notify-body{position:relative;display:flex;align-items:center;gap:var(--spacing-2, 8px);pointer-events:auto;border-radius:var(--border-radius-1, 4px);box-shadow:0 1px 4px #3a3a3a4d;width:300px;max-width:calc(100vw - 32px);min-height:56px;padding:var(--spacing-4, 16px) var(--spacing-6, 24px) var(--spacing-4, 16px) var(--spacing-4, 16px);margin:10px 0}.mrx-notify-body__icon{display:flex;align-items:center;justify-content:center;width:24px;min-width:24px;height:24px;min-height:24px;border-radius:50%;background:#fff}.mrx-notify-body__content{display:flex;flex-direction:column;gap:var(--spacing-1, 4px);width:100%}.mrx-notify-body__content--title{font-family:var(--body-md-bold-font-family, \"PT Sans\");font-size:var(--body-md-bold-font-size, 14px);font-weight:var(--body-md-bold-font-weight, 700);line-height:var(--body-md-bold-line-height, 16px)}.mrx-notify-body__content--text{font-family:var(--body-md-font-family, \"PT Sans\");font-size:var(--body-md-font-size, 14px);font-weight:var(--body-md-font-weight, 400);line-height:var(--body-md-line-height, 20px)}.mrx-notify-body__close{position:absolute;top:8px;right:8px;color:#fff;cursor:pointer}.info{background-color:var(--brand-toast-info-bg-default, #BED6F1)}.info .mrx-notify-body__icon,.info .mrx-notify-body__content--title,.info .mrx-notify-body__content--text,.info .mrx-notify-body__content--close{color:var(--neutral-text-primary, #262626)}.positive{background-color:var(--system-bg-controls-positive-default, #108E3A)}.positive .mrx-notify-body__icon{color:var(--system-icon-positive, #2DA454)}.positive .mrx-notify-body__content--title,.positive .mrx-notify-body__content--text,.positive .mrx-notify-body__content--close{color:var(--neutral-text-inverse, #FFF)}.negative{background-color:var(--system-bg-controls-negative-default, #B83B15)}.negative .mrx-notify-body__icon{color:var(--system-icon-negative, #C65836)}.negative .mrx-notify-body__content--title,.negative .mrx-notify-body__content--text,.negative .mrx-notify-body__content--close{color:var(--neutral-text-inverse, #FFF)}.attention{background-color:var(--system-bg-controls-attention-default, #CC6E07)}.attention .mrx-notify-body__icon{color:var(--system-icon-attention, #D97508)}.attention .mrx-notify-body__content--title,.attention .mrx-notify-body__content--text,.attention .mrx-notify-body__content--close{color:var(--neutral-text-inverse, #FFF)}\n"] }]
3636
+ }] });
3637
+
3638
+ class NotificationService {
3639
+ _appRef = inject(ApplicationRef);
3640
+ _environmentInjector = inject(EnvironmentInjector);
3641
+ _defaultDuration = 5000;
3642
+ _defaultPosition = NotifyPosition.BottomRight;
3643
+ _defaultSticky = false;
3644
+ _defaultCloseButton = true;
3645
+ _defaultEnableHtml = false;
3646
+ _defaultNotificationComponent = NotifyComponent;
3647
+ _animationDuration = 300;
3648
+ _notificationId = 0;
3649
+ notifications = signal([]);
3650
+ show(config, component) {
3651
+ const notificationId = this._notificationId++;
3652
+ const notificationConfig = {
3653
+ ...config,
3654
+ id: notificationId,
3655
+ options: {
3656
+ position: config.options?.position || this._defaultPosition,
3657
+ duration: config.options?.duration || this._defaultDuration,
3658
+ sticky: config.options?.sticky || this._defaultSticky,
3659
+ closeButton: config.options?.closeButton || this._defaultCloseButton,
3660
+ enableHtml: config.options?.enableHtml || this._defaultEnableHtml
3661
+ }
3662
+ };
3663
+ const componentRef = this._createNotificationComponent(notificationConfig, component || this._defaultNotificationComponent);
3664
+ const notificationState = {
3665
+ id: notificationId,
3666
+ config: notificationConfig,
3667
+ componentRef,
3668
+ remainingTime: notificationConfig.options?.duration,
3669
+ startTime: notificationConfig.options?.sticky ? undefined : Date.now()
3670
+ };
3671
+ componentRef.instance.close.subscribe(() => this.remove(notificationId));
3672
+ componentRef.instance.pause.subscribe(() => this._pauseNotification(notificationState));
3673
+ componentRef.instance.resume.subscribe(() => this._resumeNotification(notificationState));
3674
+ this.notifications.update(notifications => [
3675
+ ...notifications,
3676
+ notificationState
3677
+ ]);
3678
+ if (!notificationConfig.options?.sticky) {
3679
+ notificationState.timeoutId = setTimeout(() => this.remove(notificationId), notificationConfig.options?.duration);
3680
+ }
3681
+ return notificationId;
3682
+ }
3683
+ remove(id) {
3684
+ const notification = this.notifications().find(n => n.id === id);
3685
+ if (notification) {
3686
+ if (notification.timeoutId) {
3687
+ clearTimeout(notification.timeoutId);
3688
+ }
3689
+ this._removeNotification(notification.componentRef);
3690
+ }
3691
+ }
3692
+ _createNotificationComponent(config, component) {
3693
+ const componentRef = createComponent(component, {
3694
+ environmentInjector: this._environmentInjector
3695
+ });
3696
+ componentRef.instance.config = config;
3697
+ this._appRef.attachView(componentRef.hostView);
3698
+ const domElem = componentRef.hostView.rootNodes[0];
3699
+ const positionContainer = this._getOrCreatePositionContainer(config.options?.position || this._defaultPosition);
3700
+ domElem.classList.add('mrx-notify-item');
3701
+ positionContainer.appendChild(domElem);
3702
+ setTimeout(() => domElem.classList.add('appearing'), 10);
3703
+ return componentRef;
3704
+ }
3705
+ _removeNotification(componentRef) {
3706
+ const domElem = componentRef.hostView.rootNodes[0];
3707
+ domElem.classList.add('removing');
3708
+ setTimeout(() => {
3709
+ this._appRef.detachView(componentRef.hostView);
3710
+ componentRef.destroy();
3711
+ this.notifications.update(notifications => notifications.filter(n => n.componentRef !== componentRef));
3712
+ setTimeout(() => {
3713
+ this._cleanupEmptyContainers();
3714
+ });
3715
+ }, this._animationDuration);
3716
+ }
3717
+ _pauseNotification(state) {
3718
+ if (state.timeoutId && state.remainingTime !== undefined && state.startTime !== undefined) {
3719
+ clearTimeout(state.timeoutId);
3720
+ state.timeoutId = undefined;
3721
+ state.remainingTime = state.config.options?.duration - (Date.now() - state.startTime);
3722
+ }
3723
+ }
3724
+ _resumeNotification(state) {
3725
+ if (!state.config.options?.sticky && state.remainingTime !== undefined && !state.timeoutId) {
3726
+ state.timeoutId = setTimeout(() => this.remove(state.id), state.remainingTime);
3727
+ state.startTime = Date.now();
3728
+ }
3729
+ }
3730
+ _getOrCreatePositionContainer(position) {
3731
+ let container = document.querySelector(`.mrx-notify-container.${position}`);
3732
+ if (!container) {
3733
+ container = document.createElement('div');
3734
+ container.classList.add('mrx-notify-container', position);
3735
+ document.body.appendChild(container);
3736
+ }
3737
+ return container;
3738
+ }
3739
+ _cleanupEmptyContainers() {
3740
+ const containers = document.querySelectorAll('.mrx-notify-container');
3741
+ containers.forEach(container => {
3742
+ if (container.children.length === 0) {
3743
+ container.remove();
3744
+ }
3745
+ });
3746
+ }
3747
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3748
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotificationService, providedIn: 'root' });
3749
+ }
3750
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotificationService, decorators: [{
3751
+ type: Injectable,
3752
+ args: [{
3753
+ providedIn: 'root'
3754
+ }]
3755
+ }] });
3756
+
3606
3757
  var InputTextSizesEnum;
3607
3758
  (function (InputTextSizesEnum) {
3608
3759
  InputTextSizesEnum["small"] = "mrx-input-text-sm";
@@ -20049,5 +20200,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
20049
20200
  * Generated bundle index. Do not edit.
20050
20201
  */
20051
20202
 
20052
- export { AlertColorClasses, AlertComponent, AlertIconClasses, AlertModule, AutoSaveStore, BadgeColorClassesEnum, BadgeComponent, BadgeGroupComponent, BadgeSizeEnum, BadgeTagTypeClassesEnum, BadgeTargetTypesEnum, BadgeTypeEnum, BadgesModule, BreadcrumbsComponent, BreadcrumbsModule, BreadcrumbsTypeEnum, ButtonColorsEnum, ButtonComponent, ButtonIconPositionEnum, ButtonModule, ButtonSizesEnum, ButtonTypesEnum, CdkTooltipDirective, CdkTooltipModule, CharsLeftComponent, CharsLeftModule, CheckboxComponent, CheckboxGroupComponent, CheckboxGroupModule, CheckboxModule, CodeEditorComponent, CodeEditorModule, CodeEditorOptions, ColumnComponent, ContentTitleWrapperComponent, ContentTitleWrapperModule, ContentWrapperComponent, ContentWrapperModule, ContentWrapperTypeEnum, ControlsItemComponent, ControlsVisibilityEnum, ControlsWrapperComponent, ControlsWrapperModule, CountriesISO, CountriesRusLabel, CountryISO, CurrencyModule, CurrencyPipe, DateFormatModule, DateFormatPipe, DateTimeFormatPipe, DefaultPagerSettings, DropdownComponent, DropdownModule, EditorComponent, EditorModule, ErrorMessageComponent, ErrorMessageModule, FileUploadService, FormulaEditorComponent, FormulaEditorModule, GalleryComponent, GalleryModule, HideAfterClickDirective, HintErrorMessageComponent, HintErrorMessageModule, IconButtonComponent, IconButtonModule, IconButtonSizeEnum, IconButtonStateEnum, IconButtonTypeEnum, InputDateComponent, InputDateModule, InputDateTimeComponent, InputDateTimeModule, InputDateTimeSizesEnum, InputDatepickerComponent, InputDatepickerModule, InputDatepickerSizesEnum, InputEditorModeEnum, InputFileComponent, InputFileImageComponent, InputFileImageModule, InputFileImageTypeEnum, InputFileModule, InputNumberComponent, InputNumberModule, InputNumberSizesEnum, InputOptComponent, InputOptModule, InputPasswordComponent, InputPasswordModule, InputPasswordSizesEnum, InputPhoneComponent, InputPhoneModule, InputSearchComponent, InputSearchModule, InputSearchSizesEnum, InputSelectComponent, InputSelectModule, InputSelectSizeEnum, InputTelComponent, InputTelModule, InputTelSizesEnum, InputTextComponent, InputTextIconColorEnum, InputTextModule, InputTextSizesEnum, InputTextareaComponent, InputTextareaModule, InputTextareaSizesEnum, InputTimepickerComponent, InputTimepickerModule, JsonEditorComponent, JsonEditorModule, JsonEditorOptions, LabelComponent, LabelModule, LinkComponent, LinkModule, LinkSizesEnum, LinkTargetTypesEnum, LinkTypesEnum, LoaderColorEnum, LoaderComponent, LoaderModule, LoaderSizesEnum, MODAL_CONFIG, MODAL_DATA, ModalAlignButtonsEnum, ModalBackdropTypeClasses, ModalColorEnum, ModalComponent, ModalModule, ModalRef, ModalService, ModalServiceComponent, ModalServiceModule, ModalSizesEnum, ModalType, ModalTypeClasses, MrxFormValidator, NgxOtpBehavior, PagesNavComponent, PagesNavEnum, PagesNavModule, PaginatorComponent, PaginatorModule, PaginatorPositionCss, PdfViewerComponent, PdfViewerComponentModule, PhoneFormatModule, PhoneFormatPipe, PopupComponent, PopupItemComponent, PopupModule, PopupTriggerDirective, PositionEnum, PositionStrategyEnum, PreviewEnum, ProgressClasses, ProgressComponent, ProgressModule, RadioComponent, RadioGroupComponent, RadioGroupModule, RadioModule, RadioTypesEnum, RatingComponent, RatingModule, RatingSizesEnum, RatingValueSizesEnum, RatingWrapperSizesEnum, SafeModule, SafePipe, SaveStateComponent, SaveStateModule, SelectComponent, SelectModule, SelectSizeEnum, SidePageComponent, SidePageHeaderSizesEnum, SidePageModule, SidePagePositionEnum, SidePageSizesEnum, StepperClasses, StepperComponent, StepperModule, SwitchComponent, SwitchModule, SwitchSizeEnum, SwitchTypeEnum, TabComponent, TableComponent, TableModule, TableTypeEnum, TabsClasses, TabsGroupComponent, TabsModule, TabsTypesClasses, Timezone$1 as Timezone, ToasterPosition, ToasterService, ToasterServiceModule, ToasterType, Tooltip, TooltipComponent, TooltipModule, TooltipService, TooltipTextPositionEnum, TooltipTriggerComponent, TooltipTriggerEnum, TruncateDirective, TruncateDirectiveModule, TruncateModule, TruncatePipe, TruncateTextComponent, TruncateTextModule, ValidationMethodsEnum, ValidationOptionsEnum, ValidationTypesEnum, WarningMessageComponent, WarningMessageModule, WidgetWrapperComponent, WidgetWrapperModule, convertBase64ToFile, countryData, dateTimeFormat, defaultConfig, defaultCustomConfig, formatBytes, formattingDateRange, formattingIsoToString, getBase64FromUrl, getHashCode, innerListToList, sHashCode, sliceDate, toBytes, toDate, toNumberFormat, toastrDefaultConfig, wordForm };
20203
+ export { AlertColorClasses, AlertComponent, AlertIconClasses, AlertModule, AutoSaveStore, BadgeColorClassesEnum, BadgeComponent, BadgeGroupComponent, BadgeSizeEnum, BadgeTagTypeClassesEnum, BadgeTargetTypesEnum, BadgeTypeEnum, BadgesModule, BreadcrumbsComponent, BreadcrumbsModule, BreadcrumbsTypeEnum, ButtonColorsEnum, ButtonComponent, ButtonIconPositionEnum, ButtonModule, ButtonSizesEnum, ButtonTypesEnum, CdkTooltipDirective, CdkTooltipModule, CharsLeftComponent, CharsLeftModule, CheckboxComponent, CheckboxGroupComponent, CheckboxGroupModule, CheckboxModule, CodeEditorComponent, CodeEditorModule, CodeEditorOptions, ColumnComponent, ContentTitleWrapperComponent, ContentTitleWrapperModule, ContentWrapperComponent, ContentWrapperModule, ContentWrapperTypeEnum, ControlsItemComponent, ControlsVisibilityEnum, ControlsWrapperComponent, ControlsWrapperModule, CountriesISO, CountriesRusLabel, CountryISO, CurrencyModule, CurrencyPipe, DateFormatModule, DateFormatPipe, DateTimeFormatPipe, DefaultPagerSettings, DropdownComponent, DropdownModule, EditorComponent, EditorModule, ErrorMessageComponent, ErrorMessageModule, FileUploadService, FormulaEditorComponent, FormulaEditorModule, GalleryComponent, GalleryModule, HideAfterClickDirective, HintErrorMessageComponent, HintErrorMessageModule, IconButtonComponent, IconButtonModule, IconButtonSizeEnum, IconButtonStateEnum, IconButtonTypeEnum, InputDateComponent, InputDateModule, InputDateTimeComponent, InputDateTimeModule, InputDateTimeSizesEnum, InputDatepickerComponent, InputDatepickerModule, InputDatepickerSizesEnum, InputEditorModeEnum, InputFileComponent, InputFileImageComponent, InputFileImageModule, InputFileImageTypeEnum, InputFileModule, InputNumberComponent, InputNumberModule, InputNumberSizesEnum, InputOptComponent, InputOptModule, InputPasswordComponent, InputPasswordModule, InputPasswordSizesEnum, InputPhoneComponent, InputPhoneModule, InputSearchComponent, InputSearchModule, InputSearchSizesEnum, InputSelectComponent, InputSelectModule, InputSelectSizeEnum, InputTelComponent, InputTelModule, InputTelSizesEnum, InputTextComponent, InputTextIconColorEnum, InputTextModule, InputTextSizesEnum, InputTextareaComponent, InputTextareaModule, InputTextareaSizesEnum, InputTimepickerComponent, InputTimepickerModule, JsonEditorComponent, JsonEditorModule, JsonEditorOptions, LabelComponent, LabelModule, LinkComponent, LinkModule, LinkSizesEnum, LinkTargetTypesEnum, LinkTypesEnum, LoaderColorEnum, LoaderComponent, LoaderModule, LoaderSizesEnum, MODAL_CONFIG, MODAL_DATA, ModalAlignButtonsEnum, ModalBackdropTypeClasses, ModalColorEnum, ModalComponent, ModalModule, ModalRef, ModalService, ModalServiceComponent, ModalServiceModule, ModalSizesEnum, ModalType, ModalTypeClasses, MrxFormValidator, NgxOtpBehavior, NotificationService, NotifyComponent, NotifyPosition, NotifyType, PagesNavComponent, PagesNavEnum, PagesNavModule, PaginatorComponent, PaginatorModule, PaginatorPositionCss, PdfViewerComponent, PdfViewerComponentModule, PhoneFormatModule, PhoneFormatPipe, PopupComponent, PopupItemComponent, PopupModule, PopupTriggerDirective, PositionEnum, PositionStrategyEnum, PreviewEnum, ProgressClasses, ProgressComponent, ProgressModule, RadioComponent, RadioGroupComponent, RadioGroupModule, RadioModule, RadioTypesEnum, RatingComponent, RatingModule, RatingSizesEnum, RatingValueSizesEnum, RatingWrapperSizesEnum, SafeModule, SafePipe, SaveStateComponent, SaveStateModule, SelectComponent, SelectModule, SelectSizeEnum, SidePageComponent, SidePageHeaderSizesEnum, SidePageModule, SidePagePositionEnum, SidePageSizesEnum, StepperClasses, StepperComponent, StepperModule, SwitchComponent, SwitchModule, SwitchSizeEnum, SwitchTypeEnum, TabComponent, TableComponent, TableModule, TableTypeEnum, TabsClasses, TabsGroupComponent, TabsModule, TabsTypesClasses, Timezone$1 as Timezone, ToasterPosition, ToasterService, ToasterServiceModule, ToasterType, Tooltip, TooltipComponent, TooltipModule, TooltipService, TooltipTextPositionEnum, TooltipTriggerComponent, TooltipTriggerEnum, TruncateDirective, TruncateDirectiveModule, TruncateModule, TruncatePipe, TruncateTextComponent, TruncateTextModule, ValidationMethodsEnum, ValidationOptionsEnum, ValidationTypesEnum, WarningMessageComponent, WarningMessageModule, WidgetWrapperComponent, WidgetWrapperModule, convertBase64ToFile, countryData, dateTimeFormat, defaultConfig, defaultCustomConfig, formatBytes, formattingDateRange, formattingIsoToString, getBase64FromUrl, getHashCode, innerListToList, sHashCode, sliceDate, toBytes, toDate, toNumberFormat, toastrDefaultConfig, wordForm };
20053
20204
  //# sourceMappingURL=myrta-ui.mjs.map