@cqa-lib/cqa-ui 1.0.24 → 1.0.26
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/dashboards/test-distribution-card/test-distribution-card.component.mjs +42 -6
- package/fesm2015/cqa-lib-cqa-ui.mjs +41 -5
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +41 -5
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/dashboards/test-distribution-card/test-distribution-card.component.d.ts +4 -0
- package/package.json +1 -1
|
@@ -9,12 +9,42 @@ export class TestDistributionCardComponent {
|
|
|
9
9
|
this.items = [];
|
|
10
10
|
}
|
|
11
11
|
totalSegments() {
|
|
12
|
-
return this.
|
|
12
|
+
return this.visibleSegments.reduce((sum, s) => sum + (s.value || 0), 0) || 1;
|
|
13
13
|
}
|
|
14
14
|
segmentWidth(segment) {
|
|
15
15
|
const total = this.totalSegments();
|
|
16
|
-
const
|
|
17
|
-
|
|
16
|
+
const segments = this.visibleSegments;
|
|
17
|
+
const minWidthPct = 8; // Minimum 8% to ensure label is visible
|
|
18
|
+
// Calculate natural percentages for all segments
|
|
19
|
+
const naturalWidths = segments.map(s => ({
|
|
20
|
+
segment: s,
|
|
21
|
+
naturalPct: (s.value / total) * 100,
|
|
22
|
+
needsMinimum: (s.value / total) * 100 < minWidthPct
|
|
23
|
+
}));
|
|
24
|
+
// Count how many segments need minimum width
|
|
25
|
+
const segmentsNeedingMinimum = naturalWidths.filter(w => w.needsMinimum).length;
|
|
26
|
+
const totalMinimumWidth = segmentsNeedingMinimum * minWidthPct;
|
|
27
|
+
// Find current segment
|
|
28
|
+
const currentWidth = naturalWidths.find(w => w.segment === segment);
|
|
29
|
+
if (!currentWidth) {
|
|
30
|
+
return '0%';
|
|
31
|
+
}
|
|
32
|
+
// If this segment needs minimum, give it minimum width
|
|
33
|
+
if (currentWidth.needsMinimum) {
|
|
34
|
+
return minWidthPct + '%';
|
|
35
|
+
}
|
|
36
|
+
// For segments that don't need minimum, distribute remaining space proportionally
|
|
37
|
+
// Remaining space = 100% - (segments needing minimum * minWidthPct)
|
|
38
|
+
const remainingSpace = 100 - totalMinimumWidth;
|
|
39
|
+
const segmentsAboveMinimum = naturalWidths.filter(w => !w.needsMinimum);
|
|
40
|
+
const totalNaturalAboveMinimum = segmentsAboveMinimum.reduce((sum, w) => sum + w.naturalPct, 0);
|
|
41
|
+
// If there's no natural space above minimum, just use natural percentage
|
|
42
|
+
if (totalNaturalAboveMinimum === 0) {
|
|
43
|
+
return Math.max(minWidthPct, currentWidth.naturalPct) + '%';
|
|
44
|
+
}
|
|
45
|
+
// Scale the natural percentage to fit in remaining space
|
|
46
|
+
const scaledPct = (currentWidth.naturalPct / totalNaturalAboveMinimum) * remainingSpace;
|
|
47
|
+
return Math.max(minWidthPct, scaledPct) + '%';
|
|
18
48
|
}
|
|
19
49
|
segmentColor(segment, fallback) {
|
|
20
50
|
return segment.colorClass || fallback;
|
|
@@ -43,12 +73,18 @@ export class TestDistributionCardComponent {
|
|
|
43
73
|
}
|
|
44
74
|
return '#4F46E5'; // default
|
|
45
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Filter segments to only show those with value > 0
|
|
78
|
+
*/
|
|
79
|
+
get visibleSegments() {
|
|
80
|
+
return this.segments.filter(segment => segment.value > 0);
|
|
81
|
+
}
|
|
46
82
|
}
|
|
47
83
|
TestDistributionCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestDistributionCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
48
|
-
TestDistributionCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TestDistributionCardComponent, selector: "cqa-test-distribution-card", inputs: { title: "title", segments: "segments", items: "items" }, ngImport: i0, template: "<div id=\"cqa-ui-root\">\n <div class=\"cqa-bg-white cqa-rounded-[8px] cqa-border cqa-border-solid cqa-border-border-default cqa-py-[14.5px] cqa-px-[17px] cqa-shadow-card\">\n <!-- Title -->\n <h3 class=\"cqa-text-[16px] cqa-leading-6 cqa-text-[#111827] cqa-mb-2\">{{ title }}</h3>\n\n <!-- Stacked segments pill -->\n <div class=\"cqa-w-full cqa-h-[24px] cqa-rounded-full cqa-bg-[#F3F4F6] cqa-overflow-hidden cqa-flex cqa-mb-2\">\n <ng-container *ngFor=\"let s of
|
|
84
|
+
TestDistributionCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TestDistributionCardComponent, selector: "cqa-test-distribution-card", inputs: { title: "title", segments: "segments", items: "items" }, ngImport: i0, template: "<div id=\"cqa-ui-root\">\n <div class=\"cqa-bg-white cqa-rounded-[8px] cqa-border cqa-border-solid cqa-border-border-default cqa-py-[14.5px] cqa-px-[17px] cqa-shadow-card\">\n <!-- Title -->\n <h3 class=\"cqa-text-[16px] cqa-leading-6 cqa-text-[#111827] cqa-mb-2\">{{ title }}</h3>\n\n <!-- Stacked segments pill -->\n <div class=\"cqa-w-full cqa-h-[24px] cqa-rounded-full cqa-bg-[#F3F4F6] cqa-overflow-hidden cqa-flex cqa-mb-2\">\n <ng-container *ngFor=\"let s of visibleSegments; let i = index; let last = last\">\n <div\n class=\"cqa-h-full cqa-flex cqa-items-center cqa-justify-center cqa-text-white cqa-text-[12px] cqa-leading-[16px]\"\n [ngClass]=\"[\n segmentColor(s, i === 0 ? 'cqa-bg-[#4F46E5]' : i === segments.length - 1 ? 'cqa-bg-[#059669]' : 'cqa-bg-[#9333EA]'),\n i === 0 ? 'cqa-rounded-l-full' : '',\n last ? 'cqa-rounded-r-full' : ''\n ]\" [style.width]=\"segmentWidth(s)\">\n {{ s.label }}\n </div>\n </ng-container>\n </div>\n\n <!-- Items list -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-[6px]\">\n <div *ngFor=\"let it of items\" class=\"cqa-flex cqa-flex-col cqa-gap-[6px]\">\n <!-- Parent row -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-between\">\n <div class=\"cqa-flex cqa-items-center\">\n <span class=\"cqa-w-[4px] cqa-h-[12px] cqa-rounded-full\" [style.background-color]=\"getItemIconColor(it)\"></span>\n <div class=\"cqa-ml-[8px] cqa-mr-[6px]\">\n <mat-icon *ngIf=\"it.icon\" class=\"cqa-w-[14px] cqa-h-[14px] cqa-text-[14px] cqa-leading-[14px]\" [style.color]=\"getItemIconColor(it)\">\n {{ it.icon }}\n </mat-icon>\n </div>\n <span class=\"cqa-text-[12px] cqa-leading-[18px] cqa-text-dialog-muted\">{{ it.label }}</span>\n </div>\n <div class=\"cqa-text-[12px] cqa-leading-4 cqa-font-bold\">{{ it.value | number }}</div>\n </div>\n\n <!-- Children rows -->\n <div *ngIf=\"it.children?.length\" class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div *ngFor=\"let ch of it.children\"\n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-flex-1 cqa-rounded-[4px] cqa-bg-[#F9FAFB]\">\n <div class=\"cqa-flex cqa-items-center cqa-text-[10px] cqa-leading-[15px] cqa-text-[#4B5563]\">\n <ng-container *ngIf=\"getChildIcon(ch.label) as icon\">\n <ng-container [ngSwitch]=\"icon\">\n <svg *ngSwitchCase=\"'apple'\" class=\"cqa-w-[14px] cqa-h-[14px] cqa-ml-2 cqa-mr-1\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path fill=\"currentColor\" d=\"M16.365 1.43c0 1.182-.435 2.014-1.086 2.845-.823.99-1.982 1.707-3.078 1.6-.13-1.115.433-2.154 1.09-2.87.825-.925 2.196-1.59 3.07-1.575-.003.003.003 0 .003 0zm3.217 6.094c-.086-.067-2.684-1.598-5.468-.507-1.332.53-2.429.542-3.788.006-1.997-.8-3.635.156-3.735.208-.083.044-1.948 1.143-2.4 3.667-.43 2.375.6 4.92 1.4 6.52.723 1.421 1.704 3.126 3.067 3.07 1.35-.053 1.78-.883 3.323-.883 1.542 0 1.92.883 3.36.853 1.44-.026 2.352-1.443 3.073-2.855.674-1.324.963-2.603.983-2.668-.021-.009-1.88-.72-1.903-2.854-.021-1.786 1.463-2.64 1.534-2.682z\"/>\n </svg>\n <svg *ngSwitchCase=\"'android'\" class=\"cqa-w-[14px] cqa-h-[14px] cqa-ml-2 cqa-mr-1\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path fill=\"currentColor\" d=\"M17.6 9.48l1.42-2.46a.5.5 0 10-.86-.5l-1.44 2.52A11 11 0 0016 7h-8c-.24 0-.48.01-.72.04L5.84 6.5a.5.5 0 00-.86.5l1.42 2.46A7 7 0 004 15h.5a1.5 1.5 0 001.5-1.5V10h1v9.5A1.5 1.5 0 008.5 21h1a1.5 1.5 0 001.5-1.5V17h2v2.5A1.5 1.5 0 0014.5 21h1a1.5 1.5 0 001.5-1.5V10h1v3.5A1.5 1.5 0 0019.5 15H20a7 7 0 00-2.4-5.52zM9 5a.75.75 0 11-1.5 0A.75.75 0 019 5zm7.5 0a.75.75 0 11-1.5 0 .75.75 0 011.5 0z\"/>\n </svg>\n </ng-container>\n </ng-container>\n <div class=\"cqa-pr-1\" [ngClass]=\"getChildIcon(ch.label) ? 'cqa-pl-0' : 'cqa-pl-2'\">{{ ch.label }}</div>\n </div>\n <span class=\"cqa-font-bold cqa-text-[#111827] cqa-text-[10px] cqa-leading-[15px]\">{{ ch.value }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>", 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.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], pipes: { "number": i2.DecimalPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
49
85
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestDistributionCardComponent, decorators: [{
|
|
50
86
|
type: Component,
|
|
51
|
-
args: [{ selector: 'cqa-test-distribution-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div id=\"cqa-ui-root\">\n <div class=\"cqa-bg-white cqa-rounded-[8px] cqa-border cqa-border-solid cqa-border-border-default cqa-py-[14.5px] cqa-px-[17px] cqa-shadow-card\">\n <!-- Title -->\n <h3 class=\"cqa-text-[16px] cqa-leading-6 cqa-text-[#111827] cqa-mb-2\">{{ title }}</h3>\n\n <!-- Stacked segments pill -->\n <div class=\"cqa-w-full cqa-h-[24px] cqa-rounded-full cqa-bg-[#F3F4F6] cqa-overflow-hidden cqa-flex cqa-mb-2\">\n <ng-container *ngFor=\"let s of
|
|
87
|
+
args: [{ selector: 'cqa-test-distribution-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div id=\"cqa-ui-root\">\n <div class=\"cqa-bg-white cqa-rounded-[8px] cqa-border cqa-border-solid cqa-border-border-default cqa-py-[14.5px] cqa-px-[17px] cqa-shadow-card\">\n <!-- Title -->\n <h3 class=\"cqa-text-[16px] cqa-leading-6 cqa-text-[#111827] cqa-mb-2\">{{ title }}</h3>\n\n <!-- Stacked segments pill -->\n <div class=\"cqa-w-full cqa-h-[24px] cqa-rounded-full cqa-bg-[#F3F4F6] cqa-overflow-hidden cqa-flex cqa-mb-2\">\n <ng-container *ngFor=\"let s of visibleSegments; let i = index; let last = last\">\n <div\n class=\"cqa-h-full cqa-flex cqa-items-center cqa-justify-center cqa-text-white cqa-text-[12px] cqa-leading-[16px]\"\n [ngClass]=\"[\n segmentColor(s, i === 0 ? 'cqa-bg-[#4F46E5]' : i === segments.length - 1 ? 'cqa-bg-[#059669]' : 'cqa-bg-[#9333EA]'),\n i === 0 ? 'cqa-rounded-l-full' : '',\n last ? 'cqa-rounded-r-full' : ''\n ]\" [style.width]=\"segmentWidth(s)\">\n {{ s.label }}\n </div>\n </ng-container>\n </div>\n\n <!-- Items list -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-[6px]\">\n <div *ngFor=\"let it of items\" class=\"cqa-flex cqa-flex-col cqa-gap-[6px]\">\n <!-- Parent row -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-between\">\n <div class=\"cqa-flex cqa-items-center\">\n <span class=\"cqa-w-[4px] cqa-h-[12px] cqa-rounded-full\" [style.background-color]=\"getItemIconColor(it)\"></span>\n <div class=\"cqa-ml-[8px] cqa-mr-[6px]\">\n <mat-icon *ngIf=\"it.icon\" class=\"cqa-w-[14px] cqa-h-[14px] cqa-text-[14px] cqa-leading-[14px]\" [style.color]=\"getItemIconColor(it)\">\n {{ it.icon }}\n </mat-icon>\n </div>\n <span class=\"cqa-text-[12px] cqa-leading-[18px] cqa-text-dialog-muted\">{{ it.label }}</span>\n </div>\n <div class=\"cqa-text-[12px] cqa-leading-4 cqa-font-bold\">{{ it.value | number }}</div>\n </div>\n\n <!-- Children rows -->\n <div *ngIf=\"it.children?.length\" class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div *ngFor=\"let ch of it.children\"\n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-flex-1 cqa-rounded-[4px] cqa-bg-[#F9FAFB]\">\n <div class=\"cqa-flex cqa-items-center cqa-text-[10px] cqa-leading-[15px] cqa-text-[#4B5563]\">\n <ng-container *ngIf=\"getChildIcon(ch.label) as icon\">\n <ng-container [ngSwitch]=\"icon\">\n <svg *ngSwitchCase=\"'apple'\" class=\"cqa-w-[14px] cqa-h-[14px] cqa-ml-2 cqa-mr-1\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path fill=\"currentColor\" d=\"M16.365 1.43c0 1.182-.435 2.014-1.086 2.845-.823.99-1.982 1.707-3.078 1.6-.13-1.115.433-2.154 1.09-2.87.825-.925 2.196-1.59 3.07-1.575-.003.003.003 0 .003 0zm3.217 6.094c-.086-.067-2.684-1.598-5.468-.507-1.332.53-2.429.542-3.788.006-1.997-.8-3.635.156-3.735.208-.083.044-1.948 1.143-2.4 3.667-.43 2.375.6 4.92 1.4 6.52.723 1.421 1.704 3.126 3.067 3.07 1.35-.053 1.78-.883 3.323-.883 1.542 0 1.92.883 3.36.853 1.44-.026 2.352-1.443 3.073-2.855.674-1.324.963-2.603.983-2.668-.021-.009-1.88-.72-1.903-2.854-.021-1.786 1.463-2.64 1.534-2.682z\"/>\n </svg>\n <svg *ngSwitchCase=\"'android'\" class=\"cqa-w-[14px] cqa-h-[14px] cqa-ml-2 cqa-mr-1\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path fill=\"currentColor\" d=\"M17.6 9.48l1.42-2.46a.5.5 0 10-.86-.5l-1.44 2.52A11 11 0 0016 7h-8c-.24 0-.48.01-.72.04L5.84 6.5a.5.5 0 00-.86.5l1.42 2.46A7 7 0 004 15h.5a1.5 1.5 0 001.5-1.5V10h1v9.5A1.5 1.5 0 008.5 21h1a1.5 1.5 0 001.5-1.5V17h2v2.5A1.5 1.5 0 0014.5 21h1a1.5 1.5 0 001.5-1.5V10h1v3.5A1.5 1.5 0 0019.5 15H20a7 7 0 00-2.4-5.52zM9 5a.75.75 0 11-1.5 0A.75.75 0 019 5zm7.5 0a.75.75 0 11-1.5 0 .75.75 0 011.5 0z\"/>\n </svg>\n </ng-container>\n </ng-container>\n <div class=\"cqa-pr-1\" [ngClass]=\"getChildIcon(ch.label) ? 'cqa-pl-0' : 'cqa-pl-2'\">{{ ch.label }}</div>\n </div>\n <span class=\"cqa-font-bold cqa-text-[#111827] cqa-text-[10px] cqa-leading-[15px]\">{{ ch.value }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [] }]
|
|
52
88
|
}], propDecorators: { title: [{
|
|
53
89
|
type: Input
|
|
54
90
|
}], segments: [{
|
|
@@ -56,4 +92,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
56
92
|
}], items: [{
|
|
57
93
|
type: Input
|
|
58
94
|
}] } });
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1kaXN0cmlidXRpb24tY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rhc2hib2FyZHMvdGVzdC1kaXN0cmlidXRpb24tY2FyZC90ZXN0LWRpc3RyaWJ1dGlvbi1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGFzaGJvYXJkcy90ZXN0LWRpc3RyaWJ1dGlvbi1jYXJkL3Rlc3QtZGlzdHJpYnV0aW9uLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUE2QjFFLE1BQU0sT0FBTyw2QkFBNkI7SUFOMUM7UUFPVyxVQUFLLEdBQVcsbUJBQW1CLENBQUM7UUFDcEMsYUFBUSxHQUEwQixFQUFFLENBQUM7UUFDckMsVUFBSyxHQUF1QixFQUFFLENBQUM7S0FzQ3pDO0lBcENDLGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELFlBQVksQ0FBQyxPQUE0QjtRQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEUsT0FBTyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFRCxZQUFZLENBQUMsT0FBNEIsRUFBRSxRQUFnQjtRQUN6RCxPQUFPLE9BQU8sQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkQsSUFBSSxlQUFlLEtBQUssS0FBSyxJQUFJLGVBQWUsS0FBSyxPQUFPLEVBQUU7WUFDNUQsT0FBTyxPQUFPLENBQUM7U0FDaEI7YUFBTSxJQUFJLGVBQWUsS0FBSyxTQUFTLEVBQUU7WUFDeEMsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFzQjtRQUNyQyw2Q0FBNkM7UUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QyxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUU7WUFDbkIsT0FBTyxTQUFTLENBQUM7U0FDbEI7YUFBTSxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsT0FBTyxTQUFTLENBQUM7U0FDbEI7YUFBTSxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUU7WUFDMUIsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFDRCxPQUFPLFNBQVMsQ0FBQyxDQUFDLFVBQVU7SUFDOUIsQ0FBQzs7MEhBeENVLDZCQUE2Qjs4R0FBN0IsNkJBQTZCLG9JQzdCMUMsbXlJQTRETTsyRkQvQk8sNkJBQTZCO2tCQU56QyxTQUFTOytCQUNFLDRCQUE0QixtQkFHckIsdUJBQXVCLENBQUMsTUFBTTs4QkFHdEMsS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBEaXN0cmlidXRpb25TZWdtZW50IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlcjtcbiAgLyoqIFRhaWx3aW5kLWxpa2UgY2xhc3Mgb3IgaGV4IGJnIGNvbG9yICovXG4gIGNvbG9yQ2xhc3M/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzdHJpYnV0aW9uQ2hpbGRJdGVtIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlcjtcbiAgY29sb3JDbGFzcz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXN0cmlidXRpb25JdGVtIHtcbiAgaWNvbj86IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlcjtcbiAgY29sb3JDbGFzcz86IHN0cmluZzsgLy8gdXNlZCBmb3IgaWNvbi9hY2NlbnQgaWYgZGVzaXJlZFxuICBjaGlsZHJlbj86IERpc3RyaWJ1dGlvbkNoaWxkSXRlbVtdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtdGVzdC1kaXN0cmlidXRpb24tY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXN0LWRpc3RyaWJ1dGlvbi1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRlc3REaXN0cmlidXRpb25DYXJkQ29tcG9uZW50IHtcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9ICdUZXN0IERpc3RyaWJ1dGlvbic7XG4gIEBJbnB1dCgpIHNlZ21lbnRzOiBEaXN0cmlidXRpb25TZWdtZW50W10gPSBbXTtcbiAgQElucHV0KCkgaXRlbXM6IERpc3RyaWJ1dGlvbkl0ZW1bXSA9IFtdO1xuXG4gIHRvdGFsU2VnbWVudHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zZWdtZW50cy5yZWR1Y2UoKHN1bSwgcykgPT4gc3VtICsgKHMudmFsdWUgfHwgMCksIDApIHx8IDE7XG4gIH1cblxuICBzZWdtZW50V2lkdGgoc2VnbWVudDogRGlzdHJpYnV0aW9uU2VnbWVudCk6IHN0cmluZyB7XG4gICAgY29uc3QgdG90YWwgPSB0aGlzLnRvdGFsU2VnbWVudHMoKTtcbiAgICBjb25zdCBwY3QgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIChzZWdtZW50LnZhbHVlIC8gdG90YWwpICogMTAwKSk7XG4gICAgcmV0dXJuIHBjdCArICclJztcbiAgfVxuXG4gIHNlZ21lbnRDb2xvcihzZWdtZW50OiBEaXN0cmlidXRpb25TZWdtZW50LCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc2VnbWVudC5jb2xvckNsYXNzIHx8IGZhbGxiYWNrO1xuICB9XG5cbiAgZ2V0Q2hpbGRJY29uKGxhYmVsOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBub3JtYWxpemVkTGFiZWwgPSBsYWJlbC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBpZiAobm9ybWFsaXplZExhYmVsID09PSAnaW9zJyB8fCBub3JtYWxpemVkTGFiZWwgPT09ICdhcHBsZScpIHtcbiAgICAgIHJldHVybiAnYXBwbGUnO1xuICAgIH0gZWxzZSBpZiAobm9ybWFsaXplZExhYmVsID09PSAnYW5kcm9pZCcpIHtcbiAgICAgIHJldHVybiAnYW5kcm9pZCc7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0SXRlbUljb25Db2xvcihpdGVtOiBEaXN0cmlidXRpb25JdGVtKTogc3RyaW5nIHtcbiAgICAvLyBSZXR1cm4gY29sb3IgYmFzZWQgb24gbGFiZWwgb3IgdXNlIGRlZmF1bHRcbiAgICBjb25zdCBsYWJlbCA9IGl0ZW0ubGFiZWwudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobGFiZWwgPT09ICd3ZWInKSB7XG4gICAgICByZXR1cm4gJyM0RjQ2RTUnO1xuICAgIH0gZWxzZSBpZiAobGFiZWwgPT09ICdtb2JpbGUnKSB7XG4gICAgICByZXR1cm4gJyM5MzMzRUEnO1xuICAgIH0gZWxzZSBpZiAobGFiZWwgPT09ICdhcGknKSB7XG4gICAgICByZXR1cm4gJyMwNTk2NjknO1xuICAgIH1cbiAgICByZXR1cm4gJyM0RjQ2RTUnOyAvLyBkZWZhdWx0XG4gIH1cbn1cblxuXG4iLCI8ZGl2IGlkPVwiY3FhLXVpLXJvb3RcIj5cbiAgPGRpdiBjbGFzcz1cImNxYS1iZy13aGl0ZSBjcWEtcm91bmRlZC1bOHB4XSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1ib3JkZXItZGVmYXVsdCBjcWEtcHktWzE0LjVweF0gY3FhLXB4LVsxN3B4XSBjcWEtc2hhZG93LWNhcmRcIj5cbiAgICA8IS0tIFRpdGxlIC0tPlxuICAgIDxoMyBjbGFzcz1cImNxYS10ZXh0LVsxNnB4XSBjcWEtbGVhZGluZy02IGNxYS10ZXh0LVsjMTExODI3XSBjcWEtbWItMlwiPnt7IHRpdGxlIH19PC9oMz5cblxuICAgIDwhLS0gU3RhY2tlZCBzZWdtZW50cyBwaWxsIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtdy1mdWxsIGNxYS1oLVsyNHB4XSBjcWEtcm91bmRlZC1mdWxsIGNxYS1iZy1bI0YzRjRGNl0gY3FhLW92ZXJmbG93LWhpZGRlbiBjcWEtZmxleCBjcWEtbWItMlwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcyBvZiBzZWdtZW50czsgbGV0IGkgPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNxYS1oLWZ1bGwgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXRleHQtd2hpdGUgY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLVsxNnB4XVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiW1xuICAgICAgICAgICAgc2VnbWVudENvbG9yKHMsIGkgPT09IDAgPyAnY3FhLWJnLVsjNEY0NkU1XScgOiBpID09PSBzZWdtZW50cy5sZW5ndGggLSAxID8gJ2NxYS1iZy1bIzA1OTY2OV0nIDogJ2NxYS1iZy1bIzkzMzNFQV0nKSxcbiAgICAgICAgICAgIGkgPT09IDAgPyAnY3FhLXJvdW5kZWQtbC1mdWxsJyA6ICcnLFxuICAgICAgICAgICAgbGFzdCA/ICdjcWEtcm91bmRlZC1yLWZ1bGwnIDogJydcbiAgICAgICAgICBdXCIgW3N0eWxlLndpZHRoXT1cInNlZ21lbnRXaWR0aChzKVwiPlxuICAgICAgICAgIHt7IHMubGFiZWwgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gSXRlbXMgbGlzdCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtWzZweF1cIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0IG9mIGl0ZW1zXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC1bNnB4XVwiPlxuICAgICAgICA8IS0tIFBhcmVudCByb3cgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdy1bNHB4XSBjcWEtaC1bMTJweF0gY3FhLXJvdW5kZWQtZnVsbFwiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImdldEl0ZW1JY29uQ29sb3IoaXQpXCI+PC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1tbC1bOHB4XSBjcWEtbXItWzZweF1cIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiaXQuaWNvblwiIGNsYXNzPVwiY3FhLXctWzE0cHhdIGNxYS1oLVsxNHB4XSBjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzE0cHhdXCIgW3N0eWxlLmNvbG9yXT1cImdldEl0ZW1JY29uQ29sb3IoaXQpXCI+XG4gICAgICAgICAgICAgICAge3sgaXQuaWNvbiB9fVxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMThweF0gY3FhLXRleHQtZGlhbG9nLW11dGVkXCI+e3sgaXQubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy00IGNxYS1mb250LWJvbGRcIj57eyBpdC52YWx1ZSB8IG51bWJlciB9fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIENoaWxkcmVuIHJvd3MgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpdC5jaGlsZHJlbj8ubGVuZ3RoXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNoIG9mIGl0LmNoaWxkcmVuXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1mbGV4LTEgY3FhLXJvdW5kZWQtWzRweF0gY3FhLWJnLVsjRjlGQUZCXVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtdGV4dC1bIzRCNTU2M11cIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldENoaWxkSWNvbihjaC5sYWJlbCkgYXMgaWNvblwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImljb25cIj5cbiAgICAgICAgICAgICAgICAgIDxzdmcgKm5nU3dpdGNoQ2FzZT1cIidhcHBsZSdcIiBjbGFzcz1cImNxYS13LVsxNHB4XSBjcWEtaC1bMTRweF0gY3FhLW1sLTIgY3FhLW1yLTFcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZm9jdXNhYmxlPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTYuMzY1IDEuNDNjMCAxLjE4Mi0uNDM1IDIuMDE0LTEuMDg2IDIuODQ1LS44MjMuOTktMS45ODIgMS43MDctMy4wNzggMS42LS4xMy0xLjExNS40MzMtMi4xNTQgMS4wOS0yLjg3LjgyNS0uOTI1IDIuMTk2LTEuNTkgMy4wNy0xLjU3NS0uMDAzLjAwMy4wMDMgMCAuMDAzIDB6bTMuMjE3IDYuMDk0Yy0uMDg2LS4wNjctMi42ODQtMS41OTgtNS40NjgtLjUwNy0xLjMzMi41My0yLjQyOS41NDItMy43ODguMDA2LTEuOTk3LS44LTMuNjM1LjE1Ni0zLjczNS4yMDgtLjA4My4wNDQtMS45NDggMS4xNDMtMi40IDMuNjY3LS40MyAyLjM3NS42IDQuOTIgMS40IDYuNTIuNzIzIDEuNDIxIDEuNzA0IDMuMTI2IDMuMDY3IDMuMDcgMS4zNS0uMDUzIDEuNzgtLjg4MyAzLjMyMy0uODgzIDEuNTQyIDAgMS45Mi44ODMgMy4zNi44NTMgMS40NC0uMDI2IDIuMzUyLTEuNDQzIDMuMDczLTIuODU1LjY3NC0xLjMyNC45NjMtMi42MDMuOTgzLTIuNjY4LS4wMjEtLjAwOS0xLjg4LS43Mi0xLjkwMy0yLjg1NC0uMDIxLTEuNzg2IDEuNDYzLTIuNjQgMS41MzQtMi42ODJ6XCIvPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICA8c3ZnICpuZ1N3aXRjaENhc2U9XCInYW5kcm9pZCdcIiBjbGFzcz1cImNxYS13LVsxNHB4XSBjcWEtaC1bMTRweF0gY3FhLW1sLTIgY3FhLW1yLTFcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZm9jdXNhYmxlPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTcuNiA5LjQ4bDEuNDItMi40NmEuNS41IDAgMTAtLjg2LS41bC0xLjQ0IDIuNTJBMTEgMTEgMCAwMDE2IDdoLThjLS4yNCAwLS40OC4wMS0uNzIuMDRMNS44NCA2LjVhLjUuNSAwIDAwLS44Ni41bDEuNDIgMi40NkE3IDcgMCAwMDQgMTVoLjVhMS41IDEuNSAwIDAwMS41LTEuNVYxMGgxdjkuNUExLjUgMS41IDAgMDA4LjUgMjFoMWExLjUgMS41IDAgMDAxLjUtMS41VjE3aDJ2Mi41QTEuNSAxLjUgMCAwMDE0LjUgMjFoMWExLjUgMS41IDAgMDAxLjUtMS41VjEwaDF2My41QTEuNSAxLjUgMCAwMDE5LjUgMTVIMjBhNyA3IDAgMDAtMi40LTUuNTJ6TTkgNWEuNzUuNzUgMCAxMS0xLjUgMEEuNzUuNzUgMCAwMTkgNXptNy41IDBhLjc1Ljc1IDAgMTEtMS41IDAgLjc1Ljc1IDAgMDExLjUgMHpcIi8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtcHItMVwiIFtuZ0NsYXNzXT1cImdldENoaWxkSWNvbihjaC5sYWJlbCkgPyAnY3FhLXBsLTAnIDogJ2NxYS1wbC0yJ1wiPnt7IGNoLmxhYmVsIH19PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZvbnQtYm9sZCBjcWEtdGV4dC1bIzExMTgyN10gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XVwiPnt7IGNoLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1kaXN0cmlidXRpb24tY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rhc2hib2FyZHMvdGVzdC1kaXN0cmlidXRpb24tY2FyZC90ZXN0LWRpc3RyaWJ1dGlvbi1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGFzaGJvYXJkcy90ZXN0LWRpc3RyaWJ1dGlvbi1jYXJkL3Rlc3QtZGlzdHJpYnV0aW9uLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUE2QjFFLE1BQU0sT0FBTyw2QkFBNkI7SUFOMUM7UUFPVyxVQUFLLEdBQVcsbUJBQW1CLENBQUM7UUFDcEMsYUFBUSxHQUEwQixFQUFFLENBQUM7UUFDckMsVUFBSyxHQUF1QixFQUFFLENBQUM7S0FtRnpDO0lBakZDLGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELFlBQVksQ0FBQyxPQUE0QjtRQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUN0QyxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyx3Q0FBd0M7UUFFL0QsaURBQWlEO1FBQ2pELE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sRUFBRSxDQUFDO1lBQ1YsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHO1lBQ25DLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLFdBQVc7U0FDcEQsQ0FBQyxDQUFDLENBQUM7UUFFSiw2Q0FBNkM7UUFDN0MsTUFBTSxzQkFBc0IsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNoRixNQUFNLGlCQUFpQixHQUFHLHNCQUFzQixHQUFHLFdBQVcsQ0FBQztRQUUvRCx1QkFBdUI7UUFDdkIsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsdURBQXVEO1FBQ3ZELElBQUksWUFBWSxDQUFDLFlBQVksRUFBRTtZQUM3QixPQUFPLFdBQVcsR0FBRyxHQUFHLENBQUM7U0FDMUI7UUFFRCxrRkFBa0Y7UUFDbEYsb0VBQW9FO1FBQ3BFLE1BQU0sY0FBYyxHQUFHLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQztRQUMvQyxNQUFNLG9CQUFvQixHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RSxNQUFNLHdCQUF3QixHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRWhHLHlFQUF5RTtRQUN6RSxJQUFJLHdCQUF3QixLQUFLLENBQUMsRUFBRTtZQUNsQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7U0FDN0Q7UUFFRCx5REFBeUQ7UUFDekQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLHdCQUF3QixDQUFDLEdBQUcsY0FBYyxDQUFDO1FBRXhGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2hELENBQUM7SUFFRCxZQUFZLENBQUMsT0FBNEIsRUFBRSxRQUFnQjtRQUN6RCxPQUFPLE9BQU8sQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkQsSUFBSSxlQUFlLEtBQUssS0FBSyxJQUFJLGVBQWUsS0FBSyxPQUFPLEVBQUU7WUFDNUQsT0FBTyxPQUFPLENBQUM7U0FDaEI7YUFBTSxJQUFJLGVBQWUsS0FBSyxTQUFTLEVBQUU7WUFDeEMsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFzQjtRQUNyQyw2Q0FBNkM7UUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QyxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUU7WUFDbkIsT0FBTyxTQUFTLENBQUM7U0FDbEI7YUFBTSxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsT0FBTyxTQUFTLENBQUM7U0FDbEI7YUFBTSxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUU7WUFDMUIsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFDRCxPQUFPLFNBQVMsQ0FBQyxDQUFDLFVBQVU7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7OzBIQXJGVSw2QkFBNkI7OEdBQTdCLDZCQUE2QixvSUM3QjFDLDB5SUE0RE07MkZEL0JPLDZCQUE2QjtrQkFOekMsU0FBUzsrQkFDRSw0QkFBNEIsbUJBR3JCLHVCQUF1QixDQUFDLE1BQU07OEJBR3RDLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzdHJpYnV0aW9uU2VnbWVudCB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZhbHVlOiBudW1iZXI7XG4gIC8qKiBUYWlsd2luZC1saWtlIGNsYXNzIG9yIGhleCBiZyBjb2xvciAqL1xuICBjb2xvckNsYXNzPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpc3RyaWJ1dGlvbkNoaWxkSXRlbSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGNvbG9yQ2xhc3M/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzdHJpYnV0aW9uSXRlbSB7XG4gIGljb24/OiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGNvbG9yQ2xhc3M/OiBzdHJpbmc7IC8vIHVzZWQgZm9yIGljb24vYWNjZW50IGlmIGRlc2lyZWRcbiAgY2hpbGRyZW4/OiBEaXN0cmlidXRpb25DaGlsZEl0ZW1bXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXRlc3QtZGlzdHJpYnV0aW9uLWNhcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGVzdC1kaXN0cmlidXRpb24tY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUZXN0RGlzdHJpYnV0aW9uQ2FyZENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSAnVGVzdCBEaXN0cmlidXRpb24nO1xuICBASW5wdXQoKSBzZWdtZW50czogRGlzdHJpYnV0aW9uU2VnbWVudFtdID0gW107XG4gIEBJbnB1dCgpIGl0ZW1zOiBEaXN0cmlidXRpb25JdGVtW10gPSBbXTtcblxuICB0b3RhbFNlZ21lbnRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZVNlZ21lbnRzLnJlZHVjZSgoc3VtLCBzKSA9PiBzdW0gKyAocy52YWx1ZSB8fCAwKSwgMCkgfHwgMTtcbiAgfVxuXG4gIHNlZ21lbnRXaWR0aChzZWdtZW50OiBEaXN0cmlidXRpb25TZWdtZW50KTogc3RyaW5nIHtcbiAgICBjb25zdCB0b3RhbCA9IHRoaXMudG90YWxTZWdtZW50cygpO1xuICAgIGNvbnN0IHNlZ21lbnRzID0gdGhpcy52aXNpYmxlU2VnbWVudHM7XG4gICAgY29uc3QgbWluV2lkdGhQY3QgPSA4OyAvLyBNaW5pbXVtIDglIHRvIGVuc3VyZSBsYWJlbCBpcyB2aXNpYmxlXG4gICAgXG4gICAgLy8gQ2FsY3VsYXRlIG5hdHVyYWwgcGVyY2VudGFnZXMgZm9yIGFsbCBzZWdtZW50c1xuICAgIGNvbnN0IG5hdHVyYWxXaWR0aHMgPSBzZWdtZW50cy5tYXAocyA9PiAoe1xuICAgICAgc2VnbWVudDogcyxcbiAgICAgIG5hdHVyYWxQY3Q6IChzLnZhbHVlIC8gdG90YWwpICogMTAwLFxuICAgICAgbmVlZHNNaW5pbXVtOiAocy52YWx1ZSAvIHRvdGFsKSAqIDEwMCA8IG1pbldpZHRoUGN0XG4gICAgfSkpO1xuICAgIFxuICAgIC8vIENvdW50IGhvdyBtYW55IHNlZ21lbnRzIG5lZWQgbWluaW11bSB3aWR0aFxuICAgIGNvbnN0IHNlZ21lbnRzTmVlZGluZ01pbmltdW0gPSBuYXR1cmFsV2lkdGhzLmZpbHRlcih3ID0+IHcubmVlZHNNaW5pbXVtKS5sZW5ndGg7XG4gICAgY29uc3QgdG90YWxNaW5pbXVtV2lkdGggPSBzZWdtZW50c05lZWRpbmdNaW5pbXVtICogbWluV2lkdGhQY3Q7XG4gICAgXG4gICAgLy8gRmluZCBjdXJyZW50IHNlZ21lbnRcbiAgICBjb25zdCBjdXJyZW50V2lkdGggPSBuYXR1cmFsV2lkdGhzLmZpbmQodyA9PiB3LnNlZ21lbnQgPT09IHNlZ21lbnQpO1xuICAgIGlmICghY3VycmVudFdpZHRoKSB7XG4gICAgICByZXR1cm4gJzAlJztcbiAgICB9XG4gICAgXG4gICAgLy8gSWYgdGhpcyBzZWdtZW50IG5lZWRzIG1pbmltdW0sIGdpdmUgaXQgbWluaW11bSB3aWR0aFxuICAgIGlmIChjdXJyZW50V2lkdGgubmVlZHNNaW5pbXVtKSB7XG4gICAgICByZXR1cm4gbWluV2lkdGhQY3QgKyAnJSc7XG4gICAgfVxuICAgIFxuICAgIC8vIEZvciBzZWdtZW50cyB0aGF0IGRvbid0IG5lZWQgbWluaW11bSwgZGlzdHJpYnV0ZSByZW1haW5pbmcgc3BhY2UgcHJvcG9ydGlvbmFsbHlcbiAgICAvLyBSZW1haW5pbmcgc3BhY2UgPSAxMDAlIC0gKHNlZ21lbnRzIG5lZWRpbmcgbWluaW11bSAqIG1pbldpZHRoUGN0KVxuICAgIGNvbnN0IHJlbWFpbmluZ1NwYWNlID0gMTAwIC0gdG90YWxNaW5pbXVtV2lkdGg7XG4gICAgY29uc3Qgc2VnbWVudHNBYm92ZU1pbmltdW0gPSBuYXR1cmFsV2lkdGhzLmZpbHRlcih3ID0+ICF3Lm5lZWRzTWluaW11bSk7XG4gICAgY29uc3QgdG90YWxOYXR1cmFsQWJvdmVNaW5pbXVtID0gc2VnbWVudHNBYm92ZU1pbmltdW0ucmVkdWNlKChzdW0sIHcpID0+IHN1bSArIHcubmF0dXJhbFBjdCwgMCk7XG4gICAgXG4gICAgLy8gSWYgdGhlcmUncyBubyBuYXR1cmFsIHNwYWNlIGFib3ZlIG1pbmltdW0sIGp1c3QgdXNlIG5hdHVyYWwgcGVyY2VudGFnZVxuICAgIGlmICh0b3RhbE5hdHVyYWxBYm92ZU1pbmltdW0gPT09IDApIHtcbiAgICAgIHJldHVybiBNYXRoLm1heChtaW5XaWR0aFBjdCwgY3VycmVudFdpZHRoLm5hdHVyYWxQY3QpICsgJyUnO1xuICAgIH1cbiAgICBcbiAgICAvLyBTY2FsZSB0aGUgbmF0dXJhbCBwZXJjZW50YWdlIHRvIGZpdCBpbiByZW1haW5pbmcgc3BhY2VcbiAgICBjb25zdCBzY2FsZWRQY3QgPSAoY3VycmVudFdpZHRoLm5hdHVyYWxQY3QgLyB0b3RhbE5hdHVyYWxBYm92ZU1pbmltdW0pICogcmVtYWluaW5nU3BhY2U7XG4gICAgXG4gICAgcmV0dXJuIE1hdGgubWF4KG1pbldpZHRoUGN0LCBzY2FsZWRQY3QpICsgJyUnO1xuICB9XG5cbiAgc2VnbWVudENvbG9yKHNlZ21lbnQ6IERpc3RyaWJ1dGlvblNlZ21lbnQsIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzZWdtZW50LmNvbG9yQ2xhc3MgfHwgZmFsbGJhY2s7XG4gIH1cblxuICBnZXRDaGlsZEljb24obGFiZWw6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRMYWJlbCA9IGxhYmVsLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGlmIChub3JtYWxpemVkTGFiZWwgPT09ICdpb3MnIHx8IG5vcm1hbGl6ZWRMYWJlbCA9PT0gJ2FwcGxlJykge1xuICAgICAgcmV0dXJuICdhcHBsZSc7XG4gICAgfSBlbHNlIGlmIChub3JtYWxpemVkTGFiZWwgPT09ICdhbmRyb2lkJykge1xuICAgICAgcmV0dXJuICdhbmRyb2lkJztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRJdGVtSWNvbkNvbG9yKGl0ZW06IERpc3RyaWJ1dGlvbkl0ZW0pOiBzdHJpbmcge1xuICAgIC8vIFJldHVybiBjb2xvciBiYXNlZCBvbiBsYWJlbCBvciB1c2UgZGVmYXVsdFxuICAgIGNvbnN0IGxhYmVsID0gaXRlbS5sYWJlbC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsYWJlbCA9PT0gJ3dlYicpIHtcbiAgICAgIHJldHVybiAnIzRGNDZFNSc7XG4gICAgfSBlbHNlIGlmIChsYWJlbCA9PT0gJ21vYmlsZScpIHtcbiAgICAgIHJldHVybiAnIzkzMzNFQSc7XG4gICAgfSBlbHNlIGlmIChsYWJlbCA9PT0gJ2FwaScpIHtcbiAgICAgIHJldHVybiAnIzA1OTY2OSc7XG4gICAgfVxuICAgIHJldHVybiAnIzRGNDZFNSc7IC8vIGRlZmF1bHRcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgc2VnbWVudHMgdG8gb25seSBzaG93IHRob3NlIHdpdGggdmFsdWUgPiAwXG4gICAqL1xuICBnZXQgdmlzaWJsZVNlZ21lbnRzKCk6IERpc3RyaWJ1dGlvblNlZ21lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuc2VnbWVudHMuZmlsdGVyKHNlZ21lbnQgPT4gc2VnbWVudC52YWx1ZSA+IDApO1xuICB9XG59XG5cblxuIiwiPGRpdiBpZD1cImNxYS11aS1yb290XCI+XG4gIDxkaXYgY2xhc3M9XCJjcWEtYmctd2hpdGUgY3FhLXJvdW5kZWQtWzhweF0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItYm9yZGVyLWRlZmF1bHQgY3FhLXB5LVsxNC41cHhdIGNxYS1weC1bMTdweF0gY3FhLXNoYWRvdy1jYXJkXCI+XG4gICAgPCEtLSBUaXRsZSAtLT5cbiAgICA8aDMgY2xhc3M9XCJjcWEtdGV4dC1bMTZweF0gY3FhLWxlYWRpbmctNiBjcWEtdGV4dC1bIzExMTgyN10gY3FhLW1iLTJcIj57eyB0aXRsZSB9fTwvaDM+XG5cbiAgICA8IS0tIFN0YWNrZWQgc2VnbWVudHMgcGlsbCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtaC1bMjRweF0gY3FhLXJvdW5kZWQtZnVsbCBjcWEtYmctWyNGM0Y0RjZdIGNxYS1vdmVyZmxvdy1oaWRkZW4gY3FhLWZsZXggY3FhLW1iLTJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHMgb2YgdmlzaWJsZVNlZ21lbnRzOyBsZXQgaSA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3RcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWgtZnVsbCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdGV4dC13aGl0ZSBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzE2cHhdXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJbXG4gICAgICAgICAgICBzZWdtZW50Q29sb3IocywgaSA9PT0gMCA/ICdjcWEtYmctWyM0RjQ2RTVdJyA6IGkgPT09IHNlZ21lbnRzLmxlbmd0aCAtIDEgPyAnY3FhLWJnLVsjMDU5NjY5XScgOiAnY3FhLWJnLVsjOTMzM0VBXScpLFxuICAgICAgICAgICAgaSA9PT0gMCA/ICdjcWEtcm91bmRlZC1sLWZ1bGwnIDogJycsXG4gICAgICAgICAgICBsYXN0ID8gJ2NxYS1yb3VuZGVkLXItZnVsbCcgOiAnJ1xuICAgICAgICAgIF1cIiBbc3R5bGUud2lkdGhdPVwic2VnbWVudFdpZHRoKHMpXCI+XG4gICAgICAgICAge3sgcy5sYWJlbCB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBJdGVtcyBsaXN0IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC1bNnB4XVwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXQgb2YgaXRlbXNcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLVs2cHhdXCI+XG4gICAgICAgIDwhLS0gUGFyZW50IHJvdyAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS13LVs0cHhdIGNxYS1oLVsxMnB4XSBjcWEtcm91bmRlZC1mdWxsXCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiZ2V0SXRlbUljb25Db2xvcihpdClcIj48L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLW1sLVs4cHhdIGNxYS1tci1bNnB4XVwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpdC5pY29uXCIgY2xhc3M9XCJjcWEtdy1bMTRweF0gY3FhLWgtWzE0cHhdIGNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMTRweF1cIiBbc3R5bGUuY29sb3JdPVwiZ2V0SXRlbUljb25Db2xvcihpdClcIj5cbiAgICAgICAgICAgICAgICB7eyBpdC5pY29uIH19XG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLVsxOHB4XSBjcWEtdGV4dC1kaWFsb2ctbXV0ZWRcIj57eyBpdC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLTQgY3FhLWZvbnQtYm9sZFwiPnt7IGl0LnZhbHVlIHwgbnVtYmVyIH19PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gQ2hpbGRyZW4gcm93cyAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cIml0LmNoaWxkcmVuPy5sZW5ndGhcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY2ggb2YgaXQuY2hpbGRyZW5cIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWZsZXgtMSBjcWEtcm91bmRlZC1bNHB4XSBjcWEtYmctWyNGOUZBRkJdXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS10ZXh0LVsjNEI1NTYzXVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Q2hpbGRJY29uKGNoLmxhYmVsKSBhcyBpY29uXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiaWNvblwiPlxuICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdTd2l0Y2hDYXNlPVwiJ2FwcGxlJ1wiIGNsYXNzPVwiY3FhLXctWzE0cHhdIGNxYS1oLVsxNHB4XSBjcWEtbWwtMiBjcWEtbXItMVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBmb2N1c2FibGU9XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0xNi4zNjUgMS40M2MwIDEuMTgyLS40MzUgMi4wMTQtMS4wODYgMi44NDUtLjgyMy45OS0xLjk4MiAxLjcwNy0zLjA3OCAxLjYtLjEzLTEuMTE1LjQzMy0yLjE1NCAxLjA5LTIuODcuODI1LS45MjUgMi4xOTYtMS41OSAzLjA3LTEuNTc1LS4wMDMuMDAzLjAwMyAwIC4wMDMgMHptMy4yMTcgNi4wOTRjLS4wODYtLjA2Ny0yLjY4NC0xLjU5OC01LjQ2OC0uNTA3LTEuMzMyLjUzLTIuNDI5LjU0Mi0zLjc4OC4wMDYtMS45OTctLjgtMy42MzUuMTU2LTMuNzM1LjIwOC0uMDgzLjA0NC0xLjk0OCAxLjE0My0yLjQgMy42NjctLjQzIDIuMzc1LjYgNC45MiAxLjQgNi41Mi43MjMgMS40MjEgMS43MDQgMy4xMjYgMy4wNjcgMy4wNyAxLjM1LS4wNTMgMS43OC0uODgzIDMuMzIzLS44ODMgMS41NDIgMCAxLjkyLjg4MyAzLjM2Ljg1MyAxLjQ0LS4wMjYgMi4zNTItMS40NDMgMy4wNzMtMi44NTUuNjc0LTEuMzI0Ljk2My0yLjYwMy45ODMtMi42NjgtLjAyMS0uMDA5LTEuODgtLjcyLTEuOTAzLTIuODU0LS4wMjEtMS43ODYgMS40NjMtMi42NCAxLjUzNC0yLjY4MnpcIi8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgIDxzdmcgKm5nU3dpdGNoQ2FzZT1cIidhbmRyb2lkJ1wiIGNsYXNzPVwiY3FhLXctWzE0cHhdIGNxYS1oLVsxNHB4XSBjcWEtbWwtMiBjcWEtbXItMVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBmb2N1c2FibGU9XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0xNy42IDkuNDhsMS40Mi0yLjQ2YS41LjUgMCAxMC0uODYtLjVsLTEuNDQgMi41MkExMSAxMSAwIDAwMTYgN2gtOGMtLjI0IDAtLjQ4LjAxLS43Mi4wNEw1Ljg0IDYuNWEuNS41IDAgMDAtLjg2LjVsMS40MiAyLjQ2QTcgNyAwIDAwNCAxNWguNWExLjUgMS41IDAgMDAxLjUtMS41VjEwaDF2OS41QTEuNSAxLjUgMCAwMDguNSAyMWgxYTEuNSAxLjUgMCAwMDEuNS0xLjVWMTdoMnYyLjVBMS41IDEuNSAwIDAwMTQuNSAyMWgxYTEuNSAxLjUgMCAwMDEuNS0xLjVWMTBoMXYzLjVBMS41IDEuNSAwIDAwMTkuNSAxNUgyMGE3IDcgMCAwMC0yLjQtNS41MnpNOSA1YS43NS43NSAwIDExLTEuNSAwQS43NS43NSAwIDAxOSA1em03LjUgMGEuNzUuNzUgMCAxMS0xLjUgMCAuNzUuNzUgMCAwMTEuNSAwelwiLz5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1wci0xXCIgW25nQ2xhc3NdPVwiZ2V0Q2hpbGRJY29uKGNoLmxhYmVsKSA/ICdjcWEtcGwtMCcgOiAnY3FhLXBsLTInXCI+e3sgY2gubGFiZWwgfX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtZm9udC1ib2xkIGNxYS10ZXh0LVsjMTExODI3XSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdXCI+e3sgY2gudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19
|
|
@@ -2562,12 +2562,42 @@ class TestDistributionCardComponent {
|
|
|
2562
2562
|
this.items = [];
|
|
2563
2563
|
}
|
|
2564
2564
|
totalSegments() {
|
|
2565
|
-
return this.
|
|
2565
|
+
return this.visibleSegments.reduce((sum, s) => sum + (s.value || 0), 0) || 1;
|
|
2566
2566
|
}
|
|
2567
2567
|
segmentWidth(segment) {
|
|
2568
2568
|
const total = this.totalSegments();
|
|
2569
|
-
const
|
|
2570
|
-
|
|
2569
|
+
const segments = this.visibleSegments;
|
|
2570
|
+
const minWidthPct = 8; // Minimum 8% to ensure label is visible
|
|
2571
|
+
// Calculate natural percentages for all segments
|
|
2572
|
+
const naturalWidths = segments.map(s => ({
|
|
2573
|
+
segment: s,
|
|
2574
|
+
naturalPct: (s.value / total) * 100,
|
|
2575
|
+
needsMinimum: (s.value / total) * 100 < minWidthPct
|
|
2576
|
+
}));
|
|
2577
|
+
// Count how many segments need minimum width
|
|
2578
|
+
const segmentsNeedingMinimum = naturalWidths.filter(w => w.needsMinimum).length;
|
|
2579
|
+
const totalMinimumWidth = segmentsNeedingMinimum * minWidthPct;
|
|
2580
|
+
// Find current segment
|
|
2581
|
+
const currentWidth = naturalWidths.find(w => w.segment === segment);
|
|
2582
|
+
if (!currentWidth) {
|
|
2583
|
+
return '0%';
|
|
2584
|
+
}
|
|
2585
|
+
// If this segment needs minimum, give it minimum width
|
|
2586
|
+
if (currentWidth.needsMinimum) {
|
|
2587
|
+
return minWidthPct + '%';
|
|
2588
|
+
}
|
|
2589
|
+
// For segments that don't need minimum, distribute remaining space proportionally
|
|
2590
|
+
// Remaining space = 100% - (segments needing minimum * minWidthPct)
|
|
2591
|
+
const remainingSpace = 100 - totalMinimumWidth;
|
|
2592
|
+
const segmentsAboveMinimum = naturalWidths.filter(w => !w.needsMinimum);
|
|
2593
|
+
const totalNaturalAboveMinimum = segmentsAboveMinimum.reduce((sum, w) => sum + w.naturalPct, 0);
|
|
2594
|
+
// If there's no natural space above minimum, just use natural percentage
|
|
2595
|
+
if (totalNaturalAboveMinimum === 0) {
|
|
2596
|
+
return Math.max(minWidthPct, currentWidth.naturalPct) + '%';
|
|
2597
|
+
}
|
|
2598
|
+
// Scale the natural percentage to fit in remaining space
|
|
2599
|
+
const scaledPct = (currentWidth.naturalPct / totalNaturalAboveMinimum) * remainingSpace;
|
|
2600
|
+
return Math.max(minWidthPct, scaledPct) + '%';
|
|
2571
2601
|
}
|
|
2572
2602
|
segmentColor(segment, fallback) {
|
|
2573
2603
|
return segment.colorClass || fallback;
|
|
@@ -2596,12 +2626,18 @@ class TestDistributionCardComponent {
|
|
|
2596
2626
|
}
|
|
2597
2627
|
return '#4F46E5'; // default
|
|
2598
2628
|
}
|
|
2629
|
+
/**
|
|
2630
|
+
* Filter segments to only show those with value > 0
|
|
2631
|
+
*/
|
|
2632
|
+
get visibleSegments() {
|
|
2633
|
+
return this.segments.filter(segment => segment.value > 0);
|
|
2634
|
+
}
|
|
2599
2635
|
}
|
|
2600
2636
|
TestDistributionCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestDistributionCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2601
|
-
TestDistributionCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TestDistributionCardComponent, selector: "cqa-test-distribution-card", inputs: { title: "title", segments: "segments", items: "items" }, ngImport: i0, template: "<div id=\"cqa-ui-root\">\n <div class=\"cqa-bg-white cqa-rounded-[8px] cqa-border cqa-border-solid cqa-border-border-default cqa-py-[14.5px] cqa-px-[17px] cqa-shadow-card\">\n <!-- Title -->\n <h3 class=\"cqa-text-[16px] cqa-leading-6 cqa-text-[#111827] cqa-mb-2\">{{ title }}</h3>\n\n <!-- Stacked segments pill -->\n <div class=\"cqa-w-full cqa-h-[24px] cqa-rounded-full cqa-bg-[#F3F4F6] cqa-overflow-hidden cqa-flex cqa-mb-2\">\n <ng-container *ngFor=\"let s of
|
|
2637
|
+
TestDistributionCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TestDistributionCardComponent, selector: "cqa-test-distribution-card", inputs: { title: "title", segments: "segments", items: "items" }, ngImport: i0, template: "<div id=\"cqa-ui-root\">\n <div class=\"cqa-bg-white cqa-rounded-[8px] cqa-border cqa-border-solid cqa-border-border-default cqa-py-[14.5px] cqa-px-[17px] cqa-shadow-card\">\n <!-- Title -->\n <h3 class=\"cqa-text-[16px] cqa-leading-6 cqa-text-[#111827] cqa-mb-2\">{{ title }}</h3>\n\n <!-- Stacked segments pill -->\n <div class=\"cqa-w-full cqa-h-[24px] cqa-rounded-full cqa-bg-[#F3F4F6] cqa-overflow-hidden cqa-flex cqa-mb-2\">\n <ng-container *ngFor=\"let s of visibleSegments; let i = index; let last = last\">\n <div\n class=\"cqa-h-full cqa-flex cqa-items-center cqa-justify-center cqa-text-white cqa-text-[12px] cqa-leading-[16px]\"\n [ngClass]=\"[\n segmentColor(s, i === 0 ? 'cqa-bg-[#4F46E5]' : i === segments.length - 1 ? 'cqa-bg-[#059669]' : 'cqa-bg-[#9333EA]'),\n i === 0 ? 'cqa-rounded-l-full' : '',\n last ? 'cqa-rounded-r-full' : ''\n ]\" [style.width]=\"segmentWidth(s)\">\n {{ s.label }}\n </div>\n </ng-container>\n </div>\n\n <!-- Items list -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-[6px]\">\n <div *ngFor=\"let it of items\" class=\"cqa-flex cqa-flex-col cqa-gap-[6px]\">\n <!-- Parent row -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-between\">\n <div class=\"cqa-flex cqa-items-center\">\n <span class=\"cqa-w-[4px] cqa-h-[12px] cqa-rounded-full\" [style.background-color]=\"getItemIconColor(it)\"></span>\n <div class=\"cqa-ml-[8px] cqa-mr-[6px]\">\n <mat-icon *ngIf=\"it.icon\" class=\"cqa-w-[14px] cqa-h-[14px] cqa-text-[14px] cqa-leading-[14px]\" [style.color]=\"getItemIconColor(it)\">\n {{ it.icon }}\n </mat-icon>\n </div>\n <span class=\"cqa-text-[12px] cqa-leading-[18px] cqa-text-dialog-muted\">{{ it.label }}</span>\n </div>\n <div class=\"cqa-text-[12px] cqa-leading-4 cqa-font-bold\">{{ it.value | number }}</div>\n </div>\n\n <!-- Children rows -->\n <div *ngIf=\"it.children?.length\" class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div *ngFor=\"let ch of it.children\"\n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-flex-1 cqa-rounded-[4px] cqa-bg-[#F9FAFB]\">\n <div class=\"cqa-flex cqa-items-center cqa-text-[10px] cqa-leading-[15px] cqa-text-[#4B5563]\">\n <ng-container *ngIf=\"getChildIcon(ch.label) as icon\">\n <ng-container [ngSwitch]=\"icon\">\n <svg *ngSwitchCase=\"'apple'\" class=\"cqa-w-[14px] cqa-h-[14px] cqa-ml-2 cqa-mr-1\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path fill=\"currentColor\" d=\"M16.365 1.43c0 1.182-.435 2.014-1.086 2.845-.823.99-1.982 1.707-3.078 1.6-.13-1.115.433-2.154 1.09-2.87.825-.925 2.196-1.59 3.07-1.575-.003.003.003 0 .003 0zm3.217 6.094c-.086-.067-2.684-1.598-5.468-.507-1.332.53-2.429.542-3.788.006-1.997-.8-3.635.156-3.735.208-.083.044-1.948 1.143-2.4 3.667-.43 2.375.6 4.92 1.4 6.52.723 1.421 1.704 3.126 3.067 3.07 1.35-.053 1.78-.883 3.323-.883 1.542 0 1.92.883 3.36.853 1.44-.026 2.352-1.443 3.073-2.855.674-1.324.963-2.603.983-2.668-.021-.009-1.88-.72-1.903-2.854-.021-1.786 1.463-2.64 1.534-2.682z\"/>\n </svg>\n <svg *ngSwitchCase=\"'android'\" class=\"cqa-w-[14px] cqa-h-[14px] cqa-ml-2 cqa-mr-1\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path fill=\"currentColor\" d=\"M17.6 9.48l1.42-2.46a.5.5 0 10-.86-.5l-1.44 2.52A11 11 0 0016 7h-8c-.24 0-.48.01-.72.04L5.84 6.5a.5.5 0 00-.86.5l1.42 2.46A7 7 0 004 15h.5a1.5 1.5 0 001.5-1.5V10h1v9.5A1.5 1.5 0 008.5 21h1a1.5 1.5 0 001.5-1.5V17h2v2.5A1.5 1.5 0 0014.5 21h1a1.5 1.5 0 001.5-1.5V10h1v3.5A1.5 1.5 0 0019.5 15H20a7 7 0 00-2.4-5.52zM9 5a.75.75 0 11-1.5 0A.75.75 0 019 5zm7.5 0a.75.75 0 11-1.5 0 .75.75 0 011.5 0z\"/>\n </svg>\n </ng-container>\n </ng-container>\n <div class=\"cqa-pr-1\" [ngClass]=\"getChildIcon(ch.label) ? 'cqa-pl-0' : 'cqa-pl-2'\">{{ ch.label }}</div>\n </div>\n <span class=\"cqa-font-bold cqa-text-[#111827] cqa-text-[10px] cqa-leading-[15px]\">{{ ch.value }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>", 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.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], pipes: { "number": i2.DecimalPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2602
2638
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestDistributionCardComponent, decorators: [{
|
|
2603
2639
|
type: Component,
|
|
2604
|
-
args: [{ selector: 'cqa-test-distribution-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div id=\"cqa-ui-root\">\n <div class=\"cqa-bg-white cqa-rounded-[8px] cqa-border cqa-border-solid cqa-border-border-default cqa-py-[14.5px] cqa-px-[17px] cqa-shadow-card\">\n <!-- Title -->\n <h3 class=\"cqa-text-[16px] cqa-leading-6 cqa-text-[#111827] cqa-mb-2\">{{ title }}</h3>\n\n <!-- Stacked segments pill -->\n <div class=\"cqa-w-full cqa-h-[24px] cqa-rounded-full cqa-bg-[#F3F4F6] cqa-overflow-hidden cqa-flex cqa-mb-2\">\n <ng-container *ngFor=\"let s of
|
|
2640
|
+
args: [{ selector: 'cqa-test-distribution-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div id=\"cqa-ui-root\">\n <div class=\"cqa-bg-white cqa-rounded-[8px] cqa-border cqa-border-solid cqa-border-border-default cqa-py-[14.5px] cqa-px-[17px] cqa-shadow-card\">\n <!-- Title -->\n <h3 class=\"cqa-text-[16px] cqa-leading-6 cqa-text-[#111827] cqa-mb-2\">{{ title }}</h3>\n\n <!-- Stacked segments pill -->\n <div class=\"cqa-w-full cqa-h-[24px] cqa-rounded-full cqa-bg-[#F3F4F6] cqa-overflow-hidden cqa-flex cqa-mb-2\">\n <ng-container *ngFor=\"let s of visibleSegments; let i = index; let last = last\">\n <div\n class=\"cqa-h-full cqa-flex cqa-items-center cqa-justify-center cqa-text-white cqa-text-[12px] cqa-leading-[16px]\"\n [ngClass]=\"[\n segmentColor(s, i === 0 ? 'cqa-bg-[#4F46E5]' : i === segments.length - 1 ? 'cqa-bg-[#059669]' : 'cqa-bg-[#9333EA]'),\n i === 0 ? 'cqa-rounded-l-full' : '',\n last ? 'cqa-rounded-r-full' : ''\n ]\" [style.width]=\"segmentWidth(s)\">\n {{ s.label }}\n </div>\n </ng-container>\n </div>\n\n <!-- Items list -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-[6px]\">\n <div *ngFor=\"let it of items\" class=\"cqa-flex cqa-flex-col cqa-gap-[6px]\">\n <!-- Parent row -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-between\">\n <div class=\"cqa-flex cqa-items-center\">\n <span class=\"cqa-w-[4px] cqa-h-[12px] cqa-rounded-full\" [style.background-color]=\"getItemIconColor(it)\"></span>\n <div class=\"cqa-ml-[8px] cqa-mr-[6px]\">\n <mat-icon *ngIf=\"it.icon\" class=\"cqa-w-[14px] cqa-h-[14px] cqa-text-[14px] cqa-leading-[14px]\" [style.color]=\"getItemIconColor(it)\">\n {{ it.icon }}\n </mat-icon>\n </div>\n <span class=\"cqa-text-[12px] cqa-leading-[18px] cqa-text-dialog-muted\">{{ it.label }}</span>\n </div>\n <div class=\"cqa-text-[12px] cqa-leading-4 cqa-font-bold\">{{ it.value | number }}</div>\n </div>\n\n <!-- Children rows -->\n <div *ngIf=\"it.children?.length\" class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div *ngFor=\"let ch of it.children\"\n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-flex-1 cqa-rounded-[4px] cqa-bg-[#F9FAFB]\">\n <div class=\"cqa-flex cqa-items-center cqa-text-[10px] cqa-leading-[15px] cqa-text-[#4B5563]\">\n <ng-container *ngIf=\"getChildIcon(ch.label) as icon\">\n <ng-container [ngSwitch]=\"icon\">\n <svg *ngSwitchCase=\"'apple'\" class=\"cqa-w-[14px] cqa-h-[14px] cqa-ml-2 cqa-mr-1\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path fill=\"currentColor\" d=\"M16.365 1.43c0 1.182-.435 2.014-1.086 2.845-.823.99-1.982 1.707-3.078 1.6-.13-1.115.433-2.154 1.09-2.87.825-.925 2.196-1.59 3.07-1.575-.003.003.003 0 .003 0zm3.217 6.094c-.086-.067-2.684-1.598-5.468-.507-1.332.53-2.429.542-3.788.006-1.997-.8-3.635.156-3.735.208-.083.044-1.948 1.143-2.4 3.667-.43 2.375.6 4.92 1.4 6.52.723 1.421 1.704 3.126 3.067 3.07 1.35-.053 1.78-.883 3.323-.883 1.542 0 1.92.883 3.36.853 1.44-.026 2.352-1.443 3.073-2.855.674-1.324.963-2.603.983-2.668-.021-.009-1.88-.72-1.903-2.854-.021-1.786 1.463-2.64 1.534-2.682z\"/>\n </svg>\n <svg *ngSwitchCase=\"'android'\" class=\"cqa-w-[14px] cqa-h-[14px] cqa-ml-2 cqa-mr-1\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path fill=\"currentColor\" d=\"M17.6 9.48l1.42-2.46a.5.5 0 10-.86-.5l-1.44 2.52A11 11 0 0016 7h-8c-.24 0-.48.01-.72.04L5.84 6.5a.5.5 0 00-.86.5l1.42 2.46A7 7 0 004 15h.5a1.5 1.5 0 001.5-1.5V10h1v9.5A1.5 1.5 0 008.5 21h1a1.5 1.5 0 001.5-1.5V17h2v2.5A1.5 1.5 0 0014.5 21h1a1.5 1.5 0 001.5-1.5V10h1v3.5A1.5 1.5 0 0019.5 15H20a7 7 0 00-2.4-5.52zM9 5a.75.75 0 11-1.5 0A.75.75 0 019 5zm7.5 0a.75.75 0 11-1.5 0 .75.75 0 011.5 0z\"/>\n </svg>\n </ng-container>\n </ng-container>\n <div class=\"cqa-pr-1\" [ngClass]=\"getChildIcon(ch.label) ? 'cqa-pl-0' : 'cqa-pl-2'\">{{ ch.label }}</div>\n </div>\n <span class=\"cqa-font-bold cqa-text-[#111827] cqa-text-[10px] cqa-leading-[15px]\">{{ ch.value }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [] }]
|
|
2605
2641
|
}], propDecorators: { title: [{
|
|
2606
2642
|
type: Input
|
|
2607
2643
|
}], segments: [{
|