@cqa-lib/cqa-ui 1.1.180 → 1.1.181
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/custom-textarea/custom-textarea.component.mjs +6 -3
- package/esm2020/lib/custom-toggle/custom-toggle.component.mjs +35 -0
- package/esm2020/lib/file-upload/file-upload.component.mjs +87 -0
- package/esm2020/lib/item-list/item-list.component.mjs +59 -0
- package/esm2020/lib/item-list/item-list.model.mjs +2 -0
- package/esm2020/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.mjs +136 -0
- package/esm2020/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.mjs +65 -0
- package/esm2020/lib/step-builder/step-builder-database/step-builder-database.component.mjs +1 -1
- package/esm2020/lib/step-builder/step-builder-document/step-builder-document.component.mjs +241 -0
- package/esm2020/lib/step-builder/step-builder-document-generation-template-step/step-builder-document-generation-template-step.component.mjs +176 -0
- package/esm2020/lib/step-builder/step-builder-record-step/step-builder-record-step.component.mjs +31 -0
- package/esm2020/lib/test-case-details/custom-edit-step/custom-edit-step.component.mjs +3 -3
- package/esm2020/lib/test-case-details/element-list/element-list.component.mjs +50 -0
- package/esm2020/lib/test-case-details/element-popup/element-popup-data.mjs +5 -0
- package/esm2020/lib/test-case-details/element-popup/element-popup-ref.mjs +32 -0
- package/esm2020/lib/test-case-details/element-popup/element-popup.component.mjs +272 -0
- package/esm2020/lib/test-case-details/element-popup/element-popup.service.mjs +97 -0
- package/esm2020/lib/test-case-details/normal-step/normal-step.component.mjs +151 -19
- package/esm2020/lib/test-case-details/test-data-modal/test-data-modal-data.mjs +5 -0
- package/esm2020/lib/test-case-details/test-data-modal/test-data-modal-environment.model.mjs +10 -0
- package/esm2020/lib/test-case-details/test-data-modal/test-data-modal-parameter.model.mjs +8 -0
- package/esm2020/lib/test-case-details/test-data-modal/test-data-modal-ref.mjs +32 -0
- package/esm2020/lib/test-case-details/test-data-modal/test-data-modal.component.mjs +301 -0
- package/esm2020/lib/test-case-details/test-data-modal/test-data-modal.service.mjs +97 -0
- package/esm2020/lib/ui-kit.module.mjs +58 -3
- package/esm2020/lib/utils/tw-overlay-container.mjs +7 -3
- package/esm2020/public-api.mjs +19 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +2926 -1097
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +2850 -1041
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/custom-textarea/custom-textarea.component.d.ts +2 -1
- package/lib/custom-toggle/custom-toggle.component.d.ts +12 -0
- package/lib/file-upload/file-upload.component.d.ts +26 -0
- package/lib/item-list/item-list.component.d.ts +25 -0
- package/lib/item-list/item-list.model.d.ts +16 -0
- package/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.d.ts +47 -0
- package/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.d.ts +27 -0
- package/lib/step-builder/step-builder-document/step-builder-document.component.d.ts +81 -0
- package/lib/step-builder/step-builder-document-generation-template-step/step-builder-document-generation-template-step.component.d.ts +55 -0
- package/lib/step-builder/step-builder-record-step/step-builder-record-step.component.d.ts +16 -0
- package/lib/test-case-details/element-list/element-list.component.d.ts +26 -0
- package/lib/test-case-details/element-popup/element-popup-data.d.ts +16 -0
- package/lib/test-case-details/element-popup/element-popup-ref.d.ts +13 -0
- package/lib/test-case-details/element-popup/element-popup.component.d.ts +60 -0
- package/lib/test-case-details/element-popup/element-popup.service.d.ts +23 -0
- package/lib/test-case-details/normal-step/normal-step.component.d.ts +17 -2
- package/lib/test-case-details/test-data-modal/test-data-modal-data.d.ts +31 -0
- package/lib/test-case-details/test-data-modal/test-data-modal-environment.model.d.ts +12 -0
- package/lib/test-case-details/test-data-modal/test-data-modal-parameter.model.d.ts +11 -0
- package/lib/test-case-details/test-data-modal/test-data-modal-ref.d.ts +13 -0
- package/lib/test-case-details/test-data-modal/test-data-modal.component.d.ts +91 -0
- package/lib/test-case-details/test-data-modal/test-data-modal.service.d.ts +23 -0
- package/lib/ui-kit.module.d.ts +60 -49
- package/package.json +1 -1
- package/public-api.d.ts +18 -0
- package/styles.css +1 -1
|
@@ -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
|
+
}
|
|
@@ -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
|
+
}
|
|
@@ -1,12 +1,20 @@
|
|
|
1
|
-
import { EventEmitter, OnInit, ElementRef } from '@angular/core';
|
|
1
|
+
import { EventEmitter, OnInit, ElementRef, ChangeDetectorRef, NgZone } from '@angular/core';
|
|
2
2
|
import { NormalStepConfig, TestCaseEventType, EventTypeConfig, StepParameter } from '../test-case-step.models';
|
|
3
3
|
import { CustomEditStepService } from '../custom-edit-step/custom-edit-step.service';
|
|
4
|
+
import { ElementPopupService } from '../element-popup/element-popup.service';
|
|
5
|
+
import { TestDataModalService } from '../test-data-modal/test-data-modal.service';
|
|
4
6
|
import * as i0 from "@angular/core";
|
|
5
7
|
export declare class TestCaseNormalStepComponent implements OnInit {
|
|
6
8
|
private readonly customEditStep;
|
|
9
|
+
private readonly elementPopup;
|
|
10
|
+
private readonly testDataModal;
|
|
11
|
+
private readonly cdr;
|
|
12
|
+
private readonly ngZone;
|
|
7
13
|
dropdownContainer?: ElementRef;
|
|
8
14
|
descriptionTrigger?: ElementRef<HTMLElement>;
|
|
15
|
+
testDataTrigger?: ElementRef<HTMLElement>;
|
|
9
16
|
editTrigger?: ElementRef<HTMLElement>;
|
|
17
|
+
elementTrigger?: ElementRef<HTMLElement>;
|
|
10
18
|
config: NormalStepConfig;
|
|
11
19
|
stepNumber: number | string;
|
|
12
20
|
eventType: TestCaseEventType;
|
|
@@ -28,7 +36,9 @@ export declare class TestCaseNormalStepComponent implements OnInit {
|
|
|
28
36
|
moreOptions: EventEmitter<void>;
|
|
29
37
|
selectionChange: EventEmitter<boolean>;
|
|
30
38
|
eventTypeDropdownOpen: boolean;
|
|
31
|
-
|
|
39
|
+
/** Stored test data modal state for reopening with same selections. */
|
|
40
|
+
private testDataModalState;
|
|
41
|
+
constructor(customEditStep: CustomEditStepService, elementPopup: ElementPopupService, testDataModal: TestDataModalService, cdr: ChangeDetectorRef, ngZone: NgZone);
|
|
32
42
|
eventTypeConfigs: EventTypeConfig[];
|
|
33
43
|
ngOnInit(): void;
|
|
34
44
|
getCurrentEventTypeConfig(): EventTypeConfig;
|
|
@@ -41,8 +51,13 @@ export declare class TestCaseNormalStepComponent implements OnInit {
|
|
|
41
51
|
* Returns the first parameter with name 'url' or 'URL', or the first parameter if none found
|
|
42
52
|
*/
|
|
43
53
|
getNavigateUrlParameter(): StepParameter | null;
|
|
54
|
+
/** Current URL value for navigate step (for Test Data modal). */
|
|
55
|
+
getNavigateUrlValue(): string;
|
|
56
|
+
/** Opens Test Data modal below the given trigger; used when eventType === 'navigate'. */
|
|
57
|
+
openTestDataModal(origin: ElementRef<HTMLElement> | HTMLElement | MouseEvent): void;
|
|
44
58
|
/** Opens Step Description modal below the given trigger; used when eventType === 'custom'. */
|
|
45
59
|
openStepDescriptionModal(origin: ElementRef<HTMLElement> | HTMLElement | MouseEvent): void;
|
|
60
|
+
openElementPopup(origin: ElementRef<HTMLElement> | HTMLElement | MouseEvent): void;
|
|
46
61
|
onEventTypeSelect(eventType: TestCaseEventType): void;
|
|
47
62
|
onParameterChange(parameter: StepParameter, value: string): void;
|
|
48
63
|
onEdit(): void;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
import type { ParameterScopeFilter } from './test-data-modal-parameter.model';
|
|
3
|
+
export declare type TestDataModalTab = 'plain-text' | 'parameter' | 'environment' | 'runtime';
|
|
4
|
+
/**
|
|
5
|
+
* Config/data for Test Data Modal controls.
|
|
6
|
+
* Mirrors Loop Step pattern: single config object holds all control state;
|
|
7
|
+
* values are initialized from config and bound to editForm.
|
|
8
|
+
*/
|
|
9
|
+
export interface TestDataModalData {
|
|
10
|
+
/** Initial value for Plain Text tab (e.g. URL for navigate step). */
|
|
11
|
+
value?: string;
|
|
12
|
+
/** Optional help URL for "Need help?" link. */
|
|
13
|
+
helpUrl?: string;
|
|
14
|
+
/** Initially selected tab. Defaults to 'plain-text'. */
|
|
15
|
+
activeTab?: TestDataModalTab;
|
|
16
|
+
/** Parameter tab: scope filter (All / Global / Local). */
|
|
17
|
+
parameterScopeFilter?: ParameterScopeFilter;
|
|
18
|
+
/** Parameter tab: search query. */
|
|
19
|
+
parameterSearchQuery?: string;
|
|
20
|
+
/** Parameter tab: selected parameter id (for highlight). */
|
|
21
|
+
selectedParameterId?: string | null;
|
|
22
|
+
/** Environment tab: search query. */
|
|
23
|
+
environmentSearchQuery?: string;
|
|
24
|
+
/** Environment tab: selected environment id (for highlight). */
|
|
25
|
+
selectedEnvironmentId?: string | null;
|
|
26
|
+
/** Runtime tab: value (independent from Plain Text / Parameter / Environment). */
|
|
27
|
+
runtimeValue?: string;
|
|
28
|
+
}
|
|
29
|
+
/** Sentinel returned from afterClosed() when user clicked "Edit in depth". */
|
|
30
|
+
export declare const TEST_DATA_MODAL_EDIT_IN_DEPTH: unique symbol;
|
|
31
|
+
export declare const TEST_DATA_MODAL_DATA: InjectionToken<TestDataModalData>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Environment variable item for the Environment tab (variable library by environment). */
|
|
2
|
+
export interface EnvironmentItem {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
value: string;
|
|
6
|
+
/** Display name of the environment group (e.g. "OHRM login", "Halight Env"). */
|
|
7
|
+
environment: string;
|
|
8
|
+
/** When true, show edit icon when selected. */
|
|
9
|
+
editable?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/** Mock data for Environment tab (no API). Replace with API call when integrating. */
|
|
12
|
+
export declare const MOCK_ENVIRONMENT_ITEMS: EnvironmentItem[];
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Scope of a variable/parameter in the library. */
|
|
2
|
+
export declare type ParameterScope = 'Global' | 'Local';
|
|
3
|
+
export interface ParameterItem {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
value: string;
|
|
7
|
+
scope: ParameterScope;
|
|
8
|
+
}
|
|
9
|
+
/** Mock data for Variable Library (no API). Replace with API call when integrating. */
|
|
10
|
+
export declare const MOCK_PARAMETERS: ParameterItem[];
|
|
11
|
+
export declare type ParameterScopeFilter = 'all' | 'global' | 'local';
|
|
@@ -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 TestDataModalRef<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 TEST_DATA_MODAL_REF: InjectionToken<TestDataModalRef<string>>;
|