@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,38 @@
|
|
|
1
|
+
import { Component, Input, ContentChild } from '@angular/core';
|
|
2
|
+
import { DetailDrawerTabContentDirective } from '../detail-drawer-tab-content.directive';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class DetailDrawerTabComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
/** Tab label (shown in tooltip on icon button) */
|
|
7
|
+
this.label = '';
|
|
8
|
+
/** Tab value (unique identifier) */
|
|
9
|
+
this.value = '';
|
|
10
|
+
/** Material icon name for the tab button */
|
|
11
|
+
this.icon = 'folder';
|
|
12
|
+
}
|
|
13
|
+
get contentTemplate() {
|
|
14
|
+
return this.contentDirective?.templateRef ?? null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
DetailDrawerTabComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DetailDrawerTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
18
|
+
DetailDrawerTabComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DetailDrawerTabComponent, selector: "cqa-detail-drawer-tab", inputs: { label: "label", value: "value", icon: "icon" }, host: { styleAttribute: "display: contents" }, queries: [{ propertyName: "contentDirective", first: true, predicate: DetailDrawerTabContentDirective, descendants: true }], ngImport: i0, template: '', isInline: true });
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DetailDrawerTabComponent, decorators: [{
|
|
20
|
+
type: Component,
|
|
21
|
+
args: [{
|
|
22
|
+
selector: 'cqa-detail-drawer-tab',
|
|
23
|
+
template: '',
|
|
24
|
+
host: {
|
|
25
|
+
style: 'display: contents',
|
|
26
|
+
},
|
|
27
|
+
}]
|
|
28
|
+
}], propDecorators: { label: [{
|
|
29
|
+
type: Input
|
|
30
|
+
}], value: [{
|
|
31
|
+
type: Input
|
|
32
|
+
}], icon: [{
|
|
33
|
+
type: Input
|
|
34
|
+
}], contentDirective: [{
|
|
35
|
+
type: ContentChild,
|
|
36
|
+
args: [DetailDrawerTabContentDirective]
|
|
37
|
+
}] } });
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLWRyYXdlci10YWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9kZXRhaWwtZHJhd2VyL2RldGFpbC1kcmF3ZXItdGFiL2RldGFpbC1kcmF3ZXItdGFiLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7O0FBU3pGLE1BQU0sT0FBTyx3QkFBd0I7SUFQckM7UUFRRSxrREFBa0Q7UUFDekMsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVwQixvQ0FBb0M7UUFDM0IsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVwQiw0Q0FBNEM7UUFDbkMsU0FBSSxHQUFHLFFBQVEsQ0FBQztLQVExQjtJQUhDLElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLElBQUksSUFBSSxDQUFDO0lBQ3BELENBQUM7O3FIQWZVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLG9OQVdyQiwrQkFBK0IsZ0RBaEJuQyxFQUFFOzJGQUtELHdCQUF3QjtrQkFQcEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxRQUFRLEVBQUUsRUFBRTtvQkFDWixJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLG1CQUFtQjtxQkFDM0I7aUJBQ0Y7OEJBR1UsS0FBSztzQkFBYixLQUFLO2dCQUdHLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxJQUFJO3NCQUFaLEtBQUs7Z0JBR3lDLGdCQUFnQjtzQkFBOUQsWUFBWTt1QkFBQywrQkFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBDb250ZW50Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERldGFpbERyYXdlclRhYkNvbnRlbnREaXJlY3RpdmUgfSBmcm9tICcuLi9kZXRhaWwtZHJhd2VyLXRhYi1jb250ZW50LmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1kZXRhaWwtZHJhd2VyLXRhYicsXG4gIHRlbXBsYXRlOiAnJyxcbiAgaG9zdDoge1xuICAgIHN0eWxlOiAnZGlzcGxheTogY29udGVudHMnLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBEZXRhaWxEcmF3ZXJUYWJDb21wb25lbnQge1xuICAvKiogVGFiIGxhYmVsIChzaG93biBpbiB0b29sdGlwIG9uIGljb24gYnV0dG9uKSAqL1xuICBASW5wdXQoKSBsYWJlbCA9ICcnO1xuXG4gIC8qKiBUYWIgdmFsdWUgKHVuaXF1ZSBpZGVudGlmaWVyKSAqL1xuICBASW5wdXQoKSB2YWx1ZSA9ICcnO1xuXG4gIC8qKiBNYXRlcmlhbCBpY29uIG5hbWUgZm9yIHRoZSB0YWIgYnV0dG9uICovXG4gIEBJbnB1dCgpIGljb24gPSAnZm9sZGVyJztcblxuICAvKiogVGVtcGxhdGUgZm9yIHRhYiBjb250ZW50IC0gdXNlIHdpdGggbmctdGVtcGxhdGUgY3FhVGFiQ29udGVudCAqL1xuICBAQ29udGVudENoaWxkKERldGFpbERyYXdlclRhYkNvbnRlbnREaXJlY3RpdmUpIGNvbnRlbnREaXJlY3RpdmU/OiBEZXRhaWxEcmF3ZXJUYWJDb250ZW50RGlyZWN0aXZlO1xuXG4gIGdldCBjb250ZW50VGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudERpcmVjdGl2ZT8udGVtcGxhdGVSZWYgPz8gbnVsbDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Directive } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class DetailDrawerTabContentDirective {
|
|
4
|
+
constructor(templateRef) {
|
|
5
|
+
this.templateRef = templateRef;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
DetailDrawerTabContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DetailDrawerTabContentDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
9
|
+
DetailDrawerTabContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.4.0", type: DetailDrawerTabContentDirective, selector: "[cqaTabContent]", ngImport: i0 });
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DetailDrawerTabContentDirective, decorators: [{
|
|
11
|
+
type: Directive,
|
|
12
|
+
args: [{
|
|
13
|
+
selector: '[cqaTabContent]',
|
|
14
|
+
}]
|
|
15
|
+
}], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLWRyYXdlci10YWItY29udGVudC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2RldGFpbC1kcmF3ZXIvZGV0YWlsLWRyYXdlci10YWItY29udGVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBZSxNQUFNLGVBQWUsQ0FBQzs7QUFLdkQsTUFBTSxPQUFPLCtCQUErQjtJQUMxQyxZQUFtQixXQUFpQztRQUFqQyxnQkFBVyxHQUFYLFdBQVcsQ0FBc0I7SUFBRyxDQUFDOzs0SEFEN0MsK0JBQStCO2dIQUEvQiwrQkFBK0I7MkZBQS9CLCtCQUErQjtrQkFIM0MsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2lCQUM1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2NxYVRhYkNvbnRlbnRdJyxcbn0pXG5leHBvcnQgY2xhc3MgRGV0YWlsRHJhd2VyVGFiQ29udGVudERpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8dW5rbm93bj4pIHt9XG59XG4iXX0=
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ContentChildren, HostBinding, } from '@angular/core';
|
|
2
|
+
import { DetailDrawerTabComponent } from './detail-drawer-tab/detail-drawer-tab.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/material/icon";
|
|
5
|
+
import * as i2 from "@angular/material/tooltip";
|
|
6
|
+
import * as i3 from "@angular/common";
|
|
7
|
+
export class DetailDrawerComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
/** Currently active tab value */
|
|
10
|
+
this.activeTab = '';
|
|
11
|
+
/** Whether to show the close button */
|
|
12
|
+
this.showCloseButton = true;
|
|
13
|
+
/** Whether the drawer is expanded */
|
|
14
|
+
this.expanded = true;
|
|
15
|
+
/** Panel width when expanded */
|
|
16
|
+
this.expandedWidth = '280px';
|
|
17
|
+
/** Maximum width when expanded (e.g. '600px', '30vw'). Default: 30% of viewport */
|
|
18
|
+
this.maxExpandedWidth = '30vw';
|
|
19
|
+
/** Panel width when collapsed */
|
|
20
|
+
this.collapsedWidth = '56px';
|
|
21
|
+
this.expandTooltip = 'Expand';
|
|
22
|
+
this.collapseTooltip = 'Collapse';
|
|
23
|
+
this.closeTooltip = 'Close';
|
|
24
|
+
this.activeTabChange = new EventEmitter();
|
|
25
|
+
this.expandToggle = new EventEmitter();
|
|
26
|
+
this.close = new EventEmitter();
|
|
27
|
+
}
|
|
28
|
+
get hostWidth() {
|
|
29
|
+
return this.expanded ? this.expandedWidth : this.collapsedWidth;
|
|
30
|
+
}
|
|
31
|
+
get hostMinWidth() {
|
|
32
|
+
return this.expanded && this.minExpandedWidth ? this.minExpandedWidth : null;
|
|
33
|
+
}
|
|
34
|
+
get hostMaxWidth() {
|
|
35
|
+
return this.expanded ? this.maxExpandedWidth : null;
|
|
36
|
+
}
|
|
37
|
+
ngAfterContentInit() {
|
|
38
|
+
this.ensureActiveTab();
|
|
39
|
+
}
|
|
40
|
+
ngAfterContentChecked() {
|
|
41
|
+
this.ensureActiveTab();
|
|
42
|
+
}
|
|
43
|
+
ensureActiveTab() {
|
|
44
|
+
const tabs = this.tabComponents?.toArray() ?? [];
|
|
45
|
+
if (tabs.length > 0 && !this.activeTab) {
|
|
46
|
+
this.activeTab = tabs[0].value;
|
|
47
|
+
this.activeTabChange.emit(this.activeTab);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
onTabClick(tab) {
|
|
51
|
+
// If drawer is collapsed, open it (but never close on tab click)
|
|
52
|
+
if (!this.expanded) {
|
|
53
|
+
this.expandToggle.emit();
|
|
54
|
+
}
|
|
55
|
+
// Select the tab
|
|
56
|
+
if (tab.value !== this.activeTab) {
|
|
57
|
+
this.activeTab = tab.value;
|
|
58
|
+
this.activeTabChange.emit(this.activeTab);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
onExpandToggle() {
|
|
62
|
+
this.expandToggle.emit();
|
|
63
|
+
}
|
|
64
|
+
onClose() {
|
|
65
|
+
this.close.emit();
|
|
66
|
+
}
|
|
67
|
+
trackByValue(_i, tab) {
|
|
68
|
+
return tab.value;
|
|
69
|
+
}
|
|
70
|
+
isTabActive(tab) {
|
|
71
|
+
return tab.value === this.activeTab;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
DetailDrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DetailDrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
75
|
+
DetailDrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DetailDrawerComponent, selector: "cqa-detail-drawer", inputs: { activeTab: "activeTab", showCloseButton: "showCloseButton", expanded: "expanded", expandedWidth: "expandedWidth", minExpandedWidth: "minExpandedWidth", maxExpandedWidth: "maxExpandedWidth", collapsedWidth: "collapsedWidth", expandTooltip: "expandTooltip", collapseTooltip: "collapseTooltip", closeTooltip: "closeTooltip" }, outputs: { activeTabChange: "activeTabChange", expandToggle: "expandToggle", close: "close" }, host: { properties: { "style.width": "this.hostWidth", "style.min-width": "this.hostMinWidth", "style.max-width": "this.hostMaxWidth" }, styleAttribute: "transition: width 0.3s ease-in-out", classAttribute: "cqa-ui-root cqa-flex cqa-flex-col cqa-h-full cqa-bg-white cqa-shadow-[-4px_0_6px_-1px_rgba(0,0,0,0.05)]" }, queries: [{ propertyName: "tabComponents", predicate: DetailDrawerTabComponent }], ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white\">\n <div\n class=\"cqa-grid cqa-flex-1 cqa-min-h-0 cqa-overflow-hidden\"\n [style.grid-template-columns]=\"expanded ? 'auto 1fr' : 'auto 0fr'\"\n style=\"transition: grid-template-columns 0.3s ease-in-out\">\n <!-- Left vertical icon bar: one button per tab -->\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-min-h-0 cqa-items-center cqa-py-4 cqa-px-2 cqa-border-r cqa-border-[#E2E8F0] cqa-bg-[#FAFAFA] cqa-flex-shrink-0\">\n <!-- Expand / Collapse button (always visible) -->\n <button\n type=\"button\"\n [matTooltip]=\"expanded ? collapseTooltip : expandTooltip\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2 cqa-flex-shrink-0\"\n (click)=\"onExpandToggle()\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">{{ expanded ? 'unfold_less' : 'unfold_more' }}</mat-icon>\n </button>\n <!-- Close button -->\n <button\n *ngIf=\"showCloseButton\"\n type=\"button\"\n [matTooltip]=\"closeTooltip\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2 cqa-flex-shrink-0\"\n (click)=\"onClose()\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">close</mat-icon>\n </button>\n <!-- Tab buttons: equally distributed in remaining space -->\n <div class=\"cqa-flex cqa-flex-1 cqa-flex-col cqa-justify-evenly cqa-items-center cqa-w-full\">\n <button\n *ngFor=\"let tab of tabComponents; trackBy: trackByValue\"\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"isTabActive(tab)\"\n [matTooltip]=\"tab.label\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2 cqa-flex-shrink-0\"\n [ngClass]=\"{\n 'cqa-bg-[#3F43EE] cqa-text-white': isTabActive(tab),\n 'cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155]': !isTabActive(tab)\n }\"\n (click)=\"onTabClick(tab)\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">{{ tab.icon }}</mat-icon>\n </button>\n </div>\n </div>\n\n <!-- Content area: show only the active tab's content -->\n <div class=\"cqa-min-w-0 cqa-overflow-hidden\">\n <div class=\"cqa-h-full cqa-overflow-y-auto cqa-p-4 cqa-min-w-[280px]\">\n <ng-container *ngFor=\"let tab of tabComponents\">\n <ng-container *ngIf=\"tab.value === activeTab && tab.contentTemplate\" [ngTemplateOutlet]=\"tab.contentTemplate\"></ng-container>\n </ng-container>\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.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
76
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DetailDrawerComponent, decorators: [{
|
|
77
|
+
type: Component,
|
|
78
|
+
args: [{ selector: 'cqa-detail-drawer', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
79
|
+
class: 'cqa-ui-root cqa-flex cqa-flex-col cqa-h-full cqa-bg-white cqa-shadow-[-4px_0_6px_-1px_rgba(0,0,0,0.05)]',
|
|
80
|
+
style: 'transition: width 0.3s ease-in-out',
|
|
81
|
+
}, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white\">\n <div\n class=\"cqa-grid cqa-flex-1 cqa-min-h-0 cqa-overflow-hidden\"\n [style.grid-template-columns]=\"expanded ? 'auto 1fr' : 'auto 0fr'\"\n style=\"transition: grid-template-columns 0.3s ease-in-out\">\n <!-- Left vertical icon bar: one button per tab -->\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-min-h-0 cqa-items-center cqa-py-4 cqa-px-2 cqa-border-r cqa-border-[#E2E8F0] cqa-bg-[#FAFAFA] cqa-flex-shrink-0\">\n <!-- Expand / Collapse button (always visible) -->\n <button\n type=\"button\"\n [matTooltip]=\"expanded ? collapseTooltip : expandTooltip\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2 cqa-flex-shrink-0\"\n (click)=\"onExpandToggle()\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">{{ expanded ? 'unfold_less' : 'unfold_more' }}</mat-icon>\n </button>\n <!-- Close button -->\n <button\n *ngIf=\"showCloseButton\"\n type=\"button\"\n [matTooltip]=\"closeTooltip\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2 cqa-flex-shrink-0\"\n (click)=\"onClose()\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">close</mat-icon>\n </button>\n <!-- Tab buttons: equally distributed in remaining space -->\n <div class=\"cqa-flex cqa-flex-1 cqa-flex-col cqa-justify-evenly cqa-items-center cqa-w-full\">\n <button\n *ngFor=\"let tab of tabComponents; trackBy: trackByValue\"\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"isTabActive(tab)\"\n [matTooltip]=\"tab.label\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2 cqa-flex-shrink-0\"\n [ngClass]=\"{\n 'cqa-bg-[#3F43EE] cqa-text-white': isTabActive(tab),\n 'cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155]': !isTabActive(tab)\n }\"\n (click)=\"onTabClick(tab)\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">{{ tab.icon }}</mat-icon>\n </button>\n </div>\n </div>\n\n <!-- Content area: show only the active tab's content -->\n <div class=\"cqa-min-w-0 cqa-overflow-hidden\">\n <div class=\"cqa-h-full cqa-overflow-y-auto cqa-p-4 cqa-min-w-[280px]\">\n <ng-container *ngFor=\"let tab of tabComponents\">\n <ng-container *ngIf=\"tab.value === activeTab && tab.contentTemplate\" [ngTemplateOutlet]=\"tab.contentTemplate\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: [] }]
|
|
82
|
+
}], propDecorators: { tabComponents: [{
|
|
83
|
+
type: ContentChildren,
|
|
84
|
+
args: [DetailDrawerTabComponent]
|
|
85
|
+
}], activeTab: [{
|
|
86
|
+
type: Input
|
|
87
|
+
}], showCloseButton: [{
|
|
88
|
+
type: Input
|
|
89
|
+
}], expanded: [{
|
|
90
|
+
type: Input
|
|
91
|
+
}], expandedWidth: [{
|
|
92
|
+
type: Input
|
|
93
|
+
}], minExpandedWidth: [{
|
|
94
|
+
type: Input
|
|
95
|
+
}], maxExpandedWidth: [{
|
|
96
|
+
type: Input
|
|
97
|
+
}], collapsedWidth: [{
|
|
98
|
+
type: Input
|
|
99
|
+
}], hostWidth: [{
|
|
100
|
+
type: HostBinding,
|
|
101
|
+
args: ['style.width']
|
|
102
|
+
}], hostMinWidth: [{
|
|
103
|
+
type: HostBinding,
|
|
104
|
+
args: ['style.min-width']
|
|
105
|
+
}], hostMaxWidth: [{
|
|
106
|
+
type: HostBinding,
|
|
107
|
+
args: ['style.max-width']
|
|
108
|
+
}], expandTooltip: [{
|
|
109
|
+
type: Input
|
|
110
|
+
}], collapseTooltip: [{
|
|
111
|
+
type: Input
|
|
112
|
+
}], closeTooltip: [{
|
|
113
|
+
type: Input
|
|
114
|
+
}], activeTabChange: [{
|
|
115
|
+
type: Output
|
|
116
|
+
}], expandToggle: [{
|
|
117
|
+
type: Output
|
|
118
|
+
}], close: [{
|
|
119
|
+
type: Output
|
|
120
|
+
}] } });
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLWRyYXdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2RldGFpbC1kcmF3ZXIvZGV0YWlsLWRyYXdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2RldGFpbC1kcmF3ZXIvZGV0YWlsLWRyYXdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLHVCQUF1QixFQUN2QixlQUFlLEVBSWYsV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDOzs7OztBQWEzRixNQUFNLE9BQU8scUJBQXFCO0lBWGxDO1FBY0UsaUNBQWlDO1FBQ3hCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFFeEIsdUNBQXVDO1FBQzlCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBRWhDLHFDQUFxQztRQUM1QixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBRXpCLGdDQUFnQztRQUN2QixrQkFBYSxHQUFHLE9BQU8sQ0FBQztRQUtqQyxtRkFBbUY7UUFDMUUscUJBQWdCLEdBQUcsTUFBTSxDQUFDO1FBRW5DLGlDQUFpQztRQUN4QixtQkFBYyxHQUFHLE1BQU0sQ0FBQztRQWN4QixrQkFBYSxHQUFHLFFBQVEsQ0FBQztRQUN6QixvQkFBZSxHQUFHLFVBQVUsQ0FBQztRQUM3QixpQkFBWSxHQUFHLE9BQU8sQ0FBQztRQUV0QixvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDN0MsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3hDLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0tBNkM1QztJQS9EQyxJQUFnQyxTQUFTO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxD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RyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29udGVudENoaWxkcmVuLFxuICBRdWVyeUxpc3QsXG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEFmdGVyQ29udGVudENoZWNrZWQsXG4gIEhvc3RCaW5kaW5nLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERldGFpbERyYXdlclRhYkNvbXBvbmVudCB9IGZyb20gJy4vZGV0YWlsLWRyYXdlci10YWIvZGV0YWlsLWRyYXdlci10YWIuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWRldGFpbC1kcmF3ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGV0YWlsLWRyYXdlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgY2xhc3M6XG4gICAgICAnY3FhLXVpLXJvb3QgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1oLWZ1bGwgY3FhLWJnLXdoaXRlIGNxYS1zaGFkb3ctWy00cHhfMF82cHhfLTFweF9yZ2JhKDAsMCwwLDAuMDUpXScsXG4gICAgc3R5bGU6ICd0cmFuc2l0aW9uOiB3aWR0aCAwLjNzIGVhc2UtaW4tb3V0JyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgRGV0YWlsRHJhd2VyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XG4gIEBDb250ZW50Q2hpbGRyZW4oRGV0YWlsRHJhd2VyVGFiQ29tcG9uZW50KSB0YWJDb21wb25lbnRzITogUXVlcnlMaXN0PERldGFpbERyYXdlclRhYkNvbXBvbmVudD47XG5cbiAgLyoqIEN1cnJlbnRseSBhY3RpdmUgdGFiIHZhbHVlICovXG4gIEBJbnB1dCgpIGFjdGl2ZVRhYiA9ICcnO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgdGhlIGNsb3NlIGJ1dHRvbiAqL1xuICBASW5wdXQoKSBzaG93Q2xvc2VCdXR0b24gPSB0cnVlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBkcmF3ZXIgaXMgZXhwYW5kZWQgKi9cbiAgQElucHV0KCkgZXhwYW5kZWQgPSB0cnVlO1xuXG4gIC8qKiBQYW5lbCB3aWR0aCB3aGVuIGV4cGFuZGVkICovXG4gIEBJbnB1dCgpIGV4cGFuZGVkV2lkdGggPSAnMjgwcHgnO1xuXG4gIC8qKiBNaW5pbXVtIHdpZHRoIHdoZW4gZXhwYW5kZWQgKGUuZy4gJzI4MHB4JykgKi9cbiAgQElucHV0KCkgbWluRXhwYW5kZWRXaWR0aD86IHN0cmluZztcblxuICAvKiogTWF4aW11bSB3aWR0aCB3aGVuIGV4cGFuZGVkIChlLmcuICc2MDBweCcsICczMHZ3JykuIERlZmF1bHQ6IDMwJSBvZiB2aWV3cG9ydCAqL1xuICBASW5wdXQoKSBtYXhFeHBhbmRlZFdpZHRoID0gJzMwdncnO1xuXG4gIC8qKiBQYW5lbCB3aWR0aCB3aGVuIGNvbGxhcHNlZCAqL1xuICBASW5wdXQoKSBjb2xsYXBzZWRXaWR0aCA9ICc1NnB4JztcblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLndpZHRoJykgZ2V0IGhvc3RXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkID8gdGhpcy5leHBhbmRlZFdpZHRoIDogdGhpcy5jb2xsYXBzZWRXaWR0aDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnc3R5bGUubWluLXdpZHRoJykgZ2V0IGhvc3RNaW5XaWR0aCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5leHBhbmRlZCAmJiB0aGlzLm1pbkV4cGFuZGVkV2lkdGggPyB0aGlzLm1pbkV4cGFuZGVkV2lkdGggOiBudWxsO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5tYXgtd2lkdGgnKSBnZXQgaG9zdE1heFdpZHRoKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkID8gdGhpcy5tYXhFeHBhbmRlZFdpZHRoIDogbnVsbDtcbiAgfVxuXG4gIEBJbnB1dCgpIGV4cGFuZFRvb2x0aXAgPSAnRXhwYW5kJztcbiAgQElucHV0KCkgY29sbGFwc2VUb29sdGlwID0gJ0NvbGxhcHNlJztcbiAgQElucHV0KCkgY2xvc2VUb29sdGlwID0gJ0Nsb3NlJztcblxuICBAT3V0cHV0KCkgYWN0aXZlVGFiQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBleHBhbmRUb2dnbGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBjbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5lbnN1cmVBY3RpdmVUYWIoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZUFjdGl2ZVRhYigpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVBY3RpdmVUYWIoKTogdm9pZCB7XG4gICAgY29uc3QgdGFicyA9IHRoaXMudGFiQ29tcG9uZW50cz8udG9BcnJheSgpID8/IFtdO1xuICAgIGlmICh0YWJzLmxlbmd0aCA+IDAgJiYgIXRoaXMuYWN0aXZlVGFiKSB7XG4gICAgICB0aGlzLmFjdGl2ZVRhYiA9IHRhYnNbMF0udmFsdWU7XG4gICAgICB0aGlzLmFjdGl2ZVRhYkNoYW5nZS5lbWl0KHRoaXMuYWN0aXZlVGFiKTtcbiAgICB9XG4gIH1cblxuICBvblRhYkNsaWNrKHRhYjogRGV0YWlsRHJhd2VyVGFiQ29tcG9uZW50KTogdm9pZCB7XG4gICAgLy8gSWYgZHJhd2VyIGlzIGNvbGxhcHNlZCwgb3BlbiBpdCAoYnV0IG5ldmVyIGNsb3NlIG9uIHRhYiBjbGljaylcbiAgICBpZiAoIXRoaXMuZXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuZXhwYW5kVG9nZ2xlLmVtaXQoKTtcbiAgICB9XG4gICAgLy8gU2VsZWN0IHRoZSB0YWJcbiAgICBpZiAodGFiLnZhbHVlICE9PSB0aGlzLmFjdGl2ZVRhYikge1xuICAgICAgdGhpcy5hY3RpdmVUYWIgPSB0YWIudmFsdWU7XG4gICAgICB0aGlzLmFjdGl2ZVRhYkNoYW5nZS5lbWl0KHRoaXMuYWN0aXZlVGFiKTtcbiAgICB9XG4gIH1cblxuICBvbkV4cGFuZFRvZ2dsZSgpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuZFRvZ2dsZS5lbWl0KCk7XG4gIH1cblxuICBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2UuZW1pdCgpO1xuICB9XG5cbiAgdHJhY2tCeVZhbHVlKF9pOiBudW1iZXIsIHRhYjogRGV0YWlsRHJhd2VyVGFiQ29tcG9uZW50KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGFiLnZhbHVlO1xuICB9XG5cbiAgaXNUYWJBY3RpdmUodGFiOiBEZXRhaWxEcmF3ZXJUYWJDb21wb25lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGFiLnZhbHVlID09PSB0aGlzLmFjdGl2ZVRhYjtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtaC1mdWxsIGNxYS1iZy13aGl0ZVwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjcWEtZ3JpZCBjcWEtZmxleC0xIGNxYS1taW4taC0wIGNxYS1vdmVyZmxvdy1oaWRkZW5cIlxuICAgIFtzdHlsZS5ncmlkLXRlbXBsYXRlLWNvbHVtbnNdPVwiZXhwYW5kZWQgPyAnYXV0byAxZnInIDogJ2F1dG8gMGZyJ1wiXG4gICAgc3R5bGU9XCJ0cmFuc2l0aW9uOiBncmlkLXRlbXBsYXRlLWNvbHVtbnMgMC4zcyBlYXNlLWluLW91dFwiPlxuICAgIDwhLS0gTGVmdCB2ZXJ0aWNhbCBpY29uIGJhcjogb25lIGJ1dHRvbiBwZXIgdGFiIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWZsZXgtMSBjcWEtbWluLWgtMCBjcWEtaXRlbXMtY2VudGVyIGNxYS1weS00IGNxYS1weC0yIGNxYS1ib3JkZXItciBjcWEtYm9yZGVyLVsjRTJFOEYwXSBjcWEtYmctWyNGQUZBRkFdIGNxYS1mbGV4LXNocmluay0wXCI+XG4gICAgICA8IS0tIEV4cGFuZCAvIENvbGxhcHNlIGJ1dHRvbiAoYWx3YXlzIHZpc2libGUpIC0tPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZXhwYW5kZWQgPyBjb2xsYXBzZVRvb2x0aXAgOiBleHBhbmRUb29sdGlwXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdy05IGNxYS1oLTkgY3FhLXJvdW5kZWQtbGcgY3FhLXRleHQtWyM2NDc0OEJdIGhvdmVyOmNxYS1iZy1bI0UyRThGMF0gaG92ZXI6Y3FhLXRleHQtWyMzMzQxNTVdIGNxYS10cmFuc2l0aW9uLWNvbG9ycyBmb2N1czpjcWEtb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctMiBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLVsjM0Y0M0VFXSBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLW9mZnNldC0yIGNxYS1mbGV4LXNocmluay0wXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uRXhwYW5kVG9nZ2xlKClcIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWzIwcHhdIGNxYS13LTUgY3FhLWgtNVwiPnt7IGV4cGFuZGVkID8gJ3VuZm9sZF9sZXNzJyA6ICd1bmZvbGRfbW9yZScgfX08L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8IS0tIENsb3NlIGJ1dHRvbiAtLT5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJzaG93Q2xvc2VCdXR0b25cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiY2xvc2VUb29sdGlwXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdy05IGNxYS1oLTkgY3FhLXJvdW5kZWQtbGcgY3FhLXRleHQtWyM2NDc0OEJdIGhvdmVyOmNxYS1iZy1bI0UyRThGMF0gaG92ZXI6Y3FhLXRleHQtWyMzMzQxNTVdIGNxYS10cmFuc2l0aW9uLWNvbG9ycyBmb2N1czpjcWEtb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctMiBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLVsjM0Y0M0VFXSBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLW9mZnNldC0yIGNxYS1mbGV4LXNocmluay0wXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2xvc2UoKVwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bMjBweF0gY3FhLXctNSBjcWEtaC01XCI+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8IS0tIFRhYiBidXR0b25zOiBlcXVhbGx5IGRpc3RyaWJ1dGVkIGluIHJlbWFpbmluZyBzcGFjZSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC0xIGNxYS1mbGV4LWNvbCBjcWEtanVzdGlmeS1ldmVubHkgY3FhLWl0ZW1zLWNlbnRlciBjcWEtdy1mdWxsXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYkNvbXBvbmVudHM7IHRyYWNrQnk6IHRyYWNrQnlWYWx1ZVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgcm9sZT1cInRhYlwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpc1RhYkFjdGl2ZSh0YWIpXCJcbiAgICAgICAgICBbbWF0VG9vbHRpcF09XCJ0YWIubGFiZWxcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXctOSBjcWEtaC05IGNxYS1yb3VuZGVkLWxnIGNxYS10cmFuc2l0aW9uLWNvbG9ycyBmb2N1czpjcWEtb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctMiBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLVsjM0Y0M0VFXSBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLW9mZnNldC0yIGNxYS1mbGV4LXNocmluay0wXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnY3FhLWJnLVsjM0Y0M0VFXSBjcWEtdGV4dC13aGl0ZSc6IGlzVGFiQWN0aXZlKHRhYiksXG4gICAgICAgICAgICAnY3FhLXRleHQtWyM2NDc0OEJdIGhvdmVyOmNxYS1iZy1bI0UyRThGMF0gaG92ZXI6Y3FhLXRleHQtWyMzMzQxNTVdJzogIWlzVGFiQWN0aXZlKHRhYilcbiAgICAgICAgICB9XCJcbiAgICAgICAgICAoY2xpY2spPVwib25UYWJDbGljayh0YWIpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWzIwcHhdIGNxYS13LTUgY3FhLWgtNVwiPnt7IHRhYi5pY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQ29udGVudCBhcmVhOiBzaG93IG9ubHkgdGhlIGFjdGl2ZSB0YWIncyBjb250ZW50IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbWluLXctMCBjcWEtb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWgtZnVsbCBjcWEtb3ZlcmZsb3cteS1hdXRvIGNxYS1wLTQgY3FhLW1pbi13LVsyODBweF1cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYkNvbXBvbmVudHNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFiLnZhbHVlID09PSBhY3RpdmVUYWIgJiYgdGFiLmNvbnRlbnRUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhYi5jb250ZW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, HostBinding, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/material/icon";
|
|
4
|
+
import * as i2 from "../test-case-details/test-case-details.component";
|
|
5
|
+
import * as i3 from "@angular/material/tooltip";
|
|
6
|
+
import * as i4 from "@angular/common";
|
|
7
|
+
export class DetailSidePanelComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
/** Tabs - each tab has a side panel icon button; tabs and buttons are 1:1 */
|
|
10
|
+
this.tabs = [
|
|
11
|
+
{ label: 'Test Case', value: 'test-case', icon: 'description' },
|
|
12
|
+
{ label: 'Data Library', value: 'data-library', icon: 'folder' },
|
|
13
|
+
{ label: 'Variables', value: 'variables', icon: 'code' },
|
|
14
|
+
];
|
|
15
|
+
/** Currently active tab value */
|
|
16
|
+
this.activeTab = 'test-case';
|
|
17
|
+
/** Description section title */
|
|
18
|
+
this.descriptionTitle = 'Description';
|
|
19
|
+
/** Description text content */
|
|
20
|
+
this.descriptionContent = '';
|
|
21
|
+
/** Whether to show the Edit button in the Description header */
|
|
22
|
+
this.showEditButton = true;
|
|
23
|
+
/** Metadata items (Created on, Status, Priority, etc.) */
|
|
24
|
+
this.metadataItems = [];
|
|
25
|
+
/** Labels/tags (e.g. Automation, API, SDK, UI/UX) */
|
|
26
|
+
this.labels = [];
|
|
27
|
+
/** Configuration sections - full width (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. */
|
|
32
|
+
this.platform = 'web';
|
|
33
|
+
/** Configuration section title */
|
|
34
|
+
this.configTitle = 'Configuration';
|
|
35
|
+
/** Whether to show the close button in the side menu */
|
|
36
|
+
this.showCloseButton = false;
|
|
37
|
+
/** When true, test case details start in edit mode (useful for Storybook). */
|
|
38
|
+
this.startInEditMode = false;
|
|
39
|
+
/** Override config per select for API-driven options, server search, load more. */
|
|
40
|
+
this.selectConfigOverrides = {};
|
|
41
|
+
/** Whether the panel is expanded (affects expand button icon and panel width) */
|
|
42
|
+
this.expanded = true;
|
|
43
|
+
/** Panel width when expanded (e.g. '480px', '25%') */
|
|
44
|
+
this.expandedWidth = '380px';
|
|
45
|
+
/** Panel width when collapsed (e.g. '56px' - fits icon bar + back button) */
|
|
46
|
+
this.collapsedWidth = '56px';
|
|
47
|
+
this.hostOverflow = 'hidden';
|
|
48
|
+
/** Tooltip for expand button when panel is collapsed */
|
|
49
|
+
this.expandTooltip = 'Expand';
|
|
50
|
+
/** Tooltip for expand button when panel is expanded (collapse) */
|
|
51
|
+
this.collapseTooltip = 'Collapse';
|
|
52
|
+
/** Tooltip for close button */
|
|
53
|
+
this.closeTooltip = 'Close';
|
|
54
|
+
this.back = new EventEmitter();
|
|
55
|
+
this.tabChange = new EventEmitter();
|
|
56
|
+
this.editDescription = new EventEmitter();
|
|
57
|
+
this.saveChanges = new EventEmitter();
|
|
58
|
+
this.metadataLinkClick = new EventEmitter();
|
|
59
|
+
this.selectSearch = new EventEmitter();
|
|
60
|
+
this.selectLoadMore = new EventEmitter();
|
|
61
|
+
this.selectOpened = new EventEmitter();
|
|
62
|
+
this.selectionChange = new EventEmitter();
|
|
63
|
+
this.expandToggle = new EventEmitter();
|
|
64
|
+
this.close = new EventEmitter();
|
|
65
|
+
}
|
|
66
|
+
get hostWidth() {
|
|
67
|
+
return this.expanded ? this.expandedWidth : this.collapsedWidth;
|
|
68
|
+
}
|
|
69
|
+
get hostMinWidth() {
|
|
70
|
+
return this.expanded ? this.expandedWidth : this.collapsedWidth;
|
|
71
|
+
}
|
|
72
|
+
get hostMaxWidth() {
|
|
73
|
+
return this.expanded ? this.expandedWidth : this.collapsedWidth;
|
|
74
|
+
}
|
|
75
|
+
trackByTabValue(_i, tab) {
|
|
76
|
+
return tab.value;
|
|
77
|
+
}
|
|
78
|
+
trackByMetadataLabel(_i, item) {
|
|
79
|
+
return item.label;
|
|
80
|
+
}
|
|
81
|
+
trackByConfigTitle(_i, section) {
|
|
82
|
+
return section.title;
|
|
83
|
+
}
|
|
84
|
+
onBack() {
|
|
85
|
+
this.back.emit();
|
|
86
|
+
}
|
|
87
|
+
onTabClick(tab) {
|
|
88
|
+
if (!this.expanded) {
|
|
89
|
+
this.expandToggle.emit();
|
|
90
|
+
}
|
|
91
|
+
if (tab.value !== this.activeTab) {
|
|
92
|
+
this.tabChange.emit(tab.value);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
onEditDescription() {
|
|
96
|
+
this.editDescription.emit();
|
|
97
|
+
}
|
|
98
|
+
onSaveChanges(data) {
|
|
99
|
+
this.saveChanges.emit(data);
|
|
100
|
+
}
|
|
101
|
+
onExpandToggle() {
|
|
102
|
+
this.expandToggle.emit();
|
|
103
|
+
}
|
|
104
|
+
onClose() {
|
|
105
|
+
this.close.emit();
|
|
106
|
+
}
|
|
107
|
+
onMetadataLinkClick(item) {
|
|
108
|
+
if (item.link) {
|
|
109
|
+
this.metadataLinkClick.emit(item);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
getStatusDotClass(item) {
|
|
113
|
+
if (!item.statusColor)
|
|
114
|
+
return '';
|
|
115
|
+
switch (item.statusColor) {
|
|
116
|
+
case 'yellow':
|
|
117
|
+
return 'cqa-bg-[#EAB308]';
|
|
118
|
+
case 'red':
|
|
119
|
+
return 'cqa-bg-[#DC2626]';
|
|
120
|
+
case 'green':
|
|
121
|
+
return 'cqa-bg-[#16A34A]';
|
|
122
|
+
case 'gray':
|
|
123
|
+
default:
|
|
124
|
+
return 'cqa-bg-[#94A3B8]';
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
DetailSidePanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DetailSidePanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
129
|
+
DetailSidePanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DetailSidePanelComponent, selector: "cqa-detail-side-panel", inputs: { tabs: "tabs", activeTab: "activeTab", descriptionTitle: "descriptionTitle", descriptionContent: "descriptionContent", showEditButton: "showEditButton", metadataItems: "metadataItems", labels: "labels", configSections: "configSections", configSectionsRow2: "configSectionsRow2", platform: "platform", configTitle: "configTitle", showCloseButton: "showCloseButton", startInEditMode: "startInEditMode", selectConfigOverrides: "selectConfigOverrides", expanded: "expanded", expandedWidth: "expandedWidth", collapsedWidth: "collapsedWidth", expandTooltip: "expandTooltip", collapseTooltip: "collapseTooltip", closeTooltip: "closeTooltip" }, outputs: { back: "back", tabChange: "tabChange", editDescription: "editDescription", saveChanges: "saveChanges", metadataLinkClick: "metadataLinkClick", selectSearch: "selectSearch", selectLoadMore: "selectLoadMore", selectOpened: "selectOpened", selectionChange: "selectionChange", expandToggle: "expandToggle", close: "close" }, host: { properties: { "style.width": "this.hostWidth", "style.min-width": "this.hostMinWidth", "style.max-width": "this.hostMaxWidth", "style.overflow": "this.hostOverflow" }, styleAttribute: "transition: width 0.3s ease-in-out", classAttribute: "cqa-ui-root cqa-flex cqa-flex-col cqa-h-full cqa-flex-shrink-0 cqa-flex-grow-0 cqa-bg-white cqa-shadow-[-4px_0_6px_-1px_rgba(0,0,0,0.05)]" }, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-min-w-0 cqa-bg-white\">\n <!-- Main content: Side menu + Scrollable content -->\n <div\n class=\"cqa-grid cqa-flex-1 cqa-min-h-0 cqa-min-w-0 cqa-overflow-hidden\"\n [style.grid-template-columns]=\"expanded ? 'auto 1fr' : 'auto 0fr'\"\n style=\"transition: grid-template-columns 0.3s ease-in-out\">\n <!-- Left vertical icon menu -->\n <div class=\"cqa-flex cqa-flex-col cqa-items-center cqa-gap-2 cqa-py-4 cqa-px-2 cqa-border-r cqa-border-[#E2E8F0] cqa-bg-[#FAFAFA] cqa-flex-shrink-0\">\n <!-- Expand / Collapse button (always visible) -->\n <button\n type=\"button\"\n [matTooltip]=\"expanded ? collapseTooltip : expandTooltip\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] 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)=\"onExpandToggle()\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">{{ expanded ? 'chevron_left' : 'chevron_right' }}</mat-icon>\n </button>\n <!-- Close button -->\n <button\n *ngIf=\"showCloseButton\"\n type=\"button\"\n [matTooltip]=\"closeTooltip\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] 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)=\"onClose()\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">close</mat-icon>\n </button>\n <!-- Tab buttons (1:1 with tabs) -->\n <button\n *ngFor=\"let tab of tabs; trackBy: trackByTabValue\"\n type=\"button\"\n [matTooltip]=\"tab.label\"\n [class.cqa-bg-[#3F43EE]]=\"activeTab === tab.value\"\n [class.cqa-text-white]=\"activeTab === tab.value\"\n [class.cqa-text-[#64748B]]=\"activeTab !== tab.value\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] 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)=\"onTabClick(tab)\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">{{ tab.icon || 'circle' }}</mat-icon>\n </button>\n </div>\n\n <!-- Scrollable content area (collapses with animation when expanded is false) -->\n <div class=\"cqa-min-w-0 cqa-overflow-hidden cqa-w-full\">\n <div class=\"cqa-h-full cqa-min-w-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-p-4 cqa-space-y-4\">\n <!-- Tabs: equally distributed (Figma: purple active, gray inactive) -->\n <div class=\"cqa-flex cqa-gap-[3.5px] cqa-p-[3.5px] cqa-bg-[#F1F5F9] cqa-rounded-lg cqa-w-full\" role=\"tablist\">\n <button\n *ngFor=\"let tab of tabs; trackBy: trackByTabValue\"\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === tab.value\"\n [class.cqa-bg-[#3F43EE]]=\"activeTab === tab.value\"\n [class.cqa-text-white]=\"activeTab === tab.value\"\n [class.cqa-text-[#64748B]]=\"activeTab !== tab.value\"\n class=\"cqa-flex-1 cqa-flex cqa-justify-center cqa-items-center cqa-py-2 cqa-rounded-lg cqa-text-xs cqa-font-medium cqa-transition-colors hover:cqa-opacity-90 focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onTabClick(tab)\">\n {{ tab.label }}\n </button>\n </div>\n\n <!-- Test Case tab: use cqa-test-case-details (Figma design) -->\n <cqa-test-case-details\n *ngIf=\"activeTab === 'test-case'\"\n [descriptionTitle]=\"descriptionTitle\"\n [descriptionContent]=\"descriptionContent\"\n [showEditButton]=\"showEditButton\"\n [startInEditMode]=\"startInEditMode\"\n [selectConfigOverrides]=\"selectConfigOverrides\"\n [metadataItems]=\"metadataItems\"\n [labels]=\"labels\"\n [configTitle]=\"configTitle\"\n [configSections]=\"configSections\"\n [configSectionsRow2]=\"configSectionsRow2\"\n [platform]=\"platform\"\n (editDescription)=\"onEditDescription()\"\n (saveChanges)=\"onSaveChanges($event)\"\n (metadataLinkClick)=\"onMetadataLinkClick($event)\"\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>\n\n <!-- Placeholder for other tabs (Data Library, Variables) -->\n <div *ngIf=\"activeTab !== 'test-case'\" class=\"cqa-p-4 cqa-text-[#64748B] cqa-text-sm\">\n {{ activeTab === 'data-library' ? 'Data Library content' : 'Variables content' }} \u2013 coming soon\n </div>\n </div>\n </div>\n </div>\n</div>\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.TestCaseDetailsComponent, selector: "cqa-test-case-details", inputs: ["startInEditMode", "descriptionTitle", "descriptionContent", "showEditButton", "metadataItems", "labels", "configTitle", "configSections", "configSectionsRow2", "platform", "selectConfigOverrides"], outputs: ["editDescription", "saveChanges", "metadataLinkClick", "selectSearch", "selectLoadMore", "selectOpened", "selectionChange"] }], directives: [{ type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
130
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DetailSidePanelComponent, decorators: [{
|
|
131
|
+
type: Component,
|
|
132
|
+
args: [{ selector: 'cqa-detail-side-panel', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
133
|
+
class: 'cqa-ui-root cqa-flex cqa-flex-col cqa-h-full cqa-flex-shrink-0 cqa-flex-grow-0 cqa-bg-white cqa-shadow-[-4px_0_6px_-1px_rgba(0,0,0,0.05)]',
|
|
134
|
+
style: 'transition: width 0.3s ease-in-out',
|
|
135
|
+
}, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-min-w-0 cqa-bg-white\">\n <!-- Main content: Side menu + Scrollable content -->\n <div\n class=\"cqa-grid cqa-flex-1 cqa-min-h-0 cqa-min-w-0 cqa-overflow-hidden\"\n [style.grid-template-columns]=\"expanded ? 'auto 1fr' : 'auto 0fr'\"\n style=\"transition: grid-template-columns 0.3s ease-in-out\">\n <!-- Left vertical icon menu -->\n <div class=\"cqa-flex cqa-flex-col cqa-items-center cqa-gap-2 cqa-py-4 cqa-px-2 cqa-border-r cqa-border-[#E2E8F0] cqa-bg-[#FAFAFA] cqa-flex-shrink-0\">\n <!-- Expand / Collapse button (always visible) -->\n <button\n type=\"button\"\n [matTooltip]=\"expanded ? collapseTooltip : expandTooltip\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] 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)=\"onExpandToggle()\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">{{ expanded ? 'chevron_left' : 'chevron_right' }}</mat-icon>\n </button>\n <!-- Close button -->\n <button\n *ngIf=\"showCloseButton\"\n type=\"button\"\n [matTooltip]=\"closeTooltip\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] 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)=\"onClose()\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">close</mat-icon>\n </button>\n <!-- Tab buttons (1:1 with tabs) -->\n <button\n *ngFor=\"let tab of tabs; trackBy: trackByTabValue\"\n type=\"button\"\n [matTooltip]=\"tab.label\"\n [class.cqa-bg-[#3F43EE]]=\"activeTab === tab.value\"\n [class.cqa-text-white]=\"activeTab === tab.value\"\n [class.cqa-text-[#64748B]]=\"activeTab !== tab.value\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] 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)=\"onTabClick(tab)\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">{{ tab.icon || 'circle' }}</mat-icon>\n </button>\n </div>\n\n <!-- Scrollable content area (collapses with animation when expanded is false) -->\n <div class=\"cqa-min-w-0 cqa-overflow-hidden cqa-w-full\">\n <div class=\"cqa-h-full cqa-min-w-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-p-4 cqa-space-y-4\">\n <!-- Tabs: equally distributed (Figma: purple active, gray inactive) -->\n <div class=\"cqa-flex cqa-gap-[3.5px] cqa-p-[3.5px] cqa-bg-[#F1F5F9] cqa-rounded-lg cqa-w-full\" role=\"tablist\">\n <button\n *ngFor=\"let tab of tabs; trackBy: trackByTabValue\"\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === tab.value\"\n [class.cqa-bg-[#3F43EE]]=\"activeTab === tab.value\"\n [class.cqa-text-white]=\"activeTab === tab.value\"\n [class.cqa-text-[#64748B]]=\"activeTab !== tab.value\"\n class=\"cqa-flex-1 cqa-flex cqa-justify-center cqa-items-center cqa-py-2 cqa-rounded-lg cqa-text-xs cqa-font-medium cqa-transition-colors hover:cqa-opacity-90 focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onTabClick(tab)\">\n {{ tab.label }}\n </button>\n </div>\n\n <!-- Test Case tab: use cqa-test-case-details (Figma design) -->\n <cqa-test-case-details\n *ngIf=\"activeTab === 'test-case'\"\n [descriptionTitle]=\"descriptionTitle\"\n [descriptionContent]=\"descriptionContent\"\n [showEditButton]=\"showEditButton\"\n [startInEditMode]=\"startInEditMode\"\n [selectConfigOverrides]=\"selectConfigOverrides\"\n [metadataItems]=\"metadataItems\"\n [labels]=\"labels\"\n [configTitle]=\"configTitle\"\n [configSections]=\"configSections\"\n [configSectionsRow2]=\"configSectionsRow2\"\n [platform]=\"platform\"\n (editDescription)=\"onEditDescription()\"\n (saveChanges)=\"onSaveChanges($event)\"\n (metadataLinkClick)=\"onMetadataLinkClick($event)\"\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>\n\n <!-- Placeholder for other tabs (Data Library, Variables) -->\n <div *ngIf=\"activeTab !== 'test-case'\" class=\"cqa-p-4 cqa-text-[#64748B] cqa-text-sm\">\n {{ activeTab === 'data-library' ? 'Data Library content' : 'Variables content' }} \u2013 coming soon\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
136
|
+
}], propDecorators: { tabs: [{
|
|
137
|
+
type: Input
|
|
138
|
+
}], activeTab: [{
|
|
139
|
+
type: Input
|
|
140
|
+
}], descriptionTitle: [{
|
|
141
|
+
type: Input
|
|
142
|
+
}], descriptionContent: [{
|
|
143
|
+
type: Input
|
|
144
|
+
}], showEditButton: [{
|
|
145
|
+
type: Input
|
|
146
|
+
}], metadataItems: [{
|
|
147
|
+
type: Input
|
|
148
|
+
}], labels: [{
|
|
149
|
+
type: Input
|
|
150
|
+
}], configSections: [{
|
|
151
|
+
type: Input
|
|
152
|
+
}], configSectionsRow2: [{
|
|
153
|
+
type: Input
|
|
154
|
+
}], platform: [{
|
|
155
|
+
type: Input
|
|
156
|
+
}], configTitle: [{
|
|
157
|
+
type: Input
|
|
158
|
+
}], showCloseButton: [{
|
|
159
|
+
type: Input
|
|
160
|
+
}], startInEditMode: [{
|
|
161
|
+
type: Input
|
|
162
|
+
}], selectConfigOverrides: [{
|
|
163
|
+
type: Input
|
|
164
|
+
}], expanded: [{
|
|
165
|
+
type: Input
|
|
166
|
+
}], expandedWidth: [{
|
|
167
|
+
type: Input
|
|
168
|
+
}], collapsedWidth: [{
|
|
169
|
+
type: Input
|
|
170
|
+
}], hostWidth: [{
|
|
171
|
+
type: HostBinding,
|
|
172
|
+
args: ['style.width']
|
|
173
|
+
}], hostMinWidth: [{
|
|
174
|
+
type: HostBinding,
|
|
175
|
+
args: ['style.min-width']
|
|
176
|
+
}], hostMaxWidth: [{
|
|
177
|
+
type: HostBinding,
|
|
178
|
+
args: ['style.max-width']
|
|
179
|
+
}], hostOverflow: [{
|
|
180
|
+
type: HostBinding,
|
|
181
|
+
args: ['style.overflow']
|
|
182
|
+
}], expandTooltip: [{
|
|
183
|
+
type: Input
|
|
184
|
+
}], collapseTooltip: [{
|
|
185
|
+
type: Input
|
|
186
|
+
}], closeTooltip: [{
|
|
187
|
+
type: Input
|
|
188
|
+
}], back: [{
|
|
189
|
+
type: Output
|
|
190
|
+
}], tabChange: [{
|
|
191
|
+
type: Output
|
|
192
|
+
}], editDescription: [{
|
|
193
|
+
type: Output
|
|
194
|
+
}], saveChanges: [{
|
|
195
|
+
type: Output
|
|
196
|
+
}], metadataLinkClick: [{
|
|
197
|
+
type: Output
|
|
198
|
+
}], selectSearch: [{
|
|
199
|
+
type: Output
|
|
200
|
+
}], selectLoadMore: [{
|
|
201
|
+
type: Output
|
|
202
|
+
}], selectOpened: [{
|
|
203
|
+
type: Output
|
|
204
|
+
}], selectionChange: [{
|
|
205
|
+
type: Output
|
|
206
|
+
}], expandToggle: [{
|
|
207
|
+
type: Output
|
|
208
|
+
}], close: [{
|
|
209
|
+
type: Output
|
|
210
|
+
}] } });
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLXNpZGUtcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9kZXRhaWwtc2lkZS1wYW5lbC9kZXRhaWwtc2lkZS1wYW5lbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2RldGFpbC1zaWRlLXBhbmVsL2RldGFpbC1zaWRlLXBhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBQ3ZCLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBd0J2QixNQUFNLE9BQU8sd0JBQXdCO0lBVnJDO1FBV0UsNkVBQTZFO1FBQ3BFLFNBQUksR0FBeUI7WUFDcEMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUMvRCxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ2hFLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7U0FDekQsQ0FBQztRQUVGLGlDQUFpQztRQUN4QixjQUFTLEdBQUcsV0FBVyxDQUFDO1FBRWpDLGdDQUFnQztRQUN2QixxQkFBZ0IsR0FBRyxhQUFhLENBQUM7UUFFMUMsK0JBQStCO1FBQ3RCLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUVqQyxnRUFBZ0U7UUFDdkQsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFFL0IsMERBQTBEO1FBQ2pELGtCQUFhLEdBQWtDLEVBQUUsQ0FBQztRQUUzRCxxREFBcUQ7UUFDNUMsV0FBTSxHQUFhLEVBQUUsQ0FBQztRQUUvQiw2RUFBNkU7UUFDcEUsbUJBQWMs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S0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFHRyxNQUFNO3NCQUFkLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFHRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUdHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR0csZUFBZTtzQkFBdkIsS0FBSztnQkFHRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRTBCLFNBQVM7c0JBQXhDLFdBQVc7dUJBQUMsYUFBYTtnQkFJVSxZQUFZO3NCQUEvQyxXQUFXO3VCQUFDLGlCQUFpQjtnQkFJTSxZQUFZO3NCQUEvQyxXQUFXO3VCQUFDLGlCQUFpQjtnQkFJQyxZQUFZO3NCQUExQyxXQUFXO3VCQUFDLGdCQUFnQjtnQkFHcEIsYUFBYTtzQkFBckIsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksSUFBSTtzQkFBYixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBIb3N0QmluZGluZyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uSXRlbSB9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb24tY2FyZC9jb25maWd1cmF0aW9uLWNhcmQuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIERldGFpbFNpZGVQYW5lbFRhYixcbiAgRGV0YWlsU2lkZVBhbmVsTWV0YWRhdGFJdGVtLFxuICBEZXRhaWxTaWRlUGFuZWxDb25maWdTZWN0aW9uLFxufSBmcm9tICcuL2RldGFpbC1zaWRlLXBhbmVsLm1vZGVscyc7XG5pbXBvcnQge1xuICBUZXN0Q2FzZURldGFpbHNFZGl0Rm9ybURhdGEsXG4gIFNlbGVjdENvbmZpZ092ZXJyaWRlcyxcbn0gZnJvbSAnLi4vdGVzdC1jYXNlLWRldGFpbHMvdGVzdC1jYXNlLWRldGFpbHMtZWRpdC90ZXN0LWNhc2UtZGV0YWlscy1lZGl0LmNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIHsgRGV0YWlsU2lkZVBhbmVsVGFiLCBEZXRhaWxTaWRlUGFuZWxNZXRhZGF0YUl0ZW0sIERldGFpbFNpZGVQYW5lbENvbmZpZ1NlY3Rpb24gfSBmcm9tICcuL2RldGFpbC1zaWRlLXBhbmVsLm1vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1kZXRhaWwtc2lkZS1wYW5lbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXRhaWwtc2lkZS1wYW5lbC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgY2xhc3M6XG4gICAgICAnY3FhLXVpLXJvb3QgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1oLWZ1bGwgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWZsZXgtZ3Jvdy0wIGNxYS1iZy13aGl0ZSBjcWEtc2hhZG93LVstNHB4XzBfNnB4Xy0xcHhfcmdiYSgwLDAsMCwwLjA1KV0nLFxuICAgIHN0eWxlOiAndHJhbnNpdGlvbjogd2lkdGggMC4zcyBlYXNlLWluLW91dCcsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIERldGFpbFNpZGVQYW5lbENvbXBvbmVudCB7XG4gIC8qKiBUYWJzIC0gZWFjaCB0YWIgaGFzIGEgc2lkZSBwYW5lbCBpY29uIGJ1dHRvbjsgdGFicyBhbmQgYnV0dG9ucyBhcmUgMToxICovXG4gIEBJbnB1dCgpIHRhYnM6IERldGFpbFNpZGVQYW5lbFRhYltdID0gW1xuICAgIHsgbGFiZWw6ICdUZXN0IENhc2UnLCB2YWx1ZTogJ3Rlc3QtY2FzZScsIGljb246ICdkZXNjcmlwdGlvbicgfSxcbiAgICB7IGxhYmVsOiAnRGF0YSBMaWJyYXJ5JywgdmFsdWU6ICdkYXRhLWxpYnJhcnknLCBpY29uOiAnZm9sZGVyJyB9LFxuICAgIHsgbGFiZWw6ICdWYXJpYWJsZXMnLCB2YWx1ZTogJ3ZhcmlhYmxlcycsIGljb246ICdjb2RlJyB9LFxuICBdO1xuXG4gIC8qKiBDdXJyZW50bHkgYWN0aXZlIHRhYiB2YWx1ZSAqL1xuICBASW5wdXQoKSBhY3RpdmVUYWIgPSAndGVzdC1jYXNlJztcblxuICAvKiogRGVzY3JpcHRpb24gc2VjdGlvbiB0aXRsZSAqL1xuICBASW5wdXQoKSBkZXNjcmlwdGlvblRpdGxlID0gJ0Rlc2NyaXB0aW9uJztcblxuICAvKiogRGVzY3JpcHRpb24gdGV4dCBjb250ZW50ICovXG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uQ29udGVudCA9ICcnO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgdGhlIEVkaXQgYnV0dG9uIGluIHRoZSBEZXNjcmlwdGlvbiBoZWFkZXIgKi9cbiAgQElucHV0KCkgc2hvd0VkaXRCdXR0b24gPSB0cnVlO1xuXG4gIC8qKiBNZXRhZGF0YSBpdGVtcyAoQ3JlYXRlZCBvbiwgU3RhdHVzLCBQcmlvcml0eSwgZXRjLikgKi9cbiAgQElucHV0KCkgbWV0YWRhdGFJdGVtczogRGV0YWlsU2lkZVBhbmVsTWV0YWRhdGFJdGVtW10gPSBbXTtcblxuICAvKiogTGFiZWxzL3RhZ3MgKGUuZy4gQXV0b21hdGlvbiwgQVBJLCBTREssIFVJL1VYKSAqL1xuICBASW5wdXQoKSBsYWJlbHM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqIENvbmZpZ3VyYXRpb24gc2VjdGlvbnMgLSBmdWxsIHdpZHRoIChlLmcuIEV4ZWN1dGlvbiwgQUkgQ29uZmlndXJhdGlvbikgKi9cbiAgQElucHV0KCkgY29uZmlnU2VjdGlvbnM6IERldGFpbFNpZGVQYW5lbENvbmZpZ1NlY3Rpb25bXSA9IFtdO1xuXG4gIC8qKiBPcHRpb25hbCBjb25maWcgc2VjdGlvbnMgZGlzcGxheWVkIGluIGEgMi1jb2x1bW4gcm93IChlLmcuIFdhaXRzICYgUmV0cmllcywgRGV2aWNlKSAqL1xuICBASW5wdXQoKSBjb25maWdTZWN0aW9uc1JvdzI6IERldGFpbFNpZGVQYW5lbENvbmZpZ1NlY3Rpb25bXSA9IFtdO1xuXG4gIC8qKiBQbGF0Zm9ybTogJ3dlYicgb3IgJ21vYmlsZScuIERlZmF1bHRzIHRvICd3ZWInLiBVc2VkIGZvciBEZXZpY2UgU2V0dGluZ3MuICovXG4gIEBJbnB1dCgpIHBsYXRmb3JtOiAnd2ViJyB8ICdtb2JpbGUnID0gJ3dlYic7XG5cbiAgLyoqIENvbmZpZ3VyYXRpb24gc2VjdGlvbiB0aXRsZSAqL1xuICBASW5wdXQoKSBjb25maWdUaXRsZSA9ICdDb25maWd1cmF0aW9uJztcblxuICAvKiogV2hldGhlciB0byBzaG93IHRoZSBjbG9zZSBidXR0b24gaW4gdGhlIHNpZGUgbWVudSAqL1xuICBASW5wdXQoKSBzaG93Q2xvc2VCdXR0b24gPSBmYWxzZTtcblxuICAvKiogV2hlbiB0cnVlLCB0ZXN0IGNhc2UgZGV0YWlscyBzdGFydCBpbiBlZGl0IG1vZGUgKHVzZWZ1bCBmb3IgU3Rvcnlib29rKS4gKi9cbiAgQElucHV0KCkgc3RhcnRJbkVkaXRNb2RlID0gZmFsc2U7XG5cbiAgLyoqIE92ZXJyaWRlIGNvbmZpZyBwZXIgc2VsZWN0IGZvciBBUEktZHJpdmVuIG9wdGlvbnMsIHNlcnZlciBzZWFyY2gsIGxvYWQgbW9yZS4gKi9cbiAgQElucHV0KCkgc2VsZWN0Q29uZmlnT3ZlcnJpZGVzOiBTZWxlY3RDb25maWdPdmVycmlkZXMgPSB7fTtcblxuICAvKiogV2hldGhlciB0aGUgcGFuZWwgaXMgZXhwYW5kZWQgKGFmZmVjdHMgZXhwYW5kIGJ1dHRvbiBpY29uIGFuZCBwYW5lbCB3aWR0aCkgKi9cbiAgQElucHV0KCkgZXhwYW5kZWQgPSB0cnVlO1xuXG4gIC8qKiBQYW5lbCB3aWR0aCB3aGVuIGV4cGFuZGVkIChlLmcuICc0ODBweCcsICcyNSUnKSAqL1xuICBASW5wdXQoKSBleHBhbmRlZFdpZHRoID0gJzM4MHB4JztcblxuICAvKiogUGFuZWwgd2lkdGggd2hlbiBjb2xsYXBzZWQgKGUuZy4gJzU2cHgnIC0gZml0cyBpY29uIGJhciArIGJhY2sgYnV0dG9uKSAqL1xuICBASW5wdXQoKSBjb2xsYXBzZWRXaWR0aCA9ICc1NnB4JztcblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLndpZHRoJykgZ2V0IGhvc3RXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkID8gdGhpcy5leHBhbmRlZFdpZHRoIDogdGhpcy5jb2xsYXBzZWRXaWR0aDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnc3R5bGUubWluLXdpZHRoJykgZ2V0IGhvc3RNaW5XaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkID8gdGhpcy5leHBhbmRlZFdpZHRoIDogdGhpcy5jb2xsYXBzZWRXaWR0aDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnc3R5bGUubWF4LXdpZHRoJykgZ2V0IGhvc3RNYXhXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkID8gdGhpcy5leHBhbmRlZFdpZHRoIDogdGhpcy5jb2xsYXBzZWRXaWR0aDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnc3R5bGUub3ZlcmZsb3cnKSBob3N0T3ZlcmZsb3cgPSAnaGlkZGVuJztcblxuICAvKiogVG9vbHRpcCBmb3IgZXhwYW5kIGJ1dHRvbiB3aGVuIHBhbmVsIGlzIGNvbGxhcHNlZCAqL1xuICBASW5wdXQoKSBleHBhbmRUb29sdGlwID0gJ0V4cGFuZCc7XG5cbiAgLyoqIFRvb2x0aXAgZm9yIGV4cGFuZCBidXR0b24gd2hlbiBwYW5lbCBpcyBleHBhbmRlZCAoY29sbGFwc2UpICovXG4gIEBJbnB1dCgpIGNvbGxhcHNlVG9vbHRpcCA9ICdDb2xsYXBzZSc7XG5cbiAgLyoqIFRvb2x0aXAgZm9yIGNsb3NlIGJ1dHRvbiAqL1xuICBASW5wdXQoKSBjbG9zZVRvb2x0aXAgPSAnQ2xvc2UnO1xuXG4gIEBPdXRwdXQoKSBiYWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgdGFiQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBlZGl0RGVzY3JpcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzYXZlQ2hhbmdlcyA9IG5ldyBFdmVudEVtaXR0ZXI8VGVzdENhc2VEZXRhaWxzRWRpdEZvcm1EYXRhPigpO1xuICBAT3V0cHV0KCkgbWV0YWRhdGFMaW5rQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbFNpZGVQYW5lbE1ldGFkYXRhSXRlbT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdFNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZzsgcXVlcnk6IHN0cmluZyB9PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0TG9hZE1vcmUgPSBuZXcgRXZlbnRFbWl0dGVyPHsga2V5OiBzdHJpbmc7IHF1ZXJ5OiBzdHJpbmcgfT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdE9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZyB9PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9PigpO1xuICBAT3V0cHV0KCkgZXhwYW5kVG9nZ2xlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgdHJhY2tCeVRhYlZhbHVlKF9pOiBudW1iZXIsIHRhYjogRGV0YWlsU2lkZVBhbmVsVGFiKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGFiLnZhbHVlO1xuICB9XG5cbiAgdHJhY2tCeU1ldGFkYXRhTGFiZWwoX2k6IG51bWJlciwgaXRlbTogRGV0YWlsU2lkZVBhbmVsTWV0YWRhdGFJdGVtKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaXRlbS5sYWJlbDtcbiAgfVxuXG4gIHRyYWNrQnlDb25maWdUaXRsZShfaTogbnVtYmVyLCBzZWN0aW9uOiBEZXRhaWxTaWRlUGFuZWxDb25maWdTZWN0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc2VjdGlvbi50aXRsZTtcbiAgfVxuXG4gIG9uQmFjaygpOiB2b2lkIHtcbiAgICB0aGlzLmJhY2suZW1pdCgpO1xuICB9XG5cbiAgb25UYWJDbGljayh0YWI6IERldGFpbFNpZGVQYW5lbFRhYik6IHZvaWQge1xuICAgIGlmICghdGhpcy5leHBhbmRlZCkge1xuICAgICAgdGhpcy5leHBhbmRUb2dnbGUuZW1pdCgpO1xuICAgIH1cbiAgICBpZiAodGFiLnZhbHVlICE9PSB0aGlzLmFjdGl2ZVRhYikge1xuICAgICAgdGhpcy50YWJDaGFuZ2UuZW1pdCh0YWIudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG9uRWRpdERlc2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdERlc2NyaXB0aW9uLmVtaXQoKTtcbiAgfVxuXG4gIG9uU2F2ZUNoYW5nZXMoZGF0YTogVGVzdENhc2VEZXRhaWxzRWRpdEZvcm1EYXRhKTogdm9pZCB7XG4gICAgdGhpcy5zYXZlQ2hhbmdlcy5lbWl0KGRhdGEpO1xuICB9XG5cbiAgb25FeHBhbmRUb2dnbGUoKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRUb2dnbGUuZW1pdCgpO1xuICB9XG5cbiAgb25DbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlLmVtaXQoKTtcbiAgfVxuXG4gIG9uTWV0YWRhdGFMaW5rQ2xpY2soaXRlbTogRGV0YWlsU2lkZVBhbmVsTWV0YWRhdGFJdGVtKTogdm9pZCB7XG4gICAgaWYgKGl0ZW0ubGluaykge1xuICAgICAgdGhpcy5tZXRhZGF0YUxpbmtDbGljay5lbWl0KGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0YXR1c0RvdENsYXNzKGl0ZW06IERldGFpbFNpZGVQYW5lbE1ldGFkYXRhSXRlbSk6IHN0cmluZyB7XG4gICAgaWYgKCFpdGVtLnN0YXR1c0NvbG9yKSByZXR1cm4gJyc7XG4gICAgc3dpdGNoIChpdGVtLnN0YXR1c0NvbG9yKSB7XG4gICAgICBjYXNlICd5ZWxsb3cnOlxuICAgICAgICByZXR1cm4gJ2NxYS1iZy1bI0VBQjMwOF0nO1xuICAgICAgY2FzZSAncmVkJzpcbiAgICAgICAgcmV0dXJuICdjcWEtYmctWyNEQzI2MjZdJztcbiAgICAgIGNhc2UgJ2dyZWVuJzpcbiAgICAgICAgcmV0dXJuICdjcWEtYmctWyMxNkEzNEFdJztcbiAgICAgIGNhc2UgJ2dyYXknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdjcWEtYmctWyM5NEEzQjhdJztcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWgtZnVsbCBjcWEtbWluLXctMCBjcWEtYmctd2hpdGVcIj5cbiAgPCEtLSBNYWluIGNvbnRlbnQ6IFNpZGUgbWVudSArIFNjcm9sbGFibGUgY29udGVudCAtLT5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY3FhLWdyaWQgY3FhLWZsZXgtMSBjcWEtbWluLWgtMCBjcWEtbWluLXctMCBjcWEtb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICBbc3R5bGUuZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXT1cImV4cGFuZGVkID8gJ2F1dG8gMWZyJyA6ICdhdXRvIDBmcidcIlxuICAgIHN0eWxlPVwidHJhbnNpdGlvbjogZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zIDAuM3MgZWFzZS1pbi1vdXRcIj5cbiAgICA8IS0tIExlZnQgdmVydGljYWwgaWNvbiBtZW51IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXB5LTQgY3FhLXB4LTIgY3FhLWJvcmRlci1yIGNxYS1ib3JkZXItWyNFMkU4RjBdIGNxYS1iZy1bI0ZBRkFGQV0gY3FhLWZsZXgtc2hyaW5rLTBcIj5cbiAgICAgIDwhLS0gRXhwYW5kIC8gQ29sbGFwc2UgYnV0dG9uIChhbHdheXMgdmlzaWJsZSkgLS0+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCJleHBhbmRlZCA/IGNvbGxhcHNlVG9vbHRpcCA6IGV4cGFuZFRvb2x0aXBcIlxuICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS13LTkgY3FhLWgtOSBjcWEtcm91bmRlZC1sZyBjcWEtdGV4dC1bIzY0NzQ4Ql0gaG92ZXI6Y3FhLWJnLVsjRTJFOEYwXSBob3ZlcjpjcWEtdGV4dC1bIzMzNDE1NV0gY3FhLXRyYW5zaXRpb24tY29sb3JzIGZvY3VzOmNxYS1vdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpjcWEtcmluZy0yIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctWyMzRjQzRUVdIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctb2Zmc2V0LTJcIlxuICAgICAgICAoY2xpY2spPVwib25FeHBhbmRUb2dnbGUoKVwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bMjBweF0gY3FhLXctNSBjcWEtaC01XCI+e3sgZXhwYW5kZWQgPyAnY2hldnJvbl9sZWZ0JyA6ICdjaGV2cm9uX3JpZ2h0JyB9fTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDwhLS0gQ2xvc2UgYnV0dG9uIC0tPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cInNob3dDbG9zZUJ1dHRvblwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCJjbG9zZVRvb2x0aXBcIlxuICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS13LTkgY3FhLWgtOSBjcWEtcm91bmRlZC1sZyBjcWEtdGV4dC1bIzY0NzQ4Ql0gaG92ZXI6Y3FhLWJnLVsjRTJFOEYwXSBob3ZlcjpjcWEtdGV4dC1bIzMzNDE1NV0gY3FhLXRyYW5zaXRpb24tY29sb3JzIGZvY3VzOmNxYS1vdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpjcWEtcmluZy0yIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctWyMzRjQzRUVdIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctb2Zmc2V0LTJcIlxuICAgICAgICAoY2xpY2spPVwib25DbG9zZSgpXCI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsyMHB4XSBjcWEtdy01IGNxYS1oLTVcIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDwhLS0gVGFiIGJ1dHRvbnMgKDE6MSB3aXRoIHRhYnMpIC0tPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnM7IHRyYWNrQnk6IHRyYWNrQnlUYWJWYWx1ZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCJ0YWIubGFiZWxcIlxuICAgICAgICBbY2xhc3MuY3FhLWJnLVsjM0Y0M0VFXV09XCJhY3RpdmVUYWIgPT09IHRhYi52YWx1ZVwiXG4gICAgICAgIFtjbGFzcy5jcWEtdGV4dC13aGl0ZV09XCJhY3RpdmVUYWIgPT09IHRhYi52YWx1ZVwiXG4gICAgICAgIFtjbGFzcy5jcWEtdGV4dC1bIzY0NzQ4Ql1dPVwiYWN0aXZlVGFiICE9PSB0YWIudmFsdWVcIlxuICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS13LTkgY3FhLWgtOSBjcWEtcm91bmRlZC1sZyBob3ZlcjpjcWEtYmctWyNFMkU4RjBdIGhvdmVyOmNxYS10ZXh0LVsjMzM0MTU1XSBjcWEtdHJhbnNpdGlvbi1jb2xvcnMgZm9jdXM6Y3FhLW91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLTIgZm9jdXMtdmlzaWJsZTpjcWEtcmluZy1bIzNGNDNFRV0gZm9jdXMtdmlzaWJsZTpjcWEtcmluZy1vZmZzZXQtMlwiXG4gICAgICAgIChjbGljayk9XCJvblRhYkNsaWNrKHRhYilcIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWzIwcHhdIGNxYS13LTUgY3FhLWgtNVwiPnt7IHRhYi5pY29uIHx8ICdjaXJjbGUnIH19PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTY3JvbGxhYmxlIGNvbnRlbnQgYXJlYSAoY29sbGFwc2VzIHdpdGggYW5pbWF0aW9uIHdoZW4gZXhwYW5kZWQgaXMgZmFsc2UpIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbWluLXctMCBjcWEtb3ZlcmZsb3ctaGlkZGVuIGNxYS13LWZ1bGxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtaC1mdWxsIGNxYS1taW4tdy0wIGNxYS1vdmVyZmxvdy15LWF1dG8gY3FhLW92ZXJmbG93LXgtaGlkZGVuIGNxYS1wLTQgY3FhLXNwYWNlLXktNFwiPlxuICAgICAgPCEtLSBUYWJzOiBlcXVhbGx5IGRpc3RyaWJ1dGVkIChGaWdtYTogcHVycGxlIGFjdGl2ZSwgZ3JheSBpbmFjdGl2ZSkgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWdhcC1bMy41cHhdIGNxYS1wLVszLjVweF0gY3FhLWJnLVsjRjFGNUY5XSBjcWEtcm91bmRlZC1sZyBjcWEtdy1mdWxsXCIgcm9sZT1cInRhYmxpc3RcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFiczsgdHJhY2tCeTogdHJhY2tCeVRhYlZhbHVlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICByb2xlPVwidGFiXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImFjdGl2ZVRhYiA9PT0gdGFiLnZhbHVlXCJcbiAgICAgICAgICBbY2xhc3MuY3FhLWJnLVsjM0Y0M0VFXV09XCJhY3RpdmVUYWIgPT09IHRhYi52YWx1ZVwiXG4gICAgICAgICAgW2NsYXNzLmNxYS10ZXh0LXdoaXRlXT1cImFjdGl2ZVRhYiA9PT0gdGFiLnZhbHVlXCJcbiAgICAgICAgICBbY2xhc3MuY3FhLXRleHQtWyM2NDc0OEJdXT1cImFjdGl2ZVRhYiAhPT0gdGFiLnZhbHVlXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLWZsZXggY3FhLWp1c3RpZnktY2VudGVyIGNxYS1pdGVtcy1jZW50ZXIgY3FhLXB5LTIgY3FhLXJvdW5kZWQtbGcgY3FhLXRleHQteHMgY3FhLWZvbnQtbWVkaXVtIGNxYS10cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpjcWEtb3BhY2l0eS05MCBmb2N1czpjcWEtb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctMiBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLVsjM0Y0M0VFXSBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLW9mZnNldC0yXCJcbiAgICAgICAgICAoY2xpY2spPVwib25UYWJDbGljayh0YWIpXCI+XG4gICAgICAgICAge3sgdGFiLmxhYmVsIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gVGVzdCBDYXNlIHRhYjogdXNlIGNxYS10ZXN0LWNhc2UtZGV0YWlscyAoRmlnbWEgZGVzaWduKSAtLT5cbiAgICAgIDxjcWEtdGVzdC1jYXNlLWRldGFpbHNcbiAgICAgICAgKm5nSWY9XCJhY3RpdmVUYWIgPT09ICd0ZXN0LWNhc2UnXCJcbiAgICAgICAgW2Rlc2NyaXB0aW9uVGl0bGVdPVwiZGVzY3JpcHRpb25UaXRsZVwiXG4gICAgICAgIFtkZXNjcmlwdGlvbkNvbnRlbnRdPVwiZGVzY3JpcHRpb25Db250ZW50XCJcbiAgICAgICAgW3Nob3dFZGl0QnV0dG9uXT1cInNob3dFZGl0QnV0dG9uXCJcbiAgICAgICAgW3N0YXJ0SW5FZGl0TW9kZV09XCJzdGFydEluRWRpdE1vZGVcIlxuICAgICAgICBbc2VsZWN0Q29uZmlnT3ZlcnJpZGVzXT1cInNlbGVjdENvbmZpZ092ZXJyaWRlc1wiXG4gICAgICAgIFttZXRhZGF0YUl0ZW1zXT1cIm1ldGFkYXRhSXRlbXNcIlxuICAgICAgICBbbGFiZWxzXT1cImxhYmVsc1wiXG4gICAgICAgIFtjb25maWdUaXRsZV09XCJjb25maWdUaXRsZVwiXG4gICAgICAgIFtjb25maWdTZWN0aW9uc109XCJjb25maWdTZWN0aW9uc1wiXG4gICAgICAgIFtjb25maWdTZWN0aW9uc1JvdzJdPVwiY29uZmlnU2VjdGlvbnNSb3cyXCJcbiAgICAgICAgW3BsYXRmb3JtXT1cInBsYXRmb3JtXCJcbiAgICAgICAgKGVkaXREZXNjcmlwdGlvbik9XCJvbkVkaXREZXNjcmlwdGlvbigpXCJcbiAgICAgICAgKHNhdmVDaGFuZ2VzKT1cIm9uU2F2ZUNoYW5nZXMoJGV2ZW50KVwiXG4gICAgICAgIChtZXRhZGF0YUxpbmtDbGljayk9XCJvbk1ldGFkYXRhTGlua0NsaWNrKCRldmVudClcIlxuICAgICAgICAoc2VsZWN0U2VhcmNoKT1cInNlbGVjdFNlYXJjaC5lbWl0KCRldmVudClcIlxuICAgICAgICAoc2VsZWN0TG9hZE1vcmUpPVwic2VsZWN0TG9hZE1vcmUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHNlbGVjdE9wZW5lZCk9XCJzZWxlY3RPcGVuZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3Rpb25DaGFuZ2UuZW1pdCgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS10ZXN0LWNhc2UtZGV0YWlscz5cblxuICAgICAgPCEtLSBQbGFjZWhvbGRlciBmb3Igb3RoZXIgdGFicyAoRGF0YSBMaWJyYXJ5LCBWYXJpYWJsZXMpIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cImFjdGl2ZVRhYiAhPT0gJ3Rlc3QtY2FzZSdcIiBjbGFzcz1cImNxYS1wLTQgY3FhLXRleHQtWyM2NDc0OEJdIGNxYS10ZXh0LXNtXCI+XG4gICAgICAgIHt7IGFjdGl2ZVRhYiA9PT0gJ2RhdGEtbGlicmFyeScgPyAnRGF0YSBMaWJyYXJ5IGNvbnRlbnQnIDogJ1ZhcmlhYmxlcyBjb250ZW50JyB9fSDigJMgY29taW5nIHNvb25cbiAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLXNpZGUtcGFuZWwubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9kZXRhaWwtc2lkZS1wYW5lbC9kZXRhaWwtc2lkZS1wYW5lbC5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZ3VyYXRpb25JdGVtIH0gZnJvbSAnLi4vY29uZmlndXJhdGlvbi1jYXJkL2NvbmZpZ3VyYXRpb24tY2FyZC5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERldGFpbFNpZGVQYW5lbFRhYiB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBNYXRlcmlhbCBpY29uIG5hbWUgZm9yIHRoZSBzaWRlIHBhbmVsIGJ1dHRvbiAqL1xuICBpY29uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERldGFpbFNpZGVQYW5lbE1ldGFkYXRhSXRlbSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGljb24/OiBzdHJpbmc7XG4gIGljb25MaWJyYXJ5PzogJ21hdCcgfCAnZmEnO1xuICBsaW5rPzogc3RyaW5nO1xuICBzdGF0dXNDb2xvcj86ICd5ZWxsb3cnIHwgJ3JlZCcgfCAnZ3JlZW4nIHwgJ2dyYXknO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERldGFpbFNpZGVQYW5lbENvbmZpZ1NlY3Rpb24ge1xuICB0aXRsZTogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBpdGVtczogQ29uZmlndXJhdGlvbkl0ZW1bXTtcbn1cbiJdfQ==
|