@nova-design-system/nova-angular 3.14.0 → 3.15.0

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.
@@ -2,6 +2,7 @@ import { APP_INITIALIZER, NgModule } from '@angular/core';
2
2
  import { defineCustomElements } from '@nova-design-system/nova-webcomponents/loader';
3
3
  import { DIRECTIVES } from './stencil-generated';
4
4
  import { VALUE_ACCESSORS } from './stencil-generated/component-value-accessors';
5
+ import { NotificationServiceComponent } from './providers';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "./stencil-generated/components";
7
8
  import * as i2 from "./stencil-generated/component-value-accessors";
@@ -19,7 +20,7 @@ export function provideNovaComponents() {
19
20
  }
20
21
  export class NovaComponentsModule {
21
22
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
22
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule, declarations: [i1.NvAccordion, i1.NvAccordionItem, i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvButtongroup, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridcolumn, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvFieldcheckbox, i1.NvFielddate, i1.NvFielddaterange, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, i1.NvFieldslider, i1.NvFieldtext, i1.NvFieldtextarea, i1.NvFieldtime, i1.NvIcon, i1.NvIconbutton, i1.NvLoader, i1.NvMenu, i1.NvMenuitem, i1.NvNotification, i1.NvPopover, i1.NvRow, i1.NvStack, i1.NvTable, i1.NvTablecolumn, i1.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip], exports: [i1.NvAccordion, i1.NvAccordionItem, i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvButtongroup, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridcolumn, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvFieldcheckbox, i1.NvFielddate, i1.NvFielddaterange, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, i1.NvFieldslider, i1.NvFieldtext, i1.NvFieldtextarea, i1.NvFieldtime, i1.NvIcon, i1.NvIconbutton, i1.NvLoader, i1.NvMenu, i1.NvMenuitem, i1.NvNotification, i1.NvPopover, i1.NvRow, i1.NvStack, i1.NvTable, i1.NvTablecolumn, i1.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip] }); }
23
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule, declarations: [i1.NvAccordion, i1.NvAccordionItem, i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvButtongroup, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridcolumn, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvFieldcheckbox, i1.NvFielddate, i1.NvFielddaterange, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, i1.NvFieldslider, i1.NvFieldtext, i1.NvFieldtextarea, i1.NvFieldtime, i1.NvIcon, i1.NvIconbutton, i1.NvLoader, i1.NvMenu, i1.NvMenuitem, i1.NvNotification, i1.NvNotificationcontainer, i1.NvPopover, i1.NvRow, i1.NvStack, i1.NvTable, i1.NvTablecolumn, i1.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip], exports: [i1.NvAccordion, i1.NvAccordionItem, i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvButtongroup, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridcolumn, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvFieldcheckbox, i1.NvFielddate, i1.NvFielddaterange, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, i1.NvFieldslider, i1.NvFieldtext, i1.NvFieldtextarea, i1.NvFieldtime, i1.NvIcon, i1.NvIconbutton, i1.NvLoader, i1.NvMenu, i1.NvMenuitem, i1.NvNotification, i1.NvNotificationcontainer, i1.NvPopover, i1.NvRow, i1.NvStack, i1.NvTable, i1.NvTablecolumn, i1.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip] }); }
23
24
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule }); }
24
25
  }
25
26
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule, decorators: [{
@@ -41,4 +42,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
41
42
  exports: [...VALUE_ACCESSORS],
42
43
  }]
43
44
  }] });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm92YS1jb21wb25lbnRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25vdmEtY29tcG9uZW50cy9zcmMvbGliL25vdmEtY29tcG9uZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXJGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0NBQStDLENBQUM7Ozs7QUFFaEY7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxxQkFBcUI7SUFDbkMsT0FBTztRQUNMLE9BQU8sRUFBRSxlQUFlO1FBQ3hCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxvQkFBb0I7UUFDdEMsS0FBSyxFQUFFLElBQUk7S0FDWixDQUFDO0FBQ0osQ0FBQztBQU1ELE1BQU0sT0FBTyxvQkFBb0I7OEdBQXBCLG9CQUFvQjsrR0FBcEIsb0JBQW9COytHQUFwQixvQkFBb0I7OzJGQUFwQixvQkFBb0I7a0JBSmhDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7b0JBQzdCLE9BQU8sRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDO2lCQUN6Qjs7QUFPRCxNQUFNLE9BQU8saUNBQWlDOzhHQUFqQyxpQ0FBaUM7K0dBQWpDLGlDQUFpQzsrR0FBakMsaUNBQWlDOzsyRkFBakMsaUNBQWlDO2tCQUo3QyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDO29CQUNsQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQztpQkFDOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUFBfSU5JVElBTElaRVIsIE5nTW9kdWxlLCB0eXBlIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkZWZpbmVDdXN0b21FbGVtZW50cyB9IGZyb20gJ0Bub3ZhLWRlc2lnbi1zeXN0ZW0vbm92YS13ZWJjb21wb25lbnRzL2xvYWRlcic7XG5cbmltcG9ydCB7IERJUkVDVElWRVMgfSBmcm9tICcuL3N0ZW5jaWwtZ2VuZXJhdGVkJztcbmltcG9ydCB7IFZBTFVFX0FDQ0VTU09SUyB9IGZyb20gJy4vc3RlbmNpbC1nZW5lcmF0ZWQvY29tcG9uZW50LXZhbHVlLWFjY2Vzc29ycyc7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSB0aGUgTm92YSBDb21wb25lbnRzXG4gKlxuICogQHJldHVybnMge1Byb3ZpZGVyfSAtIFRoZSBwcm92aWRlciB0byBiZSB1c2VkIGZvciBub3ZhIGNvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVOb3ZhQ29tcG9uZW50cygpOiBQcm92aWRlciB7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgIHVzZUZhY3Rvcnk6ICgpID0+IGRlZmluZUN1c3RvbUVsZW1lbnRzLFxuICAgIG11bHRpOiB0cnVlLFxuICB9O1xufVxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFsuLi5ESVJFQ1RJVkVTXSxcbiAgZXhwb3J0czogWy4uLkRJUkVDVElWRVNdLFxufSlcbmV4cG9ydCBjbGFzcyBOb3ZhQ29tcG9uZW50c01vZHVsZSB7fVxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFsuLi5WQUxVRV9BQ0NFU1NPUlNdLFxuICBleHBvcnRzOiBbLi4uVkFMVUVfQUNDRVNTT1JTXSxcbn0pXG5leHBvcnQgY2xhc3MgTm92YUNvbXBvbmVudHNWYWx1ZUFjY2Vzc29yTW9kdWxlIHt9XG4iXX0=
45
+ export class NovaComponentsProvidersModule {
46
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsProvidersModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
47
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsProvidersModule, imports: [NotificationServiceComponent], exports: [NotificationServiceComponent] }); }
48
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsProvidersModule, imports: [NotificationServiceComponent] }); }
49
+ }
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsProvidersModule, decorators: [{
51
+ type: NgModule,
52
+ args: [{
53
+ imports: [NotificationServiceComponent],
54
+ exports: [NotificationServiceComponent],
55
+ }]
56
+ }] });
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm92YS1jb21wb25lbnRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25vdmEtY29tcG9uZW50cy9zcmMvbGliL25vdmEtY29tcG9uZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXJGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDaEYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7O0FBRTNEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCO0lBQ25DLE9BQU87UUFDTCxPQUFPLEVBQUUsZUFBZTtRQUN4QixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsb0JBQW9CO1FBQ3RDLEtBQUssRUFBRSxJQUFJO0tBQ1osQ0FBQztBQUNKLENBQUM7QUFNRCxNQUFNLE9BQU8sb0JBQW9COzhHQUFwQixvQkFBb0I7K0dBQXBCLG9CQUFvQjsrR0FBcEIsb0JBQW9COzsyRkFBcEIsb0JBQW9CO2tCQUpoQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDO29CQUM3QixPQUFPLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztpQkFDekI7O0FBT0QsTUFBTSxPQUFPLGlDQUFpQzs4R0FBakMsaUNBQWlDOytHQUFqQyxpQ0FBaUM7K0dBQWpDLGlDQUFpQzs7MkZBQWpDLGlDQUFpQztrQkFKN0MsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQztvQkFDbEMsT0FBTyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUM7aUJBQzlCOztBQU9ELE1BQU0sT0FBTyw2QkFBNkI7OEdBQTdCLDZCQUE2QjsrR0FBN0IsNkJBQTZCLFlBSDlCLDRCQUE0QixhQUM1Qiw0QkFBNEI7K0dBRTNCLDZCQUE2QixZQUg5Qiw0QkFBNEI7OzJGQUczQiw2QkFBNkI7a0JBSnpDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsNEJBQTRCLENBQUM7b0JBQ3ZDLE9BQU8sRUFBRSxDQUFDLDRCQUE0QixDQUFDO2lCQUN4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgTmdNb2R1bGUsIHR5cGUgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlZmluZUN1c3RvbUVsZW1lbnRzIH0gZnJvbSAnQG5vdmEtZGVzaWduLXN5c3RlbS9ub3ZhLXdlYmNvbXBvbmVudHMvbG9hZGVyJztcblxuaW1wb3J0IHsgRElSRUNUSVZFUyB9IGZyb20gJy4vc3RlbmNpbC1nZW5lcmF0ZWQnO1xuaW1wb3J0IHsgVkFMVUVfQUNDRVNTT1JTIH0gZnJvbSAnLi9zdGVuY2lsLWdlbmVyYXRlZC9jb21wb25lbnQtdmFsdWUtYWNjZXNzb3JzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2VDb21wb25lbnQgfSBmcm9tICcuL3Byb3ZpZGVycyc7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSB0aGUgTm92YSBDb21wb25lbnRzXG4gKlxuICogQHJldHVybnMge1Byb3ZpZGVyfSAtIFRoZSBwcm92aWRlciB0byBiZSB1c2VkIGZvciBub3ZhIGNvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVOb3ZhQ29tcG9uZW50cygpOiBQcm92aWRlciB7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgIHVzZUZhY3Rvcnk6ICgpID0+IGRlZmluZUN1c3RvbUVsZW1lbnRzLFxuICAgIG11bHRpOiB0cnVlLFxuICB9O1xufVxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFsuLi5ESVJFQ1RJVkVTXSxcbiAgZXhwb3J0czogWy4uLkRJUkVDVElWRVNdLFxufSlcbmV4cG9ydCBjbGFzcyBOb3ZhQ29tcG9uZW50c01vZHVsZSB7fVxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFsuLi5WQUxVRV9BQ0NFU1NPUlNdLFxuICBleHBvcnRzOiBbLi4uVkFMVUVfQUNDRVNTT1JTXSxcbn0pXG5leHBvcnQgY2xhc3MgTm92YUNvbXBvbmVudHNWYWx1ZUFjY2Vzc29yTW9kdWxlIHt9XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtOb3RpZmljYXRpb25TZXJ2aWNlQ29tcG9uZW50XSxcbiAgZXhwb3J0czogW05vdGlmaWNhdGlvblNlcnZpY2VDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBOb3ZhQ29tcG9uZW50c1Byb3ZpZGVyc01vZHVsZSB7fVxuIl19
@@ -0,0 +1,3 @@
1
+ export * from './notification.service';
2
+ export * from './notification-service.component';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ub3ZhLWNvbXBvbmVudHMvc3JjL2xpYi9wcm92aWRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGtDQUFrQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ub3RpZmljYXRpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbi1zZXJ2aWNlLmNvbXBvbmVudCc7XG4iXX0=
@@ -0,0 +1,183 @@
1
+ import { Component, Input, ViewChildren, ElementRef, CUSTOM_ELEMENTS_SCHEMA, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./notification.service";
5
+ import * as i2 from "@angular/common";
6
+ /**
7
+ * Angular component that renders the notification container with active notifications.
8
+ */
9
+ export class NotificationServiceComponent {
10
+ constructor(notificationService) {
11
+ this.notificationService = notificationService;
12
+ /**
13
+ * Array of active notifications.
14
+ */
15
+ this.notifications = [];
16
+ }
17
+ /**
18
+ * Component initialization.
19
+ */
20
+ ngOnInit() {
21
+ // Use service config if no input provided
22
+ this.position ??= this.notificationService.config.position;
23
+ this.className ??= this.notificationService.config.className;
24
+ // Subscribe to notification changes
25
+ this.subscription = this.notificationService.notifications$.subscribe((list) => (this.notifications = list));
26
+ }
27
+ /**
28
+ * Synchronize notification elements/refs with the service.
29
+ */
30
+ ngAfterViewInit() {
31
+ const sync = () => {
32
+ this.notificationService.clearRefs();
33
+ for (const elRef of this.notificationEls.toArray()) {
34
+ const el = elRef.nativeElement;
35
+ const id = el.getAttribute('data-id');
36
+ if (id)
37
+ this.notificationService.registerRef(id, el);
38
+ }
39
+ };
40
+ sync();
41
+ this.notificationEls.changes.subscribe(sync);
42
+ }
43
+ /**
44
+ * Component cleanup.
45
+ */
46
+ ngOnDestroy() {
47
+ this.subscription?.unsubscribe();
48
+ this.notificationService.clearRefs();
49
+ }
50
+ /**
51
+ * Track function for ngFor to optimize rendering.
52
+ *
53
+ * @param {number} index The index of the item
54
+ * @param {Notification} notification The notification item
55
+ * @returns {string} The notification ID
56
+ */
57
+ trackByNotificationId(index, notification) {
58
+ return notification.id;
59
+ }
60
+ /**
61
+ * Handle notification hidden state change.
62
+ *
63
+ * @param {CustomEvent<boolean>} event The hidden changed event
64
+ * @param {string} id The notification ID
65
+ */
66
+ handleHiddenChanged(event, id) {
67
+ if (event.detail && id) {
68
+ this.notificationService.remove(id);
69
+ }
70
+ }
71
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NotificationServiceComponent, deps: [{ token: i1.NotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
72
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: NotificationServiceComponent, isStandalone: true, selector: "nv-notification-service", inputs: { position: "position", className: "className" }, viewQueries: [{ propertyName: "notificationEls", predicate: ["notificationEl"], descendants: true, read: ElementRef }], ngImport: i0, template: `
73
+ <nv-notificationcontainer
74
+ [position]="position"
75
+ [class]="className"
76
+ data-testid="notification-container"
77
+ >
78
+ <nv-notification
79
+ *ngFor="
80
+ let notification of notifications;
81
+ trackBy: trackByNotificationId
82
+ "
83
+ #notificationEl
84
+ [attr.data-id]="notification.id"
85
+ [heading]="notification.heading"
86
+ [message]="notification.message"
87
+ [dismissible]="notification.dismissible"
88
+ [emphasis]="notification.emphasis"
89
+ [feedback]="notification.feedback"
90
+ [icon]="notification.icon"
91
+ [initiallyHidden]="true"
92
+ (hiddenChanged)="handleHiddenChanged($event, notification.id)"
93
+ >
94
+ <!-- Actions slot content for the custom element -->
95
+ <div
96
+ slot="actions"
97
+ class="flex gap-2"
98
+ *ngIf="notification.actions?.length || notification.actionSlot"
99
+ >
100
+ <!-- Config-driven actions -->
101
+ <nv-button
102
+ *ngFor="let action of notification.actions"
103
+ emphasis="low"
104
+ size="sm"
105
+ (click)="action.onClick()"
106
+ >
107
+ {{ action.label }}
108
+ </nv-button>
109
+
110
+ <!-- Component-driven actions -->
111
+ <ng-container
112
+ *ngIf="notification.actionSlot"
113
+ [ngComponentOutlet]="notification.actionSlot"
114
+ ></ng-container>
115
+ </div>
116
+ </nv-notification>
117
+ </nv-notificationcontainer>
118
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
119
+ }
120
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NotificationServiceComponent, decorators: [{
121
+ type: Component,
122
+ args: [{
123
+ selector: 'nv-notification-service',
124
+ standalone: true,
125
+ imports: [CommonModule],
126
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
127
+ template: `
128
+ <nv-notificationcontainer
129
+ [position]="position"
130
+ [class]="className"
131
+ data-testid="notification-container"
132
+ >
133
+ <nv-notification
134
+ *ngFor="
135
+ let notification of notifications;
136
+ trackBy: trackByNotificationId
137
+ "
138
+ #notificationEl
139
+ [attr.data-id]="notification.id"
140
+ [heading]="notification.heading"
141
+ [message]="notification.message"
142
+ [dismissible]="notification.dismissible"
143
+ [emphasis]="notification.emphasis"
144
+ [feedback]="notification.feedback"
145
+ [icon]="notification.icon"
146
+ [initiallyHidden]="true"
147
+ (hiddenChanged)="handleHiddenChanged($event, notification.id)"
148
+ >
149
+ <!-- Actions slot content for the custom element -->
150
+ <div
151
+ slot="actions"
152
+ class="flex gap-2"
153
+ *ngIf="notification.actions?.length || notification.actionSlot"
154
+ >
155
+ <!-- Config-driven actions -->
156
+ <nv-button
157
+ *ngFor="let action of notification.actions"
158
+ emphasis="low"
159
+ size="sm"
160
+ (click)="action.onClick()"
161
+ >
162
+ {{ action.label }}
163
+ </nv-button>
164
+
165
+ <!-- Component-driven actions -->
166
+ <ng-container
167
+ *ngIf="notification.actionSlot"
168
+ [ngComponentOutlet]="notification.actionSlot"
169
+ ></ng-container>
170
+ </div>
171
+ </nv-notification>
172
+ </nv-notificationcontainer>
173
+ `,
174
+ }]
175
+ }], ctorParameters: () => [{ type: i1.NotificationService }], propDecorators: { position: [{
176
+ type: Input
177
+ }], className: [{
178
+ type: Input
179
+ }], notificationEls: [{
180
+ type: ViewChildren,
181
+ args: ['notificationEl', { read: ElementRef }]
182
+ }] } });
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXNlcnZpY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92YS1jb21wb25lbnRzL3NyYy9saWIvcHJvdmlkZXJzL25vdGlmaWNhdGlvbi1zZXJ2aWNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCxZQUFZLEVBQ1osVUFBVSxFQUVWLHNCQUFzQixHQUN2QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFLL0M7O0dBRUc7QUFzREgsTUFBTSxPQUFPLDRCQUE0QjtJQXdCdkMsWUFBb0IsbUJBQXdDO1FBQXhDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFiNUQ7O1dBRUc7UUFDSCxrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFVNEIsQ0FBQztJQUVoRTs7T0FFRztJQUNILFFBQVE7UUFDTiwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBRTdELG9DQUFvQztRQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUNuRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxDQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZTtRQUNiLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRTtZQUNoQixJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7Z0JBQy9CLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3RDLElBQUksRUFBRTtvQkFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxFQUFFLENBQUM7UUFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxxQkFBcUIsQ0FBQyxLQUFhLEVBQUUsWUFBMEI7UUFDN0QsT0FBTyxZQUFZLENBQUMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILG1CQUFtQixDQUFDLEtBQTJCLEVBQUUsRUFBVztRQUMxRCxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQzs4R0FyRlUsNEJBQTRCO2tHQUE1Qiw0QkFBNEIsOE5BbUJDLFVBQVUsNkJBbkV4Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThDVCwyREFoRFMsWUFBWTs7MkZBa0RYLDRCQUE0QjtrQkFyRHhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThDVDtpQkFDRjt3RkFLVSxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBV0UsZUFBZTtzQkFEdEIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBRdWVyeUxpc3QsXG4gIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuLy8gaW1wb3J0IHsgTm92YUNvbXBvbmVudHNNb2R1bGUgfSBmcm9tICcuLi9ub3ZhLWNvbXBvbmVudHMubW9kdWxlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UsIHR5cGUgTm90aWZpY2F0aW9uIH0gZnJvbSAnLi9ub3RpZmljYXRpb24uc2VydmljZSc7XG5cbi8qKlxuICogQW5ndWxhciBjb21wb25lbnQgdGhhdCByZW5kZXJzIHRoZSBub3RpZmljYXRpb24gY29udGFpbmVyIHdpdGggYWN0aXZlIG5vdGlmaWNhdGlvbnMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ252LW5vdGlmaWNhdGlvbi1zZXJ2aWNlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bnYtbm90aWZpY2F0aW9uY29udGFpbmVyXG4gICAgICBbcG9zaXRpb25dPVwicG9zaXRpb25cIlxuICAgICAgW2NsYXNzXT1cImNsYXNzTmFtZVwiXG4gICAgICBkYXRhLXRlc3RpZD1cIm5vdGlmaWNhdGlvbi1jb250YWluZXJcIlxuICAgID5cbiAgICAgIDxudi1ub3RpZmljYXRpb25cbiAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgbGV0IG5vdGlmaWNhdGlvbiBvZiBub3RpZmljYXRpb25zO1xuICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlOb3RpZmljYXRpb25JZFxuICAgICAgICBcIlxuICAgICAgICAjbm90aWZpY2F0aW9uRWxcbiAgICAgICAgW2F0dHIuZGF0YS1pZF09XCJub3RpZmljYXRpb24uaWRcIlxuICAgICAgICBbaGVhZGluZ109XCJub3RpZmljYXRpb24uaGVhZGluZ1wiXG4gICAgICAgIFttZXNzYWdlXT1cIm5vdGlmaWNhdGlvbi5tZXNzYWdlXCJcbiAgICAgICAgW2Rpc21pc3NpYmxlXT1cIm5vdGlmaWNhdGlvbi5kaXNtaXNzaWJsZVwiXG4gICAgICAgIFtlbXBoYXNpc109XCJub3RpZmljYXRpb24uZW1waGFzaXNcIlxuICAgICAgICBbZmVlZGJhY2tdPVwibm90aWZpY2F0aW9uLmZlZWRiYWNrXCJcbiAgICAgICAgW2ljb25dPVwibm90aWZpY2F0aW9uLmljb25cIlxuICAgICAgICBbaW5pdGlhbGx5SGlkZGVuXT1cInRydWVcIlxuICAgICAgICAoaGlkZGVuQ2hhbmdlZCk9XCJoYW5kbGVIaWRkZW5DaGFuZ2VkKCRldmVudCwgbm90aWZpY2F0aW9uLmlkKVwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gQWN0aW9ucyBzbG90IGNvbnRlbnQgZm9yIHRoZSBjdXN0b20gZWxlbWVudCAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHNsb3Q9XCJhY3Rpb25zXCJcbiAgICAgICAgICBjbGFzcz1cImZsZXggZ2FwLTJcIlxuICAgICAgICAgICpuZ0lmPVwibm90aWZpY2F0aW9uLmFjdGlvbnM/Lmxlbmd0aCB8fCBub3RpZmljYXRpb24uYWN0aW9uU2xvdFwiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIENvbmZpZy1kcml2ZW4gYWN0aW9ucyAtLT5cbiAgICAgICAgICA8bnYtYnV0dG9uXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIG5vdGlmaWNhdGlvbi5hY3Rpb25zXCJcbiAgICAgICAgICAgIGVtcGhhc2lzPVwibG93XCJcbiAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uLm9uQ2xpY2soKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgYWN0aW9uLmxhYmVsIH19XG4gICAgICAgICAgPC9udi1idXR0b24+XG5cbiAgICAgICAgICA8IS0tIENvbXBvbmVudC1kcml2ZW4gYWN0aW9ucyAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cIm5vdGlmaWNhdGlvbi5hY3Rpb25TbG90XCJcbiAgICAgICAgICAgIFtuZ0NvbXBvbmVudE91dGxldF09XCJub3RpZmljYXRpb24uYWN0aW9uU2xvdFwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbnYtbm90aWZpY2F0aW9uPlxuICAgIDwvbnYtbm90aWZpY2F0aW9uY29udGFpbmVyPlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25TZXJ2aWNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogUG9zaXRpb24gb2YgdGhlIG5vdGlmaWNhdGlvbiBjb250YWluZXIgb24gdGhlIHNjcmVlbi5cbiAgICovXG4gIEBJbnB1dCgpIHBvc2l0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIENTUyBjbGFzcyBuYW1lIGZvciB0aGUgbm90aWZpY2F0aW9uIGNvbnRhaW5lci5cbiAgICovXG4gIEBJbnB1dCgpIGNsYXNzTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQXJyYXkgb2YgYWN0aXZlIG5vdGlmaWNhdGlvbnMuXG4gICAqL1xuICBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2VzIHRvIHRoZSBub3RpZmljYXRpb24gZWxlbWVudHMuXG4gICAqL1xuICBAVmlld0NoaWxkcmVuKCdub3RpZmljYXRpb25FbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIG5vdGlmaWNhdGlvbkVscyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxOdk5vdGlmaWNhdGlvbkVsZW1lbnQ+PjtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIENvbXBvbmVudCBpbml0aWFsaXphdGlvbi5cbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFVzZSBzZXJ2aWNlIGNvbmZpZyBpZiBubyBpbnB1dCBwcm92aWRlZFxuICAgIHRoaXMucG9zaXRpb24gPz89IHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5jb25maWcucG9zaXRpb247XG4gICAgdGhpcy5jbGFzc05hbWUgPz89IHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5jb25maWcuY2xhc3NOYW1lO1xuXG4gICAgLy8gU3Vic2NyaWJlIHRvIG5vdGlmaWNhdGlvbiBjaGFuZ2VzXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uubm90aWZpY2F0aW9ucyQuc3Vic2NyaWJlKFxuICAgICAgKGxpc3QpID0+ICh0aGlzLm5vdGlmaWNhdGlvbnMgPSBsaXN0KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmNocm9uaXplIG5vdGlmaWNhdGlvbiBlbGVtZW50cy9yZWZzIHdpdGggdGhlIHNlcnZpY2UuXG4gICAqL1xuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc3Qgc3luYyA9ICgpID0+IHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5jbGVhclJlZnMoKTtcbiAgICAgIGZvciAoY29uc3QgZWxSZWYgb2YgdGhpcy5ub3RpZmljYXRpb25FbHMudG9BcnJheSgpKSB7XG4gICAgICAgIGNvbnN0IGVsID0gZWxSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnKTtcbiAgICAgICAgaWYgKGlkKSB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UucmVnaXN0ZXJSZWYoaWQsIGVsKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHN5bmMoKTtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbkVscy5jaGFuZ2VzLnN1YnNjcmliZShzeW5jKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wb25lbnQgY2xlYW51cC5cbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5jbGVhclJlZnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFjayBmdW5jdGlvbiBmb3IgbmdGb3IgdG8gb3B0aW1pemUgcmVuZGVyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBpdGVtXG4gICAqIEBwYXJhbSB7Tm90aWZpY2F0aW9ufSBub3RpZmljYXRpb24gVGhlIG5vdGlmaWNhdGlvbiBpdGVtXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBub3RpZmljYXRpb24gSURcbiAgICovXG4gIHRyYWNrQnlOb3RpZmljYXRpb25JZChpbmRleDogbnVtYmVyLCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbikge1xuICAgIHJldHVybiBub3RpZmljYXRpb24uaWQ7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIG5vdGlmaWNhdGlvbiBoaWRkZW4gc3RhdGUgY2hhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge0N1c3RvbUV2ZW50PGJvb2xlYW4+fSBldmVudCBUaGUgaGlkZGVuIGNoYW5nZWQgZXZlbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBub3RpZmljYXRpb24gSURcbiAgICovXG4gIGhhbmRsZUhpZGRlbkNoYW5nZWQoZXZlbnQ6IEN1c3RvbUV2ZW50PGJvb2xlYW4+LCBpZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChldmVudC5kZXRhaWwgJiYgaWQpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5yZW1vdmUoaWQpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,134 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Utility function to generate unique IDs.
6
+ *
7
+ * @returns {string} A unique identifier string
8
+ */
9
+ const generateId = () => {
10
+ return `notification-${Date.now()}-${Math.random()
11
+ .toString(36)
12
+ .substr(2, 9)}`;
13
+ };
14
+ /**
15
+ * Angular service for managing notifications.
16
+ */
17
+ export class NotificationService {
18
+ /**
19
+ * Current array of notifications.
20
+ *
21
+ * @returns {Notification[]} Array of active notifications
22
+ */
23
+ get notifications() {
24
+ return this._notifications.value;
25
+ }
26
+ constructor() {
27
+ this._notifications = new BehaviorSubject([]);
28
+ /**
29
+ * Observable stream of active notifications.
30
+ */
31
+ this.notifications$ = this._notifications.asObservable();
32
+ // keep track of all notification refs
33
+ this.elRefs = new Map();
34
+ this._config = {
35
+ position: 'top-right',
36
+ maxNotifications: 50,
37
+ className: '',
38
+ };
39
+ }
40
+ /**
41
+ * Configure the notification service.
42
+ *
43
+ * @param {NotificationServiceConfig} config Configuration options
44
+ */
45
+ configure(config) {
46
+ Object.assign(this._config, config);
47
+ }
48
+ /**
49
+ * Get the current configuration.
50
+ *
51
+ * @returns {Required<NotificationServiceConfig>} Current configuration
52
+ */
53
+ get config() {
54
+ return { ...this._config };
55
+ }
56
+ registerRef(id, el) {
57
+ this.elRefs.set(id, el);
58
+ }
59
+ unregisterRef(id) {
60
+ this.elRefs.delete(id);
61
+ }
62
+ clearRefs() {
63
+ this.elRefs.clear();
64
+ }
65
+ /**
66
+ * Show a new notification.
67
+ *
68
+ * @param {NotificationOptions} options The notification options
69
+ * @returns {string} The notification ID
70
+ */
71
+ show(options) {
72
+ const id = options.id || generateId();
73
+ const notification = {
74
+ id,
75
+ heading: options.heading,
76
+ message: options.message,
77
+ dismissible: options.dismissible ?? true,
78
+ emphasis: options.emphasis ?? 'medium',
79
+ feedback: options.feedback ?? 'information',
80
+ icon: options.icon,
81
+ actions: options.actions ?? [],
82
+ actionSlot: options.actionSlot,
83
+ createdAt: Date.now(),
84
+ };
85
+ const currentNotifications = this._notifications.value;
86
+ // Remove oldest notifications if we exceed max
87
+ const newNotifications = [notification, ...currentNotifications];
88
+ if (newNotifications.length > this._config.maxNotifications) {
89
+ this._notifications.next(newNotifications.slice(0, this._config.maxNotifications));
90
+ }
91
+ else {
92
+ this._notifications.next(newNotifications);
93
+ }
94
+ setTimeout(() => {
95
+ const ref = this.elRefs.get(id);
96
+ ref?.show();
97
+ }, 0);
98
+ return id;
99
+ }
100
+ /**
101
+ * Dismiss a specific notification by ID. This will remove the notification
102
+ * after the animation completes.
103
+ *
104
+ * @param {string} id The notification ID to dismiss
105
+ */
106
+ dismiss(id) {
107
+ this.elRefs.get(id)?.dismiss?.();
108
+ }
109
+ /**
110
+ * Immediately remove a specific notification by ID.
111
+ *
112
+ * @param {string} id The notification ID to dismiss
113
+ */
114
+ remove(id) {
115
+ const currentNotifications = this._notifications.value;
116
+ const filteredNotifications = currentNotifications.filter((notification) => notification.id !== id);
117
+ this._notifications.next(filteredNotifications);
118
+ }
119
+ /**
120
+ * Immediately remove all active notifications.
121
+ */
122
+ removeAll() {
123
+ this._notifications.next([]);
124
+ }
125
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
126
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NotificationService, providedIn: 'root' }); }
127
+ }
128
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NotificationService, decorators: [{
129
+ type: Injectable,
130
+ args: [{
131
+ providedIn: 'root',
132
+ }]
133
+ }], ctorParameters: () => [] });
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ub3ZhLWNvbXBvbmVudHMvc3JjL2xpYi9wcm92aWRlcnMvbm90aWZpY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDOztBQThEbkQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxHQUFHLEdBQVcsRUFBRTtJQUM5QixPQUFPLGdCQUFnQixJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtTQUMvQyxRQUFRLENBQUMsRUFBRSxDQUFDO1NBQ1osTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3BCLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBSUgsTUFBTSxPQUFPLG1CQUFtQjtJQVU5Qjs7OztPQUlHO0lBQ0gsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVEO1FBbEJpQixtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFpQixFQUFFLENBQUMsQ0FBQztRQUcxRTs7V0FFRztRQUNhLG1CQUFjLEdBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFxQ3JDLHNDQUFzQztRQUM5QixXQUFNLEdBQUcsSUFBSSxHQUFHLEVBQXFDLENBQUM7UUExQjVELElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixRQUFRLEVBQUUsV0FBVztZQUNyQixnQkFBZ0IsRUFBRSxFQUFFO1lBQ3BCLFNBQVMsRUFBRSxFQUFFO1NBQ2QsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUyxDQUFDLE1BQWlDO1FBQ3pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksTUFBTTtRQUNSLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBSUQsV0FBVyxDQUFDLEVBQVUsRUFBRSxFQUE2QjtRQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUNELGFBQWEsQ0FBQyxFQUFVO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFDRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUFJLENBQUMsT0FBNEI7UUFDL0IsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUV0QyxNQUFNLFlBQVksR0FBaUI7WUFDakMsRUFBRTtZQUNGLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLElBQUksSUFBSTtZQUN4QyxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsSUFBSSxRQUFRO1lBQ3RDLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLGFBQWE7WUFDM0MsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ2xCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUU7WUFDOUIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1lBQzlCLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO1NBQ3RCLENBQUM7UUFFRixNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO1FBRXZELCtDQUErQztRQUMvQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsWUFBWSxFQUFFLEdBQUcsb0JBQW9CLENBQUMsQ0FBQztRQUNqRSxJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDNUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ3RCLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUN6RCxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFFRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUEwQyxDQUFDO1lBQ3pFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNkLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVOLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUFDLEVBQVU7UUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxFQUFVO1FBQ2YsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQztRQUN2RCxNQUFNLHFCQUFxQixHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FDdkQsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUN6QyxDQUFDO1FBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTO1FBQ1AsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQzs4R0EvSFUsbUJBQW1CO2tIQUFuQixtQkFBbUIsY0FGbEIsTUFBTTs7MkZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIHR5cGUgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBOb3RpZmljYXRpb25FbXBoYXNpcyxcbiAgRmVlZGJhY2tDb2xvcnMsXG59IGZyb20gJ0Bub3ZhLWRlc2lnbi1zeXN0ZW0vbm92YS13ZWJjb21wb25lbnRzJztcblxuLyoqXG4gKiBBY3Rpb24gY2FsbGJhY2tzIGZvciBub3RpZmljYXRpb25zLiBXaWxsIHJlbmRlciBidXR0b25zIGF1dG9tYXRpY2FsbHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uQWN0aW9uIHtcbiAgLyoqIFRoZSBsYWJlbCBvZiB0aGUgYWN0aW9uLiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKiogVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgd2hlbiB0aGUgYWN0aW9uIGlzIGNsaWNrZWQuICovXG4gIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBub3RpZmljYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uT3B0aW9ucyB7XG4gIC8qKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIG5vdGlmaWNhdGlvbi4gSWYgbm90IHByb3ZpZGVkLCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogU2hvcnQgYW5kIGNvbmNpc2UgdGV4dCBmb3IgdGhlIG5vdGlmaWNhdGlvbiBoZWFkaW5nLiAqL1xuICBoZWFkaW5nPzogc3RyaW5nO1xuICAvKiogTWFpbiBjb250ZW50IG9mIHRoZSBub3RpZmljYXRpb24uICovXG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBub3RpZmljYXRpb24gY2FuIGJlIG1hbnVhbGx5IGRpc21pc3NlZCB2aWEgY2xvc2UgYnV0dG9uLiAqL1xuICBkaXNtaXNzaWJsZT86IGJvb2xlYW47XG4gIC8qKiBBZGp1c3RzIHRoZSBlbXBoYXNpcyB0byBtYWtlIHRoZSBub3RpZmljYXRpb24gbW9yZSBvciBsZXNzIHZpc3VhbGx5XG4gICAqIHByb21pbmVudCB0byB1c2Vycy4gVXNlIHRoaXMgdG8gZHJhdyBhdHRlbnRpb24gdG8gaW1wb3J0YW50IGFjdGlvbnMgb3JcbiAgICogcmVkdWNlIGZvY3VzIG9uIGxlc3MgY3JpdGljYWwgb25lcyAqL1xuICBlbXBoYXNpcz86IGAke05vdGlmaWNhdGlvbkVtcGhhc2lzfWA7XG4gIC8qKiBUeXBlIG9mIHRoZSBub3RpZmljYXRpb24sIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBjb2xvciBhbmQgZGVmYXVsdCBpY29uLiAqL1xuICBmZWVkYmFjaz86IGAke0ZlZWRiYWNrQ29sb3JzfWA7XG4gIC8qKiBDdXN0b20gaWNvbiBuYW1lIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGljb24uICovXG4gIGljb24/OiBzdHJpbmc7XG4gIC8qKiBOb3RpZmljYXRpb24gYWN0aW9ucyAqL1xuICBhY3Rpb25zPzogTm90aWZpY2F0aW9uQWN0aW9uW107XG4gIC8qKiBDdXN0b20gY29tcG9uZW50cyBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhY3Rpb25zLiAqL1xuICBhY3Rpb25TbG90PzogVHlwZTx1bmtub3duPjtcbn1cblxuLyoqXG4gKiBBIG5vdGlmaWNhdGlvbiB3aXRoIGFsbCByZXF1aXJlZCBmaWVsZHMgcG9wdWxhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbiBleHRlbmRzIE5vdGlmaWNhdGlvbk9wdGlvbnMge1xuICAvKiogVGltZXN0YW1wIHdoZW4gdGhlIG5vdGlmaWNhdGlvbiB3YXMgY3JlYXRlZC4gKi9cbiAgY3JlYXRlZEF0OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgTm90aWZpY2F0aW9uU2VydmljZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb3RpZmljYXRpb25TZXJ2aWNlQ29uZmlnIHtcbiAgLyoqIFBvc2l0aW9uIG9mIHRoZSBub3RpZmljYXRpb24gY29udGFpbmVyIG9uIHRoZSBzY3JlZW4uICovXG4gIHBvc2l0aW9uPzogc3RyaW5nO1xuICAvKiogTWF4aW11bSBudW1iZXIgb2Ygbm90aWZpY2F0aW9ucyB0byBkaXNwbGF5IGF0IG9uY2UuICovXG4gIG1heE5vdGlmaWNhdGlvbnM/OiBudW1iZXI7XG4gIC8qKiBBZGRpdGlvbmFsIENTUyBjbGFzcyBuYW1lIGZvciB0aGUgbm90aWZpY2F0aW9uIGNvbnRhaW5lci4gKi9cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdW5pcXVlIElEcy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHVuaXF1ZSBpZGVudGlmaWVyIHN0cmluZ1xuICovXG5jb25zdCBnZW5lcmF0ZUlkID0gKCk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBgbm90aWZpY2F0aW9uLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpXG4gICAgLnRvU3RyaW5nKDM2KVxuICAgIC5zdWJzdHIoMiwgOSl9YDtcbn07XG5cbi8qKlxuICogQW5ndWxhciBzZXJ2aWNlIGZvciBtYW5hZ2luZyBub3RpZmljYXRpb25zLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25vdGlmaWNhdGlvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5vdGlmaWNhdGlvbltdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbmZpZzogUmVxdWlyZWQ8Tm90aWZpY2F0aW9uU2VydmljZUNvbmZpZz47XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgc3RyZWFtIG9mIGFjdGl2ZSBub3RpZmljYXRpb25zLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5vdGlmaWNhdGlvbnMkOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvbltdPiA9XG4gICAgdGhpcy5fbm90aWZpY2F0aW9ucy5hc09ic2VydmFibGUoKTtcblxuICAvKipcbiAgICogQ3VycmVudCBhcnJheSBvZiBub3RpZmljYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Tm90aWZpY2F0aW9uW119IEFycmF5IG9mIGFjdGl2ZSBub3RpZmljYXRpb25zXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5vdGlmaWNhdGlvbnMoKTogTm90aWZpY2F0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl9ub3RpZmljYXRpb25zLnZhbHVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fY29uZmlnID0ge1xuICAgICAgcG9zaXRpb246ICd0b3AtcmlnaHQnLFxuICAgICAgbWF4Tm90aWZpY2F0aW9uczogNTAsXG4gICAgICBjbGFzc05hbWU6ICcnLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlIHRoZSBub3RpZmljYXRpb24gc2VydmljZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb3RpZmljYXRpb25TZXJ2aWNlQ29uZmlnfSBjb25maWcgQ29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqL1xuICBjb25maWd1cmUoY29uZmlnOiBOb3RpZmljYXRpb25TZXJ2aWNlQ29uZmlnKTogdm9pZCB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9jb25maWcsIGNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtSZXF1aXJlZDxOb3RpZmljYXRpb25TZXJ2aWNlQ29uZmlnPn0gQ3VycmVudCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBnZXQgY29uZmlnKCk6IFJlcXVpcmVkPE5vdGlmaWNhdGlvblNlcnZpY2VDb25maWc+IHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jb25maWcgfTtcbiAgfVxuXG4gIC8vIGtlZXAgdHJhY2sgb2YgYWxsIG5vdGlmaWNhdGlvbiByZWZzXG4gIHByaXZhdGUgZWxSZWZzID0gbmV3IE1hcDxzdHJpbmcsIEhUTUxOdk5vdGlmaWNhdGlvbkVsZW1lbnQ+KCk7XG4gIHJlZ2lzdGVyUmVmKGlkOiBzdHJpbmcsIGVsOiBIVE1MTnZOb3RpZmljYXRpb25FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5lbFJlZnMuc2V0KGlkLCBlbCk7XG4gIH1cbiAgdW5yZWdpc3RlclJlZihpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5lbFJlZnMuZGVsZXRlKGlkKTtcbiAgfVxuICBjbGVhclJlZnMoKSB7XG4gICAgdGhpcy5lbFJlZnMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IGEgbmV3IG5vdGlmaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtOb3RpZmljYXRpb25PcHRpb25zfSBvcHRpb25zIFRoZSBub3RpZmljYXRpb24gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgbm90aWZpY2F0aW9uIElEXG4gICAqL1xuICBzaG93KG9wdGlvbnM6IE5vdGlmaWNhdGlvbk9wdGlvbnMpOiBzdHJpbmcge1xuICAgIGNvbnN0IGlkID0gb3B0aW9ucy5pZCB8fCBnZW5lcmF0ZUlkKCk7XG5cbiAgICBjb25zdCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbiA9IHtcbiAgICAgIGlkLFxuICAgICAgaGVhZGluZzogb3B0aW9ucy5oZWFkaW5nLFxuICAgICAgbWVzc2FnZTogb3B0aW9ucy5tZXNzYWdlLFxuICAgICAgZGlzbWlzc2libGU6IG9wdGlvbnMuZGlzbWlzc2libGUgPz8gdHJ1ZSxcbiAgICAgIGVtcGhhc2lzOiBvcHRpb25zLmVtcGhhc2lzID8/ICdtZWRpdW0nLFxuICAgICAgZmVlZGJhY2s6IG9wdGlvbnMuZmVlZGJhY2sgPz8gJ2luZm9ybWF0aW9uJyxcbiAgICAgIGljb246IG9wdGlvbnMuaWNvbixcbiAgICAgIGFjdGlvbnM6IG9wdGlvbnMuYWN0aW9ucyA/PyBbXSxcbiAgICAgIGFjdGlvblNsb3Q6IG9wdGlvbnMuYWN0aW9uU2xvdCxcbiAgICAgIGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICB9O1xuXG4gICAgY29uc3QgY3VycmVudE5vdGlmaWNhdGlvbnMgPSB0aGlzLl9ub3RpZmljYXRpb25zLnZhbHVlO1xuXG4gICAgLy8gUmVtb3ZlIG9sZGVzdCBub3RpZmljYXRpb25zIGlmIHdlIGV4Y2VlZCBtYXhcbiAgICBjb25zdCBuZXdOb3RpZmljYXRpb25zID0gW25vdGlmaWNhdGlvbiwgLi4uY3VycmVudE5vdGlmaWNhdGlvbnNdO1xuICAgIGlmIChuZXdOb3RpZmljYXRpb25zLmxlbmd0aCA+IHRoaXMuX2NvbmZpZy5tYXhOb3RpZmljYXRpb25zKSB7XG4gICAgICB0aGlzLl9ub3RpZmljYXRpb25zLm5leHQoXG4gICAgICAgIG5ld05vdGlmaWNhdGlvbnMuc2xpY2UoMCwgdGhpcy5fY29uZmlnLm1heE5vdGlmaWNhdGlvbnMpLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbm90aWZpY2F0aW9ucy5uZXh0KG5ld05vdGlmaWNhdGlvbnMpO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5lbFJlZnMuZ2V0KGlkKSBhcyBIVE1MTnZOb3RpZmljYXRpb25FbGVtZW50IHwgdW5kZWZpbmVkO1xuICAgICAgcmVmPy5zaG93KCk7XG4gICAgfSwgMCk7XG5cbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvKipcbiAgICogRGlzbWlzcyBhIHNwZWNpZmljIG5vdGlmaWNhdGlvbiBieSBJRC4gVGhpcyB3aWxsIHJlbW92ZSB0aGUgbm90aWZpY2F0aW9uXG4gICAqIGFmdGVyIHRoZSBhbmltYXRpb24gY29tcGxldGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIG5vdGlmaWNhdGlvbiBJRCB0byBkaXNtaXNzXG4gICAqL1xuICBkaXNtaXNzKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmVsUmVmcy5nZXQoaWQpPy5kaXNtaXNzPy4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbW1lZGlhdGVseSByZW1vdmUgYSBzcGVjaWZpYyBub3RpZmljYXRpb24gYnkgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgbm90aWZpY2F0aW9uIElEIHRvIGRpc21pc3NcbiAgICovXG4gIHJlbW92ZShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudE5vdGlmaWNhdGlvbnMgPSB0aGlzLl9ub3RpZmljYXRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGZpbHRlcmVkTm90aWZpY2F0aW9ucyA9IGN1cnJlbnROb3RpZmljYXRpb25zLmZpbHRlcihcbiAgICAgIChub3RpZmljYXRpb24pID0+IG5vdGlmaWNhdGlvbi5pZCAhPT0gaWQsXG4gICAgKTtcbiAgICB0aGlzLl9ub3RpZmljYXRpb25zLm5leHQoZmlsdGVyZWROb3RpZmljYXRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbW1lZGlhdGVseSByZW1vdmUgYWxsIGFjdGl2ZSBub3RpZmljYXRpb25zLlxuICAgKi9cbiAgcmVtb3ZlQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuX25vdGlmaWNhdGlvbnMubmV4dChbXSk7XG4gIH1cbn1cbiJdfQ==