@nova-design-system/nova-angular-18 3.14.0-beta.0 → 3.14.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.
@@ -10,7 +10,7 @@ import * as i2 from "./stencil-generated/component-value-accessors";
10
10
  export declare function provideNovaComponents(): Provider;
11
11
  export declare class NovaComponentsModule {
12
12
  static ɵfac: i0.ɵɵFactoryDeclaration<NovaComponentsModule, never>;
13
- static ɵmod: i0.ɵɵNgModuleDeclaration<NovaComponentsModule, [typeof i1.NvAccordion, typeof i1.NvAccordionItem, typeof i1.NvAlert, typeof i1.NvAvatar, typeof i1.NvBadge, typeof i1.NvBreadcrumb, typeof i1.NvBreadcrumbs, typeof i1.NvButton, typeof i1.NvButtongroup, typeof i1.NvCalendar, typeof i1.NvCol, typeof i1.NvDatagrid, typeof i1.NvDatagridcolumn, typeof i1.NvDialog, typeof i1.NvDialogfooter, typeof i1.NvDialogheader, typeof i1.NvFieldcheckbox, typeof i1.NvFielddate, typeof i1.NvFielddaterange, typeof i1.NvFielddropdown, typeof i1.NvFielddropdownitem, typeof i1.NvFielddropdownitemcheck, typeof i1.NvFieldmultiselect, typeof i1.NvFieldnumber, typeof i1.NvFieldpassword, typeof i1.NvFieldradio, typeof i1.NvFieldselect, typeof i1.NvFieldslider, typeof i1.NvFieldtext, typeof i1.NvFieldtextarea, typeof i1.NvFieldtime, typeof i1.NvIcon, typeof i1.NvIconbutton, typeof i1.NvLoader, typeof i1.NvMenu, typeof i1.NvMenuitem, typeof i1.NvNotification, typeof i1.NvNotificationcontainer, typeof i1.NvPopover, typeof i1.NvRow, typeof i1.NvStack, typeof i1.NvTable, typeof i1.NvTablecolumn, typeof i1.NvToggle, typeof i1.NvTogglebutton, typeof i1.NvTogglebuttongroup, typeof i1.NvTooltip], never, [typeof i1.NvAccordion, typeof i1.NvAccordionItem, typeof i1.NvAlert, typeof i1.NvAvatar, typeof i1.NvBadge, typeof i1.NvBreadcrumb, typeof i1.NvBreadcrumbs, typeof i1.NvButton, typeof i1.NvButtongroup, typeof i1.NvCalendar, typeof i1.NvCol, typeof i1.NvDatagrid, typeof i1.NvDatagridcolumn, typeof i1.NvDialog, typeof i1.NvDialogfooter, typeof i1.NvDialogheader, typeof i1.NvFieldcheckbox, typeof i1.NvFielddate, typeof i1.NvFielddaterange, typeof i1.NvFielddropdown, typeof i1.NvFielddropdownitem, typeof i1.NvFielddropdownitemcheck, typeof i1.NvFieldmultiselect, typeof i1.NvFieldnumber, typeof i1.NvFieldpassword, typeof i1.NvFieldradio, typeof i1.NvFieldselect, typeof i1.NvFieldslider, typeof i1.NvFieldtext, typeof i1.NvFieldtextarea, typeof i1.NvFieldtime, typeof i1.NvIcon, typeof i1.NvIconbutton, typeof i1.NvLoader, typeof i1.NvMenu, typeof i1.NvMenuitem, typeof i1.NvNotification, typeof i1.NvNotificationcontainer, typeof i1.NvPopover, typeof i1.NvRow, typeof i1.NvStack, typeof i1.NvTable, typeof i1.NvTablecolumn, typeof i1.NvToggle, typeof i1.NvTogglebutton, typeof i1.NvTogglebuttongroup, typeof i1.NvTooltip]>;
13
+ static ɵmod: i0.ɵɵNgModuleDeclaration<NovaComponentsModule, [typeof i1.NvAccordion, typeof i1.NvAccordionItem, typeof i1.NvAlert, typeof i1.NvAvatar, typeof i1.NvBadge, typeof i1.NvBreadcrumb, typeof i1.NvBreadcrumbs, typeof i1.NvButton, typeof i1.NvButtongroup, typeof i1.NvCalendar, typeof i1.NvCol, typeof i1.NvDatagrid, typeof i1.NvDatagridcolumn, typeof i1.NvDialog, typeof i1.NvDialogfooter, typeof i1.NvDialogheader, typeof i1.NvFieldcheckbox, typeof i1.NvFielddate, typeof i1.NvFielddaterange, typeof i1.NvFielddropdown, typeof i1.NvFielddropdownitem, typeof i1.NvFielddropdownitemcheck, typeof i1.NvFieldmultiselect, typeof i1.NvFieldnumber, typeof i1.NvFieldpassword, typeof i1.NvFieldradio, typeof i1.NvFieldselect, typeof i1.NvFieldslider, typeof i1.NvFieldtext, typeof i1.NvFieldtextarea, typeof i1.NvFieldtime, typeof i1.NvIcon, typeof i1.NvIconbutton, typeof i1.NvLoader, typeof i1.NvMenu, typeof i1.NvMenuitem, typeof i1.NvNotification, typeof i1.NvPopover, typeof i1.NvRow, typeof i1.NvStack, typeof i1.NvTable, typeof i1.NvTablecolumn, typeof i1.NvToggle, typeof i1.NvTogglebutton, typeof i1.NvTogglebuttongroup, typeof i1.NvTooltip], never, [typeof i1.NvAccordion, typeof i1.NvAccordionItem, typeof i1.NvAlert, typeof i1.NvAvatar, typeof i1.NvBadge, typeof i1.NvBreadcrumb, typeof i1.NvBreadcrumbs, typeof i1.NvButton, typeof i1.NvButtongroup, typeof i1.NvCalendar, typeof i1.NvCol, typeof i1.NvDatagrid, typeof i1.NvDatagridcolumn, typeof i1.NvDialog, typeof i1.NvDialogfooter, typeof i1.NvDialogheader, typeof i1.NvFieldcheckbox, typeof i1.NvFielddate, typeof i1.NvFielddaterange, typeof i1.NvFielddropdown, typeof i1.NvFielddropdownitem, typeof i1.NvFielddropdownitemcheck, typeof i1.NvFieldmultiselect, typeof i1.NvFieldnumber, typeof i1.NvFieldpassword, typeof i1.NvFieldradio, typeof i1.NvFieldselect, typeof i1.NvFieldslider, typeof i1.NvFieldtext, typeof i1.NvFieldtextarea, typeof i1.NvFieldtime, typeof i1.NvIcon, typeof i1.NvIconbutton, typeof i1.NvLoader, typeof i1.NvMenu, typeof i1.NvMenuitem, typeof i1.NvNotification, typeof i1.NvPopover, typeof i1.NvRow, typeof i1.NvStack, typeof i1.NvTable, typeof i1.NvTablecolumn, typeof i1.NvToggle, typeof i1.NvTogglebutton, typeof i1.NvTogglebuttongroup, typeof i1.NvTooltip]>;
14
14
  static ɵinj: i0.ɵɵInjectorDeclaration<NovaComponentsModule>;
15
15
  }
16
16
  export declare class NovaComponentsValueAccessorModule {
@@ -512,7 +512,7 @@ export declare class NvNotification {
512
512
  protected el: HTMLNvNotificationElement;
513
513
  constructor(c: ChangeDetectorRef, r: ElementRef, z: NgZone);
514
514
  static ɵfac: i0.ɵɵFactoryDeclaration<NvNotification, never>;
515
- static ɵcmp: i0.ɵɵComponentDeclaration<NvNotification, "nv-notification", never, { "dismissible": { "alias": "dismissible"; "required": false; }; "emphasis": { "alias": "emphasis"; "required": false; }; "feedback": { "alias": "feedback"; "required": false; }; "heading": { "alias": "heading"; "required": false; }; "hidden": { "alias": "hidden"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "initiallyHidden": { "alias": "initiallyHidden"; "required": false; }; "message": { "alias": "message"; "required": false; }; "uid": { "alias": "uid"; "required": false; }; }, {}, never, ["*"], false, never>;
515
+ static ɵcmp: i0.ɵɵComponentDeclaration<NvNotification, "nv-notification", never, { "dismissible": { "alias": "dismissible"; "required": false; }; "emphasis": { "alias": "emphasis"; "required": false; }; "feedback": { "alias": "feedback"; "required": false; }; "heading": { "alias": "heading"; "required": false; }; "hidden": { "alias": "hidden"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "message": { "alias": "message"; "required": false; }; "uid": { "alias": "uid"; "required": false; }; }, {}, never, ["*"], false, never>;
516
516
  }
517
517
  export declare interface NvNotification extends Components.NvNotification {
518
518
  /**
@@ -521,15 +521,6 @@ export declare interface NvNotification extends Components.NvNotification {
521
521
  */
522
522
  hiddenChanged: EventEmitter<CustomEvent<boolean>>;
523
523
  }
524
- export declare class NvNotificationcontainer {
525
- protected z: NgZone;
526
- protected el: HTMLNvNotificationcontainerElement;
527
- constructor(c: ChangeDetectorRef, r: ElementRef, z: NgZone);
528
- static ɵfac: i0.ɵɵFactoryDeclaration<NvNotificationcontainer, never>;
529
- static ɵcmp: i0.ɵɵComponentDeclaration<NvNotificationcontainer, "nv-notificationcontainer", never, { "position": { "alias": "position"; "required": false; }; }, {}, never, ["*"], false, never>;
530
- }
531
- export declare interface NvNotificationcontainer extends Components.NvNotificationcontainer {
532
- }
533
524
  export declare class NvPopover {
534
525
  protected z: NgZone;
535
526
  protected el: HTMLNvPopoverElement;
@@ -1,2 +1,2 @@
1
1
  import * as d from './components';
2
- export declare const DIRECTIVES: (typeof d.NvAccordion | typeof d.NvAccordionItem | typeof d.NvAlert | typeof d.NvAvatar | typeof d.NvBadge | typeof d.NvBreadcrumb | typeof d.NvBreadcrumbs | typeof d.NvButton | typeof d.NvButtongroup | typeof d.NvCalendar | typeof d.NvCol | typeof d.NvDatagrid | typeof d.NvDatagridcolumn | typeof d.NvDialog | typeof d.NvDialogfooter | typeof d.NvDialogheader | typeof d.NvFieldcheckbox | typeof d.NvFielddate | typeof d.NvFielddaterange | typeof d.NvFielddropdown | typeof d.NvFielddropdownitem | typeof d.NvFielddropdownitemcheck | typeof d.NvFieldmultiselect | typeof d.NvFieldnumber | typeof d.NvFieldpassword | typeof d.NvFieldradio | typeof d.NvFieldselect | typeof d.NvFieldslider | typeof d.NvFieldtext | typeof d.NvFieldtextarea | typeof d.NvFieldtime | typeof d.NvIcon | typeof d.NvIconbutton | typeof d.NvLoader | typeof d.NvMenu | typeof d.NvMenuitem | typeof d.NvNotification | typeof d.NvNotificationcontainer | typeof d.NvPopover | typeof d.NvRow | typeof d.NvStack | typeof d.NvTable | typeof d.NvTablecolumn | typeof d.NvToggle | typeof d.NvTogglebutton | typeof d.NvTogglebuttongroup | typeof d.NvTooltip)[];
2
+ export declare const DIRECTIVES: (typeof d.NvAccordion | typeof d.NvAccordionItem | typeof d.NvAlert | typeof d.NvAvatar | typeof d.NvBadge | typeof d.NvBreadcrumb | typeof d.NvBreadcrumbs | typeof d.NvButton | typeof d.NvButtongroup | typeof d.NvCalendar | typeof d.NvCol | typeof d.NvDatagrid | typeof d.NvDatagridcolumn | typeof d.NvDialog | typeof d.NvDialogfooter | typeof d.NvDialogheader | typeof d.NvFieldcheckbox | typeof d.NvFielddate | typeof d.NvFielddaterange | typeof d.NvFielddropdown | typeof d.NvFielddropdownitem | typeof d.NvFielddropdownitemcheck | typeof d.NvFieldmultiselect | typeof d.NvFieldnumber | typeof d.NvFieldpassword | typeof d.NvFieldradio | typeof d.NvFieldselect | typeof d.NvFieldslider | typeof d.NvFieldtext | typeof d.NvFieldtextarea | typeof d.NvFieldtime | typeof d.NvIcon | typeof d.NvIconbutton | typeof d.NvLoader | typeof d.NvMenu | typeof d.NvMenuitem | typeof d.NvNotification | typeof d.NvPopover | typeof d.NvRow | typeof d.NvStack | typeof d.NvTable | typeof d.NvTablecolumn | typeof d.NvToggle | typeof d.NvTogglebutton | typeof d.NvTogglebuttongroup | typeof d.NvTooltip)[];
@@ -1,5 +1,4 @@
1
1
  export * from './lib/nova-components.module';
2
2
  export * from './lib/stencil-generated/components';
3
3
  export * from './lib/stencil-generated/component-value-accessors';
4
- export * from './lib/providers';
5
4
  export * from '@nova-design-system/nova-webcomponents/constants';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nova-design-system/nova-angular-18",
3
- "version": "3.14.0-beta.0",
3
+ "version": "3.14.0",
4
4
  "description": "Nova is a design system created by Elia Group to empower creators to efficiently build solutions that people love to use.",
5
5
  "author": "Elia Group",
6
6
  "homepage": "https://nova.eliagroup.io",
@@ -12,11 +12,10 @@
12
12
  "scripts": {
13
13
  "ng": "ng",
14
14
  "start": "ng serve",
15
- "build": "npm run copy:providers && ng build",
15
+ "build": "ng build",
16
16
  "watch": "ng build --watch --configuration development",
17
17
  "test": "ng test",
18
- "copy:providers": "shx mkdir -p projects/nova-components/src/lib/providers && shx cp -r ../angular/projects/nova-components/src/lib/providers/* projects/nova-components/src/lib/providers",
19
- "clean": "rimraf dist .angular projects/nova-components/src/lib/stencil-generated projects/nova-components/src/lib/providers",
18
+ "clean": "rimraf dist .angular projects/nova-components/src/lib/stencil-generated",
20
19
  "storybook": "ng run nova-components:storybook",
21
20
  "storybook.build": "ng run nova-components:storybook.build",
22
21
  "typecheck": "tsc --emitDeclarationOnly false --noEmit"
@@ -1,3 +0,0 @@
1
- export * from './notification.service';
2
- export * from './notification-service.component';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ub3ZhLWNvbXBvbmVudHMvc3JjL2xpYi9wcm92aWRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGtDQUFrQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ub3RpZmljYXRpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbi1zZXJ2aWNlLmNvbXBvbmVudCc7XG4iXX0=
@@ -1,183 +0,0 @@
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: "18.2.13", ngImport: i0, type: NotificationServiceComponent, deps: [{ token: i1.NotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
72
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", 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: "18.2.13", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXNlcnZpY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92YS1jb21wb25lbnRzL3NyYy9saWIvcHJvdmlkZXJzL25vdGlmaWNhdGlvbi1zZXJ2aWNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCxZQUFZLEVBQ1osVUFBVSxFQUVWLHNCQUFzQixHQUN2QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFLL0M7O0dBRUc7QUFzREgsTUFBTSxPQUFPLDRCQUE0QjtJQXdCdkMsWUFBb0IsbUJBQXdDO1FBQXhDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFiNUQ7O1dBRUc7UUFDSCxrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFVNEIsQ0FBQztJQUVoRTs7T0FFRztJQUNILFFBQVE7UUFDTiwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBRTdELG9DQUFvQztRQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUNuRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxDQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZTtRQUNiLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRTtZQUNoQixJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7Z0JBQy9CLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3RDLElBQUksRUFBRTtvQkFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxFQUFFLENBQUM7UUFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxxQkFBcUIsQ0FBQyxLQUFhLEVBQUUsWUFBMEI7UUFDN0QsT0FBTyxZQUFZLENBQUMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILG1CQUFtQixDQUFDLEtBQTJCLEVBQUUsRUFBVztRQUMxRCxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQzsrR0FyRlUsNEJBQTRCO21HQUE1Qiw0QkFBNEIsOE5BbUJDLFVBQVUsNkJBbkV4Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThDVCwyREFoRFMsWUFBWTs7NEZBa0RYLDRCQUE0QjtrQkFyRHhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThDVDtpQkFDRjt3RkFLVSxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBV0UsZUFBZTtzQkFEdEIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBRdWVyeUxpc3QsXG4gIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuLy8gaW1wb3J0IHsgTm92YUNvbXBvbmVudHNNb2R1bGUgfSBmcm9tICcuLi9ub3ZhLWNvbXBvbmVudHMubW9kdWxlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UsIHR5cGUgTm90aWZpY2F0aW9uIH0gZnJvbSAnLi9ub3RpZmljYXRpb24uc2VydmljZSc7XG5cbi8qKlxuICogQW5ndWxhciBjb21wb25lbnQgdGhhdCByZW5kZXJzIHRoZSBub3RpZmljYXRpb24gY29udGFpbmVyIHdpdGggYWN0aXZlIG5vdGlmaWNhdGlvbnMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ252LW5vdGlmaWNhdGlvbi1zZXJ2aWNlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bnYtbm90aWZpY2F0aW9uY29udGFpbmVyXG4gICAgICBbcG9zaXRpb25dPVwicG9zaXRpb25cIlxuICAgICAgW2NsYXNzXT1cImNsYXNzTmFtZVwiXG4gICAgICBkYXRhLXRlc3RpZD1cIm5vdGlmaWNhdGlvbi1jb250YWluZXJcIlxuICAgID5cbiAgICAgIDxudi1ub3RpZmljYXRpb25cbiAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgbGV0IG5vdGlmaWNhdGlvbiBvZiBub3RpZmljYXRpb25zO1xuICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlOb3RpZmljYXRpb25JZFxuICAgICAgICBcIlxuICAgICAgICAjbm90aWZpY2F0aW9uRWxcbiAgICAgICAgW2F0dHIuZGF0YS1pZF09XCJub3RpZmljYXRpb24uaWRcIlxuICAgICAgICBbaGVhZGluZ109XCJub3RpZmljYXRpb24uaGVhZGluZ1wiXG4gICAgICAgIFttZXNzYWdlXT1cIm5vdGlmaWNhdGlvbi5tZXNzYWdlXCJcbiAgICAgICAgW2Rpc21pc3NpYmxlXT1cIm5vdGlmaWNhdGlvbi5kaXNtaXNzaWJsZVwiXG4gICAgICAgIFtlbXBoYXNpc109XCJub3RpZmljYXRpb24uZW1waGFzaXNcIlxuICAgICAgICBbZmVlZGJhY2tdPVwibm90aWZpY2F0aW9uLmZlZWRiYWNrXCJcbiAgICAgICAgW2ljb25dPVwibm90aWZpY2F0aW9uLmljb25cIlxuICAgICAgICBbaW5pdGlhbGx5SGlkZGVuXT1cInRydWVcIlxuICAgICAgICAoaGlkZGVuQ2hhbmdlZCk9XCJoYW5kbGVIaWRkZW5DaGFuZ2VkKCRldmVudCwgbm90aWZpY2F0aW9uLmlkKVwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gQWN0aW9ucyBzbG90IGNvbnRlbnQgZm9yIHRoZSBjdXN0b20gZWxlbWVudCAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHNsb3Q9XCJhY3Rpb25zXCJcbiAgICAgICAgICBjbGFzcz1cImZsZXggZ2FwLTJcIlxuICAgICAgICAgICpuZ0lmPVwibm90aWZpY2F0aW9uLmFjdGlvbnM/Lmxlbmd0aCB8fCBub3RpZmljYXRpb24uYWN0aW9uU2xvdFwiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIENvbmZpZy1kcml2ZW4gYWN0aW9ucyAtLT5cbiAgICAgICAgICA8bnYtYnV0dG9uXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIG5vdGlmaWNhdGlvbi5hY3Rpb25zXCJcbiAgICAgICAgICAgIGVtcGhhc2lzPVwibG93XCJcbiAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uLm9uQ2xpY2soKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgYWN0aW9uLmxhYmVsIH19XG4gICAgICAgICAgPC9udi1idXR0b24+XG5cbiAgICAgICAgICA8IS0tIENvbXBvbmVudC1kcml2ZW4gYWN0aW9ucyAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cIm5vdGlmaWNhdGlvbi5hY3Rpb25TbG90XCJcbiAgICAgICAgICAgIFtuZ0NvbXBvbmVudE91dGxldF09XCJub3RpZmljYXRpb24uYWN0aW9uU2xvdFwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbnYtbm90aWZpY2F0aW9uPlxuICAgIDwvbnYtbm90aWZpY2F0aW9uY29udGFpbmVyPlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25TZXJ2aWNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogUG9zaXRpb24gb2YgdGhlIG5vdGlmaWNhdGlvbiBjb250YWluZXIgb24gdGhlIHNjcmVlbi5cbiAgICovXG4gIEBJbnB1dCgpIHBvc2l0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIENTUyBjbGFzcyBuYW1lIGZvciB0aGUgbm90aWZpY2F0aW9uIGNvbnRhaW5lci5cbiAgICovXG4gIEBJbnB1dCgpIGNsYXNzTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQXJyYXkgb2YgYWN0aXZlIG5vdGlmaWNhdGlvbnMuXG4gICAqL1xuICBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2VzIHRvIHRoZSBub3RpZmljYXRpb24gZWxlbWVudHMuXG4gICAqL1xuICBAVmlld0NoaWxkcmVuKCdub3RpZmljYXRpb25FbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIG5vdGlmaWNhdGlvbkVscyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxOdk5vdGlmaWNhdGlvbkVsZW1lbnQ+PjtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIENvbXBvbmVudCBpbml0aWFsaXphdGlvbi5cbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFVzZSBzZXJ2aWNlIGNvbmZpZyBpZiBubyBpbnB1dCBwcm92aWRlZFxuICAgIHRoaXMucG9zaXRpb24gPz89IHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5jb25maWcucG9zaXRpb247XG4gICAgdGhpcy5jbGFzc05hbWUgPz89IHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5jb25maWcuY2xhc3NOYW1lO1xuXG4gICAgLy8gU3Vic2NyaWJlIHRvIG5vdGlmaWNhdGlvbiBjaGFuZ2VzXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uubm90aWZpY2F0aW9ucyQuc3Vic2NyaWJlKFxuICAgICAgKGxpc3QpID0+ICh0aGlzLm5vdGlmaWNhdGlvbnMgPSBsaXN0KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmNocm9uaXplIG5vdGlmaWNhdGlvbiBlbGVtZW50cy9yZWZzIHdpdGggdGhlIHNlcnZpY2UuXG4gICAqL1xuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc3Qgc3luYyA9ICgpID0+IHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5jbGVhclJlZnMoKTtcbiAgICAgIGZvciAoY29uc3QgZWxSZWYgb2YgdGhpcy5ub3RpZmljYXRpb25FbHMudG9BcnJheSgpKSB7XG4gICAgICAgIGNvbnN0IGVsID0gZWxSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnKTtcbiAgICAgICAgaWYgKGlkKSB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UucmVnaXN0ZXJSZWYoaWQsIGVsKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHN5bmMoKTtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbkVscy5jaGFuZ2VzLnN1YnNjcmliZShzeW5jKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wb25lbnQgY2xlYW51cC5cbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5jbGVhclJlZnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFjayBmdW5jdGlvbiBmb3IgbmdGb3IgdG8gb3B0aW1pemUgcmVuZGVyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBpdGVtXG4gICAqIEBwYXJhbSB7Tm90aWZpY2F0aW9ufSBub3RpZmljYXRpb24gVGhlIG5vdGlmaWNhdGlvbiBpdGVtXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBub3RpZmljYXRpb24gSURcbiAgICovXG4gIHRyYWNrQnlOb3RpZmljYXRpb25JZChpbmRleDogbnVtYmVyLCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbikge1xuICAgIHJldHVybiBub3RpZmljYXRpb24uaWQ7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIG5vdGlmaWNhdGlvbiBoaWRkZW4gc3RhdGUgY2hhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge0N1c3RvbUV2ZW50PGJvb2xlYW4+fSBldmVudCBUaGUgaGlkZGVuIGNoYW5nZWQgZXZlbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBub3RpZmljYXRpb24gSURcbiAgICovXG4gIGhhbmRsZUhpZGRlbkNoYW5nZWQoZXZlbnQ6IEN1c3RvbUV2ZW50PGJvb2xlYW4+LCBpZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChldmVudC5kZXRhaWwgJiYgaWQpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5yZW1vdmUoaWQpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,134 +0,0 @@
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: "18.2.13", ngImport: i0, type: NotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
126
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NotificationService, providedIn: 'root' }); }
127
- }
128
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", 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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SUFDSCxTQUFTO1FBQ1AsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQzsrR0EvSFUsbUJBQW1CO21IQUFuQixtQkFBbUIsY0FGbEIsTUFBTTs7NEZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIHR5cGUgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBOb3RpZmljYXRpb25FbXBoYXNpcyxcbiAgRmVlZGJhY2tDb2xvcnMsXG59IGZyb20gJ0Bub3ZhLWRlc2lnbi1zeXN0ZW0vbm92YS13ZWJjb21wb25lbnRzJztcblxuLyoqXG4gKiBBY3Rpb24gY2FsbGJhY2tzIGZvciBub3RpZmljYXRpb25zLiBXaWxsIHJlbmRlciBidXR0b25zIGF1dG9tYXRpY2FsbHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uQWN0aW9uIHtcbiAgLyoqIFRoZSBsYWJlbCBvZiB0aGUgYWN0aW9uLiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKiogVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgd2hlbiB0aGUgYWN0aW9uIGlzIGNsaWNrZWQuICovXG4gIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBub3RpZmljYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uT3B0aW9ucyB7XG4gIC8qKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIG5vdGlmaWNhdGlvbi4gSWYgbm90IHByb3ZpZGVkLCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogU2hvcnQgYW5kIGNvbmNpc2UgdGV4dCBmb3IgdGhlIG5vdGlmaWNhdGlvbiBoZWFkaW5nLiAqL1xuICBoZWFkaW5nPzogc3RyaW5nO1xuICAvKiogTWFpbiBjb250ZW50IG9mIHRoZSBub3RpZmljYXRpb24uICovXG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBub3RpZmljYXRpb24gY2FuIGJlIG1hbnVhbGx5IGRpc21pc3NlZCB2aWEgY2xvc2UgYnV0dG9uLiAqL1xuICBkaXNtaXNzaWJsZT86IGJvb2xlYW47XG4gIC8qKiBBZGp1c3RzIHRoZSBlbXBoYXNpcyB0byBtYWtlIHRoZSBub3RpZmljYXRpb24gbW9yZSBvciBsZXNzIHZpc3VhbGx5XG4gICAqIHByb21pbmVudCB0byB1c2Vycy4gVXNlIHRoaXMgdG8gZHJhdyBhdHRlbnRpb24gdG8gaW1wb3J0YW50IGFjdGlvbnMgb3JcbiAgICogcmVkdWNlIGZvY3VzIG9uIGxlc3MgY3JpdGljYWwgb25lcyAqL1xuICBlbXBoYXNpcz86IGAke05vdGlmaWNhdGlvbkVtcGhhc2lzfWA7XG4gIC8qKiBUeXBlIG9mIHRoZSBub3RpZmljYXRpb24sIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBjb2xvciBhbmQgZGVmYXVsdCBpY29uLiAqL1xuICBmZWVkYmFjaz86IGAke0ZlZWRiYWNrQ29sb3JzfWA7XG4gIC8qKiBDdXN0b20gaWNvbiBuYW1lIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGljb24uICovXG4gIGljb24/OiBzdHJpbmc7XG4gIC8qKiBOb3RpZmljYXRpb24gYWN0aW9ucyAqL1xuICBhY3Rpb25zPzogTm90aWZpY2F0aW9uQWN0aW9uW107XG4gIC8qKiBDdXN0b20gY29tcG9uZW50cyBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhY3Rpb25zLiAqL1xuICBhY3Rpb25TbG90PzogVHlwZTx1bmtub3duPjtcbn1cblxuLyoqXG4gKiBBIG5vdGlmaWNhdGlvbiB3aXRoIGFsbCByZXF1aXJlZCBmaWVsZHMgcG9wdWxhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbiBleHRlbmRzIE5vdGlmaWNhdGlvbk9wdGlvbnMge1xuICAvKiogVGltZXN0YW1wIHdoZW4gdGhlIG5vdGlmaWNhdGlvbiB3YXMgY3JlYXRlZC4gKi9cbiAgY3JlYXRlZEF0OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgTm90aWZpY2F0aW9uU2VydmljZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb3RpZmljYXRpb25TZXJ2aWNlQ29uZmlnIHtcbiAgLyoqIFBvc2l0aW9uIG9mIHRoZSBub3RpZmljYXRpb24gY29udGFpbmVyIG9uIHRoZSBzY3JlZW4uICovXG4gIHBvc2l0aW9uPzogc3RyaW5nO1xuICAvKiogTWF4aW11bSBudW1iZXIgb2Ygbm90aWZpY2F0aW9ucyB0byBkaXNwbGF5IGF0IG9uY2UuICovXG4gIG1heE5vdGlmaWNhdGlvbnM/OiBudW1iZXI7XG4gIC8qKiBBZGRpdGlvbmFsIENTUyBjbGFzcyBuYW1lIGZvciB0aGUgbm90aWZpY2F0aW9uIGNvbnRhaW5lci4gKi9cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdW5pcXVlIElEcy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHVuaXF1ZSBpZGVudGlmaWVyIHN0cmluZ1xuICovXG5jb25zdCBnZW5lcmF0ZUlkID0gKCk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBgbm90aWZpY2F0aW9uLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpXG4gICAgLnRvU3RyaW5nKDM2KVxuICAgIC5zdWJzdHIoMiwgOSl9YDtcbn07XG5cbi8qKlxuICogQW5ndWxhciBzZXJ2aWNlIGZvciBtYW5hZ2luZyBub3RpZmljYXRpb25zLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25vdGlmaWNhdGlvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5vdGlmaWNhdGlvbltdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbmZpZzogUmVxdWlyZWQ8Tm90aWZpY2F0aW9uU2VydmljZUNvbmZpZz47XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgc3RyZWFtIG9mIGFjdGl2ZSBub3RpZmljYXRpb25zLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5vdGlmaWNhdGlvbnMkOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvbltdPiA9XG4gICAgdGhpcy5fbm90aWZpY2F0aW9ucy5hc09ic2VydmFibGUoKTtcblxuICAvKipcbiAgICogQ3VycmVudCBhcnJheSBvZiBub3RpZmljYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Tm90aWZpY2F0aW9uW119IEFycmF5IG9mIGFjdGl2ZSBub3RpZmljYXRpb25zXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5vdGlmaWNhdGlvbnMoKTogTm90aWZpY2F0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl9ub3RpZmljYXRpb25zLnZhbHVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fY29uZmlnID0ge1xuICAgICAgcG9zaXRpb246ICd0b3AtcmlnaHQnLFxuICAgICAgbWF4Tm90aWZpY2F0aW9uczogNTAsXG4gICAgICBjbGFzc05hbWU6ICcnLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlIHRoZSBub3RpZmljYXRpb24gc2VydmljZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb3RpZmljYXRpb25TZXJ2aWNlQ29uZmlnfSBjb25maWcgQ29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqL1xuICBjb25maWd1cmUoY29uZmlnOiBOb3RpZmljYXRpb25TZXJ2aWNlQ29uZmlnKTogdm9pZCB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9jb25maWcsIGNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtSZXF1aXJlZDxOb3RpZmljYXRpb25TZXJ2aWNlQ29uZmlnPn0gQ3VycmVudCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBnZXQgY29uZmlnKCk6IFJlcXVpcmVkPE5vdGlmaWNhdGlvblNlcnZpY2VDb25maWc+IHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jb25maWcgfTtcbiAgfVxuXG4gIC8vIGtlZXAgdHJhY2sgb2YgYWxsIG5vdGlmaWNhdGlvbiByZWZzXG4gIHByaXZhdGUgZWxSZWZzID0gbmV3IE1hcDxzdHJpbmcsIEhUTUxOdk5vdGlmaWNhdGlvbkVsZW1lbnQ+KCk7XG4gIHJlZ2lzdGVyUmVmKGlkOiBzdHJpbmcsIGVsOiBIVE1MTnZOb3RpZmljYXRpb25FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5lbFJlZnMuc2V0KGlkLCBlbCk7XG4gIH1cbiAgdW5yZWdpc3RlclJlZihpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5lbFJlZnMuZGVsZXRlKGlkKTtcbiAgfVxuICBjbGVhclJlZnMoKSB7XG4gICAgdGhpcy5lbFJlZnMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IGEgbmV3IG5vdGlmaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtOb3RpZmljYXRpb25PcHRpb25zfSBvcHRpb25zIFRoZSBub3RpZmljYXRpb24gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgbm90aWZpY2F0aW9uIElEXG4gICAqL1xuICBzaG93KG9wdGlvbnM6IE5vdGlmaWNhdGlvbk9wdGlvbnMpOiBzdHJpbmcge1xuICAgIGNvbnN0IGlkID0gb3B0aW9ucy5pZCB8fCBnZW5lcmF0ZUlkKCk7XG5cbiAgICBjb25zdCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbiA9IHtcbiAgICAgIGlkLFxuICAgICAgaGVhZGluZzogb3B0aW9ucy5oZWFkaW5nLFxuICAgICAgbWVzc2FnZTogb3B0aW9ucy5tZXNzYWdlLFxuICAgICAgZGlzbWlzc2libGU6IG9wdGlvbnMuZGlzbWlzc2libGUgPz8gdHJ1ZSxcbiAgICAgIGVtcGhhc2lzOiBvcHRpb25zLmVtcGhhc2lzID8/ICdtZWRpdW0nLFxuICAgICAgZmVlZGJhY2s6IG9wdGlvbnMuZmVlZGJhY2sgPz8gJ2luZm9ybWF0aW9uJyxcbiAgICAgIGljb246IG9wdGlvbnMuaWNvbixcbiAgICAgIGFjdGlvbnM6IG9wdGlvbnMuYWN0aW9ucyA/PyBbXSxcbiAgICAgIGFjdGlvblNsb3Q6IG9wdGlvbnMuYWN0aW9uU2xvdCxcbiAgICAgIGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICB9O1xuXG4gICAgY29uc3QgY3VycmVudE5vdGlmaWNhdGlvbnMgPSB0aGlzLl9ub3RpZmljYXRpb25zLnZhbHVlO1xuXG4gICAgLy8gUmVtb3ZlIG9sZGVzdCBub3RpZmljYXRpb25zIGlmIHdlIGV4Y2VlZCBtYXhcbiAgICBjb25zdCBuZXdOb3RpZmljYXRpb25zID0gW25vdGlmaWNhdGlvbiwgLi4uY3VycmVudE5vdGlmaWNhdGlvbnNdO1xuICAgIGlmIChuZXdOb3RpZmljYXRpb25zLmxlbmd0aCA+IHRoaXMuX2NvbmZpZy5tYXhOb3RpZmljYXRpb25zKSB7XG4gICAgICB0aGlzLl9ub3RpZmljYXRpb25zLm5leHQoXG4gICAgICAgIG5ld05vdGlmaWNhdGlvbnMuc2xpY2UoMCwgdGhpcy5fY29uZmlnLm1heE5vdGlmaWNhdGlvbnMpLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbm90aWZpY2F0aW9ucy5uZXh0KG5ld05vdGlmaWNhdGlvbnMpO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5lbFJlZnMuZ2V0KGlkKSBhcyBIVE1MTnZOb3RpZmljYXRpb25FbGVtZW50IHwgdW5kZWZpbmVkO1xuICAgICAgcmVmPy5zaG93KCk7XG4gICAgfSwgMCk7XG5cbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvKipcbiAgICogRGlzbWlzcyBhIHNwZWNpZmljIG5vdGlmaWNhdGlvbiBieSBJRC4gVGhpcyB3aWxsIHJlbW92ZSB0aGUgbm90aWZpY2F0aW9uXG4gICAqIGFmdGVyIHRoZSBhbmltYXRpb24gY29tcGxldGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIG5vdGlmaWNhdGlvbiBJRCB0byBkaXNtaXNzXG4gICAqL1xuICBkaXNtaXNzKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmVsUmVmcy5nZXQoaWQpPy5kaXNtaXNzPy4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbW1lZGlhdGVseSByZW1vdmUgYSBzcGVjaWZpYyBub3RpZmljYXRpb24gYnkgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgbm90aWZpY2F0aW9uIElEIHRvIGRpc21pc3NcbiAgICovXG4gIHJlbW92ZShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudE5vdGlmaWNhdGlvbnMgPSB0aGlzLl9ub3RpZmljYXRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGZpbHRlcmVkTm90aWZpY2F0aW9ucyA9IGN1cnJlbnROb3RpZmljYXRpb25zLmZpbHRlcihcbiAgICAgIChub3RpZmljYXRpb24pID0+IG5vdGlmaWNhdGlvbi5pZCAhPT0gaWQsXG4gICAgKTtcbiAgICB0aGlzLl9ub3RpZmljYXRpb25zLm5leHQoZmlsdGVyZWROb3RpZmljYXRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbW1lZGlhdGVseSByZW1vdmUgYWxsIGFjdGl2ZSBub3RpZmljYXRpb25zLlxuICAgKi9cbiAgcmVtb3ZlQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuX25vdGlmaWNhdGlvbnMubmV4dChbXSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export * from './notification.service';
2
- export * from './notification-service.component';
@@ -1,56 +0,0 @@
1
- import { OnDestroy, OnInit } from '@angular/core';
2
- import { NotificationService, type Notification } from './notification.service';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * Angular component that renders the notification container with active notifications.
6
- */
7
- export declare class NotificationServiceComponent implements OnInit, OnDestroy {
8
- private notificationService;
9
- /**
10
- * Position of the notification container on the screen.
11
- */
12
- position?: string;
13
- /**
14
- * Additional CSS class name for the notification container.
15
- */
16
- className?: string;
17
- /**
18
- * Array of active notifications.
19
- */
20
- notifications: Notification[];
21
- /**
22
- * References to the notification elements.
23
- */
24
- private notificationEls;
25
- private subscription?;
26
- constructor(notificationService: NotificationService);
27
- /**
28
- * Component initialization.
29
- */
30
- ngOnInit(): void;
31
- /**
32
- * Synchronize notification elements/refs with the service.
33
- */
34
- ngAfterViewInit(): void;
35
- /**
36
- * Component cleanup.
37
- */
38
- ngOnDestroy(): void;
39
- /**
40
- * Track function for ngFor to optimize rendering.
41
- *
42
- * @param {number} index The index of the item
43
- * @param {Notification} notification The notification item
44
- * @returns {string} The notification ID
45
- */
46
- trackByNotificationId(index: number, notification: Notification): string | undefined;
47
- /**
48
- * Handle notification hidden state change.
49
- *
50
- * @param {CustomEvent<boolean>} event The hidden changed event
51
- * @param {string} id The notification ID
52
- */
53
- handleHiddenChanged(event: CustomEvent<boolean>, id?: string): void;
54
- static ɵfac: i0.ɵɵFactoryDeclaration<NotificationServiceComponent, never>;
55
- static ɵcmp: i0.ɵɵComponentDeclaration<NotificationServiceComponent, "nv-notification-service", never, { "position": { "alias": "position"; "required": false; }; "className": { "alias": "className"; "required": false; }; }, {}, never, never, true, never>;
56
- }
@@ -1,116 +0,0 @@
1
- import { type Type } from '@angular/core';
2
- import { Observable } from 'rxjs';
3
- import { NotificationEmphasis, FeedbackColors } from '@nova-design-system/nova-webcomponents';
4
- import * as i0 from "@angular/core";
5
- /**
6
- * Action callbacks for notifications. Will render buttons automatically.
7
- */
8
- export interface NotificationAction {
9
- /** The label of the action. */
10
- label: string;
11
- /** The callback to execute when the action is clicked. */
12
- onClick: () => void;
13
- }
14
- /**
15
- * Options for creating a notification.
16
- */
17
- export interface NotificationOptions {
18
- /** Unique identifier for the notification. If not provided, one will be generated. */
19
- id?: string;
20
- /** Short and concise text for the notification heading. */
21
- heading?: string;
22
- /** Main content of the notification. */
23
- message?: string;
24
- /** Whether the notification can be manually dismissed via close button. */
25
- dismissible?: boolean;
26
- /** Adjusts the emphasis to make the notification more or less visually
27
- * prominent to users. Use this to draw attention to important actions or
28
- * reduce focus on less critical ones */
29
- emphasis?: `${NotificationEmphasis}`;
30
- /** Type of the notification, used to determine the color and default icon. */
31
- feedback?: `${FeedbackColors}`;
32
- /** Custom icon name to override the default icon. */
33
- icon?: string;
34
- /** Notification actions */
35
- actions?: NotificationAction[];
36
- /** Custom components for the notification actions. */
37
- actionSlot?: Type<unknown>;
38
- }
39
- /**
40
- * A notification with all required fields populated.
41
- */
42
- export interface Notification extends NotificationOptions {
43
- /** Timestamp when the notification was created. */
44
- createdAt: number;
45
- }
46
- /**
47
- * Configuration options for the NotificationService.
48
- */
49
- export interface NotificationServiceConfig {
50
- /** Position of the notification container on the screen. */
51
- position?: string;
52
- /** Maximum number of notifications to display at once. */
53
- maxNotifications?: number;
54
- /** Additional CSS class name for the notification container. */
55
- className?: string;
56
- }
57
- /**
58
- * Angular service for managing notifications.
59
- */
60
- export declare class NotificationService {
61
- private readonly _notifications;
62
- private readonly _config;
63
- /**
64
- * Observable stream of active notifications.
65
- */
66
- readonly notifications$: Observable<Notification[]>;
67
- /**
68
- * Current array of notifications.
69
- *
70
- * @returns {Notification[]} Array of active notifications
71
- */
72
- get notifications(): Notification[];
73
- constructor();
74
- /**
75
- * Configure the notification service.
76
- *
77
- * @param {NotificationServiceConfig} config Configuration options
78
- */
79
- configure(config: NotificationServiceConfig): void;
80
- /**
81
- * Get the current configuration.
82
- *
83
- * @returns {Required<NotificationServiceConfig>} Current configuration
84
- */
85
- get config(): Required<NotificationServiceConfig>;
86
- private elRefs;
87
- registerRef(id: string, el: HTMLNvNotificationElement): void;
88
- unregisterRef(id: string): void;
89
- clearRefs(): void;
90
- /**
91
- * Show a new notification.
92
- *
93
- * @param {NotificationOptions} options The notification options
94
- * @returns {string} The notification ID
95
- */
96
- show(options: NotificationOptions): string;
97
- /**
98
- * Dismiss a specific notification by ID. This will remove the notification
99
- * after the animation completes.
100
- *
101
- * @param {string} id The notification ID to dismiss
102
- */
103
- dismiss(id: string): void;
104
- /**
105
- * Immediately remove a specific notification by ID.
106
- *
107
- * @param {string} id The notification ID to dismiss
108
- */
109
- remove(id: string): void;
110
- /**
111
- * Immediately remove all active notifications.
112
- */
113
- removeAll(): void;
114
- static ɵfac: i0.ɵɵFactoryDeclaration<NotificationService, never>;
115
- static ɵprov: i0.ɵɵInjectableDeclaration<NotificationService>;
116
- }