@cqa-lib/cqa-ui 1.1.533 → 1.1.534

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.
@@ -842,10 +842,10 @@ class SegmentControlComponent {
842
842
  }
843
843
  }
844
844
  SegmentControlComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SegmentControlComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
845
- SegmentControlComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SegmentControlComponent, selector: "cqa-segment-control", inputs: { segments: "segments", value: "value", disabled: "disabled", containerBgColor: "containerBgColor", fullWidth: "fullWidth", size: "size" }, outputs: { valueChange: "valueChange" }, host: { properties: { "style.display": "this.hostDisplay", "style.width": "this.hostWidth" }, classAttribute: "cqa-ui-root" }, viewQueries: [{ propertyName: "segmentContainer", first: true, predicate: ["segmentContainer"], descendants: true }, { propertyName: "segmentButtons", predicate: ["segmentButton"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-ui-root\" [style.display]=\"fullWidth ? 'block' : 'inline-block'\" [style.width]=\"fullWidth ? '100%' : null\">\n <div\n #segmentContainer\n class=\"cqa-relative cqa-flex-row cqa-items-start cqa-bg-surface-light cqa-rounded-[8px]\"\n [ngClass]=\"[\n fullWidth ? 'cqa-flex' : 'cqa-inline-flex',\n size === 'lg' ? 'cqa-h-[40px] cqa-p-[4px]' : 'cqa-h-[31.5px] cqa-p-[3.5px]'\n ]\"\n role=\"tablist\"\n [attr.aria-disabled]=\"disabled || null\"\n [ngStyle]=\"containerBgColor ? {'background-color': containerBgColor} : null\"\n >\n <div\n class=\"cqa-absolute cqa-rounded-[8px] cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-pointer-events-none\"\n [class.cqa-opacity-0]=\"!isIndicatorVisible\" [ngStyle]=\"indicatorStyle\" aria-hidden=\"true\"></div>\n\n <button *ngFor=\"let segment of segments; index as index; trackBy: trackByValue\" #segmentButton type=\"button\"\n role=\"tab\"\n class=\"cqa-relative cqa-z-0 cqa-flex cqa-flex-col cqa-justify-center cqa-items-center cqa-rounded-[8px] cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-whitespace-nowrap cqa-text-center focus:cqa-outline-none focus-visible:cqa-outline-none focus-visible:cqa-ring-0 focus-visible:cqa-ring-offset-0\"\n [ngClass]=\"{\n 'cqa-flex-1 cqa-min-w-0': fullWidth,\n 'cqa-flex-none': !fullWidth,\n 'cqa-text-white cqa-font-medium': isSelected(segment),\n 'cqa-text-muted': !isSelected(segment) && !(disabled || segment.disabled),\n 'cqa-cursor-not-allowed': disabled || segment.disabled,\n 'cqa-text-disabled': (disabled || segment.disabled) && !isSelected(segment),\n 'cqa-hover:cqa-text-black': !isSelected(segment) && !disabled && !segment.disabled,\n 'cqa-px-[16px] cqa-py-[6px] cqa-h-[32px]': size === 'lg',\n 'cqa-px-[14px] cqa-py-[3.5px] cqa-h-[25px]': size !== 'lg'\n }\" [disabled]=\"disabled || segment.disabled\" [attr.aria-selected]=\"isSelected(segment)\"\n [attr.tabindex]=\"!disabled && !segment.disabled ? (isSelected(segment) ? 0 : -1) : -1\"\n (click)=\"select(segment, index)\" (keydown)=\"onKeyDown($event, index)\">\n <span\n class=\"cqa-flex cqa-gap-1 cqa-items-center cqa-justify-center cqa-h-[18px] cqa-font-['Inter'] cqa-font-normal cqa-text-[12px] cqa-leading-[12px] cqa-text-center cqa-align-middle\">\n \n <mat-icon *ngIf=\"segment?.icon\" class=\"!cqa-w-[12px] !cqa-h-[12px] !cqa-text-[12px]\" >\n {{ segment?.icon }}\n </mat-icon>\n\n {{ segment.label }}\n\n <span *ngIf=\"segment?.tooltip\"\n style=\"display: inline-flex; align-items: center; justify-content: center; margin-left: 4px; cursor: help;\"\n [matTooltip]=\"segment.tooltip\"\n matTooltipPosition=\"above\"\n matTooltipShowDelay=\"0\"\n (click)=\"$event.stopPropagation()\">\n <mat-icon style=\"width: 14px; height: 14px; font-size: 14px; opacity: 0.8;\">info</mat-icon>\n </span>\n </span>\n </button>\n</div>", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
845
+ SegmentControlComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SegmentControlComponent, selector: "cqa-segment-control", inputs: { segments: "segments", value: "value", disabled: "disabled", containerBgColor: "containerBgColor", fullWidth: "fullWidth", size: "size" }, outputs: { valueChange: "valueChange" }, host: { properties: { "style.display": "this.hostDisplay", "style.width": "this.hostWidth" }, classAttribute: "cqa-ui-root" }, viewQueries: [{ propertyName: "segmentContainer", first: true, predicate: ["segmentContainer"], descendants: true }, { propertyName: "segmentButtons", predicate: ["segmentButton"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-ui-root\" [style.display]=\"fullWidth ? 'block' : 'inline-block'\" [style.width]=\"fullWidth ? '100%' : null\">\n <div\n #segmentContainer\n class=\"cqa-relative cqa-flex-row cqa-items-start cqa-bg-surface-light cqa-rounded-[8px]\"\n [ngClass]=\"[\n fullWidth ? 'cqa-flex' : 'cqa-inline-flex',\n size === 'lg' ? 'cqa-h-[40px] cqa-p-[4px]' : 'cqa-h-[31.5px] cqa-p-[3.5px]'\n ]\"\n role=\"tablist\"\n [attr.aria-disabled]=\"disabled || null\"\n [ngStyle]=\"containerBgColor ? {'background-color': containerBgColor} : null\"\n >\n <div\n class=\"cqa-absolute cqa-rounded-[8px] cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-pointer-events-none\"\n [class.cqa-opacity-0]=\"!isIndicatorVisible\" [ngStyle]=\"indicatorStyle\" aria-hidden=\"true\"></div>\n\n <button *ngFor=\"let segment of segments; index as index; trackBy: trackByValue\" #segmentButton type=\"button\"\n role=\"tab\"\n class=\"cqa-relative cqa-z-0 cqa-flex cqa-flex-col cqa-justify-center cqa-items-center cqa-rounded-[8px] cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-whitespace-nowrap cqa-text-center focus:cqa-outline-none focus-visible:cqa-outline-none focus-visible:cqa-ring-0 focus-visible:cqa-ring-offset-0\"\n [ngClass]=\"{\n 'cqa-flex-1 cqa-min-w-0': fullWidth,\n 'cqa-flex-none': !fullWidth,\n 'cqa-text-white cqa-font-medium': isSelected(segment),\n 'cqa-text-muted': !isSelected(segment) && !(disabled || segment.disabled),\n 'cqa-cursor-not-allowed': disabled || segment.disabled,\n 'cqa-text-disabled': (disabled || segment.disabled) && !isSelected(segment),\n 'cqa-hover:cqa-text-black': !isSelected(segment) && !disabled && !segment.disabled,\n 'cqa-px-[16px] cqa-py-[6px] cqa-h-[32px]': size === 'lg',\n 'cqa-px-[14px] cqa-py-[3.5px] cqa-h-[25px]': size !== 'lg'\n }\" [disabled]=\"disabled || segment.disabled\" [attr.aria-selected]=\"isSelected(segment)\"\n [attr.tabindex]=\"!disabled && !segment.disabled ? (isSelected(segment) ? 0 : -1) : -1\"\n (click)=\"select(segment, index)\" (keydown)=\"onKeyDown($event, index)\">\n <span\n class=\"cqa-flex cqa-gap-1 cqa-items-center cqa-justify-center cqa-h-[18px] cqa-font-['Inter'] cqa-font-normal cqa-text-[12px] cqa-leading-[12px] cqa-text-center cqa-align-middle\">\n \n <mat-icon *ngIf=\"segment?.icon\" class=\"!cqa-w-[12px] !cqa-h-[12px] !cqa-text-[12px]\" >\n {{ segment?.icon }}\n </mat-icon>\n\n {{ segment.label }}\n\n <span *ngIf=\"segment?.count != null\"\n class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-ml-1 cqa-px-[6px] cqa-rounded-full cqa-text-[10px] cqa-leading-[14px] cqa-font-semibold cqa-min-w-[16px]\"\n [ngClass]=\"isSelected(segment) ? 'cqa-bg-white cqa-text-[#3F43EE]' : 'cqa-bg-[#E5E7EB] cqa-text-[#475569]'\">\n {{ segment.count }}\n </span>\n\n <span *ngIf=\"segment?.tooltip\"\n style=\"display: inline-flex; align-items: center; justify-content: center; margin-left: 4px; cursor: help;\"\n [matTooltip]=\"segment.tooltip\"\n matTooltipPosition=\"above\"\n matTooltipShowDelay=\"0\"\n (click)=\"$event.stopPropagation()\">\n <mat-icon style=\"width: 14px; height: 14px; font-size: 14px; opacity: 0.8;\">info</mat-icon>\n </span>\n </span>\n </button>\n</div>", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
846
846
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SegmentControlComponent, decorators: [{
847
847
  type: Component,
848
- args: [{ selector: 'cqa-segment-control', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-ui-root\" [style.display]=\"fullWidth ? 'block' : 'inline-block'\" [style.width]=\"fullWidth ? '100%' : null\">\n <div\n #segmentContainer\n class=\"cqa-relative cqa-flex-row cqa-items-start cqa-bg-surface-light cqa-rounded-[8px]\"\n [ngClass]=\"[\n fullWidth ? 'cqa-flex' : 'cqa-inline-flex',\n size === 'lg' ? 'cqa-h-[40px] cqa-p-[4px]' : 'cqa-h-[31.5px] cqa-p-[3.5px]'\n ]\"\n role=\"tablist\"\n [attr.aria-disabled]=\"disabled || null\"\n [ngStyle]=\"containerBgColor ? {'background-color': containerBgColor} : null\"\n >\n <div\n class=\"cqa-absolute cqa-rounded-[8px] cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-pointer-events-none\"\n [class.cqa-opacity-0]=\"!isIndicatorVisible\" [ngStyle]=\"indicatorStyle\" aria-hidden=\"true\"></div>\n\n <button *ngFor=\"let segment of segments; index as index; trackBy: trackByValue\" #segmentButton type=\"button\"\n role=\"tab\"\n class=\"cqa-relative cqa-z-0 cqa-flex cqa-flex-col cqa-justify-center cqa-items-center cqa-rounded-[8px] cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-whitespace-nowrap cqa-text-center focus:cqa-outline-none focus-visible:cqa-outline-none focus-visible:cqa-ring-0 focus-visible:cqa-ring-offset-0\"\n [ngClass]=\"{\n 'cqa-flex-1 cqa-min-w-0': fullWidth,\n 'cqa-flex-none': !fullWidth,\n 'cqa-text-white cqa-font-medium': isSelected(segment),\n 'cqa-text-muted': !isSelected(segment) && !(disabled || segment.disabled),\n 'cqa-cursor-not-allowed': disabled || segment.disabled,\n 'cqa-text-disabled': (disabled || segment.disabled) && !isSelected(segment),\n 'cqa-hover:cqa-text-black': !isSelected(segment) && !disabled && !segment.disabled,\n 'cqa-px-[16px] cqa-py-[6px] cqa-h-[32px]': size === 'lg',\n 'cqa-px-[14px] cqa-py-[3.5px] cqa-h-[25px]': size !== 'lg'\n }\" [disabled]=\"disabled || segment.disabled\" [attr.aria-selected]=\"isSelected(segment)\"\n [attr.tabindex]=\"!disabled && !segment.disabled ? (isSelected(segment) ? 0 : -1) : -1\"\n (click)=\"select(segment, index)\" (keydown)=\"onKeyDown($event, index)\">\n <span\n class=\"cqa-flex cqa-gap-1 cqa-items-center cqa-justify-center cqa-h-[18px] cqa-font-['Inter'] cqa-font-normal cqa-text-[12px] cqa-leading-[12px] cqa-text-center cqa-align-middle\">\n \n <mat-icon *ngIf=\"segment?.icon\" class=\"!cqa-w-[12px] !cqa-h-[12px] !cqa-text-[12px]\" >\n {{ segment?.icon }}\n </mat-icon>\n\n {{ segment.label }}\n\n <span *ngIf=\"segment?.tooltip\"\n style=\"display: inline-flex; align-items: center; justify-content: center; margin-left: 4px; cursor: help;\"\n [matTooltip]=\"segment.tooltip\"\n matTooltipPosition=\"above\"\n matTooltipShowDelay=\"0\"\n (click)=\"$event.stopPropagation()\">\n <mat-icon style=\"width: 14px; height: 14px; font-size: 14px; opacity: 0.8;\">info</mat-icon>\n </span>\n </span>\n </button>\n</div>", styles: [] }]
848
+ args: [{ selector: 'cqa-segment-control', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-ui-root\" [style.display]=\"fullWidth ? 'block' : 'inline-block'\" [style.width]=\"fullWidth ? '100%' : null\">\n <div\n #segmentContainer\n class=\"cqa-relative cqa-flex-row cqa-items-start cqa-bg-surface-light cqa-rounded-[8px]\"\n [ngClass]=\"[\n fullWidth ? 'cqa-flex' : 'cqa-inline-flex',\n size === 'lg' ? 'cqa-h-[40px] cqa-p-[4px]' : 'cqa-h-[31.5px] cqa-p-[3.5px]'\n ]\"\n role=\"tablist\"\n [attr.aria-disabled]=\"disabled || null\"\n [ngStyle]=\"containerBgColor ? {'background-color': containerBgColor} : null\"\n >\n <div\n class=\"cqa-absolute cqa-rounded-[8px] cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-pointer-events-none\"\n [class.cqa-opacity-0]=\"!isIndicatorVisible\" [ngStyle]=\"indicatorStyle\" aria-hidden=\"true\"></div>\n\n <button *ngFor=\"let segment of segments; index as index; trackBy: trackByValue\" #segmentButton type=\"button\"\n role=\"tab\"\n class=\"cqa-relative cqa-z-0 cqa-flex cqa-flex-col cqa-justify-center cqa-items-center cqa-rounded-[8px] cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-whitespace-nowrap cqa-text-center focus:cqa-outline-none focus-visible:cqa-outline-none focus-visible:cqa-ring-0 focus-visible:cqa-ring-offset-0\"\n [ngClass]=\"{\n 'cqa-flex-1 cqa-min-w-0': fullWidth,\n 'cqa-flex-none': !fullWidth,\n 'cqa-text-white cqa-font-medium': isSelected(segment),\n 'cqa-text-muted': !isSelected(segment) && !(disabled || segment.disabled),\n 'cqa-cursor-not-allowed': disabled || segment.disabled,\n 'cqa-text-disabled': (disabled || segment.disabled) && !isSelected(segment),\n 'cqa-hover:cqa-text-black': !isSelected(segment) && !disabled && !segment.disabled,\n 'cqa-px-[16px] cqa-py-[6px] cqa-h-[32px]': size === 'lg',\n 'cqa-px-[14px] cqa-py-[3.5px] cqa-h-[25px]': size !== 'lg'\n }\" [disabled]=\"disabled || segment.disabled\" [attr.aria-selected]=\"isSelected(segment)\"\n [attr.tabindex]=\"!disabled && !segment.disabled ? (isSelected(segment) ? 0 : -1) : -1\"\n (click)=\"select(segment, index)\" (keydown)=\"onKeyDown($event, index)\">\n <span\n class=\"cqa-flex cqa-gap-1 cqa-items-center cqa-justify-center cqa-h-[18px] cqa-font-['Inter'] cqa-font-normal cqa-text-[12px] cqa-leading-[12px] cqa-text-center cqa-align-middle\">\n \n <mat-icon *ngIf=\"segment?.icon\" class=\"!cqa-w-[12px] !cqa-h-[12px] !cqa-text-[12px]\" >\n {{ segment?.icon }}\n </mat-icon>\n\n {{ segment.label }}\n\n <span *ngIf=\"segment?.count != null\"\n class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-ml-1 cqa-px-[6px] cqa-rounded-full cqa-text-[10px] cqa-leading-[14px] cqa-font-semibold cqa-min-w-[16px]\"\n [ngClass]=\"isSelected(segment) ? 'cqa-bg-white cqa-text-[#3F43EE]' : 'cqa-bg-[#E5E7EB] cqa-text-[#475569]'\">\n {{ segment.count }}\n </span>\n\n <span *ngIf=\"segment?.tooltip\"\n style=\"display: inline-flex; align-items: center; justify-content: center; margin-left: 4px; cursor: help;\"\n [matTooltip]=\"segment.tooltip\"\n matTooltipPosition=\"above\"\n matTooltipShowDelay=\"0\"\n (click)=\"$event.stopPropagation()\">\n <mat-icon style=\"width: 14px; height: 14px; font-size: 14px; opacity: 0.8;\">info</mat-icon>\n </span>\n </span>\n </button>\n</div>", styles: [] }]
849
849
  }], propDecorators: { segments: [{
850
850
  type: Input
851
851
  }], value: [{
@@ -50890,6 +50890,263 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
50890
50890
  type: Input
50891
50891
  }] } });
50892
50892
 
50893
+ class NewDbConfigDialogComponent {
50894
+ constructor(cdr) {
50895
+ this.cdr = cdr;
50896
+ this.mode = 'create';
50897
+ this.existingNames = [];
50898
+ this.envName = '';
50899
+ this.driverOptions = [
50900
+ { label: 'MySQL', value: 'MySQL' },
50901
+ { label: 'Oracle', value: 'Oracle' },
50902
+ { label: 'SQL Server', value: 'SQLServer' },
50903
+ { label: 'Postgres', value: 'Postgres' },
50904
+ ];
50905
+ this.connectionName = '';
50906
+ this.driver = 'MySQL';
50907
+ this.host = '';
50908
+ this.port = 3306;
50909
+ this.database = '';
50910
+ this.username = '';
50911
+ this.password = '';
50912
+ this.connectionNameError = null;
50913
+ this.hostError = null;
50914
+ this.portError = null;
50915
+ this.databaseError = null;
50916
+ this.isTesting = false;
50917
+ this.testResult = null;
50918
+ this.destroy$ = new Subject();
50919
+ }
50920
+ ngOnInit() {
50921
+ var _a, _b, _c, _d;
50922
+ if (this.initialValue) {
50923
+ this.connectionName = (_a = this.initialValue.connectionName) !== null && _a !== void 0 ? _a : '';
50924
+ if (this.initialValue.driver) {
50925
+ this.driver = this.initialValue.driver;
50926
+ }
50927
+ this.host = (_b = this.initialValue.host) !== null && _b !== void 0 ? _b : '';
50928
+ const initialPort = this.initialValue.port;
50929
+ this.port = initialPort != null && !Number.isNaN(initialPort)
50930
+ ? Number(initialPort)
50931
+ : this.defaultPortForDriver(this.driver);
50932
+ this.database = (_c = this.initialValue.database) !== null && _c !== void 0 ? _c : '';
50933
+ this.username = (_d = this.initialValue.username) !== null && _d !== void 0 ? _d : '';
50934
+ this.password = '';
50935
+ }
50936
+ else {
50937
+ this.port = this.defaultPortForDriver(this.driver);
50938
+ }
50939
+ }
50940
+ ngOnDestroy() {
50941
+ this.destroy$.next();
50942
+ this.destroy$.complete();
50943
+ }
50944
+ // -------- Computed strings --------
50945
+ get title() {
50946
+ return this.mode === 'edit' ? 'Edit DB configuration' : 'New database configuration';
50947
+ }
50948
+ get subtitle() {
50949
+ return this.envName
50950
+ ? `Scoped to the ${this.envName} environment. Multiple configs can live in the same environment.`
50951
+ : 'Multiple configs can live in the same environment.';
50952
+ }
50953
+ get primaryButtonLabel() {
50954
+ return this.mode === 'edit' ? 'Save changes' : 'Add DB config';
50955
+ }
50956
+ get passwordPlaceholder() {
50957
+ return this.mode === 'edit' ? '•••••• (leave blank to keep existing)' : 'Enter password';
50958
+ }
50959
+ get connectionNameErrorsArray() {
50960
+ return this.connectionNameError ? [this.connectionNameError] : [];
50961
+ }
50962
+ get hostErrorsArray() {
50963
+ return this.hostError ? [this.hostError] : [];
50964
+ }
50965
+ get portErrorsArray() {
50966
+ return this.portError ? [this.portError] : [];
50967
+ }
50968
+ get databaseErrorsArray() {
50969
+ return this.databaseError ? [this.databaseError] : [];
50970
+ }
50971
+ get canTest() {
50972
+ return !!this.testFn && !this.isTesting;
50973
+ }
50974
+ // -------- Form handlers --------
50975
+ onConnectionNameChange(value) {
50976
+ this.connectionName = value;
50977
+ this.connectionNameError = null;
50978
+ this.testResult = null;
50979
+ this.cdr.markForCheck();
50980
+ }
50981
+ onDriverChange(value) {
50982
+ const next = value !== null && value !== void 0 ? value : 'MySQL';
50983
+ const previousDefault = this.defaultPortForDriver(this.driver);
50984
+ this.driver = next;
50985
+ if (this.port == null || this.port === previousDefault) {
50986
+ this.port = this.defaultPortForDriver(next);
50987
+ }
50988
+ this.testResult = null;
50989
+ this.cdr.markForCheck();
50990
+ }
50991
+ onHostChange(value) {
50992
+ this.host = value;
50993
+ this.hostError = null;
50994
+ this.testResult = null;
50995
+ this.cdr.markForCheck();
50996
+ }
50997
+ onPortChange(value) {
50998
+ if (value === '' || value == null) {
50999
+ this.port = null;
51000
+ }
51001
+ else {
51002
+ const n = Number(value);
51003
+ this.port = Number.isFinite(n) ? n : null;
51004
+ }
51005
+ this.portError = null;
51006
+ this.testResult = null;
51007
+ this.cdr.markForCheck();
51008
+ }
51009
+ onDatabaseChange(value) {
51010
+ this.database = value;
51011
+ this.databaseError = null;
51012
+ this.testResult = null;
51013
+ this.cdr.markForCheck();
51014
+ }
51015
+ onUsernameChange(value) {
51016
+ this.username = value;
51017
+ this.testResult = null;
51018
+ this.cdr.markForCheck();
51019
+ }
51020
+ onPasswordChange(value) {
51021
+ this.password = value;
51022
+ this.testResult = null;
51023
+ this.cdr.markForCheck();
51024
+ }
51025
+ // -------- Test connection --------
51026
+ onTestClick() {
51027
+ if (!this.testFn) {
51028
+ return;
51029
+ }
51030
+ const value = this.captureForm();
51031
+ if (!value) {
51032
+ return;
51033
+ }
51034
+ this.isTesting = true;
51035
+ this.testResult = null;
51036
+ this.cdr.markForCheck();
51037
+ this.testFn(value).pipe(takeUntil(this.destroy$)).subscribe({
51038
+ next: (result) => {
51039
+ this.isTesting = false;
51040
+ this.testResult = result || { status: 'failure', message: 'Connection test failed' };
51041
+ this.cdr.markForCheck();
51042
+ },
51043
+ error: (err) => {
51044
+ var _a;
51045
+ this.isTesting = false;
51046
+ const message = ((_a = err === null || err === void 0 ? void 0 : err.error) === null || _a === void 0 ? void 0 : _a.message) || (err === null || err === void 0 ? void 0 : err.message) || 'Connection test failed';
51047
+ this.testResult = { status: 'failure', message };
51048
+ this.cdr.markForCheck();
51049
+ },
51050
+ });
51051
+ }
51052
+ // -------- Save (called by host dialog) --------
51053
+ /**
51054
+ * Returns the validated form value, or null if validation fails (inline
51055
+ * errors are populated and the dialog stays open).
51056
+ */
51057
+ getValue() {
51058
+ return this.captureForm();
51059
+ }
51060
+ // -------- Internals --------
51061
+ captureForm() {
51062
+ let hasError = false;
51063
+ const trimmedName = this.connectionName.trim();
51064
+ if (!trimmedName) {
51065
+ this.connectionNameError = 'Connection name is required.';
51066
+ hasError = true;
51067
+ }
51068
+ else if (this.isDuplicateName(trimmedName)) {
51069
+ this.connectionNameError = 'A connection with this name already exists in this environment.';
51070
+ hasError = true;
51071
+ }
51072
+ else {
51073
+ this.connectionNameError = null;
51074
+ }
51075
+ const trimmedHost = this.host.trim();
51076
+ if (!trimmedHost) {
51077
+ this.hostError = 'Host is required.';
51078
+ hasError = true;
51079
+ }
51080
+ else {
51081
+ this.hostError = null;
51082
+ }
51083
+ if (this.port == null || !Number.isFinite(this.port) || this.port <= 0 || this.port > 65535) {
51084
+ this.portError = 'Port must be a number between 1 and 65535.';
51085
+ hasError = true;
51086
+ }
51087
+ else {
51088
+ this.portError = null;
51089
+ }
51090
+ const trimmedDatabase = this.database.trim();
51091
+ if (!trimmedDatabase) {
51092
+ this.databaseError = 'Database name is required.';
51093
+ hasError = true;
51094
+ }
51095
+ else {
51096
+ this.databaseError = null;
51097
+ }
51098
+ if (hasError) {
51099
+ this.cdr.markForCheck();
51100
+ return null;
51101
+ }
51102
+ return {
51103
+ connectionName: trimmedName,
51104
+ driver: this.driver,
51105
+ host: trimmedHost,
51106
+ port: this.port,
51107
+ database: trimmedDatabase,
51108
+ username: this.username,
51109
+ password: this.password,
51110
+ };
51111
+ }
51112
+ isDuplicateName(name) {
51113
+ var _a;
51114
+ const lower = name.toLowerCase();
51115
+ let pool = (this.existingNames || []).map(n => String(n || '').trim().toLowerCase());
51116
+ if (this.mode === 'edit' && ((_a = this.initialValue) === null || _a === void 0 ? void 0 : _a.connectionName)) {
51117
+ const original = this.initialValue.connectionName.trim().toLowerCase();
51118
+ pool = pool.filter(n => n !== original);
51119
+ }
51120
+ return pool.includes(lower);
51121
+ }
51122
+ defaultPortForDriver(driver) {
51123
+ switch (driver) {
51124
+ case 'Postgres': return 5432;
51125
+ case 'Oracle': return 1521;
51126
+ case 'SQLServer':
51127
+ case 'MSSQL': return 1433;
51128
+ case 'MySQL':
51129
+ default: return 3306;
51130
+ }
51131
+ }
51132
+ }
51133
+ NewDbConfigDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NewDbConfigDialogComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
51134
+ NewDbConfigDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: NewDbConfigDialogComponent, selector: "cqa-new-db-config-dialog", inputs: { mode: "mode", initialValue: "initialValue", existingNames: "existingNames", envName: "envName", testFn: "testFn" }, host: { styleAttribute: "display:block;width:100%;", classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n <!-- Row: Connection name + Driver -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Connection name\"\n placeholder=\"e.g. Primary (bookings)\"\n type=\"text\"\n [value]=\"connectionName\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"connectionNameErrorsArray\"\n (valueChange)=\"onConnectionNameChange($event)\">\n </cqa-custom-input>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Driver</label>\n <cqa-dropdown-button\n [options]=\"driverOptions\"\n [selectedValue]=\"driver\"\n (selectionChange)=\"onDriverChange($event)\">\n </cqa-dropdown-button>\n </div>\n </div>\n\n <!-- Row: Host + Port -->\n <div class=\"cqa-grid cqa-grid-cols-4 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-col-span-3\">\n <cqa-custom-input\n label=\"Host\"\n placeholder=\"db.example.com\"\n type=\"text\"\n [value]=\"host\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"hostErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onHostChange($event)\">\n </cqa-custom-input>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-col-span-1\">\n <cqa-custom-input\n label=\"Port\"\n type=\"number\"\n [value]=\"port != null ? port.toString() : ''\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"portErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onPortChange($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n <!-- Database -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Database\"\n placeholder=\"bookings_qa\"\n type=\"text\"\n [value]=\"database\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"databaseErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onDatabaseChange($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Row: Username + Password -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Username\"\n type=\"text\"\n [value]=\"username\"\n [fullWidth]=\"true\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onUsernameChange($event)\">\n </cqa-custom-input>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Password\"\n type=\"password\"\n [value]=\"password\"\n [placeholder]=\"passwordPlaceholder\"\n [fullWidth]=\"true\"\n (valueChange)=\"onPasswordChange($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n <!-- Test connection action + result -->\n <div *ngIf=\"testFn\" class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-3\">\n <span class=\"cqa-text-xs cqa-text-gray-600\">\n Validate the connection without saving. The credentials are sent over the wire only for this check.\n </span>\n <cqa-button\n variant=\"outlined\"\n btnSize=\"md\"\n icon=\"bolt\"\n text=\"Test connection\"\n [loading]=\"isTesting\"\n [disabled]=\"!canTest\"\n (clicked)=\"onTestClick()\">\n </cqa-button>\n </div>\n\n <div *ngIf=\"testResult\"\n class=\"cqa-flex cqa-items-start cqa-gap-2 cqa-px-3 cqa-py-2 cqa-rounded-md cqa-text-sm\"\n [ngClass]=\"testResult.status === 'success'\n ? 'cqa-bg-[#ECFDF5] cqa-text-[#065F46] cqa-border cqa-border-[#A7F3D0]'\n : 'cqa-bg-[#FEF2F2] cqa-text-[#991B1B] cqa-border cqa-border-[#FECACA]'\">\n <mat-icon class=\"!cqa-w-[18px] !cqa-h-[18px] !cqa-text-[18px]\">\n {{ testResult.status === 'success' ? 'check_circle' : 'error' }}\n </mat-icon>\n <span>{{ testResult.message }}</span>\n </div>\n </div>\n\n <!-- Encryption notice -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-px-3 cqa-py-2 cqa-rounded-md cqa-bg-[#EEF2FF] cqa-border cqa-border-[#C7D2FE] cqa-text-xs cqa-text-[#3730A3]\">\n <mat-icon class=\"!cqa-w-[16px] !cqa-h-[16px] !cqa-text-[16px]\">lock</mat-icon>\n <span>Credentials are encrypted at rest and masked in the audit log.</span>\n </div>\n\n</div>\n", components: [{ 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: DropdownButtonComponent, selector: "cqa-dropdown-button", inputs: ["label", "options", "selectedValue", "disabled", "placeholder"], outputs: ["selectionChange", "opened", "closed"] }, { type: ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
51135
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NewDbConfigDialogComponent, decorators: [{
51136
+ type: Component,
51137
+ args: [{ selector: 'cqa-new-db-config-dialog', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root', style: 'display:block;width:100%;' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n <!-- Row: Connection name + Driver -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Connection name\"\n placeholder=\"e.g. Primary (bookings)\"\n type=\"text\"\n [value]=\"connectionName\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"connectionNameErrorsArray\"\n (valueChange)=\"onConnectionNameChange($event)\">\n </cqa-custom-input>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Driver</label>\n <cqa-dropdown-button\n [options]=\"driverOptions\"\n [selectedValue]=\"driver\"\n (selectionChange)=\"onDriverChange($event)\">\n </cqa-dropdown-button>\n </div>\n </div>\n\n <!-- Row: Host + Port -->\n <div class=\"cqa-grid cqa-grid-cols-4 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-col-span-3\">\n <cqa-custom-input\n label=\"Host\"\n placeholder=\"db.example.com\"\n type=\"text\"\n [value]=\"host\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"hostErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onHostChange($event)\">\n </cqa-custom-input>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-col-span-1\">\n <cqa-custom-input\n label=\"Port\"\n type=\"number\"\n [value]=\"port != null ? port.toString() : ''\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"portErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onPortChange($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n <!-- Database -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Database\"\n placeholder=\"bookings_qa\"\n type=\"text\"\n [value]=\"database\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"databaseErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onDatabaseChange($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Row: Username + Password -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Username\"\n type=\"text\"\n [value]=\"username\"\n [fullWidth]=\"true\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onUsernameChange($event)\">\n </cqa-custom-input>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Password\"\n type=\"password\"\n [value]=\"password\"\n [placeholder]=\"passwordPlaceholder\"\n [fullWidth]=\"true\"\n (valueChange)=\"onPasswordChange($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n <!-- Test connection action + result -->\n <div *ngIf=\"testFn\" class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-3\">\n <span class=\"cqa-text-xs cqa-text-gray-600\">\n Validate the connection without saving. The credentials are sent over the wire only for this check.\n </span>\n <cqa-button\n variant=\"outlined\"\n btnSize=\"md\"\n icon=\"bolt\"\n text=\"Test connection\"\n [loading]=\"isTesting\"\n [disabled]=\"!canTest\"\n (clicked)=\"onTestClick()\">\n </cqa-button>\n </div>\n\n <div *ngIf=\"testResult\"\n class=\"cqa-flex cqa-items-start cqa-gap-2 cqa-px-3 cqa-py-2 cqa-rounded-md cqa-text-sm\"\n [ngClass]=\"testResult.status === 'success'\n ? 'cqa-bg-[#ECFDF5] cqa-text-[#065F46] cqa-border cqa-border-[#A7F3D0]'\n : 'cqa-bg-[#FEF2F2] cqa-text-[#991B1B] cqa-border cqa-border-[#FECACA]'\">\n <mat-icon class=\"!cqa-w-[18px] !cqa-h-[18px] !cqa-text-[18px]\">\n {{ testResult.status === 'success' ? 'check_circle' : 'error' }}\n </mat-icon>\n <span>{{ testResult.message }}</span>\n </div>\n </div>\n\n <!-- Encryption notice -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-px-3 cqa-py-2 cqa-rounded-md cqa-bg-[#EEF2FF] cqa-border cqa-border-[#C7D2FE] cqa-text-xs cqa-text-[#3730A3]\">\n <mat-icon class=\"!cqa-w-[16px] !cqa-h-[16px] !cqa-text-[16px]\">lock</mat-icon>\n <span>Credentials are encrypted at rest and masked in the audit log.</span>\n </div>\n\n</div>\n" }]
51138
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { mode: [{
51139
+ type: Input
51140
+ }], initialValue: [{
51141
+ type: Input
51142
+ }], existingNames: [{
51143
+ type: Input
51144
+ }], envName: [{
51145
+ type: Input
51146
+ }], testFn: [{
51147
+ type: Input
51148
+ }] } });
51149
+
50893
51150
  class NewTestDataProfileDialogComponent {
50894
51151
  constructor(cdr) {
50895
51152
  this.cdr = cdr;
@@ -51626,6 +51883,7 @@ UiKitModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
51626
51883
  NewGlobalVariableDialogComponent,
51627
51884
  NewEnvironmentDialogComponent,
51628
51885
  NewEnvironmentVariableDialogComponent,
51886
+ NewDbConfigDialogComponent,
51629
51887
  NewTestDataProfileDialogComponent,
51630
51888
  ManageColumnsDialogComponent,
51631
51889
  AuditLogDrawerComponent,
@@ -51819,6 +52077,7 @@ UiKitModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
51819
52077
  NewGlobalVariableDialogComponent,
51820
52078
  NewEnvironmentDialogComponent,
51821
52079
  NewEnvironmentVariableDialogComponent,
52080
+ NewDbConfigDialogComponent,
51822
52081
  NewTestDataProfileDialogComponent,
51823
52082
  ManageColumnsDialogComponent,
51824
52083
  AuditLogDrawerComponent,
@@ -52057,6 +52316,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
52057
52316
  NewGlobalVariableDialogComponent,
52058
52317
  NewEnvironmentDialogComponent,
52059
52318
  NewEnvironmentVariableDialogComponent,
52319
+ NewDbConfigDialogComponent,
52060
52320
  NewTestDataProfileDialogComponent,
52061
52321
  ManageColumnsDialogComponent,
52062
52322
  AuditLogDrawerComponent,
@@ -52256,6 +52516,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
52256
52516
  NewGlobalVariableDialogComponent,
52257
52517
  NewEnvironmentDialogComponent,
52258
52518
  NewEnvironmentVariableDialogComponent,
52519
+ NewDbConfigDialogComponent,
52259
52520
  NewTestDataProfileDialogComponent,
52260
52521
  ManageColumnsDialogComponent,
52261
52522
  AuditLogDrawerComponent,
@@ -53042,5 +53303,5 @@ function buildTestCaseDetailsFromApi(data, options) {
53042
53303
  * Generated bundle index. Do not edit.
53043
53304
  */
53044
53305
 
53045
- 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 };
53306
+ 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, NewDbConfigDialogComponent, 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 };
53046
53307
  //# sourceMappingURL=cqa-lib-cqa-ui.mjs.map