@cccteam/ccc-lib 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +24 -0
  2. package/cccteam-ccc-lib-0.0.10.tgz +0 -0
  3. package/esm2022/cccteam-ccc-lib.mjs +5 -0
  4. package/esm2022/lib/auth/directives/has-permission.directive.mjs +44 -0
  5. package/esm2022/lib/auth/forms/ccc-field/ccc-field.component.mjs +77 -0
  6. package/esm2022/lib/auth/forms/form-helpers.mjs +34 -0
  7. package/esm2022/lib/auth/guards/authentication.guard.mjs +38 -0
  8. package/esm2022/lib/auth/guards/authorization.guard.mjs +17 -0
  9. package/esm2022/lib/auth/services/auth.service.mjs +49 -0
  10. package/esm2022/lib/auth/services/request-options.mjs +12 -0
  11. package/esm2022/lib/auth/state/auth.actions.mjs +64 -0
  12. package/esm2022/lib/auth/state/auth.state.mjs +105 -0
  13. package/esm2022/lib/types/base/tokens.mjs +7 -0
  14. package/esm2022/lib/types/notification-message.mjs +7 -0
  15. package/esm2022/lib/types/permissions.mjs +3 -0
  16. package/esm2022/lib/types/session-info.mjs +2 -0
  17. package/esm2022/lib/ui/components/alert/alert.component.mjs +41 -0
  18. package/esm2022/lib/ui/components/sidenav/sidenav.component.mjs +63 -0
  19. package/esm2022/lib/ui/interceptor/api.interceptor.mjs +43 -0
  20. package/esm2022/lib/ui/services/notification.service.mjs +50 -0
  21. package/esm2022/lib/ui/state/core.actions.mjs +49 -0
  22. package/esm2022/lib/ui/state/core.state.mjs +95 -0
  23. package/esm2022/public-api.mjs +34 -0
  24. package/fesm2022/cccteam-ccc-lib.mjs +739 -0
  25. package/fesm2022/cccteam-ccc-lib.mjs.map +1 -0
  26. package/index.d.ts +5 -0
  27. package/lib/auth/directives/has-permission.directive.d.ts +12 -0
  28. package/lib/auth/forms/ccc-field/ccc-field.component.d.ts +25 -0
  29. package/lib/auth/forms/form-helpers.d.ts +16 -0
  30. package/lib/auth/guards/authentication.guard.d.ts +3 -0
  31. package/lib/auth/guards/authorization.guard.d.ts +3 -0
  32. package/lib/auth/services/auth.service.d.ts +24 -0
  33. package/lib/auth/services/request-options.d.ts +8 -0
  34. package/lib/auth/state/auth.actions.d.ts +41 -0
  35. package/lib/auth/state/auth.state.d.ts +28 -0
  36. package/lib/types/base/tokens.d.ts +13 -0
  37. package/lib/types/notification-message.d.ts +18 -0
  38. package/lib/types/permissions.d.ts +15 -0
  39. package/lib/types/session-info.d.ts +9 -0
  40. package/lib/ui/components/alert/alert.component.d.ts +13 -0
  41. package/lib/ui/components/sidenav/sidenav.component.d.ts +31 -0
  42. package/lib/ui/interceptor/api.interceptor.d.ts +12 -0
  43. package/lib/ui/services/notification.service.d.ts +30 -0
  44. package/lib/ui/state/core.actions.d.ts +31 -0
  45. package/lib/ui/state/core.state.d.ts +29 -0
  46. package/package.json +29 -0
  47. package/public-api.d.ts +19 -0
@@ -0,0 +1,41 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, EventEmitter, Input, Output, inject } from '@angular/core';
3
+ import { MatButtonModule } from '@angular/material/button';
4
+ import { MatIconModule } from '@angular/material/icon';
5
+ import { RouterModule } from '@angular/router';
6
+ import { NotificationService } from '../../services/notification.service';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/material/icon";
9
+ import * as i2 from "@angular/material/button";
10
+ import * as i3 from "@angular/common";
11
+ import * as i4 from "@angular/router";
12
+ export class AlertComponent {
13
+ error;
14
+ dismiss = new EventEmitter();
15
+ errors = inject(NotificationService);
16
+ ngOnInit() {
17
+ if (this.error.duration === undefined) {
18
+ this.error.duration = 30000;
19
+ }
20
+ setTimeout(() => {
21
+ this.dismissAlert();
22
+ }, this.error.duration);
23
+ }
24
+ dismissAlert() {
25
+ if (this.error.id !== undefined) {
26
+ this.errors.dismissGlobalNotification(this.error);
27
+ }
28
+ }
29
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
30
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: AlertComponent, isStandalone: true, selector: "ccc-alert", inputs: { error: "error" }, outputs: { dismiss: "dismiss" }, ngImport: i0, template: "<div class=\"alert\" [ngClass]=\"error.level\">\n <div class=\"message\">\n <span>{{ error.message }}</span>\n </div>\n <div class=\"alert-end\">\n @if (error.link) {\n <span [routerLink]=\"error.link\" class=\"link\">View</span>\n }\n <button (click)=\"dismissAlert()\" mat-icon-button aria-label=\"Close Alert\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n</div>\n", styles: [".alert{margin:auto;border:1px solid;max-width:450px;border-radius:5px;background-color:#d3d3d3;display:flex;flex-direction:row;align-items:center;justify-content:space-between}.message{padding-left:15px;max-width:400px;display:flex;justify-content:space-between}.alert-end{display:flex;flex-direction:row;align-items:center;gap:5px}.link{cursor:pointer}.link:hover{text-decoration:underline}.warn{border-color:red;background-color:#fff5f4}.accent{border-color:#dfb51d;background-color:#fff8e0}.success{border-color:#4caf50;background-color:#f0fff0}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
31
+ }
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AlertComponent, decorators: [{
33
+ type: Component,
34
+ args: [{ selector: 'ccc-alert', standalone: true, imports: [MatIconModule, MatButtonModule, CommonModule, RouterModule], template: "<div class=\"alert\" [ngClass]=\"error.level\">\n <div class=\"message\">\n <span>{{ error.message }}</span>\n </div>\n <div class=\"alert-end\">\n @if (error.link) {\n <span [routerLink]=\"error.link\" class=\"link\">View</span>\n }\n <button (click)=\"dismissAlert()\" mat-icon-button aria-label=\"Close Alert\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n</div>\n", styles: [".alert{margin:auto;border:1px solid;max-width:450px;border-radius:5px;background-color:#d3d3d3;display:flex;flex-direction:row;align-items:center;justify-content:space-between}.message{padding-left:15px;max-width:400px;display:flex;justify-content:space-between}.alert-end{display:flex;flex-direction:row;align-items:center;gap:5px}.link{cursor:pointer}.link:hover{text-decoration:underline}.warn{border-color:red;background-color:#fff5f4}.accent{border-color:#dfb51d;background-color:#fff8e0}.success{border-color:#4caf50;background-color:#f0fff0}\n"] }]
35
+ }], propDecorators: { error: [{
36
+ type: Input,
37
+ args: [{ required: true }]
38
+ }], dismiss: [{
39
+ type: Output
40
+ }] } });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NjLWxpYi9zcmMvbGliL3VpL2NvbXBvbmVudHMvYWxlcnQvYWxlcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NjLWxpYi9zcmMvbGliL3VpL2NvbXBvbmVudHMvYWxlcnQvYWxlcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7QUFTMUUsTUFBTSxPQUFPLGNBQWM7SUFDRSxLQUFLLENBQXVCO0lBQzdDLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBRXZDLE1BQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNyQyxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDOUIsQ0FBQztRQUVELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDO3VHQW5CVSxjQUFjOzJGQUFkLGNBQWMsa0lDZjNCLG1aQWFBLCtsQkRBWSxhQUFhLG1MQUFFLGVBQWUsMklBQUUsWUFBWSw0SEFBRSxZQUFZOzsyRkFFekQsY0FBYztrQkFQMUIsU0FBUzsrQkFDRSxXQUFXLGNBR1QsSUFBSSxXQUNQLENBQUMsYUFBYSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDOzhCQUcxQyxLQUFLO3NCQUEvQixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDZixPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25NZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvbm90aWZpY2F0aW9uLW1lc3NhZ2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NjLWFsZXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FsZXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWxlcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW01hdEljb25Nb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZSwgQ29tbW9uTW9kdWxlLCBSb3V0ZXJNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBBbGVydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGVycm9yITogTm90aWZpY2F0aW9uTWVzc2FnZTtcbiAgQE91dHB1dCgpIGRpc21pc3MgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgZXJyb3JzID0gaW5qZWN0KE5vdGlmaWNhdGlvblNlcnZpY2UpO1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lcnJvci5kdXJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVycm9yLmR1cmF0aW9uID0gMzAwMDA7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmRpc21pc3NBbGVydCgpO1xuICAgIH0sIHRoaXMuZXJyb3IuZHVyYXRpb24pO1xuICB9XG5cbiAgZGlzbWlzc0FsZXJ0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVycm9yLmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmRpc21pc3NHbG9iYWxOb3RpZmljYXRpb24odGhpcy5lcnJvcik7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYWxlcnRcIiBbbmdDbGFzc109XCJlcnJvci5sZXZlbFwiPlxuICA8ZGl2IGNsYXNzPVwibWVzc2FnZVwiPlxuICAgIDxzcGFuPnt7IGVycm9yLm1lc3NhZ2UgfX08L3NwYW4+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiYWxlcnQtZW5kXCI+XG4gICAgQGlmIChlcnJvci5saW5rKSB7XG4gICAgPHNwYW4gW3JvdXRlckxpbmtdPVwiZXJyb3IubGlua1wiIGNsYXNzPVwibGlua1wiPlZpZXc8L3NwYW4+XG4gICAgfVxuICAgIDxidXR0b24gKGNsaWNrKT1cImRpc21pc3NBbGVydCgpXCIgbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJDbG9zZSBBbGVydFwiPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,63 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, DestroyRef, inject, Input } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
+ import { MatButtonModule } from '@angular/material/button';
5
+ import { MatExpansionModule } from '@angular/material/expansion';
6
+ import { MatIconModule } from '@angular/material/icon';
7
+ import { MatSidenavModule } from '@angular/material/sidenav';
8
+ import { RouterModule } from '@angular/router';
9
+ import { Store } from '@ngxs/store';
10
+ import { tap } from 'rxjs';
11
+ import { HasPermissionDirective } from '../../../auth/directives/has-permission.directive';
12
+ import { CoreState } from '../../state/core.state';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@angular/material/icon";
15
+ import * as i2 from "@angular/router";
16
+ import * as i3 from "@angular/common";
17
+ export class SidenavComponent {
18
+ store = inject(Store);
19
+ destroyRef = inject(DestroyRef);
20
+ navGroups;
21
+ currentNav = [];
22
+ ngOnInit() {
23
+ this.store
24
+ .select(CoreState.currentSidenavIdentifier)
25
+ .pipe(tap((identifier) => {
26
+ this.currentNav = this.updateNavItems(identifier);
27
+ }), takeUntilDestroyed(this.destroyRef))
28
+ .subscribe();
29
+ }
30
+ /**
31
+ * Updates the currentNav based on the identifier
32
+ * @param identifier
33
+ * @returns NavItem[]
34
+ * @memberof SidenavComponent
35
+ */
36
+ updateNavItems(identifier) {
37
+ if (!this.navGroups) {
38
+ return [];
39
+ }
40
+ if (!this.navGroups[identifier]) {
41
+ // pick the first one if the identifier is not found so we don't break the UI
42
+ identifier = Object.keys(this.navGroups)[0];
43
+ }
44
+ return this.navGroups[identifier];
45
+ }
46
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SidenavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
47
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: SidenavComponent, isStandalone: true, selector: "ccc-sidenav", inputs: { navGroups: "navGroups" }, ngImport: i0, template: "<div class=\"nav-container\">\n <nav>\n @for (navItem of currentNav; track navItem.label) {\n <ng-container *ngTemplateOutlet=\"typeRendererTemplate; context: { navItem: navItem }\"></ng-container>\n }\n </nav>\n</div>\n<ng-template #typeRendererTemplate let-navItem=\"navItem\">\n @switch (navItem.type) {\n @case ('header') {\n <ng-container [ngTemplateOutlet]=\"headerTemplate\" [ngTemplateOutletContext]=\"{ navItem: navItem }\"></ng-container>\n }\n @case ('link') {\n <ng-container [ngTemplateOutlet]=\"linkTemplate\" [ngTemplateOutletContext]=\"{ navItem: navItem }\"></ng-container>\n }\n @case ('expandable') {\n <ng-container\n [ngTemplateOutlet]=\"expandableTemplate\"\n [ngTemplateOutletContext]=\"{ navItem: navItem }\"></ng-container>\n }\n }\n</ng-template>\n<ng-template #headerTemplate let-navItem=\"navItem\">\n <div class=\"link-header\">{{ navItem.label }}</div>\n</ng-template>\n<ng-template #linkTemplate let-navItem=\"navItem\">\n <a [routerLink]=\"navItem.routerLink\" *cccHasPermission=\"navItem.permission\">\n <div class=\"nav-item\" routerLinkActive=\"active-link\">\n <div class=\"link-button\">\n <div class=\"icon\">\n <mat-icon class=\"material-icons-outlined\" [inline]=\"true\">\n {{ navItem.icon }}\n </mat-icon>\n </div>\n <div class=\"text\">\n {{ navItem.label | titlecase }}\n </div>\n </div>\n </div>\n </a>\n</ng-template>\n<ng-template #expandableTemplate let-navItem=\"navItem\">\n <div class=\"nav-item\" aria-hidden=\"true\" (click)=\"navItem.isExpanded = !navItem.isExpanded\">\n <div class=\"link-button\">\n <div class=\"icon\">\n <mat-icon class=\"material-icons-outlined\" [inline]=\"true\">\n {{ navItem.isExpanded ? 'expand_less' : 'expand_more' }}\n </mat-icon>\n </div>\n <div class=\"text\">{{ navItem.label }}</div>\n </div>\n </div>\n @if (navItem.isExpanded) {\n <div class=\"expandable-links\">\n @for (navItemChild of navItem.children; track navItemChild) {\n <ng-container *ngTemplateOutlet=\"typeRendererTemplate; context: { navItem: navItemChild }\"> </ng-container>\n }\n </div>\n }\n</ng-template>\n", styles: [".nav-container{padding:0;height:100%}nav{max-width:100%;margin:0 10px}.nav-item{width:100%;height:48px;font-size:18px;display:flex;flex-direction:column;justify-content:center;color:#003b49;padding:0 15px;position:relative}.nav-item:hover{background-color:#0000000a;transition:background-color .1s ease}.nav-item:active{background-color:#0000001a;transition:background-color .1s ease}.link-header{color:#003b49;text-transform:uppercase;font-weight:700;font-size:12px;margin:20px 0 0 5px}.link-button{display:flex;flex-direction:row;width:100%}.link-button .icon{min-width:20px;margin-right:10px;display:flex;flex-direction:column;justify-content:center}.link-button .text{margin-right:10px;text-align:left;display:flex;flex-direction:row;justify-content:left;text-decoration:capitalize}.expandable-links{display:flex;flex-direction:column;width:100%;padding-left:30px}a:active,a:link,a:visited{color:#003b49!important}a{text-decoration:none}.active-link:before{content:\"\";position:absolute;left:3px;width:5px;height:38px;background-color:#003b49}.active-link{background-color:#0000000a;position:relative}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i3.TitleCasePipe, name: "titlecase" }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "directive", type: HasPermissionDirective, selector: "[cccHasPermission]", inputs: ["cccHasPermission"] }] });
48
+ }
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SidenavComponent, decorators: [{
50
+ type: Component,
51
+ args: [{ selector: 'ccc-sidenav', standalone: true, imports: [
52
+ MatIconModule,
53
+ RouterModule,
54
+ CommonModule,
55
+ MatExpansionModule,
56
+ MatButtonModule,
57
+ MatSidenavModule,
58
+ HasPermissionDirective,
59
+ ], template: "<div class=\"nav-container\">\n <nav>\n @for (navItem of currentNav; track navItem.label) {\n <ng-container *ngTemplateOutlet=\"typeRendererTemplate; context: { navItem: navItem }\"></ng-container>\n }\n </nav>\n</div>\n<ng-template #typeRendererTemplate let-navItem=\"navItem\">\n @switch (navItem.type) {\n @case ('header') {\n <ng-container [ngTemplateOutlet]=\"headerTemplate\" [ngTemplateOutletContext]=\"{ navItem: navItem }\"></ng-container>\n }\n @case ('link') {\n <ng-container [ngTemplateOutlet]=\"linkTemplate\" [ngTemplateOutletContext]=\"{ navItem: navItem }\"></ng-container>\n }\n @case ('expandable') {\n <ng-container\n [ngTemplateOutlet]=\"expandableTemplate\"\n [ngTemplateOutletContext]=\"{ navItem: navItem }\"></ng-container>\n }\n }\n</ng-template>\n<ng-template #headerTemplate let-navItem=\"navItem\">\n <div class=\"link-header\">{{ navItem.label }}</div>\n</ng-template>\n<ng-template #linkTemplate let-navItem=\"navItem\">\n <a [routerLink]=\"navItem.routerLink\" *cccHasPermission=\"navItem.permission\">\n <div class=\"nav-item\" routerLinkActive=\"active-link\">\n <div class=\"link-button\">\n <div class=\"icon\">\n <mat-icon class=\"material-icons-outlined\" [inline]=\"true\">\n {{ navItem.icon }}\n </mat-icon>\n </div>\n <div class=\"text\">\n {{ navItem.label | titlecase }}\n </div>\n </div>\n </div>\n </a>\n</ng-template>\n<ng-template #expandableTemplate let-navItem=\"navItem\">\n <div class=\"nav-item\" aria-hidden=\"true\" (click)=\"navItem.isExpanded = !navItem.isExpanded\">\n <div class=\"link-button\">\n <div class=\"icon\">\n <mat-icon class=\"material-icons-outlined\" [inline]=\"true\">\n {{ navItem.isExpanded ? 'expand_less' : 'expand_more' }}\n </mat-icon>\n </div>\n <div class=\"text\">{{ navItem.label }}</div>\n </div>\n </div>\n @if (navItem.isExpanded) {\n <div class=\"expandable-links\">\n @for (navItemChild of navItem.children; track navItemChild) {\n <ng-container *ngTemplateOutlet=\"typeRendererTemplate; context: { navItem: navItemChild }\"> </ng-container>\n }\n </div>\n }\n</ng-template>\n", styles: [".nav-container{padding:0;height:100%}nav{max-width:100%;margin:0 10px}.nav-item{width:100%;height:48px;font-size:18px;display:flex;flex-direction:column;justify-content:center;color:#003b49;padding:0 15px;position:relative}.nav-item:hover{background-color:#0000000a;transition:background-color .1s ease}.nav-item:active{background-color:#0000001a;transition:background-color .1s ease}.link-header{color:#003b49;text-transform:uppercase;font-weight:700;font-size:12px;margin:20px 0 0 5px}.link-button{display:flex;flex-direction:row;width:100%}.link-button .icon{min-width:20px;margin-right:10px;display:flex;flex-direction:column;justify-content:center}.link-button .text{margin-right:10px;text-align:left;display:flex;flex-direction:row;justify-content:left;text-decoration:capitalize}.expandable-links{display:flex;flex-direction:column;width:100%;padding-left:30px}a:active,a:link,a:visited{color:#003b49!important}a{text-decoration:none}.active-link:before{content:\"\";position:absolute;left:3px;width:5px;height:38px;background-color:#003b49}.active-link{background-color:#0000000a;position:relative}\n"] }]
60
+ }], propDecorators: { navGroups: [{
61
+ type: Input
62
+ }] } });
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZW5hdi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2MtbGliL3NyYy9saWIvdWkvY29tcG9uZW50cy9zaWRlbmF2L3NpZGVuYXYuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NjLWxpYi9zcmMvbGliL3VpL2NvbXBvbmVudHMvc2lkZW5hdi9zaWRlbmF2LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFcEMsT0FBTyxFQUFjLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUUzRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7O0FBOEJuRCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ25CLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUUvQixTQUFTLENBQWE7SUFDL0IsVUFBVSxHQUFjLEVBQUUsQ0FBQztJQUUzQixRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUs7YUFDUCxNQUFNLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDO2FBQzFDLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNqQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLEVBQ0Ysa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUNwQzthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGNBQWMsQ0FBQyxVQUFrQjtRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDaEMsNkVBQTZFO1lBQzdFLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7dUdBbENVLGdCQUFnQjsyRkFBaEIsZ0JBQWdCLDJHQzNDN0IsNHVFQTREQSw2b0NEMUJJLGFBQWEsbUxBQ2IsWUFBWSxnZkFDWixZQUFZLGtRQUNaLGtCQUFrQiw4QkFDbEIsZUFBZSw4QkFDZixnQkFBZ0IsK0JBQ2hCLHNCQUFzQjs7MkZBR2IsZ0JBQWdCO2tCQWY1QixTQUFTOytCQUNFLGFBQWEsY0FHWCxJQUFJLFdBQ1A7d0JBQ1AsYUFBYTt3QkFDYixZQUFZO3dCQUNaLFlBQVk7d0JBQ1osa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsc0JBQXNCO3FCQUN2Qjs4QkFNUSxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRGVzdHJveVJlZiwgaW5qZWN0LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0RXhwYW5zaW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZXhwYW5zaW9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFNpZGVuYXZNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIYXNQZXJtaXNzaW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vYXV0aC9kaXJlY3RpdmVzL2hhcy1wZXJtaXNzaW9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2NvcGUgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9wZXJtaXNzaW9ucyc7XG5pbXBvcnQgeyBDb3JlU3RhdGUgfSBmcm9tICcuLi8uLi9zdGF0ZS9jb3JlLnN0YXRlJztcblxuZXhwb3J0IGludGVyZmFjZSBOYXZJdGVtIHtcbiAgdHlwZTogJ2xpbmsnIHwgJ2hlYWRlcicgfCAnZXhwYW5kYWJsZSc7XG4gIHJvdXRlckxpbms/OiBzdHJpbmdbXTtcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgcGVybWlzc2lvbj86IFBlcm1pc3Npb25TY29wZTtcbiAgY2hpbGRyZW4/OiBOYXZJdGVtW107XG4gIGlzRXhwYW5kZWQ/OiBib29sZWFuO1xuICBhdHRlbnRpb25Db3VudD86IE9ic2VydmFibGU8bnVtYmVyPjtcbn1cblxuZXhwb3J0IHR5cGUgTmF2R3JvdXBzID0gUmVjb3JkPHN0cmluZywgTmF2SXRlbVtdPjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NjLXNpZGVuYXYnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2lkZW5hdi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NpZGVuYXYuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgUm91dGVyTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBNYXRFeHBhbnNpb25Nb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdFNpZGVuYXZNb2R1bGUsXG4gICAgSGFzUGVybWlzc2lvbkRpcmVjdGl2ZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2lkZW5hdkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgc3RvcmUgPSBpbmplY3QoU3RvcmUpO1xuICBwcml2YXRlIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgQElucHV0KCkgbmF2R3JvdXBzPzogTmF2R3JvdXBzO1xuICBjdXJyZW50TmF2OiBOYXZJdGVtW10gPSBbXTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlXG4gICAgICAuc2VsZWN0KENvcmVTdGF0ZS5jdXJyZW50U2lkZW5hdklkZW50aWZpZXIpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChpZGVudGlmaWVyKSA9PiB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50TmF2ID0gdGhpcy51cGRhdGVOYXZJdGVtcyhpZGVudGlmaWVyKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGN1cnJlbnROYXYgYmFzZWQgb24gdGhlIGlkZW50aWZpZXJcbiAgICogQHBhcmFtIGlkZW50aWZpZXJcbiAgICogQHJldHVybnMgTmF2SXRlbVtdXG4gICAqIEBtZW1iZXJvZiBTaWRlbmF2Q29tcG9uZW50XG4gICAqL1xuICB1cGRhdGVOYXZJdGVtcyhpZGVudGlmaWVyOiBzdHJpbmcpOiBOYXZJdGVtW10ge1xuICAgIGlmICghdGhpcy5uYXZHcm91cHMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm5hdkdyb3Vwc1tpZGVudGlmaWVyXSkge1xuICAgICAgLy8gcGljayB0aGUgZmlyc3Qgb25lIGlmIHRoZSBpZGVudGlmaWVyIGlzIG5vdCBmb3VuZCBzbyB3ZSBkb24ndCBicmVhayB0aGUgVUlcbiAgICAgIGlkZW50aWZpZXIgPSBPYmplY3Qua2V5cyh0aGlzLm5hdkdyb3VwcylbMF07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5hdkdyb3Vwc1tpZGVudGlmaWVyXTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm5hdi1jb250YWluZXJcIj5cbiAgPG5hdj5cbiAgICBAZm9yIChuYXZJdGVtIG9mIGN1cnJlbnROYXY7IHRyYWNrIG5hdkl0ZW0ubGFiZWwpIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0eXBlUmVuZGVyZXJUZW1wbGF0ZTsgY29udGV4dDogeyBuYXZJdGVtOiBuYXZJdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gIDwvbmF2PlxuPC9kaXY+XG48bmctdGVtcGxhdGUgI3R5cGVSZW5kZXJlclRlbXBsYXRlIGxldC1uYXZJdGVtPVwibmF2SXRlbVwiPlxuICBAc3dpdGNoIChuYXZJdGVtLnR5cGUpIHtcbiAgICBAY2FzZSAoJ2hlYWRlcicpIHtcbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGVyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBuYXZJdGVtOiBuYXZJdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgQGNhc2UgKCdsaW5rJykge1xuICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJsaW5rVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBuYXZJdGVtOiBuYXZJdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgQGNhc2UgKCdleHBhbmRhYmxlJykge1xuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJleHBhbmRhYmxlVGVtcGxhdGVcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBuYXZJdGVtOiBuYXZJdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gIH1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2hlYWRlclRlbXBsYXRlIGxldC1uYXZJdGVtPVwibmF2SXRlbVwiPlxuICA8ZGl2IGNsYXNzPVwibGluay1oZWFkZXJcIj57eyBuYXZJdGVtLmxhYmVsIH19PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNsaW5rVGVtcGxhdGUgbGV0LW5hdkl0ZW09XCJuYXZJdGVtXCI+XG4gIDxhIFtyb3V0ZXJMaW5rXT1cIm5hdkl0ZW0ucm91dGVyTGlua1wiICpjY2NIYXNQZXJtaXNzaW9uPVwibmF2SXRlbS5wZXJtaXNzaW9uXCI+XG4gICAgPGRpdiBjbGFzcz1cIm5hdi1pdGVtXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZS1saW5rXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibGluay1idXR0b25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImljb25cIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiIFtpbmxpbmVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAge3sgbmF2SXRlbS5pY29uIH19XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0XCI+XG4gICAgICAgICAge3sgbmF2SXRlbS5sYWJlbCB8IHRpdGxlY2FzZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2E+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNleHBhbmRhYmxlVGVtcGxhdGUgbGV0LW5hdkl0ZW09XCJuYXZJdGVtXCI+XG4gIDxkaXYgY2xhc3M9XCJuYXYtaXRlbVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIChjbGljayk9XCJuYXZJdGVtLmlzRXhwYW5kZWQgPSAhbmF2SXRlbS5pc0V4cGFuZGVkXCI+XG4gICAgPGRpdiBjbGFzcz1cImxpbmstYnV0dG9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiaWNvblwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiIFtpbmxpbmVdPVwidHJ1ZVwiPlxuICAgICAgICAgIHt7IG5hdkl0ZW0uaXNFeHBhbmRlZCA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnIH19XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0XCI+e3sgbmF2SXRlbS5sYWJlbCB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgQGlmIChuYXZJdGVtLmlzRXhwYW5kZWQpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZXhwYW5kYWJsZS1saW5rc1wiPlxuICAgICAgQGZvciAobmF2SXRlbUNoaWxkIG9mIG5hdkl0ZW0uY2hpbGRyZW47IHRyYWNrIG5hdkl0ZW1DaGlsZCkge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHlwZVJlbmRlcmVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgbmF2SXRlbTogbmF2SXRlbUNoaWxkIH1cIj4gPC9uZy1jb250YWluZXI+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -0,0 +1,43 @@
1
+ import { inject, Injectable, NgZone } from '@angular/core';
2
+ import { Router } from '@angular/router';
3
+ import { Store } from '@ngxs/store';
4
+ import { catchError, finalize, throwError } from 'rxjs';
5
+ import { CUSTOM_HTTP_REQUEST_OPTIONS } from '../../auth/services/request-options';
6
+ import { BASE_URL } from '../../types/base/tokens';
7
+ import { AlertLevel } from '../../types/notification-message';
8
+ import { ApiInterceptorAction } from '../state/core.actions';
9
+ import * as i0 from "@angular/core";
10
+ export class ApiInterceptor {
11
+ store = inject(Store);
12
+ router = inject(Router);
13
+ ngZone = inject(NgZone);
14
+ baseUrl = inject(BASE_URL);
15
+ intercept(request, next) {
16
+ this.store.dispatch(new ApiInterceptorAction.BeginActivity(request.method + ' ' + request.url));
17
+ return next.handle(request).pipe(catchError((error) => {
18
+ if (error.status === 401) {
19
+ this.ngZone.run(() => {
20
+ this.store.dispatch(new ApiInterceptorAction.SetRedirectUrl(this.baseUrl + this.router.url));
21
+ this.router.navigate(['/login']);
22
+ });
23
+ }
24
+ if (!request.context.get(CUSTOM_HTTP_REQUEST_OPTIONS).suppressGlobalError) {
25
+ const message = error.error?.message ?? error.message ?? error.error;
26
+ this.store.dispatch(new ApiInterceptorAction.PublishError({
27
+ message: message,
28
+ level: AlertLevel.ERROR,
29
+ link: '',
30
+ }));
31
+ }
32
+ return throwError(() => error);
33
+ }), finalize(() => {
34
+ this.store.dispatch(new ApiInterceptorAction.EndActivity(request.method + ' ' + request.url));
35
+ }));
36
+ }
37
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ApiInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
38
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ApiInterceptor });
39
+ }
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ApiInterceptor, decorators: [{
41
+ type: Injectable
42
+ }] });
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NjLWxpYi9zcmMvbGliL3VpL2ludGVyY2VwdG9yL2FwaS5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBRzdELE1BQU0sT0FBTyxjQUFjO0lBQ2pCLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFbkMsU0FBUyxDQUFDLE9BQTZCLEVBQUUsSUFBaUI7UUFDeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFaEcsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDOUIsVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBa0MsRUFBRTtZQUN0RSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzdGLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDbkMsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDMUUsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUNyRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDakIsSUFBSSxvQkFBb0IsQ0FBQyxZQUFZLENBQUM7b0JBQ3BDLE9BQU8sRUFBRSxPQUFPO29CQUNoQixLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7b0JBQ3ZCLElBQUksRUFBRSxFQUFFO2lCQUNULENBQUMsQ0FDSCxDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxFQUNGLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRyxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzt1R0FsQ1UsY0FBYzsyR0FBZCxjQUFjOzsyRkFBZCxjQUFjO2tCQUQxQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBFdmVudCwgSHR0cEhhbmRsZXIsIEh0dHBJbnRlcmNlcHRvciwgSHR0cFJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmluYWxpemUsIE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENVU1RPTV9IVFRQX1JFUVVFU1RfT1BUSU9OUyB9IGZyb20gJy4uLy4uL2F1dGgvc2VydmljZXMvcmVxdWVzdC1vcHRpb25zJztcbmltcG9ydCB7IEJBU0VfVVJMIH0gZnJvbSAnLi4vLi4vdHlwZXMvYmFzZS90b2tlbnMnO1xuaW1wb3J0IHsgQWxlcnRMZXZlbCB9IGZyb20gJy4uLy4uL3R5cGVzL25vdGlmaWNhdGlvbi1tZXNzYWdlJztcbmltcG9ydCB7IEFwaUludGVyY2VwdG9yQWN0aW9uIH0gZnJvbSAnLi4vc3RhdGUvY29yZS5hY3Rpb25zJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFwaUludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcbiAgcHJpdmF0ZSBzdG9yZSA9IGluamVjdChTdG9yZSk7XG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgYmFzZVVybCA9IGluamVjdChCQVNFX1VSTCk7XG5cbiAgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PHVua25vd24+PiB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgQXBpSW50ZXJjZXB0b3JBY3Rpb24uQmVnaW5BY3Rpdml0eShyZXF1ZXN0Lm1ldGhvZCArICcgJyArIHJlcXVlc3QudXJsKSk7XG5cbiAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PHVua25vd24+PiA9PiB7XG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBBcGlJbnRlcmNlcHRvckFjdGlvbi5TZXRSZWRpcmVjdFVybCh0aGlzLmJhc2VVcmwgKyB0aGlzLnJvdXRlci51cmwpKTtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2xvZ2luJ10pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmVxdWVzdC5jb250ZXh0LmdldChDVVNUT01fSFRUUF9SRVFVRVNUX09QVElPTlMpLnN1cHByZXNzR2xvYmFsRXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgPz8gZXJyb3IubWVzc2FnZSA/PyBlcnJvci5lcnJvcjtcbiAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgbmV3IEFwaUludGVyY2VwdG9yQWN0aW9uLlB1Ymxpc2hFcnJvcih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgICAgICAgIGxldmVsOiBBbGVydExldmVsLkVSUk9SLFxuICAgICAgICAgICAgICBsaW5rOiAnJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KSxcbiAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgQXBpSW50ZXJjZXB0b3JBY3Rpb24uRW5kQWN0aXZpdHkocmVxdWVzdC5tZXRob2QgKyAnICcgKyByZXF1ZXN0LnVybCkpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,50 @@
1
+ import { Injectable, signal } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class NotificationService {
4
+ notificationId = 0;
5
+ _notifications = signal([]);
6
+ notifications = this._notifications.asReadonly();
7
+ /**
8
+ * Adds a new global notification.
9
+ * @param notification The notification message to add.
10
+ * @returns The unique ID assigned to the notification.
11
+ */
12
+ addGlobalNotification(notification) {
13
+ const newNotification = {
14
+ ...notification,
15
+ id: this.notificationId++,
16
+ };
17
+ this._notifications.update((current) => [...current, newNotification]);
18
+ return newNotification.id;
19
+ }
20
+ /**
21
+ * Dismisses a global notification by its ID.
22
+ * @param notificationId The ID of the notification to dismiss.
23
+ */
24
+ dismissGlobalNotificationById(notificationId) {
25
+ this._notifications.update((current) => current.filter((notification) => notification.id !== notificationId));
26
+ }
27
+ /**
28
+ * Dismisses a specific global notification.
29
+ * @param notification The notification to dismiss.
30
+ */
31
+ dismissGlobalNotification(notification) {
32
+ this.dismissGlobalNotificationById(notification.id);
33
+ }
34
+ /**
35
+ * Updates an existing notification.
36
+ * @param updatedNotification The notification with updated information.
37
+ */
38
+ updateNotification(updatedNotification) {
39
+ this._notifications.update((current) => current.map((notification) => notification.id === updatedNotification.id ? { ...notification, ...updatedNotification } : notification));
40
+ }
41
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: NotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
42
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: NotificationService, providedIn: 'root' });
43
+ }
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: NotificationService, decorators: [{
45
+ type: Injectable,
46
+ args: [{
47
+ providedIn: 'root',
48
+ }]
49
+ }] });
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2MtbGliL3NyYy9saWIvdWkvc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTW5ELE1BQU0sT0FBTyxtQkFBbUI7SUFDdEIsY0FBYyxHQUFHLENBQUMsQ0FBQztJQUNuQixjQUFjLEdBQUcsTUFBTSxDQUF3QixFQUFFLENBQUMsQ0FBQztJQUMzRCxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUVqRDs7OztPQUlHO0lBQ0gscUJBQXFCLENBQUMsWUFBdUM7UUFDM0QsTUFBTSxlQUFlLEdBQXdCO1lBQzNDLEdBQUcsWUFBWTtZQUNmLEVBQUUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFO1NBQzFCLENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLE9BQU8sZUFBZSxDQUFDLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsNkJBQTZCLENBQUMsY0FBc0I7UUFDbEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssY0FBYyxDQUFDLENBQUMsQ0FBQztJQUNoSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gseUJBQXlCLENBQUMsWUFBaUM7UUFDekQsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsa0JBQWtCLENBQUMsbUJBQXdDO1FBQ3pELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQzNCLFlBQVksQ0FBQyxFQUFFLEtBQUssbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsWUFBWSxFQUFFLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUN4RyxDQUNGLENBQUM7SUFDSixDQUFDO3VHQTdDVSxtQkFBbUI7MkdBQW5CLG1CQUFtQixjQUZsQixNQUFNOzsyRkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDcmVhdGVOb3RpZmljYXRpb25NZXNzYWdlLCBOb3RpZmljYXRpb25NZXNzYWdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvbm90aWZpY2F0aW9uLW1lc3NhZ2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgbm90aWZpY2F0aW9uSWQgPSAwO1xuICBwcml2YXRlIF9ub3RpZmljYXRpb25zID0gc2lnbmFsPE5vdGlmaWNhdGlvbk1lc3NhZ2VbXT4oW10pO1xuICBub3RpZmljYXRpb25zID0gdGhpcy5fbm90aWZpY2F0aW9ucy5hc1JlYWRvbmx5KCk7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgZ2xvYmFsIG5vdGlmaWNhdGlvbi5cbiAgICogQHBhcmFtIG5vdGlmaWNhdGlvbiBUaGUgbm90aWZpY2F0aW9uIG1lc3NhZ2UgdG8gYWRkLlxuICAgKiBAcmV0dXJucyBUaGUgdW5pcXVlIElEIGFzc2lnbmVkIHRvIHRoZSBub3RpZmljYXRpb24uXG4gICAqL1xuICBhZGRHbG9iYWxOb3RpZmljYXRpb24obm90aWZpY2F0aW9uOiBDcmVhdGVOb3RpZmljYXRpb25NZXNzYWdlKTogbnVtYmVyIHtcbiAgICBjb25zdCBuZXdOb3RpZmljYXRpb246IE5vdGlmaWNhdGlvbk1lc3NhZ2UgPSB7XG4gICAgICAuLi5ub3RpZmljYXRpb24sXG4gICAgICBpZDogdGhpcy5ub3RpZmljYXRpb25JZCsrLFxuICAgIH07XG4gICAgdGhpcy5fbm90aWZpY2F0aW9ucy51cGRhdGUoKGN1cnJlbnQpID0+IFsuLi5jdXJyZW50LCBuZXdOb3RpZmljYXRpb25dKTtcbiAgICByZXR1cm4gbmV3Tm90aWZpY2F0aW9uLmlkO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc21pc3NlcyBhIGdsb2JhbCBub3RpZmljYXRpb24gYnkgaXRzIElELlxuICAgKiBAcGFyYW0gbm90aWZpY2F0aW9uSWQgVGhlIElEIG9mIHRoZSBub3RpZmljYXRpb24gdG8gZGlzbWlzcy5cbiAgICovXG4gIGRpc21pc3NHbG9iYWxOb3RpZmljYXRpb25CeUlkKG5vdGlmaWNhdGlvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ub3RpZmljYXRpb25zLnVwZGF0ZSgoY3VycmVudCkgPT4gY3VycmVudC5maWx0ZXIoKG5vdGlmaWNhdGlvbikgPT4gbm90aWZpY2F0aW9uLmlkICE9PSBub3RpZmljYXRpb25JZCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc21pc3NlcyBhIHNwZWNpZmljIGdsb2JhbCBub3RpZmljYXRpb24uXG4gICAqIEBwYXJhbSBub3RpZmljYXRpb24gVGhlIG5vdGlmaWNhdGlvbiB0byBkaXNtaXNzLlxuICAgKi9cbiAgZGlzbWlzc0dsb2JhbE5vdGlmaWNhdGlvbihub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbk1lc3NhZ2UpOiB2b2lkIHtcbiAgICB0aGlzLmRpc21pc3NHbG9iYWxOb3RpZmljYXRpb25CeUlkKG5vdGlmaWNhdGlvbi5pZCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbiBleGlzdGluZyBub3RpZmljYXRpb24uXG4gICAqIEBwYXJhbSB1cGRhdGVkTm90aWZpY2F0aW9uIFRoZSBub3RpZmljYXRpb24gd2l0aCB1cGRhdGVkIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgdXBkYXRlTm90aWZpY2F0aW9uKHVwZGF0ZWROb3RpZmljYXRpb246IE5vdGlmaWNhdGlvbk1lc3NhZ2UpOiB2b2lkIHtcbiAgICB0aGlzLl9ub3RpZmljYXRpb25zLnVwZGF0ZSgoY3VycmVudCkgPT5cbiAgICAgIGN1cnJlbnQubWFwKChub3RpZmljYXRpb24pID0+XG4gICAgICAgIG5vdGlmaWNhdGlvbi5pZCA9PT0gdXBkYXRlZE5vdGlmaWNhdGlvbi5pZCA/IHsgLi4ubm90aWZpY2F0aW9uLCAuLi51cGRhdGVkTm90aWZpY2F0aW9uIH0gOiBub3RpZmljYXRpb24sXG4gICAgICApLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,49 @@
1
+ /* eslint-disable @typescript-eslint/no-namespace */
2
+ // no-namespace rule is disabled because action hygiene prevents import pollution
3
+ export var ApiInterceptorAction;
4
+ (function (ApiInterceptorAction) {
5
+ class BeginActivity {
6
+ process;
7
+ static type = '[ApiInterceptor] Add Loading Activity';
8
+ constructor(process) {
9
+ this.process = process;
10
+ }
11
+ }
12
+ ApiInterceptorAction.BeginActivity = BeginActivity;
13
+ class EndActivity {
14
+ process;
15
+ static type = '[ApiInterceptor] Remove Loading Activity';
16
+ constructor(process) {
17
+ this.process = process;
18
+ }
19
+ }
20
+ ApiInterceptorAction.EndActivity = EndActivity;
21
+ class PublishError {
22
+ message;
23
+ static type = '[ApiInterceptor] Publish Error';
24
+ constructor(message) {
25
+ this.message = message;
26
+ }
27
+ }
28
+ ApiInterceptorAction.PublishError = PublishError;
29
+ class SetRedirectUrl {
30
+ redirectUrl;
31
+ static type = '[ApiInterceptor] Set Redirect Url';
32
+ constructor(redirectUrl) {
33
+ this.redirectUrl = redirectUrl;
34
+ }
35
+ }
36
+ ApiInterceptorAction.SetRedirectUrl = SetRedirectUrl;
37
+ })(ApiInterceptorAction || (ApiInterceptorAction = {}));
38
+ export var HeaderAction;
39
+ (function (HeaderAction) {
40
+ class ToggleSidenav {
41
+ static type = '[Header] Toggle Sidenav';
42
+ }
43
+ HeaderAction.ToggleSidenav = ToggleSidenav;
44
+ class Logout {
45
+ static type = '[Header] User Logout';
46
+ }
47
+ HeaderAction.Logout = Logout;
48
+ })(HeaderAction || (HeaderAction = {}));
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5hY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NjLWxpYi9zcmMvbGliL3VpL3N0YXRlL2NvcmUuYWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvREFBb0Q7QUFDcEQsaUZBQWlGO0FBSWpGLE1BQU0sS0FBVyxvQkFBb0IsQ0FpQnBDO0FBakJELFdBQWlCLG9CQUFvQjtJQUNuQyxNQUFhLGFBQWE7UUFFTDtRQURuQixNQUFNLENBQVUsSUFBSSxHQUFHLHVDQUF1QyxDQUFDO1FBQy9ELFlBQW1CLE9BQWU7WUFBZixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQUcsQ0FBQzs7SUFGM0Isa0NBQWEsZ0JBR3pCLENBQUE7SUFDRCxNQUFhLFdBQVc7UUFFSDtRQURuQixNQUFNLENBQVUsSUFBSSxHQUFHLDBDQUEwQyxDQUFDO1FBQ2xFLFlBQW1CLE9BQWU7WUFBZixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQUcsQ0FBQzs7SUFGM0IsZ0NBQVcsY0FHdkIsQ0FBQTtJQUNELE1BQWEsWUFBWTtRQUVKO1FBRG5CLE1BQU0sQ0FBVSxJQUFJLEdBQUcsZ0NBQWdDLENBQUM7UUFDeEQsWUFBbUIsT0FBa0M7WUFBbEMsWUFBTyxHQUFQLE9BQU8sQ0FBMkI7UUFBRyxDQUFDOztJQUY5QyxpQ0FBWSxlQUd4QixDQUFBO0lBQ0QsTUFBYSxjQUFjO1FBRU47UUFEbkIsTUFBTSxDQUFVLElBQUksR0FBRyxtQ0FBbUMsQ0FBQztRQUMzRCxZQUFtQixXQUFtQjtZQUFuQixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUFHLENBQUM7O0lBRi9CLG1DQUFjLGlCQUcxQixDQUFBO0FBQ0gsQ0FBQyxFQWpCZ0Isb0JBQW9CLEtBQXBCLG9CQUFvQixRQWlCcEM7QUFFRCxNQUFNLEtBQVcsWUFBWSxDQVE1QjtBQVJELFdBQWlCLFlBQVk7SUFDM0IsTUFBYSxhQUFhO1FBQ3hCLE1BQU0sQ0FBVSxJQUFJLEdBQUcseUJBQXlCLENBQUM7O0lBRHRDLDBCQUFhLGdCQUV6QixDQUFBO0lBRUQsTUFBYSxNQUFNO1FBQ2pCLE1BQU0sQ0FBVSxJQUFJLEdBQUcsc0JBQXNCLENBQUM7O0lBRG5DLG1CQUFNLFNBRWxCLENBQUE7QUFDSCxDQUFDLEVBUmdCLFlBQVksS0FBWixZQUFZLFFBUTVCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZSAqL1xuLy8gbm8tbmFtZXNwYWNlIHJ1bGUgaXMgZGlzYWJsZWQgYmVjYXVzZSBhY3Rpb24gaHlnaWVuZSBwcmV2ZW50cyBpbXBvcnQgcG9sbHV0aW9uXG5cbmltcG9ydCB7IENyZWF0ZU5vdGlmaWNhdGlvbk1lc3NhZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9ub3RpZmljYXRpb24tbWVzc2FnZSc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQXBpSW50ZXJjZXB0b3JBY3Rpb24ge1xuICBleHBvcnQgY2xhc3MgQmVnaW5BY3Rpdml0eSB7XG4gICAgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW0FwaUludGVyY2VwdG9yXSBBZGQgTG9hZGluZyBBY3Rpdml0eSc7XG4gICAgY29uc3RydWN0b3IocHVibGljIHByb2Nlc3M6IHN0cmluZykge31cbiAgfVxuICBleHBvcnQgY2xhc3MgRW5kQWN0aXZpdHkge1xuICAgIHN0YXRpYyByZWFkb25seSB0eXBlID0gJ1tBcGlJbnRlcmNlcHRvcl0gUmVtb3ZlIExvYWRpbmcgQWN0aXZpdHknO1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBwcm9jZXNzOiBzdHJpbmcpIHt9XG4gIH1cbiAgZXhwb3J0IGNsYXNzIFB1Ymxpc2hFcnJvciB7XG4gICAgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW0FwaUludGVyY2VwdG9yXSBQdWJsaXNoIEVycm9yJztcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbWVzc2FnZTogQ3JlYXRlTm90aWZpY2F0aW9uTWVzc2FnZSkge31cbiAgfVxuICBleHBvcnQgY2xhc3MgU2V0UmVkaXJlY3RVcmwge1xuICAgIHN0YXRpYyByZWFkb25seSB0eXBlID0gJ1tBcGlJbnRlcmNlcHRvcl0gU2V0IFJlZGlyZWN0IFVybCc7XG4gICAgY29uc3RydWN0b3IocHVibGljIHJlZGlyZWN0VXJsOiBzdHJpbmcpIHt9XG4gIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBIZWFkZXJBY3Rpb24ge1xuICBleHBvcnQgY2xhc3MgVG9nZ2xlU2lkZW5hdiB7XG4gICAgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW0hlYWRlcl0gVG9nZ2xlIFNpZGVuYXYnO1xuICB9XG5cbiAgZXhwb3J0IGNsYXNzIExvZ291dCB7XG4gICAgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW0hlYWRlcl0gVXNlciBMb2dvdXQnO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,95 @@
1
+ import { __decorate } from "tslib";
2
+ import { Injectable, inject } from '@angular/core';
3
+ import { Action, Selector, State } from '@ngxs/store';
4
+ import { patch } from '@ngxs/store/operators';
5
+ import { AppAction, LoginAction } from '../../auth/state/auth.actions';
6
+ import { NotificationService } from '../services/notification.service';
7
+ import { ApiInterceptorAction, HeaderAction } from './core.actions';
8
+ import * as i0 from "@angular/core";
9
+ const initState = {
10
+ loading: [],
11
+ sidenavOpened: true,
12
+ currentSidenavIdentifier: '',
13
+ };
14
+ let CoreState = class CoreState {
15
+ notifications = inject(NotificationService);
16
+ static sidenavOpened(state) {
17
+ return state?.sidenavOpened;
18
+ }
19
+ static isLoading(state) {
20
+ return state.loading.length > 0;
21
+ }
22
+ static currentSidenavIdentifier(state) {
23
+ return state.currentSidenavIdentifier;
24
+ }
25
+ setNavIdentifier(ctx, action) {
26
+ ctx.setState(patch({
27
+ currentSidenavIdentifier: action.identifier,
28
+ }));
29
+ }
30
+ publishError(ctx, action) {
31
+ this.notifications.addGlobalNotification(action.message);
32
+ }
33
+ beginActivity(ctx, action) {
34
+ const state = ctx.getState();
35
+ ctx.patchState({
36
+ loading: [action.process, ...state.loading],
37
+ });
38
+ return ctx.getState();
39
+ }
40
+ endActivity(ctx, action) {
41
+ const loading = ctx.getState().loading;
42
+ // There can be multiple activities running with the same process signature
43
+ const index = loading.findIndex((activity) => activity === action.process);
44
+ if (index !== -1) {
45
+ const newLoading = [...loading.slice(0, index), ...loading.slice(index + 1)];
46
+ ctx.patchState({
47
+ loading: newLoading,
48
+ });
49
+ return ctx.getState();
50
+ }
51
+ return null;
52
+ }
53
+ toggleSidenav(ctx) {
54
+ ctx.setState(patch({
55
+ sidenavOpened: !ctx.getState().sidenavOpened,
56
+ }));
57
+ }
58
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CoreState, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
59
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CoreState });
60
+ };
61
+ __decorate([
62
+ Action([AppAction.SetNavIdentifier])
63
+ ], CoreState.prototype, "setNavIdentifier", null);
64
+ __decorate([
65
+ Action([ApiInterceptorAction.PublishError, LoginAction.PublishError])
66
+ ], CoreState.prototype, "publishError", null);
67
+ __decorate([
68
+ Action([ApiInterceptorAction.BeginActivity])
69
+ ], CoreState.prototype, "beginActivity", null);
70
+ __decorate([
71
+ Action([ApiInterceptorAction.EndActivity])
72
+ ], CoreState.prototype, "endActivity", null);
73
+ __decorate([
74
+ Action([HeaderAction.ToggleSidenav])
75
+ ], CoreState.prototype, "toggleSidenav", null);
76
+ __decorate([
77
+ Selector()
78
+ ], CoreState, "sidenavOpened", null);
79
+ __decorate([
80
+ Selector()
81
+ ], CoreState, "isLoading", null);
82
+ __decorate([
83
+ Selector()
84
+ ], CoreState, "currentSidenavIdentifier", null);
85
+ CoreState = __decorate([
86
+ State({
87
+ name: 'coreState',
88
+ defaults: initState,
89
+ })
90
+ ], CoreState);
91
+ export { CoreState };
92
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CoreState, decorators: [{
93
+ type: Injectable
94
+ }], propDecorators: { setNavIdentifier: [], publishError: [], beginActivity: [], endActivity: [], toggleSidenav: [] } });
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjYy1saWIvc3JjL2xpYi91aS9zdGF0ZS9jb3JlLnN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWdCLE1BQU0sYUFBYSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFRcEUsTUFBTSxTQUFTLEdBQW1CO0lBQ2hDLE9BQU8sRUFBRSxFQUFFO0lBQ1gsYUFBYSxFQUFFLElBQUk7SUFDbkIsd0JBQXdCLEVBQUUsRUFBRTtDQUM3QixDQUFDO0FBT0ssSUFBTSxTQUFTLEdBQWYsTUFBTSxTQUFTO0lBQ1osYUFBYSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRzdDLEFBQVAsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFxQjtRQUN4QyxPQUFPLEtBQUssRUFBRSxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUdNLEFBQVAsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFxQjtRQUNwQyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBR00sQUFBUCxNQUFNLENBQUMsd0JBQXdCLENBQUMsS0FBcUI7UUFDbkQsT0FBTyxLQUFLLENBQUMsd0JBQXdCLENBQUM7SUFDeEMsQ0FBQztJQUdELGdCQUFnQixDQUFDLEdBQWlDLEVBQUUsTUFBa0M7UUFDcEYsR0FBRyxDQUFDLFFBQVEsQ0FDVixLQUFLLENBQUM7WUFDSix3QkFBd0IsRUFBRSxNQUFNLENBQUMsVUFBVTtTQUM1QyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFHRCxZQUFZLENBQUMsR0FBaUMsRUFBRSxNQUE4QztRQUM1RixJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBR0QsYUFBYSxDQUFDLEdBQWlDLEVBQUUsTUFBMkI7UUFDMUUsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdCLEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDYixPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztTQUM1QyxDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBR0QsV0FBVyxDQUFDLEdBQWlDLEVBQUUsTUFBMkI7UUFDeEUsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQztRQUN2QywyRUFBMkU7UUFDM0UsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzRSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0UsR0FBRyxDQUFDLFVBQVUsQ0FBQztnQkFDYixPQUFPLEVBQUUsVUFBVTthQUNwQixDQUFDLENBQUM7WUFDSCxPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBR0QsYUFBYSxDQUFDLEdBQWlDO1FBQzdDLEdBQUcsQ0FBQyxRQUFRLENBQ1YsS0FBSyxDQUFDO1lBQ0osYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLGFBQWE7U0FDN0MsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO3VHQS9EVSxTQUFTOzJHQUFULFNBQVM7O0FBbUJwQjtJQURDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2lEQU9wQztBQUdEO0lBREMsTUFBTSxDQUFDLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQzs2Q0FHckU7QUFHRDtJQURDLE1BQU0sQ0FBQyxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxDQUFDOzhDQU81QztBQUdEO0lBREMsTUFBTSxDQUFDLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUM7NENBYTFDO0FBR0Q7SUFEQyxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7OENBT3BDO0FBM0RNO0lBRE4sUUFBUSxFQUFFO29DQUdWO0FBR007SUFETixRQUFRLEVBQUU7Z0NBR1Y7QUFHTTtJQUROLFFBQVEsRUFBRTsrQ0FHVjtBQWhCVSxTQUFTO0lBTHJCLEtBQUssQ0FBaUI7UUFDckIsSUFBSSxFQUFFLFdBQVc7UUFDakIsUUFBUSxFQUFFLFNBQVM7S0FDcEIsQ0FBQztHQUVXLFNBQVMsQ0FnRXJCOzsyRkFoRVksU0FBUztrQkFEckIsVUFBVTs4QkFvQlQsZ0JBQWdCLE1BU2hCLFlBQVksTUFLWixhQUFhLE1BU2IsV0FBVyxNQWVYLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGlvbiwgU2VsZWN0b3IsIFN0YXRlLCBTdGF0ZUNvbnRleHQgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBwYXRjaCB9IGZyb20gJ0BuZ3hzL3N0b3JlL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBcHBBY3Rpb24sIExvZ2luQWN0aW9uIH0gZnJvbSAnLi4vLi4vYXV0aC9zdGF0ZS9hdXRoLmFjdGlvbnMnO1xuaW1wb3J0IHsgQ3JlYXRlTm90aWZpY2F0aW9uTWVzc2FnZSB9IGZyb20gJy4uLy4uL3R5cGVzL25vdGlmaWNhdGlvbi1tZXNzYWdlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBcGlJbnRlcmNlcHRvckFjdGlvbiwgSGVhZGVyQWN0aW9uIH0gZnJvbSAnLi9jb3JlLmFjdGlvbnMnO1xuXG5pbnRlcmZhY2UgQ29yZVN0YXRlTW9kZWwge1xuICBsb2FkaW5nOiBzdHJpbmdbXTtcbiAgc2lkZW5hdk9wZW5lZDogYm9vbGVhbjtcbiAgY3VycmVudFNpZGVuYXZJZGVudGlmaWVyOiBzdHJpbmc7XG59XG5cbmNvbnN0IGluaXRTdGF0ZTogQ29yZVN0YXRlTW9kZWwgPSB7XG4gIGxvYWRpbmc6IFtdLFxuICBzaWRlbmF2T3BlbmVkOiB0cnVlLFxuICBjdXJyZW50U2lkZW5hdklkZW50aWZpZXI6ICcnLFxufTtcblxuQFN0YXRlPENvcmVTdGF0ZU1vZGVsPih7XG4gIG5hbWU6ICdjb3JlU3RhdGUnLFxuICBkZWZhdWx0czogaW5pdFN0YXRlLFxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb3JlU3RhdGUge1xuICBwcml2YXRlIG5vdGlmaWNhdGlvbnMgPSBpbmplY3QoTm90aWZpY2F0aW9uU2VydmljZSk7XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIHNpZGVuYXZPcGVuZWQoc3RhdGU6IENvcmVTdGF0ZU1vZGVsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0YXRlPy5zaWRlbmF2T3BlbmVkO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGlzTG9hZGluZyhzdGF0ZTogQ29yZVN0YXRlTW9kZWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3RhdGUubG9hZGluZy5sZW5ndGggPiAwO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGN1cnJlbnRTaWRlbmF2SWRlbnRpZmllcihzdGF0ZTogQ29yZVN0YXRlTW9kZWwpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdGF0ZS5jdXJyZW50U2lkZW5hdklkZW50aWZpZXI7XG4gIH1cblxuICBAQWN0aW9uKFtBcHBBY3Rpb24uU2V0TmF2SWRlbnRpZmllcl0pXG4gIHNldE5hdklkZW50aWZpZXIoY3R4OiBTdGF0ZUNvbnRleHQ8Q29yZVN0YXRlTW9kZWw+LCBhY3Rpb246IEFwcEFjdGlvbi5TZXROYXZJZGVudGlmaWVyKTogdm9pZCB7XG4gICAgY3R4LnNldFN0YXRlKFxuICAgICAgcGF0Y2goe1xuICAgICAgICBjdXJyZW50U2lkZW5hdklkZW50aWZpZXI6IGFjdGlvbi5pZGVudGlmaWVyLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIEBBY3Rpb24oW0FwaUludGVyY2VwdG9yQWN0aW9uLlB1Ymxpc2hFcnJvciwgTG9naW5BY3Rpb24uUHVibGlzaEVycm9yXSlcbiAgcHVibGlzaEVycm9yKGN0eDogU3RhdGVDb250ZXh0PENvcmVTdGF0ZU1vZGVsPiwgYWN0aW9uOiB7IG1lc3NhZ2U6IENyZWF0ZU5vdGlmaWNhdGlvbk1lc3NhZ2UgfSk6IHZvaWQge1xuICAgIHRoaXMubm90aWZpY2F0aW9ucy5hZGRHbG9iYWxOb3RpZmljYXRpb24oYWN0aW9uLm1lc3NhZ2UpO1xuICB9XG5cbiAgQEFjdGlvbihbQXBpSW50ZXJjZXB0b3JBY3Rpb24uQmVnaW5BY3Rpdml0eV0pXG4gIGJlZ2luQWN0aXZpdHkoY3R4OiBTdGF0ZUNvbnRleHQ8Q29yZVN0YXRlTW9kZWw+LCBhY3Rpb246IHsgcHJvY2Vzczogc3RyaW5nIH0pOiBDb3JlU3RhdGVNb2RlbCB7XG4gICAgY29uc3Qgc3RhdGUgPSBjdHguZ2V0U3RhdGUoKTtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBsb2FkaW5nOiBbYWN0aW9uLnByb2Nlc3MsIC4uLnN0YXRlLmxvYWRpbmddLFxuICAgIH0pO1xuICAgIHJldHVybiBjdHguZ2V0U3RhdGUoKTtcbiAgfVxuXG4gIEBBY3Rpb24oW0FwaUludGVyY2VwdG9yQWN0aW9uLkVuZEFjdGl2aXR5XSlcbiAgZW5kQWN0aXZpdHkoY3R4OiBTdGF0ZUNvbnRleHQ8Q29yZVN0YXRlTW9kZWw+LCBhY3Rpb246IHsgcHJvY2Vzczogc3RyaW5nIH0pOiBDb3JlU3RhdGVNb2RlbCB8IG51bGwge1xuICAgIGNvbnN0IGxvYWRpbmcgPSBjdHguZ2V0U3RhdGUoKS5sb2FkaW5nO1xuICAgIC8vIFRoZXJlIGNhbiBiZSBtdWx0aXBsZSBhY3Rpdml0aWVzIHJ1bm5pbmcgd2l0aCB0aGUgc2FtZSBwcm9jZXNzIHNpZ25hdHVyZVxuICAgIGNvbnN0IGluZGV4ID0gbG9hZGluZy5maW5kSW5kZXgoKGFjdGl2aXR5KSA9PiBhY3Rpdml0eSA9PT0gYWN0aW9uLnByb2Nlc3MpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IG5ld0xvYWRpbmcgPSBbLi4ubG9hZGluZy5zbGljZSgwLCBpbmRleCksIC4uLmxvYWRpbmcuc2xpY2UoaW5kZXggKyAxKV07XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIGxvYWRpbmc6IG5ld0xvYWRpbmcsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjdHguZ2V0U3RhdGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBAQWN0aW9uKFtIZWFkZXJBY3Rpb24uVG9nZ2xlU2lkZW5hdl0pXG4gIHRvZ2dsZVNpZGVuYXYoY3R4OiBTdGF0ZUNvbnRleHQ8Q29yZVN0YXRlTW9kZWw+KTogdm9pZCB7XG4gICAgY3R4LnNldFN0YXRlKFxuICAgICAgcGF0Y2goe1xuICAgICAgICBzaWRlbmF2T3BlbmVkOiAhY3R4LmdldFN0YXRlKCkuc2lkZW5hdk9wZW5lZCxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,34 @@
1
+ /*
2
+ * Public API Surface of ccc-lib
3
+ */
4
+ // Auth directives
5
+ export * from './lib/auth/directives/has-permission.directive';
6
+ // Auth forms
7
+ export * from './lib/auth/forms/ccc-field/ccc-field.component';
8
+ export * from './lib/auth/forms/form-helpers';
9
+ // Auth guards
10
+ export * from './lib/auth/guards/authentication.guard';
11
+ export * from './lib/auth/guards/authorization.guard';
12
+ // Auth services
13
+ export * from './lib/auth/services/auth.service';
14
+ export * from './lib/auth/services/request-options';
15
+ // Auth state
16
+ export * from './lib/auth/state/auth.actions';
17
+ export * from './lib/auth/state/auth.state';
18
+ // Types tokens
19
+ export * from './lib/types/base/tokens';
20
+ // Types
21
+ export * from './lib/types/notification-message';
22
+ export * from './lib/types/permissions';
23
+ export * from './lib/types/session-info';
24
+ // Ui components
25
+ export * from './lib/ui/components/alert/alert.component';
26
+ export * from './lib/ui/components/sidenav/sidenav.component';
27
+ // Ui interceptor
28
+ export * from './lib/ui/interceptor/api.interceptor';
29
+ // Ui services
30
+ export * from './lib/ui/services/notification.service';
31
+ // Ui state
32
+ export * from './lib/ui/state/core.actions';
33
+ export * from './lib/ui/state/core.state';
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NjYy1saWIvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxrQkFBa0I7QUFDbEIsY0FBYyxnREFBZ0QsQ0FBQztBQUUvRCxhQUFhO0FBQ2IsY0FBYyxnREFBZ0QsQ0FBQztBQUMvRCxjQUFjLCtCQUErQixDQUFDO0FBRTlDLGNBQWM7QUFDZCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsdUNBQXVDLENBQUM7QUFFdEQsZ0JBQWdCO0FBQ2hCLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxxQ0FBcUMsQ0FBQztBQUVwRCxhQUFhO0FBQ2IsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDZCQUE2QixDQUFDO0FBRTVDLGVBQWU7QUFDZixjQUFjLHlCQUF5QixDQUFDO0FBRXhDLFFBQVE7QUFDUixjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYywwQkFBMEIsQ0FBQztBQUV6QyxnQkFBZ0I7QUFDaEIsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLCtDQUErQyxDQUFDO0FBRTlELGlCQUFpQjtBQUNqQixjQUFjLHNDQUFzQyxDQUFDO0FBRXJELGNBQWM7QUFDZCxjQUFjLHdDQUF3QyxDQUFDO0FBRXZELFdBQVc7QUFDWCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGNjYy1saWJcbiAqL1xuXG4vLyBBdXRoIGRpcmVjdGl2ZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F1dGgvZGlyZWN0aXZlcy9oYXMtcGVybWlzc2lvbi5kaXJlY3RpdmUnO1xuXG4vLyBBdXRoIGZvcm1zXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdXRoL2Zvcm1zL2NjYy1maWVsZC9jY2MtZmllbGQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F1dGgvZm9ybXMvZm9ybS1oZWxwZXJzJztcblxuLy8gQXV0aCBndWFyZHNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F1dGgvZ3VhcmRzL2F1dGhlbnRpY2F0aW9uLmd1YXJkJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F1dGgvZ3VhcmRzL2F1dGhvcml6YXRpb24uZ3VhcmQnO1xuXG4vLyBBdXRoIHNlcnZpY2VzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdXRoL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdXRoL3NlcnZpY2VzL3JlcXVlc3Qtb3B0aW9ucyc7XG5cbi8vIEF1dGggc3RhdGVcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F1dGgvc3RhdGUvYXV0aC5hY3Rpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F1dGgvc3RhdGUvYXV0aC5zdGF0ZSc7XG5cbi8vIFR5cGVzIHRva2Vuc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdHlwZXMvYmFzZS90b2tlbnMnO1xuXG4vLyBUeXBlc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdHlwZXMvbm90aWZpY2F0aW9uLW1lc3NhZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdHlwZXMvcGVybWlzc2lvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdHlwZXMvc2Vzc2lvbi1pbmZvJztcblxuLy8gVWkgY29tcG9uZW50c1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdWkvY29tcG9uZW50cy9hbGVydC9hbGVydC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdWkvY29tcG9uZW50cy9zaWRlbmF2L3NpZGVuYXYuY29tcG9uZW50JztcblxuLy8gVWkgaW50ZXJjZXB0b3JcbmV4cG9ydCAqIGZyb20gJy4vbGliL3VpL2ludGVyY2VwdG9yL2FwaS5pbnRlcmNlcHRvcic7XG5cbi8vIFVpIHNlcnZpY2VzXG5leHBvcnQgKiBmcm9tICcuL2xpYi91aS9zZXJ2aWNlcy9ub3RpZmljYXRpb24uc2VydmljZSc7XG5cbi8vIFVpIHN0YXRlXG5leHBvcnQgKiBmcm9tICcuL2xpYi91aS9zdGF0ZS9jb3JlLmFjdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdWkvc3RhdGUvY29yZS5zdGF0ZSc7XG4iXX0=