@cqa-lib/cqa-ui 0.1.2 → 1.0.1

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.
Files changed (125) hide show
  1. package/esm2020/lib/action-menu/action-menu.component.mjs +42 -0
  2. package/esm2020/lib/assets/images/image-assets.constants.mjs +28 -0
  3. package/esm2020/lib/badge/badge.component.mjs +141 -0
  4. package/esm2020/lib/button/button.component.mjs +42 -67
  5. package/esm2020/lib/column-visibility/column-visibility.component.mjs +69 -0
  6. package/esm2020/lib/dashboards/chart-card/chart-card.component.mjs +22 -0
  7. package/esm2020/lib/dashboards/coverage-module-card/coverage-module-card.component.mjs +105 -0
  8. package/esm2020/lib/dashboards/dashboard-header/dashboard-header.component.mjs +82 -0
  9. package/esm2020/lib/dashboards/failed-test-cases-card/failed-test-cases-card.component.mjs +59 -0
  10. package/esm2020/lib/dashboards/heat-error-map-cell/heat-error-map-cell.component.mjs +45 -0
  11. package/esm2020/lib/dashboards/insight-card/insight-card.component.mjs +201 -0
  12. package/esm2020/lib/dashboards/metrics-card/metrics-block.component.mjs +41 -0
  13. package/esm2020/lib/dashboards/metrics-card/metrics-card-item.interface.mjs +2 -0
  14. package/esm2020/lib/dashboards/metrics-card/metrics-card.component.mjs +62 -0
  15. package/esm2020/lib/dashboards/progress-text-card/progress-text-card.component.mjs +46 -0
  16. package/esm2020/lib/dashboards/test-distribution-card/test-distribution-card.component.mjs +35 -0
  17. package/esm2020/lib/dialog/dialog.component.mjs +4 -4
  18. package/esm2020/lib/dropdown-button/dropdown-button.component.mjs +189 -0
  19. package/esm2020/lib/dynamic-select/dynamic-select-field.component.mjs +160 -0
  20. package/esm2020/lib/empty-state/empty-state.component.mjs +37 -0
  21. package/esm2020/lib/filters/dynamic-filter/dynamic-filter.component.mjs +239 -0
  22. package/esm2020/lib/full-table-loader/full-table-loader.component.mjs +16 -0
  23. package/esm2020/lib/inline-sort/inline-sort.component.mjs +58 -0
  24. package/esm2020/lib/other-button/other-button.component.mjs +76 -0
  25. package/esm2020/lib/pagination/pagination.component.mjs +102 -0
  26. package/esm2020/lib/search-bar/search-bar.component.mjs +3 -3
  27. package/esm2020/lib/segment-control/segment-control.component.mjs +3 -3
  28. package/esm2020/lib/selected-filters/selected-filters.component.mjs +27 -0
  29. package/esm2020/lib/table/dynamic-table/dynamic-cell.directive.mjs +35 -0
  30. package/esm2020/lib/table/dynamic-table/dynamic-table.component.mjs +258 -0
  31. package/esm2020/lib/table-action-toolbar/table-action-toolbar.component.mjs +52 -0
  32. package/esm2020/lib/table-data-loader/table-data-loader.component.mjs +19 -0
  33. package/esm2020/lib/templates/table-template.component.mjs +365 -0
  34. package/esm2020/lib/ui-kit.module.mjs +196 -17
  35. package/esm2020/lib/utils/metadata-colors.util.mjs +100 -0
  36. package/esm2020/lib/utils/tw-overlay-container.mjs +22 -0
  37. package/esm2020/public-api.mjs +29 -1
  38. package/fesm2015/cqa-lib-cqa-ui.mjs +2899 -133
  39. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  40. package/fesm2020/cqa-lib-cqa-ui.mjs +2867 -133
  41. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  42. package/lib/action-menu/action-menu.component.d.ts +17 -0
  43. package/lib/assets/images/image-assets.constants.d.ts +20 -0
  44. package/lib/badge/badge.component.d.ts +25 -0
  45. package/lib/button/button.component.d.ts +6 -5
  46. package/lib/column-visibility/column-visibility.component.d.ts +33 -0
  47. package/lib/dashboards/chart-card/chart-card.component.d.ts +8 -0
  48. package/lib/dashboards/coverage-module-card/coverage-module-card.component.d.ts +44 -0
  49. package/lib/dashboards/dashboard-header/dashboard-header.component.d.ts +30 -0
  50. package/lib/dashboards/failed-test-cases-card/failed-test-cases-card.component.d.ts +28 -0
  51. package/lib/dashboards/heat-error-map-cell/heat-error-map-cell.component.d.ts +14 -0
  52. package/lib/dashboards/insight-card/insight-card.component.d.ts +73 -0
  53. package/lib/dashboards/metrics-card/metrics-block.component.d.ts +12 -0
  54. package/lib/dashboards/metrics-card/metrics-card-item.interface.d.ts +12 -0
  55. package/lib/dashboards/metrics-card/metrics-card.component.d.ts +17 -0
  56. package/lib/dashboards/progress-text-card/progress-text-card.component.d.ts +13 -0
  57. package/lib/dashboards/test-distribution-card/test-distribution-card.component.d.ts +29 -0
  58. package/lib/dropdown-button/dropdown-button.component.d.ts +32 -0
  59. package/lib/dynamic-select/dynamic-select-field.component.d.ts +43 -0
  60. package/lib/empty-state/empty-state.component.d.ts +20 -0
  61. package/lib/filters/dynamic-filter/dynamic-filter.component.d.ts +56 -0
  62. package/lib/full-table-loader/full-table-loader.component.d.ts +6 -0
  63. package/lib/inline-sort/inline-sort.component.d.ts +12 -0
  64. package/lib/other-button/other-button.component.d.ts +37 -0
  65. package/lib/pagination/pagination.component.d.ts +37 -0
  66. package/lib/selected-filters/selected-filters.component.d.ts +17 -0
  67. package/lib/table/dynamic-table/dynamic-cell.directive.d.ts +16 -0
  68. package/lib/table/dynamic-table/dynamic-table.component.d.ts +72 -0
  69. package/lib/table-action-toolbar/table-action-toolbar.component.d.ts +34 -0
  70. package/lib/table-data-loader/table-data-loader.component.d.ts +7 -0
  71. package/lib/templates/table-template.component.d.ts +90 -0
  72. package/lib/ui-kit.module.d.ts +43 -6
  73. package/lib/utils/metadata-colors.util.d.ts +50 -0
  74. package/lib/utils/tw-overlay-container.d.ts +12 -0
  75. package/package.json +1 -1
  76. package/public-api.d.ts +28 -0
  77. package/src/assets/fonts/SFUIText-Bold/SF-UI-Text-Bold.eot +0 -0
  78. package/src/assets/fonts/SFUIText-Bold/SF-UI-Text-Bold.otf +0 -0
  79. package/src/assets/fonts/SFUIText-Bold/SF-UI-Text-Bold.svg +14730 -0
  80. package/src/assets/fonts/SFUIText-Bold/SF-UI-Text-Bold.ttf +0 -0
  81. package/src/assets/fonts/SFUIText-Bold/SF-UI-Text-Bold.woff +0 -0
  82. package/src/assets/fonts/SFUIText-Bold/SF-UI-Text-Bold.woff2 +0 -0
  83. package/src/assets/fonts/SFUIText-Light/SF-UI-Text-Light.eot +0 -0
  84. package/src/assets/fonts/SFUIText-Light/SF-UI-Text-Light.otf +0 -0
  85. package/src/assets/fonts/SFUIText-Light/SF-UI-Text-Light.svg +21333 -0
  86. package/src/assets/fonts/SFUIText-Light/SF-UI-Text-Light.ttf +0 -0
  87. package/src/assets/fonts/SFUIText-Light/SF-UI-Text-Light.woff +0 -0
  88. package/src/assets/fonts/SFUIText-Light/SF-UI-Text-Light.woff2 +0 -0
  89. package/src/assets/fonts/SFUIText-Medium/SF-UI-Text-Medium.eot +0 -0
  90. package/src/assets/fonts/SFUIText-Medium/SF-UI-Text-Medium.otf +0 -0
  91. package/src/assets/fonts/SFUIText-Medium/SF-UI-Text-Medium.svg +14584 -0
  92. package/src/assets/fonts/SFUIText-Medium/SF-UI-Text-Medium.ttf +0 -0
  93. package/src/assets/fonts/SFUIText-Medium/SF-UI-Text-Medium.woff +0 -0
  94. package/src/assets/fonts/SFUIText-Medium/SF-UI-Text-Medium.woff2 +0 -0
  95. package/src/assets/fonts/SFUIText-Regular/SF-UI-Text-Regular.eot +0 -0
  96. package/src/assets/fonts/SFUIText-Regular/SF-UI-Text-Regular.otf +0 -0
  97. package/src/assets/fonts/SFUIText-Regular/SF-UI-Text-Regular.svg +17870 -0
  98. package/src/assets/fonts/SFUIText-Regular/SF-UI-Text-Regular.ttf +0 -0
  99. package/src/assets/fonts/SFUIText-Regular/SF-UI-Text-Regular.woff +0 -0
  100. package/src/assets/fonts/SFUIText-Regular/SF-UI-Text-Regular.woff2 +0 -0
  101. package/src/assets/fonts/SFUIText-Semibold/SF-UI-Text-Semibold.eot +0 -0
  102. package/src/assets/fonts/SFUIText-Semibold/SF-UI-Text-Semibold.otf +0 -0
  103. package/src/assets/fonts/SFUIText-Semibold/SF-UI-Text-Semibold.svg +14732 -0
  104. package/src/assets/fonts/SFUIText-Semibold/SF-UI-Text-Semibold.ttf +0 -0
  105. package/src/assets/fonts/SFUIText-Semibold/SF-UI-Text-Semibold.woff +0 -0
  106. package/src/assets/fonts/SFUIText-Semibold/SF-UI-Text-Semibold.woff2 +0 -0
  107. package/src/lib/assets/images/.gitkeep +0 -0
  108. package/src/lib/assets/images/DashboardIcon.png +0 -0
  109. package/src/lib/assets/images/FilesIcon.png +0 -0
  110. package/src/lib/assets/images/README.md +66 -0
  111. package/src/lib/assets/images/ReportsIcon.png +0 -0
  112. package/src/lib/assets/images/SearchIcon.png +0 -0
  113. package/src/lib/assets/images/StepsIcon.png +0 -0
  114. package/src/lib/assets/images/TestCaseIcon.png +0 -0
  115. package/src/lib/assets/images/analytics-chart-icon.svg +11 -0
  116. package/src/lib/assets/images/checklist-add-icon.svg +10 -0
  117. package/src/lib/assets/images/document-gear-icon.svg +9 -0
  118. package/src/lib/assets/images/empty-state-default-icon.svg +8 -0
  119. package/src/lib/assets/images/image-assets.constants.ts +38 -0
  120. package/src/lib/assets/images/search-debug-icon.svg +8 -0
  121. package/src/lib/assets/images/test-case-icon.svg +9 -0
  122. package/src/lib/assets/images/upload-folder-icon.svg +7 -0
  123. package/src/lib/utils/metadata-colors.constants.js +33 -0
  124. package/storybook-static/assets/images/README.md +66 -0
  125. package/styles.css +1 -1
@@ -0,0 +1,17 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export interface ActionMenuRow {
4
+ id: number | string;
5
+ [key: string]: any;
6
+ }
7
+ export declare class ActionMenuButtonComponent {
8
+ row?: ActionMenuRow;
9
+ view: EventEmitter<string | number>;
10
+ edit: EventEmitter<ActionMenuRow>;
11
+ delete: EventEmitter<ActionMenuRow>;
12
+ navigateToTestCase(id?: number | string): void;
13
+ editTestCase(row?: ActionMenuRow): void;
14
+ deleteTestCase(row?: ActionMenuRow): void;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<ActionMenuButtonComponent, never>;
16
+ static ɵcmp: i0.ɵɵComponentDeclaration<ActionMenuButtonComponent, "cqa-action-menu-button", never, { "row": "row"; }, { "view": "view"; "edit": "edit"; "delete": "delete"; }, never, never>;
17
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Image assets constants for the UI library
3
+ *
4
+ * Place your image files in src/lib/assets/images/ and reference them here
5
+ *
6
+ * Usage in components:
7
+ * import { EMPTY_STATE_IMAGES } from '../assets/images/image-assets.constants';
8
+ * imageUrl: EMPTY_STATE_IMAGES.TEST_CASE
9
+ */
10
+ export declare const EMPTY_STATE_IMAGES: {
11
+ readonly TEST_CASE: "assets/images/TestCaseIcon.png";
12
+ readonly SEARCH_DEBUG: "assets/images/SearchIcon.png";
13
+ readonly UPLOAD_FOLDER: "assets/images/FilesIcon.png";
14
+ readonly DASHBOARD: "assets/images/DashboardIcon.png";
15
+ readonly CHECKLIST_ADD: "assets/images/StepsIcon.png";
16
+ readonly DOCUMENT_GEAR: "assets/images/document-gear-icon.svg";
17
+ readonly ANALYTICS_CHART: "assets/images/ReportsIcon.png";
18
+ readonly DEFAULT: "assets/images/SearchIcon.png";
19
+ };
20
+ export declare type EmptyStateImageKey = keyof typeof EMPTY_STATE_IMAGES;
@@ -0,0 +1,25 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare type BadgeVariant = 'warning' | 'error' | 'info' | 'success' | 'default' | 'outline';
3
+ export declare class BadgeComponent {
4
+ label: string;
5
+ icon?: string;
6
+ variant: BadgeVariant;
7
+ backgroundColor?: string;
8
+ textColor?: string;
9
+ iconBackgroundColor?: string;
10
+ iconColor?: string;
11
+ get badgeClasses(): string;
12
+ get badgeStyles(): {
13
+ [key: string]: string;
14
+ };
15
+ get iconContainerClasses(): string;
16
+ get iconContainerStyles(): {
17
+ [key: string]: string;
18
+ };
19
+ get iconClasses(): string;
20
+ get iconStyles(): {
21
+ [key: string]: string;
22
+ };
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<BadgeComponent, never>;
24
+ static ɵcmp: i0.ɵɵComponentDeclaration<BadgeComponent, "cqa-badge", never, { "label": "label"; "icon": "icon"; "variant": "variant"; "backgroundColor": "backgroundColor"; "textColor": "textColor"; "iconBackgroundColor": "iconBackgroundColor"; "iconColor": "iconColor"; }, {}, never, never>;
25
+ }
@@ -1,21 +1,22 @@
1
1
  import { EventEmitter } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- export declare type ButtonVariant = 'filled' | 'outlined' | 'text' | 'elevated' | 'tonal';
3
+ export declare type ButtonVariant = 'filled' | 'outlined' | 'text' | 'elevated' | 'tonal' | 'grey-solid';
4
4
  export declare class ButtonComponent {
5
5
  variant: ButtonVariant;
6
6
  disabled: boolean;
7
7
  icon?: string;
8
8
  iconPosition: 'start' | 'end';
9
+ fullWidth: boolean;
10
+ iconColor?: string;
9
11
  type: 'button' | 'submit' | 'reset';
12
+ text?: string;
13
+ customClass?: string;
10
14
  clicked: EventEmitter<MouseEvent>;
11
15
  isHovered: boolean;
12
16
  isFocused: boolean;
13
17
  isPressed: boolean;
14
18
  get hasIcon(): boolean;
15
19
  get buttonClasses(): string;
16
- get stateLayerClasses(): string;
17
- get labelClasses(): string;
18
- get iconClasses(): string;
19
20
  private getVariantClasses;
20
21
  get textClass(): string;
21
22
  onMouseEnter(): void;
@@ -26,5 +27,5 @@ export declare class ButtonComponent {
26
27
  onBlur(): void;
27
28
  onClick(event: MouseEvent): void;
28
29
  static ɵfac: i0.ɵɵFactoryDeclaration<ButtonComponent, never>;
29
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "cqa-button", never, { "variant": "variant"; "disabled": "disabled"; "icon": "icon"; "iconPosition": "iconPosition"; "type": "type"; }, { "clicked": "clicked"; }, never, ["*"]>;
30
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "cqa-button", never, { "variant": "variant"; "disabled": "disabled"; "icon": "icon"; "iconPosition": "iconPosition"; "fullWidth": "fullWidth"; "iconColor": "iconColor"; "type": "type"; "text": "text"; "customClass": "customClass"; }, { "clicked": "clicked"; }, never, ["*"]>;
30
31
  }
@@ -0,0 +1,33 @@
1
+ import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export interface ColumnVisibilityConfig {
4
+ type?: boolean;
5
+ priority?: boolean;
6
+ result?: boolean;
7
+ status?: boolean;
8
+ labels?: boolean;
9
+ createdBy?: boolean;
10
+ createdAt?: boolean;
11
+ updatedAt?: boolean;
12
+ lastRun?: boolean;
13
+ [key: string]: any;
14
+ }
15
+ export declare class ColumnVisibilityComponent implements OnChanges {
16
+ isStepGroup: boolean;
17
+ columns: Array<{
18
+ id: string;
19
+ label: string;
20
+ }>;
21
+ columnVisibility: ColumnVisibilityConfig;
22
+ selectedAutoRefreshInterval: number;
23
+ columnVisibilityChange: EventEmitter<ColumnVisibilityConfig>;
24
+ autoRefreshChange: EventEmitter<number>;
25
+ ngOnChanges(changes: SimpleChanges): void;
26
+ get areAllColumnsSelected(): boolean;
27
+ toggleAllColumns(checked: boolean): void;
28
+ saveColumnPreferences(): void;
29
+ onAutoRefreshChange(): void;
30
+ private getTogglableKeys;
31
+ static ɵfac: i0.ɵɵFactoryDeclaration<ColumnVisibilityComponent, never>;
32
+ static ɵcmp: i0.ɵɵComponentDeclaration<ColumnVisibilityComponent, "cqa-column-visibility", never, { "isStepGroup": "isStepGroup"; "columns": "columns"; "columnVisibility": "columnVisibility"; "selectedAutoRefreshInterval": "selectedAutoRefreshInterval"; }, { "columnVisibilityChange": "columnVisibilityChange"; "autoRefreshChange": "autoRefreshChange"; }, never, never>;
33
+ }
@@ -0,0 +1,8 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class ChartCardComponent {
3
+ title: string;
4
+ subtitle?: string;
5
+ cardClass: string;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChartCardComponent, never>;
7
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChartCardComponent, "cqa-chart-card", never, { "title": "title"; "subtitle": "subtitle"; "cardClass": "cardClass"; }, {}, never, ["[chart-actions]", "*"]>;
8
+ }
@@ -0,0 +1,44 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare type CoverageStatus = 'success' | 'error' | 'neutral';
4
+ export interface CoverageItem {
5
+ /** Row label, e.g. "Input Validation" */
6
+ label: string;
7
+ /** Value in percent (0-100) */
8
+ percent: number;
9
+ /** Visual status to colorize the bar/text */
10
+ status?: CoverageStatus;
11
+ }
12
+ export declare class CoverageModuleCardComponent {
13
+ /** Card title, e.g. "AI Ask" */
14
+ title: string;
15
+ /** Number of issues to display next to title */
16
+ issues: number;
17
+ /** Optional "View" action visibility */
18
+ showViewAction: boolean;
19
+ /** Middle metrics: left group */
20
+ positiveCount: number;
21
+ negativeCount: number;
22
+ edgeCaseCount: number;
23
+ positiveLabel: string;
24
+ negativeLabel: string;
25
+ edgeCaseLabel: string;
26
+ /** Middle metrics: right group */
27
+ aiCount: number;
28
+ humanCount: number;
29
+ aiLabel: string;
30
+ humanLabel: string;
31
+ /** Rows of coverage with percentage bars */
32
+ items: CoverageItem[];
33
+ /** CTA button label */
34
+ ctaText: string;
35
+ /** Disable CTA */
36
+ ctaDisabled: boolean;
37
+ view: EventEmitter<void>;
38
+ ctaClicked: EventEmitter<void>;
39
+ statusColorClass(item: CoverageItem): string;
40
+ textColorClass(item: CoverageItem): string;
41
+ formatPercent(pct: number): string;
42
+ static ɵfac: i0.ɵɵFactoryDeclaration<CoverageModuleCardComponent, never>;
43
+ static ɵcmp: i0.ɵɵComponentDeclaration<CoverageModuleCardComponent, "cqa-coverage-module-card", never, { "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"; }, { "view": "view"; "ctaClicked": "ctaClicked"; }, never, never>;
44
+ }
@@ -0,0 +1,30 @@
1
+ import { EventEmitter, SimpleChanges } from '@angular/core';
2
+ import { FormGroup } from '@angular/forms';
3
+ import { DynamicSelectFieldConfig } from '../../dynamic-select/dynamic-select-field.component';
4
+ import * as i0 from "@angular/core";
5
+ export interface HeaderSelectOption {
6
+ id?: any;
7
+ value?: any;
8
+ name?: string;
9
+ label?: string;
10
+ }
11
+ export declare class DashboardHeaderComponent {
12
+ title: string;
13
+ badgeText?: string;
14
+ badgeClass: string;
15
+ headerClass: string;
16
+ workspaceOptions: HeaderSelectOption[];
17
+ workspacePlaceholder: string;
18
+ workspaceDisabled: boolean;
19
+ workspaceValue?: any;
20
+ workspaceMultiple: boolean;
21
+ workspaceSearchable: boolean;
22
+ workspaceValueChange: EventEmitter<any>;
23
+ workspaceForm: FormGroup;
24
+ ngOnInit(): void;
25
+ ngOnChanges(_changes: SimpleChanges): void;
26
+ get workspaceConfig(): DynamicSelectFieldConfig;
27
+ private syncFormFromInput;
28
+ static ɵfac: i0.ɵɵFactoryDeclaration<DashboardHeaderComponent, never>;
29
+ static ɵcmp: i0.ɵɵComponentDeclaration<DashboardHeaderComponent, "cqa-dashboard-header", never, { "title": "title"; "badgeText": "badgeText"; "badgeClass": "badgeClass"; "headerClass": "headerClass"; "workspaceOptions": "workspaceOptions"; "workspacePlaceholder": "workspacePlaceholder"; "workspaceDisabled": "workspaceDisabled"; "workspaceValue": "workspaceValue"; "workspaceMultiple": "workspaceMultiple"; "workspaceSearchable": "workspaceSearchable"; }, { "workspaceValueChange": "workspaceValueChange"; }, never, ["*"]>;
30
+ }
@@ -0,0 +1,28 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class FailedTestCasesCardComponent {
3
+ /** E.g., "C-62: Upload Content" */
4
+ title: string;
5
+ /** Number of failures to display in the pill */
6
+ failures: number;
7
+ /** Pill label (e.g., "failures") */
8
+ failuresLabel: string;
9
+ /** Optional custom class for the pill background */
10
+ pillClass: string;
11
+ /** Root cause text; when empty, show a default message */
12
+ rootCause?: string;
13
+ /** Root cause label (left part, emphasized) */
14
+ rootCauseLabel: string;
15
+ /** If false, hide the root cause row */
16
+ showRootCause: boolean;
17
+ /** Last failed text (e.g., "2 hours ago") */
18
+ lastFailed?: string;
19
+ /** Label for timestamp */
20
+ lastFailedLabel: string;
21
+ /** Optional extra class for the outer card */
22
+ cardClass: string;
23
+ /** Left border accent class */
24
+ leftAccentClass: string;
25
+ get rootCauseDisplay(): string;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<FailedTestCasesCardComponent, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<FailedTestCasesCardComponent, "cqa-failed-test-cases-card", never, { "title": "title"; "failures": "failures"; "failuresLabel": "failuresLabel"; "pillClass": "pillClass"; "rootCause": "rootCause"; "rootCauseLabel": "rootCauseLabel"; "showRootCause": "showRootCause"; "lastFailed": "lastFailed"; "lastFailedLabel": "lastFailedLabel"; "cardClass": "cardClass"; "leftAccentClass": "leftAccentClass"; }, {}, never, never>;
28
+ }
@@ -0,0 +1,14 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare type HeatErrorMapCellType = 'smoke' | 'sanity' | 'regression' | 'revisit';
3
+ export declare class HeatErrorMapCellComponent {
4
+ type: HeatErrorMapCellType;
5
+ cases: number;
6
+ defects: number;
7
+ progress: number;
8
+ get backgroundColorStyle(): {
9
+ [key: string]: string;
10
+ };
11
+ get progressWidth(): string;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<HeatErrorMapCellComponent, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<HeatErrorMapCellComponent, "cqa-heat-error-map-cell", never, { "type": "type"; "cases": "cases"; "defects": "defects"; "progress": "progress"; }, {}, never, never>;
14
+ }
@@ -0,0 +1,73 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { BadgeComponent } from '../../badge/badge.component';
3
+ import * as i0 from "@angular/core";
4
+ export declare type InsightBadge = Pick<BadgeComponent, 'label' | 'icon' | 'variant'>;
5
+ export interface InsightMetadata {
6
+ [key: string]: string | {
7
+ label: string;
8
+ value: string;
9
+ highlight?: boolean;
10
+ };
11
+ }
12
+ interface InternalInsightSection {
13
+ id: string;
14
+ title: string;
15
+ variant: 'warning' | 'error' | 'default';
16
+ reason: string;
17
+ actionButtonLabel: string;
18
+ expanded?: boolean;
19
+ }
20
+ export declare class InsightCardComponent {
21
+ title: string;
22
+ description: string;
23
+ private _badges;
24
+ set badges(value: InsightBadge[]);
25
+ get badges(): InsightBadge[];
26
+ metadata?: InsightMetadata;
27
+ prerequisiteSection?: string;
28
+ testDataSection?: string;
29
+ metadataExpanded: boolean;
30
+ isPrerequisiteMissing: boolean;
31
+ isTestDataMissing: boolean;
32
+ private sectionExpandedState;
33
+ isApplying: boolean;
34
+ metadataToggle: EventEmitter<boolean>;
35
+ sectionToggle: EventEmitter<{
36
+ id: string;
37
+ expanded: boolean;
38
+ }>;
39
+ sectionActionClick: EventEmitter<string>;
40
+ onApplySuggestionClick: EventEmitter<void>;
41
+ onAttachPrerequisitesClick: EventEmitter<void>;
42
+ onImportTestDataClick: EventEmitter<void>;
43
+ toggleMetadata(): void;
44
+ toggleSection(section: InternalInsightSection): void;
45
+ onSectionAction(sectionId: string): void;
46
+ get visibleBadges(): InsightBadge[];
47
+ get visibleSections(): InternalInsightSection[];
48
+ onMainAction(): Promise<void>;
49
+ resetApplyingState(): void;
50
+ getSectionBorderClass(section: InternalInsightSection): string;
51
+ getMetadataValueClasses(key: string, value: string | {
52
+ label: string;
53
+ value: string;
54
+ highlight?: boolean;
55
+ }): string;
56
+ getMetadataValue(value: string | {
57
+ label: string;
58
+ value: string;
59
+ highlight?: boolean;
60
+ }): string;
61
+ getMetadataValueStyle(key: string, value: string | {
62
+ label: string;
63
+ value: string;
64
+ highlight?: boolean;
65
+ }): {
66
+ [key: string]: string;
67
+ };
68
+ getSectionTitleClasses(section: InternalInsightSection): string;
69
+ getSectionIconColor(section: InternalInsightSection): string;
70
+ static ɵfac: i0.ɵɵFactoryDeclaration<InsightCardComponent, never>;
71
+ static ɵcmp: i0.ɵɵComponentDeclaration<InsightCardComponent, "cqa-insight-card", never, { "title": "title"; "description": "description"; "badges": "badges"; "metadata": "metadata"; "prerequisiteSection": "prerequisiteSection"; "testDataSection": "testDataSection"; "metadataExpanded": "metadataExpanded"; "isPrerequisiteMissing": "isPrerequisiteMissing"; "isTestDataMissing": "isTestDataMissing"; }, { "metadataToggle": "metadataToggle"; "sectionToggle": "sectionToggle"; "sectionActionClick": "sectionActionClick"; "onApplySuggestionClick": "onApplySuggestionClick"; "onAttachPrerequisitesClick": "onAttachPrerequisitesClick"; "onImportTestDataClick": "onImportTestDataClick"; }, never, never>;
72
+ }
73
+ export {};
@@ -0,0 +1,12 @@
1
+ import { MetricsCardItem } from './metrics-card-item.interface';
2
+ import * as i0 from "@angular/core";
3
+ export declare class MetricsBlockComponent {
4
+ item: MetricsCardItem;
5
+ progress: string;
6
+ layout: string;
7
+ itemslength: string;
8
+ formatPercent(value?: number): string;
9
+ percentClass(value?: number): string;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<MetricsBlockComponent, never>;
11
+ static ɵcmp: i0.ɵɵComponentDeclaration<MetricsBlockComponent, "cqa-metrics-block", never, { "item": "item"; "progress": "progress"; "layout": "layout"; "itemslength": "itemslength"; }, {}, never, never>;
12
+ }
@@ -0,0 +1,12 @@
1
+ export interface MetricsCardItem {
2
+ id?: string;
3
+ label: string;
4
+ value: number;
5
+ max?: number;
6
+ icon?: string;
7
+ colorClass?: string;
8
+ accentBgClass?: string;
9
+ iconColorClass?: string;
10
+ subtext?: string;
11
+ percent?: number;
12
+ }
@@ -0,0 +1,17 @@
1
+ import { MetricsCardItem } from './metrics-card-item.interface';
2
+ import * as i0 from "@angular/core";
3
+ export declare class MetricsCardComponent {
4
+ icon: string;
5
+ title: string;
6
+ total: number | string;
7
+ items: MetricsCardItem[];
8
+ cardClass: string;
9
+ layout: string;
10
+ totalPercent?: number;
11
+ progressWidth(item: MetricsCardItem): string;
12
+ private inferMax;
13
+ formatPercent(value?: number): string;
14
+ percentClass(value?: number): string;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<MetricsCardComponent, never>;
16
+ static ɵcmp: i0.ɵɵComponentDeclaration<MetricsCardComponent, "cqa-metrics-card", never, { "icon": "icon"; "title": "title"; "total": "total"; "items": "items"; "cardClass": "cardClass"; "layout": "layout"; "totalPercent": "totalPercent"; }, {}, never, never>;
17
+ }
@@ -0,0 +1,13 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class ProgressTextCardComponent {
3
+ value: number;
4
+ label: string;
5
+ deltaPercent?: number;
6
+ deltaSuffix: string;
7
+ cardClass: string;
8
+ get percentText(): string;
9
+ get fillWidth(): string;
10
+ deltaClass(): string;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<ProgressTextCardComponent, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<ProgressTextCardComponent, "cqa-progress-text-card", never, { "value": "value"; "label": "label"; "deltaPercent": "deltaPercent"; "deltaSuffix": "deltaSuffix"; "cardClass": "cardClass"; }, {}, never, never>;
13
+ }
@@ -0,0 +1,29 @@
1
+ import * as i0 from "@angular/core";
2
+ export interface DistributionSegment {
3
+ label: string;
4
+ value: number;
5
+ /** Tailwind-like class or hex bg color */
6
+ colorClass?: string;
7
+ }
8
+ export interface DistributionChildItem {
9
+ label: string;
10
+ value: number;
11
+ colorClass?: string;
12
+ }
13
+ export interface DistributionItem {
14
+ icon?: string;
15
+ label: string;
16
+ value: number;
17
+ colorClass?: string;
18
+ children?: DistributionChildItem[];
19
+ }
20
+ export declare class TestDistributionCardComponent {
21
+ title: string;
22
+ segments: DistributionSegment[];
23
+ items: DistributionItem[];
24
+ totalSegments(): number;
25
+ segmentWidth(segment: DistributionSegment): string;
26
+ segmentColor(segment: DistributionSegment, fallback: string): string;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<TestDistributionCardComponent, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<TestDistributionCardComponent, "cqa-test-distribution-card", never, { "title": "title"; "segments": "segments"; "items": "items"; }, {}, never, never>;
29
+ }
@@ -0,0 +1,32 @@
1
+ import { EventEmitter, ElementRef } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export interface DropdownOption {
4
+ label: string;
5
+ value: any;
6
+ disabled?: boolean;
7
+ }
8
+ export declare class DropdownButtonComponent {
9
+ label: string;
10
+ options: DropdownOption[];
11
+ selectedValue?: any;
12
+ disabled: boolean;
13
+ placeholder?: string;
14
+ selectionChange: EventEmitter<any>;
15
+ opened: EventEmitter<void>;
16
+ closed: EventEmitter<void>;
17
+ dropdownContainer?: ElementRef;
18
+ buttonElement?: ElementRef;
19
+ isOpen: boolean;
20
+ private clickInside;
21
+ get displayLabel(): string;
22
+ get buttonClasses(): string;
23
+ get labelClasses(): string;
24
+ get arrowClasses(): string;
25
+ toggleDropdown(event?: MouseEvent): void;
26
+ selectOption(option: DropdownOption, event?: MouseEvent): void;
27
+ getButtonWidth(): number;
28
+ getOptionClasses(option: DropdownOption): string;
29
+ onDocumentClick(event: MouseEvent): void;
30
+ static ɵfac: i0.ɵɵFactoryDeclaration<DropdownButtonComponent, never>;
31
+ static ɵcmp: i0.ɵɵComponentDeclaration<DropdownButtonComponent, "cqa-dropdown-button", never, { "label": "label"; "options": "options"; "selectedValue": "selectedValue"; "disabled": "disabled"; "placeholder": "placeholder"; }, { "selectionChange": "selectionChange"; "opened": "opened"; "closed": "closed"; }, never, never>;
32
+ }
@@ -0,0 +1,43 @@
1
+ import { OnInit, OnChanges, SimpleChanges, ElementRef } from '@angular/core';
2
+ import { FormGroup } from '@angular/forms';
3
+ import { MatSelect } from '@angular/material/select';
4
+ import * as i0 from "@angular/core";
5
+ export interface SelectOption {
6
+ id?: any;
7
+ value?: any;
8
+ name?: string;
9
+ label?: string;
10
+ }
11
+ export interface DynamicSelectFieldConfig {
12
+ key: string;
13
+ label?: string;
14
+ placeholder?: string;
15
+ disabled?: boolean;
16
+ multiple?: boolean;
17
+ searchable?: boolean;
18
+ /** If true, close the panel when an option is selected (useful for multi-select in headers). */
19
+ closeOnSelect?: boolean;
20
+ options: SelectOption[];
21
+ }
22
+ export declare class DynamicSelectFieldComponent implements OnInit, OnChanges {
23
+ form: FormGroup;
24
+ config: DynamicSelectFieldConfig;
25
+ selectRef?: MatSelect;
26
+ hostEl?: ElementRef<HTMLElement>;
27
+ searchTextByKey: Record<string, string>;
28
+ private outsideCleanup?;
29
+ ngOnInit(): void;
30
+ ngOnChanges(changes: SimpleChanges): void;
31
+ get panelClass(): string;
32
+ get isMultiple(): boolean;
33
+ get isDisabled(): boolean;
34
+ private toBoolean;
35
+ private syncControlValueForMultipleMode;
36
+ onSelectOpenedChange(opened: boolean, _select: MatSelect): void;
37
+ onSearch(key: string, value: string): void;
38
+ filteredOptions(c: DynamicSelectFieldConfig): SelectOption[];
39
+ onOptionSelected(select: MatSelect): void;
40
+ handleDocumentClick(event: MouseEvent): void;
41
+ static ɵfac: i0.ɵɵFactoryDeclaration<DynamicSelectFieldComponent, never>;
42
+ static ɵcmp: i0.ɵɵComponentDeclaration<DynamicSelectFieldComponent, "cqa-dynamic-select", never, { "form": "form"; "config": "config"; }, {}, never, never>;
43
+ }
@@ -0,0 +1,20 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export interface EmptyStateAction {
4
+ label: string;
5
+ variant?: 'filled' | 'outlined' | 'text' | 'elevated' | 'tonal';
6
+ icon?: string;
7
+ iconPosition?: 'start' | 'end';
8
+ disabled?: boolean;
9
+ onClick?: () => void;
10
+ }
11
+ export declare class EmptyStateComponent {
12
+ imageUrl?: string;
13
+ title: string;
14
+ description: string;
15
+ actions: EmptyStateAction[];
16
+ actionClick: EventEmitter<EmptyStateAction>;
17
+ onActionClick(action: EmptyStateAction, event: MouseEvent): void;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<EmptyStateComponent, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<EmptyStateComponent, "cqa-empty-state", never, { "imageUrl": "imageUrl"; "title": "title"; "description": "description"; "actions": "actions"; }, { "actionClick": "actionClick"; }, never, never>;
20
+ }
@@ -0,0 +1,56 @@
1
+ import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
2
+ import { FormBuilder, FormGroup } from '@angular/forms';
3
+ import { DynamicSelectFieldConfig } from '../../dynamic-select/dynamic-select-field.component';
4
+ import * as i0 from "@angular/core";
5
+ declare type FilterType = 'select' | 'date-range';
6
+ export interface DynamicFilterOption {
7
+ id?: number | string;
8
+ name?: string;
9
+ value?: any;
10
+ label?: string;
11
+ }
12
+ export interface DynamicFilterItem {
13
+ label: string;
14
+ placeholder?: string;
15
+ type: FilterType;
16
+ key: string;
17
+ options?: DynamicFilterOption[];
18
+ multiple?: boolean;
19
+ disabled?: boolean;
20
+ hidden?: boolean;
21
+ searchable?: boolean;
22
+ }
23
+ export interface DynamicFilterValues {
24
+ [key: string]: any;
25
+ }
26
+ export declare class DynamicFilterComponent implements OnChanges {
27
+ private readonly fb;
28
+ config: DynamicFilterItem[];
29
+ model: DynamicFilterValues;
30
+ showFilterPanel: boolean;
31
+ filtersApplied: EventEmitter<DynamicFilterValues>;
32
+ filtersChanged: EventEmitter<DynamicFilterValues>;
33
+ resetAction: EventEmitter<void>;
34
+ form: FormGroup;
35
+ maxDate: Date;
36
+ searchTextByKey: Record<string, string>;
37
+ private selectOutsideCleanup;
38
+ constructor(fb: FormBuilder);
39
+ ngOnChanges(changes: SimpleChanges): void;
40
+ onDateChange(event: any, key: string): void;
41
+ private buildForm;
42
+ onSelectOpenedChange(opened: boolean, select: any): void;
43
+ onSearch(key: string, text: string): void;
44
+ filteredOptions(item: DynamicFilterItem): DynamicFilterOption[];
45
+ getDateGroup(key: string): FormGroup;
46
+ getSelectConfig(item: DynamicFilterItem): DynamicSelectFieldConfig;
47
+ apply(): void;
48
+ reset(): void;
49
+ private serialize;
50
+ applyPresetToGroup(key: string, presetKey: 'today' | 'last7days' | 'last30days' | 'last90days' | 'thismonth' | 'lastmonth'): void;
51
+ private getPresetDates;
52
+ getDateValidationError(key: string): string | null;
53
+ static ɵfac: i0.ɵɵFactoryDeclaration<DynamicFilterComponent, never>;
54
+ static ɵcmp: i0.ɵɵComponentDeclaration<DynamicFilterComponent, "cqa-dynamic-filter", never, { "config": "config"; "model": "model"; "showFilterPanel": "showFilterPanel"; }, { "filtersApplied": "filtersApplied"; "filtersChanged": "filtersChanged"; "resetAction": "resetAction"; }, never, never>;
55
+ }
56
+ export {};
@@ -0,0 +1,6 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class FullTableLoaderComponent {
3
+ label: string;
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<FullTableLoaderComponent, never>;
5
+ static ɵcmp: i0.ɵɵComponentDeclaration<FullTableLoaderComponent, "cqa-full-table-loader", never, { "label": "label"; }, {}, never, never>;
6
+ }
@@ -0,0 +1,12 @@
1
+ import { MatTooltip } from "@angular/material/tooltip";
2
+ import * as i0 from "@angular/core";
3
+ export declare class InlineSortComponent {
4
+ ascending?: boolean;
5
+ heading?: string;
6
+ tooltipDiv?: MatTooltip;
7
+ toolTip: any;
8
+ get getToolTip(): "message.common.sort_by.old" | "message.common.sort_by.ascending" | "message.common.sort_by.new" | "message.common.sort_by.descending" | "message.common.sort";
9
+ ngOnChanges(): void;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<InlineSortComponent, never>;
11
+ static ɵcmp: i0.ɵɵComponentDeclaration<InlineSortComponent, "app-inline-sort, cqa-inline-sort", never, { "ascending": "ascending"; "heading": "heading"; }, {}, never, never>;
12
+ }
@@ -0,0 +1,37 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export interface OtherButtonItem {
4
+ label: string;
5
+ icon?: string;
6
+ classes?: string | string[] | Record<string, boolean>;
7
+ colorClass?: string | string[] | Record<string, boolean>;
8
+ disabled?: boolean;
9
+ type?: 'button' | 'submit' | 'reset';
10
+ value?: any;
11
+ }
12
+ export declare class OtherButtonComponent {
13
+ icon: string;
14
+ label: string;
15
+ classes: string | string[] | Record<string, boolean>;
16
+ colorClass: string | string[] | Record<string, boolean>;
17
+ buttonClass: string;
18
+ disabled: boolean;
19
+ type: 'button' | 'submit' | 'reset';
20
+ buttons: OtherButtonItem[] | null;
21
+ /** Extra classes for the button group container */
22
+ groupClass: string | string[] | Record<string, boolean>;
23
+ /** Gap utility class; defaults to Tailwind spacing applied in template */
24
+ gapClass: string;
25
+ /** When true, allows wrapping to next line on smaller screens */
26
+ wrap: boolean;
27
+ clicked: EventEmitter<MouseEvent>;
28
+ /** Emits the config of the clicked button in a group, along with the event */
29
+ buttonClick: EventEmitter<{
30
+ event: MouseEvent;
31
+ item: OtherButtonItem;
32
+ }>;
33
+ onClick(event: MouseEvent): void;
34
+ onItemClick(event: MouseEvent, item: OtherButtonItem): void;
35
+ static ɵfac: i0.ɵɵFactoryDeclaration<OtherButtonComponent, never>;
36
+ static ɵcmp: i0.ɵɵComponentDeclaration<OtherButtonComponent, "cqa-other-button", never, { "icon": "icon"; "label": "label"; "classes": "classes"; "colorClass": "colorClass"; "buttonClass": "buttonClass"; "disabled": "disabled"; "type": "type"; "buttons": "buttons"; "groupClass": "groupClass"; "gapClass": "gapClass"; "wrap": "wrap"; }, { "clicked": "clicked"; "buttonClick": "buttonClick"; }, never, never>;
37
+ }