@cqa-lib/cqa-ui 1.1.272 → 1.1.274

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.
Files changed (25) hide show
  1. package/esm2020/lib/execution-screen/ai-agent-step/ai-agent-step.component.mjs +3 -1
  2. package/esm2020/lib/execution-screen/loop-step/loop-step.component.mjs +17 -31
  3. package/esm2020/lib/execution-screen/session-changes-modal/session-changes-modal.component.mjs +7 -4
  4. package/esm2020/lib/execution-screen/step-group/step-group.component.mjs +2 -2
  5. package/esm2020/lib/execution-screen/step-renderer/step-renderer.component.mjs +4 -74
  6. package/esm2020/lib/step-builder/step-builder-document/step-builder-document.component.mjs +11 -4
  7. package/esm2020/lib/table-action-toolbar/table-action-toolbar.component.mjs +11 -1
  8. package/esm2020/lib/test-case-details/condition-step/condition-step.component.mjs +76 -15
  9. package/esm2020/lib/test-case-details/loop-step/loop-step.component.mjs +43 -4
  10. package/esm2020/lib/test-case-details/step-group/step-group.component.mjs +3 -3
  11. package/esm2020/lib/test-case-details/test-case-step.models.mjs +1 -1
  12. package/fesm2015/cqa-lib-cqa-ui.mjs +176 -137
  13. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  14. package/fesm2020/cqa-lib-cqa-ui.mjs +167 -129
  15. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  16. package/lib/execution-screen/loop-step/loop-step.component.d.ts +1 -5
  17. package/lib/execution-screen/session-changes-modal/session-changes-modal.component.d.ts +3 -2
  18. package/lib/execution-screen/step-renderer/step-renderer.component.d.ts +0 -4
  19. package/lib/step-builder/step-builder-document/step-builder-document.component.d.ts +5 -1
  20. package/lib/table-action-toolbar/table-action-toolbar.component.d.ts +3 -0
  21. package/lib/test-case-details/condition-step/condition-step.component.d.ts +28 -2
  22. package/lib/test-case-details/loop-step/loop-step.component.d.ts +5 -0
  23. package/lib/test-case-details/test-case-step.models.d.ts +2 -0
  24. package/package.json +1 -1
  25. package/styles.css +1 -1
@@ -113,8 +113,6 @@ export declare class LoopStepComponent extends BaseStepComponent implements OnIn
113
113
  private userSelectedIterationId;
114
114
  private previousStatus?;
115
115
  private userManuallyClosed;
116
- /** Tracks the array length seen last cycle so in-place pushes are detected without a reference change. */
117
- private lastNestedStepsLength;
118
116
  loadingSteps: Set<string>;
119
117
  processedSubSteps: any[];
120
118
  private lastProcessedIndex;
@@ -124,7 +122,6 @@ export declare class LoopStepComponent extends BaseStepComponent implements OnIn
124
122
  processedSubStepsForRunResult: any[];
125
123
  ngOnInit(): void;
126
124
  ngOnChanges(changes: SimpleChanges): void;
127
- ngDoCheck(): void;
128
125
  private autoExpand;
129
126
  get hasSubSteps(): boolean;
130
127
  toggle(): void;
@@ -149,8 +146,6 @@ export declare class LoopStepComponent extends BaseStepComponent implements OnIn
149
146
  onAddStepOptionSelect(option: AddStepMenuOption, event: Event): void;
150
147
  onStepMoreOptionSelect(option: StepMoreMenuOption, event: Event): void;
151
148
  toggleHeader(event?: Event): void;
152
- /** trackBy for the nested-steps *ngFor — keeps existing views alive when a step gets a new object reference. */
153
- trackNestedStep(_index: number, step: any): any;
154
149
  isNestedStepGroupWithChildren(step: ExecutionStepConfig): boolean;
155
150
  getGroupName(step: ExecutionStepConfig): string;
156
151
  getSteps(step: ExecutionStepConfig): ExecutionStepConfig[];
@@ -182,6 +177,7 @@ export declare class LoopStepComponent extends BaseStepComponent implements OnIn
182
177
  getLoopShowViewAllIterations(step: ExecutionStepConfig): boolean | undefined;
183
178
  isStepLoading(): boolean;
184
179
  onJumpToTimestamp(event: Event): void;
180
+ ngDoCheck(): void;
185
181
  ngOnDestroy(): void;
186
182
  private processLiveSubSteps;
187
183
  private resetLiveProcessing;
@@ -1,6 +1,6 @@
1
1
  import { EventEmitter } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- export declare type SessionChangeType = 'added' | 'edited';
3
+ export declare type SessionChangeType = 'added' | 'edited' | 'deleted';
4
4
  export interface SessionChangeStep {
5
5
  id: string;
6
6
  description: string;
@@ -12,6 +12,7 @@ export declare class SessionChangesModalComponent {
12
12
  title: string;
13
13
  addedSteps: SessionChangeStep[];
14
14
  editedSteps: SessionChangeStep[];
15
+ deletedSteps: SessionChangeStep[];
15
16
  saveButtonLabel: string;
16
17
  saveButtonDisabled: boolean;
17
18
  commitMessageTemplate: string;
@@ -30,5 +31,5 @@ export declare class SessionChangesModalComponent {
30
31
  onEscape(): void;
31
32
  trackByStepId(_index: number, step: SessionChangeStep): string;
32
33
  static ɵfac: i0.ɵɵFactoryDeclaration<SessionChangesModalComponent, never>;
33
- static ɵcmp: i0.ɵɵComponentDeclaration<SessionChangesModalComponent, "cqa-session-changes-modal", never, { "isOpen": "isOpen"; "title": "title"; "addedSteps": "addedSteps"; "editedSteps": "editedSteps"; "saveButtonLabel": "saveButtonLabel"; "saveButtonDisabled": "saveButtonDisabled"; "commitMessageTemplate": "commitMessageTemplate"; }, { "closeModal": "closeModal"; "saveToTestCase": "saveToTestCase"; "removeStep": "removeStep"; }, never, never>;
34
+ static ɵcmp: i0.ɵɵComponentDeclaration<SessionChangesModalComponent, "cqa-session-changes-modal", never, { "isOpen": "isOpen"; "title": "title"; "addedSteps": "addedSteps"; "editedSteps": "editedSteps"; "deletedSteps": "deletedSteps"; "saveButtonLabel": "saveButtonLabel"; "saveButtonDisabled": "saveButtonDisabled"; "commitMessageTemplate": "commitMessageTemplate"; }, { "closeModal": "closeModal"; "saveToTestCase": "saveToTestCase"; "removeStep": "removeStep"; }, never, never>;
34
35
  }
@@ -104,10 +104,6 @@ export declare class StepRendererComponent implements OnChanges, AfterViewInit,
104
104
  private lastStepId;
105
105
  private lastStepType;
106
106
  private previousStepKey;
107
- /** Tracks the last status seen during live execution so in-place mutations are detected in ngDoCheck. */
108
- private lastTrackedStatus;
109
- /** Tracks editable property values in debug mode so in-place mutations after dialog saves are propagated. */
110
- private lastTrackedEditProps;
111
107
  constructor(componentMap: Map<string, Type<any>>, cdr: ChangeDetectorRef);
112
108
  ngOnChanges(changes: SimpleChanges): void;
113
109
  ngAfterViewInit(): void;
@@ -16,6 +16,8 @@ export interface DocumentFormData {
16
16
  seprator?: string;
17
17
  delimeter?: string;
18
18
  fileFormatHeader?: string;
19
+ /** Description for the document generation step */
20
+ description?: string;
19
21
  templateSource: TemplateSourceType;
20
22
  templateId?: string;
21
23
  /** Uploaded template file when templateSource is 'upload' */
@@ -69,6 +71,8 @@ export declare class StepBuilderDocumentComponent implements OnInit, OnChanges {
69
71
  initialDelimeter?: string;
70
72
  /** Initial file format header for edit mode */
71
73
  initialFileFormatHeader?: string;
74
+ /** Initial description for edit mode */
75
+ initialDescription?: string;
72
76
  /** Whether in edit mode */
73
77
  editMode?: boolean;
74
78
  /** Whether the help tooltip is visible */
@@ -126,5 +130,5 @@ export declare class StepBuilderDocumentComponent implements OnInit, OnChanges {
126
130
  onCreateStep(): void;
127
131
  onMapperHelpClick(event: Event): void;
128
132
  static ɵfac: i0.ɵɵFactoryDeclaration<StepBuilderDocumentComponent, never>;
129
- static ɵcmp: i0.ɵɵComponentDeclaration<StepBuilderDocumentComponent, "cqa-step-builder-document", never, { "documentTypeOptions": "documentTypeOptions"; "templateOptions": "templateOptions"; "valueTypeOptions": "valueTypeOptions"; "delimeterTypeOptions": "delimeterTypeOptions"; "setAdvancedSettingsVariables": "setAdvancedSettingsVariables"; "template": "template"; "testStep": "testStep"; "mapperHelpUrl": "mapperHelpUrl"; "mapperHelpTooltipText": "mapperHelpTooltipText"; "initialDocumentType": "initialDocumentType"; "initialOutputVariable": "initialOutputVariable"; "initialTemplateSource": "initialTemplateSource"; "initialTemplateId": "initialTemplateId"; "initialTemplateName": "initialTemplateName"; "initialTemplateDescription": "initialTemplateDescription"; "initialMappings": "initialMappings"; "initialFileName": "initialFileName"; "initialSeprator": "initialSeprator"; "initialDelimeter": "initialDelimeter"; "initialFileFormatHeader": "initialFileFormatHeader"; "editMode": "editMode"; }, { "createStep": "createStep"; "cancelled": "cancelled"; "createTemplate": "createTemplate"; }, never, never>;
133
+ static ɵcmp: i0.ɵɵComponentDeclaration<StepBuilderDocumentComponent, "cqa-step-builder-document", never, { "documentTypeOptions": "documentTypeOptions"; "templateOptions": "templateOptions"; "valueTypeOptions": "valueTypeOptions"; "delimeterTypeOptions": "delimeterTypeOptions"; "setAdvancedSettingsVariables": "setAdvancedSettingsVariables"; "template": "template"; "testStep": "testStep"; "mapperHelpUrl": "mapperHelpUrl"; "mapperHelpTooltipText": "mapperHelpTooltipText"; "initialDocumentType": "initialDocumentType"; "initialOutputVariable": "initialOutputVariable"; "initialTemplateSource": "initialTemplateSource"; "initialTemplateId": "initialTemplateId"; "initialTemplateName": "initialTemplateName"; "initialTemplateDescription": "initialTemplateDescription"; "initialMappings": "initialMappings"; "initialFileName": "initialFileName"; "initialSeprator": "initialSeprator"; "initialDelimeter": "initialDelimeter"; "initialFileFormatHeader": "initialFileFormatHeader"; "initialDescription": "initialDescription"; "editMode": "editMode"; }, { "createStep": "createStep"; "cancelled": "cancelled"; "createTemplate": "createTemplate"; }, never, never>;
130
134
  }
@@ -35,6 +35,9 @@ export declare class TableActionToolbarComponent {
35
35
  }>;
36
36
  selectAllChange: EventEmitter<boolean>;
37
37
  dismiss: EventEmitter<void>;
38
+ /** Cooldown ms to prevent double-click from firing the same action twice */
39
+ private lastActionEmit;
40
+ private static readonly ACTION_COOLDOWN_MS;
38
41
  get hasSelection(): boolean;
39
42
  get isSingleSelection(): boolean;
40
43
  get selectionLabel(): string;
@@ -36,8 +36,12 @@ export declare class TestCaseConditionStepComponent implements OnInit, OnChanges
36
36
  addStepBetweenBelow: boolean;
37
37
  /** @deprecated Use addStepBetweenAbove and addStepBetweenBelow instead. If set, applies to both buttons. */
38
38
  addStepBetween: boolean;
39
- /** When true, header shows inline edit form (fields, operator select, Cancel/Apply) */
40
- isEditing: boolean;
39
+ /** When non-null, edit mode is open: 'stepRow' = edit UI in step row only, 'branchRow' = edit UI in branch row only */
40
+ editContext: 'stepRow' | 'branchRow' | null;
41
+ /** Which branch index is being edited when editContext === 'branchRow' (0 = IF TRUE, 1+ = ELSE IF) */
42
+ editingBranchIndex: number;
43
+ /** True when editContext is set (either step row or branch row edit). */
44
+ get isEditing(): boolean;
41
45
  /** Array of ELSE IF branches in edit mode */
42
46
  elseIfBranches: Array<{
43
47
  id: string;
@@ -159,6 +163,13 @@ export declare class TestCaseConditionStepComponent implements OnInit, OnChanges
159
163
  private buildConditionFromForm;
160
164
  onEditFormFieldChange(controlName: string, value: string): void;
161
165
  getStepsSummary(): string;
166
+ /** Branch type badges for step row: IF, ELSE IF (with count if multiple), ELSE */
167
+ getBranchTypeBadges(): {
168
+ label: string;
169
+ count?: number;
170
+ type: 'if' | 'else-if' | 'else';
171
+ badgeClass: string;
172
+ }[];
162
173
  /** Event key-value pairs for display, excluding customEvent */
163
174
  getEventDetailsForDisplay(): {
164
175
  key: string;
@@ -193,11 +204,26 @@ export declare class TestCaseConditionStepComponent implements OnInit, OnChanges
193
204
  isConditionStep(step: TestCaseStepConfig): step is ConditionStepConfig;
194
205
  isStepGroup(step: TestCaseStepConfig): step is StepGroupConfig;
195
206
  getBranchLabel(branch: ConditionBranch): string;
207
+ /** Condition text for branch header display: IF uses main condition, ELSE IF/ELSE use branch.action */
208
+ getBranchConditionDisplay(branch: ConditionBranch): string;
209
+ /** Start marker label for each branch: START IF, START ELSE IF, or START ELSE */
210
+ getStartBranchLabel(branch: ConditionBranch): string;
211
+ /** End marker label for each branch: END IF, END ELSE IF, or END ELSE */
212
+ getEndBranchLabel(branch: ConditionBranch): string;
196
213
  /** Branch display number: condition step number + branch index (e.g. step 3 → branches 3, 4, 5 to match nested 3.1, 4.1, 5.1). */
197
214
  getBranchDisplayNumber(branchIndex: number): number;
198
215
  getBranchColorClass(branch: ConditionBranch): string;
199
216
  getBranchTextColor(branch: ConditionBranch): string;
217
+ /** True when condition already has an ELSE branch (disables Add ELSE IF / Add ELSE). */
218
+ get hasElseBranch(): boolean;
200
219
  onOpenExternal(): void;
220
+ /** Shared init for edit mode; then call onEditFromStepRow or onEditFromBranchRow to set context. */
221
+ private initEditForm;
222
+ /** Edit from step row: edit UI appears in the step row only (first branch stays read-only). */
223
+ onEditFromStepRow(): void;
224
+ /** Edit from branch row: edit UI appears in that branch row (IF TRUE or ELSE IF). */
225
+ onEditFromBranchRow(branchIndex?: number): void;
226
+ /** @deprecated Use onEditFromStepRow or onEditFromBranchRow. Kept for compatibility. */
201
227
  onEdit(): void;
202
228
  onEditCancel(): void;
203
229
  /**
@@ -176,6 +176,7 @@ export declare class TestCaseLoopStepComponent implements OnInit, OnChanges {
176
176
  getLoopTypeLabel(): string;
177
177
  isWhileLoop(): boolean;
178
178
  isForLoop(): boolean;
179
+ getStartLabel(): string;
179
180
  getEndLabel(): string;
180
181
  /** Resolve display start index: prefer forLoopStartIndex from step (or dataMapJson/dataMapBean), else startStep, else from nested steps */
181
182
  private getDisplayStartIndex;
@@ -197,6 +198,10 @@ export declare class TestCaseLoopStepComponent implements OnInit, OnChanges {
197
198
  getStartStepLabel(): string;
198
199
  getEndStepLabel(): string;
199
200
  getTestDataProfileLabel(): string;
201
+ /** Combined display for for loop with HTML badges - supports test_data badges like condition step */
202
+ getForLoopDisplay(): string;
203
+ private escapeForLoopHtml;
204
+ /** Full display for while loop: "While element ".selector" exists (max N iterations)" - supports HTML badges via innerHTML */
200
205
  getConditionDisplay(): string;
201
206
  onToggleExpanded(): void;
202
207
  onTestDataProfileChange(value: string): void;
@@ -140,6 +140,8 @@ export interface LoopStepConfig extends BaseStepConfig {
140
140
  forLoopStartIndex?: number;
141
141
  forLoopEndIndex?: number;
142
142
  forLoopTestDataId?: number;
143
+ /** FOR loop: optional HTML string for display (e.g. with test_data badges). When set, used instead of building from values. */
144
+ forLoopDisplayHtml?: string;
143
145
  nestedSteps: TestCaseStepConfig[];
144
146
  childId?: string;
145
147
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cqa-lib/cqa-ui",
3
- "version": "1.1.272",
3
+ "version": "1.1.274",
4
4
  "description": "UI Kit library for Angular 13.4",
5
5
  "keywords": [
6
6
  "angular",