@cqa-lib/cqa-ui 0.1.2 → 1.0.0
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/action-menu/action-menu.component.mjs +42 -0
- package/esm2020/lib/assets/images/image-assets.constants.mjs +28 -0
- package/esm2020/lib/badge/badge.component.mjs +141 -0
- package/esm2020/lib/button/button.component.mjs +42 -67
- package/esm2020/lib/column-visibility/column-visibility.component.mjs +69 -0
- package/esm2020/lib/dashboards/chart-card/chart-card.component.mjs +22 -0
- package/esm2020/lib/dashboards/coverage-module-card/coverage-module-card.component.mjs +104 -0
- package/esm2020/lib/dashboards/dashboard-header/dashboard-header.component.mjs +82 -0
- package/esm2020/lib/dashboards/failed-test-cases-card/failed-test-cases-card.component.mjs +60 -0
- package/esm2020/lib/dashboards/heat-error-map-cell/heat-error-map-cell.component.mjs +45 -0
- package/esm2020/lib/dashboards/insight-card/insight-card.component.mjs +201 -0
- package/esm2020/lib/dashboards/metrics-card/metrics-block.component.mjs +41 -0
- package/esm2020/lib/dashboards/metrics-card/metrics-card-item.interface.mjs +2 -0
- package/esm2020/lib/dashboards/metrics-card/metrics-card.component.mjs +62 -0
- package/esm2020/lib/dashboards/progress-text-card/progress-text-card.component.mjs +46 -0
- package/esm2020/lib/dashboards/test-distribution-card/test-distribution-card.component.mjs +35 -0
- package/esm2020/lib/dialog/dialog.component.mjs +4 -4
- package/esm2020/lib/dropdown-button/dropdown-button.component.mjs +189 -0
- package/esm2020/lib/dynamic-select/dynamic-select-field.component.mjs +160 -0
- package/esm2020/lib/empty-state/empty-state.component.mjs +37 -0
- package/esm2020/lib/filters/dynamic-filter/dynamic-filter.component.mjs +239 -0
- package/esm2020/lib/full-table-loader/full-table-loader.component.mjs +16 -0
- package/esm2020/lib/inline-sort/inline-sort.component.mjs +58 -0
- package/esm2020/lib/other-button/other-button.component.mjs +76 -0
- package/esm2020/lib/pagination/pagination.component.mjs +102 -0
- package/esm2020/lib/search-bar/search-bar.component.mjs +3 -3
- package/esm2020/lib/segment-control/segment-control.component.mjs +3 -3
- package/esm2020/lib/selected-filters/selected-filters.component.mjs +27 -0
- package/esm2020/lib/table/dynamic-table/dynamic-cell.directive.mjs +35 -0
- package/esm2020/lib/table/dynamic-table/dynamic-table.component.mjs +258 -0
- package/esm2020/lib/table-action-toolbar/table-action-toolbar.component.mjs +52 -0
- package/esm2020/lib/table-data-loader/table-data-loader.component.mjs +19 -0
- package/esm2020/lib/templates/table-template.component.mjs +365 -0
- package/esm2020/lib/ui-kit.module.mjs +196 -17
- package/esm2020/lib/utils/metadata-colors.util.mjs +100 -0
- package/esm2020/lib/utils/tw-overlay-container.mjs +22 -0
- package/esm2020/public-api.mjs +29 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +2899 -133
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +2867 -133
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/action-menu/action-menu.component.d.ts +17 -0
- package/lib/assets/images/image-assets.constants.d.ts +20 -0
- package/lib/badge/badge.component.d.ts +25 -0
- package/lib/button/button.component.d.ts +6 -5
- package/lib/column-visibility/column-visibility.component.d.ts +33 -0
- package/lib/dashboards/chart-card/chart-card.component.d.ts +8 -0
- package/lib/dashboards/coverage-module-card/coverage-module-card.component.d.ts +44 -0
- package/lib/dashboards/dashboard-header/dashboard-header.component.d.ts +30 -0
- package/lib/dashboards/failed-test-cases-card/failed-test-cases-card.component.d.ts +28 -0
- package/lib/dashboards/heat-error-map-cell/heat-error-map-cell.component.d.ts +14 -0
- package/lib/dashboards/insight-card/insight-card.component.d.ts +73 -0
- package/lib/dashboards/metrics-card/metrics-block.component.d.ts +12 -0
- package/lib/dashboards/metrics-card/metrics-card-item.interface.d.ts +12 -0
- package/lib/dashboards/metrics-card/metrics-card.component.d.ts +17 -0
- package/lib/dashboards/progress-text-card/progress-text-card.component.d.ts +13 -0
- package/lib/dashboards/test-distribution-card/test-distribution-card.component.d.ts +29 -0
- package/lib/dropdown-button/dropdown-button.component.d.ts +32 -0
- package/lib/dynamic-select/dynamic-select-field.component.d.ts +43 -0
- package/lib/empty-state/empty-state.component.d.ts +20 -0
- package/lib/filters/dynamic-filter/dynamic-filter.component.d.ts +56 -0
- package/lib/full-table-loader/full-table-loader.component.d.ts +6 -0
- package/lib/inline-sort/inline-sort.component.d.ts +12 -0
- package/lib/other-button/other-button.component.d.ts +37 -0
- package/lib/pagination/pagination.component.d.ts +37 -0
- package/lib/selected-filters/selected-filters.component.d.ts +17 -0
- package/lib/table/dynamic-table/dynamic-cell.directive.d.ts +16 -0
- package/lib/table/dynamic-table/dynamic-table.component.d.ts +72 -0
- package/lib/table-action-toolbar/table-action-toolbar.component.d.ts +34 -0
- package/lib/table-data-loader/table-data-loader.component.d.ts +7 -0
- package/lib/templates/table-template.component.d.ts +90 -0
- package/lib/ui-kit.module.d.ts +43 -6
- package/lib/utils/metadata-colors.util.d.ts +50 -0
- package/lib/utils/tw-overlay-container.d.ts +12 -0
- package/package.json +1 -1
- package/public-api.d.ts +28 -0
- package/src/lib/assets/images/.gitkeep +0 -0
- package/src/lib/assets/images/DashboardIcon.png +0 -0
- package/src/lib/assets/images/FilesIcon.png +0 -0
- package/src/lib/assets/images/README.md +66 -0
- package/src/lib/assets/images/ReportsIcon.png +0 -0
- package/src/lib/assets/images/SearchIcon.png +0 -0
- package/src/lib/assets/images/StepsIcon.png +0 -0
- package/src/lib/assets/images/TestCaseIcon.png +0 -0
- package/src/lib/assets/images/analytics-chart-icon.svg +11 -0
- package/src/lib/assets/images/checklist-add-icon.svg +10 -0
- package/src/lib/assets/images/document-gear-icon.svg +9 -0
- package/src/lib/assets/images/empty-state-default-icon.svg +8 -0
- package/src/lib/assets/images/image-assets.constants.ts +38 -0
- package/src/lib/assets/images/search-debug-icon.svg +8 -0
- package/src/lib/assets/images/test-case-icon.svg +9 -0
- package/src/lib/assets/images/upload-folder-icon.svg +7 -0
- package/src/lib/utils/metadata-colors.constants.js +33 -0
- package/storybook-static/assets/images/README.md +66 -0
- package/styles.css +1 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
export class ChartCardComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.title = 'Chart';
|
|
7
|
+
this.cardClass = '';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
ChartCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ChartCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11
|
+
ChartCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ChartCardComponent, selector: "cqa-chart-card", inputs: { title: "title", subtitle: "subtitle", cardClass: "cardClass" }, ngImport: i0, template: "<div id=\"cqa-ui-root\">\n <div\n class=\"cqa-w-full cqa-box-border cqa-flex cqa-flex-col cqa-bg-white cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-rounded-[10px]\"\n [ngClass]=\"cardClass\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-px-4 sm:cqa-px-6 cqa-py-3 cqa-border-b cqa-border-[#E5E7EB]\">\n <div class=\"cqa-flex cqa-flex-col\">\n <div class=\"cqa-text-[14px] cqa-leading-5 cqa-font-semibold cqa-text-[#101828]\">{{ title }}</div>\n <div *ngIf=\"subtitle\" class=\"cqa-text-[12px] cqa-leading-4 cqa-text-[#6A7282] cqa-mt-0.5\">{{ subtitle }}</div>\n </div>\n <!-- Right-side actions slot -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <ng-content select=\"[chart-actions]\"></ng-content>\n </div>\n </div>\n\n <!-- Chart/content area -->\n <div class=\"cqa-p-3 sm:cqa-p-4\">\n <div class=\"cqa-w-full cqa-min-h-[220px]\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</div>", directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ChartCardComponent, decorators: [{
|
|
13
|
+
type: Component,
|
|
14
|
+
args: [{ selector: 'cqa-chart-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div id=\"cqa-ui-root\">\n <div\n class=\"cqa-w-full cqa-box-border cqa-flex cqa-flex-col cqa-bg-white cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-rounded-[10px]\"\n [ngClass]=\"cardClass\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-px-4 sm:cqa-px-6 cqa-py-3 cqa-border-b cqa-border-[#E5E7EB]\">\n <div class=\"cqa-flex cqa-flex-col\">\n <div class=\"cqa-text-[14px] cqa-leading-5 cqa-font-semibold cqa-text-[#101828]\">{{ title }}</div>\n <div *ngIf=\"subtitle\" class=\"cqa-text-[12px] cqa-leading-4 cqa-text-[#6A7282] cqa-mt-0.5\">{{ subtitle }}</div>\n </div>\n <!-- Right-side actions slot -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <ng-content select=\"[chart-actions]\"></ng-content>\n </div>\n </div>\n\n <!-- Chart/content area -->\n <div class=\"cqa-p-3 sm:cqa-p-4\">\n <div class=\"cqa-w-full cqa-min-h-[220px]\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</div>", styles: [] }]
|
|
15
|
+
}], propDecorators: { title: [{
|
|
16
|
+
type: Input
|
|
17
|
+
}], subtitle: [{
|
|
18
|
+
type: Input
|
|
19
|
+
}], cardClass: [{
|
|
20
|
+
type: Input
|
|
21
|
+
}] } });
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rhc2hib2FyZHMvY2hhcnQtY2FyZC9jaGFydC1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGFzaGJvYXJkcy9jaGFydC1jYXJkL2NoYXJ0LWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQVExRSxNQUFNLE9BQU8sa0JBQWtCO0lBTi9CO1FBT1csVUFBSyxHQUFXLE9BQU8sQ0FBQztRQUV4QixjQUFTLEdBQVcsRUFBRSxDQUFDO0tBQ2pDOzsrR0FKWSxrQkFBa0I7bUdBQWxCLGtCQUFrQixnSUNSL0IsNGhDQXdCTTsyRkRoQk8sa0JBQWtCO2tCQU45QixTQUFTOytCQUNFLGdCQUFnQixtQkFHVCx1QkFBdUIsQ0FBQyxNQUFNOzhCQUd0QyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWNoYXJ0LWNhcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hhcnQtY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDaGFydENhcmRDb21wb25lbnQge1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nID0gJ0NoYXJ0JztcbiAgQElucHV0KCkgc3VidGl0bGU/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNhcmRDbGFzczogc3RyaW5nID0gJyc7XG59XG5cblxuIiwiPGRpdiBpZD1cImNxYS11aS1yb290XCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNxYS13LWZ1bGwgY3FhLWJveC1ib3JkZXIgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1iZy13aGl0ZSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0U1RTdFQl0gY3FhLXJvdW5kZWQtWzEwcHhdXCJcbiAgICBbbmdDbGFzc109XCJjYXJkQ2xhc3NcIj5cbiAgICA8IS0tIEhlYWRlciAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtcHgtNCBzbTpjcWEtcHgtNiBjcWEtcHktMyBjcWEtYm9yZGVyLWIgY3FhLWJvcmRlci1bI0U1RTdFQl1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy01IGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMTAxODI4XVwiPnt7IHRpdGxlIH19PC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzdWJ0aXRsZVwiIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLTQgY3FhLXRleHQtWyM2QTcyODJdIGNxYS1tdC0wLjVcIj57eyBzdWJ0aXRsZSB9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIFJpZ2h0LXNpZGUgYWN0aW9ucyBzbG90IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltjaGFydC1hY3Rpb25zXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDaGFydC9jb250ZW50IGFyZWEgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1wLTMgc206Y3FhLXAtNFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS13LWZ1bGwgY3FhLW1pbi1oLVsyMjBweF1cIj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
export class CoverageModuleCardComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
/** Card title, e.g. "AI Ask" */
|
|
7
|
+
this.title = 'Coverage';
|
|
8
|
+
/** Number of issues to display next to title */
|
|
9
|
+
this.issues = 0;
|
|
10
|
+
/** Optional "View" action visibility */
|
|
11
|
+
this.showViewAction = true;
|
|
12
|
+
/** Middle metrics: left group */
|
|
13
|
+
this.positiveCount = 0;
|
|
14
|
+
this.negativeCount = 0;
|
|
15
|
+
this.edgeCaseCount = 0;
|
|
16
|
+
this.positiveLabel = 'Positive';
|
|
17
|
+
this.negativeLabel = 'Negative';
|
|
18
|
+
this.edgeCaseLabel = 'Edge Case';
|
|
19
|
+
/** Middle metrics: right group */
|
|
20
|
+
this.aiCount = 0;
|
|
21
|
+
this.humanCount = 0;
|
|
22
|
+
this.aiLabel = 'AI';
|
|
23
|
+
this.humanLabel = 'Human';
|
|
24
|
+
/** Rows of coverage with percentage bars */
|
|
25
|
+
this.items = [];
|
|
26
|
+
/** CTA button label */
|
|
27
|
+
this.ctaText = 'AI Coverage';
|
|
28
|
+
/** Disable CTA */
|
|
29
|
+
this.ctaDisabled = false;
|
|
30
|
+
this.view = new EventEmitter();
|
|
31
|
+
this.ctaClicked = new EventEmitter();
|
|
32
|
+
}
|
|
33
|
+
statusColorClass(item) {
|
|
34
|
+
const status = item.status ?? 'neutral';
|
|
35
|
+
switch (status) {
|
|
36
|
+
case 'success':
|
|
37
|
+
return 'cqa-bg-[#10B981]'; // green
|
|
38
|
+
case 'error':
|
|
39
|
+
return 'cqa-bg-[#EF4444]'; // red
|
|
40
|
+
default:
|
|
41
|
+
return 'cqa-bg-[#3B82F6]'; // blue
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
textColorClass(item) {
|
|
45
|
+
const status = item.status ?? 'neutral';
|
|
46
|
+
switch (status) {
|
|
47
|
+
case 'success':
|
|
48
|
+
return 'cqa-text-[#10B981]';
|
|
49
|
+
case 'error':
|
|
50
|
+
return 'cqa-text-[#EF4444]';
|
|
51
|
+
default:
|
|
52
|
+
return 'cqa-text-[#374151]';
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
formatPercent(pct) {
|
|
56
|
+
if (pct === undefined || pct === null || Number.isNaN(pct))
|
|
57
|
+
return '0%';
|
|
58
|
+
const clamped = Math.max(0, Math.min(100, pct));
|
|
59
|
+
return `${clamped}%`;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
CoverageModuleCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CoverageModuleCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
63
|
+
CoverageModuleCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: CoverageModuleCardComponent, selector: "cqa-coverage-module-card", inputs: { title: "title", issues: "issues", showViewAction: "showViewAction", positiveCount: "positiveCount", negativeCount: "negativeCount", edgeCaseCount: "edgeCaseCount", positiveLabel: "positiveLabel", negativeLabel: "negativeLabel", edgeCaseLabel: "edgeCaseLabel", aiCount: "aiCount", humanCount: "humanCount", aiLabel: "aiLabel", humanLabel: "humanLabel", items: "items", ctaText: "ctaText", ctaDisabled: "ctaDisabled" }, outputs: { view: "view", ctaClicked: "ctaClicked" }, ngImport: i0, template: "<div id=\"cqa-ui-root\">\n <div class=\"cqa-w-full cqa-bg-white cqa-rounded-[8px] cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-py-[10px] cqa-px-[17px] cqa-shadow-card\">\n <!-- Header -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-mb-3\">\n <h3 class=\"cqa-text-[18px] cqa-leading-[28px] cqa-font-bold cqa-text-dialog\">{{ title }}</h3>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <span\n class=\"cqa-px-[10px] cqa-py-[4px] cqa-text-[12px] cqa-leading-[16px] cqa-flex cqa-items-center cqa-gap-1 cqa-rounded-full cqa-bg-warning-light cqa-text-danger\">\n {{ issues }} {{ issues === 1 ? 'issue' : 'issues' }}\n </span>\n <button type=\"button\"\n class=\"cqa-text-[14px] cqa-leading-[20px] cqa-text-primary cqa-flex cqa-items-center cqa-gap-1\"\n *ngIf=\"showViewAction\" (click)=\"view.emit()\">\n View\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 12L10 8L6 4\" stroke=\"#4F46E5\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </button>\n </div>\n </div>\n\n <!-- Middle metrics row -->\n <div class=\"cqa-flex cqa-items-stretch cqa-justify-between cqa-gap-6 cqa-mb-4\">\n <!-- Left: Positive / Negative / Edge Case -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-6\">\n <div class=\"cqa-flex cqa-flex-col cqa-items-start\">\n <span class=\"cqa-text-[18px] cqa-leading-6 cqa-font-semibold cqa-text-[#10B981]\">{{ positiveCount }}</span>\n <span class=\"cqa-text-[12px] cqa-leading-4 cqa-text-danger\">{{ positiveLabel }}</span>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-items-start\">\n <span class=\"cqa-text-[18px] cqa-leading-6 cqa-font-semibold cqa-text-[#EF4444]\">{{ negativeCount }}</span>\n <span class=\"cqa-text-[12px] cqa-leading-4 cqa-text-danger\">{{ negativeLabel }}</span>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-items-start\">\n <span class=\"cqa-text-[18px] cqa-leading-6 cqa-font-semibold cqa-text-[#F59E0B]\">{{ edgeCaseCount }}</span>\n <span class=\"cqa-text-[12px] cqa-leading-4 cqa-text-danger\">{{ edgeCaseLabel }}</span>\n </div>\n </div>\n\n <!-- Divider -->\n <div class=\"cqa-w-px cqa-bg-[#E5E7EB]\"></div>\n\n <!-- Right: AI / Human -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-6\">\n <div class=\"cqa-flex cqa-flex-col cqa-items-start\">\n <span class=\"cqa-text-[18px] cqa-leading-6 cqa-font-semibold cqa-text-dialog\">{{ aiCount }}</span>\n <span class=\"cqa-text-[12px] cqa-leading-4 cqa-text-danger\">{{ aiLabel }}</span>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-items-start\">\n <span class=\"cqa-text-[18px] cqa-leading-6 cqa-font-semibold cqa-text-dialog\">{{ humanCount }}</span>\n <span class=\"cqa-text-[12px] cqa-leading-4 cqa-text-danger\">{{ humanLabel }}</span>\n </div>\n </div>\n </div>\n\n <!-- Body -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n <div *ngFor=\"let it of items\" class=\"cqa-flex cqa-items-center cqa-gap-3\">\n <span class=\"cqa-min-w-[120px] cqa-text-[12px] cqa-leading-4 cqa-text-[#374151]\">{{ it.label }}</span>\n <div class=\"cqa-flex-1 cqa-h-[8px] cqa-rounded-full cqa-bg-[#F3F4F6] cqa-overflow-hidden\">\n <div class=\"cqa-h-full cqa-rounded-full\" [ngClass]=\"statusColorClass(it)\"\n [style.width]=\"formatPercent(it.percent)\"></div>\n </div>\n <span class=\"cqa-w-[40px] cqa-text-right cqa-text-[12px] cqa-leading-4\" [ngClass]=\"textColorClass(it)\">{{\n formatPercent(it.percent) }}</span>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"cqa-mt-4\">\n <button type=\"button\"\n class=\"cqa-w-full cqa-h-[40px] cqa-rounded-[8px] cqa-bg-[#4338CA] cqa-text-white cqa-text-[14px] cqa-leading-[20px] hover:cqa-bg-[#3730A3] disabled:cqa-opacity-50 disabled:cqa-cursor-not-allowed\"\n [disabled]=\"ctaDisabled\" (click)=\"ctaClicked.emit()\">\n \u2728 {{ ctaText }}\n </button>\n </div>\n </div>\n</div>", directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
64
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CoverageModuleCardComponent, decorators: [{
|
|
65
|
+
type: Component,
|
|
66
|
+
args: [{ selector: 'cqa-coverage-module-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div id=\"cqa-ui-root\">\n <div class=\"cqa-w-full cqa-bg-white cqa-rounded-[8px] cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-py-[10px] cqa-px-[17px] cqa-shadow-card\">\n <!-- Header -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-mb-3\">\n <h3 class=\"cqa-text-[18px] cqa-leading-[28px] cqa-font-bold cqa-text-dialog\">{{ title }}</h3>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <span\n class=\"cqa-px-[10px] cqa-py-[4px] cqa-text-[12px] cqa-leading-[16px] cqa-flex cqa-items-center cqa-gap-1 cqa-rounded-full cqa-bg-warning-light cqa-text-danger\">\n {{ issues }} {{ issues === 1 ? 'issue' : 'issues' }}\n </span>\n <button type=\"button\"\n class=\"cqa-text-[14px] cqa-leading-[20px] cqa-text-primary cqa-flex cqa-items-center cqa-gap-1\"\n *ngIf=\"showViewAction\" (click)=\"view.emit()\">\n View\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 12L10 8L6 4\" stroke=\"#4F46E5\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </button>\n </div>\n </div>\n\n <!-- Middle metrics row -->\n <div class=\"cqa-flex cqa-items-stretch cqa-justify-between cqa-gap-6 cqa-mb-4\">\n <!-- Left: Positive / Negative / Edge Case -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-6\">\n <div class=\"cqa-flex cqa-flex-col cqa-items-start\">\n <span class=\"cqa-text-[18px] cqa-leading-6 cqa-font-semibold cqa-text-[#10B981]\">{{ positiveCount }}</span>\n <span class=\"cqa-text-[12px] cqa-leading-4 cqa-text-danger\">{{ positiveLabel }}</span>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-items-start\">\n <span class=\"cqa-text-[18px] cqa-leading-6 cqa-font-semibold cqa-text-[#EF4444]\">{{ negativeCount }}</span>\n <span class=\"cqa-text-[12px] cqa-leading-4 cqa-text-danger\">{{ negativeLabel }}</span>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-items-start\">\n <span class=\"cqa-text-[18px] cqa-leading-6 cqa-font-semibold cqa-text-[#F59E0B]\">{{ edgeCaseCount }}</span>\n <span class=\"cqa-text-[12px] cqa-leading-4 cqa-text-danger\">{{ edgeCaseLabel }}</span>\n </div>\n </div>\n\n <!-- Divider -->\n <div class=\"cqa-w-px cqa-bg-[#E5E7EB]\"></div>\n\n <!-- Right: AI / Human -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-6\">\n <div class=\"cqa-flex cqa-flex-col cqa-items-start\">\n <span class=\"cqa-text-[18px] cqa-leading-6 cqa-font-semibold cqa-text-dialog\">{{ aiCount }}</span>\n <span class=\"cqa-text-[12px] cqa-leading-4 cqa-text-danger\">{{ aiLabel }}</span>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-items-start\">\n <span class=\"cqa-text-[18px] cqa-leading-6 cqa-font-semibold cqa-text-dialog\">{{ humanCount }}</span>\n <span class=\"cqa-text-[12px] cqa-leading-4 cqa-text-danger\">{{ humanLabel }}</span>\n </div>\n </div>\n </div>\n\n <!-- Body -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n <div *ngFor=\"let it of items\" class=\"cqa-flex cqa-items-center cqa-gap-3\">\n <span class=\"cqa-min-w-[120px] cqa-text-[12px] cqa-leading-4 cqa-text-[#374151]\">{{ it.label }}</span>\n <div class=\"cqa-flex-1 cqa-h-[8px] cqa-rounded-full cqa-bg-[#F3F4F6] cqa-overflow-hidden\">\n <div class=\"cqa-h-full cqa-rounded-full\" [ngClass]=\"statusColorClass(it)\"\n [style.width]=\"formatPercent(it.percent)\"></div>\n </div>\n <span class=\"cqa-w-[40px] cqa-text-right cqa-text-[12px] cqa-leading-4\" [ngClass]=\"textColorClass(it)\">{{\n formatPercent(it.percent) }}</span>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"cqa-mt-4\">\n <button type=\"button\"\n class=\"cqa-w-full cqa-h-[40px] cqa-rounded-[8px] cqa-bg-[#4338CA] cqa-text-white cqa-text-[14px] cqa-leading-[20px] hover:cqa-bg-[#3730A3] disabled:cqa-opacity-50 disabled:cqa-cursor-not-allowed\"\n [disabled]=\"ctaDisabled\" (click)=\"ctaClicked.emit()\">\n \u2728 {{ ctaText }}\n </button>\n </div>\n </div>\n</div>", styles: [] }]
|
|
67
|
+
}], propDecorators: { title: [{
|
|
68
|
+
type: Input
|
|
69
|
+
}], issues: [{
|
|
70
|
+
type: Input
|
|
71
|
+
}], showViewAction: [{
|
|
72
|
+
type: Input
|
|
73
|
+
}], positiveCount: [{
|
|
74
|
+
type: Input
|
|
75
|
+
}], negativeCount: [{
|
|
76
|
+
type: Input
|
|
77
|
+
}], edgeCaseCount: [{
|
|
78
|
+
type: Input
|
|
79
|
+
}], positiveLabel: [{
|
|
80
|
+
type: Input
|
|
81
|
+
}], negativeLabel: [{
|
|
82
|
+
type: Input
|
|
83
|
+
}], edgeCaseLabel: [{
|
|
84
|
+
type: Input
|
|
85
|
+
}], aiCount: [{
|
|
86
|
+
type: Input
|
|
87
|
+
}], humanCount: [{
|
|
88
|
+
type: Input
|
|
89
|
+
}], aiLabel: [{
|
|
90
|
+
type: Input
|
|
91
|
+
}], humanLabel: [{
|
|
92
|
+
type: Input
|
|
93
|
+
}], items: [{
|
|
94
|
+
type: Input
|
|
95
|
+
}], ctaText: [{
|
|
96
|
+
type: Input
|
|
97
|
+
}], ctaDisabled: [{
|
|
98
|
+
type: Input
|
|
99
|
+
}], view: [{
|
|
100
|
+
type: Output
|
|
101
|
+
}], ctaClicked: [{
|
|
102
|
+
type: Output
|
|
103
|
+
}] } });
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY292ZXJhZ2UtbW9kdWxlLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9kYXNoYm9hcmRzL2NvdmVyYWdlLW1vZHVsZS1jYXJkL2NvdmVyYWdlLW1vZHVsZS1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGFzaGJvYXJkcy9jb3ZlcmFnZS1tb2R1bGUtY2FyZC9jb3ZlcmFnZS1tb2R1bGUtY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFtQmhHLE1BQU0sT0FBTywyQkFBMkI7SUFOeEM7UUFPRSxnQ0FBZ0M7UUFDdkIsVUFBSyxHQUFXLFVBQVUsQ0FBQztRQUNwQyxnREFBZ0Q7UUFDdkMsV0FBTSxHQUFXLENBQUMsQ0FBQztRQUM1Qix3Q0FBd0M7UUFDL0IsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFDeEMsaUNBQWlDO1FBQ3hCLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBQzFCLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBQzFCLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBQzFCLGtCQUFhLEdBQVcsVUFBVSxDQUFDO1FBQ25DLGtCQUFhLEdBQVcsVUFBVSxDQUFDO1FBQ25DLGtCQUFhLEdBQVcsV0FBVyxDQUFDO1FBQzdDLGtDQUFrQztRQUN6QixZQUFPLEdBQVcsQ0FBQyxDQUFDO1FBQ3BCLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFDdkIsWUFBTyxHQUFXLElBQUksQ0FBQztRQUN2QixlQUFVLEdBQVcsT0FBTyxDQUFDO1FBQ3RDLDRDQUE0QztRQUNuQyxVQUFLLEdBQW1CLEVBQUUsQ0FBQztRQUNwQyx1QkFBdUI7UUFDZCxZQUFPLEdBQVcsYUFBYSxDQUFDO1FBQ3pDLGtCQUFrQjtRQUNULGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRTVCLFNBQUksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ2hDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0tBK0JqRDtJQTdCQyxnQkFBZ0IsQ0FBQyxJQUFrQjtRQUNqQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQztRQUN4QyxRQUFRLE1BQU0sRUFBRTtZQUNkLEtBQUssU0FBUztnQkFDWixPQUFPLGtCQUFrQixDQUFDLENBQUMsUUFBUTtZQUNyQyxLQUFLLE9BQU87Z0JBQ1YsT0FBTyxrQkFBa0IsQ0FBQyxDQUFDLE1BQU07WUFDbkM7Z0JBQ0UsT0FBTyxrQkFBa0IsQ0FBQyxDQUFDLE9BQU87U0FDckM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQWtCO1FBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDO1FBQ3hDLFFBQVEsTUFBTSxFQUFFO1lBQ2QsS0FBSyxTQUFTO2dCQUNaLE9BQU8sb0JBQW9CLENBQUM7WUFDOUIsS0FBSyxPQUFPO2dCQUNWLE9BQU8sb0JBQW9CLENBQUM7WUFDOUI7Z0JBQ0UsT0FBTyxvQkFBb0IsQ0FBQztTQUMvQjtJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsR0FBVztRQUN2QixJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3hFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEQsT0FBTyxHQUFHLE9BQU8sR0FBRyxDQUFDO0lBQ3ZCLENBQUM7O3dIQXpEVSwyQkFBMkI7NEdBQTNCLDJCQUEyQixpaUJDbkJ4Qyw2dElBMkVNOzJGRHhETywyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0UsMEJBQTBCLG1CQUduQix1QkFBdUIsQ0FBQyxNQUFNOzhCQUl0QyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCB0eXBlIENvdmVyYWdlU3RhdHVzID0gJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyB8ICduZXV0cmFsJztcblxuZXhwb3J0IGludGVyZmFjZSBDb3ZlcmFnZUl0ZW0ge1xuICAvKiogUm93IGxhYmVsLCBlLmcuIFwiSW5wdXQgVmFsaWRhdGlvblwiICovXG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8qKiBWYWx1ZSBpbiBwZXJjZW50ICgwLTEwMCkgKi9cbiAgcGVyY2VudDogbnVtYmVyO1xuICAvKiogVmlzdWFsIHN0YXR1cyB0byBjb2xvcml6ZSB0aGUgYmFyL3RleHQgKi9cbiAgc3RhdHVzPzogQ292ZXJhZ2VTdGF0dXM7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1jb3ZlcmFnZS1tb2R1bGUtY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3ZlcmFnZS1tb2R1bGUtY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDb3ZlcmFnZU1vZHVsZUNhcmRDb21wb25lbnQge1xuICAvKiogQ2FyZCB0aXRsZSwgZS5nLiBcIkFJIEFza1wiICovXG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSAnQ292ZXJhZ2UnO1xuICAvKiogTnVtYmVyIG9mIGlzc3VlcyB0byBkaXNwbGF5IG5leHQgdG8gdGl0bGUgKi9cbiAgQElucHV0KCkgaXNzdWVzOiBudW1iZXIgPSAwO1xuICAvKiogT3B0aW9uYWwgXCJWaWV3XCIgYWN0aW9uIHZpc2liaWxpdHkgKi9cbiAgQElucHV0KCkgc2hvd1ZpZXdBY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xuICAvKiogTWlkZGxlIG1ldHJpY3M6IGxlZnQgZ3JvdXAgKi9cbiAgQElucHV0KCkgcG9zaXRpdmVDb3VudDogbnVtYmVyID0gMDtcbiAgQElucHV0KCkgbmVnYXRpdmVDb3VudDogbnVtYmVyID0gMDtcbiAgQElucHV0KCkgZWRnZUNhc2VDb3VudDogbnVtYmVyID0gMDtcbiAgQElucHV0KCkgcG9zaXRpdmVMYWJlbDogc3RyaW5nID0gJ1Bvc2l0aXZlJztcbiAgQElucHV0KCkgbmVnYXRpdmVMYWJlbDogc3RyaW5nID0gJ05lZ2F0aXZlJztcbiAgQElucHV0KCkgZWRnZUNhc2VMYWJlbDogc3RyaW5nID0gJ0VkZ2UgQ2FzZSc7XG4gIC8qKiBNaWRkbGUgbWV0cmljczogcmlnaHQgZ3JvdXAgKi9cbiAgQElucHV0KCkgYWlDb3VudDogbnVtYmVyID0gMDtcbiAgQElucHV0KCkgaHVtYW5Db3VudDogbnVtYmVyID0gMDtcbiAgQElucHV0KCkgYWlMYWJlbDogc3RyaW5nID0gJ0FJJztcbiAgQElucHV0KCkgaHVtYW5MYWJlbDogc3RyaW5nID0gJ0h1bWFuJztcbiAgLyoqIFJvd3Mgb2YgY292ZXJhZ2Ugd2l0aCBwZXJjZW50YWdlIGJhcnMgKi9cbiAgQElucHV0KCkgaXRlbXM6IENvdmVyYWdlSXRlbVtdID0gW107XG4gIC8qKiBDVEEgYnV0dG9uIGxhYmVsICovXG4gIEBJbnB1dCgpIGN0YVRleHQ6IHN0cmluZyA9ICdBSSBDb3ZlcmFnZSc7XG4gIC8qKiBEaXNhYmxlIENUQSAqL1xuICBASW5wdXQoKSBjdGFEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSB2aWV3ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgY3RhQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBzdGF0dXNDb2xvckNsYXNzKGl0ZW06IENvdmVyYWdlSXRlbSk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RhdHVzID0gaXRlbS5zdGF0dXMgPz8gJ25ldXRyYWwnO1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgcmV0dXJuICdjcWEtYmctWyMxMEI5ODFdJzsgLy8gZ3JlZW5cbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgcmV0dXJuICdjcWEtYmctWyNFRjQ0NDRdJzsgLy8gcmVkXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2NxYS1iZy1bIzNCODJGNl0nOyAvLyBibHVlXG4gICAgfVxuICB9XG5cbiAgdGV4dENvbG9yQ2xhc3MoaXRlbTogQ292ZXJhZ2VJdGVtKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGF0dXMgPSBpdGVtLnN0YXR1cyA/PyAnbmV1dHJhbCc7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ3N1Y2Nlc3MnOlxuICAgICAgICByZXR1cm4gJ2NxYS10ZXh0LVsjMTBCOTgxXSc7XG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHJldHVybiAnY3FhLXRleHQtWyNFRjQ0NDRdJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnY3FhLXRleHQtWyMzNzQxNTFdJztcbiAgICB9XG4gIH1cblxuICBmb3JtYXRQZXJjZW50KHBjdDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAocGN0ID09PSB1bmRlZmluZWQgfHwgcGN0ID09PSBudWxsIHx8IE51bWJlci5pc05hTihwY3QpKSByZXR1cm4gJzAlJztcbiAgICBjb25zdCBjbGFtcGVkID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBwY3QpKTtcbiAgICByZXR1cm4gYCR7Y2xhbXBlZH0lYDtcbiAgfVxufVxuXG5cbiIsIjxkaXYgaWQ9XCJjcWEtdWktcm9vdFwiPlxuICA8ZGl2IGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtYmctd2hpdGUgY3FhLXJvdW5kZWQtWzhweF0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFNUU3RUJdIGNxYS1weS1bMTBweF0gY3FhLXB4LVsxN3B4XSBjcWEtc2hhZG93LWNhcmRcIj5cbiAgICA8IS0tIEhlYWRlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLXN0YXJ0IGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLW1iLTNcIj5cbiAgICAgIDxoMyBjbGFzcz1cImNxYS10ZXh0LVsxOHB4XSBjcWEtbGVhZGluZy1bMjhweF0gY3FhLWZvbnQtYm9sZCBjcWEtdGV4dC1kaWFsb2dcIj57eyB0aXRsZSB9fTwvaDM+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cImNxYS1weC1bMTBweF0gY3FhLXB5LVs0cHhdIGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMTZweF0gY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEgY3FhLXJvdW5kZWQtZnVsbCBjcWEtYmctd2FybmluZy1saWdodCBjcWEtdGV4dC1kYW5nZXJcIj5cbiAgICAgICAgICB7eyBpc3N1ZXMgfX0ge3sgaXNzdWVzID09PSAxID8gJ2lzc3VlJyA6ICdpc3N1ZXMnIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMjBweF0gY3FhLXRleHQtcHJpbWFyeSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMVwiXG4gICAgICAgICAgKm5nSWY9XCJzaG93Vmlld0FjdGlvblwiIChjbGljayk9XCJ2aWV3LmVtaXQoKVwiPlxuICAgICAgICAgIFZpZXdcbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTJMMTAgOEw2IDRcIiBzdHJva2U9XCIjNEY0NkU1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gTWlkZGxlIG1ldHJpY3Mgcm93IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtc3RyZXRjaCBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtNiBjcWEtbWItNFwiPlxuICAgICAgPCEtLSBMZWZ0OiBQb3NpdGl2ZSAvIE5lZ2F0aXZlIC8gRWRnZSBDYXNlIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC02XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWl0ZW1zLXN0YXJ0XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMThweF0gY3FhLWxlYWRpbmctNiBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzEwQjk4MV1cIj57eyBwb3NpdGl2ZUNvdW50IH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLTQgY3FhLXRleHQtZGFuZ2VyXCI+e3sgcG9zaXRpdmVMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWl0ZW1zLXN0YXJ0XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMThweF0gY3FhLWxlYWRpbmctNiBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bI0VGNDQ0NF1cIj57eyBuZWdhdGl2ZUNvdW50IH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLTQgY3FhLXRleHQtZGFuZ2VyXCI+e3sgbmVnYXRpdmVMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWl0ZW1zLXN0YXJ0XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMThweF0gY3FhLWxlYWRpbmctNiBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bI0Y1OUUwQl1cIj57eyBlZGdlQ2FzZUNvdW50IH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLTQgY3FhLXRleHQtZGFuZ2VyXCI+e3sgZWRnZUNhc2VMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBEaXZpZGVyIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS13LXB4IGNxYS1iZy1bI0U1RTdFQl1cIj48L2Rpdj5cblxuICAgICAgPCEtLSBSaWdodDogQUkgLyBIdW1hbiAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtNlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1pdGVtcy1zdGFydFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzE4cHhdIGNxYS1sZWFkaW5nLTYgY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtZGlhbG9nXCI+e3sgYWlDb3VudCB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy00IGNxYS10ZXh0LWRhbmdlclwiPnt7IGFpTGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1pdGVtcy1zdGFydFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzE4cHhdIGNxYS1sZWFkaW5nLTYgY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtZGlhbG9nXCI+e3sgaHVtYW5Db3VudCB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy00IGNxYS10ZXh0LWRhbmdlclwiPnt7IGh1bWFuTGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEJvZHkgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTNcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0IG9mIGl0ZW1zXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtM1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1taW4tdy1bMTIwcHhdIGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy00IGNxYS10ZXh0LVsjMzc0MTUxXVwiPnt7IGl0LmxhYmVsIH19PC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtaC1bOHB4XSBjcWEtcm91bmRlZC1mdWxsIGNxYS1iZy1bI0YzRjRGNl0gY3FhLW92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtaC1mdWxsIGNxYS1yb3VuZGVkLWZ1bGxcIiBbbmdDbGFzc109XCJzdGF0dXNDb2xvckNsYXNzKGl0KVwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiZm9ybWF0UGVyY2VudChpdC5wZXJjZW50KVwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdy1bNDBweF0gY3FhLXRleHQtcmlnaHQgY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLTRcIiBbbmdDbGFzc109XCJ0ZXh0Q29sb3JDbGFzcyhpdClcIj57e1xuICAgICAgICAgIGZvcm1hdFBlcmNlbnQoaXQucGVyY2VudCkgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRm9vdGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbXQtNFwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsIGNxYS1oLVs0MHB4XSBjcWEtcm91bmRlZC1bOHB4XSBjcWEtYmctWyM0MzM4Q0FdIGNxYS10ZXh0LXdoaXRlIGNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMjBweF0gaG92ZXI6Y3FhLWJnLVsjMzczMEEzXSBkaXNhYmxlZDpjcWEtb3BhY2l0eS01MCBkaXNhYmxlZDpjcWEtY3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImN0YURpc2FibGVkXCIgKGNsaWNrKT1cImN0YUNsaWNrZWQuZW1pdCgpXCI+XG4gICAgICAgIOKcqCB7eyBjdGFUZXh0IH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { FormControl, FormGroup } from '@angular/forms';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../button/button.component";
|
|
5
|
+
import * as i2 from "../../dynamic-select/dynamic-select-field.component";
|
|
6
|
+
import * as i3 from "@angular/common";
|
|
7
|
+
export class DashboardHeaderComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.title = '';
|
|
10
|
+
this.badgeClass = 'bg-[#D1FAE5] text-[#065F46]';
|
|
11
|
+
this.headerClass = '';
|
|
12
|
+
// Optional workspace select on the right
|
|
13
|
+
this.workspaceOptions = [];
|
|
14
|
+
this.workspacePlaceholder = 'Workspace';
|
|
15
|
+
this.workspaceDisabled = false;
|
|
16
|
+
this.workspaceMultiple = true;
|
|
17
|
+
this.workspaceSearchable = false;
|
|
18
|
+
this.workspaceValueChange = new EventEmitter();
|
|
19
|
+
this.workspaceForm = new FormGroup({
|
|
20
|
+
workspace: new FormControl(),
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
ngOnInit() {
|
|
24
|
+
this.syncFormFromInput();
|
|
25
|
+
this.workspaceForm.get('workspace')?.valueChanges.subscribe((v) => {
|
|
26
|
+
this.workspaceValue = v;
|
|
27
|
+
this.workspaceValueChange.emit(v);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
ngOnChanges(_changes) {
|
|
31
|
+
this.syncFormFromInput();
|
|
32
|
+
}
|
|
33
|
+
get workspaceConfig() {
|
|
34
|
+
return {
|
|
35
|
+
key: 'workspace',
|
|
36
|
+
placeholder: this.workspacePlaceholder,
|
|
37
|
+
disabled: this.workspaceDisabled,
|
|
38
|
+
multiple: this.workspaceMultiple,
|
|
39
|
+
searchable: this.workspaceSearchable,
|
|
40
|
+
options: this.workspaceOptions,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
syncFormFromInput() {
|
|
44
|
+
const ctrl = this.workspaceForm.get('workspace');
|
|
45
|
+
if (!ctrl)
|
|
46
|
+
return;
|
|
47
|
+
const val = this.workspaceValue;
|
|
48
|
+
const normalized = this.workspaceMultiple
|
|
49
|
+
? Array.isArray(val) ? val : (val != null ? [val] : [])
|
|
50
|
+
: (Array.isArray(val) ? (val.length ? val[0] : undefined) : val);
|
|
51
|
+
ctrl.setValue(normalized, { emitEvent: false });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
DashboardHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DashboardHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
55
|
+
DashboardHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DashboardHeaderComponent, selector: "cqa-dashboard-header", inputs: { title: "title", badgeText: "badgeText", badgeClass: "badgeClass", headerClass: "headerClass", workspaceOptions: "workspaceOptions", workspacePlaceholder: "workspacePlaceholder", workspaceDisabled: "workspaceDisabled", workspaceValue: "workspaceValue", workspaceMultiple: "workspaceMultiple", workspaceSearchable: "workspaceSearchable" }, outputs: { workspaceValueChange: "workspaceValueChange" }, usesOnChanges: true, ngImport: i0, template: "<div id=\"cqa-ui-root\">\n <div\n class=\"cqa-w-full cqa-flex cqa-items-end cqa-justify-between cqa-bg-white cqa-pr-6 cqa-pl-2 lg:cqa-px-6 lg:cqa-py-[6px] cqa-py-2 cqa-border-b cqa-border-default cqa-shadow-header\"\n [ngClass]=\"headerClass\">\n <!-- Left branding block -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-min-w-0\">\n <div class=\"cqa-pr-4 lg:cqa-hidden cqa-gap-2 md:cqa-flex\">\n <cqa-button variant=\"filled\" icon=\"\" [customClass]=\"'!cqa-rounded-[10px] !cqa-p-[7px] !cqa-min-w-[47px]'\">\n <svg width=\"31\" height=\"22\" viewBox=\"0 0 31 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.16675 11H25.8334\" stroke=\"white\" stroke-width=\"1.83333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M5.16675 16.5H25.8334\" stroke=\"white\" stroke-width=\"1.83333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M5.16675 5.5H25.8334\" stroke=\"white\" stroke-width=\"1.83333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </cqa-button>\n <span class=\"cqa-border-l cqa-border-primary-surface cqa-hidden md:cqa-flex\"></span>\n <cqa-button variant=\"filled\" icon=\"\" class=\"cqa-hidden md:cqa-flex\" [customClass]=\"'!cqa-rounded-[10px] !cqa-p-[7px] !cqa-min-w-[47px]'\">\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4.58337 11H17.4167\" stroke=\"white\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M11 4.58301V17.4163\" stroke=\"white\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </cqa-button>\n </div>\n <!-- Optional projected logo -->\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <rect x=\"0.5\" y=\"0.5\" width=\"31\" height=\"31\" rx=\"15.5\" fill=\"url(#pattern0_6303_22035)\" />\n <rect x=\"0.5\" y=\"0.5\" width=\"31\" height=\"31\" rx=\"15.5\" stroke=\"#D8D9FC\" />\n <defs>\n <pattern id=\"pattern0_6303_22035\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n <use xlink:href=\"#image0_6303_22035\" transform=\"scale(0.005)\" />\n </pattern>\n <image id=\"image0_6303_22035\" width=\"200\" height=\"200\" preserveAspectRatio=\"none\"\n xlink:href=\"data:image/jpeg;base64,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\" />\n </defs>\n </svg>\n\n <!-- Title + optional badge -->\n <div class=\"cqa-items-end cqa-gap-3 cqa-min-w-0 cqa-hidden md:cqa-flex\">\n <div\n class=\"cqa-truncate cqa-text-[#22223B] cqa-font-extrabold cqa-text-[32px] cqa-font-nunito-sans cqa-leading-[1]\">\n {{ title }}</div>\n <span *ngIf=\"badgeText\"\n class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-lg cqa-text-[12px] cqa-font-medium cqa-leading-4 cqa-whitespace-nowrap cqa-text-[#007A55] cqa-bg-[#D0FAE5] cqa-border cqa-border-[#A4F4CF]\"\n [ngClass]=\"badgeClass\">{{ badgeText }}</span>\n </div>\n </div>\n\n <!-- Right controls/actions -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-1\">\n <!-- Optional workspace select -->\n <div *ngIf=\"workspaceOptions?.length\" class=\"cqa-w-full cqa-max-w-[199px] cqa-ml-auto header-dropdown\">\n <cqa-dynamic-select [form]=\"workspaceForm\" [config]=\"workspaceConfig\">\n </cqa-dynamic-select>\n </div>\n\n <ng-content></ng-content>\n </div>\n </div>\n</div>", components: [{ type: i1.ButtonComponent, selector: "cqa-button", inputs: ["variant", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass"], outputs: ["clicked"] }, { type: i2.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"] }], directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
56
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DashboardHeaderComponent, decorators: [{
|
|
57
|
+
type: Component,
|
|
58
|
+
args: [{ selector: 'cqa-dashboard-header', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div id=\"cqa-ui-root\">\n <div\n class=\"cqa-w-full cqa-flex cqa-items-end cqa-justify-between cqa-bg-white cqa-pr-6 cqa-pl-2 lg:cqa-px-6 lg:cqa-py-[6px] cqa-py-2 cqa-border-b cqa-border-default cqa-shadow-header\"\n [ngClass]=\"headerClass\">\n <!-- Left branding block -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-min-w-0\">\n <div class=\"cqa-pr-4 lg:cqa-hidden cqa-gap-2 md:cqa-flex\">\n <cqa-button variant=\"filled\" icon=\"\" [customClass]=\"'!cqa-rounded-[10px] !cqa-p-[7px] !cqa-min-w-[47px]'\">\n <svg width=\"31\" height=\"22\" viewBox=\"0 0 31 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.16675 11H25.8334\" stroke=\"white\" stroke-width=\"1.83333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M5.16675 16.5H25.8334\" stroke=\"white\" stroke-width=\"1.83333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M5.16675 5.5H25.8334\" stroke=\"white\" stroke-width=\"1.83333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </cqa-button>\n <span class=\"cqa-border-l cqa-border-primary-surface cqa-hidden md:cqa-flex\"></span>\n <cqa-button variant=\"filled\" icon=\"\" class=\"cqa-hidden md:cqa-flex\" [customClass]=\"'!cqa-rounded-[10px] !cqa-p-[7px] !cqa-min-w-[47px]'\">\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4.58337 11H17.4167\" stroke=\"white\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M11 4.58301V17.4163\" stroke=\"white\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </cqa-button>\n </div>\n <!-- Optional projected logo -->\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <rect x=\"0.5\" y=\"0.5\" width=\"31\" height=\"31\" rx=\"15.5\" fill=\"url(#pattern0_6303_22035)\" />\n <rect x=\"0.5\" y=\"0.5\" width=\"31\" height=\"31\" rx=\"15.5\" stroke=\"#D8D9FC\" />\n <defs>\n <pattern id=\"pattern0_6303_22035\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n <use xlink:href=\"#image0_6303_22035\" transform=\"scale(0.005)\" />\n </pattern>\n <image id=\"image0_6303_22035\" width=\"200\" height=\"200\" preserveAspectRatio=\"none\"\n xlink:href=\"data:image/jpeg;base64,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\" />\n </defs>\n </svg>\n\n <!-- Title + optional badge -->\n <div class=\"cqa-items-end cqa-gap-3 cqa-min-w-0 cqa-hidden md:cqa-flex\">\n <div\n class=\"cqa-truncate cqa-text-[#22223B] cqa-font-extrabold cqa-text-[32px] cqa-font-nunito-sans cqa-leading-[1]\">\n {{ title }}</div>\n <span *ngIf=\"badgeText\"\n class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-lg cqa-text-[12px] cqa-font-medium cqa-leading-4 cqa-whitespace-nowrap cqa-text-[#007A55] cqa-bg-[#D0FAE5] cqa-border cqa-border-[#A4F4CF]\"\n [ngClass]=\"badgeClass\">{{ badgeText }}</span>\n </div>\n </div>\n\n <!-- Right controls/actions -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-1\">\n <!-- Optional workspace select -->\n <div *ngIf=\"workspaceOptions?.length\" class=\"cqa-w-full cqa-max-w-[199px] cqa-ml-auto header-dropdown\">\n <cqa-dynamic-select [form]=\"workspaceForm\" [config]=\"workspaceConfig\">\n </cqa-dynamic-select>\n </div>\n\n <ng-content></ng-content>\n </div>\n </div>\n</div>", styles: [] }]
|
|
59
|
+
}], propDecorators: { title: [{
|
|
60
|
+
type: Input
|
|
61
|
+
}], badgeText: [{
|
|
62
|
+
type: Input
|
|
63
|
+
}], badgeClass: [{
|
|
64
|
+
type: Input
|
|
65
|
+
}], headerClass: [{
|
|
66
|
+
type: Input
|
|
67
|
+
}], workspaceOptions: [{
|
|
68
|
+
type: Input
|
|
69
|
+
}], workspacePlaceholder: [{
|
|
70
|
+
type: Input
|
|
71
|
+
}], workspaceDisabled: [{
|
|
72
|
+
type: Input
|
|
73
|
+
}], workspaceValue: [{
|
|
74
|
+
type: Input
|
|
75
|
+
}], workspaceMultiple: [{
|
|
76
|
+
type: Input
|
|
77
|
+
}], workspaceSearchable: [{
|
|
78
|
+
type: Input
|
|
79
|
+
}], workspaceValueChange: [{
|
|
80
|
+
type: Output
|
|
81
|
+
}] } });
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rhc2hib2FyZHMvZGFzaGJvYXJkLWhlYWRlci9kYXNoYm9hcmQtaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGFzaGJvYXJkcy9kYXNoYm9hcmQtaGVhZGVyL2Rhc2hib2FyZC1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ2xJLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBZ0J4RCxNQUFNLE9BQU8sd0JBQXdCO0lBTnJDO1FBT1csVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUVuQixlQUFVLEdBQVcsNkJBQTZCLENBQUM7UUFDbkQsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFFbEMseUNBQXlDO1FBQ2hDLHFCQUFnQixHQUF5QixFQUFFLENBQUM7UUFDNUMseUJBQW9CLEdBQVcsV0FBVyxDQUFDO1FBQzNDLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUVuQyxzQkFBaUIsR0FBWSxJQUFJLENBQUM7UUFDbEMsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQ3BDLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFekQsa0JBQWEsR0FBYyxJQUFJLFNBQVMsQ0FBQztZQUN2QyxTQUFTLEVBQUUsSUFBSSxXQUFXLEVBQUU7U0FDN0IsQ0FBQyxDQUFDO0tBa0NKO0lBaENDLFFBQVE7UUFDTixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDaEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBdUI7UUFDakMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPO1lBQ0wsR0FBRyxFQUFFLFdBQVc7WUFDaEIsV0FBVyxFQUFFLElBQUksQ0FBQyxvQkFBb0I7WUFDdEMsUUFBUSxFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDaEMsUUFBUSxFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDaEMsVUFBVSxFQUFFLElBQUksQ0FBQyxtQkFBbUI7WUFDcEMsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7U0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQ2xCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDaEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQjtZQUN2QyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQzs7cUhBbERVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLHdlQ2pCckMsK2pSQStETTsyRkQ5Q08sd0JBQXdCO2tCQU5wQyxTQUFTOytCQUNFLHNCQUFzQixtQkFHZix1QkFBdUIsQ0FBQyxNQUFNOzhCQUd0QyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNJLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgfSBmcm9tICcuLi8uLi9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC1maWVsZC5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhlYWRlclNlbGVjdE9wdGlvbiB7XG4gIGlkPzogYW55O1xuICB2YWx1ZT86IGFueTtcbiAgbmFtZT86IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1kYXNoYm9hcmQtaGVhZGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rhc2hib2FyZC1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkSGVhZGVyQ29tcG9uZW50IHtcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBiYWRnZVRleHQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJhZGdlQ2xhc3M6IHN0cmluZyA9ICdiZy1bI0QxRkFFNV0gdGV4dC1bIzA2NUY0Nl0nO1xuICBASW5wdXQoKSBoZWFkZXJDbGFzczogc3RyaW5nID0gJyc7XG5cbiAgLy8gT3B0aW9uYWwgd29ya3NwYWNlIHNlbGVjdCBvbiB0aGUgcmlnaHRcbiAgQElucHV0KCkgd29ya3NwYWNlT3B0aW9uczogSGVhZGVyU2VsZWN0T3B0aW9uW10gPSBbXTtcbiAgQElucHV0KCkgd29ya3NwYWNlUGxhY2Vob2xkZXI6IHN0cmluZyA9ICdXb3Jrc3BhY2UnO1xuICBASW5wdXQoKSB3b3Jrc3BhY2VEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB3b3Jrc3BhY2VWYWx1ZT86IGFueTtcbiAgQElucHV0KCkgd29ya3NwYWNlTXVsdGlwbGU6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSB3b3Jrc3BhY2VTZWFyY2hhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSB3b3Jrc3BhY2VWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHdvcmtzcGFjZUZvcm06IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIHdvcmtzcGFjZTogbmV3IEZvcm1Db250cm9sKCksXG4gIH0pO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3luY0Zvcm1Gcm9tSW5wdXQoKTtcbiAgICB0aGlzLndvcmtzcGFjZUZvcm0uZ2V0KCd3b3Jrc3BhY2UnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodikgPT4ge1xuICAgICAgdGhpcy53b3Jrc3BhY2VWYWx1ZSA9IHY7XG4gICAgICB0aGlzLndvcmtzcGFjZVZhbHVlQ2hhbmdlLmVtaXQodik7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhfY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHRoaXMuc3luY0Zvcm1Gcm9tSW5wdXQoKTtcbiAgfVxuXG4gIGdldCB3b3Jrc3BhY2VDb25maWcoKTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiAnd29ya3NwYWNlJyxcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLndvcmtzcGFjZVBsYWNlaG9sZGVyLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMud29ya3NwYWNlRGlzYWJsZWQsXG4gICAgICBtdWx0aXBsZTogdGhpcy53b3Jrc3BhY2VNdWx0aXBsZSxcbiAgICAgIHNlYXJjaGFibGU6IHRoaXMud29ya3NwYWNlU2VhcmNoYWJsZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMud29ya3NwYWNlT3B0aW9ucyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jRm9ybUZyb21JbnB1dCgpOiB2b2lkIHtcbiAgICBjb25zdCBjdHJsID0gdGhpcy53b3Jrc3BhY2VGb3JtLmdldCgnd29ya3NwYWNlJyk7XG4gICAgaWYgKCFjdHJsKSByZXR1cm47XG4gICAgY29uc3QgdmFsID0gdGhpcy53b3Jrc3BhY2VWYWx1ZTtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy53b3Jrc3BhY2VNdWx0aXBsZVxuICAgICAgPyBBcnJheS5pc0FycmF5KHZhbCkgPyB2YWwgOiAodmFsICE9IG51bGwgPyBbdmFsXSA6IFtdKVxuICAgICAgOiAoQXJyYXkuaXNBcnJheSh2YWwpID8gKHZhbC5sZW5ndGggPyB2YWxbMF0gOiB1bmRlZmluZWQpIDogdmFsKTtcbiAgICBjdHJsLnNldFZhbHVlKG5vcm1hbGl6ZWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxufVxuXG5cbiIsIjxkaXYgaWQ9XCJjcWEtdWktcm9vdFwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjcWEtdy1mdWxsIGNxYS1mbGV4IGNxYS1pdGVtcy1lbmQgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtYmctd2hpdGUgY3FhLXByLTYgY3FhLXBsLTIgbGc6Y3FhLXB4LTYgbGc6Y3FhLXB5LVs2cHhdIGNxYS1weS0yIGNxYS1ib3JkZXItYiBjcWEtYm9yZGVyLWRlZmF1bHQgY3FhLXNoYWRvdy1oZWFkZXJcIlxuICAgIFtuZ0NsYXNzXT1cImhlYWRlckNsYXNzXCI+XG4gICAgPCEtLSBMZWZ0IGJyYW5kaW5nIGJsb2NrIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtbWluLXctMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1wci00IGxnOmNxYS1oaWRkZW4gY3FhLWdhcC0yIG1kOmNxYS1mbGV4XCI+XG4gICAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJmaWxsZWRcIiBpY29uPVwiXCIgW2N1c3RvbUNsYXNzXT1cIichY3FhLXJvdW5kZWQtWzEwcHhdICFjcWEtcC1bN3B4XSAhY3FhLW1pbi13LVs0N3B4XSdcIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMzFcIiBoZWlnaHQ9XCIyMlwiIHZpZXdCb3g9XCIwIDAgMzEgMjJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNNS4xNjY3NSAxMUgyNS44MzM0XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjgzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNNS4xNjY3NSAxNi41SDI1LjgzMzRcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjEuODMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgPHBhdGggZD1cIk01LjE2Njc1IDUuNUgyNS44MzM0XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjgzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1ib3JkZXItbCBjcWEtYm9yZGVyLXByaW1hcnktc3VyZmFjZSBjcWEtaGlkZGVuIG1kOmNxYS1mbGV4XCI+PC9zcGFuPlxuICAgICAgICA8Y3FhLWJ1dHRvbiB2YXJpYW50PVwiZmlsbGVkXCIgaWNvbj1cIlwiIGNsYXNzPVwiY3FhLWhpZGRlbiBtZDpjcWEtZmxleFwiIFtjdXN0b21DbGFzc109XCInIWNxYS1yb3VuZGVkLVsxMHB4XSAhY3FhLXAtWzdweF0gIWNxYS1taW4tdy1bNDdweF0nXCI+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjIyXCIgaGVpZ2h0PVwiMjJcIiB2aWV3Qm94PVwiMCAwIDIyIDIyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTQuNTgzMzcgMTFIMTcuNDE2N1wiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTExIDQuNTgzMDFWMTcuNDE2M1wiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBPcHRpb25hbCBwcm9qZWN0ZWQgbG9nbyAtLT5cbiAgICAgIDxzdmcgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiPlxuICAgICAgICA8cmVjdCB4PVwiMC41XCIgeT1cIjAuNVwiIHdpZHRoPVwiMzFcIiBoZWlnaHQ9XCIzMVwiIHJ4PVwiMTUuNVwiIGZpbGw9XCJ1cmwoI3BhdHRlcm4wXzYzMDNfMjIwMzUpXCIgLz5cbiAgICAgICAgPHJlY3QgeD1cIjAuNVwiIHk9XCIwLjVcIiB3aWR0aD1cIjMxXCIgaGVpZ2h0PVwiMzFcIiByeD1cIjE1LjVcIiBzdHJva2U9XCIjRDhEOUZDXCIgLz5cbiAgICAgICAgPGRlZnM+XG4gICAgICAgICAgPHBhdHRlcm4gaWQ9XCJwYXR0ZXJuMF82MzAzXzIyMDM1XCIgcGF0dGVybkNvbnRlbnRVbml0cz1cIm9iamVjdEJvdW5kaW5nQm94XCIgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMVwiPlxuICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiI2ltYWdlMF82MzAzXzIyMDM1XCIgdHJhbnNmb3JtPVwic2NhbGUoMC4wMDUpXCIgLz5cbiAgICAgICAgICA8L3BhdHRlcm4+XG4gICAgICAgICAgPGltYWdlIGlkPVwiaW1hZ2UwXzYzMDNfMjIwMzVcIiB3aWR0aD1cIjIwMFwiIGhlaWdodD1cIjIwMFwiIHByZXNlcnZlQXNwZWN0UmF0aW89XCJub25lXCJcbiAgICAgICAgICAgIHhsaW5rOmhyZWY9XCJkYXRhOmltYWdlL2pwZWc7YmFzZTY0LC85ai80QUFRU2taSlJnQUJBUUFBQVFBQkFBRC8yd0NFQUFrR0J3OFNFQk1RRUJBU0VCQVFFQllSRlJVWEZSQVJFUkFTR1JrV0d4WVhHQlVZSGlnc0dCb21HeFVZSVRFaEpTa3JMam91R1NBek9ETXNOeWd0TGpjQkNnb0tEZzBPR3hBUUd5NGRJQ1VyTnkwckt5c3JNRGN0TGlzdkxTMHRLeTB0TFRjdUxTMHRNRGN0TmkwdExTc3RMUzByTFMwckxURXRMUzB0TFMwdExmL0FBQkVJQU1nQXlBTUJJZ0FDRVFFREVRSC94QUFjQUFFQUFnSURBUUFBQUFBQUFBQUFBQUFBQlFZQ0J3RURCQWoveEFCQkVBQUJBd0lDQXdzS0JRVUFBd0VBQUFBQkFBSURCQkVGSVFZU1FRY2lNVkZTWVhHQmthSFJFeFFXSXpKVWtxS3h3UmRDWW5LeVU0TEM0ZkFrTlBFVi84UUFHd0VCQUFJREFRRUFBQUFBQUFBQUFBQUFBQUlEQVFRRkJnZi94QUF1RVFBQ0FRSUVBd1lHQXdBQUFBQUFBQUFBQVFJREVRUVNJVkVUTVVFRlVtR0JrYkVVSWpKQ2NjRVZvZEgvMmdBTUF3RUFBaEVERVFBL0FONG9pSUFpSWdDSWlBSWlJQWlJZ0NJaUFJaUlBaUlnQ0lpQUlpSUFpSWdDSWlBSWlJQWlJZ0NJaUFJaUlBaUlnQ0lpQUlpSUFpSWdDSWlBSWlJQWlJZ0NJaUFJaUlBaUlnQ0lpQUlpSUFpSWdDSWlBSWlJQWlJZ0NJaUFJaUlBaUlnQ0lpQUlpSUFpSWdDSWlBODFYSzVqZGNEV0RjM0RhVzhZNXh3cmt5RnpOZUlnM0YybjhydVpkNnIvQUpielNvMURsVHptN2VLTiszcXo3MUtLdVJic1MxSlZpVmhMYnRJSmE0SDJtT0hDQ0YxVU5mclBkQyt6Wm83YXd6czVwNEh0dnNQZHdLTXh3dXBwUlZ4aTdIRU1tYnloK1YzU3VOSTRUSkV5dHBUNjZBYTdDUHp4bjJtbmp5MkthZ3ZKKzVqTXlTOC8xSnhCTGw1UzVoZHNmYk56RHhPSGVPdGNZamlCZ2MxOG4vcnZJYTUzOUYvNVNmMGs1WDJHM0dvOXpvc1NvcnNPby9oQnoxb1ptOEdmL1pGZE9qT0xDc2hrcGFwdnI0d1k1bUcyL0dZMWdtVHErbk1aaUQwOGJpZE5lb3BxcVYxT1R2bTcwbUhydG0xVWYwMHhQM3VUNVBCYkkwYnIzUXp2d21yT3ZxajFEbldQbFlpQ2RVOVgzQ29XbnVpNW9wdGFNRTA4cEpadzd3N1dIN0xjb09OOGtrdkI3bE03ODBlVDAweFAzdVQ1UEJQVFRFL2U1UGs4RkFJdHZoUTJSVm5lNVA4QXBwaWZ2Y255ZUNlbW1KKzl5Zko0S0FST0ZEWkRPOXl6MEdubUl4eU5lNll5dEJ6WTROMVhEYUxnWkhuVzRjQXhxR3JoRTBKeU9UbS9tWTdhQ3ZuZFRlaWVrTWxGT0pHM01ic3BHY3R2SHpFY0sxNitHVWxlSzFKMDZqVDFQb0JWVFRLbXJtdE05Sk84Qm91Nk1XT1hHMjQ3bFk2S3FaTEcyV04yc3g3UTVwNHd1OWNxVWJxeDBLRlhoVFU3SitETkxlbGVJZTh2K1h3VDByeEQzbC95K0NtOVA5R3ZKT05UQzMxVHp2d09CanVQb0pWS1hPbTV3ZG16MnVGamhjUlRVNHdYb2lhOUs4UTk1ZjhBTDRKNlY0aDd5LzVmQlFxS0dlVzVzZkNVTzR2UkUxNlY0aDd5L3dDWHdXVWVsMWVDRDV3NDJQQVEwZzlPU2cwV2M4dHc4SFE3aTlFYm8wWDBoanE0OVliMlZ2dHM0dWNjWVU0dEQ0VmlNbFBLMmFJMmMwOVRodEJXNk1FeFNPcGhiTEh3RVpqYTEyMEZidEdyblZuelBKOXFkblBEU3pSK2wvMTRFaWlJcnprbkNqc2VvZkxRT2FQYUcrYjBqL3JLU1hDeW5aM01OWFZpdVlCVk5xYWQxUExtV3QxZWN0MkhwQzhPaVZhNktWOUZLZUJ4MVAzYlIwRVpycG1kNXJYRWpKaGRmK3gzRDMvUllhYlFtS29qcUdaRjR2ZjliYmZheTIxRk41ZWoxOHltN3RmWTgwVTMvd0NiaVRvemxUVGtIbUFQQWY3WFhIUXNkTm8zMFZiRmlFSXlrTm5qWVNBTGcvdWIvRmVyVHlKczlIRFZ0SHMydnpOZFlFZFRnRWE3ejdCM3RPY3NEZXZXWm1PMXVYV1ZKZEp2OE14dXZOR0c2RFRDZWxoeEduTytoczRPSERxRWp2YTc3cVVvcElzV3c0dGZZT2NOVjNISEszZ2NPNDlhaE56ZXNFMVBOUXk1dDFTV2o5RHJodzZqbi9jb3ZjN3JYVXRlK2trT1VyakdlTHlqTDJQV0xqckN3NE5SY2VzZFYrREtscW51VVN1cEh3eVBpa0ZueHVMWERuSDFDNkZzVGRld2dObGpxMmpLVWFqL0FON1J2VDF0L2l0ZHJlcFR6d1VpaWNiT3dSRVZoRUlpSURZdTVQcENXeUdpa085a3U2TDlMOHk1dlFSbjFjNjJzdm1tbW5kRzlzakRaN0hCd1BFUXZvWEI4V2luZ2puRG1qeWpBNjF4a2RvN2JybVl1bGFXWmRUWm95dXJNOWRYVE1rWTZONHUxNExTT01MU1dQWVc2bXFId3V6MVRkcDVUVHdGYnY4QU9HY3R2YUZTZDB1aFpKQzJvWVdsMFIxWFdJdVdPc080MjdWek1SVGNvMzJPOTJOaStGWHlONlM5K2hyVkVSYzg5bUVSRUFWbjBFeHcwOVFHUE5vWmlHdTRtdS9LNzdLc0xsU2hKeGQwVTRpaEd0VGNKZFQ2RHVpZ3REY1VOUlNNYzQzZTBhanVrYmVzV1BXdVYxSXU2dWo1L1ZwdW5Od2x6Uk9vaUxKV1ZEVGVIZlJ2NHdXOWxyZlZZWTU2M0RZNWRzWkYrMHNQZlplN1RadnFtSGlrK29LOEVHK3d1WWNrbjZ0SzI0UDVZdlpsRXZxYU9uQmZYWWJVd0hQVURpUDVOK1lLTzNNcXEwMHNKNEpJOWEzTzMvVHU1U0dnSnVaMmJITWIzYXcrNnJtZ2o5WEVJaHg2N2ZrZDRLNXJTb3ZNaGZXTE9qUm1UelhGV3N2Wm9tZkNlY0c0SGZaWWFkdE5QaXJwV1pHOGM3ZW13djN0S3gwa1BrOFZrSS9MVU5kL0VyMzdyYkxWY1I0NFA4bkthMW5GN29qOXI4R1hMVHVtYlVZWks1dWRtTm5iMVdQOGI5cTBXdCtZUjZ6Q21BNTY5SnEvSlphRFdNSnBtanN5VmJvd2lJdHdwQ0lpQUlpSUFzbzNXSVBFVmlpaktLYXN5ZE9iakpTWFJrdWk0ak9RNkF1VjQyU3MyajZwVGxtZ251Z2lJb2t3aUlnTDV1VjFscEpvU2NuTkR4MGpJL1VkaUtLM09wQ0s5ZzVUSGp1djlseXVqaDNlQjR2dHVDaGltOTFmOUczVVJGY2Nrcldtei9WUmpqZVQyQStLOEVPOXd1WThvLzVOQ3owMm12Skd6a3RKN2Y4QTRzZElmVTRmRkR0ZVJjZHJqM2tMYmd2bGl0MlVTK3BzNk5Bc2pPODhEV0QvQUNQMlZjMERZWFloRWVJUGNmZ2Q5eXJKaGZxTUxxSmprWkFRUDREdkpVZnVaMDNySnAzWk5qWUczNmJrOXpWYzVhVkg1RUV0WW9yMmtJOHBpc2dHZXRVdFozdEgyWHYzVzVMMWNiZVRBTzl6bDU5RW9qVTRvMlFqTHlqNTNjd0Z5UG1JWFZwbVRWWXM2Sm1lL1pBM3NBUHpYVmkwbWxzakgydnhac2pDL1ZZVXduTFVvOWI1THJRYTNsdWdWYmFmRFpHdHlMMnRnWU9td1B5Z3JScWpoTlZLVzdNMXVpQ0lpM0NrSWlJQWlLVW90SGEyWmdraXA1SkkzWHM0REkySkgxQ3c1SmN4YS9JaTBVMzZJNGo3cEw4S3duMFpybzJsOGxOSXlOdnRPSXNBRkNWV0NUZHl5blRsS1NpbHpaakdNaDBMbEVYanBPOG16NnBUamxpbHNnaUlzRWdpSWdMUnVjeDNyMm5rc2VlNjMzUlMrNVhSNzZhY2pJQVJ0N3k3N0l1amhsYUI0dnRxYW5pbjRLMzdOakxoRkZhU1Yza29UYjI1TjQzN25zVjhWZDJPUTNaWEs5R3p6dXVKNFdCMXp4YWpiZlg3cnEwdmtkUFZzcDJabGxtLzNPelBkWlRlRzA3YU9sZExKN1pHczcvRnYvY2E4ZWlWQWJ2clp2YWZjdHZzR2VzNWJTa2s4MjJpS2JQbHVSMjZETzJHbmhvMmJjeisxdkIyazl5eXJHZVlZT1duS2FjV1BIclA0UjFNK2k2OElwamlGZStyZVA4QXg0WEFNQjRIVzlrRCtSNlF1clNWcnNSeEJsSEdmVTArY2pod0FtMnQxNUJ2U3BxMmtIMDFaamQrU010QUtWdExSelY4bzlwcExmMk52OVQ5RkY3bWVIT25xNUsyUVhFWkpCNDVYMytnSjdRcGpkQnFDV3dZWFN0MzhwYmRvMk1iYlZIUmNYL3RVbldUdzRSaHdhTE9lQlpvMnl6SGhQUmZQb0N3NXRwdGM1ZXhsSmFiSXB1NjFqSWtuWlNzTzlwODM4OGpnUG8zNmxVRmRsUk01N25QZVM1ejNGeE8wa3JyVzlTaGtpb2xFbmQzQ0lpc0loRVJBZWlncEh6U3NoakYzeU9EUU9jL1pmUk9GMExZSVk0V2V6R3dOSFBiYjJxZ2JsT2paYVBQcFc1dUJiQ09KdkE1L1h3ZHEyU3VYaTZ1YVdWZERhb3hzcmhVUGRQeFd6R1VyVG04NjcrWm85a2R2MFZ4eFN2WkJFNmFRMmF3WDV6eEFjOTFwSEZhOTlSTStaL3RQZGUzRU5nN0Z6TVJVeXh0dWVnN0Z3YnExZUkrVWZjOGlJaTBEMkFSRVFCY2dYeUdaNEZ3cmp1ZVlDWlpmT0pCNnFJNzNpZkovcjZxVUl1VHNhK0t4RWFGSjFKRjcwVXd2emFsampQdDIxbmZ1T1o3T0RxUlRDTHFKV1ZrZUFxVGRTYm0rYk9IRUFYUEFGQzBsT1o1dk9YajFiTW9XbmIrc3FWcUlkY2FwOW44dzVYTjBMS1ZoTGJOT3JzdnhkQ21uYmtWdFhJVEVJVFZ6Q0xncDRYWGtQOEFVZnlSMExIU0l2bDFhR24zcnBCNnh3NElZZkU4QUhTcHVHRnJHYWpBQUFNaG4zckdrcEdzdWVGN3pyUGNlRjUrdzJXVWxPM2x5STVTSnIzQ2pwbXdVekx6UDlYQzNLN243WEcrd2NKSzY4TG9ZY09wSHlTSFdmN2NyL3pTU0hJQWNlWnNPbFRFVklQS0dWMitrSTFRZGpHY2x2MUovd0JMaWFqRDVHUGZtMk0zWTNacjhvOFpHeE0vVDFNNVN1WVBSQ25FMkoxNURaNVJyRytma0djRFdEak5yRHVXcnRMZElwSzJjeU91Mk51OWpaeUc3VHprbGJBMHkwY3hPdWtzSHhNcDJIZU0xblpubE9Oc3o5Rlcvd0FMNi9sdy9FN3dXNVFsVFh6U2V2c1VUVW5vbG9VZEZlUHd2citYRDhUdkJQd3ZyK1hEOFR2QmJQeEZQdkZmRGxzVWRGZVB3dnIrWEQ4VHZCUHd2citYRDhUdkJQaUtmZUhEbHNVZFd2UVRSTjFaTHJ5QWltak8rUDhBVVBJQitxbHNPM0xxa3lOOHZKRzJLKysxQ1M0amlGeDNyYU5CUnh3eHRpaWFHUnNGZ0JzVkZmRkpLMEdXUXBPOTJkMGNZYUExb0FhQllBWkFBSkxJR2d1Y1FBQmNrOEFDektxdWwyRjExVjZxRnpHUWJidU90SWVldzRPWmN1VGFWMXFiMUNuR2MxR1R5cmRsTDAwMGtOVkpxUm0wRVozdjZ6eWo5bFdWYi93OXJlVkY4VHZCUHc5cmVWRjhUdkJhRXFkU1R1MGV4b1l6QlVLYWhDYXNpb0lyZitIdGJ5b3ZpZDRKK0h0YnlvdmlkNEtQQm5zWGZ5ZUY3NktnaXQvNGUxdktpK0ozZ3NvdHp5ckpHcytNTnZtUVhFZ2RGbG5nejJNUHRQQzk5RUpvNWdjbFhLR055WU0zdTJOYjRyY3RCUnh3eHRpamJxc1lMQUxwd2JDb3FhSVJSQ3dIQ2RyanhrcjNyY3BVc2k4VHkzYU9QbGlwNmFSWEwvVGxFUlhITkNJaUFJaUlBaUlnQ0lpQUlpSUFpSWdDSWlBSWlJQWlJZ0NJaUFJaUlBaUlnQ0lpQUlpSUFpSWdDSWlBSWlJQWlJZ0NJaUFJaUlBaUlnQ0lpQUlpSUFpSWdDSWlBSWlJQWlJZ0NJaUFJaUlBaUlnQ0lpQUlpSUFpSWdDSWlBSWlJQWlJZ0NJaUFJaUlBaUlnQ0lpQUlpSUFpSWdDSWlBSWlJQWlJZ0NJaUFJaUlBaUlnQ0lpQUlpSUFpSWdDSWlBLzlrPVwiIC8+XG4gICAgICAgIDwvZGVmcz5cbiAgICAgIDwvc3ZnPlxuXG4gICAgICA8IS0tIFRpdGxlICsgb3B0aW9uYWwgYmFkZ2UgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWl0ZW1zLWVuZCBjcWEtZ2FwLTMgY3FhLW1pbi13LTAgY3FhLWhpZGRlbiBtZDpjcWEtZmxleFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjcWEtdHJ1bmNhdGUgY3FhLXRleHQtWyMyMjIyM0JdIGNxYS1mb250LWV4dHJhYm9sZCBjcWEtdGV4dC1bMzJweF0gY3FhLWZvbnQtbnVuaXRvLXNhbnMgY3FhLWxlYWRpbmctWzFdXCI+XG4gICAgICAgICAge3sgdGl0bGUgfX08L2Rpdj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJiYWRnZVRleHRcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLXB4LTIgY3FhLXB5LVsycHhdIGNxYS1yb3VuZGVkLWxnIGNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLWxlYWRpbmctNCBjcWEtd2hpdGVzcGFjZS1ub3dyYXAgY3FhLXRleHQtWyMwMDdBNTVdIGNxYS1iZy1bI0QwRkFFNV0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjQTRGNENGXVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiYmFkZ2VDbGFzc1wiPnt7IGJhZGdlVGV4dCB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBSaWdodCBjb250cm9scy9hY3Rpb25zIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtZmxleC0xXCI+XG4gICAgICA8IS0tIE9wdGlvbmFsIHdvcmtzcGFjZSBzZWxlY3QgLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwid29ya3NwYWNlT3B0aW9ucz8ubGVuZ3RoXCIgY2xhc3M9XCJjcWEtdy1mdWxsIGNxYS1tYXgtdy1bMTk5cHhdIGNxYS1tbC1hdXRvIGhlYWRlci1kcm9wZG93blwiPlxuICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cIndvcmtzcGFjZUZvcm1cIiBbY29uZmlnXT1cIndvcmtzcGFjZUNvbmZpZ1wiPlxuICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/material/icon";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
export class FailedTestCasesCardComponent {
|
|
6
|
+
constructor() {
|
|
7
|
+
/** E.g., "C-62: Upload Content" */
|
|
8
|
+
this.title = 'Failed Test Case';
|
|
9
|
+
/** Number of failures to display in the pill */
|
|
10
|
+
this.failures = 0;
|
|
11
|
+
/** Pill label (e.g., "failures") */
|
|
12
|
+
this.failuresLabel = 'failures';
|
|
13
|
+
/** Optional custom class for the pill background */
|
|
14
|
+
this.pillClass = 'bg-[#EF4444] text-white';
|
|
15
|
+
/** Root cause label (left part, emphasized) */
|
|
16
|
+
this.rootCauseLabel = 'Root cause';
|
|
17
|
+
/** If false, hide the root cause row */
|
|
18
|
+
this.showRootCause = true;
|
|
19
|
+
/** Label for timestamp */
|
|
20
|
+
this.lastFailedLabel = 'Last failed';
|
|
21
|
+
/** Optional extra class for the outer card */
|
|
22
|
+
this.cardClass = '';
|
|
23
|
+
/** Left border accent class */
|
|
24
|
+
this.leftAccentClass = 'border-l-[4px] border-[#EF4444]';
|
|
25
|
+
}
|
|
26
|
+
get rootCauseDisplay() {
|
|
27
|
+
return this.rootCause && this.rootCause.trim().length
|
|
28
|
+
? this.rootCause
|
|
29
|
+
: 'No root cause available';
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
FailedTestCasesCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FailedTestCasesCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
33
|
+
FailedTestCasesCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: FailedTestCasesCardComponent, selector: "cqa-failed-test-cases-card", inputs: { title: "title", failures: "failures", failuresLabel: "failuresLabel", pillClass: "pillClass", rootCause: "rootCause", rootCauseLabel: "rootCauseLabel", showRootCause: "showRootCause", lastFailed: "lastFailed", lastFailedLabel: "lastFailedLabel", cardClass: "cardClass", leftAccentClass: "leftAccentClass" }, ngImport: i0, template: "<div id=\"cqa-ui-root\">\n <div class=\"cqa-w-full cqa-bg-white cqa-rounded-[10px] cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-p-4\"\n [ngClass]=\"[leftAccentClass, cardClass]\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <!-- Title -->\n <h3 class=\"cqa-text-[16px] cqa-leading-6 cqa-font-semibold cqa-text-[#111827]\">{{ title }}</h3>\n\n <!-- Failures pill -->\n <span class=\"cqa-px-2.5 cqa-py-1 cqa-rounded-full cqa-text-[12px] cqa-leading-4 cqa-font-medium\"\n [ngClass]=\"pillClass\">\n {{ failures | number }} {{ failuresLabel }}\n </span>\n </div>\n\n <!-- Root cause -->\n <div *ngIf=\"showRootCause\" class=\"cqa-mt-2 cqa-text-[14px] cqa-leading-5\">\n <span class=\"cqa-font-semibold cqa-text-[#EF4444]\">{{ rootCauseLabel }}:</span>\n <span class=\"cqa-text-[#EF4444]\">{{ rootCauseDisplay }}</span>\n </div>\n\n <!-- Timestamp -->\n <div *ngIf=\"lastFailed\"\n class=\"cqa-mt-1 cqa-flex cqa-items-center cqa-gap-2 cqa-text-[12px] cqa-leading-5 cqa-text-[#6B7280]\">\n <mat-icon class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\">schedule</mat-icon>\n <span>{{ lastFailedLabel }}: {{ lastFailed }}</span>\n </div>\n </div>\n</div>", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "number": i2.DecimalPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FailedTestCasesCardComponent, decorators: [{
|
|
35
|
+
type: Component,
|
|
36
|
+
args: [{ selector: 'cqa-failed-test-cases-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div id=\"cqa-ui-root\">\n <div class=\"cqa-w-full cqa-bg-white cqa-rounded-[10px] cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-p-4\"\n [ngClass]=\"[leftAccentClass, cardClass]\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <!-- Title -->\n <h3 class=\"cqa-text-[16px] cqa-leading-6 cqa-font-semibold cqa-text-[#111827]\">{{ title }}</h3>\n\n <!-- Failures pill -->\n <span class=\"cqa-px-2.5 cqa-py-1 cqa-rounded-full cqa-text-[12px] cqa-leading-4 cqa-font-medium\"\n [ngClass]=\"pillClass\">\n {{ failures | number }} {{ failuresLabel }}\n </span>\n </div>\n\n <!-- Root cause -->\n <div *ngIf=\"showRootCause\" class=\"cqa-mt-2 cqa-text-[14px] cqa-leading-5\">\n <span class=\"cqa-font-semibold cqa-text-[#EF4444]\">{{ rootCauseLabel }}:</span>\n <span class=\"cqa-text-[#EF4444]\">{{ rootCauseDisplay }}</span>\n </div>\n\n <!-- Timestamp -->\n <div *ngIf=\"lastFailed\"\n class=\"cqa-mt-1 cqa-flex cqa-items-center cqa-gap-2 cqa-text-[12px] cqa-leading-5 cqa-text-[#6B7280]\">\n <mat-icon class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\">schedule</mat-icon>\n <span>{{ lastFailedLabel }}: {{ lastFailed }}</span>\n </div>\n </div>\n</div>", styles: [] }]
|
|
37
|
+
}], propDecorators: { title: [{
|
|
38
|
+
type: Input
|
|
39
|
+
}], failures: [{
|
|
40
|
+
type: Input
|
|
41
|
+
}], failuresLabel: [{
|
|
42
|
+
type: Input
|
|
43
|
+
}], pillClass: [{
|
|
44
|
+
type: Input
|
|
45
|
+
}], rootCause: [{
|
|
46
|
+
type: Input
|
|
47
|
+
}], rootCauseLabel: [{
|
|
48
|
+
type: Input
|
|
49
|
+
}], showRootCause: [{
|
|
50
|
+
type: Input
|
|
51
|
+
}], lastFailed: [{
|
|
52
|
+
type: Input
|
|
53
|
+
}], lastFailedLabel: [{
|
|
54
|
+
type: Input
|
|
55
|
+
}], cardClass: [{
|
|
56
|
+
type: Input
|
|
57
|
+
}], leftAccentClass: [{
|
|
58
|
+
type: Input
|
|
59
|
+
}] } });
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFpbGVkLXRlc3QtY2FzZXMtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rhc2hib2FyZHMvZmFpbGVkLXRlc3QtY2FzZXMtY2FyZC9mYWlsZWQtdGVzdC1jYXNlcy1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGFzaGJvYXJkcy9mYWlsZWQtdGVzdC1jYXNlcy1jYXJkL2ZhaWxlZC10ZXN0LWNhc2VzLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFRMUUsTUFBTSxPQUFPLDRCQUE0QjtJQU56QztRQU9FLG1DQUFtQztRQUMxQixVQUFLLEdBQVcsa0JBQWtCLENBQUM7UUFDNUMsZ0RBQWdEO1FBQ3ZDLGFBQVEsR0FBVyxDQUFDLENBQUM7UUFDOUIsb0NBQW9DO1FBQzNCLGtCQUFhLEdBQVcsVUFBVSxDQUFDO1FBQzVDLG9EQUFvRDtRQUMzQyxjQUFTLEdBQVcseUJBQXlCLENBQUM7UUFHdkQsK0NBQStDO1FBQ3RDLG1CQUFjLEdBQVcsWUFBWSxDQUFDO1FBQy9DLHdDQUF3QztRQUMvQixrQkFBYSxHQUFZLElBQUksQ0FBQztRQUd2QywwQkFBMEI7UUFDakIsb0JBQWUsR0FBVyxhQUFhLENBQUM7UUFDakQsOENBQThDO1FBQ3JDLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFDaEMsK0JBQStCO1FBQ3RCLG9CQUFlLEdBQVcsaUNBQWlDLENBQUM7S0FPdEU7SUFMQyxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNO1lBQ25ELENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUztZQUNoQixDQUFDLENBQUMseUJBQXlCLENBQUM7SUFDaEMsQ0FBQzs7eUhBNUJVLDRCQUE0Qjs2R0FBNUIsNEJBQTRCLGdZQ1J6Qyx5dkNBMkJNOzJGRG5CTyw0QkFBNEI7a0JBTnhDLFNBQVM7K0JBQ0UsNEJBQTRCLG1CQUdyQix1QkFBdUIsQ0FBQyxNQUFNOzhCQUl0QyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1mYWlsZWQtdGVzdC1jYXNlcy1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZhaWxlZC10ZXN0LWNhc2VzLWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRmFpbGVkVGVzdENhc2VzQ2FyZENvbXBvbmVudCB7XG4gIC8qKiBFLmcuLCBcIkMtNjI6IFVwbG9hZCBDb250ZW50XCIgKi9cbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9ICdGYWlsZWQgVGVzdCBDYXNlJztcbiAgLyoqIE51bWJlciBvZiBmYWlsdXJlcyB0byBkaXNwbGF5IGluIHRoZSBwaWxsICovXG4gIEBJbnB1dCgpIGZhaWx1cmVzOiBudW1iZXIgPSAwO1xuICAvKiogUGlsbCBsYWJlbCAoZS5nLiwgXCJmYWlsdXJlc1wiKSAqL1xuICBASW5wdXQoKSBmYWlsdXJlc0xhYmVsOiBzdHJpbmcgPSAnZmFpbHVyZXMnO1xuICAvKiogT3B0aW9uYWwgY3VzdG9tIGNsYXNzIGZvciB0aGUgcGlsbCBiYWNrZ3JvdW5kICovXG4gIEBJbnB1dCgpIHBpbGxDbGFzczogc3RyaW5nID0gJ2JnLVsjRUY0NDQ0XSB0ZXh0LXdoaXRlJztcbiAgLyoqIFJvb3QgY2F1c2UgdGV4dDsgd2hlbiBlbXB0eSwgc2hvdyBhIGRlZmF1bHQgbWVzc2FnZSAqL1xuICBASW5wdXQoKSByb290Q2F1c2U/OiBzdHJpbmc7XG4gIC8qKiBSb290IGNhdXNlIGxhYmVsIChsZWZ0IHBhcnQsIGVtcGhhc2l6ZWQpICovXG4gIEBJbnB1dCgpIHJvb3RDYXVzZUxhYmVsOiBzdHJpbmcgPSAnUm9vdCBjYXVzZSc7XG4gIC8qKiBJZiBmYWxzZSwgaGlkZSB0aGUgcm9vdCBjYXVzZSByb3cgKi9cbiAgQElucHV0KCkgc2hvd1Jvb3RDYXVzZTogYm9vbGVhbiA9IHRydWU7XG4gIC8qKiBMYXN0IGZhaWxlZCB0ZXh0IChlLmcuLCBcIjIgaG91cnMgYWdvXCIpICovXG4gIEBJbnB1dCgpIGxhc3RGYWlsZWQ/OiBzdHJpbmc7XG4gIC8qKiBMYWJlbCBmb3IgdGltZXN0YW1wICovXG4gIEBJbnB1dCgpIGxhc3RGYWlsZWRMYWJlbDogc3RyaW5nID0gJ0xhc3QgZmFpbGVkJztcbiAgLyoqIE9wdGlvbmFsIGV4dHJhIGNsYXNzIGZvciB0aGUgb3V0ZXIgY2FyZCAqL1xuICBASW5wdXQoKSBjYXJkQ2xhc3M6IHN0cmluZyA9ICcnO1xuICAvKiogTGVmdCBib3JkZXIgYWNjZW50IGNsYXNzICovXG4gIEBJbnB1dCgpIGxlZnRBY2NlbnRDbGFzczogc3RyaW5nID0gJ2JvcmRlci1sLVs0cHhdIGJvcmRlci1bI0VGNDQ0NF0nO1xuXG4gIGdldCByb290Q2F1c2VEaXNwbGF5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucm9vdENhdXNlICYmIHRoaXMucm9vdENhdXNlLnRyaW0oKS5sZW5ndGhcbiAgICAgID8gdGhpcy5yb290Q2F1c2VcbiAgICAgIDogJ05vIHJvb3QgY2F1c2UgYXZhaWxhYmxlJztcbiAgfVxufVxuXG5cbiIsIjxkaXYgaWQ9XCJjcWEtdWktcm9vdFwiPlxuICA8ZGl2IGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtYmctd2hpdGUgY3FhLXJvdW5kZWQtWzEwcHhdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTVFN0VCXSBjcWEtcC00XCJcbiAgICBbbmdDbGFzc109XCJbbGVmdEFjY2VudENsYXNzLCBjYXJkQ2xhc3NdXCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1zdGFydCBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtMlwiPlxuICAgICAgPCEtLSBUaXRsZSAtLT5cbiAgICAgIDxoMyBjbGFzcz1cImNxYS10ZXh0LVsxNnB4XSBjcWEtbGVhZGluZy02IGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMTExODI3XVwiPnt7IHRpdGxlIH19PC9oMz5cblxuICAgICAgPCEtLSBGYWlsdXJlcyBwaWxsIC0tPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtcHgtMi41IGNxYS1weS0xIGNxYS1yb3VuZGVkLWZ1bGwgY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLTQgY3FhLWZvbnQtbWVkaXVtXCJcbiAgICAgICAgW25nQ2xhc3NdPVwicGlsbENsYXNzXCI+XG4gICAgICAgIHt7IGZhaWx1cmVzIHwgbnVtYmVyIH19IHt7IGZhaWx1cmVzTGFiZWwgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUm9vdCBjYXVzZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwic2hvd1Jvb3RDYXVzZVwiIGNsYXNzPVwiY3FhLW10LTIgY3FhLXRleHQtWzE0cHhdIGNxYS1sZWFkaW5nLTVcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyNFRjQ0NDRdXCI+e3sgcm9vdENhdXNlTGFiZWwgfX06PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bI0VGNDQ0NF1cIj57eyByb290Q2F1c2VEaXNwbGF5IH19PC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBUaW1lc3RhbXAgLS0+XG4gICAgPGRpdiAqbmdJZj1cImxhc3RGYWlsZWRcIlxuICAgICAgY2xhc3M9XCJjcWEtbXQtMSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctNSBjcWEtdGV4dC1bIzZCNzI4MF1cIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIiFjcWEtdy00ICFjcWEtaC00ICFjcWEtdGV4dC1bMTZweF1cIj5zY2hlZHVsZTwvbWF0LWljb24+XG4gICAgICA8c3Bhbj57eyBsYXN0RmFpbGVkTGFiZWwgfX06IHt7IGxhc3RGYWlsZWQgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
export class HeatErrorMapCellComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.type = 'smoke';
|
|
7
|
+
this.cases = 0;
|
|
8
|
+
this.defects = 0;
|
|
9
|
+
this.progress = 0; // Progress value from 0 to 100
|
|
10
|
+
}
|
|
11
|
+
get backgroundColorStyle() {
|
|
12
|
+
switch (this.type) {
|
|
13
|
+
case 'smoke':
|
|
14
|
+
return { 'background-color': '#FDBA74' }; // orange-300
|
|
15
|
+
case 'sanity':
|
|
16
|
+
return { 'background-color': '#FCD34D' }; // amber-300
|
|
17
|
+
case 'regression':
|
|
18
|
+
return { 'background-color': '#A7F3D0' }; // emerald-200
|
|
19
|
+
case 'revisit':
|
|
20
|
+
return { 'background-color': '#F4F4F5' }; // zinc-100
|
|
21
|
+
default:
|
|
22
|
+
return { 'background-color': '#FDBA74' }; // orange-300
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
get progressWidth() {
|
|
26
|
+
// Clamp progress between 0 and 100
|
|
27
|
+
const clampedProgress = Math.max(0, Math.min(100, this.progress));
|
|
28
|
+
return `${clampedProgress}%`;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
HeatErrorMapCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: HeatErrorMapCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
32
|
+
HeatErrorMapCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: HeatErrorMapCellComponent, selector: "cqa-heat-error-map-cell", inputs: { type: "type", cases: "cases", defects: "defects", progress: "progress" }, ngImport: i0, template: "<div id=\"cqa-ui-root\" style=\"width: 14rem; height: 6rem; display: inline-flex; justify-content: space-between; align-items: flex-start;\">\n <div class=\"min-w-56 min-h-24 cqa-self-stretch cqa-flex cqa-flex-col cqa-rounded-2xl cqa-justify-start cqa-items-start cqa-gap-4 cqa-p-4\" [ngStyle]=\"backgroundColorStyle\">\n <!-- section 1 -->\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-px\">\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start\">\n <div class=\"cqa-self-stretch cqa-justify-center cqa-text-gray-900 cqa-text-base cqa-font-bold cqa-leading-5 cqa-font-geist\">\n {{ cases }} cases\n </div>\n </div>\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start\">\n <div class=\"cqa-self-stretch cqa-justify-center cqa-text-gray-900 cqa-text-xs cqa-font-normal cqa-leading-4 cqa-font-geist\">\n {{ defects }} defects\n </div>\n </div>\n </div>\n <!-- section 2 -->\n <div class=\"cqa-self-stretch cqa-h-1 cqa-relative cqa-rounded-full cqa-overflow-hidden cqa-bg-white/70\">\n <div \n class=\"cqa-h-1 cqa-left-0 cqa-top-0 cqa-absolute cqa-bg-red-500 cqa-rounded-full\"\n [style.width]=\"progressWidth\"\n ></div>\n </div>\n </div>\n</div>\n\n\n", directives: [{ type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
|
|
33
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: HeatErrorMapCellComponent, decorators: [{
|
|
34
|
+
type: Component,
|
|
35
|
+
args: [{ selector: 'cqa-heat-error-map-cell', template: "<div id=\"cqa-ui-root\" style=\"width: 14rem; height: 6rem; display: inline-flex; justify-content: space-between; align-items: flex-start;\">\n <div class=\"min-w-56 min-h-24 cqa-self-stretch cqa-flex cqa-flex-col cqa-rounded-2xl cqa-justify-start cqa-items-start cqa-gap-4 cqa-p-4\" [ngStyle]=\"backgroundColorStyle\">\n <!-- section 1 -->\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-px\">\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start\">\n <div class=\"cqa-self-stretch cqa-justify-center cqa-text-gray-900 cqa-text-base cqa-font-bold cqa-leading-5 cqa-font-geist\">\n {{ cases }} cases\n </div>\n </div>\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start\">\n <div class=\"cqa-self-stretch cqa-justify-center cqa-text-gray-900 cqa-text-xs cqa-font-normal cqa-leading-4 cqa-font-geist\">\n {{ defects }} defects\n </div>\n </div>\n </div>\n <!-- section 2 -->\n <div class=\"cqa-self-stretch cqa-h-1 cqa-relative cqa-rounded-full cqa-overflow-hidden cqa-bg-white/70\">\n <div \n class=\"cqa-h-1 cqa-left-0 cqa-top-0 cqa-absolute cqa-bg-red-500 cqa-rounded-full\"\n [style.width]=\"progressWidth\"\n ></div>\n </div>\n </div>\n</div>\n\n\n", styles: [] }]
|
|
36
|
+
}], propDecorators: { type: [{
|
|
37
|
+
type: Input
|
|
38
|
+
}], cases: [{
|
|
39
|
+
type: Input
|
|
40
|
+
}], defects: [{
|
|
41
|
+
type: Input
|
|
42
|
+
}], progress: [{
|
|
43
|
+
type: Input
|
|
44
|
+
}] } });
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhdC1lcnJvci1tYXAtY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rhc2hib2FyZHMvaGVhdC1lcnJvci1tYXAtY2VsbC9oZWF0LWVycm9yLW1hcC1jZWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGFzaGJvYXJkcy9oZWF0LWVycm9yLW1hcC1jZWxsL2hlYXQtZXJyb3ItbWFwLWNlbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQVNqRCxNQUFNLE9BQU8seUJBQXlCO0lBTHRDO1FBTVcsU0FBSSxHQUF5QixPQUFPLENBQUM7UUFDckMsVUFBSyxHQUFXLENBQUMsQ0FBQztRQUNsQixZQUFPLEdBQVcsQ0FBQyxDQUFDO1FBQ3BCLGFBQVEsR0FBVyxDQUFDLENBQUMsQ0FBQywrQkFBK0I7S0FzQi9EO0lBcEJDLElBQUksb0JBQW9CO1FBQ3RCLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNqQixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsYUFBYTtZQUN6RCxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsWUFBWTtZQUN4RCxLQUFLLFlBQVk7Z0JBQ2YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsY0FBYztZQUMxRCxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsV0FBVztZQUN2RDtnQkFDRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxhQUFhO1NBQzFEO0lBQ0gsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLG1DQUFtQztRQUNuQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNsRSxPQUFPLEdBQUcsZUFBZSxHQUFHLENBQUM7SUFDL0IsQ0FBQzs7c0hBekJVLHlCQUF5QjswR0FBekIseUJBQXlCLG1KQ1R0Qyx1MkNBMEJBOzJGRGpCYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0UseUJBQXlCOzhCQUsxQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBIZWF0RXJyb3JNYXBDZWxsVHlwZSA9ICdzbW9rZScgfCAnc2FuaXR5JyB8ICdyZWdyZXNzaW9uJyB8ICdyZXZpc2l0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWhlYXQtZXJyb3ItbWFwLWNlbGwnLFxuICB0ZW1wbGF0ZVVybDogJy4vaGVhdC1lcnJvci1tYXAtY2VsbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW11cbn0pXG5leHBvcnQgY2xhc3MgSGVhdEVycm9yTWFwQ2VsbENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHR5cGU6IEhlYXRFcnJvck1hcENlbGxUeXBlID0gJ3Ntb2tlJztcbiAgQElucHV0KCkgY2FzZXM6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIGRlZmVjdHM6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIHByb2dyZXNzOiBudW1iZXIgPSAwOyAvLyBQcm9ncmVzcyB2YWx1ZSBmcm9tIDAgdG8gMTAwXG5cbiAgZ2V0IGJhY2tncm91bmRDb2xvclN0eWxlKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICBjYXNlICdzbW9rZSc6XG4gICAgICAgIHJldHVybiB7ICdiYWNrZ3JvdW5kLWNvbG9yJzogJyNGREJBNzQnIH07IC8vIG9yYW5nZS0zMDBcbiAgICAgIGNhc2UgJ3Nhbml0eSc6XG4gICAgICAgIHJldHVybiB7ICdiYWNrZ3JvdW5kLWNvbG9yJzogJyNGQ0QzNEQnIH07IC8vIGFtYmVyLTMwMFxuICAgICAgY2FzZSAncmVncmVzc2lvbic6XG4gICAgICAgIHJldHVybiB7ICdiYWNrZ3JvdW5kLWNvbG9yJzogJyNBN0YzRDAnIH07IC8vIGVtZXJhbGQtMjAwXG4gICAgICBjYXNlICdyZXZpc2l0JzpcbiAgICAgICAgcmV0dXJuIHsgJ2JhY2tncm91bmQtY29sb3InOiAnI0Y0RjRGNScgfTsgLy8gemluYy0xMDBcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7ICdiYWNrZ3JvdW5kLWNvbG9yJzogJyNGREJBNzQnIH07IC8vIG9yYW5nZS0zMDBcbiAgICB9XG4gIH1cblxuICBnZXQgcHJvZ3Jlc3NXaWR0aCgpOiBzdHJpbmcge1xuICAgIC8vIENsYW1wIHByb2dyZXNzIGJldHdlZW4gMCBhbmQgMTAwXG4gICAgY29uc3QgY2xhbXBlZFByb2dyZXNzID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCB0aGlzLnByb2dyZXNzKSk7XG4gICAgcmV0dXJuIGAke2NsYW1wZWRQcm9ncmVzc30lYDtcbiAgfVxufVxuXG5cbiIsIjxkaXYgaWQ9XCJjcWEtdWktcm9vdFwiIHN0eWxlPVwid2lkdGg6IDE0cmVtOyBoZWlnaHQ6IDZyZW07IGRpc3BsYXk6IGlubGluZS1mbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1wiPlxuICA8ZGl2IGNsYXNzPVwibWluLXctNTYgbWluLWgtMjQgY3FhLXNlbGYtc3RyZXRjaCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLXJvdW5kZWQtMnhsIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTQgY3FhLXAtNFwiIFtuZ1N0eWxlXT1cImJhY2tncm91bmRDb2xvclN0eWxlXCI+XG4gICAgPCEtLSBzZWN0aW9uIDEgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLXB4XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXNlbGYtc3RyZXRjaCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWp1c3RpZnktc3RhcnQgY3FhLWl0ZW1zLXN0YXJ0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdGV4dC1ncmF5LTkwMCBjcWEtdGV4dC1iYXNlIGNxYS1mb250LWJvbGQgY3FhLWxlYWRpbmctNSBjcWEtZm9udC1nZWlzdFwiPlxuICAgICAgICAgIHt7IGNhc2VzIH19IGNhc2VzXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXNlbGYtc3RyZXRjaCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWp1c3RpZnktc3RhcnQgY3FhLWl0ZW1zLXN0YXJ0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdGV4dC1ncmF5LTkwMCBjcWEtdGV4dC14cyBjcWEtZm9udC1ub3JtYWwgY3FhLWxlYWRpbmctNCBjcWEtZm9udC1nZWlzdFwiPlxuICAgICAgICAgIHt7IGRlZmVjdHMgfX0gZGVmZWN0c1xuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwhLS0gc2VjdGlvbiAyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1oLTEgY3FhLXJlbGF0aXZlIGNxYS1yb3VuZGVkLWZ1bGwgY3FhLW92ZXJmbG93LWhpZGRlbiBjcWEtYmctd2hpdGUvNzBcIj5cbiAgICAgIDxkaXYgXG4gICAgICAgIGNsYXNzPVwiY3FhLWgtMSBjcWEtbGVmdC0wIGNxYS10b3AtMCBjcWEtYWJzb2x1dGUgY3FhLWJnLXJlZC01MDAgY3FhLXJvdW5kZWQtZnVsbFwiXG4gICAgICAgIFtzdHlsZS53aWR0aF09XCJwcm9ncmVzc1dpZHRoXCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuXG4iXX0=
|