@odx/angular 5.3.3 → 5.4.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.
Files changed (95) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/components/button/lib/models/button-size.d.ts +2 -1
  3. package/components/notification/README.md +3 -0
  4. package/components/notification/index.d.ts +7 -0
  5. package/components/notification/lib/components/index.d.ts +2 -0
  6. package/components/notification/lib/components/notification-center/notification-center.component.d.ts +19 -0
  7. package/components/notification/lib/components/notification-item/notification-item.component.d.ts +37 -0
  8. package/components/notification/lib/directives/index.d.ts +1 -0
  9. package/components/notification/lib/directives/notification-center.directive.d.ts +69 -0
  10. package/components/notification/lib/features/index.d.ts +5 -0
  11. package/components/notification/lib/features/with-browser-notifications.d.ts +17 -0
  12. package/components/notification/lib/features/with-load-notifications.d.ts +18 -0
  13. package/components/notification/lib/features/with-notification-transformer.d.ts +26 -0
  14. package/components/notification/lib/features/with-peristent-notifications.d.ts +63 -0
  15. package/components/notification/lib/features/with-save-notifications.d.ts +11 -0
  16. package/components/notification/lib/helpers/get-notifications-by-tag.d.ts +2 -0
  17. package/components/notification/lib/helpers/index.d.ts +3 -0
  18. package/components/notification/lib/helpers/sort-notifications.d.ts +3 -0
  19. package/components/notification/lib/helpers/to-notification-collection.d.ts +3 -0
  20. package/components/notification/lib/models/index.d.ts +8 -0
  21. package/components/notification/lib/models/notification-action.d.ts +2 -0
  22. package/components/notification/lib/models/notification-collection.d.ts +6 -0
  23. package/components/notification/lib/models/notification-feature.d.ts +5 -0
  24. package/components/notification/lib/models/notification-options.d.ts +7 -0
  25. package/components/notification/lib/models/notification-query.d.ts +2 -0
  26. package/components/notification/lib/models/notification-sort-fn.d.ts +2 -0
  27. package/components/notification/lib/models/notification.d.ts +6 -0
  28. package/components/notification/lib/models/notification.ref.d.ts +9 -0
  29. package/components/notification/lib/notification.config.d.ts +11 -0
  30. package/components/notification/lib/notification.i18n.d.ts +3 -0
  31. package/components/notification/lib/notification.logger.d.ts +3 -0
  32. package/components/notification/lib/notification.service.d.ts +110 -0
  33. package/components/notification/lib/notification.tokens.d.ts +4 -0
  34. package/components/notification/lib/services/index.d.ts +1 -0
  35. package/components/notification/lib/services/notification-center.service.d.ts +69 -0
  36. package/components/notification/testing/README.md +3 -0
  37. package/components/notification/testing/index.d.ts +1 -0
  38. package/components/notification/testing/lib/test-helpers.d.ts +5 -0
  39. package/components/rich-list/lib/rich-list.component.d.ts +7 -1
  40. package/components/toast/lib/toast.service.d.ts +30 -2
  41. package/esm2022/components/button/lib/models/button-size.mjs +2 -1
  42. package/esm2022/components/notification/index.mjs +8 -0
  43. package/esm2022/components/notification/lib/components/index.mjs +3 -0
  44. package/esm2022/components/notification/lib/components/notification-center/notification-center.component.mjs +65 -0
  45. package/esm2022/components/notification/lib/components/notification-item/notification-item.component.mjs +65 -0
  46. package/esm2022/components/notification/lib/directives/index.mjs +2 -0
  47. package/esm2022/components/notification/lib/directives/notification-center.directive.mjs +142 -0
  48. package/esm2022/components/notification/lib/features/index.mjs +6 -0
  49. package/esm2022/components/notification/lib/features/with-browser-notifications.mjs +75 -0
  50. package/esm2022/components/notification/lib/features/with-load-notifications.mjs +45 -0
  51. package/esm2022/components/notification/lib/features/with-notification-transformer.mjs +34 -0
  52. package/esm2022/components/notification/lib/features/with-peristent-notifications.mjs +94 -0
  53. package/esm2022/components/notification/lib/features/with-save-notifications.mjs +45 -0
  54. package/esm2022/components/notification/lib/helpers/get-notifications-by-tag.mjs +7 -0
  55. package/esm2022/components/notification/lib/helpers/index.mjs +4 -0
  56. package/esm2022/components/notification/lib/helpers/sort-notifications.mjs +10 -0
  57. package/esm2022/components/notification/lib/helpers/to-notification-collection.mjs +9 -0
  58. package/esm2022/components/notification/lib/models/index.mjs +9 -0
  59. package/esm2022/components/notification/lib/models/notification-action.mjs +2 -0
  60. package/esm2022/components/notification/lib/models/notification-collection.mjs +2 -0
  61. package/esm2022/components/notification/lib/models/notification-feature.mjs +4 -0
  62. package/esm2022/components/notification/lib/models/notification-options.mjs +2 -0
  63. package/esm2022/components/notification/lib/models/notification-query.mjs +2 -0
  64. package/esm2022/components/notification/lib/models/notification-sort-fn.mjs +2 -0
  65. package/esm2022/components/notification/lib/models/notification.mjs +2 -0
  66. package/esm2022/components/notification/lib/models/notification.ref.mjs +2 -0
  67. package/esm2022/components/notification/lib/notification.config.mjs +11 -0
  68. package/esm2022/components/notification/lib/notification.i18n.mjs +11 -0
  69. package/esm2022/components/notification/lib/notification.logger.mjs +3 -0
  70. package/esm2022/components/notification/lib/notification.service.mjs +168 -0
  71. package/esm2022/components/notification/lib/notification.tokens.mjs +7 -0
  72. package/esm2022/components/notification/lib/services/index.mjs +2 -0
  73. package/esm2022/components/notification/lib/services/notification-center.service.mjs +96 -0
  74. package/esm2022/components/notification/odx-angular-components-notification.mjs +5 -0
  75. package/esm2022/components/notification/testing/index.mjs +2 -0
  76. package/esm2022/components/notification/testing/lib/test-helpers.mjs +33 -0
  77. package/esm2022/components/notification/testing/odx-angular-components-notification-testing.mjs +5 -0
  78. package/esm2022/components/rich-list/lib/rich-list.component.mjs +18 -6
  79. package/esm2022/components/toast/lib/components/toast-container/toast-container.component.mjs +6 -6
  80. package/esm2022/components/toast/lib/toast.service.mjs +38 -8
  81. package/esm2022/utils/lib/helpers/array.mjs +24 -1
  82. package/fesm2022/odx-angular-components-button.mjs +1 -0
  83. package/fesm2022/odx-angular-components-button.mjs.map +1 -1
  84. package/fesm2022/odx-angular-components-notification-testing.mjs +39 -0
  85. package/fesm2022/odx-angular-components-notification-testing.mjs.map +1 -0
  86. package/fesm2022/odx-angular-components-notification.mjs +832 -0
  87. package/fesm2022/odx-angular-components-notification.mjs.map +1 -0
  88. package/fesm2022/odx-angular-components-rich-list.mjs +17 -5
  89. package/fesm2022/odx-angular-components-rich-list.mjs.map +1 -1
  90. package/fesm2022/odx-angular-components-toast.mjs +42 -11
  91. package/fesm2022/odx-angular-components-toast.mjs.map +1 -1
  92. package/fesm2022/odx-angular-utils.mjs +23 -0
  93. package/fesm2022/odx-angular-utils.mjs.map +1 -1
  94. package/package.json +13 -1
  95. package/utils/lib/helpers/array.d.ts +23 -0
@@ -0,0 +1,5 @@
1
+ import { Notification, NotificationCollection, NotificationOptions, NotificationRef } from '@odx/angular/components/notification';
2
+ export declare function mockNotification(props?: Partial<Notification>): Notification;
3
+ export declare function mockNotificationOptions(props?: Partial<NotificationOptions>): NotificationOptions;
4
+ export declare function mockNotificationRef(props?: Partial<NotificationRef>): NotificationRef;
5
+ export declare function mockNotificationCollection(refs: NotificationRef[]): NotificationCollection;
@@ -2,6 +2,12 @@ import * as i0 from "@angular/core";
2
2
  import * as i1 from "@odx/angular/cdk/expandable";
3
3
  export declare class RichListComponent {
4
4
  readonly element: import("@angular/core").ElementRef<HTMLElement>;
5
+ /**
6
+ * @input condensed
7
+ * This rich-list variant sets the vertical padding to 0 for all it's rich-list-items
8
+ */
9
+ condensed: boolean;
5
10
  static ɵfac: i0.ɵɵFactoryDeclaration<RichListComponent, never>;
6
- static ɵcmp: i0.ɵɵComponentDeclaration<RichListComponent, "odx-rich-list", never, {}, {}, never, ["odx-rich-list-item"], true, [{ directive: typeof i1.ExpandableContainerDirective; inputs: { "multiple": "multiple"; }; outputs: {}; }]>;
11
+ static ɵcmp: i0.ɵɵComponentDeclaration<RichListComponent, "odx-rich-list", never, { "condensed": { "alias": "condensed"; "required": false; }; }, {}, never, ["odx-rich-list-item"], true, [{ directive: typeof i1.ExpandableContainerDirective; inputs: { "multiple": "multiple"; }; outputs: {}; }]>;
12
+ static ngAcceptInputType_condensed: unknown;
7
13
  }
@@ -2,15 +2,43 @@ import { Toast, ToastOptions, ToastRef } from './models';
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class ToastService {
4
4
  private readonly queue;
5
- private readonly onRemove$$;
6
5
  private readonly defaultOptions;
6
+ readonly toasts$: import("rxjs").Observable<(ToastRef & {
7
+ id: string | number;
8
+ })[]>;
9
+ readonly onUpdate$: import("rxjs").Observable<ToastRef>;
10
+ readonly onToastAdd$: import("rxjs").Observable<ToastRef>;
11
+ readonly onToastUpdate$: import("rxjs").Observable<ToastRef>;
12
+ readonly onToastRemove$: import("rxjs").Observable<ToastRef>;
13
+ /**
14
+ * @deprecated Use `toasts$` instead
15
+ */
7
16
  readonly queue$: import("rxjs").Observable<(ToastRef & {
8
17
  id: string | number;
9
18
  })[]>;
19
+ /**
20
+ * @deprecated Use `onToastAdd$` instead
21
+ */
22
+ readonly onAdd$: import("rxjs").Observable<ToastRef>;
23
+ /**
24
+ * @deprecated Use `onToastRemove$` instead
25
+ */
10
26
  readonly onRemove$: import("rxjs").Observable<ToastRef>;
27
+ /**
28
+ * @deprecated Use `create` instead
29
+ */
11
30
  add(item: Toast, options?: Partial<ToastOptions>): ToastRef;
12
- remove(itemRef: ToastRef): void;
31
+ create(item: Toast, options?: Partial<ToastOptions>): ToastRef;
32
+ /**
33
+ * @deprecated Use `dismiss` instead
34
+ */
35
+ remove(refOrId: ToastRef | ToastRef['id']): ToastRef | null;
36
+ dismiss(refOrId: ToastRef | ToastRef['id']): ToastRef | null;
37
+ /**
38
+ * @deprecated Use `dismissAll` instead
39
+ */
13
40
  clear(): void;
41
+ dismissAll(): void;
14
42
  static ɵfac: i0.ɵɵFactoryDeclaration<ToastService, never>;
15
43
  static ɵprov: i0.ɵɵInjectableDeclaration<ToastService>;
16
44
  }
@@ -1,5 +1,6 @@
1
1
  export const ButtonSize = {
2
2
  SMALL: 'small',
3
3
  MEDIUM: 'medium',
4
+ LARGE: 'large',
4
5
  };
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLXNpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9idXR0b24vc3JjL2xpYi9tb2RlbHMvYnV0dG9uLXNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLEtBQUssRUFBRSxPQUFPO0lBQ2QsTUFBTSxFQUFFLFFBQVE7Q0FDUixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgQnV0dG9uU2l6ZSA9IHR5cGVvZiBCdXR0b25TaXplW2tleW9mIHR5cGVvZiBCdXR0b25TaXplXTtcblxuZXhwb3J0IGNvbnN0IEJ1dHRvblNpemUgPSB7XG4gIFNNQUxMOiAnc21hbGwnLFxuICBNRURJVU06ICdtZWRpdW0nLFxufSBhcyBjb25zdDtcbiJdfQ==
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLXNpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9idXR0b24vc3JjL2xpYi9tb2RlbHMvYnV0dG9uLXNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLEtBQUssRUFBRSxPQUFPO0lBQ2QsTUFBTSxFQUFFLFFBQVE7SUFDaEIsS0FBSyxFQUFFLE9BQU87Q0FDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgQnV0dG9uU2l6ZSA9ICh0eXBlb2YgQnV0dG9uU2l6ZSlba2V5b2YgdHlwZW9mIEJ1dHRvblNpemVdO1xuXG5leHBvcnQgY29uc3QgQnV0dG9uU2l6ZSA9IHtcbiAgU01BTEw6ICdzbWFsbCcsXG4gIE1FRElVTTogJ21lZGl1bScsXG4gIExBUkdFOiAnbGFyZ2UnLFxufSBhcyBjb25zdDtcbiJdfQ==
@@ -0,0 +1,8 @@
1
+ export * from './lib/components';
2
+ export * from './lib/directives';
3
+ export * from './lib/features';
4
+ export * from './lib/models';
5
+ export * from './lib/notification.config';
6
+ export * from './lib/notification.service';
7
+ export * from './lib/notification.tokens';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZlYXR1cmVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ub3RpZmljYXRpb24uY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL25vdGlmaWNhdGlvbi50b2tlbnMnO1xuIl19
@@ -0,0 +1,3 @@
1
+ export * from './notification-center/notification-center.component';
2
+ export * from './notification-item/notification-item.component';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2xpYi9jb21wb25lbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYyxpREFBaUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbm90aWZpY2F0aW9uLWNlbnRlci9ub3RpZmljYXRpb24tY2VudGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbi1pdGVtL25vdGlmaWNhdGlvbi1pdGVtLmNvbXBvbmVudCc7XG4iXX0=
@@ -0,0 +1,65 @@
1
+ import { __decorate } from "tslib";
2
+ import { transition, trigger, useAnimation } from '@angular/animations';
3
+ import { CommonModule } from '@angular/common';
4
+ import { ChangeDetectionStrategy, Component, ViewEncapsulation, inject } from '@angular/core';
5
+ import { LetDirective } from '@ngrx/component';
6
+ import { collapse } from '@odx/angular/animations';
7
+ import { InteractiveDirective } from '@odx/angular/cdk/a11y';
8
+ import { DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';
9
+ import { ActionGroupComponent } from '@odx/angular/components/action-group';
10
+ import { BadgeDirective } from '@odx/angular/components/badge';
11
+ import { ButtonComponent } from '@odx/angular/components/button';
12
+ import { DropdownModule } from '@odx/angular/components/dropdown';
13
+ import { IconComponent } from '@odx/angular/components/icon';
14
+ import { ListModule } from '@odx/angular/components/list';
15
+ import { CSSComponent } from '@odx/angular/internal';
16
+ import { TranslatePipe, provideTranslations } from '@odx/angular/internal/translate';
17
+ import { injectElement, trackById } from '@odx/angular/utils';
18
+ import notificationI18n from '../../notification.i18n';
19
+ import { NotificationCenterService } from '../../services';
20
+ import { NotificationItemComponent } from '../notification-item/notification-item.component';
21
+ import * as i0 from "@angular/core";
22
+ import * as i1 from "@angular/common";
23
+ import * as i2 from "@odx/angular";
24
+ import * as i3 from "@odx/angular/components/list";
25
+ /**
26
+ * A component for displaying and managing a list of notifications. It integrates various sub-components and directives to provide a rich user interface for notification interaction. Supports animations for notification transitions and leverages Angular's change detection strategies for performance.
27
+ *
28
+ * @CSSComponent 'notification-center' - Specifies the CSS class for styling the notification center component.
29
+ */
30
+ export let NotificationCenterComponent = class NotificationCenterComponent {
31
+ constructor() {
32
+ this.notificationCenterService = inject(NotificationCenterService);
33
+ this.trackById = trackById;
34
+ this.element = injectElement();
35
+ }
36
+ ngOnDestroy() {
37
+ this.notificationCenterService.markAllAsSeen();
38
+ }
39
+ isMuted({ options, hasBeenSeen }) {
40
+ return hasBeenSeen && !options.action;
41
+ }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NotificationCenterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
43
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NotificationCenterComponent, isStandalone: true, selector: "odx-notification-center", providers: [provideTranslations(notificationI18n)], ngImport: i0, template: "<ng-template [ngIf]=\"notificationCenterService.notifications$ | async\" let-notifications>\n <h3 class=\"odx-notification-center__header\" *ngrxLet=\"notificationCenterService.title$ | async as title\">\n <ng-template [odxDynamicView]=\"title ?? ('title' | odxTranslate | async)\"></ng-template>\n </h3>\n <odx-list class=\"odx-notification-center__content\">\n <odx-list-item\n @notificationAnimation\n [muted]=\"isMuted(notification)\"\n [selected]=\"!notification.hasBeenSeen\"\n (click)=\"notificationCenterService.executeAction(notification)\"\n *ngFor=\"let notification of notifications.values; trackBy: trackById\"\n >\n <odx-notification-item [notification]=\"notification\" (dismiss)=\"notificationCenterService.dismiss(notification)\" />\n </odx-list-item>\n </odx-list>\n <div class=\"odx-notification-center__footer\">\n <button odxButton [disabled]=\"false\" (click)=\"notificationCenterService.dismissAll()\">\n {{ 'dismissAll' | odxTranslate | async }}\n </button>\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "component", type: ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "directive", type: DynamicViewDirective, selector: "ng-template[odxDynamicView]", inputs: ["odxDynamicView", "odxDynamicViewInjector", "odxDynamicViewContext"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "directive", type: i2.DisabledController, selector: "[disabled]", inputs: ["disabled"] }, { kind: "pipe", type: TranslatePipe, name: "odxTranslate" }, { kind: "component", type: NotificationItemComponent, selector: "odx-notification-item", inputs: ["notification"], outputs: ["dismiss"] }, { kind: "ngmodule", type: ListModule }, { kind: "component", type: i3.ListComponent, selector: "odx-list" }, { kind: "component", type: i3.ListItemComponent, selector: "odx-list-item, [odxListItem]", inputs: ["danger", "muted", "selected"] }], animations: [trigger('notificationAnimation', [transition(':leave', useAnimation(collapse, { delay: 150 }))])], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
44
+ };
45
+ NotificationCenterComponent = __decorate([
46
+ CSSComponent('notification-center')
47
+ ], NotificationCenterComponent);
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NotificationCenterComponent, decorators: [{
49
+ type: Component,
50
+ args: [{ selector: 'odx-notification-center', standalone: true, imports: [
51
+ CommonModule,
52
+ LetDirective,
53
+ ActionGroupComponent,
54
+ BadgeDirective,
55
+ ButtonComponent,
56
+ DynamicViewDirective,
57
+ IconComponent,
58
+ DropdownModule,
59
+ TranslatePipe,
60
+ NotificationItemComponent,
61
+ InteractiveDirective,
62
+ ListModule,
63
+ ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [provideTranslations(notificationI18n)], animations: [trigger('notificationAnimation', [transition(':leave', useAnimation(collapse, { delay: 150 }))])], template: "<ng-template [ngIf]=\"notificationCenterService.notifications$ | async\" let-notifications>\n <h3 class=\"odx-notification-center__header\" *ngrxLet=\"notificationCenterService.title$ | async as title\">\n <ng-template [odxDynamicView]=\"title ?? ('title' | odxTranslate | async)\"></ng-template>\n </h3>\n <odx-list class=\"odx-notification-center__content\">\n <odx-list-item\n @notificationAnimation\n [muted]=\"isMuted(notification)\"\n [selected]=\"!notification.hasBeenSeen\"\n (click)=\"notificationCenterService.executeAction(notification)\"\n *ngFor=\"let notification of notifications.values; trackBy: trackById\"\n >\n <odx-notification-item [notification]=\"notification\" (dismiss)=\"notificationCenterService.dismiss(notification)\" />\n </odx-list-item>\n </odx-list>\n <div class=\"odx-notification-center__footer\">\n <button odxButton [disabled]=\"false\" (click)=\"notificationCenterService.dismissAll()\">\n {{ 'dismissAll' | odxTranslate | async }}\n </button>\n </div>\n</ng-template>\n" }]
64
+ }] });
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWNlbnRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2xpYi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi1jZW50ZXIvbm90aWZpY2F0aW9uLWNlbnRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2xpYi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi1jZW50ZXIvbm90aWZpY2F0aW9uLWNlbnRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQWEsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUQsT0FBTyxnQkFBZ0IsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQzs7Ozs7QUFFN0Y7Ozs7R0FJRztBQXlCSSxXQUFNLDJCQUEyQixHQUFqQyxNQUFNLDJCQUEyQjtJQUFqQztRQUNjLDhCQUF5QixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzlELGNBQVMsR0FBRyxTQUFTLENBQUM7UUFFekIsWUFBTyxHQUFHLGFBQWEsRUFBRSxDQUFDO0tBUzNDO0lBUFEsV0FBVztRQUNoQixJQUFJLENBQUMseUJBQXlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDakQsQ0FBQztJQUVTLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQW1CO1FBQ3pELE9BQU8sV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUN4QyxDQUFDOytHQVpVLDJCQUEyQjttR0FBM0IsMkJBQTJCLHNFQUgzQixDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLENBQUMsMEJDL0NwRCw2aUNBcUJBLDJDRFVJLFlBQVkscVRBQ1osWUFBWSxpR0FHWixlQUFlLHlHQUNmLG9CQUFvQixzSkFFcEIsY0FBYyw0SEFDZCxhQUFhLHFEQUNiLHlCQUF5QixpSEFFekIsVUFBVSw0TkFNQSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUVuRywyQkFBMkI7SUF4QnZDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQztHQXdCdkIsMkJBQTJCLENBYXZDOzRGQWJZLDJCQUEyQjtrQkF2QnZDLFNBQVM7K0JBQ0UseUJBQXlCLGNBQ3ZCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFlBQVk7d0JBQ1osb0JBQW9CO3dCQUNwQixjQUFjO3dCQUNkLGVBQWU7d0JBQ2Ysb0JBQW9CO3dCQUNwQixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYix5QkFBeUI7d0JBQ3pCLG9CQUFvQjt3QkFDcEIsVUFBVTtxQkFDWCxpQkFFYyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxjQUN0QyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHJhbnNpdGlvbiwgdHJpZ2dlciwgdXNlQW5pbWF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25EZXN0cm95LCBWaWV3RW5jYXBzdWxhdGlvbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMZXREaXJlY3RpdmUgfSBmcm9tICdAbmdyeC9jb21wb25lbnQnO1xuaW1wb3J0IHsgY29sbGFwc2UgfSBmcm9tICdAb2R4L2FuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBJbnRlcmFjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBEeW5hbWljVmlld0RpcmVjdGl2ZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvZHluYW1pYy12aWV3JztcbmltcG9ydCB7IEFjdGlvbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvYWN0aW9uLWdyb3VwJztcbmltcG9ydCB7IEJhZGdlRGlyZWN0aXZlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvYmFkZ2UnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IERyb3Bkb3duTW9kdWxlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHsgTGlzdE1vZHVsZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2xpc3QnO1xuaW1wb3J0IHsgQ1NTQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUsIHByb3ZpZGVUcmFuc2xhdGlvbnMgfSBmcm9tICdAb2R4L2FuZ3VsYXIvaW50ZXJuYWwvdHJhbnNsYXRlJztcbmltcG9ydCB7IGluamVjdEVsZW1lbnQsIHRyYWNrQnlJZCB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25SZWYgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IG5vdGlmaWNhdGlvbkkxOG4gZnJvbSAnLi4vLi4vbm90aWZpY2F0aW9uLmkxOG4nO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uQ2VudGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9ub3RpZmljYXRpb24taXRlbS9ub3RpZmljYXRpb24taXRlbS5jb21wb25lbnQnO1xuXG4vKipcbiAqIEEgY29tcG9uZW50IGZvciBkaXNwbGF5aW5nIGFuZCBtYW5hZ2luZyBhIGxpc3Qgb2Ygbm90aWZpY2F0aW9ucy4gSXQgaW50ZWdyYXRlcyB2YXJpb3VzIHN1Yi1jb21wb25lbnRzIGFuZCBkaXJlY3RpdmVzIHRvIHByb3ZpZGUgYSByaWNoIHVzZXIgaW50ZXJmYWNlIGZvciBub3RpZmljYXRpb24gaW50ZXJhY3Rpb24uIFN1cHBvcnRzIGFuaW1hdGlvbnMgZm9yIG5vdGlmaWNhdGlvbiB0cmFuc2l0aW9ucyBhbmQgbGV2ZXJhZ2VzIEFuZ3VsYXIncyBjaGFuZ2UgZGV0ZWN0aW9uIHN0cmF0ZWdpZXMgZm9yIHBlcmZvcm1hbmNlLlxuICpcbiAqIEBDU1NDb21wb25lbnQgJ25vdGlmaWNhdGlvbi1jZW50ZXInIC0gU3BlY2lmaWVzIHRoZSBDU1MgY2xhc3MgZm9yIHN0eWxpbmcgdGhlIG5vdGlmaWNhdGlvbiBjZW50ZXIgY29tcG9uZW50LlxuICovXG5AQ1NTQ29tcG9uZW50KCdub3RpZmljYXRpb24tY2VudGVyJylcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ29keC1ub3RpZmljYXRpb24tY2VudGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBMZXREaXJlY3RpdmUsXG4gICAgQWN0aW9uR3JvdXBDb21wb25lbnQsXG4gICAgQmFkZ2VEaXJlY3RpdmUsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIER5bmFtaWNWaWV3RGlyZWN0aXZlLFxuICAgIEljb25Db21wb25lbnQsXG4gICAgRHJvcGRvd25Nb2R1bGUsXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgICBOb3RpZmljYXRpb25JdGVtQ29tcG9uZW50LFxuICAgIEludGVyYWN0aXZlRGlyZWN0aXZlLFxuICAgIExpc3RNb2R1bGUsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9ub3RpZmljYXRpb24tY2VudGVyLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW3Byb3ZpZGVUcmFuc2xhdGlvbnMobm90aWZpY2F0aW9uSTE4bildLFxuICBhbmltYXRpb25zOiBbdHJpZ2dlcignbm90aWZpY2F0aW9uQW5pbWF0aW9uJywgW3RyYW5zaXRpb24oJzpsZWF2ZScsIHVzZUFuaW1hdGlvbihjb2xsYXBzZSwgeyBkZWxheTogMTUwIH0pKV0pXSxcbn0pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uQ2VudGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkNlbnRlclNlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uQ2VudGVyU2VydmljZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSB0cmFja0J5SWQgPSB0cmFja0J5SWQ7XG5cbiAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3RFbGVtZW50KCk7XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubm90aWZpY2F0aW9uQ2VudGVyU2VydmljZS5tYXJrQWxsQXNTZWVuKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNNdXRlZCh7IG9wdGlvbnMsIGhhc0JlZW5TZWVuIH06IE5vdGlmaWNhdGlvblJlZik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBoYXNCZWVuU2VlbiAmJiAhb3B0aW9ucy5hY3Rpb247XG4gIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBbbmdJZl09XCJub3RpZmljYXRpb25DZW50ZXJTZXJ2aWNlLm5vdGlmaWNhdGlvbnMkIHwgYXN5bmNcIiBsZXQtbm90aWZpY2F0aW9ucz5cbiAgPGgzIGNsYXNzPVwib2R4LW5vdGlmaWNhdGlvbi1jZW50ZXJfX2hlYWRlclwiICpuZ3J4TGV0PVwibm90aWZpY2F0aW9uQ2VudGVyU2VydmljZS50aXRsZSQgfCBhc3luYyBhcyB0aXRsZVwiPlxuICAgIDxuZy10ZW1wbGF0ZSBbb2R4RHluYW1pY1ZpZXddPVwidGl0bGUgPz8gKCd0aXRsZScgfCBvZHhUcmFuc2xhdGUgfCBhc3luYylcIj48L25nLXRlbXBsYXRlPlxuICA8L2gzPlxuICA8b2R4LWxpc3QgY2xhc3M9XCJvZHgtbm90aWZpY2F0aW9uLWNlbnRlcl9fY29udGVudFwiPlxuICAgIDxvZHgtbGlzdC1pdGVtXG4gICAgICBAbm90aWZpY2F0aW9uQW5pbWF0aW9uXG4gICAgICBbbXV0ZWRdPVwiaXNNdXRlZChub3RpZmljYXRpb24pXCJcbiAgICAgIFtzZWxlY3RlZF09XCIhbm90aWZpY2F0aW9uLmhhc0JlZW5TZWVuXCJcbiAgICAgIChjbGljayk9XCJub3RpZmljYXRpb25DZW50ZXJTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24obm90aWZpY2F0aW9uKVwiXG4gICAgICAqbmdGb3I9XCJsZXQgbm90aWZpY2F0aW9uIG9mIG5vdGlmaWNhdGlvbnMudmFsdWVzOyB0cmFja0J5OiB0cmFja0J5SWRcIlxuICAgID5cbiAgICAgIDxvZHgtbm90aWZpY2F0aW9uLWl0ZW0gW25vdGlmaWNhdGlvbl09XCJub3RpZmljYXRpb25cIiAoZGlzbWlzcyk9XCJub3RpZmljYXRpb25DZW50ZXJTZXJ2aWNlLmRpc21pc3Mobm90aWZpY2F0aW9uKVwiIC8+XG4gICAgPC9vZHgtbGlzdC1pdGVtPlxuICA8L29keC1saXN0PlxuICA8ZGl2IGNsYXNzPVwib2R4LW5vdGlmaWNhdGlvbi1jZW50ZXJfX2Zvb3RlclwiPlxuICAgIDxidXR0b24gb2R4QnV0dG9uIFtkaXNhYmxlZF09XCJmYWxzZVwiIChjbGljayk9XCJub3RpZmljYXRpb25DZW50ZXJTZXJ2aWNlLmRpc21pc3NBbGwoKVwiPlxuICAgICAge3sgJ2Rpc21pc3NBbGwnIHwgb2R4VHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -0,0 +1,65 @@
1
+ import { __decorate } from "tslib";
2
+ import { CommonModule } from '@angular/common';
3
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
4
+ import { DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';
5
+ import { ActionGroupComponent } from '@odx/angular/components/action-group';
6
+ import { AvatarComponent } from '@odx/angular/components/avatar';
7
+ import { ButtonComponent } from '@odx/angular/components/button';
8
+ import { IconComponent } from '@odx/angular/components/icon';
9
+ import { CSSComponent } from '@odx/angular/internal';
10
+ import { injectElement } from '@odx/angular/utils';
11
+ import { of } from 'rxjs';
12
+ import { injectNotificationTransform } from '../../features';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@angular/common";
15
+ /**
16
+ * A component for displaying notifications.
17
+ * Supports customization through dynamic transformation of notification data.
18
+ * Utilizes the OnPush change detection strategy for better performance in large applications.
19
+ *
20
+ * @component
21
+ */
22
+ export let NotificationItemComponent = class NotificationItemComponent {
23
+ constructor() {
24
+ this.transformNotification = injectNotificationTransform();
25
+ this.element = injectElement();
26
+ /**
27
+ * An event emitter for dismissing the notification.
28
+ * It emits the notification reference that was dismissed.
29
+ */
30
+ this.dismiss = new EventEmitter();
31
+ }
32
+ /**
33
+ * Input property to set the notification. On setting, it transforms the notification for display.
34
+ * This transformation can be a custom logic provided through dependency injection.
35
+ *
36
+ * @param value NotificationRef - The notification object to be displayed.
37
+ */
38
+ set notification(value) {
39
+ this._notificationRef = value;
40
+ this.transformedNotification = this.transformNotification?.(value) ?? of(value);
41
+ }
42
+ /**
43
+ * Getter for the notification property.
44
+ *
45
+ * @returns NotificationRef - The current notification reference stored in the component.
46
+ */
47
+ get notification() {
48
+ return this._notificationRef;
49
+ }
50
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NotificationItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
51
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NotificationItemComponent, isStandalone: true, selector: "odx-notification-item", inputs: { notification: "notification" }, outputs: { dismiss: "dismiss" }, ngImport: i0, template: "<ng-template [ngIf]=\"transformedNotification | async\" let-ref>\n <odx-avatar class=\"odx-notification-item__avatar odx-no-margin\">\n <odx-icon [identifier]=\"ref.options.icon\" />\n </odx-avatar>\n <div class=\"odx-notification-item__title\">\n <ng-template [odxDynamicView]=\"ref.item.title\" />\n </div>\n <div class=\"odx-notification-item__description\" *ngIf=\"ref.item.description as description\">\n <ng-template [odxDynamicView]=\"ref.item.description\" />\n </div>\n</ng-template>\n<odx-action-group class=\"odx-notification-item__actions odx-no-margin\">\n <button odxButton class=\"odx-no-margin\" (click)=\"dismiss.next(notification)\" *ngIf=\"notification.options.dismissable\">\n <odx-icon name=\"close\" iconSet=\"core\"></odx-icon>\n </button>\n</odx-action-group>\n", dependencies: [{ kind: "component", type: AvatarComponent, selector: "odx-avatar", inputs: ["size", "variant"] }, { kind: "component", type: ActionGroupComponent, selector: "odx-action-group", inputs: ["reverse"] }, { kind: "component", type: ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: DynamicViewDirective, selector: "ng-template[odxDynamicView]", inputs: ["odxDynamicView", "odxDynamicViewInjector", "odxDynamicViewContext"] }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
52
+ };
53
+ NotificationItemComponent = __decorate([
54
+ CSSComponent('notification-item')
55
+ ], NotificationItemComponent);
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NotificationItemComponent, decorators: [{
57
+ type: Component,
58
+ args: [{ selector: 'odx-notification-item', standalone: true, imports: [AvatarComponent, ActionGroupComponent, ButtonComponent, CommonModule, DynamicViewDirective, IconComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template [ngIf]=\"transformedNotification | async\" let-ref>\n <odx-avatar class=\"odx-notification-item__avatar odx-no-margin\">\n <odx-icon [identifier]=\"ref.options.icon\" />\n </odx-avatar>\n <div class=\"odx-notification-item__title\">\n <ng-template [odxDynamicView]=\"ref.item.title\" />\n </div>\n <div class=\"odx-notification-item__description\" *ngIf=\"ref.item.description as description\">\n <ng-template [odxDynamicView]=\"ref.item.description\" />\n </div>\n</ng-template>\n<odx-action-group class=\"odx-notification-item__actions odx-no-margin\">\n <button odxButton class=\"odx-no-margin\" (click)=\"dismiss.next(notification)\" *ngIf=\"notification.options.dismissable\">\n <odx-icon name=\"close\" iconSet=\"core\"></odx-icon>\n </button>\n</odx-action-group>\n" }]
59
+ }], propDecorators: { notification: [{
60
+ type: Input,
61
+ args: [{ required: true }]
62
+ }], dismiss: [{
63
+ type: Output
64
+ }] } });
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL3NyYy9saWIvY29tcG9uZW50cy9ub3RpZmljYXRpb24taXRlbS9ub3RpZmljYXRpb24taXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2xpYi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi1pdGVtL25vdGlmaWNhdGlvbi1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUc3RDs7Ozs7O0dBTUc7QUFVSSxXQUFNLHlCQUF5QixHQUEvQixNQUFNLHlCQUF5QjtJQUEvQjtRQUNZLDBCQUFxQixHQUFHLDJCQUEyQixFQUFFLENBQUM7UUFLdkQsWUFBTyxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBdUIxQzs7O1dBR0c7UUFFSSxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7S0FDdEQ7SUEzQkM7Ozs7O09BS0c7SUFDSCxJQUNXLFlBQVksQ0FBQyxLQUFzQjtRQUM1QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQzsrR0EzQlUseUJBQXlCO21HQUF6Qix5QkFBeUIsNEpDN0J0Qyx1eUJBZ0JBLDRDRFFZLGVBQWUsb0ZBQUUsb0JBQW9CLGtGQUFFLGVBQWUsd0dBQUUsWUFBWSx3TEFBRSxvQkFBb0IsdUpBQUUsYUFBYTs7QUFLeEcseUJBQXlCO0lBVHJDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztHQVNyQix5QkFBeUIsQ0FtQ3JDOzRGQW5DWSx5QkFBeUI7a0JBUnJDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUCxDQUFDLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLGFBQWEsQ0FBQyxpQkFFckcsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTTs4QkFpQnBDLFlBQVk7c0JBRHRCLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQW9CbEIsT0FBTztzQkFEYixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IER5bmFtaWNWaWV3RGlyZWN0aXZlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2Nkay9keW5hbWljLXZpZXcnO1xuaW1wb3J0IHsgQWN0aW9uR3JvdXBDb21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9hY3Rpb24tZ3JvdXAnO1xuaW1wb3J0IHsgQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvYXZhdGFyJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvaWNvbic7XG5pbXBvcnQgeyBDU1NDb21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvaW50ZXJuYWwnO1xuaW1wb3J0IHsgaW5qZWN0RWxlbWVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaW5qZWN0Tm90aWZpY2F0aW9uVHJhbnNmb3JtIH0gZnJvbSAnLi4vLi4vZmVhdHVyZXMnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uUmVmIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcblxuLyoqXG4gKiBBIGNvbXBvbmVudCBmb3IgZGlzcGxheWluZyBub3RpZmljYXRpb25zLlxuICogU3VwcG9ydHMgY3VzdG9taXphdGlvbiB0aHJvdWdoIGR5bmFtaWMgdHJhbnNmb3JtYXRpb24gb2Ygbm90aWZpY2F0aW9uIGRhdGEuXG4gKiBVdGlsaXplcyB0aGUgT25QdXNoIGNoYW5nZSBkZXRlY3Rpb24gc3RyYXRlZ3kgZm9yIGJldHRlciBwZXJmb3JtYW5jZSBpbiBsYXJnZSBhcHBsaWNhdGlvbnMuXG4gKlxuICogQGNvbXBvbmVudFxuICovXG5AQ1NTQ29tcG9uZW50KCdub3RpZmljYXRpb24taXRlbScpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZHgtbm90aWZpY2F0aW9uLWl0ZW0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQXZhdGFyQ29tcG9uZW50LCBBY3Rpb25Hcm91cENvbXBvbmVudCwgQnV0dG9uQ29tcG9uZW50LCBDb21tb25Nb2R1bGUsIER5bmFtaWNWaWV3RGlyZWN0aXZlLCBJY29uQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL25vdGlmaWNhdGlvbi1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbkl0ZW1Db21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zZm9ybU5vdGlmaWNhdGlvbiA9IGluamVjdE5vdGlmaWNhdGlvblRyYW5zZm9ybSgpO1xuICBwcml2YXRlIF9ub3RpZmljYXRpb25SZWYhOiBOb3RpZmljYXRpb25SZWY7XG5cbiAgcHJvdGVjdGVkIHRyYW5zZm9ybWVkTm90aWZpY2F0aW9uITogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25SZWY+O1xuXG4gIHB1YmxpYyByZWFkb25seSBlbGVtZW50ID0gaW5qZWN0RWxlbWVudCgpO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBwcm9wZXJ0eSB0byBzZXQgdGhlIG5vdGlmaWNhdGlvbi4gT24gc2V0dGluZywgaXQgdHJhbnNmb3JtcyB0aGUgbm90aWZpY2F0aW9uIGZvciBkaXNwbGF5LlxuICAgKiBUaGlzIHRyYW5zZm9ybWF0aW9uIGNhbiBiZSBhIGN1c3RvbSBsb2dpYyBwcm92aWRlZCB0aHJvdWdoIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgTm90aWZpY2F0aW9uUmVmIC0gVGhlIG5vdGlmaWNhdGlvbiBvYmplY3QgdG8gYmUgZGlzcGxheWVkLlxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgcHVibGljIHNldCBub3RpZmljYXRpb24odmFsdWU6IE5vdGlmaWNhdGlvblJlZikge1xuICAgIHRoaXMuX25vdGlmaWNhdGlvblJlZiA9IHZhbHVlO1xuICAgIHRoaXMudHJhbnNmb3JtZWROb3RpZmljYXRpb24gPSB0aGlzLnRyYW5zZm9ybU5vdGlmaWNhdGlvbj8uKHZhbHVlKSA/PyBvZih2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0dGVyIGZvciB0aGUgbm90aWZpY2F0aW9uIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcmV0dXJucyBOb3RpZmljYXRpb25SZWYgLSBUaGUgY3VycmVudCBub3RpZmljYXRpb24gcmVmZXJlbmNlIHN0b3JlZCBpbiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIGdldCBub3RpZmljYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX25vdGlmaWNhdGlvblJlZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBldmVudCBlbWl0dGVyIGZvciBkaXNtaXNzaW5nIHRoZSBub3RpZmljYXRpb24uXG4gICAqIEl0IGVtaXRzIHRoZSBub3RpZmljYXRpb24gcmVmZXJlbmNlIHRoYXQgd2FzIGRpc21pc3NlZC5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgZGlzbWlzcyA9IG5ldyBFdmVudEVtaXR0ZXI8Tm90aWZpY2F0aW9uUmVmPigpO1xufVxuIiwiPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInRyYW5zZm9ybWVkTm90aWZpY2F0aW9uIHwgYXN5bmNcIiBsZXQtcmVmPlxuICA8b2R4LWF2YXRhciBjbGFzcz1cIm9keC1ub3RpZmljYXRpb24taXRlbV9fYXZhdGFyIG9keC1uby1tYXJnaW5cIj5cbiAgICA8b2R4LWljb24gW2lkZW50aWZpZXJdPVwicmVmLm9wdGlvbnMuaWNvblwiIC8+XG4gIDwvb2R4LWF2YXRhcj5cbiAgPGRpdiBjbGFzcz1cIm9keC1ub3RpZmljYXRpb24taXRlbV9fdGl0bGVcIj5cbiAgICA8bmctdGVtcGxhdGUgW29keER5bmFtaWNWaWV3XT1cInJlZi5pdGVtLnRpdGxlXCIgLz5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJvZHgtbm90aWZpY2F0aW9uLWl0ZW1fX2Rlc2NyaXB0aW9uXCIgKm5nSWY9XCJyZWYuaXRlbS5kZXNjcmlwdGlvbiBhcyBkZXNjcmlwdGlvblwiPlxuICAgIDxuZy10ZW1wbGF0ZSBbb2R4RHluYW1pY1ZpZXddPVwicmVmLml0ZW0uZGVzY3JpcHRpb25cIiAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48b2R4LWFjdGlvbi1ncm91cCBjbGFzcz1cIm9keC1ub3RpZmljYXRpb24taXRlbV9fYWN0aW9ucyBvZHgtbm8tbWFyZ2luXCI+XG4gIDxidXR0b24gb2R4QnV0dG9uIGNsYXNzPVwib2R4LW5vLW1hcmdpblwiIChjbGljayk9XCJkaXNtaXNzLm5leHQobm90aWZpY2F0aW9uKVwiICpuZ0lmPVwibm90aWZpY2F0aW9uLm9wdGlvbnMuZGlzbWlzc2FibGVcIj5cbiAgICA8b2R4LWljb24gbmFtZT1cImNsb3NlXCIgaWNvblNldD1cImNvcmVcIj48L29keC1pY29uPlxuICA8L2J1dHRvbj5cbjwvb2R4LWFjdGlvbi1ncm91cD5cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './notification-center.directive';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2xpYi9kaXJlY3RpdmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsaUNBQWlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbi1jZW50ZXIuZGlyZWN0aXZlJztcbiJdfQ==
@@ -0,0 +1,142 @@
1
+ import { DestroyRef, Directive, Input, Output, inject } from '@angular/core';
2
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
+ import { DisabledController } from '@odx/angular';
4
+ import { BadgeDirective } from '@odx/angular/components/badge';
5
+ import { DropdownDirective } from '@odx/angular/components/dropdown';
6
+ import { Position } from '@odx/angular/utils';
7
+ import { map, merge, startWith, switchMap, tap } from 'rxjs';
8
+ import { NotificationCenterComponent } from '../components';
9
+ import { NotificationCenterService } from '../services';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@odx/angular/components/badge";
12
+ import * as i2 from "@odx/angular/components/dropdown";
13
+ /**
14
+ * A directive that provides an interface for managing notifications.
15
+ * It allows configuring a notification center with dynamic content, sorting, and badge display functionalities.
16
+ */
17
+ export class NotificationCenterDirective {
18
+ constructor() {
19
+ this.badgeDirective = inject(BadgeDirective, { self: true });
20
+ this.destroyRef = inject(DestroyRef);
21
+ this.disabledController = DisabledController.inject();
22
+ this.dropdownDirective = inject(DropdownDirective, { self: true });
23
+ this.notificationCenterService = inject(NotificationCenterService, { self: true });
24
+ this.dropdownStateChange$ = merge(this.dropdownDirective.beforeOpen, this.dropdownDirective.beforeClose).pipe(startWith(void 0));
25
+ this.badgeValue$ = this.notificationCenterService.unseenNotifications$.pipe(switchMap(({ count }) => this.dropdownStateChange$.pipe(map(() => this.formatBadgeValue(count)))));
26
+ /**
27
+ * An event that is emitted when a new notification is added.
28
+ * Listeners can use this event to react to new notifications being added to the notification center.
29
+ */
30
+ // eslint-disable-next-line @angular-eslint/no-output-rename
31
+ this.notificationAdd = this.notificationCenterService.onNotificationAdd$;
32
+ /**
33
+ * An event that is emitted when a notification is updated.
34
+ * This can be used to react to changes in notifications, such as their read status or content updates.
35
+ */
36
+ // eslint-disable-next-line @angular-eslint/no-output-rename
37
+ this.notificationUpdate = this.notificationCenterService.onNotificationUpdate$;
38
+ /**
39
+ * An event that is emitted when a notification is removed from the notification center.
40
+ * Use this event to handle the removal of notifications, such as cleaning up resources or updating UI elements.
41
+ */
42
+ // eslint-disable-next-line @angular-eslint/no-output-rename
43
+ this.notificationRemove = this.notificationCenterService.onNotificationRemove$;
44
+ /**
45
+ * An event that is emitted when a notification is marked as seen.
46
+ * This event can be used to perform actions when the user acknowledges a notification.
47
+ */
48
+ // eslint-disable-next-line @angular-eslint/no-output-rename
49
+ this.notificationSeen = this.notificationCenterService.onNotificationSeen$;
50
+ }
51
+ /**
52
+ * Sets the tag for filtering notifications. Only notifications with this tag will be shown in the notification center.
53
+ * @param value The tag value to filter notifications. If null, all notifications are shown.
54
+ */
55
+ set tag(value) {
56
+ this.notificationCenterService.setTag(value);
57
+ }
58
+ /**
59
+ * Sets the title of the notification center. The title can be dynamic and change based on the application state.
60
+ * @param value The title content, which can be a string or an Observable returning a string. Allows for dynamic titles.
61
+ */
62
+ set title(value) {
63
+ this.notificationCenterService.setTitle(value);
64
+ }
65
+ /**
66
+ * Sets the sorting function used to order notifications within the notification center.
67
+ * @param value A function that compares two notifications and returns the sort order.
68
+ *
69
+ * @example
70
+ * sortFfn = (a: NotificationRef, b: NotificationRef) => {
71
+ if (a.createdAt < b.createdAt) return -1;
72
+ if (a.createdAt > b.createdAt) return 1;
73
+ return 0;
74
+ };
75
+ */
76
+ set sortFn(value) {
77
+ this.notificationCenterService.setSortFn(value);
78
+ }
79
+ ngOnInit() {
80
+ this.badgeDirective.position = Position.BOTTOM;
81
+ this.badgeDirective.offset = 6;
82
+ this.dropdownDirective.content = NotificationCenterComponent;
83
+ this.dropdownDirective.options = {
84
+ containerClass: 'odx-notification-center-overlay',
85
+ position: Position.BOTTOM_END,
86
+ enableFallback: false,
87
+ };
88
+ }
89
+ ngAfterViewInit() {
90
+ merge(this.handleBadgeUpdates(), this.handleDropdownUpdates()).pipe(takeUntilDestroyed(this.destroyRef)).subscribe();
91
+ }
92
+ formatBadgeValue(value) {
93
+ return this.dropdownDirective.isOpen || value === 0 ? null : value.toFixed(0);
94
+ }
95
+ handleBadgeUpdates() {
96
+ return this.badgeValue$.pipe(tap((value) => {
97
+ this.badgeDirective.value = value;
98
+ this.badgeDirective.ngOnChanges();
99
+ }));
100
+ }
101
+ handleDropdownUpdates() {
102
+ return this.notificationCenterService.notifications$.pipe(tap(({ isEmpty }) => {
103
+ this.disabledController?.setDisabledState(isEmpty);
104
+ if (!isEmpty)
105
+ return;
106
+ this.dropdownDirective.close();
107
+ }));
108
+ }
109
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NotificationCenterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
110
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: NotificationCenterDirective, isStandalone: true, selector: "[odxNotificationCenter]", inputs: { tag: ["odxNotificationCenter", "tag"], title: ["odxNotificationCenterTitle", "title"], sortFn: ["odxNotificationCenterSortFn", "sortFn"] }, outputs: { notificationAdd: "odxNotificationCenterAdd", notificationUpdate: "odxNotificationCenterUpdate", notificationRemove: "odxNotificationCenterRemove", notificationSeen: "odxNotificationCenterSeen" }, providers: [NotificationCenterService], hostDirectives: [{ directive: i1.BadgeDirective, inputs: ["odxBadgeVariant", "odxNotificationCenterBadgeVariant"] }, { directive: i2.DropdownDirective }], ngImport: i0 }); }
111
+ }
112
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NotificationCenterDirective, decorators: [{
113
+ type: Directive,
114
+ args: [{
115
+ standalone: true,
116
+ selector: '[odxNotificationCenter]',
117
+ hostDirectives: [{ directive: BadgeDirective, inputs: ['odxBadgeVariant:odxNotificationCenterBadgeVariant'] }, DropdownDirective],
118
+ providers: [NotificationCenterService],
119
+ }]
120
+ }], propDecorators: { tag: [{
121
+ type: Input,
122
+ args: ['odxNotificationCenter']
123
+ }], title: [{
124
+ type: Input,
125
+ args: ['odxNotificationCenterTitle']
126
+ }], sortFn: [{
127
+ type: Input,
128
+ args: ['odxNotificationCenterSortFn']
129
+ }], notificationAdd: [{
130
+ type: Output,
131
+ args: ['odxNotificationCenterAdd']
132
+ }], notificationUpdate: [{
133
+ type: Output,
134
+ args: ['odxNotificationCenterUpdate']
135
+ }], notificationRemove: [{
136
+ type: Output,
137
+ args: ['odxNotificationCenterRemove']
138
+ }], notificationSeen: [{
139
+ type: Output,
140
+ args: ['odxNotificationCenterSeen']
141
+ }] } });
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWNlbnRlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2xpYi9kaXJlY3RpdmVzL25vdGlmaWNhdGlvbi1jZW50ZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQWMsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7O0FBRXhEOzs7R0FHRztBQU9ILE1BQU0sT0FBTywyQkFBMkI7SUFOeEM7UUFPbUIsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEQsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyx1QkFBa0IsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNqRCxzQkFB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c0JBRHhCLE1BQU07dUJBQUMsNkJBQTZCO2dCQVM5QixnQkFBZ0I7c0JBRHRCLE1BQU07dUJBQUMsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGVzdHJveVJlZiwgRGlyZWN0aXZlLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRGlzYWJsZWRDb250cm9sbGVyIH0gZnJvbSAnQG9keC9hbmd1bGFyJztcbmltcG9ydCB7IER5bmFtaWNUZXh0Q29udGVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvZHluYW1pYy12aWV3JztcbmltcG9ydCB7IEJhZGdlRGlyZWN0aXZlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvYmFkZ2UnO1xuaW1wb3J0IHsgRHJvcGRvd25EaXJlY3RpdmUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9kcm9wZG93bic7XG5pbXBvcnQgeyBQb3NpdGlvbiB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAsIG1lcmdlLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25DZW50ZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNvcnRGbiB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25DZW50ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRoYXQgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciBtYW5hZ2luZyBub3RpZmljYXRpb25zLlxuICogSXQgYWxsb3dzIGNvbmZpZ3VyaW5nIGEgbm90aWZpY2F0aW9uIGNlbnRlciB3aXRoIGR5bmFtaWMgY29udGVudCwgc29ydGluZywgYW5kIGJhZGdlIGRpc3BsYXkgZnVuY3Rpb25hbGl0aWVzLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbb2R4Tm90aWZpY2F0aW9uQ2VudGVyXScsXG4gIGhvc3REaXJlY3RpdmVzOiBbeyBkaXJlY3RpdmU6IEJhZGdlRGlyZWN0aXZlLCBpbnB1dHM6IFsnb2R4QmFkZ2VWYXJpYW50Om9keE5vdGlmaWNhdGlvbkNlbnRlckJhZGdlVmFyaWFudCddIH0sIERyb3Bkb3duRGlyZWN0aXZlXSxcbiAgcHJvdmlkZXJzOiBbTm90aWZpY2F0aW9uQ2VudGVyU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbkNlbnRlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmFkZ2VEaXJlY3RpdmUgPSBpbmplY3QoQmFkZ2VEaXJlY3RpdmUsIHsgc2VsZjogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc2FibGVkQ29udHJvbGxlciA9IERpc2FibGVkQ29udHJvbGxlci5pbmplY3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkcm9wZG93bkRpcmVjdGl2ZSA9IGluamVjdChEcm9wZG93bkRpcmVjdGl2ZSwgeyBzZWxmOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkNlbnRlclNlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uQ2VudGVyU2VydmljZSwgeyBzZWxmOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGRyb3Bkb3duU3RhdGVDaGFuZ2UkID0gbWVyZ2UodGhpcy5kcm9wZG93bkRpcmVjdGl2ZS5iZWZvcmVPcGVuLCB0aGlzLmRyb3Bkb3duRGlyZWN0aXZlLmJlZm9yZUNsb3NlKS5waXBlKHN0YXJ0V2l0aCh2b2lkIDApKTtcbiAgcHJpdmF0ZSByZWFkb25seSBiYWRnZVZhbHVlJCA9IHRoaXMubm90aWZpY2F0aW9uQ2VudGVyU2VydmljZS51bnNlZW5Ob3RpZmljYXRpb25zJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoeyBjb3VudCB9KSA9PiB0aGlzLmRyb3Bkb3duU3RhdGVDaGFuZ2UkLnBpcGUobWFwKCgpID0+IHRoaXMuZm9ybWF0QmFkZ2VWYWx1ZShjb3VudCkpKSksXG4gICk7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHRhZyBmb3IgZmlsdGVyaW5nIG5vdGlmaWNhdGlvbnMuIE9ubHkgbm90aWZpY2F0aW9ucyB3aXRoIHRoaXMgdGFnIHdpbGwgYmUgc2hvd24gaW4gdGhlIG5vdGlmaWNhdGlvbiBjZW50ZXIuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdGFnIHZhbHVlIHRvIGZpbHRlciBub3RpZmljYXRpb25zLiBJZiBudWxsLCBhbGwgbm90aWZpY2F0aW9ucyBhcmUgc2hvd24uXG4gICAqL1xuICBASW5wdXQoJ29keE5vdGlmaWNhdGlvbkNlbnRlcicpXG4gIHB1YmxpYyBzZXQgdGFnKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5ub3RpZmljYXRpb25DZW50ZXJTZXJ2aWNlLnNldFRhZyh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdGl0bGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBjZW50ZXIuIFRoZSB0aXRsZSBjYW4gYmUgZHluYW1pYyBhbmQgY2hhbmdlIGJhc2VkIG9uIHRoZSBhcHBsaWNhdGlvbiBzdGF0ZS5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSB0aXRsZSBjb250ZW50LCB3aGljaCBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gT2JzZXJ2YWJsZSByZXR1cm5pbmcgYSBzdHJpbmcuIEFsbG93cyBmb3IgZHluYW1pYyB0aXRsZXMuXG4gICAqL1xuICBASW5wdXQoJ29keE5vdGlmaWNhdGlvbkNlbnRlclRpdGxlJylcbiAgcHVibGljIHNldCB0aXRsZSh2YWx1ZTogRHluYW1pY1RleHRDb250ZW50IHwgbnVsbCkge1xuICAgIHRoaXMubm90aWZpY2F0aW9uQ2VudGVyU2VydmljZS5zZXRUaXRsZSh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgc29ydGluZyBmdW5jdGlvbiB1c2VkIHRvIG9yZGVyIG5vdGlmaWNhdGlvbnMgd2l0aGluIHRoZSBub3RpZmljYXRpb24gY2VudGVyLlxuICAgKiBAcGFyYW0gdmFsdWUgQSBmdW5jdGlvbiB0aGF0IGNvbXBhcmVzIHR3byBub3RpZmljYXRpb25zIGFuZCByZXR1cm5zIHRoZSBzb3J0IG9yZGVyLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAgc29ydEZmbiA9IChhOiBOb3RpZmljYXRpb25SZWYsIGI6IE5vdGlmaWNhdGlvblJlZikgPT4ge1xuICAgICAgICBpZiAoYS5jcmVhdGVkQXQgPCBiLmNyZWF0ZWRBdCkgcmV0dXJuIC0xO1xuICAgICAgICBpZiAoYS5jcmVhdGVkQXQgPiBiLmNyZWF0ZWRBdCkgcmV0dXJuIDE7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfTtcbiAgICovXG4gIEBJbnB1dCgnb2R4Tm90aWZpY2F0aW9uQ2VudGVyU29ydEZuJylcbiAgcHVibGljIHNldCBzb3J0Rm4odmFsdWU6IE5vdGlmaWNhdGlvblNvcnRGbikge1xuICAgIHRoaXMubm90aWZpY2F0aW9uQ2VudGVyU2VydmljZS5zZXRTb3J0Rm4odmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCB3aGVuIGEgbmV3IG5vdGlmaWNhdGlvbiBpcyBhZGRlZC5cbiAgICogTGlzdGVuZXJzIGNhbiB1c2UgdGhpcyBldmVudCB0byByZWFjdCB0byBuZXcgbm90aWZpY2F0aW9ucyBiZWluZyBhZGRlZCB0byB0aGUgbm90aWZpY2F0aW9uIGNlbnRlci5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LXJlbmFtZVxuICBAT3V0cHV0KCdvZHhOb3RpZmljYXRpb25DZW50ZXJBZGQnKVxuICBwdWJsaWMgbm90aWZpY2F0aW9uQWRkID0gdGhpcy5ub3RpZmljYXRpb25DZW50ZXJTZXJ2aWNlLm9uTm90aWZpY2F0aW9uQWRkJDtcblxuICAvKipcbiAgICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIHdoZW4gYSBub3RpZmljYXRpb24gaXMgdXBkYXRlZC5cbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byByZWFjdCB0byBjaGFuZ2VzIGluIG5vdGlmaWNhdGlvbnMsIHN1Y2ggYXMgdGhlaXIgcmVhZCBzdGF0dXMgb3IgY29udGVudCB1cGRhdGVzLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtcmVuYW1lXG4gIEBPdXRwdXQoJ29keE5vdGlmaWNhdGlvbkNlbnRlclVwZGF0ZScpXG4gIHB1YmxpYyBub3RpZmljYXRpb25VcGRhdGUgPSB0aGlzLm5vdGlmaWNhdGlvbkNlbnRlclNlcnZpY2Uub25Ob3RpZmljYXRpb25VcGRhdGUkO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgd2hlbiBhIG5vdGlmaWNhdGlvbiBpcyByZW1vdmVkIGZyb20gdGhlIG5vdGlmaWNhdGlvbiBjZW50ZXIuXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGhhbmRsZSB0aGUgcmVtb3ZhbCBvZiBub3RpZmljYXRpb25zLCBzdWNoIGFzIGNsZWFuaW5nIHVwIHJlc291cmNlcyBvciB1cGRhdGluZyBVSSBlbGVtZW50cy5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LXJlbmFtZVxuICBAT3V0cHV0KCdvZHhOb3RpZmljYXRpb25DZW50ZXJSZW1vdmUnKVxuICBwdWJsaWMgbm90aWZpY2F0aW9uUmVtb3ZlID0gdGhpcy5ub3RpZmljYXRpb25DZW50ZXJTZXJ2aWNlLm9uTm90aWZpY2F0aW9uUmVtb3ZlJDtcblxuICAvKipcbiAgICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIHdoZW4gYSBub3RpZmljYXRpb24gaXMgbWFya2VkIGFzIHNlZW4uXG4gICAqIFRoaXMgZXZlbnQgY2FuIGJlIHVzZWQgdG8gcGVyZm9ybSBhY3Rpb25zIHdoZW4gdGhlIHVzZXIgYWNrbm93bGVkZ2VzIGEgbm90aWZpY2F0aW9uLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtcmVuYW1lXG4gIEBPdXRwdXQoJ29keE5vdGlmaWNhdGlvbkNlbnRlclNlZW4nKVxuICBwdWJsaWMgbm90aWZpY2F0aW9uU2VlbiA9IHRoaXMubm90aWZpY2F0aW9uQ2VudGVyU2VydmljZS5vbk5vdGlmaWNhdGlvblNlZW4kO1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmJhZGdlRGlyZWN0aXZlLnBvc2l0aW9uID0gUG9zaXRpb24uQk9UVE9NO1xuICAgIHRoaXMuYmFkZ2VEaXJlY3RpdmUub2Zmc2V0ID0gNjtcblxuICAgIHRoaXMuZHJvcGRvd25EaXJlY3RpdmUuY29udGVudCA9IE5vdGlmaWNhdGlvbkNlbnRlckNvbXBvbmVudDtcbiAgICB0aGlzLmRyb3Bkb3duRGlyZWN0aXZlLm9wdGlvbnMgPSB7XG4gICAgICBjb250YWluZXJDbGFzczogJ29keC1ub3RpZmljYXRpb24tY2VudGVyLW92ZXJsYXknLFxuICAgICAgcG9zaXRpb246IFBvc2l0aW9uLkJPVFRPTV9FTkQsXG4gICAgICBlbmFibGVGYWxsYmFjazogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgbWVyZ2UodGhpcy5oYW5kbGVCYWRnZVVwZGF0ZXMoKSwgdGhpcy5oYW5kbGVEcm9wZG93blVwZGF0ZXMoKSkucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdEJhZGdlVmFsdWUodmFsdWU6IG51bWJlcik6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmRyb3Bkb3duRGlyZWN0aXZlLmlzT3BlbiB8fCB2YWx1ZSA9PT0gMCA/IG51bGwgOiB2YWx1ZS50b0ZpeGVkKDApO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVCYWRnZVVwZGF0ZXMoKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuYmFkZ2VWYWx1ZSQucGlwZShcbiAgICAgIHRhcCgodmFsdWU6IER5bmFtaWNUZXh0Q29udGVudCB8IG51bGwpID0+IHtcbiAgICAgICAgdGhpcy5iYWRnZURpcmVjdGl2ZS52YWx1ZSA9IHZhbHVlIGFzIER5bmFtaWNUZXh0Q29udGVudDtcbiAgICAgICAgdGhpcy5iYWRnZURpcmVjdGl2ZS5uZ09uQ2hhbmdlcygpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRHJvcGRvd25VcGRhdGVzKCk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbkNlbnRlclNlcnZpY2Uubm90aWZpY2F0aW9ucyQucGlwZShcbiAgICAgIHRhcCgoeyBpc0VtcHR5IH0pID0+IHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZENvbnRyb2xsZXI/LnNldERpc2FibGVkU3RhdGUoaXNFbXB0eSk7XG4gICAgICAgIGlmICghaXNFbXB0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmRyb3Bkb3duRGlyZWN0aXZlLmNsb3NlKCk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,6 @@
1
+ export * from './with-browser-notifications';
2
+ export * from './with-load-notifications';
3
+ export * from './with-notification-transformer';
4
+ export * from './with-peristent-notifications';
5
+ export * from './with-save-notifications';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2xpYi9mZWF0dXJlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3dpdGgtYnJvd3Nlci1ub3RpZmljYXRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vd2l0aC1sb2FkLW5vdGlmaWNhdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi93aXRoLW5vdGlmaWNhdGlvbi10cmFuc2Zvcm1lcic7XG5leHBvcnQgKiBmcm9tICcuL3dpdGgtcGVyaXN0ZW50LW5vdGlmaWNhdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi93aXRoLXNhdmUtbm90aWZpY2F0aW9ucyc7XG4iXX0=
@@ -0,0 +1,75 @@
1
+ import { ENVIRONMENT_INITIALIZER, inject } from '@angular/core';
2
+ import { makeNotificationFeature } from '../models';
3
+ import { NotificationService } from '../notification.service';
4
+ import { PersistentNotificationSerializer } from './with-peristent-notifications';
5
+ /**
6
+ * Requests permission to display browser notifications and returns a boolean indicating whether permission was granted.
7
+ * @async
8
+ * @function requestBrowserNotificationPermissions
9
+ * @returns {Promise<boolean>} A promise that resolves to `true` if permission is granted, otherwise `false`.
10
+ */
11
+ async function requestBrowserNotificationPermissions() {
12
+ if (!('Notification' in window))
13
+ return false;
14
+ if (Notification.permission === 'granted')
15
+ return true;
16
+ if (Notification.permission === 'denied')
17
+ return false;
18
+ const permission = await Notification.requestPermission();
19
+ return permission === 'granted';
20
+ }
21
+ /**
22
+ * Creates a function responsible for sending out browser notifications with the given options.
23
+ * @function sendBrowserNotification
24
+ * @param {NotificationSerializer} serializer - The serializer to use for notification data.
25
+ * @param {BrowserNotificationExtras} [options] - Additional options for the browser notification.
26
+ * @returns {SendBrowserNotificationFn} A function to send browser notifications.
27
+ */
28
+ function sendBrowserNotification(serializer, options) {
29
+ return async (notificationRef) => {
30
+ if (!('Notification' in window))
31
+ return;
32
+ const [notificationObj] = await serializer.deserialize(await serializer.serialize([notificationRef]));
33
+ if (!notificationObj || notificationObj.hasBeenSeen)
34
+ return;
35
+ const { createdAt, item } = notificationObj;
36
+ new Notification(item.title, {
37
+ tag: notificationRef.options.tags?.[0],
38
+ lang: notificationRef.options.language,
39
+ ...options,
40
+ body: item.description,
41
+ timestamp: createdAt,
42
+ });
43
+ };
44
+ }
45
+ /**
46
+ * Configures the application to send browser notifications, using Angular's `ENVIRONMENT_INITIALIZER` for setup.
47
+ * @function withBrowserNotifications
48
+ * @param {WithBrowserNotificationsOptions} [options] - Optional configuration for browser notifications.
49
+ * @returns {NotificationFeature} A notification feature for integration into the application environment.
50
+ */
51
+ export function withBrowserNotifications(options) {
52
+ return makeNotificationFeature([
53
+ {
54
+ provide: ENVIRONMENT_INITIALIZER,
55
+ useFactory: () => {
56
+ const isEnabled = options?.isEnabled ?? true;
57
+ if (!isEnabled)
58
+ return () => void 0;
59
+ const notificationService = inject(NotificationService);
60
+ const serializer = new PersistentNotificationSerializer();
61
+ const sendBrowserNotificationFn = options?.sendFn ?? sendBrowserNotification(serializer, options?.extras);
62
+ return async () => {
63
+ if (!isEnabled)
64
+ return;
65
+ const permissionsGranted = await requestBrowserNotificationPermissions();
66
+ if (!permissionsGranted)
67
+ return;
68
+ notificationService.onNotificationAdd$.subscribe(sendBrowserNotificationFn);
69
+ };
70
+ },
71
+ multi: true,
72
+ },
73
+ ]);
74
+ }
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1icm93c2VyLW5vdGlmaWNhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2xpYi9mZWF0dXJlcy93aXRoLWJyb3dzZXItbm90aWZpY2F0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBd0MsdUJBQXVCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUEwQixnQ0FBZ0MsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBYTFHOzs7OztHQUtHO0FBQ0gsS0FBSyxVQUFVLHFDQUFxQztJQUNsRCxJQUFJLENBQUMsQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDOUMsSUFBSSxZQUFZLENBQUMsVUFBVSxLQUFLLFNBQVM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN2RCxJQUFJLFlBQVksQ0FBQyxVQUFVLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3ZELE1BQU0sVUFBVSxHQUFHLE1BQU0sWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFFMUQsT0FBTyxVQUFVLEtBQUssU0FBUyxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLHVCQUF1QixDQUFDLFVBQWtDLEVBQUUsT0FBbUM7SUFDdEcsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLEVBQUU7UUFDL0IsSUFBSSxDQUFDLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQztZQUFFLE9BQU87UUFDeEMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEcsSUFBSSxDQUFDLGVBQWUsSUFBSSxlQUFlLENBQUMsV0FBVztZQUFFLE9BQU87UUFDNUQsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUM7UUFDNUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQWUsRUFBRTtZQUNyQyxHQUFHLEVBQUUsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsUUFBUTtZQUN0QyxHQUFHLE9BQU87WUFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQXFCO1lBQ2hDLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxPQUF5QztJQUNoRixPQUFPLHVCQUF1QixDQUFDO1FBQzdCO1lBQ0UsT0FBTyxFQUFFLHVCQUF1QjtZQUNoQyxVQUFVLEVBQUUsR0FBRyxFQUFFO2dCQUNmLE1BQU0sU0FBUyxHQUFHLE9BQU8sRUFBRSxTQUFTLElBQUksSUFBSSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsU0FBUztvQkFBRSxPQUFPLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwQyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNLFVBQVUsR0FBRyxJQUFJLGdDQUFnQyxFQUFFLENBQUM7Z0JBQzFELE1BQU0seUJBQXlCLEdBQUcsT0FBTyxFQUFFLE1BQU0sSUFBSSx1QkFBdUIsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUUxRyxPQUFPLEtBQUssSUFBSSxFQUFFO29CQUNoQixJQUFJLENBQUMsU0FBUzt3QkFBRSxPQUFPO29CQUN2QixNQUFNLGtCQUFrQixHQUFHLE1BQU0scUNBQXFDLEVBQUUsQ0FBQztvQkFDekUsSUFBSSxDQUFDLGtCQUFrQjt3QkFBRSxPQUFPO29CQUNoQyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsQ0FBQztnQkFDOUUsQ0FBQyxDQUFDO1lBQ0osQ0FBQztZQUNELEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uRmVhdHVyZSwgTm90aWZpY2F0aW9uUmVmLCBtYWtlTm90aWZpY2F0aW9uRmVhdHVyZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VyaWFsaXplciwgUGVyc2lzdGVudE5vdGlmaWNhdGlvblNlcmlhbGl6ZXIgfSBmcm9tICcuL3dpdGgtcGVyaXN0ZW50LW5vdGlmaWNhdGlvbnMnO1xuXG5leHBvcnQgdHlwZSBCcm93c2VyTm90aWZpY2F0aW9uRXh0cmFzID0gT21pdDxOb3RpZmljYXRpb25PcHRpb25zLCAnYm9keScgfCAndGltZXN0YW1wJz47XG5leHBvcnQgdHlwZSBCcm93c2VyTm90aWZpY2F0aW9uID0gTm90aWZpY2F0aW9uO1xuZXhwb3J0IHR5cGUgQnJvd3Nlck5vdGlmaWNhdGlvbkZhY3RvcnkgPSAobm90aWZpY2F0aW9uUmVmOiBOb3RpZmljYXRpb25SZWYpID0+IEJyb3dzZXJOb3RpZmljYXRpb247XG5leHBvcnQgdHlwZSBTZW5kQnJvd3Nlck5vdGlmaWNhdGlvbkZuID0gKG5vdGlmaWNhdGlvblJlZjogTm90aWZpY2F0aW9uUmVmKSA9PiB1bmtub3duO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhCcm93c2VyTm90aWZpY2F0aW9uc09wdGlvbnMge1xuICBzZW5kRm4/OiBTZW5kQnJvd3Nlck5vdGlmaWNhdGlvbkZuO1xuICBleHRyYXM/OiBCcm93c2VyTm90aWZpY2F0aW9uRXh0cmFzO1xuICBpc0VuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlcXVlc3RzIHBlcm1pc3Npb24gdG8gZGlzcGxheSBicm93c2VyIG5vdGlmaWNhdGlvbnMgYW5kIHJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBwZXJtaXNzaW9uIHdhcyBncmFudGVkLlxuICogQGFzeW5jXG4gKiBAZnVuY3Rpb24gcmVxdWVzdEJyb3dzZXJOb3RpZmljYXRpb25QZXJtaXNzaW9uc1xuICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGB0cnVlYCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0QnJvd3Nlck5vdGlmaWNhdGlvblBlcm1pc3Npb25zKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoISgnTm90aWZpY2F0aW9uJyBpbiB3aW5kb3cpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChOb3RpZmljYXRpb24ucGVybWlzc2lvbiA9PT0gJ2dyYW50ZWQnKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKE5vdGlmaWNhdGlvbi5wZXJtaXNzaW9uID09PSAnZGVuaWVkJykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwZXJtaXNzaW9uID0gYXdhaXQgTm90aWZpY2F0aW9uLnJlcXVlc3RQZXJtaXNzaW9uKCk7XG5cbiAgcmV0dXJuIHBlcm1pc3Npb24gPT09ICdncmFudGVkJztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgb3V0IGJyb3dzZXIgbm90aWZpY2F0aW9ucyB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICogQGZ1bmN0aW9uIHNlbmRCcm93c2VyTm90aWZpY2F0aW9uXG4gKiBAcGFyYW0ge05vdGlmaWNhdGlvblNlcmlhbGl6ZXJ9IHNlcmlhbGl6ZXIgLSBUaGUgc2VyaWFsaXplciB0byB1c2UgZm9yIG5vdGlmaWNhdGlvbiBkYXRhLlxuICogQHBhcmFtIHtCcm93c2VyTm90aWZpY2F0aW9uRXh0cmFzfSBbb3B0aW9uc10gLSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBicm93c2VyIG5vdGlmaWNhdGlvbi5cbiAqIEByZXR1cm5zIHtTZW5kQnJvd3Nlck5vdGlmaWNhdGlvbkZufSBBIGZ1bmN0aW9uIHRvIHNlbmQgYnJvd3NlciBub3RpZmljYXRpb25zLlxuICovXG5mdW5jdGlvbiBzZW5kQnJvd3Nlck5vdGlmaWNhdGlvbihzZXJpYWxpemVyOiBOb3RpZmljYXRpb25TZXJpYWxpemVyLCBvcHRpb25zPzogQnJvd3Nlck5vdGlmaWNhdGlvbkV4dHJhcyk6IFNlbmRCcm93c2VyTm90aWZpY2F0aW9uRm4ge1xuICByZXR1cm4gYXN5bmMgKG5vdGlmaWNhdGlvblJlZikgPT4ge1xuICAgIGlmICghKCdOb3RpZmljYXRpb24nIGluIHdpbmRvdykpIHJldHVybjtcbiAgICBjb25zdCBbbm90aWZpY2F0aW9uT2JqXSA9IGF3YWl0IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYXdhaXQgc2VyaWFsaXplci5zZXJpYWxpemUoW25vdGlmaWNhdGlvblJlZl0pKTtcbiAgICBpZiAoIW5vdGlmaWNhdGlvbk9iaiB8fCBub3RpZmljYXRpb25PYmouaGFzQmVlblNlZW4pIHJldHVybjtcbiAgICBjb25zdCB7IGNyZWF0ZWRBdCwgaXRlbSB9ID0gbm90aWZpY2F0aW9uT2JqO1xuICAgIG5ldyBOb3RpZmljYXRpb24oaXRlbS50aXRsZSBhcyBzdHJpbmcsIHtcbiAgICAgIHRhZzogbm90aWZpY2F0aW9uUmVmLm9wdGlvbnMudGFncz8uWzBdLFxuICAgICAgbGFuZzogbm90aWZpY2F0aW9uUmVmLm9wdGlvbnMubGFuZ3VhZ2UsXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgYm9keTogaXRlbS5kZXNjcmlwdGlvbiBhcyBzdHJpbmcsXG4gICAgICB0aW1lc3RhbXA6IGNyZWF0ZWRBdCxcbiAgICB9KTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmVzIHRoZSBhcHBsaWNhdGlvbiB0byBzZW5kIGJyb3dzZXIgbm90aWZpY2F0aW9ucywgdXNpbmcgQW5ndWxhcidzIGBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUmAgZm9yIHNldHVwLlxuICogQGZ1bmN0aW9uIHdpdGhCcm93c2VyTm90aWZpY2F0aW9uc1xuICogQHBhcmFtIHtXaXRoQnJvd3Nlck5vdGlmaWNhdGlvbnNPcHRpb25zfSBbb3B0aW9uc10gLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciBicm93c2VyIG5vdGlmaWNhdGlvbnMuXG4gKiBAcmV0dXJucyB7Tm90aWZpY2F0aW9uRmVhdHVyZX0gQSBub3RpZmljYXRpb24gZmVhdHVyZSBmb3IgaW50ZWdyYXRpb24gaW50byB0aGUgYXBwbGljYXRpb24gZW52aXJvbm1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoQnJvd3Nlck5vdGlmaWNhdGlvbnMob3B0aW9ucz86IFdpdGhCcm93c2VyTm90aWZpY2F0aW9uc09wdGlvbnMpOiBOb3RpZmljYXRpb25GZWF0dXJlIHtcbiAgcmV0dXJuIG1ha2VOb3RpZmljYXRpb25GZWF0dXJlKFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUixcbiAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgY29uc3QgaXNFbmFibGVkID0gb3B0aW9ucz8uaXNFbmFibGVkID8/IHRydWU7XG4gICAgICAgIGlmICghaXNFbmFibGVkKSByZXR1cm4gKCkgPT4gdm9pZCAwO1xuICAgICAgICBjb25zdCBub3RpZmljYXRpb25TZXJ2aWNlID0gaW5qZWN0KE5vdGlmaWNhdGlvblNlcnZpY2UpO1xuICAgICAgICBjb25zdCBzZXJpYWxpemVyID0gbmV3IFBlcnNpc3RlbnROb3RpZmljYXRpb25TZXJpYWxpemVyKCk7XG4gICAgICAgIGNvbnN0IHNlbmRCcm93c2VyTm90aWZpY2F0aW9uRm4gPSBvcHRpb25zPy5zZW5kRm4gPz8gc2VuZEJyb3dzZXJOb3RpZmljYXRpb24oc2VyaWFsaXplciwgb3B0aW9ucz8uZXh0cmFzKTtcblxuICAgICAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGlmICghaXNFbmFibGVkKSByZXR1cm47XG4gICAgICAgICAgY29uc3QgcGVybWlzc2lvbnNHcmFudGVkID0gYXdhaXQgcmVxdWVzdEJyb3dzZXJOb3RpZmljYXRpb25QZXJtaXNzaW9ucygpO1xuICAgICAgICAgIGlmICghcGVybWlzc2lvbnNHcmFudGVkKSByZXR1cm47XG4gICAgICAgICAgbm90aWZpY2F0aW9uU2VydmljZS5vbk5vdGlmaWNhdGlvbkFkZCQuc3Vic2NyaWJlKHNlbmRCcm93c2VyTm90aWZpY2F0aW9uRm4pO1xuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0pO1xufVxuIl19
@@ -0,0 +1,45 @@
1
+ import { ENVIRONMENT_INITIALIZER, inject } from '@angular/core';
2
+ import { from, isObservable, of } from 'rxjs';
3
+ import { makeNotificationFeature } from '../models';
4
+ import { NotificationService } from '../notification.service';
5
+ /**
6
+ * Loads notifications using the provided `loadFn`. This function abstracts over the differences
7
+ * between synchronous notifications, promises, and observables, providing a uniform Observable output.
8
+ * @function loadNotifications
9
+ * @param {LoadNotificationsFn} [loadFn] - An optional function to load notifications.
10
+ * @returns {Observable<NotificationRef[]>} An Observable stream of notification references.
11
+ */
12
+ function loadNotifications(loadFn) {
13
+ const notifications = loadFn?.();
14
+ if (isObservable(notifications)) {
15
+ return notifications;
16
+ }
17
+ if (notifications instanceof Promise) {
18
+ return from(notifications);
19
+ }
20
+ return of(notifications ?? []);
21
+ }
22
+ /**
23
+ * Integrates notification loading into the application environment. This function uses the Angular
24
+ * `ENVIRONMENT_INITIALIZER` to ensure that notifications are loaded as part of the application's
25
+ * initialization process.
26
+ * @function withLoadNotifications
27
+ * @param {LoadNotificationsFn} loadFn - The function to load notifications.
28
+ * @returns {NotificationFeature} A notification feature configured to load notifications at startup.
29
+ */
30
+ export function withLoadNotifications(loadFn) {
31
+ return makeNotificationFeature([
32
+ {
33
+ provide: ENVIRONMENT_INITIALIZER,
34
+ useFactory: () => {
35
+ const notificationService = inject(NotificationService);
36
+ const notifications$ = loadNotifications(loadFn);
37
+ return () => {
38
+ notifications$.subscribe((notificationRefs) => notificationService.load(notificationRefs));
39
+ };
40
+ },
41
+ multi: true,
42
+ },
43
+ ]);
44
+ }
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1sb2FkLW5vdGlmaWNhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2xpYi9mZWF0dXJlcy93aXRoLWxvYWQtbm90aWZpY2F0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBYyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQXdDLHVCQUF1QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBVTlEOzs7Ozs7R0FNRztBQUNILFNBQVMsaUJBQWlCLENBQUMsTUFBNEI7SUFDckQsTUFBTSxhQUFhLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQztJQUNqQyxJQUFJLFlBQVksQ0FBQyxhQUFhLENBQUMsRUFBRTtRQUMvQixPQUFPLGFBQWEsQ0FBQztLQUN0QjtJQUNELElBQUksYUFBYSxZQUFZLE9BQU8sRUFBRTtRQUNwQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUM1QjtJQUNELE9BQU8sRUFBRSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxNQUEyQjtJQUMvRCxPQUFPLHVCQUF1QixDQUFDO1FBQzdCO1lBQ0UsT0FBTyxFQUFFLHVCQUF1QjtZQUNoQyxVQUFVLEVBQUUsR0FBRyxFQUFFO2dCQUNmLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQ3hELE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUVqRCxPQUFPLEdBQUcsRUFBRTtvQkFDVixjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQzdGLENBQUMsQ0FBQztZQUNKLENBQUM7WUFDRCxLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20sIGlzT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkZlYXR1cmUsIE5vdGlmaWNhdGlvblJlZiwgbWFrZU5vdGlmaWNhdGlvbkZlYXR1cmUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcblxuLyoqXG4gKiBUeXBlIGRlZmluaXRpb24gZm9yIGEgZnVuY3Rpb24gdGhhdCBsb2FkcyBub3RpZmljYXRpb25zLlxuICogQ2FuIHJldHVybiBub3RpZmljYXRpb25zIGRpcmVjdGx5IGFzIGFuIGFycmF5LCBhcyBhIFByb21pc2UsIG9yIGFzIGFuIE9ic2VydmFibGUuXG4gKiBAdHlwZWRlZiB7RnVuY3Rpb259IExvYWROb3RpZmljYXRpb25zRm5cbiAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPE5vdGlmaWNhdGlvblJlZltdPiB8IFByb21pc2U8Tm90aWZpY2F0aW9uUmVmW10+IHwgTm90aWZpY2F0aW9uUmVmW119IFRoZSBsb2FkZWQgbm90aWZpY2F0aW9ucy5cbiAqL1xuZXhwb3J0IHR5cGUgTG9hZE5vdGlmaWNhdGlvbnNGbiA9ICgpID0+IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uUmVmW10+IHwgUHJvbWlzZTxOb3RpZmljYXRpb25SZWZbXT4gfCBOb3RpZmljYXRpb25SZWZbXTtcblxuLyoqXG4gKiBMb2FkcyBub3RpZmljYXRpb25zIHVzaW5nIHRoZSBwcm92aWRlZCBgbG9hZEZuYC4gVGhpcyBmdW5jdGlvbiBhYnN0cmFjdHMgb3ZlciB0aGUgZGlmZmVyZW5jZXNcbiAqIGJldHdlZW4gc3luY2hyb25vdXMgbm90aWZpY2F0aW9ucywgcHJvbWlzZXMsIGFuZCBvYnNlcnZhYmxlcywgcHJvdmlkaW5nIGEgdW5pZm9ybSBPYnNlcnZhYmxlIG91dHB1dC5cbiAqIEBmdW5jdGlvbiBsb2FkTm90aWZpY2F0aW9uc1xuICogQHBhcmFtIHtMb2FkTm90aWZpY2F0aW9uc0ZufSBbbG9hZEZuXSAtIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGxvYWQgbm90aWZpY2F0aW9ucy5cbiAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPE5vdGlmaWNhdGlvblJlZltdPn0gQW4gT2JzZXJ2YWJsZSBzdHJlYW0gb2Ygbm90aWZpY2F0aW9uIHJlZmVyZW5jZXMuXG4gKi9cbmZ1bmN0aW9uIGxvYWROb3RpZmljYXRpb25zKGxvYWRGbj86IExvYWROb3RpZmljYXRpb25zRm4pOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvblJlZltdPiB7XG4gIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBsb2FkRm4/LigpO1xuICBpZiAoaXNPYnNlcnZhYmxlKG5vdGlmaWNhdGlvbnMpKSB7XG4gICAgcmV0dXJuIG5vdGlmaWNhdGlvbnM7XG4gIH1cbiAgaWYgKG5vdGlmaWNhdGlvbnMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgcmV0dXJuIGZyb20obm90aWZpY2F0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIG9mKG5vdGlmaWNhdGlvbnMgPz8gW10pO1xufVxuXG4vKipcbiAqIEludGVncmF0ZXMgbm90aWZpY2F0aW9uIGxvYWRpbmcgaW50byB0aGUgYXBwbGljYXRpb24gZW52aXJvbm1lbnQuIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgQW5ndWxhclxuICogYEVOVklST05NRU5UX0lOSVRJQUxJWkVSYCB0byBlbnN1cmUgdGhhdCBub3RpZmljYXRpb25zIGFyZSBsb2FkZWQgYXMgcGFydCBvZiB0aGUgYXBwbGljYXRpb24nc1xuICogaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy5cbiAqIEBmdW5jdGlvbiB3aXRoTG9hZE5vdGlmaWNhdGlvbnNcbiAqIEBwYXJhbSB7TG9hZE5vdGlmaWNhdGlvbnNGbn0gbG9hZEZuIC0gVGhlIGZ1bmN0aW9uIHRvIGxvYWQgbm90aWZpY2F0aW9ucy5cbiAqIEByZXR1cm5zIHtOb3RpZmljYXRpb25GZWF0dXJlfSBBIG5vdGlmaWNhdGlvbiBmZWF0dXJlIGNvbmZpZ3VyZWQgdG8gbG9hZCBub3RpZmljYXRpb25zIGF0IHN0YXJ0dXAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoTG9hZE5vdGlmaWNhdGlvbnMobG9hZEZuOiBMb2FkTm90aWZpY2F0aW9uc0ZuKTogTm90aWZpY2F0aW9uRmVhdHVyZSB7XG4gIHJldHVybiBtYWtlTm90aWZpY2F0aW9uRmVhdHVyZShbXG4gICAge1xuICAgICAgcHJvdmlkZTogRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsXG4gICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvblNlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uU2VydmljZSk7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMkID0gbG9hZE5vdGlmaWNhdGlvbnMobG9hZEZuKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIG5vdGlmaWNhdGlvbnMkLnN1YnNjcmliZSgobm90aWZpY2F0aW9uUmVmcykgPT4gbm90aWZpY2F0aW9uU2VydmljZS5sb2FkKG5vdGlmaWNhdGlvblJlZnMpKTtcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdKTtcbn1cbiJdfQ==