@cqa-lib/cqa-ui 1.1.522 → 1.1.524
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/assign-environments-dialog/assign-environments-dialog.component.mjs +155 -0
- package/esm2020/lib/assign-environments-dialog/assign-environments-dialog.models.mjs +2 -0
- package/esm2020/lib/new-environment-dialog/new-environment-dialog.component.mjs +123 -0
- package/esm2020/lib/new-environment-dialog/new-environment-dialog.models.mjs +9 -0
- package/esm2020/lib/new-environment-variable-dialog/new-environment-variable-dialog.component.mjs +190 -0
- package/esm2020/lib/new-environment-variable-dialog/new-environment-variable-dialog.models.mjs +2 -0
- package/esm2020/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.component.mjs +188 -0
- package/esm2020/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.models.mjs +2 -0
- package/esm2020/lib/ui-kit.module.mjs +21 -1
- package/esm2020/public-api.mjs +9 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +669 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +657 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/assign-environments-dialog/assign-environments-dialog.component.d.ts +36 -0
- package/lib/assign-environments-dialog/assign-environments-dialog.models.d.ts +19 -0
- package/lib/new-environment-dialog/new-environment-dialog.component.d.ts +37 -0
- package/lib/new-environment-dialog/new-environment-dialog.models.d.ts +14 -0
- package/lib/new-environment-variable-dialog/new-environment-variable-dialog.component.d.ts +54 -0
- package/lib/new-environment-variable-dialog/new-environment-variable-dialog.models.d.ts +14 -0
- package/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.component.d.ts +43 -0
- package/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.models.d.ts +20 -0
- package/lib/ui-kit.module.d.ts +92 -88
- package/package.json +1 -1
- package/public-api.d.ts +8 -0
- package/styles.css +1 -1
|
@@ -47045,6 +47045,658 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
47045
47045
|
type: Input
|
|
47046
47046
|
}] } });
|
|
47047
47047
|
|
|
47048
|
+
const ENVIRONMENT_ACCENT_COLORS = [
|
|
47049
|
+
'#3F43EE',
|
|
47050
|
+
'#A855F7',
|
|
47051
|
+
'#00A63E',
|
|
47052
|
+
'#F59E0B',
|
|
47053
|
+
'#0EA5E9',
|
|
47054
|
+
'#EC4899',
|
|
47055
|
+
];
|
|
47056
|
+
|
|
47057
|
+
class NewEnvironmentDialogComponent {
|
|
47058
|
+
constructor(cdr) {
|
|
47059
|
+
this.cdr = cdr;
|
|
47060
|
+
this.mode = 'create';
|
|
47061
|
+
this.existingNames = [];
|
|
47062
|
+
this.allowDefaultToggle = true;
|
|
47063
|
+
this.defaultAlreadySet = false;
|
|
47064
|
+
this.colors = ENVIRONMENT_ACCENT_COLORS;
|
|
47065
|
+
this.name = '';
|
|
47066
|
+
this.description = '';
|
|
47067
|
+
this.color = ENVIRONMENT_ACCENT_COLORS[0];
|
|
47068
|
+
this.isDefault = false;
|
|
47069
|
+
this.nameError = null;
|
|
47070
|
+
}
|
|
47071
|
+
ngOnInit() {
|
|
47072
|
+
var _a, _b, _c;
|
|
47073
|
+
if (this.initialValue) {
|
|
47074
|
+
this.name = (_a = this.initialValue.name) !== null && _a !== void 0 ? _a : '';
|
|
47075
|
+
this.description = (_b = this.initialValue.description) !== null && _b !== void 0 ? _b : '';
|
|
47076
|
+
this.color = this.initialValue.color || ENVIRONMENT_ACCENT_COLORS[0];
|
|
47077
|
+
this.isDefault = (_c = this.initialValue.isDefault) !== null && _c !== void 0 ? _c : false;
|
|
47078
|
+
}
|
|
47079
|
+
}
|
|
47080
|
+
get title() {
|
|
47081
|
+
return this.mode === 'edit' ? 'Edit environment' : 'New environment';
|
|
47082
|
+
}
|
|
47083
|
+
get subtitle() {
|
|
47084
|
+
return 'Create an environment to scope variables, DB configs, and data profiles.';
|
|
47085
|
+
}
|
|
47086
|
+
get primaryButtonLabel() {
|
|
47087
|
+
return this.mode === 'edit' ? 'Save changes' : 'Create environment';
|
|
47088
|
+
}
|
|
47089
|
+
get nameErrorsArray() {
|
|
47090
|
+
return this.nameError ? [this.nameError] : [];
|
|
47091
|
+
}
|
|
47092
|
+
get defaultHelperText() {
|
|
47093
|
+
if (!this.allowDefaultToggle) {
|
|
47094
|
+
return 'Default promotion is handled from the environment detail page.';
|
|
47095
|
+
}
|
|
47096
|
+
if (this.defaultAlreadySet && !this.isDefault) {
|
|
47097
|
+
return 'Another environment is currently the default. Toggling this on will demote it.';
|
|
47098
|
+
}
|
|
47099
|
+
return 'Test cases without an explicit env selected will resolve against this one.';
|
|
47100
|
+
}
|
|
47101
|
+
onNameChange(next) {
|
|
47102
|
+
this.name = next;
|
|
47103
|
+
this.nameError = null;
|
|
47104
|
+
this.cdr.markForCheck();
|
|
47105
|
+
}
|
|
47106
|
+
onDescriptionChange(next) {
|
|
47107
|
+
this.description = next;
|
|
47108
|
+
this.cdr.markForCheck();
|
|
47109
|
+
}
|
|
47110
|
+
onColorSelect(next) {
|
|
47111
|
+
this.color = next;
|
|
47112
|
+
this.cdr.markForCheck();
|
|
47113
|
+
}
|
|
47114
|
+
onDefaultChange(next) {
|
|
47115
|
+
this.isDefault = next;
|
|
47116
|
+
this.cdr.markForCheck();
|
|
47117
|
+
}
|
|
47118
|
+
/**
|
|
47119
|
+
* Called by the host (via DialogRef.getComponentInstance()) when the primary
|
|
47120
|
+
* button is clicked. Returns the captured value when valid, or null when the
|
|
47121
|
+
* form has errors — host should leave the dialog open.
|
|
47122
|
+
*/
|
|
47123
|
+
getValue() {
|
|
47124
|
+
const trimmedName = this.name.trim();
|
|
47125
|
+
if (!trimmedName) {
|
|
47126
|
+
this.nameError = 'Name is required.';
|
|
47127
|
+
}
|
|
47128
|
+
else if (trimmedName.length < 2) {
|
|
47129
|
+
this.nameError = 'Name must be at least 2 characters.';
|
|
47130
|
+
}
|
|
47131
|
+
else if (this.isDuplicateName(trimmedName)) {
|
|
47132
|
+
this.nameError = 'An environment with this name already exists — names must be unique.';
|
|
47133
|
+
}
|
|
47134
|
+
else {
|
|
47135
|
+
this.nameError = null;
|
|
47136
|
+
}
|
|
47137
|
+
if (this.nameError) {
|
|
47138
|
+
this.cdr.markForCheck();
|
|
47139
|
+
return null;
|
|
47140
|
+
}
|
|
47141
|
+
return {
|
|
47142
|
+
name: trimmedName,
|
|
47143
|
+
description: this.description ? this.description.trim() : null,
|
|
47144
|
+
color: this.color,
|
|
47145
|
+
isDefault: this.allowDefaultToggle ? this.isDefault : false,
|
|
47146
|
+
};
|
|
47147
|
+
}
|
|
47148
|
+
isDuplicateName(candidate) {
|
|
47149
|
+
var _a, _b, _c;
|
|
47150
|
+
const existing = ((_a = this.existingNames) !== null && _a !== void 0 ? _a : []).map(n => (n !== null && n !== void 0 ? n : '').trim().toLowerCase());
|
|
47151
|
+
const lowered = candidate.toLowerCase();
|
|
47152
|
+
if (this.mode === 'edit') {
|
|
47153
|
+
const original = ((_c = (_b = this.initialValue) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : '').trim().toLowerCase();
|
|
47154
|
+
return lowered !== original && existing.includes(lowered);
|
|
47155
|
+
}
|
|
47156
|
+
return existing.includes(lowered);
|
|
47157
|
+
}
|
|
47158
|
+
}
|
|
47159
|
+
NewEnvironmentDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NewEnvironmentDialogComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
47160
|
+
NewEnvironmentDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: NewEnvironmentDialogComponent, selector: "cqa-new-environment-dialog", inputs: { mode: "mode", initialValue: "initialValue", existingNames: "existingNames", allowDefaultToggle: "allowDefaultToggle", defaultAlreadySet: "defaultAlreadySet" }, 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 <!-- Name -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Environment name\"\n placeholder=\"e.g. QA, SIT, UAT, Prod, Demo\"\n type=\"text\"\n [value]=\"name\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"nameErrorsArray\"\n (valueChange)=\"onNameChange($event)\">\n </cqa-custom-input>\n <span *ngIf=\"!nameError\"\n class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">\n Names are user-defined. Be concise \u2014 you'll see this on every test run.\n </span>\n </div>\n\n <!-- Description -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Description\"\n placeholder=\"What is this environment for?\"\n type=\"text\"\n [value]=\"description\"\n [fullWidth]=\"true\"\n (valueChange)=\"onDescriptionChange($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Accent color -->\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-2 cqa-font-medium cqa-text-gray-700\">Accent color</label>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <button\n *ngFor=\"let swatch of colors\"\n type=\"button\"\n class=\"cqa-w-7 cqa-h-7 cqa-rounded-lg cqa-cursor-pointer cqa-transition-all\"\n [attr.aria-label]=\"'Select ' + swatch\"\n [attr.aria-pressed]=\"color === swatch\"\n [style.background]=\"swatch\"\n [style.border]=\"color === swatch ? '2px solid #0F172A' : '2px solid transparent'\"\n [style.boxShadow]=\"color === swatch ? '0 0 0 2px rgba(15,23,42,0.12)' : '0 0 0 1px rgba(0,0,0,0.05)'\"\n (click)=\"onColorSelect(swatch)\">\n </button>\n </div>\n </div>\n\n <!-- Make default -->\n <div\n *ngIf=\"allowDefaultToggle\"\n class=\"cqa-flex cqa-items-start cqa-gap-3 cqa-p-3 cqa-rounded-lg cqa-border cqa-border-indigo-100 cqa-bg-indigo-50\">\n <cqa-custom-toggle\n [checked]=\"isDefault\"\n ariaLabel=\"Make default environment\"\n (checkedChange)=\"onDefaultChange($event)\">\n </cqa-custom-toggle>\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1\">\n <span class=\"cqa-text-sm cqa-font-medium cqa-text-gray-900\">\n Make this the default environment\n </span>\n <span class=\"cqa-text-xs cqa-text-gray-600 cqa-mt-0.5\">\n {{ defaultHelperText }}\n </span>\n </div>\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: CustomToggleComponent, selector: "cqa-custom-toggle", inputs: ["checked", "disabled", "ariaLabel"], outputs: ["checkedChange", "change"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
47161
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NewEnvironmentDialogComponent, decorators: [{
|
|
47162
|
+
type: Component,
|
|
47163
|
+
args: [{ selector: 'cqa-new-environment-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 <!-- Name -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Environment name\"\n placeholder=\"e.g. QA, SIT, UAT, Prod, Demo\"\n type=\"text\"\n [value]=\"name\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"nameErrorsArray\"\n (valueChange)=\"onNameChange($event)\">\n </cqa-custom-input>\n <span *ngIf=\"!nameError\"\n class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">\n Names are user-defined. Be concise \u2014 you'll see this on every test run.\n </span>\n </div>\n\n <!-- Description -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Description\"\n placeholder=\"What is this environment for?\"\n type=\"text\"\n [value]=\"description\"\n [fullWidth]=\"true\"\n (valueChange)=\"onDescriptionChange($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Accent color -->\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-2 cqa-font-medium cqa-text-gray-700\">Accent color</label>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <button\n *ngFor=\"let swatch of colors\"\n type=\"button\"\n class=\"cqa-w-7 cqa-h-7 cqa-rounded-lg cqa-cursor-pointer cqa-transition-all\"\n [attr.aria-label]=\"'Select ' + swatch\"\n [attr.aria-pressed]=\"color === swatch\"\n [style.background]=\"swatch\"\n [style.border]=\"color === swatch ? '2px solid #0F172A' : '2px solid transparent'\"\n [style.boxShadow]=\"color === swatch ? '0 0 0 2px rgba(15,23,42,0.12)' : '0 0 0 1px rgba(0,0,0,0.05)'\"\n (click)=\"onColorSelect(swatch)\">\n </button>\n </div>\n </div>\n\n <!-- Make default -->\n <div\n *ngIf=\"allowDefaultToggle\"\n class=\"cqa-flex cqa-items-start cqa-gap-3 cqa-p-3 cqa-rounded-lg cqa-border cqa-border-indigo-100 cqa-bg-indigo-50\">\n <cqa-custom-toggle\n [checked]=\"isDefault\"\n ariaLabel=\"Make default environment\"\n (checkedChange)=\"onDefaultChange($event)\">\n </cqa-custom-toggle>\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1\">\n <span class=\"cqa-text-sm cqa-font-medium cqa-text-gray-900\">\n Make this the default environment\n </span>\n <span class=\"cqa-text-xs cqa-text-gray-600 cqa-mt-0.5\">\n {{ defaultHelperText }}\n </span>\n </div>\n </div>\n\n</div>\n" }]
|
|
47164
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { mode: [{
|
|
47165
|
+
type: Input
|
|
47166
|
+
}], initialValue: [{
|
|
47167
|
+
type: Input
|
|
47168
|
+
}], existingNames: [{
|
|
47169
|
+
type: Input
|
|
47170
|
+
}], allowDefaultToggle: [{
|
|
47171
|
+
type: Input
|
|
47172
|
+
}], defaultAlreadySet: [{
|
|
47173
|
+
type: Input
|
|
47174
|
+
}] } });
|
|
47175
|
+
|
|
47176
|
+
class NewEnvironmentVariableDialogComponent {
|
|
47177
|
+
constructor(cdr) {
|
|
47178
|
+
this.cdr = cdr;
|
|
47179
|
+
this.mode = 'create';
|
|
47180
|
+
this.existingNames = [];
|
|
47181
|
+
this.envName = '';
|
|
47182
|
+
this.typeDropdownOptions = [
|
|
47183
|
+
{ label: 'String', value: 'String' },
|
|
47184
|
+
{ label: 'Number', value: 'Number' },
|
|
47185
|
+
{ label: 'Boolean', value: 'Boolean' },
|
|
47186
|
+
{ label: 'Password', value: 'Password' },
|
|
47187
|
+
];
|
|
47188
|
+
this.name = '';
|
|
47189
|
+
this.type = 'String';
|
|
47190
|
+
this.value = '';
|
|
47191
|
+
this.readWriteMode = 'RW';
|
|
47192
|
+
this.passwordTouched = false;
|
|
47193
|
+
this.nameError = null;
|
|
47194
|
+
this.valueError = null;
|
|
47195
|
+
}
|
|
47196
|
+
ngOnInit() {
|
|
47197
|
+
var _a, _b, _c, _d;
|
|
47198
|
+
if (this.initialValue) {
|
|
47199
|
+
this.name = (_a = this.initialValue.name) !== null && _a !== void 0 ? _a : '';
|
|
47200
|
+
this.type = (_b = this.initialValue.type) !== null && _b !== void 0 ? _b : 'String';
|
|
47201
|
+
this.value = (_c = this.initialValue.value) !== null && _c !== void 0 ? _c : '';
|
|
47202
|
+
this.readWriteMode = (_d = this.initialValue.readWriteMode) !== null && _d !== void 0 ? _d : 'RW';
|
|
47203
|
+
}
|
|
47204
|
+
if (this.type === 'Boolean' && this.value !== 'true' && this.value !== 'false') {
|
|
47205
|
+
this.value = 'false';
|
|
47206
|
+
}
|
|
47207
|
+
if (this.mode === 'edit' && this.type === 'Password') {
|
|
47208
|
+
this.value = '';
|
|
47209
|
+
}
|
|
47210
|
+
}
|
|
47211
|
+
get title() {
|
|
47212
|
+
return this.mode === 'edit' ? 'Edit variable' : 'New variable';
|
|
47213
|
+
}
|
|
47214
|
+
get subtitle() {
|
|
47215
|
+
return this.envName ? `Scoped to the ${this.envName} environment.` : 'Scoped to this environment.';
|
|
47216
|
+
}
|
|
47217
|
+
get primaryButtonLabel() {
|
|
47218
|
+
return this.mode === 'edit' ? 'Save changes' : 'Add variable';
|
|
47219
|
+
}
|
|
47220
|
+
get isBoolean() { return this.type === 'Boolean'; }
|
|
47221
|
+
get isPassword() { return this.type === 'Password'; }
|
|
47222
|
+
get isNumber() { return this.type === 'Number'; }
|
|
47223
|
+
get valuePlaceholder() {
|
|
47224
|
+
if (this.isPassword && this.mode === 'edit') {
|
|
47225
|
+
return '•••••• (leave blank to keep existing)';
|
|
47226
|
+
}
|
|
47227
|
+
if (this.readWriteMode === 'RW') {
|
|
47228
|
+
return 'Leave blank to populate during test execution';
|
|
47229
|
+
}
|
|
47230
|
+
return 'Enter a value';
|
|
47231
|
+
}
|
|
47232
|
+
get nameHelperText() {
|
|
47233
|
+
if (this.nameError) {
|
|
47234
|
+
return this.nameError;
|
|
47235
|
+
}
|
|
47236
|
+
return 'Variable names must be unique within the environment.';
|
|
47237
|
+
}
|
|
47238
|
+
get permissionHelperText() {
|
|
47239
|
+
return this.readWriteMode === 'RO'
|
|
47240
|
+
? 'Read only — test steps can read but not overwrite.'
|
|
47241
|
+
: 'Read/write — test cases can capture values here.';
|
|
47242
|
+
}
|
|
47243
|
+
get nameErrorsArray() { return this.nameError ? [this.nameError] : []; }
|
|
47244
|
+
get valueErrorsArray() { return this.valueError ? [this.valueError] : []; }
|
|
47245
|
+
get booleanDropdownOptions() {
|
|
47246
|
+
return [
|
|
47247
|
+
{ label: 'true', value: 'true' },
|
|
47248
|
+
{ label: 'false', value: 'false' },
|
|
47249
|
+
];
|
|
47250
|
+
}
|
|
47251
|
+
onNameChange(next) {
|
|
47252
|
+
this.name = next;
|
|
47253
|
+
this.nameError = null;
|
|
47254
|
+
this.cdr.markForCheck();
|
|
47255
|
+
}
|
|
47256
|
+
onTypeChange(next) {
|
|
47257
|
+
if (!next) {
|
|
47258
|
+
return;
|
|
47259
|
+
}
|
|
47260
|
+
this.type = next;
|
|
47261
|
+
if (this.type === 'Boolean' && this.value !== 'true' && this.value !== 'false') {
|
|
47262
|
+
this.value = 'false';
|
|
47263
|
+
}
|
|
47264
|
+
if (this.type === 'Password') {
|
|
47265
|
+
this.passwordTouched = false;
|
|
47266
|
+
if (this.mode === 'edit') {
|
|
47267
|
+
this.value = '';
|
|
47268
|
+
}
|
|
47269
|
+
}
|
|
47270
|
+
this.valueError = null;
|
|
47271
|
+
this.cdr.markForCheck();
|
|
47272
|
+
}
|
|
47273
|
+
onPermissionChange(next) {
|
|
47274
|
+
this.readWriteMode = next === 'RO' ? 'RO' : 'RW';
|
|
47275
|
+
this.cdr.markForCheck();
|
|
47276
|
+
}
|
|
47277
|
+
onValueChange(next) {
|
|
47278
|
+
this.value = next;
|
|
47279
|
+
if (this.isPassword) {
|
|
47280
|
+
this.passwordTouched = true;
|
|
47281
|
+
}
|
|
47282
|
+
this.valueError = null;
|
|
47283
|
+
this.cdr.markForCheck();
|
|
47284
|
+
}
|
|
47285
|
+
onBooleanValueChange(next) {
|
|
47286
|
+
this.value = next;
|
|
47287
|
+
this.cdr.markForCheck();
|
|
47288
|
+
}
|
|
47289
|
+
/**
|
|
47290
|
+
* Host reads via DialogRef.getComponentInstance(). Returns null on validation
|
|
47291
|
+
* failure — host keeps the dialog open and surfaces the inline error already
|
|
47292
|
+
* written onto nameError / valueError.
|
|
47293
|
+
*/
|
|
47294
|
+
getValue() {
|
|
47295
|
+
const trimmedName = this.name.trim();
|
|
47296
|
+
if (!trimmedName) {
|
|
47297
|
+
this.nameError = 'Name is required.';
|
|
47298
|
+
}
|
|
47299
|
+
else if (this.isDuplicateName(trimmedName)) {
|
|
47300
|
+
this.nameError = 'A variable with this name already exists in this environment.';
|
|
47301
|
+
}
|
|
47302
|
+
else {
|
|
47303
|
+
this.nameError = null;
|
|
47304
|
+
}
|
|
47305
|
+
if (this.isNumber && this.value && !this.isValidNumber(this.value)) {
|
|
47306
|
+
this.valueError = 'Value must be a number.';
|
|
47307
|
+
}
|
|
47308
|
+
else {
|
|
47309
|
+
this.valueError = null;
|
|
47310
|
+
}
|
|
47311
|
+
if (this.nameError || this.valueError) {
|
|
47312
|
+
this.cdr.markForCheck();
|
|
47313
|
+
return null;
|
|
47314
|
+
}
|
|
47315
|
+
const omitPasswordValue = this.isPassword && this.mode === 'edit' && !this.passwordTouched;
|
|
47316
|
+
return {
|
|
47317
|
+
name: trimmedName,
|
|
47318
|
+
type: this.type,
|
|
47319
|
+
value: omitPasswordValue ? null : this.serializeValue(),
|
|
47320
|
+
readWriteMode: this.readWriteMode,
|
|
47321
|
+
};
|
|
47322
|
+
}
|
|
47323
|
+
serializeValue() {
|
|
47324
|
+
var _a;
|
|
47325
|
+
if (this.isBoolean) {
|
|
47326
|
+
return this.value === 'true' ? 'true' : 'false';
|
|
47327
|
+
}
|
|
47328
|
+
return (_a = this.value) !== null && _a !== void 0 ? _a : '';
|
|
47329
|
+
}
|
|
47330
|
+
isDuplicateName(candidate) {
|
|
47331
|
+
var _a, _b, _c;
|
|
47332
|
+
const existing = ((_a = this.existingNames) !== null && _a !== void 0 ? _a : []).map(n => (n !== null && n !== void 0 ? n : '').trim().toLowerCase());
|
|
47333
|
+
const lowered = candidate.toLowerCase();
|
|
47334
|
+
if (this.mode === 'edit') {
|
|
47335
|
+
const original = ((_c = (_b = this.initialValue) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : '').trim().toLowerCase();
|
|
47336
|
+
return lowered !== original && existing.includes(lowered);
|
|
47337
|
+
}
|
|
47338
|
+
return existing.includes(lowered);
|
|
47339
|
+
}
|
|
47340
|
+
isValidNumber(raw) {
|
|
47341
|
+
const trimmed = raw.trim();
|
|
47342
|
+
if (!trimmed) {
|
|
47343
|
+
return true;
|
|
47344
|
+
}
|
|
47345
|
+
return !Number.isNaN(Number(trimmed));
|
|
47346
|
+
}
|
|
47347
|
+
}
|
|
47348
|
+
NewEnvironmentVariableDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NewEnvironmentVariableDialogComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
47349
|
+
NewEnvironmentVariableDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: NewEnvironmentVariableDialogComponent, selector: "cqa-new-environment-variable-dialog", inputs: { mode: "mode", initialValue: "initialValue", existingNames: "existingNames", envName: "envName" }, 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 <!-- Name -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Name\"\n placeholder=\"e.g. order_id\"\n type=\"text\"\n [value]=\"name\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"nameErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onNameChange($event)\">\n </cqa-custom-input>\n <span *ngIf=\"!nameError\"\n class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">\n {{ nameHelperText }}\n </span>\n </div>\n\n <!-- Type + Permission -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\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\">Type</label>\n <cqa-dropdown-button\n [options]=\"typeDropdownOptions\"\n [selectedValue]=\"type\"\n (selectionChange)=\"onTypeChange($event)\">\n </cqa-dropdown-button>\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\">Permission</label>\n <div class=\"cqa-pt-0.5\">\n <cqa-permission-toggle\n [value]=\"readWriteMode\"\n (valueChange)=\"onPermissionChange($event)\">\n </cqa-permission-toggle>\n </div>\n <span class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">{{ permissionHelperText }}</span>\n </div>\n </div>\n\n <!-- Value -->\n <div class=\"cqa-flex cqa-flex-col\">\n <ng-container *ngIf=\"isBoolean; else nonBooleanValue\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Value</label>\n <cqa-dropdown-button\n [options]=\"booleanDropdownOptions\"\n [selectedValue]=\"value\"\n (selectionChange)=\"onBooleanValueChange($event)\">\n </cqa-dropdown-button>\n </ng-container>\n <ng-template #nonBooleanValue>\n <cqa-custom-input\n label=\"Value\"\n [type]=\"isPassword ? 'password' : 'text'\"\n [value]=\"value\"\n [placeholder]=\"valuePlaceholder\"\n [fullWidth]=\"true\"\n [errors]=\"valueErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onValueChange($event)\">\n </cqa-custom-input>\n </ng-template>\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: PermissionToggleComponent, selector: "cqa-permission-toggle", inputs: ["value", "disabled", "roTooltip", "rwTooltip"], outputs: ["valueChange"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
47350
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NewEnvironmentVariableDialogComponent, decorators: [{
|
|
47351
|
+
type: Component,
|
|
47352
|
+
args: [{ selector: 'cqa-new-environment-variable-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 <!-- Name -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Name\"\n placeholder=\"e.g. order_id\"\n type=\"text\"\n [value]=\"name\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"nameErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onNameChange($event)\">\n </cqa-custom-input>\n <span *ngIf=\"!nameError\"\n class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">\n {{ nameHelperText }}\n </span>\n </div>\n\n <!-- Type + Permission -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\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\">Type</label>\n <cqa-dropdown-button\n [options]=\"typeDropdownOptions\"\n [selectedValue]=\"type\"\n (selectionChange)=\"onTypeChange($event)\">\n </cqa-dropdown-button>\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\">Permission</label>\n <div class=\"cqa-pt-0.5\">\n <cqa-permission-toggle\n [value]=\"readWriteMode\"\n (valueChange)=\"onPermissionChange($event)\">\n </cqa-permission-toggle>\n </div>\n <span class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">{{ permissionHelperText }}</span>\n </div>\n </div>\n\n <!-- Value -->\n <div class=\"cqa-flex cqa-flex-col\">\n <ng-container *ngIf=\"isBoolean; else nonBooleanValue\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Value</label>\n <cqa-dropdown-button\n [options]=\"booleanDropdownOptions\"\n [selectedValue]=\"value\"\n (selectionChange)=\"onBooleanValueChange($event)\">\n </cqa-dropdown-button>\n </ng-container>\n <ng-template #nonBooleanValue>\n <cqa-custom-input\n label=\"Value\"\n [type]=\"isPassword ? 'password' : 'text'\"\n [value]=\"value\"\n [placeholder]=\"valuePlaceholder\"\n [fullWidth]=\"true\"\n [errors]=\"valueErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onValueChange($event)\">\n </cqa-custom-input>\n </ng-template>\n </div>\n\n</div>\n" }]
|
|
47353
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { mode: [{
|
|
47354
|
+
type: Input
|
|
47355
|
+
}], initialValue: [{
|
|
47356
|
+
type: Input
|
|
47357
|
+
}], existingNames: [{
|
|
47358
|
+
type: Input
|
|
47359
|
+
}], envName: [{
|
|
47360
|
+
type: Input
|
|
47361
|
+
}] } });
|
|
47362
|
+
|
|
47363
|
+
class NewTestDataProfileDialogComponent {
|
|
47364
|
+
constructor(cdr) {
|
|
47365
|
+
this.cdr = cdr;
|
|
47366
|
+
this.mode = 'create';
|
|
47367
|
+
this.existingNames = [];
|
|
47368
|
+
this.environments = [];
|
|
47369
|
+
this.lockedColumns = [];
|
|
47370
|
+
this.name = '';
|
|
47371
|
+
this.description = '';
|
|
47372
|
+
this.readWriteMode = 'RW';
|
|
47373
|
+
this.columns = ['col_1'];
|
|
47374
|
+
this.envForm = new FormGroup({
|
|
47375
|
+
environmentIds: new FormControl([]),
|
|
47376
|
+
});
|
|
47377
|
+
this.envConfig = this.buildEnvConfig([]);
|
|
47378
|
+
this.nameError = null;
|
|
47379
|
+
this.columnsError = null;
|
|
47380
|
+
this.envsError = null;
|
|
47381
|
+
this.trackByIndex = (_, __) => _;
|
|
47382
|
+
}
|
|
47383
|
+
ngOnInit() {
|
|
47384
|
+
var _a, _b, _c, _d, _e;
|
|
47385
|
+
if (this.initialValue) {
|
|
47386
|
+
this.name = (_a = this.initialValue.name) !== null && _a !== void 0 ? _a : '';
|
|
47387
|
+
this.description = (_b = this.initialValue.description) !== null && _b !== void 0 ? _b : '';
|
|
47388
|
+
this.readWriteMode = (_c = this.initialValue.readWriteMode) !== null && _c !== void 0 ? _c : 'RW';
|
|
47389
|
+
this.columns = (this.initialValue.columns && this.initialValue.columns.length)
|
|
47390
|
+
? [...this.initialValue.columns]
|
|
47391
|
+
: ['col_1'];
|
|
47392
|
+
const ids = (_d = this.initialValue.environmentIds) !== null && _d !== void 0 ? _d : [];
|
|
47393
|
+
this.envForm.get('environmentIds').setValue(ids);
|
|
47394
|
+
}
|
|
47395
|
+
this.envConfig = this.buildEnvConfig((_e = this.environments) !== null && _e !== void 0 ? _e : []);
|
|
47396
|
+
// Clear envs error as soon as the user picks something.
|
|
47397
|
+
this.envForm.get('environmentIds').valueChanges.subscribe(() => {
|
|
47398
|
+
if (this.envsError) {
|
|
47399
|
+
this.envsError = null;
|
|
47400
|
+
this.cdr.markForCheck();
|
|
47401
|
+
}
|
|
47402
|
+
});
|
|
47403
|
+
}
|
|
47404
|
+
get title() {
|
|
47405
|
+
return this.mode === 'edit' ? 'Edit test data profile' : 'New test data profile';
|
|
47406
|
+
}
|
|
47407
|
+
get subtitle() {
|
|
47408
|
+
return 'Define columns; data values can be added per environment after creation.';
|
|
47409
|
+
}
|
|
47410
|
+
get primaryButtonLabel() {
|
|
47411
|
+
return this.mode === 'edit' ? 'Save changes' : 'Create profile';
|
|
47412
|
+
}
|
|
47413
|
+
get nameErrorsArray() { return this.nameError ? [this.nameError] : []; }
|
|
47414
|
+
get canAddColumn() { return true; }
|
|
47415
|
+
get selectedEnvIds() {
|
|
47416
|
+
var _a;
|
|
47417
|
+
const val = (_a = this.envForm.get('environmentIds').value) !== null && _a !== void 0 ? _a : [];
|
|
47418
|
+
return Array.isArray(val) ? val : [];
|
|
47419
|
+
}
|
|
47420
|
+
onNameChange(next) {
|
|
47421
|
+
this.name = next;
|
|
47422
|
+
this.nameError = null;
|
|
47423
|
+
this.cdr.markForCheck();
|
|
47424
|
+
}
|
|
47425
|
+
onDescriptionChange(next) {
|
|
47426
|
+
this.description = next;
|
|
47427
|
+
this.cdr.markForCheck();
|
|
47428
|
+
}
|
|
47429
|
+
onPermissionChange(next) {
|
|
47430
|
+
this.readWriteMode = next === 'RO' ? 'RO' : 'RW';
|
|
47431
|
+
this.cdr.markForCheck();
|
|
47432
|
+
}
|
|
47433
|
+
onColumnChange(index, value) {
|
|
47434
|
+
const next = [...this.columns];
|
|
47435
|
+
next[index] = value;
|
|
47436
|
+
this.columns = next;
|
|
47437
|
+
this.columnsError = null;
|
|
47438
|
+
this.cdr.markForCheck();
|
|
47439
|
+
}
|
|
47440
|
+
onAddColumn() {
|
|
47441
|
+
this.columns = [...this.columns, `col_${this.columns.length + 1}`];
|
|
47442
|
+
this.cdr.markForCheck();
|
|
47443
|
+
}
|
|
47444
|
+
onRemoveColumn(index) {
|
|
47445
|
+
if (this.columns.length <= 1) {
|
|
47446
|
+
return;
|
|
47447
|
+
}
|
|
47448
|
+
const target = this.columns[index];
|
|
47449
|
+
if (this.lockedColumns && this.lockedColumns.indexOf(target) !== -1) {
|
|
47450
|
+
return;
|
|
47451
|
+
}
|
|
47452
|
+
this.columns = this.columns.filter((_, i) => i !== index);
|
|
47453
|
+
this.cdr.markForCheck();
|
|
47454
|
+
}
|
|
47455
|
+
isColumnLocked(col) {
|
|
47456
|
+
return !!(this.lockedColumns && this.lockedColumns.indexOf(col) !== -1);
|
|
47457
|
+
}
|
|
47458
|
+
getValue() {
|
|
47459
|
+
const trimmedName = this.name.trim();
|
|
47460
|
+
if (!trimmedName) {
|
|
47461
|
+
this.nameError = 'Name is required.';
|
|
47462
|
+
}
|
|
47463
|
+
else if (this.isDuplicateName(trimmedName)) {
|
|
47464
|
+
this.nameError = 'A profile with this name already exists.';
|
|
47465
|
+
}
|
|
47466
|
+
else {
|
|
47467
|
+
this.nameError = null;
|
|
47468
|
+
}
|
|
47469
|
+
const trimmedCols = this.columns.map(c => (c !== null && c !== void 0 ? c : '').trim()).filter(c => c.length > 0);
|
|
47470
|
+
const unique = new Set(trimmedCols);
|
|
47471
|
+
if (trimmedCols.length === 0) {
|
|
47472
|
+
this.columnsError = 'At least one column is required.';
|
|
47473
|
+
}
|
|
47474
|
+
else if (unique.size !== trimmedCols.length) {
|
|
47475
|
+
this.columnsError = 'Column names must be unique.';
|
|
47476
|
+
}
|
|
47477
|
+
else {
|
|
47478
|
+
this.columnsError = null;
|
|
47479
|
+
}
|
|
47480
|
+
const envIds = this.selectedEnvIds;
|
|
47481
|
+
if (!envIds || envIds.length === 0) {
|
|
47482
|
+
this.envsError = 'Select at least one environment to assign this profile to.';
|
|
47483
|
+
}
|
|
47484
|
+
else {
|
|
47485
|
+
this.envsError = null;
|
|
47486
|
+
}
|
|
47487
|
+
if (this.nameError || this.columnsError || this.envsError) {
|
|
47488
|
+
this.cdr.markForCheck();
|
|
47489
|
+
return null;
|
|
47490
|
+
}
|
|
47491
|
+
return {
|
|
47492
|
+
name: trimmedName,
|
|
47493
|
+
description: this.description.trim() || null,
|
|
47494
|
+
readWriteMode: this.readWriteMode,
|
|
47495
|
+
columns: trimmedCols,
|
|
47496
|
+
environmentIds: this.selectedEnvIds,
|
|
47497
|
+
};
|
|
47498
|
+
}
|
|
47499
|
+
buildEnvConfig(envs) {
|
|
47500
|
+
const options = (envs || []).map(e => ({
|
|
47501
|
+
id: e.id,
|
|
47502
|
+
value: e.id,
|
|
47503
|
+
name: e.name,
|
|
47504
|
+
label: e.name,
|
|
47505
|
+
statusColor: e.color,
|
|
47506
|
+
}));
|
|
47507
|
+
return {
|
|
47508
|
+
key: 'environmentIds',
|
|
47509
|
+
label: '',
|
|
47510
|
+
placeholder: 'Select environments…',
|
|
47511
|
+
multiple: true,
|
|
47512
|
+
searchable: true,
|
|
47513
|
+
optionStyle: 'checkbox',
|
|
47514
|
+
showSelectAll: false,
|
|
47515
|
+
options,
|
|
47516
|
+
};
|
|
47517
|
+
}
|
|
47518
|
+
isDuplicateName(candidate) {
|
|
47519
|
+
var _a, _b, _c;
|
|
47520
|
+
const existing = ((_a = this.existingNames) !== null && _a !== void 0 ? _a : []).map(n => (n !== null && n !== void 0 ? n : '').trim().toLowerCase());
|
|
47521
|
+
const lowered = candidate.toLowerCase();
|
|
47522
|
+
if (this.mode === 'edit') {
|
|
47523
|
+
const original = ((_c = (_b = this.initialValue) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : '').trim().toLowerCase();
|
|
47524
|
+
return lowered !== original && existing.includes(lowered);
|
|
47525
|
+
}
|
|
47526
|
+
return existing.includes(lowered);
|
|
47527
|
+
}
|
|
47528
|
+
}
|
|
47529
|
+
NewTestDataProfileDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NewTestDataProfileDialogComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
47530
|
+
NewTestDataProfileDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: NewTestDataProfileDialogComponent, selector: "cqa-new-test-data-profile-dialog", inputs: { mode: "mode", initialValue: "initialValue", existingNames: "existingNames", environments: "environments", lockedColumns: "lockedColumns" }, 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 <!-- Name + Permission -->\n <div class=\"cqa-grid cqa-grid-cols-[1fr_auto] cqa-gap-4 cqa-items-start\">\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Profile name\"\n placeholder=\"e.g. Guest Personas\"\n type=\"text\"\n [value]=\"name\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"nameErrorsArray\"\n (valueChange)=\"onNameChange($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\">Permission</label>\n <cqa-permission-toggle\n [value]=\"readWriteMode\"\n (valueChange)=\"onPermissionChange($event)\">\n </cqa-permission-toggle>\n </div>\n </div>\n\n <!-- Description -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Description\"\n placeholder=\"What data is this profile for?\"\n type=\"text\"\n [value]=\"description\"\n [fullWidth]=\"true\"\n (valueChange)=\"onDescriptionChange($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Columns -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700\">Columns</label>\n <div *ngFor=\"let col of columns; let i = index; trackBy: trackByIndex\"\n class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <cqa-custom-input\n [value]=\"col\"\n [placeholder]=\"'column_' + (i + 1)\"\n [fullWidth]=\"true\"\n [disabled]=\"isColumnLocked(col)\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onColumnChange(i, $event)\">\n </cqa-custom-input>\n <cqa-button\n variant=\"text\"\n btnSize=\"sm\"\n icon=\"delete\"\n tooltip=\"Remove column\"\n [disabled]=\"columns.length <= 1 || isColumnLocked(col)\"\n (clicked)=\"onRemoveColumn(i)\">\n </cqa-button>\n </div>\n <div>\n <cqa-button\n variant=\"text\"\n btnSize=\"sm\"\n icon=\"add\"\n text=\"Add column\"\n (clicked)=\"onAddColumn()\">\n </cqa-button>\n </div>\n <span *ngIf=\"columnsError\" class=\"cqa-text-xs cqa-text-red-600\">{{ columnsError }}</span>\n </div>\n\n <!-- Assign to environments -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700\">\n Assign to environments <span class=\"cqa-text-red-600\">*</span>\n </label>\n <cqa-dynamic-select\n [form]=\"envForm\"\n [config]=\"envConfig\">\n </cqa-dynamic-select>\n <span *ngIf=\"envsError\" class=\"cqa-text-xs cqa-text-red-600\">{{ envsError }}</span>\n <span *ngIf=\"!envsError\" class=\"cqa-text-xs cqa-text-gray-500\">\n Each environment gets an independent copy of the data (same columns, separate rows).\n </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: PermissionToggleComponent, selector: "cqa-permission-toggle", inputs: ["value", "disabled", "roTooltip", "rwTooltip"], outputs: ["valueChange"] }, { type: ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
47531
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NewTestDataProfileDialogComponent, decorators: [{
|
|
47532
|
+
type: Component,
|
|
47533
|
+
args: [{ selector: 'cqa-new-test-data-profile-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 <!-- Name + Permission -->\n <div class=\"cqa-grid cqa-grid-cols-[1fr_auto] cqa-gap-4 cqa-items-start\">\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Profile name\"\n placeholder=\"e.g. Guest Personas\"\n type=\"text\"\n [value]=\"name\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"nameErrorsArray\"\n (valueChange)=\"onNameChange($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\">Permission</label>\n <cqa-permission-toggle\n [value]=\"readWriteMode\"\n (valueChange)=\"onPermissionChange($event)\">\n </cqa-permission-toggle>\n </div>\n </div>\n\n <!-- Description -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Description\"\n placeholder=\"What data is this profile for?\"\n type=\"text\"\n [value]=\"description\"\n [fullWidth]=\"true\"\n (valueChange)=\"onDescriptionChange($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Columns -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700\">Columns</label>\n <div *ngFor=\"let col of columns; let i = index; trackBy: trackByIndex\"\n class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <cqa-custom-input\n [value]=\"col\"\n [placeholder]=\"'column_' + (i + 1)\"\n [fullWidth]=\"true\"\n [disabled]=\"isColumnLocked(col)\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onColumnChange(i, $event)\">\n </cqa-custom-input>\n <cqa-button\n variant=\"text\"\n btnSize=\"sm\"\n icon=\"delete\"\n tooltip=\"Remove column\"\n [disabled]=\"columns.length <= 1 || isColumnLocked(col)\"\n (clicked)=\"onRemoveColumn(i)\">\n </cqa-button>\n </div>\n <div>\n <cqa-button\n variant=\"text\"\n btnSize=\"sm\"\n icon=\"add\"\n text=\"Add column\"\n (clicked)=\"onAddColumn()\">\n </cqa-button>\n </div>\n <span *ngIf=\"columnsError\" class=\"cqa-text-xs cqa-text-red-600\">{{ columnsError }}</span>\n </div>\n\n <!-- Assign to environments -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700\">\n Assign to environments <span class=\"cqa-text-red-600\">*</span>\n </label>\n <cqa-dynamic-select\n [form]=\"envForm\"\n [config]=\"envConfig\">\n </cqa-dynamic-select>\n <span *ngIf=\"envsError\" class=\"cqa-text-xs cqa-text-red-600\">{{ envsError }}</span>\n <span *ngIf=\"!envsError\" class=\"cqa-text-xs cqa-text-gray-500\">\n Each environment gets an independent copy of the data (same columns, separate rows).\n </span>\n </div>\n\n</div>\n" }]
|
|
47534
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { mode: [{
|
|
47535
|
+
type: Input
|
|
47536
|
+
}], initialValue: [{
|
|
47537
|
+
type: Input
|
|
47538
|
+
}], existingNames: [{
|
|
47539
|
+
type: Input
|
|
47540
|
+
}], environments: [{
|
|
47541
|
+
type: Input
|
|
47542
|
+
}], lockedColumns: [{
|
|
47543
|
+
type: Input
|
|
47544
|
+
}] } });
|
|
47545
|
+
|
|
47546
|
+
class AssignEnvironmentsDialogComponent {
|
|
47547
|
+
constructor(cdr) {
|
|
47548
|
+
this.cdr = cdr;
|
|
47549
|
+
this.mode = 'assign';
|
|
47550
|
+
this.profileName = '';
|
|
47551
|
+
this.environments = [];
|
|
47552
|
+
this.assignedEnvironments = [];
|
|
47553
|
+
this.selected = new Set();
|
|
47554
|
+
this.sourceForm = new FormGroup({
|
|
47555
|
+
sourceEnvId: new FormControl(null),
|
|
47556
|
+
});
|
|
47557
|
+
this.sourceConfig = this.buildSourceConfig([]);
|
|
47558
|
+
this.sourceError = null;
|
|
47559
|
+
}
|
|
47560
|
+
ngOnInit() {
|
|
47561
|
+
var _a;
|
|
47562
|
+
// Source picker appears in both modes when there are already-attached envs
|
|
47563
|
+
// to copy from. In clone mode it's required; in assign mode it's optional
|
|
47564
|
+
// (falling back to the base profile rows when no source is picked).
|
|
47565
|
+
if (this.showSourcePicker) {
|
|
47566
|
+
const initial = this.defaultSourceEnvId != null
|
|
47567
|
+
? this.defaultSourceEnvId
|
|
47568
|
+
: (this.mode === 'clone' && this.assignedEnvironments && this.assignedEnvironments.length
|
|
47569
|
+
? this.assignedEnvironments[0].id
|
|
47570
|
+
: null);
|
|
47571
|
+
this.sourceForm.get('sourceEnvId').setValue(initial);
|
|
47572
|
+
this.sourceConfig = this.buildSourceConfig((_a = this.assignedEnvironments) !== null && _a !== void 0 ? _a : []);
|
|
47573
|
+
}
|
|
47574
|
+
}
|
|
47575
|
+
get showSourcePicker() {
|
|
47576
|
+
return (this.assignedEnvironments && this.assignedEnvironments.length > 0);
|
|
47577
|
+
}
|
|
47578
|
+
get sourceLabel() {
|
|
47579
|
+
return this.mode === 'clone' ? 'Copy from which environment' : 'Copy rows from (optional)';
|
|
47580
|
+
}
|
|
47581
|
+
get sourceHelper() {
|
|
47582
|
+
if (this.sourceError) {
|
|
47583
|
+
return this.sourceError;
|
|
47584
|
+
}
|
|
47585
|
+
return this.mode === 'clone'
|
|
47586
|
+
? "The selected environment's rows will be copied into each target environment below."
|
|
47587
|
+
: 'Pick an environment to copy its rows into the new ones. Leave blank to seed with the base profile rows.';
|
|
47588
|
+
}
|
|
47589
|
+
get title() {
|
|
47590
|
+
return this.mode === 'clone' ? 'Clone to other environments' : 'Assign to environments';
|
|
47591
|
+
}
|
|
47592
|
+
get subtitle() {
|
|
47593
|
+
const name = this.profileName ? `"${this.profileName}"` : 'this profile';
|
|
47594
|
+
return this.mode === 'clone'
|
|
47595
|
+
? `Duplicate ${name} into other environments. Column structure is shared; row values are independent per environment.`
|
|
47596
|
+
: `Make ${name} available in the selected environments. Columns are shared — each environment gets an independent row set.`;
|
|
47597
|
+
}
|
|
47598
|
+
get primaryButtonLabel() {
|
|
47599
|
+
const count = this.selected.size;
|
|
47600
|
+
const verb = this.mode === 'clone' ? 'Clone to' : 'Assign to';
|
|
47601
|
+
return `${verb} ${count} environment${count === 1 ? '' : 's'}`;
|
|
47602
|
+
}
|
|
47603
|
+
get primaryDisabled() {
|
|
47604
|
+
if (this.selected.size === 0) {
|
|
47605
|
+
return true;
|
|
47606
|
+
}
|
|
47607
|
+
if (this.mode === 'clone' && this.sourceForm.get('sourceEnvId').value == null) {
|
|
47608
|
+
return true;
|
|
47609
|
+
}
|
|
47610
|
+
return false;
|
|
47611
|
+
}
|
|
47612
|
+
get selectableEnvironments() {
|
|
47613
|
+
var _a;
|
|
47614
|
+
return (_a = this.environments) !== null && _a !== void 0 ? _a : [];
|
|
47615
|
+
}
|
|
47616
|
+
get hasAnySelectable() {
|
|
47617
|
+
var _a;
|
|
47618
|
+
return ((_a = this.environments) !== null && _a !== void 0 ? _a : []).some(e => !e.alreadyAssigned);
|
|
47619
|
+
}
|
|
47620
|
+
get sourceValue() {
|
|
47621
|
+
var _a;
|
|
47622
|
+
return (_a = this.sourceForm.get('sourceEnvId').value) !== null && _a !== void 0 ? _a : null;
|
|
47623
|
+
}
|
|
47624
|
+
isSelected(id) {
|
|
47625
|
+
return this.selected.has(id);
|
|
47626
|
+
}
|
|
47627
|
+
toggle(env) {
|
|
47628
|
+
if (env.alreadyAssigned) {
|
|
47629
|
+
return;
|
|
47630
|
+
}
|
|
47631
|
+
if (this.selected.has(env.id)) {
|
|
47632
|
+
this.selected.delete(env.id);
|
|
47633
|
+
}
|
|
47634
|
+
else {
|
|
47635
|
+
this.selected.add(env.id);
|
|
47636
|
+
}
|
|
47637
|
+
this.cdr.markForCheck();
|
|
47638
|
+
}
|
|
47639
|
+
helperFor(env) {
|
|
47640
|
+
if (env.alreadyAssigned) {
|
|
47641
|
+
return 'Already assigned to this environment';
|
|
47642
|
+
}
|
|
47643
|
+
return env.description || '';
|
|
47644
|
+
}
|
|
47645
|
+
getValue() {
|
|
47646
|
+
if (this.selected.size === 0) {
|
|
47647
|
+
return null;
|
|
47648
|
+
}
|
|
47649
|
+
const src = this.sourceValue;
|
|
47650
|
+
if (this.mode === 'clone') {
|
|
47651
|
+
if (src == null) {
|
|
47652
|
+
this.sourceError = 'Pick the environment whose rows should be copied.';
|
|
47653
|
+
this.cdr.markForCheck();
|
|
47654
|
+
return null;
|
|
47655
|
+
}
|
|
47656
|
+
this.sourceError = null;
|
|
47657
|
+
return { selectedIds: Array.from(this.selected), sourceEnvId: Number(src) };
|
|
47658
|
+
}
|
|
47659
|
+
// Assign mode: source is optional — include it when the user picked one.
|
|
47660
|
+
this.sourceError = null;
|
|
47661
|
+
return src != null
|
|
47662
|
+
? { selectedIds: Array.from(this.selected), sourceEnvId: Number(src) }
|
|
47663
|
+
: { selectedIds: Array.from(this.selected) };
|
|
47664
|
+
}
|
|
47665
|
+
buildSourceConfig(envs) {
|
|
47666
|
+
const options = (envs || []).map(e => ({
|
|
47667
|
+
id: e.id,
|
|
47668
|
+
value: e.id,
|
|
47669
|
+
name: e.name,
|
|
47670
|
+
label: e.name,
|
|
47671
|
+
statusColor: e.color,
|
|
47672
|
+
}));
|
|
47673
|
+
return {
|
|
47674
|
+
key: 'sourceEnvId',
|
|
47675
|
+
label: '',
|
|
47676
|
+
placeholder: 'Select source environment…',
|
|
47677
|
+
multiple: false,
|
|
47678
|
+
searchable: true,
|
|
47679
|
+
options,
|
|
47680
|
+
};
|
|
47681
|
+
}
|
|
47682
|
+
}
|
|
47683
|
+
AssignEnvironmentsDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AssignEnvironmentsDialogComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
47684
|
+
AssignEnvironmentsDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AssignEnvironmentsDialogComponent, selector: "cqa-assign-environments-dialog", inputs: { mode: "mode", profileName: "profileName", environments: "environments", assignedEnvironments: "assignedEnvironments", defaultSourceEnvId: "defaultSourceEnvId" }, 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 <!-- Source env picker: required in clone mode, optional in assign mode -->\n <div *ngIf=\"showSourcePicker\" class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700\">{{ sourceLabel }}</label>\n <cqa-dynamic-select\n [form]=\"sourceForm\"\n [config]=\"sourceConfig\">\n </cqa-dynamic-select>\n <span [class.cqa-text-red-600]=\"sourceError\" [class.cqa-text-gray-500]=\"!sourceError\" class=\"cqa-text-xs\">\n {{ sourceHelper }}\n </span>\n </div>\n\n <!-- Selectable envs -->\n <div\n *ngIf=\"hasAnySelectable || (environments?.length || 0) > 0\"\n class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[340px] cqa-overflow-y-auto\">\n <label\n *ngFor=\"let env of selectableEnvironments\"\n class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-px-3 cqa-py-2.5 cqa-border cqa-rounded-[10px] cqa-bg-white cqa-transition-colors\"\n [class.cqa-border-gray-200]=\"!isSelected(env.id) && !env.alreadyAssigned\"\n [class.hover:cqa-border-indigo-200]=\"!env.alreadyAssigned && !isSelected(env.id)\"\n [class.cqa-border-indigo-400]=\"isSelected(env.id)\"\n [class.cqa-bg-indigo-50]=\"isSelected(env.id)\"\n [class.cqa-opacity-50]=\"env.alreadyAssigned\"\n [class.cqa-cursor-pointer]=\"!env.alreadyAssigned\"\n [class.cqa-cursor-not-allowed]=\"env.alreadyAssigned\"\n (click)=\"toggle(env)\">\n <input\n type=\"checkbox\"\n class=\"cqa-w-4 cqa-h-4 cqa-cursor-pointer\"\n [checked]=\"isSelected(env.id)\"\n [disabled]=\"!!env.alreadyAssigned\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggle(env)\" />\n\n <span\n class=\"cqa-inline-block cqa-w-2 cqa-h-2 cqa-rounded-full cqa-flex-none\"\n [style.background]=\"env.color || '#3F43EE'\"></span>\n\n <div class=\"cqa-flex cqa-flex-col cqa-min-w-0 cqa-flex-1\">\n <div class=\"cqa-text-sm cqa-font-medium cqa-text-gray-900\">{{ env.name }}</div>\n <div *ngIf=\"helperFor(env)\" class=\"cqa-text-xs cqa-text-gray-500 cqa-leading-[1.4]\">{{ helperFor(env) }}</div>\n </div>\n </label>\n </div>\n\n <div\n *ngIf=\"(environments?.length || 0) === 0\"\n class=\"cqa-py-8 cqa-px-4 cqa-text-center cqa-text-sm cqa-text-gray-500\">\n All environments are already assigned to this profile.\n </div>\n</div>\n", components: [{ type: DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
47685
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AssignEnvironmentsDialogComponent, decorators: [{
|
|
47686
|
+
type: Component,
|
|
47687
|
+
args: [{ selector: 'cqa-assign-environments-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 <!-- Source env picker: required in clone mode, optional in assign mode -->\n <div *ngIf=\"showSourcePicker\" class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700\">{{ sourceLabel }}</label>\n <cqa-dynamic-select\n [form]=\"sourceForm\"\n [config]=\"sourceConfig\">\n </cqa-dynamic-select>\n <span [class.cqa-text-red-600]=\"sourceError\" [class.cqa-text-gray-500]=\"!sourceError\" class=\"cqa-text-xs\">\n {{ sourceHelper }}\n </span>\n </div>\n\n <!-- Selectable envs -->\n <div\n *ngIf=\"hasAnySelectable || (environments?.length || 0) > 0\"\n class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[340px] cqa-overflow-y-auto\">\n <label\n *ngFor=\"let env of selectableEnvironments\"\n class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-px-3 cqa-py-2.5 cqa-border cqa-rounded-[10px] cqa-bg-white cqa-transition-colors\"\n [class.cqa-border-gray-200]=\"!isSelected(env.id) && !env.alreadyAssigned\"\n [class.hover:cqa-border-indigo-200]=\"!env.alreadyAssigned && !isSelected(env.id)\"\n [class.cqa-border-indigo-400]=\"isSelected(env.id)\"\n [class.cqa-bg-indigo-50]=\"isSelected(env.id)\"\n [class.cqa-opacity-50]=\"env.alreadyAssigned\"\n [class.cqa-cursor-pointer]=\"!env.alreadyAssigned\"\n [class.cqa-cursor-not-allowed]=\"env.alreadyAssigned\"\n (click)=\"toggle(env)\">\n <input\n type=\"checkbox\"\n class=\"cqa-w-4 cqa-h-4 cqa-cursor-pointer\"\n [checked]=\"isSelected(env.id)\"\n [disabled]=\"!!env.alreadyAssigned\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggle(env)\" />\n\n <span\n class=\"cqa-inline-block cqa-w-2 cqa-h-2 cqa-rounded-full cqa-flex-none\"\n [style.background]=\"env.color || '#3F43EE'\"></span>\n\n <div class=\"cqa-flex cqa-flex-col cqa-min-w-0 cqa-flex-1\">\n <div class=\"cqa-text-sm cqa-font-medium cqa-text-gray-900\">{{ env.name }}</div>\n <div *ngIf=\"helperFor(env)\" class=\"cqa-text-xs cqa-text-gray-500 cqa-leading-[1.4]\">{{ helperFor(env) }}</div>\n </div>\n </label>\n </div>\n\n <div\n *ngIf=\"(environments?.length || 0) === 0\"\n class=\"cqa-py-8 cqa-px-4 cqa-text-center cqa-text-sm cqa-text-gray-500\">\n All environments are already assigned to this profile.\n </div>\n</div>\n" }]
|
|
47688
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { mode: [{
|
|
47689
|
+
type: Input
|
|
47690
|
+
}], profileName: [{
|
|
47691
|
+
type: Input
|
|
47692
|
+
}], environments: [{
|
|
47693
|
+
type: Input
|
|
47694
|
+
}], assignedEnvironments: [{
|
|
47695
|
+
type: Input
|
|
47696
|
+
}], defaultSourceEnvId: [{
|
|
47697
|
+
type: Input
|
|
47698
|
+
}] } });
|
|
47699
|
+
|
|
47048
47700
|
class UiKitModule {
|
|
47049
47701
|
constructor(iconRegistry) {
|
|
47050
47702
|
iconRegistry.registerFontClassAlias('material-symbols-outlined', 'material-symbols-outlined');
|
|
@@ -47141,6 +47793,10 @@ UiKitModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
|
|
|
47141
47793
|
CaptureVideoDialogComponent,
|
|
47142
47794
|
SubStepsConfirmationDialogComponent,
|
|
47143
47795
|
NewGlobalVariableDialogComponent,
|
|
47796
|
+
NewEnvironmentDialogComponent,
|
|
47797
|
+
NewEnvironmentVariableDialogComponent,
|
|
47798
|
+
NewTestDataProfileDialogComponent,
|
|
47799
|
+
AssignEnvironmentsDialogComponent,
|
|
47144
47800
|
PermissionToggleComponent,
|
|
47145
47801
|
ExportCodeModalComponent,
|
|
47146
47802
|
ProgressIndicatorComponent,
|
|
@@ -47319,6 +47975,10 @@ UiKitModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
|
|
|
47319
47975
|
CaptureVideoDialogComponent,
|
|
47320
47976
|
SubStepsConfirmationDialogComponent,
|
|
47321
47977
|
NewGlobalVariableDialogComponent,
|
|
47978
|
+
NewEnvironmentDialogComponent,
|
|
47979
|
+
NewEnvironmentVariableDialogComponent,
|
|
47980
|
+
NewTestDataProfileDialogComponent,
|
|
47981
|
+
AssignEnvironmentsDialogComponent,
|
|
47322
47982
|
PermissionToggleComponent,
|
|
47323
47983
|
ExportCodeModalComponent,
|
|
47324
47984
|
ProgressIndicatorComponent,
|
|
@@ -47542,6 +48202,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
47542
48202
|
CaptureVideoDialogComponent,
|
|
47543
48203
|
SubStepsConfirmationDialogComponent,
|
|
47544
48204
|
NewGlobalVariableDialogComponent,
|
|
48205
|
+
NewEnvironmentDialogComponent,
|
|
48206
|
+
NewEnvironmentVariableDialogComponent,
|
|
48207
|
+
NewTestDataProfileDialogComponent,
|
|
48208
|
+
AssignEnvironmentsDialogComponent,
|
|
47545
48209
|
PermissionToggleComponent,
|
|
47546
48210
|
ExportCodeModalComponent,
|
|
47547
48211
|
ProgressIndicatorComponent,
|
|
@@ -47726,6 +48390,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
47726
48390
|
CaptureVideoDialogComponent,
|
|
47727
48391
|
SubStepsConfirmationDialogComponent,
|
|
47728
48392
|
NewGlobalVariableDialogComponent,
|
|
48393
|
+
NewEnvironmentDialogComponent,
|
|
48394
|
+
NewEnvironmentVariableDialogComponent,
|
|
48395
|
+
NewTestDataProfileDialogComponent,
|
|
48396
|
+
AssignEnvironmentsDialogComponent,
|
|
47729
48397
|
PermissionToggleComponent,
|
|
47730
48398
|
ExportCodeModalComponent,
|
|
47731
48399
|
ProgressIndicatorComponent,
|
|
@@ -48562,5 +49230,5 @@ function buildTestCaseDetailsFromApi(data, options) {
|
|
|
48562
49230
|
* Generated bundle index. Do not edit.
|
|
48563
49231
|
*/
|
|
48564
49232
|
|
|
48565
|
-
export { ADVANCED_SUBFIELDS_BY_TYPE, ADVANCED_TOGGLE_KEYS, AIActionStepComponent, AIAgentStepComponent, API_EDIT_STEP_LABELS, ActionMenuButtonComponent, AddPrerequisiteCasesSectionComponent, AdvancedVariablesFormComponent, AiDebugAlertComponent, AiLogsWithReasoningComponent, AiPromptCardComponent, AiReasoningComponent, ApiEditStepComponent, ApiMockingCardComponent, ApiStepComponent, 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_METADATA_COLOR, DEFAULT_PRIORITY_COLOR_CONFIG, DEFAULT_STATUS_COLOR_CONFIG, DIALOG_DATA, DIALOG_REF, DashboardHeaderComponent, DaterangepickerComponent, DaterangepickerDirective, DbQueryExecutionItemComponent, DbVerificationStepComponent, 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, ElementFormComponent, ElementListComponent, ElementPopupComponent, ElementPopupRef, ElementPopupService, EmptyStateComponent, ErrorModalComponent, ExecutionResultModalComponent, ExportCodeModalComponent, FailedStepCardComponent, FailedStepComponent, FailedTestCasesCardComponent, FileDownloadStepComponent, FileUploadComponent, FullTableLoaderComponent, HeatErrorMapCellComponent, InsightCardComponent, ItemListComponent, IterationsLoopComponent, JumpToStepModalComponent, LiveConversationComponent, LiveExecutionStepComponent, LoopStepComponent, MONACO_LANGUAGE_MAP, MainStepCollapseComponent, MetricsCardComponent, MixedVariableInputComponent, NetworkRequestComponent, NewGlobalVariableDialogComponent, NewVersionHistoryDetailComponent, OtherButtonComponent, PRIORITY_COLORS, PaginationComponent, PermissionToggleComponent, ProgressIndicatorComponent, ProgressTextCardComponent, QuestionnaireListComponent, RESULT_COLORS, RadioCardGroupComponent, RecordingBannerComponent, ReviewRecordedStepsModalComponent, 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 };
|
|
49233
|
+
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_METADATA_COLOR, DEFAULT_PRIORITY_COLOR_CONFIG, DEFAULT_STATUS_COLOR_CONFIG, DIALOG_DATA, DIALOG_REF, DashboardHeaderComponent, DaterangepickerComponent, DaterangepickerDirective, DbQueryExecutionItemComponent, DbVerificationStepComponent, 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, FailedStepCardComponent, FailedStepComponent, FailedTestCasesCardComponent, FileDownloadStepComponent, FileUploadComponent, FullTableLoaderComponent, HeatErrorMapCellComponent, InsightCardComponent, ItemListComponent, IterationsLoopComponent, JumpToStepModalComponent, LiveConversationComponent, LiveExecutionStepComponent, LoopStepComponent, MONACO_LANGUAGE_MAP, MainStepCollapseComponent, MetricsCardComponent, MixedVariableInputComponent, NetworkRequestComponent, NewEnvironmentDialogComponent, NewEnvironmentVariableDialogComponent, NewGlobalVariableDialogComponent, NewTestDataProfileDialogComponent, NewVersionHistoryDetailComponent, OtherButtonComponent, PRIORITY_COLORS, PaginationComponent, PermissionToggleComponent, ProgressIndicatorComponent, ProgressTextCardComponent, QuestionnaireListComponent, RESULT_COLORS, RadioCardGroupComponent, RecordingBannerComponent, ReviewRecordedStepsModalComponent, 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 };
|
|
48566
49234
|
//# sourceMappingURL=cqa-lib-cqa-ui.mjs.map
|