@nova-design-system/nova-angular 3.14.0 → 3.16.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.
- package/dist/nova-components/esm2022/lib/components/datatable.utils/flex-render/context.mjs +6 -0
- package/dist/nova-components/esm2022/lib/components/datatable.utils/flex-render/flags.mjs +42 -0
- package/dist/nova-components/esm2022/lib/components/datatable.utils/flex-render/flex-render-component-ref.mjs +171 -0
- package/dist/nova-components/esm2022/lib/components/datatable.utils/flex-render/flex-render-component.mjs +39 -0
- package/dist/nova-components/esm2022/lib/components/datatable.utils/flex-render/view.mjs +101 -0
- package/dist/nova-components/esm2022/lib/components/datatable.utils/flex-render.mjs +211 -0
- package/dist/nova-components/esm2022/lib/components/datatable.utils/index.mjs +49 -0
- package/dist/nova-components/esm2022/lib/components/datatable.utils/lazy-signal-initializer.mjs +43 -0
- package/dist/nova-components/esm2022/lib/components/datatable.utils/proxy.mjs +87 -0
- package/dist/nova-components/esm2022/lib/components/index.mjs +2 -0
- package/dist/nova-components/esm2022/lib/components/nv-datatable.component.mjs +158 -0
- package/dist/nova-components/esm2022/lib/nova-components.module.mjs +20 -5
- package/dist/nova-components/esm2022/lib/providers/index.mjs +3 -0
- package/dist/nova-components/esm2022/lib/providers/notification-service.component.mjs +183 -0
- package/dist/nova-components/esm2022/lib/providers/notification.service.mjs +134 -0
- package/dist/nova-components/esm2022/lib/stencil-generated/component-value-accessors.mjs +37 -1
- package/dist/nova-components/esm2022/lib/stencil-generated/components.mjs +35 -38
- package/dist/nova-components/esm2022/lib/stencil-generated/index.mjs +2 -2
- package/dist/nova-components/esm2022/public-api.mjs +3 -1
- package/dist/nova-components/fesm2022/nova-components.mjs +1280 -44
- package/dist/nova-components/fesm2022/nova-components.mjs.map +1 -1
- package/dist/nova-components/lib/components/datatable.utils/flex-render/context.d.ts +3 -0
- package/dist/nova-components/lib/components/datatable.utils/flex-render/flags.d.ts +40 -0
- package/dist/nova-components/lib/components/datatable.utils/flex-render/flex-render-component-ref.d.ts +39 -0
- package/dist/nova-components/lib/components/datatable.utils/flex-render/flex-render-component.d.ts +60 -0
- package/dist/nova-components/lib/components/datatable.utils/flex-render/view.d.ts +49 -0
- package/dist/nova-components/lib/components/datatable.utils/flex-render.d.ts +26 -0
- package/dist/nova-components/lib/components/datatable.utils/index.d.ts +6 -0
- package/dist/nova-components/lib/components/datatable.utils/lazy-signal-initializer.d.ts +5 -0
- package/dist/nova-components/lib/components/datatable.utils/proxy.d.ts +3 -0
- package/dist/nova-components/lib/components/index.d.ts +1 -0
- package/dist/nova-components/lib/components/nv-datatable.component.d.ts +46 -0
- package/dist/nova-components/lib/nova-components.module.d.ts +10 -3
- package/dist/nova-components/lib/providers/index.d.ts +2 -0
- package/dist/nova-components/lib/providers/notification-service.component.d.ts +56 -0
- package/dist/nova-components/lib/providers/notification.service.d.ts +116 -0
- package/dist/nova-components/lib/stencil-generated/component-value-accessors.d.ts +8 -1
- package/dist/nova-components/lib/stencil-generated/components.d.ts +13 -22
- package/dist/nova-components/lib/stencil-generated/index.d.ts +1 -1
- package/dist/nova-components/public-api.d.ts +2 -0
- package/package.json +2 -1
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
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
|
+
import { NvDatatable } from './components/index';
|
|
4
5
|
import { VALUE_ACCESSORS } from './stencil-generated/component-value-accessors';
|
|
6
|
+
import { NotificationServiceComponent } from './providers';
|
|
5
7
|
import * as i0 from "@angular/core";
|
|
6
8
|
import * as i1 from "./stencil-generated/components";
|
|
7
9
|
import * as i2 from "./stencil-generated/component-value-accessors";
|
|
@@ -19,19 +21,20 @@ export function provideNovaComponents() {
|
|
|
19
21
|
}
|
|
20
22
|
export class NovaComponentsModule {
|
|
21
23
|
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.
|
|
23
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule }); }
|
|
24
|
+
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.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip], imports: [NvDatatable], 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.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip, NvDatatable] }); }
|
|
25
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule, imports: [NvDatatable] }); }
|
|
24
26
|
}
|
|
25
27
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule, decorators: [{
|
|
26
28
|
type: NgModule,
|
|
27
29
|
args: [{
|
|
30
|
+
imports: [NvDatatable],
|
|
28
31
|
declarations: [...DIRECTIVES],
|
|
29
|
-
exports: [...DIRECTIVES],
|
|
32
|
+
exports: [...DIRECTIVES, NvDatatable],
|
|
30
33
|
}]
|
|
31
34
|
}] });
|
|
32
35
|
export class NovaComponentsValueAccessorModule {
|
|
33
36
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsValueAccessorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
34
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsValueAccessorModule, declarations: [i2.NvAlertValueAccessor, i2.NvCalendarValueAccessor, i2.NvDatagridValueAccessor, i2.NvDialogValueAccessor, i2.NvFieldcheckboxValueAccessor, i2.NvFielddateValueAccessor, i2.NvFielddaterangeValueAccessor, i2.NvFielddropdownValueAccessor, i2.NvFieldmultiselectValueAccessor, i2.NvFieldnumberValueAccessor, i2.NvFieldpasswordValueAccessor, i2.NvFieldradioValueAccessor, i2.NvFieldselectValueAccessor, i2.NvFieldsliderValueAccessor, i2.NvFieldtextValueAccessor, i2.NvFieldtextareaValueAccessor, i2.NvNotificationValueAccessor, i2.NvPopoverValueAccessor, i2.NvToggleValueAccessor, i2.NvTogglebuttongroupValueAccessor], exports: [i2.NvAlertValueAccessor, i2.NvCalendarValueAccessor, i2.NvDatagridValueAccessor, i2.NvDialogValueAccessor, i2.NvFieldcheckboxValueAccessor, i2.NvFielddateValueAccessor, i2.NvFielddaterangeValueAccessor, i2.NvFielddropdownValueAccessor, i2.NvFieldmultiselectValueAccessor, i2.NvFieldnumberValueAccessor, i2.NvFieldpasswordValueAccessor, i2.NvFieldradioValueAccessor, i2.NvFieldselectValueAccessor, i2.NvFieldsliderValueAccessor, i2.NvFieldtextValueAccessor, i2.NvFieldtextareaValueAccessor, i2.NvNotificationValueAccessor, i2.NvPopoverValueAccessor, i2.NvToggleValueAccessor, i2.NvTogglebuttongroupValueAccessor] }); }
|
|
37
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsValueAccessorModule, declarations: [i2.NvAccordionValueAccessor, i2.NvAlertValueAccessor, i2.NvCalendarValueAccessor, i2.NvDatagridValueAccessor, i2.NvDialogValueAccessor, i2.NvFieldcheckboxValueAccessor, i2.NvFielddateValueAccessor, i2.NvFielddaterangeValueAccessor, i2.NvFielddropdownValueAccessor, i2.NvFieldmultiselectValueAccessor, i2.NvFieldnumberValueAccessor, i2.NvFieldpasswordValueAccessor, i2.NvFieldradioValueAccessor, i2.NvFieldselectValueAccessor, i2.NvFieldsliderValueAccessor, i2.NvFieldtextValueAccessor, i2.NvFieldtextareaValueAccessor, i2.NvNotificationValueAccessor, i2.NvPopoverValueAccessor, i2.NvToggleValueAccessor, i2.NvTogglebuttongroupValueAccessor], exports: [i2.NvAccordionValueAccessor, i2.NvAlertValueAccessor, i2.NvCalendarValueAccessor, i2.NvDatagridValueAccessor, i2.NvDialogValueAccessor, i2.NvFieldcheckboxValueAccessor, i2.NvFielddateValueAccessor, i2.NvFielddaterangeValueAccessor, i2.NvFielddropdownValueAccessor, i2.NvFieldmultiselectValueAccessor, i2.NvFieldnumberValueAccessor, i2.NvFieldpasswordValueAccessor, i2.NvFieldradioValueAccessor, i2.NvFieldselectValueAccessor, i2.NvFieldsliderValueAccessor, i2.NvFieldtextValueAccessor, i2.NvFieldtextareaValueAccessor, i2.NvNotificationValueAccessor, i2.NvPopoverValueAccessor, i2.NvToggleValueAccessor, i2.NvTogglebuttongroupValueAccessor] }); }
|
|
35
38
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsValueAccessorModule }); }
|
|
36
39
|
}
|
|
37
40
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsValueAccessorModule, decorators: [{
|
|
@@ -41,4 +44,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
41
44
|
exports: [...VALUE_ACCESSORS],
|
|
42
45
|
}]
|
|
43
46
|
}] });
|
|
44
|
-
|
|
47
|
+
export class NovaComponentsProvidersModule {
|
|
48
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsProvidersModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
49
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsProvidersModule, imports: [NotificationServiceComponent], exports: [NotificationServiceComponent] }); }
|
|
50
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsProvidersModule, imports: [NotificationServiceComponent] }); }
|
|
51
|
+
}
|
|
52
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsProvidersModule, decorators: [{
|
|
53
|
+
type: NgModule,
|
|
54
|
+
args: [{
|
|
55
|
+
imports: [NotificationServiceComponent],
|
|
56
|
+
exports: [NotificationServiceComponent],
|
|
57
|
+
}]
|
|
58
|
+
}] });
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm92YS1jb21wb25lbnRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25vdmEtY29tcG9uZW50cy9zcmMvbGliL25vdmEtY29tcG9uZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXJGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7OztBQUUzRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxPQUFPO1FBQ0wsT0FBTyxFQUFFLGVBQWU7UUFDeEIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLG9CQUFvQjtRQUN0QyxLQUFLLEVBQUUsSUFBSTtLQUNaLENBQUM7QUFDSixDQUFDO0FBT0QsTUFBTSxPQUFPLG9CQUFvQjs4R0FBcEIsb0JBQW9COytHQUFwQixvQkFBb0IsdXlCQUpyQixXQUFXLHd4QkFFSSxXQUFXOytHQUV6QixvQkFBb0IsWUFKckIsV0FBVzs7MkZBSVYsb0JBQW9CO2tCQUxoQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztvQkFDdEIsWUFBWSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7b0JBQzdCLE9BQU8sRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLFdBQVcsQ0FBQztpQkFDdEM7O0FBT0QsTUFBTSxPQUFPLGlDQUFpQzs4R0FBakMsaUNBQWlDOytHQUFqQyxpQ0FBaUM7K0dBQWpDLGlDQUFpQzs7MkZBQWpDLGlDQUFpQztrQkFKN0MsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQztvQkFDbEMsT0FBTyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUM7aUJBQzlCOztBQU9ELE1BQU0sT0FBTyw2QkFBNkI7OEdBQTdCLDZCQUE2QjsrR0FBN0IsNkJBQTZCLFlBSDlCLDRCQUE0QixhQUM1Qiw0QkFBNEI7K0dBRTNCLDZCQUE2QixZQUg5Qiw0QkFBNEI7OzJGQUczQiw2QkFBNkI7a0JBSnpDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsNEJBQTRCLENBQUM7b0JBQ3ZDLE9BQU8sRUFBRSxDQUFDLDRCQUE0QixDQUFDO2lCQUN4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgTmdNb2R1bGUsIHR5cGUgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlZmluZUN1c3RvbUVsZW1lbnRzIH0gZnJvbSAnQG5vdmEtZGVzaWduLXN5c3RlbS9ub3ZhLXdlYmNvbXBvbmVudHMvbG9hZGVyJztcblxuaW1wb3J0IHsgRElSRUNUSVZFUyB9IGZyb20gJy4vc3RlbmNpbC1nZW5lcmF0ZWQnO1xuaW1wb3J0IHsgTnZEYXRhdGFibGUgfSBmcm9tICcuL2NvbXBvbmVudHMvaW5kZXgnO1xuaW1wb3J0IHsgVkFMVUVfQUNDRVNTT1JTIH0gZnJvbSAnLi9zdGVuY2lsLWdlbmVyYXRlZC9jb21wb25lbnQtdmFsdWUtYWNjZXNzb3JzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2VDb21wb25lbnQgfSBmcm9tICcuL3Byb3ZpZGVycyc7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSB0aGUgTm92YSBDb21wb25lbnRzXG4gKlxuICogQHJldHVybnMge1Byb3ZpZGVyfSAtIFRoZSBwcm92aWRlciB0byBiZSB1c2VkIGZvciBub3ZhIGNvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVOb3ZhQ29tcG9uZW50cygpOiBQcm92aWRlciB7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgIHVzZUZhY3Rvcnk6ICgpID0+IGRlZmluZUN1c3RvbUVsZW1lbnRzLFxuICAgIG11bHRpOiB0cnVlLFxuICB9O1xufVxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbTnZEYXRhdGFibGVdLFxuICBkZWNsYXJhdGlvbnM6IFsuLi5ESVJFQ1RJVkVTXSxcbiAgZXhwb3J0czogWy4uLkRJUkVDVElWRVMsIE52RGF0YXRhYmxlXSxcbn0pXG5leHBvcnQgY2xhc3MgTm92YUNvbXBvbmVudHNNb2R1bGUge31cblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbLi4uVkFMVUVfQUNDRVNTT1JTXSxcbiAgZXhwb3J0czogWy4uLlZBTFVFX0FDQ0VTU09SU10sXG59KVxuZXhwb3J0IGNsYXNzIE5vdmFDb21wb25lbnRzVmFsdWVBY2Nlc3Nvck1vZHVsZSB7fVxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbTm90aWZpY2F0aW9uU2VydmljZUNvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtOb3RpZmljYXRpb25TZXJ2aWNlQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgTm92YUNvbXBvbmVudHNQcm92aWRlcnNNb2R1bGUge31cbiJdfQ==
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ub3ZhLWNvbXBvbmVudHMvc3JjL2xpYi9wcm92aWRlcnMvbm90aWZpY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDOztBQThEbkQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxHQUFHLEdBQVcsRUFBRTtJQUM5QixPQUFPLGdCQUFnQixJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtTQUMvQyxRQUFRLENBQUMsRUFBRSxDQUFDO1NBQ1osTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3BCLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBSUgsTUFBTSxPQUFPLG1CQUFtQjtJQVU5Qjs7OztPQUlHO0lBQ0gsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVEO1FBbEJpQixtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFpQixFQUFFLENBQUMsQ0FBQztRQUcxRTs7V0FFRztRQUNhLG1CQUFjLEdBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFxQ3JDLHNDQUFzQztRQUM5QixXQUFNLEdBQUcsSUFBSSxHQUFHLEVBQXFDLENBQUM7UUExQjVELElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixRQUFRLEVBQUUsV0FBVztZQUNyQixnQkFBZ0IsRUFBRSxFQUFFO1lBQ3BCLFNBQVMsRUFBRSxFQUFFO1NBQ2QsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUyxDQUFDLE1BQWlDO1FBQ3pDLE1BQU0sQ0FB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SUFDSCxTQUFTO1FBQ1AsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQzs4R0EvSFUsbUJBQW1CO2tIQUFuQixtQkFBbUIsY0FGbEIsTUFBTTs7MkZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIHR5cGUgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBOb3RpZmljYXRpb25FbXBoYXNpcyxcbiAgRmVlZGJhY2tDb2xvcnMsXG59IGZyb20gJ0Bub3ZhLWRlc2lnbi1zeXN0ZW0vbm92YS13ZWJjb21wb25lbnRzJztcblxuLyoqXG4gKiBBY3Rpb24gY2FsbGJhY2tzIGZvciBub3RpZmljYXRpb25zLiBXaWxsIHJlbmRlciBidXR0b25zIGF1dG9tYXRpY2FsbHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uQWN0aW9uIHtcbiAgLyoqIFRoZSBsYWJlbCBvZiB0aGUgYWN0aW9uLiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKiogVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgd2hlbiB0aGUgYWN0aW9uIGlzIGNsaWNrZWQuICovXG4gIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBub3RpZmljYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uT3B0aW9ucyB7XG4gIC8qKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIG5vdGlmaWNhdGlvbi4gSWYgbm90IHByb3ZpZGVkLCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogU2hvcnQgYW5kIGNvbmNpc2UgdGV4dCBmb3IgdGhlIG5vdGlmaWNhdGlvbiBoZWFkaW5nLiAqL1xuICBoZWFkaW5nPzogc3RyaW5nO1xuICAvKiogTWFpbiBjb250ZW50IG9mIHRoZSBub3RpZmljYXRpb24uICovXG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBub3RpZmljYXRpb24gY2FuIGJlIG1hbnVhbGx5IGRpc21pc3NlZCB2aWEgY2xvc2UgYnV0dG9uLiAqL1xuICBkaXNtaXNzaWJsZT86IGJvb2xlYW47XG4gIC8qKiBBZGp1c3RzIHRoZSBlbXBoYXNpcyB0byBtYWtlIHRoZSBub3RpZmljYXRpb24gbW9yZSBvciBsZXNzIHZpc3VhbGx5XG4gICAqIHByb21pbmVudCB0byB1c2Vycy4gVXNlIHRoaXMgdG8gZHJhdyBhdHRlbnRpb24gdG8gaW1wb3J0YW50IGFjdGlvbnMgb3JcbiAgICogcmVkdWNlIGZvY3VzIG9uIGxlc3MgY3JpdGljYWwgb25lcyAqL1xuICBlbXBoYXNpcz86IGAke05vdGlmaWNhdGlvbkVtcGhhc2lzfWA7XG4gIC8qKiBUeXBlIG9mIHRoZSBub3RpZmljYXRpb24sIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBjb2xvciBhbmQgZGVmYXVsdCBpY29uLiAqL1xuICBmZWVkYmFjaz86IGAke0ZlZWRiYWNrQ29sb3JzfWA7XG4gIC8qKiBDdXN0b20gaWNvbiBuYW1lIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGljb24uICovXG4gIGljb24/OiBzdHJpbmc7XG4gIC8qKiBOb3RpZmljYXRpb24gYWN0aW9ucyAqL1xuICBhY3Rpb25zPzogTm90aWZpY2F0aW9uQWN0aW9uW107XG4gIC8qKiBDdXN0b20gY29tcG9uZW50cyBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhY3Rpb25zLiAqL1xuICBhY3Rpb25TbG90PzogVHlwZTx1bmtub3duPjtcbn1cblxuLyoqXG4gKiBBIG5vdGlmaWNhdGlvbiB3aXRoIGFsbCByZXF1aXJlZCBmaWVsZHMgcG9wdWxhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbiBleHRlbmRzIE5vdGlmaWNhdGlvbk9wdGlvbnMge1xuICAvKiogVGltZXN0YW1wIHdoZW4gdGhlIG5vdGlmaWNhdGlvbiB3YXMgY3JlYXRlZC4gKi9cbiAgY3JlYXRlZEF0OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgTm90aWZpY2F0aW9uU2VydmljZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb3RpZmljYXRpb25TZXJ2aWNlQ29uZmlnIHtcbiAgLyoqIFBvc2l0aW9uIG9mIHRoZSBub3RpZmljYXRpb24gY29udGFpbmVyIG9uIHRoZSBzY3JlZW4uICovXG4gIHBvc2l0aW9uPzogc3RyaW5nO1xuICAvKiogTWF4aW11bSBudW1iZXIgb2Ygbm90aWZpY2F0aW9ucyB0byBkaXNwbGF5IGF0IG9uY2UuICovXG4gIG1heE5vdGlmaWNhdGlvbnM/OiBudW1iZXI7XG4gIC8qKiBBZGRpdGlvbmFsIENTUyBjbGFzcyBuYW1lIGZvciB0aGUgbm90aWZpY2F0aW9uIGNvbnRhaW5lci4gKi9cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdW5pcXVlIElEcy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHVuaXF1ZSBpZGVudGlmaWVyIHN0cmluZ1xuICovXG5jb25zdCBnZW5lcmF0ZUlkID0gKCk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBgbm90aWZpY2F0aW9uLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpXG4gICAgLnRvU3RyaW5nKDM2KVxuICAgIC5zdWJzdHIoMiwgOSl9YDtcbn07XG5cbi8qKlxuICogQW5ndWxhciBzZXJ2aWNlIGZvciBtYW5hZ2luZyBub3RpZmljYXRpb25zLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25vdGlmaWNhdGlvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5vdGlmaWNhdGlvbltdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbmZpZzogUmVxdWlyZWQ8Tm90aWZpY2F0aW9uU2VydmljZUNvbmZpZz47XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgc3RyZWFtIG9mIGFjdGl2ZSBub3RpZmljYXRpb25zLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5vdGlmaWNhdGlvbnMkOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvbltdPiA9XG4gICAgdGhpcy5fbm90aWZpY2F0aW9ucy5hc09ic2VydmFibGUoKTtcblxuICAvKipcbiAgICogQ3VycmVudCBhcnJheSBvZiBub3RpZmljYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Tm90aWZpY2F0aW9uW119IEFycmF5IG9mIGFjdGl2ZSBub3RpZmljYXRpb25zXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5vdGlmaWNhdGlvbnMoKTogTm90aWZpY2F0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl9ub3RpZmljYXRpb25zLnZhbHVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fY29uZmlnID0ge1xuICAgICAgcG9zaXRpb246ICd0b3AtcmlnaHQnLFxuICAgICAgbWF4Tm90aWZpY2F0aW9uczogNTAsXG4gICAgICBjbGFzc05hbWU6ICcnLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlIHRoZSBub3RpZmljYXRpb24gc2VydmljZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb3RpZmljYXRpb25TZXJ2aWNlQ29uZmlnfSBjb25maWcgQ29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqL1xuICBjb25maWd1cmUoY29uZmlnOiBOb3RpZmljYXRpb25TZXJ2aWNlQ29uZmlnKTogdm9pZCB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9jb25maWcsIGNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtSZXF1aXJlZDxOb3RpZmljYXRpb25TZXJ2aWNlQ29uZmlnPn0gQ3VycmVudCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBnZXQgY29uZmlnKCk6IFJlcXVpcmVkPE5vdGlmaWNhdGlvblNlcnZpY2VDb25maWc+IHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jb25maWcgfTtcbiAgfVxuXG4gIC8vIGtlZXAgdHJhY2sgb2YgYWxsIG5vdGlmaWNhdGlvbiByZWZzXG4gIHByaXZhdGUgZWxSZWZzID0gbmV3IE1hcDxzdHJpbmcsIEhUTUxOdk5vdGlmaWNhdGlvbkVsZW1lbnQ+KCk7XG4gIHJlZ2lzdGVyUmVmKGlkOiBzdHJpbmcsIGVsOiBIVE1MTnZOb3RpZmljYXRpb25FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5lbFJlZnMuc2V0KGlkLCBlbCk7XG4gIH1cbiAgdW5yZWdpc3RlclJlZihpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5lbFJlZnMuZGVsZXRlKGlkKTtcbiAgfVxuICBjbGVhclJlZnMoKSB7XG4gICAgdGhpcy5lbFJlZnMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IGEgbmV3IG5vdGlmaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtOb3RpZmljYXRpb25PcHRpb25zfSBvcHRpb25zIFRoZSBub3RpZmljYXRpb24gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgbm90aWZpY2F0aW9uIElEXG4gICAqL1xuICBzaG93KG9wdGlvbnM6IE5vdGlmaWNhdGlvbk9wdGlvbnMpOiBzdHJpbmcge1xuICAgIGNvbnN0IGlkID0gb3B0aW9ucy5pZCB8fCBnZW5lcmF0ZUlkKCk7XG5cbiAgICBjb25zdCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbiA9IHtcbiAgICAgIGlkLFxuICAgICAgaGVhZGluZzogb3B0aW9ucy5oZWFkaW5nLFxuICAgICAgbWVzc2FnZTogb3B0aW9ucy5tZXNzYWdlLFxuICAgICAgZGlzbWlzc2libGU6IG9wdGlvbnMuZGlzbWlzc2libGUgPz8gdHJ1ZSxcbiAgICAgIGVtcGhhc2lzOiBvcHRpb25zLmVtcGhhc2lzID8/ICdtZWRpdW0nLFxuICAgICAgZmVlZGJhY2s6IG9wdGlvbnMuZmVlZGJhY2sgPz8gJ2luZm9ybWF0aW9uJyxcbiAgICAgIGljb246IG9wdGlvbnMuaWNvbixcbiAgICAgIGFjdGlvbnM6IG9wdGlvbnMuYWN0aW9ucyA/PyBbXSxcbiAgICAgIGFjdGlvblNsb3Q6IG9wdGlvbnMuYWN0aW9uU2xvdCxcbiAgICAgIGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICB9O1xuXG4gICAgY29uc3QgY3VycmVudE5vdGlmaWNhdGlvbnMgPSB0aGlzLl9ub3RpZmljYXRpb25zLnZhbHVlO1xuXG4gICAgLy8gUmVtb3ZlIG9sZGVzdCBub3RpZmljYXRpb25zIGlmIHdlIGV4Y2VlZCBtYXhcbiAgICBjb25zdCBuZXdOb3RpZmljYXRpb25zID0gW25vdGlmaWNhdGlvbiwgLi4uY3VycmVudE5vdGlmaWNhdGlvbnNdO1xuICAgIGlmIChuZXdOb3RpZmljYXRpb25zLmxlbmd0aCA+IHRoaXMuX2NvbmZpZy5tYXhOb3RpZmljYXRpb25zKSB7XG4gICAgICB0aGlzLl9ub3RpZmljYXRpb25zLm5leHQoXG4gICAgICAgIG5ld05vdGlmaWNhdGlvbnMuc2xpY2UoMCwgdGhpcy5fY29uZmlnLm1heE5vdGlmaWNhdGlvbnMpLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbm90aWZpY2F0aW9ucy5uZXh0KG5ld05vdGlmaWNhdGlvbnMpO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5lbFJlZnMuZ2V0KGlkKSBhcyBIVE1MTnZOb3RpZmljYXRpb25FbGVtZW50IHwgdW5kZWZpbmVkO1xuICAgICAgcmVmPy5zaG93KCk7XG4gICAgfSwgMCk7XG5cbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvKipcbiAgICogRGlzbWlzcyBhIHNwZWNpZmljIG5vdGlmaWNhdGlvbiBieSBJRC4gVGhpcyB3aWxsIHJlbW92ZSB0aGUgbm90aWZpY2F0aW9uXG4gICAqIGFmdGVyIHRoZSBhbmltYXRpb24gY29tcGxldGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIG5vdGlmaWNhdGlvbiBJRCB0byBkaXNtaXNzXG4gICAqL1xuICBkaXNtaXNzKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmVsUmVmcy5nZXQoaWQpPy5kaXNtaXNzPy4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbW1lZGlhdGVseSByZW1vdmUgYSBzcGVjaWZpYyBub3RpZmljYXRpb24gYnkgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgbm90aWZpY2F0aW9uIElEIHRvIGRpc21pc3NcbiAgICovXG4gIHJlbW92ZShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudE5vdGlmaWNhdGlvbnMgPSB0aGlzLl9ub3RpZmljYXRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGZpbHRlcmVkTm90aWZpY2F0aW9ucyA9IGN1cnJlbnROb3RpZmljYXRpb25zLmZpbHRlcihcbiAgICAgIChub3RpZmljYXRpb24pID0+IG5vdGlmaWNhdGlvbi5pZCAhPT0gaWQsXG4gICAgKTtcbiAgICB0aGlzLl9ub3RpZmljYXRpb25zLm5leHQoZmlsdGVyZWROb3RpZmljYXRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbW1lZGlhdGVseSByZW1vdmUgYWxsIGFjdGl2ZSBub3RpZmljYXRpb25zLlxuICAgKi9cbiAgcmVtb3ZlQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuX25vdGlmaWNhdGlvbnMubmV4dChbXSk7XG4gIH1cbn1cbiJdfQ==
|