@cqa-lib/cqa-ui 1.1.541-gamma.8 → 1.1.542
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/.github/workflows/README.md +1 -8
- package/esm2020/lib/compare-runs/compare-runs.component.mjs +1 -1
- package/esm2020/lib/execution-screen/condition-debug-step/condition-branch-editor.component.mjs +3 -32
- package/esm2020/lib/execution-screen/db-query-execution-item/db-query-execution-item.component.mjs +1 -1
- package/esm2020/lib/execution-screen/db-verification-step/db-verification-step.component.mjs +1 -1
- package/esm2020/lib/iterations-loop/iterations-loop.component.mjs +1 -1
- package/esm2020/lib/mixed-variable-input/mixed-variable-input.component.mjs +10 -30
- package/esm2020/lib/new-global-variable-dialog/new-global-variable-dialog.component.mjs +5 -16
- package/esm2020/lib/new-global-variable-dialog/new-global-variable-dialog.models.mjs +1 -1
- package/esm2020/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.component.mjs +51 -50
- package/esm2020/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.models.mjs +1 -1
- package/esm2020/lib/segment-control/segment-control.component.mjs +4 -12
- package/esm2020/lib/step-builder/step-builder-action/step-builder-action.component.mjs +3 -21
- package/esm2020/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.mjs +23 -47
- package/esm2020/lib/step-builder/step-builder-condition/step-builder-condition.component.mjs +3 -21
- package/esm2020/lib/step-builder/step-builder-database/step-builder-database.component.mjs +47 -76
- package/esm2020/lib/step-builder/step-builder-loop/step-builder-loop.component.mjs +3 -16
- package/esm2020/lib/step-builder/template-variables-form/template-variables-form.component.mjs +170 -326
- package/esm2020/lib/templates/table-template.component.mjs +3 -5
- package/esm2020/lib/test-case-details/ai-agent-step/ai-agent-step.component.mjs +3 -3
- package/esm2020/lib/test-case-details/ai-verify-step/ai-verify-step.component.mjs +3 -3
- package/esm2020/lib/test-case-details/api-edit-step/api-edit-step.component.mjs +7 -20
- package/esm2020/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.mjs +4 -43
- package/esm2020/lib/test-case-details/test-case-details.models.mjs +1 -3
- package/esm2020/lib/test-case-details/test-data-modal/test-data-modal-data.mjs +1 -1
- package/esm2020/lib/test-case-details/test-data-modal/test-data-modal.component.mjs +7 -137
- package/esm2020/lib/ui-kit.module.mjs +3 -23
- package/esm2020/public-api.mjs +1 -6
- package/fesm2015/cqa-lib-cqa-ui.mjs +404 -1245
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +330 -1156
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/execution-screen/condition-debug-step/condition-branch-editor.component.d.ts +1 -26
- package/lib/new-global-variable-dialog/new-global-variable-dialog.component.d.ts +2 -5
- package/lib/new-global-variable-dialog/new-global-variable-dialog.models.d.ts +0 -8
- package/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.component.d.ts +10 -9
- package/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.models.d.ts +1 -1
- package/lib/segment-control/segment-control.component.d.ts +1 -3
- package/lib/step-builder/step-builder-action/step-builder-action.component.d.ts +1 -19
- package/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.d.ts +2 -16
- package/lib/step-builder/step-builder-condition/step-builder-condition.component.d.ts +1 -19
- package/lib/step-builder/step-builder-database/step-builder-database.component.d.ts +11 -33
- package/lib/step-builder/step-builder-loop/step-builder-loop.component.d.ts +1 -15
- package/lib/step-builder/template-variables-form/template-variables-form.component.d.ts +20 -75
- package/lib/templates/table-template.component.d.ts +1 -8
- package/lib/test-case-details/api-edit-step/api-edit-step.component.d.ts +1 -7
- package/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.d.ts +0 -7
- package/lib/test-case-details/test-case-details.models.d.ts +0 -2
- package/lib/test-case-details/test-data-modal/test-data-modal-data.d.ts +1 -23
- package/lib/test-case-details/test-data-modal/test-data-modal.component.d.ts +6 -40
- package/lib/ui-kit.module.d.ts +96 -100
- package/package.json +1 -1
- package/public-api.d.ts +0 -5
- package/styles.css +1 -1
- package/esm2020/lib/new-global-variable-dialog/global-variable-tags-input.component.mjs +0 -129
- package/esm2020/lib/test-case-details/data-library-panel/data-library-panel.component.mjs +0 -116
- package/esm2020/lib/test-case-details/data-library-panel/data-library-panel.models.mjs +0 -2
- package/esm2020/lib/test-case-details/data-library-panel/element-card.component.mjs +0 -36
- package/esm2020/lib/test-case-details/data-library-panel/test-data-profile-card.component.mjs +0 -38
- package/lib/new-global-variable-dialog/global-variable-tags-input.component.d.ts +0 -39
- package/lib/test-case-details/data-library-panel/data-library-panel.component.d.ts +0 -42
- package/lib/test-case-details/data-library-panel/data-library-panel.models.d.ts +0 -17
- package/lib/test-case-details/data-library-panel/element-card.component.d.ts +0 -13
- package/lib/test-case-details/data-library-panel/test-data-profile-card.component.d.ts +0 -13
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "@angular/material/icon";
|
|
4
|
-
import * as i2 from "@angular/common";
|
|
5
|
-
/**
|
|
6
|
-
* Tag chip-list + autocomplete used by the New / Edit Global Variable dialog.
|
|
7
|
-
* Mirrors the React `TagsEditor` block in
|
|
8
|
-
* `Environment and Data Management_CD Deisgns/src/Global.jsx:179-237`:
|
|
9
|
-
*
|
|
10
|
-
* [chip × …] [+ Add tag] ← inactive state
|
|
11
|
-
* [chip × …] [_input_ ↳ suggestions] ← active state
|
|
12
|
-
*
|
|
13
|
-
* Behavior:
|
|
14
|
-
* - Backspace on an empty input removes the last tag.
|
|
15
|
-
* - Enter commits the trimmed lowercase value (creates if not in available).
|
|
16
|
-
* - Escape exits the input without committing.
|
|
17
|
-
* - Suggestions are computed from `availableTags`, capped at 4.
|
|
18
|
-
*/
|
|
19
|
-
export class GlobalVariableTagsInputComponent {
|
|
20
|
-
constructor(cdr) {
|
|
21
|
-
this.cdr = cdr;
|
|
22
|
-
this.tags = [];
|
|
23
|
-
this.availableTags = [];
|
|
24
|
-
this.tagsChange = new EventEmitter();
|
|
25
|
-
this.adding = false;
|
|
26
|
-
this.draft = '';
|
|
27
|
-
}
|
|
28
|
-
get suggestions() {
|
|
29
|
-
const typed = this.draft.trim().toLowerCase();
|
|
30
|
-
const taken = new Set((this.tags ?? []).map(t => t.toLowerCase()));
|
|
31
|
-
const pool = (this.availableTags ?? []).filter(t => !taken.has((t.name ?? '').toLowerCase()));
|
|
32
|
-
if (typed.length === 0) {
|
|
33
|
-
return pool.slice(0, 4);
|
|
34
|
-
}
|
|
35
|
-
return pool
|
|
36
|
-
.filter(t => (t.name ?? '').toLowerCase().startsWith(typed))
|
|
37
|
-
.slice(0, 4);
|
|
38
|
-
}
|
|
39
|
-
beginAdd() {
|
|
40
|
-
this.adding = true;
|
|
41
|
-
this.draft = '';
|
|
42
|
-
this.cdr.markForCheck();
|
|
43
|
-
setTimeout(() => this.tagInputRef?.nativeElement.focus(), 0);
|
|
44
|
-
}
|
|
45
|
-
onDraftChange(next) {
|
|
46
|
-
this.draft = next ?? '';
|
|
47
|
-
this.cdr.markForCheck();
|
|
48
|
-
}
|
|
49
|
-
onKeyDown(event) {
|
|
50
|
-
if (event.key === 'Enter') {
|
|
51
|
-
event.preventDefault();
|
|
52
|
-
this.commitDraft();
|
|
53
|
-
}
|
|
54
|
-
else if (event.key === 'Escape') {
|
|
55
|
-
event.preventDefault();
|
|
56
|
-
this.cancelAdd();
|
|
57
|
-
}
|
|
58
|
-
else if (event.key === 'Backspace' && !this.draft && this.tags.length > 0) {
|
|
59
|
-
event.preventDefault();
|
|
60
|
-
this.removeAt(this.tags.length - 1);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
onSuggestionMouseDown(event, suggestion) {
|
|
64
|
-
// mouseDown beats blur so the click registers before the input loses focus
|
|
65
|
-
event.preventDefault();
|
|
66
|
-
this.commit(suggestion.name);
|
|
67
|
-
}
|
|
68
|
-
onBlur() {
|
|
69
|
-
// Defer so suggestion click has a chance to fire first
|
|
70
|
-
setTimeout(() => {
|
|
71
|
-
if (!this.adding) {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
this.commitDraft();
|
|
75
|
-
}, 150);
|
|
76
|
-
}
|
|
77
|
-
removeAt(index) {
|
|
78
|
-
const next = (this.tags ?? []).filter((_, i) => i !== index);
|
|
79
|
-
this.tags = next;
|
|
80
|
-
this.tagsChange.emit(next);
|
|
81
|
-
this.cdr.markForCheck();
|
|
82
|
-
}
|
|
83
|
-
commitDraft() {
|
|
84
|
-
const raw = (this.draft ?? '').trim().toLowerCase();
|
|
85
|
-
if (!raw) {
|
|
86
|
-
this.cancelAdd();
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
this.commit(raw);
|
|
90
|
-
}
|
|
91
|
-
commit(name) {
|
|
92
|
-
const normalized = (name ?? '').trim().toLowerCase();
|
|
93
|
-
if (!normalized) {
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
const taken = new Set((this.tags ?? []).map(t => t.toLowerCase()));
|
|
97
|
-
if (taken.has(normalized)) {
|
|
98
|
-
this.cancelAdd();
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
const next = [...(this.tags ?? []), normalized];
|
|
102
|
-
this.tags = next;
|
|
103
|
-
this.tagsChange.emit(next);
|
|
104
|
-
this.draft = '';
|
|
105
|
-
this.adding = false;
|
|
106
|
-
this.cdr.markForCheck();
|
|
107
|
-
}
|
|
108
|
-
cancelAdd() {
|
|
109
|
-
this.adding = false;
|
|
110
|
-
this.draft = '';
|
|
111
|
-
this.cdr.markForCheck();
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
GlobalVariableTagsInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: GlobalVariableTagsInputComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
115
|
-
GlobalVariableTagsInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: GlobalVariableTagsInputComponent, selector: "lib-global-variable-tags-input", inputs: { tags: "tags", availableTags: "availableTags" }, outputs: { tagsChange: "tagsChange" }, host: { styleAttribute: "display:block;width:100%;", classAttribute: "cqa-ui-root" }, viewQueries: [{ propertyName: "tagInputRef", first: true, predicate: ["tagInput"], descendants: true }], ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-wrap cqa-items-center cqa-gap-1.5\">\n <!-- Selected tag chips -->\n <span *ngFor=\"let tag of tags; let i = index\"\n class=\"cqa-inline-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-0.5 cqa-rounded-full cqa-text-xs cqa-font-medium\"\n style=\"background:#FAE8FF;color:#6B21A8;\">\n <mat-icon class=\"!cqa-w-[12px] !cqa-h-[12px] !cqa-text-[12px] cqa-leading-[12px]\">sell</mat-icon>\n <span>{{ tag }}</span>\n <button type=\"button\"\n class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-rounded-full cqa-cursor-pointer hover:cqa-bg-[#E9D5FF]\"\n style=\"border:none;background:transparent;padding:0;\"\n (click)=\"removeAt(i)\"\n [attr.aria-label]=\"'Remove tag ' + tag\">\n <mat-icon class=\"!cqa-w-[12px] !cqa-h-[12px] !cqa-text-[12px] cqa-leading-[12px]\">close</mat-icon>\n </button>\n </span>\n\n <!-- Inactive: \"+ Add tag\" pill -->\n <button *ngIf=\"!adding\" type=\"button\"\n class=\"cqa-inline-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-0.5 cqa-rounded-full cqa-text-xs cqa-cursor-pointer\"\n style=\"border:1px dashed #D4D4D8;background:transparent;color:#52525B;\"\n (click)=\"beginAdd()\">\n <mat-icon class=\"!cqa-w-[12px] !cqa-h-[12px] !cqa-text-[12px] cqa-leading-[12px]\">add</mat-icon>\n <span>Add tag</span>\n </button>\n\n <!-- Active: input + suggestions. Input matches the dialog's other inputs:\n full-width row, 1px solid border, rounded; input border itself is the\n inner pill the user types into. Suggestion dropdown renders below. -->\n <div *ngIf=\"adding\" class=\"cqa-relative\" style=\"min-width:200px;\">\n <input #tagInput\n type=\"text\"\n class=\"cqa-px-3 cqa-py-1.5 cqa-rounded-md cqa-text-sm cqa-outline-none cqa-w-full\"\n style=\"border:1px solid #6366F1;box-shadow:0 0 0 3px rgba(99,102,241,0.12);\"\n placeholder=\"Tag\u2026\"\n [value]=\"draft\"\n (input)=\"onDraftChange($any($event.target).value)\"\n (keydown)=\"onKeyDown($event)\"\n (blur)=\"onBlur()\" />\n\n <div *ngIf=\"suggestions.length > 0\"\n class=\"cqa-absolute cqa-z-10 cqa-mt-1 cqa-bg-white cqa-rounded-md cqa-shadow-lg cqa-w-full\"\n style=\"border:1px solid #E5E7EB;max-height:220px;overflow-y:auto;left:0;\">\n <div *ngFor=\"let s of suggestions\"\n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-px-3 cqa-py-2 cqa-cursor-pointer hover:cqa-bg-[#F3F4F6]\"\n (mousedown)=\"onSuggestionMouseDown($event, s)\">\n <span class=\"cqa-inline-flex cqa-items-center cqa-gap-2 cqa-text-sm cqa-text-gray-800\">\n <mat-icon class=\"!cqa-w-[14px] !cqa-h-[14px] !cqa-text-[14px] cqa-leading-[14px]\" style=\"color:#6B21A8;\">sell</mat-icon>\n <span>{{ s.name }}</span>\n </span>\n <span *ngIf=\"s.count != null\" class=\"cqa-text-[11px] cqa-text-gray-400\">{{ s.count }}</span>\n </div>\n </div>\n </div>\n</div>\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
116
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: GlobalVariableTagsInputComponent, decorators: [{
|
|
117
|
-
type: Component,
|
|
118
|
-
args: [{ selector: 'lib-global-variable-tags-input', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root', style: 'display:block;width:100%;' }, template: "<div class=\"cqa-flex cqa-flex-wrap cqa-items-center cqa-gap-1.5\">\n <!-- Selected tag chips -->\n <span *ngFor=\"let tag of tags; let i = index\"\n class=\"cqa-inline-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-0.5 cqa-rounded-full cqa-text-xs cqa-font-medium\"\n style=\"background:#FAE8FF;color:#6B21A8;\">\n <mat-icon class=\"!cqa-w-[12px] !cqa-h-[12px] !cqa-text-[12px] cqa-leading-[12px]\">sell</mat-icon>\n <span>{{ tag }}</span>\n <button type=\"button\"\n class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-rounded-full cqa-cursor-pointer hover:cqa-bg-[#E9D5FF]\"\n style=\"border:none;background:transparent;padding:0;\"\n (click)=\"removeAt(i)\"\n [attr.aria-label]=\"'Remove tag ' + tag\">\n <mat-icon class=\"!cqa-w-[12px] !cqa-h-[12px] !cqa-text-[12px] cqa-leading-[12px]\">close</mat-icon>\n </button>\n </span>\n\n <!-- Inactive: \"+ Add tag\" pill -->\n <button *ngIf=\"!adding\" type=\"button\"\n class=\"cqa-inline-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-0.5 cqa-rounded-full cqa-text-xs cqa-cursor-pointer\"\n style=\"border:1px dashed #D4D4D8;background:transparent;color:#52525B;\"\n (click)=\"beginAdd()\">\n <mat-icon class=\"!cqa-w-[12px] !cqa-h-[12px] !cqa-text-[12px] cqa-leading-[12px]\">add</mat-icon>\n <span>Add tag</span>\n </button>\n\n <!-- Active: input + suggestions. Input matches the dialog's other inputs:\n full-width row, 1px solid border, rounded; input border itself is the\n inner pill the user types into. Suggestion dropdown renders below. -->\n <div *ngIf=\"adding\" class=\"cqa-relative\" style=\"min-width:200px;\">\n <input #tagInput\n type=\"text\"\n class=\"cqa-px-3 cqa-py-1.5 cqa-rounded-md cqa-text-sm cqa-outline-none cqa-w-full\"\n style=\"border:1px solid #6366F1;box-shadow:0 0 0 3px rgba(99,102,241,0.12);\"\n placeholder=\"Tag\u2026\"\n [value]=\"draft\"\n (input)=\"onDraftChange($any($event.target).value)\"\n (keydown)=\"onKeyDown($event)\"\n (blur)=\"onBlur()\" />\n\n <div *ngIf=\"suggestions.length > 0\"\n class=\"cqa-absolute cqa-z-10 cqa-mt-1 cqa-bg-white cqa-rounded-md cqa-shadow-lg cqa-w-full\"\n style=\"border:1px solid #E5E7EB;max-height:220px;overflow-y:auto;left:0;\">\n <div *ngFor=\"let s of suggestions\"\n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-px-3 cqa-py-2 cqa-cursor-pointer hover:cqa-bg-[#F3F4F6]\"\n (mousedown)=\"onSuggestionMouseDown($event, s)\">\n <span class=\"cqa-inline-flex cqa-items-center cqa-gap-2 cqa-text-sm cqa-text-gray-800\">\n <mat-icon class=\"!cqa-w-[14px] !cqa-h-[14px] !cqa-text-[14px] cqa-leading-[14px]\" style=\"color:#6B21A8;\">sell</mat-icon>\n <span>{{ s.name }}</span>\n </span>\n <span *ngIf=\"s.count != null\" class=\"cqa-text-[11px] cqa-text-gray-400\">{{ s.count }}</span>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
119
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { tags: [{
|
|
120
|
-
type: Input
|
|
121
|
-
}], availableTags: [{
|
|
122
|
-
type: Input
|
|
123
|
-
}], tagsChange: [{
|
|
124
|
-
type: Output
|
|
125
|
-
}], tagInputRef: [{
|
|
126
|
-
type: ViewChild,
|
|
127
|
-
args: ['tagInput']
|
|
128
|
-
}] } });
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLXZhcmlhYmxlLXRhZ3MtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9uZXctZ2xvYmFsLXZhcmlhYmxlLWRpYWxvZy9nbG9iYWwtdmFyaWFibGUtdGFncy1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL25ldy1nbG9iYWwtdmFyaWFibGUtZGlhbG9nL2dsb2JhbC12YXJpYWJsZS10YWdzLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQzs7OztBQUd2Qjs7Ozs7Ozs7Ozs7OztHQWFHO0FBT0gsTUFBTSxPQUFPLGdDQUFnQztJQVUzQyxZQUE2QixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQVQxQyxTQUFJLEdBQWEsRUFBRSxDQUFDO1FBQ3BCLGtCQUFhLEdBQThCLEVBQUUsQ0FBQztRQUM3QyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUlwRCxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2YsVUFBSyxHQUFHLEVBQUUsQ0FBQztJQUUyQyxDQUFDO0lBRXZELElBQUksV0FBVztRQUNiLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDOUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMs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QUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxTQUFTO1FBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDOzs2SEFuR1UsZ0NBQWdDO2lIQUFoQyxnQ0FBZ0Msc1dDaEM3QywyNkZBc0RBOzJGRHRCYSxnQ0FBZ0M7a0JBTjVDLFNBQVM7K0JBQ0UsZ0NBQWdDLG1CQUV6Qix1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsMkJBQTJCLEVBQUU7d0dBR3pELElBQUk7c0JBQVosS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU07Z0JBRWdCLFdBQVc7c0JBQWpDLFNBQVM7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHbG9iYWxWYXJpYWJsZVRhZ09wdGlvbiB9IGZyb20gJy4vbmV3LWdsb2JhbC12YXJpYWJsZS1kaWFsb2cubW9kZWxzJztcblxuLyoqXG4gKiBUYWcgY2hpcC1saXN0ICsgYXV0b2NvbXBsZXRlIHVzZWQgYnkgdGhlIE5ldyAvIEVkaXQgR2xvYmFsIFZhcmlhYmxlIGRpYWxvZy5cbiAqIE1pcnJvcnMgdGhlIFJlYWN0IGBUYWdzRWRpdG9yYCBibG9jayBpblxuICogYEVudmlyb25tZW50IGFuZCBEYXRhIE1hbmFnZW1lbnRfQ0QgRGVpc2ducy9zcmMvR2xvYmFsLmpzeDoxNzktMjM3YDpcbiAqXG4gKiAgIFtjaGlwIMOXIOKApl0gIFsrIEFkZCB0YWddICAg4oaQICBpbmFjdGl2ZSBzdGF0ZVxuICogICBbY2hpcCDDlyDigKZdICBbX2lucHV0XyAg4oazIHN1Z2dlc3Rpb25zXSAgIOKGkCAgYWN0aXZlIHN0YXRlXG4gKlxuICogQmVoYXZpb3I6XG4gKiAgIC0gQmFja3NwYWNlIG9uIGFuIGVtcHR5IGlucHV0IHJlbW92ZXMgdGhlIGxhc3QgdGFnLlxuICogICAtIEVudGVyIGNvbW1pdHMgdGhlIHRyaW1tZWQgbG93ZXJjYXNlIHZhbHVlIChjcmVhdGVzIGlmIG5vdCBpbiBhdmFpbGFibGUpLlxuICogICAtIEVzY2FwZSBleGl0cyB0aGUgaW5wdXQgd2l0aG91dCBjb21taXR0aW5nLlxuICogICAtIFN1Z2dlc3Rpb25zIGFyZSBjb21wdXRlZCBmcm9tIGBhdmFpbGFibGVUYWdzYCwgY2FwcGVkIGF0IDQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1nbG9iYWwtdmFyaWFibGUtdGFncy1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9nbG9iYWwtdmFyaWFibGUtdGFncy1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnLCBzdHlsZTogJ2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTsnIH0sXG59KVxuZXhwb3J0IGNsYXNzIEdsb2JhbFZhcmlhYmxlVGFnc0lucHV0Q29tcG9uZW50IHtcbiAgQElucHV0KCkgdGFnczogc3RyaW5nW10gPSBbXTtcbiAgQElucHV0KCkgYXZhaWxhYmxlVGFnczogR2xvYmFsVmFyaWFibGVUYWdPcHRpb25bXSA9IFtdO1xuICBAT3V0cHV0KCkgdGFnc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgQFZpZXdDaGlsZCgndGFnSW5wdXQnKSB0YWdJbnB1dFJlZj86IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgYWRkaW5nID0gZmFsc2U7XG4gIGRyYWZ0ID0gJyc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIGdldCBzdWdnZXN0aW9ucygpOiBHbG9iYWxWYXJpYWJsZVRhZ09wdGlvbltdIHtcbiAgICBjb25zdCB0eXBlZCA9IHRoaXMuZHJhZnQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgdGFrZW4gPSBuZXcgU2V0KCh0aGlzLnRhZ3MgPz8gW10pLm1hcCh0ID0+IHQudG9Mb3dlckNhc2UoKSkpO1xuICAgIGNvbnN0IHBvb2wgPSAodGhpcy5hdmFpbGFibGVUYWdzID8/IFtdKS5maWx0ZXIodCA9PiAhdGFrZW4uaGFzKCh0Lm5hbWUgPz8gJycpLnRvTG93ZXJDYXNlKCkpKTtcbiAgICBpZiAodHlwZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gcG9vbC5zbGljZSgwLCA0KTtcbiAgICB9XG4gICAgcmV0dXJuIHBvb2xcbiAgICAgIC5maWx0ZXIodCA9PiAodC5uYW1lID8/ICcnKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgodHlwZWQpKVxuICAgICAgLnNsaWNlKDAsIDQpO1xuICB9XG5cbiAgYmVnaW5BZGQoKTogdm9pZCB7XG4gICAgdGhpcy5hZGRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZHJhZnQgPSAnJztcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudGFnSW5wdXRSZWY/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSwgMCk7XG4gIH1cblxuICBvbkRyYWZ0Q2hhbmdlKG5leHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZHJhZnQgPSBuZXh0ID8/ICcnO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuY29tbWl0RHJhZnQoKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmNhbmNlbEFkZCgpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyAmJiAhdGhpcy5kcmFmdCAmJiB0aGlzLnRhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMucmVtb3ZlQXQodGhpcy50YWdzLmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgfVxuXG4gIG9uU3VnZ2VzdGlvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCwgc3VnZ2VzdGlvbjogR2xvYmFsVmFyaWFibGVUYWdPcHRpb24pOiB2b2lkIHtcbiAgICAvLyBtb3VzZURvd24gYmVhdHMgYmx1ciBzbyB0aGUgY2xpY2sgcmVnaXN0ZXJzIGJlZm9yZSB0aGUgaW5wdXQgbG9zZXMgZm9jdXNcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuY29tbWl0KHN1Z2dlc3Rpb24ubmFtZSk7XG4gIH1cblxuICBvbkJsdXIoKTogdm9pZCB7XG4gICAgLy8gRGVmZXIgc28gc3VnZ2VzdGlvbiBjbGljayBoYXMgYSBjaGFuY2UgdG8gZmlyZSBmaXJzdFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmFkZGluZykgeyByZXR1cm47IH1cbiAgICAgIHRoaXMuY29tbWl0RHJhZnQoKTtcbiAgICB9LCAxNTApO1xuICB9XG5cbiAgcmVtb3ZlQXQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSAodGhpcy50YWdzID8/IFtdKS5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KTtcbiAgICB0aGlzLnRhZ3MgPSBuZXh0O1xuICAgIHRoaXMudGFnc0NoYW5nZS5lbWl0KG5leHQpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21taXREcmFmdCgpOiB2b2lkIHtcbiAgICBjb25zdCByYXcgPSAodGhpcy5kcmFmdCA/PyAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCFyYXcpIHtcbiAgICAgIHRoaXMuY2FuY2VsQWRkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY29tbWl0KHJhdyk7XG4gIH1cblxuICBwcml2YXRlIGNvbW1pdChuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gKG5hbWUgPz8gJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghbm9ybWFsaXplZCkgeyByZXR1cm47IH1cbiAgICBjb25zdCB0YWtlbiA9IG5ldyBTZXQoKHRoaXMudGFncyA/PyBbXSkubWFwKHQgPT4gdC50b0xvd2VyQ2FzZSgpKSk7XG4gICAgaWYgKHRha2VuLmhhcyhub3JtYWxpemVkKSkge1xuICAgICAgdGhpcy5jYW5jZWxBZGQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV4dCA9IFsuLi4odGhpcy50YWdzID8/IFtdKSwgbm9ybWFsaXplZF07XG4gICAgdGhpcy50YWdzID0gbmV4dDtcbiAgICB0aGlzLnRhZ3NDaGFuZ2UuZW1pdChuZXh0KTtcbiAgICB0aGlzLmRyYWZ0ID0gJyc7XG4gICAgdGhpcy5hZGRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsQWRkKCk6IHZvaWQge1xuICAgIHRoaXMuYWRkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5kcmFmdCA9ICcnO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMS41XCI+XG4gIDwhLS0gU2VsZWN0ZWQgdGFnIGNoaXBzIC0tPlxuICA8c3BhbiAqbmdGb3I9XCJsZXQgdGFnIG9mIHRhZ3M7IGxldCBpID0gaW5kZXhcIlxuICAgIGNsYXNzPVwiY3FhLWlubGluZS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xIGNxYS1weC0yIGNxYS1weS0wLjUgY3FhLXJvdW5kZWQtZnVsbCBjcWEtdGV4dC14cyBjcWEtZm9udC1tZWRpdW1cIlxuICAgIHN0eWxlPVwiYmFja2dyb3VuZDojRkFFOEZGO2NvbG9yOiM2QjIxQTg7XCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwiIWNxYS13LVsxMnB4XSAhY3FhLWgtWzEycHhdICFjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzEycHhdXCI+c2VsbDwvbWF0LWljb24+XG4gICAgPHNwYW4+e3sgdGFnIH19PC9zcGFuPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImNxYS1pbmxpbmUtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtcm91bmRlZC1mdWxsIGNxYS1jdXJzb3ItcG9pbnRlciBob3ZlcjpjcWEtYmctWyNFOUQ1RkZdXCJcbiAgICAgIHN0eWxlPVwiYm9yZGVyOm5vbmU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtwYWRkaW5nOjA7XCJcbiAgICAgIChjbGljayk9XCJyZW1vdmVBdChpKVwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidSZW1vdmUgdGFnICcgKyB0YWdcIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIiFjcWEtdy1bMTJweF0gIWNxYS1oLVsxMnB4XSAhY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLVsxMnB4XVwiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9zcGFuPlxuXG4gIDwhLS0gSW5hY3RpdmU6IFwiKyBBZGQgdGFnXCIgcGlsbCAtLT5cbiAgPGJ1dHRvbiAqbmdJZj1cIiFhZGRpbmdcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cImNxYS1pbmxpbmUtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMSBjcWEtcHgtMiBjcWEtcHktMC41IGNxYS1yb3VuZGVkLWZ1bGwgY3FhLXRleHQteHMgY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICBzdHlsZT1cImJvcmRlcjoxcHggZGFzaGVkICNENEQ0RDg7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjojNTI1MjVCO1wiXG4gICAgKGNsaWNrKT1cImJlZ2luQWRkKClcIj5cbiAgICA8bWF0LWljb24gY2xhc3M9XCIhY3FhLXctWzEycHhdICFjcWEtaC1bMTJweF0gIWNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMTJweF1cIj5hZGQ8L21hdC1pY29uPlxuICAgIDxzcGFuPkFkZCB0YWc8L3NwYW4+XG4gIDwvYnV0dG9uPlxuXG4gIDwhLS0gQWN0aXZlOiBpbnB1dCArIHN1Z2dlc3Rpb25zLiBJbnB1dCBtYXRjaGVzIHRoZSBkaWFsb2cncyBvdGhlciBpbnB1dHM6XG4gICAgICAgZnVsbC13aWR0aCByb3csIDFweCBzb2xpZCBib3JkZXIsIHJvdW5kZWQ7IGlucHV0IGJvcmRlciBpdHNlbGYgaXMgdGhlXG4gICAgICAgaW5uZXIgcGlsbCB0aGUgdXNlciB0eXBlcyBpbnRvLiBTdWdnZXN0aW9uIGRyb3Bkb3duIHJlbmRlcnMgYmVsb3cuIC0tPlxuICA8ZGl2ICpuZ0lmPVwiYWRkaW5nXCIgY2xhc3M9XCJjcWEtcmVsYXRpdmVcIiBzdHlsZT1cIm1pbi13aWR0aDoyMDBweDtcIj5cbiAgICA8aW5wdXQgI3RhZ0lucHV0XG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBjbGFzcz1cImNxYS1weC0zIGNxYS1weS0xLjUgY3FhLXJvdW5kZWQtbWQgY3FhLXRleHQtc20gY3FhLW91dGxpbmUtbm9uZSBjcWEtdy1mdWxsXCJcbiAgICAgIHN0eWxlPVwiYm9yZGVyOjFweCBzb2xpZCAjNjM2NkYxO2JveC1zaGFkb3c6MCAwIDAgM3B4IHJnYmEoOTksMTAyLDI0MSwwLjEyKTtcIlxuICAgICAgcGxhY2Vob2xkZXI9XCJUYWfigKZcIlxuICAgICAgW3ZhbHVlXT1cImRyYWZ0XCJcbiAgICAgIChpbnB1dCk9XCJvbkRyYWZ0Q2hhbmdlKCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAgIChibHVyKT1cIm9uQmx1cigpXCIgLz5cblxuICAgIDxkaXYgKm5nSWY9XCJzdWdnZXN0aW9ucy5sZW5ndGggPiAwXCJcbiAgICAgIGNsYXNzPVwiY3FhLWFic29sdXRlIGNxYS16LTEwIGNxYS1tdC0xIGNxYS1iZy13aGl0ZSBjcWEtcm91bmRlZC1tZCBjcWEtc2hhZG93LWxnIGNxYS13LWZ1bGxcIlxuICAgICAgc3R5bGU9XCJib3JkZXI6MXB4IHNvbGlkICNFNUU3RUI7bWF4LWhlaWdodDoyMjBweDtvdmVyZmxvdy15OmF1dG87bGVmdDowO1wiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcyBvZiBzdWdnZXN0aW9uc1wiXG4gICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtMiBjcWEtcHgtMyBjcWEtcHktMiBjcWEtY3Vyc29yLXBvaW50ZXIgaG92ZXI6Y3FhLWJnLVsjRjNGNEY2XVwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25TdWdnZXN0aW9uTW91c2VEb3duKCRldmVudCwgcylcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtaW5saW5lLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXRleHQtc20gY3FhLXRleHQtZ3JheS04MDBcIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCIhY3FhLXctWzE0cHhdICFjcWEtaC1bMTRweF0gIWNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMTRweF1cIiBzdHlsZT1cImNvbG9yOiM2QjIxQTg7XCI+c2VsbDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgcy5uYW1lIH19PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwicy5jb3VudCAhPSBudWxsXCIgY2xhc3M9XCJjcWEtdGV4dC1bMTFweF0gY3FhLXRleHQtZ3JheS00MDBcIj57eyBzLmNvdW50IH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "../../search-bar/search-bar.component";
|
|
4
|
-
import * as i2 from "../../segment-control/segment-control.component";
|
|
5
|
-
import * as i3 from "./element-card.component";
|
|
6
|
-
import * as i4 from "./test-data-profile-card.component";
|
|
7
|
-
import * as i5 from "@angular/common";
|
|
8
|
-
export class DataLibraryPanelComponent {
|
|
9
|
-
constructor() {
|
|
10
|
-
this.searchTerm = '';
|
|
11
|
-
this.searchPlaceholder = 'Search elements or test data';
|
|
12
|
-
this.activeSubTab = 'elements';
|
|
13
|
-
this.elements = [];
|
|
14
|
-
this.profiles = [];
|
|
15
|
-
this.isLoadingElements = false;
|
|
16
|
-
this.isLoadingProfiles = false;
|
|
17
|
-
this.selectedElementId = null;
|
|
18
|
-
this.hasEnvironment = true;
|
|
19
|
-
this.showElementsLink = true;
|
|
20
|
-
this.showManageProfilesLink = true;
|
|
21
|
-
this.searchTermChange = new EventEmitter();
|
|
22
|
-
this.search = new EventEmitter();
|
|
23
|
-
this.searchCleared = new EventEmitter();
|
|
24
|
-
this.activeSubTabChange = new EventEmitter();
|
|
25
|
-
this.elementCardClick = new EventEmitter();
|
|
26
|
-
this.viewFullElementsClick = new EventEmitter();
|
|
27
|
-
this.manageProfilesClick = new EventEmitter();
|
|
28
|
-
/** Stable reference required by cqa-segment-control. */
|
|
29
|
-
this.segments = [
|
|
30
|
-
{ label: 'Elements', value: 'elements' },
|
|
31
|
-
{ label: 'Test Data Profiles', value: 'profiles' },
|
|
32
|
-
];
|
|
33
|
-
/** Stable iteration source for skeleton placeholders during loading. */
|
|
34
|
-
this.skeletonCards = [0, 1, 2, 3];
|
|
35
|
-
}
|
|
36
|
-
onSearchValueChange(value) {
|
|
37
|
-
this.searchTerm = value ?? '';
|
|
38
|
-
this.searchTermChange.emit(this.searchTerm);
|
|
39
|
-
}
|
|
40
|
-
onSearchSubmit(value) {
|
|
41
|
-
this.search.emit(value ?? '');
|
|
42
|
-
}
|
|
43
|
-
onSearchCleared() {
|
|
44
|
-
this.searchTerm = '';
|
|
45
|
-
this.searchCleared.emit();
|
|
46
|
-
}
|
|
47
|
-
onSegmentChange(value) {
|
|
48
|
-
if (value === 'elements' || value === 'profiles') {
|
|
49
|
-
this.activeSubTab = value;
|
|
50
|
-
this.activeSubTabChange.emit(value);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
onElementClick(id) {
|
|
54
|
-
this.elementCardClick.emit(id);
|
|
55
|
-
}
|
|
56
|
-
onViewFullElements(event) {
|
|
57
|
-
event.preventDefault();
|
|
58
|
-
this.viewFullElementsClick.emit();
|
|
59
|
-
}
|
|
60
|
-
onManageProfiles(event) {
|
|
61
|
-
event.preventDefault();
|
|
62
|
-
this.manageProfilesClick.emit();
|
|
63
|
-
}
|
|
64
|
-
trackByElementId(_i, item) { return item.id; }
|
|
65
|
-
trackByAttachmentId(_i, item) { return item.attachmentId; }
|
|
66
|
-
get bannerLabel() {
|
|
67
|
-
return this.environmentName && this.environmentName.trim().length
|
|
68
|
-
? this.environmentName
|
|
69
|
-
: 'this test case';
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
DataLibraryPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DataLibraryPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
73
|
-
DataLibraryPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DataLibraryPanelComponent, selector: "cqa-data-library-panel", inputs: { searchTerm: "searchTerm", searchPlaceholder: "searchPlaceholder", environmentName: "environmentName", activeSubTab: "activeSubTab", elements: "elements", profiles: "profiles", isLoadingElements: "isLoadingElements", isLoadingProfiles: "isLoadingProfiles", selectedElementId: "selectedElementId", hasEnvironment: "hasEnvironment", showElementsLink: "showElementsLink", showManageProfilesLink: "showManageProfilesLink" }, outputs: { searchTermChange: "searchTermChange", search: "search", searchCleared: "searchCleared", activeSubTabChange: "activeSubTabChange", elementCardClick: "elementCardClick", viewFullElementsClick: "viewFullElementsClick", manageProfilesClick: "manageProfilesClick" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-w-full cqa-bg-white\">\n <!-- Sticky region: search + env banner + segment. position:sticky pins inside the\n host scroll container (cqa-detail-side-panel scrolls our content) so only the\n cards below scroll past while these stay anchored. -->\n <div class=\"cqa-sticky cqa-top-0 cqa-z-10 cqa-flex cqa-flex-col cqa-gap-3 cqa-pt-2 cqa-pb-3 cqa-bg-white\">\n <cqa-search-bar\n [placeholder]=\"searchPlaceholder\"\n [value]=\"searchTerm\"\n [showClear]=\"true\"\n [fullWidth]=\"true\"\n (valueChange)=\"onSearchValueChange($event)\"\n (search)=\"onSearchSubmit($event)\"\n (cleared)=\"onSearchCleared()\">\n </cqa-search-bar>\n\n <div class=\"cqa-text-xs cqa-text-[#475569] cqa-bg-[#F8FAFC] cqa-border cqa-border-solid cqa-border-[#E2E8F0] cqa-rounded-md cqa-px-3 cqa-py-2\">\n Showing data for <span class=\"cqa-font-semibold cqa-text-[#0F172A]\">{{ bannerLabel }}</span> Environment\n </div>\n\n <cqa-segment-control\n [segments]=\"segments\"\n [value]=\"activeSubTab\"\n [fullWidth]=\"true\"\n (valueChange)=\"onSegmentChange($event)\">\n </cqa-segment-control>\n </div>\n\n <!-- Scrollable region: section header + cards / empty / loading.\n Scrolling is owned by the host's scroll container; this div is just a normal block. -->\n <div class=\"cqa-pt-3 cqa-pb-6\">\n <ng-container *ngIf=\"activeSubTab === 'elements'\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-2\">\n <span class=\"cqa-text-[13px] cqa-font-semibold cqa-text-[#0F172A]\">Elements</span>\n <a\n *ngIf=\"showElementsLink\"\n href=\"#\"\n (click)=\"onViewFullElements($event)\"\n class=\"cqa-inline-flex cqa-items-center cqa-gap-[2px] cqa-text-xs cqa-font-medium cqa-text-[#4F46E5] cqa-no-underline hover:cqa-underline\">\n View full library<span class=\"cqa-text-sm cqa-leading-none\">›</span>\n </a>\n </div>\n\n <div *ngIf=\"!isLoadingElements && elements.length\" class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <cqa-element-card\n *ngFor=\"let el of elements; trackBy: trackByElementId\"\n [name]=\"el.name\"\n [screen]=\"el.screen\"\n [updatedRelative]=\"el.updatedRelative\"\n [locatorBadge]=\"el.locatorBadge\"\n [selected]=\"selectedElementId === el.id\"\n (cardClick)=\"onElementClick(el.id)\">\n </cqa-element-card>\n </div>\n\n <div *ngIf=\"!isLoadingElements && !elements.length\" class=\"cqa-text-xs cqa-text-[#94A3B8] cqa-py-3 cqa-px-1\">\n <ng-container *ngIf=\"searchTerm; else noElementsAtAll\">\n No elements match “{{ searchTerm }}”.\n </ng-container>\n <ng-template #noElementsAtAll>No elements yet for this workspace.</ng-template>\n </div>\n\n <div *ngIf=\"isLoadingElements\" class=\"cqa-flex cqa-flex-col cqa-gap-2\" aria-busy=\"true\" aria-label=\"Loading elements\">\n <div *ngFor=\"let _ of skeletonCards\"\n class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-px-3 cqa-py-[10px] cqa-rounded-lg cqa-border cqa-border-solid cqa-border-[#E2E8F0] cqa-bg-white\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-h-3 cqa-w-1/2 cqa-rounded cqa-bg-[#E2E8F0] cqa-animate-pulse\"></div>\n <div class=\"cqa-h-3 cqa-w-8 cqa-rounded cqa-bg-[#E2E8F0] cqa-animate-pulse\"></div>\n </div>\n <div class=\"cqa-h-2 cqa-w-1/3 cqa-rounded cqa-bg-[#E2E8F0] cqa-animate-pulse\"></div>\n <div class=\"cqa-h-2 cqa-w-1/4 cqa-rounded cqa-bg-[#E2E8F0] cqa-animate-pulse\"></div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"activeSubTab === 'profiles'\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-2\">\n <span class=\"cqa-text-[13px] cqa-font-semibold cqa-text-[#0F172A]\">Test Data Profiles</span>\n <a\n *ngIf=\"showManageProfilesLink\"\n href=\"#\"\n (click)=\"onManageProfiles($event)\"\n class=\"cqa-inline-flex cqa-items-center cqa-gap-[2px] cqa-text-xs cqa-font-medium cqa-text-[#4F46E5] cqa-no-underline hover:cqa-underline\">\n Manage<span class=\"cqa-text-sm cqa-leading-none\">›</span>\n </a>\n </div>\n\n <div *ngIf=\"!isLoadingProfiles && profiles.length\" class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <cqa-test-data-profile-card\n *ngFor=\"let p of profiles; trackBy: trackByAttachmentId\"\n [name]=\"p.name\"\n [rowsCount]=\"p.rowsCount\"\n [columnsCount]=\"p.columnsCount\"\n [environmentName]=\"environmentName\"\n [permission]=\"p.permission\"\n [activeOnTestCase]=\"p.activeOnTestCase\">\n </cqa-test-data-profile-card>\n </div>\n\n <div *ngIf=\"!isLoadingProfiles && !profiles.length\" class=\"cqa-text-xs cqa-text-[#94A3B8] cqa-py-3 cqa-px-1\">\n <ng-container *ngIf=\"!hasEnvironment; else noAttachments\">\n Set an environment on this test case to see its test data profiles.\n </ng-container>\n <ng-template #noAttachments>\n <ng-container *ngIf=\"searchTerm; else noProfilesAtAll\">\n No profiles match “{{ searchTerm }}”.\n </ng-container>\n <ng-template #noProfilesAtAll>No test data profiles attached to this environment yet.</ng-template>\n </ng-template>\n </div>\n\n <div *ngIf=\"isLoadingProfiles\" class=\"cqa-flex cqa-flex-col cqa-gap-2\" aria-busy=\"true\" aria-label=\"Loading test data profiles\">\n <div *ngFor=\"let _ of skeletonCards\"\n class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-px-3 cqa-py-[10px] cqa-rounded-lg cqa-border cqa-border-solid cqa-border-[#E2E8F0] cqa-bg-white\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-h-3 cqa-w-1/2 cqa-rounded cqa-bg-[#E2E8F0] cqa-animate-pulse\"></div>\n <div class=\"cqa-h-3 cqa-w-8 cqa-rounded cqa-bg-[#E2E8F0] cqa-animate-pulse\"></div>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-h-2 cqa-w-1/3 cqa-rounded cqa-bg-[#E2E8F0] cqa-animate-pulse\"></div>\n <div class=\"cqa-h-3 cqa-w-12 cqa-rounded-full cqa-bg-[#E2E8F0] cqa-animate-pulse\"></div>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n</div>\n", components: [{ type: i1.SearchBarComponent, selector: "cqa-search-bar", inputs: ["placeholder", "value", "disabled", "showClear", "ariaLabel", "autoFocus", "size", "fullWidth"], outputs: ["valueChange", "search", "cleared"] }, { type: i2.SegmentControlComponent, selector: "cqa-segment-control", inputs: ["segments", "value", "disabled", "containerBgColor", "fullWidth", "size"], outputs: ["valueChange"] }, { type: i3.ElementCardComponent, selector: "cqa-element-card", inputs: ["name", "screen", "updatedRelative", "locatorBadge", "selected"], outputs: ["cardClick"] }, { type: i4.TestDataProfileCardComponent, selector: "cqa-test-data-profile-card", inputs: ["name", "rowsCount", "columnsCount", "environmentName", "permission", "activeOnTestCase"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
74
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DataLibraryPanelComponent, decorators: [{
|
|
75
|
-
type: Component,
|
|
76
|
-
args: [{ selector: 'cqa-data-library-panel', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-flex cqa-flex-col cqa-w-full cqa-bg-white\">\n <!-- Sticky region: search + env banner + segment. position:sticky pins inside the\n host scroll container (cqa-detail-side-panel scrolls our content) so only the\n cards below scroll past while these stay anchored. -->\n <div class=\"cqa-sticky cqa-top-0 cqa-z-10 cqa-flex cqa-flex-col cqa-gap-3 cqa-pt-2 cqa-pb-3 cqa-bg-white\">\n <cqa-search-bar\n [placeholder]=\"searchPlaceholder\"\n [value]=\"searchTerm\"\n [showClear]=\"true\"\n [fullWidth]=\"true\"\n (valueChange)=\"onSearchValueChange($event)\"\n (search)=\"onSearchSubmit($event)\"\n (cleared)=\"onSearchCleared()\">\n </cqa-search-bar>\n\n <div class=\"cqa-text-xs cqa-text-[#475569] cqa-bg-[#F8FAFC] cqa-border cqa-border-solid cqa-border-[#E2E8F0] cqa-rounded-md cqa-px-3 cqa-py-2\">\n Showing data for <span class=\"cqa-font-semibold cqa-text-[#0F172A]\">{{ bannerLabel }}</span> Environment\n </div>\n\n <cqa-segment-control\n [segments]=\"segments\"\n [value]=\"activeSubTab\"\n [fullWidth]=\"true\"\n (valueChange)=\"onSegmentChange($event)\">\n </cqa-segment-control>\n </div>\n\n <!-- Scrollable region: section header + cards / empty / loading.\n Scrolling is owned by the host's scroll container; this div is just a normal block. -->\n <div class=\"cqa-pt-3 cqa-pb-6\">\n <ng-container *ngIf=\"activeSubTab === 'elements'\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-2\">\n <span class=\"cqa-text-[13px] cqa-font-semibold cqa-text-[#0F172A]\">Elements</span>\n <a\n *ngIf=\"showElementsLink\"\n href=\"#\"\n (click)=\"onViewFullElements($event)\"\n class=\"cqa-inline-flex cqa-items-center cqa-gap-[2px] cqa-text-xs cqa-font-medium cqa-text-[#4F46E5] cqa-no-underline hover:cqa-underline\">\n View full library<span class=\"cqa-text-sm cqa-leading-none\">›</span>\n </a>\n </div>\n\n <div *ngIf=\"!isLoadingElements && elements.length\" class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <cqa-element-card\n *ngFor=\"let el of elements; trackBy: trackByElementId\"\n [name]=\"el.name\"\n [screen]=\"el.screen\"\n [updatedRelative]=\"el.updatedRelative\"\n [locatorBadge]=\"el.locatorBadge\"\n [selected]=\"selectedElementId === el.id\"\n (cardClick)=\"onElementClick(el.id)\">\n </cqa-element-card>\n </div>\n\n <div *ngIf=\"!isLoadingElements && !elements.length\" class=\"cqa-text-xs cqa-text-[#94A3B8] cqa-py-3 cqa-px-1\">\n <ng-container *ngIf=\"searchTerm; else noElementsAtAll\">\n No elements match “{{ searchTerm }}”.\n </ng-container>\n <ng-template #noElementsAtAll>No elements yet for this workspace.</ng-template>\n </div>\n\n <div *ngIf=\"isLoadingElements\" class=\"cqa-flex cqa-flex-col cqa-gap-2\" aria-busy=\"true\" aria-label=\"Loading elements\">\n <div *ngFor=\"let _ of skeletonCards\"\n class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-px-3 cqa-py-[10px] cqa-rounded-lg cqa-border cqa-border-solid cqa-border-[#E2E8F0] cqa-bg-white\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-h-3 cqa-w-1/2 cqa-rounded cqa-bg-[#E2E8F0] cqa-animate-pulse\"></div>\n <div class=\"cqa-h-3 cqa-w-8 cqa-rounded cqa-bg-[#E2E8F0] cqa-animate-pulse\"></div>\n </div>\n <div class=\"cqa-h-2 cqa-w-1/3 cqa-rounded cqa-bg-[#E2E8F0] cqa-animate-pulse\"></div>\n <div class=\"cqa-h-2 cqa-w-1/4 cqa-rounded cqa-bg-[#E2E8F0] cqa-animate-pulse\"></div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"activeSubTab === 'profiles'\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-2\">\n <span class=\"cqa-text-[13px] cqa-font-semibold cqa-text-[#0F172A]\">Test Data Profiles</span>\n <a\n *ngIf=\"showManageProfilesLink\"\n href=\"#\"\n (click)=\"onManageProfiles($event)\"\n class=\"cqa-inline-flex cqa-items-center cqa-gap-[2px] cqa-text-xs cqa-font-medium cqa-text-[#4F46E5] cqa-no-underline hover:cqa-underline\">\n Manage<span class=\"cqa-text-sm cqa-leading-none\">›</span>\n </a>\n </div>\n\n <div *ngIf=\"!isLoadingProfiles && profiles.length\" class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <cqa-test-data-profile-card\n *ngFor=\"let p of profiles; trackBy: trackByAttachmentId\"\n [name]=\"p.name\"\n [rowsCount]=\"p.rowsCount\"\n [columnsCount]=\"p.columnsCount\"\n [environmentName]=\"environmentName\"\n [permission]=\"p.permission\"\n [activeOnTestCase]=\"p.activeOnTestCase\">\n </cqa-test-data-profile-card>\n </div>\n\n <div *ngIf=\"!isLoadingProfiles && !profiles.length\" class=\"cqa-text-xs cqa-text-[#94A3B8] cqa-py-3 cqa-px-1\">\n <ng-container *ngIf=\"!hasEnvironment; else noAttachments\">\n Set an environment on this test case to see its test data profiles.\n </ng-container>\n <ng-template #noAttachments>\n <ng-container *ngIf=\"searchTerm; else noProfilesAtAll\">\n No profiles match “{{ searchTerm }}”.\n </ng-container>\n <ng-template #noProfilesAtAll>No test data profiles attached to this environment yet.</ng-template>\n </ng-template>\n </div>\n\n <div *ngIf=\"isLoadingProfiles\" class=\"cqa-flex cqa-flex-col cqa-gap-2\" aria-busy=\"true\" aria-label=\"Loading test data profiles\">\n <div *ngFor=\"let _ of skeletonCards\"\n class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-px-3 cqa-py-[10px] cqa-rounded-lg cqa-border cqa-border-solid cqa-border-[#E2E8F0] cqa-bg-white\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-h-3 cqa-w-1/2 cqa-rounded cqa-bg-[#E2E8F0] cqa-animate-pulse\"></div>\n <div class=\"cqa-h-3 cqa-w-8 cqa-rounded cqa-bg-[#E2E8F0] cqa-animate-pulse\"></div>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-h-2 cqa-w-1/3 cqa-rounded cqa-bg-[#E2E8F0] cqa-animate-pulse\"></div>\n <div class=\"cqa-h-3 cqa-w-12 cqa-rounded-full cqa-bg-[#E2E8F0] cqa-animate-pulse\"></div>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n</div>\n" }]
|
|
77
|
-
}], propDecorators: { searchTerm: [{
|
|
78
|
-
type: Input
|
|
79
|
-
}], searchPlaceholder: [{
|
|
80
|
-
type: Input
|
|
81
|
-
}], environmentName: [{
|
|
82
|
-
type: Input
|
|
83
|
-
}], activeSubTab: [{
|
|
84
|
-
type: Input
|
|
85
|
-
}], elements: [{
|
|
86
|
-
type: Input
|
|
87
|
-
}], profiles: [{
|
|
88
|
-
type: Input
|
|
89
|
-
}], isLoadingElements: [{
|
|
90
|
-
type: Input
|
|
91
|
-
}], isLoadingProfiles: [{
|
|
92
|
-
type: Input
|
|
93
|
-
}], selectedElementId: [{
|
|
94
|
-
type: Input
|
|
95
|
-
}], hasEnvironment: [{
|
|
96
|
-
type: Input
|
|
97
|
-
}], showElementsLink: [{
|
|
98
|
-
type: Input
|
|
99
|
-
}], showManageProfilesLink: [{
|
|
100
|
-
type: Input
|
|
101
|
-
}], searchTermChange: [{
|
|
102
|
-
type: Output
|
|
103
|
-
}], search: [{
|
|
104
|
-
type: Output
|
|
105
|
-
}], searchCleared: [{
|
|
106
|
-
type: Output
|
|
107
|
-
}], activeSubTabChange: [{
|
|
108
|
-
type: Output
|
|
109
|
-
}], elementCardClick: [{
|
|
110
|
-
type: Output
|
|
111
|
-
}], viewFullElementsClick: [{
|
|
112
|
-
type: Output
|
|
113
|
-
}], manageProfilesClick: [{
|
|
114
|
-
type: Output
|
|
115
|
-
}] } });
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saWJyYXJ5LXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdGVzdC1jYXNlLWRldGFpbHMvZGF0YS1saWJyYXJ5LXBhbmVsL2RhdGEtbGlicmFyeS1wYW5lbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2RhdGEtbGlicmFyeS1wYW5lbC9kYXRhLWxpYnJhcnktcGFuZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7QUFjdkIsTUFBTSxPQUFPLHlCQUF5QjtJQU50QztRQU9XLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsc0JBQWlCLEdBQUcsOEJBQThCLENBQUM7UUFHbkQsaUJBQVksR0FBc0IsVUFBVSxDQUFDO1FBQzdDLGFBQVEsR0FBb0IsRUFBRSxDQUFDO1FBQy9CLGFBQVEsR0FBb0IsRUFBRSxDQUFDO1FBQy9CLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMxQixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIsc0JBQWlCLEdBQTJCLElBQUksQ0FBQztRQUNqRCxtQkFBYyxHQUFHLElBQUksQ0FBQztRQUN0QixxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDeEIsMkJBQXNCLEdBQUcsSUFBSSxDQUFDO1FBRTdCLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDOUMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDcEMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3pDLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFxQixDQUFDO1FBQzNELHFCQUFnQixHQUFHLElBQUksWUFB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QUF0QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBRUksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWdtZW50T3B0aW9uIH0gZnJvbSAnLi4vLi4vc2VnbWVudC1jb250cm9sL3NlZ21lbnQtY29udHJvbC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgRGF0YUxpYnJhcnlTdWJUYWIsXG4gIEVsZW1lbnRDYXJkVm0sXG4gIFByb2ZpbGVDYXJkVm0sXG59IGZyb20gJy4vZGF0YS1saWJyYXJ5LXBhbmVsLm1vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1kYXRhLWxpYnJhcnktcGFuZWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS1saWJyYXJ5LXBhbmVsLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YUxpYnJhcnlQYW5lbENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHNlYXJjaFRlcm0gPSAnJztcbiAgQElucHV0KCkgc2VhcmNoUGxhY2Vob2xkZXIgPSAnU2VhcmNoIGVsZW1lbnRzIG9yIHRlc3QgZGF0YSc7XG4gIC8qKiBUaGUgYWN0aXZlIGVudmlyb25tZW50IG5hbWUsIGUuZy4gXCJRQVwiLiBFbXB0eS91bmRlZmluZWQgcmVuZGVycyBcInRoaXMgdGVzdCBjYXNlXCIgaW4gdGhlIGJhbm5lciBhbmQgaGlkZXMgdGhlIGVudiBjaGlwIG9uIHByb2ZpbGUgY2FyZHMuICovXG4gIEBJbnB1dCgpIGVudmlyb25tZW50TmFtZT86IHN0cmluZztcbiAgQElucHV0KCkgYWN0aXZlU3ViVGFiOiBEYXRhTGlicmFyeVN1YlRhYiA9ICdlbGVtZW50cyc7XG4gIEBJbnB1dCgpIGVsZW1lbnRzOiBFbGVtZW50Q2FyZFZtW10gPSBbXTtcbiAgQElucHV0KCkgcHJvZmlsZXM6IFByb2ZpbGVDYXJkVm1bXSA9IFtdO1xuICBASW5wdXQoKSBpc0xvYWRpbmdFbGVtZW50cyA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0xvYWRpbmdQcm9maWxlcyA9IGZhbHNlO1xuICBASW5wdXQoKSBzZWxlY3RlZEVsZW1lbnRJZDogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGhhc0Vudmlyb25tZW50ID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0VsZW1lbnRzTGluayA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dNYW5hZ2VQcm9maWxlc0xpbmsgPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSBzZWFyY2hUZXJtQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBzZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHNlYXJjaENsZWFyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBhY3RpdmVTdWJUYWJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFMaWJyYXJ5U3ViVGFiPigpO1xuICBAT3V0cHV0KCkgZWxlbWVudENhcmRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyIHwgc3RyaW5nPigpO1xuICBAT3V0cHV0KCkgdmlld0Z1bGxFbGVtZW50c0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgbWFuYWdlUHJvZmlsZXNDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKiogU3RhYmxlIHJlZmVyZW5jZSByZXF1aXJlZCBieSBjcWEtc2VnbWVudC1jb250cm9sLiAqL1xuICByZWFkb25seSBzZWdtZW50czogU2VnbWVudE9wdGlvbltdID0gW1xuICAgIHsgbGFiZWw6ICdFbGVtZW50cycsIHZhbHVlOiAnZWxlbWVudHMnIH0sXG4gICAgeyBsYWJlbDogJ1Rlc3QgRGF0YSBQcm9maWxlcycsIHZhbHVlOiAncHJvZmlsZXMnIH0sXG4gIF07XG5cbiAgLyoqIFN0YWJsZSBpdGVyYXRpb24gc291cmNlIGZvciBza2VsZXRvbiBwbGFjZWhvbGRlcnMgZHVyaW5nIGxvYWRpbmcuICovXG4gIHJlYWRvbmx5IHNrZWxldG9uQ2FyZHM6IG51bWJlcltdID0gWzAsIDEsIDIsIDNdO1xuXG4gIG9uU2VhcmNoVmFsdWVDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoVGVybSA9IHZhbHVlID8/ICcnO1xuICAgIHRoaXMuc2VhcmNoVGVybUNoYW5nZS5lbWl0KHRoaXMuc2VhcmNoVGVybSk7XG4gIH1cblxuICBvblNlYXJjaFN1Ym1pdCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2guZW1pdCh2YWx1ZSA/PyAnJyk7XG4gIH1cblxuICBvblNlYXJjaENsZWFyZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hUZXJtID0gJyc7XG4gICAgdGhpcy5zZWFyY2hDbGVhcmVkLmVtaXQoKTtcbiAgfVxuXG4gIG9uU2VnbWVudENoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlID09PSAnZWxlbWVudHMnIHx8IHZhbHVlID09PSAncHJvZmlsZXMnKSB7XG4gICAgICB0aGlzLmFjdGl2ZVN1YlRhYiA9IHZhbHVlO1xuICAgICAgdGhpcy5hY3RpdmVTdWJUYWJDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgb25FbGVtZW50Q2xpY2soaWQ6IG51bWJlciB8IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZWxlbWVudENhcmRDbGljay5lbWl0KGlkKTtcbiAgfVxuXG4gIG9uVmlld0Z1bGxFbGVtZW50cyhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMudmlld0Z1bGxFbGVtZW50c0NsaWNrLmVtaXQoKTtcbiAgfVxuXG4gIG9uTWFuYWdlUHJvZmlsZXMoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLm1hbmFnZVByb2ZpbGVzQ2xpY2suZW1pdCgpO1xuICB9XG5cbiAgdHJhY2tCeUVsZW1lbnRJZChfaTogbnVtYmVyLCBpdGVtOiBFbGVtZW50Q2FyZFZtKTogbnVtYmVyIHwgc3RyaW5nIHsgcmV0dXJuIGl0ZW0uaWQ7IH1cbiAgdHJhY2tCeUF0dGFjaG1lbnRJZChfaTogbnVtYmVyLCBpdGVtOiBQcm9maWxlQ2FyZFZtKTogbnVtYmVyIHwgc3RyaW5nIHsgcmV0dXJuIGl0ZW0uYXR0YWNobWVudElkOyB9XG5cbiAgZ2V0IGJhbm5lckxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnROYW1lICYmIHRoaXMuZW52aXJvbm1lbnROYW1lLnRyaW0oKS5sZW5ndGhcbiAgICAgID8gdGhpcy5lbnZpcm9ubWVudE5hbWVcbiAgICAgIDogJ3RoaXMgdGVzdCBjYXNlJztcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtdy1mdWxsIGNxYS1iZy13aGl0ZVwiPlxuICA8IS0tIFN0aWNreSByZWdpb246IHNlYXJjaCArIGVudiBiYW5uZXIgKyBzZWdtZW50LiBwb3NpdGlvbjpzdGlja3kgcGlucyBpbnNpZGUgdGhlXG4gICAgICAgaG9zdCBzY3JvbGwgY29udGFpbmVyIChjcWEtZGV0YWlsLXNpZGUtcGFuZWwgc2Nyb2xscyBvdXIgY29udGVudCkgc28gb25seSB0aGVcbiAgICAgICBjYXJkcyBiZWxvdyBzY3JvbGwgcGFzdCB3aGlsZSB0aGVzZSBzdGF5IGFuY2hvcmVkLiAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1zdGlja3kgY3FhLXRvcC0wIGNxYS16LTEwIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTMgY3FhLXB0LTIgY3FhLXBiLTMgY3FhLWJnLXdoaXRlXCI+XG4gICAgPGNxYS1zZWFyY2gtYmFyXG4gICAgICBbcGxhY2Vob2xkZXJdPVwic2VhcmNoUGxhY2Vob2xkZXJcIlxuICAgICAgW3ZhbHVlXT1cInNlYXJjaFRlcm1cIlxuICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCJcbiAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAodmFsdWVDaGFuZ2UpPVwib25TZWFyY2hWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChzZWFyY2gpPVwib25TZWFyY2hTdWJtaXQoJGV2ZW50KVwiXG4gICAgICAoY2xlYXJlZCk9XCJvblNlYXJjaENsZWFyZWQoKVwiPlxuICAgIDwvY3FhLXNlYXJjaC1iYXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyM0NzU1NjldIGNxYS1iZy1bI0Y4RkFGQ10gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFMkU4RjBdIGNxYS1yb3VuZGVkLW1kIGNxYS1weC0zIGNxYS1weS0yXCI+XG4gICAgICBTaG93aW5nIGRhdGEgZm9yIDxzcGFuIGNsYXNzPVwiY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMwRjE3MkFdXCI+e3sgYmFubmVyTGFiZWwgfX08L3NwYW4+IEVudmlyb25tZW50XG4gICAgPC9kaXY+XG5cbiAgICA8Y3FhLXNlZ21lbnQtY29udHJvbFxuICAgICAgW3NlZ21lbnRzXT1cInNlZ21lbnRzXCJcbiAgICAgIFt2YWx1ZV09XCJhY3RpdmVTdWJUYWJcIlxuICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblNlZ21lbnRDaGFuZ2UoJGV2ZW50KVwiPlxuICAgIDwvY3FhLXNlZ21lbnQtY29udHJvbD5cbiAgPC9kaXY+XG5cbiAgPCEtLSBTY3JvbGxhYmxlIHJlZ2lvbjogc2VjdGlvbiBoZWFkZXIgKyBjYXJkcyAvIGVtcHR5IC8gbG9hZGluZy5cbiAgICAgICBTY3JvbGxpbmcgaXMgb3duZWQgYnkgdGhlIGhvc3QncyBzY3JvbGwgY29udGFpbmVyOyB0aGlzIGRpdiBpcyBqdXN0IGEgbm9ybWFsIGJsb2NrLiAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1wdC0zIGNxYS1wYi02XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZVN1YlRhYiA9PT0gJ2VsZW1lbnRzJ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtbWItMlwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxM3B4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzBGMTcyQV1cIj5FbGVtZW50czwvc3Bhbj5cbiAgICAgICAgPGFcbiAgICAgICAgICAqbmdJZj1cInNob3dFbGVtZW50c0xpbmtcIlxuICAgICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgICAoY2xpY2spPVwib25WaWV3RnVsbEVsZW1lbnRzKCRldmVudClcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWlubGluZS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC1bMnB4XSBjcWEtdGV4dC14cyBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM0RjQ2RTVdIGNxYS1uby11bmRlcmxpbmUgaG92ZXI6Y3FhLXVuZGVybGluZVwiPlxuICAgICAgICAgIFZpZXcgZnVsbCBsaWJyYXJ5PHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1ub25lXCI+JnJzYXF1bzs8L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiIWlzTG9hZGluZ0VsZW1lbnRzICYmIGVsZW1lbnRzLmxlbmd0aFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMlwiPlxuICAgICAgICA8Y3FhLWVsZW1lbnQtY2FyZFxuICAgICAgICAgICpuZ0Zvcj1cImxldCBlbCBvZiBlbGVtZW50czsgdHJhY2tCeTogdHJhY2tCeUVsZW1lbnRJZFwiXG4gICAgICAgICAgW25hbWVdPVwiZWwubmFtZVwiXG4gICAgICAgICAgW3NjcmVlbl09XCJlbC5zY3JlZW5cIlxuICAgICAgICAgIFt1cGRhdGVkUmVsYXRpdmVdPVwiZWwudXBkYXRlZFJlbGF0aXZlXCJcbiAgICAgICAgICBbbG9jYXRvckJhZGdlXT1cImVsLmxvY2F0b3JCYWRnZVwiXG4gICAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkRWxlbWVudElkID09PSBlbC5pZFwiXG4gICAgICAgICAgKGNhcmRDbGljayk9XCJvbkVsZW1lbnRDbGljayhlbC5pZClcIj5cbiAgICAgICAgPC9jcWEtZWxlbWVudC1jYXJkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCIhaXNMb2FkaW5nRWxlbWVudHMgJiYgIWVsZW1lbnRzLmxlbmd0aFwiIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyM5NEEzQjhdIGNxYS1weS0zIGNxYS1weC0xXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hUZXJtOyBlbHNlIG5vRWxlbWVudHNBdEFsbFwiPlxuICAgICAgICAgIE5vIGVsZW1lbnRzIG1hdGNoICZsZHF1bzt7eyBzZWFyY2hUZXJtIH19JnJkcXVvOy5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9FbGVtZW50c0F0QWxsPk5vIGVsZW1lbnRzIHlldCBmb3IgdGhpcyB3b3Jrc3BhY2UuPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nRWxlbWVudHNcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIiBhcmlhLWJ1c3k9XCJ0cnVlXCIgYXJpYS1sYWJlbD1cIkxvYWRpbmcgZWxlbWVudHNcIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgXyBvZiBza2VsZXRvbkNhcmRzXCJcbiAgICAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIgY3FhLXB4LTMgY3FhLXB5LVsxMHB4XSBjcWEtcm91bmRlZC1sZyBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0UyRThGMF0gY3FhLWJnLXdoaXRlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtaC0zIGNxYS13LTEvMiBjcWEtcm91bmRlZCBjcWEtYmctWyNFMkU4RjBdIGNxYS1hbmltYXRlLXB1bHNlXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWgtMyBjcWEtdy04IGNxYS1yb3VuZGVkIGNxYS1iZy1bI0UyRThGMF0gY3FhLWFuaW1hdGUtcHVsc2VcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWgtMiBjcWEtdy0xLzMgY3FhLXJvdW5kZWQgY3FhLWJnLVsjRTJFOEYwXSBjcWEtYW5pbWF0ZS1wdWxzZVwiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtaC0yIGNxYS13LTEvNCBjcWEtcm91bmRlZCBjcWEtYmctWyNFMkU4RjBdIGNxYS1hbmltYXRlLXB1bHNlXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlU3ViVGFiID09PSAncHJvZmlsZXMnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1tYi0yXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEzcHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMEYxNzJBXVwiPlRlc3QgRGF0YSBQcm9maWxlczwvc3Bhbj5cbiAgICAgICAgPGFcbiAgICAgICAgICAqbmdJZj1cInNob3dNYW5hZ2VQcm9maWxlc0xpbmtcIlxuICAgICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgICAoY2xpY2spPVwib25NYW5hZ2VQcm9maWxlcygkZXZlbnQpXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1pbmxpbmUtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtWzJweF0gY3FhLXRleHQteHMgY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNEY0NkU1XSBjcWEtbm8tdW5kZXJsaW5lIGhvdmVyOmNxYS11bmRlcmxpbmVcIj5cbiAgICAgICAgICBNYW5hZ2U8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLW5vbmVcIj4mcnNhcXVvOzwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCIhaXNMb2FkaW5nUHJvZmlsZXMgJiYgcHJvZmlsZXMubGVuZ3RoXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yXCI+XG4gICAgICAgIDxjcWEtdGVzdC1kYXRhLXByb2ZpbGUtY2FyZFxuICAgICAgICAgICpuZ0Zvcj1cImxldCBwIG9mIHByb2ZpbGVzOyB0cmFja0J5OiB0cmFja0J5QXR0YWNobWVudElkXCJcbiAgICAgICAgICBbbmFtZV09XCJwLm5hbWVcIlxuICAgICAgICAgIFtyb3dzQ291bnRdPVwicC5yb3dzQ291bnRcIlxuICAgICAgICAgIFtjb2x1bW5zQ291bnRdPVwicC5jb2x1bW5zQ291bnRcIlxuICAgICAgICAgIFtlbnZpcm9ubWVudE5hbWVdPVwiZW52aXJvbm1lbnROYW1lXCJcbiAgICAgICAgICBbcGVybWlzc2lvbl09XCJwLnBlcm1pc3Npb25cIlxuICAgICAgICAgIFthY3RpdmVPblRlc3RDYXNlXT1cInAuYWN0aXZlT25UZXN0Q2FzZVwiPlxuICAgICAgICA8L2NxYS10ZXN0LWRhdGEtcHJvZmlsZS1jYXJkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCIhaXNMb2FkaW5nUHJvZmlsZXMgJiYgIXByb2ZpbGVzLmxlbmd0aFwiIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyM5NEEzQjhdIGNxYS1weS0zIGNxYS1weC0xXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGFzRW52aXJvbm1lbnQ7IGVsc2Ugbm9BdHRhY2htZW50c1wiPlxuICAgICAgICAgIFNldCBhbiBlbnZpcm9ubWVudCBvbiB0aGlzIHRlc3QgY2FzZSB0byBzZWUgaXRzIHRlc3QgZGF0YSBwcm9maWxlcy5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9BdHRhY2htZW50cz5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoVGVybTsgZWxzZSBub1Byb2ZpbGVzQXRBbGxcIj5cbiAgICAgICAgICAgIE5vIHByb2ZpbGVzIG1hdGNoICZsZHF1bzt7eyBzZWFyY2hUZXJtIH19JnJkcXVvOy5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI25vUHJvZmlsZXNBdEFsbD5ObyB0ZXN0IGRhdGEgcHJvZmlsZXMgYXR0YWNoZWQgdG8gdGhpcyBlbnZpcm9ubWVudCB5ZXQuPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nUHJvZmlsZXNcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIiBhcmlhLWJ1c3k9XCJ0cnVlXCIgYXJpYS1sYWJlbD1cIkxvYWRpbmcgdGVzdCBkYXRhIHByb2ZpbGVzXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IF8gb2Ygc2tlbGV0b25DYXJkc1wiXG4gICAgICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1weC0zIGNxYS1weS1bMTBweF0gY3FhLXJvdW5kZWQtbGcgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFMkU4RjBdIGNxYS1iZy13aGl0ZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWdhcC0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWgtMyBjcWEtdy0xLzIgY3FhLXJvdW5kZWQgY3FhLWJnLVsjRTJFOEYwXSBjcWEtYW5pbWF0ZS1wdWxzZVwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1oLTMgY3FhLXctOCBjcWEtcm91bmRlZCBjcWEtYmctWyNFMkU4RjBdIGNxYS1hbmltYXRlLXB1bHNlXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtaC0yIGNxYS13LTEvMyBjcWEtcm91bmRlZCBjcWEtYmctWyNFMkU4RjBdIGNxYS1hbmltYXRlLXB1bHNlXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWgtMyBjcWEtdy0xMiBjcWEtcm91bmRlZC1mdWxsIGNxYS1iZy1bI0UyRThGMF0gY3FhLWFuaW1hdGUtcHVsc2VcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saWJyYXJ5LXBhbmVsLm1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdGVzdC1jYXNlLWRldGFpbHMvZGF0YS1saWJyYXJ5LXBhbmVsL2RhdGEtbGlicmFyeS1wYW5lbC5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudENhcmRWbSB7XG4gIGlkOiBudW1iZXIgfCBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgc2NyZWVuOiBzdHJpbmc7XG4gIHVwZGF0ZWRSZWxhdGl2ZTogc3RyaW5nO1xuICBsb2NhdG9yQmFkZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9maWxlQ2FyZFZtIHtcbiAgYXR0YWNobWVudElkOiBudW1iZXIgfCBzdHJpbmc7XG4gIHRlc3REYXRhSWQ6IG51bWJlciB8IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICByb3dzQ291bnQ6IG51bWJlcjtcbiAgY29sdW1uc0NvdW50OiBudW1iZXI7XG4gIHBlcm1pc3Npb246ICdSTycgfCAnUlcnIHwgbnVsbDtcbiAgYWN0aXZlT25UZXN0Q2FzZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgRGF0YUxpYnJhcnlTdWJUYWIgPSAnZWxlbWVudHMnIHwgJ3Byb2ZpbGVzJztcbiJdfQ==
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "../../badge/badge.component";
|
|
4
|
-
import * as i2 from "@angular/common";
|
|
5
|
-
export class ElementCardComponent {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.name = '';
|
|
8
|
-
this.screen = '';
|
|
9
|
-
this.updatedRelative = '';
|
|
10
|
-
this.locatorBadge = '';
|
|
11
|
-
this.selected = false;
|
|
12
|
-
this.cardClick = new EventEmitter();
|
|
13
|
-
}
|
|
14
|
-
onClick() {
|
|
15
|
-
this.cardClick.emit();
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
ElementCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ElementCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
19
|
-
ElementCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ElementCardComponent, selector: "cqa-element-card", inputs: { name: "name", screen: "screen", updatedRelative: "updatedRelative", locatorBadge: "locatorBadge", selected: "selected" }, outputs: { cardClick: "cardClick" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<button\n type=\"button\"\n (click)=\"onClick()\"\n [ngClass]=\"selected\n ? 'cqa-border-[#818CF8] cqa-bg-[#EEF2FF] cqa-shadow-[inset_3px_0_0_0_#4F46E5]'\n : 'cqa-border-[#E2E8F0] cqa-bg-white hover:cqa-bg-[#FAFAFF] hover:cqa-border-[#C7D2FE]'\"\n class=\"cqa-relative cqa-flex cqa-flex-col cqa-gap-1 cqa-w-full cqa-px-3 cqa-py-[10px] cqa-rounded-lg cqa-border cqa-border-solid cqa-text-left cqa-cursor-pointer cqa-transition-all cqa-duration-150 focus:cqa-outline-none\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-w-full\">\n <span class=\"cqa-flex-1 cqa-min-w-0 cqa-truncate cqa-text-[13px] cqa-font-semibold cqa-text-[#0F172A]\">\n {{ name }}\n </span>\n <cqa-badge\n *ngIf=\"locatorBadge\"\n [label]=\"locatorBadge\"\n size=\"extra-small\"\n variant=\"default\"\n backgroundColor=\"#F1F5F9\"\n textColor=\"#475569\"\n borderColor=\"#E2E8F0\">\n </cqa-badge>\n </div>\n <div class=\"cqa-truncate cqa-text-xs cqa-text-[#64748B]\">Screen: {{ screen }}</div>\n <div *ngIf=\"updatedRelative\" class=\"cqa-text-[11px] cqa-text-[#94A3B8]\">{{ updatedRelative }}</div>\n</button>\n", components: [{ type: i1.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading", "fullWidth", "centerContent", "title"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
20
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ElementCardComponent, decorators: [{
|
|
21
|
-
type: Component,
|
|
22
|
-
args: [{ selector: 'cqa-element-card', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n type=\"button\"\n (click)=\"onClick()\"\n [ngClass]=\"selected\n ? 'cqa-border-[#818CF8] cqa-bg-[#EEF2FF] cqa-shadow-[inset_3px_0_0_0_#4F46E5]'\n : 'cqa-border-[#E2E8F0] cqa-bg-white hover:cqa-bg-[#FAFAFF] hover:cqa-border-[#C7D2FE]'\"\n class=\"cqa-relative cqa-flex cqa-flex-col cqa-gap-1 cqa-w-full cqa-px-3 cqa-py-[10px] cqa-rounded-lg cqa-border cqa-border-solid cqa-text-left cqa-cursor-pointer cqa-transition-all cqa-duration-150 focus:cqa-outline-none\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-w-full\">\n <span class=\"cqa-flex-1 cqa-min-w-0 cqa-truncate cqa-text-[13px] cqa-font-semibold cqa-text-[#0F172A]\">\n {{ name }}\n </span>\n <cqa-badge\n *ngIf=\"locatorBadge\"\n [label]=\"locatorBadge\"\n size=\"extra-small\"\n variant=\"default\"\n backgroundColor=\"#F1F5F9\"\n textColor=\"#475569\"\n borderColor=\"#E2E8F0\">\n </cqa-badge>\n </div>\n <div class=\"cqa-truncate cqa-text-xs cqa-text-[#64748B]\">Screen: {{ screen }}</div>\n <div *ngIf=\"updatedRelative\" class=\"cqa-text-[11px] cqa-text-[#94A3B8]\">{{ updatedRelative }}</div>\n</button>\n" }]
|
|
23
|
-
}], propDecorators: { name: [{
|
|
24
|
-
type: Input
|
|
25
|
-
}], screen: [{
|
|
26
|
-
type: Input
|
|
27
|
-
}], updatedRelative: [{
|
|
28
|
-
type: Input
|
|
29
|
-
}], locatorBadge: [{
|
|
30
|
-
type: Input
|
|
31
|
-
}], selected: [{
|
|
32
|
-
type: Input
|
|
33
|
-
}], cardClick: [{
|
|
34
|
-
type: Output
|
|
35
|
-
}] } });
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdGVzdC1jYXNlLWRldGFpbHMvZGF0YS1saWJyYXJ5LXBhbmVsL2VsZW1lbnQtY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2RhdGEtbGlicmFyeS1wYW5lbC9lbGVtZW50LWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7Ozs7QUFRdkIsTUFBTSxPQUFPLG9CQUFvQjtJQU5qQztRQU9XLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixXQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ1osb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDckIsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFDbEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVoQixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztLQUtoRDtJQUhDLE9BQU87UUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7O2lIQVhVLG9CQUFvQjtxR0FBcEIsb0JBQW9CLDBRQ2RqQywwcENBd0JBOzJGRFZhLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDRSxrQkFBa0IsUUFFdEIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLG1CQUNiLHVCQUF1QixDQUFDLE1BQU07OEJBR3RDLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUksU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1lbGVtZW50LWNhcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZWxlbWVudC1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRWxlbWVudENhcmRDb21wb25lbnQge1xuICBASW5wdXQoKSBuYW1lID0gJyc7XG4gIEBJbnB1dCgpIHNjcmVlbiA9ICcnO1xuICBASW5wdXQoKSB1cGRhdGVkUmVsYXRpdmUgPSAnJztcbiAgQElucHV0KCkgbG9jYXRvckJhZGdlID0gJyc7XG4gIEBJbnB1dCgpIHNlbGVjdGVkID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIGNhcmRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBvbkNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuY2FyZENsaWNrLmVtaXQoKTtcbiAgfVxufVxuIiwiPGJ1dHRvblxuICB0eXBlPVwiYnV0dG9uXCJcbiAgKGNsaWNrKT1cIm9uQ2xpY2soKVwiXG4gIFtuZ0NsYXNzXT1cInNlbGVjdGVkXG4gICAgPyAnY3FhLWJvcmRlci1bIzgxOENGOF0gY3FhLWJnLVsjRUVGMkZGXSBjcWEtc2hhZG93LVtpbnNldF8zcHhfMF8wXzBfIzRGNDZFNV0nXG4gICAgOiAnY3FhLWJvcmRlci1bI0UyRThGMF0gY3FhLWJnLXdoaXRlIGhvdmVyOmNxYS1iZy1bI0ZBRkFGRl0gaG92ZXI6Y3FhLWJvcmRlci1bI0M3RDJGRV0nXCJcbiAgY2xhc3M9XCJjcWEtcmVsYXRpdmUgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMSBjcWEtdy1mdWxsIGNxYS1weC0zIGNxYS1weS1bMTBweF0gY3FhLXJvdW5kZWQtbGcgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS10ZXh0LWxlZnQgY3FhLWN1cnNvci1wb2ludGVyIGNxYS10cmFuc2l0aW9uLWFsbCBjcWEtZHVyYXRpb24tMTUwIGZvY3VzOmNxYS1vdXRsaW5lLW5vbmVcIj5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTIgY3FhLXctZnVsbFwiPlxuICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtbWluLXctMCBjcWEtdHJ1bmNhdGUgY3FhLXRleHQtWzEzcHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMEYxNzJBXVwiPlxuICAgICAge3sgbmFtZSB9fVxuICAgIDwvc3Bhbj5cbiAgICA8Y3FhLWJhZGdlXG4gICAgICAqbmdJZj1cImxvY2F0b3JCYWRnZVwiXG4gICAgICBbbGFiZWxdPVwibG9jYXRvckJhZGdlXCJcbiAgICAgIHNpemU9XCJleHRyYS1zbWFsbFwiXG4gICAgICB2YXJpYW50PVwiZGVmYXVsdFwiXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I9XCIjRjFGNUY5XCJcbiAgICAgIHRleHRDb2xvcj1cIiM0NzU1NjlcIlxuICAgICAgYm9yZGVyQ29sb3I9XCIjRTJFOEYwXCI+XG4gICAgPC9jcWEtYmFkZ2U+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY3FhLXRydW5jYXRlIGNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjNjQ3NDhCXVwiPlNjcmVlbjoge3sgc2NyZWVuIH19PC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJ1cGRhdGVkUmVsYXRpdmVcIiBjbGFzcz1cImNxYS10ZXh0LVsxMXB4XSBjcWEtdGV4dC1bIzk0QTNCOF1cIj57eyB1cGRhdGVkUmVsYXRpdmUgfX08L2Rpdj5cbjwvYnV0dG9uPlxuIl19
|
package/esm2020/lib/test-case-details/data-library-panel/test-data-profile-card.component.mjs
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "../../badge/badge.component";
|
|
4
|
-
import * as i2 from "@angular/common";
|
|
5
|
-
export class TestDataProfileCardComponent {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.name = '';
|
|
8
|
-
this.rowsCount = 0;
|
|
9
|
-
this.columnsCount = 0;
|
|
10
|
-
this.permission = null;
|
|
11
|
-
this.activeOnTestCase = false;
|
|
12
|
-
}
|
|
13
|
-
get rowsLabel() {
|
|
14
|
-
return this.rowsCount === 1 ? 'row' : 'rows';
|
|
15
|
-
}
|
|
16
|
-
get colsLabel() {
|
|
17
|
-
return this.columnsCount === 1 ? 'col' : 'cols';
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
TestDataProfileCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestDataProfileCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
21
|
-
TestDataProfileCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TestDataProfileCardComponent, selector: "cqa-test-data-profile-card", inputs: { name: "name", rowsCount: "rowsCount", columnsCount: "columnsCount", environmentName: "environmentName", permission: "permission", activeOnTestCase: "activeOnTestCase" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-relative cqa-flex cqa-flex-col cqa-gap-1 cqa-w-full cqa-px-3 cqa-py-[10px] cqa-rounded-lg cqa-border cqa-border-solid cqa-border-[#E2E8F0] cqa-bg-white cqa-text-left\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-w-full\">\n <span class=\"cqa-flex-1 cqa-min-w-0 cqa-truncate cqa-text-[13px] cqa-font-semibold cqa-text-[#0F172A]\">\n {{ name }}\n </span>\n <cqa-badge\n *ngIf=\"permission === 'RO'\"\n label=\"RO\"\n size=\"extra-small\"\n variant=\"error\">\n </cqa-badge>\n <cqa-badge\n *ngIf=\"permission === 'RW'\"\n label=\"RW\"\n size=\"extra-small\"\n variant=\"success\">\n </cqa-badge>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-w-full cqa-mt-[2px]\">\n <span class=\"cqa-text-xs cqa-text-[#64748B]\">\n {{ rowsCount }} {{ rowsLabel }} · {{ columnsCount }} {{ colsLabel }}\n </span>\n <span\n *ngIf=\"environmentName\"\n class=\"cqa-flex-shrink-0 cqa-text-[11px] cqa-font-medium cqa-px-2 cqa-py-[2px] cqa-rounded-full cqa-bg-[#EFF6FF] cqa-text-[#1E40AF] cqa-border cqa-border-solid cqa-border-[#DBEAFE]\">\n {{ environmentName }}\n </span>\n </div>\n <div *ngIf=\"activeOnTestCase\" class=\"cqa-mt-1\">\n <span class=\"cqa-inline-block cqa-text-[11px] cqa-font-medium cqa-px-[6px] cqa-py-[2px] cqa-rounded cqa-bg-[#F5F3FF] cqa-text-[#6D28D9] cqa-border cqa-border-solid cqa-border-[#DDD6FE]\">\n Active on this test case\n </span>\n </div>\n</div>\n", components: [{ type: i1.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading", "fullWidth", "centerContent", "title"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
22
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestDataProfileCardComponent, decorators: [{
|
|
23
|
-
type: Component,
|
|
24
|
-
args: [{ selector: 'cqa-test-data-profile-card', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-relative cqa-flex cqa-flex-col cqa-gap-1 cqa-w-full cqa-px-3 cqa-py-[10px] cqa-rounded-lg cqa-border cqa-border-solid cqa-border-[#E2E8F0] cqa-bg-white cqa-text-left\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-w-full\">\n <span class=\"cqa-flex-1 cqa-min-w-0 cqa-truncate cqa-text-[13px] cqa-font-semibold cqa-text-[#0F172A]\">\n {{ name }}\n </span>\n <cqa-badge\n *ngIf=\"permission === 'RO'\"\n label=\"RO\"\n size=\"extra-small\"\n variant=\"error\">\n </cqa-badge>\n <cqa-badge\n *ngIf=\"permission === 'RW'\"\n label=\"RW\"\n size=\"extra-small\"\n variant=\"success\">\n </cqa-badge>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-w-full cqa-mt-[2px]\">\n <span class=\"cqa-text-xs cqa-text-[#64748B]\">\n {{ rowsCount }} {{ rowsLabel }} · {{ columnsCount }} {{ colsLabel }}\n </span>\n <span\n *ngIf=\"environmentName\"\n class=\"cqa-flex-shrink-0 cqa-text-[11px] cqa-font-medium cqa-px-2 cqa-py-[2px] cqa-rounded-full cqa-bg-[#EFF6FF] cqa-text-[#1E40AF] cqa-border cqa-border-solid cqa-border-[#DBEAFE]\">\n {{ environmentName }}\n </span>\n </div>\n <div *ngIf=\"activeOnTestCase\" class=\"cqa-mt-1\">\n <span class=\"cqa-inline-block cqa-text-[11px] cqa-font-medium cqa-px-[6px] cqa-py-[2px] cqa-rounded cqa-bg-[#F5F3FF] cqa-text-[#6D28D9] cqa-border cqa-border-solid cqa-border-[#DDD6FE]\">\n Active on this test case\n </span>\n </div>\n</div>\n" }]
|
|
25
|
-
}], propDecorators: { name: [{
|
|
26
|
-
type: Input
|
|
27
|
-
}], rowsCount: [{
|
|
28
|
-
type: Input
|
|
29
|
-
}], columnsCount: [{
|
|
30
|
-
type: Input
|
|
31
|
-
}], environmentName: [{
|
|
32
|
-
type: Input
|
|
33
|
-
}], permission: [{
|
|
34
|
-
type: Input
|
|
35
|
-
}], activeOnTestCase: [{
|
|
36
|
-
type: Input
|
|
37
|
-
}] } });
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1kYXRhLXByb2ZpbGUtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2RhdGEtbGlicmFyeS1wYW5lbC90ZXN0LWRhdGEtcHJvZmlsZS1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdGVzdC1jYXNlLWRldGFpbHMvZGF0YS1saWJyYXJ5LXBhbmVsL3Rlc3QtZGF0YS1wcm9maWxlLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFRMUUsTUFBTSxPQUFPLDRCQUE0QjtJQU56QztRQU9XLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsaUJBQVksR0FBRyxDQUFDLENBQUM7UUFFakIsZUFBVSxHQUF3QixJQUFJLENBQUM7UUFDdkMscUJBQWdCLEdBQUcsS0FBSyxDQUFDO0tBU25DO0lBUEMsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2xELENBQUM7O3lIQWRVLDRCQUE0Qjs2R0FBNUIsNEJBQTRCLCtSQ1J6QywraERBa0NBOzJGRDFCYSw0QkFBNEI7a0JBTnhDLFNBQVM7K0JBQ0UsNEJBQTRCLFFBRWhDLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxtQkFDYix1QkFBdUIsQ0FBQyxNQUFNOzhCQUd0QyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtdGVzdC1kYXRhLXByb2ZpbGUtY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXN0LWRhdGEtcHJvZmlsZS1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGVzdERhdGFQcm9maWxlQ2FyZENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIG5hbWUgPSAnJztcbiAgQElucHV0KCkgcm93c0NvdW50ID0gMDtcbiAgQElucHV0KCkgY29sdW1uc0NvdW50ID0gMDtcbiAgQElucHV0KCkgZW52aXJvbm1lbnROYW1lPzogc3RyaW5nO1xuICBASW5wdXQoKSBwZXJtaXNzaW9uPzogJ1JPJyB8ICdSVycgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgYWN0aXZlT25UZXN0Q2FzZSA9IGZhbHNlO1xuXG4gIGdldCByb3dzTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzQ291bnQgPT09IDEgPyAncm93JyA6ICdyb3dzJztcbiAgfVxuXG4gIGdldCBjb2xzTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zQ291bnQgPT09IDEgPyAnY29sJyA6ICdjb2xzJztcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNxYS1yZWxhdGl2ZSBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xIGNxYS13LWZ1bGwgY3FhLXB4LTMgY3FhLXB5LVsxMHB4XSBjcWEtcm91bmRlZC1sZyBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0UyRThGMF0gY3FhLWJnLXdoaXRlIGNxYS10ZXh0LWxlZnRcIj5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTIgY3FhLXctZnVsbFwiPlxuICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtbWluLXctMCBjcWEtdHJ1bmNhdGUgY3FhLXRleHQtWzEzcHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMEYxNzJBXVwiPlxuICAgICAge3sgbmFtZSB9fVxuICAgIDwvc3Bhbj5cbiAgICA8Y3FhLWJhZGdlXG4gICAgICAqbmdJZj1cInBlcm1pc3Npb24gPT09ICdSTydcIlxuICAgICAgbGFiZWw9XCJST1wiXG4gICAgICBzaXplPVwiZXh0cmEtc21hbGxcIlxuICAgICAgdmFyaWFudD1cImVycm9yXCI+XG4gICAgPC9jcWEtYmFkZ2U+XG4gICAgPGNxYS1iYWRnZVxuICAgICAgKm5nSWY9XCJwZXJtaXNzaW9uID09PSAnUlcnXCJcbiAgICAgIGxhYmVsPVwiUldcIlxuICAgICAgc2l6ZT1cImV4dHJhLXNtYWxsXCJcbiAgICAgIHZhcmlhbnQ9XCJzdWNjZXNzXCI+XG4gICAgPC9jcWEtYmFkZ2U+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtMiBjcWEtdy1mdWxsIGNxYS1tdC1bMnB4XVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyM2NDc0OEJdXCI+XG4gICAgICB7eyByb3dzQ291bnQgfX0ge3sgcm93c0xhYmVsIH19ICZtaWRkb3Q7IHt7IGNvbHVtbnNDb3VudCB9fSB7eyBjb2xzTGFiZWwgfX1cbiAgICA8L3NwYW4+XG4gICAgPHNwYW5cbiAgICAgICpuZ0lmPVwiZW52aXJvbm1lbnROYW1lXCJcbiAgICAgIGNsYXNzPVwiY3FhLWZsZXgtc2hyaW5rLTAgY3FhLXRleHQtWzExcHhdIGNxYS1mb250LW1lZGl1bSBjcWEtcHgtMiBjcWEtcHktWzJweF0gY3FhLXJvdW5kZWQtZnVsbCBjcWEtYmctWyNFRkY2RkZdIGNxYS10ZXh0LVsjMUU0MEFGXSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0RCRUFGRV1cIj5cbiAgICAgIHt7IGVudmlyb25tZW50TmFtZSB9fVxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJhY3RpdmVPblRlc3RDYXNlXCIgY2xhc3M9XCJjcWEtbXQtMVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiY3FhLWlubGluZS1ibG9jayBjcWEtdGV4dC1bMTFweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1weC1bNnB4XSBjcWEtcHktWzJweF0gY3FhLXJvdW5kZWQgY3FhLWJnLVsjRjVGM0ZGXSBjcWEtdGV4dC1bIzZEMjhEOV0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNEREQ2RkVdXCI+XG4gICAgICBBY3RpdmUgb24gdGhpcyB0ZXN0IGNhc2VcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectorRef, ElementRef, EventEmitter } from '@angular/core';
|
|
2
|
-
import { GlobalVariableTagOption } from './new-global-variable-dialog.models';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
/**
|
|
5
|
-
* Tag chip-list + autocomplete used by the New / Edit Global Variable dialog.
|
|
6
|
-
* Mirrors the React `TagsEditor` block in
|
|
7
|
-
* `Environment and Data Management_CD Deisgns/src/Global.jsx:179-237`:
|
|
8
|
-
*
|
|
9
|
-
* [chip × …] [+ Add tag] ← inactive state
|
|
10
|
-
* [chip × …] [_input_ ↳ suggestions] ← active state
|
|
11
|
-
*
|
|
12
|
-
* Behavior:
|
|
13
|
-
* - Backspace on an empty input removes the last tag.
|
|
14
|
-
* - Enter commits the trimmed lowercase value (creates if not in available).
|
|
15
|
-
* - Escape exits the input without committing.
|
|
16
|
-
* - Suggestions are computed from `availableTags`, capped at 4.
|
|
17
|
-
*/
|
|
18
|
-
export declare class GlobalVariableTagsInputComponent {
|
|
19
|
-
private readonly cdr;
|
|
20
|
-
tags: string[];
|
|
21
|
-
availableTags: GlobalVariableTagOption[];
|
|
22
|
-
tagsChange: EventEmitter<string[]>;
|
|
23
|
-
tagInputRef?: ElementRef<HTMLInputElement>;
|
|
24
|
-
adding: boolean;
|
|
25
|
-
draft: string;
|
|
26
|
-
constructor(cdr: ChangeDetectorRef);
|
|
27
|
-
get suggestions(): GlobalVariableTagOption[];
|
|
28
|
-
beginAdd(): void;
|
|
29
|
-
onDraftChange(next: string): void;
|
|
30
|
-
onKeyDown(event: KeyboardEvent): void;
|
|
31
|
-
onSuggestionMouseDown(event: MouseEvent, suggestion: GlobalVariableTagOption): void;
|
|
32
|
-
onBlur(): void;
|
|
33
|
-
removeAt(index: number): void;
|
|
34
|
-
private commitDraft;
|
|
35
|
-
private commit;
|
|
36
|
-
private cancelAdd;
|
|
37
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<GlobalVariableTagsInputComponent, never>;
|
|
38
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<GlobalVariableTagsInputComponent, "lib-global-variable-tags-input", never, { "tags": "tags"; "availableTags": "availableTags"; }, { "tagsChange": "tagsChange"; }, never, never>;
|
|
39
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from '@angular/core';
|
|
2
|
-
import { SegmentOption } from '../../segment-control/segment-control.component';
|
|
3
|
-
import { DataLibrarySubTab, ElementCardVm, ProfileCardVm } from './data-library-panel.models';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export declare class DataLibraryPanelComponent {
|
|
6
|
-
searchTerm: string;
|
|
7
|
-
searchPlaceholder: string;
|
|
8
|
-
/** The active environment name, e.g. "QA". Empty/undefined renders "this test case" in the banner and hides the env chip on profile cards. */
|
|
9
|
-
environmentName?: string;
|
|
10
|
-
activeSubTab: DataLibrarySubTab;
|
|
11
|
-
elements: ElementCardVm[];
|
|
12
|
-
profiles: ProfileCardVm[];
|
|
13
|
-
isLoadingElements: boolean;
|
|
14
|
-
isLoadingProfiles: boolean;
|
|
15
|
-
selectedElementId: number | string | null;
|
|
16
|
-
hasEnvironment: boolean;
|
|
17
|
-
showElementsLink: boolean;
|
|
18
|
-
showManageProfilesLink: boolean;
|
|
19
|
-
searchTermChange: EventEmitter<string>;
|
|
20
|
-
search: EventEmitter<string>;
|
|
21
|
-
searchCleared: EventEmitter<void>;
|
|
22
|
-
activeSubTabChange: EventEmitter<DataLibrarySubTab>;
|
|
23
|
-
elementCardClick: EventEmitter<string | number>;
|
|
24
|
-
viewFullElementsClick: EventEmitter<void>;
|
|
25
|
-
manageProfilesClick: EventEmitter<void>;
|
|
26
|
-
/** Stable reference required by cqa-segment-control. */
|
|
27
|
-
readonly segments: SegmentOption[];
|
|
28
|
-
/** Stable iteration source for skeleton placeholders during loading. */
|
|
29
|
-
readonly skeletonCards: number[];
|
|
30
|
-
onSearchValueChange(value: string): void;
|
|
31
|
-
onSearchSubmit(value: string): void;
|
|
32
|
-
onSearchCleared(): void;
|
|
33
|
-
onSegmentChange(value: string): void;
|
|
34
|
-
onElementClick(id: number | string): void;
|
|
35
|
-
onViewFullElements(event: Event): void;
|
|
36
|
-
onManageProfiles(event: Event): void;
|
|
37
|
-
trackByElementId(_i: number, item: ElementCardVm): number | string;
|
|
38
|
-
trackByAttachmentId(_i: number, item: ProfileCardVm): number | string;
|
|
39
|
-
get bannerLabel(): string;
|
|
40
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DataLibraryPanelComponent, never>;
|
|
41
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DataLibraryPanelComponent, "cqa-data-library-panel", never, { "searchTerm": "searchTerm"; "searchPlaceholder": "searchPlaceholder"; "environmentName": "environmentName"; "activeSubTab": "activeSubTab"; "elements": "elements"; "profiles": "profiles"; "isLoadingElements": "isLoadingElements"; "isLoadingProfiles": "isLoadingProfiles"; "selectedElementId": "selectedElementId"; "hasEnvironment": "hasEnvironment"; "showElementsLink": "showElementsLink"; "showManageProfilesLink": "showManageProfilesLink"; }, { "searchTermChange": "searchTermChange"; "search": "search"; "searchCleared": "searchCleared"; "activeSubTabChange": "activeSubTabChange"; "elementCardClick": "elementCardClick"; "viewFullElementsClick": "viewFullElementsClick"; "manageProfilesClick": "manageProfilesClick"; }, never, never>;
|
|
42
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export interface ElementCardVm {
|
|
2
|
-
id: number | string;
|
|
3
|
-
name: string;
|
|
4
|
-
screen: string;
|
|
5
|
-
updatedRelative: string;
|
|
6
|
-
locatorBadge: string;
|
|
7
|
-
}
|
|
8
|
-
export interface ProfileCardVm {
|
|
9
|
-
attachmentId: number | string;
|
|
10
|
-
testDataId: number | string;
|
|
11
|
-
name: string;
|
|
12
|
-
rowsCount: number;
|
|
13
|
-
columnsCount: number;
|
|
14
|
-
permission: 'RO' | 'RW' | null;
|
|
15
|
-
activeOnTestCase: boolean;
|
|
16
|
-
}
|
|
17
|
-
export declare type DataLibrarySubTab = 'elements' | 'profiles';
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export declare class ElementCardComponent {
|
|
4
|
-
name: string;
|
|
5
|
-
screen: string;
|
|
6
|
-
updatedRelative: string;
|
|
7
|
-
locatorBadge: string;
|
|
8
|
-
selected: boolean;
|
|
9
|
-
cardClick: EventEmitter<void>;
|
|
10
|
-
onClick(): void;
|
|
11
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ElementCardComponent, never>;
|
|
12
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ElementCardComponent, "cqa-element-card", never, { "name": "name"; "screen": "screen"; "updatedRelative": "updatedRelative"; "locatorBadge": "locatorBadge"; "selected": "selected"; }, { "cardClick": "cardClick"; }, never, never>;
|
|
13
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import * as i0 from "@angular/core";
|
|
2
|
-
export declare class TestDataProfileCardComponent {
|
|
3
|
-
name: string;
|
|
4
|
-
rowsCount: number;
|
|
5
|
-
columnsCount: number;
|
|
6
|
-
environmentName?: string;
|
|
7
|
-
permission?: 'RO' | 'RW' | null;
|
|
8
|
-
activeOnTestCase: boolean;
|
|
9
|
-
get rowsLabel(): string;
|
|
10
|
-
get colsLabel(): string;
|
|
11
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<TestDataProfileCardComponent, never>;
|
|
12
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TestDataProfileCardComponent, "cqa-test-data-profile-card", never, { "name": "name"; "rowsCount": "rowsCount"; "columnsCount": "columnsCount"; "environmentName": "environmentName"; "permission": "permission"; "activeOnTestCase": "activeOnTestCase"; }, {}, never, never>;
|
|
13
|
-
}
|