@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.
@@ -48,7 +48,7 @@ import { DndModule } from 'ngx-drag-drop';
48
48
  import * as jquery from 'jquery';
49
49
  import * as momentImport from 'moment';
50
50
  import 'daterangepicker';
51
- import { filter } from 'rxjs/operators';
51
+ import { filter, takeUntil } from 'rxjs/operators';
52
52
  import { Subject, BehaviorSubject } from 'rxjs';
53
53
  import * as i1$7 from 'ngx-monaco-editor';
54
54
  import { MonacoEditorModule } from 'ngx-monaco-editor';
@@ -50811,6 +50811,295 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
50811
50811
  type: Input
50812
50812
  }] } });
50813
50813
 
50814
+ class ManageColumnsDialogComponent {
50815
+ constructor() {
50816
+ this.columns = [];
50817
+ this.lockedColumns = [];
50818
+ this.items = [];
50819
+ this.newColName = '';
50820
+ this.columnsError = null;
50821
+ this.trackByUid = (_, item) => item.uid;
50822
+ this.nextUid = 1;
50823
+ }
50824
+ ngOnInit() {
50825
+ const initial = Array.isArray(this.columns) ? this.columns : [];
50826
+ this.items = initial.map(name => ({
50827
+ uid: this.nextUid++,
50828
+ originalName: name,
50829
+ name,
50830
+ }));
50831
+ }
50832
+ isLocked(item) {
50833
+ if (!this.lockedColumns || this.lockedColumns.length === 0) {
50834
+ return false;
50835
+ }
50836
+ if (item.originalName != null && this.lockedColumns.indexOf(item.originalName) !== -1) {
50837
+ return true;
50838
+ }
50839
+ return this.lockedColumns.indexOf(item.name) !== -1;
50840
+ }
50841
+ onDndDrop(event) {
50842
+ const dragged = event.data;
50843
+ if (!dragged || event.index == null) {
50844
+ return;
50845
+ }
50846
+ const from = this.items.findIndex(it => it.uid === dragged.uid);
50847
+ if (from < 0) {
50848
+ return;
50849
+ }
50850
+ const next = this.items.slice();
50851
+ next.splice(from, 1);
50852
+ const to = event.index > from ? event.index - 1 : event.index;
50853
+ next.splice(to, 0, dragged);
50854
+ this.items = next;
50855
+ }
50856
+ onMove(index, dir) {
50857
+ const target = index + dir;
50858
+ if (target < 0 || target >= this.items.length) {
50859
+ return;
50860
+ }
50861
+ const next = this.items.slice();
50862
+ [next[index], next[target]] = [next[target], next[index]];
50863
+ this.items = next;
50864
+ }
50865
+ onRename(index, value) {
50866
+ if (!this.items[index]) {
50867
+ return;
50868
+ }
50869
+ this.items = this.items.map((it, i) => i === index ? { ...it, name: value } : it);
50870
+ this.columnsError = null;
50871
+ }
50872
+ onRemove(index) {
50873
+ const item = this.items[index];
50874
+ if (!item || this.isLocked(item)) {
50875
+ return;
50876
+ }
50877
+ this.items = this.items.filter((_, i) => i !== index);
50878
+ this.columnsError = null;
50879
+ }
50880
+ onNewColNameChange(value) {
50881
+ this.newColName = value;
50882
+ }
50883
+ onAdd() {
50884
+ const trimmed = (this.newColName || '').trim();
50885
+ if (!trimmed || this.itemsHasName(trimmed)) {
50886
+ return;
50887
+ }
50888
+ this.items = [...this.items, {
50889
+ uid: this.nextUid++,
50890
+ originalName: null,
50891
+ name: trimmed,
50892
+ }];
50893
+ this.newColName = '';
50894
+ this.columnsError = null;
50895
+ }
50896
+ get canAdd() {
50897
+ const trimmed = (this.newColName || '').trim();
50898
+ if (!trimmed) {
50899
+ return false;
50900
+ }
50901
+ return !this.itemsHasName(trimmed);
50902
+ }
50903
+ getValue() {
50904
+ const trimmed = this.items.map(it => ({
50905
+ originalName: it.originalName,
50906
+ name: (it.name || '').trim(),
50907
+ }));
50908
+ if (trimmed.length === 0) {
50909
+ this.columnsError = 'At least one column is required.';
50910
+ return null;
50911
+ }
50912
+ if (trimmed.some(c => c.name.length === 0)) {
50913
+ this.columnsError = 'Column names cannot be empty.';
50914
+ return null;
50915
+ }
50916
+ const lowered = trimmed.map(c => c.name.toLowerCase());
50917
+ if (new Set(lowered).size !== trimmed.length) {
50918
+ this.columnsError = 'Column names must be unique.';
50919
+ return null;
50920
+ }
50921
+ this.columnsError = null;
50922
+ return { columns: trimmed };
50923
+ }
50924
+ itemsHasName(candidate) {
50925
+ const lowered = candidate.toLowerCase();
50926
+ return this.items.some(it => (it.name || '').trim().toLowerCase() === lowered);
50927
+ }
50928
+ }
50929
+ ManageColumnsDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ManageColumnsDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
50930
+ 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"] }] });
50931
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ManageColumnsDialogComponent, decorators: [{
50932
+ type: Component,
50933
+ 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" }]
50934
+ }], propDecorators: { columns: [{
50935
+ type: Input
50936
+ }], lockedColumns: [{
50937
+ type: Input
50938
+ }] } });
50939
+
50940
+ const ALL_FILTER_VALUE = '__all__';
50941
+
50942
+ class AuditLogEntryCardComponent {
50943
+ get userShortName() {
50944
+ const u = this.entry?.user || '';
50945
+ const idx = u.indexOf('@');
50946
+ return idx > 0 ? u.substring(0, idx) : u;
50947
+ }
50948
+ get etypeClass() {
50949
+ switch (this.entry?.entityType) {
50950
+ case 'Environment Variable': return 'cqa-audit-log-etype-ev';
50951
+ case 'Test Data Profile': return 'cqa-audit-log-etype-tdp';
50952
+ case 'Global Data': return 'cqa-audit-log-etype-gd';
50953
+ default: return '';
50954
+ }
50955
+ }
50956
+ get hasDiff() {
50957
+ return this.entry?.before != null || this.entry?.after != null;
50958
+ }
50959
+ }
50960
+ AuditLogEntryCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuditLogEntryCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
50961
+ 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"] }] });
50962
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuditLogEntryCardComponent, decorators: [{
50963
+ type: Component,
50964
+ 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" }]
50965
+ }], propDecorators: { entry: [{
50966
+ type: Input
50967
+ }] } });
50968
+
50969
+ class AuditLogDrawerComponent {
50970
+ constructor() {
50971
+ this.entries = [];
50972
+ this.entityTypeOptions = [];
50973
+ this.envOptions = [];
50974
+ this.userOptions = [];
50975
+ this.defaultRange = '7d';
50976
+ this.isLoading = false;
50977
+ this.filterChange = new EventEmitter();
50978
+ this.close = new EventEmitter();
50979
+ this.ALL = ALL_FILTER_VALUE;
50980
+ this.filtersForm = new FormGroup({
50981
+ entityType: new FormControl(ALL_FILTER_VALUE),
50982
+ env: new FormControl(ALL_FILTER_VALUE),
50983
+ user: new FormControl(ALL_FILTER_VALUE),
50984
+ range: new FormControl('7d'),
50985
+ });
50986
+ this.trackById = (_, e) => e.id;
50987
+ this.destroy$ = new Subject();
50988
+ this.rangeMs = {
50989
+ '24h': 24 * 60 * 60 * 1000,
50990
+ '7d': 7 * 24 * 60 * 60 * 1000,
50991
+ '30d': 30 * 24 * 60 * 60 * 1000,
50992
+ 'all': Number.POSITIVE_INFINITY,
50993
+ };
50994
+ }
50995
+ ngOnInit() {
50996
+ this.filtersForm.patchValue({ range: this.defaultRange });
50997
+ this.entityConfig = this.buildSelectConfig('entityType', 'All entity types', this.entityTypeOptions);
50998
+ this.envConfig = this.buildSelectConfig('env', 'All environments', this.envOptions);
50999
+ this.userConfig = this.buildSelectConfig('user', 'All users', this.userOptions);
51000
+ this.rangeConfig = this.buildSelectConfig('range', 'Last 7 days', [
51001
+ { value: '24h', label: 'Last 24h' },
51002
+ { value: '7d', label: 'Last 7 days' },
51003
+ { value: '30d', label: 'Last 30 days' },
51004
+ { value: 'all', label: 'All time' },
51005
+ ], false);
51006
+ this.filtersForm.valueChanges
51007
+ .pipe(takeUntil(this.destroy$))
51008
+ .subscribe(() => this.filterChange.emit(this.currentFilterState()));
51009
+ }
51010
+ ngOnDestroy() {
51011
+ this.destroy$.next();
51012
+ this.destroy$.complete();
51013
+ }
51014
+ get filteredEntries() {
51015
+ const f = this.currentFilterState();
51016
+ const cutoff = this.rangeMs[f.range];
51017
+ const now = Date.now();
51018
+ return (this.entries || []).filter(e => {
51019
+ if (f.entityType !== ALL_FILTER_VALUE && e.entityType !== f.entityType) {
51020
+ return false;
51021
+ }
51022
+ if (f.env !== ALL_FILTER_VALUE && !this.entryMatchesEnv(e, f.env)) {
51023
+ return false;
51024
+ }
51025
+ if (f.user !== ALL_FILTER_VALUE && e.user !== f.user) {
51026
+ return false;
51027
+ }
51028
+ if (cutoff !== Number.POSITIVE_INFINITY) {
51029
+ const ts = this.parseTs(e.ts);
51030
+ if (ts != null && now - ts > cutoff) {
51031
+ return false;
51032
+ }
51033
+ }
51034
+ return true;
51035
+ });
51036
+ }
51037
+ onClose() {
51038
+ this.close.emit();
51039
+ }
51040
+ entryMatchesEnv(entry, env) {
51041
+ return (entry.entityName || '').toLowerCase().includes(env.toLowerCase());
51042
+ }
51043
+ parseTs(ts) {
51044
+ if (!ts) {
51045
+ return null;
51046
+ }
51047
+ const t = Date.parse(ts);
51048
+ return Number.isNaN(t) ? null : t;
51049
+ }
51050
+ currentFilterState() {
51051
+ const v = this.filtersForm.value;
51052
+ return {
51053
+ entityType: v.entityType ?? ALL_FILTER_VALUE,
51054
+ env: v.env ?? ALL_FILTER_VALUE,
51055
+ user: v.user ?? ALL_FILTER_VALUE,
51056
+ range: v.range ?? '7d',
51057
+ };
51058
+ }
51059
+ buildSelectConfig(key, placeholder, items, includeAll = true) {
51060
+ const options = [];
51061
+ if (includeAll) {
51062
+ options.push({ id: ALL_FILTER_VALUE, value: ALL_FILTER_VALUE, name: placeholder, label: placeholder });
51063
+ }
51064
+ for (const it of items) {
51065
+ options.push({ id: it.value, value: it.value, name: it.label, label: it.label });
51066
+ }
51067
+ return {
51068
+ key,
51069
+ label: '',
51070
+ placeholder,
51071
+ multiple: false,
51072
+ searchable: false,
51073
+ options,
51074
+ };
51075
+ }
51076
+ }
51077
+ AuditLogDrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuditLogDrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
51078
+ 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"] }] });
51079
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuditLogDrawerComponent, decorators: [{
51080
+ type: Component,
51081
+ args: [{ selector: 'cqa-audit-log-drawer', host: {
51082
+ class: 'cqa-ui-root',
51083
+ 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);',
51084
+ }, 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" }]
51085
+ }], propDecorators: { entries: [{
51086
+ type: Input
51087
+ }], entityTypeOptions: [{
51088
+ type: Input
51089
+ }], envOptions: [{
51090
+ type: Input
51091
+ }], userOptions: [{
51092
+ type: Input
51093
+ }], defaultRange: [{
51094
+ type: Input
51095
+ }], isLoading: [{
51096
+ type: Input
51097
+ }], filterChange: [{
51098
+ type: Output
51099
+ }], close: [{
51100
+ type: Output
51101
+ }] } });
51102
+
50814
51103
  class AssignEnvironmentsDialogComponent {
50815
51104
  constructor(cdr) {
50816
51105
  this.cdr = cdr;
@@ -51068,6 +51357,9 @@ UiKitModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
51068
51357
  NewEnvironmentDialogComponent,
51069
51358
  NewEnvironmentVariableDialogComponent,
51070
51359
  NewTestDataProfileDialogComponent,
51360
+ ManageColumnsDialogComponent,
51361
+ AuditLogDrawerComponent,
51362
+ AuditLogEntryCardComponent,
51071
51363
  AssignEnvironmentsDialogComponent,
51072
51364
  PermissionToggleComponent,
51073
51365
  ExportCodeModalComponent,
@@ -51258,6 +51550,9 @@ UiKitModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
51258
51550
  NewEnvironmentDialogComponent,
51259
51551
  NewEnvironmentVariableDialogComponent,
51260
51552
  NewTestDataProfileDialogComponent,
51553
+ ManageColumnsDialogComponent,
51554
+ AuditLogDrawerComponent,
51555
+ AuditLogEntryCardComponent,
51261
51556
  AssignEnvironmentsDialogComponent,
51262
51557
  PermissionToggleComponent,
51263
51558
  ExportCodeModalComponent,
@@ -51493,6 +51788,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
51493
51788
  NewEnvironmentDialogComponent,
51494
51789
  NewEnvironmentVariableDialogComponent,
51495
51790
  NewTestDataProfileDialogComponent,
51791
+ ManageColumnsDialogComponent,
51792
+ AuditLogDrawerComponent,
51793
+ AuditLogEntryCardComponent,
51496
51794
  AssignEnvironmentsDialogComponent,
51497
51795
  PermissionToggleComponent,
51498
51796
  ExportCodeModalComponent,
@@ -51689,6 +51987,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
51689
51987
  NewEnvironmentDialogComponent,
51690
51988
  NewEnvironmentVariableDialogComponent,
51691
51989
  NewTestDataProfileDialogComponent,
51990
+ ManageColumnsDialogComponent,
51991
+ AuditLogDrawerComponent,
51992
+ AuditLogEntryCardComponent,
51692
51993
  AssignEnvironmentsDialogComponent,
51693
51994
  PermissionToggleComponent,
51694
51995
  ExportCodeModalComponent,
@@ -51797,6 +52098,82 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
51797
52098
  }]
51798
52099
  }], ctorParameters: function () { return [{ type: i1.MatIconRegistry }]; } });
51799
52100
 
52101
+ class AuditLogDrawerService {
52102
+ constructor(overlay, injector) {
52103
+ this.overlay = overlay;
52104
+ this.injector = injector;
52105
+ this.currentOverlayRef = null;
52106
+ }
52107
+ open(inputs) {
52108
+ if (this.currentOverlayRef) {
52109
+ this.currentOverlayRef.dispose();
52110
+ this.currentOverlayRef = null;
52111
+ }
52112
+ const positionStrategy = this.overlay.position()
52113
+ .global()
52114
+ .right('0')
52115
+ .top('0')
52116
+ .bottom('0');
52117
+ const overlayRef = this.overlay.create(new OverlayConfig({
52118
+ hasBackdrop: true,
52119
+ backdropClass: ['cqa-audit-log-drawer-backdrop'],
52120
+ scrollStrategy: this.overlay.scrollStrategies.block(),
52121
+ positionStrategy,
52122
+ panelClass: ['cqa-audit-log-drawer-panel', 'cqa-ui-root'],
52123
+ maxWidth: '100vw',
52124
+ height: '100%',
52125
+ }));
52126
+ const portal = new ComponentPortal(AuditLogDrawerComponent, null, this.injector);
52127
+ const componentRef = overlayRef.attach(portal);
52128
+ const instance = componentRef.instance;
52129
+ instance.entries = inputs.entries ?? [];
52130
+ instance.entityTypeOptions = inputs.entityTypeOptions ?? [];
52131
+ instance.envOptions = inputs.envOptions ?? [];
52132
+ instance.userOptions = inputs.userOptions ?? [];
52133
+ instance.defaultRange = inputs.defaultRange ?? '7d';
52134
+ instance.isLoading = !!inputs.isLoading;
52135
+ componentRef.changeDetectorRef.markForCheck();
52136
+ const filterChange = new Subject();
52137
+ const afterClosed = new Subject();
52138
+ instance.filterChange.subscribe((s) => filterChange.next(s));
52139
+ const closeAll = () => {
52140
+ if (!this.currentOverlayRef) {
52141
+ return;
52142
+ }
52143
+ overlayRef.dispose();
52144
+ this.currentOverlayRef = null;
52145
+ afterClosed.next();
52146
+ afterClosed.complete();
52147
+ filterChange.complete();
52148
+ };
52149
+ instance.close.subscribe(() => closeAll());
52150
+ overlayRef.backdropClick().subscribe(() => closeAll());
52151
+ overlayRef.keydownEvents()
52152
+ .pipe(filter((e) => e.key === 'Escape' || e.key === 'Esc'))
52153
+ .subscribe(() => closeAll());
52154
+ this.currentOverlayRef = overlayRef;
52155
+ return {
52156
+ filterChange$: filterChange.asObservable(),
52157
+ afterClosed$: afterClosed.asObservable(),
52158
+ close: () => closeAll(),
52159
+ updateEntries: (entries) => {
52160
+ instance.entries = entries ?? [];
52161
+ componentRef.changeDetectorRef.markForCheck();
52162
+ },
52163
+ updateLoading: (isLoading) => {
52164
+ instance.isLoading = !!isLoading;
52165
+ componentRef.changeDetectorRef.markForCheck();
52166
+ },
52167
+ };
52168
+ }
52169
+ }
52170
+ 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 });
52171
+ AuditLogDrawerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuditLogDrawerService, providedIn: 'root' });
52172
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuditLogDrawerService, decorators: [{
52173
+ type: Injectable,
52174
+ args: [{ providedIn: 'root' }]
52175
+ }], ctorParameters: function () { return [{ type: i1$6.Overlay }, { type: i0.Injector }]; } });
52176
+
51800
52177
  /**
51801
52178
  * Opens the Step Details Drawer (Edit In Depth) as a right-side drawer overlay.
51802
52179
  * Matches the behavior of Element popup - opens as a right-side drawer panel.
@@ -52391,5 +52768,5 @@ function buildTestCaseDetailsFromApi(data, options) {
52391
52768
  * Generated bundle index. Do not edit.
52392
52769
  */
52393
52770
 
52394
- 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 };
52771
+ 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 };
52395
52772
  //# sourceMappingURL=cqa-lib-cqa-ui.mjs.map