@cqa-lib/cqa-ui 1.1.180 → 1.1.182

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 (63) hide show
  1. package/esm2020/lib/add-prerequisite-cases-section/add-prerequisite-cases-section.component.mjs +176 -0
  2. package/esm2020/lib/custom-textarea/custom-textarea.component.mjs +6 -3
  3. package/esm2020/lib/custom-toggle/custom-toggle.component.mjs +35 -0
  4. package/esm2020/lib/execution-screen/execution-step.models.mjs +1 -1
  5. package/esm2020/lib/execution-screen/main-step-collapse/main-step-collapse.component.mjs +36 -4
  6. package/esm2020/lib/file-upload/file-upload.component.mjs +87 -0
  7. package/esm2020/lib/item-list/item-list.component.mjs +59 -0
  8. package/esm2020/lib/item-list/item-list.model.mjs +2 -0
  9. package/esm2020/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.mjs +136 -0
  10. package/esm2020/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.mjs +65 -0
  11. package/esm2020/lib/step-builder/step-builder-database/step-builder-database.component.mjs +1 -1
  12. package/esm2020/lib/step-builder/step-builder-document/step-builder-document.component.mjs +241 -0
  13. package/esm2020/lib/step-builder/step-builder-document-generation-template-step/step-builder-document-generation-template-step.component.mjs +176 -0
  14. package/esm2020/lib/step-builder/step-builder-record-step/step-builder-record-step.component.mjs +31 -0
  15. package/esm2020/lib/test-case-details/custom-edit-step/custom-edit-step.component.mjs +3 -3
  16. package/esm2020/lib/test-case-details/element-list/element-list.component.mjs +50 -0
  17. package/esm2020/lib/test-case-details/element-popup/element-popup-data.mjs +5 -0
  18. package/esm2020/lib/test-case-details/element-popup/element-popup-ref.mjs +32 -0
  19. package/esm2020/lib/test-case-details/element-popup/element-popup.component.mjs +272 -0
  20. package/esm2020/lib/test-case-details/element-popup/element-popup.service.mjs +97 -0
  21. package/esm2020/lib/test-case-details/normal-step/normal-step.component.mjs +151 -19
  22. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal-data.mjs +5 -0
  23. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal-environment.model.mjs +10 -0
  24. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal-parameter.model.mjs +8 -0
  25. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal-ref.mjs +32 -0
  26. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal.component.mjs +301 -0
  27. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal.service.mjs +97 -0
  28. package/esm2020/lib/ui-kit.module.mjs +63 -3
  29. package/esm2020/lib/utils/tw-overlay-container.mjs +9 -4
  30. package/esm2020/public-api.mjs +20 -1
  31. package/fesm2015/cqa-lib-cqa-ui.mjs +3059 -1020
  32. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  33. package/fesm2020/cqa-lib-cqa-ui.mjs +3056 -1043
  34. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  35. package/lib/add-prerequisite-cases-section/add-prerequisite-cases-section.component.d.ts +88 -0
  36. package/lib/custom-textarea/custom-textarea.component.d.ts +2 -1
  37. package/lib/custom-toggle/custom-toggle.component.d.ts +12 -0
  38. package/lib/execution-screen/execution-step.models.d.ts +2 -0
  39. package/lib/execution-screen/main-step-collapse/main-step-collapse.component.d.ts +30 -1
  40. package/lib/file-upload/file-upload.component.d.ts +26 -0
  41. package/lib/item-list/item-list.component.d.ts +25 -0
  42. package/lib/item-list/item-list.model.d.ts +16 -0
  43. package/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.d.ts +47 -0
  44. package/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.d.ts +27 -0
  45. package/lib/step-builder/step-builder-document/step-builder-document.component.d.ts +81 -0
  46. package/lib/step-builder/step-builder-document-generation-template-step/step-builder-document-generation-template-step.component.d.ts +55 -0
  47. package/lib/step-builder/step-builder-record-step/step-builder-record-step.component.d.ts +16 -0
  48. package/lib/test-case-details/element-list/element-list.component.d.ts +26 -0
  49. package/lib/test-case-details/element-popup/element-popup-data.d.ts +16 -0
  50. package/lib/test-case-details/element-popup/element-popup-ref.d.ts +13 -0
  51. package/lib/test-case-details/element-popup/element-popup.component.d.ts +60 -0
  52. package/lib/test-case-details/element-popup/element-popup.service.d.ts +23 -0
  53. package/lib/test-case-details/normal-step/normal-step.component.d.ts +17 -2
  54. package/lib/test-case-details/test-data-modal/test-data-modal-data.d.ts +31 -0
  55. package/lib/test-case-details/test-data-modal/test-data-modal-environment.model.d.ts +12 -0
  56. package/lib/test-case-details/test-data-modal/test-data-modal-parameter.model.d.ts +11 -0
  57. package/lib/test-case-details/test-data-modal/test-data-modal-ref.d.ts +13 -0
  58. package/lib/test-case-details/test-data-modal/test-data-modal.component.d.ts +91 -0
  59. package/lib/test-case-details/test-data-modal/test-data-modal.service.d.ts +23 -0
  60. package/lib/ui-kit.module.d.ts +99 -87
  61. package/package.json +1 -1
  62. package/public-api.d.ts +19 -0
  63. package/styles.css +1 -1
@@ -0,0 +1,88 @@
1
+ import { EventEmitter, TemplateRef, ChangeDetectorRef } from '@angular/core';
2
+ import { FormGroup } from '@angular/forms';
3
+ import { DndDropEvent } from 'ngx-drag-drop';
4
+ import { DynamicSelectFieldConfig } from '../dynamic-select/dynamic-select-field.component';
5
+ import * as i0 from "@angular/core";
6
+ export interface PrerequisiteRow {
7
+ key: string;
8
+ }
9
+ /** Emitted when any prerequisite select changes - contains all current selections */
10
+ export interface PrerequisiteSelection {
11
+ key: string;
12
+ value: unknown;
13
+ }
14
+ export declare class AddPrerequisiteCasesSectionComponent {
15
+ private cdr;
16
+ /** Whether the section is expanded (showing the form) */
17
+ expanded: boolean;
18
+ /** Form group containing controls for each row (keyed by row.key) */
19
+ form: FormGroup;
20
+ /** Array of row descriptors, each with a unique key */
21
+ rows: PrerequisiteRow[];
22
+ /**
23
+ * Function to get the dynamic select config for a given row index.
24
+ * Each row can have different options. To avoid duplicates, exclude options
25
+ * already selected in other rows (keep current row's selection so it displays).
26
+ */
27
+ getSelectConfig: (index: number) => DynamicSelectFieldConfig;
28
+ /** Section label (e.g. "Prerequisite Cases") */
29
+ label: string;
30
+ /** Tooltip for the info icon */
31
+ infoTooltip: string;
32
+ /** Text for the "Add Another" button */
33
+ addAnotherText: string;
34
+ /** Text for the Update button */
35
+ updateText: string;
36
+ /** Text for the Cancel button */
37
+ cancelText: string;
38
+ /** Text for the collapsed "Add" trigger */
39
+ addTriggerText: string;
40
+ /** Validation message shown when Add Another/Update are disabled (not all rows have values) */
41
+ selectFirstValidationMessage: string;
42
+ /** Optional custom template for the select slot. Use ng-template #selectBody with let-row, let-index, let-form, let-config. */
43
+ selectBodyTpl?: TemplateRef<{
44
+ $implicit: PrerequisiteRow;
45
+ index: number;
46
+ form: FormGroup;
47
+ config: DynamicSelectFieldConfig;
48
+ }>;
49
+ expandedChange: EventEmitter<boolean>;
50
+ addRow: EventEmitter<void>;
51
+ removeRow: EventEmitter<number>;
52
+ rowsReordered: EventEmitter<PrerequisiteRow[]>;
53
+ /** Emitted when Update button is clicked */
54
+ update: EventEmitter<void>;
55
+ /** Emitted when Cancel button is clicked */
56
+ cancel: EventEmitter<void>;
57
+ /** Emitted when a single row's selection changes */
58
+ selectionChange: EventEmitter<{
59
+ key: string;
60
+ value: unknown;
61
+ index: number;
62
+ }>;
63
+ /** Emitted when any select changes - returns all current prerequisite selections in order */
64
+ prerequisitesChange: EventEmitter<PrerequisiteSelection[]>;
65
+ /** Set to true when user clicks Add Another while invalid - shows validation message */
66
+ showAddAnotherValidation: boolean;
67
+ constructor(cdr: ChangeDetectorRef);
68
+ toggleExpanded(show: boolean): void;
69
+ /** Called when user clicks "Add Prerequisite" with no rows - expands and adds first row */
70
+ onAddPrerequisiteClick(): void;
71
+ onAddRow(): void;
72
+ onRemoveRow(index: number): void;
73
+ onDndDrop(event: DndDropEvent): void;
74
+ trackByKey(_i: number, row: PrerequisiteRow): string;
75
+ onUpdate(): void;
76
+ onCancel(): void;
77
+ onSelectionChange(event: {
78
+ key: string;
79
+ value: unknown;
80
+ }, index: number): void;
81
+ /** True when every row has a non-empty value (no placeholders) */
82
+ allRowsHaveValues(): boolean;
83
+ /** Emits all current prerequisite selections (key + value) in row order */
84
+ private emitAllPrerequisites;
85
+ getConfig(index: number): DynamicSelectFieldConfig;
86
+ static ɵfac: i0.ɵɵFactoryDeclaration<AddPrerequisiteCasesSectionComponent, never>;
87
+ static ɵcmp: i0.ɵɵComponentDeclaration<AddPrerequisiteCasesSectionComponent, "cqa-add-prerequisite-cases-section", never, { "expanded": "expanded"; "form": "form"; "rows": "rows"; "getSelectConfig": "getSelectConfig"; "label": "label"; "infoTooltip": "infoTooltip"; "addAnotherText": "addAnotherText"; "updateText": "updateText"; "cancelText": "cancelText"; "addTriggerText": "addTriggerText"; "selectFirstValidationMessage": "selectFirstValidationMessage"; }, { "expandedChange": "expandedChange"; "addRow": "addRow"; "removeRow": "removeRow"; "rowsReordered": "rowsReordered"; "update": "update"; "cancel": "cancel"; "selectionChange": "selectionChange"; "prerequisitesChange": "prerequisitesChange"; }, ["selectBodyTpl"], never>;
88
+ }
@@ -18,6 +18,7 @@ export declare class CustomTextareaComponent implements OnChanges {
18
18
  resize: 'none' | 'both' | 'horizontal' | 'vertical';
19
19
  textareaInlineStyle?: string;
20
20
  labelInlineStyle?: string;
21
+ customClass: string;
21
22
  valueChange: EventEmitter<string>;
22
23
  blurred: EventEmitter<FocusEvent>;
23
24
  focused: EventEmitter<FocusEvent>;
@@ -34,6 +35,6 @@ export declare class CustomTextareaComponent implements OnChanges {
34
35
  get textareaStyles(): string;
35
36
  get labelStyles(): string;
36
37
  static ɵfac: i0.ɵɵFactoryDeclaration<CustomTextareaComponent, never>;
37
- static ɵcmp: i0.ɵɵComponentDeclaration<CustomTextareaComponent, "cqa-custom-textarea", never, { "label": "label"; "placeholder": "placeholder"; "value": "value"; "disabled": "disabled"; "errors": "errors"; "required": "required"; "ariaLabel": "ariaLabel"; "size": "size"; "fullWidth": "fullWidth"; "maxLength": "maxLength"; "showCharCount": "showCharCount"; "rows": "rows"; "cols": "cols"; "resize": "resize"; "textareaInlineStyle": "textareaInlineStyle"; "labelInlineStyle": "labelInlineStyle"; }, { "valueChange": "valueChange"; "blurred": "blurred"; "focused": "focused"; }, never, never>;
38
+ static ɵcmp: i0.ɵɵComponentDeclaration<CustomTextareaComponent, "cqa-custom-textarea", never, { "label": "label"; "placeholder": "placeholder"; "value": "value"; "disabled": "disabled"; "errors": "errors"; "required": "required"; "ariaLabel": "ariaLabel"; "size": "size"; "fullWidth": "fullWidth"; "maxLength": "maxLength"; "showCharCount": "showCharCount"; "rows": "rows"; "cols": "cols"; "resize": "resize"; "textareaInlineStyle": "textareaInlineStyle"; "labelInlineStyle": "labelInlineStyle"; "customClass": "customClass"; }, { "valueChange": "valueChange"; "blurred": "blurred"; "focused": "focused"; }, never, never>;
38
39
  }
39
40
  export {};
@@ -0,0 +1,12 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class CustomToggleComponent {
4
+ checked: boolean;
5
+ disabled: boolean;
6
+ ariaLabel: string;
7
+ checkedChange: EventEmitter<boolean>;
8
+ change: EventEmitter<boolean>;
9
+ onToggle(): void;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<CustomToggleComponent, never>;
11
+ static ɵcmp: i0.ɵɵComponentDeclaration<CustomToggleComponent, "cqa-custom-toggle", never, { "checked": "checked"; "disabled": "disabled"; "ariaLabel": "ariaLabel"; }, { "checkedChange": "checkedChange"; "change": "change"; }, never, never>;
12
+ }
@@ -236,5 +236,7 @@ export interface PrerequisiteItem {
236
236
  status: StepStatus;
237
237
  duration: number;
238
238
  stepConfig?: ExecutionStepConfig;
239
+ /** Optional URL for "View steps" redirect. When viewStepsAsRedirect is true, each item can have its own URL. */
240
+ viewStepsUrl?: string;
239
241
  }
240
242
  export declare type ExecutionStepConfig = BasicStepConfig | StepGroupConfig | LoopStepConfig | ConditionStepConfig | FailedStepConfig | AIAgentStepConfig | AIActionStepConfig | ApiStepConfig | FileDownloadStepConfig | DocumentVerificationStepConfig | LiveExecutionStepConfig | DbVerificationStepConfig;
@@ -1,11 +1,24 @@
1
1
  import { EventEmitter, OnInit, TemplateRef } from '@angular/core';
2
2
  import { PrerequisiteItem, StepStatus } from '../execution-step.models';
3
+ import { ButtonVariant } from '../../button/button.component';
3
4
  import * as i0 from "@angular/core";
4
5
  export declare type IconType = 'folder' | 'loop' | 'bar' | 'custom';
5
6
  export interface IconConfig {
6
7
  type: IconType;
7
8
  svg?: string;
8
9
  }
10
+ /** Config for dynamic header buttons shown beside the items count badge */
11
+ export interface HeaderButtonConfig {
12
+ text?: string;
13
+ icon?: string;
14
+ variant?: ButtonVariant;
15
+ disabled?: boolean;
16
+ tooltip?: string;
17
+ customClass?: string;
18
+ btnSize?: 'sm' | 'md' | 'lg';
19
+ /** Optional id to identify the button in headerButtonClick event */
20
+ id?: string;
21
+ }
9
22
  export declare class MainStepCollapseComponent implements OnInit {
10
23
  title: string;
11
24
  items: PrerequisiteItem[];
@@ -13,8 +26,19 @@ export declare class MainStepCollapseComponent implements OnInit {
13
26
  icon?: IconConfig;
14
27
  count?: number;
15
28
  itemContentTemplate?: TemplateRef<any>;
29
+ headerButtons?: HeaderButtonConfig[];
30
+ /** When true, "View steps" redirects to URL instead of expanding inline. URL comes from item.viewStepsUrl or getViewStepsUrl(item). */
31
+ viewStepsAsRedirect: boolean;
32
+ /** Optional function to get redirect URL per item. Used when item.viewStepsUrl is not set. */
33
+ getViewStepsUrl?: (item: PrerequisiteItem) => string;
34
+ /** When redirecting, open link in new tab. Default true */
35
+ viewStepsOpenInNewTab: boolean;
16
36
  itemContentTpl?: TemplateRef<any>;
17
37
  viewSteps: EventEmitter<PrerequisiteItem>;
38
+ headerButtonClick: EventEmitter<{
39
+ config: HeaderButtonConfig;
40
+ index: number;
41
+ }>;
18
42
  isExpanded: boolean;
19
43
  expandedItemId: string | null;
20
44
  ngOnInit(): void;
@@ -24,6 +48,11 @@ export declare class MainStepCollapseComponent implements OnInit {
24
48
  onViewSteps(item: PrerequisiteItem, event: Event): void;
25
49
  isItemExpanded(itemId: string): boolean;
26
50
  getDisplayCount(): number;
51
+ onHeaderButtonClick(config: HeaderButtonConfig, index: number, event: MouseEvent): void;
52
+ /** Resolves the redirect URL for an item: item.viewStepsUrl takes precedence, else getViewStepsUrl(item) */
53
+ getItemViewStepsUrl(item: PrerequisiteItem): string | undefined;
54
+ /** Whether redirect mode is active and we have a URL for this item */
55
+ hasViewStepsRedirectUrl(item: PrerequisiteItem): boolean;
27
56
  static ɵfac: i0.ɵɵFactoryDeclaration<MainStepCollapseComponent, never>;
28
- static ɵcmp: i0.ɵɵComponentDeclaration<MainStepCollapseComponent, "cqa-main-step-collapse", never, { "title": "title"; "items": "items"; "expanded": "expanded"; "icon": "icon"; "count": "count"; "itemContentTemplate": "itemContentTemplate"; }, { "viewSteps": "viewSteps"; }, ["itemContentTpl"], ["*", "[itemContent]", "[afterItems]"]>;
57
+ static ɵcmp: i0.ɵɵComponentDeclaration<MainStepCollapseComponent, "cqa-main-step-collapse", never, { "title": "title"; "items": "items"; "expanded": "expanded"; "icon": "icon"; "count": "count"; "itemContentTemplate": "itemContentTemplate"; "headerButtons": "headerButtons"; "viewStepsAsRedirect": "viewStepsAsRedirect"; "getViewStepsUrl": "getViewStepsUrl"; "viewStepsOpenInNewTab": "viewStepsOpenInNewTab"; }, { "viewSteps": "viewSteps"; "headerButtonClick": "headerButtonClick"; }, ["itemContentTpl"], ["*", "[itemContent]", "[afterItems]"]>;
29
58
  }
@@ -0,0 +1,26 @@
1
+ import { EventEmitter, ElementRef } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class FileUploadComponent {
4
+ /** Accepted file types (e.g., 'application/pdf,application/msword,.txt') */
5
+ accept: string;
6
+ /** Display text for accepted file types */
7
+ acceptedFileTypes: string;
8
+ /** Whether the component is disabled */
9
+ disabled: boolean;
10
+ /** Emit when file is selected */
11
+ fileSelected: EventEmitter<File>;
12
+ /** Emit when file selection is cancelled */
13
+ cancelled: EventEmitter<void>;
14
+ fileInput: ElementRef<HTMLInputElement>;
15
+ isDragging: boolean;
16
+ selectedFile: File | null;
17
+ onDragOver(event: DragEvent): void;
18
+ onDragLeave(event: DragEvent): void;
19
+ onDrop(event: DragEvent): void;
20
+ onBrowseClick(): void;
21
+ onFileInputChange(event: Event): void;
22
+ private handleFile;
23
+ removeFile(): void;
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<FileUploadComponent, never>;
25
+ static ɵcmp: i0.ɵɵComponentDeclaration<FileUploadComponent, "cqa-file-upload", never, { "accept": "accept"; "acceptedFileTypes": "acceptedFileTypes"; "disabled": "disabled"; }, { "fileSelected": "fileSelected"; "cancelled": "cancelled"; }, never, never>;
26
+ }
@@ -0,0 +1,25 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { CqaListItemConfig } from './item-list.model';
3
+ import * as i0 from "@angular/core";
4
+ export declare class ItemListComponent {
5
+ /** List items to display (e.g. mapped from Parameter, Environment, or any domain model) */
6
+ items: CqaListItemConfig[];
7
+ /** Id of the currently selected item; used for highlight and to show edit icon when showEdit is true */
8
+ selectedId: string | null;
9
+ /** Message shown when items array is empty (e.g. "No parameters match your search.") */
10
+ emptyMessage: string;
11
+ /** When true (default), the list container is scrollable (flex-1 min-h-0 overflow-y-auto). */
12
+ scrollable: boolean;
13
+ /** Emitted when an item row is clicked (passes the item id). */
14
+ itemSelect: EventEmitter<string>;
15
+ /** Emitted when the edit icon is clicked (passes the item id). Call stopPropagation in parent if needed. */
16
+ itemEdit: EventEmitter<string>;
17
+ /** Normalized items (never undefined) so template is safe. */
18
+ get displayItems(): CqaListItemConfig[];
19
+ trackById(_index: number, item: CqaListItemConfig): string;
20
+ isSelected(item: CqaListItemConfig): boolean;
21
+ onItemClick(item: CqaListItemConfig): void;
22
+ onEditClick(event: Event, item: CqaListItemConfig): void;
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<ItemListComponent, never>;
24
+ static ɵcmp: i0.ɵɵComponentDeclaration<ItemListComponent, "cqa-item-list", never, { "items": "items"; "selectedId": "selectedId"; "emptyMessage": "emptyMessage"; "scrollable": "scrollable"; }, { "itemSelect": "itemSelect"; "itemEdit": "itemEdit"; }, never, never>;
25
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Configuration for a single item in the reusable item list.
3
+ * Use this interface to bind any domain model to the list by mapping to id, title, subtitle, badge, showEdit.
4
+ */
5
+ export interface CqaListItemConfig {
6
+ /** Unique id used for selection and tracking */
7
+ id: string;
8
+ /** Primary text (e.g. variable name, label) */
9
+ title: string;
10
+ /** Secondary / value text shown below title */
11
+ subtitle?: string;
12
+ /** Optional badge text (e.g. "Global", "Local", environment name) */
13
+ badge?: string;
14
+ /** When true, the edit icon is shown (typically when this item is selected) */
15
+ showEdit?: boolean;
16
+ }
@@ -0,0 +1,47 @@
1
+ import { EventEmitter, OnInit } from '@angular/core';
2
+ import { FormBuilder, FormGroup } from '@angular/forms';
3
+ import { DynamicSelectFieldConfig, SelectOption } from '../../dynamic-select/dynamic-select-field.component';
4
+ import * as i0 from "@angular/core";
5
+ export interface AiAgentFormData {
6
+ query: string;
7
+ type: string;
8
+ environments: string;
9
+ metadata?: string;
10
+ description?: string;
11
+ continueOnError?: boolean;
12
+ disabled?: boolean;
13
+ retryCount?: string;
14
+ iframeLocator?: string;
15
+ otherLocators?: string;
16
+ }
17
+ export declare class StepBuilderAiAgentComponent implements OnInit {
18
+ private fb;
19
+ /** Options for type dropdown */
20
+ typeOptions: SelectOption[];
21
+ /** Options for environments dropdown */
22
+ environmentOptions: SelectOption[];
23
+ /** Options for retry count dropdown */
24
+ retryCountOptions: SelectOption[];
25
+ /** Options for iframe locator dropdown */
26
+ iframeLocatorOptions: SelectOption[];
27
+ /** Options for other locators dropdown */
28
+ otherLocatorsOptions: SelectOption[];
29
+ /** Emit when step is created */
30
+ createStep: EventEmitter<AiAgentFormData>;
31
+ /** Emit when cancelled */
32
+ cancelled: EventEmitter<void>;
33
+ aiAgentForm: FormGroup;
34
+ showAdvanced: boolean;
35
+ constructor(fb: FormBuilder);
36
+ ngOnInit(): void;
37
+ getTypeConfig(): DynamicSelectFieldConfig;
38
+ getEnvironmentConfig(): DynamicSelectFieldConfig;
39
+ getRetryCountConfig(): DynamicSelectFieldConfig;
40
+ getIframeLocatorConfig(): DynamicSelectFieldConfig;
41
+ getOtherLocatorsConfig(): DynamicSelectFieldConfig;
42
+ toggleAdvanced(): void;
43
+ onCancel(): void;
44
+ onCreateStep(): void;
45
+ static ɵfac: i0.ɵɵFactoryDeclaration<StepBuilderAiAgentComponent, never>;
46
+ static ɵcmp: i0.ɵɵComponentDeclaration<StepBuilderAiAgentComponent, "cqa-step-builder-ai-agent", never, { "typeOptions": "typeOptions"; "environmentOptions": "environmentOptions"; "retryCountOptions": "retryCountOptions"; "iframeLocatorOptions": "iframeLocatorOptions"; "otherLocatorsOptions": "otherLocatorsOptions"; }, { "createStep": "createStep"; "cancelled": "cancelled"; }, never, never>;
47
+ }
@@ -0,0 +1,27 @@
1
+ import { EventEmitter, OnInit } from '@angular/core';
2
+ import { FormBuilder, FormGroup } from '@angular/forms';
3
+ import { DynamicSelectFieldConfig, SelectOption } from '../../dynamic-select/dynamic-select-field.component';
4
+ import * as i0 from "@angular/core";
5
+ export interface CustomCodeFormData {
6
+ language: string;
7
+ code: string;
8
+ metadata?: string;
9
+ description?: string;
10
+ }
11
+ export declare class StepBuilderCustomCodeComponent implements OnInit {
12
+ private fb;
13
+ /** Options for language dropdown */
14
+ languageOptions: SelectOption[];
15
+ /** Emit when step is created */
16
+ createStep: EventEmitter<CustomCodeFormData>;
17
+ /** Emit when cancelled */
18
+ cancelled: EventEmitter<void>;
19
+ customCodeForm: FormGroup;
20
+ constructor(fb: FormBuilder);
21
+ ngOnInit(): void;
22
+ getLanguageConfig(): DynamicSelectFieldConfig;
23
+ onCancel(): void;
24
+ onCreateStep(): void;
25
+ static ɵfac: i0.ɵɵFactoryDeclaration<StepBuilderCustomCodeComponent, never>;
26
+ static ɵcmp: i0.ɵɵComponentDeclaration<StepBuilderCustomCodeComponent, "cqa-step-builder-custom-code", never, { "languageOptions": "languageOptions"; }, { "createStep": "createStep"; "cancelled": "cancelled"; }, never, never>;
27
+ }
@@ -0,0 +1,81 @@
1
+ import { EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';
2
+ import { FormBuilder, FormGroup, FormArray } from '@angular/forms';
3
+ import { DynamicSelectFieldConfig, SelectOption } from '../../dynamic-select/dynamic-select-field.component';
4
+ import * as i0 from "@angular/core";
5
+ export declare type TemplateSourceType = 'existing' | 'upload' | 'createNew';
6
+ export interface DocumentMappingRow {
7
+ key: string;
8
+ valueType: string;
9
+ value: string;
10
+ enabled?: boolean;
11
+ }
12
+ export interface DocumentFormData {
13
+ documentType: string;
14
+ outputVariable: string;
15
+ templateSource: TemplateSourceType;
16
+ templateId?: string;
17
+ /** Uploaded template file when templateSource is 'upload' */
18
+ uploadedFile?: File;
19
+ /** Template name when templateSource is 'createNew' */
20
+ templateName?: string;
21
+ /** Template description when templateSource is 'createNew' */
22
+ templateDescription?: string;
23
+ mappings: DocumentMappingRow[];
24
+ }
25
+ export declare class StepBuilderDocumentComponent implements OnInit, OnChanges {
26
+ private fb;
27
+ /** Options for document type dropdown */
28
+ documentTypeOptions: SelectOption[];
29
+ /** Options for template dropdown (when "Use Existing Template" is selected) */
30
+ templateOptions: SelectOption[];
31
+ /** Options for value type dropdown in document mapper */
32
+ valueTypeOptions: SelectOption[];
33
+ /** Optional URL for "Need help?" link in Document Mapper section */
34
+ mapperHelpUrl: string;
35
+ /** Tooltip text when hovering over "Need help?" (same as custom-edit-step) */
36
+ mapperHelpTooltipText: string;
37
+ /** Whether the help tooltip is visible */
38
+ showHelpTooltip: boolean;
39
+ /** Emit when step is created */
40
+ createStep: EventEmitter<DocumentFormData>;
41
+ /** Emit when cancelled */
42
+ cancelled: EventEmitter<void>;
43
+ /** Emit when "Create Template" is clicked (Create New flow). Host can create template via API. */
44
+ createTemplate: EventEmitter<{
45
+ templateName: string;
46
+ templateDescription: string;
47
+ }>;
48
+ documentForm: FormGroup;
49
+ selectedTemplateSource: TemplateSourceType;
50
+ /** Uploaded file when Template Source is "Upload Template" */
51
+ uploadedFile: File | null;
52
+ /** Visual state for drag-and-drop zone */
53
+ isDragOver: boolean;
54
+ constructor(fb: FormBuilder);
55
+ ngOnInit(): void;
56
+ ngOnChanges(changes: SimpleChanges): void;
57
+ get mappingsFormArray(): FormArray;
58
+ getDocumentTypeConfig(): DynamicSelectFieldConfig;
59
+ getTemplateSelectConfig(): DynamicSelectFieldConfig;
60
+ getValueTypeConfig(index: number): DynamicSelectFieldConfig;
61
+ onTemplateSourceChange(value: string): void;
62
+ onCreateTemplate(): void;
63
+ onFileSelected(event: Event): void;
64
+ onDragOver(event: DragEvent): void;
65
+ onDragLeave(event: DragEvent): void;
66
+ onDrop(event: DragEvent): void;
67
+ private isAcceptedTemplateFile;
68
+ addMapping(): void;
69
+ removeMapping(index: number): void;
70
+ getMappingFormGroup(index: number): FormGroup;
71
+ /** True when every mapping row has enabled === true */
72
+ get allMappingsSelected(): boolean;
73
+ /** True when at least one mapping row has enabled === true (for header indeterminate) */
74
+ get someMappingsSelected(): boolean;
75
+ onSelectAllMappings(checked: boolean): void;
76
+ onCancel(): void;
77
+ onCreateStep(): void;
78
+ onMapperHelpClick(event: Event): void;
79
+ static ɵfac: i0.ɵɵFactoryDeclaration<StepBuilderDocumentComponent, never>;
80
+ static ɵcmp: i0.ɵɵComponentDeclaration<StepBuilderDocumentComponent, "cqa-step-builder-document", never, { "documentTypeOptions": "documentTypeOptions"; "templateOptions": "templateOptions"; "valueTypeOptions": "valueTypeOptions"; "mapperHelpUrl": "mapperHelpUrl"; "mapperHelpTooltipText": "mapperHelpTooltipText"; }, { "createStep": "createStep"; "cancelled": "cancelled"; "createTemplate": "createTemplate"; }, never, never>;
81
+ }
@@ -0,0 +1,55 @@
1
+ import { EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';
2
+ import { FormBuilder, FormGroup, FormArray } from '@angular/forms';
3
+ import { DynamicSelectFieldConfig, SelectOption } from '../../dynamic-select/dynamic-select-field.component';
4
+ import * as i0 from "@angular/core";
5
+ export interface DocumentMapper {
6
+ key: string;
7
+ valueType: string;
8
+ value: string;
9
+ }
10
+ export interface DocumentGenerationTemplateFormData {
11
+ documentType: string;
12
+ templateSource: string;
13
+ outputVariable: string;
14
+ templateOption: 'use-existing' | 'upload' | 'create-new';
15
+ mappings: DocumentMapper[];
16
+ }
17
+ export declare class StepBuilderDocumentGenerationTemplateStepComponent implements OnInit, OnChanges {
18
+ private fb;
19
+ /** Options for document type dropdown */
20
+ documentTypeOptions: SelectOption[];
21
+ /** Options for template source dropdown */
22
+ templateSourceOptions: SelectOption[];
23
+ /** Options for value type dropdown */
24
+ valueTypeOptions: SelectOption[];
25
+ /** Emit when step is created */
26
+ createStep: EventEmitter<DocumentGenerationTemplateFormData>;
27
+ /** Emit when cancelled */
28
+ cancelled: EventEmitter<void>;
29
+ documentForm: FormGroup;
30
+ selectedTemplateOption: 'use-existing' | 'upload' | 'create-new';
31
+ documentTypeConfig: DynamicSelectFieldConfig;
32
+ templateSourceConfig: DynamicSelectFieldConfig;
33
+ valueTypeConfig: DynamicSelectFieldConfig;
34
+ templateSegments: {
35
+ label: string;
36
+ value: string;
37
+ }[];
38
+ constructor(fb: FormBuilder);
39
+ ngOnInit(): void;
40
+ ngOnChanges(changes: SimpleChanges): void;
41
+ get mappingsFormArray(): FormArray;
42
+ getMappingGroup(index: number): FormGroup;
43
+ private updateConfigs;
44
+ addMapping(): void;
45
+ removeMapping(index: number): void;
46
+ selectTemplateOption(option: 'use-existing' | 'upload' | 'create-new' | number): void;
47
+ onTemplateOptionChange(value: string): void;
48
+ onTemplateIndexChange(index: number): void;
49
+ onFileSelected(file: File): void;
50
+ onCreateTemplate(): void;
51
+ onCancel(): void;
52
+ onCreateStep(): void;
53
+ static ɵfac: i0.ɵɵFactoryDeclaration<StepBuilderDocumentGenerationTemplateStepComponent, never>;
54
+ static ɵcmp: i0.ɵɵComponentDeclaration<StepBuilderDocumentGenerationTemplateStepComponent, "cqa-step-builder-document-generation-template-step", never, { "documentTypeOptions": "documentTypeOptions"; "templateSourceOptions": "templateSourceOptions"; "valueTypeOptions": "valueTypeOptions"; }, { "createStep": "createStep"; "cancelled": "cancelled"; }, never, never>;
55
+ }
@@ -0,0 +1,16 @@
1
+ import { EventEmitter, OnInit } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export interface RecordStepFormData {
4
+ }
5
+ export declare class StepBuilderRecordStepComponent implements OnInit {
6
+ /** Emit when cancelled */
7
+ cancelled: EventEmitter<void>;
8
+ /** Emit when recording is cancelled */
9
+ cancelRecording: EventEmitter<void>;
10
+ constructor();
11
+ ngOnInit(): void;
12
+ onCancel(): void;
13
+ onCancelRecording(): void;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<StepBuilderRecordStepComponent, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<StepBuilderRecordStepComponent, "cqa-step-builder-record-step", never, {}, { "cancelled": "cancelled"; "cancelRecording": "cancelRecording"; }, never, never>;
16
+ }
@@ -0,0 +1,26 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class ElementListComponent {
4
+ /** Array of items to display */
5
+ items: any[];
6
+ /** Key to access the title property from each item (default: 'title') */
7
+ titleKey: string;
8
+ /** Key to access the selector property from each item (default: 'selector') */
9
+ selectorKey: string;
10
+ /** Key to access the labels array from each item (default: 'labels') */
11
+ labelsKey: string;
12
+ /** Maximum height for the scrollable container (default: '200px') */
13
+ maxHeight: string;
14
+ /** Emitted when an item is clicked */
15
+ itemClick: EventEmitter<any>;
16
+ /**
17
+ * Get the value from an item using the specified key
18
+ */
19
+ getItemValue(item: any, key: string): any;
20
+ /**
21
+ * Handle item click
22
+ */
23
+ onItemClick(item: any): void;
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<ElementListComponent, never>;
25
+ static ɵcmp: i0.ɵɵComponentDeclaration<ElementListComponent, "cqa-element-list", never, { "items": "items"; "titleKey": "titleKey"; "selectorKey": "selectorKey"; "labelsKey": "labelsKey"; "maxHeight": "maxHeight"; }, { "itemClick": "itemClick"; }, never, never>;
26
+ }
@@ -0,0 +1,16 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export interface ElementPopupData {
3
+ element?: ElementPopupDataElements;
4
+ labels: string[];
5
+ elements: ElementPopupDataElements[];
6
+ description: string;
7
+ helpUrl?: string;
8
+ }
9
+ export interface ElementPopupDataElements {
10
+ labels: string[];
11
+ title: string;
12
+ selector?: string;
13
+ }
14
+ /** Sentinel returned from afterClosed() when user clicked "Edit in depth". */
15
+ export declare const ELEMENT_POPUP_EDIT_IN_DEPTH: unique symbol;
16
+ export declare const ELEMENT_POPUP_DATA: InjectionToken<ElementPopupData>;
@@ -0,0 +1,13 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { OverlayRef } from '@angular/cdk/overlay';
3
+ import { Observable } from 'rxjs';
4
+ export declare class ElementPopupRef<TResult = string | undefined> {
5
+ private readonly overlayRef;
6
+ private readonly closed$;
7
+ private isClosed;
8
+ constructor(overlayRef: OverlayRef);
9
+ close(result?: TResult): void;
10
+ afterClosed(): Observable<TResult | undefined>;
11
+ private finishClose;
12
+ }
13
+ export declare const CUSTOM_ELEMENT_POPUP_REF: InjectionToken<ElementPopupRef<string>>;
@@ -0,0 +1,60 @@
1
+ import { ChangeDetectorRef, EventEmitter, OnChanges, OnInit, SimpleChanges } from '@angular/core';
2
+ import { ElementPopupData, ElementPopupDataElements } from './element-popup-data';
3
+ import { ElementPopupRef } from './../element-popup/element-popup-ref';
4
+ import { FormBuilder, FormGroup, FormControl } from '@angular/forms';
5
+ import { DynamicSelectFieldConfig } from '../../dynamic-select/dynamic-select-field.component';
6
+ import * as i0 from "@angular/core";
7
+ export declare class ElementPopupComponent implements OnInit, OnChanges {
8
+ private ref;
9
+ private readonly cdr?;
10
+ value: string;
11
+ helpUrl: string;
12
+ labels: string[];
13
+ element: ElementPopupDataElements;
14
+ elements: ElementPopupDataElements[];
15
+ enableForm: boolean;
16
+ isOnRecord: boolean;
17
+ apply: EventEmitter<string>;
18
+ cancel: EventEmitter<void>;
19
+ editInDepth: EventEmitter<void>;
20
+ searchElement: EventEmitter<void>;
21
+ form: FormGroup;
22
+ /** Tooltip shown when hovering over the "Need help ?" icon and text */
23
+ helpTooltipText: string;
24
+ /** Whether the help tooltip is visible (custom tooltip for use inside overlay) */
25
+ showHelpTooltip: boolean;
26
+ /** Whether we're in edit mode (true) or create mode (false) */
27
+ isEditMode: boolean;
28
+ private injectedData?;
29
+ private fb;
30
+ /** Cached select options to avoid recomputing on every change detection */
31
+ private cachedSelectOptions;
32
+ /** Cached select config to avoid recreating on every change detection */
33
+ private cachedSelectConfig?;
34
+ constructor(ref: ElementPopupRef, data?: ElementPopupData, fb?: FormBuilder, cdr?: ChangeDetectorRef);
35
+ ngOnChanges(changes: SimpleChanges): void;
36
+ ngOnInit(): void;
37
+ private initializeForm;
38
+ private populateFormForEdit;
39
+ private resetForm;
40
+ onApply(): void;
41
+ toggleForm(): void;
42
+ /** Called when "Create New" button is clicked - explicitly sets create mode */
43
+ openCreateForm(): void;
44
+ toggleRecord(): void;
45
+ onCancel(): void;
46
+ onClose(): void;
47
+ onEditInDepth(event: Event): void;
48
+ search(event: any): void;
49
+ onHelp(event: Event): void;
50
+ onVariableValueChange(variableName: string, value: any): void;
51
+ /** Update cached select options when labels change */
52
+ private updateSelectOptions;
53
+ getSelectConfig(): DynamicSelectFieldConfig;
54
+ getFormControl(controlName: string): FormControl;
55
+ getFormControlValue(controlName: string): string;
56
+ onFormControlChange(controlName: string, value: string): void;
57
+ onElementClick(element: ElementPopupDataElements): void;
58
+ static ɵfac: i0.ɵɵFactoryDeclaration<ElementPopupComponent, [null, { optional: true; }, { optional: true; }, { optional: true; }]>;
59
+ static ɵcmp: i0.ɵɵComponentDeclaration<ElementPopupComponent, "cqa-element-popup", never, { "value": "value"; "helpUrl": "helpUrl"; "labels": "labels"; "element": "element"; "elements": "elements"; "enableForm": "enableForm"; "isOnRecord": "isOnRecord"; }, { "apply": "apply"; "cancel": "cancel"; "editInDepth": "editInDepth"; "searchElement": "searchElement"; }, never, never>;
60
+ }
@@ -0,0 +1,23 @@
1
+ import { ElementRef, Injector } from '@angular/core';
2
+ import { Overlay } from '@angular/cdk/overlay';
3
+ import { ElementPopupRef } from './element-popup-ref';
4
+ import { ELEMENT_POPUP_EDIT_IN_DEPTH, ElementPopupData } from './element-popup-data';
5
+ import * as i0 from "@angular/core";
6
+ export declare type ElementPopupResult = string | undefined | typeof ELEMENT_POPUP_EDIT_IN_DEPTH;
7
+ export declare class ElementPopupService {
8
+ private readonly overlay;
9
+ private readonly injector;
10
+ /** Currently open Step Description overlay ref; only one panel is allowed at a time. */
11
+ private currentRef;
12
+ constructor(overlay: Overlay, injector: Injector);
13
+ /**
14
+ * Opens the Step Description modal positioned just below the given origin element.
15
+ * If a panel is already open, returns the existing ref and does not open a duplicate.
16
+ * @param origin Element (e.g. description span or edit icon) to position below
17
+ * @param data Initial description and optional help URL
18
+ * @returns Ref with afterClosed() and close(); afterClosed emits the new description on Apply, undefined on Cancel, or EDIT_IN_DEPTH symbol when user clicks "Edit in depth"
19
+ */
20
+ open(origin: ElementRef<HTMLElement>, data: ElementPopupData): ElementPopupRef<ElementPopupResult>;
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<ElementPopupService, never>;
22
+ static ɵprov: i0.ɵɵInjectableDeclaration<ElementPopupService>;
23
+ }