@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.
- package/esm2020/lib/audit-log-drawer/audit-log-drawer.component.mjs +146 -0
- package/esm2020/lib/audit-log-drawer/audit-log-drawer.models.mjs +2 -0
- package/esm2020/lib/audit-log-drawer/audit-log-drawer.service.mjs +84 -0
- package/esm2020/lib/audit-log-drawer/audit-log-entry-card.component.mjs +30 -0
- package/esm2020/lib/manage-columns-dialog/manage-columns-dialog.component.mjs +133 -0
- package/esm2020/lib/manage-columns-dialog/manage-columns-dialog.models.mjs +2 -0
- package/esm2020/lib/ui-kit.module.mjs +16 -1
- package/esm2020/public-api.mjs +7 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +384 -2
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +379 -2
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/audit-log-drawer/audit-log-drawer.component.d.ts +34 -0
- package/lib/audit-log-drawer/audit-log-drawer.models.d.ts +43 -0
- package/lib/audit-log-drawer/audit-log-drawer.service.d.ts +13 -0
- package/lib/audit-log-drawer/audit-log-entry-card.component.d.ts +10 -0
- package/lib/manage-columns-dialog/manage-columns-dialog.component.d.ts +32 -0
- package/lib/manage-columns-dialog/manage-columns-dialog.models.d.ts +11 -0
- package/lib/ui-kit.module.d.ts +92 -89
- package/package.json +1 -1
- package/public-api.d.ts +6 -0
- package/styles.css +1 -1
|
@@ -49,7 +49,7 @@ import { DndModule } from 'ngx-drag-drop';
|
|
|
49
49
|
import * as jquery from 'jquery';
|
|
50
50
|
import * as momentImport from 'moment';
|
|
51
51
|
import 'daterangepicker';
|
|
52
|
-
import { filter } from 'rxjs/operators';
|
|
52
|
+
import { filter, takeUntil } from 'rxjs/operators';
|
|
53
53
|
import { Subject, BehaviorSubject } from 'rxjs';
|
|
54
54
|
import * as i1$7 from 'ngx-monaco-editor';
|
|
55
55
|
import { MonacoEditorModule } from 'ngx-monaco-editor';
|
|
@@ -51003,6 +51003,299 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
51003
51003
|
type: Input
|
|
51004
51004
|
}] } });
|
|
51005
51005
|
|
|
51006
|
+
class ManageColumnsDialogComponent {
|
|
51007
|
+
constructor() {
|
|
51008
|
+
this.columns = [];
|
|
51009
|
+
this.lockedColumns = [];
|
|
51010
|
+
this.items = [];
|
|
51011
|
+
this.newColName = '';
|
|
51012
|
+
this.columnsError = null;
|
|
51013
|
+
this.trackByUid = (_, item) => item.uid;
|
|
51014
|
+
this.nextUid = 1;
|
|
51015
|
+
}
|
|
51016
|
+
ngOnInit() {
|
|
51017
|
+
const initial = Array.isArray(this.columns) ? this.columns : [];
|
|
51018
|
+
this.items = initial.map(name => ({
|
|
51019
|
+
uid: this.nextUid++,
|
|
51020
|
+
originalName: name,
|
|
51021
|
+
name,
|
|
51022
|
+
}));
|
|
51023
|
+
}
|
|
51024
|
+
isLocked(item) {
|
|
51025
|
+
if (!this.lockedColumns || this.lockedColumns.length === 0) {
|
|
51026
|
+
return false;
|
|
51027
|
+
}
|
|
51028
|
+
if (item.originalName != null && this.lockedColumns.indexOf(item.originalName) !== -1) {
|
|
51029
|
+
return true;
|
|
51030
|
+
}
|
|
51031
|
+
return this.lockedColumns.indexOf(item.name) !== -1;
|
|
51032
|
+
}
|
|
51033
|
+
onDndDrop(event) {
|
|
51034
|
+
const dragged = event.data;
|
|
51035
|
+
if (!dragged || event.index == null) {
|
|
51036
|
+
return;
|
|
51037
|
+
}
|
|
51038
|
+
const from = this.items.findIndex(it => it.uid === dragged.uid);
|
|
51039
|
+
if (from < 0) {
|
|
51040
|
+
return;
|
|
51041
|
+
}
|
|
51042
|
+
const next = this.items.slice();
|
|
51043
|
+
next.splice(from, 1);
|
|
51044
|
+
const to = event.index > from ? event.index - 1 : event.index;
|
|
51045
|
+
next.splice(to, 0, dragged);
|
|
51046
|
+
this.items = next;
|
|
51047
|
+
}
|
|
51048
|
+
onMove(index, dir) {
|
|
51049
|
+
const target = index + dir;
|
|
51050
|
+
if (target < 0 || target >= this.items.length) {
|
|
51051
|
+
return;
|
|
51052
|
+
}
|
|
51053
|
+
const next = this.items.slice();
|
|
51054
|
+
[next[index], next[target]] = [next[target], next[index]];
|
|
51055
|
+
this.items = next;
|
|
51056
|
+
}
|
|
51057
|
+
onRename(index, value) {
|
|
51058
|
+
if (!this.items[index]) {
|
|
51059
|
+
return;
|
|
51060
|
+
}
|
|
51061
|
+
this.items = this.items.map((it, i) => i === index ? Object.assign(Object.assign({}, it), { name: value }) : it);
|
|
51062
|
+
this.columnsError = null;
|
|
51063
|
+
}
|
|
51064
|
+
onRemove(index) {
|
|
51065
|
+
const item = this.items[index];
|
|
51066
|
+
if (!item || this.isLocked(item)) {
|
|
51067
|
+
return;
|
|
51068
|
+
}
|
|
51069
|
+
this.items = this.items.filter((_, i) => i !== index);
|
|
51070
|
+
this.columnsError = null;
|
|
51071
|
+
}
|
|
51072
|
+
onNewColNameChange(value) {
|
|
51073
|
+
this.newColName = value;
|
|
51074
|
+
}
|
|
51075
|
+
onAdd() {
|
|
51076
|
+
const trimmed = (this.newColName || '').trim();
|
|
51077
|
+
if (!trimmed || this.itemsHasName(trimmed)) {
|
|
51078
|
+
return;
|
|
51079
|
+
}
|
|
51080
|
+
this.items = [...this.items, {
|
|
51081
|
+
uid: this.nextUid++,
|
|
51082
|
+
originalName: null,
|
|
51083
|
+
name: trimmed,
|
|
51084
|
+
}];
|
|
51085
|
+
this.newColName = '';
|
|
51086
|
+
this.columnsError = null;
|
|
51087
|
+
}
|
|
51088
|
+
get canAdd() {
|
|
51089
|
+
const trimmed = (this.newColName || '').trim();
|
|
51090
|
+
if (!trimmed) {
|
|
51091
|
+
return false;
|
|
51092
|
+
}
|
|
51093
|
+
return !this.itemsHasName(trimmed);
|
|
51094
|
+
}
|
|
51095
|
+
getValue() {
|
|
51096
|
+
const trimmed = this.items.map(it => ({
|
|
51097
|
+
originalName: it.originalName,
|
|
51098
|
+
name: (it.name || '').trim(),
|
|
51099
|
+
}));
|
|
51100
|
+
if (trimmed.length === 0) {
|
|
51101
|
+
this.columnsError = 'At least one column is required.';
|
|
51102
|
+
return null;
|
|
51103
|
+
}
|
|
51104
|
+
if (trimmed.some(c => c.name.length === 0)) {
|
|
51105
|
+
this.columnsError = 'Column names cannot be empty.';
|
|
51106
|
+
return null;
|
|
51107
|
+
}
|
|
51108
|
+
const lowered = trimmed.map(c => c.name.toLowerCase());
|
|
51109
|
+
if (new Set(lowered).size !== trimmed.length) {
|
|
51110
|
+
this.columnsError = 'Column names must be unique.';
|
|
51111
|
+
return null;
|
|
51112
|
+
}
|
|
51113
|
+
this.columnsError = null;
|
|
51114
|
+
return { columns: trimmed };
|
|
51115
|
+
}
|
|
51116
|
+
itemsHasName(candidate) {
|
|
51117
|
+
const lowered = candidate.toLowerCase();
|
|
51118
|
+
return this.items.some(it => (it.name || '').trim().toLowerCase() === lowered);
|
|
51119
|
+
}
|
|
51120
|
+
}
|
|
51121
|
+
ManageColumnsDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ManageColumnsDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
51122
|
+
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: 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: ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i5.DndDropzoneDirective, selector: "[dndDropzone]", inputs: ["dndDropzone", "dndEffectAllowed", "dndAllowExternal", "dndHorizontal", "dndDragoverClass", "dndDropzoneDisabledClass", "dndDisableIf", "dndDisableDropIf"], outputs: ["dndDragover", "dndDrop"] }, { type: i5.DndPlaceholderRefDirective, selector: "[dndPlaceholderRef]" }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.DndDraggableDirective, selector: "[dndDraggable]", inputs: ["dndDraggable", "dndEffectAllowed", "dndType", "dndDraggingClass", "dndDraggingSourceClass", "dndDraggableDisabledClass", "dndDragImageOffsetFunction", "dndDisableIf", "dndDisableDragIf"], outputs: ["dndStart", "dndDrag", "dndEnd", "dndMoved", "dndCopied", "dndLinked", "dndCanceled"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
51123
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ManageColumnsDialogComponent, decorators: [{
|
|
51124
|
+
type: Component,
|
|
51125
|
+
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" }]
|
|
51126
|
+
}], propDecorators: { columns: [{
|
|
51127
|
+
type: Input
|
|
51128
|
+
}], lockedColumns: [{
|
|
51129
|
+
type: Input
|
|
51130
|
+
}] } });
|
|
51131
|
+
|
|
51132
|
+
const ALL_FILTER_VALUE = '__all__';
|
|
51133
|
+
|
|
51134
|
+
class AuditLogEntryCardComponent {
|
|
51135
|
+
get userShortName() {
|
|
51136
|
+
var _a;
|
|
51137
|
+
const u = ((_a = this.entry) === null || _a === void 0 ? void 0 : _a.user) || '';
|
|
51138
|
+
const idx = u.indexOf('@');
|
|
51139
|
+
return idx > 0 ? u.substring(0, idx) : u;
|
|
51140
|
+
}
|
|
51141
|
+
get etypeClass() {
|
|
51142
|
+
var _a;
|
|
51143
|
+
switch ((_a = this.entry) === null || _a === void 0 ? void 0 : _a.entityType) {
|
|
51144
|
+
case 'Environment Variable': return 'cqa-audit-log-etype-ev';
|
|
51145
|
+
case 'Test Data Profile': return 'cqa-audit-log-etype-tdp';
|
|
51146
|
+
case 'Global Data': return 'cqa-audit-log-etype-gd';
|
|
51147
|
+
default: return '';
|
|
51148
|
+
}
|
|
51149
|
+
}
|
|
51150
|
+
get hasDiff() {
|
|
51151
|
+
var _a, _b;
|
|
51152
|
+
return ((_a = this.entry) === null || _a === void 0 ? void 0 : _a.before) != null || ((_b = this.entry) === null || _b === void 0 ? void 0 : _b.after) != null;
|
|
51153
|
+
}
|
|
51154
|
+
}
|
|
51155
|
+
AuditLogEntryCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuditLogEntryCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
51156
|
+
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: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
51157
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuditLogEntryCardComponent, decorators: [{
|
|
51158
|
+
type: Component,
|
|
51159
|
+
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" }]
|
|
51160
|
+
}], propDecorators: { entry: [{
|
|
51161
|
+
type: Input
|
|
51162
|
+
}] } });
|
|
51163
|
+
|
|
51164
|
+
class AuditLogDrawerComponent {
|
|
51165
|
+
constructor() {
|
|
51166
|
+
this.entries = [];
|
|
51167
|
+
this.entityTypeOptions = [];
|
|
51168
|
+
this.envOptions = [];
|
|
51169
|
+
this.userOptions = [];
|
|
51170
|
+
this.defaultRange = '7d';
|
|
51171
|
+
this.isLoading = false;
|
|
51172
|
+
this.filterChange = new EventEmitter();
|
|
51173
|
+
this.close = new EventEmitter();
|
|
51174
|
+
this.ALL = ALL_FILTER_VALUE;
|
|
51175
|
+
this.filtersForm = new FormGroup({
|
|
51176
|
+
entityType: new FormControl(ALL_FILTER_VALUE),
|
|
51177
|
+
env: new FormControl(ALL_FILTER_VALUE),
|
|
51178
|
+
user: new FormControl(ALL_FILTER_VALUE),
|
|
51179
|
+
range: new FormControl('7d'),
|
|
51180
|
+
});
|
|
51181
|
+
this.trackById = (_, e) => e.id;
|
|
51182
|
+
this.destroy$ = new Subject();
|
|
51183
|
+
this.rangeMs = {
|
|
51184
|
+
'24h': 24 * 60 * 60 * 1000,
|
|
51185
|
+
'7d': 7 * 24 * 60 * 60 * 1000,
|
|
51186
|
+
'30d': 30 * 24 * 60 * 60 * 1000,
|
|
51187
|
+
'all': Number.POSITIVE_INFINITY,
|
|
51188
|
+
};
|
|
51189
|
+
}
|
|
51190
|
+
ngOnInit() {
|
|
51191
|
+
this.filtersForm.patchValue({ range: this.defaultRange });
|
|
51192
|
+
this.entityConfig = this.buildSelectConfig('entityType', 'All entity types', this.entityTypeOptions);
|
|
51193
|
+
this.envConfig = this.buildSelectConfig('env', 'All environments', this.envOptions);
|
|
51194
|
+
this.userConfig = this.buildSelectConfig('user', 'All users', this.userOptions);
|
|
51195
|
+
this.rangeConfig = this.buildSelectConfig('range', 'Last 7 days', [
|
|
51196
|
+
{ value: '24h', label: 'Last 24h' },
|
|
51197
|
+
{ value: '7d', label: 'Last 7 days' },
|
|
51198
|
+
{ value: '30d', label: 'Last 30 days' },
|
|
51199
|
+
{ value: 'all', label: 'All time' },
|
|
51200
|
+
], false);
|
|
51201
|
+
this.filtersForm.valueChanges
|
|
51202
|
+
.pipe(takeUntil(this.destroy$))
|
|
51203
|
+
.subscribe(() => this.filterChange.emit(this.currentFilterState()));
|
|
51204
|
+
}
|
|
51205
|
+
ngOnDestroy() {
|
|
51206
|
+
this.destroy$.next();
|
|
51207
|
+
this.destroy$.complete();
|
|
51208
|
+
}
|
|
51209
|
+
get filteredEntries() {
|
|
51210
|
+
const f = this.currentFilterState();
|
|
51211
|
+
const cutoff = this.rangeMs[f.range];
|
|
51212
|
+
const now = Date.now();
|
|
51213
|
+
return (this.entries || []).filter(e => {
|
|
51214
|
+
if (f.entityType !== ALL_FILTER_VALUE && e.entityType !== f.entityType) {
|
|
51215
|
+
return false;
|
|
51216
|
+
}
|
|
51217
|
+
if (f.env !== ALL_FILTER_VALUE && !this.entryMatchesEnv(e, f.env)) {
|
|
51218
|
+
return false;
|
|
51219
|
+
}
|
|
51220
|
+
if (f.user !== ALL_FILTER_VALUE && e.user !== f.user) {
|
|
51221
|
+
return false;
|
|
51222
|
+
}
|
|
51223
|
+
if (cutoff !== Number.POSITIVE_INFINITY) {
|
|
51224
|
+
const ts = this.parseTs(e.ts);
|
|
51225
|
+
if (ts != null && now - ts > cutoff) {
|
|
51226
|
+
return false;
|
|
51227
|
+
}
|
|
51228
|
+
}
|
|
51229
|
+
return true;
|
|
51230
|
+
});
|
|
51231
|
+
}
|
|
51232
|
+
onClose() {
|
|
51233
|
+
this.close.emit();
|
|
51234
|
+
}
|
|
51235
|
+
entryMatchesEnv(entry, env) {
|
|
51236
|
+
return (entry.entityName || '').toLowerCase().includes(env.toLowerCase());
|
|
51237
|
+
}
|
|
51238
|
+
parseTs(ts) {
|
|
51239
|
+
if (!ts) {
|
|
51240
|
+
return null;
|
|
51241
|
+
}
|
|
51242
|
+
const t = Date.parse(ts);
|
|
51243
|
+
return Number.isNaN(t) ? null : t;
|
|
51244
|
+
}
|
|
51245
|
+
currentFilterState() {
|
|
51246
|
+
var _a, _b, _c, _d;
|
|
51247
|
+
const v = this.filtersForm.value;
|
|
51248
|
+
return {
|
|
51249
|
+
entityType: (_a = v.entityType) !== null && _a !== void 0 ? _a : ALL_FILTER_VALUE,
|
|
51250
|
+
env: (_b = v.env) !== null && _b !== void 0 ? _b : ALL_FILTER_VALUE,
|
|
51251
|
+
user: (_c = v.user) !== null && _c !== void 0 ? _c : ALL_FILTER_VALUE,
|
|
51252
|
+
range: (_d = v.range) !== null && _d !== void 0 ? _d : '7d',
|
|
51253
|
+
};
|
|
51254
|
+
}
|
|
51255
|
+
buildSelectConfig(key, placeholder, items, includeAll = true) {
|
|
51256
|
+
const options = [];
|
|
51257
|
+
if (includeAll) {
|
|
51258
|
+
options.push({ id: ALL_FILTER_VALUE, value: ALL_FILTER_VALUE, name: placeholder, label: placeholder });
|
|
51259
|
+
}
|
|
51260
|
+
for (const it of items) {
|
|
51261
|
+
options.push({ id: it.value, value: it.value, name: it.label, label: it.label });
|
|
51262
|
+
}
|
|
51263
|
+
return {
|
|
51264
|
+
key,
|
|
51265
|
+
label: '',
|
|
51266
|
+
placeholder,
|
|
51267
|
+
multiple: false,
|
|
51268
|
+
searchable: false,
|
|
51269
|
+
options,
|
|
51270
|
+
};
|
|
51271
|
+
}
|
|
51272
|
+
}
|
|
51273
|
+
AuditLogDrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuditLogDrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
51274
|
+
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: DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: FullTableLoaderComponent, selector: "cqa-full-table-loader", inputs: ["label"] }, { type: EmptyStateComponent, selector: "cqa-empty-state", inputs: ["preset", "imageUrl", "title", "description", "actions"], outputs: ["actionClick"] }, { type: AuditLogEntryCardComponent, selector: "cqa-audit-log-entry-card", inputs: ["entry"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
51275
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuditLogDrawerComponent, decorators: [{
|
|
51276
|
+
type: Component,
|
|
51277
|
+
args: [{ selector: 'cqa-audit-log-drawer', host: {
|
|
51278
|
+
class: 'cqa-ui-root',
|
|
51279
|
+
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);',
|
|
51280
|
+
}, 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" }]
|
|
51281
|
+
}], propDecorators: { entries: [{
|
|
51282
|
+
type: Input
|
|
51283
|
+
}], entityTypeOptions: [{
|
|
51284
|
+
type: Input
|
|
51285
|
+
}], envOptions: [{
|
|
51286
|
+
type: Input
|
|
51287
|
+
}], userOptions: [{
|
|
51288
|
+
type: Input
|
|
51289
|
+
}], defaultRange: [{
|
|
51290
|
+
type: Input
|
|
51291
|
+
}], isLoading: [{
|
|
51292
|
+
type: Input
|
|
51293
|
+
}], filterChange: [{
|
|
51294
|
+
type: Output
|
|
51295
|
+
}], close: [{
|
|
51296
|
+
type: Output
|
|
51297
|
+
}] } });
|
|
51298
|
+
|
|
51006
51299
|
class AssignEnvironmentsDialogComponent {
|
|
51007
51300
|
constructor(cdr) {
|
|
51008
51301
|
this.cdr = cdr;
|
|
@@ -51264,6 +51557,9 @@ UiKitModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
|
|
|
51264
51557
|
NewEnvironmentDialogComponent,
|
|
51265
51558
|
NewEnvironmentVariableDialogComponent,
|
|
51266
51559
|
NewTestDataProfileDialogComponent,
|
|
51560
|
+
ManageColumnsDialogComponent,
|
|
51561
|
+
AuditLogDrawerComponent,
|
|
51562
|
+
AuditLogEntryCardComponent,
|
|
51267
51563
|
AssignEnvironmentsDialogComponent,
|
|
51268
51564
|
PermissionToggleComponent,
|
|
51269
51565
|
ExportCodeModalComponent,
|
|
@@ -51454,6 +51750,9 @@ UiKitModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
|
|
|
51454
51750
|
NewEnvironmentDialogComponent,
|
|
51455
51751
|
NewEnvironmentVariableDialogComponent,
|
|
51456
51752
|
NewTestDataProfileDialogComponent,
|
|
51753
|
+
ManageColumnsDialogComponent,
|
|
51754
|
+
AuditLogDrawerComponent,
|
|
51755
|
+
AuditLogEntryCardComponent,
|
|
51457
51756
|
AssignEnvironmentsDialogComponent,
|
|
51458
51757
|
PermissionToggleComponent,
|
|
51459
51758
|
ExportCodeModalComponent,
|
|
@@ -51689,6 +51988,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
51689
51988
|
NewEnvironmentDialogComponent,
|
|
51690
51989
|
NewEnvironmentVariableDialogComponent,
|
|
51691
51990
|
NewTestDataProfileDialogComponent,
|
|
51991
|
+
ManageColumnsDialogComponent,
|
|
51992
|
+
AuditLogDrawerComponent,
|
|
51993
|
+
AuditLogEntryCardComponent,
|
|
51692
51994
|
AssignEnvironmentsDialogComponent,
|
|
51693
51995
|
PermissionToggleComponent,
|
|
51694
51996
|
ExportCodeModalComponent,
|
|
@@ -51885,6 +52187,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
51885
52187
|
NewEnvironmentDialogComponent,
|
|
51886
52188
|
NewEnvironmentVariableDialogComponent,
|
|
51887
52189
|
NewTestDataProfileDialogComponent,
|
|
52190
|
+
ManageColumnsDialogComponent,
|
|
52191
|
+
AuditLogDrawerComponent,
|
|
52192
|
+
AuditLogEntryCardComponent,
|
|
51888
52193
|
AssignEnvironmentsDialogComponent,
|
|
51889
52194
|
PermissionToggleComponent,
|
|
51890
52195
|
ExportCodeModalComponent,
|
|
@@ -51993,6 +52298,83 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
51993
52298
|
}]
|
|
51994
52299
|
}], ctorParameters: function () { return [{ type: i1.MatIconRegistry }]; } });
|
|
51995
52300
|
|
|
52301
|
+
class AuditLogDrawerService {
|
|
52302
|
+
constructor(overlay, injector) {
|
|
52303
|
+
this.overlay = overlay;
|
|
52304
|
+
this.injector = injector;
|
|
52305
|
+
this.currentOverlayRef = null;
|
|
52306
|
+
}
|
|
52307
|
+
open(inputs) {
|
|
52308
|
+
var _a, _b, _c, _d, _e;
|
|
52309
|
+
if (this.currentOverlayRef) {
|
|
52310
|
+
this.currentOverlayRef.dispose();
|
|
52311
|
+
this.currentOverlayRef = null;
|
|
52312
|
+
}
|
|
52313
|
+
const positionStrategy = this.overlay.position()
|
|
52314
|
+
.global()
|
|
52315
|
+
.right('0')
|
|
52316
|
+
.top('0')
|
|
52317
|
+
.bottom('0');
|
|
52318
|
+
const overlayRef = this.overlay.create(new OverlayConfig({
|
|
52319
|
+
hasBackdrop: true,
|
|
52320
|
+
backdropClass: ['cqa-audit-log-drawer-backdrop'],
|
|
52321
|
+
scrollStrategy: this.overlay.scrollStrategies.block(),
|
|
52322
|
+
positionStrategy,
|
|
52323
|
+
panelClass: ['cqa-audit-log-drawer-panel', 'cqa-ui-root'],
|
|
52324
|
+
maxWidth: '100vw',
|
|
52325
|
+
height: '100%',
|
|
52326
|
+
}));
|
|
52327
|
+
const portal = new ComponentPortal(AuditLogDrawerComponent, null, this.injector);
|
|
52328
|
+
const componentRef = overlayRef.attach(portal);
|
|
52329
|
+
const instance = componentRef.instance;
|
|
52330
|
+
instance.entries = (_a = inputs.entries) !== null && _a !== void 0 ? _a : [];
|
|
52331
|
+
instance.entityTypeOptions = (_b = inputs.entityTypeOptions) !== null && _b !== void 0 ? _b : [];
|
|
52332
|
+
instance.envOptions = (_c = inputs.envOptions) !== null && _c !== void 0 ? _c : [];
|
|
52333
|
+
instance.userOptions = (_d = inputs.userOptions) !== null && _d !== void 0 ? _d : [];
|
|
52334
|
+
instance.defaultRange = (_e = inputs.defaultRange) !== null && _e !== void 0 ? _e : '7d';
|
|
52335
|
+
instance.isLoading = !!inputs.isLoading;
|
|
52336
|
+
componentRef.changeDetectorRef.markForCheck();
|
|
52337
|
+
const filterChange = new Subject();
|
|
52338
|
+
const afterClosed = new Subject();
|
|
52339
|
+
instance.filterChange.subscribe((s) => filterChange.next(s));
|
|
52340
|
+
const closeAll = () => {
|
|
52341
|
+
if (!this.currentOverlayRef) {
|
|
52342
|
+
return;
|
|
52343
|
+
}
|
|
52344
|
+
overlayRef.dispose();
|
|
52345
|
+
this.currentOverlayRef = null;
|
|
52346
|
+
afterClosed.next();
|
|
52347
|
+
afterClosed.complete();
|
|
52348
|
+
filterChange.complete();
|
|
52349
|
+
};
|
|
52350
|
+
instance.close.subscribe(() => closeAll());
|
|
52351
|
+
overlayRef.backdropClick().subscribe(() => closeAll());
|
|
52352
|
+
overlayRef.keydownEvents()
|
|
52353
|
+
.pipe(filter((e) => e.key === 'Escape' || e.key === 'Esc'))
|
|
52354
|
+
.subscribe(() => closeAll());
|
|
52355
|
+
this.currentOverlayRef = overlayRef;
|
|
52356
|
+
return {
|
|
52357
|
+
filterChange$: filterChange.asObservable(),
|
|
52358
|
+
afterClosed$: afterClosed.asObservable(),
|
|
52359
|
+
close: () => closeAll(),
|
|
52360
|
+
updateEntries: (entries) => {
|
|
52361
|
+
instance.entries = entries !== null && entries !== void 0 ? entries : [];
|
|
52362
|
+
componentRef.changeDetectorRef.markForCheck();
|
|
52363
|
+
},
|
|
52364
|
+
updateLoading: (isLoading) => {
|
|
52365
|
+
instance.isLoading = !!isLoading;
|
|
52366
|
+
componentRef.changeDetectorRef.markForCheck();
|
|
52367
|
+
},
|
|
52368
|
+
};
|
|
52369
|
+
}
|
|
52370
|
+
}
|
|
52371
|
+
AuditLogDrawerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuditLogDrawerService, deps: [{ token: i1$6.Overlay }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
52372
|
+
AuditLogDrawerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuditLogDrawerService, providedIn: 'root' });
|
|
52373
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuditLogDrawerService, decorators: [{
|
|
52374
|
+
type: Injectable,
|
|
52375
|
+
args: [{ providedIn: 'root' }]
|
|
52376
|
+
}], ctorParameters: function () { return [{ type: i1$6.Overlay }, { type: i0.Injector }]; } });
|
|
52377
|
+
|
|
51996
52378
|
/**
|
|
51997
52379
|
* Opens the Step Details Drawer (Edit In Depth) as a right-side drawer overlay.
|
|
51998
52380
|
* Matches the behavior of Element popup - opens as a right-side drawer panel.
|
|
@@ -52590,5 +52972,5 @@ function buildTestCaseDetailsFromApi(data, options) {
|
|
|
52590
52972
|
* Generated bundle index. Do not edit.
|
|
52591
52973
|
*/
|
|
52592
52974
|
|
|
52593
|
-
export { ADVANCED_SUBFIELDS_BY_TYPE, ADVANCED_TOGGLE_KEYS, AIActionStepComponent, AIAgentStepComponent, API_EDIT_STEP_LABELS, ActionMenuButtonComponent, AddPrerequisiteCasesSectionComponent, AdvancedVariablesFormComponent, AiDebugAlertComponent, AiLogsWithReasoningComponent, AiPromptCardComponent, AiReasoningComponent, ApiEditStepComponent, ApiMockingCardComponent, ApiStepComponent, AssignEnvironmentsDialogComponent, AutocompleteComponent, BadgeComponent, BasicStepComponent, BreakpointsModalComponent, ButtonComponent, CUSTOM_EDIT_STEP_DATA, CUSTOM_EDIT_STEP_EDIT_IN_DEPTH, CUSTOM_EDIT_STEP_REF, CUSTOM_ELEMENT_POPUP_REF, CaptureVideoDialogComponent, ChangeHistoryComponent, ChartCardComponent, CodeEditorComponent, ColumnVisibilityComponent, CompareRunsComponent, ConditionBranchEditorComponent, ConditionDebugStepComponent, ConditionStepComponent, ConfigurationCardComponent, ConsoleAlertComponent, CoverageModuleCardComponent, CreateStepGroupComponent, CustomEditStepComponent, CustomEditStepRef, CustomEditStepService, CustomInputComponent, CustomTextareaComponent, CustomToggleComponent, DEFAULT_FOLDER_COLOR, DEFAULT_METADATA_COLOR, DEFAULT_MODULAR_CONFIG, DEFAULT_MODULAR_LABELS, DEFAULT_PRIORITY_COLOR_CONFIG, DEFAULT_REORDER_LABELS, DEFAULT_STATUS_COLOR_CONFIG, DIALOG_DATA, DIALOG_REF, DashboardHeaderComponent, DaterangepickerComponent, DaterangepickerDirective, DbQueryExecutionItemComponent, DbVerificationStepComponent, DeleteFolderDialogComponent, DeleteStepsComponent, DetailDrawerComponent, DetailDrawerTabComponent, DetailDrawerTabContentDirective, DetailSidePanelComponent, DialogComponent, DialogRef, DialogService, DocumentVerificationStepComponent, DropdownButtonComponent, DynamicCellContainerDirective, DynamicCellTemplateDirective, DynamicFilterComponent, DynamicHeaderTemplateDirective, DynamicSelectFieldComponent, DynamicTableComponent, ELEMENT_POPUP_DATA, ELEMENT_POPUP_EDIT_IN_DEPTH, EMPTY_STATE_IMAGES, EMPTY_STATE_PRESETS, ENVIRONMENT_ACCENT_COLORS, ElementFormComponent, ElementListComponent, ElementPopupComponent, ElementPopupRef, ElementPopupService, EmptyStateComponent, ErrorModalComponent, ExecutionResultModalComponent, ExportCodeModalComponent, FOLDER_DRAG_MIME, FOLDER_NAME_MAX_LENGTH, FailedStepCardComponent, FailedStepComponent, FailedTestCasesCardComponent, FileDownloadStepComponent, FileUploadComponent, FolderDragDirective, FolderDropDirective, FolderSidebarComponent, FullTableLoaderComponent, HeatErrorMapCellComponent, InsightCardComponent, ItemListComponent, IterationsLoopComponent, JumpToStepModalComponent, LiveConversationComponent, LiveExecutionStepComponent, LoopStepComponent, MONACO_LANGUAGE_MAP, MainStepCollapseComponent, MetricsCardComponent, MixedVariableInputComponent, ModularTableTemplateComponent, MoveToFolderDialogComponent, NetworkRequestComponent, NewEnvironmentDialogComponent, NewEnvironmentVariableDialogComponent, NewFolderDialogComponent, NewGlobalVariableDialogComponent, NewTestDataProfileDialogComponent, NewVersionHistoryDetailComponent, OtherButtonComponent, PRIORITY_COLORS, PaginationComponent, PermissionToggleComponent, ProgressIndicatorComponent, ProgressTextCardComponent, QuestionnaireListComponent, RESULT_COLORS, ROW_DRAG_MIME, RadioCardGroupComponent, RecordingBannerComponent, ReviewRecordedStepsModalComponent, RowDragDirective, RunExecutionAlertComponent, RunHistoryCardComponent, STATUS_COLORS, STEP_DETAILS_DRAWER_DATA, STEP_DETAILS_DRAWER_REF, STEP_DETAILS_FIELDS_BY_TYPE, STEP_DETAILS_FIELD_META, STEP_DETAILS_MODAL_DATA, STEP_DETAILS_MODAL_REF, SearchBarComponent, SegmentControlComponent, SelectedFiltersComponent, SelfHealAnalysisComponent, SessionChangesModalComponent, SessionRestorationDialogComponent, SimulatorComponent, StepBuilderActionComponent, StepBuilderAiAgentComponent, StepBuilderConditionComponent, StepBuilderCustomCodeComponent, StepBuilderDatabaseComponent, StepBuilderDocumentComponent, StepBuilderDocumentGenerationTemplateStepComponent, StepBuilderGroupComponent, StepBuilderLoopComponent, StepBuilderRecordStepComponent, StepDetailsDrawerComponent, StepDetailsDrawerRef, StepDetailsDrawerService, StepDetailsModalComponent, StepDetailsModalRef, StepDetailsModalService, StepGroupComponent, StepProgressCardComponent, StepRendererComponent, StepStatusCardComponent, StepTypes, StepperComponent, SubStepsConfirmationDialogComponent, TEST_CASE_DETAILS_FIELD_MAP, TEST_CASE_DETAILS_SELECT_KEYS, TEST_DATA_MODAL_DATA, TEST_DATA_MODAL_EDIT_IN_DEPTH, TEST_DATA_MODAL_REF, TableActionToolbarComponent, TableDataLoaderComponent, TableTemplateComponent, TailwindOverlayContainer, TemplateVariablesFormComponent, TestCaseAiAgentStepComponent, TestCaseAiVerifyStepComponent, TestCaseApiStepComponent, TestCaseConditionStepComponent, TestCaseCustomCodeStepComponent, TestCaseDatabaseStepComponent, TestCaseDetailsComponent, TestCaseDetailsEditComponent, TestCaseDetailsRendererComponent, TestCaseLinkCellComponent, TestCaseLoopStepComponent, TestCaseNormalStepComponent, TestCaseRestoreSessionStepComponent, TestCaseScreenshotStepComponent, TestCaseScrollStepComponent, TestCaseStepGroupComponent, TestCaseUploadStepComponent, TestCaseVerifyUrlStepComponent, TestDataModalComponent, TestDataModalRef, TestDataModalService, TestDistributionCardComponent, UiKitModule, UpdatedFailedStepComponent, VersionHistoryCompareComponent, VersionHistoryDetailComponent, VersionHistoryListComponent, VersionHistoryRestoreConfirmComponent, ViewCompareButtonComponent, ViewMoreFailedStepButtonComponent, VisualComparisonComponent, VisualDifferenceModalComponent, WorkspaceSelectorComponent, buildTestCaseDetailsFromApi, getDynamicFieldsFromLegacyConfig, getEmptyStatePreset, getMetadataColor, getMetadataValueStyle, getStepDetailsStepType, humanizeVariableKey, isAiAgentStepConfig, isAiVerifyStepConfig, isApiStepConfig, isConditionStepConfig, isCustomCodeStepConfig, isDatabaseStepConfig, isLoopStepConfig, isNormalStepConfig, isRestoreSessionStepConfig, isScreenshotStepConfig, isScrollStepConfig, isStepGroupConfig, isUploadStepConfig, isVerifyUrlStepConfig, mapApiVariablesToDynamicFields };
|
|
52975
|
+
export { ADVANCED_SUBFIELDS_BY_TYPE, ADVANCED_TOGGLE_KEYS, AIActionStepComponent, AIAgentStepComponent, ALL_FILTER_VALUE, API_EDIT_STEP_LABELS, ActionMenuButtonComponent, AddPrerequisiteCasesSectionComponent, AdvancedVariablesFormComponent, AiDebugAlertComponent, AiLogsWithReasoningComponent, AiPromptCardComponent, AiReasoningComponent, ApiEditStepComponent, ApiMockingCardComponent, ApiStepComponent, AssignEnvironmentsDialogComponent, AuditLogDrawerComponent, AuditLogDrawerService, AuditLogEntryCardComponent, AutocompleteComponent, BadgeComponent, BasicStepComponent, BreakpointsModalComponent, ButtonComponent, CUSTOM_EDIT_STEP_DATA, CUSTOM_EDIT_STEP_EDIT_IN_DEPTH, CUSTOM_EDIT_STEP_REF, CUSTOM_ELEMENT_POPUP_REF, CaptureVideoDialogComponent, ChangeHistoryComponent, ChartCardComponent, CodeEditorComponent, ColumnVisibilityComponent, CompareRunsComponent, ConditionBranchEditorComponent, ConditionDebugStepComponent, ConditionStepComponent, ConfigurationCardComponent, ConsoleAlertComponent, CoverageModuleCardComponent, CreateStepGroupComponent, CustomEditStepComponent, CustomEditStepRef, CustomEditStepService, CustomInputComponent, CustomTextareaComponent, CustomToggleComponent, DEFAULT_FOLDER_COLOR, DEFAULT_METADATA_COLOR, DEFAULT_MODULAR_CONFIG, DEFAULT_MODULAR_LABELS, DEFAULT_PRIORITY_COLOR_CONFIG, DEFAULT_REORDER_LABELS, DEFAULT_STATUS_COLOR_CONFIG, DIALOG_DATA, DIALOG_REF, DashboardHeaderComponent, DaterangepickerComponent, DaterangepickerDirective, DbQueryExecutionItemComponent, DbVerificationStepComponent, DeleteFolderDialogComponent, DeleteStepsComponent, DetailDrawerComponent, DetailDrawerTabComponent, DetailDrawerTabContentDirective, DetailSidePanelComponent, DialogComponent, DialogRef, DialogService, DocumentVerificationStepComponent, DropdownButtonComponent, DynamicCellContainerDirective, DynamicCellTemplateDirective, DynamicFilterComponent, DynamicHeaderTemplateDirective, DynamicSelectFieldComponent, DynamicTableComponent, ELEMENT_POPUP_DATA, ELEMENT_POPUP_EDIT_IN_DEPTH, EMPTY_STATE_IMAGES, EMPTY_STATE_PRESETS, ENVIRONMENT_ACCENT_COLORS, ElementFormComponent, ElementListComponent, ElementPopupComponent, ElementPopupRef, ElementPopupService, EmptyStateComponent, ErrorModalComponent, ExecutionResultModalComponent, ExportCodeModalComponent, FOLDER_DRAG_MIME, FOLDER_NAME_MAX_LENGTH, FailedStepCardComponent, FailedStepComponent, FailedTestCasesCardComponent, FileDownloadStepComponent, FileUploadComponent, FolderDragDirective, FolderDropDirective, FolderSidebarComponent, FullTableLoaderComponent, HeatErrorMapCellComponent, InsightCardComponent, ItemListComponent, IterationsLoopComponent, JumpToStepModalComponent, LiveConversationComponent, LiveExecutionStepComponent, LoopStepComponent, MONACO_LANGUAGE_MAP, MainStepCollapseComponent, ManageColumnsDialogComponent, MetricsCardComponent, MixedVariableInputComponent, ModularTableTemplateComponent, MoveToFolderDialogComponent, NetworkRequestComponent, NewEnvironmentDialogComponent, NewEnvironmentVariableDialogComponent, NewFolderDialogComponent, NewGlobalVariableDialogComponent, NewTestDataProfileDialogComponent, NewVersionHistoryDetailComponent, OtherButtonComponent, PRIORITY_COLORS, PaginationComponent, PermissionToggleComponent, ProgressIndicatorComponent, ProgressTextCardComponent, QuestionnaireListComponent, RESULT_COLORS, ROW_DRAG_MIME, RadioCardGroupComponent, RecordingBannerComponent, ReviewRecordedStepsModalComponent, RowDragDirective, RunExecutionAlertComponent, RunHistoryCardComponent, STATUS_COLORS, STEP_DETAILS_DRAWER_DATA, STEP_DETAILS_DRAWER_REF, STEP_DETAILS_FIELDS_BY_TYPE, STEP_DETAILS_FIELD_META, STEP_DETAILS_MODAL_DATA, STEP_DETAILS_MODAL_REF, SearchBarComponent, SegmentControlComponent, SelectedFiltersComponent, SelfHealAnalysisComponent, SessionChangesModalComponent, SessionRestorationDialogComponent, SimulatorComponent, StepBuilderActionComponent, StepBuilderAiAgentComponent, StepBuilderConditionComponent, StepBuilderCustomCodeComponent, StepBuilderDatabaseComponent, StepBuilderDocumentComponent, StepBuilderDocumentGenerationTemplateStepComponent, StepBuilderGroupComponent, StepBuilderLoopComponent, StepBuilderRecordStepComponent, StepDetailsDrawerComponent, StepDetailsDrawerRef, StepDetailsDrawerService, StepDetailsModalComponent, StepDetailsModalRef, StepDetailsModalService, StepGroupComponent, StepProgressCardComponent, StepRendererComponent, StepStatusCardComponent, StepTypes, StepperComponent, SubStepsConfirmationDialogComponent, TEST_CASE_DETAILS_FIELD_MAP, TEST_CASE_DETAILS_SELECT_KEYS, TEST_DATA_MODAL_DATA, TEST_DATA_MODAL_EDIT_IN_DEPTH, TEST_DATA_MODAL_REF, TableActionToolbarComponent, TableDataLoaderComponent, TableTemplateComponent, TailwindOverlayContainer, TemplateVariablesFormComponent, TestCaseAiAgentStepComponent, TestCaseAiVerifyStepComponent, TestCaseApiStepComponent, TestCaseConditionStepComponent, TestCaseCustomCodeStepComponent, TestCaseDatabaseStepComponent, TestCaseDetailsComponent, TestCaseDetailsEditComponent, TestCaseDetailsRendererComponent, TestCaseLinkCellComponent, TestCaseLoopStepComponent, TestCaseNormalStepComponent, TestCaseRestoreSessionStepComponent, TestCaseScreenshotStepComponent, TestCaseScrollStepComponent, TestCaseStepGroupComponent, TestCaseUploadStepComponent, TestCaseVerifyUrlStepComponent, TestDataModalComponent, TestDataModalRef, TestDataModalService, TestDistributionCardComponent, UiKitModule, UpdatedFailedStepComponent, VersionHistoryCompareComponent, VersionHistoryDetailComponent, VersionHistoryListComponent, VersionHistoryRestoreConfirmComponent, ViewCompareButtonComponent, ViewMoreFailedStepButtonComponent, VisualComparisonComponent, VisualDifferenceModalComponent, WorkspaceSelectorComponent, buildTestCaseDetailsFromApi, getDynamicFieldsFromLegacyConfig, getEmptyStatePreset, getMetadataColor, getMetadataValueStyle, getStepDetailsStepType, humanizeVariableKey, isAiAgentStepConfig, isAiVerifyStepConfig, isApiStepConfig, isConditionStepConfig, isCustomCodeStepConfig, isDatabaseStepConfig, isLoopStepConfig, isNormalStepConfig, isRestoreSessionStepConfig, isScreenshotStepConfig, isScrollStepConfig, isStepGroupConfig, isUploadStepConfig, isVerifyUrlStepConfig, mapApiVariablesToDynamicFields };
|
|
52594
52976
|
//# sourceMappingURL=cqa-lib-cqa-ui.mjs.map
|