@cqa-lib/cqa-ui 1.1.167 → 1.1.169
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/step-builder/step-builder-action/step-builder-action.component.mjs +7 -4
- package/esm2020/lib/step-builder/step-builder-loop/step-builder-loop.component.mjs +391 -0
- package/esm2020/lib/ui-kit.module.mjs +14 -5
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +384 -8
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +401 -8
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/step-builder/step-builder-action/step-builder-action.component.d.ts +2 -1
- package/lib/step-builder/step-builder-loop/step-builder-loop.component.d.ts +114 -0
- package/lib/ui-kit.module.d.ts +21 -19
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -20,6 +20,7 @@ import * as i3$3 from '@angular/material/checkbox';
|
|
|
20
20
|
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
21
21
|
import * as i4 from '@angular/material/radio';
|
|
22
22
|
import { MatRadioModule } from '@angular/material/radio';
|
|
23
|
+
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
23
24
|
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
24
25
|
import * as i1$5 from '@angular/material/progress-spinner';
|
|
25
26
|
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
@@ -15849,6 +15850,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
15849
15850
|
class StepBuilderActionComponent {
|
|
15850
15851
|
constructor(fb) {
|
|
15851
15852
|
this.fb = fb;
|
|
15853
|
+
this.showHeader = true;
|
|
15852
15854
|
/** List of action templates to display */
|
|
15853
15855
|
this.templates = [];
|
|
15854
15856
|
/** Placeholder text for search input */
|
|
@@ -16000,11 +16002,13 @@ class StepBuilderActionComponent {
|
|
|
16000
16002
|
}
|
|
16001
16003
|
}
|
|
16002
16004
|
StepBuilderActionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderActionComponent, deps: [{ token: i2$2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
16003
|
-
StepBuilderActionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderActionComponent, selector: "cqa-step-builder-action", inputs: { templates: "templates", searchPlaceholder: "searchPlaceholder", setTemplateVariables: "setTemplateVariables", preventSelectTemplate: "preventSelectTemplate" }, outputs: { templateChanged: "templateChanged", createStep: "createStep", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white cqa-px-4 cqa-py-2\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-1\">\n Create an action step\n </h2>\n <div *ngIf=\"!selectedTemplate\" class=\"cqa-
|
|
16005
|
+
StepBuilderActionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderActionComponent, selector: "cqa-step-builder-action", inputs: { showHeader: "showHeader", templates: "templates", searchPlaceholder: "searchPlaceholder", setTemplateVariables: "setTemplateVariables", preventSelectTemplate: "preventSelectTemplate" }, outputs: { templateChanged: "templateChanged", createStep: "createStep", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white\" [ngClass]=\"{'cqa-px-4 cqa-py-2': showHeader}\">\n <!-- Header -->\n <h2 *ngIf=\"showHeader\" class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-1\">\n Create an action step\n </h2>\n <div *ngIf=\"!selectedTemplate\" class=\"cqa-flex cqa-flex-col cqa-h-full cqa-flex-1\"\n [ngClass]=\"{'cqa-px-3': showHeader}\">\n\n <!-- Search Bar -->\n <div class=\"cqa-pb-1\">\n <div class=\"cqa-pb-1\" *ngIf=\"showHeader\">\n <p class=\"cqa-text-[12px] cqa-text-gray-500\">\n Template library\n </p>\n </div>\n <cqa-search-bar [placeholder]=\"searchPlaceholder\" [fullWidth]=\"true\" [value]=\"searchValue\"\n (valueChange)=\"onSearchChange($event)\" (search)=\"onSearchSubmit($event)\" (cleared)=\"onSearchCleared()\">\n </cqa-search-bar>\n </div>\n\n <!-- Template List -->\n <div class=\"cqa-flex-1 cqa-overflow-y-auto cqa-px-2\">\n <div class=\"cqa-py-2\">\n <div *ngFor=\"let template of filteredTemplates\"\n class=\"cqa-bg-white cqa-cursor-pointer cqa-transition-all hover:cqa-border-blue-500 hover:cqa-shadow-sm\"\n (click)=\"selectTemplate(template)\">\n <div class=\"cqa-text-[12px] cqa-leading-[23px] cqa-text-black-100\"\n [innerHTML]=\"template.htmlGrammar || template.naturalText || ''\">\n </div>\n </div>\n\n <div *ngIf=\"filteredTemplates.length === 0\" class=\"cqa-text-center cqa-py-8 cqa-text-gray-400 cqa-text-[12px]\">\n No templates found\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"selectedTemplate\" class=\"cqa-flex cqa-flex-col cqa-h-full\">\n <!-- Instruction Text with Element Buttons -->\n <div class=\"cqa-mb-4 cqa-flex cqa-items-center cqa-flex-wrap cqa-gap-1 cqa-text-sm cqa-text-gray-700\">\n <div class=\"cqa-text-[12px] cqa-leading-[23px] cqa-text-black-100\"\n [innerHTML]=\"selectedTemplate.htmlGrammar || selectedTemplate.naturalText || ''\">\n </div>\n </div>\n\n <!-- Form Fields in Two Columns -->\n <div class=\"cqa-flex cqa-overflow-y-auto\">\n <div class=\"cqa-flex-1 cqa-flex cqa-flex-col cqa-gap-1\">\n <div class=\"cqa-flex cqa-gap-x-6 cqa-flex-wrap\">\n <!-- Elements -->\n <ng-container *ngFor=\"let variable of templateVariables\">\n <ng-container *ngIf=\"variable.name !== 'custom_code' && variable.type !== 'boolean'\">\n <ng-container *ngIf=\"(variable.name === 'type'||variable.name === 'scrollTo'); else defaultInput\">\n <div class=\"cqa-flex cqa-flex-col\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n {{ variable.label }}\n </label>\n <cqa-dynamic-select [form]=\"variablesForm\" [config]=\"getSelectConfig(variable)\">\n </cqa-dynamic-select>\n </div>\n </ng-container>\n <ng-template #defaultInput>\n <div class=\"cqa-flex cqa-flex-col\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n {{ variable.label }}\n </label>\n <cqa-custom-input [placeholder]=\"'Text Input'\" [value]=\"variable.value\" [fullWidth]=\"true\"\n (valueChange)=\"onVariableValueChange(variable.name, $event)\">\n </cqa-custom-input>\n </div>\n </ng-template>\n\n </ng-container>\n </ng-container>\n\n\n\n\n <!-- <div class=\"cqa-flex cqa-flex-col\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n Elements\n </label>\n <cqa-custom-input [placeholder]=\"'Text Input'\" [value]=\"metadata\" [fullWidth]=\"true\"\n (valueChange)=\"metadata = $event\">\n </cqa-custom-input>\n </div> -->\n\n <!-- Test Data -->\n <!-- <div class=\"cqa-flex cqa-flex-col\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n Test Data\n </label>\n <cqa-custom-input [placeholder]=\"'Text Input'\" [value]=\"metadata\" [fullWidth]=\"true\"\n (valueChange)=\"metadata = $event\">\n </cqa-custom-input>\n </div> -->\n\n <!-- </div>\n <div class=\"cqa-flex cqa-gap-6\"> -->\n <!-- Metadata -->\n <div class=\"cqa-flex cqa-flex-col\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n Metadata\n </label>\n <cqa-custom-input [placeholder]=\"'Text Input'\" [value]=\"metadata\" [fullWidth]=\"true\"\n (valueChange)=\"metadata = $event\">\n </cqa-custom-input>\n </div>\n\n <!-- Description -->\n <div class=\"cqa-flex cqa-flex-col\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n Description\n </label>\n <cqa-custom-input [placeholder]=\"'Text Input'\" [value]=\"description\" [fullWidth]=\"true\"\n (valueChange)=\"description = $event\">\n </cqa-custom-input>\n </div>\n </div>\n\n <!-- Advanced (Expandable) -->\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <button type=\"button\"\n class=\"cqa-flex cqa-w-full cqa-items-center cqa-justify-between cqa-gap-2 cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-bg-transparent cqa-border-none cqa-cursor-pointer cqa-p-0 cqa-mb-1.5\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-base\" [class.cqa-rotate-180]=\"advancedExpanded\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"advancedExpanded\" class=\"cqa-mt-2\">\n <!-- Advanced fields can be added here -->\n </div>\n </div>\n </div>\n\n\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-w-1/2\" variant=\"filled\" text=\"Create Step\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n </div>\n</div>", components: [{ type: SearchBarComponent, selector: "cqa-search-bar", inputs: ["placeholder", "value", "disabled", "showClear", "ariaLabel", "autoFocus", "size", "fullWidth"], outputs: ["valueChange", "search", "cleared"] }, { type: DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore"] }, { type: CustomInputComponent, selector: "cqa-custom-input", inputs: ["label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
16004
16006
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderActionComponent, decorators: [{
|
|
16005
16007
|
type: Component,
|
|
16006
|
-
args: [{ selector: 'cqa-step-builder-action', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white cqa-px-4 cqa-py-2\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-1\">\n Create an action step\n </h2>\n <div *ngIf=\"!selectedTemplate\" class=\"cqa-
|
|
16007
|
-
}], ctorParameters: function () { return [{ type: i2$2.FormBuilder }]; }, propDecorators: {
|
|
16008
|
+
args: [{ selector: 'cqa-step-builder-action', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white\" [ngClass]=\"{'cqa-px-4 cqa-py-2': showHeader}\">\n <!-- Header -->\n <h2 *ngIf=\"showHeader\" class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-1\">\n Create an action step\n </h2>\n <div *ngIf=\"!selectedTemplate\" class=\"cqa-flex cqa-flex-col cqa-h-full cqa-flex-1\"\n [ngClass]=\"{'cqa-px-3': showHeader}\">\n\n <!-- Search Bar -->\n <div class=\"cqa-pb-1\">\n <div class=\"cqa-pb-1\" *ngIf=\"showHeader\">\n <p class=\"cqa-text-[12px] cqa-text-gray-500\">\n Template library\n </p>\n </div>\n <cqa-search-bar [placeholder]=\"searchPlaceholder\" [fullWidth]=\"true\" [value]=\"searchValue\"\n (valueChange)=\"onSearchChange($event)\" (search)=\"onSearchSubmit($event)\" (cleared)=\"onSearchCleared()\">\n </cqa-search-bar>\n </div>\n\n <!-- Template List -->\n <div class=\"cqa-flex-1 cqa-overflow-y-auto cqa-px-2\">\n <div class=\"cqa-py-2\">\n <div *ngFor=\"let template of filteredTemplates\"\n class=\"cqa-bg-white cqa-cursor-pointer cqa-transition-all hover:cqa-border-blue-500 hover:cqa-shadow-sm\"\n (click)=\"selectTemplate(template)\">\n <div class=\"cqa-text-[12px] cqa-leading-[23px] cqa-text-black-100\"\n [innerHTML]=\"template.htmlGrammar || template.naturalText || ''\">\n </div>\n </div>\n\n <div *ngIf=\"filteredTemplates.length === 0\" class=\"cqa-text-center cqa-py-8 cqa-text-gray-400 cqa-text-[12px]\">\n No templates found\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"selectedTemplate\" class=\"cqa-flex cqa-flex-col cqa-h-full\">\n <!-- Instruction Text with Element Buttons -->\n <div class=\"cqa-mb-4 cqa-flex cqa-items-center cqa-flex-wrap cqa-gap-1 cqa-text-sm cqa-text-gray-700\">\n <div class=\"cqa-text-[12px] cqa-leading-[23px] cqa-text-black-100\"\n [innerHTML]=\"selectedTemplate.htmlGrammar || selectedTemplate.naturalText || ''\">\n </div>\n </div>\n\n <!-- Form Fields in Two Columns -->\n <div class=\"cqa-flex cqa-overflow-y-auto\">\n <div class=\"cqa-flex-1 cqa-flex cqa-flex-col cqa-gap-1\">\n <div class=\"cqa-flex cqa-gap-x-6 cqa-flex-wrap\">\n <!-- Elements -->\n <ng-container *ngFor=\"let variable of templateVariables\">\n <ng-container *ngIf=\"variable.name !== 'custom_code' && variable.type !== 'boolean'\">\n <ng-container *ngIf=\"(variable.name === 'type'||variable.name === 'scrollTo'); else defaultInput\">\n <div class=\"cqa-flex cqa-flex-col\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n {{ variable.label }}\n </label>\n <cqa-dynamic-select [form]=\"variablesForm\" [config]=\"getSelectConfig(variable)\">\n </cqa-dynamic-select>\n </div>\n </ng-container>\n <ng-template #defaultInput>\n <div class=\"cqa-flex cqa-flex-col\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n {{ variable.label }}\n </label>\n <cqa-custom-input [placeholder]=\"'Text Input'\" [value]=\"variable.value\" [fullWidth]=\"true\"\n (valueChange)=\"onVariableValueChange(variable.name, $event)\">\n </cqa-custom-input>\n </div>\n </ng-template>\n\n </ng-container>\n </ng-container>\n\n\n\n\n <!-- <div class=\"cqa-flex cqa-flex-col\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n Elements\n </label>\n <cqa-custom-input [placeholder]=\"'Text Input'\" [value]=\"metadata\" [fullWidth]=\"true\"\n (valueChange)=\"metadata = $event\">\n </cqa-custom-input>\n </div> -->\n\n <!-- Test Data -->\n <!-- <div class=\"cqa-flex cqa-flex-col\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n Test Data\n </label>\n <cqa-custom-input [placeholder]=\"'Text Input'\" [value]=\"metadata\" [fullWidth]=\"true\"\n (valueChange)=\"metadata = $event\">\n </cqa-custom-input>\n </div> -->\n\n <!-- </div>\n <div class=\"cqa-flex cqa-gap-6\"> -->\n <!-- Metadata -->\n <div class=\"cqa-flex cqa-flex-col\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n Metadata\n </label>\n <cqa-custom-input [placeholder]=\"'Text Input'\" [value]=\"metadata\" [fullWidth]=\"true\"\n (valueChange)=\"metadata = $event\">\n </cqa-custom-input>\n </div>\n\n <!-- Description -->\n <div class=\"cqa-flex cqa-flex-col\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n Description\n </label>\n <cqa-custom-input [placeholder]=\"'Text Input'\" [value]=\"description\" [fullWidth]=\"true\"\n (valueChange)=\"description = $event\">\n </cqa-custom-input>\n </div>\n </div>\n\n <!-- Advanced (Expandable) -->\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <button type=\"button\"\n class=\"cqa-flex cqa-w-full cqa-items-center cqa-justify-between cqa-gap-2 cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-bg-transparent cqa-border-none cqa-cursor-pointer cqa-p-0 cqa-mb-1.5\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-base\" [class.cqa-rotate-180]=\"advancedExpanded\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"advancedExpanded\" class=\"cqa-mt-2\">\n <!-- Advanced fields can be added here -->\n </div>\n </div>\n </div>\n\n\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-w-1/2\" variant=\"filled\" text=\"Create Step\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n </div>\n</div>", styles: [] }]
|
|
16009
|
+
}], ctorParameters: function () { return [{ type: i2$2.FormBuilder }]; }, propDecorators: { showHeader: [{
|
|
16010
|
+
type: Input
|
|
16011
|
+
}], templates: [{
|
|
16008
16012
|
type: Input
|
|
16009
16013
|
}], searchPlaceholder: [{
|
|
16010
16014
|
type: Input
|
|
@@ -16020,6 +16024,371 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
16020
16024
|
type: Output
|
|
16021
16025
|
}] } });
|
|
16022
16026
|
|
|
16027
|
+
class StepBuilderLoopComponent {
|
|
16028
|
+
constructor() {
|
|
16029
|
+
/** Currently selected loop type */
|
|
16030
|
+
this.loopType = 'for';
|
|
16031
|
+
/** Options for the select option dropdown */
|
|
16032
|
+
this.selectOptions = [
|
|
16033
|
+
{ value: 'dataProfile', label: 'Data Profile' },
|
|
16034
|
+
{ value: 'runTime', label: 'Run Time' }
|
|
16035
|
+
];
|
|
16036
|
+
/** Options for the data profile dropdown - accepts DataProfileOption objects */
|
|
16037
|
+
this.dataProfileOptions = [];
|
|
16038
|
+
/** Indicates if more data profiles are available for loading */
|
|
16039
|
+
this.hasMoreDataProfiles = false;
|
|
16040
|
+
/** Loading state for data profiles */
|
|
16041
|
+
this.isLoadingDataProfiles = false;
|
|
16042
|
+
/** Function to handle variable processing or custom logic. Can be passed from parent component. */
|
|
16043
|
+
this.setWhileTemplateVariables = () => { return []; };
|
|
16044
|
+
/** Emit when step is created */
|
|
16045
|
+
this.createStep = new EventEmitter();
|
|
16046
|
+
/** Emit when cancelled */
|
|
16047
|
+
this.cancelled = new EventEmitter();
|
|
16048
|
+
/** Emit when loop type changes */
|
|
16049
|
+
this.loopTypeChange = new EventEmitter();
|
|
16050
|
+
/** Emit when more data profiles need to be loaded */
|
|
16051
|
+
this.loadMoreDataProfiles = new EventEmitter();
|
|
16052
|
+
/** Emit when data profile search query changes */
|
|
16053
|
+
this.searchDataProfiles = new EventEmitter();
|
|
16054
|
+
this.whileTemplates = [];
|
|
16055
|
+
this.whileSearchPlaceholder = 'Search While';
|
|
16056
|
+
this.whileSearchValue = '';
|
|
16057
|
+
this.selectedWhileTemplate = null;
|
|
16058
|
+
this.selectedLoopType = 'for';
|
|
16059
|
+
// Internal state for managing loop indices
|
|
16060
|
+
this.selectedDataProfile = null;
|
|
16061
|
+
this.startArray = [];
|
|
16062
|
+
this.endArray = [];
|
|
16063
|
+
// Initialize single FormGroup with all fields
|
|
16064
|
+
this.loopForm = new FormGroup({
|
|
16065
|
+
selectOption: new FormControl(null),
|
|
16066
|
+
dataProfile: new FormControl(null),
|
|
16067
|
+
loopStart: new FormControl(null),
|
|
16068
|
+
loopEnd: new FormControl(null),
|
|
16069
|
+
runTime: new FormControl(null)
|
|
16070
|
+
});
|
|
16071
|
+
// Initialize configs
|
|
16072
|
+
this.selectOptionConfig = {
|
|
16073
|
+
key: 'selectOption',
|
|
16074
|
+
placeholder: 'select option',
|
|
16075
|
+
selectedValue: 'dataProfile',
|
|
16076
|
+
multiple: false,
|
|
16077
|
+
searchable: false,
|
|
16078
|
+
options: this.selectOptions
|
|
16079
|
+
};
|
|
16080
|
+
this.dataProfileConfig = {
|
|
16081
|
+
key: 'dataProfile',
|
|
16082
|
+
placeholder: 'data profile',
|
|
16083
|
+
multiple: false,
|
|
16084
|
+
searchable: true,
|
|
16085
|
+
serverSearch: true,
|
|
16086
|
+
hasMore: this.hasMoreDataProfiles,
|
|
16087
|
+
isLoading: this.isLoadingDataProfiles,
|
|
16088
|
+
options: [],
|
|
16089
|
+
onChange: (value) => {
|
|
16090
|
+
this.onDataProfileChange(value);
|
|
16091
|
+
},
|
|
16092
|
+
onSearch: (query) => {
|
|
16093
|
+
this.onSearchDataProfiles(query);
|
|
16094
|
+
},
|
|
16095
|
+
onLoadMore: (query) => {
|
|
16096
|
+
this.loadMoreDataProfiles.emit(query || '');
|
|
16097
|
+
}
|
|
16098
|
+
};
|
|
16099
|
+
this.loopStartConfig = {
|
|
16100
|
+
key: 'loopStart',
|
|
16101
|
+
placeholder: 'loop start',
|
|
16102
|
+
multiple: false,
|
|
16103
|
+
searchable: false,
|
|
16104
|
+
options: [],
|
|
16105
|
+
onChange: (value) => {
|
|
16106
|
+
this.onLoopStartChange(value);
|
|
16107
|
+
}
|
|
16108
|
+
};
|
|
16109
|
+
this.loopEndConfig = {
|
|
16110
|
+
key: 'loopEnd',
|
|
16111
|
+
placeholder: 'loop end',
|
|
16112
|
+
multiple: false,
|
|
16113
|
+
searchable: false,
|
|
16114
|
+
options: [],
|
|
16115
|
+
onChange: (value) => {
|
|
16116
|
+
// Handle change if needed
|
|
16117
|
+
}
|
|
16118
|
+
};
|
|
16119
|
+
}
|
|
16120
|
+
ngOnInit() {
|
|
16121
|
+
this.selectedLoopType = this.loopType;
|
|
16122
|
+
this.updateConfigs();
|
|
16123
|
+
}
|
|
16124
|
+
ngOnChanges(changes) {
|
|
16125
|
+
var _a;
|
|
16126
|
+
console.log("this.whileTemplates", this.whileTemplates);
|
|
16127
|
+
if (changes['selectOptions']) {
|
|
16128
|
+
this.updateConfigs();
|
|
16129
|
+
}
|
|
16130
|
+
if (changes['dataProfileOptions']) {
|
|
16131
|
+
this.updateConfigs();
|
|
16132
|
+
// If a data profile is already selected, update loop indices
|
|
16133
|
+
const currentProfileId = (_a = this.loopForm.get('dataProfile')) === null || _a === void 0 ? void 0 : _a.value;
|
|
16134
|
+
if (currentProfileId) {
|
|
16135
|
+
this.onDataProfileChange(currentProfileId);
|
|
16136
|
+
}
|
|
16137
|
+
}
|
|
16138
|
+
if (changes['hasMoreDataProfiles'] || changes['isLoadingDataProfiles']) {
|
|
16139
|
+
this.updateDataProfileConfig();
|
|
16140
|
+
}
|
|
16141
|
+
if (changes['loopType']) {
|
|
16142
|
+
this.selectedLoopType = this.loopType;
|
|
16143
|
+
}
|
|
16144
|
+
// Note: loopStartOptions and loopEndOptions are now calculated dynamically
|
|
16145
|
+
// so they don't need to be updated from inputs
|
|
16146
|
+
}
|
|
16147
|
+
updateConfigs() {
|
|
16148
|
+
// Convert DataProfileOption[] to SelectOption[]
|
|
16149
|
+
this.dataProfileConfig = Object.assign(Object.assign({}, this.dataProfileConfig), { options: this.convertDataProfileOptionsToSelectOptions(this.dataProfileOptions), hasMore: this.hasMoreDataProfiles, isLoading: this.isLoadingDataProfiles, onChange: (value) => {
|
|
16150
|
+
this.onDataProfileChange(value);
|
|
16151
|
+
}, onSearch: (query) => {
|
|
16152
|
+
this.onSearchDataProfiles(query);
|
|
16153
|
+
}, onLoadMore: (query) => {
|
|
16154
|
+
this.loadMoreDataProfiles.emit(query || '');
|
|
16155
|
+
} });
|
|
16156
|
+
// Loop start and end options are updated when data profile is selected
|
|
16157
|
+
this.updateLoopIndexOptions();
|
|
16158
|
+
}
|
|
16159
|
+
convertDataProfileOptionsToSelectOptions(options) {
|
|
16160
|
+
return options.map(option => ({
|
|
16161
|
+
id: option.id,
|
|
16162
|
+
value: option.id,
|
|
16163
|
+
name: option.name,
|
|
16164
|
+
label: option.name
|
|
16165
|
+
}));
|
|
16166
|
+
}
|
|
16167
|
+
/**
|
|
16168
|
+
* Handle data profile selection and update loop start/end options
|
|
16169
|
+
*/
|
|
16170
|
+
onDataProfileChange(profileId) {
|
|
16171
|
+
const selectedProfile = this.dataProfileOptions.find(profile => profile.id === profileId || String(profile.id) === String(profileId));
|
|
16172
|
+
if (selectedProfile) {
|
|
16173
|
+
this.selectedDataProfile = selectedProfile;
|
|
16174
|
+
this.updateLoopIndicesFromProfile(selectedProfile);
|
|
16175
|
+
}
|
|
16176
|
+
else {
|
|
16177
|
+
this.selectedDataProfile = null;
|
|
16178
|
+
this.startArray = [];
|
|
16179
|
+
this.endArray = [];
|
|
16180
|
+
this.updateLoopIndexOptions();
|
|
16181
|
+
}
|
|
16182
|
+
}
|
|
16183
|
+
/**
|
|
16184
|
+
* Calculate loop indices based on selected data profile
|
|
16185
|
+
*/
|
|
16186
|
+
updateLoopIndicesFromProfile(profile) {
|
|
16187
|
+
var _a, _b, _c, _d;
|
|
16188
|
+
// Calculate data length from data array or use provided dataLength
|
|
16189
|
+
let dataSetLength = 1;
|
|
16190
|
+
if (profile.data && Array.isArray(profile.data)) {
|
|
16191
|
+
dataSetLength = profile.data.length;
|
|
16192
|
+
}
|
|
16193
|
+
else if (profile.dataLength && profile.dataLength > 0) {
|
|
16194
|
+
dataSetLength = profile.dataLength;
|
|
16195
|
+
}
|
|
16196
|
+
// Create start array from 1 to dataSetLength
|
|
16197
|
+
this.startArray = Array.from({ length: dataSetLength }, (_, i) => i + 1);
|
|
16198
|
+
// Initialize end array same as start array
|
|
16199
|
+
// End array will be updated when start index is selected
|
|
16200
|
+
this.endArray = [...this.startArray];
|
|
16201
|
+
// Set default values if form is empty
|
|
16202
|
+
const currentStart = (_a = this.loopForm.get('loopStart')) === null || _a === void 0 ? void 0 : _a.value;
|
|
16203
|
+
const currentEnd = (_b = this.loopForm.get('loopEnd')) === null || _b === void 0 ? void 0 : _b.value;
|
|
16204
|
+
if (!currentStart && this.startArray.length > 0) {
|
|
16205
|
+
(_c = this.loopForm.get('loopStart')) === null || _c === void 0 ? void 0 : _c.setValue(this.startArray[0]);
|
|
16206
|
+
}
|
|
16207
|
+
if (!currentEnd && this.endArray.length > 0) {
|
|
16208
|
+
(_d = this.loopForm.get('loopEnd')) === null || _d === void 0 ? void 0 : _d.setValue(this.endArray[this.endArray.length - 1]);
|
|
16209
|
+
}
|
|
16210
|
+
this.updateLoopIndexOptions();
|
|
16211
|
+
}
|
|
16212
|
+
/**
|
|
16213
|
+
* Handle loop start change and update end options
|
|
16214
|
+
*/
|
|
16215
|
+
onLoopStartChange(startIndex) {
|
|
16216
|
+
var _a, _b;
|
|
16217
|
+
if (!this.selectedDataProfile || !startIndex) {
|
|
16218
|
+
this.endArray = [...this.startArray];
|
|
16219
|
+
this.updateLoopIndexOptions();
|
|
16220
|
+
return;
|
|
16221
|
+
}
|
|
16222
|
+
const startIdx = typeof startIndex === 'string' ? parseInt(startIndex) : startIndex;
|
|
16223
|
+
if (isNaN(startIdx) || startIdx < 1) {
|
|
16224
|
+
this.endArray = [...this.startArray];
|
|
16225
|
+
}
|
|
16226
|
+
else {
|
|
16227
|
+
// End array should be from startIndex to end of data
|
|
16228
|
+
// Based on reference: endArray = startArray.splice(startIndex - 1, startArray.length)
|
|
16229
|
+
const startArrayCopy = [...this.startArray];
|
|
16230
|
+
this.endArray = startArrayCopy.slice(startIdx - 1);
|
|
16231
|
+
}
|
|
16232
|
+
// Auto-update end index if current end is invalid
|
|
16233
|
+
const currentEnd = (_a = this.loopForm.get('loopEnd')) === null || _a === void 0 ? void 0 : _a.value;
|
|
16234
|
+
const endIdx = typeof currentEnd === 'string' ? parseInt(currentEnd) : currentEnd;
|
|
16235
|
+
if (!currentEnd || isNaN(endIdx) || endIdx < startIdx) {
|
|
16236
|
+
if (this.endArray.length > 0) {
|
|
16237
|
+
(_b = this.loopForm.get('loopEnd')) === null || _b === void 0 ? void 0 : _b.setValue(this.endArray[this.endArray.length - 1]);
|
|
16238
|
+
}
|
|
16239
|
+
}
|
|
16240
|
+
this.updateLoopIndexOptions();
|
|
16241
|
+
}
|
|
16242
|
+
/**
|
|
16243
|
+
* Update loop start and end config options
|
|
16244
|
+
*/
|
|
16245
|
+
updateLoopIndexOptions() {
|
|
16246
|
+
// Convert startArray to SelectOptions
|
|
16247
|
+
const startOptions = this.startArray.map(idx => ({
|
|
16248
|
+
id: idx,
|
|
16249
|
+
value: idx,
|
|
16250
|
+
name: String(idx),
|
|
16251
|
+
label: String(idx)
|
|
16252
|
+
}));
|
|
16253
|
+
// Convert endArray to SelectOptions
|
|
16254
|
+
const endOptions = this.endArray.map(idx => ({
|
|
16255
|
+
id: idx,
|
|
16256
|
+
value: idx,
|
|
16257
|
+
name: String(idx),
|
|
16258
|
+
label: String(idx)
|
|
16259
|
+
}));
|
|
16260
|
+
this.loopStartConfig = Object.assign(Object.assign({}, this.loopStartConfig), { options: [{ id: -1, value: -1, name: 'Start', label: 'Start' }, ...startOptions], onChange: (value) => {
|
|
16261
|
+
this.onLoopStartChange(value);
|
|
16262
|
+
} });
|
|
16263
|
+
this.loopEndConfig = Object.assign(Object.assign({}, this.loopEndConfig), { options: [...endOptions, { id: -1, value: -1, name: 'End', label: 'End' }], onChange: (value) => {
|
|
16264
|
+
// Handle change if needed
|
|
16265
|
+
} });
|
|
16266
|
+
}
|
|
16267
|
+
onLoopTypeChange(type) {
|
|
16268
|
+
const loopType = type;
|
|
16269
|
+
this.selectedLoopType = loopType;
|
|
16270
|
+
this.loopTypeChange.emit(loopType);
|
|
16271
|
+
}
|
|
16272
|
+
onCancel() {
|
|
16273
|
+
this.resetForm();
|
|
16274
|
+
this.cancelled.emit();
|
|
16275
|
+
}
|
|
16276
|
+
onCreateStep() {
|
|
16277
|
+
const formValue = this.loopForm.value;
|
|
16278
|
+
if (this.selectedLoopType === 'while') {
|
|
16279
|
+
if (!this.selectedWhileTemplate) {
|
|
16280
|
+
return;
|
|
16281
|
+
}
|
|
16282
|
+
}
|
|
16283
|
+
const stepData = {
|
|
16284
|
+
selectedLoopType: this.selectedLoopType,
|
|
16285
|
+
loopType: this.selectedLoopType,
|
|
16286
|
+
selectOption: formValue.selectOption || undefined,
|
|
16287
|
+
dataProfile: formValue.dataProfile || undefined,
|
|
16288
|
+
loopStart: formValue.loopStart || undefined,
|
|
16289
|
+
loopEnd: formValue.loopEnd || undefined,
|
|
16290
|
+
runTime: formValue.runTime || undefined,
|
|
16291
|
+
whileTemplate: this.selectedWhileTemplate || undefined
|
|
16292
|
+
};
|
|
16293
|
+
console.log('stepData', stepData);
|
|
16294
|
+
this.createStep.emit(stepData);
|
|
16295
|
+
}
|
|
16296
|
+
createWhileStep(event) {
|
|
16297
|
+
console.log('createWhileStep', event);
|
|
16298
|
+
const stepData = {
|
|
16299
|
+
selectedLoopType: this.selectedLoopType,
|
|
16300
|
+
loopType: this.selectedLoopType,
|
|
16301
|
+
event: event
|
|
16302
|
+
};
|
|
16303
|
+
console.log('stepData', stepData);
|
|
16304
|
+
this.createStep.emit(stepData);
|
|
16305
|
+
}
|
|
16306
|
+
/**
|
|
16307
|
+
* Handle search event for data profiles
|
|
16308
|
+
*/
|
|
16309
|
+
onSearchDataProfiles(query) {
|
|
16310
|
+
this.searchDataProfiles.emit(query);
|
|
16311
|
+
}
|
|
16312
|
+
/**
|
|
16313
|
+
* Handle loadMore event for data profiles
|
|
16314
|
+
*/
|
|
16315
|
+
onLoadMoreDataProfiles(event) {
|
|
16316
|
+
this.loadMoreDataProfiles.emit(event.query);
|
|
16317
|
+
}
|
|
16318
|
+
/**
|
|
16319
|
+
* Update data profile config when loading state or hasMore changes
|
|
16320
|
+
*/
|
|
16321
|
+
updateDataProfileConfig() {
|
|
16322
|
+
if (this.dataProfileConfig) {
|
|
16323
|
+
this.dataProfileConfig = Object.assign(Object.assign({}, this.dataProfileConfig), { hasMore: this.hasMoreDataProfiles, isLoading: this.isLoadingDataProfiles });
|
|
16324
|
+
}
|
|
16325
|
+
}
|
|
16326
|
+
resetForm() {
|
|
16327
|
+
this.selectedLoopType = 'for';
|
|
16328
|
+
this.selectedDataProfile = null;
|
|
16329
|
+
this.startArray = [];
|
|
16330
|
+
this.endArray = [];
|
|
16331
|
+
this.loopForm.reset({
|
|
16332
|
+
selectOption: null,
|
|
16333
|
+
dataProfile: null,
|
|
16334
|
+
loopStart: null,
|
|
16335
|
+
loopEnd: null
|
|
16336
|
+
});
|
|
16337
|
+
this.updateLoopIndexOptions();
|
|
16338
|
+
}
|
|
16339
|
+
onWhileSearchChange(event) {
|
|
16340
|
+
this.whileSearchValue = event;
|
|
16341
|
+
this.filterWhileTemplates(event);
|
|
16342
|
+
}
|
|
16343
|
+
onWhileSearchSubmit(event) {
|
|
16344
|
+
this.onWhileSearchChange(event);
|
|
16345
|
+
}
|
|
16346
|
+
onWhileSearchCleared() {
|
|
16347
|
+
this.whileSearchValue = '';
|
|
16348
|
+
this.filterWhileTemplates('');
|
|
16349
|
+
}
|
|
16350
|
+
filterWhileTemplates(query) {
|
|
16351
|
+
this.whileTemplates = this.whileTemplates.filter(template => template.htmlGrammar.toLowerCase().includes(query.toLowerCase()) || template.naturalText.toLowerCase().includes(query.toLowerCase()));
|
|
16352
|
+
}
|
|
16353
|
+
selectWhileTemplate(template) {
|
|
16354
|
+
this.selectedWhileTemplate = template;
|
|
16355
|
+
}
|
|
16356
|
+
}
|
|
16357
|
+
StepBuilderLoopComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderLoopComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
16358
|
+
StepBuilderLoopComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderLoopComponent, selector: "cqa-step-builder-loop", inputs: { loopType: "loopType", selectOptions: "selectOptions", dataProfileOptions: "dataProfileOptions", hasMoreDataProfiles: "hasMoreDataProfiles", isLoadingDataProfiles: "isLoadingDataProfiles", setWhileTemplateVariables: "setWhileTemplateVariables", whileTemplates: "whileTemplates", whileSearchPlaceholder: "whileSearchPlaceholder", whileSearchValue: "whileSearchValue" }, outputs: { createStep: "createStep", cancelled: "cancelled", loopTypeChange: "loopTypeChange", loadMoreDataProfiles: "loadMoreDataProfiles", searchDataProfiles: "searchDataProfiles" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white cqa-px-4 cqa-py-2\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n Create Loop Test Step\n </h2>\n\n <!-- Loop Type Selection -->\n <div class=\"cqa-mb-4\">\n <cqa-segment-control\n [segments]=\"[\n { label: 'For', value: 'for' },\n { label: 'While', value: 'while' }\n ]\"\n [value]=\"selectedLoopType\"\n (valueChange)=\"onLoopTypeChange($event)\">\n </cqa-segment-control>\n </div>\n\n <!-- Form Fields -->\n <ng-container *ngIf=\"selectedLoopType === 'for'\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Dropdown Fields Row -->\n <div class=\"cqa-flex cqa-gap-4 cqa-flex-wrap\">\n <!-- Select Option -->\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1\" style=\"min-width: calc(25% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1.5\">\n Select Option\n </label>\n <cqa-dynamic-select\n [form]=\"loopForm\"\n [config]=\"selectOptionConfig\">\n </cqa-dynamic-select>\n </div>\n\n <ng-container *ngIf=\"loopForm.get('selectOption')?.value === 'dataProfile'\">\n <!-- Data Profile -->\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1\" style=\"min-width: calc(25% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1.5\">\n Data Profile\n </label>\n <cqa-dynamic-select\n [form]=\"loopForm\"\n [config]=\"dataProfileConfig\"\n (searchChange)=\"onSearchDataProfiles($event.query)\"\n (loadMore)=\"onLoadMoreDataProfiles($event)\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Loop Start -->\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1\" style=\"min-width: calc(25% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1.5\">\n Loop Start\n </label>\n <cqa-dynamic-select\n [form]=\"loopForm\"\n [config]=\"loopStartConfig\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Loop End -->\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1\" style=\"min-width: calc(25% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1.5\">\n Loop End\n </label>\n <cqa-dynamic-select\n [form]=\"loopForm\"\n [config]=\"loopEndConfig\">\n </cqa-dynamic-select>\n </div>\n </ng-container>\n <ng-container *ngIf=\"loopForm.get('selectOption')?.value === 'runTime'\">\n <!-- Run Time Input Field -->\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1\" style=\"min-width: calc(25% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1.5\">\n Run Time\n </label>\n <cqa-custom-input\n [placeholder]=\"'Enter Run Time'\"\n [value]=\"loopForm.get('runTime')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"loopForm.get('runTime')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-container>\n <ng-container *ngIf=\"selectedLoopType === 'while'\">\n <cqa-step-builder-action [showHeader]=\"false\" [templates]=\"whileTemplates\" [setTemplateVariables]=\"setWhileTemplateVariables\" [searchPlaceholder]=\"whileSearchPlaceholder\" (templateChanged)=\"selectWhileTemplate($event)\" (createStep)=\"createWhileStep($event)\"></cqa-step-builder-action>\n </ng-container>\n\n <!-- Action Buttons -->\n <div *ngIf=\"selectedLoopType === 'for'\" class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-6 cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button\n class=\"cqa-w-1/2\"\n variant=\"outlined\"\n text=\"Cancel\"\n [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button\n class=\"cqa-w-1/2\"\n variant=\"filled\"\n text=\"Create Step\"\n [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", components: [{ type: SegmentControlComponent, selector: "cqa-segment-control", inputs: ["segments", "value", "disabled"], outputs: ["valueChange"] }, { type: DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore"] }, { type: CustomInputComponent, selector: "cqa-custom-input", inputs: ["label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: StepBuilderActionComponent, selector: "cqa-step-builder-action", inputs: ["showHeader", "templates", "searchPlaceholder", "setTemplateVariables", "preventSelectTemplate"], outputs: ["templateChanged", "createStep", "cancelled"] }, { type: ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
16359
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderLoopComponent, decorators: [{
|
|
16360
|
+
type: Component,
|
|
16361
|
+
args: [{ selector: 'cqa-step-builder-loop', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white cqa-px-4 cqa-py-2\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n Create Loop Test Step\n </h2>\n\n <!-- Loop Type Selection -->\n <div class=\"cqa-mb-4\">\n <cqa-segment-control\n [segments]=\"[\n { label: 'For', value: 'for' },\n { label: 'While', value: 'while' }\n ]\"\n [value]=\"selectedLoopType\"\n (valueChange)=\"onLoopTypeChange($event)\">\n </cqa-segment-control>\n </div>\n\n <!-- Form Fields -->\n <ng-container *ngIf=\"selectedLoopType === 'for'\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Dropdown Fields Row -->\n <div class=\"cqa-flex cqa-gap-4 cqa-flex-wrap\">\n <!-- Select Option -->\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1\" style=\"min-width: calc(25% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1.5\">\n Select Option\n </label>\n <cqa-dynamic-select\n [form]=\"loopForm\"\n [config]=\"selectOptionConfig\">\n </cqa-dynamic-select>\n </div>\n\n <ng-container *ngIf=\"loopForm.get('selectOption')?.value === 'dataProfile'\">\n <!-- Data Profile -->\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1\" style=\"min-width: calc(25% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1.5\">\n Data Profile\n </label>\n <cqa-dynamic-select\n [form]=\"loopForm\"\n [config]=\"dataProfileConfig\"\n (searchChange)=\"onSearchDataProfiles($event.query)\"\n (loadMore)=\"onLoadMoreDataProfiles($event)\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Loop Start -->\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1\" style=\"min-width: calc(25% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1.5\">\n Loop Start\n </label>\n <cqa-dynamic-select\n [form]=\"loopForm\"\n [config]=\"loopStartConfig\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Loop End -->\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1\" style=\"min-width: calc(25% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1.5\">\n Loop End\n </label>\n <cqa-dynamic-select\n [form]=\"loopForm\"\n [config]=\"loopEndConfig\">\n </cqa-dynamic-select>\n </div>\n </ng-container>\n <ng-container *ngIf=\"loopForm.get('selectOption')?.value === 'runTime'\">\n <!-- Run Time Input Field -->\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1\" style=\"min-width: calc(25% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1.5\">\n Run Time\n </label>\n <cqa-custom-input\n [placeholder]=\"'Enter Run Time'\"\n [value]=\"loopForm.get('runTime')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"loopForm.get('runTime')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-container>\n <ng-container *ngIf=\"selectedLoopType === 'while'\">\n <cqa-step-builder-action [showHeader]=\"false\" [templates]=\"whileTemplates\" [setTemplateVariables]=\"setWhileTemplateVariables\" [searchPlaceholder]=\"whileSearchPlaceholder\" (templateChanged)=\"selectWhileTemplate($event)\" (createStep)=\"createWhileStep($event)\"></cqa-step-builder-action>\n </ng-container>\n\n <!-- Action Buttons -->\n <div *ngIf=\"selectedLoopType === 'for'\" class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-6 cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button\n class=\"cqa-w-1/2\"\n variant=\"outlined\"\n text=\"Cancel\"\n [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button\n class=\"cqa-w-1/2\"\n variant=\"filled\"\n text=\"Create Step\"\n [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", styles: [] }]
|
|
16362
|
+
}], ctorParameters: function () { return []; }, propDecorators: { loopType: [{
|
|
16363
|
+
type: Input
|
|
16364
|
+
}], selectOptions: [{
|
|
16365
|
+
type: Input
|
|
16366
|
+
}], dataProfileOptions: [{
|
|
16367
|
+
type: Input
|
|
16368
|
+
}], hasMoreDataProfiles: [{
|
|
16369
|
+
type: Input
|
|
16370
|
+
}], isLoadingDataProfiles: [{
|
|
16371
|
+
type: Input
|
|
16372
|
+
}], setWhileTemplateVariables: [{
|
|
16373
|
+
type: Input
|
|
16374
|
+
}], createStep: [{
|
|
16375
|
+
type: Output
|
|
16376
|
+
}], cancelled: [{
|
|
16377
|
+
type: Output
|
|
16378
|
+
}], loopTypeChange: [{
|
|
16379
|
+
type: Output
|
|
16380
|
+
}], loadMoreDataProfiles: [{
|
|
16381
|
+
type: Output
|
|
16382
|
+
}], searchDataProfiles: [{
|
|
16383
|
+
type: Output
|
|
16384
|
+
}], whileTemplates: [{
|
|
16385
|
+
type: Input
|
|
16386
|
+
}], whileSearchPlaceholder: [{
|
|
16387
|
+
type: Input
|
|
16388
|
+
}], whileSearchValue: [{
|
|
16389
|
+
type: Input
|
|
16390
|
+
}] } });
|
|
16391
|
+
|
|
16023
16392
|
class UiKitModule {
|
|
16024
16393
|
constructor(iconRegistry) {
|
|
16025
16394
|
iconRegistry.registerFontClassAlias('material-symbols-outlined', 'material-symbols-outlined');
|
|
@@ -16109,7 +16478,8 @@ UiKitModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
|
|
|
16109
16478
|
TestCaseScreenshotStepComponent,
|
|
16110
16479
|
TestCaseCustomCodeStepComponent,
|
|
16111
16480
|
LiveConversationComponent,
|
|
16112
|
-
StepBuilderActionComponent
|
|
16481
|
+
StepBuilderActionComponent,
|
|
16482
|
+
StepBuilderLoopComponent], imports: [CommonModule,
|
|
16113
16483
|
FormsModule,
|
|
16114
16484
|
ReactiveFormsModule,
|
|
16115
16485
|
MatIconModule,
|
|
@@ -16120,6 +16490,7 @@ UiKitModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
|
|
|
16120
16490
|
MatOptionModule,
|
|
16121
16491
|
MatCheckboxModule,
|
|
16122
16492
|
MatRadioModule,
|
|
16493
|
+
MatSlideToggleModule,
|
|
16123
16494
|
MatDatepickerModule,
|
|
16124
16495
|
MatNativeDateModule,
|
|
16125
16496
|
MatProgressSpinnerModule,
|
|
@@ -16210,7 +16581,8 @@ UiKitModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
|
|
|
16210
16581
|
TestCaseScreenshotStepComponent,
|
|
16211
16582
|
TestCaseCustomCodeStepComponent,
|
|
16212
16583
|
LiveConversationComponent,
|
|
16213
|
-
StepBuilderActionComponent
|
|
16584
|
+
StepBuilderActionComponent,
|
|
16585
|
+
StepBuilderLoopComponent] });
|
|
16214
16586
|
UiKitModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: UiKitModule, providers: [
|
|
16215
16587
|
{ provide: OverlayContainer, useClass: TailwindOverlayContainer },
|
|
16216
16588
|
{
|
|
@@ -16258,6 +16630,7 @@ UiKitModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "1
|
|
|
16258
16630
|
MatOptionModule,
|
|
16259
16631
|
MatCheckboxModule,
|
|
16260
16632
|
MatRadioModule,
|
|
16633
|
+
MatSlideToggleModule,
|
|
16261
16634
|
MatDatepickerModule,
|
|
16262
16635
|
MatNativeDateModule,
|
|
16263
16636
|
MatProgressSpinnerModule,
|
|
@@ -16355,7 +16728,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
16355
16728
|
TestCaseScreenshotStepComponent,
|
|
16356
16729
|
TestCaseCustomCodeStepComponent,
|
|
16357
16730
|
LiveConversationComponent,
|
|
16358
|
-
StepBuilderActionComponent
|
|
16731
|
+
StepBuilderActionComponent,
|
|
16732
|
+
StepBuilderLoopComponent,
|
|
16359
16733
|
],
|
|
16360
16734
|
imports: [
|
|
16361
16735
|
CommonModule,
|
|
@@ -16369,6 +16743,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
16369
16743
|
MatOptionModule,
|
|
16370
16744
|
MatCheckboxModule,
|
|
16371
16745
|
MatRadioModule,
|
|
16746
|
+
MatSlideToggleModule,
|
|
16372
16747
|
MatDatepickerModule,
|
|
16373
16748
|
MatNativeDateModule,
|
|
16374
16749
|
MatProgressSpinnerModule,
|
|
@@ -16462,7 +16837,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
16462
16837
|
TestCaseScreenshotStepComponent,
|
|
16463
16838
|
TestCaseCustomCodeStepComponent,
|
|
16464
16839
|
LiveConversationComponent,
|
|
16465
|
-
StepBuilderActionComponent
|
|
16840
|
+
StepBuilderActionComponent,
|
|
16841
|
+
StepBuilderLoopComponent,
|
|
16466
16842
|
],
|
|
16467
16843
|
providers: [
|
|
16468
16844
|
{ provide: OverlayContainer, useClass: TailwindOverlayContainer },
|
|
@@ -16639,5 +17015,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
16639
17015
|
* Generated bundle index. Do not edit.
|
|
16640
17016
|
*/
|
|
16641
17017
|
|
|
16642
|
-
export { AIActionStepComponent, AIAgentStepComponent, ActionMenuButtonComponent, AiDebugAlertComponent, AiReasoningComponent, ApiStepComponent, BadgeComponent, BasicStepComponent, ButtonComponent, ChartCardComponent, ColumnVisibilityComponent, CompareRunsComponent, ConditionStepComponent, ConfigurationCardComponent, ConsoleAlertComponent, CoverageModuleCardComponent, CustomInputComponent, CustomTextareaComponent, DEFAULT_METADATA_COLOR, DIALOG_DATA, DIALOG_REF, DashboardHeaderComponent, DaterangepickerComponent, DaterangepickerDirective, DbQueryExecutionItemComponent, DbVerificationStepComponent, DialogComponent, DialogRef, DialogService, DocumentVerificationStepComponent, DropdownButtonComponent, DynamicCellContainerDirective, DynamicCellTemplateDirective, DynamicFilterComponent, DynamicHeaderTemplateDirective, DynamicSelectFieldComponent, DynamicTableComponent, EMPTY_STATE_IMAGES, EMPTY_STATE_PRESETS, EmptyStateComponent, ErrorModalComponent, ExecutionResultModalComponent, FailedStepCardComponent, FailedStepComponent, FailedTestCasesCardComponent, FileDownloadStepComponent, FullTableLoaderComponent, HeatErrorMapCellComponent, InsightCardComponent, IterationsLoopComponent, LiveConversationComponent, LiveExecutionStepComponent, LoopStepComponent, MainStepCollapseComponent, MetricsCardComponent, NetworkRequestComponent, OtherButtonComponent, PRIORITY_COLORS, PaginationComponent, ProgressIndicatorComponent, ProgressTextCardComponent, RESULT_COLORS, RunHistoryCardComponent, STATUS_COLORS, SearchBarComponent, SegmentControlComponent, SelectedFiltersComponent, SelfHealAnalysisComponent, SimulatorComponent, StepBuilderActionComponent, StepGroupComponent, StepProgressCardComponent, StepRendererComponent, StepStatusCardComponent, StepTypes, TableActionToolbarComponent, TableDataLoaderComponent, TableTemplateComponent, TailwindOverlayContainer, TestCaseAiAgentStepComponent, TestCaseApiStepComponent, TestCaseConditionStepComponent, TestCaseCustomCodeStepComponent, TestCaseDatabaseStepComponent, TestCaseDetailsRendererComponent, TestCaseLoopStepComponent, TestCaseNormalStepComponent, TestCaseScreenshotStepComponent, TestCaseStepGroupComponent, TestCaseUploadStepComponent, TestDistributionCardComponent, UiKitModule, UpdatedFailedStepComponent, ViewMoreFailedStepButtonComponent, VisualComparisonComponent, VisualDifferenceModalComponent, getEmptyStatePreset, getMetadataColor, getMetadataValueStyle, isAiAgentStepConfig, isApiStepConfig, isConditionStepConfig, isCustomCodeStepConfig, isDatabaseStepConfig, isLoopStepConfig, isNormalStepConfig, isScreenshotStepConfig, isStepGroupConfig, isUploadStepConfig };
|
|
17018
|
+
export { AIActionStepComponent, AIAgentStepComponent, ActionMenuButtonComponent, AiDebugAlertComponent, AiReasoningComponent, ApiStepComponent, BadgeComponent, BasicStepComponent, ButtonComponent, ChartCardComponent, ColumnVisibilityComponent, CompareRunsComponent, ConditionStepComponent, ConfigurationCardComponent, ConsoleAlertComponent, CoverageModuleCardComponent, CustomInputComponent, CustomTextareaComponent, DEFAULT_METADATA_COLOR, DIALOG_DATA, DIALOG_REF, DashboardHeaderComponent, DaterangepickerComponent, DaterangepickerDirective, DbQueryExecutionItemComponent, DbVerificationStepComponent, DialogComponent, DialogRef, DialogService, DocumentVerificationStepComponent, DropdownButtonComponent, DynamicCellContainerDirective, DynamicCellTemplateDirective, DynamicFilterComponent, DynamicHeaderTemplateDirective, DynamicSelectFieldComponent, DynamicTableComponent, EMPTY_STATE_IMAGES, EMPTY_STATE_PRESETS, EmptyStateComponent, ErrorModalComponent, ExecutionResultModalComponent, FailedStepCardComponent, FailedStepComponent, FailedTestCasesCardComponent, FileDownloadStepComponent, FullTableLoaderComponent, HeatErrorMapCellComponent, InsightCardComponent, IterationsLoopComponent, LiveConversationComponent, LiveExecutionStepComponent, LoopStepComponent, MainStepCollapseComponent, MetricsCardComponent, NetworkRequestComponent, OtherButtonComponent, PRIORITY_COLORS, PaginationComponent, ProgressIndicatorComponent, ProgressTextCardComponent, RESULT_COLORS, RunHistoryCardComponent, STATUS_COLORS, SearchBarComponent, SegmentControlComponent, SelectedFiltersComponent, SelfHealAnalysisComponent, SimulatorComponent, StepBuilderActionComponent, StepBuilderLoopComponent, StepGroupComponent, StepProgressCardComponent, StepRendererComponent, StepStatusCardComponent, StepTypes, TableActionToolbarComponent, TableDataLoaderComponent, TableTemplateComponent, TailwindOverlayContainer, TestCaseAiAgentStepComponent, TestCaseApiStepComponent, TestCaseConditionStepComponent, TestCaseCustomCodeStepComponent, TestCaseDatabaseStepComponent, TestCaseDetailsRendererComponent, TestCaseLoopStepComponent, TestCaseNormalStepComponent, TestCaseScreenshotStepComponent, TestCaseStepGroupComponent, TestCaseUploadStepComponent, TestDistributionCardComponent, UiKitModule, UpdatedFailedStepComponent, ViewMoreFailedStepButtonComponent, VisualComparisonComponent, VisualDifferenceModalComponent, getEmptyStatePreset, getMetadataColor, getMetadataValueStyle, isAiAgentStepConfig, isApiStepConfig, isConditionStepConfig, isCustomCodeStepConfig, isDatabaseStepConfig, isLoopStepConfig, isNormalStepConfig, isScreenshotStepConfig, isStepGroupConfig, isUploadStepConfig };
|
|
16643
17019
|
//# sourceMappingURL=cqa-lib-cqa-ui.mjs.map
|