@cqa-lib/cqa-ui 1.1.204 → 1.1.205
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/detail-drawer/detail-drawer-tab/detail-drawer-tab.component.mjs +38 -0
- package/esm2020/lib/detail-drawer/detail-drawer-tab-content.directive.mjs +16 -0
- package/esm2020/lib/detail-drawer/detail-drawer.component.mjs +121 -0
- package/esm2020/lib/detail-side-panel/detail-side-panel.component.mjs +211 -0
- package/esm2020/lib/detail-side-panel/detail-side-panel.models.mjs +2 -0
- package/esm2020/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.mjs +634 -0
- package/esm2020/lib/test-case-details/test-case-details.component.mjs +138 -0
- package/esm2020/lib/test-case-details/test-case-details.models.mjs +167 -0
- package/esm2020/lib/ui-kit.module.mjs +31 -1
- package/esm2020/public-api.mjs +9 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +1322 -2
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +1315 -2
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/detail-drawer/detail-drawer-tab/detail-drawer-tab.component.d.ts +15 -0
- package/lib/detail-drawer/detail-drawer-tab-content.directive.d.ts +8 -0
- package/lib/detail-drawer/detail-drawer.component.d.ts +39 -0
- package/lib/detail-side-panel/detail-side-panel.component.d.ts +86 -0
- package/lib/detail-side-panel/detail-side-panel.models.d.ts +20 -0
- package/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.d.ts +175 -0
- package/lib/test-case-details/test-case-details.component.d.ts +62 -0
- package/lib/test-case-details/test-case-details.models.d.ts +118 -0
- package/lib/ui-kit.module.d.ts +32 -26
- package/package.json +1 -1
- package/public-api.d.ts +8 -0
- package/styles.css +1 -1
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "./test-case-details-edit/test-case-details-edit.component";
|
|
4
|
+
import * as i2 from "@angular/material/icon";
|
|
5
|
+
import * as i3 from "../badge/badge.component";
|
|
6
|
+
import * as i4 from "../configuration-card/configuration-card.component";
|
|
7
|
+
import * as i5 from "@angular/common";
|
|
8
|
+
export class TestCaseDetailsComponent {
|
|
9
|
+
constructor(cdr) {
|
|
10
|
+
this.cdr = cdr;
|
|
11
|
+
/** Whether the component is in edit mode */
|
|
12
|
+
this.editing = false;
|
|
13
|
+
/** When true, start in edit mode (useful for Storybook). */
|
|
14
|
+
this.startInEditMode = false;
|
|
15
|
+
/** Description section title */
|
|
16
|
+
this.descriptionTitle = 'Description';
|
|
17
|
+
/** Description text content */
|
|
18
|
+
this.descriptionContent = '';
|
|
19
|
+
/** Whether to show the Edit button in the Description header */
|
|
20
|
+
this.showEditButton = false;
|
|
21
|
+
/** Metadata items (createdOn, status, priority, environment, version, testPlanName, etc.) */
|
|
22
|
+
this.metadataItems = [];
|
|
23
|
+
/** Labels/tags (e.g. Automation, API, SDK, UI/UX) */
|
|
24
|
+
this.labels = [];
|
|
25
|
+
/** Configuration section title */
|
|
26
|
+
this.configTitle = 'Configuration';
|
|
27
|
+
/** Configuration sections (e.g. Execution, AI Configuration) */
|
|
28
|
+
this.configSections = [];
|
|
29
|
+
/** Optional config sections displayed in a 2-column row (e.g. Waits & Retries, Device) */
|
|
30
|
+
this.configSectionsRow2 = [];
|
|
31
|
+
/** Platform: 'web' or 'mobile'. Defaults to 'web'. Used for Device Settings fields. */
|
|
32
|
+
this.platform = 'web';
|
|
33
|
+
/** Override config per select for API-driven options, server search, load more. */
|
|
34
|
+
this.selectConfigOverrides = {};
|
|
35
|
+
this.editDescription = new EventEmitter();
|
|
36
|
+
this.saveChanges = new EventEmitter();
|
|
37
|
+
this.metadataLinkClick = new EventEmitter();
|
|
38
|
+
this.selectSearch = new EventEmitter();
|
|
39
|
+
this.selectLoadMore = new EventEmitter();
|
|
40
|
+
this.selectOpened = new EventEmitter();
|
|
41
|
+
this.selectionChange = new EventEmitter();
|
|
42
|
+
}
|
|
43
|
+
ngOnInit() {
|
|
44
|
+
if (this.startInEditMode) {
|
|
45
|
+
this.editing = true;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
onEditClick() {
|
|
49
|
+
this.editing = true;
|
|
50
|
+
this.cdr.detectChanges();
|
|
51
|
+
this.editDescription.emit();
|
|
52
|
+
}
|
|
53
|
+
onSaveChanges(data) {
|
|
54
|
+
this.editing = false;
|
|
55
|
+
this.cdr.detectChanges();
|
|
56
|
+
this.saveChanges.emit(data);
|
|
57
|
+
}
|
|
58
|
+
onCancelEdit() {
|
|
59
|
+
this.editing = false;
|
|
60
|
+
this.cdr.detectChanges();
|
|
61
|
+
}
|
|
62
|
+
trackByConfigTitle(_i, section) {
|
|
63
|
+
return section.title;
|
|
64
|
+
}
|
|
65
|
+
trackByMetadataLabel(_i, item) {
|
|
66
|
+
return item.label;
|
|
67
|
+
}
|
|
68
|
+
onMetadataLinkClick(item) {
|
|
69
|
+
if (item.link) {
|
|
70
|
+
this.metadataLinkClick.emit(item);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
getStatusDotClass(item) {
|
|
74
|
+
if (!item.statusColor)
|
|
75
|
+
return '';
|
|
76
|
+
switch (item.statusColor) {
|
|
77
|
+
case 'yellow':
|
|
78
|
+
return 'cqa-bg-[#EAB308]';
|
|
79
|
+
case 'red':
|
|
80
|
+
return 'cqa-bg-[#DC2626]';
|
|
81
|
+
case 'green':
|
|
82
|
+
return 'cqa-bg-[#16A34A]';
|
|
83
|
+
case 'gray':
|
|
84
|
+
default:
|
|
85
|
+
return 'cqa-bg-[#94A3B8]';
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/** Text color for metadata value (e.g. red for critical priority) */
|
|
89
|
+
getValueTextClass(item) {
|
|
90
|
+
if (item.statusColor === 'red') {
|
|
91
|
+
return 'cqa-text-[#DC2626]';
|
|
92
|
+
}
|
|
93
|
+
return 'cqa-text-[#111827]';
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
TestCaseDetailsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestCaseDetailsComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
97
|
+
TestCaseDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TestCaseDetailsComponent, selector: "cqa-test-case-details", inputs: { startInEditMode: "startInEditMode", descriptionTitle: "descriptionTitle", descriptionContent: "descriptionContent", showEditButton: "showEditButton", metadataItems: "metadataItems", labels: "labels", configTitle: "configTitle", configSections: "configSections", configSectionsRow2: "configSectionsRow2", platform: "platform", selectConfigOverrides: "selectConfigOverrides" }, outputs: { editDescription: "editDescription", saveChanges: "saveChanges", metadataLinkClick: "metadataLinkClick", selectSearch: "selectSearch", selectLoadMore: "selectLoadMore", selectOpened: "selectOpened", selectionChange: "selectionChange" }, ngImport: i0, template: "<!-- Edit mode: show edit form (Figma design) -->\n<cqa-test-case-details-edit\n *ngIf=\"editing\"\n [descriptionTitle]=\"descriptionTitle\"\n [descriptionContent]=\"descriptionContent\"\n [metadataItems]=\"metadataItems\"\n [labels]=\"labels\"\n [configTitle]=\"configTitle\"\n [configSections]=\"configSections\"\n [configSectionsRow2]=\"configSectionsRow2\"\n [platform]=\"platform\"\n [selectConfigOverrides]=\"selectConfigOverrides\"\n (save)=\"onSaveChanges($event)\"\n (cancel)=\"onCancelEdit()\"\n (selectSearch)=\"selectSearch.emit($event)\"\n (selectLoadMore)=\"selectLoadMore.emit($event)\"\n (selectOpened)=\"selectOpened.emit($event)\"\n (selectionChange)=\"selectionChange.emit($event)\">\n</cqa-test-case-details-edit>\n\n<!-- View mode: read-only details -->\n<div *ngIf=\"!editing\" class=\"cqa-self-stretch cqa-py-4 cqa-px-0 cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-4 cqa-overflow-hidden cqa-text-sm cqa-leading-[19.6px]\">\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n <!-- Description Section -->\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-inline-flex cqa-justify-between cqa-items-center\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">description</mat-icon>\n </div>\n <span class=\"cqa-text-[#374151] cqa-text-sm cqa-font-semibold cqa-leading-[19.6px]\">{{ descriptionTitle }}</span>\n </div>\n <button\n *ngIf=\"showEditButton\"\n type=\"button\"\n class=\"cqa-flex cqa-justify-end cqa-items-center cqa-gap-2 cqa-text-[#A3A3A3] cqa-text-xs cqa-font-semibold hover:cqa-text-[#737373] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onEditClick()\">\n <mat-icon class=\"cqa-text-[14px] cqa-w-4 cqa-h-4\">edit</mat-icon>\n Edit\n </button>\n </div>\n <div *ngIf=\"descriptionContent\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start\">\n <div class=\"cqa-self-stretch cqa-text-[#111827] cqa-text-sm cqa-leading-[19.6px] cqa-font-normal\">{{ descriptionContent }}</div>\n </div>\n </div>\n\n <!-- Metadata Section -->\n <div *ngIf=\"metadataItems.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-grid cqa-grid-cols-3 cqa-gap-x-0 cqa-gap-y-4\">\n <ng-container *ngFor=\"let item of metadataItems; trackBy: trackByMetadataLabel\">\n <div class=\"cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-0.5\">\n <div class=\"cqa-text-[#6B7280] cqa-text-xs cqa-leading-[15px] cqa-font-medium\">{{ item.label }}</div>\n <div class=\"cqa-flex cqa-justify-start cqa-items-center cqa-gap-2.5 cqa-min-w-0 cqa-w-full\">\n <mat-icon *ngIf=\"item.icon && (!item.iconLibrary || item.iconLibrary === 'mat')\" class=\"cqa-text-[#6B7280] cqa-text-sm cqa-w-4 cqa-h-4\">\n {{ item.icon }}\n </mat-icon>\n <span *ngIf=\"item.statusColor\" class=\"cqa-w-3.5 cqa-h-3.5 cqa-rounded-full cqa-flex-shrink-0\" [ngClass]=\"getStatusDotClass(item)\"></span>\n <a\n *ngIf=\"item.link\"\n href=\"javascript:void(0)\"\n class=\"cqa-text-[#2563EB] cqa-text-xs cqa-leading-[12px] cqa-font-normal hover:cqa-underline cqa-cursor-pointer cqa-block cqa-truncate cqa-min-w-0\"\n (click)=\"onMetadataLinkClick(item); $event.preventDefault()\">\n {{ item.value }}\n </a>\n <span *ngIf=\"!item.link\" class=\"cqa-text-xs cqa-leading-[12px] cqa-font-normal\" [ngClass]=\"getValueTextClass(item)\">\n {{ item.value }}\n </span>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Labels (Figma: Labels title, cqa-badge chips with tag icon) -->\n <div *ngIf=\"labels.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2 cqa-text-sm cqa-leading-[19.6px]\">\n <span class=\"cqa-text-[#111827] cqa-text-sm cqa-font-medium cqa-leading-5\">Labels</span>\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2\">\n <cqa-badge\n *ngFor=\"let label of labels\"\n [label]=\"label\"\n icon=\"label\"\n variant=\"outline\"\n size=\"small\"\n backgroundColor=\"#ffffff\"\n textColor=\"#475569\"\n borderColor=\"#E2E8F0\"\n iconColor=\"#94A3B8\">\n </cqa-badge>\n </div>\n </div>\n\n <!-- Configuration Section -->\n <div *ngIf=\"configSections.length || configSectionsRow2.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-inline-flex cqa-justify-start cqa-items-center\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">settings</mat-icon>\n </div>\n <span class=\"cqa-text-[#374151] cqa-text-sm cqa-font-semibold cqa-leading-[19.6px]\">{{ configTitle }}</span>\n </div>\n </div>\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-grid cqa-grid-cols-1 cqa-gap-2.5\">\n <ng-container *ngFor=\"let section of configSections; trackBy: trackByConfigTitle\">\n <cqa-configuration-card\n [icon]=\"section.icon || 'tune'\"\n [title]=\"section.title\"\n [data]=\"section.items\">\n </cqa-configuration-card>\n </ng-container>\n </div>\n <div *ngIf=\"configSectionsRow2.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n <cqa-configuration-card\n *ngFor=\"let section of configSectionsRow2; trackBy: trackByConfigTitle\"\n [icon]=\"section.icon || 'tune'\"\n [title]=\"section.title\"\n [data]=\"section.items\">\n </cqa-configuration-card>\n </div>\n </div>\n </div>\n </div>\n</div>\n", components: [{ type: i1.TestCaseDetailsEditComponent, selector: "cqa-test-case-details-edit", inputs: ["descriptionTitle", "descriptionContent", "metadataItems", "labels", "configTitle", "configSections", "configSectionsRow2", "prerequisiteCaseOptions", "platform", "selectConfigOverrides"], outputs: ["save", "cancel", "selectSearch", "selectLoadMore", "selectOpened", "selectionChange"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i3.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading"] }, { type: i4.ConfigurationCardComponent, selector: "cqa-configuration-card", inputs: ["icon", "title", "data"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
98
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestCaseDetailsComponent, decorators: [{
|
|
99
|
+
type: Component,
|
|
100
|
+
args: [{ selector: 'cqa-test-case-details', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- Edit mode: show edit form (Figma design) -->\n<cqa-test-case-details-edit\n *ngIf=\"editing\"\n [descriptionTitle]=\"descriptionTitle\"\n [descriptionContent]=\"descriptionContent\"\n [metadataItems]=\"metadataItems\"\n [labels]=\"labels\"\n [configTitle]=\"configTitle\"\n [configSections]=\"configSections\"\n [configSectionsRow2]=\"configSectionsRow2\"\n [platform]=\"platform\"\n [selectConfigOverrides]=\"selectConfigOverrides\"\n (save)=\"onSaveChanges($event)\"\n (cancel)=\"onCancelEdit()\"\n (selectSearch)=\"selectSearch.emit($event)\"\n (selectLoadMore)=\"selectLoadMore.emit($event)\"\n (selectOpened)=\"selectOpened.emit($event)\"\n (selectionChange)=\"selectionChange.emit($event)\">\n</cqa-test-case-details-edit>\n\n<!-- View mode: read-only details -->\n<div *ngIf=\"!editing\" class=\"cqa-self-stretch cqa-py-4 cqa-px-0 cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-4 cqa-overflow-hidden cqa-text-sm cqa-leading-[19.6px]\">\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n <!-- Description Section -->\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-inline-flex cqa-justify-between cqa-items-center\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">description</mat-icon>\n </div>\n <span class=\"cqa-text-[#374151] cqa-text-sm cqa-font-semibold cqa-leading-[19.6px]\">{{ descriptionTitle }}</span>\n </div>\n <button\n *ngIf=\"showEditButton\"\n type=\"button\"\n class=\"cqa-flex cqa-justify-end cqa-items-center cqa-gap-2 cqa-text-[#A3A3A3] cqa-text-xs cqa-font-semibold hover:cqa-text-[#737373] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onEditClick()\">\n <mat-icon class=\"cqa-text-[14px] cqa-w-4 cqa-h-4\">edit</mat-icon>\n Edit\n </button>\n </div>\n <div *ngIf=\"descriptionContent\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start\">\n <div class=\"cqa-self-stretch cqa-text-[#111827] cqa-text-sm cqa-leading-[19.6px] cqa-font-normal\">{{ descriptionContent }}</div>\n </div>\n </div>\n\n <!-- Metadata Section -->\n <div *ngIf=\"metadataItems.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-grid cqa-grid-cols-3 cqa-gap-x-0 cqa-gap-y-4\">\n <ng-container *ngFor=\"let item of metadataItems; trackBy: trackByMetadataLabel\">\n <div class=\"cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-0.5\">\n <div class=\"cqa-text-[#6B7280] cqa-text-xs cqa-leading-[15px] cqa-font-medium\">{{ item.label }}</div>\n <div class=\"cqa-flex cqa-justify-start cqa-items-center cqa-gap-2.5 cqa-min-w-0 cqa-w-full\">\n <mat-icon *ngIf=\"item.icon && (!item.iconLibrary || item.iconLibrary === 'mat')\" class=\"cqa-text-[#6B7280] cqa-text-sm cqa-w-4 cqa-h-4\">\n {{ item.icon }}\n </mat-icon>\n <span *ngIf=\"item.statusColor\" class=\"cqa-w-3.5 cqa-h-3.5 cqa-rounded-full cqa-flex-shrink-0\" [ngClass]=\"getStatusDotClass(item)\"></span>\n <a\n *ngIf=\"item.link\"\n href=\"javascript:void(0)\"\n class=\"cqa-text-[#2563EB] cqa-text-xs cqa-leading-[12px] cqa-font-normal hover:cqa-underline cqa-cursor-pointer cqa-block cqa-truncate cqa-min-w-0\"\n (click)=\"onMetadataLinkClick(item); $event.preventDefault()\">\n {{ item.value }}\n </a>\n <span *ngIf=\"!item.link\" class=\"cqa-text-xs cqa-leading-[12px] cqa-font-normal\" [ngClass]=\"getValueTextClass(item)\">\n {{ item.value }}\n </span>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Labels (Figma: Labels title, cqa-badge chips with tag icon) -->\n <div *ngIf=\"labels.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2 cqa-text-sm cqa-leading-[19.6px]\">\n <span class=\"cqa-text-[#111827] cqa-text-sm cqa-font-medium cqa-leading-5\">Labels</span>\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2\">\n <cqa-badge\n *ngFor=\"let label of labels\"\n [label]=\"label\"\n icon=\"label\"\n variant=\"outline\"\n size=\"small\"\n backgroundColor=\"#ffffff\"\n textColor=\"#475569\"\n borderColor=\"#E2E8F0\"\n iconColor=\"#94A3B8\">\n </cqa-badge>\n </div>\n </div>\n\n <!-- Configuration Section -->\n <div *ngIf=\"configSections.length || configSectionsRow2.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-inline-flex cqa-justify-start cqa-items-center\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">settings</mat-icon>\n </div>\n <span class=\"cqa-text-[#374151] cqa-text-sm cqa-font-semibold cqa-leading-[19.6px]\">{{ configTitle }}</span>\n </div>\n </div>\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-grid cqa-grid-cols-1 cqa-gap-2.5\">\n <ng-container *ngFor=\"let section of configSections; trackBy: trackByConfigTitle\">\n <cqa-configuration-card\n [icon]=\"section.icon || 'tune'\"\n [title]=\"section.title\"\n [data]=\"section.items\">\n </cqa-configuration-card>\n </ng-container>\n </div>\n <div *ngIf=\"configSectionsRow2.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n <cqa-configuration-card\n *ngFor=\"let section of configSectionsRow2; trackBy: trackByConfigTitle\"\n [icon]=\"section.icon || 'tune'\"\n [title]=\"section.title\"\n [data]=\"section.items\">\n </cqa-configuration-card>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [] }]
|
|
101
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { startInEditMode: [{
|
|
102
|
+
type: Input
|
|
103
|
+
}], descriptionTitle: [{
|
|
104
|
+
type: Input
|
|
105
|
+
}], descriptionContent: [{
|
|
106
|
+
type: Input
|
|
107
|
+
}], showEditButton: [{
|
|
108
|
+
type: Input
|
|
109
|
+
}], metadataItems: [{
|
|
110
|
+
type: Input
|
|
111
|
+
}], labels: [{
|
|
112
|
+
type: Input
|
|
113
|
+
}], configTitle: [{
|
|
114
|
+
type: Input
|
|
115
|
+
}], configSections: [{
|
|
116
|
+
type: Input
|
|
117
|
+
}], configSectionsRow2: [{
|
|
118
|
+
type: Input
|
|
119
|
+
}], platform: [{
|
|
120
|
+
type: Input
|
|
121
|
+
}], selectConfigOverrides: [{
|
|
122
|
+
type: Input
|
|
123
|
+
}], editDescription: [{
|
|
124
|
+
type: Output
|
|
125
|
+
}], saveChanges: [{
|
|
126
|
+
type: Output
|
|
127
|
+
}], metadataLinkClick: [{
|
|
128
|
+
type: Output
|
|
129
|
+
}], selectSearch: [{
|
|
130
|
+
type: Output
|
|
131
|
+
}], selectLoadMore: [{
|
|
132
|
+
type: Output
|
|
133
|
+
}], selectOpened: [{
|
|
134
|
+
type: Output
|
|
135
|
+
}], selectionChange: [{
|
|
136
|
+
type: Output
|
|
137
|
+
}] } });
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLWRldGFpbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy90ZXN0LWNhc2UtZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtY2FzZS1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEdBR3hCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBZ0J2QixNQUFNLE9BQU8sd0JBQXdCO0lBT25DLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBTjFDLDRDQUE0QztRQUM1QyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCLDREQUE0RDtRQUNuRCxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQVNqQyxnQ0FBZ0M7UUFDdkIscUJBQWdCLEdBQUcsYUFBYSxDQUFDO1FBRTFDLCtCQUErQjtRQUN0Qix1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFFakMsZ0VBQWdFO1FBQ3ZELG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRWhDLDZGQUE2RjtRQUNwRixrQkFBYSxHQUFrQyxFQUFFLENBQUM7UUFFM0QscURBQXFEO1FBQzVDLFdBQU0sR0FBYSxFQUFFLENBQUM7UUFFL0Isa0NBQWtDO1FBQ3pCLGdCQUFXLEdBQUcsZUFBZSxDQUFDO1FBRXZDLGdFQUFnRTtRQUN2RCxtQkFBYyxHQUFtQyxFQUFFLENBQUM7UUFFN0QsMEZBQTBGO1FBQ2pGLHVCQUFrQixHQUFtQyxFQUFFLENBQUM7UUFDakUsdUZBQXVGO1FBQzlFLGFBQVEsR0FBcUIsS0FBSyxDQUFDO1FBRTVDLG1GQUFtRjtRQUMxRSwwQkFBcUIsR0FBMEIsRUFBRSxDQUFDO1FB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aEIsS0FBSztnQkFHRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb24sXG4gIFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbSxcbn0gZnJvbSAnLi90ZXN0LWNhc2UtZGV0YWlscy5tb2RlbHMnO1xuaW1wb3J0IHtcbiAgVGVzdENhc2VEZXRhaWxzRWRpdEZvcm1EYXRhLFxuICBTZWxlY3RDb25maWdPdmVycmlkZXMsXG59IGZyb20gJy4vdGVzdC1jYXNlLWRldGFpbHMtZWRpdC90ZXN0LWNhc2UtZGV0YWlscy1lZGl0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS10ZXN0LWNhc2UtZGV0YWlscycsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXN0LWNhc2UtZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUZXN0Q2FzZURldGFpbHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKiogV2hldGhlciB0aGUgY29tcG9uZW50IGlzIGluIGVkaXQgbW9kZSAqL1xuICBlZGl0aW5nID0gZmFsc2U7XG5cbiAgLyoqIFdoZW4gdHJ1ZSwgc3RhcnQgaW4gZWRpdCBtb2RlICh1c2VmdWwgZm9yIFN0b3J5Ym9vaykuICovXG4gIEBJbnB1dCgpIHN0YXJ0SW5FZGl0TW9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGFydEluRWRpdE1vZGUpIHtcbiAgICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XG4gICAgfVxuICB9XG4gIC8qKiBEZXNjcmlwdGlvbiBzZWN0aW9uIHRpdGxlICovXG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uVGl0bGUgPSAnRGVzY3JpcHRpb24nO1xuXG4gIC8qKiBEZXNjcmlwdGlvbiB0ZXh0IGNvbnRlbnQgKi9cbiAgQElucHV0KCkgZGVzY3JpcHRpb25Db250ZW50ID0gJyc7XG5cbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyB0aGUgRWRpdCBidXR0b24gaW4gdGhlIERlc2NyaXB0aW9uIGhlYWRlciAqL1xuICBASW5wdXQoKSBzaG93RWRpdEJ1dHRvbiA9IGZhbHNlO1xuXG4gIC8qKiBNZXRhZGF0YSBpdGVtcyAoY3JlYXRlZE9uLCBzdGF0dXMsIHByaW9yaXR5LCBlbnZpcm9ubWVudCwgdmVyc2lvbiwgdGVzdFBsYW5OYW1lLCBldGMuKSAqL1xuICBASW5wdXQoKSBtZXRhZGF0YUl0ZW1zOiBUZXN0Q2FzZURldGFpbHNNZXRhZGF0YUl0ZW1bXSA9IFtdO1xuXG4gIC8qKiBMYWJlbHMvdGFncyAoZS5nLiBBdXRvbWF0aW9uLCBBUEksIFNESywgVUkvVVgpICovXG4gIEBJbnB1dCgpIGxhYmVsczogc3RyaW5nW10gPSBbXTtcblxuICAvKiogQ29uZmlndXJhdGlvbiBzZWN0aW9uIHRpdGxlICovXG4gIEBJbnB1dCgpIGNvbmZpZ1RpdGxlID0gJ0NvbmZpZ3VyYXRpb24nO1xuXG4gIC8qKiBDb25maWd1cmF0aW9uIHNlY3Rpb25zIChlLmcuIEV4ZWN1dGlvbiwgQUkgQ29uZmlndXJhdGlvbikgKi9cbiAgQElucHV0KCkgY29uZmlnU2VjdGlvbnM6IFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb25bXSA9IFtdO1xuXG4gIC8qKiBPcHRpb25hbCBjb25maWcgc2VjdGlvbnMgZGlzcGxheWVkIGluIGEgMi1jb2x1bW4gcm93IChlLmcuIFdhaXRzICYgUmV0cmllcywgRGV2aWNlKSAqL1xuICBASW5wdXQoKSBjb25maWdTZWN0aW9uc1JvdzI6IFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb25bXSA9IFtdO1xuICAvKiogUGxhdGZvcm06ICd3ZWInIG9yICdtb2JpbGUnLiBEZWZhdWx0cyB0byAnd2ViJy4gVXNlZCBmb3IgRGV2aWNlIFNldHRpbmdzIGZpZWxkcy4gKi9cbiAgQElucHV0KCkgcGxhdGZvcm06ICd3ZWInIHwgJ21vYmlsZScgPSAnd2ViJztcblxuICAvKiogT3ZlcnJpZGUgY29uZmlnIHBlciBzZWxlY3QgZm9yIEFQSS1kcml2ZW4gb3B0aW9ucywgc2VydmVyIHNlYXJjaCwgbG9hZCBtb3JlLiAqL1xuICBASW5wdXQoKSBzZWxlY3RDb25maWdPdmVycmlkZXM6IFNlbGVjdENvbmZpZ092ZXJyaWRlcyA9IHt9O1xuXG4gIEBPdXRwdXQoKSBlZGl0RGVzY3JpcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzYXZlQ2hhbmdlcyA9IG5ldyBFdmVudEVtaXR0ZXI8VGVzdENhc2VEZXRhaWxzRWRpdEZvcm1EYXRhPigpO1xuICBAT3V0cHV0KCkgbWV0YWRhdGFMaW5rQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdFNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZzsgcXVlcnk6IHN0cmluZyB9PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0TG9hZE1vcmUgPSBuZXcgRXZlbnRFbWl0dGVyPHsga2V5OiBzdHJpbmc7IHF1ZXJ5OiBzdHJpbmcgfT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdE9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZyB9PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9PigpO1xuXG4gIG9uRWRpdENsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuZWRpdERlc2NyaXB0aW9uLmVtaXQoKTtcbiAgfVxuXG4gIG9uU2F2ZUNoYW5nZXMoZGF0YTogVGVzdENhc2VEZXRhaWxzRWRpdEZvcm1EYXRhKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc2F2ZUNoYW5nZXMuZW1pdChkYXRhKTtcbiAgfVxuXG4gIG9uQ2FuY2VsRWRpdCgpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICB0cmFja0J5Q29uZmlnVGl0bGUoX2k6IG51bWJlciwgc2VjdGlvbjogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNlY3Rpb24udGl0bGU7XG4gIH1cblxuICB0cmFja0J5TWV0YWRhdGFMYWJlbChfaTogbnVtYmVyLCBpdGVtOiBUZXN0Q2FzZURldGFpbHNNZXRhZGF0YUl0ZW0pOiBzdHJpbmcge1xuICAgIHJldHVybiBpdGVtLmxhYmVsO1xuICB9XG5cblxuICBvbk1ldGFkYXRhTGlua0NsaWNrKGl0ZW06IFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbSk6IHZvaWQge1xuICAgIGlmIChpdGVtLmxpbmspIHtcbiAgICAgIHRoaXMubWV0YWRhdGFMaW5rQ2xpY2suZW1pdChpdGVtKTtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0dXNEb3RDbGFzcyhpdGVtOiBUZXN0Q2FzZURldGFpbHNNZXRhZGF0YUl0ZW0pOiBzdHJpbmcge1xuICAgIGlmICghaXRlbS5zdGF0dXNDb2xvcikgcmV0dXJuICcnO1xuICAgIHN3aXRjaCAoaXRlbS5zdGF0dXNDb2xvcikge1xuICAgICAgY2FzZSAneWVsbG93JzpcbiAgICAgICAgcmV0dXJuICdjcWEtYmctWyNFQUIzMDhdJztcbiAgICAgIGNhc2UgJ3JlZCc6XG4gICAgICAgIHJldHVybiAnY3FhLWJnLVsjREMyNjI2XSc7XG4gICAgICBjYXNlICdncmVlbic6XG4gICAgICAgIHJldHVybiAnY3FhLWJnLVsjMTZBMzRBXSc7XG4gICAgICBjYXNlICdncmF5JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnY3FhLWJnLVsjOTRBM0I4XSc7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRleHQgY29sb3IgZm9yIG1ldGFkYXRhIHZhbHVlIChlLmcuIHJlZCBmb3IgY3JpdGljYWwgcHJpb3JpdHkpICovXG4gIGdldFZhbHVlVGV4dENsYXNzKGl0ZW06IFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbSk6IHN0cmluZyB7XG4gICAgaWYgKGl0ZW0uc3RhdHVzQ29sb3IgPT09ICdyZWQnKSB7XG4gICAgICByZXR1cm4gJ2NxYS10ZXh0LVsjREMyNjI2XSc7XG4gICAgfVxuICAgIHJldHVybiAnY3FhLXRleHQtWyMxMTE4MjddJztcbiAgfVxufVxuIiwiPCEtLSBFZGl0IG1vZGU6IHNob3cgZWRpdCBmb3JtIChGaWdtYSBkZXNpZ24pIC0tPlxuPGNxYS10ZXN0LWNhc2UtZGV0YWlscy1lZGl0XG4gICpuZ0lmPVwiZWRpdGluZ1wiXG4gIFtkZXNjcmlwdGlvblRpdGxlXT1cImRlc2NyaXB0aW9uVGl0bGVcIlxuICBbZGVzY3JpcHRpb25Db250ZW50XT1cImRlc2NyaXB0aW9uQ29udGVudFwiXG4gIFttZXRhZGF0YUl0ZW1zXT1cIm1ldGFkYXRhSXRlbXNcIlxuICBbbGFiZWxzXT1cImxhYmVsc1wiXG4gIFtjb25maWdUaXRsZV09XCJjb25maWdUaXRsZVwiXG4gIFtjb25maWdTZWN0aW9uc109XCJjb25maWdTZWN0aW9uc1wiXG4gIFtjb25maWdTZWN0aW9uc1JvdzJdPVwiY29uZmlnU2VjdGlvbnNSb3cyXCJcbiAgW3BsYXRmb3JtXT1cInBsYXRmb3JtXCJcbiAgW3NlbGVjdENvbmZpZ092ZXJyaWRlc109XCJzZWxlY3RDb25maWdPdmVycmlkZXNcIlxuICAoc2F2ZSk9XCJvblNhdmVDaGFuZ2VzKCRldmVudClcIlxuICAoY2FuY2VsKT1cIm9uQ2FuY2VsRWRpdCgpXCJcbiAgKHNlbGVjdFNlYXJjaCk9XCJzZWxlY3RTZWFyY2guZW1pdCgkZXZlbnQpXCJcbiAgKHNlbGVjdExvYWRNb3JlKT1cInNlbGVjdExvYWRNb3JlLmVtaXQoJGV2ZW50KVwiXG4gIChzZWxlY3RPcGVuZWQpPVwic2VsZWN0T3BlbmVkLmVtaXQoJGV2ZW50KVwiXG4gIChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0aW9uQ2hhbmdlLmVtaXQoJGV2ZW50KVwiPlxuPC9jcWEtdGVzdC1jYXNlLWRldGFpbHMtZWRpdD5cblxuPCEtLSBWaWV3IG1vZGU6IHJlYWQtb25seSBkZXRhaWxzIC0tPlxuPGRpdiAqbmdJZj1cIiFlZGl0aW5nXCIgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1weS00IGNxYS1weC0wIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtanVzdGlmeS1zdGFydCBjcWEtaXRlbXMtc3RhcnQgY3FhLWdhcC00IGNxYS1vdmVyZmxvdy1oaWRkZW4gY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF1cIj5cbiAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTQgY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF1cIj5cbiAgICA8IS0tIERlc2NyaXB0aW9uIFNlY3Rpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTIuNVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWlubGluZS1mbGV4IGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXctNSBjcWEtaC01IGNxYS1wLTEgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWJnLVsjM0Y0M0VFMUFdIGNxYS1yb3VuZGVkLW1kIGNxYS1pbmxpbmUtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyMxQjFGRUJdIGNxYS10ZXh0LVsxMnB4XSBjcWEtdy0zIGNxYS1oLTMgY3FhLWxlYWRpbmctbm9uZSBjcWEtYmxvY2tcIj5kZXNjcmlwdGlvbjwvbWF0LWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bIzM3NDE1MV0gY3FhLXRleHQtc20gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWxlYWRpbmctWzE5LjZweF1cIj57eyBkZXNjcmlwdGlvblRpdGxlIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic2hvd0VkaXRCdXR0b25cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWp1c3RpZnktZW5kIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS10ZXh0LVsjQTNBM0EzXSBjcWEtdGV4dC14cyBjcWEtZm9udC1zZW1pYm9sZCBob3ZlcjpjcWEtdGV4dC1bIzczNzM3M10gY3FhLXRyYW5zaXRpb24tY29sb3JzIGZvY3VzOmNxYS1vdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpjcWEtcmluZy0yIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctWyMzRjQzRUVdIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctb2Zmc2V0LTJcIlxuICAgICAgICAgIChjbGljayk9XCJvbkVkaXRDbGljaygpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS13LTQgY3FhLWgtNFwiPmVkaXQ8L21hdC1pY29uPlxuICAgICAgICAgIEVkaXRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJkZXNjcmlwdGlvbkNvbnRlbnRcIiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXNlbGYtc3RyZXRjaCBjcWEtdGV4dC1bIzExMTgyN10gY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF0gY3FhLWZvbnQtbm9ybWFsXCI+e3sgZGVzY3JpcHRpb25Db250ZW50IH19PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gTWV0YWRhdGEgU2VjdGlvbiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwibWV0YWRhdGFJdGVtcy5sZW5ndGhcIiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTIuNVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWdyaWQgY3FhLWdyaWQtY29scy0zIGNxYS1nYXAteC0wIGNxYS1nYXAteS00XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbWV0YWRhdGFJdGVtczsgdHJhY2tCeTogdHJhY2tCeU1ldGFkYXRhTGFiZWxcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTAuNVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtdGV4dC14cyBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtXCI+e3sgaXRlbS5sYWJlbCB9fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yLjUgY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpdGVtLmljb24gJiYgKCFpdGVtLmljb25MaWJyYXJ5IHx8IGl0ZW0uaWNvbkxpYnJhcnkgPT09ICdtYXQnKVwiIGNsYXNzPVwiY3FhLXRleHQtWyM2QjcyODBdIGNxYS10ZXh0LXNtIGNxYS13LTQgY3FhLWgtNFwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0uaWNvbiB9fVxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0uc3RhdHVzQ29sb3JcIiBjbGFzcz1cImNxYS13LTMuNSBjcWEtaC0zLjUgY3FhLXJvdW5kZWQtZnVsbCBjcWEtZmxleC1zaHJpbmstMFwiIFtuZ0NsYXNzXT1cImdldFN0YXR1c0RvdENsYXNzKGl0ZW0pXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5saW5rXCJcbiAgICAgICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS10ZXh0LVsjMjU2M0VCXSBjcWEtdGV4dC14cyBjcWEtbGVhZGluZy1bMTJweF0gY3FhLWZvbnQtbm9ybWFsIGhvdmVyOmNxYS11bmRlcmxpbmUgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1ibG9jayBjcWEtdHJ1bmNhdGUgY3FhLW1pbi13LTBcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk1ldGFkYXRhTGlua0NsaWNrKGl0ZW0pOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0udmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpdGVtLmxpbmtcIiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS1sZWFkaW5nLVsxMnB4XSBjcWEtZm9udC1ub3JtYWxcIiBbbmdDbGFzc109XCJnZXRWYWx1ZVRleHRDbGFzcyhpdGVtKVwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0udmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIExhYmVscyAoRmlnbWE6IExhYmVscyB0aXRsZSwgY3FhLWJhZGdlIGNoaXBzIHdpdGggdGFnIGljb24pIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJsYWJlbHMubGVuZ3RoXCIgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtanVzdGlmeS1zdGFydCBjcWEtaXRlbXMtc3RhcnQgY3FhLWdhcC0yIGNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjMTExODI3XSBjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLWxlYWRpbmctNVwiPkxhYmVsczwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC13cmFwIGNxYS1nYXAtMlwiPlxuICAgICAgICA8Y3FhLWJhZGdlXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGxhYmVsIG9mIGxhYmVsc1wiXG4gICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICBpY29uPVwibGFiZWxcIlxuICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcj1cIiNmZmZmZmZcIlxuICAgICAgICAgIHRleHRDb2xvcj1cIiM0NzU1NjlcIlxuICAgICAgICAgIGJvcmRlckNvbG9yPVwiI0UyRThGMFwiXG4gICAgICAgICAgaWNvbkNvbG9yPVwiIzk0QTNCOFwiPlxuICAgICAgICA8L2NxYS1iYWRnZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDb25maWd1cmF0aW9uIFNlY3Rpb24gLS0+XG4gICAgPGRpdiAqbmdJZj1cImNvbmZpZ1NlY3Rpb25zLmxlbmd0aCB8fCBjb25maWdTZWN0aW9uc1JvdzIubGVuZ3RoXCIgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtanVzdGlmeS1zdGFydCBjcWEtaXRlbXMtc3RhcnQgY3FhLWdhcC0yLjVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1pbmxpbmUtZmxleCBjcWEtanVzdGlmeS1zdGFydCBjcWEtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdy01IGNxYS1oLTUgY3FhLXAtMSBjcWEtZmxleC1zaHJpbmstMCBjcWEtYmctWyMzRjQzRUUxQV0gY3FhLXJvdW5kZWQtbWQgY3FhLWlubGluZS1mbGV4IGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzFCMUZFQl0gY3FhLXRleHQtWzEycHhdIGNxYS13LTMgY3FhLWgtMyBjcWEtbGVhZGluZy1ub25lIGNxYS1ibG9ja1wiPnNldHRpbmdzPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjMzc0MTUxXSBjcWEtdGV4dC1zbSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtbGVhZGluZy1bMTkuNnB4XVwiPnt7IGNvbmZpZ1RpdGxlIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTIuNVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXNlbGYtc3RyZXRjaCBjcWEtZ3JpZCBjcWEtZ3JpZC1jb2xzLTEgY3FhLWdhcC0yLjVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIGNvbmZpZ1NlY3Rpb25zOyB0cmFja0J5OiB0cmFja0J5Q29uZmlnVGl0bGVcIj5cbiAgICAgICAgICAgIDxjcWEtY29uZmlndXJhdGlvbi1jYXJkXG4gICAgICAgICAgICAgIFtpY29uXT1cInNlY3Rpb24uaWNvbiB8fCAndHVuZSdcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwic2VjdGlvbi50aXRsZVwiXG4gICAgICAgICAgICAgIFtkYXRhXT1cInNlY3Rpb24uaXRlbXNcIj5cbiAgICAgICAgICAgIDwvY3FhLWNvbmZpZ3VyYXRpb24tY2FyZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJjb25maWdTZWN0aW9uc1JvdzIubGVuZ3RoXCIgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTQgY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF1cIj5cbiAgICAgICAgICA8Y3FhLWNvbmZpZ3VyYXRpb24tY2FyZFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgY29uZmlnU2VjdGlvbnNSb3cyOyB0cmFja0J5OiB0cmFja0J5Q29uZmlnVGl0bGVcIlxuICAgICAgICAgICAgW2ljb25dPVwic2VjdGlvbi5pY29uIHx8ICd0dW5lJ1wiXG4gICAgICAgICAgICBbdGl0bGVdPVwic2VjdGlvbi50aXRsZVwiXG4gICAgICAgICAgICBbZGF0YV09XCJzZWN0aW9uLml0ZW1zXCI+XG4gICAgICAgICAgPC9jcWEtY29uZmlndXJhdGlvbi1jYXJkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/** Default status value -> dot color. Override via BuildTestCaseDetailsOptions. */
|
|
2
|
+
export const DEFAULT_STATUS_COLOR_CONFIG = {
|
|
3
|
+
active: 'green',
|
|
4
|
+
inactive: 'gray',
|
|
5
|
+
pending: 'yellow',
|
|
6
|
+
completed: 'green',
|
|
7
|
+
'in review': 'yellow',
|
|
8
|
+
draft: 'gray',
|
|
9
|
+
approved: 'green',
|
|
10
|
+
rejected: 'red',
|
|
11
|
+
blocked: 'red',
|
|
12
|
+
'in progress': 'yellow',
|
|
13
|
+
done: 'green',
|
|
14
|
+
};
|
|
15
|
+
/** Default priority value -> dot color. Override via BuildTestCaseDetailsOptions. */
|
|
16
|
+
export const DEFAULT_PRIORITY_COLOR_CONFIG = {
|
|
17
|
+
critical: 'red',
|
|
18
|
+
major: 'red',
|
|
19
|
+
high: 'red',
|
|
20
|
+
medium: 'yellow',
|
|
21
|
+
low: 'green',
|
|
22
|
+
minor: 'green',
|
|
23
|
+
'not set': 'gray',
|
|
24
|
+
p0: 'red',
|
|
25
|
+
p1: 'yellow',
|
|
26
|
+
p2: 'green',
|
|
27
|
+
p3: 'gray',
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* API field names for mapping test case data to cqa-test-case-details.
|
|
31
|
+
* Use these when building metadataItems and configSections from your API response.
|
|
32
|
+
*/
|
|
33
|
+
export const TEST_CASE_DETAILS_FIELD_MAP = {
|
|
34
|
+
/** Metadata (description section) */
|
|
35
|
+
metadata: {
|
|
36
|
+
createdOn: 'createdOn',
|
|
37
|
+
status: 'status',
|
|
38
|
+
priority: 'priority',
|
|
39
|
+
environment: 'environment',
|
|
40
|
+
version: 'version',
|
|
41
|
+
platform: 'platform',
|
|
42
|
+
labels: 'labels',
|
|
43
|
+
},
|
|
44
|
+
/** Execution config */
|
|
45
|
+
execution: {
|
|
46
|
+
prerequisiteCase: 'prerequisiteCase',
|
|
47
|
+
defaultBrowser: 'defaultBrowser',
|
|
48
|
+
videoRecording: 'videoRecording',
|
|
49
|
+
testCaseTimeout: 'testCaseTimeout',
|
|
50
|
+
waitTimeoutForLocators: 'waitTimeoutForLocators',
|
|
51
|
+
webBrowser: 'webBrowser',
|
|
52
|
+
viewport: 'viewport',
|
|
53
|
+
},
|
|
54
|
+
/** AI Configuration */
|
|
55
|
+
aiConfig: {
|
|
56
|
+
enableAiSmartness: 'enableAiSmartness',
|
|
57
|
+
defaultAiAction: 'defaultAiAction',
|
|
58
|
+
knowledgeBaseDefaultTestCase: 'knowledgeBaseDefaultTestCase',
|
|
59
|
+
useAiMetadata: 'useAiMetadata',
|
|
60
|
+
},
|
|
61
|
+
/** Waits & Retries */
|
|
62
|
+
waitsRetries: {
|
|
63
|
+
autoWait: 'autoWait',
|
|
64
|
+
retryFailedSteps: 'retryFailedSteps',
|
|
65
|
+
},
|
|
66
|
+
/** Device */
|
|
67
|
+
device: {
|
|
68
|
+
platform: 'platform',
|
|
69
|
+
deviceType: 'deviceType',
|
|
70
|
+
deviceOS: 'deviceOS',
|
|
71
|
+
defaultBrowser: 'defaultBrowser',
|
|
72
|
+
defaultViewport: 'defaultViewport',
|
|
73
|
+
viewport: 'viewport',
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Build metadataItems and configSections from API data for cqa-test-case-details.
|
|
78
|
+
* Use in ts-portal when mapping test case API response to component inputs.
|
|
79
|
+
*/
|
|
80
|
+
export function buildTestCaseDetailsFromApi(data, options) {
|
|
81
|
+
const formatDate = (v) => v ? (typeof v === 'string' ? v : v.toISOString?.() ?? String(v)) : '';
|
|
82
|
+
const statusConfig = { ...DEFAULT_STATUS_COLOR_CONFIG, ...options?.statusColorConfig };
|
|
83
|
+
const priorityConfig = { ...DEFAULT_PRIORITY_COLOR_CONFIG, ...options?.priorityColorConfig };
|
|
84
|
+
const resolveColor = (value, config) => config[value.toLowerCase().trim()] ?? 'gray';
|
|
85
|
+
const metadataItems = [];
|
|
86
|
+
if (data.createdOn != null)
|
|
87
|
+
metadataItems.push({ label: 'Created on', value: formatDate(data.createdOn), icon: 'calendar_today' });
|
|
88
|
+
if (data.status != null)
|
|
89
|
+
metadataItems.push({ label: 'Status', value: data.status, statusColor: resolveColor(data.status, statusConfig) });
|
|
90
|
+
if (data.priority != null)
|
|
91
|
+
metadataItems.push({ label: 'Priority', value: data.priority, statusColor: resolveColor(data.priority, priorityConfig) });
|
|
92
|
+
if (data.environment != null)
|
|
93
|
+
metadataItems.push({ label: 'Environment', value: data.environment, icon: 'storage' });
|
|
94
|
+
if (data.version != null)
|
|
95
|
+
metadataItems.push({ label: 'Version', value: data.version, icon: 'label' });
|
|
96
|
+
if (data.platform != null)
|
|
97
|
+
metadataItems.push({
|
|
98
|
+
label: 'Platform',
|
|
99
|
+
value: data.platform === 'web' ? 'web' : 'iOS',
|
|
100
|
+
icon: 'devices',
|
|
101
|
+
});
|
|
102
|
+
const configSections = [
|
|
103
|
+
{
|
|
104
|
+
title: 'Execution',
|
|
105
|
+
icon: 'play_circle',
|
|
106
|
+
items: [
|
|
107
|
+
{ label: 'Prerequisite Case', value: data.prerequisiteCase ?? null },
|
|
108
|
+
{ label: 'Video Recording', value: data.videoRecording ?? '' },
|
|
109
|
+
],
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
title: 'AI Configuration',
|
|
113
|
+
icon: 'smart_toy',
|
|
114
|
+
items: [
|
|
115
|
+
{ label: 'Enable AI Smartness', value: data.enableAiSmartness ?? '' },
|
|
116
|
+
{ label: 'Default AI Action', value: data.defaultAiAction ?? '' },
|
|
117
|
+
{ label: 'Knowledge Base Default Test Case', value: data.knowledgeBaseDefaultTestCase ?? null },
|
|
118
|
+
{ label: 'Enable AI metadata collection', value: data.useAiMetadata ?? '' },
|
|
119
|
+
],
|
|
120
|
+
},
|
|
121
|
+
];
|
|
122
|
+
const configSectionsRow2 = [
|
|
123
|
+
{
|
|
124
|
+
title: 'Wait and retries',
|
|
125
|
+
icon: 'timer',
|
|
126
|
+
items: [
|
|
127
|
+
{ label: 'Enable Avoid Auto wait for steps', value: data.autoWaitEnabled ?? false },
|
|
128
|
+
{ label: 'Retry Failed Steps', value: data.retryFailedSteps ?? '' },
|
|
129
|
+
{ label: 'Test Case Timeout (minutes)', value: data.testCaseTimeout ?? '' },
|
|
130
|
+
{ label: 'Wait Timeout for Locators (secs)', value: data.waitTimeoutForLocators ?? '' },
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
title: 'Device Setting',
|
|
135
|
+
icon: 'devices',
|
|
136
|
+
items: (() => {
|
|
137
|
+
const platform = data.platform ?? 'web';
|
|
138
|
+
if (platform === 'web') {
|
|
139
|
+
return [
|
|
140
|
+
{ label: 'Default Browser', value: data.defaultBrowser ?? data.webBrowser ?? '' },
|
|
141
|
+
{ label: 'Default Viewport', value: data.defaultViewport ?? data.viewport ?? '' },
|
|
142
|
+
];
|
|
143
|
+
}
|
|
144
|
+
return [
|
|
145
|
+
{ label: 'Default OS', value: data.deviceOS ?? '' },
|
|
146
|
+
{ label: 'Default Phone', value: data.deviceType ?? '' },
|
|
147
|
+
];
|
|
148
|
+
})(),
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
title: 'Key Flags',
|
|
152
|
+
icon: 'flag',
|
|
153
|
+
items: [
|
|
154
|
+
{ label: 'Mobile Testing', value: data.mobileTesting ?? '' },
|
|
155
|
+
{ label: 'Extension Use', value: data.extensionUse ?? '' },
|
|
156
|
+
{ label: 'Data Driven', value: data.dataDriven ?? '' },
|
|
157
|
+
],
|
|
158
|
+
},
|
|
159
|
+
];
|
|
160
|
+
return {
|
|
161
|
+
metadataItems,
|
|
162
|
+
labels: data.labels ?? [],
|
|
163
|
+
configSections,
|
|
164
|
+
configSectionsRow2,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLWRldGFpbHMubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy90ZXN0LWNhc2UtZGV0YWlscy5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc0JBLG1GQUFtRjtBQUNuRixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBbUM7SUFDekUsTUFBTSxFQUFFLE9BQU87SUFDZixRQUFRLEVBQUUsTUFBTTtJQUNoQixPQUFPLEVBQUUsUUFBUTtJQUNqQixTQUFTLEVBQUUsT0FBTztJQUNsQixXQUFXLEVBQUUsUUFBUTtJQUNyQixLQUFLLEVBQUUsTUFBTTtJQUNiLFFBQVEsRUFBRSxPQUFPO0lBQ2pCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsT0FBTyxFQUFFLEtBQUs7SUFDZCxhQUFhLEVBQUUsUUFBUTtJQUN2QixJQUFJLEVBQUUsT0FBTztDQUNkLENBQUM7QUFFRixxRkFBcUY7QUFDckYsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQW1DO0lBQzNFLFFBQVEsRUFBRSxLQUFLO0lBQ2YsS0FBSyxFQUFFLEtBQUs7SUFDWixJQUFJLEVBQUUsS0FBSztJQUNYLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLEdBQUcsRUFBRSxPQUFPO0lBQ1osS0FBSyxFQUFFLE9BQU87SUFDZCxTQUFTLEVBQUUsTUFBTTtJQUNqQixFQUFFLEVBQUUsS0FBSztJQUNULEVBQUUsRUFBRSxRQUFRO0lBQ1osRUFBRSxFQUFFLE9BQU87SUFDWCxFQUFFLEVBQUUsTUFBTTtDQUNYLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRztJQUN6QyxxQ0FBcUM7SUFDckMsUUFBUSxFQUFFO1FBQ1IsU0FBUyxFQUFFLFdBQVc7UUFDdEIsTUFBTSxFQUFFLFFBQVE7UUFDaEIsUUFBUSxFQUFFLFVBQVU7UUFDcEIsV0FBVyxFQUFFLGFBQWE7UUFDMUIsT0FB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LEVBQUUsRUFBRTtxQkFDbEYsQ0FBQztpQkFDSDtnQkFDRCxPQUFPO29CQUNMLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUU7b0JBQ25ELEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLEVBQUU7aUJBQ3pELENBQUM7WUFDSixDQUFDLENBQUMsRUFBRTtTQUNMO1FBQ0Q7WUFDRSxLQUFLLEVBQUUsV0FBVztZQUNsQixJQUFJLEVBQUUsTUFBTTtZQUNaLEtBQUssRUFBRTtnQkFDTCxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLEVBQUU7Z0JBQzVELEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFFLEVBQUU7Z0JBQzFELEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLEVBQUU7YUFDdkQ7U0FDRjtLQUNGLENBQUM7SUFFRixPQUFPO1FBQ0wsYUFBYTtRQUNiLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUU7UUFDekIsY0FBYztRQUNkLGtCQUFrQjtLQUNuQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZ3VyYXRpb25JdGVtIH0gZnJvbSAnLi4vY29uZmlndXJhdGlvbi1jYXJkL2NvbmZpZ3VyYXRpb24tY2FyZC5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb24ge1xuICB0aXRsZTogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBpdGVtczogQ29uZmlndXJhdGlvbkl0ZW1bXTtcbn1cblxuZXhwb3J0IHR5cGUgU3RhdHVzRG90Q29sb3IgPSAneWVsbG93JyB8ICdyZWQnIHwgJ2dyZWVuJyB8ICdncmF5JztcblxuZXhwb3J0IGludGVyZmFjZSBUZXN0Q2FzZURldGFpbHNNZXRhZGF0YUl0ZW0ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBpY29uTGlicmFyeT86ICdtYXQnIHwgJ2ZhJztcbiAgbGluaz86IHN0cmluZztcbiAgc3RhdHVzQ29sb3I/OiBTdGF0dXNEb3RDb2xvcjtcbn1cblxuLyoqIE1hcHMgc3RhdHVzL3ByaW9yaXR5IHZhbHVlIChsb3dlcmNhc2UpIHRvIGRvdCBjb2xvci4gT3ZlcnJpZGUgdG8gY3VzdG9taXplLiAqL1xuZXhwb3J0IHR5cGUgU3RhdHVzQ29sb3JDb25maWcgPSBQYXJ0aWFsPFJlY29yZDxzdHJpbmcsIFN0YXR1c0RvdENvbG9yPj47XG5cbi8qKiBEZWZhdWx0IHN0YXR1cyB2YWx1ZSAtPiBkb3QgY29sb3IuIE92ZXJyaWRlIHZpYSBCdWlsZFRlc3RDYXNlRGV0YWlsc09wdGlvbnMuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9TVEFUVVNfQ09MT1JfQ09ORklHOiBSZWNvcmQ8c3RyaW5nLCBTdGF0dXNEb3RDb2xvcj4gPSB7XG4gIGFjdGl2ZTogJ2dyZWVuJyxcbiAgaW5hY3RpdmU6ICdncmF5JyxcbiAgcGVuZGluZzogJ3llbGxvdycsXG4gIGNvbXBsZXRlZDogJ2dyZWVuJyxcbiAgJ2luIHJldmlldyc6ICd5ZWxsb3cnLFxuICBkcmFmdDogJ2dyYXknLFxuICBhcHByb3ZlZDogJ2dyZWVuJyxcbiAgcmVqZWN0ZWQ6ICdyZWQnLFxuICBibG9ja2VkOiAncmVkJyxcbiAgJ2luIHByb2dyZXNzJzogJ3llbGxvdycsXG4gIGRvbmU6ICdncmVlbicsXG59O1xuXG4vKiogRGVmYXVsdCBwcmlvcml0eSB2YWx1ZSAtPiBkb3QgY29sb3IuIE92ZXJyaWRlIHZpYSBCdWlsZFRlc3RDYXNlRGV0YWlsc09wdGlvbnMuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9QUklPUklUWV9DT0xPUl9DT05GSUc6IFJlY29yZDxzdHJpbmcsIFN0YXR1c0RvdENvbG9yPiA9IHtcbiAgY3JpdGljYWw6ICdyZWQnLFxuICBtYWpvcjogJ3JlZCcsXG4gIGhpZ2g6ICdyZWQnLFxuICBtZWRpdW06ICd5ZWxsb3cnLFxuICBsb3c6ICdncmVlbicsXG4gIG1pbm9yOiAnZ3JlZW4nLFxuICAnbm90IHNldCc6ICdncmF5JyxcbiAgcDA6ICdyZWQnLFxuICBwMTogJ3llbGxvdycsXG4gIHAyOiAnZ3JlZW4nLFxuICBwMzogJ2dyYXknLFxufTtcblxuLyoqXG4gKiBBUEkgZmllbGQgbmFtZXMgZm9yIG1hcHBpbmcgdGVzdCBjYXNlIGRhdGEgdG8gY3FhLXRlc3QtY2FzZS1kZXRhaWxzLlxuICogVXNlIHRoZXNlIHdoZW4gYnVpbGRpbmcgbWV0YWRhdGFJdGVtcyBhbmQgY29uZmlnU2VjdGlvbnMgZnJvbSB5b3VyIEFQSSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFRFU1RfQ0FTRV9ERVRBSUxTX0ZJRUxEX01BUCA9IHtcbiAgLyoqIE1ldGFkYXRhIChkZXNjcmlwdGlvbiBzZWN0aW9uKSAqL1xuICBtZXRhZGF0YToge1xuICAgIGNyZWF0ZWRPbjogJ2NyZWF0ZWRPbicsXG4gICAgc3RhdHVzOiAnc3RhdHVzJyxcbiAgICBwcmlvcml0eTogJ3ByaW9yaXR5JyxcbiAgICBlbnZpcm9ubWVudDogJ2Vudmlyb25tZW50JyxcbiAgICB2ZXJzaW9uOiAndmVyc2lvbicsXG4gICAgcGxhdGZvcm06ICdwbGF0Zm9ybScsXG4gICAgbGFiZWxzOiAnbGFiZWxzJyxcbiAgfSxcbiAgLyoqIEV4ZWN1dGlvbiBjb25maWcgKi9cbiAgZXhlY3V0aW9uOiB7XG4gICAgcHJlcmVxdWlzaXRlQ2FzZTogJ3ByZXJlcXVpc2l0ZUNhc2UnLFxuICAgIGRlZmF1bHRCcm93c2VyOiAnZGVmYXVsdEJyb3dzZXInLFxuICAgIHZpZGVvUmVjb3JkaW5nOiAndmlkZW9SZWNvcmRpbmcnLFxuICAgIHRlc3RDYXNlVGltZW91dDogJ3Rlc3RDYXNlVGltZW91dCcsXG4gICAgd2FpdFRpbWVvdXRGb3JMb2NhdG9yczogJ3dhaXRUaW1lb3V0Rm9yTG9jYXRvcnMnLFxuICAgIHdlYkJyb3dzZXI6ICd3ZWJCcm93c2VyJyxcbiAgICB2aWV3cG9ydDogJ3ZpZXdwb3J0JyxcbiAgfSxcbiAgLyoqIEFJIENvbmZpZ3VyYXRpb24gKi9cbiAgYWlDb25maWc6IHtcbiAgICBlbmFibGVBaVNtYXJ0bmVzczogJ2VuYWJsZUFpU21hcnRuZXNzJyxcbiAgICBkZWZhdWx0QWlBY3Rpb246ICdkZWZhdWx0QWlBY3Rpb24nLFxuICAgIGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2U6ICdrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlJyxcbiAgICB1c2VBaU1ldGFkYXRhOiAndXNlQWlNZXRhZGF0YScsXG4gIH0sXG4gIC8qKiBXYWl0cyAmIFJldHJpZXMgKi9cbiAgd2FpdHNSZXRyaWVzOiB7XG4gICAgYXV0b1dhaXQ6ICdhdXRvV2FpdCcsXG4gICAgcmV0cnlGYWlsZWRTdGVwczogJ3JldHJ5RmFpbGVkU3RlcHMnLFxuICB9LFxuICAvKiogRGV2aWNlICovXG4gIGRldmljZToge1xuICAgIHBsYXRmb3JtOiAncGxhdGZvcm0nLFxuICAgIGRldmljZVR5cGU6ICdkZXZpY2VUeXBlJyxcbiAgICBkZXZpY2VPUzogJ2RldmljZU9TJyxcbiAgICBkZWZhdWx0QnJvd3NlcjogJ2RlZmF1bHRCcm93c2VyJyxcbiAgICBkZWZhdWx0Vmlld3BvcnQ6ICdkZWZhdWx0Vmlld3BvcnQnLFxuICAgIHZpZXdwb3J0OiAndmlld3BvcnQnLFxuICB9LFxufSBhcyBjb25zdDtcblxuLyoqIEFQSSByZXNwb25zZSBzaGFwZSBmb3IgdGVzdCBjYXNlIGRldGFpbHMuIE1hcCB5b3VyIEFQSSBmaWVsZHMgdG8gdGhpcyBzdHJ1Y3R1cmUuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RDYXNlRGV0YWlsc0FwaURhdGEge1xuICBjcmVhdGVkT24/OiBzdHJpbmcgfCBEYXRlO1xuICBzdGF0dXM/OiBzdHJpbmc7XG4gIHByaW9yaXR5Pzogc3RyaW5nO1xuICBlbnZpcm9ubWVudD86IHN0cmluZztcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgdGVzdFBsYW5OYW1lPzogc3RyaW5nO1xuICB0ZXN0UGxhblJlZGlyZWN0VXJsPzogc3RyaW5nO1xuICBsYWJlbHM/OiBzdHJpbmdbXTtcbiAgcHJlcmVxdWlzaXRlQ2FzZT86IHN0cmluZyB8IG51bGw7XG4gIGRlZmF1bHRCcm93c2VyPzogc3RyaW5nO1xuICB2aWRlb1JlY29yZGluZz86IGJvb2xlYW4gfCBzdHJpbmc7XG4gIHRlc3RDYXNlVGltZW91dD86IHN0cmluZztcbiAgd2FpdFRpbWVvdXRGb3JMb2NhdG9ycz86IHN0cmluZztcbiAgd2ViQnJvd3Nlcj86IHN0cmluZztcbiAgdmlld3BvcnQ/OiBzdHJpbmc7XG4gIGVuYWJsZUFpU21hcnRuZXNzPzogc3RyaW5nO1xuICBkZWZhdWx0QWlBY3Rpb24/OiBzdHJpbmc7XG4gIGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2U/OiBzdHJpbmcgfCBudWxsO1xuICB1c2VBaU1ldGFkYXRhPzogc3RyaW5nO1xuICBhdXRvV2FpdD86IHN0cmluZztcbiAgYXV0b1dhaXRFbmFibGVkPzogYm9vbGVhbjtcbiAgcmV0cnlGYWlsZWRTdGVwcz86IHN0cmluZztcbiAgcGxhdGZvcm0/OiAnd2ViJyB8ICdtb2JpbGUnO1xuICBkZXZpY2VUeXBlPzogc3RyaW5nO1xuICBkZXZpY2VPUz86IHN0cmluZztcbiAgZGVmYXVsdFZpZXdwb3J0Pzogc3RyaW5nO1xuICAvKiogS2V5IEZsYWdzICovXG4gIG1vYmlsZVRlc3Rpbmc/OiBzdHJpbmcgfCBib29sZWFuO1xuICBleHRlbnNpb25Vc2U/OiBzdHJpbmcgfCBib29sZWFuO1xuICBkYXRhRHJpdmVuPzogc3RyaW5nIHwgYm9vbGVhbjtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIGJ1aWxkVGVzdENhc2VEZXRhaWxzRnJvbUFwaSAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZFRlc3RDYXNlRGV0YWlsc09wdGlvbnMge1xuICAvKiogT3ZlcnJpZGUgc3RhdHVzIHZhbHVlIC0+IGRvdCBjb2xvci4gTWVyZ2VkIHdpdGggZGVmYXVsdHMuICovXG4gIHN0YXR1c0NvbG9yQ29uZmlnPzogU3RhdHVzQ29sb3JDb25maWc7XG4gIC8qKiBPdmVycmlkZSBwcmlvcml0eSB2YWx1ZSAtPiBkb3QgY29sb3IuIE1lcmdlZCB3aXRoIGRlZmF1bHRzLiAqL1xuICBwcmlvcml0eUNvbG9yQ29uZmlnPzogU3RhdHVzQ29sb3JDb25maWc7XG59XG5cbi8qKlxuICogQnVpbGQgbWV0YWRhdGFJdGVtcyBhbmQgY29uZmlnU2VjdGlvbnMgZnJvbSBBUEkgZGF0YSBmb3IgY3FhLXRlc3QtY2FzZS1kZXRhaWxzLlxuICogVXNlIGluIHRzLXBvcnRhbCB3aGVuIG1hcHBpbmcgdGVzdCBjYXNlIEFQSSByZXNwb25zZSB0byBjb21wb25lbnQgaW5wdXRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUZXN0Q2FzZURldGFpbHNGcm9tQXBpKFxuICBkYXRhOiBUZXN0Q2FzZURldGFpbHNBcGlEYXRhLFxuICBvcHRpb25zPzogQnVpbGRUZXN0Q2FzZURldGFpbHNPcHRpb25zXG4pOiB7XG4gIG1ldGFkYXRhSXRlbXM6IFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbVtdO1xuICBsYWJlbHM6IHN0cmluZ1tdO1xuICBjb25maWdTZWN0aW9uczogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbltdO1xuICBjb25maWdTZWN0aW9uc1JvdzI6IFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb25bXTtcbn0ge1xuICBjb25zdCBmb3JtYXREYXRlID0gKHY6IHN0cmluZyB8IERhdGUgfCB1bmRlZmluZWQpID0+XG4gICAgdiA/ICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyB2IDogKHYgYXMgRGF0ZSkudG9JU09TdHJpbmc/LigpID8/IFN0cmluZyh2KSkgOiAnJztcblxuICBjb25zdCBzdGF0dXNDb25maWcgPSB7IC4uLkRFRkFVTFRfU1RBVFVTX0NPTE9SX0NPTkZJRywgLi4ub3B0aW9ucz8uc3RhdHVzQ29sb3JDb25maWcgfTtcbiAgY29uc3QgcHJpb3JpdHlDb25maWcgPSB7IC4uLkRFRkFVTFRfUFJJT1JJVFlfQ09MT1JfQ09ORklHLCAuLi5vcHRpb25zPy5wcmlvcml0eUNvbG9yQ29uZmlnIH07XG4gIGNvbnN0IHJlc29sdmVDb2xvciA9ICh2YWx1ZTogc3RyaW5nLCBjb25maWc6IFBhcnRpYWw8UmVjb3JkPHN0cmluZywgU3RhdHVzRG90Q29sb3I+Pik6IFN0YXR1c0RvdENvbG9yID0+XG4gICAgY29uZmlnW3ZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpXSA/PyAnZ3JheSc7XG5cbiAgY29uc3QgbWV0YWRhdGFJdGVtczogVGVzdENhc2VEZXRhaWxzTWV0YWRhdGFJdGVtW10gPSBbXTtcbiAgaWYgKGRhdGEuY3JlYXRlZE9uICE9IG51bGwpXG4gICAgbWV0YWRhdGFJdGVtcy5wdXNoKHsgbGFiZWw6ICdDcmVhdGVkIG9uJywgdmFsdWU6IGZvcm1hdERhdGUoZGF0YS5jcmVhdGVkT24pLCBpY29uOiAnY2FsZW5kYXJfdG9kYXknIH0pO1xuICBpZiAoZGF0YS5zdGF0dXMgIT0gbnVsbClcbiAgICBtZXRhZGF0YUl0ZW1zLnB1c2goeyBsYWJlbDogJ1N0YXR1cycsIHZhbHVlOiBkYXRhLnN0YXR1cywgc3RhdHVzQ29sb3I6IHJlc29sdmVDb2xvcihkYXRhLnN0YXR1cywgc3RhdHVzQ29uZmlnKSB9KTtcbiAgaWYgKGRhdGEucHJpb3JpdHkgIT0gbnVsbClcbiAgICBtZXRhZGF0YUl0ZW1zLnB1c2goeyBsYWJlbDogJ1ByaW9yaXR5JywgdmFsdWU6IGRhdGEucHJpb3JpdHksIHN0YXR1c0NvbG9yOiByZXNvbHZlQ29sb3IoZGF0YS5wcmlvcml0eSwgcHJpb3JpdHlDb25maWcpIH0pO1xuICBpZiAoZGF0YS5lbnZpcm9ubWVudCAhPSBudWxsKVxuICAgIG1ldGFkYXRhSXRlbXMucHVzaCh7IGxhYmVsOiAnRW52aXJvbm1lbnQnLCB2YWx1ZTogZGF0YS5lbnZpcm9ubWVudCwgaWNvbjogJ3N0b3JhZ2UnIH0pO1xuICBpZiAoZGF0YS52ZXJzaW9uICE9IG51bGwpXG4gICAgbWV0YWRhdGFJdGVtcy5wdXNoKHsgbGFiZWw6ICdWZXJzaW9uJywgdmFsdWU6IGRhdGEudmVyc2lvbiwgaWNvbjogJ2xhYmVsJyB9KTtcbiAgaWYgKGRhdGEucGxhdGZvcm0gIT0gbnVsbClcbiAgICBtZXRhZGF0YUl0ZW1zLnB1c2goe1xuICAgICAgbGFiZWw6ICdQbGF0Zm9ybScsXG4gICAgICB2YWx1ZTogZGF0YS5wbGF0Zm9ybSA9PT0gJ3dlYicgPyAnd2ViJyA6ICdpT1MnLFxuICAgICAgaWNvbjogJ2RldmljZXMnLFxuICAgIH0pO1xuXG4gIGNvbnN0IGNvbmZpZ1NlY3Rpb25zOiBUZXN0Q2FzZURldGFpbHNDb25maWdTZWN0aW9uW10gPSBbXG4gICAge1xuICAgICAgdGl0bGU6ICdFeGVjdXRpb24nLFxuICAgICAgaWNvbjogJ3BsYXlfY2lyY2xlJyxcbiAgICAgIGl0ZW1zOiBbXG4gICAgICAgIHsgbGFiZWw6ICdQcmVyZXF1aXNpdGUgQ2FzZScsIHZhbHVlOiBkYXRhLnByZXJlcXVpc2l0ZUNhc2UgPz8gbnVsbCB9LFxuICAgICAgICB7IGxhYmVsOiAnVmlkZW8gUmVjb3JkaW5nJywgdmFsdWU6IGRhdGEudmlkZW9SZWNvcmRpbmcgPz8gJycgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogJ0FJIENvbmZpZ3VyYXRpb24nLFxuICAgICAgaWNvbjogJ3NtYXJ0X3RveScsXG4gICAgICBpdGVtczogW1xuICAgICAgICB7IGxhYmVsOiAnRW5hYmxlIEFJIFNtYXJ0bmVzcycsIHZhbHVlOiBkYXRhLmVuYWJsZUFpU21hcnRuZXNzID8/ICcnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IEFJIEFjdGlvbicsIHZhbHVlOiBkYXRhLmRlZmF1bHRBaUFjdGlvbiA/PyAnJyB9LFxuICAgICAgICB7IGxhYmVsOiAnS25vd2xlZGdlIEJhc2UgRGVmYXVsdCBUZXN0IENhc2UnLCB2YWx1ZTogZGF0YS5rbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlID8/IG51bGwgfSxcbiAgICAgICAgeyBsYWJlbDogJ0VuYWJsZSBBSSBtZXRhZGF0YSBjb2xsZWN0aW9uJywgdmFsdWU6IGRhdGEudXNlQWlNZXRhZGF0YSA/PyAnJyB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdO1xuXG4gIGNvbnN0IGNvbmZpZ1NlY3Rpb25zUm93MjogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbltdID0gW1xuICAgIHtcbiAgICAgIHRpdGxlOiAnV2FpdCBhbmQgcmV0cmllcycsXG4gICAgICBpY29uOiAndGltZXInLFxuICAgICAgaXRlbXM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0VuYWJsZSBBdm9pZCBBdXRvIHdhaXQgZm9yIHN0ZXBzJywgdmFsdWU6IGRhdGEuYXV0b1dhaXRFbmFibGVkID8/IGZhbHNlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZXRyeSBGYWlsZWQgU3RlcHMnLCB2YWx1ZTogZGF0YS5yZXRyeUZhaWxlZFN0ZXBzID8/ICcnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdUZXN0IENhc2UgVGltZW91dCAobWludXRlcyknLCB2YWx1ZTogZGF0YS50ZXN0Q2FzZVRpbWVvdXQgPz8gJycgfSxcbiAgICAgICAgeyBsYWJlbDogJ1dhaXQgVGltZW91dCBmb3IgTG9jYXRvcnMgKHNlY3MpJywgdmFsdWU6IGRhdGEud2FpdFRpbWVvdXRGb3JMb2NhdG9ycyA/PyAnJyB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnRGV2aWNlIFNldHRpbmcnLFxuICAgICAgaWNvbjogJ2RldmljZXMnLFxuICAgICAgaXRlbXM6ICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBsYXRmb3JtID0gZGF0YS5wbGF0Zm9ybSA/PyAnd2ViJztcbiAgICAgICAgaWYgKHBsYXRmb3JtID09PSAnd2ViJykge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBCcm93c2VyJywgdmFsdWU6IGRhdGEuZGVmYXVsdEJyb3dzZXIgPz8gZGF0YS53ZWJCcm93c2VyID8/ICcnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBWaWV3cG9ydCcsIHZhbHVlOiBkYXRhLmRlZmF1bHRWaWV3cG9ydCA/PyBkYXRhLnZpZXdwb3J0ID8/ICcnIH0sXG4gICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IE9TJywgdmFsdWU6IGRhdGEuZGV2aWNlT1MgPz8gJycgfSxcbiAgICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBQaG9uZScsIHZhbHVlOiBkYXRhLmRldmljZVR5cGUgPz8gJycgfSxcbiAgICAgICAgXTtcbiAgICAgIH0pKCksXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogJ0tleSBGbGFncycsXG4gICAgICBpY29uOiAnZmxhZycsXG4gICAgICBpdGVtczogW1xuICAgICAgICB7IGxhYmVsOiAnTW9iaWxlIFRlc3RpbmcnLCB2YWx1ZTogZGF0YS5tb2JpbGVUZXN0aW5nID8/ICcnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFeHRlbnNpb24gVXNlJywgdmFsdWU6IGRhdGEuZXh0ZW5zaW9uVXNlID8/ICcnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEYXRhIERyaXZlbicsIHZhbHVlOiBkYXRhLmRhdGFEcml2ZW4gPz8gJycgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgXTtcblxuICByZXR1cm4ge1xuICAgIG1ldGFkYXRhSXRlbXMsXG4gICAgbGFiZWxzOiBkYXRhLmxhYmVscyA/PyBbXSxcbiAgICBjb25maWdTZWN0aW9ucyxcbiAgICBjb25maWdTZWN0aW9uc1JvdzIsXG4gIH07XG59XG4iXX0=
|