@memberjunction/ng-dashboards 6.2.0-edge.1 → 6.2.0-edge.2

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 (82) hide show
  1. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -1
  2. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +3 -1
  3. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -1
  4. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -1
  5. package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1 -2
  6. package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -1
  7. package/dist/AI/components/rubric-drift-series.d.ts +32 -0
  8. package/dist/AI/components/rubric-drift-series.d.ts.map +1 -0
  9. package/dist/AI/components/rubric-drift-series.js +49 -0
  10. package/dist/AI/components/rubric-drift-series.js.map +1 -0
  11. package/dist/AI/components/rubric-drift.component.d.ts +42 -0
  12. package/dist/AI/components/rubric-drift.component.d.ts.map +1 -0
  13. package/dist/AI/components/rubric-drift.component.js +197 -0
  14. package/dist/AI/components/rubric-drift.component.js.map +1 -0
  15. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  16. package/dist/AI/components/tags/tags-resource.component.js +4 -3
  17. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  18. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  19. package/dist/AI/components/vectors/vector-management-resource.component.js +5 -2
  20. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  21. package/dist/Integration/components/connections/connections.component.d.ts +5 -0
  22. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
  23. package/dist/Integration/components/connections/connections.component.js +151 -136
  24. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  25. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
  26. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +3 -2
  27. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  28. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.d.ts +11 -0
  29. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.d.ts.map +1 -1
  30. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.js +17 -1
  31. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.js.map +1 -1
  32. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js +52 -45
  33. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js.map +1 -1
  34. package/dist/QueryBrowser/query-browser-resource.component.d.ts +11 -0
  35. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  36. package/dist/QueryBrowser/query-browser-resource.component.js +47 -10
  37. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  38. package/dist/Rubrics/catalog-grid.d.ts +4 -0
  39. package/dist/Rubrics/catalog-grid.d.ts.map +1 -0
  40. package/dist/Rubrics/catalog-grid.js +22 -0
  41. package/dist/Rubrics/catalog-grid.js.map +1 -0
  42. package/dist/Rubrics/rubrics-dashboard.component.d.ts +31 -0
  43. package/dist/Rubrics/rubrics-dashboard.component.d.ts.map +1 -0
  44. package/dist/Rubrics/rubrics-dashboard.component.js +285 -0
  45. package/dist/Rubrics/rubrics-dashboard.component.js.map +1 -0
  46. package/dist/Rubrics/rubrics-resource.component.d.ts +13 -0
  47. package/dist/Rubrics/rubrics-resource.component.d.ts.map +1 -0
  48. package/dist/Rubrics/rubrics-resource.component.js +42 -0
  49. package/dist/Rubrics/rubrics-resource.component.js.map +1 -0
  50. package/dist/Rubrics/scales-dashboard.component.d.ts +34 -0
  51. package/dist/Rubrics/scales-dashboard.component.d.ts.map +1 -0
  52. package/dist/Rubrics/scales-dashboard.component.js +204 -0
  53. package/dist/Rubrics/scales-dashboard.component.js.map +1 -0
  54. package/dist/Rubrics/scales-resource.component.d.ts +13 -0
  55. package/dist/Rubrics/scales-resource.component.d.ts.map +1 -0
  56. package/dist/Rubrics/scales-resource.component.js +42 -0
  57. package/dist/Rubrics/scales-resource.component.js.map +1 -0
  58. package/dist/Testing/components/testing-analytics.component.d.ts +15 -0
  59. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  60. package/dist/Testing/components/testing-analytics.component.js +465 -296
  61. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  62. package/dist/Testing/components/testing-review.component.d.ts +6 -0
  63. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  64. package/dist/Testing/components/testing-review.component.js +289 -173
  65. package/dist/Testing/components/testing-review.component.js.map +1 -1
  66. package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts +8 -1
  67. package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts.map +1 -1
  68. package/dist/Testing/components/widgets/test-run-detail-panel.component.js +68 -43
  69. package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -1
  70. package/dist/module.d.ts +23 -22
  71. package/dist/module.d.ts.map +1 -1
  72. package/dist/module.js +7 -0
  73. package/dist/module.js.map +1 -1
  74. package/dist/public-api.d.ts +1 -0
  75. package/dist/public-api.d.ts.map +1 -1
  76. package/dist/public-api.js +1 -0
  77. package/dist/public-api.js.map +1 -1
  78. package/dist/rubrics-dashboards.module.d.ts +17 -0
  79. package/dist/rubrics-dashboards.module.d.ts.map +1 -0
  80. package/dist/rubrics-dashboards.module.js +76 -0
  81. package/dist/rubrics-dashboards.module.js.map +1 -0
  82. package/package.json +70 -64
@@ -1,14 +1,18 @@
1
1
  import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
2
2
  import { Subject } from 'rxjs';
3
3
  import { takeUntil, map, shareReplay } from 'rxjs/operators';
4
+ import { CompositeKey, RunView } from '@memberjunction/core';
5
+ import { SharedService } from '@memberjunction/ng-shared';
6
+ import { CriterionFailureRates, CriterionIdentity, RubricScoreTrend } from '@memberjunction/ng-testing';
4
7
  import * as i0 from "@angular/core";
5
8
  import * as i1 from "../services/testing-instrumentation.service";
6
9
  import * as i2 from "@angular/common";
7
10
  import * as i3 from "@memberjunction/ng-ui-components";
8
11
  const _forTrack0 = ($index, $item) => $item.days;
9
- const _forTrack1 = ($index, $item) => $item.testName;
10
- const _forTrack2 = ($index, $item) => $item.label;
11
- const _forTrack3 = ($index, $item) => $item.version;
12
+ const _forTrack1 = ($index, $item) => $item.key;
13
+ const _forTrack2 = ($index, $item) => $item.testName;
14
+ const _forTrack3 = ($index, $item) => $item.label;
15
+ const _forTrack4 = ($index, $item) => $item.version;
12
16
  function TestingAnalyticsComponent_Conditional_0_ng_container_0_Template(rf, ctx) { if (rf & 1) {
13
17
  i0.ɵɵelementContainer(0);
14
18
  } }
@@ -50,482 +54,548 @@ function TestingAnalyticsComponent_Conditional_1_Template(rf, ctx) { if (rf & 1)
50
54
  i0.ɵɵadvance(4);
51
55
  i0.ɵɵproperty("ngTemplateOutlet", content_r1);
52
56
  } }
53
- function TestingAnalyticsComponent_ng_template_2_Conditional_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
54
- i0.ɵɵelement(0, "mj-empty-state", 30);
57
+ function TestingAnalyticsComponent_ng_template_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
58
+ i0.ɵɵelementStart(0, "p", 8);
59
+ i0.ɵɵtext(1);
60
+ i0.ɵɵelementEnd();
61
+ } if (rf & 2) {
62
+ const ctx_r4 = i0.ɵɵnextContext(2);
63
+ i0.ɵɵadvance();
64
+ i0.ɵɵtextInterpolate(ctx_r4.RubricAnalyticsError);
65
+ } }
66
+ function TestingAnalyticsComponent_ng_template_2_Conditional_2_For_4_Conditional_2_Template(rf, ctx) { if (rf & 1) {
67
+ const _r6 = i0.ɵɵgetCurrentView();
68
+ i0.ɵɵelementStart(0, "button", 33);
69
+ i0.ɵɵlistener("click", function TestingAnalyticsComponent_ng_template_2_Conditional_2_For_4_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const point_r7 = i0.ɵɵnextContext().$implicit; const ctx_r4 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r4.OpenRun(point_r7.runId)); });
70
+ i0.ɵɵtext(1, "Open run");
71
+ i0.ɵɵelementEnd();
72
+ } }
73
+ function TestingAnalyticsComponent_ng_template_2_Conditional_2_For_4_Template(rf, ctx) { if (rf & 1) {
74
+ i0.ɵɵelementStart(0, "p");
75
+ i0.ɵɵtext(1);
76
+ i0.ɵɵconditionalCreate(2, TestingAnalyticsComponent_ng_template_2_Conditional_2_For_4_Conditional_2_Template, 2, 0, "button", 32);
77
+ i0.ɵɵelementEnd();
78
+ } if (rf & 2) {
79
+ const point_r7 = ctx.$implicit;
80
+ i0.ɵɵadvance();
81
+ i0.ɵɵtextInterpolate2(" ", point_r7.at, " \u2014 ", point_r7.score, " ");
82
+ i0.ɵɵadvance();
83
+ i0.ɵɵconditional(point_r7.runId ? 2 : -1);
84
+ } }
85
+ function TestingAnalyticsComponent_ng_template_2_Conditional_2_For_6_Template(rf, ctx) { if (rf & 1) {
86
+ i0.ɵɵelementStart(0, "p");
87
+ i0.ɵɵtext(1, "CriterionKey ");
88
+ i0.ɵɵelementStart(2, "code");
89
+ i0.ɵɵtext(3);
90
+ i0.ɵɵelementEnd();
91
+ i0.ɵɵtext(4);
92
+ i0.ɵɵelementEnd();
93
+ } if (rf & 2) {
94
+ const rate_r8 = ctx.$implicit;
95
+ i0.ɵɵadvance(3);
96
+ i0.ɵɵtextInterpolate(rate_r8.key);
97
+ i0.ɵɵadvance();
98
+ i0.ɵɵtextInterpolate1(" \u2014 ", rate_r8.rate);
55
99
  } }
56
- function TestingAnalyticsComponent_ng_template_2_Conditional_9_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
57
- i0.ɵɵelementStart(0, "div", 32)(1, "span", 34);
100
+ function TestingAnalyticsComponent_ng_template_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
101
+ i0.ɵɵelementStart(0, "div", 9);
102
+ i0.ɵɵelement(1, "i", 31);
103
+ i0.ɵɵtext(2, " Rubric scores ");
104
+ i0.ɵɵelementEnd();
105
+ i0.ɵɵrepeaterCreate(3, TestingAnalyticsComponent_ng_template_2_Conditional_2_For_4_Template, 3, 3, "p", null, i0.ɵɵrepeaterTrackByIndex);
106
+ i0.ɵɵrepeaterCreate(5, TestingAnalyticsComponent_ng_template_2_Conditional_2_For_6_Template, 5, 2, "p", null, _forTrack1);
107
+ } if (rf & 2) {
108
+ const ctx_r4 = i0.ɵɵnextContext(2);
109
+ i0.ɵɵadvance(3);
110
+ i0.ɵɵrepeater(ctx_r4.RubricTrend);
111
+ i0.ɵɵadvance(2);
112
+ i0.ɵɵrepeater(ctx_r4.FailureRates);
113
+ } }
114
+ function TestingAnalyticsComponent_ng_template_2_Conditional_11_Conditional_0_Template(rf, ctx) { if (rf & 1) {
115
+ i0.ɵɵelement(0, "mj-empty-state", 34);
116
+ } }
117
+ function TestingAnalyticsComponent_ng_template_2_Conditional_11_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
118
+ i0.ɵɵelementStart(0, "div", 36)(1, "span", 38);
58
119
  i0.ɵɵtext(2);
59
120
  i0.ɵɵelementEnd();
60
- i0.ɵɵelementStart(3, "div", 35);
61
- i0.ɵɵelement(4, "div", 36);
121
+ i0.ɵɵelementStart(3, "div", 39);
122
+ i0.ɵɵelement(4, "div", 40);
62
123
  i0.ɵɵelementEnd();
63
- i0.ɵɵelementStart(5, "span", 37);
124
+ i0.ɵɵelementStart(5, "span", 41);
64
125
  i0.ɵɵtext(6);
65
126
  i0.ɵɵpipe(7, "number");
66
127
  i0.ɵɵelementEnd()();
67
128
  } if (rf & 2) {
68
- const t_r6 = ctx.$implicit;
129
+ const t_r9 = ctx.$implicit;
69
130
  const ctx_r4 = i0.ɵɵnextContext(4);
70
131
  i0.ɵɵadvance(2);
71
- i0.ɵɵtextInterpolate(ctx_r4.FormatBucketDate(t_r6.timestamp));
132
+ i0.ɵɵtextInterpolate(ctx_r4.FormatBucketDate(t_r9.timestamp));
72
133
  i0.ɵɵadvance(2);
73
- i0.ɵɵstyleProp("width", ctx_r4.PassRate(t_r6), "%");
134
+ i0.ɵɵstyleProp("width", ctx_r4.PassRate(t_r9), "%");
74
135
  i0.ɵɵadvance();
75
- i0.ɵɵclassMap(ctx_r4.PassRateClass(t_r6));
136
+ i0.ɵɵclassMap(ctx_r4.PassRateClass(t_r9));
76
137
  i0.ɵɵadvance();
77
- i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(7, 6, ctx_r4.PassRate(t_r6), "1.0-0"), "%");
138
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(7, 6, ctx_r4.PassRate(t_r9), "1.0-0"), "%");
78
139
  } }
79
- function TestingAnalyticsComponent_ng_template_2_Conditional_9_Conditional_1_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
80
- i0.ɵɵelement(0, "i", 38);
81
- i0.ɵɵelementStart(1, "span", 39);
140
+ function TestingAnalyticsComponent_ng_template_2_Conditional_11_Conditional_1_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
141
+ i0.ɵɵelement(0, "i", 42);
142
+ i0.ɵɵelementStart(1, "span", 43);
82
143
  i0.ɵɵtext(2, "Improving");
83
144
  i0.ɵɵelementEnd();
84
145
  } }
85
- function TestingAnalyticsComponent_ng_template_2_Conditional_9_Conditional_1_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
86
- i0.ɵɵelement(0, "i", 40);
87
- i0.ɵɵelementStart(1, "span", 41);
146
+ function TestingAnalyticsComponent_ng_template_2_Conditional_11_Conditional_1_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
147
+ i0.ɵɵelement(0, "i", 44);
148
+ i0.ɵɵelementStart(1, "span", 45);
88
149
  i0.ɵɵtext(2, "Declining");
89
150
  i0.ɵɵelementEnd();
90
151
  } }
91
- function TestingAnalyticsComponent_ng_template_2_Conditional_9_Conditional_1_Conditional_4_Conditional_2_Template(rf, ctx) { if (rf & 1) {
92
- i0.ɵɵelement(0, "i", 42);
93
- i0.ɵɵelementStart(1, "span", 43);
152
+ function TestingAnalyticsComponent_ng_template_2_Conditional_11_Conditional_1_Conditional_4_Conditional_2_Template(rf, ctx) { if (rf & 1) {
153
+ i0.ɵɵelement(0, "i", 46);
154
+ i0.ɵɵelementStart(1, "span", 47);
94
155
  i0.ɵɵtext(2, "Stable");
95
156
  i0.ɵɵelementEnd();
96
157
  } }
97
- function TestingAnalyticsComponent_ng_template_2_Conditional_9_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
98
- i0.ɵɵconditionalCreate(0, TestingAnalyticsComponent_ng_template_2_Conditional_9_Conditional_1_Conditional_4_Conditional_0_Template, 3, 0)(1, TestingAnalyticsComponent_ng_template_2_Conditional_9_Conditional_1_Conditional_4_Conditional_1_Template, 3, 0)(2, TestingAnalyticsComponent_ng_template_2_Conditional_9_Conditional_1_Conditional_4_Conditional_2_Template, 3, 0);
158
+ function TestingAnalyticsComponent_ng_template_2_Conditional_11_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
159
+ i0.ɵɵconditionalCreate(0, TestingAnalyticsComponent_ng_template_2_Conditional_11_Conditional_1_Conditional_4_Conditional_0_Template, 3, 0)(1, TestingAnalyticsComponent_ng_template_2_Conditional_11_Conditional_1_Conditional_4_Conditional_1_Template, 3, 0)(2, TestingAnalyticsComponent_ng_template_2_Conditional_11_Conditional_1_Conditional_4_Conditional_2_Template, 3, 0);
99
160
  } if (rf & 2) {
100
- const dir_r7 = ctx;
101
- i0.ɵɵconditional(dir_r7 === "up" ? 0 : dir_r7 === "down" ? 1 : 2);
161
+ const dir_r10 = ctx;
162
+ i0.ɵɵconditional(dir_r10 === "up" ? 0 : dir_r10 === "down" ? 1 : 2);
102
163
  } }
103
- function TestingAnalyticsComponent_ng_template_2_Conditional_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
104
- i0.ɵɵelementStart(0, "div", 31);
105
- i0.ɵɵrepeaterCreate(1, TestingAnalyticsComponent_ng_template_2_Conditional_9_Conditional_1_For_2_Template, 8, 9, "div", 32, i0.ɵɵcomponentInstance().trackTrend, true);
164
+ function TestingAnalyticsComponent_ng_template_2_Conditional_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
165
+ i0.ɵɵelementStart(0, "div", 35);
166
+ i0.ɵɵrepeaterCreate(1, TestingAnalyticsComponent_ng_template_2_Conditional_11_Conditional_1_For_2_Template, 8, 9, "div", 36, i0.ɵɵcomponentInstance().trackTrend, true);
106
167
  i0.ɵɵelementEnd();
107
- i0.ɵɵelementStart(3, "div", 33);
108
- i0.ɵɵconditionalCreate(4, TestingAnalyticsComponent_ng_template_2_Conditional_9_Conditional_1_Conditional_4_Template, 3, 1);
168
+ i0.ɵɵelementStart(3, "div", 37);
169
+ i0.ɵɵconditionalCreate(4, TestingAnalyticsComponent_ng_template_2_Conditional_11_Conditional_1_Conditional_4_Template, 3, 1);
109
170
  i0.ɵɵpipe(5, "async");
110
171
  i0.ɵɵelementEnd();
111
172
  } if (rf & 2) {
112
173
  let tmp_6_0;
113
- const trends_r8 = i0.ɵɵnextContext();
174
+ const trends_r11 = i0.ɵɵnextContext();
114
175
  const ctx_r4 = i0.ɵɵnextContext(2);
115
176
  i0.ɵɵadvance();
116
- i0.ɵɵrepeater(trends_r8);
177
+ i0.ɵɵrepeater(trends_r11);
117
178
  i0.ɵɵadvance(3);
118
179
  i0.ɵɵconditional((tmp_6_0 = i0.ɵɵpipeBind1(5, 1, ctx_r4.PassRateTrendDirection$)) ? 4 : -1, tmp_6_0);
119
180
  } }
120
- function TestingAnalyticsComponent_ng_template_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
121
- i0.ɵɵconditionalCreate(0, TestingAnalyticsComponent_ng_template_2_Conditional_9_Conditional_0_Template, 1, 0, "mj-empty-state", 30)(1, TestingAnalyticsComponent_ng_template_2_Conditional_9_Conditional_1_Template, 6, 3);
181
+ function TestingAnalyticsComponent_ng_template_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
182
+ i0.ɵɵconditionalCreate(0, TestingAnalyticsComponent_ng_template_2_Conditional_11_Conditional_0_Template, 1, 0, "mj-empty-state", 34)(1, TestingAnalyticsComponent_ng_template_2_Conditional_11_Conditional_1_Template, 6, 3);
122
183
  } if (rf & 2) {
123
184
  i0.ɵɵconditional(ctx.length === 0 ? 0 : 1);
124
185
  } }
125
- function TestingAnalyticsComponent_ng_template_2_Conditional_15_Conditional_0_Template(rf, ctx) { if (rf & 1) {
126
- i0.ɵɵelement(0, "mj-empty-state", 44);
186
+ function TestingAnalyticsComponent_ng_template_2_Conditional_17_Conditional_0_Template(rf, ctx) { if (rf & 1) {
187
+ i0.ɵɵelement(0, "mj-empty-state", 48);
127
188
  } }
128
- function TestingAnalyticsComponent_ng_template_2_Conditional_15_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
129
- i0.ɵɵelementStart(0, "div", 32)(1, "span", 34);
189
+ function TestingAnalyticsComponent_ng_template_2_Conditional_17_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
190
+ i0.ɵɵelementStart(0, "div", 36)(1, "span", 38);
130
191
  i0.ɵɵtext(2);
131
192
  i0.ɵɵelementEnd();
132
- i0.ɵɵelementStart(3, "div", 49);
133
- i0.ɵɵelement(4, "div", 50)(5, "div", 51)(6, "div", 52);
193
+ i0.ɵɵelementStart(3, "div", 53);
194
+ i0.ɵɵelement(4, "div", 54)(5, "div", 55)(6, "div", 56);
134
195
  i0.ɵɵelementEnd();
135
- i0.ɵɵelementStart(7, "span", 37);
196
+ i0.ɵɵelementStart(7, "span", 41);
136
197
  i0.ɵɵtext(8);
137
198
  i0.ɵɵelementEnd()();
138
199
  } if (rf & 2) {
139
- const t_r9 = ctx.$implicit;
200
+ const t_r12 = ctx.$implicit;
140
201
  const ctx_r4 = i0.ɵɵnextContext(4);
141
202
  i0.ɵɵadvance(2);
142
- i0.ɵɵtextInterpolate(ctx_r4.FormatBucketDate(t_r9.timestamp));
203
+ i0.ɵɵtextInterpolate(ctx_r4.FormatBucketDate(t_r12.timestamp));
143
204
  i0.ɵɵadvance(2);
144
- i0.ɵɵstyleProp("width", ctx_r4.SegmentPct(t_r9, "passed"), "%");
205
+ i0.ɵɵstyleProp("width", ctx_r4.SegmentPct(t_r12, "passed"), "%");
145
206
  i0.ɵɵadvance();
146
- i0.ɵɵstyleProp("width", ctx_r4.SegmentPct(t_r9, "failed"), "%");
207
+ i0.ɵɵstyleProp("width", ctx_r4.SegmentPct(t_r12, "failed"), "%");
147
208
  i0.ɵɵadvance();
148
- i0.ɵɵstyleProp("width", ctx_r4.SegmentPct(t_r9, "skipped"), "%");
209
+ i0.ɵɵstyleProp("width", ctx_r4.SegmentPct(t_r12, "skipped"), "%");
149
210
  i0.ɵɵadvance(2);
150
- i0.ɵɵtextInterpolate(t_r9.totalRuns);
211
+ i0.ɵɵtextInterpolate(t_r12.totalRuns);
151
212
  } }
152
- function TestingAnalyticsComponent_ng_template_2_Conditional_15_Conditional_1_Template(rf, ctx) { if (rf & 1) {
153
- i0.ɵɵelementStart(0, "div", 31);
154
- i0.ɵɵrepeaterCreate(1, TestingAnalyticsComponent_ng_template_2_Conditional_15_Conditional_1_For_2_Template, 9, 8, "div", 32, i0.ɵɵcomponentInstance().trackTrend, true);
213
+ function TestingAnalyticsComponent_ng_template_2_Conditional_17_Conditional_1_Template(rf, ctx) { if (rf & 1) {
214
+ i0.ɵɵelementStart(0, "div", 35);
215
+ i0.ɵɵrepeaterCreate(1, TestingAnalyticsComponent_ng_template_2_Conditional_17_Conditional_1_For_2_Template, 9, 8, "div", 36, i0.ɵɵcomponentInstance().trackTrend, true);
155
216
  i0.ɵɵelementEnd();
156
- i0.ɵɵelementStart(3, "div", 45);
157
- i0.ɵɵelement(4, "span", 46);
217
+ i0.ɵɵelementStart(3, "div", 49);
218
+ i0.ɵɵelement(4, "span", 50);
158
219
  i0.ɵɵtext(5, " Passed ");
159
- i0.ɵɵelement(6, "span", 47);
220
+ i0.ɵɵelement(6, "span", 51);
160
221
  i0.ɵɵtext(7, " Failed ");
161
- i0.ɵɵelement(8, "span", 48);
222
+ i0.ɵɵelement(8, "span", 52);
162
223
  i0.ɵɵtext(9, " Skipped ");
163
224
  i0.ɵɵelementEnd();
164
225
  } if (rf & 2) {
165
- const trends_r10 = i0.ɵɵnextContext();
226
+ const trends_r13 = i0.ɵɵnextContext();
166
227
  i0.ɵɵadvance();
167
- i0.ɵɵrepeater(trends_r10);
228
+ i0.ɵɵrepeater(trends_r13);
168
229
  } }
169
- function TestingAnalyticsComponent_ng_template_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
170
- i0.ɵɵconditionalCreate(0, TestingAnalyticsComponent_ng_template_2_Conditional_15_Conditional_0_Template, 1, 0, "mj-empty-state", 44)(1, TestingAnalyticsComponent_ng_template_2_Conditional_15_Conditional_1_Template, 10, 0);
230
+ function TestingAnalyticsComponent_ng_template_2_Conditional_17_Template(rf, ctx) { if (rf & 1) {
231
+ i0.ɵɵconditionalCreate(0, TestingAnalyticsComponent_ng_template_2_Conditional_17_Conditional_0_Template, 1, 0, "mj-empty-state", 48)(1, TestingAnalyticsComponent_ng_template_2_Conditional_17_Conditional_1_Template, 10, 0);
171
232
  } if (rf & 2) {
172
233
  i0.ɵɵconditional(ctx.length === 0 ? 0 : 1);
173
234
  } }
174
- function TestingAnalyticsComponent_ng_template_2_Conditional_21_Conditional_0_Template(rf, ctx) { if (rf & 1) {
175
- i0.ɵɵelement(0, "mj-empty-state", 53);
235
+ function TestingAnalyticsComponent_ng_template_2_Conditional_23_Conditional_0_Template(rf, ctx) { if (rf & 1) {
236
+ i0.ɵɵelement(0, "mj-empty-state", 57);
176
237
  } }
177
- function TestingAnalyticsComponent_ng_template_2_Conditional_21_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
178
- i0.ɵɵelementStart(0, "div", 32)(1, "span", 34);
238
+ function TestingAnalyticsComponent_ng_template_2_Conditional_23_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
239
+ i0.ɵɵelementStart(0, "div", 36)(1, "span", 38);
179
240
  i0.ɵɵtext(2);
180
241
  i0.ɵɵelementEnd();
181
- i0.ɵɵelementStart(3, "div", 35);
182
- i0.ɵɵelement(4, "div", 54);
242
+ i0.ɵɵelementStart(3, "div", 39);
243
+ i0.ɵɵelement(4, "div", 58);
183
244
  i0.ɵɵelementEnd();
184
- i0.ɵɵelementStart(5, "span", 37);
245
+ i0.ɵɵelementStart(5, "span", 41);
185
246
  i0.ɵɵtext(6);
186
247
  i0.ɵɵpipe(7, "number");
187
248
  i0.ɵɵelementEnd()();
188
249
  } if (rf & 2) {
189
- const t_r11 = ctx.$implicit;
250
+ const t_r14 = ctx.$implicit;
190
251
  const ctx_r4 = i0.ɵɵnextContext(4);
191
252
  i0.ɵɵadvance(2);
192
- i0.ɵɵtextInterpolate(ctx_r4.FormatBucketDate(t_r11.timestamp));
253
+ i0.ɵɵtextInterpolate(ctx_r4.FormatBucketDate(t_r14.timestamp));
193
254
  i0.ɵɵadvance(2);
194
- i0.ɵɵclassMap(ctx_r4.ScoreBarClass(t_r11.averageScore));
195
- i0.ɵɵstyleProp("width", t_r11.averageScore * 100, "%");
255
+ i0.ɵɵclassMap(ctx_r4.ScoreBarClass(t_r14.averageScore));
256
+ i0.ɵɵstyleProp("width", t_r14.averageScore * 100, "%");
196
257
  i0.ɵɵadvance();
197
- i0.ɵɵclassMap(ctx_r4.ScoreTextClass(t_r11.averageScore));
258
+ i0.ɵɵclassMap(ctx_r4.ScoreTextClass(t_r14.averageScore));
198
259
  i0.ɵɵadvance();
199
- i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(7, 8, t_r11.averageScore * 100, "1.0-0"), "%");
260
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(7, 8, t_r14.averageScore * 100, "1.0-0"), "%");
200
261
  } }
201
- function TestingAnalyticsComponent_ng_template_2_Conditional_21_Conditional_1_Template(rf, ctx) { if (rf & 1) {
202
- i0.ɵɵelementStart(0, "div", 31);
203
- i0.ɵɵrepeaterCreate(1, TestingAnalyticsComponent_ng_template_2_Conditional_21_Conditional_1_For_2_Template, 8, 11, "div", 32, i0.ɵɵcomponentInstance().trackTrend, true);
262
+ function TestingAnalyticsComponent_ng_template_2_Conditional_23_Conditional_1_Template(rf, ctx) { if (rf & 1) {
263
+ i0.ɵɵelementStart(0, "div", 35);
264
+ i0.ɵɵrepeaterCreate(1, TestingAnalyticsComponent_ng_template_2_Conditional_23_Conditional_1_For_2_Template, 8, 11, "div", 36, i0.ɵɵcomponentInstance().trackTrend, true);
204
265
  i0.ɵɵelementEnd();
205
266
  } if (rf & 2) {
206
- const trends_r12 = i0.ɵɵnextContext();
267
+ const trends_r15 = i0.ɵɵnextContext();
207
268
  i0.ɵɵadvance();
208
- i0.ɵɵrepeater(trends_r12);
269
+ i0.ɵɵrepeater(trends_r15);
209
270
  } }
210
- function TestingAnalyticsComponent_ng_template_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
211
- i0.ɵɵconditionalCreate(0, TestingAnalyticsComponent_ng_template_2_Conditional_21_Conditional_0_Template, 1, 0, "mj-empty-state", 53)(1, TestingAnalyticsComponent_ng_template_2_Conditional_21_Conditional_1_Template, 3, 0, "div", 31);
271
+ function TestingAnalyticsComponent_ng_template_2_Conditional_23_Template(rf, ctx) { if (rf & 1) {
272
+ i0.ɵɵconditionalCreate(0, TestingAnalyticsComponent_ng_template_2_Conditional_23_Conditional_0_Template, 1, 0, "mj-empty-state", 57)(1, TestingAnalyticsComponent_ng_template_2_Conditional_23_Conditional_1_Template, 3, 0, "div", 35);
212
273
  } if (rf & 2) {
213
274
  i0.ɵɵconditional(ctx.length === 0 ? 0 : 1);
214
275
  } }
215
- function TestingAnalyticsComponent_ng_template_2_Conditional_27_Conditional_0_Template(rf, ctx) { if (rf & 1) {
216
- i0.ɵɵelement(0, "mj-empty-state", 55);
276
+ function TestingAnalyticsComponent_ng_template_2_Conditional_29_Conditional_0_Template(rf, ctx) { if (rf & 1) {
277
+ i0.ɵɵelement(0, "mj-empty-state", 59);
217
278
  } }
218
- function TestingAnalyticsComponent_ng_template_2_Conditional_27_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
219
- i0.ɵɵelementStart(0, "div", 32)(1, "span", 34);
279
+ function TestingAnalyticsComponent_ng_template_2_Conditional_29_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
280
+ i0.ɵɵelementStart(0, "div", 36)(1, "span", 38);
220
281
  i0.ɵɵtext(2);
221
282
  i0.ɵɵelementEnd();
222
- i0.ɵɵelementStart(3, "div", 35);
223
- i0.ɵɵelement(4, "div", 56);
283
+ i0.ɵɵelementStart(3, "div", 39);
284
+ i0.ɵɵelement(4, "div", 60);
224
285
  i0.ɵɵelementEnd();
225
- i0.ɵɵelementStart(5, "span", 37);
286
+ i0.ɵɵelementStart(5, "span", 41);
226
287
  i0.ɵɵtext(6);
227
288
  i0.ɵɵpipe(7, "number");
228
289
  i0.ɵɵelementEnd()();
229
290
  } if (rf & 2) {
230
- const t_r13 = ctx.$implicit;
231
- const trends_r14 = i0.ɵɵnextContext(2);
291
+ const t_r16 = ctx.$implicit;
292
+ const trends_r17 = i0.ɵɵnextContext(2);
232
293
  const ctx_r4 = i0.ɵɵnextContext(2);
233
294
  i0.ɵɵadvance(2);
234
- i0.ɵɵtextInterpolate(ctx_r4.FormatBucketDate(t_r13.timestamp));
295
+ i0.ɵɵtextInterpolate(ctx_r4.FormatBucketDate(t_r16.timestamp));
235
296
  i0.ɵɵadvance(2);
236
- i0.ɵɵstyleProp("width", ctx_r4.CostBarPct(t_r13, trends_r14), "%");
297
+ i0.ɵɵstyleProp("width", ctx_r4.CostBarPct(t_r16, trends_r17), "%");
237
298
  i0.ɵɵadvance(2);
238
- i0.ɵɵtextInterpolate1("$", i0.ɵɵpipeBind2(7, 4, t_r13.totalCost, "1.2-2"));
299
+ i0.ɵɵtextInterpolate1("$", i0.ɵɵpipeBind2(7, 4, t_r16.totalCost, "1.2-2"));
239
300
  } }
240
- function TestingAnalyticsComponent_ng_template_2_Conditional_27_Conditional_1_Template(rf, ctx) { if (rf & 1) {
241
- i0.ɵɵelementStart(0, "div", 31);
242
- i0.ɵɵrepeaterCreate(1, TestingAnalyticsComponent_ng_template_2_Conditional_27_Conditional_1_For_2_Template, 8, 7, "div", 32, i0.ɵɵcomponentInstance().trackTrend, true);
301
+ function TestingAnalyticsComponent_ng_template_2_Conditional_29_Conditional_1_Template(rf, ctx) { if (rf & 1) {
302
+ i0.ɵɵelementStart(0, "div", 35);
303
+ i0.ɵɵrepeaterCreate(1, TestingAnalyticsComponent_ng_template_2_Conditional_29_Conditional_1_For_2_Template, 8, 7, "div", 36, i0.ɵɵcomponentInstance().trackTrend, true);
243
304
  i0.ɵɵelementEnd();
244
305
  } if (rf & 2) {
245
- const trends_r14 = i0.ɵɵnextContext();
306
+ const trends_r17 = i0.ɵɵnextContext();
246
307
  i0.ɵɵadvance();
247
- i0.ɵɵrepeater(trends_r14);
308
+ i0.ɵɵrepeater(trends_r17);
248
309
  } }
249
- function TestingAnalyticsComponent_ng_template_2_Conditional_27_Template(rf, ctx) { if (rf & 1) {
250
- i0.ɵɵconditionalCreate(0, TestingAnalyticsComponent_ng_template_2_Conditional_27_Conditional_0_Template, 1, 0, "mj-empty-state", 55)(1, TestingAnalyticsComponent_ng_template_2_Conditional_27_Conditional_1_Template, 3, 0, "div", 31);
310
+ function TestingAnalyticsComponent_ng_template_2_Conditional_29_Template(rf, ctx) { if (rf & 1) {
311
+ i0.ɵɵconditionalCreate(0, TestingAnalyticsComponent_ng_template_2_Conditional_29_Conditional_0_Template, 1, 0, "mj-empty-state", 59)(1, TestingAnalyticsComponent_ng_template_2_Conditional_29_Conditional_1_Template, 3, 0, "div", 35);
251
312
  } if (rf & 2) {
252
313
  i0.ɵɵconditional(ctx.length === 0 ? 0 : 1);
253
314
  } }
254
- function TestingAnalyticsComponent_ng_template_2_Conditional_37_Conditional_0_Template(rf, ctx) { if (rf & 1) {
255
- i0.ɵɵelement(0, "mj-empty-state", 57);
315
+ function TestingAnalyticsComponent_ng_template_2_Conditional_39_Conditional_0_Template(rf, ctx) { if (rf & 1) {
316
+ i0.ɵɵelement(0, "mj-empty-state", 61);
256
317
  } }
257
- function TestingAnalyticsComponent_ng_template_2_Conditional_37_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
258
- i0.ɵɵelementStart(0, "div", 59)(1, "span", 60);
318
+ function TestingAnalyticsComponent_ng_template_2_Conditional_39_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
319
+ i0.ɵɵelementStart(0, "div", 63)(1, "span", 64);
259
320
  i0.ɵɵtext(2);
260
321
  i0.ɵɵelementEnd();
261
- i0.ɵɵelementStart(3, "span", 61);
322
+ i0.ɵɵelementStart(3, "span", 65);
262
323
  i0.ɵɵtext(4);
263
324
  i0.ɵɵelementEnd();
264
- i0.ɵɵelementStart(5, "span", 62);
325
+ i0.ɵɵelementStart(5, "span", 66);
265
326
  i0.ɵɵtext(6);
266
327
  i0.ɵɵpipe(7, "number");
267
328
  i0.ɵɵelementEnd()();
268
329
  } if (rf & 2) {
269
- const t_r15 = ctx.$implicit;
330
+ const t_r18 = ctx.$implicit;
270
331
  i0.ɵɵadvance();
271
- i0.ɵɵproperty("title", t_r15.testName);
332
+ i0.ɵɵproperty("title", t_r18.testName);
272
333
  i0.ɵɵadvance();
273
- i0.ɵɵtextInterpolate(t_r15.testName);
334
+ i0.ɵɵtextInterpolate(t_r18.testName);
274
335
  i0.ɵɵadvance(2);
275
- i0.ɵɵtextInterpolate(t_r15.failureCount);
336
+ i0.ɵɵtextInterpolate(t_r18.failureCount);
276
337
  i0.ɵɵadvance(2);
277
- i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(7, 4, t_r15.failureRate, "1.0-1"), "%");
338
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(7, 4, t_r18.failureRate, "1.0-1"), "%");
278
339
  } }
279
- function TestingAnalyticsComponent_ng_template_2_Conditional_37_Conditional_1_Template(rf, ctx) { if (rf & 1) {
280
- i0.ɵɵelementStart(0, "div", 58);
281
- i0.ɵɵrepeaterCreate(1, TestingAnalyticsComponent_ng_template_2_Conditional_37_Conditional_1_For_2_Template, 8, 7, "div", 59, _forTrack1);
340
+ function TestingAnalyticsComponent_ng_template_2_Conditional_39_Conditional_1_Template(rf, ctx) { if (rf & 1) {
341
+ i0.ɵɵelementStart(0, "div", 62);
342
+ i0.ɵɵrepeaterCreate(1, TestingAnalyticsComponent_ng_template_2_Conditional_39_Conditional_1_For_2_Template, 8, 7, "div", 63, _forTrack2);
282
343
  i0.ɵɵelementEnd();
283
344
  } if (rf & 2) {
284
- const tests_r16 = i0.ɵɵnextContext();
345
+ const tests_r19 = i0.ɵɵnextContext();
285
346
  i0.ɵɵadvance();
286
- i0.ɵɵrepeater(tests_r16);
347
+ i0.ɵɵrepeater(tests_r19);
287
348
  } }
288
- function TestingAnalyticsComponent_ng_template_2_Conditional_37_Template(rf, ctx) { if (rf & 1) {
289
- i0.ɵɵconditionalCreate(0, TestingAnalyticsComponent_ng_template_2_Conditional_37_Conditional_0_Template, 1, 0, "mj-empty-state", 57)(1, TestingAnalyticsComponent_ng_template_2_Conditional_37_Conditional_1_Template, 3, 0, "div", 58);
349
+ function TestingAnalyticsComponent_ng_template_2_Conditional_39_Template(rf, ctx) { if (rf & 1) {
350
+ i0.ɵɵconditionalCreate(0, TestingAnalyticsComponent_ng_template_2_Conditional_39_Conditional_0_Template, 1, 0, "mj-empty-state", 61)(1, TestingAnalyticsComponent_ng_template_2_Conditional_39_Conditional_1_Template, 3, 0, "div", 62);
290
351
  } if (rf & 2) {
291
352
  i0.ɵɵconditional(ctx.length === 0 ? 0 : 1);
292
353
  } }
293
- function TestingAnalyticsComponent_ng_template_2_Conditional_43_Conditional_0_Template(rf, ctx) { if (rf & 1) {
294
- i0.ɵɵelement(0, "mj-empty-state", 63);
354
+ function TestingAnalyticsComponent_ng_template_2_Conditional_45_Conditional_0_Template(rf, ctx) { if (rf & 1) {
355
+ i0.ɵɵelement(0, "mj-empty-state", 67);
295
356
  } }
296
- function TestingAnalyticsComponent_ng_template_2_Conditional_43_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
297
- i0.ɵɵelementStart(0, "div", 59)(1, "span", 60);
357
+ function TestingAnalyticsComponent_ng_template_2_Conditional_45_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
358
+ i0.ɵɵelementStart(0, "div", 63)(1, "span", 64);
298
359
  i0.ɵɵtext(2);
299
360
  i0.ɵɵelementEnd();
300
- i0.ɵɵelementStart(3, "span", 64);
361
+ i0.ɵɵelementStart(3, "span", 68);
301
362
  i0.ɵɵtext(4);
302
363
  i0.ɵɵelementEnd();
303
- i0.ɵɵelementStart(5, "span", 62);
364
+ i0.ɵɵelementStart(5, "span", 66);
304
365
  i0.ɵɵtext(6);
305
366
  i0.ɵɵelementEnd()();
306
367
  } if (rf & 2) {
307
- const t_r17 = ctx.$implicit;
368
+ const t_r20 = ctx.$implicit;
308
369
  const ctx_r4 = i0.ɵɵnextContext(4);
309
370
  i0.ɵɵadvance();
310
- i0.ɵɵproperty("title", t_r17.testName);
371
+ i0.ɵɵproperty("title", t_r20.testName);
311
372
  i0.ɵɵadvance();
312
- i0.ɵɵtextInterpolate(t_r17.testName);
373
+ i0.ɵɵtextInterpolate(t_r20.testName);
313
374
  i0.ɵɵadvance(2);
314
- i0.ɵɵtextInterpolate(ctx_r4.FormatDuration(t_r17.avgDuration));
375
+ i0.ɵɵtextInterpolate(ctx_r4.FormatDuration(t_r20.avgDuration));
315
376
  i0.ɵɵadvance(2);
316
- i0.ɵɵtextInterpolate1("max ", ctx_r4.FormatDuration(t_r17.maxDuration));
377
+ i0.ɵɵtextInterpolate1("max ", ctx_r4.FormatDuration(t_r20.maxDuration));
317
378
  } }
318
- function TestingAnalyticsComponent_ng_template_2_Conditional_43_Conditional_1_Template(rf, ctx) { if (rf & 1) {
319
- i0.ɵɵelementStart(0, "div", 58);
320
- i0.ɵɵrepeaterCreate(1, TestingAnalyticsComponent_ng_template_2_Conditional_43_Conditional_1_For_2_Template, 7, 4, "div", 59, _forTrack1);
379
+ function TestingAnalyticsComponent_ng_template_2_Conditional_45_Conditional_1_Template(rf, ctx) { if (rf & 1) {
380
+ i0.ɵɵelementStart(0, "div", 62);
381
+ i0.ɵɵrepeaterCreate(1, TestingAnalyticsComponent_ng_template_2_Conditional_45_Conditional_1_For_2_Template, 7, 4, "div", 63, _forTrack2);
321
382
  i0.ɵɵelementEnd();
322
383
  } if (rf & 2) {
323
- const tests_r18 = i0.ɵɵnextContext();
384
+ const tests_r21 = i0.ɵɵnextContext();
324
385
  i0.ɵɵadvance();
325
- i0.ɵɵrepeater(tests_r18);
386
+ i0.ɵɵrepeater(tests_r21);
326
387
  } }
327
- function TestingAnalyticsComponent_ng_template_2_Conditional_43_Template(rf, ctx) { if (rf & 1) {
328
- i0.ɵɵconditionalCreate(0, TestingAnalyticsComponent_ng_template_2_Conditional_43_Conditional_0_Template, 1, 0, "mj-empty-state", 63)(1, TestingAnalyticsComponent_ng_template_2_Conditional_43_Conditional_1_Template, 3, 0, "div", 58);
388
+ function TestingAnalyticsComponent_ng_template_2_Conditional_45_Template(rf, ctx) { if (rf & 1) {
389
+ i0.ɵɵconditionalCreate(0, TestingAnalyticsComponent_ng_template_2_Conditional_45_Conditional_0_Template, 1, 0, "mj-empty-state", 67)(1, TestingAnalyticsComponent_ng_template_2_Conditional_45_Conditional_1_Template, 3, 0, "div", 62);
329
390
  } if (rf & 2) {
330
391
  i0.ɵɵconditional(ctx.length === 0 ? 0 : 1);
331
392
  } }
332
- function TestingAnalyticsComponent_ng_template_2_Conditional_49_Conditional_0_Template(rf, ctx) { if (rf & 1) {
333
- i0.ɵɵelement(0, "mj-empty-state", 65);
393
+ function TestingAnalyticsComponent_ng_template_2_Conditional_51_Conditional_0_Template(rf, ctx) { if (rf & 1) {
394
+ i0.ɵɵelement(0, "mj-empty-state", 69);
334
395
  } }
335
- function TestingAnalyticsComponent_ng_template_2_Conditional_49_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
336
- i0.ɵɵelementStart(0, "div", 59)(1, "span", 60);
396
+ function TestingAnalyticsComponent_ng_template_2_Conditional_51_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
397
+ i0.ɵɵelementStart(0, "div", 63)(1, "span", 64);
337
398
  i0.ɵɵtext(2);
338
399
  i0.ɵɵelementEnd();
339
- i0.ɵɵelementStart(3, "span", 64);
400
+ i0.ɵɵelementStart(3, "span", 68);
340
401
  i0.ɵɵtext(4);
341
402
  i0.ɵɵpipe(5, "number");
342
403
  i0.ɵɵelementEnd();
343
- i0.ɵɵelementStart(6, "span", 62);
404
+ i0.ɵɵelementStart(6, "span", 66);
344
405
  i0.ɵɵtext(7);
345
406
  i0.ɵɵpipe(8, "number");
346
407
  i0.ɵɵelementEnd()();
347
408
  } if (rf & 2) {
348
- const t_r19 = ctx.$implicit;
409
+ const t_r22 = ctx.$implicit;
349
410
  i0.ɵɵadvance();
350
- i0.ɵɵproperty("title", t_r19.testName);
411
+ i0.ɵɵproperty("title", t_r22.testName);
351
412
  i0.ɵɵadvance();
352
- i0.ɵɵtextInterpolate(t_r19.testName);
413
+ i0.ɵɵtextInterpolate(t_r22.testName);
353
414
  i0.ɵɵadvance(2);
354
- i0.ɵɵtextInterpolate1("$", i0.ɵɵpipeBind2(5, 4, t_r19.totalCost, "1.2-2"));
415
+ i0.ɵɵtextInterpolate1("$", i0.ɵɵpipeBind2(5, 4, t_r22.totalCost, "1.2-2"));
355
416
  i0.ɵɵadvance(3);
356
- i0.ɵɵtextInterpolate1("$", i0.ɵɵpipeBind2(8, 7, t_r19.avgCost, "1.4-4"), "/run");
417
+ i0.ɵɵtextInterpolate1("$", i0.ɵɵpipeBind2(8, 7, t_r22.avgCost, "1.4-4"), "/run");
357
418
  } }
358
- function TestingAnalyticsComponent_ng_template_2_Conditional_49_Conditional_1_Template(rf, ctx) { if (rf & 1) {
359
- i0.ɵɵelementStart(0, "div", 58);
360
- i0.ɵɵrepeaterCreate(1, TestingAnalyticsComponent_ng_template_2_Conditional_49_Conditional_1_For_2_Template, 9, 10, "div", 59, _forTrack1);
419
+ function TestingAnalyticsComponent_ng_template_2_Conditional_51_Conditional_1_Template(rf, ctx) { if (rf & 1) {
420
+ i0.ɵɵelementStart(0, "div", 62);
421
+ i0.ɵɵrepeaterCreate(1, TestingAnalyticsComponent_ng_template_2_Conditional_51_Conditional_1_For_2_Template, 9, 10, "div", 63, _forTrack2);
361
422
  i0.ɵɵelementEnd();
362
423
  } if (rf & 2) {
363
- const tests_r20 = i0.ɵɵnextContext();
424
+ const tests_r23 = i0.ɵɵnextContext();
364
425
  i0.ɵɵadvance();
365
- i0.ɵɵrepeater(tests_r20);
426
+ i0.ɵɵrepeater(tests_r23);
366
427
  } }
367
- function TestingAnalyticsComponent_ng_template_2_Conditional_49_Template(rf, ctx) { if (rf & 1) {
368
- i0.ɵɵconditionalCreate(0, TestingAnalyticsComponent_ng_template_2_Conditional_49_Conditional_0_Template, 1, 0, "mj-empty-state", 65)(1, TestingAnalyticsComponent_ng_template_2_Conditional_49_Conditional_1_Template, 3, 0, "div", 58);
428
+ function TestingAnalyticsComponent_ng_template_2_Conditional_51_Template(rf, ctx) { if (rf & 1) {
429
+ i0.ɵɵconditionalCreate(0, TestingAnalyticsComponent_ng_template_2_Conditional_51_Conditional_0_Template, 1, 0, "mj-empty-state", 69)(1, TestingAnalyticsComponent_ng_template_2_Conditional_51_Conditional_1_Template, 3, 0, "div", 62);
369
430
  } if (rf & 2) {
370
431
  i0.ɵɵconditional(ctx.length === 0 ? 0 : 1);
371
432
  } }
372
- function TestingAnalyticsComponent_ng_template_2_Conditional_55_Conditional_0_Template(rf, ctx) { if (rf & 1) {
373
- i0.ɵɵelement(0, "mj-empty-state", 66);
433
+ function TestingAnalyticsComponent_ng_template_2_Conditional_57_Conditional_0_Template(rf, ctx) { if (rf & 1) {
434
+ i0.ɵɵelement(0, "mj-empty-state", 70);
374
435
  } }
375
- function TestingAnalyticsComponent_ng_template_2_Conditional_55_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
376
- i0.ɵɵelementStart(0, "div", 68)(1, "span", 69);
436
+ function TestingAnalyticsComponent_ng_template_2_Conditional_57_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
437
+ i0.ɵɵelementStart(0, "div", 72)(1, "span", 73);
377
438
  i0.ɵɵtext(2);
378
439
  i0.ɵɵelementEnd();
379
- i0.ɵɵelementStart(3, "div", 70);
380
- i0.ɵɵelement(4, "div", 71);
440
+ i0.ɵɵelementStart(3, "div", 74);
441
+ i0.ɵɵelement(4, "div", 75);
381
442
  i0.ɵɵelementEnd();
382
- i0.ɵɵelementStart(5, "span", 72);
443
+ i0.ɵɵelementStart(5, "span", 76);
383
444
  i0.ɵɵtext(6);
384
445
  i0.ɵɵelementEnd();
385
- i0.ɵɵelementStart(7, "span", 73);
446
+ i0.ɵɵelementStart(7, "span", 77);
386
447
  i0.ɵɵtext(8);
387
448
  i0.ɵɵpipe(9, "number");
388
449
  i0.ɵɵelementEnd()();
389
450
  } if (rf & 2) {
390
- const b_r21 = ctx.$implicit;
451
+ const b_r24 = ctx.$implicit;
391
452
  i0.ɵɵadvance(2);
392
- i0.ɵɵtextInterpolate(b_r21.label);
453
+ i0.ɵɵtextInterpolate(b_r24.label);
393
454
  i0.ɵɵadvance(2);
394
- i0.ɵɵstyleProp("width", b_r21.percentage, "%")("background", b_r21.color);
455
+ i0.ɵɵstyleProp("width", b_r24.percentage, "%")("background", b_r24.color);
395
456
  i0.ɵɵadvance(2);
396
- i0.ɵɵtextInterpolate(b_r21.count);
457
+ i0.ɵɵtextInterpolate(b_r24.count);
397
458
  i0.ɵɵadvance(2);
398
- i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(9, 7, b_r21.percentage, "1.0-1"), "%");
459
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(9, 7, b_r24.percentage, "1.0-1"), "%");
399
460
  } }
400
- function TestingAnalyticsComponent_ng_template_2_Conditional_55_Conditional_1_Template(rf, ctx) { if (rf & 1) {
401
- i0.ɵɵelementStart(0, "div", 67);
402
- i0.ɵɵrepeaterCreate(1, TestingAnalyticsComponent_ng_template_2_Conditional_55_Conditional_1_For_2_Template, 10, 10, "div", 68, _forTrack2);
461
+ function TestingAnalyticsComponent_ng_template_2_Conditional_57_Conditional_1_Template(rf, ctx) { if (rf & 1) {
462
+ i0.ɵɵelementStart(0, "div", 71);
463
+ i0.ɵɵrepeaterCreate(1, TestingAnalyticsComponent_ng_template_2_Conditional_57_Conditional_1_For_2_Template, 10, 10, "div", 72, _forTrack3);
403
464
  i0.ɵɵelementEnd();
404
465
  } if (rf & 2) {
405
- const buckets_r22 = i0.ɵɵnextContext();
466
+ const buckets_r25 = i0.ɵɵnextContext();
406
467
  i0.ɵɵadvance();
407
- i0.ɵɵrepeater(buckets_r22);
468
+ i0.ɵɵrepeater(buckets_r25);
408
469
  } }
409
- function TestingAnalyticsComponent_ng_template_2_Conditional_55_Template(rf, ctx) { if (rf & 1) {
410
- i0.ɵɵconditionalCreate(0, TestingAnalyticsComponent_ng_template_2_Conditional_55_Conditional_0_Template, 1, 0, "mj-empty-state", 66)(1, TestingAnalyticsComponent_ng_template_2_Conditional_55_Conditional_1_Template, 3, 0, "div", 67);
470
+ function TestingAnalyticsComponent_ng_template_2_Conditional_57_Template(rf, ctx) { if (rf & 1) {
471
+ i0.ɵɵconditionalCreate(0, TestingAnalyticsComponent_ng_template_2_Conditional_57_Conditional_0_Template, 1, 0, "mj-empty-state", 70)(1, TestingAnalyticsComponent_ng_template_2_Conditional_57_Conditional_1_Template, 3, 0, "div", 71);
411
472
  } if (rf & 2) {
412
473
  i0.ɵɵconditional(ctx.length === 0 ? 0 : 1);
413
474
  } }
414
- function TestingAnalyticsComponent_ng_template_2_Conditional_63_Template(rf, ctx) { if (rf & 1) {
415
- i0.ɵɵelementStart(0, "div", 27);
416
- i0.ɵɵelement(1, "i", 74);
475
+ function TestingAnalyticsComponent_ng_template_2_Conditional_65_Template(rf, ctx) { if (rf & 1) {
476
+ i0.ɵɵelementStart(0, "div", 28);
477
+ i0.ɵɵelement(1, "i", 78);
417
478
  i0.ɵɵelementStart(2, "span");
418
479
  i0.ɵɵtext(3, "Loading versions...");
419
480
  i0.ɵɵelementEnd()();
420
481
  } }
421
- function TestingAnalyticsComponent_ng_template_2_Conditional_64_Template(rf, ctx) { if (rf & 1) {
422
- i0.ɵɵelement(0, "mj-empty-state", 28);
482
+ function TestingAnalyticsComponent_ng_template_2_Conditional_66_Template(rf, ctx) { if (rf & 1) {
483
+ i0.ɵɵelementStart(0, "p", 8);
484
+ i0.ɵɵtext(1);
485
+ i0.ɵɵelementEnd();
486
+ } if (rf & 2) {
487
+ const ctx_r4 = i0.ɵɵnextContext(2);
488
+ i0.ɵɵadvance();
489
+ i0.ɵɵtextInterpolate(ctx_r4.VersionMetricsError);
490
+ } }
491
+ function TestingAnalyticsComponent_ng_template_2_Conditional_67_Template(rf, ctx) { if (rf & 1) {
492
+ i0.ɵɵelement(0, "mj-empty-state", 29);
423
493
  } }
424
- function TestingAnalyticsComponent_ng_template_2_Conditional_65_For_16_Conditional_15_Conditional_1_Template(rf, ctx) { if (rf & 1) {
425
- i0.ɵɵelement(0, "i", 81);
494
+ function TestingAnalyticsComponent_ng_template_2_Conditional_68_For_16_Conditional_15_Conditional_1_Template(rf, ctx) { if (rf & 1) {
495
+ i0.ɵɵelement(0, "i", 85);
426
496
  } }
427
- function TestingAnalyticsComponent_ng_template_2_Conditional_65_For_16_Conditional_15_Conditional_2_Template(rf, ctx) { if (rf & 1) {
428
- i0.ɵɵelement(0, "i", 82);
497
+ function TestingAnalyticsComponent_ng_template_2_Conditional_68_For_16_Conditional_15_Conditional_2_Template(rf, ctx) { if (rf & 1) {
498
+ i0.ɵɵelement(0, "i", 86);
429
499
  } }
430
- function TestingAnalyticsComponent_ng_template_2_Conditional_65_For_16_Conditional_15_Template(rf, ctx) { if (rf & 1) {
431
- i0.ɵɵelementStart(0, "span", 80);
432
- i0.ɵɵconditionalCreate(1, TestingAnalyticsComponent_ng_template_2_Conditional_65_For_16_Conditional_15_Conditional_1_Template, 1, 0, "i", 81)(2, TestingAnalyticsComponent_ng_template_2_Conditional_65_For_16_Conditional_15_Conditional_2_Template, 1, 0, "i", 82);
500
+ function TestingAnalyticsComponent_ng_template_2_Conditional_68_For_16_Conditional_15_Template(rf, ctx) { if (rf & 1) {
501
+ i0.ɵɵelementStart(0, "span", 84);
502
+ i0.ɵɵconditionalCreate(1, TestingAnalyticsComponent_ng_template_2_Conditional_68_For_16_Conditional_15_Conditional_1_Template, 1, 0, "i", 85)(2, TestingAnalyticsComponent_ng_template_2_Conditional_68_For_16_Conditional_15_Conditional_2_Template, 1, 0, "i", 86);
433
503
  i0.ɵɵtext(3);
434
504
  i0.ɵɵpipe(4, "number");
435
505
  i0.ɵɵelementEnd();
436
506
  } if (rf & 2) {
437
- const row_r23 = i0.ɵɵnextContext().$implicit;
507
+ const row_r26 = i0.ɵɵnextContext().$implicit;
438
508
  const ctx_r4 = i0.ɵɵnextContext(3);
439
- i0.ɵɵclassProp("delta-up", row_r23.passRateDelta > 0)("delta-down", row_r23.passRateDelta < 0)("delta-neutral", row_r23.passRateDelta === 0);
509
+ i0.ɵɵclassProp("delta-up", row_r26.passRateDelta > 0)("delta-down", row_r26.passRateDelta < 0)("delta-neutral", row_r26.passRateDelta === 0);
440
510
  i0.ɵɵadvance();
441
- i0.ɵɵconditional(row_r23.passRateDelta > 0 ? 1 : row_r23.passRateDelta < 0 ? 2 : -1);
511
+ i0.ɵɵconditional(row_r26.passRateDelta > 0 ? 1 : row_r26.passRateDelta < 0 ? 2 : -1);
442
512
  i0.ɵɵadvance(2);
443
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(4, 8, ctx_r4.AbsNum(row_r23.passRateDelta), "1.1-1"), "% ");
513
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(4, 8, ctx_r4.AbsNum(row_r26.passRateDelta), "1.1-1"), "% ");
444
514
  } }
445
- function TestingAnalyticsComponent_ng_template_2_Conditional_65_For_16_Conditional_20_Conditional_1_Template(rf, ctx) { if (rf & 1) {
446
- i0.ɵɵelement(0, "i", 81);
515
+ function TestingAnalyticsComponent_ng_template_2_Conditional_68_For_16_Conditional_20_Conditional_1_Template(rf, ctx) { if (rf & 1) {
516
+ i0.ɵɵelement(0, "i", 85);
447
517
  } }
448
- function TestingAnalyticsComponent_ng_template_2_Conditional_65_For_16_Conditional_20_Conditional_2_Template(rf, ctx) { if (rf & 1) {
449
- i0.ɵɵelement(0, "i", 82);
518
+ function TestingAnalyticsComponent_ng_template_2_Conditional_68_For_16_Conditional_20_Conditional_2_Template(rf, ctx) { if (rf & 1) {
519
+ i0.ɵɵelement(0, "i", 86);
450
520
  } }
451
- function TestingAnalyticsComponent_ng_template_2_Conditional_65_For_16_Conditional_20_Template(rf, ctx) { if (rf & 1) {
452
- i0.ɵɵelementStart(0, "span", 80);
453
- i0.ɵɵconditionalCreate(1, TestingAnalyticsComponent_ng_template_2_Conditional_65_For_16_Conditional_20_Conditional_1_Template, 1, 0, "i", 81)(2, TestingAnalyticsComponent_ng_template_2_Conditional_65_For_16_Conditional_20_Conditional_2_Template, 1, 0, "i", 82);
521
+ function TestingAnalyticsComponent_ng_template_2_Conditional_68_For_16_Conditional_20_Template(rf, ctx) { if (rf & 1) {
522
+ i0.ɵɵelementStart(0, "span", 84);
523
+ i0.ɵɵconditionalCreate(1, TestingAnalyticsComponent_ng_template_2_Conditional_68_For_16_Conditional_20_Conditional_1_Template, 1, 0, "i", 85)(2, TestingAnalyticsComponent_ng_template_2_Conditional_68_For_16_Conditional_20_Conditional_2_Template, 1, 0, "i", 86);
454
524
  i0.ɵɵtext(3);
455
525
  i0.ɵɵpipe(4, "number");
456
526
  i0.ɵɵelementEnd();
457
527
  } if (rf & 2) {
458
- const row_r23 = i0.ɵɵnextContext().$implicit;
528
+ const row_r26 = i0.ɵɵnextContext().$implicit;
459
529
  const ctx_r4 = i0.ɵɵnextContext(3);
460
- i0.ɵɵclassProp("delta-up", row_r23.costDelta < 0)("delta-down", row_r23.costDelta > 0)("delta-neutral", row_r23.costDelta === 0);
530
+ i0.ɵɵclassProp("delta-up", row_r26.costDelta < 0)("delta-down", row_r26.costDelta > 0)("delta-neutral", row_r26.costDelta === 0);
461
531
  i0.ɵɵadvance();
462
- i0.ɵɵconditional(row_r23.costDelta > 0 ? 1 : row_r23.costDelta < 0 ? 2 : -1);
532
+ i0.ɵɵconditional(row_r26.costDelta > 0 ? 1 : row_r26.costDelta < 0 ? 2 : -1);
463
533
  i0.ɵɵadvance(2);
464
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(4, 8, ctx_r4.AbsNum(row_r23.costDelta), "1.1-1"), "% ");
534
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(4, 8, ctx_r4.AbsNum(row_r26.costDelta), "1.1-1"), "% ");
465
535
  } }
466
- function TestingAnalyticsComponent_ng_template_2_Conditional_65_For_16_Template(rf, ctx) { if (rf & 1) {
467
- i0.ɵɵelementStart(0, "tr")(1, "td")(2, "span", 77);
536
+ function TestingAnalyticsComponent_ng_template_2_Conditional_68_For_16_Template(rf, ctx) { if (rf & 1) {
537
+ i0.ɵɵelementStart(0, "tr")(1, "td")(2, "span", 81);
468
538
  i0.ɵɵtext(3);
469
539
  i0.ɵɵelementEnd();
470
- i0.ɵɵelementStart(4, "span", 78);
540
+ i0.ɵɵelementStart(4, "span", 82);
471
541
  i0.ɵɵtext(5);
472
542
  i0.ɵɵelementEnd()();
473
543
  i0.ɵɵelementStart(6, "td");
474
544
  i0.ɵɵtext(7);
475
545
  i0.ɵɵpipe(8, "date");
476
546
  i0.ɵɵelementEnd();
477
- i0.ɵɵelementStart(9, "td", 76);
547
+ i0.ɵɵelementStart(9, "td", 80);
478
548
  i0.ɵɵtext(10);
479
549
  i0.ɵɵelementEnd();
480
- i0.ɵɵelementStart(11, "td", 76)(12, "span");
550
+ i0.ɵɵelementStart(11, "td", 80)(12, "span");
481
551
  i0.ɵɵtext(13);
482
552
  i0.ɵɵpipe(14, "number");
483
553
  i0.ɵɵelementEnd();
484
- i0.ɵɵconditionalCreate(15, TestingAnalyticsComponent_ng_template_2_Conditional_65_For_16_Conditional_15_Template, 5, 11, "span", 79);
554
+ i0.ɵɵconditionalCreate(15, TestingAnalyticsComponent_ng_template_2_Conditional_68_For_16_Conditional_15_Template, 5, 11, "span", 83);
485
555
  i0.ɵɵelementEnd();
486
- i0.ɵɵelementStart(16, "td", 76)(17, "span");
556
+ i0.ɵɵelementStart(16, "td", 80)(17, "span");
487
557
  i0.ɵɵtext(18);
488
558
  i0.ɵɵpipe(19, "number");
489
559
  i0.ɵɵelementEnd();
490
- i0.ɵɵconditionalCreate(20, TestingAnalyticsComponent_ng_template_2_Conditional_65_For_16_Conditional_20_Template, 5, 11, "span", 79);
560
+ i0.ɵɵconditionalCreate(20, TestingAnalyticsComponent_ng_template_2_Conditional_68_For_16_Conditional_20_Template, 5, 11, "span", 83);
491
561
  i0.ɵɵelementEnd()();
492
562
  } if (rf & 2) {
493
- const row_r23 = ctx.$implicit;
563
+ const row_r26 = ctx.$implicit;
494
564
  i0.ɵɵadvance(3);
495
- i0.ɵɵtextInterpolate(row_r23.gitCommitShort);
565
+ i0.ɵɵtextInterpolate(row_r26.gitCommitShort);
496
566
  i0.ɵɵadvance(2);
497
- i0.ɵɵtextInterpolate(row_r23.agentVersion);
567
+ i0.ɵɵtextInterpolate(row_r26.agentVersion);
498
568
  i0.ɵɵadvance(2);
499
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(8, 8, row_r23.date, "mediumDate"));
569
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(8, 8, row_r26.date, "mediumDate"));
500
570
  i0.ɵɵadvance(3);
501
- i0.ɵɵtextInterpolate(row_r23.totalTests);
571
+ i0.ɵɵtextInterpolate(row_r26.totalTests);
502
572
  i0.ɵɵadvance(3);
503
- i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(14, 11, row_r23.passRate, "1.1-1"), "%");
573
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(14, 11, row_r26.passRate, "1.1-1"), "%");
504
574
  i0.ɵɵadvance(2);
505
- i0.ɵɵconditional(row_r23.passRateDelta !== null ? 15 : -1);
575
+ i0.ɵɵconditional(row_r26.passRateDelta !== null ? 15 : -1);
506
576
  i0.ɵɵadvance(3);
507
- i0.ɵɵtextInterpolate1("$", i0.ɵɵpipeBind2(19, 14, row_r23.totalCost, "1.2-2"));
577
+ i0.ɵɵtextInterpolate1("$", i0.ɵɵpipeBind2(19, 14, row_r26.totalCost, "1.2-2"));
508
578
  i0.ɵɵadvance(2);
509
- i0.ɵɵconditional(row_r23.costDelta !== null ? 20 : -1);
579
+ i0.ɵɵconditional(row_r26.costDelta !== null ? 20 : -1);
510
580
  } }
511
- function TestingAnalyticsComponent_ng_template_2_Conditional_65_Template(rf, ctx) { if (rf & 1) {
512
- i0.ɵɵelementStart(0, "div", 29)(1, "table", 75)(2, "thead")(3, "tr")(4, "th");
581
+ function TestingAnalyticsComponent_ng_template_2_Conditional_68_Template(rf, ctx) { if (rf & 1) {
582
+ i0.ɵɵelementStart(0, "div", 30)(1, "table", 79)(2, "thead")(3, "tr")(4, "th");
513
583
  i0.ɵɵtext(5, "Version");
514
584
  i0.ɵɵelementEnd();
515
585
  i0.ɵɵelementStart(6, "th");
516
586
  i0.ɵɵtext(7, "Date");
517
587
  i0.ɵɵelementEnd();
518
- i0.ɵɵelementStart(8, "th", 76);
588
+ i0.ɵɵelementStart(8, "th", 80);
519
589
  i0.ɵɵtext(9, "Tests");
520
590
  i0.ɵɵelementEnd();
521
- i0.ɵɵelementStart(10, "th", 76);
591
+ i0.ɵɵelementStart(10, "th", 80);
522
592
  i0.ɵɵtext(11, "Pass Rate");
523
593
  i0.ɵɵelementEnd();
524
- i0.ɵɵelementStart(12, "th", 76);
594
+ i0.ɵɵelementStart(12, "th", 80);
525
595
  i0.ɵɵtext(13, "Cost");
526
596
  i0.ɵɵelementEnd()()();
527
597
  i0.ɵɵelementStart(14, "tbody");
528
- i0.ɵɵrepeaterCreate(15, TestingAnalyticsComponent_ng_template_2_Conditional_65_For_16_Template, 21, 17, "tr", null, _forTrack3);
598
+ i0.ɵɵrepeaterCreate(15, TestingAnalyticsComponent_ng_template_2_Conditional_68_For_16_Template, 21, 17, "tr", null, _forTrack4);
529
599
  i0.ɵɵelementEnd()()();
530
600
  } if (rf & 2) {
531
601
  const ctx_r4 = i0.ɵɵnextContext(2);
@@ -533,108 +603,115 @@ function TestingAnalyticsComponent_ng_template_2_Conditional_65_Template(rf, ctx
533
603
  i0.ɵɵrepeater(ctx_r4.VersionRows);
534
604
  } }
535
605
  function TestingAnalyticsComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {
536
- i0.ɵɵelementStart(0, "div", 7)(1, "div", 8);
537
- i0.ɵɵelement(2, "i", 9);
538
- i0.ɵɵtext(3, " Trend Overview ");
606
+ i0.ɵɵelementStart(0, "div", 7);
607
+ i0.ɵɵconditionalCreate(1, TestingAnalyticsComponent_ng_template_2_Conditional_1_Template, 2, 1, "p", 8);
608
+ i0.ɵɵconditionalCreate(2, TestingAnalyticsComponent_ng_template_2_Conditional_2_Template, 7, 0);
609
+ i0.ɵɵelementStart(3, "div", 9);
610
+ i0.ɵɵelement(4, "i", 10);
611
+ i0.ɵɵtext(5, " Trend Overview ");
539
612
  i0.ɵɵelementEnd();
540
- i0.ɵɵelementStart(4, "div", 10)(5, "div", 11)(6, "h4");
541
- i0.ɵɵelement(7, "i", 12);
542
- i0.ɵɵtext(8, " Pass Rate Trend");
613
+ i0.ɵɵelementStart(6, "div", 11)(7, "div", 12)(8, "h4");
614
+ i0.ɵɵelement(9, "i", 13);
615
+ i0.ɵɵtext(10, " Pass Rate Trend");
543
616
  i0.ɵɵelementEnd();
544
- i0.ɵɵconditionalCreate(9, TestingAnalyticsComponent_ng_template_2_Conditional_9_Template, 2, 1);
545
- i0.ɵɵpipe(10, "async");
617
+ i0.ɵɵconditionalCreate(11, TestingAnalyticsComponent_ng_template_2_Conditional_11_Template, 2, 1);
618
+ i0.ɵɵpipe(12, "async");
546
619
  i0.ɵɵelementEnd();
547
- i0.ɵɵelementStart(11, "div", 11)(12, "h4");
548
- i0.ɵɵelement(13, "i", 13);
549
- i0.ɵɵtext(14, " Run Volume");
620
+ i0.ɵɵelementStart(13, "div", 12)(14, "h4");
621
+ i0.ɵɵelement(15, "i", 14);
622
+ i0.ɵɵtext(16, " Run Volume");
550
623
  i0.ɵɵelementEnd();
551
- i0.ɵɵconditionalCreate(15, TestingAnalyticsComponent_ng_template_2_Conditional_15_Template, 2, 1);
552
- i0.ɵɵpipe(16, "async");
624
+ i0.ɵɵconditionalCreate(17, TestingAnalyticsComponent_ng_template_2_Conditional_17_Template, 2, 1);
625
+ i0.ɵɵpipe(18, "async");
553
626
  i0.ɵɵelementEnd();
554
- i0.ɵɵelementStart(17, "div", 11)(18, "h4");
555
- i0.ɵɵelement(19, "i", 14);
556
- i0.ɵɵtext(20, " Score Trend");
627
+ i0.ɵɵelementStart(19, "div", 12)(20, "h4");
628
+ i0.ɵɵelement(21, "i", 15);
629
+ i0.ɵɵtext(22, " Score Trend");
557
630
  i0.ɵɵelementEnd();
558
- i0.ɵɵconditionalCreate(21, TestingAnalyticsComponent_ng_template_2_Conditional_21_Template, 2, 1);
559
- i0.ɵɵpipe(22, "async");
631
+ i0.ɵɵconditionalCreate(23, TestingAnalyticsComponent_ng_template_2_Conditional_23_Template, 2, 1);
632
+ i0.ɵɵpipe(24, "async");
560
633
  i0.ɵɵelementEnd();
561
- i0.ɵɵelementStart(23, "div", 11)(24, "h4");
562
- i0.ɵɵelement(25, "i", 15);
563
- i0.ɵɵtext(26, " Cost Trend");
634
+ i0.ɵɵelementStart(25, "div", 12)(26, "h4");
635
+ i0.ɵɵelement(27, "i", 16);
636
+ i0.ɵɵtext(28, " Cost Trend");
564
637
  i0.ɵɵelementEnd();
565
- i0.ɵɵconditionalCreate(27, TestingAnalyticsComponent_ng_template_2_Conditional_27_Template, 2, 1);
566
- i0.ɵɵpipe(28, "async");
638
+ i0.ɵɵconditionalCreate(29, TestingAnalyticsComponent_ng_template_2_Conditional_29_Template, 2, 1);
639
+ i0.ɵɵpipe(30, "async");
567
640
  i0.ɵɵelementEnd()();
568
- i0.ɵɵelementStart(29, "div", 8);
569
- i0.ɵɵelement(30, "i", 16);
570
- i0.ɵɵtext(31, " Insights ");
641
+ i0.ɵɵelementStart(31, "div", 9);
642
+ i0.ɵɵelement(32, "i", 17);
643
+ i0.ɵɵtext(33, " Insights ");
571
644
  i0.ɵɵelementEnd();
572
- i0.ɵɵelementStart(32, "div", 17)(33, "div", 18)(34, "h4");
573
- i0.ɵɵelement(35, "i", 19);
574
- i0.ɵɵtext(36, " Top Failing Tests");
645
+ i0.ɵɵelementStart(34, "div", 18)(35, "div", 19)(36, "h4");
646
+ i0.ɵɵelement(37, "i", 20);
647
+ i0.ɵɵtext(38, " Top Failing Tests");
575
648
  i0.ɵɵelementEnd();
576
- i0.ɵɵconditionalCreate(37, TestingAnalyticsComponent_ng_template_2_Conditional_37_Template, 2, 1);
577
- i0.ɵɵpipe(38, "async");
649
+ i0.ɵɵconditionalCreate(39, TestingAnalyticsComponent_ng_template_2_Conditional_39_Template, 2, 1);
650
+ i0.ɵɵpipe(40, "async");
578
651
  i0.ɵɵelementEnd();
579
- i0.ɵɵelementStart(39, "div", 18)(40, "h4");
580
- i0.ɵɵelement(41, "i", 20);
581
- i0.ɵɵtext(42, " Slowest Tests");
652
+ i0.ɵɵelementStart(41, "div", 19)(42, "h4");
653
+ i0.ɵɵelement(43, "i", 21);
654
+ i0.ɵɵtext(44, " Slowest Tests");
582
655
  i0.ɵɵelementEnd();
583
- i0.ɵɵconditionalCreate(43, TestingAnalyticsComponent_ng_template_2_Conditional_43_Template, 2, 1);
584
- i0.ɵɵpipe(44, "async");
656
+ i0.ɵɵconditionalCreate(45, TestingAnalyticsComponent_ng_template_2_Conditional_45_Template, 2, 1);
657
+ i0.ɵɵpipe(46, "async");
585
658
  i0.ɵɵelementEnd();
586
- i0.ɵɵelementStart(45, "div", 18)(46, "h4");
587
- i0.ɵɵelement(47, "i", 21);
588
- i0.ɵɵtext(48, " Most Expensive Tests");
659
+ i0.ɵɵelementStart(47, "div", 19)(48, "h4");
660
+ i0.ɵɵelement(49, "i", 22);
661
+ i0.ɵɵtext(50, " Most Expensive Tests");
589
662
  i0.ɵɵelementEnd();
590
- i0.ɵɵconditionalCreate(49, TestingAnalyticsComponent_ng_template_2_Conditional_49_Template, 2, 1);
591
- i0.ɵɵpipe(50, "async");
663
+ i0.ɵɵconditionalCreate(51, TestingAnalyticsComponent_ng_template_2_Conditional_51_Template, 2, 1);
664
+ i0.ɵɵpipe(52, "async");
592
665
  i0.ɵɵelementEnd()();
593
- i0.ɵɵelementStart(51, "div", 8);
594
- i0.ɵɵelement(52, "i", 22);
595
- i0.ɵɵtext(53, " Score Distribution ");
596
- i0.ɵɵelementEnd();
597
- i0.ɵɵelementStart(54, "div", 23);
598
- i0.ɵɵconditionalCreate(55, TestingAnalyticsComponent_ng_template_2_Conditional_55_Template, 2, 1);
599
- i0.ɵɵpipe(56, "async");
600
- i0.ɵɵelementEnd();
601
- i0.ɵɵelementStart(57, "div", 8);
602
- i0.ɵɵelement(58, "i", 24);
603
- i0.ɵɵtext(59, " Version Comparison ");
604
- i0.ɵɵelementStart(60, "span", 25);
605
- i0.ɵɵtext(61, "Compare metrics across different builds");
666
+ i0.ɵɵelementStart(53, "div", 9);
667
+ i0.ɵɵelement(54, "i", 23);
668
+ i0.ɵɵtext(55, " Score Distribution ");
669
+ i0.ɵɵelementEnd();
670
+ i0.ɵɵelementStart(56, "div", 24);
671
+ i0.ɵɵconditionalCreate(57, TestingAnalyticsComponent_ng_template_2_Conditional_57_Template, 2, 1);
672
+ i0.ɵɵpipe(58, "async");
673
+ i0.ɵɵelementEnd();
674
+ i0.ɵɵelementStart(59, "div", 9);
675
+ i0.ɵɵelement(60, "i", 25);
676
+ i0.ɵɵtext(61, " Version Comparison ");
677
+ i0.ɵɵelementStart(62, "span", 26);
678
+ i0.ɵɵtext(63, "Compare metrics across different builds");
606
679
  i0.ɵɵelementEnd()();
607
- i0.ɵɵelementStart(62, "div", 26);
608
- i0.ɵɵconditionalCreate(63, TestingAnalyticsComponent_ng_template_2_Conditional_63_Template, 4, 0, "div", 27)(64, TestingAnalyticsComponent_ng_template_2_Conditional_64_Template, 1, 0, "mj-empty-state", 28)(65, TestingAnalyticsComponent_ng_template_2_Conditional_65_Template, 17, 0, "div", 29);
680
+ i0.ɵɵelementStart(64, "div", 27);
681
+ i0.ɵɵconditionalCreate(65, TestingAnalyticsComponent_ng_template_2_Conditional_65_Template, 4, 0, "div", 28)(66, TestingAnalyticsComponent_ng_template_2_Conditional_66_Template, 2, 1, "p", 8)(67, TestingAnalyticsComponent_ng_template_2_Conditional_67_Template, 1, 0, "mj-empty-state", 29)(68, TestingAnalyticsComponent_ng_template_2_Conditional_68_Template, 17, 0, "div", 30);
609
682
  i0.ɵɵelementEnd()();
610
683
  } if (rf & 2) {
611
- let tmp_2_0;
612
- let tmp_3_0;
613
684
  let tmp_4_0;
614
685
  let tmp_5_0;
615
686
  let tmp_6_0;
616
687
  let tmp_7_0;
617
688
  let tmp_8_0;
618
689
  let tmp_9_0;
690
+ let tmp_10_0;
691
+ let tmp_11_0;
619
692
  const ctx_r4 = i0.ɵɵnextContext();
693
+ i0.ɵɵadvance();
694
+ i0.ɵɵconditional(ctx_r4.RubricAnalyticsError ? 1 : -1);
695
+ i0.ɵɵadvance();
696
+ i0.ɵɵconditional(ctx_r4.RubricTrend.length || ctx_r4.FailureRates.length ? 2 : -1);
620
697
  i0.ɵɵadvance(9);
621
- i0.ɵɵconditional((tmp_2_0 = i0.ɵɵpipeBind1(10, 9, ctx_r4.DisplayTrends$)) ? 9 : -1, tmp_2_0);
698
+ i0.ɵɵconditional((tmp_4_0 = i0.ɵɵpipeBind1(12, 11, ctx_r4.DisplayTrends$)) ? 11 : -1, tmp_4_0);
622
699
  i0.ɵɵadvance(6);
623
- i0.ɵɵconditional((tmp_3_0 = i0.ɵɵpipeBind1(16, 11, ctx_r4.DisplayTrends$)) ? 15 : -1, tmp_3_0);
700
+ i0.ɵɵconditional((tmp_5_0 = i0.ɵɵpipeBind1(18, 13, ctx_r4.DisplayTrends$)) ? 17 : -1, tmp_5_0);
624
701
  i0.ɵɵadvance(6);
625
- i0.ɵɵconditional((tmp_4_0 = i0.ɵɵpipeBind1(22, 13, ctx_r4.DisplayTrends$)) ? 21 : -1, tmp_4_0);
702
+ i0.ɵɵconditional((tmp_6_0 = i0.ɵɵpipeBind1(24, 15, ctx_r4.DisplayTrends$)) ? 23 : -1, tmp_6_0);
626
703
  i0.ɵɵadvance(6);
627
- i0.ɵɵconditional((tmp_5_0 = i0.ɵɵpipeBind1(28, 15, ctx_r4.DisplayTrends$)) ? 27 : -1, tmp_5_0);
704
+ i0.ɵɵconditional((tmp_7_0 = i0.ɵɵpipeBind1(30, 17, ctx_r4.DisplayTrends$)) ? 29 : -1, tmp_7_0);
628
705
  i0.ɵɵadvance(10);
629
- i0.ɵɵconditional((tmp_6_0 = i0.ɵɵpipeBind1(38, 17, ctx_r4.TopFailingTests$)) ? 37 : -1, tmp_6_0);
706
+ i0.ɵɵconditional((tmp_8_0 = i0.ɵɵpipeBind1(40, 19, ctx_r4.TopFailingTests$)) ? 39 : -1, tmp_8_0);
630
707
  i0.ɵɵadvance(6);
631
- i0.ɵɵconditional((tmp_7_0 = i0.ɵɵpipeBind1(44, 19, ctx_r4.SlowestTests$)) ? 43 : -1, tmp_7_0);
708
+ i0.ɵɵconditional((tmp_9_0 = i0.ɵɵpipeBind1(46, 21, ctx_r4.SlowestTests$)) ? 45 : -1, tmp_9_0);
632
709
  i0.ɵɵadvance(6);
633
- i0.ɵɵconditional((tmp_8_0 = i0.ɵɵpipeBind1(50, 21, ctx_r4.MostExpensiveTests$)) ? 49 : -1, tmp_8_0);
710
+ i0.ɵɵconditional((tmp_10_0 = i0.ɵɵpipeBind1(52, 23, ctx_r4.MostExpensiveTests$)) ? 51 : -1, tmp_10_0);
634
711
  i0.ɵɵadvance(6);
635
- i0.ɵɵconditional((tmp_9_0 = i0.ɵɵpipeBind1(56, 23, ctx_r4.ScoreDistribution$)) ? 55 : -1, tmp_9_0);
712
+ i0.ɵɵconditional((tmp_11_0 = i0.ɵɵpipeBind1(58, 25, ctx_r4.ScoreDistribution$)) ? 57 : -1, tmp_11_0);
636
713
  i0.ɵɵadvance(8);
637
- i0.ɵɵconditional(ctx_r4.IsLoadingVersions ? 63 : ctx_r4.VersionRows.length === 0 ? 64 : 65);
714
+ i0.ɵɵconditional(ctx_r4.IsLoadingVersions ? 65 : ctx_r4.VersionMetricsError ? 66 : ctx_r4.VersionRows.length === 0 ? 67 : 68);
638
715
  } }
639
716
  // ---------------------------------------------------------------------------
640
717
  // Component
@@ -672,6 +749,10 @@ export class TestingAnalyticsComponent {
672
749
  SelectedDays = 30;
673
750
  VersionRows = [];
674
751
  IsLoadingVersions = false;
752
+ RubricTrend = [];
753
+ FailureRates = [];
754
+ RubricAnalyticsError = '';
755
+ VersionMetricsError = '';
675
756
  // Cached breakdown name lists for the dashboard's agent context.
676
757
  topFailingNames = [];
677
758
  slowestNames = [];
@@ -697,6 +778,70 @@ export class TestingAnalyticsComponent {
697
778
  this.restoreState();
698
779
  this.setupObservables();
699
780
  this.loadVersionMetrics();
781
+ void this.LoadRubricAnalytics();
782
+ }
783
+ /** Submitted evaluation scores over time, and per-criterion failure rates. Suite-run scores are not rubric scores. */
784
+ async LoadRubricAnalytics() {
785
+ try {
786
+ const provider = this.instrumentationService.Provider;
787
+ if (!provider)
788
+ return;
789
+ const view = RunView.FromMetadataProvider(provider);
790
+ const evaluations = await view.RunView({
791
+ EntityName: 'MJ: Rubric Evaluations',
792
+ ExtraFilter: `Status = 'Submitted' AND NormalizedScore IS NOT NULL`,
793
+ OrderBy: 'SubmittedAt DESC',
794
+ ResultType: 'simple',
795
+ MaxRows: 500,
796
+ });
797
+ if (!evaluations.Success)
798
+ throw new Error(evaluations.ErrorMessage || 'Could not load evaluations.');
799
+ this.RubricTrend = RubricScoreTrend((evaluations.Results ?? []).map(row => ({
800
+ at: row.SubmittedAt == null ? null : String(row.SubmittedAt),
801
+ score: row.NormalizedScore == null ? null : Number(row.NormalizedScore),
802
+ runId: row.SubjectRecordID == null ? null : String(row.SubjectRecordID),
803
+ })));
804
+ const scores = await view.RunView({
805
+ EntityName: 'MJ: Rubric Evaluation Scores',
806
+ ExtraFilter: `EvaluationStatus = 'Submitted' AND NormalizedScore IS NOT NULL`,
807
+ ResultType: 'simple',
808
+ MaxRows: 1000,
809
+ });
810
+ if (!scores.Success)
811
+ throw new Error(scores.ErrorMessage || 'Could not load rubric scores.');
812
+ const versions = await view.RunView({
813
+ EntityName: 'MJ: Rubric Versions',
814
+ ResultType: 'simple',
815
+ MaxRows: 500,
816
+ });
817
+ if (!versions.Success)
818
+ throw new Error(versions.ErrorMessage || 'Could not load rubric versions.');
819
+ const evaluationById = new Map((evaluations.Results ?? []).map(row => [String(row.ID), row]));
820
+ const thresholdByVersion = new Map((versions.Results ?? []).map(row => [String(row.ID), row.PassThreshold == null ? null : Number(row.PassThreshold)]));
821
+ this.FailureRates = CriterionFailureRates((scores.Results ?? []).map(row => {
822
+ const evaluation = evaluationById.get(String(row.EvaluationID ?? ''));
823
+ const versionId = evaluation ? String(evaluation.RubricVersionID ?? '') : '';
824
+ return {
825
+ key: CriterionIdentity(row).key,
826
+ normalizedScore: row.NormalizedScore == null ? null : Number(row.NormalizedScore),
827
+ gateFailed: row.GateFailed === true || row.GateFailed === 1,
828
+ passThreshold: thresholdByVersion.get(versionId) ?? null,
829
+ };
830
+ }).filter(row => row.key.length > 0));
831
+ this.RubricAnalyticsError = '';
832
+ this.cdr.markForCheck();
833
+ }
834
+ catch (error) {
835
+ this.RubricTrend = [];
836
+ this.FailureRates = [];
837
+ this.RubricAnalyticsError = error instanceof Error ? error.message : 'Could not load rubric analytics.';
838
+ this.cdr.markForCheck();
839
+ }
840
+ }
841
+ OpenRun(runId) {
842
+ if (!runId)
843
+ return;
844
+ SharedService.Instance.OpenEntityRecord('MJ: Test Runs', CompositeKey.FromID(runId));
700
845
  }
701
846
  ngOnDestroy() {
702
847
  this.destroy$.next();
@@ -858,9 +1003,11 @@ export class TestingAnalyticsComponent {
858
1003
  try {
859
1004
  const metrics = await this.instrumentationService.getVersionMetrics();
860
1005
  this.VersionRows = this.buildVersionRows(metrics);
1006
+ this.VersionMetricsError = '';
861
1007
  }
862
- catch {
1008
+ catch (error) {
863
1009
  this.VersionRows = [];
1010
+ this.VersionMetricsError = error instanceof Error ? error.message : 'Could not load version metrics.';
864
1011
  }
865
1012
  finally {
866
1013
  this.IsLoadingVersions = false;
@@ -904,12 +1051,12 @@ export class TestingAnalyticsComponent {
904
1051
  });
905
1052
  }
906
1053
  static ɵfac = function TestingAnalyticsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TestingAnalyticsComponent)(i0.ɵɵdirectiveInject(i1.TestingInstrumentationService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
907
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TestingAnalyticsComponent, selectors: [["app-testing-analytics"]], inputs: { InitialState: "InitialState", initialState: "initialState", HideToolbar: "HideToolbar" }, outputs: { StateChange: "StateChange", stateChange: "stateChange" }, standalone: false, decls: 4, vars: 1, consts: [["content", ""], [4, "ngTemplateOutlet"], ["Title", "Testing Analytics", "Icon", "fa-solid fa-chart-bar", "Subtitle", "Test trends, pass rates, and version metrics"], ["actions", ""], [3, "Label", "Active"], [3, "Clicked"], [3, "Clicked", "Label", "Active"], [1, "testing-analytics"], [1, "section-title"], [1, "fa-solid", "fa-chart-line"], [1, "trend-grid"], [1, "card", "trend-card"], [1, "fa-solid", "fa-check-double"], [1, "fa-solid", "fa-layer-group"], [1, "fa-solid", "fa-star-half-stroke"], [1, "fa-solid", "fa-dollar-sign"], [1, "fa-solid", "fa-magnifying-glass-chart"], [1, "insights-grid"], [1, "card", "insight-card"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "fa-solid", "fa-clock"], [1, "fa-solid", "fa-coins"], [1, "fa-solid", "fa-chart-pie"], [1, "card", "distribution-card"], [1, "fa-solid", "fa-code-compare"], [1, "section-subtitle"], [1, "card", "version-card"], [1, "empty-mini"], ["Size", "compact", "Icon", "fa-solid fa-code-branch", "Title", "No version data available"], [1, "version-table-wrap"], ["Size", "compact", "Icon", "fa-solid fa-chart-area", "Title", "No trend data"], [1, "bar-chart"], [1, "bar-row"], [1, "trend-direction"], [1, "bar-label"], [1, "bar-track"], [1, "bar-fill", "pass-rate-bar"], [1, "bar-value"], [1, "fa-solid", "fa-arrow-trend-up", "trend-up"], [1, "trend-up"], [1, "fa-solid", "fa-arrow-trend-down", "trend-down"], [1, "trend-down"], [1, "fa-solid", "fa-minus", "trend-neutral"], [1, "trend-neutral"], ["Size", "compact", "Icon", "fa-solid fa-chart-bar", "Title", "No volume data"], [1, "legend-row"], [1, "legend-dot", "passed-seg"], [1, "legend-dot", "failed-seg"], [1, "legend-dot", "skipped-seg"], [1, "bar-track", "stacked"], [1, "bar-segment", "passed-seg"], [1, "bar-segment", "failed-seg"], [1, "bar-segment", "skipped-seg"], ["Size", "compact", "Icon", "fa-solid fa-star", "Title", "No score data"], [1, "bar-fill"], ["Size", "compact", "Icon", "fa-solid fa-wallet", "Title", "No cost data"], [1, "bar-fill", "cost-bar"], ["Variant", "success", "Size", "compact", "Title", "No failing tests"], [1, "insight-list"], [1, "insight-row"], [1, "insight-name", 3, "title"], [1, "badge-fail"], [1, "insight-secondary"], ["Size", "compact", "Icon", "fa-solid fa-bolt", "Title", "No duration data"], [1, "insight-primary"], ["Size", "compact", "Icon", "fa-solid fa-dollar-sign", "Title", "No cost data"], ["Size", "compact", "Icon", "fa-solid fa-chart-simple", "Title", "No score data available"], [1, "distribution-bars"], [1, "dist-row"], [1, "dist-label"], [1, "dist-track"], [1, "dist-fill"], [1, "dist-count"], [1, "dist-pct"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "version-table"], [1, "num"], [1, "version-label"], [1, "version-agent"], [1, "delta", 3, "delta-up", "delta-down", "delta-neutral"], [1, "delta"], [1, "fa-solid", "fa-arrow-up"], [1, "fa-solid", "fa-arrow-down"]], template: function TestingAnalyticsComponent_Template(rf, ctx) { if (rf & 1) {
1054
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TestingAnalyticsComponent, selectors: [["app-testing-analytics"]], inputs: { InitialState: "InitialState", initialState: "initialState", HideToolbar: "HideToolbar" }, outputs: { StateChange: "StateChange", stateChange: "stateChange" }, standalone: false, decls: 4, vars: 1, consts: [["content", ""], [4, "ngTemplateOutlet"], ["Title", "Testing Analytics", "Icon", "fa-solid fa-chart-bar", "Subtitle", "Test trends, pass rates, and version metrics"], ["actions", ""], [3, "Label", "Active"], [3, "Clicked"], [3, "Clicked", "Label", "Active"], [1, "testing-analytics"], ["role", "alert"], [1, "section-title"], [1, "fa-solid", "fa-chart-line"], [1, "trend-grid"], [1, "card", "trend-card"], [1, "fa-solid", "fa-check-double"], [1, "fa-solid", "fa-layer-group"], [1, "fa-solid", "fa-star-half-stroke"], [1, "fa-solid", "fa-dollar-sign"], [1, "fa-solid", "fa-magnifying-glass-chart"], [1, "insights-grid"], [1, "card", "insight-card"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "fa-solid", "fa-clock"], [1, "fa-solid", "fa-coins"], [1, "fa-solid", "fa-chart-pie"], [1, "card", "distribution-card"], [1, "fa-solid", "fa-code-compare"], [1, "section-subtitle"], [1, "card", "version-card"], [1, "empty-mini"], ["Size", "compact", "Icon", "fa-solid fa-code-branch", "Title", "No version data available"], [1, "version-table-wrap"], [1, "fa-solid", "fa-scale-balanced"], ["type", "button", "mjButton", "", "variant", "secondary", "size", "sm"], ["type", "button", "mjButton", "", "variant", "secondary", "size", "sm", 3, "click"], ["Size", "compact", "Icon", "fa-solid fa-chart-area", "Title", "No trend data"], [1, "bar-chart"], [1, "bar-row"], [1, "trend-direction"], [1, "bar-label"], [1, "bar-track"], [1, "bar-fill", "pass-rate-bar"], [1, "bar-value"], [1, "fa-solid", "fa-arrow-trend-up", "trend-up"], [1, "trend-up"], [1, "fa-solid", "fa-arrow-trend-down", "trend-down"], [1, "trend-down"], [1, "fa-solid", "fa-minus", "trend-neutral"], [1, "trend-neutral"], ["Size", "compact", "Icon", "fa-solid fa-chart-bar", "Title", "No volume data"], [1, "legend-row"], [1, "legend-dot", "passed-seg"], [1, "legend-dot", "failed-seg"], [1, "legend-dot", "skipped-seg"], [1, "bar-track", "stacked"], [1, "bar-segment", "passed-seg"], [1, "bar-segment", "failed-seg"], [1, "bar-segment", "skipped-seg"], ["Size", "compact", "Icon", "fa-solid fa-star", "Title", "No score data"], [1, "bar-fill"], ["Size", "compact", "Icon", "fa-solid fa-wallet", "Title", "No cost data"], [1, "bar-fill", "cost-bar"], ["Variant", "success", "Size", "compact", "Title", "No failing tests"], [1, "insight-list"], [1, "insight-row"], [1, "insight-name", 3, "title"], [1, "badge-fail"], [1, "insight-secondary"], ["Size", "compact", "Icon", "fa-solid fa-bolt", "Title", "No duration data"], [1, "insight-primary"], ["Size", "compact", "Icon", "fa-solid fa-dollar-sign", "Title", "No cost data"], ["Size", "compact", "Icon", "fa-solid fa-chart-simple", "Title", "No score data available"], [1, "distribution-bars"], [1, "dist-row"], [1, "dist-label"], [1, "dist-track"], [1, "dist-fill"], [1, "dist-count"], [1, "dist-pct"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "version-table"], [1, "num"], [1, "version-label"], [1, "version-agent"], [1, "delta", 3, "delta-up", "delta-down", "delta-neutral"], [1, "delta"], [1, "fa-solid", "fa-arrow-up"], [1, "fa-solid", "fa-arrow-down"]], template: function TestingAnalyticsComponent_Template(rf, ctx) { if (rf & 1) {
908
1055
  i0.ɵɵconditionalCreate(0, TestingAnalyticsComponent_Conditional_0_Template, 1, 1, "ng-container")(1, TestingAnalyticsComponent_Conditional_1_Template, 8, 1, "mj-page-layout");
909
- i0.ɵɵtemplate(2, TestingAnalyticsComponent_ng_template_2_Template, 66, 25, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
1056
+ i0.ɵɵtemplate(2, TestingAnalyticsComponent_ng_template_2_Template, 69, 27, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
910
1057
  } if (rf & 2) {
911
1058
  i0.ɵɵconditional(ctx.HideToolbar ? 0 : 1);
912
- } }, dependencies: [i2.NgTemplateOutlet, i3.MJPageHeaderComponent, i3.MJPageLayoutComponent, i3.MJPageBodyComponent, i3.MJFilterChipComponent, i3.MJRefreshButtonComponent, i3.MJEmptyStateComponent, i2.AsyncPipe, i2.DecimalPipe, i2.DatePipe], styles: ["\n \n \n .testing-analytics[_ngcontent-%COMP%] {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n background: var(--mj-bg-surface-card);\n }\n\n \n \n \n .page-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 12px;\n background: var(--mj-bg-surface);\n padding: 20px 24px;\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n margin-bottom: 24px;\n }\n .header-left[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 10px;\n }\n .header-left[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n .header-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n }\n\n \n .time-range-pills[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n padding: 3px;\n }\n .pill[_ngcontent-%COMP%] {\n padding: 6px 14px;\n border: none;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n cursor: pointer;\n transition: all 0.2s ease;\n }\n .pill[_ngcontent-%COMP%]:hover { background: var(--mj-border-default); }\n .pill.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n box-shadow: var(--mj-shadow-sm);\n }\n\n .refresh-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n }\n .refresh-btn[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-card); border-color: var(--mj-border-strong); }\n\n \n \n \n .section-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 14px;\n }\n .section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n .section-subtitle[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 400;\n color: var(--mj-text-disabled);\n margin-left: 4px;\n }\n\n \n \n \n .card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n padding: 20px;\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n }\n .card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n }\n .card[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 14px 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .card[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); font-size: 14px; }\n\n \n \n \n .trend-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 16px;\n margin-bottom: 28px;\n }\n\n \n .bar-chart[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n .bar-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 60px 1fr 52px;\n align-items: center;\n gap: 8px;\n }\n .bar-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-disabled);\n font-weight: 500;\n text-align: right;\n white-space: nowrap;\n }\n .bar-track[_ngcontent-%COMP%] {\n height: 14px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 7px;\n overflow: hidden;\n position: relative;\n }\n .bar-track.stacked[_ngcontent-%COMP%] {\n display: flex;\n }\n .bar-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 7px;\n transition: width 0.4s ease;\n }\n .bar-value[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-align: right;\n }\n\n \n .pass-rate-bar[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n }\n .cost-bar[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n }\n .score-excellent[_ngcontent-%COMP%] { background: var(--mj-status-success); }\n .score-good[_ngcontent-%COMP%] { background: var(--mj-brand-primary); }\n .score-fair[_ngcontent-%COMP%] { background: var(--mj-status-warning); }\n .score-poor[_ngcontent-%COMP%] { background: var(--mj-status-error); }\n\n \n .text-excellent[_ngcontent-%COMP%] { color: var(--mj-status-success); }\n .text-good[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n .text-fair[_ngcontent-%COMP%] { color: var(--mj-status-warning); }\n .text-poor[_ngcontent-%COMP%] { color: var(--mj-status-error); }\n .text-pass-good[_ngcontent-%COMP%] { color: var(--mj-status-success); }\n .text-pass-warn[_ngcontent-%COMP%] { color: var(--mj-status-warning); }\n .text-pass-bad[_ngcontent-%COMP%] { color: var(--mj-status-error); }\n\n \n .bar-segment[_ngcontent-%COMP%] { height: 100%; transition: width 0.4s ease; }\n .passed-seg[_ngcontent-%COMP%] { background: var(--mj-status-success); }\n .failed-seg[_ngcontent-%COMP%] { background: var(--mj-status-error); }\n .skipped-seg[_ngcontent-%COMP%] { background: var(--mj-text-disabled); }\n\n .legend-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 8px;\n font-size: 10px;\n color: var(--mj-text-disabled);\n }\n .legend-dot[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n display: inline-block;\n margin-left: 8px;\n }\n .legend-dot[_ngcontent-%COMP%]:first-child { margin-left: 0; }\n .legend-dot.passed-seg[_ngcontent-%COMP%] { background: var(--mj-status-success); }\n .legend-dot.failed-seg[_ngcontent-%COMP%] { background: var(--mj-status-error); }\n .legend-dot.skipped-seg[_ngcontent-%COMP%] { background: var(--mj-text-disabled); }\n\n .trend-direction[_ngcontent-%COMP%] {\n margin-top: 10px;\n font-size: 12px;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 6px;\n }\n .trend-up[_ngcontent-%COMP%] { color: var(--mj-status-success); }\n .trend-down[_ngcontent-%COMP%] { color: var(--mj-status-error); }\n .trend-neutral[_ngcontent-%COMP%] { color: var(--mj-text-disabled); }\n\n \n \n \n .insights-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n margin-bottom: 28px;\n }\n\n .insight-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n .insight-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr auto auto;\n align-items: center;\n gap: 10px;\n padding: 8px 10px;\n border-radius: 6px;\n transition: background 0.15s ease;\n }\n .insight-row[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-card); }\n .insight-name[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .badge-fail[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n font-size: 11px;\n font-weight: 700;\n padding: 2px 8px;\n border-radius: 10px;\n }\n .insight-primary[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-brand-primary);\n }\n .insight-secondary[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n }\n\n \n \n \n .distribution-card[_ngcontent-%COMP%] {\n margin-bottom: 28px;\n }\n .distribution-bars[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n .dist-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 110px 1fr 40px 50px;\n align-items: center;\n gap: 10px;\n }\n .dist-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n }\n .dist-track[_ngcontent-%COMP%] {\n height: 22px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n overflow: hidden;\n }\n .dist-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 6px;\n transition: width 0.4s ease;\n }\n .dist-count[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-primary);\n text-align: right;\n }\n .dist-pct[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n text-align: right;\n }\n\n \n \n \n .version-card[_ngcontent-%COMP%] {\n margin-bottom: 28px;\n }\n .version-table-wrap[_ngcontent-%COMP%] {\n overflow-x: auto;\n }\n .version-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n }\n .version-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n padding: 10px 12px;\n border-bottom: 2px solid var(--mj-border-default);\n }\n .version-table[_ngcontent-%COMP%] th.num[_ngcontent-%COMP%], \n .version-table[_ngcontent-%COMP%] td.num[_ngcontent-%COMP%] { text-align: right; }\n .version-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 10px 12px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n vertical-align: middle;\n }\n .version-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-card); }\n .version-label[_ngcontent-%COMP%] {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n font-weight: 600;\n font-size: 12px;\n color: var(--mj-brand-primary);\n }\n .version-agent[_ngcontent-%COMP%] {\n display: block;\n font-size: 11px;\n color: var(--mj-text-disabled);\n margin-top: 2px;\n }\n\n .delta[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n font-size: 11px;\n font-weight: 600;\n margin-left: 6px;\n padding: 1px 6px;\n border-radius: 4px;\n }\n .delta[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 9px; }\n .delta-up[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface)); color: var(--mj-status-success); }\n .delta-down[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface)); color: var(--mj-status-error); }\n .delta-neutral[_ngcontent-%COMP%] { background: var(--mj-bg-surface-card); color: var(--mj-text-disabled); }\n\n \n \n \n .empty-mini[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 32px 16px;\n color: var(--mj-border-strong);\n gap: 8px;\n }\n .empty-mini[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 28px; opacity: 0.5; }\n .empty-mini[_ngcontent-%COMP%] span[_ngcontent-%COMP%] { font-size: 12px; }\n\n \n \n \n @media (max-width: 1100px) {\n .trend-grid[_ngcontent-%COMP%] { grid-template-columns: 1fr; }\n .insights-grid[_ngcontent-%COMP%] { grid-template-columns: 1fr 1fr; }\n }\n @media (max-width: 720px) {\n .page-header[_ngcontent-%COMP%] { flex-direction: column; align-items: flex-start; }\n .insights-grid[_ngcontent-%COMP%] { grid-template-columns: 1fr; }\n .dist-row[_ngcontent-%COMP%] { grid-template-columns: 80px 1fr 32px 42px; }\n }"], changeDetection: 0 });
1059
+ } }, dependencies: [i2.NgTemplateOutlet, i3.MJButtonDirective, i3.MJPageHeaderComponent, i3.MJPageLayoutComponent, i3.MJPageBodyComponent, i3.MJFilterChipComponent, i3.MJRefreshButtonComponent, i3.MJEmptyStateComponent, i2.AsyncPipe, i2.DecimalPipe, i2.DatePipe], styles: ["\n \n \n .testing-analytics[_ngcontent-%COMP%] {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n background: var(--mj-bg-surface-card);\n }\n\n \n \n \n .page-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 12px;\n background: var(--mj-bg-surface);\n padding: 20px 24px;\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n margin-bottom: 24px;\n }\n .header-left[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 10px;\n }\n .header-left[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n .header-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n }\n\n \n .time-range-pills[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n padding: 3px;\n }\n .pill[_ngcontent-%COMP%] {\n padding: 6px 14px;\n border: none;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n cursor: pointer;\n transition: all 0.2s ease;\n }\n .pill[_ngcontent-%COMP%]:hover { background: var(--mj-border-default); }\n .pill.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n box-shadow: var(--mj-shadow-sm);\n }\n\n .refresh-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n }\n .refresh-btn[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-card); border-color: var(--mj-border-strong); }\n\n \n \n \n .section-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 14px;\n }\n .section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n .section-subtitle[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 400;\n color: var(--mj-text-disabled);\n margin-left: 4px;\n }\n\n \n \n \n .card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n padding: 20px;\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n }\n .card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n }\n .card[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 14px 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .card[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); font-size: 14px; }\n\n \n \n \n .trend-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 16px;\n margin-bottom: 28px;\n }\n\n \n .bar-chart[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n .bar-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 60px 1fr 52px;\n align-items: center;\n gap: 8px;\n }\n .bar-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-disabled);\n font-weight: 500;\n text-align: right;\n white-space: nowrap;\n }\n .bar-track[_ngcontent-%COMP%] {\n height: 14px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 7px;\n overflow: hidden;\n position: relative;\n }\n .bar-track.stacked[_ngcontent-%COMP%] {\n display: flex;\n }\n .bar-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 7px;\n transition: width 0.4s ease;\n }\n .bar-value[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-align: right;\n }\n\n \n .pass-rate-bar[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n }\n .cost-bar[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n }\n .score-excellent[_ngcontent-%COMP%] { background: var(--mj-status-success); }\n .score-good[_ngcontent-%COMP%] { background: var(--mj-brand-primary); }\n .score-fair[_ngcontent-%COMP%] { background: var(--mj-status-warning); }\n .score-poor[_ngcontent-%COMP%] { background: var(--mj-status-error); }\n\n \n .text-excellent[_ngcontent-%COMP%] { color: var(--mj-status-success); }\n .text-good[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n .text-fair[_ngcontent-%COMP%] { color: var(--mj-status-warning); }\n .text-poor[_ngcontent-%COMP%] { color: var(--mj-status-error); }\n .text-pass-good[_ngcontent-%COMP%] { color: var(--mj-status-success); }\n .text-pass-warn[_ngcontent-%COMP%] { color: var(--mj-status-warning); }\n .text-pass-bad[_ngcontent-%COMP%] { color: var(--mj-status-error); }\n\n \n .bar-segment[_ngcontent-%COMP%] { height: 100%; transition: width 0.4s ease; }\n .passed-seg[_ngcontent-%COMP%] { background: var(--mj-status-success); }\n .failed-seg[_ngcontent-%COMP%] { background: var(--mj-status-error); }\n .skipped-seg[_ngcontent-%COMP%] { background: var(--mj-text-disabled); }\n\n .legend-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 8px;\n font-size: 10px;\n color: var(--mj-text-disabled);\n }\n .legend-dot[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n display: inline-block;\n margin-left: 8px;\n }\n .legend-dot[_ngcontent-%COMP%]:first-child { margin-left: 0; }\n .legend-dot.passed-seg[_ngcontent-%COMP%] { background: var(--mj-status-success); }\n .legend-dot.failed-seg[_ngcontent-%COMP%] { background: var(--mj-status-error); }\n .legend-dot.skipped-seg[_ngcontent-%COMP%] { background: var(--mj-text-disabled); }\n\n .trend-direction[_ngcontent-%COMP%] {\n margin-top: 10px;\n font-size: 12px;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 6px;\n }\n .trend-up[_ngcontent-%COMP%] { color: var(--mj-status-success); }\n .trend-down[_ngcontent-%COMP%] { color: var(--mj-status-error); }\n .trend-neutral[_ngcontent-%COMP%] { color: var(--mj-text-disabled); }\n\n \n \n \n .insights-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n margin-bottom: 28px;\n }\n\n .insight-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n .insight-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr auto auto;\n align-items: center;\n gap: 10px;\n padding: 8px 10px;\n border-radius: 6px;\n transition: background 0.15s ease;\n }\n .insight-row[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-card); }\n .insight-name[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .badge-fail[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n font-size: 11px;\n font-weight: 700;\n padding: 2px 8px;\n border-radius: 10px;\n }\n .insight-primary[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-brand-primary);\n }\n .insight-secondary[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n }\n\n \n \n \n .distribution-card[_ngcontent-%COMP%] {\n margin-bottom: 28px;\n }\n .distribution-bars[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n .dist-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 110px 1fr 40px 50px;\n align-items: center;\n gap: 10px;\n }\n .dist-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n }\n .dist-track[_ngcontent-%COMP%] {\n height: 22px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n overflow: hidden;\n }\n .dist-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 6px;\n transition: width 0.4s ease;\n }\n .dist-count[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-primary);\n text-align: right;\n }\n .dist-pct[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n text-align: right;\n }\n\n \n \n \n .version-card[_ngcontent-%COMP%] {\n margin-bottom: 28px;\n }\n .version-table-wrap[_ngcontent-%COMP%] {\n overflow-x: auto;\n }\n .version-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n }\n .version-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n padding: 10px 12px;\n border-bottom: 2px solid var(--mj-border-default);\n }\n .version-table[_ngcontent-%COMP%] th.num[_ngcontent-%COMP%], \n .version-table[_ngcontent-%COMP%] td.num[_ngcontent-%COMP%] { text-align: right; }\n .version-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 10px 12px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n vertical-align: middle;\n }\n .version-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-card); }\n .version-label[_ngcontent-%COMP%] {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n font-weight: 600;\n font-size: 12px;\n color: var(--mj-brand-primary);\n }\n .version-agent[_ngcontent-%COMP%] {\n display: block;\n font-size: 11px;\n color: var(--mj-text-disabled);\n margin-top: 2px;\n }\n\n .delta[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n font-size: 11px;\n font-weight: 600;\n margin-left: 6px;\n padding: 1px 6px;\n border-radius: 4px;\n }\n .delta[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 9px; }\n .delta-up[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface)); color: var(--mj-status-success); }\n .delta-down[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface)); color: var(--mj-status-error); }\n .delta-neutral[_ngcontent-%COMP%] { background: var(--mj-bg-surface-card); color: var(--mj-text-disabled); }\n\n \n \n \n .empty-mini[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 32px 16px;\n color: var(--mj-border-strong);\n gap: 8px;\n }\n .empty-mini[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 28px; opacity: 0.5; }\n .empty-mini[_ngcontent-%COMP%] span[_ngcontent-%COMP%] { font-size: 12px; }\n\n \n \n \n @media (max-width: 1100px) {\n .trend-grid[_ngcontent-%COMP%] { grid-template-columns: 1fr; }\n .insights-grid[_ngcontent-%COMP%] { grid-template-columns: 1fr 1fr; }\n }\n @media (max-width: 720px) {\n .page-header[_ngcontent-%COMP%] { flex-direction: column; align-items: flex-start; }\n .insights-grid[_ngcontent-%COMP%] { grid-template-columns: 1fr; }\n .dist-row[_ngcontent-%COMP%] { grid-template-columns: 80px 1fr 32px 42px; }\n }"], changeDetection: 0 });
913
1060
  }
914
1061
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TestingAnalyticsComponent, [{
915
1062
  type: Component,
@@ -941,6 +1088,26 @@ export class TestingAnalyticsComponent {
941
1088
 
942
1089
  <ng-template #content>
943
1090
  <div class="testing-analytics">
1091
+ @if (RubricAnalyticsError) {
1092
+ <p role="alert">{{ RubricAnalyticsError }}</p>
1093
+ }
1094
+ @if (RubricTrend.length || FailureRates.length) {
1095
+ <div class="section-title">
1096
+ <i class="fa-solid fa-scale-balanced"></i>
1097
+ Rubric scores
1098
+ </div>
1099
+ @for (point of RubricTrend; track $index) {
1100
+ <p>
1101
+ {{ point.at }} — {{ point.score }}
1102
+ @if (point.runId) {
1103
+ <button type="button" mjButton variant="secondary" size="sm" (click)="OpenRun(point.runId)">Open run</button>
1104
+ }
1105
+ </p>
1106
+ }
1107
+ @for (rate of FailureRates; track rate.key) {
1108
+ <p>CriterionKey <code>{{ rate.key }}</code> — {{ rate.rate }}</p>
1109
+ }
1110
+ }
944
1111
 
945
1112
  <!-- ===== 2. Trend Overview (2-column CSS charts) ===== -->
946
1113
  <div class="section-title">
@@ -1159,6 +1326,8 @@ export class TestingAnalyticsComponent {
1159
1326
  <div class="card version-card">
1160
1327
  @if (IsLoadingVersions) {
1161
1328
  <div class="empty-mini"><i class="fa-solid fa-spinner fa-spin"></i><span>Loading versions...</span></div>
1329
+ } @else if (VersionMetricsError) {
1330
+ <p role="alert">{{ VersionMetricsError }}</p>
1162
1331
  } @else if (VersionRows.length === 0) {
1163
1332
  <mj-empty-state Size="compact" Icon="fa-solid fa-code-branch" Title="No version data available" />
1164
1333
  } @else {
@@ -1229,5 +1398,5 @@ export class TestingAnalyticsComponent {
1229
1398
  }], stateChange: [{
1230
1399
  type: Output
1231
1400
  }] }); })();
1232
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TestingAnalyticsComponent, { className: "TestingAnalyticsComponent", filePath: "src/Testing/components/testing-analytics.component.ts", lineNumber: 780 }); })();
1401
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TestingAnalyticsComponent, { className: "TestingAnalyticsComponent", filePath: "src/Testing/components/testing-analytics.component.ts", lineNumber: 805 }); })();
1233
1402
  //# sourceMappingURL=testing-analytics.component.js.map