@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.
@@ -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