@odx/angular 5.5.4 → 5.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/esm2022/components/calendar/lib/components/calendar-years/calendar-years.component.mjs +3 -3
- package/esm2022/components/notification/lib/components/notification-center/notification-center.component.mjs +3 -3
- package/esm2022/lib/core.module.mjs +6 -6
- package/fesm2022/odx-angular-components-calendar.mjs +3 -3
- package/fesm2022/odx-angular-components-calendar.mjs.map +1 -1
- package/fesm2022/odx-angular-components-notification.mjs +2 -2
- package/fesm2022/odx-angular-components-notification.mjs.map +1 -1
- package/fesm2022/odx-angular.mjs +5 -5
- package/fesm2022/odx-angular.mjs.map +1 -1
- package/lib/core.module.d.ts +3 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/esm2022/components/calendar/lib/components/calendar-years/calendar-years.component.mjs
CHANGED
|
@@ -12,8 +12,8 @@ import { CalendarYearsService } from '../../services';
|
|
|
12
12
|
import { CalendarHeaderComponent } from '../calendar-header';
|
|
13
13
|
import * as i0 from "@angular/core";
|
|
14
14
|
import * as i1 from "@angular/common";
|
|
15
|
-
import * as i2 from "@
|
|
16
|
-
import * as i3 from "@
|
|
15
|
+
import * as i2 from "@odx/angular";
|
|
16
|
+
import * as i3 from "@ngrx/component";
|
|
17
17
|
export let CalendarYearsComponent = class CalendarYearsComponent extends CalendarViewDirective {
|
|
18
18
|
constructor() {
|
|
19
19
|
super(...arguments);
|
|
@@ -53,7 +53,7 @@ export let CalendarYearsComponent = class CalendarYearsComponent extends Calenda
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CalendarYearsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
56
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CalendarYearsComponent, isStandalone: true, selector: "odx-calendar-years", providers: [CalendarYearsService], usesInheritance: true, ngImport: i0, template: "<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\" *ngrxLet=\"calendar.activeDate$ as activeDate\">\n <thead aria-hidden=\"true\">\n <th></th>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousYear($event)\"\n (keydown.ArrowRight)=\"nextYear($event)\"\n (keydown.ArrowUp)=\"previousRow($event)\"\n (keydown.ArrowDown)=\"nextRow($event)\"\n >\n <tr class=\"odx-calendar__year-row\" *ngFor=\"let yearRow of calendarYears.years$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let year of yearRow; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(year)\"\n [odxCalendarCell]=\"year\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"calendar.selectedDate$ | async\"\n (click)=\"selectDate(year)\"\n >\n {{ year | odxDateLabel: config.yearLabel }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: i2.
|
|
56
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CalendarYearsComponent, isStandalone: true, selector: "odx-calendar-years", providers: [CalendarYearsService], usesInheritance: true, ngImport: i0, template: "<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\" *ngrxLet=\"calendar.activeDate$ as activeDate\">\n <thead aria-hidden=\"true\">\n <th></th>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousYear($event)\"\n (keydown.ArrowRight)=\"nextYear($event)\"\n (keydown.ArrowUp)=\"previousRow($event)\"\n (keydown.ArrowDown)=\"nextRow($event)\"\n >\n <tr class=\"odx-calendar__year-row\" *ngFor=\"let yearRow of calendarYears.years$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let year of yearRow; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(year)\"\n [odxCalendarCell]=\"year\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"calendar.selectedDate$ | async\"\n (click)=\"selectDate(year)\"\n >\n {{ year | odxDateLabel: config.yearLabel }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: i2.DisabledController, selector: "[disabled]", inputs: ["disabled"] }, { kind: "directive", type: i3.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "directive", type: CalendarCellDirective, selector: "[odxCalendarCell]", inputs: ["odxCalendarCell", "odxCalendarCellCalendarView", "odxCalendarCellActiveDate", "odxCalendarCellSelectedDate"] }, { kind: "pipe", type: DateLabelPipe, name: "odxDateLabel" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
57
57
|
};
|
|
58
58
|
CalendarYearsComponent = __decorate([
|
|
59
59
|
CSSComponent('calendar-years')
|
|
@@ -40,7 +40,7 @@ export let NotificationCenterComponent = class NotificationCenterComponent {
|
|
|
40
40
|
return hasBeenSeen && !options.action;
|
|
41
41
|
}
|
|
42
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\"
|
|
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\">\n <ng-template [odxDynamicView]=\"(notificationCenterService.title$ | async) ?? ('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: "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
44
|
};
|
|
45
45
|
NotificationCenterComponent = __decorate([
|
|
46
46
|
CSSComponent('notification-center')
|
|
@@ -60,6 +60,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
60
60
|
NotificationItemComponent,
|
|
61
61
|
InteractiveDirective,
|
|
62
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\"
|
|
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\">\n <ng-template [odxDynamicView]=\"(notificationCenterService.title$ | async) ?? ('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
64
|
}] });
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWNlbnRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2xpYi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi1jZW50ZXIvbm90aWZpY2F0aW9uLWNlbnRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2xpYi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi1jZW50ZXIvbm90aWZpY2F0aW9uLWNlbnRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQWEsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUQsT0FBTyxnQkFBZ0IsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQzs7Ozs7QUFFN0Y7Ozs7R0FJRztBQXlCSSxXQUFNLDJCQUEyQixHQUFqQyxNQUFNLDJCQUEyQjtJQUFqQztRQUNjLDhCQUF5QixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzlELGNBQVMsR0FBRyxTQUFTLENBQUM7UUFFekIsWUFBTyxHQUFHLGFBQWEsRUFBRSxDQUFDO0tBUzNDO0lBUFEsV0FBVztRQUNoQixJQUFJLENBQUMseUJBQXlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDakQsQ0FBQztJQUVTLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQW1CO1FBQ3pELE9BQU8sV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUN4QyxDQUFDOytHQVpVLDJCQUEyQjttR0FBM0IsMkJBQTJCLHNFQUgzQixDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLENBQUMsMEJDL0NwRCxtaENBcUJBLDJDRFVJLFlBQVkscVRBSVosZUFBZSx5R0FDZixvQkFBb0Isc0pBRXBCLGNBQWMsNEhBQ2QsYUFBYSxxREFDYix5QkFBeUIsaUhBRXpCLFVBQVUsNE5BTUEsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFbkcsMkJBQTJCO0lBeEJ2QyxZQUFZLENBQUMscUJBQXFCLENBQUM7R0F3QnZCLDJCQUEyQixDQWF2Qzs0RkFiWSwyQkFBMkI7a0JBdkJ2QyxTQUFTOytCQUNFLHlCQUF5QixjQUN2QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixZQUFZO3dCQUNaLG9CQUFvQjt3QkFDcEIsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLG9CQUFvQjt3QkFDcEIsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IseUJBQXlCO3dCQUN6QixvQkFBb0I7d0JBQ3BCLFVBQVU7cUJBQ1gsaUJBRWMsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLENBQUMsY0FDdEMsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRyYW5zaXRpb24sIHRyaWdnZXIsIHVzZUFuaW1hdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uRGVzdHJveSwgVmlld0VuY2Fwc3VsYXRpb24sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGV0RGlyZWN0aXZlIH0gZnJvbSAnQG5ncngvY29tcG9uZW50JztcbmltcG9ydCB7IGNvbGxhcHNlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgSW50ZXJhY3RpdmVEaXJlY3RpdmUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgRHluYW1pY1ZpZXdEaXJlY3RpdmUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY2RrL2R5bmFtaWMtdmlldyc7XG5pbXBvcnQgeyBBY3Rpb25Hcm91cENvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2FjdGlvbi1ncm91cCc7XG5pbXBvcnQgeyBCYWRnZURpcmVjdGl2ZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2JhZGdlJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2Ryb3Bkb3duJztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9pY29uJztcbmltcG9ydCB7IExpc3RNb2R1bGUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9saXN0JztcbmltcG9ydCB7IENTU0NvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9pbnRlcm5hbCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlLCBwcm92aWRlVHJhbnNsYXRpb25zIH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsL3RyYW5zbGF0ZSc7XG5pbXBvcnQgeyBpbmplY3RFbGVtZW50LCB0cmFja0J5SWQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uUmVmIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCBub3RpZmljYXRpb25JMThuIGZyb20gJy4uLy4uL25vdGlmaWNhdGlvbi5pMThuJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkNlbnRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vbm90aWZpY2F0aW9uLWl0ZW0vbm90aWZpY2F0aW9uLWl0ZW0uY29tcG9uZW50JztcblxuLyoqXG4gKiBBIGNvbXBvbmVudCBmb3IgZGlzcGxheWluZyBhbmQgbWFuYWdpbmcgYSBsaXN0IG9mIG5vdGlmaWNhdGlvbnMuIEl0IGludGVncmF0ZXMgdmFyaW91cyBzdWItY29tcG9uZW50cyBhbmQgZGlyZWN0aXZlcyB0byBwcm92aWRlIGEgcmljaCB1c2VyIGludGVyZmFjZSBmb3Igbm90aWZpY2F0aW9uIGludGVyYWN0aW9uLiBTdXBwb3J0cyBhbmltYXRpb25zIGZvciBub3RpZmljYXRpb24gdHJhbnNpdGlvbnMgYW5kIGxldmVyYWdlcyBBbmd1bGFyJ3MgY2hhbmdlIGRldGVjdGlvbiBzdHJhdGVnaWVzIGZvciBwZXJmb3JtYW5jZS5cbiAqXG4gKiBAQ1NTQ29tcG9uZW50ICdub3RpZmljYXRpb24tY2VudGVyJyAtIFNwZWNpZmllcyB0aGUgQ1NTIGNsYXNzIGZvciBzdHlsaW5nIHRoZSBub3RpZmljYXRpb24gY2VudGVyIGNvbXBvbmVudC5cbiAqL1xuQENTU0NvbXBvbmVudCgnbm90aWZpY2F0aW9uLWNlbnRlcicpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZHgtbm90aWZpY2F0aW9uLWNlbnRlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgTGV0RGlyZWN0aXZlLFxuICAgIEFjdGlvbkdyb3VwQ29tcG9uZW50LFxuICAgIEJhZGdlRGlyZWN0aXZlLFxuICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICBEeW5hbWljVmlld0RpcmVjdGl2ZSxcbiAgICBJY29uQ29tcG9uZW50LFxuICAgIERyb3Bkb3duTW9kdWxlLFxuICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgTm90aWZpY2F0aW9uSXRlbUNvbXBvbmVudCxcbiAgICBJbnRlcmFjdGl2ZURpcmVjdGl2ZSxcbiAgICBMaXN0TW9kdWxlLFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vbm90aWZpY2F0aW9uLWNlbnRlci5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtwcm92aWRlVHJhbnNsYXRpb25zKG5vdGlmaWNhdGlvbkkxOG4pXSxcbiAgYW5pbWF0aW9uczogW3RyaWdnZXIoJ25vdGlmaWNhdGlvbkFuaW1hdGlvbicsIFt0cmFuc2l0aW9uKCc6bGVhdmUnLCB1c2VBbmltYXRpb24oY29sbGFwc2UsIHsgZGVsYXk6IDE1MCB9KSldKV0sXG59KVxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbkNlbnRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBub3RpZmljYXRpb25DZW50ZXJTZXJ2aWNlID0gaW5qZWN0KE5vdGlmaWNhdGlvbkNlbnRlclNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdHJhY2tCeUlkID0gdHJhY2tCeUlkO1xuXG4gIHB1YmxpYyByZWFkb25seSBlbGVtZW50ID0gaW5qZWN0RWxlbWVudCgpO1xuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbkNlbnRlclNlcnZpY2UubWFya0FsbEFzU2VlbigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzTXV0ZWQoeyBvcHRpb25zLCBoYXNCZWVuU2VlbiB9OiBOb3RpZmljYXRpb25SZWYpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaGFzQmVlblNlZW4gJiYgIW9wdGlvbnMuYWN0aW9uO1xuICB9XG59XG4iLCI8bmctdGVtcGxhdGUgW25nSWZdPVwibm90aWZpY2F0aW9uQ2VudGVyU2VydmljZS5ub3RpZmljYXRpb25zJCB8IGFzeW5jXCIgbGV0LW5vdGlmaWNhdGlvbnM+XG4gIDxoMyBjbGFzcz1cIm9keC1ub3RpZmljYXRpb24tY2VudGVyX19oZWFkZXJcIj5cbiAgICA8bmctdGVtcGxhdGUgW29keER5bmFtaWNWaWV3XT1cIihub3RpZmljYXRpb25DZW50ZXJTZXJ2aWNlLnRpdGxlJCB8IGFzeW5jKSA/PyAoJ3RpdGxlJyB8IG9keFRyYW5zbGF0ZSB8IGFzeW5jKVwiPjwvbmctdGVtcGxhdGU+XG4gIDwvaDM+XG4gIDxvZHgtbGlzdCBjbGFzcz1cIm9keC1ub3RpZmljYXRpb24tY2VudGVyX19jb250ZW50XCI+XG4gICAgPG9keC1saXN0LWl0ZW1cbiAgICAgIEBub3RpZmljYXRpb25BbmltYXRpb25cbiAgICAgIFttdXRlZF09XCJpc011dGVkKG5vdGlmaWNhdGlvbilcIlxuICAgICAgW3NlbGVjdGVkXT1cIiFub3RpZmljYXRpb24uaGFzQmVlblNlZW5cIlxuICAgICAgKGNsaWNrKT1cIm5vdGlmaWNhdGlvbkNlbnRlclNlcnZpY2UuZXhlY3V0ZUFjdGlvbihub3RpZmljYXRpb24pXCJcbiAgICAgICpuZ0Zvcj1cImxldCBub3RpZmljYXRpb24gb2Ygbm90aWZpY2F0aW9ucy52YWx1ZXM7IHRyYWNrQnk6IHRyYWNrQnlJZFwiXG4gICAgPlxuICAgICAgPG9keC1ub3RpZmljYXRpb24taXRlbSBbbm90aWZpY2F0aW9uXT1cIm5vdGlmaWNhdGlvblwiIChkaXNtaXNzKT1cIm5vdGlmaWNhdGlvbkNlbnRlclNlcnZpY2UuZGlzbWlzcyhub3RpZmljYXRpb24pXCIgLz5cbiAgICA8L29keC1saXN0LWl0ZW0+XG4gIDwvb2R4LWxpc3Q+XG4gIDxkaXYgY2xhc3M9XCJvZHgtbm90aWZpY2F0aW9uLWNlbnRlcl9fZm9vdGVyXCI+XG4gICAgPGJ1dHRvbiBvZHhCdXR0b24gW2Rpc2FibGVkXT1cImZhbHNlXCIgKGNsaWNrKT1cIm5vdGlmaWNhdGlvbkNlbnRlclNlcnZpY2UuZGlzbWlzc0FsbCgpXCI+XG4gICAgICB7eyAnZGlzbWlzc0FsbCcgfCBvZHhUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
|
2
2
|
import { NgModule } from '@angular/core';
|
|
3
|
-
import {
|
|
3
|
+
import { LetDirective } from '@ngrx/component';
|
|
4
4
|
import { DisabledController, ReadonlyController } from './controllers';
|
|
5
5
|
import { ClickOutsideDirective } from './directives';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
const controllers = [DisabledController, ReadonlyController];
|
|
8
|
-
const modules = [ClickOutsideDirective];
|
|
8
|
+
const modules = [ClickOutsideDirective, LetDirective];
|
|
9
9
|
export class CoreModule {
|
|
10
10
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
11
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: CoreModule, imports: [DisabledController, ReadonlyController, ClickOutsideDirective], exports: [CommonModule,
|
|
12
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreModule, imports: [CommonModule
|
|
11
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: CoreModule, imports: [DisabledController, ReadonlyController, ClickOutsideDirective, LetDirective], exports: [CommonModule, DisabledController, ReadonlyController, ClickOutsideDirective, LetDirective] }); }
|
|
12
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreModule, imports: [CommonModule] }); }
|
|
13
13
|
}
|
|
14
14
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreModule, decorators: [{
|
|
15
15
|
type: NgModule,
|
|
16
16
|
args: [{
|
|
17
17
|
imports: [...controllers, ...modules],
|
|
18
|
-
exports: [CommonModule,
|
|
18
|
+
exports: [CommonModule, ...controllers, ...modules],
|
|
19
19
|
}]
|
|
20
20
|
}] });
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL2xpYi9jb3JlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFFckQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQzdELE1BQU0sT0FBTyxHQUFHLENBQUMscUJBQXFCLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFNdEQsTUFBTSxPQUFPLFVBQVU7K0dBQVYsVUFBVTtnSEFBVixVQUFVLFlBUEYsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQzFDLHFCQUFxQixFQUFFLFlBQVksYUFJeEMsWUFBWSxFQUxILGtCQUFrQixFQUFFLGtCQUFrQixFQUMxQyxxQkFBcUIsRUFBRSxZQUFZO2dIQU12QyxVQUFVLFlBRlgsWUFBWTs7NEZBRVgsVUFBVTtrQkFKdEIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxHQUFHLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQztvQkFDckMsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLEdBQUcsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO2lCQUNwRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGV0RGlyZWN0aXZlIH0gZnJvbSAnQG5ncngvY29tcG9uZW50JztcbmltcG9ydCB7IERpc2FibGVkQ29udHJvbGxlciwgUmVhZG9ubHlDb250cm9sbGVyIH0gZnJvbSAnLi9jb250cm9sbGVycyc7XG5pbXBvcnQgeyBDbGlja091dHNpZGVEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMnO1xuXG5jb25zdCBjb250cm9sbGVycyA9IFtEaXNhYmxlZENvbnRyb2xsZXIsIFJlYWRvbmx5Q29udHJvbGxlcl07XG5jb25zdCBtb2R1bGVzID0gW0NsaWNrT3V0c2lkZURpcmVjdGl2ZSwgTGV0RGlyZWN0aXZlXTtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogWy4uLmNvbnRyb2xsZXJzLCAuLi5tb2R1bGVzXSxcbiAgZXhwb3J0czogW0NvbW1vbk1vZHVsZSwgLi4uY29udHJvbGxlcnMsIC4uLm1vZHVsZXNdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3JlTW9kdWxlIHt9XG4iXX0=
|
|
@@ -14,7 +14,7 @@ import { IconComponent } from '@odx/angular/components/icon';
|
|
|
14
14
|
import { enGB } from 'date-fns/locale';
|
|
15
15
|
import * as i1 from '@angular/common';
|
|
16
16
|
import { DOCUMENT } from '@angular/common';
|
|
17
|
-
import * as
|
|
17
|
+
import * as i3 from '@ngrx/component';
|
|
18
18
|
|
|
19
19
|
var CalendarView;
|
|
20
20
|
(function (CalendarView) {
|
|
@@ -561,7 +561,7 @@ let CalendarYearsComponent = class CalendarYearsComponent extends CalendarViewDi
|
|
|
561
561
|
}
|
|
562
562
|
}
|
|
563
563
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CalendarYearsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
564
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CalendarYearsComponent, isStandalone: true, selector: "odx-calendar-years", providers: [CalendarYearsService], usesInheritance: true, ngImport: i0, template: "<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\" *ngrxLet=\"calendar.activeDate$ as activeDate\">\n <thead aria-hidden=\"true\">\n <th></th>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousYear($event)\"\n (keydown.ArrowRight)=\"nextYear($event)\"\n (keydown.ArrowUp)=\"previousRow($event)\"\n (keydown.ArrowDown)=\"nextRow($event)\"\n >\n <tr class=\"odx-calendar__year-row\" *ngFor=\"let yearRow of calendarYears.years$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let year of yearRow; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(year)\"\n [odxCalendarCell]=\"year\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"calendar.selectedDate$ | async\"\n (click)=\"selectDate(year)\"\n >\n {{ year | odxDateLabel: config.yearLabel }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: i2
|
|
564
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CalendarYearsComponent, isStandalone: true, selector: "odx-calendar-years", providers: [CalendarYearsService], usesInheritance: true, ngImport: i0, template: "<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\" *ngrxLet=\"calendar.activeDate$ as activeDate\">\n <thead aria-hidden=\"true\">\n <th></th>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousYear($event)\"\n (keydown.ArrowRight)=\"nextYear($event)\"\n (keydown.ArrowUp)=\"previousRow($event)\"\n (keydown.ArrowDown)=\"nextRow($event)\"\n >\n <tr class=\"odx-calendar__year-row\" *ngFor=\"let yearRow of calendarYears.years$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let year of yearRow; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(year)\"\n [odxCalendarCell]=\"year\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"calendar.selectedDate$ | async\"\n (click)=\"selectDate(year)\"\n >\n {{ year | odxDateLabel: config.yearLabel }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: i2.DisabledController, selector: "[disabled]", inputs: ["disabled"] }, { kind: "directive", type: i3.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "directive", type: CalendarCellDirective, selector: "[odxCalendarCell]", inputs: ["odxCalendarCell", "odxCalendarCellCalendarView", "odxCalendarCellActiveDate", "odxCalendarCellSelectedDate"] }, { kind: "pipe", type: DateLabelPipe, name: "odxDateLabel" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
565
565
|
};
|
|
566
566
|
CalendarYearsComponent = __decorate([
|
|
567
567
|
CSSComponent('calendar-years')
|
|
@@ -588,7 +588,7 @@ let CalendarComponent = class CalendarComponent {
|
|
|
588
588
|
}
|
|
589
589
|
}
|
|
590
590
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
591
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CalendarComponent, isStandalone: true, selector: "odx-calendar", inputs: { selectedDate: "selectedDate", minDate: "minDate", maxDate: "maxDate", filterFn: "filterFn" }, outputs: { selectedDateChange: "selectedDateChange" }, providers: [CalendarService], usesOnChanges: true, ngImport: i0, template: "<ng-template [ngrxLet]=\"{ activeDate: calendar.activeDate$, calendarView: calendar.calendarView$, selectedDate: calendar.selectedDate$ }\" let-vm>\n <ng-container [ngSwitch]=\"vm.calendarView\">\n <odx-calendar-year\n [activeDate]=\"vm.activeDate\"\n [selectedDate]=\"vm.selectedDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [filterFn]=\"filterFn\"\n *ngSwitchCase=\"CalendarView.Year\"\n ></odx-calendar-year>\n <odx-calendar-years\n [activeDate]=\"vm.activeDate\"\n [selectedDate]=\"vm.selectedDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [filterFn]=\"filterFn\"\n *ngSwitchCase=\"CalendarView.Years\"\n ></odx-calendar-years>\n <odx-calendar-month\n [activeDate]=\"vm.activeDate\"\n [selectedDate]=\"vm.selectedDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [filterFn]=\"filterFn\"\n (selectedChange)=\"selectedDateChange.emit($event)\"\n *ngSwitchDefault\n ></odx-calendar-month>\n </ng-container>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type:
|
|
591
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CalendarComponent, isStandalone: true, selector: "odx-calendar", inputs: { selectedDate: "selectedDate", minDate: "minDate", maxDate: "maxDate", filterFn: "filterFn" }, outputs: { selectedDateChange: "selectedDateChange" }, providers: [CalendarService], usesOnChanges: true, ngImport: i0, template: "<ng-template [ngrxLet]=\"{ activeDate: calendar.activeDate$, calendarView: calendar.calendarView$, selectedDate: calendar.selectedDate$ }\" let-vm>\n <ng-container [ngSwitch]=\"vm.calendarView\">\n <odx-calendar-year\n [activeDate]=\"vm.activeDate\"\n [selectedDate]=\"vm.selectedDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [filterFn]=\"filterFn\"\n *ngSwitchCase=\"CalendarView.Year\"\n ></odx-calendar-year>\n <odx-calendar-years\n [activeDate]=\"vm.activeDate\"\n [selectedDate]=\"vm.selectedDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [filterFn]=\"filterFn\"\n *ngSwitchCase=\"CalendarView.Years\"\n ></odx-calendar-years>\n <odx-calendar-month\n [activeDate]=\"vm.activeDate\"\n [selectedDate]=\"vm.selectedDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [filterFn]=\"filterFn\"\n (selectedChange)=\"selectedDateChange.emit($event)\"\n *ngSwitchDefault\n ></odx-calendar-month>\n </ng-container>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "ngmodule", type: A11yModule }, { kind: "component", type: CalendarMonthComponent, selector: "odx-calendar-month", outputs: ["selectedChange"] }, { kind: "component", type: CalendarYearComponent, selector: "odx-calendar-year" }, { kind: "component", type: CalendarYearsComponent, selector: "odx-calendar-years" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
592
592
|
};
|
|
593
593
|
CalendarComponent = __decorate([
|
|
594
594
|
CSSComponent('calendar')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-angular-components-calendar.mjs","sources":["../../../../libs/angular/components/calendar/src/lib/models/calendar-view.ts","../../../../libs/angular/components/calendar/src/lib/utils/check-identical-date.ts","../../../../libs/angular/components/calendar/src/lib/utils/get-A11y-label.ts","../../../../libs/angular/components/calendar/src/lib/utils/validate-max-date.ts","../../../../libs/angular/components/calendar/src/lib/utils/validate-min-date.ts","../../../../libs/angular/components/calendar/src/lib/utils/is-date-disabled.ts","../../../../libs/angular/components/calendar/src/lib/utils/parse-date.ts","../../../../libs/angular/components/calendar/src/lib/utils/validate-next-date-set.ts","../../../../libs/angular/components/calendar/src/lib/utils/validate-previous-date-set.ts","../../../../libs/angular/components/calendar/src/lib/calendar.service.ts","../../../../libs/angular/components/calendar/src/lib/components/calendar-header/calendar-header.component.ts","../../../../libs/angular/components/calendar/src/lib/components/calendar-header/calendar-header.component.html","../../../../libs/angular/components/calendar/src/lib/calendar.config.ts","../../../../libs/angular/components/calendar/src/lib/pipes/date-label.pipe.ts","../../../../libs/angular/components/calendar/src/lib/directives/calendar-cell.directive.ts","../../../../libs/angular/components/calendar/src/lib/directives/calendar-view.directive.ts","../../../../libs/angular/components/calendar/src/lib/services/calendar-month.service.ts","../../../../libs/angular/components/calendar/src/lib/services/calendar-year.service.ts","../../../../libs/angular/components/calendar/src/lib/services/calendar-years.service.ts","../../../../libs/angular/components/calendar/src/lib/components/calendar-month/calendar-month.component.ts","../../../../libs/angular/components/calendar/src/lib/components/calendar-month/calendar-month.component.html","../../../../libs/angular/components/calendar/src/lib/components/calendar-year/calendar-year.component.ts","../../../../libs/angular/components/calendar/src/lib/components/calendar-year/calendar-year.component.html","../../../../libs/angular/components/calendar/src/lib/components/calendar-years/calendar-years.component.ts","../../../../libs/angular/components/calendar/src/lib/components/calendar-years/calendar-years.component.html","../../../../libs/angular/components/calendar/src/lib/calendar.component.ts","../../../../libs/angular/components/calendar/src/lib/calendar.component.html","../../../../libs/angular/components/calendar/src/odx-angular-components-calendar.ts"],"sourcesContent":["export enum CalendarView {\n Month = 'month',\n Year = 'year',\n Years = 'years',\n}\n","import { isSameDay, isSameMonth, isSameYear } from 'date-fns';\nimport { CalendarView, DateValidator } from '../models';\n\nconst dateValidators: Record<CalendarView, DateValidator> = {\n [CalendarView.Month]: (currentDate: Date, date: Date) => isSameDay(currentDate, date),\n [CalendarView.Year]: (currentDate: Date, date: Date) => isSameMonth(currentDate, date),\n [CalendarView.Years]: (currentDate: Date, date: Date) => isSameYear(currentDate, date),\n};\n\nexport function checkIdenticalDate(currentDate: Date, date: Date, calendarView: CalendarView): boolean {\n return dateValidators[calendarView](currentDate, date);\n}\n","import { CalendarConfig } from '../calendar.config';\nimport { CalendarView } from '../models';\n\nconst labelResolvers: Record<CalendarView, (config: CalendarConfig) => string> = {\n [CalendarView.Month]: (config: CalendarConfig) => config.dayA11yLabel,\n [CalendarView.Year]: (config: CalendarConfig) => config.monthA11yLabel,\n [CalendarView.Years]: (config: CalendarConfig) => config.yearA11yLabel,\n};\n\nexport function getA11yLabel(calendarView: CalendarView, config: CalendarConfig): string {\n return labelResolvers[calendarView](config);\n}\n","import { endOfDay, endOfMonth, endOfYear } from 'date-fns';\nimport { CalendarView, DateValidator } from '../models';\n\nconst dateValidators: Record<CalendarView, DateValidator> = {\n [CalendarView.Month]: (maxDate: Date, date: Date) => endOfDay(maxDate) < endOfDay(date),\n [CalendarView.Year]: (maxDate: Date, date: Date) => endOfMonth(maxDate) < endOfMonth(date),\n [CalendarView.Years]: (maxDate: Date, date: Date) => endOfYear(maxDate) < endOfYear(date),\n};\n\nexport function validateMaxDate(maxDate: Date, date: Date, calendarView: CalendarView): boolean {\n return dateValidators[calendarView](maxDate, date);\n}\n","import { startOfDay, startOfMonth, startOfYear } from 'date-fns';\nimport { CalendarView, DateValidator } from '../models';\n\nconst dateValidators: Record<CalendarView, DateValidator> = {\n [CalendarView.Month]: (minDate: Date, date: Date) => startOfDay(minDate) > startOfDay(date),\n [CalendarView.Year]: (minDate: Date, date: Date) => startOfMonth(minDate) > startOfMonth(date),\n [CalendarView.Years]: (minDate: Date, date: Date) => startOfYear(minDate) > startOfYear(date),\n};\n\nexport function validateMinDate(maxDate: Date, date: Date, calendarView: CalendarView): boolean {\n return dateValidators[calendarView](maxDate, date);\n}\n","import { CalendarView, DateFilter } from '../models';\nimport { validateMaxDate } from './validate-max-date';\nimport { validateMinDate } from './validate-min-date';\n\nexport function isDateDisabled(date: Date, calendarView: CalendarView, minDate?: Date | null, maxDate?: Date | null, filterFn?: DateFilter | null): boolean {\n const minDateValidation = minDate && validateMinDate(minDate, date, calendarView);\n const maxDateValidation = maxDate && validateMaxDate(maxDate, date, calendarView);\n const isDateFiltered = calendarView === CalendarView.Month && !!filterFn?.(date);\n\n return minDateValidation || maxDateValidation || isDateFiltered;\n}\n","import { isString } from '@odx/angular/utils';\nimport { isValid, toDate } from 'date-fns';\nimport { DateType } from '../models';\n\nexport function parseDate(value: DateType): Date {\n try {\n const timestamp = isString(value) ? Date.parse(value) : value;\n\n if (!isValid(timestamp)) {\n return new Date();\n }\n\n return toDate(timestamp);\n } catch {\n return new Date();\n }\n}\n","import { addMonths, startOfMonth, startOfYear } from 'date-fns';\nimport { CalendarView, DateValidator } from '../models';\n\nconst dateValidators: Record<CalendarView, DateValidator> = {\n [CalendarView.Month]: (maxDate: Date, date: Date) => maxDate < startOfMonth(addMonths(date, 1)),\n [CalendarView.Year]: (maxDate: Date, date: Date) => maxDate < startOfYear(addMonths(date, 12)),\n [CalendarView.Years]: () => false,\n};\n\nexport function validateNextDateSet(maxDate: Date, date: Date, calendarView: CalendarView): boolean {\n return dateValidators[calendarView](maxDate, date);\n}\n","import { endOfMonth, endOfYear, subMonths } from 'date-fns';\nimport { CalendarView, DateValidator } from '../models';\n\nconst dateValidators: Record<CalendarView, DateValidator> = {\n [CalendarView.Month]: (minDate: Date, date: Date) => minDate > endOfMonth(subMonths(date, 1)),\n [CalendarView.Year]: (minDate: Date, date: Date) => minDate > endOfYear(subMonths(date, 12)),\n [CalendarView.Years]: () => false,\n};\n\nexport function validatePreviousDateSet(minDate: Date, date: Date, calendarView: CalendarView): boolean {\n return dateValidators[calendarView](minDate, date);\n}\n","import { Injectable } from '@angular/core';\nimport { isPresent } from '@odx/angular/utils';\nimport { isEqual, startOfDay } from 'date-fns';\nimport { BehaviorSubject, Subject, distinctUntilChanged, filter, merge, shareReplay } from 'rxjs';\nimport { CalendarView, DateType } from './models';\nimport { parseDate } from './utils';\n\n@Injectable()\nexport class CalendarService {\n private readonly calendarView$$ = new BehaviorSubject<CalendarView>(CalendarView.Month);\n private readonly activeDate$$ = new Subject<Date>();\n private readonly selectedDate$$ = new BehaviorSubject<Date | null>(null);\n\n public readonly calendarView$ = this.calendarView$$.pipe(shareReplay({ bufferSize: 1, refCount: true }));\n public readonly selectedDate$ = this.selectedDate$$.pipe(shareReplay({ bufferSize: 1, refCount: true }));\n public readonly activeDate$ = merge(this.activeDate$$, this.selectedDate$).pipe(\n filter(Boolean),\n distinctUntilChanged((prev, curr) => isEqual(prev, curr)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n public setActiveDate(value: DateType | null): void {\n if (!isPresent(value)) return;\n this.activeDate$$.next(parseDate(value));\n }\n\n public selectDate(value: DateType | null): void {\n const date = isPresent(value) ? startOfDay(parseDate(value)) : null;\n this.selectedDate$$.next(date);\n this.setActiveDate(date);\n }\n\n public changeView(view: CalendarView): void {\n this.calendarView$$.next(view);\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { ActionGroupComponent } from '@odx/angular/components/action-group';\nimport { ButtonComponent } from '@odx/angular/components/button';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { hasChanged, injectElement, NgChanges } from '@odx/angular/utils';\nimport { CalendarView } from '../../models';\nimport { validateNextDateSet, validatePreviousDateSet } from '../../utils';\n\n@CSSComponent('calendar-header')\n@Component({\n selector: 'odx-calendar-header',\n standalone: true,\n imports: [CoreModule, ActionGroupComponent, ButtonComponent, IconComponent],\n templateUrl: './calendar-header.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class CalendarHeaderComponent implements OnChanges {\n protected isPreviousDisabled = false;\n protected isNextDisabled = false;\n\n public readonly element = injectElement();\n\n @Input()\n public activeDate!: Date;\n\n @Input()\n public calendarView!: CalendarView;\n\n @Input()\n public minDate?: Date | null = null;\n\n @Input()\n public maxDate?: Date | null = null;\n\n @Output()\n public previous = new EventEmitter<MouseEvent>();\n\n @Output()\n public next = new EventEmitter<MouseEvent>();\n\n @Output()\n public changeView = new EventEmitter<void>();\n\n public ngOnChanges(changes: NgChanges<CalendarHeaderComponent>): void {\n if (hasChanged(changes, ['activeDate', 'calendarView', 'minDate', 'maxDate'], false)) {\n this.isPreviousDisabled = this.minDate ? validatePreviousDateSet(this.minDate, this.activeDate, this.calendarView) : false;\n this.isNextDisabled = this.maxDate ? validateNextDateSet(this.maxDate, this.activeDate, this.calendarView) : false;\n }\n }\n\n protected previousClicked(event: MouseEvent): void {\n if (this.isPreviousDisabled) return;\n this.previous.emit(event);\n }\n\n protected nextClicked(event: MouseEvent): void {\n if (this.isNextDisabled) return;\n this.next.emit(event);\n }\n}\n","<odx-action-group>\n <button odxButton [disabled]=\"isPreviousDisabled\" (click)=\"previousClicked($event)\">\n <odx-icon name=\"chevron-left\"></odx-icon>\n </button>\n\n <button odxButton class=\"odx-calendar-header__title\" (click)=\"changeView.emit()\">\n <ng-content></ng-content>\n </button>\n\n <button odxButton [disabled]=\"isNextDisabled\" (click)=\"nextClicked($event)\">\n <odx-icon name=\"chevron-right\"></odx-icon>\n </button>\n</odx-action-group>\n","import { createConfigTokens } from '@odx/angular/utils';\nimport { Locale } from 'date-fns';\nimport { enGB } from 'date-fns/locale';\nimport { BehaviorSubject } from 'rxjs';\n\nexport interface CalendarConfig {\n /**\n * Pattern by which month-year label is transformed\n * @default 'LLLL yyyy'\n */\n monthYearLabel: string;\n /**\n * Pattern by which month label is transformed\n * @default 'LLL'\n */\n monthLabel: string;\n /**\n * Pattern by which week label is transformed\n * @default 'EEEEE'\n */\n weekLabel: string;\n /**\n * Pattern by which day label is transformed\n * @default 'd'\n */\n dayLabel: string;\n /**\n * Pattern by which Year label is transformed\n * @default 'yyyy'\n */\n yearLabel: string;\n /**\n * Pattern by which A11y day label is transformed\n * @default 'MMMM dd, yyyy'\n */\n dayA11yLabel: string;\n /**\n * Pattern by which A11y month label is transformed\n * @default 'MMMM, yyyy'\n */\n monthA11yLabel: string;\n /**\n * Pattern by which A11y year label is transformed\n * @default 'yyyy'\n */\n yearA11yLabel: string;\n /**\n * Displays the adjacent days in month calendar view\n * @default true\n */\n displayAdjacentDays: boolean;\n /**\n * Locale by which calendar labels are transformed\n * @default enGB\n */\n locale: BehaviorSubject<Locale>;\n yearView: { itemsPerRow: number };\n yearsView: { itemsPerRow: number; padding: number };\n}\n\nexport const { CalendarConfig, CalendarDefaultConfig, injectCalendarConfig, provideCalendarConfig } = createConfigTokens(\n 'Calendar',\n '@odx/angular/components/calendar',\n {\n monthYearLabel: 'LLLL yyyy',\n monthLabel: 'LLL',\n weekLabel: 'EEEEE',\n dayLabel: 'd',\n yearLabel: 'yyyy',\n dayA11yLabel: 'MMMM dd, yyyy',\n monthA11yLabel: 'MMMM, yyyy',\n yearA11yLabel: 'yyyy',\n displayAdjacentDays: true,\n locale: new BehaviorSubject<Locale>(enGB),\n yearView: {\n itemsPerRow: 3,\n },\n yearsView: {\n itemsPerRow: 3,\n padding: 100,\n },\n },\n);\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { format } from 'date-fns';\nimport { injectCalendarConfig } from '../calendar.config';\n\n@Pipe({\n standalone: true,\n name: 'odxDateLabel',\n pure: true,\n})\nexport class DateLabelPipe implements PipeTransform {\n public readonly config = injectCalendarConfig();\n\n public transform(value: Date | null, dateFormat: string): string {\n if (!value) return '';\n\n return format(value, dateFormat, { locale: this.config.locale.getValue() });\n }\n}\n","import { Directive, inject, Input, OnChanges } from '@angular/core';\nimport { DisabledController } from '@odx/angular';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { deferFn, hasChanged, injectElement, NgChanges } from '@odx/angular/utils';\nimport { isSameMonth } from 'date-fns';\nimport { injectCalendarConfig } from '../calendar.config';\nimport { CalendarView } from '../models';\nimport { DateLabelPipe } from '../pipes';\nimport { checkIdenticalDate, getA11yLabel } from '../utils';\n\n@CSSComponent('calendar-cell')\n@Directive({\n selector: '[odxCalendarCell]',\n standalone: true,\n providers: [DisabledController.connect(), DateLabelPipe],\n host: {\n '[class.is-disabled]': 'isDisabled',\n '[class.is-selected]': 'isSelected',\n '[attr.hidden]': 'isHidden || null',\n '[tabindex]': 'isActive ? 0 : -1',\n '[attr.aria-label]': 'ariaLabel',\n '[attr.aria-disabled]': 'isDisabled',\n '[attr.type]': '\"button\"',\n },\n})\nexport class CalendarCellDirective implements OnChanges {\n private readonly disabledController = DisabledController.inject();\n\n protected readonly config = injectCalendarConfig();\n protected readonly dateLabelPipe = inject(DateLabelPipe);\n protected isActive = false;\n protected isSelected = false;\n protected isHidden = false;\n protected ariaLabel = '';\n\n protected get isDisabled(): boolean {\n return !!this.disabledController?.disabled;\n }\n\n @CSSModifier()\n protected isCurrent = false;\n\n @CSSModifier()\n protected adjacent = false;\n\n public readonly element = injectElement();\n\n @Input('odxCalendarCell')\n public date!: Date;\n\n @Input('odxCalendarCellCalendarView')\n public calendarView!: CalendarView;\n\n @Input('odxCalendarCellActiveDate')\n public activeDate: Date | null = null;\n\n @Input('odxCalendarCellSelectedDate')\n public selectedDate?: Date | null = null;\n\n public ngOnChanges(changes: NgChanges<CalendarCellDirective>): void {\n if (hasChanged(changes, ['date', 'calendarView'], false)) {\n this.ariaLabel = this.dateLabelPipe.transform(this.date, getA11yLabel(this.calendarView, this.config));\n this.isCurrent = checkIdenticalDate(this.date, new Date(), this.calendarView);\n }\n\n if (this.activeDate && hasChanged(changes, ['date', 'activeDate'], false)) {\n this.isActive = checkIdenticalDate(this.date, this.activeDate, this.calendarView);\n if (this.calendarView === CalendarView.Month) {\n this.adjacent = !isSameMonth(this.date, this.activeDate);\n this.isHidden = this.adjacent && !this.config.displayAdjacentDays;\n }\n }\n\n if (this.selectedDate && hasChanged(changes, ['date', 'selectedDate'], false)) {\n this.isSelected = checkIdenticalDate(this.date, this.selectedDate, this.calendarView);\n }\n\n if (this.isActive) {\n deferFn(() => this.element.nativeElement.focus());\n }\n }\n}\n","import { Directive, inject, Input } from '@angular/core';\nimport { injectElement, trackByIndex, untilDestroyed } from '@odx/angular/utils';\nimport { injectCalendarConfig } from '../calendar.config';\nimport { CalendarService } from '../calendar.service';\nimport { CalendarView, DateFilter } from '../models';\nimport { isDateDisabled } from '../utils';\n\n@Directive({\n standalone: true,\n})\nexport abstract class CalendarViewDirective {\n protected readonly takeUntilDestroyed = untilDestroyed();\n protected readonly calendar = inject(CalendarService);\n protected readonly config = injectCalendarConfig();\n protected readonly trackByIndex = trackByIndex;\n protected abstract readonly currentView: CalendarView;\n protected abstract readonly nextView: CalendarView;\n\n public readonly element = injectElement();\n\n @Input()\n public activeDate!: Date;\n\n @Input()\n public selectedDate?: Date | null = null;\n\n @Input()\n public minDate?: Date | null = null;\n\n @Input()\n public maxDate?: Date | null = null;\n\n @Input()\n public filterFn?: DateFilter | null = null;\n\n protected isDateDisabled(value: Date): boolean {\n return isDateDisabled(value, this.currentView, this.minDate, this.maxDate, this.filterFn);\n }\n\n protected changeView(): void {\n this.calendar.changeView(this.nextView);\n }\n\n protected updateActiveDate(event: Event, date: Date): void {\n event.preventDefault();\n event.stopPropagation();\n\n this.calendar.setActiveDate(date);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { addDays, endOfMonth, endOfWeek, startOfMonth, startOfWeek } from 'date-fns';\nimport { map } from 'rxjs';\nimport { CalendarService } from '../calendar.service';\n\n@Injectable()\nexport class CalendarMonthService {\n private readonly calendar = inject(CalendarService);\n\n public readonly weekDays$ = this.calendar.activeDate$.pipe(map((date) => this.generateWeekDays(date)));\n public readonly weeks$ = this.calendar.activeDate$.pipe(map((date) => this.generateWeeks(date)));\n\n private generateWeekDays(date: Date): Date[] {\n const firstWeekDay = startOfWeek(date, { weekStartsOn: 1 });\n\n return Array.from({ length: 7 }, (_, i) => addDays(firstWeekDay, i));\n }\n\n private generateWeeks(date: Date): Date[][] {\n const startOfTheSelectedMonth = startOfMonth(date);\n const endOfTheSelectedMonth = endOfMonth(date);\n const startDate = startOfWeek(startOfTheSelectedMonth, { weekStartsOn: 1 });\n const endDate = endOfWeek(endOfTheSelectedMonth);\n const allWeeks = [];\n\n let currentDate = startDate;\n while (currentDate <= endDate) {\n allWeeks.push(this.generateDaysForWeek(currentDate, date));\n currentDate = addDays(currentDate, 7);\n }\n\n return allWeeks;\n }\n\n private generateDaysForWeek(date: Date, currentDate: Date): Date[] {\n return Array.from({ length: 7 }).map((_, i) => addDays(date, i), currentDate);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { eachMonthOfInterval, endOfYear, startOfYear } from 'date-fns';\nimport { map } from 'rxjs';\nimport { injectCalendarConfig } from '../calendar.config';\nimport { CalendarService } from '../calendar.service';\n\n@Injectable()\nexport class CalendarYearService {\n private readonly config = injectCalendarConfig();\n private readonly calendar = inject(CalendarService);\n\n public readonly seasons$ = this.calendar.activeDate$.pipe(map((selectedDate) => this.generateSeasons(selectedDate)));\n\n private generateSeasons(date: Date): Date[][] {\n const { itemsPerRow } = this.config.yearView;\n const seasons = [];\n const months = eachMonthOfInterval({\n start: startOfYear(date),\n end: endOfYear(date),\n });\n\n let index = 0;\n while (index < months.length) {\n seasons.push(months.slice(index, index + itemsPerRow));\n index += itemsPerRow;\n }\n\n return seasons;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { addYears, getYear, setYear, startOfYear } from 'date-fns';\nimport { defer, of } from 'rxjs';\nimport { injectCalendarConfig } from '../calendar.config';\n\n@Injectable()\nexport class CalendarYearsService {\n private readonly config = injectCalendarConfig();\n\n public readonly years$ = defer(() => of(this.generateYears()));\n\n private generateYears(): Date[][] {\n const { itemsPerRow, padding } = this.config.yearsView;\n const now = Date.now();\n const startDate = startOfYear(addYears(now, -padding));\n const startYear = getYear(startDate);\n const endDate = startOfYear(addYears(now, padding));\n const endYear = getYear(endDate);\n\n const years: Date[] = [];\n const yearRows: Date[][] = [];\n\n for (let i = startYear; i <= endYear; i++) {\n years.push(setYear(startDate, i));\n }\n\n let index = 0;\n while (index < years.length) {\n yearRows.push(years.slice(index, index + itemsPerRow));\n index += itemsPerRow;\n }\n\n return yearRows;\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, inject, Output, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { addDays, addMonths, addWeeks, subDays, subMonths, subWeeks } from 'date-fns';\nimport { CalendarCellDirective, CalendarViewDirective } from '../../directives';\nimport { CalendarView } from '../../models';\nimport { DateLabelPipe } from '../../pipes';\nimport { CalendarMonthService } from '../../services';\nimport { CalendarHeaderComponent } from '../calendar-header';\n\n@CSSComponent('calendar-month')\n@Component({\n selector: 'odx-calendar-month',\n standalone: true,\n imports: [CoreModule, CalendarCellDirective, CalendarHeaderComponent, DateLabelPipe],\n templateUrl: './calendar-month.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [CalendarMonthService],\n})\nexport class CalendarMonthComponent extends CalendarViewDirective {\n protected readonly calendarMonth = inject(CalendarMonthService);\n protected readonly nextView = CalendarView.Years;\n protected readonly currentView = CalendarView.Month;\n\n @Output()\n public selectedChange = new EventEmitter<Date | null>();\n\n protected previousDay(event: Event): void {\n this.updateActiveDate(event, subDays(this.activeDate, 1));\n }\n\n protected nextDay(event: Event): void {\n this.updateActiveDate(event, addDays(this.activeDate, 1));\n }\n\n protected previousWeek(event: Event): void {\n this.updateActiveDate(event, subWeeks(this.activeDate, 1));\n }\n\n protected nextWeek(event: Event): void {\n this.updateActiveDate(event, addWeeks(this.activeDate, 1));\n }\n\n protected previousMonth(event: Event): void {\n this.updateActiveDate(event, subMonths(this.activeDate, 1));\n }\n\n protected nextMonth(event: Event): void {\n this.updateActiveDate(event, addMonths(this.activeDate, 1));\n }\n\n protected selectDate(value: Date): void {\n if (this.isDateDisabled(value)) return;\n\n this.calendar.selectDate(value);\n this.selectedChange.emit(value);\n }\n}\n","<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\">\n <thead>\n <tr>\n <th colspan=\"7\">\n <odx-calendar-header\n [calendarView]=\"currentView\"\n [activeDate]=\"activeDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (previous)=\"previousMonth($event)\"\n (next)=\"nextMonth($event)\"\n (changeView)=\"changeView()\"\n >\n {{ activeDate | odxDateLabel: config.monthYearLabel }}\n </odx-calendar-header>\n </th>\n </tr>\n\n <tr class=\"odx-calendar__weekdays\">\n <td *ngFor=\"let day of calendarMonth.weekDays$ | async\">\n {{ day | odxDateLabel: config.weekLabel }}\n </td>\n </tr>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousDay($event)\"\n (keydown.ArrowRight)=\"nextDay($event)\"\n (keydown.ArrowUp)=\"previousWeek($event)\"\n (keydown.ArrowDown)=\"nextWeek($event)\"\n (keydown.PageUp)=\"previousMonth($event)\"\n (keydown.PageDown)=\"nextMonth($event)\"\n >\n <tr *ngFor=\"let week of calendarMonth.weeks$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let day of week; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(day)\"\n [odxCalendarCell]=\"day\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"selectedDate\"\n (click)=\"selectDate(day)\"\n >\n {{ day | odxDateLabel: config.dayLabel }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n","import { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { addMonths, getMonth, setMonth, subMonths } from 'date-fns';\nimport { CalendarCellDirective, CalendarViewDirective } from '../../directives';\nimport { CalendarView } from '../../models';\nimport { DateLabelPipe } from '../../pipes';\nimport { CalendarYearService } from '../../services';\nimport { CalendarHeaderComponent } from '../calendar-header';\n\n@CSSComponent('calendar-year')\n@Component({\n selector: 'odx-calendar-year',\n standalone: true,\n imports: [CoreModule, CalendarCellDirective, CalendarHeaderComponent, DateLabelPipe],\n templateUrl: './calendar-year.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [CalendarYearService],\n})\nexport class CalendarYearComponent extends CalendarViewDirective {\n protected readonly calendarYear = inject(CalendarYearService);\n protected readonly nextView = CalendarView.Month;\n protected readonly currentView = CalendarView.Year;\n\n protected previousMonth(event: Event): void {\n this.updateActiveDate(event, subMonths(this.activeDate, 1));\n }\n\n protected nextMonth(event: Event): void {\n this.updateActiveDate(event, addMonths(this.activeDate, 1));\n }\n\n protected previousSeason(event: Event): void {\n this.updateActiveDate(event, subMonths(this.activeDate, 3));\n }\n\n protected nextSeason(event: Event): void {\n this.updateActiveDate(event, addMonths(this.activeDate, 3));\n }\n\n protected previousYear(event: Event): void {\n this.updateActiveDate(event, subMonths(this.activeDate, 12));\n }\n\n protected nextYear(event: Event): void {\n this.updateActiveDate(event, addMonths(this.activeDate, 12));\n }\n\n protected selectDate(value: Date): void {\n if (this.isDateDisabled(value)) return;\n\n const date = setMonth(this.activeDate, getMonth(value));\n this.calendar.selectDate(date);\n\n this.changeView();\n }\n}\n","<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\">\n <thead>\n <tr>\n <th colspan=\"3\">\n <odx-calendar-header\n (previous)=\"previousYear($event)\"\n [calendarView]=\"currentView\"\n [activeDate]=\"activeDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (next)=\"nextYear($event)\"\n (changeView)=\"changeView()\"\n >\n {{ activeDate | odxDateLabel: config.yearLabel }}\n </odx-calendar-header>\n </th>\n </tr>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousMonth($event)\"\n (keydown.ArrowRight)=\"nextMonth($event)\"\n (keydown.ArrowUp)=\"previousSeason($event)\"\n (keydown.ArrowDown)=\"nextSeason($event)\"\n (keydown.PageDown)=\"nextYear($event)\"\n (keydown.PageUp)=\"previousYear($event)\"\n >\n <tr class=\"odx-calendar__season\" *ngFor=\"let season of calendarYear.seasons$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let month of season; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(month)\"\n [odxCalendarCell]=\"month\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"selectedDate\"\n (click)=\"selectDate(month)\"\n >\n {{ month | odxDateLabel: config.monthLabel }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n","import { DOCUMENT } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { deferFn, isFunction } from '@odx/angular/utils';\nimport { addMonths, getYear, setYear, subMonths } from 'date-fns';\nimport { CalendarCellDirective, CalendarViewDirective } from '../../directives';\nimport { CalendarView } from '../../models';\nimport { DateLabelPipe } from '../../pipes';\nimport { CalendarYearsService } from '../../services';\nimport { CalendarHeaderComponent } from '../calendar-header';\n\n@CSSComponent('calendar-years')\n@Component({\n selector: 'odx-calendar-years',\n standalone: true,\n imports: [CoreModule, CalendarCellDirective, CalendarHeaderComponent, DateLabelPipe],\n templateUrl: './calendar-years.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [CalendarYearsService],\n})\nexport class CalendarYearsComponent extends CalendarViewDirective implements AfterViewInit {\n private readonly document = inject(DOCUMENT);\n\n protected readonly calendarYears = inject(CalendarYearsService);\n protected readonly nextView = CalendarView.Year;\n protected readonly currentView = CalendarView.Years;\n\n public ngAfterViewInit(): void {\n deferFn(() => this.scrollCurrentYearIntoView());\n }\n\n protected previousYear(event: Event): void {\n this.updateActiveDate(event, subMonths(this.activeDate, 12));\n }\n\n protected nextYear(event: Event): void {\n this.updateActiveDate(event, addMonths(this.activeDate, 12));\n }\n\n protected previousRow(event: Event): void {\n this.updateActiveDate(event, subMonths(this.activeDate, 12 * 3));\n }\n\n protected nextRow(event: Event): void {\n this.updateActiveDate(event, addMonths(this.activeDate, 12 * 3));\n }\n\n protected selectDate(value: Date): void {\n if (this.isDateDisabled(value)) return;\n\n const date = setYear(this.activeDate, getYear(value));\n this.calendar.selectDate(date);\n\n this.changeView();\n }\n\n private scrollCurrentYearIntoView(): void {\n const selectedYear = this.document.querySelector('.odx-calendar-cell.is-selected');\n const currentYear = this.document.querySelector('.odx-calendar-cell--is-current');\n\n const element = selectedYear || currentYear;\n\n if (element && isFunction(element.scrollIntoView)) {\n element.scrollIntoView({ block: 'center', behavior: 'smooth' });\n }\n }\n}\n","<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\" *ngrxLet=\"calendar.activeDate$ as activeDate\">\n <thead aria-hidden=\"true\">\n <th></th>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousYear($event)\"\n (keydown.ArrowRight)=\"nextYear($event)\"\n (keydown.ArrowUp)=\"previousRow($event)\"\n (keydown.ArrowDown)=\"nextRow($event)\"\n >\n <tr class=\"odx-calendar__year-row\" *ngFor=\"let yearRow of calendarYears.years$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let year of yearRow; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(year)\"\n [odxCalendarCell]=\"year\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"calendar.selectedDate$ | async\"\n (click)=\"selectDate(year)\"\n >\n {{ year | odxDateLabel: config.yearLabel }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { ChangeDetectionStrategy, Component, EventEmitter, inject, Input, OnChanges, Output, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { hasChanged, injectElement, NgChanges } from '@odx/angular/utils';\nimport { CalendarService } from './calendar.service';\nimport { CalendarMonthComponent, CalendarYearComponent, CalendarYearsComponent } from './components';\nimport { CalendarView, DateFilter, DateType } from './models';\n\n@CSSComponent('calendar')\n@Component({\n selector: 'odx-calendar',\n standalone: true,\n imports: [CoreModule, A11yModule, CalendarMonthComponent, CalendarYearComponent, CalendarYearsComponent],\n templateUrl: './calendar.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [CalendarService],\n})\nexport class CalendarComponent implements OnChanges {\n protected readonly CalendarView = CalendarView;\n protected readonly calendar = inject(CalendarService);\n\n public readonly element = injectElement();\n\n @Input()\n public selectedDate: DateType | null = null;\n\n @Input()\n public minDate?: Date | null = null;\n\n @Input()\n public maxDate?: Date | null = null;\n\n @Input()\n public filterFn?: DateFilter | null = null;\n\n @Output()\n public selectedDateChange = new EventEmitter<Date | null>();\n\n public ngOnChanges(changes: NgChanges<CalendarComponent>): void {\n if (hasChanged(changes, 'selectedDate', false)) {\n this.calendar.selectDate(this.selectedDate);\n }\n }\n}\n","<ng-template [ngrxLet]=\"{ activeDate: calendar.activeDate$, calendarView: calendar.calendarView$, selectedDate: calendar.selectedDate$ }\" let-vm>\n <ng-container [ngSwitch]=\"vm.calendarView\">\n <odx-calendar-year\n [activeDate]=\"vm.activeDate\"\n [selectedDate]=\"vm.selectedDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [filterFn]=\"filterFn\"\n *ngSwitchCase=\"CalendarView.Year\"\n ></odx-calendar-year>\n <odx-calendar-years\n [activeDate]=\"vm.activeDate\"\n [selectedDate]=\"vm.selectedDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [filterFn]=\"filterFn\"\n *ngSwitchCase=\"CalendarView.Years\"\n ></odx-calendar-years>\n <odx-calendar-month\n [activeDate]=\"vm.activeDate\"\n [selectedDate]=\"vm.selectedDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [filterFn]=\"filterFn\"\n (selectedChange)=\"selectedDateChange.emit($event)\"\n *ngSwitchDefault\n ></odx-calendar-month>\n </ng-container>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["dateValidators","i2","i3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"odx-angular-components-calendar.mjs","sources":["../../../../libs/angular/components/calendar/src/lib/models/calendar-view.ts","../../../../libs/angular/components/calendar/src/lib/utils/check-identical-date.ts","../../../../libs/angular/components/calendar/src/lib/utils/get-A11y-label.ts","../../../../libs/angular/components/calendar/src/lib/utils/validate-max-date.ts","../../../../libs/angular/components/calendar/src/lib/utils/validate-min-date.ts","../../../../libs/angular/components/calendar/src/lib/utils/is-date-disabled.ts","../../../../libs/angular/components/calendar/src/lib/utils/parse-date.ts","../../../../libs/angular/components/calendar/src/lib/utils/validate-next-date-set.ts","../../../../libs/angular/components/calendar/src/lib/utils/validate-previous-date-set.ts","../../../../libs/angular/components/calendar/src/lib/calendar.service.ts","../../../../libs/angular/components/calendar/src/lib/components/calendar-header/calendar-header.component.ts","../../../../libs/angular/components/calendar/src/lib/components/calendar-header/calendar-header.component.html","../../../../libs/angular/components/calendar/src/lib/calendar.config.ts","../../../../libs/angular/components/calendar/src/lib/pipes/date-label.pipe.ts","../../../../libs/angular/components/calendar/src/lib/directives/calendar-cell.directive.ts","../../../../libs/angular/components/calendar/src/lib/directives/calendar-view.directive.ts","../../../../libs/angular/components/calendar/src/lib/services/calendar-month.service.ts","../../../../libs/angular/components/calendar/src/lib/services/calendar-year.service.ts","../../../../libs/angular/components/calendar/src/lib/services/calendar-years.service.ts","../../../../libs/angular/components/calendar/src/lib/components/calendar-month/calendar-month.component.ts","../../../../libs/angular/components/calendar/src/lib/components/calendar-month/calendar-month.component.html","../../../../libs/angular/components/calendar/src/lib/components/calendar-year/calendar-year.component.ts","../../../../libs/angular/components/calendar/src/lib/components/calendar-year/calendar-year.component.html","../../../../libs/angular/components/calendar/src/lib/components/calendar-years/calendar-years.component.ts","../../../../libs/angular/components/calendar/src/lib/components/calendar-years/calendar-years.component.html","../../../../libs/angular/components/calendar/src/lib/calendar.component.ts","../../../../libs/angular/components/calendar/src/lib/calendar.component.html","../../../../libs/angular/components/calendar/src/odx-angular-components-calendar.ts"],"sourcesContent":["export enum CalendarView {\n Month = 'month',\n Year = 'year',\n Years = 'years',\n}\n","import { isSameDay, isSameMonth, isSameYear } from 'date-fns';\nimport { CalendarView, DateValidator } from '../models';\n\nconst dateValidators: Record<CalendarView, DateValidator> = {\n [CalendarView.Month]: (currentDate: Date, date: Date) => isSameDay(currentDate, date),\n [CalendarView.Year]: (currentDate: Date, date: Date) => isSameMonth(currentDate, date),\n [CalendarView.Years]: (currentDate: Date, date: Date) => isSameYear(currentDate, date),\n};\n\nexport function checkIdenticalDate(currentDate: Date, date: Date, calendarView: CalendarView): boolean {\n return dateValidators[calendarView](currentDate, date);\n}\n","import { CalendarConfig } from '../calendar.config';\nimport { CalendarView } from '../models';\n\nconst labelResolvers: Record<CalendarView, (config: CalendarConfig) => string> = {\n [CalendarView.Month]: (config: CalendarConfig) => config.dayA11yLabel,\n [CalendarView.Year]: (config: CalendarConfig) => config.monthA11yLabel,\n [CalendarView.Years]: (config: CalendarConfig) => config.yearA11yLabel,\n};\n\nexport function getA11yLabel(calendarView: CalendarView, config: CalendarConfig): string {\n return labelResolvers[calendarView](config);\n}\n","import { endOfDay, endOfMonth, endOfYear } from 'date-fns';\nimport { CalendarView, DateValidator } from '../models';\n\nconst dateValidators: Record<CalendarView, DateValidator> = {\n [CalendarView.Month]: (maxDate: Date, date: Date) => endOfDay(maxDate) < endOfDay(date),\n [CalendarView.Year]: (maxDate: Date, date: Date) => endOfMonth(maxDate) < endOfMonth(date),\n [CalendarView.Years]: (maxDate: Date, date: Date) => endOfYear(maxDate) < endOfYear(date),\n};\n\nexport function validateMaxDate(maxDate: Date, date: Date, calendarView: CalendarView): boolean {\n return dateValidators[calendarView](maxDate, date);\n}\n","import { startOfDay, startOfMonth, startOfYear } from 'date-fns';\nimport { CalendarView, DateValidator } from '../models';\n\nconst dateValidators: Record<CalendarView, DateValidator> = {\n [CalendarView.Month]: (minDate: Date, date: Date) => startOfDay(minDate) > startOfDay(date),\n [CalendarView.Year]: (minDate: Date, date: Date) => startOfMonth(minDate) > startOfMonth(date),\n [CalendarView.Years]: (minDate: Date, date: Date) => startOfYear(minDate) > startOfYear(date),\n};\n\nexport function validateMinDate(maxDate: Date, date: Date, calendarView: CalendarView): boolean {\n return dateValidators[calendarView](maxDate, date);\n}\n","import { CalendarView, DateFilter } from '../models';\nimport { validateMaxDate } from './validate-max-date';\nimport { validateMinDate } from './validate-min-date';\n\nexport function isDateDisabled(date: Date, calendarView: CalendarView, minDate?: Date | null, maxDate?: Date | null, filterFn?: DateFilter | null): boolean {\n const minDateValidation = minDate && validateMinDate(minDate, date, calendarView);\n const maxDateValidation = maxDate && validateMaxDate(maxDate, date, calendarView);\n const isDateFiltered = calendarView === CalendarView.Month && !!filterFn?.(date);\n\n return minDateValidation || maxDateValidation || isDateFiltered;\n}\n","import { isString } from '@odx/angular/utils';\nimport { isValid, toDate } from 'date-fns';\nimport { DateType } from '../models';\n\nexport function parseDate(value: DateType): Date {\n try {\n const timestamp = isString(value) ? Date.parse(value) : value;\n\n if (!isValid(timestamp)) {\n return new Date();\n }\n\n return toDate(timestamp);\n } catch {\n return new Date();\n }\n}\n","import { addMonths, startOfMonth, startOfYear } from 'date-fns';\nimport { CalendarView, DateValidator } from '../models';\n\nconst dateValidators: Record<CalendarView, DateValidator> = {\n [CalendarView.Month]: (maxDate: Date, date: Date) => maxDate < startOfMonth(addMonths(date, 1)),\n [CalendarView.Year]: (maxDate: Date, date: Date) => maxDate < startOfYear(addMonths(date, 12)),\n [CalendarView.Years]: () => false,\n};\n\nexport function validateNextDateSet(maxDate: Date, date: Date, calendarView: CalendarView): boolean {\n return dateValidators[calendarView](maxDate, date);\n}\n","import { endOfMonth, endOfYear, subMonths } from 'date-fns';\nimport { CalendarView, DateValidator } from '../models';\n\nconst dateValidators: Record<CalendarView, DateValidator> = {\n [CalendarView.Month]: (minDate: Date, date: Date) => minDate > endOfMonth(subMonths(date, 1)),\n [CalendarView.Year]: (minDate: Date, date: Date) => minDate > endOfYear(subMonths(date, 12)),\n [CalendarView.Years]: () => false,\n};\n\nexport function validatePreviousDateSet(minDate: Date, date: Date, calendarView: CalendarView): boolean {\n return dateValidators[calendarView](minDate, date);\n}\n","import { Injectable } from '@angular/core';\nimport { isPresent } from '@odx/angular/utils';\nimport { isEqual, startOfDay } from 'date-fns';\nimport { BehaviorSubject, Subject, distinctUntilChanged, filter, merge, shareReplay } from 'rxjs';\nimport { CalendarView, DateType } from './models';\nimport { parseDate } from './utils';\n\n@Injectable()\nexport class CalendarService {\n private readonly calendarView$$ = new BehaviorSubject<CalendarView>(CalendarView.Month);\n private readonly activeDate$$ = new Subject<Date>();\n private readonly selectedDate$$ = new BehaviorSubject<Date | null>(null);\n\n public readonly calendarView$ = this.calendarView$$.pipe(shareReplay({ bufferSize: 1, refCount: true }));\n public readonly selectedDate$ = this.selectedDate$$.pipe(shareReplay({ bufferSize: 1, refCount: true }));\n public readonly activeDate$ = merge(this.activeDate$$, this.selectedDate$).pipe(\n filter(Boolean),\n distinctUntilChanged((prev, curr) => isEqual(prev, curr)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n public setActiveDate(value: DateType | null): void {\n if (!isPresent(value)) return;\n this.activeDate$$.next(parseDate(value));\n }\n\n public selectDate(value: DateType | null): void {\n const date = isPresent(value) ? startOfDay(parseDate(value)) : null;\n this.selectedDate$$.next(date);\n this.setActiveDate(date);\n }\n\n public changeView(view: CalendarView): void {\n this.calendarView$$.next(view);\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { ActionGroupComponent } from '@odx/angular/components/action-group';\nimport { ButtonComponent } from '@odx/angular/components/button';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { hasChanged, injectElement, NgChanges } from '@odx/angular/utils';\nimport { CalendarView } from '../../models';\nimport { validateNextDateSet, validatePreviousDateSet } from '../../utils';\n\n@CSSComponent('calendar-header')\n@Component({\n selector: 'odx-calendar-header',\n standalone: true,\n imports: [CoreModule, ActionGroupComponent, ButtonComponent, IconComponent],\n templateUrl: './calendar-header.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class CalendarHeaderComponent implements OnChanges {\n protected isPreviousDisabled = false;\n protected isNextDisabled = false;\n\n public readonly element = injectElement();\n\n @Input()\n public activeDate!: Date;\n\n @Input()\n public calendarView!: CalendarView;\n\n @Input()\n public minDate?: Date | null = null;\n\n @Input()\n public maxDate?: Date | null = null;\n\n @Output()\n public previous = new EventEmitter<MouseEvent>();\n\n @Output()\n public next = new EventEmitter<MouseEvent>();\n\n @Output()\n public changeView = new EventEmitter<void>();\n\n public ngOnChanges(changes: NgChanges<CalendarHeaderComponent>): void {\n if (hasChanged(changes, ['activeDate', 'calendarView', 'minDate', 'maxDate'], false)) {\n this.isPreviousDisabled = this.minDate ? validatePreviousDateSet(this.minDate, this.activeDate, this.calendarView) : false;\n this.isNextDisabled = this.maxDate ? validateNextDateSet(this.maxDate, this.activeDate, this.calendarView) : false;\n }\n }\n\n protected previousClicked(event: MouseEvent): void {\n if (this.isPreviousDisabled) return;\n this.previous.emit(event);\n }\n\n protected nextClicked(event: MouseEvent): void {\n if (this.isNextDisabled) return;\n this.next.emit(event);\n }\n}\n","<odx-action-group>\n <button odxButton [disabled]=\"isPreviousDisabled\" (click)=\"previousClicked($event)\">\n <odx-icon name=\"chevron-left\"></odx-icon>\n </button>\n\n <button odxButton class=\"odx-calendar-header__title\" (click)=\"changeView.emit()\">\n <ng-content></ng-content>\n </button>\n\n <button odxButton [disabled]=\"isNextDisabled\" (click)=\"nextClicked($event)\">\n <odx-icon name=\"chevron-right\"></odx-icon>\n </button>\n</odx-action-group>\n","import { createConfigTokens } from '@odx/angular/utils';\nimport { Locale } from 'date-fns';\nimport { enGB } from 'date-fns/locale';\nimport { BehaviorSubject } from 'rxjs';\n\nexport interface CalendarConfig {\n /**\n * Pattern by which month-year label is transformed\n * @default 'LLLL yyyy'\n */\n monthYearLabel: string;\n /**\n * Pattern by which month label is transformed\n * @default 'LLL'\n */\n monthLabel: string;\n /**\n * Pattern by which week label is transformed\n * @default 'EEEEE'\n */\n weekLabel: string;\n /**\n * Pattern by which day label is transformed\n * @default 'd'\n */\n dayLabel: string;\n /**\n * Pattern by which Year label is transformed\n * @default 'yyyy'\n */\n yearLabel: string;\n /**\n * Pattern by which A11y day label is transformed\n * @default 'MMMM dd, yyyy'\n */\n dayA11yLabel: string;\n /**\n * Pattern by which A11y month label is transformed\n * @default 'MMMM, yyyy'\n */\n monthA11yLabel: string;\n /**\n * Pattern by which A11y year label is transformed\n * @default 'yyyy'\n */\n yearA11yLabel: string;\n /**\n * Displays the adjacent days in month calendar view\n * @default true\n */\n displayAdjacentDays: boolean;\n /**\n * Locale by which calendar labels are transformed\n * @default enGB\n */\n locale: BehaviorSubject<Locale>;\n yearView: { itemsPerRow: number };\n yearsView: { itemsPerRow: number; padding: number };\n}\n\nexport const { CalendarConfig, CalendarDefaultConfig, injectCalendarConfig, provideCalendarConfig } = createConfigTokens(\n 'Calendar',\n '@odx/angular/components/calendar',\n {\n monthYearLabel: 'LLLL yyyy',\n monthLabel: 'LLL',\n weekLabel: 'EEEEE',\n dayLabel: 'd',\n yearLabel: 'yyyy',\n dayA11yLabel: 'MMMM dd, yyyy',\n monthA11yLabel: 'MMMM, yyyy',\n yearA11yLabel: 'yyyy',\n displayAdjacentDays: true,\n locale: new BehaviorSubject<Locale>(enGB),\n yearView: {\n itemsPerRow: 3,\n },\n yearsView: {\n itemsPerRow: 3,\n padding: 100,\n },\n },\n);\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { format } from 'date-fns';\nimport { injectCalendarConfig } from '../calendar.config';\n\n@Pipe({\n standalone: true,\n name: 'odxDateLabel',\n pure: true,\n})\nexport class DateLabelPipe implements PipeTransform {\n public readonly config = injectCalendarConfig();\n\n public transform(value: Date | null, dateFormat: string): string {\n if (!value) return '';\n\n return format(value, dateFormat, { locale: this.config.locale.getValue() });\n }\n}\n","import { Directive, inject, Input, OnChanges } from '@angular/core';\nimport { DisabledController } from '@odx/angular';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { deferFn, hasChanged, injectElement, NgChanges } from '@odx/angular/utils';\nimport { isSameMonth } from 'date-fns';\nimport { injectCalendarConfig } from '../calendar.config';\nimport { CalendarView } from '../models';\nimport { DateLabelPipe } from '../pipes';\nimport { checkIdenticalDate, getA11yLabel } from '../utils';\n\n@CSSComponent('calendar-cell')\n@Directive({\n selector: '[odxCalendarCell]',\n standalone: true,\n providers: [DisabledController.connect(), DateLabelPipe],\n host: {\n '[class.is-disabled]': 'isDisabled',\n '[class.is-selected]': 'isSelected',\n '[attr.hidden]': 'isHidden || null',\n '[tabindex]': 'isActive ? 0 : -1',\n '[attr.aria-label]': 'ariaLabel',\n '[attr.aria-disabled]': 'isDisabled',\n '[attr.type]': '\"button\"',\n },\n})\nexport class CalendarCellDirective implements OnChanges {\n private readonly disabledController = DisabledController.inject();\n\n protected readonly config = injectCalendarConfig();\n protected readonly dateLabelPipe = inject(DateLabelPipe);\n protected isActive = false;\n protected isSelected = false;\n protected isHidden = false;\n protected ariaLabel = '';\n\n protected get isDisabled(): boolean {\n return !!this.disabledController?.disabled;\n }\n\n @CSSModifier()\n protected isCurrent = false;\n\n @CSSModifier()\n protected adjacent = false;\n\n public readonly element = injectElement();\n\n @Input('odxCalendarCell')\n public date!: Date;\n\n @Input('odxCalendarCellCalendarView')\n public calendarView!: CalendarView;\n\n @Input('odxCalendarCellActiveDate')\n public activeDate: Date | null = null;\n\n @Input('odxCalendarCellSelectedDate')\n public selectedDate?: Date | null = null;\n\n public ngOnChanges(changes: NgChanges<CalendarCellDirective>): void {\n if (hasChanged(changes, ['date', 'calendarView'], false)) {\n this.ariaLabel = this.dateLabelPipe.transform(this.date, getA11yLabel(this.calendarView, this.config));\n this.isCurrent = checkIdenticalDate(this.date, new Date(), this.calendarView);\n }\n\n if (this.activeDate && hasChanged(changes, ['date', 'activeDate'], false)) {\n this.isActive = checkIdenticalDate(this.date, this.activeDate, this.calendarView);\n if (this.calendarView === CalendarView.Month) {\n this.adjacent = !isSameMonth(this.date, this.activeDate);\n this.isHidden = this.adjacent && !this.config.displayAdjacentDays;\n }\n }\n\n if (this.selectedDate && hasChanged(changes, ['date', 'selectedDate'], false)) {\n this.isSelected = checkIdenticalDate(this.date, this.selectedDate, this.calendarView);\n }\n\n if (this.isActive) {\n deferFn(() => this.element.nativeElement.focus());\n }\n }\n}\n","import { Directive, inject, Input } from '@angular/core';\nimport { injectElement, trackByIndex, untilDestroyed } from '@odx/angular/utils';\nimport { injectCalendarConfig } from '../calendar.config';\nimport { CalendarService } from '../calendar.service';\nimport { CalendarView, DateFilter } from '../models';\nimport { isDateDisabled } from '../utils';\n\n@Directive({\n standalone: true,\n})\nexport abstract class CalendarViewDirective {\n protected readonly takeUntilDestroyed = untilDestroyed();\n protected readonly calendar = inject(CalendarService);\n protected readonly config = injectCalendarConfig();\n protected readonly trackByIndex = trackByIndex;\n protected abstract readonly currentView: CalendarView;\n protected abstract readonly nextView: CalendarView;\n\n public readonly element = injectElement();\n\n @Input()\n public activeDate!: Date;\n\n @Input()\n public selectedDate?: Date | null = null;\n\n @Input()\n public minDate?: Date | null = null;\n\n @Input()\n public maxDate?: Date | null = null;\n\n @Input()\n public filterFn?: DateFilter | null = null;\n\n protected isDateDisabled(value: Date): boolean {\n return isDateDisabled(value, this.currentView, this.minDate, this.maxDate, this.filterFn);\n }\n\n protected changeView(): void {\n this.calendar.changeView(this.nextView);\n }\n\n protected updateActiveDate(event: Event, date: Date): void {\n event.preventDefault();\n event.stopPropagation();\n\n this.calendar.setActiveDate(date);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { addDays, endOfMonth, endOfWeek, startOfMonth, startOfWeek } from 'date-fns';\nimport { map } from 'rxjs';\nimport { CalendarService } from '../calendar.service';\n\n@Injectable()\nexport class CalendarMonthService {\n private readonly calendar = inject(CalendarService);\n\n public readonly weekDays$ = this.calendar.activeDate$.pipe(map((date) => this.generateWeekDays(date)));\n public readonly weeks$ = this.calendar.activeDate$.pipe(map((date) => this.generateWeeks(date)));\n\n private generateWeekDays(date: Date): Date[] {\n const firstWeekDay = startOfWeek(date, { weekStartsOn: 1 });\n\n return Array.from({ length: 7 }, (_, i) => addDays(firstWeekDay, i));\n }\n\n private generateWeeks(date: Date): Date[][] {\n const startOfTheSelectedMonth = startOfMonth(date);\n const endOfTheSelectedMonth = endOfMonth(date);\n const startDate = startOfWeek(startOfTheSelectedMonth, { weekStartsOn: 1 });\n const endDate = endOfWeek(endOfTheSelectedMonth);\n const allWeeks = [];\n\n let currentDate = startDate;\n while (currentDate <= endDate) {\n allWeeks.push(this.generateDaysForWeek(currentDate, date));\n currentDate = addDays(currentDate, 7);\n }\n\n return allWeeks;\n }\n\n private generateDaysForWeek(date: Date, currentDate: Date): Date[] {\n return Array.from({ length: 7 }).map((_, i) => addDays(date, i), currentDate);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { eachMonthOfInterval, endOfYear, startOfYear } from 'date-fns';\nimport { map } from 'rxjs';\nimport { injectCalendarConfig } from '../calendar.config';\nimport { CalendarService } from '../calendar.service';\n\n@Injectable()\nexport class CalendarYearService {\n private readonly config = injectCalendarConfig();\n private readonly calendar = inject(CalendarService);\n\n public readonly seasons$ = this.calendar.activeDate$.pipe(map((selectedDate) => this.generateSeasons(selectedDate)));\n\n private generateSeasons(date: Date): Date[][] {\n const { itemsPerRow } = this.config.yearView;\n const seasons = [];\n const months = eachMonthOfInterval({\n start: startOfYear(date),\n end: endOfYear(date),\n });\n\n let index = 0;\n while (index < months.length) {\n seasons.push(months.slice(index, index + itemsPerRow));\n index += itemsPerRow;\n }\n\n return seasons;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { addYears, getYear, setYear, startOfYear } from 'date-fns';\nimport { defer, of } from 'rxjs';\nimport { injectCalendarConfig } from '../calendar.config';\n\n@Injectable()\nexport class CalendarYearsService {\n private readonly config = injectCalendarConfig();\n\n public readonly years$ = defer(() => of(this.generateYears()));\n\n private generateYears(): Date[][] {\n const { itemsPerRow, padding } = this.config.yearsView;\n const now = Date.now();\n const startDate = startOfYear(addYears(now, -padding));\n const startYear = getYear(startDate);\n const endDate = startOfYear(addYears(now, padding));\n const endYear = getYear(endDate);\n\n const years: Date[] = [];\n const yearRows: Date[][] = [];\n\n for (let i = startYear; i <= endYear; i++) {\n years.push(setYear(startDate, i));\n }\n\n let index = 0;\n while (index < years.length) {\n yearRows.push(years.slice(index, index + itemsPerRow));\n index += itemsPerRow;\n }\n\n return yearRows;\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, inject, Output, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { addDays, addMonths, addWeeks, subDays, subMonths, subWeeks } from 'date-fns';\nimport { CalendarCellDirective, CalendarViewDirective } from '../../directives';\nimport { CalendarView } from '../../models';\nimport { DateLabelPipe } from '../../pipes';\nimport { CalendarMonthService } from '../../services';\nimport { CalendarHeaderComponent } from '../calendar-header';\n\n@CSSComponent('calendar-month')\n@Component({\n selector: 'odx-calendar-month',\n standalone: true,\n imports: [CoreModule, CalendarCellDirective, CalendarHeaderComponent, DateLabelPipe],\n templateUrl: './calendar-month.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [CalendarMonthService],\n})\nexport class CalendarMonthComponent extends CalendarViewDirective {\n protected readonly calendarMonth = inject(CalendarMonthService);\n protected readonly nextView = CalendarView.Years;\n protected readonly currentView = CalendarView.Month;\n\n @Output()\n public selectedChange = new EventEmitter<Date | null>();\n\n protected previousDay(event: Event): void {\n this.updateActiveDate(event, subDays(this.activeDate, 1));\n }\n\n protected nextDay(event: Event): void {\n this.updateActiveDate(event, addDays(this.activeDate, 1));\n }\n\n protected previousWeek(event: Event): void {\n this.updateActiveDate(event, subWeeks(this.activeDate, 1));\n }\n\n protected nextWeek(event: Event): void {\n this.updateActiveDate(event, addWeeks(this.activeDate, 1));\n }\n\n protected previousMonth(event: Event): void {\n this.updateActiveDate(event, subMonths(this.activeDate, 1));\n }\n\n protected nextMonth(event: Event): void {\n this.updateActiveDate(event, addMonths(this.activeDate, 1));\n }\n\n protected selectDate(value: Date): void {\n if (this.isDateDisabled(value)) return;\n\n this.calendar.selectDate(value);\n this.selectedChange.emit(value);\n }\n}\n","<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\">\n <thead>\n <tr>\n <th colspan=\"7\">\n <odx-calendar-header\n [calendarView]=\"currentView\"\n [activeDate]=\"activeDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (previous)=\"previousMonth($event)\"\n (next)=\"nextMonth($event)\"\n (changeView)=\"changeView()\"\n >\n {{ activeDate | odxDateLabel: config.monthYearLabel }}\n </odx-calendar-header>\n </th>\n </tr>\n\n <tr class=\"odx-calendar__weekdays\">\n <td *ngFor=\"let day of calendarMonth.weekDays$ | async\">\n {{ day | odxDateLabel: config.weekLabel }}\n </td>\n </tr>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousDay($event)\"\n (keydown.ArrowRight)=\"nextDay($event)\"\n (keydown.ArrowUp)=\"previousWeek($event)\"\n (keydown.ArrowDown)=\"nextWeek($event)\"\n (keydown.PageUp)=\"previousMonth($event)\"\n (keydown.PageDown)=\"nextMonth($event)\"\n >\n <tr *ngFor=\"let week of calendarMonth.weeks$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let day of week; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(day)\"\n [odxCalendarCell]=\"day\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"selectedDate\"\n (click)=\"selectDate(day)\"\n >\n {{ day | odxDateLabel: config.dayLabel }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n","import { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { addMonths, getMonth, setMonth, subMonths } from 'date-fns';\nimport { CalendarCellDirective, CalendarViewDirective } from '../../directives';\nimport { CalendarView } from '../../models';\nimport { DateLabelPipe } from '../../pipes';\nimport { CalendarYearService } from '../../services';\nimport { CalendarHeaderComponent } from '../calendar-header';\n\n@CSSComponent('calendar-year')\n@Component({\n selector: 'odx-calendar-year',\n standalone: true,\n imports: [CoreModule, CalendarCellDirective, CalendarHeaderComponent, DateLabelPipe],\n templateUrl: './calendar-year.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [CalendarYearService],\n})\nexport class CalendarYearComponent extends CalendarViewDirective {\n protected readonly calendarYear = inject(CalendarYearService);\n protected readonly nextView = CalendarView.Month;\n protected readonly currentView = CalendarView.Year;\n\n protected previousMonth(event: Event): void {\n this.updateActiveDate(event, subMonths(this.activeDate, 1));\n }\n\n protected nextMonth(event: Event): void {\n this.updateActiveDate(event, addMonths(this.activeDate, 1));\n }\n\n protected previousSeason(event: Event): void {\n this.updateActiveDate(event, subMonths(this.activeDate, 3));\n }\n\n protected nextSeason(event: Event): void {\n this.updateActiveDate(event, addMonths(this.activeDate, 3));\n }\n\n protected previousYear(event: Event): void {\n this.updateActiveDate(event, subMonths(this.activeDate, 12));\n }\n\n protected nextYear(event: Event): void {\n this.updateActiveDate(event, addMonths(this.activeDate, 12));\n }\n\n protected selectDate(value: Date): void {\n if (this.isDateDisabled(value)) return;\n\n const date = setMonth(this.activeDate, getMonth(value));\n this.calendar.selectDate(date);\n\n this.changeView();\n }\n}\n","<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\">\n <thead>\n <tr>\n <th colspan=\"3\">\n <odx-calendar-header\n (previous)=\"previousYear($event)\"\n [calendarView]=\"currentView\"\n [activeDate]=\"activeDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (next)=\"nextYear($event)\"\n (changeView)=\"changeView()\"\n >\n {{ activeDate | odxDateLabel: config.yearLabel }}\n </odx-calendar-header>\n </th>\n </tr>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousMonth($event)\"\n (keydown.ArrowRight)=\"nextMonth($event)\"\n (keydown.ArrowUp)=\"previousSeason($event)\"\n (keydown.ArrowDown)=\"nextSeason($event)\"\n (keydown.PageDown)=\"nextYear($event)\"\n (keydown.PageUp)=\"previousYear($event)\"\n >\n <tr class=\"odx-calendar__season\" *ngFor=\"let season of calendarYear.seasons$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let month of season; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(month)\"\n [odxCalendarCell]=\"month\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"selectedDate\"\n (click)=\"selectDate(month)\"\n >\n {{ month | odxDateLabel: config.monthLabel }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n","import { DOCUMENT } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { deferFn, isFunction } from '@odx/angular/utils';\nimport { addMonths, getYear, setYear, subMonths } from 'date-fns';\nimport { CalendarCellDirective, CalendarViewDirective } from '../../directives';\nimport { CalendarView } from '../../models';\nimport { DateLabelPipe } from '../../pipes';\nimport { CalendarYearsService } from '../../services';\nimport { CalendarHeaderComponent } from '../calendar-header';\n\n@CSSComponent('calendar-years')\n@Component({\n selector: 'odx-calendar-years',\n standalone: true,\n imports: [CoreModule, CalendarCellDirective, CalendarHeaderComponent, DateLabelPipe],\n templateUrl: './calendar-years.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [CalendarYearsService],\n})\nexport class CalendarYearsComponent extends CalendarViewDirective implements AfterViewInit {\n private readonly document = inject(DOCUMENT);\n\n protected readonly calendarYears = inject(CalendarYearsService);\n protected readonly nextView = CalendarView.Year;\n protected readonly currentView = CalendarView.Years;\n\n public ngAfterViewInit(): void {\n deferFn(() => this.scrollCurrentYearIntoView());\n }\n\n protected previousYear(event: Event): void {\n this.updateActiveDate(event, subMonths(this.activeDate, 12));\n }\n\n protected nextYear(event: Event): void {\n this.updateActiveDate(event, addMonths(this.activeDate, 12));\n }\n\n protected previousRow(event: Event): void {\n this.updateActiveDate(event, subMonths(this.activeDate, 12 * 3));\n }\n\n protected nextRow(event: Event): void {\n this.updateActiveDate(event, addMonths(this.activeDate, 12 * 3));\n }\n\n protected selectDate(value: Date): void {\n if (this.isDateDisabled(value)) return;\n\n const date = setYear(this.activeDate, getYear(value));\n this.calendar.selectDate(date);\n\n this.changeView();\n }\n\n private scrollCurrentYearIntoView(): void {\n const selectedYear = this.document.querySelector('.odx-calendar-cell.is-selected');\n const currentYear = this.document.querySelector('.odx-calendar-cell--is-current');\n\n const element = selectedYear || currentYear;\n\n if (element && isFunction(element.scrollIntoView)) {\n element.scrollIntoView({ block: 'center', behavior: 'smooth' });\n }\n }\n}\n","<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\" *ngrxLet=\"calendar.activeDate$ as activeDate\">\n <thead aria-hidden=\"true\">\n <th></th>\n </thead>\n\n <tbody\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousYear($event)\"\n (keydown.ArrowRight)=\"nextYear($event)\"\n (keydown.ArrowUp)=\"previousRow($event)\"\n (keydown.ArrowDown)=\"nextRow($event)\"\n >\n <tr class=\"odx-calendar__year-row\" *ngFor=\"let yearRow of calendarYears.years$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let year of yearRow; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(year)\"\n [odxCalendarCell]=\"year\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellCalendarView]=\"currentView\"\n [odxCalendarCellSelectedDate]=\"calendar.selectedDate$ | async\"\n (click)=\"selectDate(year)\"\n >\n {{ year | odxDateLabel: config.yearLabel }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { ChangeDetectionStrategy, Component, EventEmitter, inject, Input, OnChanges, Output, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { hasChanged, injectElement, NgChanges } from '@odx/angular/utils';\nimport { CalendarService } from './calendar.service';\nimport { CalendarMonthComponent, CalendarYearComponent, CalendarYearsComponent } from './components';\nimport { CalendarView, DateFilter, DateType } from './models';\n\n@CSSComponent('calendar')\n@Component({\n selector: 'odx-calendar',\n standalone: true,\n imports: [CoreModule, A11yModule, CalendarMonthComponent, CalendarYearComponent, CalendarYearsComponent],\n templateUrl: './calendar.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [CalendarService],\n})\nexport class CalendarComponent implements OnChanges {\n protected readonly CalendarView = CalendarView;\n protected readonly calendar = inject(CalendarService);\n\n public readonly element = injectElement();\n\n @Input()\n public selectedDate: DateType | null = null;\n\n @Input()\n public minDate?: Date | null = null;\n\n @Input()\n public maxDate?: Date | null = null;\n\n @Input()\n public filterFn?: DateFilter | null = null;\n\n @Output()\n public selectedDateChange = new EventEmitter<Date | null>();\n\n public ngOnChanges(changes: NgChanges<CalendarComponent>): void {\n if (hasChanged(changes, 'selectedDate', false)) {\n this.calendar.selectDate(this.selectedDate);\n }\n }\n}\n","<ng-template [ngrxLet]=\"{ activeDate: calendar.activeDate$, calendarView: calendar.calendarView$, selectedDate: calendar.selectedDate$ }\" let-vm>\n <ng-container [ngSwitch]=\"vm.calendarView\">\n <odx-calendar-year\n [activeDate]=\"vm.activeDate\"\n [selectedDate]=\"vm.selectedDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [filterFn]=\"filterFn\"\n *ngSwitchCase=\"CalendarView.Year\"\n ></odx-calendar-year>\n <odx-calendar-years\n [activeDate]=\"vm.activeDate\"\n [selectedDate]=\"vm.selectedDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [filterFn]=\"filterFn\"\n *ngSwitchCase=\"CalendarView.Years\"\n ></odx-calendar-years>\n <odx-calendar-month\n [activeDate]=\"vm.activeDate\"\n [selectedDate]=\"vm.selectedDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [filterFn]=\"filterFn\"\n (selectedChange)=\"selectedDateChange.emit($event)\"\n *ngSwitchDefault\n ></odx-calendar-month>\n </ng-container>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["dateValidators","i2"],"mappings":"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"}
|
|
@@ -671,7 +671,7 @@ let NotificationCenterComponent = class NotificationCenterComponent {
|
|
|
671
671
|
return hasBeenSeen && !options.action;
|
|
672
672
|
}
|
|
673
673
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NotificationCenterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
674
|
-
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\"
|
|
674
|
+
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\">\n <ng-template [odxDynamicView]=\"(notificationCenterService.title$ | async) ?? ('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: "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 }); }
|
|
675
675
|
};
|
|
676
676
|
NotificationCenterComponent = __decorate([
|
|
677
677
|
CSSComponent('notification-center')
|
|
@@ -691,7 +691,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
691
691
|
NotificationItemComponent,
|
|
692
692
|
InteractiveDirective,
|
|
693
693
|
ListModule,
|
|
694
|
-
], 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\"
|
|
694
|
+
], 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\">\n <ng-template [odxDynamicView]=\"(notificationCenterService.title$ | async) ?? ('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" }]
|
|
695
695
|
}] });
|
|
696
696
|
|
|
697
697
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-angular-components-notification.mjs","sources":["../../../../libs/angular/components/notification/src/lib/notification.i18n.ts","../../../../libs/angular/components/notification/src/lib/helpers/get-notifications-by-tag.ts","../../../../libs/angular/components/notification/src/lib/helpers/sort-notifications.ts","../../../../libs/angular/components/notification/src/lib/helpers/to-notification-collection.ts","../../../../libs/angular/components/notification/src/lib/notification.config.ts","../../../../libs/angular/components/notification/src/lib/notification.logger.ts","../../../../libs/angular/components/notification/src/lib/notification.tokens.ts","../../../../libs/angular/components/notification/src/lib/notification.service.ts","../../../../libs/angular/components/notification/src/lib/services/notification-center.service.ts","../../../../libs/angular/components/notification/src/lib/models/notification-feature.ts","../../../../libs/angular/components/notification/src/lib/features/with-load-notifications.ts","../../../../libs/angular/components/notification/src/lib/features/with-save-notifications.ts","../../../../libs/angular/components/notification/src/lib/features/with-peristent-notifications.ts","../../../../libs/angular/components/notification/src/lib/features/with-browser-notifications.ts","../../../../libs/angular/components/notification/src/lib/features/with-notification-transformer.ts","../../../../libs/angular/components/notification/src/lib/components/notification-item/notification-item.component.ts","../../../../libs/angular/components/notification/src/lib/components/notification-item/notification-item.component.html","../../../../libs/angular/components/notification/src/lib/components/notification-center/notification-center.component.ts","../../../../libs/angular/components/notification/src/lib/components/notification-center/notification-center.component.html","../../../../libs/angular/components/notification/src/lib/directives/notification-center.directive.ts","../../../../libs/angular/components/notification/src/odx-angular-components-notification.ts"],"sourcesContent":["import { TranslationObject } from '@odx/angular/internal/translate';\n\nexport default {\n en: {\n title: 'Notifications',\n dismissAll: 'Dismiss all',\n },\n de: {\n title: 'Benachrichtigungen',\n dismissAll: 'Alle entfernen',\n },\n} as TranslationObject;\n","import { NotificationQuery } from '../models';\n\nexport function getNotificationsByTags(...tags: Array<string | null | undefined>): NotificationQuery {\n const cachedTags = new Set(tags.filter(Boolean));\n\n return ({ options }) => {\n return cachedTags.size < 1 || options.tags.every((tag) => cachedTags.has(tag));\n };\n}\n","import { isFunction } from '@odx/angular/utils';\nimport { MonoTypeOperatorFunction, tap } from 'rxjs';\nimport { NotificationRef, NotificationSortFn } from '../models';\n\nexport function sortNotifications(sortFn?: NotificationSortFn): MonoTypeOperatorFunction<NotificationRef[]> {\n return (source$) =>\n source$.pipe(\n tap((values) => {\n if (!isFunction(sortFn)) return;\n values.sort(sortFn);\n }),\n );\n}\n","import { OperatorFunction, map } from 'rxjs';\nimport { NotificationCollection, NotificationRef } from '../models';\n\nexport function toNotificationCollection(): OperatorFunction<NotificationRef[], NotificationCollection> {\n return (source$) =>\n source$.pipe(\n map((notificationRefs) => ({\n values: notificationRefs,\n count: notificationRefs.length,\n isEmpty: notificationRefs.length === 0,\n })),\n );\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { createConfigTokens, orderBy } from '@odx/angular/utils';\nimport { NotificationAction, NotificationFeature, NotificationOptions, NotificationRef, NotificationSortFn } from './models';\n\nexport interface NotificationConfig {\n defaultIdPrefix: string;\n options: NotificationOptions;\n sortFn: NotificationSortFn;\n tagToIconMap?: Record<string, string>;\n actionMap?: Record<string, NotificationAction>;\n}\n\nexport const { NotificationConfig, NotificationDefaultConfig, injectNotificationConfig, provideNotificationConfig } = createConfigTokens(\n 'Notification',\n '@odx/angular/components/notification',\n {\n options: { icon: 'core::globe', tags: [], dismissable: true },\n sortFn: orderBy<NotificationRef>('createdAt', 'DESC'),\n defaultIdPrefix: 'odx-notifications',\n } as NotificationConfig,\n);\n\nexport function provideNotifications(config?: Partial<NotificationConfig>, ...features: NotificationFeature[]): EnvironmentProviders {\n return makeEnvironmentProviders([provideNotificationConfig(config ?? {}), features]);\n}\n","import { Logger } from '@odx/angular/internal';\n\nexport default new Logger('@odx/angular/components/notification');\n","import { InjectionToken } from '@angular/core';\nimport { Queue } from '@odx/angular/utils';\nimport { NotificationRef } from './models';\n\nexport const ODX_NOTIFICATION_QUEUE = new InjectionToken<Queue<NotificationRef>>('@odx/angular/component/notifications::Queue', {\n providedIn: 'root',\n factory: () => new Queue(),\n});\n","import { Injectable, Injector, inject, runInInjectionContext } from '@angular/core';\nimport { deepmerge } from '@odx/angular/internal';\nimport { LocalizationService } from '@odx/angular/localization';\nimport { getUniqueId, isFunction } from '@odx/angular/utils';\nimport { Observable, filter, map, shareReplay } from 'rxjs';\nimport { sortNotifications, toNotificationCollection } from './helpers';\nimport { Notification, NotificationCollection, NotificationOptions, NotificationQuery, NotificationRef, NotificationSortFn } from './models';\nimport { injectNotificationConfig } from './notification.config';\nimport logger from './notification.logger';\nimport { ODX_NOTIFICATION_QUEUE } from './notification.tokens';\n\n@Injectable({ providedIn: 'root' })\nexport class NotificationService {\n private readonly config = injectNotificationConfig();\n private readonly localizationService = inject(LocalizationService);\n private readonly queue = inject(ODX_NOTIFICATION_QUEUE);\n private readonly injector = inject(Injector);\n\n public readonly notifications$ = this.queue.value$.pipe(\n sortNotifications(this.config.sortFn),\n toNotificationCollection(),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n public readonly unseenNotifications$ = this.notifications$.pipe(\n map((collection) => collection.values.filter(({ hasBeenSeen }) => !hasBeenSeen)),\n toNotificationCollection(),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n public readonly onNotificationAdd$ = this.queue.onAdd$;\n public readonly onNotificationRemove$ = this.queue.onRemove$;\n public readonly onNotificationUpdate$ = this.queue.onUpdate$;\n public readonly onNotificationSeen$ = this.queue.onUpdate$.pipe(filter(({ hasBeenSeen }) => hasBeenSeen));\n\n /**\n * Fetches notifications filtered by a specified query and optionally sorted by a custom sort function.\n *\n * @param {NotificationQuery} query - A function or object to filter notifications.\n * @param {NotificationSortFn} [sortFn] - An optional sorting function to order the filtered notifications.\n * @returns {Observable<NotificationCollection>} An observable stream of the filtered (and optionally sorted) notification collection.\n * @example\n * // Fetch notifications with a specific tag, sorted by creation date\n * const sortedNotifications$ = notificationService.getNotificationsBy$(\n * notification => notification.tags.includes('important'),\n * (a, b) => b.createdAt - a.createdAt\n * );\n */\n public getNotificationsBy$(query: NotificationQuery, sortFn?: NotificationSortFn): Observable<NotificationCollection> {\n return this.queue.value$.pipe(\n map((notifications) => notifications.filter(query)),\n sortNotifications(sortFn),\n toNotificationCollection(),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n /**\n * Loads a list of notifications into the service.\n *\n * @param {NotificationRef[]} refs - An array of notification references to be loaded.\n * @example\n * // Load multiple notifications at once\n * notificationService.load([\n * { id: '1', item: { title: 'Notification 1' }, options: {dismissable: true, icon: 'plus', tags: ['important']}, hasBeenSeen: false, createdAt: Date.now() },\n * { id: '2', item: { title: 'Notification 2' }, options: {dismissable: true, icon: 'plus', tags: ['important']}, hasBeenSeen: false, createdAt: Date.now() }\n * ]);\n */\n public load(refs: NotificationRef[]): void {\n this.queue.addMany(refs);\n }\n\n /**\n * Creates a new notification and adds it to the notification queue.\n *\n * @param {Notification} item - The notification to create.\n * @param {Partial<NotificationOptions>} [options] - Optional settings for the notification.\n * @example\n * // Create a new notification with custom options\n * notificationService.create(\n * { title: 'New Notification' },\n * { dismissable: true, icon: 'plus', tags: ['important'] }\n * );\n */\n public create(item: Notification, options?: Partial<NotificationOptions>): void {\n this.queue.add({\n id: item.id ?? getUniqueId(this.config.defaultIdPrefix),\n createdAt: Date.now(),\n item,\n options: this.resolveOptions(options),\n hasBeenSeen: false,\n });\n }\n\n /**\n * Marks a specific notification as seen.\n *\n * @param {NotificationRef} notificationRef - The reference to the notification to mark as seen.\n * @example\n * // Mark a notification as seen by its reference\n * notificationService.markAsSeen(notificationRef);\n */\n public markAsSeen(notificationRef: NotificationRef): void {\n if (notificationRef.hasBeenSeen) return;\n this.queue.add({ ...notificationRef, hasBeenSeen: true });\n }\n\n /**\n * Marks all notifications that match a specific query as seen.\n *\n * @param {NotificationQuery} query - The query to match notifications to mark as seen.\n * @example\n * // Mark all notifications with a specific tag as seen\n * notificationService.markAsSeenBy(notification => notification.tags.includes('important'));\n */\n public markAsSeenBy(query: NotificationQuery): void {\n for (const notificationRef of this.queue.toArray().filter(query)) {\n this.markAsSeen(notificationRef);\n }\n }\n\n /**\n * Dismisses a specific notification.\n *\n * @param {NotificationRef} notificationRef - The reference to the notification to dismiss.\n * @example\n * // Dismiss a notification by its reference\n * notificationService.dismiss(notificationRef);\n */\n public dismiss(notificationRef: NotificationRef): void {\n if (!notificationRef.options.dismissable) return;\n this.queue.remove(notificationRef);\n }\n\n /**\n * Dismisses all notifications that match a specific query.\n *\n * @param {NotificationQuery} query - The query to match notifications to dismiss.\n * @example\n * // Dismiss all notifications with a specific tag\n * notificationService.dismissBy(notification => notification.tags.includes('expired'));\n */\n public dismissBy(query: NotificationQuery): void {\n for (const item of this.queue.toArray().filter(query)) {\n this.dismiss(item);\n }\n }\n\n /**\n * Dismisses all notifications.\n *\n * @example\n * // Dismiss all notifications\n * notificationService.dismissAll();\n */\n public dismissAll(): void {\n this.queue.clear();\n }\n\n /**\n * Executes the action associated with a specific notification.\n *\n * @param {NotificationRef} notificationRef - The reference to the notification whose action to execute.\n * @example\n * // Execute action for a notification\n * notificationService.executeAction(notificationRef);\n */\n public executeAction(notificationRef: NotificationRef): void {\n if (!notificationRef.options.action) return;\n const actionFn = this.config.actionMap?.[notificationRef.options.action];\n if (!isFunction(actionFn)) {\n logger.warn(`Cannot find action ${notificationRef.options.action} for notification reference: ${notificationRef}`);\n return;\n }\n runInInjectionContext(this.injector, () => actionFn(notificationRef));\n }\n\n private resolveOptions(options?: Partial<NotificationOptions>): NotificationOptions {\n return deepmerge(this.config.options, options ?? {}, {\n icon: options?.icon ?? this.config.tagToIconMap?.[options?.tags?.[0] ?? ''] ?? this.config.options.icon,\n language: options?.language ?? this.localizationService.getActiveLanguage(),\n }) as NotificationOptions;\n }\n}\n","import { Injectable, computed, inject, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { DynamicTextContent } from '@odx/angular/cdk/dynamic-view';\nimport { Observable, combineLatest, filter, isObservable, map, of, shareReplay, switchMap } from 'rxjs';\nimport { getNotificationsByTags, toNotificationCollection } from '../helpers';\nimport { NotificationRef, NotificationSortFn } from '../models';\nimport { NotificationService } from '../notification.service';\n\n/**\n * A service for managing the notification center. This service provides functionalities\n * to filter, sort, and manage actions on notifications.\n */\n@Injectable()\nexport class NotificationCenterService {\n private readonly currentTag = signal<string | null>(null);\n private readonly currentSortFn = signal<NotificationSortFn>(undefined);\n private readonly notificationService = inject(NotificationService);\n private readonly notificationQuery = computed(() => getNotificationsByTags(this.currentTag()));\n private readonly title = signal<DynamicTextContent | null>(null);\n\n public readonly title$ = toObservable(this.title).pipe(\n switchMap((title) => (isObservable(title) ? title : of(title))),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n public readonly notifications$ = combineLatest([toObservable(this.notificationQuery), toObservable(this.currentSortFn)]).pipe(\n switchMap(([query, sortFn]) => this.notificationService.getNotificationsBy$(query, sortFn)),\n );\n public readonly unseenNotifications$ = this.notifications$.pipe(\n map((collection) => collection.values.filter(({ hasBeenSeen }) => !hasBeenSeen)),\n toNotificationCollection(),\n );\n public onNotificationAdd$ = this.queryEvent(this.notificationService.onNotificationAdd$);\n public onNotificationUpdate$ = this.queryEvent(this.notificationService.onNotificationUpdate$);\n public onNotificationRemove$ = this.queryEvent(this.notificationService.onNotificationRemove$);\n public onNotificationSeen$ = this.queryEvent(this.notificationService.onNotificationSeen$);\n\n /**\n * Sets the title for the notification center. The title can be static text or an observable for dynamic content.\n *\n * @param {DynamicTextContent | null} [value] - The title content for the notification center.\n */\n public setTitle(value?: DynamicTextContent | null): void {\n this.title.set(value ?? null);\n }\n\n /**\n * Sets the current tag to filter notifications. Only notifications with this tag will be included.\n *\n * @param {string | null} [value] - The tag to filter notifications by.\n */\n public setTag(value?: string | null): void {\n this.currentTag.set(value ?? null);\n }\n\n /**\n * Sets the sort function used to order the notifications.\n *\n * @param {NotificationSortFn} [value] - The sort function to apply to the notifications.\n */\n public setSortFn(value?: NotificationSortFn): void {\n this.currentSortFn.set(value);\n }\n\n /**\n * Marks a given notification as seen. This does not remove the notification but updates its seen status.\n *\n * @param {NotificationRef} notificationRef - The reference to the notification to be marked as seen.\n */\n public markAsSeen(notificationRef: NotificationRef): void {\n this.notificationService.markAsSeen(notificationRef);\n }\n\n /**\n * Marks all current filtered notifications as seen.\n */\n public markAllAsSeen(): void {\n this.notificationService.markAsSeenBy(this.notificationQuery());\n }\n\n /**\n * Dismisses a specific notification.\n *\n * @param {NotificationRef} notificationRef - The reference to the notification to dismiss.\n */\n public dismiss(notificationRef: NotificationRef): void {\n this.notificationService.dismiss(notificationRef);\n }\n\n /**\n * Dismisses all notifications that match the current filter criteria.\n */\n public dismissAll(): void {\n this.notificationService.dismissBy(this.notificationQuery());\n }\n\n /**\n * Executes the action associated with a specific notification and marks it as seen.\n *\n * @param {NotificationRef} notificationRef - The reference to the notification whose action to execute.\n */\n public executeAction(notificationRef: NotificationRef): void {\n this.markAsSeen(notificationRef);\n this.notificationService.executeAction(notificationRef);\n }\n\n private queryEvent(source$: Observable<NotificationRef>): Observable<NotificationRef> {\n return combineLatest([source$, toObservable(this.notificationQuery)]).pipe(\n filter(([notificationRef, query]) => query(notificationRef)),\n map(([notificationRef]) => notificationRef),\n );\n }\n}\n","import { EnvironmentProviders, Provider } from '@angular/core';\n\nexport type NotificationFeature = EnvironmentProviders & { ɵodxBrand: '@odx/angular/components/notification::NotificationFeature' };\n\nexport function makeNotificationFeature(provider: (Provider | NotificationFeature)[] | EnvironmentProviders): NotificationFeature {\n return provider as never as NotificationFeature;\n}\n","import { ENVIRONMENT_INITIALIZER, inject } from '@angular/core';\nimport { Observable, from, isObservable, of } from 'rxjs';\nimport { NotificationFeature, NotificationRef, makeNotificationFeature } from '../models';\nimport { NotificationService } from '../notification.service';\n\n/**\n * Type definition for a function that loads notifications.\n * Can return notifications directly as an array, as a Promise, or as an Observable.\n * @typedef {Function} LoadNotificationsFn\n * @returns {Observable<NotificationRef[]> | Promise<NotificationRef[]> | NotificationRef[]} The loaded notifications.\n */\nexport type LoadNotificationsFn = () => Observable<NotificationRef[]> | Promise<NotificationRef[]> | NotificationRef[];\n\n/**\n * Loads notifications using the provided `loadFn`. This function abstracts over the differences\n * between synchronous notifications, promises, and observables, providing a uniform Observable output.\n * @function loadNotifications\n * @param {LoadNotificationsFn} [loadFn] - An optional function to load notifications.\n * @returns {Observable<NotificationRef[]>} An Observable stream of notification references.\n */\nfunction loadNotifications(loadFn?: LoadNotificationsFn): Observable<NotificationRef[]> {\n const notifications = loadFn?.();\n if (isObservable(notifications)) {\n return notifications;\n }\n if (notifications instanceof Promise) {\n return from(notifications);\n }\n return of(notifications ?? []);\n}\n\n/**\n * Integrates notification loading into the application environment. This function uses the Angular\n * `ENVIRONMENT_INITIALIZER` to ensure that notifications are loaded as part of the application's\n * initialization process.\n * @function withLoadNotifications\n * @param {LoadNotificationsFn} loadFn - The function to load notifications.\n * @returns {NotificationFeature} A notification feature configured to load notifications at startup.\n */\nexport function withLoadNotifications(loadFn: LoadNotificationsFn): NotificationFeature {\n return makeNotificationFeature([\n {\n provide: ENVIRONMENT_INITIALIZER,\n useFactory: () => {\n const notificationService = inject(NotificationService);\n const notifications$ = loadNotifications(loadFn);\n\n return () => {\n notifications$.subscribe((notificationRefs) => notificationService.load(notificationRefs));\n };\n },\n multi: true,\n },\n ]);\n}\n","import { ENVIRONMENT_INITIALIZER, Injector, inject, runInInjectionContext } from '@angular/core';\nimport { Observable, firstValueFrom, isObservable } from 'rxjs';\nimport { NotificationFeature, NotificationRef, makeNotificationFeature } from '../models';\nimport { NotificationService } from '../notification.service';\n\nexport type SaveNotificationsFn = (notificationRefs: NotificationRef[]) => Observable<void> | Promise<void> | void;\n\n/**\n * Asynchronously saves notifications using the provided save function. It handles Observable and Promise results seamlessly.\n * @async\n * @function saveNotifications\n * @param {NotificationRef[]} notifications - The notifications to be saved.\n * @param {SaveNotificationsFn} [saveFn] - Optional custom save function.\n * @returns {Promise<void>} A promise that resolves when the save operation is complete.\n */\nasync function saveNotifications(notifications: NotificationRef[], saveFn?: SaveNotificationsFn): Promise<void> {\n const save = saveFn?.(notifications);\n if (isObservable(save)) {\n await firstValueFrom(save);\n } else if (save instanceof Promise) {\n await save;\n }\n}\n\n/**\n * Configures the application to automatically save notifications using a specified save function.\n * This setup integrates with Angular's environment initialization process to ensure notifications are saved as needed.\n * @function withSaveNotifications\n * @param {SaveNotificationsFn} saveFn - The function to save notifications.\n * @returns {NotificationFeature} A notification feature configured to automatically save notifications.\n */\nexport function withSaveNotifications(saveFn: SaveNotificationsFn): NotificationFeature {\n return makeNotificationFeature([\n {\n provide: ENVIRONMENT_INITIALIZER,\n useFactory: () => {\n const injector = Injector.create({ parent: inject(Injector), providers: [] });\n const notificationService = inject(NotificationService);\n const saveFnWithContext: SaveNotificationsFn = (notifications) => runInInjectionContext(injector, () => saveFn(notifications));\n\n return () => {\n notificationService.notifications$.subscribe(({ values }) => saveNotifications(values, saveFnWithContext));\n };\n },\n multi: true,\n },\n ]);\n}\n","import { DynamicTextContent } from '@odx/angular/cdk/dynamic-view';\nimport { deepmerge } from '@odx/angular/internal';\nimport { isFunction, isString } from '@odx/angular/utils';\nimport { firstValueFrom } from 'rxjs';\nimport { NotificationFeature, NotificationRef, makeNotificationFeature } from '../models';\nimport { LoadNotificationsFn, withLoadNotifications } from './with-load-notifications';\nimport { SaveNotificationsFn, withSaveNotifications } from './with-save-notifications';\n\nexport interface NotificationSerializer {\n serialize(value: NotificationRef[]): Promise<string>;\n deserialize(value: string): Promise<NotificationRef[]>;\n}\n\n/**\n * Implementation of NotificationSerializer for persistent storage.\n * @class PersistentNotificationSerializer\n * @implements {NotificationSerializer}\n */\nexport class PersistentNotificationSerializer implements NotificationSerializer {\n /**\n * Serializes an array of NotificationRef objects into a string.\n * @function serialize\n * @memberof NotificationSerializer\n * @param {NotificationRef[]} value - The notification references to serialize.\n * @returns {Promise<string>} A promise that resolves to the serialized string representation of notification references.\n */\n public async serialize(value: NotificationRef[]): Promise<string> {\n const serializedNotifications = await Promise.all(\n value.map(async (ref) =>\n deepmerge(ref, {\n item: {\n title: await this.serializeDynamicTextContent(ref.item.title),\n description: await this.serializeDynamicTextContent(ref.item.description),\n },\n }),\n ),\n );\n\n return JSON.stringify(serializedNotifications);\n }\n\n /**\n * Deserializes a string into an array of NotificationRef objects.\n * @function deserialize\n * @memberof NotificationSerializer\n * @param {string} value - The string representation of notification references to deserialize.\n * @returns {Promise<NotificationRef[]>} A promise that resolves to the deserialized notification references.\n */\n public async deserialize(value: string): Promise<NotificationRef[]> {\n return JSON.parse(value);\n }\n\n private async serializeDynamicTextContent(content?: DynamicTextContent): Promise<string> {\n if (!content) return '';\n if (isString(content)) return content;\n\n return firstValueFrom(content).catch(() => '');\n }\n}\n\nexport interface WithPersistentNotificationsStorageOptions {\n storageKey: string;\n storage: Storage;\n serializer: NotificationSerializer;\n idTransformer?: (notificationRef: NotificationRef) => string;\n}\n\nexport interface WithPersistentNotificationsOptions {\n initFn: LoadNotificationsFn;\n saveFn: SaveNotificationsFn;\n storageOptions: WithPersistentNotificationsStorageOptions;\n}\n\n/**\n * Initializes and returns a function for loading persistent notifications.\n * @function initPersistentNotifications\n * @param {WithPersistentNotificationsStorageOptions} options - The storage options including serializer and storage key.\n * @returns {LoadNotificationsFn} A function to load notifications from storage.\n */\nexport function initPersistentNotifications({\n storage,\n storageKey,\n serializer,\n idTransformer,\n}: WithPersistentNotificationsStorageOptions): LoadNotificationsFn {\n return async () => {\n const storedValue = storage.getItem(storageKey);\n if (!storedValue) return [];\n const notificationRefs = await serializer.deserialize(storedValue);\n\n if (isFunction(idTransformer)) {\n for (const notificationRef of notificationRefs) {\n notificationRef.item.id = notificationRef.id = idTransformer(notificationRef);\n }\n }\n\n return notificationRefs;\n };\n}\n\n/**\n * Returns a function for persisting notifications.\n * @function persistNotifications\n * @param {WithPersistentNotificationsStorageOptions} options - The storage options including serializer and storage key.\n * @returns {SaveNotificationsFn} A function to save notifications to storage.\n */\nexport function persistNotifications({ storage, storageKey, serializer }: WithPersistentNotificationsStorageOptions): SaveNotificationsFn {\n return async (notificationRefs: NotificationRef[]) => {\n storage.setItem(storageKey, await serializer.serialize(notificationRefs));\n };\n}\n\n/**\n * Configures the application to use persistent notifications, automatically loading from and saving to the configured storage.\n * @function withPersistentNotifications\n * @param {Partial<WithPersistentNotificationsOptions>} [options] - Optional configuration for persistent notifications.\n * @returns {NotificationFeature} A notification feature configured for persistence.\n */\nexport function withPersistentNotifications(options?: Partial<WithPersistentNotificationsOptions>): NotificationFeature {\n const storageOptions: WithPersistentNotificationsStorageOptions = {\n storageKey: options?.storageOptions?.storageKey ?? '@odx/angular/components/notification::Storage',\n storage: options?.storageOptions?.storage ?? localStorage,\n serializer: options?.storageOptions?.serializer ?? new PersistentNotificationSerializer(),\n };\n const initFn = options?.initFn ?? initPersistentNotifications(storageOptions);\n const saveFn = options?.saveFn ?? persistNotifications(storageOptions);\n\n return makeNotificationFeature([withLoadNotifications(initFn), withSaveNotifications(saveFn)]);\n}\n","import { ENVIRONMENT_INITIALIZER, inject } from '@angular/core';\nimport { NotificationFeature, NotificationRef, makeNotificationFeature } from '../models';\nimport { NotificationService } from '../notification.service';\nimport { NotificationSerializer, PersistentNotificationSerializer } from './with-peristent-notifications';\n\nexport type BrowserNotificationExtras = Omit<NotificationOptions, 'body' | 'timestamp'>;\nexport type BrowserNotification = Notification;\nexport type BrowserNotificationFactory = (notificationRef: NotificationRef) => BrowserNotification;\nexport type SendBrowserNotificationFn = (notificationRef: NotificationRef) => unknown;\n\nexport interface WithBrowserNotificationsOptions {\n sendFn?: SendBrowserNotificationFn;\n extras?: BrowserNotificationExtras;\n isEnabled?: boolean;\n}\n\n/**\n * Requests permission to display browser notifications and returns a boolean indicating whether permission was granted.\n * @async\n * @function requestBrowserNotificationPermissions\n * @returns {Promise<boolean>} A promise that resolves to `true` if permission is granted, otherwise `false`.\n */\nasync function requestBrowserNotificationPermissions(): Promise<boolean> {\n if (!('Notification' in window)) return false;\n if (Notification.permission === 'granted') return true;\n if (Notification.permission === 'denied') return false;\n const permission = await Notification.requestPermission();\n\n return permission === 'granted';\n}\n\n/**\n * Creates a function responsible for sending out browser notifications with the given options.\n * @function sendBrowserNotification\n * @param {NotificationSerializer} serializer - The serializer to use for notification data.\n * @param {BrowserNotificationExtras} [options] - Additional options for the browser notification.\n * @returns {SendBrowserNotificationFn} A function to send browser notifications.\n */\nfunction sendBrowserNotification(serializer: NotificationSerializer, options?: BrowserNotificationExtras): SendBrowserNotificationFn {\n return async (notificationRef) => {\n if (!('Notification' in window)) return;\n const [notificationObj] = await serializer.deserialize(await serializer.serialize([notificationRef]));\n if (!notificationObj || notificationObj.hasBeenSeen) return;\n const { createdAt, item } = notificationObj;\n new Notification(item.title as string, {\n tag: notificationRef.options.tags?.[0],\n lang: notificationRef.options.language,\n ...options,\n body: item.description as string,\n timestamp: createdAt,\n });\n };\n}\n\n/**\n * Configures the application to send browser notifications, using Angular's `ENVIRONMENT_INITIALIZER` for setup.\n * @function withBrowserNotifications\n * @param {WithBrowserNotificationsOptions} [options] - Optional configuration for browser notifications.\n * @returns {NotificationFeature} A notification feature for integration into the application environment.\n */\nexport function withBrowserNotifications(options?: WithBrowserNotificationsOptions): NotificationFeature {\n return makeNotificationFeature([\n {\n provide: ENVIRONMENT_INITIALIZER,\n useFactory: () => {\n const isEnabled = options?.isEnabled ?? true;\n if (!isEnabled) return () => void 0;\n const notificationService = inject(NotificationService);\n const serializer = new PersistentNotificationSerializer();\n const sendBrowserNotificationFn = options?.sendFn ?? sendBrowserNotification(serializer, options?.extras);\n\n return async () => {\n if (!isEnabled) return;\n const permissionsGranted = await requestBrowserNotificationPermissions();\n if (!permissionsGranted) return;\n notificationService.onNotificationAdd$.subscribe(sendBrowserNotificationFn);\n };\n },\n multi: true,\n },\n ]);\n}\n","import { InjectionToken, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { NotificationFeature, NotificationRef, makeNotificationFeature } from '../models';\n\nexport type NotificationTransformFn = (ref: NotificationRef) => Observable<NotificationRef>;\n\n/**\n * An InjectionToken for the NotificationTransformFn. This token can be used to inject\n * a custom notification transformation function into the Angular DI system.\n * @type {InjectionToken<NotificationTransformFn>}\n */\nexport const ODX_NOTIFICATION_TRANSFORMER = new InjectionToken<NotificationTransformFn>('@odx/angular/components/notification::NotificationTransformer');\n\n/**\n * Attempts to inject a NotificationTransformFn from the Angular DI system.\n * If no provider is found, it returns null.\n * @function injectNotificationTransform\n * @returns {NotificationTransformFn | null} The injected NotificationTransformFn, or null if not provided.\n */\nexport function injectNotificationTransform(): NotificationTransformFn | null {\n return inject(ODX_NOTIFICATION_TRANSFORMER, { optional: true });\n}\n\n/**\n * Configures a notification transformation function to be used within the application.\n * This function provides a mechanism to globally apply transformations to notifications\n * before they are processed or displayed.\n * @function withNotificationTransform\n * @param {NotificationTransformFn} transformFn - The function to transform notifications.\n * @returns {NotificationFeature} A NotificationFeature configured with the provided transformation function.\n */\nexport function withNotificationTransform(transformFn: NotificationTransformFn): NotificationFeature {\n return makeNotificationFeature([\n {\n provide: ODX_NOTIFICATION_TRANSFORMER,\n useValue: transformFn,\n },\n ]);\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';\nimport { ActionGroupComponent } from '@odx/angular/components/action-group';\nimport { AvatarComponent } from '@odx/angular/components/avatar';\nimport { ButtonComponent } from '@odx/angular/components/button';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\nimport { Observable, of } from 'rxjs';\nimport { injectNotificationTransform } from '../../features';\nimport { NotificationRef } from '../../models';\n\n/**\n * A component for displaying notifications.\n * Supports customization through dynamic transformation of notification data.\n * Utilizes the OnPush change detection strategy for better performance in large applications.\n *\n * @component\n */\n@CSSComponent('notification-item')\n@Component({\n selector: 'odx-notification-item',\n standalone: true,\n imports: [AvatarComponent, ActionGroupComponent, ButtonComponent, CommonModule, DynamicViewDirective, IconComponent],\n templateUrl: './notification-item.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NotificationItemComponent {\n private readonly transformNotification = injectNotificationTransform();\n private _notificationRef!: NotificationRef;\n\n protected transformedNotification!: Observable<NotificationRef>;\n\n public readonly element = injectElement();\n\n /**\n * Input property to set the notification. On setting, it transforms the notification for display.\n * This transformation can be a custom logic provided through dependency injection.\n *\n * @param value NotificationRef - The notification object to be displayed.\n */\n @Input({ required: true })\n public set notification(value: NotificationRef) {\n this._notificationRef = value;\n this.transformedNotification = this.transformNotification?.(value) ?? of(value);\n }\n\n /**\n * Getter for the notification property.\n *\n * @returns NotificationRef - The current notification reference stored in the component.\n */\n public get notification() {\n return this._notificationRef;\n }\n\n /**\n * An event emitter for dismissing the notification.\n * It emits the notification reference that was dismissed.\n */\n @Output()\n public dismiss = new EventEmitter<NotificationRef>();\n}\n","<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","import { transition, trigger, useAnimation } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, OnDestroy, ViewEncapsulation, inject } from '@angular/core';\nimport { LetDirective } from '@ngrx/component';\nimport { collapse } from '@odx/angular/animations';\nimport { InteractiveDirective } from '@odx/angular/cdk/a11y';\nimport { DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';\nimport { ActionGroupComponent } from '@odx/angular/components/action-group';\nimport { BadgeDirective } from '@odx/angular/components/badge';\nimport { ButtonComponent } from '@odx/angular/components/button';\nimport { DropdownModule } from '@odx/angular/components/dropdown';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { ListModule } from '@odx/angular/components/list';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { TranslatePipe, provideTranslations } from '@odx/angular/internal/translate';\nimport { injectElement, trackById } from '@odx/angular/utils';\nimport { NotificationRef } from '../../models';\nimport notificationI18n from '../../notification.i18n';\nimport { NotificationCenterService } from '../../services';\nimport { NotificationItemComponent } from '../notification-item/notification-item.component';\n\n/**\n * 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.\n *\n * @CSSComponent 'notification-center' - Specifies the CSS class for styling the notification center component.\n */\n@CSSComponent('notification-center')\n@Component({\n selector: 'odx-notification-center',\n standalone: true,\n imports: [\n CommonModule,\n LetDirective,\n ActionGroupComponent,\n BadgeDirective,\n ButtonComponent,\n DynamicViewDirective,\n IconComponent,\n DropdownModule,\n TranslatePipe,\n NotificationItemComponent,\n InteractiveDirective,\n ListModule,\n ],\n templateUrl: './notification-center.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [provideTranslations(notificationI18n)],\n animations: [trigger('notificationAnimation', [transition(':leave', useAnimation(collapse, { delay: 150 }))])],\n})\nexport class NotificationCenterComponent implements OnDestroy {\n protected readonly notificationCenterService = inject(NotificationCenterService);\n protected readonly trackById = trackById;\n\n public readonly element = injectElement();\n\n public ngOnDestroy(): void {\n this.notificationCenterService.markAllAsSeen();\n }\n\n protected isMuted({ options, hasBeenSeen }: NotificationRef): boolean {\n return hasBeenSeen && !options.action;\n }\n}\n","<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","import { AfterViewInit, DestroyRef, Directive, Input, OnInit, Output, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DisabledController } from '@odx/angular';\nimport { DynamicTextContent } from '@odx/angular/cdk/dynamic-view';\nimport { BadgeDirective } from '@odx/angular/components/badge';\nimport { DropdownDirective } from '@odx/angular/components/dropdown';\nimport { Position } from '@odx/angular/utils';\nimport { Observable, map, merge, startWith, switchMap, tap } from 'rxjs';\nimport { NotificationCenterComponent } from '../components';\nimport { NotificationSortFn } from '../models';\nimport { NotificationCenterService } from '../services';\n\n/**\n * A directive that provides an interface for managing notifications.\n * It allows configuring a notification center with dynamic content, sorting, and badge display functionalities.\n */\n@Directive({\n standalone: true,\n selector: '[odxNotificationCenter]',\n hostDirectives: [{ directive: BadgeDirective, inputs: ['odxBadgeVariant:odxNotificationCenterBadgeVariant'] }, DropdownDirective],\n providers: [NotificationCenterService],\n})\nexport class NotificationCenterDirective implements OnInit, AfterViewInit {\n private readonly badgeDirective = inject(BadgeDirective, { self: true });\n private readonly destroyRef = inject(DestroyRef);\n private readonly disabledController = DisabledController.inject();\n private readonly dropdownDirective = inject(DropdownDirective, { self: true });\n private readonly notificationCenterService = inject(NotificationCenterService, { self: true });\n private readonly dropdownStateChange$ = merge(this.dropdownDirective.beforeOpen, this.dropdownDirective.beforeClose).pipe(startWith(void 0));\n private readonly badgeValue$ = this.notificationCenterService.unseenNotifications$.pipe(\n switchMap(({ count }) => this.dropdownStateChange$.pipe(map(() => this.formatBadgeValue(count)))),\n );\n\n /**\n * Sets the tag for filtering notifications. Only notifications with this tag will be shown in the notification center.\n * @param value The tag value to filter notifications. If null, all notifications are shown.\n */\n @Input('odxNotificationCenter')\n public set tag(value: string | null) {\n this.notificationCenterService.setTag(value);\n }\n\n /**\n * Sets the title of the notification center. The title can be dynamic and change based on the application state.\n * @param value The title content, which can be a string or an Observable returning a string. Allows for dynamic titles.\n */\n @Input('odxNotificationCenterTitle')\n public set title(value: DynamicTextContent | null) {\n this.notificationCenterService.setTitle(value);\n }\n\n /**\n * Sets the sorting function used to order notifications within the notification center.\n * @param value A function that compares two notifications and returns the sort order.\n *\n * @example\n * sortFfn = (a: NotificationRef, b: NotificationRef) => {\n if (a.createdAt < b.createdAt) return -1;\n if (a.createdAt > b.createdAt) return 1;\n return 0;\n };\n */\n @Input('odxNotificationCenterSortFn')\n public set sortFn(value: NotificationSortFn) {\n this.notificationCenterService.setSortFn(value);\n }\n\n /**\n * An event that is emitted when a new notification is added.\n * Listeners can use this event to react to new notifications being added to the notification center.\n */\n // eslint-disable-next-line @angular-eslint/no-output-rename\n @Output('odxNotificationCenterAdd')\n public notificationAdd = this.notificationCenterService.onNotificationAdd$;\n\n /**\n * An event that is emitted when a notification is updated.\n * This can be used to react to changes in notifications, such as their read status or content updates.\n */\n // eslint-disable-next-line @angular-eslint/no-output-rename\n @Output('odxNotificationCenterUpdate')\n public notificationUpdate = this.notificationCenterService.onNotificationUpdate$;\n\n /**\n * An event that is emitted when a notification is removed from the notification center.\n * Use this event to handle the removal of notifications, such as cleaning up resources or updating UI elements.\n */\n // eslint-disable-next-line @angular-eslint/no-output-rename\n @Output('odxNotificationCenterRemove')\n public notificationRemove = this.notificationCenterService.onNotificationRemove$;\n\n /**\n * An event that is emitted when a notification is marked as seen.\n * This event can be used to perform actions when the user acknowledges a notification.\n */\n // eslint-disable-next-line @angular-eslint/no-output-rename\n @Output('odxNotificationCenterSeen')\n public notificationSeen = this.notificationCenterService.onNotificationSeen$;\n\n public ngOnInit() {\n this.badgeDirective.position = Position.BOTTOM;\n this.badgeDirective.offset = 6;\n\n this.dropdownDirective.content = NotificationCenterComponent;\n this.dropdownDirective.options = {\n containerClass: 'odx-notification-center-overlay',\n position: Position.BOTTOM_END,\n enableFallback: false,\n };\n }\n\n public ngAfterViewInit() {\n merge(this.handleBadgeUpdates(), this.handleDropdownUpdates()).pipe(takeUntilDestroyed(this.destroyRef)).subscribe();\n }\n\n private formatBadgeValue(value: number): string | null {\n return this.dropdownDirective.isOpen || value === 0 ? null : value.toFixed(0);\n }\n\n private handleBadgeUpdates(): Observable<unknown> {\n return this.badgeValue$.pipe(\n tap((value: DynamicTextContent | null) => {\n this.badgeDirective.value = value as DynamicTextContent;\n this.badgeDirective.ngOnChanges();\n }),\n );\n }\n\n private handleDropdownUpdates(): Observable<unknown> {\n return this.notificationCenterService.notifications$.pipe(\n tap(({ isEmpty }) => {\n this.disabledController?.setDisabledState(isEmpty);\n if (!isEmpty) return;\n this.dropdownDirective.close();\n }),\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"odx-angular-components-notification.mjs","sources":["../../../../libs/angular/components/notification/src/lib/notification.i18n.ts","../../../../libs/angular/components/notification/src/lib/helpers/get-notifications-by-tag.ts","../../../../libs/angular/components/notification/src/lib/helpers/sort-notifications.ts","../../../../libs/angular/components/notification/src/lib/helpers/to-notification-collection.ts","../../../../libs/angular/components/notification/src/lib/notification.config.ts","../../../../libs/angular/components/notification/src/lib/notification.logger.ts","../../../../libs/angular/components/notification/src/lib/notification.tokens.ts","../../../../libs/angular/components/notification/src/lib/notification.service.ts","../../../../libs/angular/components/notification/src/lib/services/notification-center.service.ts","../../../../libs/angular/components/notification/src/lib/models/notification-feature.ts","../../../../libs/angular/components/notification/src/lib/features/with-load-notifications.ts","../../../../libs/angular/components/notification/src/lib/features/with-save-notifications.ts","../../../../libs/angular/components/notification/src/lib/features/with-peristent-notifications.ts","../../../../libs/angular/components/notification/src/lib/features/with-browser-notifications.ts","../../../../libs/angular/components/notification/src/lib/features/with-notification-transformer.ts","../../../../libs/angular/components/notification/src/lib/components/notification-item/notification-item.component.ts","../../../../libs/angular/components/notification/src/lib/components/notification-item/notification-item.component.html","../../../../libs/angular/components/notification/src/lib/components/notification-center/notification-center.component.ts","../../../../libs/angular/components/notification/src/lib/components/notification-center/notification-center.component.html","../../../../libs/angular/components/notification/src/lib/directives/notification-center.directive.ts","../../../../libs/angular/components/notification/src/odx-angular-components-notification.ts"],"sourcesContent":["import { TranslationObject } from '@odx/angular/internal/translate';\n\nexport default {\n en: {\n title: 'Notifications',\n dismissAll: 'Dismiss all',\n },\n de: {\n title: 'Benachrichtigungen',\n dismissAll: 'Alle entfernen',\n },\n} as TranslationObject;\n","import { NotificationQuery } from '../models';\n\nexport function getNotificationsByTags(...tags: Array<string | null | undefined>): NotificationQuery {\n const cachedTags = new Set(tags.filter(Boolean));\n\n return ({ options }) => {\n return cachedTags.size < 1 || options.tags.every((tag) => cachedTags.has(tag));\n };\n}\n","import { isFunction } from '@odx/angular/utils';\nimport { MonoTypeOperatorFunction, tap } from 'rxjs';\nimport { NotificationRef, NotificationSortFn } from '../models';\n\nexport function sortNotifications(sortFn?: NotificationSortFn): MonoTypeOperatorFunction<NotificationRef[]> {\n return (source$) =>\n source$.pipe(\n tap((values) => {\n if (!isFunction(sortFn)) return;\n values.sort(sortFn);\n }),\n );\n}\n","import { OperatorFunction, map } from 'rxjs';\nimport { NotificationCollection, NotificationRef } from '../models';\n\nexport function toNotificationCollection(): OperatorFunction<NotificationRef[], NotificationCollection> {\n return (source$) =>\n source$.pipe(\n map((notificationRefs) => ({\n values: notificationRefs,\n count: notificationRefs.length,\n isEmpty: notificationRefs.length === 0,\n })),\n );\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { createConfigTokens, orderBy } from '@odx/angular/utils';\nimport { NotificationAction, NotificationFeature, NotificationOptions, NotificationRef, NotificationSortFn } from './models';\n\nexport interface NotificationConfig {\n defaultIdPrefix: string;\n options: NotificationOptions;\n sortFn: NotificationSortFn;\n tagToIconMap?: Record<string, string>;\n actionMap?: Record<string, NotificationAction>;\n}\n\nexport const { NotificationConfig, NotificationDefaultConfig, injectNotificationConfig, provideNotificationConfig } = createConfigTokens(\n 'Notification',\n '@odx/angular/components/notification',\n {\n options: { icon: 'core::globe', tags: [], dismissable: true },\n sortFn: orderBy<NotificationRef>('createdAt', 'DESC'),\n defaultIdPrefix: 'odx-notifications',\n } as NotificationConfig,\n);\n\nexport function provideNotifications(config?: Partial<NotificationConfig>, ...features: NotificationFeature[]): EnvironmentProviders {\n return makeEnvironmentProviders([provideNotificationConfig(config ?? {}), features]);\n}\n","import { Logger } from '@odx/angular/internal';\n\nexport default new Logger('@odx/angular/components/notification');\n","import { InjectionToken } from '@angular/core';\nimport { Queue } from '@odx/angular/utils';\nimport { NotificationRef } from './models';\n\nexport const ODX_NOTIFICATION_QUEUE = new InjectionToken<Queue<NotificationRef>>('@odx/angular/component/notifications::Queue', {\n providedIn: 'root',\n factory: () => new Queue(),\n});\n","import { Injectable, Injector, inject, runInInjectionContext } from '@angular/core';\nimport { deepmerge } from '@odx/angular/internal';\nimport { LocalizationService } from '@odx/angular/localization';\nimport { getUniqueId, isFunction } from '@odx/angular/utils';\nimport { Observable, filter, map, shareReplay } from 'rxjs';\nimport { sortNotifications, toNotificationCollection } from './helpers';\nimport { Notification, NotificationCollection, NotificationOptions, NotificationQuery, NotificationRef, NotificationSortFn } from './models';\nimport { injectNotificationConfig } from './notification.config';\nimport logger from './notification.logger';\nimport { ODX_NOTIFICATION_QUEUE } from './notification.tokens';\n\n@Injectable({ providedIn: 'root' })\nexport class NotificationService {\n private readonly config = injectNotificationConfig();\n private readonly localizationService = inject(LocalizationService);\n private readonly queue = inject(ODX_NOTIFICATION_QUEUE);\n private readonly injector = inject(Injector);\n\n public readonly notifications$ = this.queue.value$.pipe(\n sortNotifications(this.config.sortFn),\n toNotificationCollection(),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n public readonly unseenNotifications$ = this.notifications$.pipe(\n map((collection) => collection.values.filter(({ hasBeenSeen }) => !hasBeenSeen)),\n toNotificationCollection(),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n public readonly onNotificationAdd$ = this.queue.onAdd$;\n public readonly onNotificationRemove$ = this.queue.onRemove$;\n public readonly onNotificationUpdate$ = this.queue.onUpdate$;\n public readonly onNotificationSeen$ = this.queue.onUpdate$.pipe(filter(({ hasBeenSeen }) => hasBeenSeen));\n\n /**\n * Fetches notifications filtered by a specified query and optionally sorted by a custom sort function.\n *\n * @param {NotificationQuery} query - A function or object to filter notifications.\n * @param {NotificationSortFn} [sortFn] - An optional sorting function to order the filtered notifications.\n * @returns {Observable<NotificationCollection>} An observable stream of the filtered (and optionally sorted) notification collection.\n * @example\n * // Fetch notifications with a specific tag, sorted by creation date\n * const sortedNotifications$ = notificationService.getNotificationsBy$(\n * notification => notification.tags.includes('important'),\n * (a, b) => b.createdAt - a.createdAt\n * );\n */\n public getNotificationsBy$(query: NotificationQuery, sortFn?: NotificationSortFn): Observable<NotificationCollection> {\n return this.queue.value$.pipe(\n map((notifications) => notifications.filter(query)),\n sortNotifications(sortFn),\n toNotificationCollection(),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n /**\n * Loads a list of notifications into the service.\n *\n * @param {NotificationRef[]} refs - An array of notification references to be loaded.\n * @example\n * // Load multiple notifications at once\n * notificationService.load([\n * { id: '1', item: { title: 'Notification 1' }, options: {dismissable: true, icon: 'plus', tags: ['important']}, hasBeenSeen: false, createdAt: Date.now() },\n * { id: '2', item: { title: 'Notification 2' }, options: {dismissable: true, icon: 'plus', tags: ['important']}, hasBeenSeen: false, createdAt: Date.now() }\n * ]);\n */\n public load(refs: NotificationRef[]): void {\n this.queue.addMany(refs);\n }\n\n /**\n * Creates a new notification and adds it to the notification queue.\n *\n * @param {Notification} item - The notification to create.\n * @param {Partial<NotificationOptions>} [options] - Optional settings for the notification.\n * @example\n * // Create a new notification with custom options\n * notificationService.create(\n * { title: 'New Notification' },\n * { dismissable: true, icon: 'plus', tags: ['important'] }\n * );\n */\n public create(item: Notification, options?: Partial<NotificationOptions>): void {\n this.queue.add({\n id: item.id ?? getUniqueId(this.config.defaultIdPrefix),\n createdAt: Date.now(),\n item,\n options: this.resolveOptions(options),\n hasBeenSeen: false,\n });\n }\n\n /**\n * Marks a specific notification as seen.\n *\n * @param {NotificationRef} notificationRef - The reference to the notification to mark as seen.\n * @example\n * // Mark a notification as seen by its reference\n * notificationService.markAsSeen(notificationRef);\n */\n public markAsSeen(notificationRef: NotificationRef): void {\n if (notificationRef.hasBeenSeen) return;\n this.queue.add({ ...notificationRef, hasBeenSeen: true });\n }\n\n /**\n * Marks all notifications that match a specific query as seen.\n *\n * @param {NotificationQuery} query - The query to match notifications to mark as seen.\n * @example\n * // Mark all notifications with a specific tag as seen\n * notificationService.markAsSeenBy(notification => notification.tags.includes('important'));\n */\n public markAsSeenBy(query: NotificationQuery): void {\n for (const notificationRef of this.queue.toArray().filter(query)) {\n this.markAsSeen(notificationRef);\n }\n }\n\n /**\n * Dismisses a specific notification.\n *\n * @param {NotificationRef} notificationRef - The reference to the notification to dismiss.\n * @example\n * // Dismiss a notification by its reference\n * notificationService.dismiss(notificationRef);\n */\n public dismiss(notificationRef: NotificationRef): void {\n if (!notificationRef.options.dismissable) return;\n this.queue.remove(notificationRef);\n }\n\n /**\n * Dismisses all notifications that match a specific query.\n *\n * @param {NotificationQuery} query - The query to match notifications to dismiss.\n * @example\n * // Dismiss all notifications with a specific tag\n * notificationService.dismissBy(notification => notification.tags.includes('expired'));\n */\n public dismissBy(query: NotificationQuery): void {\n for (const item of this.queue.toArray().filter(query)) {\n this.dismiss(item);\n }\n }\n\n /**\n * Dismisses all notifications.\n *\n * @example\n * // Dismiss all notifications\n * notificationService.dismissAll();\n */\n public dismissAll(): void {\n this.queue.clear();\n }\n\n /**\n * Executes the action associated with a specific notification.\n *\n * @param {NotificationRef} notificationRef - The reference to the notification whose action to execute.\n * @example\n * // Execute action for a notification\n * notificationService.executeAction(notificationRef);\n */\n public executeAction(notificationRef: NotificationRef): void {\n if (!notificationRef.options.action) return;\n const actionFn = this.config.actionMap?.[notificationRef.options.action];\n if (!isFunction(actionFn)) {\n logger.warn(`Cannot find action ${notificationRef.options.action} for notification reference: ${notificationRef}`);\n return;\n }\n runInInjectionContext(this.injector, () => actionFn(notificationRef));\n }\n\n private resolveOptions(options?: Partial<NotificationOptions>): NotificationOptions {\n return deepmerge(this.config.options, options ?? {}, {\n icon: options?.icon ?? this.config.tagToIconMap?.[options?.tags?.[0] ?? ''] ?? this.config.options.icon,\n language: options?.language ?? this.localizationService.getActiveLanguage(),\n }) as NotificationOptions;\n }\n}\n","import { Injectable, computed, inject, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { DynamicTextContent } from '@odx/angular/cdk/dynamic-view';\nimport { Observable, combineLatest, filter, isObservable, map, of, shareReplay, switchMap } from 'rxjs';\nimport { getNotificationsByTags, toNotificationCollection } from '../helpers';\nimport { NotificationRef, NotificationSortFn } from '../models';\nimport { NotificationService } from '../notification.service';\n\n/**\n * A service for managing the notification center. This service provides functionalities\n * to filter, sort, and manage actions on notifications.\n */\n@Injectable()\nexport class NotificationCenterService {\n private readonly currentTag = signal<string | null>(null);\n private readonly currentSortFn = signal<NotificationSortFn>(undefined);\n private readonly notificationService = inject(NotificationService);\n private readonly notificationQuery = computed(() => getNotificationsByTags(this.currentTag()));\n private readonly title = signal<DynamicTextContent | null>(null);\n\n public readonly title$ = toObservable(this.title).pipe(\n switchMap((title) => (isObservable(title) ? title : of(title))),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n public readonly notifications$ = combineLatest([toObservable(this.notificationQuery), toObservable(this.currentSortFn)]).pipe(\n switchMap(([query, sortFn]) => this.notificationService.getNotificationsBy$(query, sortFn)),\n );\n public readonly unseenNotifications$ = this.notifications$.pipe(\n map((collection) => collection.values.filter(({ hasBeenSeen }) => !hasBeenSeen)),\n toNotificationCollection(),\n );\n public onNotificationAdd$ = this.queryEvent(this.notificationService.onNotificationAdd$);\n public onNotificationUpdate$ = this.queryEvent(this.notificationService.onNotificationUpdate$);\n public onNotificationRemove$ = this.queryEvent(this.notificationService.onNotificationRemove$);\n public onNotificationSeen$ = this.queryEvent(this.notificationService.onNotificationSeen$);\n\n /**\n * Sets the title for the notification center. The title can be static text or an observable for dynamic content.\n *\n * @param {DynamicTextContent | null} [value] - The title content for the notification center.\n */\n public setTitle(value?: DynamicTextContent | null): void {\n this.title.set(value ?? null);\n }\n\n /**\n * Sets the current tag to filter notifications. Only notifications with this tag will be included.\n *\n * @param {string | null} [value] - The tag to filter notifications by.\n */\n public setTag(value?: string | null): void {\n this.currentTag.set(value ?? null);\n }\n\n /**\n * Sets the sort function used to order the notifications.\n *\n * @param {NotificationSortFn} [value] - The sort function to apply to the notifications.\n */\n public setSortFn(value?: NotificationSortFn): void {\n this.currentSortFn.set(value);\n }\n\n /**\n * Marks a given notification as seen. This does not remove the notification but updates its seen status.\n *\n * @param {NotificationRef} notificationRef - The reference to the notification to be marked as seen.\n */\n public markAsSeen(notificationRef: NotificationRef): void {\n this.notificationService.markAsSeen(notificationRef);\n }\n\n /**\n * Marks all current filtered notifications as seen.\n */\n public markAllAsSeen(): void {\n this.notificationService.markAsSeenBy(this.notificationQuery());\n }\n\n /**\n * Dismisses a specific notification.\n *\n * @param {NotificationRef} notificationRef - The reference to the notification to dismiss.\n */\n public dismiss(notificationRef: NotificationRef): void {\n this.notificationService.dismiss(notificationRef);\n }\n\n /**\n * Dismisses all notifications that match the current filter criteria.\n */\n public dismissAll(): void {\n this.notificationService.dismissBy(this.notificationQuery());\n }\n\n /**\n * Executes the action associated with a specific notification and marks it as seen.\n *\n * @param {NotificationRef} notificationRef - The reference to the notification whose action to execute.\n */\n public executeAction(notificationRef: NotificationRef): void {\n this.markAsSeen(notificationRef);\n this.notificationService.executeAction(notificationRef);\n }\n\n private queryEvent(source$: Observable<NotificationRef>): Observable<NotificationRef> {\n return combineLatest([source$, toObservable(this.notificationQuery)]).pipe(\n filter(([notificationRef, query]) => query(notificationRef)),\n map(([notificationRef]) => notificationRef),\n );\n }\n}\n","import { EnvironmentProviders, Provider } from '@angular/core';\n\nexport type NotificationFeature = EnvironmentProviders & { ɵodxBrand: '@odx/angular/components/notification::NotificationFeature' };\n\nexport function makeNotificationFeature(provider: (Provider | NotificationFeature)[] | EnvironmentProviders): NotificationFeature {\n return provider as never as NotificationFeature;\n}\n","import { ENVIRONMENT_INITIALIZER, inject } from '@angular/core';\nimport { Observable, from, isObservable, of } from 'rxjs';\nimport { NotificationFeature, NotificationRef, makeNotificationFeature } from '../models';\nimport { NotificationService } from '../notification.service';\n\n/**\n * Type definition for a function that loads notifications.\n * Can return notifications directly as an array, as a Promise, or as an Observable.\n * @typedef {Function} LoadNotificationsFn\n * @returns {Observable<NotificationRef[]> | Promise<NotificationRef[]> | NotificationRef[]} The loaded notifications.\n */\nexport type LoadNotificationsFn = () => Observable<NotificationRef[]> | Promise<NotificationRef[]> | NotificationRef[];\n\n/**\n * Loads notifications using the provided `loadFn`. This function abstracts over the differences\n * between synchronous notifications, promises, and observables, providing a uniform Observable output.\n * @function loadNotifications\n * @param {LoadNotificationsFn} [loadFn] - An optional function to load notifications.\n * @returns {Observable<NotificationRef[]>} An Observable stream of notification references.\n */\nfunction loadNotifications(loadFn?: LoadNotificationsFn): Observable<NotificationRef[]> {\n const notifications = loadFn?.();\n if (isObservable(notifications)) {\n return notifications;\n }\n if (notifications instanceof Promise) {\n return from(notifications);\n }\n return of(notifications ?? []);\n}\n\n/**\n * Integrates notification loading into the application environment. This function uses the Angular\n * `ENVIRONMENT_INITIALIZER` to ensure that notifications are loaded as part of the application's\n * initialization process.\n * @function withLoadNotifications\n * @param {LoadNotificationsFn} loadFn - The function to load notifications.\n * @returns {NotificationFeature} A notification feature configured to load notifications at startup.\n */\nexport function withLoadNotifications(loadFn: LoadNotificationsFn): NotificationFeature {\n return makeNotificationFeature([\n {\n provide: ENVIRONMENT_INITIALIZER,\n useFactory: () => {\n const notificationService = inject(NotificationService);\n const notifications$ = loadNotifications(loadFn);\n\n return () => {\n notifications$.subscribe((notificationRefs) => notificationService.load(notificationRefs));\n };\n },\n multi: true,\n },\n ]);\n}\n","import { ENVIRONMENT_INITIALIZER, Injector, inject, runInInjectionContext } from '@angular/core';\nimport { Observable, firstValueFrom, isObservable } from 'rxjs';\nimport { NotificationFeature, NotificationRef, makeNotificationFeature } from '../models';\nimport { NotificationService } from '../notification.service';\n\nexport type SaveNotificationsFn = (notificationRefs: NotificationRef[]) => Observable<void> | Promise<void> | void;\n\n/**\n * Asynchronously saves notifications using the provided save function. It handles Observable and Promise results seamlessly.\n * @async\n * @function saveNotifications\n * @param {NotificationRef[]} notifications - The notifications to be saved.\n * @param {SaveNotificationsFn} [saveFn] - Optional custom save function.\n * @returns {Promise<void>} A promise that resolves when the save operation is complete.\n */\nasync function saveNotifications(notifications: NotificationRef[], saveFn?: SaveNotificationsFn): Promise<void> {\n const save = saveFn?.(notifications);\n if (isObservable(save)) {\n await firstValueFrom(save);\n } else if (save instanceof Promise) {\n await save;\n }\n}\n\n/**\n * Configures the application to automatically save notifications using a specified save function.\n * This setup integrates with Angular's environment initialization process to ensure notifications are saved as needed.\n * @function withSaveNotifications\n * @param {SaveNotificationsFn} saveFn - The function to save notifications.\n * @returns {NotificationFeature} A notification feature configured to automatically save notifications.\n */\nexport function withSaveNotifications(saveFn: SaveNotificationsFn): NotificationFeature {\n return makeNotificationFeature([\n {\n provide: ENVIRONMENT_INITIALIZER,\n useFactory: () => {\n const injector = Injector.create({ parent: inject(Injector), providers: [] });\n const notificationService = inject(NotificationService);\n const saveFnWithContext: SaveNotificationsFn = (notifications) => runInInjectionContext(injector, () => saveFn(notifications));\n\n return () => {\n notificationService.notifications$.subscribe(({ values }) => saveNotifications(values, saveFnWithContext));\n };\n },\n multi: true,\n },\n ]);\n}\n","import { DynamicTextContent } from '@odx/angular/cdk/dynamic-view';\nimport { deepmerge } from '@odx/angular/internal';\nimport { isFunction, isString } from '@odx/angular/utils';\nimport { firstValueFrom } from 'rxjs';\nimport { NotificationFeature, NotificationRef, makeNotificationFeature } from '../models';\nimport { LoadNotificationsFn, withLoadNotifications } from './with-load-notifications';\nimport { SaveNotificationsFn, withSaveNotifications } from './with-save-notifications';\n\nexport interface NotificationSerializer {\n serialize(value: NotificationRef[]): Promise<string>;\n deserialize(value: string): Promise<NotificationRef[]>;\n}\n\n/**\n * Implementation of NotificationSerializer for persistent storage.\n * @class PersistentNotificationSerializer\n * @implements {NotificationSerializer}\n */\nexport class PersistentNotificationSerializer implements NotificationSerializer {\n /**\n * Serializes an array of NotificationRef objects into a string.\n * @function serialize\n * @memberof NotificationSerializer\n * @param {NotificationRef[]} value - The notification references to serialize.\n * @returns {Promise<string>} A promise that resolves to the serialized string representation of notification references.\n */\n public async serialize(value: NotificationRef[]): Promise<string> {\n const serializedNotifications = await Promise.all(\n value.map(async (ref) =>\n deepmerge(ref, {\n item: {\n title: await this.serializeDynamicTextContent(ref.item.title),\n description: await this.serializeDynamicTextContent(ref.item.description),\n },\n }),\n ),\n );\n\n return JSON.stringify(serializedNotifications);\n }\n\n /**\n * Deserializes a string into an array of NotificationRef objects.\n * @function deserialize\n * @memberof NotificationSerializer\n * @param {string} value - The string representation of notification references to deserialize.\n * @returns {Promise<NotificationRef[]>} A promise that resolves to the deserialized notification references.\n */\n public async deserialize(value: string): Promise<NotificationRef[]> {\n return JSON.parse(value);\n }\n\n private async serializeDynamicTextContent(content?: DynamicTextContent): Promise<string> {\n if (!content) return '';\n if (isString(content)) return content;\n\n return firstValueFrom(content).catch(() => '');\n }\n}\n\nexport interface WithPersistentNotificationsStorageOptions {\n storageKey: string;\n storage: Storage;\n serializer: NotificationSerializer;\n idTransformer?: (notificationRef: NotificationRef) => string;\n}\n\nexport interface WithPersistentNotificationsOptions {\n initFn: LoadNotificationsFn;\n saveFn: SaveNotificationsFn;\n storageOptions: WithPersistentNotificationsStorageOptions;\n}\n\n/**\n * Initializes and returns a function for loading persistent notifications.\n * @function initPersistentNotifications\n * @param {WithPersistentNotificationsStorageOptions} options - The storage options including serializer and storage key.\n * @returns {LoadNotificationsFn} A function to load notifications from storage.\n */\nexport function initPersistentNotifications({\n storage,\n storageKey,\n serializer,\n idTransformer,\n}: WithPersistentNotificationsStorageOptions): LoadNotificationsFn {\n return async () => {\n const storedValue = storage.getItem(storageKey);\n if (!storedValue) return [];\n const notificationRefs = await serializer.deserialize(storedValue);\n\n if (isFunction(idTransformer)) {\n for (const notificationRef of notificationRefs) {\n notificationRef.item.id = notificationRef.id = idTransformer(notificationRef);\n }\n }\n\n return notificationRefs;\n };\n}\n\n/**\n * Returns a function for persisting notifications.\n * @function persistNotifications\n * @param {WithPersistentNotificationsStorageOptions} options - The storage options including serializer and storage key.\n * @returns {SaveNotificationsFn} A function to save notifications to storage.\n */\nexport function persistNotifications({ storage, storageKey, serializer }: WithPersistentNotificationsStorageOptions): SaveNotificationsFn {\n return async (notificationRefs: NotificationRef[]) => {\n storage.setItem(storageKey, await serializer.serialize(notificationRefs));\n };\n}\n\n/**\n * Configures the application to use persistent notifications, automatically loading from and saving to the configured storage.\n * @function withPersistentNotifications\n * @param {Partial<WithPersistentNotificationsOptions>} [options] - Optional configuration for persistent notifications.\n * @returns {NotificationFeature} A notification feature configured for persistence.\n */\nexport function withPersistentNotifications(options?: Partial<WithPersistentNotificationsOptions>): NotificationFeature {\n const storageOptions: WithPersistentNotificationsStorageOptions = {\n storageKey: options?.storageOptions?.storageKey ?? '@odx/angular/components/notification::Storage',\n storage: options?.storageOptions?.storage ?? localStorage,\n serializer: options?.storageOptions?.serializer ?? new PersistentNotificationSerializer(),\n };\n const initFn = options?.initFn ?? initPersistentNotifications(storageOptions);\n const saveFn = options?.saveFn ?? persistNotifications(storageOptions);\n\n return makeNotificationFeature([withLoadNotifications(initFn), withSaveNotifications(saveFn)]);\n}\n","import { ENVIRONMENT_INITIALIZER, inject } from '@angular/core';\nimport { NotificationFeature, NotificationRef, makeNotificationFeature } from '../models';\nimport { NotificationService } from '../notification.service';\nimport { NotificationSerializer, PersistentNotificationSerializer } from './with-peristent-notifications';\n\nexport type BrowserNotificationExtras = Omit<NotificationOptions, 'body' | 'timestamp'>;\nexport type BrowserNotification = Notification;\nexport type BrowserNotificationFactory = (notificationRef: NotificationRef) => BrowserNotification;\nexport type SendBrowserNotificationFn = (notificationRef: NotificationRef) => unknown;\n\nexport interface WithBrowserNotificationsOptions {\n sendFn?: SendBrowserNotificationFn;\n extras?: BrowserNotificationExtras;\n isEnabled?: boolean;\n}\n\n/**\n * Requests permission to display browser notifications and returns a boolean indicating whether permission was granted.\n * @async\n * @function requestBrowserNotificationPermissions\n * @returns {Promise<boolean>} A promise that resolves to `true` if permission is granted, otherwise `false`.\n */\nasync function requestBrowserNotificationPermissions(): Promise<boolean> {\n if (!('Notification' in window)) return false;\n if (Notification.permission === 'granted') return true;\n if (Notification.permission === 'denied') return false;\n const permission = await Notification.requestPermission();\n\n return permission === 'granted';\n}\n\n/**\n * Creates a function responsible for sending out browser notifications with the given options.\n * @function sendBrowserNotification\n * @param {NotificationSerializer} serializer - The serializer to use for notification data.\n * @param {BrowserNotificationExtras} [options] - Additional options for the browser notification.\n * @returns {SendBrowserNotificationFn} A function to send browser notifications.\n */\nfunction sendBrowserNotification(serializer: NotificationSerializer, options?: BrowserNotificationExtras): SendBrowserNotificationFn {\n return async (notificationRef) => {\n if (!('Notification' in window)) return;\n const [notificationObj] = await serializer.deserialize(await serializer.serialize([notificationRef]));\n if (!notificationObj || notificationObj.hasBeenSeen) return;\n const { createdAt, item } = notificationObj;\n new Notification(item.title as string, {\n tag: notificationRef.options.tags?.[0],\n lang: notificationRef.options.language,\n ...options,\n body: item.description as string,\n timestamp: createdAt,\n });\n };\n}\n\n/**\n * Configures the application to send browser notifications, using Angular's `ENVIRONMENT_INITIALIZER` for setup.\n * @function withBrowserNotifications\n * @param {WithBrowserNotificationsOptions} [options] - Optional configuration for browser notifications.\n * @returns {NotificationFeature} A notification feature for integration into the application environment.\n */\nexport function withBrowserNotifications(options?: WithBrowserNotificationsOptions): NotificationFeature {\n return makeNotificationFeature([\n {\n provide: ENVIRONMENT_INITIALIZER,\n useFactory: () => {\n const isEnabled = options?.isEnabled ?? true;\n if (!isEnabled) return () => void 0;\n const notificationService = inject(NotificationService);\n const serializer = new PersistentNotificationSerializer();\n const sendBrowserNotificationFn = options?.sendFn ?? sendBrowserNotification(serializer, options?.extras);\n\n return async () => {\n if (!isEnabled) return;\n const permissionsGranted = await requestBrowserNotificationPermissions();\n if (!permissionsGranted) return;\n notificationService.onNotificationAdd$.subscribe(sendBrowserNotificationFn);\n };\n },\n multi: true,\n },\n ]);\n}\n","import { InjectionToken, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { NotificationFeature, NotificationRef, makeNotificationFeature } from '../models';\n\nexport type NotificationTransformFn = (ref: NotificationRef) => Observable<NotificationRef>;\n\n/**\n * An InjectionToken for the NotificationTransformFn. This token can be used to inject\n * a custom notification transformation function into the Angular DI system.\n * @type {InjectionToken<NotificationTransformFn>}\n */\nexport const ODX_NOTIFICATION_TRANSFORMER = new InjectionToken<NotificationTransformFn>('@odx/angular/components/notification::NotificationTransformer');\n\n/**\n * Attempts to inject a NotificationTransformFn from the Angular DI system.\n * If no provider is found, it returns null.\n * @function injectNotificationTransform\n * @returns {NotificationTransformFn | null} The injected NotificationTransformFn, or null if not provided.\n */\nexport function injectNotificationTransform(): NotificationTransformFn | null {\n return inject(ODX_NOTIFICATION_TRANSFORMER, { optional: true });\n}\n\n/**\n * Configures a notification transformation function to be used within the application.\n * This function provides a mechanism to globally apply transformations to notifications\n * before they are processed or displayed.\n * @function withNotificationTransform\n * @param {NotificationTransformFn} transformFn - The function to transform notifications.\n * @returns {NotificationFeature} A NotificationFeature configured with the provided transformation function.\n */\nexport function withNotificationTransform(transformFn: NotificationTransformFn): NotificationFeature {\n return makeNotificationFeature([\n {\n provide: ODX_NOTIFICATION_TRANSFORMER,\n useValue: transformFn,\n },\n ]);\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';\nimport { ActionGroupComponent } from '@odx/angular/components/action-group';\nimport { AvatarComponent } from '@odx/angular/components/avatar';\nimport { ButtonComponent } from '@odx/angular/components/button';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\nimport { Observable, of } from 'rxjs';\nimport { injectNotificationTransform } from '../../features';\nimport { NotificationRef } from '../../models';\n\n/**\n * A component for displaying notifications.\n * Supports customization through dynamic transformation of notification data.\n * Utilizes the OnPush change detection strategy for better performance in large applications.\n *\n * @component\n */\n@CSSComponent('notification-item')\n@Component({\n selector: 'odx-notification-item',\n standalone: true,\n imports: [AvatarComponent, ActionGroupComponent, ButtonComponent, CommonModule, DynamicViewDirective, IconComponent],\n templateUrl: './notification-item.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NotificationItemComponent {\n private readonly transformNotification = injectNotificationTransform();\n private _notificationRef!: NotificationRef;\n\n protected transformedNotification!: Observable<NotificationRef>;\n\n public readonly element = injectElement();\n\n /**\n * Input property to set the notification. On setting, it transforms the notification for display.\n * This transformation can be a custom logic provided through dependency injection.\n *\n * @param value NotificationRef - The notification object to be displayed.\n */\n @Input({ required: true })\n public set notification(value: NotificationRef) {\n this._notificationRef = value;\n this.transformedNotification = this.transformNotification?.(value) ?? of(value);\n }\n\n /**\n * Getter for the notification property.\n *\n * @returns NotificationRef - The current notification reference stored in the component.\n */\n public get notification() {\n return this._notificationRef;\n }\n\n /**\n * An event emitter for dismissing the notification.\n * It emits the notification reference that was dismissed.\n */\n @Output()\n public dismiss = new EventEmitter<NotificationRef>();\n}\n","<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","import { transition, trigger, useAnimation } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, OnDestroy, ViewEncapsulation, inject } from '@angular/core';\nimport { LetDirective } from '@ngrx/component';\nimport { collapse } from '@odx/angular/animations';\nimport { InteractiveDirective } from '@odx/angular/cdk/a11y';\nimport { DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';\nimport { ActionGroupComponent } from '@odx/angular/components/action-group';\nimport { BadgeDirective } from '@odx/angular/components/badge';\nimport { ButtonComponent } from '@odx/angular/components/button';\nimport { DropdownModule } from '@odx/angular/components/dropdown';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { ListModule } from '@odx/angular/components/list';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { TranslatePipe, provideTranslations } from '@odx/angular/internal/translate';\nimport { injectElement, trackById } from '@odx/angular/utils';\nimport { NotificationRef } from '../../models';\nimport notificationI18n from '../../notification.i18n';\nimport { NotificationCenterService } from '../../services';\nimport { NotificationItemComponent } from '../notification-item/notification-item.component';\n\n/**\n * 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.\n *\n * @CSSComponent 'notification-center' - Specifies the CSS class for styling the notification center component.\n */\n@CSSComponent('notification-center')\n@Component({\n selector: 'odx-notification-center',\n standalone: true,\n imports: [\n CommonModule,\n LetDirective,\n ActionGroupComponent,\n BadgeDirective,\n ButtonComponent,\n DynamicViewDirective,\n IconComponent,\n DropdownModule,\n TranslatePipe,\n NotificationItemComponent,\n InteractiveDirective,\n ListModule,\n ],\n templateUrl: './notification-center.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [provideTranslations(notificationI18n)],\n animations: [trigger('notificationAnimation', [transition(':leave', useAnimation(collapse, { delay: 150 }))])],\n})\nexport class NotificationCenterComponent implements OnDestroy {\n protected readonly notificationCenterService = inject(NotificationCenterService);\n protected readonly trackById = trackById;\n\n public readonly element = injectElement();\n\n public ngOnDestroy(): void {\n this.notificationCenterService.markAllAsSeen();\n }\n\n protected isMuted({ options, hasBeenSeen }: NotificationRef): boolean {\n return hasBeenSeen && !options.action;\n }\n}\n","<ng-template [ngIf]=\"notificationCenterService.notifications$ | async\" let-notifications>\n <h3 class=\"odx-notification-center__header\">\n <ng-template [odxDynamicView]=\"(notificationCenterService.title$ | async) ?? ('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","import { AfterViewInit, DestroyRef, Directive, Input, OnInit, Output, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DisabledController } from '@odx/angular';\nimport { DynamicTextContent } from '@odx/angular/cdk/dynamic-view';\nimport { BadgeDirective } from '@odx/angular/components/badge';\nimport { DropdownDirective } from '@odx/angular/components/dropdown';\nimport { Position } from '@odx/angular/utils';\nimport { Observable, map, merge, startWith, switchMap, tap } from 'rxjs';\nimport { NotificationCenterComponent } from '../components';\nimport { NotificationSortFn } from '../models';\nimport { NotificationCenterService } from '../services';\n\n/**\n * A directive that provides an interface for managing notifications.\n * It allows configuring a notification center with dynamic content, sorting, and badge display functionalities.\n */\n@Directive({\n standalone: true,\n selector: '[odxNotificationCenter]',\n hostDirectives: [{ directive: BadgeDirective, inputs: ['odxBadgeVariant:odxNotificationCenterBadgeVariant'] }, DropdownDirective],\n providers: [NotificationCenterService],\n})\nexport class NotificationCenterDirective implements OnInit, AfterViewInit {\n private readonly badgeDirective = inject(BadgeDirective, { self: true });\n private readonly destroyRef = inject(DestroyRef);\n private readonly disabledController = DisabledController.inject();\n private readonly dropdownDirective = inject(DropdownDirective, { self: true });\n private readonly notificationCenterService = inject(NotificationCenterService, { self: true });\n private readonly dropdownStateChange$ = merge(this.dropdownDirective.beforeOpen, this.dropdownDirective.beforeClose).pipe(startWith(void 0));\n private readonly badgeValue$ = this.notificationCenterService.unseenNotifications$.pipe(\n switchMap(({ count }) => this.dropdownStateChange$.pipe(map(() => this.formatBadgeValue(count)))),\n );\n\n /**\n * Sets the tag for filtering notifications. Only notifications with this tag will be shown in the notification center.\n * @param value The tag value to filter notifications. If null, all notifications are shown.\n */\n @Input('odxNotificationCenter')\n public set tag(value: string | null) {\n this.notificationCenterService.setTag(value);\n }\n\n /**\n * Sets the title of the notification center. The title can be dynamic and change based on the application state.\n * @param value The title content, which can be a string or an Observable returning a string. Allows for dynamic titles.\n */\n @Input('odxNotificationCenterTitle')\n public set title(value: DynamicTextContent | null) {\n this.notificationCenterService.setTitle(value);\n }\n\n /**\n * Sets the sorting function used to order notifications within the notification center.\n * @param value A function that compares two notifications and returns the sort order.\n *\n * @example\n * sortFfn = (a: NotificationRef, b: NotificationRef) => {\n if (a.createdAt < b.createdAt) return -1;\n if (a.createdAt > b.createdAt) return 1;\n return 0;\n };\n */\n @Input('odxNotificationCenterSortFn')\n public set sortFn(value: NotificationSortFn) {\n this.notificationCenterService.setSortFn(value);\n }\n\n /**\n * An event that is emitted when a new notification is added.\n * Listeners can use this event to react to new notifications being added to the notification center.\n */\n // eslint-disable-next-line @angular-eslint/no-output-rename\n @Output('odxNotificationCenterAdd')\n public notificationAdd = this.notificationCenterService.onNotificationAdd$;\n\n /**\n * An event that is emitted when a notification is updated.\n * This can be used to react to changes in notifications, such as their read status or content updates.\n */\n // eslint-disable-next-line @angular-eslint/no-output-rename\n @Output('odxNotificationCenterUpdate')\n public notificationUpdate = this.notificationCenterService.onNotificationUpdate$;\n\n /**\n * An event that is emitted when a notification is removed from the notification center.\n * Use this event to handle the removal of notifications, such as cleaning up resources or updating UI elements.\n */\n // eslint-disable-next-line @angular-eslint/no-output-rename\n @Output('odxNotificationCenterRemove')\n public notificationRemove = this.notificationCenterService.onNotificationRemove$;\n\n /**\n * An event that is emitted when a notification is marked as seen.\n * This event can be used to perform actions when the user acknowledges a notification.\n */\n // eslint-disable-next-line @angular-eslint/no-output-rename\n @Output('odxNotificationCenterSeen')\n public notificationSeen = this.notificationCenterService.onNotificationSeen$;\n\n public ngOnInit() {\n this.badgeDirective.position = Position.BOTTOM;\n this.badgeDirective.offset = 6;\n\n this.dropdownDirective.content = NotificationCenterComponent;\n this.dropdownDirective.options = {\n containerClass: 'odx-notification-center-overlay',\n position: Position.BOTTOM_END,\n enableFallback: false,\n };\n }\n\n public ngAfterViewInit() {\n merge(this.handleBadgeUpdates(), this.handleDropdownUpdates()).pipe(takeUntilDestroyed(this.destroyRef)).subscribe();\n }\n\n private formatBadgeValue(value: number): string | null {\n return this.dropdownDirective.isOpen || value === 0 ? null : value.toFixed(0);\n }\n\n private handleBadgeUpdates(): Observable<unknown> {\n return this.badgeValue$.pipe(\n tap((value: DynamicTextContent | null) => {\n this.badgeDirective.value = value as DynamicTextContent;\n this.badgeDirective.ngOnChanges();\n }),\n );\n }\n\n private handleDropdownUpdates(): Observable<unknown> {\n return this.notificationCenterService.notifications$.pipe(\n tap(({ isEmpty }) => {\n this.disabledController?.setDisabledState(isEmpty);\n if (!isEmpty) return;\n this.dropdownDirective.close();\n }),\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
|
package/fesm2022/odx-angular.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import { inject, ChangeDetectorRef, Directive, InjectionToken, Optional, Host, b
|
|
|
3
3
|
import { pluckFromArray, isPresent, injectElement, hasChanged, deferFn, booleanToOptionalAttributeString, reactiveAttributeBinding, getLanguageCode } from '@odx/angular/utils';
|
|
4
4
|
import { merge, EMPTY, tap, Subject, shareReplay, map, distinctUntilChanged, switchMap, NEVER, debounceTime, Observable, startWith, of, combineLatest, filter } from 'rxjs';
|
|
5
5
|
import { CommonModule, DOCUMENT } from '@angular/common';
|
|
6
|
-
import {
|
|
6
|
+
import { LetDirective } from '@ngrx/component';
|
|
7
7
|
import { toObservable } from '@angular/core/rxjs-interop';
|
|
8
8
|
import { Title } from '@angular/platform-browser';
|
|
9
9
|
import { Router, NavigationEnd } from '@angular/router';
|
|
@@ -342,17 +342,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
342
342
|
}], ctorParameters: function () { return []; } });
|
|
343
343
|
|
|
344
344
|
const controllers = [DisabledController, ReadonlyController];
|
|
345
|
-
const modules = [ClickOutsideDirective];
|
|
345
|
+
const modules = [ClickOutsideDirective, LetDirective];
|
|
346
346
|
class CoreModule {
|
|
347
347
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
348
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: CoreModule, imports: [DisabledController, ReadonlyController, ClickOutsideDirective], exports: [CommonModule,
|
|
349
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreModule, imports: [CommonModule
|
|
348
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: CoreModule, imports: [DisabledController, ReadonlyController, ClickOutsideDirective, LetDirective], exports: [CommonModule, DisabledController, ReadonlyController, ClickOutsideDirective, LetDirective] }); }
|
|
349
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreModule, imports: [CommonModule] }); }
|
|
350
350
|
}
|
|
351
351
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreModule, decorators: [{
|
|
352
352
|
type: NgModule,
|
|
353
353
|
args: [{
|
|
354
354
|
imports: [...controllers, ...modules],
|
|
355
|
-
exports: [CommonModule,
|
|
355
|
+
exports: [CommonModule, ...controllers, ...modules],
|
|
356
356
|
}]
|
|
357
357
|
}] });
|
|
358
358
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-angular.mjs","sources":["../../../../libs/angular/src/lib/controllers/controller.ts","../../../../libs/angular/src/lib/controllers/disabled.controller.ts","../../../../libs/angular/src/lib/controllers/readonly.controller.ts","../../../../libs/angular/src/lib/directives/click-outside.directive.ts","../../../../libs/angular/src/lib/directives/delegate-focus.directive.ts","../../../../libs/angular/src/lib/directives/with-disabled-state.directive.ts","../../../../libs/angular/src/lib/directives/with-tabindex.directive.ts","../../../../libs/angular/src/lib/core.module.ts","../../../../libs/angular/src/lib/models/environment.ts","../../../../libs/angular/src/lib/services/window-ref.ts","../../../../libs/angular/src/lib/tokens/identity-matcher.ts","../../../../libs/angular/src/lib/tokens/string-search-handler.ts","../../../../libs/angular/src/lib/tokens/stringify.ts","../../../../libs/angular/src/odx-angular.ts"],"sourcesContent":["import { ChangeDetectorRef, Directive, inject, OnChanges, OnDestroy } from '@angular/core';\nimport { isPresent, pluckFromArray } from '@odx/angular/utils';\nimport { EMPTY, merge, Observable, shareReplay, Subject, tap } from 'rxjs';\n\nfunction controllerChanges(controllers: Array<Controller | undefined | null>): Observable<void> {\n const changes$ = pluckFromArray(controllers.filter(isPresent), 'change$');\n\n return changes$.length > 0 ? merge(...changes$) : EMPTY;\n}\n\nexport function detectControllerChanges(...controllers: Array<Controller | undefined | null>): Observable<void> {\n const changeDetector = inject(ChangeDetectorRef);\n\n return controllerChanges(controllers).pipe(tap(() => changeDetector.markForCheck()));\n}\n\n@Directive()\nexport abstract class Controller implements OnChanges, OnDestroy {\n private readonly change$$ = new Subject<void>();\n\n public readonly change$ = this.change$$.pipe(shareReplay({ bufferSize: 1, refCount: true }));\n\n public static setup(controller: Controller | null, changeDetector: ChangeDetectorRef): Controller | null {\n controllerChanges([controller])\n .pipe(tap(() => changeDetector.markForCheck()))\n .subscribe();\n\n return controller;\n }\n\n public ngOnChanges(): void {\n this.triggerControllerChange();\n }\n\n public ngOnDestroy(): void {\n this.change$$.complete();\n }\n\n protected triggerControllerChange() {\n this.change$$.next();\n }\n}\n","import { booleanAttribute, ChangeDetectorRef, Directive, forwardRef, Host, inject, InjectionToken, Input, Optional, Provider } from '@angular/core';\nimport { distinctUntilChanged, map, shareReplay } from 'rxjs';\nimport { Controller } from './controller';\n\nexport const DISABLED_CONTROLLER = new InjectionToken<DisabledController>('@odx/angular::DisabledWatchedController');\nexport const DISABLED_INTERNAL_CONTROLLER = new InjectionToken<DisabledController | null>('@odx/angular::DisabledController');\n\n@Directive({\n standalone: true,\n selector: '[disabled]',\n providers: [\n {\n provide: DISABLED_INTERNAL_CONTROLLER,\n useExisting: forwardRef(() => DisabledController),\n },\n ],\n})\nexport class DisabledController extends Controller {\n private readonly parentController = inject(DISABLED_CONTROLLER, { optional: true, skipSelf: true });\n private isDisabled = false;\n\n public readonly isDisabled$ = this.change$.pipe(\n map(() => this.disabled),\n distinctUntilChanged(),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n @Input({ transform: booleanAttribute })\n public set disabled(value: boolean) {\n this.isDisabled = value;\n }\n\n public get disabled(): boolean {\n return this.isDisabled || !!this.parentController?.disabled;\n }\n\n public static inject(): DisabledController | null {\n return inject(DISABLED_CONTROLLER, { optional: true });\n }\n\n public static connect(): Provider[] {\n return [\n {\n provide: DISABLED_INTERNAL_CONTROLLER,\n useFactory: (hostController: DisabledController | null) => hostController ?? new DisabledController(),\n deps: [[new Optional(), new Host(), DisabledController]],\n },\n {\n provide: DISABLED_CONTROLLER,\n useFactory: Controller.setup,\n deps: [[new Optional(), new Host(), DISABLED_INTERNAL_CONTROLLER], ChangeDetectorRef],\n },\n ];\n }\n\n public setDisabledState(state: boolean): void {\n if (this.disabled !== state) {\n this.disabled = state;\n this.ngOnChanges();\n }\n }\n}\n","import { booleanAttribute, ChangeDetectorRef, Directive, ElementRef, forwardRef, Host, inject, InjectionToken, Input, Optional, Provider } from '@angular/core';\nimport { distinctUntilChanged, map, shareReplay } from 'rxjs';\nimport { Controller } from './controller';\n\nconst ELEMENTS_WITH_READONLY_ATTRIBUTE = {\n input: true,\n textarea: true,\n select: true,\n} as Record<string, boolean>;\n\nexport const READONLY_CONTROLLER = new InjectionToken<ReadonlyController>('@odx/angular::ReadonlyWatchedController');\nexport const READONLY_INTERNAL_CONTROLLER = new InjectionToken<ReadonlyController | null>('@odx/angular::ReadonlyController');\n\n@Directive({\n standalone: true,\n selector: '[readonly]',\n providers: [\n {\n provide: READONLY_INTERNAL_CONTROLLER,\n useExisting: forwardRef(() => ReadonlyController),\n },\n ],\n host: {\n '[attr.readonly]': 'hasReadonlyAttribute || null',\n },\n})\nexport class ReadonlyController extends Controller {\n private readonly parentController = inject(READONLY_CONTROLLER, { optional: true, skipSelf: true });\n private readonly nodeName: string;\n private isReadonly = false;\n\n protected hasReadonlyAttribute = false;\n\n public readonly isReadonly$ = this.change$.pipe(\n map(() => this.isReadonly),\n distinctUntilChanged(),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n @Input({ transform: booleanAttribute })\n public set readonly(value: boolean) {\n if (this.isReadonly === value) return;\n this.isReadonly = value;\n this.hasReadonlyAttribute = this.isReadonly && ELEMENTS_WITH_READONLY_ATTRIBUTE[this.nodeName];\n }\n public get readonly(): boolean {\n return this.isReadonly || !!this.parentController?.readonly;\n }\n\n constructor(element: ElementRef<HTMLElement> | null) {\n super();\n this.nodeName = element?.nativeElement.nodeName.toLowerCase() ?? '';\n }\n\n public static inject(): ReadonlyController | null {\n return inject(READONLY_CONTROLLER, { optional: true });\n }\n\n public static connect(): Provider {\n return [\n {\n provide: READONLY_INTERNAL_CONTROLLER,\n useFactory: (hostController: ReadonlyController | null, elementRef: ElementRef | null) => hostController ?? new ReadonlyController(elementRef),\n deps: [\n [new Optional(), new Host(), ReadonlyController],\n [new Optional(), ElementRef],\n ],\n },\n {\n provide: READONLY_CONTROLLER,\n useFactory: Controller.setup,\n deps: [[new Optional(), new Host(), READONLY_INTERNAL_CONTROLLER], ChangeDetectorRef],\n },\n ];\n }\n}\n","import { booleanAttribute, Directive, EventEmitter, inject, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2 } from '@angular/core';\nimport { deferFn, hasChanged, injectElement, NgChanges } from '@odx/angular/utils';\nimport { debounceTime, NEVER, Observable, Subscription, switchMap, tap } from 'rxjs';\n\n@Directive({\n standalone: true,\n selector: '[odxClickOutside]',\n})\nexport class ClickOutsideDirective implements OnChanges, OnInit, OnDestroy {\n private listener?: Subscription;\n private readonly element = injectElement();\n private readonly renderer = inject(Renderer2);\n private readonly onOutsideClick$ = this.registerEventHandler('mousedown').pipe(\n switchMap((event) => {\n if (!this.odxClickOutsideActive) return NEVER;\n const hostElement = this.element.nativeElement;\n const targetElement = event.target as Element;\n const clickedOutside = hostElement.isConnected && targetElement.isConnected && !hostElement.contains(targetElement);\n return this.registerEventHandler('mouseup').pipe(\n debounceTime(0),\n tap(() => clickedOutside && this.odxClickOutside.emit(event)),\n );\n }),\n );\n\n @Input({ transform: booleanAttribute })\n public odxClickOutsideActive = true;\n\n @Output()\n public readonly odxClickOutside = new EventEmitter<Event>();\n\n public ngOnInit(): void {\n if (this.odxClickOutsideActive) {\n this.registerHandler();\n }\n }\n\n public ngOnChanges(changes: NgChanges<ClickOutsideDirective>): void {\n if (hasChanged(changes, 'odxClickOutsideActive', true)) {\n if (changes.odxClickOutsideActive?.currentValue) {\n this.registerHandler();\n } else {\n this.destroy();\n }\n }\n }\n\n public ngOnDestroy(): void {\n this.destroy();\n }\n\n private destroy() {\n if (this.listener) {\n this.listener.unsubscribe();\n this.listener = undefined;\n }\n }\n\n private registerHandler() {\n deferFn(() => {\n this.listener = this.onOutsideClick$.subscribe();\n });\n }\n\n private registerEventHandler<T extends Event>(eventName: string): Observable<T> {\n return new Observable<T>((subscriber) => {\n const listener = this.renderer.listen('document', eventName, (event: T) => {\n subscriber.next(event);\n });\n subscriber.add(listener);\n });\n }\n}\n","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\n\n@Directive({\n standalone: true,\n host: {\n '[attr.tabindex]': 'tabindex',\n },\n})\nexport class DelegateFocusDirective {\n protected tabindex = 0;\n\n @Output()\n public focused = new EventEmitter<void>();\n\n @HostListener('focus')\n protected handleFocus(): void {\n this.focused.next();\n }\n\n @HostListener('focusin')\n protected handleFocusIn(): void {\n this.tabindex = -1;\n }\n\n @HostListener('focusout')\n protected handleFocusOut(): void {\n this.tabindex = 0;\n }\n}\n","import { Directive, ElementRef } from '@angular/core';\nimport { booleanToOptionalAttributeString } from '@odx/angular/utils';\nimport { DisabledController } from '../controllers';\n\nconst ELEMENTS_WITH_DISABLED_ATTRIBUTE = {\n button: true,\n fieldset: true,\n input: true,\n optgroup: true,\n option: true,\n select: true,\n textarea: true,\n} as Record<string, boolean>;\n\n@Directive({\n standalone: true,\n providers: [DisabledController.connect()],\n host: {\n '[class.is-disabled]': 'isDisabled',\n '[attr.aria-disabled]': 'ariaDisabled',\n '[attr.disabled]': 'hasDisabledAttribute && isDisabled || null',\n },\n})\nexport class WithDisabledState {\n protected readonly hasAriaRole: boolean;\n protected readonly hasDisabledAttribute: boolean;\n protected readonly disabledController = DisabledController.inject();\n\n protected get isDisabled(): boolean {\n return !!this.disabledController?.disabled;\n }\n\n public get ariaDisabled(): string | null {\n return booleanToOptionalAttributeString(this.hasAriaRole && this.isDisabled);\n }\n\n constructor(element: ElementRef<HTMLElement>) {\n this.hasDisabledAttribute = !!ELEMENTS_WITH_DISABLED_ATTRIBUTE[element.nativeElement.nodeName.toLowerCase() ?? ''];\n this.hasAriaRole = element.nativeElement.hasAttribute('role');\n }\n}\n","import { Directive, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { reactiveAttributeBinding } from '@odx/angular/utils';\nimport { combineLatest, distinctUntilChanged, map, of, shareReplay, startWith } from 'rxjs';\nimport { DisabledController } from '../controllers';\n\n@Directive({ standalone: true })\nexport class WithTabIndex {\n private readonly isDisabled$ = DisabledController.inject()?.isDisabled$.pipe(startWith(false)) ?? of(false);\n private readonly tabindex = signal(0);\n private readonly tabindex$ = combineLatest([toObservable(this.tabindex), this.isDisabled$]).pipe(\n map(([tabindex, isDisabled]) => (isDisabled ? -1 : tabindex)),\n distinctUntilChanged(),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n constructor() {\n reactiveAttributeBinding(this.tabindex$, 'tabindex');\n }\n\n public setTabindex(value: number | null) {\n this.tabindex.set(value ?? 0);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { LetModule } from '@ngrx/component';\nimport { DisabledController, ReadonlyController } from './controllers';\nimport { ClickOutsideDirective } from './directives';\n\nconst controllers = [DisabledController, ReadonlyController];\nconst modules = [ClickOutsideDirective];\n\n@NgModule({\n imports: [...controllers, ...modules],\n exports: [CommonModule, LetModule, ...controllers, ...modules],\n})\nexport class CoreModule {}\n","export type Environment = typeof Environment[keyof typeof Environment];\n\nexport const Environment = {\n DEV: 'dev',\n STAGE: 'stage',\n PROD: 'prod'\n} as const;\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable, reflectComponentType, Type } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { fromEvents } from '@odx/angular/rxjs';\nimport { getLanguageCode } from '@odx/angular/utils';\nimport { debounceTime, distinctUntilChanged, EMPTY, filter, map, shareReplay, startWith } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WindowRef {\n private readonly title = inject(Title);\n public readonly document = inject(DOCUMENT);\n public readonly nativeWindow = this.document.defaultView ?? window;\n public readonly isOnline$ = fromEvents(this.nativeWindow, 'offline', 'online').pipe(\n startWith(null),\n map(() => this.isOnline()),\n distinctUntilChanged(),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n public readonly pageTitle$ = (inject(Router, { optional: true })?.events ?? EMPTY).pipe(\n filter((event) => event instanceof NavigationEnd),\n startWith(null),\n debounceTime(0),\n map(() => this.title.getTitle()),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n public get location(): Location {\n return this.nativeWindow.location;\n }\n\n public isOnline(): boolean {\n return this.nativeWindow.navigator.onLine;\n }\n\n public getLanguage(): string {\n const { language, languages, userLanguage } = this.nativeWindow.navigator as Navigator & { userLanguage?: string };\n\n return languages?.[0] ?? userLanguage ?? language;\n }\n\n public getLanguageCode(): string {\n return getLanguageCode(this.getLanguage());\n }\n\n public getOrigin(): string {\n return this.location.origin;\n }\n\n public openPage(url?: string | URL, target?: string, features?: string): WindowProxy | null {\n return this.nativeWindow.open(url, target, features);\n }\n\n public reloadPage(): void {\n return this.location.reload();\n }\n\n public queryByComponent<T>(type: Type<T>): HTMLElement | null {\n const componentType = reflectComponentType(type);\n\n return componentType ? this.nativeWindow.document.querySelector(componentType.selector) : null;\n }\n\n public getCSSVariable(name: string, element: HTMLElement = this.document.body): string {\n return this.nativeWindow.getComputedStyle(element).getPropertyValue(`--${name}`).trim();\n }\n\n public getCSSColorStyles(filter: string, selector = ':root'): Record<string, string> {\n const selectorFilter = new RegExp(`^${selector}$`);\n const nameFilter = new RegExp(`^--${filter}`);\n const arr = Array.from(this.document.styleSheets)\n .filter(({ href }) => !href || href.startsWith(this.nativeWindow.location.origin))\n .map(({ cssRules }) => Array.from(cssRules)[0])\n .filter((rule) => rule instanceof CSSStyleRule && selectorFilter.test(rule.selectorText.trim()))\n .reduce((colors: Record<string, string>, rule) => {\n Object.values((rule as CSSStyleRule).style)\n .map((style) => style.toString().trim())\n .filter((name) => Boolean(name) && nameFilter.test(name))\n .forEach((name) => {\n const key = name.replace('--', '');\n colors[key] = this.getCSSVariable(key);\n });\n return colors;\n }, {});\n return arr;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport type IdentityMatcher<T> = (item1: T, item2: T) => boolean;\n\nconst ODX_DEFAULT_IDENTITY_MATCHER: IdentityMatcher<unknown> = (item1, item2) => item1 === item2;\n\nexport const ODX_IDENTITY_MATCHER = new InjectionToken<IdentityMatcher<unknown>>('@odx/angular::StringHandler', {\n providedIn: 'root',\n factory: () => ODX_DEFAULT_IDENTITY_MATCHER,\n});\n","import { InjectionToken } from '@angular/core';\n\nexport type StringSearchHandler = (item: string, query: string) => boolean;\n\nconst ODX_DEFAULT_STRING_SEARCH_HANDLER: StringSearchHandler = (item, query) => {\n return item.toLocaleLowerCase().includes(query.toLocaleLowerCase());\n};\n\nexport const ODX_STRING_SEARCH_HANDLER = new InjectionToken<StringSearchHandler>('@odx/angular::StringHandler', {\n providedIn: 'root',\n factory: () => ODX_DEFAULT_STRING_SEARCH_HANDLER,\n});\n","import { InjectionToken } from '@angular/core';\nimport { isPresent } from '@odx/angular/utils';\n\nexport type StringifyFn<T> = (item: T) => string;\n\nconst ODX_DEFAULT_STRINGIFY: StringifyFn<unknown> = (item) => (isPresent(item) ? String(item) : '');\n\nexport const ODX_STRINGIFY = new InjectionToken<StringifyFn<unknown>>('@odx/angular::Stringify', {\n providedIn: 'root',\n factory: () => ODX_DEFAULT_STRINGIFY,\n});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"odx-angular.mjs","sources":["../../../../libs/angular/src/lib/controllers/controller.ts","../../../../libs/angular/src/lib/controllers/disabled.controller.ts","../../../../libs/angular/src/lib/controllers/readonly.controller.ts","../../../../libs/angular/src/lib/directives/click-outside.directive.ts","../../../../libs/angular/src/lib/directives/delegate-focus.directive.ts","../../../../libs/angular/src/lib/directives/with-disabled-state.directive.ts","../../../../libs/angular/src/lib/directives/with-tabindex.directive.ts","../../../../libs/angular/src/lib/core.module.ts","../../../../libs/angular/src/lib/models/environment.ts","../../../../libs/angular/src/lib/services/window-ref.ts","../../../../libs/angular/src/lib/tokens/identity-matcher.ts","../../../../libs/angular/src/lib/tokens/string-search-handler.ts","../../../../libs/angular/src/lib/tokens/stringify.ts","../../../../libs/angular/src/odx-angular.ts"],"sourcesContent":["import { ChangeDetectorRef, Directive, inject, OnChanges, OnDestroy } from '@angular/core';\nimport { isPresent, pluckFromArray } from '@odx/angular/utils';\nimport { EMPTY, merge, Observable, shareReplay, Subject, tap } from 'rxjs';\n\nfunction controllerChanges(controllers: Array<Controller | undefined | null>): Observable<void> {\n const changes$ = pluckFromArray(controllers.filter(isPresent), 'change$');\n\n return changes$.length > 0 ? merge(...changes$) : EMPTY;\n}\n\nexport function detectControllerChanges(...controllers: Array<Controller | undefined | null>): Observable<void> {\n const changeDetector = inject(ChangeDetectorRef);\n\n return controllerChanges(controllers).pipe(tap(() => changeDetector.markForCheck()));\n}\n\n@Directive()\nexport abstract class Controller implements OnChanges, OnDestroy {\n private readonly change$$ = new Subject<void>();\n\n public readonly change$ = this.change$$.pipe(shareReplay({ bufferSize: 1, refCount: true }));\n\n public static setup(controller: Controller | null, changeDetector: ChangeDetectorRef): Controller | null {\n controllerChanges([controller])\n .pipe(tap(() => changeDetector.markForCheck()))\n .subscribe();\n\n return controller;\n }\n\n public ngOnChanges(): void {\n this.triggerControllerChange();\n }\n\n public ngOnDestroy(): void {\n this.change$$.complete();\n }\n\n protected triggerControllerChange() {\n this.change$$.next();\n }\n}\n","import { booleanAttribute, ChangeDetectorRef, Directive, forwardRef, Host, inject, InjectionToken, Input, Optional, Provider } from '@angular/core';\nimport { distinctUntilChanged, map, shareReplay } from 'rxjs';\nimport { Controller } from './controller';\n\nexport const DISABLED_CONTROLLER = new InjectionToken<DisabledController>('@odx/angular::DisabledWatchedController');\nexport const DISABLED_INTERNAL_CONTROLLER = new InjectionToken<DisabledController | null>('@odx/angular::DisabledController');\n\n@Directive({\n standalone: true,\n selector: '[disabled]',\n providers: [\n {\n provide: DISABLED_INTERNAL_CONTROLLER,\n useExisting: forwardRef(() => DisabledController),\n },\n ],\n})\nexport class DisabledController extends Controller {\n private readonly parentController = inject(DISABLED_CONTROLLER, { optional: true, skipSelf: true });\n private isDisabled = false;\n\n public readonly isDisabled$ = this.change$.pipe(\n map(() => this.disabled),\n distinctUntilChanged(),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n @Input({ transform: booleanAttribute })\n public set disabled(value: boolean) {\n this.isDisabled = value;\n }\n\n public get disabled(): boolean {\n return this.isDisabled || !!this.parentController?.disabled;\n }\n\n public static inject(): DisabledController | null {\n return inject(DISABLED_CONTROLLER, { optional: true });\n }\n\n public static connect(): Provider[] {\n return [\n {\n provide: DISABLED_INTERNAL_CONTROLLER,\n useFactory: (hostController: DisabledController | null) => hostController ?? new DisabledController(),\n deps: [[new Optional(), new Host(), DisabledController]],\n },\n {\n provide: DISABLED_CONTROLLER,\n useFactory: Controller.setup,\n deps: [[new Optional(), new Host(), DISABLED_INTERNAL_CONTROLLER], ChangeDetectorRef],\n },\n ];\n }\n\n public setDisabledState(state: boolean): void {\n if (this.disabled !== state) {\n this.disabled = state;\n this.ngOnChanges();\n }\n }\n}\n","import { booleanAttribute, ChangeDetectorRef, Directive, ElementRef, forwardRef, Host, inject, InjectionToken, Input, Optional, Provider } from '@angular/core';\nimport { distinctUntilChanged, map, shareReplay } from 'rxjs';\nimport { Controller } from './controller';\n\nconst ELEMENTS_WITH_READONLY_ATTRIBUTE = {\n input: true,\n textarea: true,\n select: true,\n} as Record<string, boolean>;\n\nexport const READONLY_CONTROLLER = new InjectionToken<ReadonlyController>('@odx/angular::ReadonlyWatchedController');\nexport const READONLY_INTERNAL_CONTROLLER = new InjectionToken<ReadonlyController | null>('@odx/angular::ReadonlyController');\n\n@Directive({\n standalone: true,\n selector: '[readonly]',\n providers: [\n {\n provide: READONLY_INTERNAL_CONTROLLER,\n useExisting: forwardRef(() => ReadonlyController),\n },\n ],\n host: {\n '[attr.readonly]': 'hasReadonlyAttribute || null',\n },\n})\nexport class ReadonlyController extends Controller {\n private readonly parentController = inject(READONLY_CONTROLLER, { optional: true, skipSelf: true });\n private readonly nodeName: string;\n private isReadonly = false;\n\n protected hasReadonlyAttribute = false;\n\n public readonly isReadonly$ = this.change$.pipe(\n map(() => this.isReadonly),\n distinctUntilChanged(),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n @Input({ transform: booleanAttribute })\n public set readonly(value: boolean) {\n if (this.isReadonly === value) return;\n this.isReadonly = value;\n this.hasReadonlyAttribute = this.isReadonly && ELEMENTS_WITH_READONLY_ATTRIBUTE[this.nodeName];\n }\n public get readonly(): boolean {\n return this.isReadonly || !!this.parentController?.readonly;\n }\n\n constructor(element: ElementRef<HTMLElement> | null) {\n super();\n this.nodeName = element?.nativeElement.nodeName.toLowerCase() ?? '';\n }\n\n public static inject(): ReadonlyController | null {\n return inject(READONLY_CONTROLLER, { optional: true });\n }\n\n public static connect(): Provider {\n return [\n {\n provide: READONLY_INTERNAL_CONTROLLER,\n useFactory: (hostController: ReadonlyController | null, elementRef: ElementRef | null) => hostController ?? new ReadonlyController(elementRef),\n deps: [\n [new Optional(), new Host(), ReadonlyController],\n [new Optional(), ElementRef],\n ],\n },\n {\n provide: READONLY_CONTROLLER,\n useFactory: Controller.setup,\n deps: [[new Optional(), new Host(), READONLY_INTERNAL_CONTROLLER], ChangeDetectorRef],\n },\n ];\n }\n}\n","import { booleanAttribute, Directive, EventEmitter, inject, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2 } from '@angular/core';\nimport { deferFn, hasChanged, injectElement, NgChanges } from '@odx/angular/utils';\nimport { debounceTime, NEVER, Observable, Subscription, switchMap, tap } from 'rxjs';\n\n@Directive({\n standalone: true,\n selector: '[odxClickOutside]',\n})\nexport class ClickOutsideDirective implements OnChanges, OnInit, OnDestroy {\n private listener?: Subscription;\n private readonly element = injectElement();\n private readonly renderer = inject(Renderer2);\n private readonly onOutsideClick$ = this.registerEventHandler('mousedown').pipe(\n switchMap((event) => {\n if (!this.odxClickOutsideActive) return NEVER;\n const hostElement = this.element.nativeElement;\n const targetElement = event.target as Element;\n const clickedOutside = hostElement.isConnected && targetElement.isConnected && !hostElement.contains(targetElement);\n return this.registerEventHandler('mouseup').pipe(\n debounceTime(0),\n tap(() => clickedOutside && this.odxClickOutside.emit(event)),\n );\n }),\n );\n\n @Input({ transform: booleanAttribute })\n public odxClickOutsideActive = true;\n\n @Output()\n public readonly odxClickOutside = new EventEmitter<Event>();\n\n public ngOnInit(): void {\n if (this.odxClickOutsideActive) {\n this.registerHandler();\n }\n }\n\n public ngOnChanges(changes: NgChanges<ClickOutsideDirective>): void {\n if (hasChanged(changes, 'odxClickOutsideActive', true)) {\n if (changes.odxClickOutsideActive?.currentValue) {\n this.registerHandler();\n } else {\n this.destroy();\n }\n }\n }\n\n public ngOnDestroy(): void {\n this.destroy();\n }\n\n private destroy() {\n if (this.listener) {\n this.listener.unsubscribe();\n this.listener = undefined;\n }\n }\n\n private registerHandler() {\n deferFn(() => {\n this.listener = this.onOutsideClick$.subscribe();\n });\n }\n\n private registerEventHandler<T extends Event>(eventName: string): Observable<T> {\n return new Observable<T>((subscriber) => {\n const listener = this.renderer.listen('document', eventName, (event: T) => {\n subscriber.next(event);\n });\n subscriber.add(listener);\n });\n }\n}\n","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\n\n@Directive({\n standalone: true,\n host: {\n '[attr.tabindex]': 'tabindex',\n },\n})\nexport class DelegateFocusDirective {\n protected tabindex = 0;\n\n @Output()\n public focused = new EventEmitter<void>();\n\n @HostListener('focus')\n protected handleFocus(): void {\n this.focused.next();\n }\n\n @HostListener('focusin')\n protected handleFocusIn(): void {\n this.tabindex = -1;\n }\n\n @HostListener('focusout')\n protected handleFocusOut(): void {\n this.tabindex = 0;\n }\n}\n","import { Directive, ElementRef } from '@angular/core';\nimport { booleanToOptionalAttributeString } from '@odx/angular/utils';\nimport { DisabledController } from '../controllers';\n\nconst ELEMENTS_WITH_DISABLED_ATTRIBUTE = {\n button: true,\n fieldset: true,\n input: true,\n optgroup: true,\n option: true,\n select: true,\n textarea: true,\n} as Record<string, boolean>;\n\n@Directive({\n standalone: true,\n providers: [DisabledController.connect()],\n host: {\n '[class.is-disabled]': 'isDisabled',\n '[attr.aria-disabled]': 'ariaDisabled',\n '[attr.disabled]': 'hasDisabledAttribute && isDisabled || null',\n },\n})\nexport class WithDisabledState {\n protected readonly hasAriaRole: boolean;\n protected readonly hasDisabledAttribute: boolean;\n protected readonly disabledController = DisabledController.inject();\n\n protected get isDisabled(): boolean {\n return !!this.disabledController?.disabled;\n }\n\n public get ariaDisabled(): string | null {\n return booleanToOptionalAttributeString(this.hasAriaRole && this.isDisabled);\n }\n\n constructor(element: ElementRef<HTMLElement>) {\n this.hasDisabledAttribute = !!ELEMENTS_WITH_DISABLED_ATTRIBUTE[element.nativeElement.nodeName.toLowerCase() ?? ''];\n this.hasAriaRole = element.nativeElement.hasAttribute('role');\n }\n}\n","import { Directive, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { reactiveAttributeBinding } from '@odx/angular/utils';\nimport { combineLatest, distinctUntilChanged, map, of, shareReplay, startWith } from 'rxjs';\nimport { DisabledController } from '../controllers';\n\n@Directive({ standalone: true })\nexport class WithTabIndex {\n private readonly isDisabled$ = DisabledController.inject()?.isDisabled$.pipe(startWith(false)) ?? of(false);\n private readonly tabindex = signal(0);\n private readonly tabindex$ = combineLatest([toObservable(this.tabindex), this.isDisabled$]).pipe(\n map(([tabindex, isDisabled]) => (isDisabled ? -1 : tabindex)),\n distinctUntilChanged(),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n constructor() {\n reactiveAttributeBinding(this.tabindex$, 'tabindex');\n }\n\n public setTabindex(value: number | null) {\n this.tabindex.set(value ?? 0);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { LetDirective } from '@ngrx/component';\nimport { DisabledController, ReadonlyController } from './controllers';\nimport { ClickOutsideDirective } from './directives';\n\nconst controllers = [DisabledController, ReadonlyController];\nconst modules = [ClickOutsideDirective, LetDirective];\n\n@NgModule({\n imports: [...controllers, ...modules],\n exports: [CommonModule, ...controllers, ...modules],\n})\nexport class CoreModule {}\n","export type Environment = typeof Environment[keyof typeof Environment];\n\nexport const Environment = {\n DEV: 'dev',\n STAGE: 'stage',\n PROD: 'prod'\n} as const;\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable, reflectComponentType, Type } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { fromEvents } from '@odx/angular/rxjs';\nimport { getLanguageCode } from '@odx/angular/utils';\nimport { debounceTime, distinctUntilChanged, EMPTY, filter, map, shareReplay, startWith } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WindowRef {\n private readonly title = inject(Title);\n public readonly document = inject(DOCUMENT);\n public readonly nativeWindow = this.document.defaultView ?? window;\n public readonly isOnline$ = fromEvents(this.nativeWindow, 'offline', 'online').pipe(\n startWith(null),\n map(() => this.isOnline()),\n distinctUntilChanged(),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n public readonly pageTitle$ = (inject(Router, { optional: true })?.events ?? EMPTY).pipe(\n filter((event) => event instanceof NavigationEnd),\n startWith(null),\n debounceTime(0),\n map(() => this.title.getTitle()),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n public get location(): Location {\n return this.nativeWindow.location;\n }\n\n public isOnline(): boolean {\n return this.nativeWindow.navigator.onLine;\n }\n\n public getLanguage(): string {\n const { language, languages, userLanguage } = this.nativeWindow.navigator as Navigator & { userLanguage?: string };\n\n return languages?.[0] ?? userLanguage ?? language;\n }\n\n public getLanguageCode(): string {\n return getLanguageCode(this.getLanguage());\n }\n\n public getOrigin(): string {\n return this.location.origin;\n }\n\n public openPage(url?: string | URL, target?: string, features?: string): WindowProxy | null {\n return this.nativeWindow.open(url, target, features);\n }\n\n public reloadPage(): void {\n return this.location.reload();\n }\n\n public queryByComponent<T>(type: Type<T>): HTMLElement | null {\n const componentType = reflectComponentType(type);\n\n return componentType ? this.nativeWindow.document.querySelector(componentType.selector) : null;\n }\n\n public getCSSVariable(name: string, element: HTMLElement = this.document.body): string {\n return this.nativeWindow.getComputedStyle(element).getPropertyValue(`--${name}`).trim();\n }\n\n public getCSSColorStyles(filter: string, selector = ':root'): Record<string, string> {\n const selectorFilter = new RegExp(`^${selector}$`);\n const nameFilter = new RegExp(`^--${filter}`);\n const arr = Array.from(this.document.styleSheets)\n .filter(({ href }) => !href || href.startsWith(this.nativeWindow.location.origin))\n .map(({ cssRules }) => Array.from(cssRules)[0])\n .filter((rule) => rule instanceof CSSStyleRule && selectorFilter.test(rule.selectorText.trim()))\n .reduce((colors: Record<string, string>, rule) => {\n Object.values((rule as CSSStyleRule).style)\n .map((style) => style.toString().trim())\n .filter((name) => Boolean(name) && nameFilter.test(name))\n .forEach((name) => {\n const key = name.replace('--', '');\n colors[key] = this.getCSSVariable(key);\n });\n return colors;\n }, {});\n return arr;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport type IdentityMatcher<T> = (item1: T, item2: T) => boolean;\n\nconst ODX_DEFAULT_IDENTITY_MATCHER: IdentityMatcher<unknown> = (item1, item2) => item1 === item2;\n\nexport const ODX_IDENTITY_MATCHER = new InjectionToken<IdentityMatcher<unknown>>('@odx/angular::StringHandler', {\n providedIn: 'root',\n factory: () => ODX_DEFAULT_IDENTITY_MATCHER,\n});\n","import { InjectionToken } from '@angular/core';\n\nexport type StringSearchHandler = (item: string, query: string) => boolean;\n\nconst ODX_DEFAULT_STRING_SEARCH_HANDLER: StringSearchHandler = (item, query) => {\n return item.toLocaleLowerCase().includes(query.toLocaleLowerCase());\n};\n\nexport const ODX_STRING_SEARCH_HANDLER = new InjectionToken<StringSearchHandler>('@odx/angular::StringHandler', {\n providedIn: 'root',\n factory: () => ODX_DEFAULT_STRING_SEARCH_HANDLER,\n});\n","import { InjectionToken } from '@angular/core';\nimport { isPresent } from '@odx/angular/utils';\n\nexport type StringifyFn<T> = (item: T) => string;\n\nconst ODX_DEFAULT_STRINGIFY: StringifyFn<unknown> = (item) => (isPresent(item) ? String(item) : '');\n\nexport const ODX_STRINGIFY = new InjectionToken<StringifyFn<unknown>>('@odx/angular::Stringify', {\n providedIn: 'root',\n factory: () => ODX_DEFAULT_STRINGIFY,\n});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/lib/core.module.d.ts
CHANGED
|
@@ -2,10 +2,10 @@ import * as i0 from "@angular/core";
|
|
|
2
2
|
import * as i1 from "./controllers/disabled.controller";
|
|
3
3
|
import * as i2 from "./controllers/readonly.controller";
|
|
4
4
|
import * as i3 from "./directives/click-outside.directive";
|
|
5
|
-
import * as i4 from "@
|
|
6
|
-
import * as i5 from "@
|
|
5
|
+
import * as i4 from "@ngrx/component";
|
|
6
|
+
import * as i5 from "@angular/common";
|
|
7
7
|
export declare class CoreModule {
|
|
8
8
|
static ɵfac: i0.ɵɵFactoryDeclaration<CoreModule, never>;
|
|
9
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<CoreModule, never, [typeof i1.DisabledController, typeof i2.ReadonlyController, typeof i3.ClickOutsideDirective
|
|
9
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<CoreModule, never, [typeof i1.DisabledController, typeof i2.ReadonlyController, typeof i3.ClickOutsideDirective, typeof i4.LetDirective], [typeof i5.CommonModule, typeof i1.DisabledController, typeof i2.ReadonlyController, typeof i3.ClickOutsideDirective, typeof i4.LetDirective]>;
|
|
10
10
|
static ɵinj: i0.ɵɵInjectorDeclaration<CoreModule>;
|
|
11
11
|
}
|