@unifylib/ui-lib 1.1.28 → 1.1.30

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.
@@ -0,0 +1,129 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { MatIconModule } from '@angular/material/icon';
4
+ import { MatCheckboxModule } from '@angular/material/checkbox';
5
+ import { TranslateModule } from '@ngx-translate/core';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common";
8
+ import * as i2 from "@angular/material/icon";
9
+ import * as i3 from "@angular/material/checkbox";
10
+ import * as i4 from "@ngx-translate/core";
11
+ export class PermissionMatrixComponent {
12
+ constructor() {
13
+ this.items = [];
14
+ this.permissions = [
15
+ { key: 'view', labelKey: 'GROUPS.view' },
16
+ { key: 'edit', labelKey: 'GROUPS.edit' },
17
+ { key: 'completeAndTerminate', labelKey: 'GROUPS.completeAndTerminate', combinedKeys: ['completePermission', 'terminatePermission'] }
18
+ ];
19
+ this.titleKey = 'GROUPS.groupMatrix';
20
+ this.selectAllLabelKey = 'GROUPS.selectAll';
21
+ this.expandAllLabelKey = 'GROUPS.expandAll';
22
+ this.collapseAllLabelKey = 'GROUPS.collapseAll';
23
+ this.readonly = false;
24
+ this.itemsChange = new EventEmitter();
25
+ this.permissionChange = new EventEmitter();
26
+ }
27
+ areAllExpanded() {
28
+ return this.items.length > 0 && this.items.every(item => item.expanded);
29
+ }
30
+ expandAllGroups() {
31
+ const expand = !this.areAllExpanded();
32
+ this.items.forEach(item => item.expanded = expand);
33
+ this.emitItemsChange();
34
+ }
35
+ toggleGroup(item) {
36
+ item.expanded = !item.expanded;
37
+ this.emitItemsChange();
38
+ }
39
+ isAllPermissionsSelected(item) {
40
+ return this.permissions.every(perm => {
41
+ if (perm.combinedKeys) {
42
+ return perm.combinedKeys.every(key => item.permissions[key]);
43
+ }
44
+ return item.permissions[perm.key];
45
+ });
46
+ }
47
+ toggleSelectAll(item) {
48
+ if (this.readonly)
49
+ return;
50
+ const allSelected = this.isAllPermissionsSelected(item);
51
+ const newValue = !allSelected;
52
+ this.permissions.forEach(perm => {
53
+ if (perm.combinedKeys) {
54
+ perm.combinedKeys.forEach(key => {
55
+ item.permissions[key] = newValue;
56
+ });
57
+ }
58
+ else {
59
+ item.permissions[perm.key] = newValue;
60
+ }
61
+ });
62
+ this.emitItemsChange();
63
+ }
64
+ isPermissionSelected(item, permission) {
65
+ if (permission.combinedKeys) {
66
+ return permission.combinedKeys.every(key => item.permissions[key]);
67
+ }
68
+ return item.permissions[permission.key];
69
+ }
70
+ togglePermission(item, permission) {
71
+ if (this.readonly)
72
+ return;
73
+ const currentValue = this.isPermissionSelected(item, permission);
74
+ const newValue = !currentValue;
75
+ if (permission.combinedKeys) {
76
+ permission.combinedKeys.forEach(key => {
77
+ item.permissions[key] = newValue;
78
+ });
79
+ }
80
+ else {
81
+ item.permissions[permission.key] = newValue;
82
+ }
83
+ this.permissionChange.emit({
84
+ item,
85
+ permissionKey: permission.key,
86
+ newValue
87
+ });
88
+ this.emitItemsChange();
89
+ }
90
+ emitItemsChange() {
91
+ this.itemsChange.emit([...this.items]);
92
+ }
93
+ trackByItem(index, item) {
94
+ return item.id ?? index;
95
+ }
96
+ trackByPermission(index, permission) {
97
+ return permission.key;
98
+ }
99
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PermissionMatrixComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
100
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PermissionMatrixComponent, isStandalone: true, selector: "lib-permission-matrix", inputs: { items: "items", permissions: "permissions", titleKey: "titleKey", selectAllLabelKey: "selectAllLabelKey", expandAllLabelKey: "expandAllLabelKey", collapseAllLabelKey: "collapseAllLabelKey", readonly: "readonly" }, outputs: { itemsChange: "itemsChange", permissionChange: "permissionChange" }, ngImport: i0, template: "<div class=\"permission-matrix-card\">\r\n <div class=\"matrix-header\">\r\n <h3 class=\"matrix-title\">{{ titleKey | translate }}</h3>\r\n <button\r\n class=\"expand-all-btn\"\r\n type=\"button\"\r\n (click)=\"expandAllGroups()\"\r\n [attr.aria-label]=\"(areAllExpanded() ? collapseAllLabelKey : expandAllLabelKey) | translate\">\r\n <mat-icon class=\"expand-icon\" [class.rotated]=\"areAllExpanded()\">unfold_more</mat-icon>\r\n <span>{{ (areAllExpanded() ? collapseAllLabelKey : expandAllLabelKey) | translate }}</span>\r\n </button>\r\n </div>\r\n\r\n <div class=\"matrix-divider\"></div>\r\n\r\n <div class=\"matrix-accordion-list\">\r\n <div\r\n *ngFor=\"let item of items; trackBy: trackByItem\"\r\n class=\"matrix-accordion-item\"\r\n [class.expanded]=\"item.expanded\">\r\n\r\n <!-- Accordion Header -->\r\n <div\r\n class=\"accordion-header\"\r\n (click)=\"toggleGroup(item)\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n [attr.aria-expanded]=\"item.expanded\"\r\n (keydown.enter)=\"toggleGroup(item)\"\r\n (keydown.space)=\"toggleGroup(item); $event.preventDefault()\">\r\n <div class=\"accordion-content\">\r\n <h4 class=\"accordion-title\">{{ item.title }}</h4>\r\n <p *ngIf=\"item.description\" class=\"accordion-description\">{{ item.description }}</p>\r\n </div>\r\n <mat-icon class=\"accordion-icon\" [class.rotated]=\"item.expanded\">keyboard_arrow_down</mat-icon>\r\n </div>\r\n\r\n <!-- Accordion Body -->\r\n <ng-container *ngIf=\"item.expanded\">\r\n <div class=\"accordion-divider\"></div>\r\n <div class=\"accordion-body\">\r\n <!-- Permission Header Row -->\r\n <div class=\"permission-header-row\">\r\n <span class=\"permission-group-label\">{{ item.title }}</span>\r\n <div class=\"permission-separator\"></div>\r\n <div class=\"select-all-container\" (click)=\"$event.stopPropagation()\">\r\n <span class=\"select-all-label\">{{ selectAllLabelKey | translate }}</span>\r\n <mat-checkbox\r\n [checked]=\"isAllPermissionsSelected(item)\"\r\n [disabled]=\"readonly\"\r\n (change)=\"toggleSelectAll(item)\"\r\n color=\"primary\"\r\n class=\"select-all-checkbox\">\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n\r\n <!-- Permissions Row -->\r\n <div class=\"permissions-row\" (click)=\"$event.stopPropagation()\">\r\n <div\r\n *ngFor=\"let permission of permissions; trackBy: trackByPermission\"\r\n class=\"permission-item\">\r\n <mat-checkbox\r\n [checked]=\"isPermissionSelected(item, permission)\"\r\n [disabled]=\"readonly\"\r\n (change)=\"togglePermission(item, permission)\"\r\n color=\"primary\">\r\n </mat-checkbox>\r\n <span class=\"permission-label\">{{ permission.labelKey | translate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>", styles: [".permission-matrix-card{background:#fff;border:1px solid #f0eeee;border-radius:8px;padding:16px;display:flex;flex-direction:column;gap:20px}.matrix-header{display:flex;align-items:center;justify-content:space-between;min-height:27px}.matrix-title{font-family:lusail-bold,sans-serif;font-weight:700;font-size:24px;line-height:1.2;color:#000;margin:0}.expand-all-btn{display:flex;align-items:center;gap:4px;background:transparent;border:none;cursor:pointer;padding:0;font-family:lusail-regular,sans-serif;font-weight:400;font-size:20px;line-height:1.2;color:#000;transition:all .2s ease}.expand-all-btn:hover{color:#0d4261}.expand-all-btn:focus-visible{outline:2px solid #0d4261;outline-offset:2px;border-radius:4px}.expand-icon{font-size:24px;width:24px;height:24px;color:#000;transition:transform .3s ease}.expand-icon.rotated{transform:rotate(180deg)}.matrix-divider{height:2px;background-color:#0d4261;width:100%}.matrix-accordion-list{display:flex;flex-direction:column;gap:0}.matrix-accordion-item{background:#fff;border:1px solid #f0eeee;border-radius:8px;padding:16px;margin-bottom:0;transition:all .2s ease}.matrix-accordion-item:not(:last-child){margin-bottom:20px}.accordion-header{display:flex;align-items:center;justify-content:space-between;cursor:pointer;width:100%}.accordion-header:focus-visible{outline:2px solid #0d4261;outline-offset:2px;border-radius:4px}.accordion-content{flex:1;display:flex;flex-direction:column;gap:0}.accordion-title{font-family:lusail-bold,sans-serif;font-weight:700;font-size:20px;line-height:1.2;color:#000;margin:0 0 4px}.accordion-description{font-family:lusail-light,sans-serif;font-weight:300;font-size:16px;line-height:1.2;color:#888;margin:0}.accordion-icon{font-size:24px;width:24px;height:24px;color:#222;transition:transform .3s ease;flex-shrink:0}.accordion-icon.rotated{transform:rotate(180deg)}.accordion-divider{margin-top:16px;height:1px;background-color:#f0eeee;width:calc(100% + 32px);margin-left:-16px;margin-right:-16px;border:none}.accordion-body{padding-top:16px;display:flex;flex-direction:column;gap:12px;margin-left:-16px;margin-right:-16px;padding-left:16px;padding-right:16px}.permission-header-row{display:flex;align-items:center;gap:4px;width:100%}.permission-group-label{font-family:lusail-regular,sans-serif;font-weight:400;font-size:16px;line-height:1.2;color:#5c5c5c;flex-shrink:0}.permission-separator{flex:1;height:1px;background-color:#f0eeee;margin:0 4px}.select-all-container{display:flex;align-items:center;gap:4px;flex-shrink:0;flex-direction:row-reverse}.select-all-label{font-family:lusail-regular,sans-serif;font-weight:400;font-size:20px;line-height:1.2;color:#000}.select-all-checkbox{flex-shrink:0}.permissions-row{display:flex;gap:20px;align-items:center;flex-wrap:wrap}.permission-item{display:flex;align-items:center;gap:4px;min-height:19px}.permission-label{font-family:lusail-medium,sans-serif;font-weight:500;font-size:16px;line-height:1.2;color:#222;white-space:nowrap}::ng-deep .select-all-checkbox .mdc-checkbox__background,::ng-deep .permission-item .mdc-checkbox__background{border-color:#b7b7b7!important;border-radius:4px!important}::ng-deep .select-all-checkbox.mat-mdc-checkbox-checked .mdc-checkbox__background,::ng-deep .permission-item.mat-mdc-checkbox-checked .mdc-checkbox__background{background-color:#0d4261!important;border-color:#0d4261!important}::ng-deep .mdc-checkbox__checkmark{color:#fff!important}::ng-deep .mdc-checkbox{display:inline-block;position:relative;flex:0 0 18px;box-sizing:content-box;width:18px;height:28px!important;line-height:0;white-space:nowrap;cursor:pointer;vertical-align:bottom;padding:calc((var(--mdc-checkbox-state-layer-size) - 25px) / 2)!important;margin:calc((var(--mdc-checkbox-state-layer-size) - var(--mdc-checkbox-state-layer-size)) / 2)}:host-context([dir=rtl]) .matrix-header{direction:rtl}:host-context([dir=rtl]) .accordion-header{direction:rtl}:host-context([dir=rtl]) .select-all-container{flex-direction:row}\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: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
101
+ }
102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PermissionMatrixComponent, decorators: [{
103
+ type: Component,
104
+ args: [{ selector: 'lib-permission-matrix', standalone: true, imports: [
105
+ CommonModule,
106
+ MatIconModule,
107
+ MatCheckboxModule,
108
+ TranslateModule
109
+ ], template: "<div class=\"permission-matrix-card\">\r\n <div class=\"matrix-header\">\r\n <h3 class=\"matrix-title\">{{ titleKey | translate }}</h3>\r\n <button\r\n class=\"expand-all-btn\"\r\n type=\"button\"\r\n (click)=\"expandAllGroups()\"\r\n [attr.aria-label]=\"(areAllExpanded() ? collapseAllLabelKey : expandAllLabelKey) | translate\">\r\n <mat-icon class=\"expand-icon\" [class.rotated]=\"areAllExpanded()\">unfold_more</mat-icon>\r\n <span>{{ (areAllExpanded() ? collapseAllLabelKey : expandAllLabelKey) | translate }}</span>\r\n </button>\r\n </div>\r\n\r\n <div class=\"matrix-divider\"></div>\r\n\r\n <div class=\"matrix-accordion-list\">\r\n <div\r\n *ngFor=\"let item of items; trackBy: trackByItem\"\r\n class=\"matrix-accordion-item\"\r\n [class.expanded]=\"item.expanded\">\r\n\r\n <!-- Accordion Header -->\r\n <div\r\n class=\"accordion-header\"\r\n (click)=\"toggleGroup(item)\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n [attr.aria-expanded]=\"item.expanded\"\r\n (keydown.enter)=\"toggleGroup(item)\"\r\n (keydown.space)=\"toggleGroup(item); $event.preventDefault()\">\r\n <div class=\"accordion-content\">\r\n <h4 class=\"accordion-title\">{{ item.title }}</h4>\r\n <p *ngIf=\"item.description\" class=\"accordion-description\">{{ item.description }}</p>\r\n </div>\r\n <mat-icon class=\"accordion-icon\" [class.rotated]=\"item.expanded\">keyboard_arrow_down</mat-icon>\r\n </div>\r\n\r\n <!-- Accordion Body -->\r\n <ng-container *ngIf=\"item.expanded\">\r\n <div class=\"accordion-divider\"></div>\r\n <div class=\"accordion-body\">\r\n <!-- Permission Header Row -->\r\n <div class=\"permission-header-row\">\r\n <span class=\"permission-group-label\">{{ item.title }}</span>\r\n <div class=\"permission-separator\"></div>\r\n <div class=\"select-all-container\" (click)=\"$event.stopPropagation()\">\r\n <span class=\"select-all-label\">{{ selectAllLabelKey | translate }}</span>\r\n <mat-checkbox\r\n [checked]=\"isAllPermissionsSelected(item)\"\r\n [disabled]=\"readonly\"\r\n (change)=\"toggleSelectAll(item)\"\r\n color=\"primary\"\r\n class=\"select-all-checkbox\">\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n\r\n <!-- Permissions Row -->\r\n <div class=\"permissions-row\" (click)=\"$event.stopPropagation()\">\r\n <div\r\n *ngFor=\"let permission of permissions; trackBy: trackByPermission\"\r\n class=\"permission-item\">\r\n <mat-checkbox\r\n [checked]=\"isPermissionSelected(item, permission)\"\r\n [disabled]=\"readonly\"\r\n (change)=\"togglePermission(item, permission)\"\r\n color=\"primary\">\r\n </mat-checkbox>\r\n <span class=\"permission-label\">{{ permission.labelKey | translate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>", styles: [".permission-matrix-card{background:#fff;border:1px solid #f0eeee;border-radius:8px;padding:16px;display:flex;flex-direction:column;gap:20px}.matrix-header{display:flex;align-items:center;justify-content:space-between;min-height:27px}.matrix-title{font-family:lusail-bold,sans-serif;font-weight:700;font-size:24px;line-height:1.2;color:#000;margin:0}.expand-all-btn{display:flex;align-items:center;gap:4px;background:transparent;border:none;cursor:pointer;padding:0;font-family:lusail-regular,sans-serif;font-weight:400;font-size:20px;line-height:1.2;color:#000;transition:all .2s ease}.expand-all-btn:hover{color:#0d4261}.expand-all-btn:focus-visible{outline:2px solid #0d4261;outline-offset:2px;border-radius:4px}.expand-icon{font-size:24px;width:24px;height:24px;color:#000;transition:transform .3s ease}.expand-icon.rotated{transform:rotate(180deg)}.matrix-divider{height:2px;background-color:#0d4261;width:100%}.matrix-accordion-list{display:flex;flex-direction:column;gap:0}.matrix-accordion-item{background:#fff;border:1px solid #f0eeee;border-radius:8px;padding:16px;margin-bottom:0;transition:all .2s ease}.matrix-accordion-item:not(:last-child){margin-bottom:20px}.accordion-header{display:flex;align-items:center;justify-content:space-between;cursor:pointer;width:100%}.accordion-header:focus-visible{outline:2px solid #0d4261;outline-offset:2px;border-radius:4px}.accordion-content{flex:1;display:flex;flex-direction:column;gap:0}.accordion-title{font-family:lusail-bold,sans-serif;font-weight:700;font-size:20px;line-height:1.2;color:#000;margin:0 0 4px}.accordion-description{font-family:lusail-light,sans-serif;font-weight:300;font-size:16px;line-height:1.2;color:#888;margin:0}.accordion-icon{font-size:24px;width:24px;height:24px;color:#222;transition:transform .3s ease;flex-shrink:0}.accordion-icon.rotated{transform:rotate(180deg)}.accordion-divider{margin-top:16px;height:1px;background-color:#f0eeee;width:calc(100% + 32px);margin-left:-16px;margin-right:-16px;border:none}.accordion-body{padding-top:16px;display:flex;flex-direction:column;gap:12px;margin-left:-16px;margin-right:-16px;padding-left:16px;padding-right:16px}.permission-header-row{display:flex;align-items:center;gap:4px;width:100%}.permission-group-label{font-family:lusail-regular,sans-serif;font-weight:400;font-size:16px;line-height:1.2;color:#5c5c5c;flex-shrink:0}.permission-separator{flex:1;height:1px;background-color:#f0eeee;margin:0 4px}.select-all-container{display:flex;align-items:center;gap:4px;flex-shrink:0;flex-direction:row-reverse}.select-all-label{font-family:lusail-regular,sans-serif;font-weight:400;font-size:20px;line-height:1.2;color:#000}.select-all-checkbox{flex-shrink:0}.permissions-row{display:flex;gap:20px;align-items:center;flex-wrap:wrap}.permission-item{display:flex;align-items:center;gap:4px;min-height:19px}.permission-label{font-family:lusail-medium,sans-serif;font-weight:500;font-size:16px;line-height:1.2;color:#222;white-space:nowrap}::ng-deep .select-all-checkbox .mdc-checkbox__background,::ng-deep .permission-item .mdc-checkbox__background{border-color:#b7b7b7!important;border-radius:4px!important}::ng-deep .select-all-checkbox.mat-mdc-checkbox-checked .mdc-checkbox__background,::ng-deep .permission-item.mat-mdc-checkbox-checked .mdc-checkbox__background{background-color:#0d4261!important;border-color:#0d4261!important}::ng-deep .mdc-checkbox__checkmark{color:#fff!important}::ng-deep .mdc-checkbox{display:inline-block;position:relative;flex:0 0 18px;box-sizing:content-box;width:18px;height:28px!important;line-height:0;white-space:nowrap;cursor:pointer;vertical-align:bottom;padding:calc((var(--mdc-checkbox-state-layer-size) - 25px) / 2)!important;margin:calc((var(--mdc-checkbox-state-layer-size) - var(--mdc-checkbox-state-layer-size)) / 2)}:host-context([dir=rtl]) .matrix-header{direction:rtl}:host-context([dir=rtl]) .accordion-header{direction:rtl}:host-context([dir=rtl]) .select-all-container{flex-direction:row}\n"] }]
110
+ }], propDecorators: { items: [{
111
+ type: Input
112
+ }], permissions: [{
113
+ type: Input
114
+ }], titleKey: [{
115
+ type: Input
116
+ }], selectAllLabelKey: [{
117
+ type: Input
118
+ }], expandAllLabelKey: [{
119
+ type: Input
120
+ }], collapseAllLabelKey: [{
121
+ type: Input
122
+ }], readonly: [{
123
+ type: Input
124
+ }], itemsChange: [{
125
+ type: Output
126
+ }], permissionChange: [{
127
+ type: Output
128
+ }] } });
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1tYXRyaXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52b2ljZXEvdWktbGliL3NyYy9saWIvY29tcG9uZW50cy9wZXJtaXNzaW9uLW1hdHJpeC9wZXJtaXNzaW9uLW1hdHJpeC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZvaWNlcS91aS1saWIvc3JjL2xpYi9jb21wb25lbnRzL3Blcm1pc3Npb24tbWF0cml4L3Blcm1pc3Npb24tbWF0cml4LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7OztBQWV0RCxNQUFNLE9BQU8seUJBQXlCO0lBWnRDO1FBY1csVUFBSyxHQUEyQixFQUFFLENBQUM7UUFDbkMsZ0JBQVcsR0FBdUI7WUFDekMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUU7WUFDeEMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUU7WUFDeEMsRUFBRSxHQUFHLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLDZCQUE2QixFQUFFLFlBQVksRUFBRSxDQUFDLG9CQUFvQixFQUFFLHFCQUFxQixDQUFDLEVBQUU7U0FDdEksQ0FBQztRQUNPLGFBQVEsR0FBVyxvQkFBb0IsQ0FBQztR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LFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGlCQUFpQjt3QkFDakIsZUFBZTtxQkFDaEI7OEJBTVEsS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25Db25maWcsIFBlcm1pc3Npb25NYXRyaXhJdGVtLCBQZXJtaXNzaW9uQ2hhbmdlRXZlbnQgfSBmcm9tICcuLi8uLi9iYXNlLW1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXBlcm1pc3Npb24tbWF0cml4JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcclxuICAgIFRyYW5zbGF0ZU1vZHVsZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Blcm1pc3Npb24tbWF0cml4LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcGVybWlzc2lvbi1tYXRyaXguY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uTWF0cml4Q29tcG9uZW50IHtcclxuXHJcbiAgQElucHV0KCkgaXRlbXM6IFBlcm1pc3Npb25NYXRyaXhJdGVtW10gPSBbXTtcclxuICBASW5wdXQoKSBwZXJtaXNzaW9uczogUGVybWlzc2lvbkNvbmZpZ1tdID0gW1xyXG4gICAgeyBrZXk6ICd2aWV3JywgbGFiZWxLZXk6ICdHUk9VUFMudmlldycgfSxcclxuICAgIHsga2V5OiAnZWRpdCcsIGxhYmVsS2V5OiAnR1JPVVBTLmVkaXQnIH0sXHJcbiAgICB7IGtleTogJ2NvbXBsZXRlQW5kVGVybWluYXRlJywgbGFiZWxLZXk6ICdHUk9VUFMuY29tcGxldGVBbmRUZXJtaW5hdGUnLCBjb21iaW5lZEtleXM6IFsnY29tcGxldGVQZXJtaXNzaW9uJywgJ3Rlcm1pbmF0ZVBlcm1pc3Npb24nXSB9XHJcbiAgXTtcclxuICBASW5wdXQoKSB0aXRsZUtleTogc3RyaW5nID0gJ0dST1VQUy5ncm91cE1hdHJpeCc7XHJcbiAgQElucHV0KCkgc2VsZWN0QWxsTGFiZWxLZXk6IHN0cmluZyA9ICdHUk9VUFMuc2VsZWN0QWxsJztcclxuICBASW5wdXQoKSBleHBhbmRBbGxMYWJlbEtleTogc3RyaW5nID0gJ0dST1VQUy5leHBhbmRBbGwnO1xyXG4gIEBJbnB1dCgpIGNvbGxhcHNlQWxsTGFiZWxLZXk6IHN0cmluZyA9ICdHUk9VUFMuY29sbGFwc2VBbGwnO1xyXG4gIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQE91dHB1dCgpIGl0ZW1zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxQZXJtaXNzaW9uTWF0cml4SXRlbVtdPigpO1xyXG4gIEBPdXRwdXQoKSBwZXJtaXNzaW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxQZXJtaXNzaW9uQ2hhbmdlRXZlbnQ+KCk7XHJcblxyXG4gIGFyZUFsbEV4cGFuZGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbXMubGVuZ3RoID4gMCAmJiB0aGlzLml0ZW1zLmV2ZXJ5KGl0ZW0gPT4gaXRlbS5leHBhbmRlZCk7XHJcbiAgfVxyXG5cclxuICBleHBhbmRBbGxHcm91cHMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBleHBhbmQgPSAhdGhpcy5hcmVBbGxFeHBhbmRlZCgpO1xyXG4gICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5leHBhbmRlZCA9IGV4cGFuZCk7XHJcbiAgICB0aGlzLmVtaXRJdGVtc0NoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlR3JvdXAoaXRlbTogUGVybWlzc2lvbk1hdHJpeEl0ZW0pOiB2b2lkIHtcclxuICAgIGl0ZW0uZXhwYW5kZWQgPSAhaXRlbS5leHBhbmRlZDtcclxuICAgIHRoaXMuZW1pdEl0ZW1zQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBpc0FsbFBlcm1pc3Npb25zU2VsZWN0ZWQoaXRlbTogUGVybWlzc2lvbk1hdHJpeEl0ZW0pOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zLmV2ZXJ5KHBlcm0gPT4ge1xyXG4gICAgICBpZiAocGVybS5jb21iaW5lZEtleXMpIHtcclxuICAgICAgICByZXR1cm4gcGVybS5jb21iaW5lZEtleXMuZXZlcnkoa2V5ID0+IGl0ZW0ucGVybWlzc2lvbnNba2V5XSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGl0ZW0ucGVybWlzc2lvbnNbcGVybS5rZXldO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVTZWxlY3RBbGwoaXRlbTogUGVybWlzc2lvbk1hdHJpeEl0ZW0pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnJlYWRvbmx5KSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgYWxsU2VsZWN0ZWQgPSB0aGlzLmlzQWxsUGVybWlzc2lvbnNTZWxlY3RlZChpdGVtKTtcclxuICAgIGNvbnN0IG5ld1ZhbHVlID0gIWFsbFNlbGVjdGVkO1xyXG5cclxuICAgIHRoaXMucGVybWlzc2lvbnMuZm9yRWFjaChwZXJtID0+IHtcclxuICAgICAgaWYgKHBlcm0uY29tYmluZWRLZXlzKSB7XHJcbiAgICAgICAgcGVybS5jb21iaW5lZEtleXMuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgaXRlbS5wZXJtaXNzaW9uc1trZXldID0gbmV3VmFsdWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaXRlbS5wZXJtaXNzaW9uc1twZXJtLmtleV0gPSBuZXdWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5lbWl0SXRlbXNDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIGlzUGVybWlzc2lvblNlbGVjdGVkKGl0ZW06IFBlcm1pc3Npb25NYXRyaXhJdGVtLCBwZXJtaXNzaW9uOiBQZXJtaXNzaW9uQ29uZmlnKTogYm9vbGVhbiB7XHJcbiAgICBpZiAocGVybWlzc2lvbi5jb21iaW5lZEtleXMpIHtcclxuICAgICAgcmV0dXJuIHBlcm1pc3Npb24uY29tYmluZWRLZXlzLmV2ZXJ5KGtleSA9PiBpdGVtLnBlcm1pc3Npb25zW2tleV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGl0ZW0ucGVybWlzc2lvbnNbcGVybWlzc2lvbi5rZXldO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlUGVybWlzc2lvbihpdGVtOiBQZXJtaXNzaW9uTWF0cml4SXRlbSwgcGVybWlzc2lvbjogUGVybWlzc2lvbkNvbmZpZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucmVhZG9ubHkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmlzUGVybWlzc2lvblNlbGVjdGVkKGl0ZW0sIHBlcm1pc3Npb24pO1xyXG4gICAgY29uc3QgbmV3VmFsdWUgPSAhY3VycmVudFZhbHVlO1xyXG5cclxuICAgIGlmIChwZXJtaXNzaW9uLmNvbWJpbmVkS2V5cykge1xyXG4gICAgICBwZXJtaXNzaW9uLmNvbWJpbmVkS2V5cy5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgaXRlbS5wZXJtaXNzaW9uc1trZXldID0gbmV3VmFsdWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXRlbS5wZXJtaXNzaW9uc1twZXJtaXNzaW9uLmtleV0gPSBuZXdWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBlcm1pc3Npb25DaGFuZ2UuZW1pdCh7XHJcbiAgICAgIGl0ZW0sXHJcbiAgICAgIHBlcm1pc3Npb25LZXk6IHBlcm1pc3Npb24ua2V5LFxyXG4gICAgICBuZXdWYWx1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5lbWl0SXRlbXNDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1pdEl0ZW1zQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pdGVtc0NoYW5nZS5lbWl0KFsuLi50aGlzLml0ZW1zXSk7XHJcbiAgfVxyXG5cclxuICB0cmFja0J5SXRlbShpbmRleDogbnVtYmVyLCBpdGVtOiBQZXJtaXNzaW9uTWF0cml4SXRlbSk6IHN0cmluZyB8IG51bWJlciB7XHJcbiAgICByZXR1cm4gaXRlbS5pZCA/PyBpbmRleDtcclxuICB9XHJcblxyXG4gIHRyYWNrQnlQZXJtaXNzaW9uKGluZGV4OiBudW1iZXIsIHBlcm1pc3Npb246IFBlcm1pc3Npb25Db25maWcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHBlcm1pc3Npb24ua2V5O1xyXG4gIH1cclxufSIsIjxkaXYgY2xhc3M9XCJwZXJtaXNzaW9uLW1hdHJpeC1jYXJkXCI+XHJcbiAgPGRpdiBjbGFzcz1cIm1hdHJpeC1oZWFkZXJcIj5cclxuICAgIDxoMyBjbGFzcz1cIm1hdHJpeC10aXRsZVwiPnt7IHRpdGxlS2V5IHwgdHJhbnNsYXRlIH19PC9oMz5cclxuICAgIDxidXR0b25cclxuICAgICAgY2xhc3M9XCJleHBhbmQtYWxsLWJ0blwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAoY2xpY2spPVwiZXhwYW5kQWxsR3JvdXBzKClcIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihhcmVBbGxFeHBhbmRlZCgpID8gY29sbGFwc2VBbGxMYWJlbEtleSA6IGV4cGFuZEFsbExhYmVsS2V5KSB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJleHBhbmQtaWNvblwiIFtjbGFzcy5yb3RhdGVkXT1cImFyZUFsbEV4cGFuZGVkKClcIj51bmZvbGRfbW9yZTwvbWF0LWljb24+XHJcbiAgICAgIDxzcGFuPnt7IChhcmVBbGxFeHBhbmRlZCgpID8gY29sbGFwc2VBbGxMYWJlbEtleSA6IGV4cGFuZEFsbExhYmVsS2V5KSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwibWF0cml4LWRpdmlkZXJcIj48L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cIm1hdHJpeC1hY2NvcmRpb24tbGlzdFwiPlxyXG4gICAgPGRpdlxyXG4gICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtczsgdHJhY2tCeTogdHJhY2tCeUl0ZW1cIlxyXG4gICAgICBjbGFzcz1cIm1hdHJpeC1hY2NvcmRpb24taXRlbVwiXHJcbiAgICAgIFtjbGFzcy5leHBhbmRlZF09XCJpdGVtLmV4cGFuZGVkXCI+XHJcblxyXG4gICAgICA8IS0tIEFjY29yZGlvbiBIZWFkZXIgLS0+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIlxyXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVHcm91cChpdGVtKVwiXHJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXHJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIml0ZW0uZXhwYW5kZWRcIlxyXG4gICAgICAgIChrZXlkb3duLmVudGVyKT1cInRvZ2dsZUdyb3VwKGl0ZW0pXCJcclxuICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJ0b2dnbGVHcm91cChpdGVtKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjb3JkaW9uLWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxoNCBjbGFzcz1cImFjY29yZGlvbi10aXRsZVwiPnt7IGl0ZW0udGl0bGUgfX08L2g0PlxyXG4gICAgICAgICAgPHAgKm5nSWY9XCJpdGVtLmRlc2NyaXB0aW9uXCIgY2xhc3M9XCJhY2NvcmRpb24tZGVzY3JpcHRpb25cIj57eyBpdGVtLmRlc2NyaXB0aW9uIH19PC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFjY29yZGlvbi1pY29uXCIgW2NsYXNzLnJvdGF0ZWRdPVwiaXRlbS5leHBhbmRlZFwiPmtleWJvYXJkX2Fycm93X2Rvd248L21hdC1pY29uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gQWNjb3JkaW9uIEJvZHkgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLmV4cGFuZGVkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFjY29yZGlvbi1kaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFjY29yZGlvbi1ib2R5XCI+XHJcbiAgICAgICAgICA8IS0tIFBlcm1pc3Npb24gSGVhZGVyIFJvdyAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJtaXNzaW9uLWhlYWRlci1yb3dcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwZXJtaXNzaW9uLWdyb3VwLWxhYmVsXCI+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcm1pc3Npb24tc2VwYXJhdG9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtYWxsLWNvbnRhaW5lclwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdC1hbGwtbGFiZWxcIj57eyBzZWxlY3RBbGxMYWJlbEtleSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0FsbFBlcm1pc3Npb25zU2VsZWN0ZWQoaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdC1hbGwtY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIFBlcm1pc3Npb25zIFJvdyAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJtaXNzaW9ucy1yb3dcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcGVybWlzc2lvbiBvZiBwZXJtaXNzaW9uczsgdHJhY2tCeTogdHJhY2tCeVBlcm1pc3Npb25cIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwicGVybWlzc2lvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNQZXJtaXNzaW9uU2VsZWN0ZWQoaXRlbSwgcGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlUGVybWlzc2lvbihpdGVtLCBwZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBlcm1pc3Npb24tbGFiZWxcIj57eyBwZXJtaXNzaW9uLmxhYmVsS2V5IHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=
@@ -26,4 +26,5 @@ export * from './lib/components/shared/action-card/action-card.component';
26
26
  export * from './lib/components/shared/action-button/action-button.component';
27
27
  export * from './lib/components/action-comment/action-comment.component';
28
28
  export * from './lib/components/item-line-editor/item-line-editor.component';
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2ludm9pY2VxL3VpLWxpYi9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsb0VBQW9FLENBQUE7QUFDbEYsY0FBYyxrREFBa0QsQ0FBQTtBQUNoRSxjQUFjLHFEQUFxRCxDQUFBO0FBQ25FLGNBQWMsb0VBQW9FLENBQUE7QUFDbEYsY0FBYyxnREFBZ0QsQ0FBQTtBQUM5RCxjQUFjLG9EQUFvRCxDQUFBO0FBQ2xFLGNBQWMsOERBQThELENBQUE7QUFDNUUsY0FBYyxvRUFBb0UsQ0FBQTtBQUNsRixjQUFjLGdEQUFnRCxDQUFBO0FBQzlELGNBQWMsOEVBQThFLENBQUE7QUFDNUYsY0FBYyxvREFBb0QsQ0FBQTtBQUNsRSxjQUFjLHNFQUFzRSxDQUFBO0FBQ3BGLGNBQWMsd0VBQXdFLENBQUE7QUFDdEYsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsZ0VBQWdFLENBQUE7QUFDOUUsY0FBYyxrREFBa0QsQ0FBQTtBQUNoRSxjQUFjLDREQUE0RCxDQUFBO0FBQzFFLGNBQWMsMkRBQTJELENBQUE7QUFDekUsY0FBYywrREFBK0QsQ0FBQTtBQUM3RSxjQUFjLDBEQUEwRCxDQUFBO0FBQ3hFLGNBQWMsOERBQThELENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgaW52b2ljZXEtbGliXHJcbiAqL1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hY3Rpb24tY29uZmlybWF0aW9uL2FjdGlvbi1jb25maXJtYXRpb24uY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Jhc2UtdGFibGUvYmFzZS10YWJsZS5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYXVkaXQtbG9nLWxpc3QvYXVkaXQtbG9nLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9lZGl0YWJsZS1iYXNlLXRhYmxlL2VkaXRhYmxlLWJhc2UtdGFibGUuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3RpdGxlLWJhci90aXRsZS1iYXIuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NoYXJlZC1saXN0L3NoYXJlZC1saXN0LmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9iYXNlLWZvcm0tY2FudmFzL2Jhc2UtZm9ybS1jYW52YXMuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NlY3Rpb24tZm9ybS1jYW52YXMvc2VjdGlvbi1mb3JtLWNhbnZhcy5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYmFzZS1mb3JtL2Jhc2UtZm9ybS5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYXVkaXQtbG9nLWRldGFpbHMtZGlhbG9nL2F1ZGl0LWxvZy1kZXRhaWxzLWRpYWxvZy5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcmVwb3J0LWZvcm0vcmVwb3J0LWZvcm0uY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2FjdGl2aXR5LXJlcG9ydC1mb3JtL2FjdGl2aXR5LXJlcG9ydC1mb3JtLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9yZXBvcnQtZGV0YWlscy1kaWFsb2cvcmVwb3J0LWRldGFpbHMtZGlhbG9nLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvYmFzZS1tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Jhc2UtbW9kZWwvbGluZS1pdGVtLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvYmFzZS1tb2RlbC9pdGVtcy10b3RhbC5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdmFsaWRhdG9ycyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYmFzZS1pbnB1dC1kaWFsb2cvYmFzZS1pbnB1dC1kaWFsb2cuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NlYXJjaC1iYXIvc2VhcmNoLWJhci5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvc25hY2tiYXItc3RhdGljL3NuYWNrYmFyLXN0YXRpYy5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvc2hhcmVkL2FjdGlvbi1jYXJkL2FjdGlvbi1jYXJkLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9zaGFyZWQvYWN0aW9uLWJ1dHRvbi9hY3Rpb24tYnV0dG9uLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hY3Rpb24tY29tbWVudC9hY3Rpb24tY29tbWVudC5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvaXRlbS1saW5lLWVkaXRvci9pdGVtLWxpbmUtZWRpdG9yLmNvbXBvbmVudCdcclxuIl19
29
+ export * from './lib/components/permission-matrix/permission-matrix.component';
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2ludm9pY2VxL3VpLWxpYi9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsb0VBQW9FLENBQUE7QUFDbEYsY0FBYyxrREFBa0QsQ0FBQTtBQUNoRSxjQUFjLHFEQUFxRCxDQUFBO0FBQ25FLGNBQWMsb0VBQW9FLENBQUE7QUFDbEYsY0FBYyxnREFBZ0QsQ0FBQTtBQUM5RCxjQUFjLG9EQUFvRCxDQUFBO0FBQ2xFLGNBQWMsOERBQThELENBQUE7QUFDNUUsY0FBYyxvRUFBb0UsQ0FBQTtBQUNsRixjQUFjLGdEQUFnRCxDQUFBO0FBQzlELGNBQWMsOEVBQThFLENBQUE7QUFDNUYsY0FBYyxvREFBb0QsQ0FBQTtBQUNsRSxjQUFjLHNFQUFzRSxDQUFBO0FBQ3BGLGNBQWMsd0VBQXdFLENBQUE7QUFDdEYsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsZ0VBQWdFLENBQUE7QUFDOUUsY0FBYyxrREFBa0QsQ0FBQTtBQUNoRSxjQUFjLDREQUE0RCxDQUFBO0FBQzFFLGNBQWMsMkRBQTJELENBQUE7QUFDekUsY0FBYywrREFBK0QsQ0FBQTtBQUM3RSxjQUFjLDBEQUEwRCxDQUFBO0FBQ3hFLGNBQWMsOERBQThELENBQUE7QUFDNUUsY0FBYyxnRUFBZ0UsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBpbnZvaWNlcS1saWJcclxuICovXHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2FjdGlvbi1jb25maXJtYXRpb24vYWN0aW9uLWNvbmZpcm1hdGlvbi5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYmFzZS10YWJsZS9iYXNlLXRhYmxlLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hdWRpdC1sb2ctbGlzdC9hdWRpdC1sb2cuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2VkaXRhYmxlLWJhc2UtdGFibGUvZWRpdGFibGUtYmFzZS10YWJsZS5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdGl0bGUtYmFyL3RpdGxlLWJhci5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvc2hhcmVkLWxpc3Qvc2hhcmVkLWxpc3QuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Jhc2UtZm9ybS1jYW52YXMvYmFzZS1mb3JtLWNhbnZhcy5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvc2VjdGlvbi1mb3JtLWNhbnZhcy9zZWN0aW9uLWZvcm0tY2FudmFzLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9iYXNlLWZvcm0vYmFzZS1mb3JtLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hdWRpdC1sb2ctZGV0YWlscy1kaWFsb2cvYXVkaXQtbG9nLWRldGFpbHMtZGlhbG9nLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9yZXBvcnQtZm9ybS9yZXBvcnQtZm9ybS5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYWN0aXZpdHktcmVwb3J0LWZvcm0vYWN0aXZpdHktcmVwb3J0LWZvcm0uY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3JlcG9ydC1kZXRhaWxzLWRpYWxvZy9yZXBvcnQtZGV0YWlscy1kaWFsb2cuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9iYXNlLW1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvYmFzZS1tb2RlbC9saW5lLWl0ZW0ubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9iYXNlLW1vZGVsL2l0ZW1zLXRvdGFsLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi92YWxpZGF0b3JzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9iYXNlLWlucHV0LWRpYWxvZy9iYXNlLWlucHV0LWRpYWxvZy5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvc2VhcmNoLWJhci9zZWFyY2gtYmFyLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9zbmFja2Jhci1zdGF0aWMvc25hY2tiYXItc3RhdGljLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9zaGFyZWQvYWN0aW9uLWNhcmQvYWN0aW9uLWNhcmQuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NoYXJlZC9hY3Rpb24tYnV0dG9uL2FjdGlvbi1idXR0b24uY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2FjdGlvbi1jb21tZW50L2FjdGlvbi1jb21tZW50LmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9pdGVtLWxpbmUtZWRpdG9yL2l0ZW0tbGluZS1lZGl0b3IuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3Blcm1pc3Npb24tbWF0cml4L3Blcm1pc3Npb24tbWF0cml4LmNvbXBvbmVudCdcclxuIl19