@cqa-lib/cqa-ui 1.1.529 → 1.1.530

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,146 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { FormControl, FormGroup } from '@angular/forms';
3
+ import { Subject } from 'rxjs';
4
+ import { takeUntil } from 'rxjs/operators';
5
+ import { ALL_FILTER_VALUE, } from './audit-log-drawer.models';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/material/icon";
8
+ import * as i2 from "../dynamic-select/dynamic-select-field.component";
9
+ import * as i3 from "../full-table-loader/full-table-loader.component";
10
+ import * as i4 from "../empty-state/empty-state.component";
11
+ import * as i5 from "./audit-log-entry-card.component";
12
+ import * as i6 from "@angular/common";
13
+ export class AuditLogDrawerComponent {
14
+ constructor() {
15
+ this.entries = [];
16
+ this.entityTypeOptions = [];
17
+ this.envOptions = [];
18
+ this.userOptions = [];
19
+ this.defaultRange = '7d';
20
+ this.isLoading = false;
21
+ this.filterChange = new EventEmitter();
22
+ this.close = new EventEmitter();
23
+ this.ALL = ALL_FILTER_VALUE;
24
+ this.filtersForm = new FormGroup({
25
+ entityType: new FormControl(ALL_FILTER_VALUE),
26
+ env: new FormControl(ALL_FILTER_VALUE),
27
+ user: new FormControl(ALL_FILTER_VALUE),
28
+ range: new FormControl('7d'),
29
+ });
30
+ this.trackById = (_, e) => e.id;
31
+ this.destroy$ = new Subject();
32
+ this.rangeMs = {
33
+ '24h': 24 * 60 * 60 * 1000,
34
+ '7d': 7 * 24 * 60 * 60 * 1000,
35
+ '30d': 30 * 24 * 60 * 60 * 1000,
36
+ 'all': Number.POSITIVE_INFINITY,
37
+ };
38
+ }
39
+ ngOnInit() {
40
+ this.filtersForm.patchValue({ range: this.defaultRange });
41
+ this.entityConfig = this.buildSelectConfig('entityType', 'All entity types', this.entityTypeOptions);
42
+ this.envConfig = this.buildSelectConfig('env', 'All environments', this.envOptions);
43
+ this.userConfig = this.buildSelectConfig('user', 'All users', this.userOptions);
44
+ this.rangeConfig = this.buildSelectConfig('range', 'Last 7 days', [
45
+ { value: '24h', label: 'Last 24h' },
46
+ { value: '7d', label: 'Last 7 days' },
47
+ { value: '30d', label: 'Last 30 days' },
48
+ { value: 'all', label: 'All time' },
49
+ ], false);
50
+ this.filtersForm.valueChanges
51
+ .pipe(takeUntil(this.destroy$))
52
+ .subscribe(() => this.filterChange.emit(this.currentFilterState()));
53
+ }
54
+ ngOnDestroy() {
55
+ this.destroy$.next();
56
+ this.destroy$.complete();
57
+ }
58
+ get filteredEntries() {
59
+ const f = this.currentFilterState();
60
+ const cutoff = this.rangeMs[f.range];
61
+ const now = Date.now();
62
+ return (this.entries || []).filter(e => {
63
+ if (f.entityType !== ALL_FILTER_VALUE && e.entityType !== f.entityType) {
64
+ return false;
65
+ }
66
+ if (f.env !== ALL_FILTER_VALUE && !this.entryMatchesEnv(e, f.env)) {
67
+ return false;
68
+ }
69
+ if (f.user !== ALL_FILTER_VALUE && e.user !== f.user) {
70
+ return false;
71
+ }
72
+ if (cutoff !== Number.POSITIVE_INFINITY) {
73
+ const ts = this.parseTs(e.ts);
74
+ if (ts != null && now - ts > cutoff) {
75
+ return false;
76
+ }
77
+ }
78
+ return true;
79
+ });
80
+ }
81
+ onClose() {
82
+ this.close.emit();
83
+ }
84
+ entryMatchesEnv(entry, env) {
85
+ return (entry.entityName || '').toLowerCase().includes(env.toLowerCase());
86
+ }
87
+ parseTs(ts) {
88
+ if (!ts) {
89
+ return null;
90
+ }
91
+ const t = Date.parse(ts);
92
+ return Number.isNaN(t) ? null : t;
93
+ }
94
+ currentFilterState() {
95
+ const v = this.filtersForm.value;
96
+ return {
97
+ entityType: v.entityType ?? ALL_FILTER_VALUE,
98
+ env: v.env ?? ALL_FILTER_VALUE,
99
+ user: v.user ?? ALL_FILTER_VALUE,
100
+ range: v.range ?? '7d',
101
+ };
102
+ }
103
+ buildSelectConfig(key, placeholder, items, includeAll = true) {
104
+ const options = [];
105
+ if (includeAll) {
106
+ options.push({ id: ALL_FILTER_VALUE, value: ALL_FILTER_VALUE, name: placeholder, label: placeholder });
107
+ }
108
+ for (const it of items) {
109
+ options.push({ id: it.value, value: it.value, name: it.label, label: it.label });
110
+ }
111
+ return {
112
+ key,
113
+ label: '',
114
+ placeholder,
115
+ multiple: false,
116
+ searchable: false,
117
+ options,
118
+ };
119
+ }
120
+ }
121
+ AuditLogDrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuditLogDrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
122
+ AuditLogDrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AuditLogDrawerComponent, selector: "cqa-audit-log-drawer", inputs: { entries: "entries", entityTypeOptions: "entityTypeOptions", envOptions: "envOptions", userOptions: "userOptions", defaultRange: "defaultRange", isLoading: "isLoading" }, outputs: { filterChange: "filterChange", close: "close" }, host: { styleAttribute: "display:flex;flex-direction:column;height:100%;width:560px;max-width:100vw;background:#fff;box-shadow:-8px 0 32px rgba(15,23,42,.12);", classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<header class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-3 cqa-px-[22px] cqa-py-[18px] cqa-border-b cqa-border-[#E5E7EB] cqa-flex-shrink-0 cqa-font-inter\">\n <div class=\"cqa-min-w-0\">\n <h3 class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-m-0 cqa-text-[15px] cqa-font-semibold cqa-text-[#0F172A]\">\n <mat-icon class=\"cqa-text-primary\" style=\"font-size:18px;width:18px;height:18px;line-height:18px;color:#3F43EE;\">history</mat-icon>\n Audit log\n </h3>\n <p class=\"cqa-text-xs cqa-text-[#64748B] cqa-mt-0.5 cqa-mb-0\">\n All changes across environments, profiles, and globals. Read-only, append-only.\n </p>\n </div>\n <button type=\"button\" class=\"cqa-audit-log-close-btn\" (click)=\"onClose()\" aria-label=\"Close audit log\">\n <mat-icon>close</mat-icon>\n </button>\n</header>\n\n<section class=\"cqa-grid cqa-gap-2 cqa-px-[22px] cqa-py-3 cqa-border-b cqa-border-[#E5E7EB] cqa-flex-shrink-0\"\n style=\"grid-template-columns: repeat(4, minmax(0, 1fr)); background:#FAFBFC;\">\n <cqa-dynamic-select [form]=\"filtersForm\" [config]=\"entityConfig\"></cqa-dynamic-select>\n <cqa-dynamic-select [form]=\"filtersForm\" [config]=\"envConfig\"></cqa-dynamic-select>\n <cqa-dynamic-select [form]=\"filtersForm\" [config]=\"userConfig\"></cqa-dynamic-select>\n <cqa-dynamic-select [form]=\"filtersForm\" [config]=\"rangeConfig\"></cqa-dynamic-select>\n</section>\n\n<div class=\"cqa-flex-1 cqa-overflow-y-auto\">\n <cqa-full-table-loader *ngIf=\"isLoading\"></cqa-full-table-loader>\n <ng-container *ngIf=\"!isLoading\">\n <cqa-empty-state\n *ngIf=\"filteredEntries.length === 0; else listTpl\"\n title=\"No entries match your filters\"\n description=\"Adjust the filters above to widen the search.\">\n </cqa-empty-state>\n <ng-template #listTpl>\n <cqa-audit-log-entry-card\n *ngFor=\"let e of filteredEntries; trackBy: trackById\"\n [entry]=\"e\">\n </cqa-audit-log-entry-card>\n </ng-template>\n </ng-container>\n</div>\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i3.FullTableLoaderComponent, selector: "cqa-full-table-loader", inputs: ["label"] }, { type: i4.EmptyStateComponent, selector: "cqa-empty-state", inputs: ["preset", "imageUrl", "title", "description", "actions"], outputs: ["actionClick"] }, { type: i5.AuditLogEntryCardComponent, selector: "cqa-audit-log-entry-card", inputs: ["entry"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
123
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuditLogDrawerComponent, decorators: [{
124
+ type: Component,
125
+ args: [{ selector: 'cqa-audit-log-drawer', host: {
126
+ class: 'cqa-ui-root',
127
+ style: 'display:flex;flex-direction:column;height:100%;width:560px;max-width:100vw;background:#fff;box-shadow:-8px 0 32px rgba(15,23,42,.12);',
128
+ }, template: "<header class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-3 cqa-px-[22px] cqa-py-[18px] cqa-border-b cqa-border-[#E5E7EB] cqa-flex-shrink-0 cqa-font-inter\">\n <div class=\"cqa-min-w-0\">\n <h3 class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-m-0 cqa-text-[15px] cqa-font-semibold cqa-text-[#0F172A]\">\n <mat-icon class=\"cqa-text-primary\" style=\"font-size:18px;width:18px;height:18px;line-height:18px;color:#3F43EE;\">history</mat-icon>\n Audit log\n </h3>\n <p class=\"cqa-text-xs cqa-text-[#64748B] cqa-mt-0.5 cqa-mb-0\">\n All changes across environments, profiles, and globals. Read-only, append-only.\n </p>\n </div>\n <button type=\"button\" class=\"cqa-audit-log-close-btn\" (click)=\"onClose()\" aria-label=\"Close audit log\">\n <mat-icon>close</mat-icon>\n </button>\n</header>\n\n<section class=\"cqa-grid cqa-gap-2 cqa-px-[22px] cqa-py-3 cqa-border-b cqa-border-[#E5E7EB] cqa-flex-shrink-0\"\n style=\"grid-template-columns: repeat(4, minmax(0, 1fr)); background:#FAFBFC;\">\n <cqa-dynamic-select [form]=\"filtersForm\" [config]=\"entityConfig\"></cqa-dynamic-select>\n <cqa-dynamic-select [form]=\"filtersForm\" [config]=\"envConfig\"></cqa-dynamic-select>\n <cqa-dynamic-select [form]=\"filtersForm\" [config]=\"userConfig\"></cqa-dynamic-select>\n <cqa-dynamic-select [form]=\"filtersForm\" [config]=\"rangeConfig\"></cqa-dynamic-select>\n</section>\n\n<div class=\"cqa-flex-1 cqa-overflow-y-auto\">\n <cqa-full-table-loader *ngIf=\"isLoading\"></cqa-full-table-loader>\n <ng-container *ngIf=\"!isLoading\">\n <cqa-empty-state\n *ngIf=\"filteredEntries.length === 0; else listTpl\"\n title=\"No entries match your filters\"\n description=\"Adjust the filters above to widen the search.\">\n </cqa-empty-state>\n <ng-template #listTpl>\n <cqa-audit-log-entry-card\n *ngFor=\"let e of filteredEntries; trackBy: trackById\"\n [entry]=\"e\">\n </cqa-audit-log-entry-card>\n </ng-template>\n </ng-container>\n</div>\n" }]
129
+ }], propDecorators: { entries: [{
130
+ type: Input
131
+ }], entityTypeOptions: [{
132
+ type: Input
133
+ }], envOptions: [{
134
+ type: Input
135
+ }], userOptions: [{
136
+ type: Input
137
+ }], defaultRange: [{
138
+ type: Input
139
+ }], isLoading: [{
140
+ type: Input
141
+ }], filterChange: [{
142
+ type: Output
143
+ }], close: [{
144
+ type: Output
145
+ }] } });
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbG9nLWRyYXdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2F1ZGl0LWxvZy1kcmF3ZXIvYXVkaXQtbG9nLWRyYXdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2F1ZGl0LWxvZy1kcmF3ZXIvYXVkaXQtbG9nLWRyYXdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzNDLE9BQU8sRUFDTCxnQkFBZ0IsR0FLakIsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7QUFVbkMsTUFBTSxPQUFPLHVCQUF1QjtJQVJwQztRQVNXLFlBQU8sR0FBaUIsRUFBRSxDQUFDO1FBQzNCLHNCQUFpQixHQUF3QixFQUFFLENBQUM7UUFDNUMsZUFBVSxHQUF3QixFQUFFLENBQUM7UUFDckMsZ0JBQVcsR0FBd0IsRUFBRSxDQUFDO1FBQ3RDLGlCQUFZLEdBQW1CLElBQUksQ0FBQztRQUNwQyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFDdkQsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFM0IsUUFBRyxHQUFHLGdCQUFnQixDQUFDO1FBRXZCLGdCQUFXLEdBQUcsSUFBSSxTQUFTLENBQUM7WUFDMUMsVUFBVSxFQUFFLElBQUksV0FBVyxDQUFDLGdCQUFnQixDQUFDO1lBQzdDLEdBQUcsRUFBUyxJQUFJ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OzJGRGpCYSx1QkFBdUI7a0JBUm5DLFNBQVM7K0JBQ0Usc0JBQXNCLFFBRTFCO3dCQUNKLEtBQUssRUFBRSxhQUFhO3dCQUNwQixLQUFLLEVBQUUsdUlBQXVJO3FCQUMvSTs4QkFHUSxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZywgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEFMTF9GSUxURVJfVkFMVUUsXG4gIEF1ZGl0RGF0ZVJhbmdlLFxuICBBdWRpdEVudHJ5LFxuICBBdWRpdEZpbHRlck9wdGlvbixcbiAgQXVkaXRMb2dGaWx0ZXJTdGF0ZSxcbn0gZnJvbSAnLi9hdWRpdC1sb2ctZHJhd2VyLm1vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1hdWRpdC1sb2ctZHJhd2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F1ZGl0LWxvZy1kcmF3ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdjcWEtdWktcm9vdCcsXG4gICAgc3R5bGU6ICdkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlO3dpZHRoOjU2MHB4O21heC13aWR0aDoxMDB2dztiYWNrZ3JvdW5kOiNmZmY7Ym94LXNoYWRvdzotOHB4IDAgMzJweCByZ2JhKDE1LDIzLDQyLC4xMik7JyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgQXVkaXRMb2dEcmF3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGVudHJpZXM6IEF1ZGl0RW50cnlbXSA9IFtdO1xuICBASW5wdXQoKSBlbnRpdHlUeXBlT3B0aW9uczogQXVkaXRGaWx0ZXJPcHRpb25bXSA9IFtdO1xuICBASW5wdXQoKSBlbnZPcHRpb25zOiBBdWRpdEZpbHRlck9wdGlvbltdID0gW107XG4gIEBJbnB1dCgpIHVzZXJPcHRpb25zOiBBdWRpdEZpbHRlck9wdGlvbltdID0gW107XG4gIEBJbnB1dCgpIGRlZmF1bHRSYW5nZTogQXVkaXREYXRlUmFuZ2UgPSAnN2QnO1xuICBASW5wdXQoKSBpc0xvYWRpbmcgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgZmlsdGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBdWRpdExvZ0ZpbHRlclN0YXRlPigpO1xuICBAT3V0cHV0KCkgY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IEFMTCA9IEFMTF9GSUxURVJfVkFMVUU7XG5cbiAgcHVibGljIHJlYWRvbmx5IGZpbHRlcnNGb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgZW50aXR5VHlwZTogbmV3IEZvcm1Db250cm9sKEFMTF9GSUxURVJfVkFMVUUpLFxuICAgIGVudjogICAgICAgIG5ldyBGb3JtQ29udHJvbChBTExfRklMVEVSX1ZBTFVFKSxcbiAgICB1c2VyOiAgICAgICBuZXcgRm9ybUNvbnRyb2woQUxMX0ZJTFRFUl9WQUxVRSksXG4gICAgcmFuZ2U6ICAgICAgbmV3IEZvcm1Db250cm9sKCc3ZCcgYXMgQXVkaXREYXRlUmFuZ2UpLFxuICB9KTtcblxuICBwdWJsaWMgZW50aXR5Q29uZmlnITogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnO1xuICBwdWJsaWMgZW52Q29uZmlnITogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnO1xuICBwdWJsaWMgdXNlckNvbmZpZyE6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZztcbiAgcHVibGljIHJhbmdlQ29uZmlnITogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnO1xuXG4gIHB1YmxpYyB0cmFja0J5SWQgPSAoXzogbnVtYmVyLCBlOiBBdWRpdEVudHJ5KTogc3RyaW5nID0+IGUuaWQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmFuZ2VNczogUmVjb3JkPEF1ZGl0RGF0ZVJhbmdlLCBudW1iZXI+ID0ge1xuICAgICcyNGgnOiAyNCAqIDYwICogNjAgKiAxMDAwLFxuICAgICc3ZCc6ICA3ICAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgJzMwZCc6IDMwICogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICAnYWxsJzogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICB9O1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyc0Zvcm0ucGF0Y2hWYWx1ZSh7IHJhbmdlOiB0aGlzLmRlZmF1bHRSYW5nZSB9KTtcblxuICAgIHRoaXMuZW50aXR5Q29uZmlnID0gdGhpcy5idWlsZFNlbGVjdENvbmZpZygnZW50aXR5VHlwZScsICdBbGwgZW50aXR5IHR5cGVzJywgdGhpcy5lbnRpdHlUeXBlT3B0aW9ucyk7XG4gICAgdGhpcy5lbnZDb25maWcgICAgPSB0aGlzLmJ1aWxkU2VsZWN0Q29uZmlnKCdlbnYnLCAgICAgICAgJ0FsbCBlbnZpcm9ubWVudHMnLCB0aGlzLmVudk9wdGlvbnMpO1xuICAgIHRoaXMudXNlckNvbmZpZyAgID0gdGhpcy5idWlsZFNlbGVjdENvbmZpZygndXNlcicsICAgICAgICdBbGwgdXNlcnMnLCAgICAgICAgdGhpcy51c2VyT3B0aW9ucyk7XG4gICAgdGhpcy5yYW5nZUNvbmZpZyAgPSB0aGlzLmJ1aWxkU2VsZWN0Q29uZmlnKCdyYW5nZScsICdMYXN0IDcgZGF5cycsIFtcbiAgICAgIHsgdmFsdWU6ICcyNGgnLCBsYWJlbDogJ0xhc3QgMjRoJyB9LFxuICAgICAgeyB2YWx1ZTogJzdkJywgIGxhYmVsOiAnTGFzdCA3IGRheXMnIH0sXG4gICAgICB7IHZhbHVlOiAnMzBkJywgbGFiZWw6ICdMYXN0IDMwIGRheXMnIH0sXG4gICAgICB7IHZhbHVlOiAnYWxsJywgbGFiZWw6ICdBbGwgdGltZScgfSxcbiAgICBdLCBmYWxzZSk7XG5cbiAgICB0aGlzLmZpbHRlcnNGb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHRoaXMuY3VycmVudEZpbHRlclN0YXRlKCkpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmlsdGVyZWRFbnRyaWVzKCk6IEF1ZGl0RW50cnlbXSB7XG4gICAgY29uc3QgZiA9IHRoaXMuY3VycmVudEZpbHRlclN0YXRlKCk7XG4gICAgY29uc3QgY3V0b2ZmID0gdGhpcy5yYW5nZU1zW2YucmFuZ2VdO1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuICh0aGlzLmVudHJpZXMgfHwgW10pLmZpbHRlcihlID0+IHtcbiAgICAgIGlmIChmLmVudGl0eVR5cGUgIT09IEFMTF9GSUxURVJfVkFMVUUgJiYgZS5lbnRpdHlUeXBlICE9PSBmLmVudGl0eVR5cGUpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICBpZiAoZi5lbnYgIT09IEFMTF9GSUxURVJfVkFMVUUgJiYgIXRoaXMuZW50cnlNYXRjaGVzRW52KGUsIGYuZW52KSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIGlmIChmLnVzZXIgIT09IEFMTF9GSUxURVJfVkFMVUUgJiYgZS51c2VyICE9PSBmLnVzZXIpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICBpZiAoY3V0b2ZmICE9PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpIHtcbiAgICAgICAgY29uc3QgdHMgPSB0aGlzLnBhcnNlVHMoZS50cyk7XG4gICAgICAgIGlmICh0cyAhPSBudWxsICYmIG5vdyAtIHRzID4gY3V0b2ZmKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25DbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW50cnlNYXRjaGVzRW52KGVudHJ5OiBBdWRpdEVudHJ5LCBlbnY6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoZW50cnkuZW50aXR5TmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhlbnYudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlVHModHM6IHN0cmluZyk6IG51bWJlciB8IG51bGwge1xuICAgIGlmICghdHMpIHsgcmV0dXJuIG51bGw7IH1cbiAgICBjb25zdCB0ID0gRGF0ZS5wYXJzZSh0cyk7XG4gICAgcmV0dXJuIE51bWJlci5pc05hTih0KSA/IG51bGwgOiB0O1xuICB9XG5cbiAgcHJpdmF0ZSBjdXJyZW50RmlsdGVyU3RhdGUoKTogQXVkaXRMb2dGaWx0ZXJTdGF0ZSB7XG4gICAgY29uc3QgdiA9IHRoaXMuZmlsdGVyc0Zvcm0udmFsdWU7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0eVR5cGU6IHYuZW50aXR5VHlwZSA/PyBBTExfRklMVEVSX1ZBTFVFLFxuICAgICAgZW52OiAgICAgICAgdi5lbnYgICAgICAgID8/IEFMTF9GSUxURVJfVkFMVUUsXG4gICAgICB1c2VyOiAgICAgICB2LnVzZXIgICAgICAgPz8gQUxMX0ZJTFRFUl9WQUxVRSxcbiAgICAgIHJhbmdlOiAgICAgICh2LnJhbmdlIGFzIEF1ZGl0RGF0ZVJhbmdlKSA/PyAnN2QnLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VsZWN0Q29uZmlnKFxuICAgIGtleTogc3RyaW5nLFxuICAgIHBsYWNlaG9sZGVyOiBzdHJpbmcsXG4gICAgaXRlbXM6IEF1ZGl0RmlsdGVyT3B0aW9uW10sXG4gICAgaW5jbHVkZUFsbDogYm9vbGVhbiA9IHRydWUsXG4gICk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgY29uc3Qgb3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcbiAgICBpZiAoaW5jbHVkZUFsbCkge1xuICAgICAgb3B0aW9ucy5wdXNoKHsgaWQ6IEFMTF9GSUxURVJfVkFMVUUsIHZhbHVlOiBBTExfRklMVEVSX1ZBTFVFLCBuYW1lOiBwbGFjZWhvbGRlciwgbGFiZWw6IHBsYWNlaG9sZGVyIH0pO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGl0IG9mIGl0ZW1zKSB7XG4gICAgICBvcHRpb25zLnB1c2goeyBpZDogaXQudmFsdWUsIHZhbHVlOiBpdC52YWx1ZSwgbmFtZTogaXQubGFiZWwsIGxhYmVsOiBpdC5sYWJlbCB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleSxcbiAgICAgIGxhYmVsOiAnJyxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgICBvcHRpb25zLFxuICAgIH07XG4gIH1cbn1cbiIsIjxoZWFkZXIgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtc3RhcnQgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTMgY3FhLXB4LVsyMnB4XSBjcWEtcHktWzE4cHhdIGNxYS1ib3JkZXItYiBjcWEtYm9yZGVyLVsjRTVFN0VCXSBjcWEtZmxleC1zaHJpbmstMCBjcWEtZm9udC1pbnRlclwiPlxuICA8ZGl2IGNsYXNzPVwiY3FhLW1pbi13LTBcIj5cbiAgICA8aDMgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtbS0wIGNxYS10ZXh0LVsxNXB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzBGMTcyQV1cIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LXByaW1hcnlcIiBzdHlsZT1cImZvbnQtc2l6ZToxOHB4O3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7bGluZS1oZWlnaHQ6MThweDtjb2xvcjojM0Y0M0VFO1wiPmhpc3Rvcnk8L21hdC1pY29uPlxuICAgICAgQXVkaXQgbG9nXG4gICAgPC9oMz5cbiAgICA8cCBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjNjQ3NDhCXSBjcWEtbXQtMC41IGNxYS1tYi0wXCI+XG4gICAgICBBbGwgY2hhbmdlcyBhY3Jvc3MgZW52aXJvbm1lbnRzLCBwcm9maWxlcywgYW5kIGdsb2JhbHMuIFJlYWQtb25seSwgYXBwZW5kLW9ubHkuXG4gICAgPC9wPlxuICA8L2Rpdj5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjcWEtYXVkaXQtbG9nLWNsb3NlLWJ0blwiIChjbGljayk9XCJvbkNsb3NlKClcIiBhcmlhLWxhYmVsPVwiQ2xvc2UgYXVkaXQgbG9nXCI+XG4gICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG48L2hlYWRlcj5cblxuPHNlY3Rpb24gY2xhc3M9XCJjcWEtZ3JpZCBjcWEtZ2FwLTIgY3FhLXB4LVsyMnB4XSBjcWEtcHktMyBjcWEtYm9yZGVyLWIgY3FhLWJvcmRlci1bI0U1RTdFQl0gY3FhLWZsZXgtc2hyaW5rLTBcIlxuICAgICAgICAgc3R5bGU9XCJncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCBtaW5tYXgoMCwgMWZyKSk7IGJhY2tncm91bmQ6I0ZBRkJGQztcIj5cbiAgPGNxYS1keW5hbWljLXNlbGVjdCBbZm9ybV09XCJmaWx0ZXJzRm9ybVwiIFtjb25maWddPVwiZW50aXR5Q29uZmlnXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwiZmlsdGVyc0Zvcm1cIiBbY29uZmlnXT1cImVudkNvbmZpZ1wiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cImZpbHRlcnNGb3JtXCIgW2NvbmZpZ109XCJ1c2VyQ29uZmlnXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwiZmlsdGVyc0Zvcm1cIiBbY29uZmlnXT1cInJhbmdlQ29uZmlnXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG48L3NlY3Rpb24+XG5cbjxkaXYgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1vdmVyZmxvdy15LWF1dG9cIj5cbiAgPGNxYS1mdWxsLXRhYmxlLWxvYWRlciAqbmdJZj1cImlzTG9hZGluZ1wiPjwvY3FhLWZ1bGwtdGFibGUtbG9hZGVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxuICAgIDxjcWEtZW1wdHktc3RhdGVcbiAgICAgICpuZ0lmPVwiZmlsdGVyZWRFbnRyaWVzLmxlbmd0aCA9PT0gMDsgZWxzZSBsaXN0VHBsXCJcbiAgICAgIHRpdGxlPVwiTm8gZW50cmllcyBtYXRjaCB5b3VyIGZpbHRlcnNcIlxuICAgICAgZGVzY3JpcHRpb249XCJBZGp1c3QgdGhlIGZpbHRlcnMgYWJvdmUgdG8gd2lkZW4gdGhlIHNlYXJjaC5cIj5cbiAgICA8L2NxYS1lbXB0eS1zdGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2xpc3RUcGw+XG4gICAgICA8Y3FhLWF1ZGl0LWxvZy1lbnRyeS1jYXJkXG4gICAgICAgICpuZ0Zvcj1cImxldCBlIG9mIGZpbHRlcmVkRW50cmllczsgdHJhY2tCeTogdHJhY2tCeUlkXCJcbiAgICAgICAgW2VudHJ5XT1cImVcIj5cbiAgICAgIDwvY3FhLWF1ZGl0LWxvZy1lbnRyeS1jYXJkPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export const ALL_FILTER_VALUE = '__all__';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbG9nLWRyYXdlci5tb2RlbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2F1ZGl0LWxvZy1kcmF3ZXIvYXVkaXQtbG9nLWRyYXdlci5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNkNBLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IHR5cGUgQXVkaXRFbnRpdHlUeXBlID0gJ0Vudmlyb25tZW50IFZhcmlhYmxlJyB8ICdUZXN0IERhdGEgUHJvZmlsZScgfCAnR2xvYmFsIERhdGEnO1xuZXhwb3J0IHR5cGUgQXVkaXREYXRlUmFuZ2UgPSAnMjRoJyB8ICc3ZCcgfCAnMzBkJyB8ICdhbGwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0RW50cnkge1xuICBpZDogc3RyaW5nO1xuICB0czogc3RyaW5nO1xuICB1c2VyOiBzdHJpbmc7XG4gIGVudGl0eVR5cGU6IEF1ZGl0RW50aXR5VHlwZTtcbiAgZW50aXR5TmFtZTogc3RyaW5nO1xuICBjaGFuZ2U6IHN0cmluZztcbiAgYmVmb3JlPzogc3RyaW5nIHwgbnVsbDtcbiAgYWZ0ZXI/OiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0RmlsdGVyT3B0aW9uIHtcbiAgdmFsdWU6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ0RyYXdlcklucHV0cyB7XG4gIGVudHJpZXM6IEF1ZGl0RW50cnlbXTtcbiAgZW50aXR5VHlwZU9wdGlvbnM/OiBBdWRpdEZpbHRlck9wdGlvbltdO1xuICBlbnZPcHRpb25zPzogQXVkaXRGaWx0ZXJPcHRpb25bXTtcbiAgdXNlck9wdGlvbnM/OiBBdWRpdEZpbHRlck9wdGlvbltdO1xuICBkZWZhdWx0UmFuZ2U/OiBBdWRpdERhdGVSYW5nZTtcbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ0ZpbHRlclN0YXRlIHtcbiAgZW50aXR5VHlwZTogc3RyaW5nO1xuICBlbnY6IHN0cmluZztcbiAgdXNlcjogc3RyaW5nO1xuICByYW5nZTogQXVkaXREYXRlUmFuZ2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dEcmF3ZXJSZWYge1xuICBmaWx0ZXJDaGFuZ2UkOiBPYnNlcnZhYmxlPEF1ZGl0TG9nRmlsdGVyU3RhdGU+O1xuICBhZnRlckNsb3NlZCQ6IE9ic2VydmFibGU8dm9pZD47XG4gIGNsb3NlKCk6IHZvaWQ7XG4gIHVwZGF0ZUVudHJpZXMoZW50cmllczogQXVkaXRFbnRyeVtdKTogdm9pZDtcbiAgdXBkYXRlTG9hZGluZyhpc0xvYWRpbmc6IGJvb2xlYW4pOiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgQUxMX0ZJTFRFUl9WQUxVRSA9ICdfX2FsbF9fJztcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ0RyYXdlckludGVybmFsUmVmIGV4dGVuZHMgQXVkaXRMb2dEcmF3ZXJSZWYge1xuICByZWFkb25seSBmaWx0ZXJDaGFuZ2U6IFN1YmplY3Q8QXVkaXRMb2dGaWx0ZXJTdGF0ZT47XG4gIHJlYWRvbmx5IGFmdGVyQ2xvc2VkOiBTdWJqZWN0PHZvaWQ+O1xufVxuIl19
@@ -0,0 +1,84 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { OverlayConfig } from '@angular/cdk/overlay';
3
+ import { ComponentPortal } from '@angular/cdk/portal';
4
+ import { Subject } from 'rxjs';
5
+ import { filter } from 'rxjs/operators';
6
+ import { AuditLogDrawerComponent } from './audit-log-drawer.component';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/cdk/overlay";
9
+ export class AuditLogDrawerService {
10
+ constructor(overlay, injector) {
11
+ this.overlay = overlay;
12
+ this.injector = injector;
13
+ this.currentOverlayRef = null;
14
+ }
15
+ open(inputs) {
16
+ if (this.currentOverlayRef) {
17
+ this.currentOverlayRef.dispose();
18
+ this.currentOverlayRef = null;
19
+ }
20
+ const positionStrategy = this.overlay.position()
21
+ .global()
22
+ .right('0')
23
+ .top('0')
24
+ .bottom('0');
25
+ const overlayRef = this.overlay.create(new OverlayConfig({
26
+ hasBackdrop: true,
27
+ backdropClass: ['cqa-audit-log-drawer-backdrop'],
28
+ scrollStrategy: this.overlay.scrollStrategies.block(),
29
+ positionStrategy,
30
+ panelClass: ['cqa-audit-log-drawer-panel', 'cqa-ui-root'],
31
+ maxWidth: '100vw',
32
+ height: '100%',
33
+ }));
34
+ const portal = new ComponentPortal(AuditLogDrawerComponent, null, this.injector);
35
+ const componentRef = overlayRef.attach(portal);
36
+ const instance = componentRef.instance;
37
+ instance.entries = inputs.entries ?? [];
38
+ instance.entityTypeOptions = inputs.entityTypeOptions ?? [];
39
+ instance.envOptions = inputs.envOptions ?? [];
40
+ instance.userOptions = inputs.userOptions ?? [];
41
+ instance.defaultRange = inputs.defaultRange ?? '7d';
42
+ instance.isLoading = !!inputs.isLoading;
43
+ componentRef.changeDetectorRef.markForCheck();
44
+ const filterChange = new Subject();
45
+ const afterClosed = new Subject();
46
+ instance.filterChange.subscribe((s) => filterChange.next(s));
47
+ const closeAll = () => {
48
+ if (!this.currentOverlayRef) {
49
+ return;
50
+ }
51
+ overlayRef.dispose();
52
+ this.currentOverlayRef = null;
53
+ afterClosed.next();
54
+ afterClosed.complete();
55
+ filterChange.complete();
56
+ };
57
+ instance.close.subscribe(() => closeAll());
58
+ overlayRef.backdropClick().subscribe(() => closeAll());
59
+ overlayRef.keydownEvents()
60
+ .pipe(filter((e) => e.key === 'Escape' || e.key === 'Esc'))
61
+ .subscribe(() => closeAll());
62
+ this.currentOverlayRef = overlayRef;
63
+ return {
64
+ filterChange$: filterChange.asObservable(),
65
+ afterClosed$: afterClosed.asObservable(),
66
+ close: () => closeAll(),
67
+ updateEntries: (entries) => {
68
+ instance.entries = entries ?? [];
69
+ componentRef.changeDetectorRef.markForCheck();
70
+ },
71
+ updateLoading: (isLoading) => {
72
+ instance.isLoading = !!isLoading;
73
+ componentRef.changeDetectorRef.markForCheck();
74
+ },
75
+ };
76
+ }
77
+ }
78
+ AuditLogDrawerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuditLogDrawerService, deps: [{ token: i1.Overlay }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
79
+ AuditLogDrawerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuditLogDrawerService, providedIn: 'root' });
80
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuditLogDrawerService, decorators: [{
81
+ type: Injectable,
82
+ args: [{ providedIn: 'root' }]
83
+ }], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.Injector }]; } });
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbG9nLWRyYXdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9hdWRpdC1sb2ctZHJhd2VyL2F1ZGl0LWxvZy1kcmF3ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBVyxhQUFhLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7OztBQVF2RSxNQUFNLE9BQU8scUJBQXFCO0lBR2hDLFlBQTZCLE9BQWdCLEVBQW1CLFFBQWtCO1FBQXJELFlBQU8sR0FBUCxPQUFPLENBQVM7UUFBbUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUYxRSxzQkFBaUIsR0FBc0IsSUFBSSxDQUFDO0lBRWlDLENBQUM7SUFFL0UsSUFBSSxDQUFDLE1BQTRCO1FBQ3RDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1NBQy9CO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTthQUM3QyxNQUFNLEVBQUU7YUFDUixLQUFLLENBQUMsR0FBRyxDQUFDO2FBQ1YsR0FBRyxDQUFDLEdBQUcsQ0FBQzthQUNSLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVmLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENB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RUFBRTtnQkFDekIsUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO2dCQUNqQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDaEQsQ0FBQztZQUNELGFBQWEsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUMzQixRQUFRLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ2pDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNoRCxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7O2tIQTFFVSxxQkFBcUI7c0hBQXJCLHFCQUFxQixjQURSLE1BQU07MkZBQ25CLHFCQUFxQjtrQkFEakMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheUNvbmZpZywgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBBdWRpdExvZ0RyYXdlckNvbXBvbmVudCB9IGZyb20gJy4vYXVkaXQtbG9nLWRyYXdlci5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQXVkaXRMb2dEcmF3ZXJJbnB1dHMsXG4gIEF1ZGl0TG9nRHJhd2VyUmVmLFxuICBBdWRpdExvZ0ZpbHRlclN0YXRlLFxufSBmcm9tICcuL2F1ZGl0LWxvZy1kcmF3ZXIubW9kZWxzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBdWRpdExvZ0RyYXdlclNlcnZpY2Uge1xuICBwcml2YXRlIGN1cnJlbnRPdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBvdmVybGF5OiBPdmVybGF5LCBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3Rvcikge31cblxuICBwdWJsaWMgb3BlbihpbnB1dHM6IEF1ZGl0TG9nRHJhd2VySW5wdXRzKTogQXVkaXRMb2dEcmF3ZXJSZWYge1xuICAgIGlmICh0aGlzLmN1cnJlbnRPdmVybGF5UmVmKSB7XG4gICAgICB0aGlzLmN1cnJlbnRPdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuY3VycmVudE92ZXJsYXlSZWYgPSBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXkucG9zaXRpb24oKVxuICAgICAgLmdsb2JhbCgpXG4gICAgICAucmlnaHQoJzAnKVxuICAgICAgLnRvcCgnMCcpXG4gICAgICAuYm90dG9tKCcwJyk7XG5cbiAgICBjb25zdCBvdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZShuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgIGJhY2tkcm9wQ2xhc3M6IFsnY3FhLWF1ZGl0LWxvZy1kcmF3ZXItYmFja2Ryb3AnXSxcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5ibG9jaygpLFxuICAgICAgcG9zaXRpb25TdHJhdGVneSxcbiAgICAgIHBhbmVsQ2xhc3M6IFsnY3FhLWF1ZGl0LWxvZy1kcmF3ZXItcGFuZWwnLCAnY3FhLXVpLXJvb3QnXSxcbiAgICAgIG1heFdpZHRoOiAnMTAwdncnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgfSkpO1xuXG4gICAgY29uc3QgcG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChBdWRpdExvZ0RyYXdlckNvbXBvbmVudCwgbnVsbCwgdGhpcy5pbmplY3Rvcik7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gb3ZlcmxheVJlZi5hdHRhY2gocG9ydGFsKTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZTtcblxuICAgIGluc3RhbmNlLmVudHJpZXMgPSBpbnB1dHMuZW50cmllcyA/PyBbXTtcbiAgICBpbnN0YW5jZS5lbnRpdHlUeXBlT3B0aW9ucyA9IGlucHV0cy5lbnRpdHlUeXBlT3B0aW9ucyA/PyBbXTtcbiAgICBpbnN0YW5jZS5lbnZPcHRpb25zID0gaW5wdXRzLmVudk9wdGlvbnMgPz8gW107XG4gICAgaW5zdGFuY2UudXNlck9wdGlvbnMgPSBpbnB1dHMudXNlck9wdGlvbnMgPz8gW107XG4gICAgaW5zdGFuY2UuZGVmYXVsdFJhbmdlID0gaW5wdXRzLmRlZmF1bHRSYW5nZSA/PyAnN2QnO1xuICAgIGluc3RhbmNlLmlzTG9hZGluZyA9ICEhaW5wdXRzLmlzTG9hZGluZztcbiAgICBjb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG5cbiAgICBjb25zdCBmaWx0ZXJDaGFuZ2UgPSBuZXcgU3ViamVjdDxBdWRpdExvZ0ZpbHRlclN0YXRlPigpO1xuICAgIGNvbnN0IGFmdGVyQ2xvc2VkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGluc3RhbmNlLmZpbHRlckNoYW5nZS5zdWJzY3JpYmUoKHM6IEF1ZGl0TG9nRmlsdGVyU3RhdGUpID0+IGZpbHRlckNoYW5nZS5uZXh0KHMpKTtcblxuICAgIGNvbnN0IGNsb3NlQWxsID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmN1cnJlbnRPdmVybGF5UmVmKSB7IHJldHVybjsgfVxuICAgICAgb3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgICB0aGlzLmN1cnJlbnRPdmVybGF5UmVmID0gbnVsbDtcbiAgICAgIGFmdGVyQ2xvc2VkLm5leHQoKTtcbiAgICAgIGFmdGVyQ2xvc2VkLmNvbXBsZXRlKCk7XG4gICAgICBmaWx0ZXJDaGFuZ2UuY29tcGxldGUoKTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UuY2xvc2Uuc3Vic2NyaWJlKCgpID0+IGNsb3NlQWxsKCkpO1xuICAgIG92ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKSA9PiBjbG9zZUFsbCgpKTtcbiAgICBvdmVybGF5UmVmLmtleWRvd25FdmVudHMoKVxuICAgICAgLnBpcGUoZmlsdGVyKChlOiBLZXlib2FyZEV2ZW50KSA9PiBlLmtleSA9PT0gJ0VzY2FwZScgfHwgZS5rZXkgPT09ICdFc2MnKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gY2xvc2VBbGwoKSk7XG5cbiAgICB0aGlzLmN1cnJlbnRPdmVybGF5UmVmID0gb3ZlcmxheVJlZjtcblxuICAgIHJldHVybiB7XG4gICAgICBmaWx0ZXJDaGFuZ2UkOiBmaWx0ZXJDaGFuZ2UuYXNPYnNlcnZhYmxlKCksXG4gICAgICBhZnRlckNsb3NlZCQ6IGFmdGVyQ2xvc2VkLmFzT2JzZXJ2YWJsZSgpLFxuICAgICAgY2xvc2U6ICgpID0+IGNsb3NlQWxsKCksXG4gICAgICB1cGRhdGVFbnRyaWVzOiAoZW50cmllcykgPT4ge1xuICAgICAgICBpbnN0YW5jZS5lbnRyaWVzID0gZW50cmllcyA/PyBbXTtcbiAgICAgICAgY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICAgIHVwZGF0ZUxvYWRpbmc6IChpc0xvYWRpbmcpID0+IHtcbiAgICAgICAgaW5zdGFuY2UuaXNMb2FkaW5nID0gISFpc0xvYWRpbmc7XG4gICAgICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,30 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ export class AuditLogEntryCardComponent {
5
+ get userShortName() {
6
+ const u = this.entry?.user || '';
7
+ const idx = u.indexOf('@');
8
+ return idx > 0 ? u.substring(0, idx) : u;
9
+ }
10
+ get etypeClass() {
11
+ switch (this.entry?.entityType) {
12
+ case 'Environment Variable': return 'cqa-audit-log-etype-ev';
13
+ case 'Test Data Profile': return 'cqa-audit-log-etype-tdp';
14
+ case 'Global Data': return 'cqa-audit-log-etype-gd';
15
+ default: return '';
16
+ }
17
+ }
18
+ get hasDiff() {
19
+ return this.entry?.before != null || this.entry?.after != null;
20
+ }
21
+ }
22
+ AuditLogEntryCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuditLogEntryCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
23
+ AuditLogEntryCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AuditLogEntryCardComponent, selector: "cqa-audit-log-entry-card", inputs: { entry: "entry" }, host: { classAttribute: "cqa-ui-root cqa-audit-log-row" }, ngImport: i0, template: "<div class=\"cqa-audit-log-meta cqa-font-inter\">\n <div class=\"cqa-audit-log-ts\">{{ entry?.ts }}</div>\n <div class=\"cqa-audit-log-user\">{{ userShortName }}</div>\n</div>\n<div class=\"cqa-min-w-0\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-flex-wrap cqa-mb-1\">\n <span class=\"cqa-audit-log-etype\" [ngClass]=\"etypeClass\">{{ entry?.entityType }}</span>\n <span class=\"cqa-text-[13px] cqa-font-medium cqa-text-[#0F172A]\">{{ entry?.entityName }}</span>\n </div>\n <div class=\"cqa-text-xs cqa-text-[#64748B]\">{{ entry?.change }}</div>\n <div *ngIf=\"hasDiff\" class=\"cqa-audit-log-diff\">\n <span class=\"cqa-audit-log-before\">{{ entry?.before || '\u2014' }}</span>\n <span class=\"cqa-audit-log-arrow\">\u2192</span>\n <span class=\"cqa-audit-log-after\">{{ entry?.after || '\u2014' }}</span>\n </div>\n</div>\n", directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuditLogEntryCardComponent, decorators: [{
25
+ type: Component,
26
+ args: [{ selector: 'cqa-audit-log-entry-card', host: { class: 'cqa-ui-root cqa-audit-log-row' }, template: "<div class=\"cqa-audit-log-meta cqa-font-inter\">\n <div class=\"cqa-audit-log-ts\">{{ entry?.ts }}</div>\n <div class=\"cqa-audit-log-user\">{{ userShortName }}</div>\n</div>\n<div class=\"cqa-min-w-0\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-flex-wrap cqa-mb-1\">\n <span class=\"cqa-audit-log-etype\" [ngClass]=\"etypeClass\">{{ entry?.entityType }}</span>\n <span class=\"cqa-text-[13px] cqa-font-medium cqa-text-[#0F172A]\">{{ entry?.entityName }}</span>\n </div>\n <div class=\"cqa-text-xs cqa-text-[#64748B]\">{{ entry?.change }}</div>\n <div *ngIf=\"hasDiff\" class=\"cqa-audit-log-diff\">\n <span class=\"cqa-audit-log-before\">{{ entry?.before || '\u2014' }}</span>\n <span class=\"cqa-audit-log-arrow\">\u2192</span>\n <span class=\"cqa-audit-log-after\">{{ entry?.after || '\u2014' }}</span>\n </div>\n</div>\n" }]
27
+ }], propDecorators: { entry: [{
28
+ type: Input
29
+ }] } });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbG9nLWVudHJ5LWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9hdWRpdC1sb2ctZHJhd2VyL2F1ZGl0LWxvZy1lbnRyeS1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYXVkaXQtbG9nLWRyYXdlci9hdWRpdC1sb2ctZW50cnktY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBUWpELE1BQU0sT0FBTywwQkFBMEI7SUFHckMsSUFBVyxhQUFhO1FBQ3RCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNqQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUU7WUFDOUIsS0FBSyxzQkFBc0IsQ0FBQyxDQUFDLE9BQU8sd0JBQXdCLENBQUM7WUFDN0QsS0FBSyxtQkFBbUIsQ0FBQyxDQUFJLE9BQU8seUJBQXlCLENBQUM7WUFDOUQsS0FBSyxhQUFhLENBQUMsQ0FBVSxPQUFPLHdCQUF3QixDQUFDO1lBQzdELE9BQU8sQ0FBQyxDQUFxQixPQUFPLEVBQUUsQ0FBQztTQUN4QztJQUNILENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDO0lBQ2pFLENBQUM7O3VIQXBCVSwwQkFBMEI7MkdBQTFCLDBCQUEwQix1SkNSdkMsODFCQWdCQTsyRkRSYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0UsMEJBQTBCLFFBRTlCLEVBQUUsS0FBSyxFQUFFLCtCQUErQixFQUFFOzhCQUd2QyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdWRpdEVudHJ5IH0gZnJvbSAnLi9hdWRpdC1sb2ctZHJhd2VyLm1vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1hdWRpdC1sb2ctZW50cnktY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdWRpdC1sb2ctZW50cnktY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCBjcWEtYXVkaXQtbG9nLXJvdycgfSxcbn0pXG5leHBvcnQgY2xhc3MgQXVkaXRMb2dFbnRyeUNhcmRDb21wb25lbnQge1xuICBASW5wdXQoKSBlbnRyeSE6IEF1ZGl0RW50cnk7XG5cbiAgcHVibGljIGdldCB1c2VyU2hvcnROYW1lKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdSA9IHRoaXMuZW50cnk/LnVzZXIgfHwgJyc7XG4gICAgY29uc3QgaWR4ID0gdS5pbmRleE9mKCdAJyk7XG4gICAgcmV0dXJuIGlkeCA+IDAgPyB1LnN1YnN0cmluZygwLCBpZHgpIDogdTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZXR5cGVDbGFzcygpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5lbnRyeT8uZW50aXR5VHlwZSkge1xuICAgICAgY2FzZSAnRW52aXJvbm1lbnQgVmFyaWFibGUnOiByZXR1cm4gJ2NxYS1hdWRpdC1sb2ctZXR5cGUtZXYnO1xuICAgICAgY2FzZSAnVGVzdCBEYXRhIFByb2ZpbGUnOiAgICByZXR1cm4gJ2NxYS1hdWRpdC1sb2ctZXR5cGUtdGRwJztcbiAgICAgIGNhc2UgJ0dsb2JhbCBEYXRhJzogICAgICAgICAgcmV0dXJuICdjcWEtYXVkaXQtbG9nLWV0eXBlLWdkJztcbiAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzRGlmZigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyeT8uYmVmb3JlICE9IG51bGwgfHwgdGhpcy5lbnRyeT8uYWZ0ZXIgIT0gbnVsbDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNxYS1hdWRpdC1sb2ctbWV0YSBjcWEtZm9udC1pbnRlclwiPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWF1ZGl0LWxvZy10c1wiPnt7IGVudHJ5Py50cyB9fTwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY3FhLWF1ZGl0LWxvZy11c2VyXCI+e3sgdXNlclNob3J0TmFtZSB9fTwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiY3FhLW1pbi13LTBcIj5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1mbGV4LXdyYXAgY3FhLW1iLTFcIj5cbiAgICA8c3BhbiBjbGFzcz1cImNxYS1hdWRpdC1sb2ctZXR5cGVcIiBbbmdDbGFzc109XCJldHlwZUNsYXNzXCI+e3sgZW50cnk/LmVudGl0eVR5cGUgfX08L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTNweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMEYxNzJBXVwiPnt7IGVudHJ5Py5lbnRpdHlOYW1lIH19PC9zcGFuPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjNjQ3NDhCXVwiPnt7IGVudHJ5Py5jaGFuZ2UgfX08L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImhhc0RpZmZcIiBjbGFzcz1cImNxYS1hdWRpdC1sb2ctZGlmZlwiPlxuICAgIDxzcGFuIGNsYXNzPVwiY3FhLWF1ZGl0LWxvZy1iZWZvcmVcIj57eyBlbnRyeT8uYmVmb3JlIHx8ICfigJQnIH19PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwiY3FhLWF1ZGl0LWxvZy1hcnJvd1wiPuKGkjwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cImNxYS1hdWRpdC1sb2ctYWZ0ZXJcIj57eyBlbnRyeT8uYWZ0ZXIgfHwgJ+KAlCcgfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,133 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/material/icon";
4
+ import * as i2 from "../custom-input/custom-input.component";
5
+ import * as i3 from "../button/button.component";
6
+ import * as i4 from "ngx-drag-drop";
7
+ import * as i5 from "@angular/common";
8
+ export class ManageColumnsDialogComponent {
9
+ constructor() {
10
+ this.columns = [];
11
+ this.lockedColumns = [];
12
+ this.items = [];
13
+ this.newColName = '';
14
+ this.columnsError = null;
15
+ this.trackByUid = (_, item) => item.uid;
16
+ this.nextUid = 1;
17
+ }
18
+ ngOnInit() {
19
+ const initial = Array.isArray(this.columns) ? this.columns : [];
20
+ this.items = initial.map(name => ({
21
+ uid: this.nextUid++,
22
+ originalName: name,
23
+ name,
24
+ }));
25
+ }
26
+ isLocked(item) {
27
+ if (!this.lockedColumns || this.lockedColumns.length === 0) {
28
+ return false;
29
+ }
30
+ if (item.originalName != null && this.lockedColumns.indexOf(item.originalName) !== -1) {
31
+ return true;
32
+ }
33
+ return this.lockedColumns.indexOf(item.name) !== -1;
34
+ }
35
+ onDndDrop(event) {
36
+ const dragged = event.data;
37
+ if (!dragged || event.index == null) {
38
+ return;
39
+ }
40
+ const from = this.items.findIndex(it => it.uid === dragged.uid);
41
+ if (from < 0) {
42
+ return;
43
+ }
44
+ const next = this.items.slice();
45
+ next.splice(from, 1);
46
+ const to = event.index > from ? event.index - 1 : event.index;
47
+ next.splice(to, 0, dragged);
48
+ this.items = next;
49
+ }
50
+ onMove(index, dir) {
51
+ const target = index + dir;
52
+ if (target < 0 || target >= this.items.length) {
53
+ return;
54
+ }
55
+ const next = this.items.slice();
56
+ [next[index], next[target]] = [next[target], next[index]];
57
+ this.items = next;
58
+ }
59
+ onRename(index, value) {
60
+ if (!this.items[index]) {
61
+ return;
62
+ }
63
+ this.items = this.items.map((it, i) => i === index ? { ...it, name: value } : it);
64
+ this.columnsError = null;
65
+ }
66
+ onRemove(index) {
67
+ const item = this.items[index];
68
+ if (!item || this.isLocked(item)) {
69
+ return;
70
+ }
71
+ this.items = this.items.filter((_, i) => i !== index);
72
+ this.columnsError = null;
73
+ }
74
+ onNewColNameChange(value) {
75
+ this.newColName = value;
76
+ }
77
+ onAdd() {
78
+ const trimmed = (this.newColName || '').trim();
79
+ if (!trimmed || this.itemsHasName(trimmed)) {
80
+ return;
81
+ }
82
+ this.items = [...this.items, {
83
+ uid: this.nextUid++,
84
+ originalName: null,
85
+ name: trimmed,
86
+ }];
87
+ this.newColName = '';
88
+ this.columnsError = null;
89
+ }
90
+ get canAdd() {
91
+ const trimmed = (this.newColName || '').trim();
92
+ if (!trimmed) {
93
+ return false;
94
+ }
95
+ return !this.itemsHasName(trimmed);
96
+ }
97
+ getValue() {
98
+ const trimmed = this.items.map(it => ({
99
+ originalName: it.originalName,
100
+ name: (it.name || '').trim(),
101
+ }));
102
+ if (trimmed.length === 0) {
103
+ this.columnsError = 'At least one column is required.';
104
+ return null;
105
+ }
106
+ if (trimmed.some(c => c.name.length === 0)) {
107
+ this.columnsError = 'Column names cannot be empty.';
108
+ return null;
109
+ }
110
+ const lowered = trimmed.map(c => c.name.toLowerCase());
111
+ if (new Set(lowered).size !== trimmed.length) {
112
+ this.columnsError = 'Column names must be unique.';
113
+ return null;
114
+ }
115
+ this.columnsError = null;
116
+ return { columns: trimmed };
117
+ }
118
+ itemsHasName(candidate) {
119
+ const lowered = candidate.toLowerCase();
120
+ return this.items.some(it => (it.name || '').trim().toLowerCase() === lowered);
121
+ }
122
+ }
123
+ ManageColumnsDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ManageColumnsDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
124
+ ManageColumnsDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ManageColumnsDialogComponent, selector: "cqa-manage-columns-dialog", inputs: { columns: "columns", lockedColumns: "lockedColumns" }, host: { styleAttribute: "display:block;width:100%;", classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-w-full\">\n\n <div class=\"manage-cols-drop-list cqa-flex cqa-flex-col cqa-gap-2\"\n [dndDropzone]=\"['col']\"\n dndEffectAllowed=\"move\"\n dndDragoverClass=\"dndDragover\"\n (dndDrop)=\"onDndDrop($event)\">\n <div dndPlaceholderRef class=\"manage-cols-placeholder\">Drop here</div>\n <div *ngFor=\"let item of items; let i = index; trackBy: trackByUid\"\n class=\"manage-cols-row cqa-flex cqa-items-center cqa-gap-2 cqa-px-2 cqa-py-1.5 cqa-rounded-md cqa-border cqa-border-gray-200 cqa-bg-gray-50\">\n <span class=\"manage-cols-handle cqa-flex cqa-items-center cqa-justify-center cqa-text-gray-400\"\n [dndDraggable]=\"item\"\n [dndDisableIf]=\"isLocked(item)\"\n dndType=\"col\"\n dndEffectAllowed=\"move\">\n <mat-icon style=\"font-size:18px;width:18px;height:18px;line-height:18px;\">drag_indicator</mat-icon>\n </span>\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [value]=\"item.name\"\n [fullWidth]=\"true\"\n [disabled]=\"isLocked(item)\"\n inputInlineStyle=\"font-family: 'Inter', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onRename(i, $event)\">\n </cqa-custom-input>\n <button type=\"button\" class=\"manage-cols-icon-btn\"\n title=\"Move up\"\n [disabled]=\"i === 0\"\n (click)=\"onMove(i, -1)\">\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button type=\"button\" class=\"manage-cols-icon-btn\"\n title=\"Move down\"\n [disabled]=\"i === items.length - 1\"\n (click)=\"onMove(i, 1)\">\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button type=\"button\" class=\"manage-cols-icon-btn manage-cols-icon-btn-danger\"\n title=\"Delete column\"\n [disabled]=\"isLocked(item)\"\n (click)=\"onRemove(i)\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-pt-3 cqa-mt-1 cqa-border-t cqa-border-dashed cqa-border-gray-200\">\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [value]=\"newColName\"\n [fullWidth]=\"true\"\n placeholder=\"New column name (e.g. currency)\"\n inputInlineStyle=\"font-family: 'Inter', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onNewColNameChange($event)\"\n (enterPressed)=\"onAdd()\">\n </cqa-custom-input>\n <cqa-button\n variant=\"outlined\"\n btnSize=\"sm\"\n icon=\"add\"\n text=\"Add column\"\n [disabled]=\"!canAdd\"\n (clicked)=\"onAdd()\">\n </cqa-button>\n </div>\n\n <span *ngIf=\"columnsError\" class=\"cqa-text-xs cqa-text-red-600\">{{ columnsError }}</span>\n\n <div class=\"cqa-px-3 cqa-py-2 cqa-rounded-md cqa-bg-primary-surface cqa-border cqa-border-success-100 cqa-text-xs cqa-text-gray-700\">\n <strong class=\"cqa-text-gray-900\">Heads up:</strong>\n Deleting a column removes its data from every environment. Renaming keeps the data in place.\n </div>\n\n</div>\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.CustomInputComponent, selector: "cqa-custom-input", inputs: ["inputId", "label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i3.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i4.DndDropzoneDirective, selector: "[dndDropzone]", inputs: ["dndDropzone", "dndEffectAllowed", "dndAllowExternal", "dndHorizontal", "dndDragoverClass", "dndDropzoneDisabledClass", "dndDisableIf", "dndDisableDropIf"], outputs: ["dndDragover", "dndDrop"] }, { type: i4.DndPlaceholderRefDirective, selector: "[dndPlaceholderRef]" }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.DndDraggableDirective, selector: "[dndDraggable]", inputs: ["dndDraggable", "dndEffectAllowed", "dndType", "dndDraggingClass", "dndDraggingSourceClass", "dndDraggableDisabledClass", "dndDragImageOffsetFunction", "dndDisableIf", "dndDisableDragIf"], outputs: ["dndStart", "dndDrag", "dndEnd", "dndMoved", "dndCopied", "dndLinked", "dndCanceled"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
125
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ManageColumnsDialogComponent, decorators: [{
126
+ type: Component,
127
+ args: [{ selector: 'cqa-manage-columns-dialog', host: { class: 'cqa-ui-root', style: 'display:block;width:100%;' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-w-full\">\n\n <div class=\"manage-cols-drop-list cqa-flex cqa-flex-col cqa-gap-2\"\n [dndDropzone]=\"['col']\"\n dndEffectAllowed=\"move\"\n dndDragoverClass=\"dndDragover\"\n (dndDrop)=\"onDndDrop($event)\">\n <div dndPlaceholderRef class=\"manage-cols-placeholder\">Drop here</div>\n <div *ngFor=\"let item of items; let i = index; trackBy: trackByUid\"\n class=\"manage-cols-row cqa-flex cqa-items-center cqa-gap-2 cqa-px-2 cqa-py-1.5 cqa-rounded-md cqa-border cqa-border-gray-200 cqa-bg-gray-50\">\n <span class=\"manage-cols-handle cqa-flex cqa-items-center cqa-justify-center cqa-text-gray-400\"\n [dndDraggable]=\"item\"\n [dndDisableIf]=\"isLocked(item)\"\n dndType=\"col\"\n dndEffectAllowed=\"move\">\n <mat-icon style=\"font-size:18px;width:18px;height:18px;line-height:18px;\">drag_indicator</mat-icon>\n </span>\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [value]=\"item.name\"\n [fullWidth]=\"true\"\n [disabled]=\"isLocked(item)\"\n inputInlineStyle=\"font-family: 'Inter', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onRename(i, $event)\">\n </cqa-custom-input>\n <button type=\"button\" class=\"manage-cols-icon-btn\"\n title=\"Move up\"\n [disabled]=\"i === 0\"\n (click)=\"onMove(i, -1)\">\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button type=\"button\" class=\"manage-cols-icon-btn\"\n title=\"Move down\"\n [disabled]=\"i === items.length - 1\"\n (click)=\"onMove(i, 1)\">\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button type=\"button\" class=\"manage-cols-icon-btn manage-cols-icon-btn-danger\"\n title=\"Delete column\"\n [disabled]=\"isLocked(item)\"\n (click)=\"onRemove(i)\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-pt-3 cqa-mt-1 cqa-border-t cqa-border-dashed cqa-border-gray-200\">\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [value]=\"newColName\"\n [fullWidth]=\"true\"\n placeholder=\"New column name (e.g. currency)\"\n inputInlineStyle=\"font-family: 'Inter', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onNewColNameChange($event)\"\n (enterPressed)=\"onAdd()\">\n </cqa-custom-input>\n <cqa-button\n variant=\"outlined\"\n btnSize=\"sm\"\n icon=\"add\"\n text=\"Add column\"\n [disabled]=\"!canAdd\"\n (clicked)=\"onAdd()\">\n </cqa-button>\n </div>\n\n <span *ngIf=\"columnsError\" class=\"cqa-text-xs cqa-text-red-600\">{{ columnsError }}</span>\n\n <div class=\"cqa-px-3 cqa-py-2 cqa-rounded-md cqa-bg-primary-surface cqa-border cqa-border-success-100 cqa-text-xs cqa-text-gray-700\">\n <strong class=\"cqa-text-gray-900\">Heads up:</strong>\n Deleting a column removes its data from every environment. Renaming keeps the data in place.\n </div>\n\n</div>\n" }]
128
+ }], propDecorators: { columns: [{
129
+ type: Input
130
+ }], lockedColumns: [{
131
+ type: Input
132
+ }] } });
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLWNvbHVtbnMtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvbWFuYWdlLWNvbHVtbnMtZGlhbG9nL21hbmFnZS1jb2x1bW5zLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL21hbmFnZS1jb2x1bW5zLWRpYWxvZy9tYW5hZ2UtY29sdW1ucy1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7QUFtQnpELE1BQU0sT0FBTyw0QkFBNEI7SUFMekM7UUFNVyxZQUFPLEdBQWEsRUFBRSxDQUFDO1FBQ3ZCLGtCQUFhLEdBQWEsRUFBRSxDQUFDO1FBRS9CLFVBQUssR0FBd0IsRUFBRSxDQUFDO1FBQ2hDLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsaUJBQVksR0FBa0IsSUFBSSxDQUFDO1FBRW5DLGVBQVUsR0FBRyxDQUFDLENBQVMsRUFBRSxJQUF1QixFQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBRXJFLFlBQU8sR0FBRyxDQUFDLENBQUM7S0FzR3JCO0lBcEdDLFFBQVE7UUFDTixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDbkIsWUFBWSxFQUFFLElBQUk7WUFDbEIsSUFBSTtTQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVNLFFB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QUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDO0lBQ2pGLENBQUM7O3lIQS9HVSw0QkFBNEI7NkdBQTVCLDRCQUE0Qix1TkNuQnpDLGd0R0EwRUE7MkZEdkRhLDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDRSwyQkFBMkIsUUFFL0IsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSwyQkFBMkIsRUFBRTs4QkFHekQsT0FBTztzQkFBZixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERuZERyb3BFdmVudCB9IGZyb20gJ25neC1kcmFnLWRyb3AnO1xuXG5pbXBvcnQge1xuICBNYW5hZ2VDb2x1bW5zRGlhbG9nQ29sdW1uLFxuICBNYW5hZ2VDb2x1bW5zRGlhbG9nVmFsdWUsXG59IGZyb20gJy4vbWFuYWdlLWNvbHVtbnMtZGlhbG9nLm1vZGVscyc7XG5cbmludGVyZmFjZSBNYW5hZ2VDb2x1bW5zSXRlbSB7XG4gIHVpZDogbnVtYmVyO1xuICBvcmlnaW5hbE5hbWU6IHN0cmluZyB8IG51bGw7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLW1hbmFnZS1jb2x1bW5zLWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYW5hZ2UtY29sdW1ucy1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnLCBzdHlsZTogJ2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTsnIH0sXG59KVxuZXhwb3J0IGNsYXNzIE1hbmFnZUNvbHVtbnNEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBjb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuICBASW5wdXQoKSBsb2NrZWRDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHB1YmxpYyBpdGVtczogTWFuYWdlQ29sdW1uc0l0ZW1bXSA9IFtdO1xuICBwdWJsaWMgbmV3Q29sTmFtZSA9ICcnO1xuICBwdWJsaWMgY29sdW1uc0Vycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgdHJhY2tCeVVpZCA9IChfOiBudW1iZXIsIGl0ZW06IE1hbmFnZUNvbHVtbnNJdGVtKTogbnVtYmVyID0+IGl0ZW0udWlkO1xuXG4gIHByaXZhdGUgbmV4dFVpZCA9IDE7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgaW5pdGlhbCA9IEFycmF5LmlzQXJyYXkodGhpcy5jb2x1bW5zKSA/IHRoaXMuY29sdW1ucyA6IFtdO1xuICAgIHRoaXMuaXRlbXMgPSBpbml0aWFsLm1hcChuYW1lID0+ICh7XG4gICAgICB1aWQ6IHRoaXMubmV4dFVpZCsrLFxuICAgICAgb3JpZ2luYWxOYW1lOiBuYW1lLFxuICAgICAgbmFtZSxcbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgaXNMb2NrZWQoaXRlbTogTWFuYWdlQ29sdW1uc0l0ZW0pOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubG9ja2VkQ29sdW1ucyB8fCB0aGlzLmxvY2tlZENvbHVtbnMubGVuZ3RoID09PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmIChpdGVtLm9yaWdpbmFsTmFtZSAhPSBudWxsICYmIHRoaXMubG9ja2VkQ29sdW1ucy5pbmRleE9mKGl0ZW0ub3JpZ2luYWxOYW1lKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sb2NrZWRDb2x1bW5zLmluZGV4T2YoaXRlbS5uYW1lKSAhPT0gLTE7XG4gIH1cblxuICBwdWJsaWMgb25EbmREcm9wKGV2ZW50OiBEbmREcm9wRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBkcmFnZ2VkID0gZXZlbnQuZGF0YSBhcyBNYW5hZ2VDb2x1bW5zSXRlbSB8IG51bGw7XG4gICAgaWYgKCFkcmFnZ2VkIHx8IGV2ZW50LmluZGV4ID09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgZnJvbSA9IHRoaXMuaXRlbXMuZmluZEluZGV4KGl0ID0+IGl0LnVpZCA9PT0gZHJhZ2dlZC51aWQpO1xuICAgIGlmIChmcm9tIDwgMCkgeyByZXR1cm47IH1cbiAgICBjb25zdCBuZXh0ID0gdGhpcy5pdGVtcy5zbGljZSgpO1xuICAgIG5leHQuc3BsaWNlKGZyb20sIDEpO1xuICAgIGNvbnN0IHRvID0gZXZlbnQuaW5kZXggPiBmcm9tID8gZXZlbnQuaW5kZXggLSAxIDogZXZlbnQuaW5kZXg7XG4gICAgbmV4dC5zcGxpY2UodG8sIDAsIGRyYWdnZWQpO1xuICAgIHRoaXMuaXRlbXMgPSBuZXh0O1xuICB9XG5cbiAgcHVibGljIG9uTW92ZShpbmRleDogbnVtYmVyLCBkaXI6IC0xIHwgMSk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGluZGV4ICsgZGlyO1xuICAgIGlmICh0YXJnZXQgPCAwIHx8IHRhcmdldCA+PSB0aGlzLml0ZW1zLmxlbmd0aCkgeyByZXR1cm47IH1cbiAgICBjb25zdCBuZXh0ID0gdGhpcy5pdGVtcy5zbGljZSgpO1xuICAgIFtuZXh0W2luZGV4XSwgbmV4dFt0YXJnZXRdXSA9IFtuZXh0W3RhcmdldF0sIG5leHRbaW5kZXhdXTtcbiAgICB0aGlzLml0ZW1zID0gbmV4dDtcbiAgfVxuXG4gIHB1YmxpYyBvblJlbmFtZShpbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLml0ZW1zW2luZGV4XSkgeyByZXR1cm47IH1cbiAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5tYXAoKGl0LCBpKSA9PiBpID09PSBpbmRleCA/IHsgLi4uaXQsIG5hbWU6IHZhbHVlIH0gOiBpdCk7XG4gICAgdGhpcy5jb2x1bW5zRXJyb3IgPSBudWxsO1xuICB9XG5cbiAgcHVibGljIG9uUmVtb3ZlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtc1tpbmRleF07XG4gICAgaWYgKCFpdGVtIHx8IHRoaXMuaXNMb2NrZWQoaXRlbSkpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCk7XG4gICAgdGhpcy5jb2x1bW5zRXJyb3IgPSBudWxsO1xuICB9XG5cbiAgcHVibGljIG9uTmV3Q29sTmFtZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5uZXdDb2xOYW1lID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgb25BZGQoKTogdm9pZCB7XG4gICAgY29uc3QgdHJpbW1lZCA9ICh0aGlzLm5ld0NvbE5hbWUgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIXRyaW1tZWQgfHwgdGhpcy5pdGVtc0hhc05hbWUodHJpbW1lZCkpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5pdGVtcyA9IFsuLi50aGlzLml0ZW1zLCB7XG4gICAgICB1aWQ6IHRoaXMubmV4dFVpZCsrLFxuICAgICAgb3JpZ2luYWxOYW1lOiBudWxsLFxuICAgICAgbmFtZTogdHJpbW1lZCxcbiAgICB9XTtcbiAgICB0aGlzLm5ld0NvbE5hbWUgPSAnJztcbiAgICB0aGlzLmNvbHVtbnNFcnJvciA9IG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNhbkFkZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCB0cmltbWVkID0gKHRoaXMubmV3Q29sTmFtZSB8fCAnJykudHJpbSgpO1xuICAgIGlmICghdHJpbW1lZCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICByZXR1cm4gIXRoaXMuaXRlbXNIYXNOYW1lKHRyaW1tZWQpO1xuICB9XG5cbiAgcHVibGljIGdldFZhbHVlKCk6IE1hbmFnZUNvbHVtbnNEaWFsb2dWYWx1ZSB8IG51bGwge1xuICAgIGNvbnN0IHRyaW1tZWQ6IE1hbmFnZUNvbHVtbnNEaWFsb2dDb2x1bW5bXSA9IHRoaXMuaXRlbXMubWFwKGl0ID0+ICh7XG4gICAgICBvcmlnaW5hbE5hbWU6IGl0Lm9yaWdpbmFsTmFtZSxcbiAgICAgIG5hbWU6IChpdC5uYW1lIHx8ICcnKS50cmltKCksXG4gICAgfSkpO1xuXG4gICAgaWYgKHRyaW1tZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmNvbHVtbnNFcnJvciA9ICdBdCBsZWFzdCBvbmUgY29sdW1uIGlzIHJlcXVpcmVkLic7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRyaW1tZWQuc29tZShjID0+IGMubmFtZS5sZW5ndGggPT09IDApKSB7XG4gICAgICB0aGlzLmNvbHVtbnNFcnJvciA9ICdDb2x1bW4gbmFtZXMgY2Fubm90IGJlIGVtcHR5Lic7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbG93ZXJlZCA9IHRyaW1tZWQubWFwKGMgPT4gYy5uYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgIGlmIChuZXcgU2V0KGxvd2VyZWQpLnNpemUgIT09IHRyaW1tZWQubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNvbHVtbnNFcnJvciA9ICdDb2x1bW4gbmFtZXMgbXVzdCBiZSB1bmlxdWUuJztcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuY29sdW1uc0Vycm9yID0gbnVsbDtcbiAgICByZXR1cm4geyBjb2x1bW5zOiB0cmltbWVkIH07XG4gIH1cblxuICBwcml2YXRlIGl0ZW1zSGFzTmFtZShjYW5kaWRhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxvd2VyZWQgPSBjYW5kaWRhdGUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gdGhpcy5pdGVtcy5zb21lKGl0ID0+IChpdC5uYW1lIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gbG93ZXJlZCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0zIGNxYS13LWZ1bGxcIj5cblxuICA8ZGl2IGNsYXNzPVwibWFuYWdlLWNvbHMtZHJvcC1saXN0IGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIlxuICAgICAgIFtkbmREcm9wem9uZV09XCJbJ2NvbCddXCJcbiAgICAgICBkbmRFZmZlY3RBbGxvd2VkPVwibW92ZVwiXG4gICAgICAgZG5kRHJhZ292ZXJDbGFzcz1cImRuZERyYWdvdmVyXCJcbiAgICAgICAoZG5kRHJvcCk9XCJvbkRuZERyb3AoJGV2ZW50KVwiPlxuICAgIDxkaXYgZG5kUGxhY2Vob2xkZXJSZWYgY2xhc3M9XCJtYW5hZ2UtY29scy1wbGFjZWhvbGRlclwiPkRyb3AgaGVyZTwvZGl2PlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXM7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlVaWRcIlxuICAgICAgICAgY2xhc3M9XCJtYW5hZ2UtY29scy1yb3cgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXB4LTIgY3FhLXB5LTEuNSBjcWEtcm91bmRlZC1tZCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItZ3JheS0yMDAgY3FhLWJnLWdyYXktNTBcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibWFuYWdlLWNvbHMtaGFuZGxlIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS10ZXh0LWdyYXktNDAwXCJcbiAgICAgICAgICAgIFtkbmREcmFnZ2FibGVdPVwiaXRlbVwiXG4gICAgICAgICAgICBbZG5kRGlzYWJsZUlmXT1cImlzTG9ja2VkKGl0ZW0pXCJcbiAgICAgICAgICAgIGRuZFR5cGU9XCJjb2xcIlxuICAgICAgICAgICAgZG5kRWZmZWN0QWxsb3dlZD1cIm1vdmVcIj5cbiAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiZm9udC1zaXplOjE4cHg7d2lkdGg6MThweDtoZWlnaHQ6MThweDtsaW5lLWhlaWdodDoxOHB4O1wiPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgIGNsYXNzPVwiY3FhLWZsZXgtMVwiXG4gICAgICAgIFt2YWx1ZV09XCJpdGVtLm5hbWVcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2NrZWQoaXRlbSlcIlxuICAgICAgICBpbnB1dElubGluZVN0eWxlPVwiZm9udC1mYW1pbHk6ICdJbnRlcicsIHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCAnTGliZXJhdGlvbiBNb25vJywgbW9ub3NwYWNlO1wiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblJlbmFtZShpLCAkZXZlbnQpXCI+XG4gICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1hbmFnZS1jb2xzLWljb24tYnRuXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJNb3ZlIHVwXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImkgPT09IDBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25Nb3ZlKGksIC0xKVwiPlxuICAgICAgICA8bWF0LWljb24+YXJyb3dfdXB3YXJkPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtYW5hZ2UtY29scy1pY29uLWJ0blwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiTW92ZSBkb3duXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImkgPT09IGl0ZW1zLmxlbmd0aCAtIDFcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25Nb3ZlKGksIDEpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5hcnJvd19kb3dud2FyZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibWFuYWdlLWNvbHMtaWNvbi1idG4gbWFuYWdlLWNvbHMtaWNvbi1idG4tZGFuZ2VyXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJEZWxldGUgY29sdW1uXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9ja2VkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlKGkpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtcHQtMyBjcWEtbXQtMSBjcWEtYm9yZGVyLXQgY3FhLWJvcmRlci1kYXNoZWQgY3FhLWJvcmRlci1ncmF5LTIwMFwiPlxuICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICBjbGFzcz1cImNxYS1mbGV4LTFcIlxuICAgICAgW3ZhbHVlXT1cIm5ld0NvbE5hbWVcIlxuICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiTmV3IGNvbHVtbiBuYW1lIChlLmcuIGN1cnJlbmN5KVwiXG4gICAgICBpbnB1dElubGluZVN0eWxlPVwiZm9udC1mYW1pbHk6ICdJbnRlcicsIHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCAnTGliZXJhdGlvbiBNb25vJywgbW9ub3NwYWNlO1wiXG4gICAgICAodmFsdWVDaGFuZ2UpPVwib25OZXdDb2xOYW1lQ2hhbmdlKCRldmVudClcIlxuICAgICAgKGVudGVyUHJlc3NlZCk9XCJvbkFkZCgpXCI+XG4gICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgIDxjcWEtYnV0dG9uXG4gICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgYnRuU2l6ZT1cInNtXCJcbiAgICAgIGljb249XCJhZGRcIlxuICAgICAgdGV4dD1cIkFkZCBjb2x1bW5cIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjYW5BZGRcIlxuICAgICAgKGNsaWNrZWQpPVwib25BZGQoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPHNwYW4gKm5nSWY9XCJjb2x1bW5zRXJyb3JcIiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LXJlZC02MDBcIj57eyBjb2x1bW5zRXJyb3IgfX08L3NwYW4+XG5cbiAgPGRpdiBjbGFzcz1cImNxYS1weC0zIGNxYS1weS0yIGNxYS1yb3VuZGVkLW1kIGNxYS1iZy1wcmltYXJ5LXN1cmZhY2UgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXN1Y2Nlc3MtMTAwIGNxYS10ZXh0LXhzIGNxYS10ZXh0LWdyYXktNzAwXCI+XG4gICAgPHN0cm9uZyBjbGFzcz1cImNxYS10ZXh0LWdyYXktOTAwXCI+SGVhZHMgdXA6PC9zdHJvbmc+XG4gICAgRGVsZXRpbmcgYSBjb2x1bW4gcmVtb3ZlcyBpdHMgZGF0YSBmcm9tIGV2ZXJ5IGVudmlyb25tZW50LiBSZW5hbWluZyBrZWVwcyB0aGUgZGF0YSBpbiBwbGFjZS5cbiAgPC9kaXY+XG5cbjwvZGl2PlxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLWNvbHVtbnMtZGlhbG9nLm1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvbWFuYWdlLWNvbHVtbnMtZGlhbG9nL21hbmFnZS1jb2x1bW5zLWRpYWxvZy5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgTWFuYWdlQ29sdW1uc0RpYWxvZ0NvbHVtbiB7XG4gIG9yaWdpbmFsTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hbmFnZUNvbHVtbnNEaWFsb2dWYWx1ZSB7XG4gIGNvbHVtbnM6IE1hbmFnZUNvbHVtbnNEaWFsb2dDb2x1bW5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYW5hZ2VDb2x1bW5zRGlhbG9nSW5wdXRzIHtcbiAgY29sdW1ucz86IHN0cmluZ1tdO1xuICBsb2NrZWRDb2x1bW5zPzogc3RyaW5nW107XG59XG4iXX0=