@memberjunction/ng-core-entity-forms 5.1.0 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js +4 -4
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +18 -18
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +309 -309
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +9 -9
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +3 -3
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +8 -8
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +2 -2
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +2 -2
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +10 -10
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +3 -3
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +3 -3
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +8 -8
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +225 -225
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +7 -7
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +259 -259
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +3 -3
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +48 -48
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts +4 -4
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +164 -164
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts +3 -3
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +299 -299
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts +3 -3
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.js +11 -11
- package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.d.ts +8 -8
- package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.js +163 -163
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts +3 -3
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +175 -184
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.d.ts +1 -0
- package/dist/lib/custom/Queries/query-run-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js +3 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.d.ts +3 -3
- package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +53 -53
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.d.ts +3 -3
- package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +161 -161
- package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-rubric-form.component.d.ts +3 -3
- package/dist/lib/custom/Tests/test-rubric-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-rubric-form.component.js +12 -12
- package/dist/lib/custom/Tests/test-rubric-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts +3 -3
- package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js +14 -14
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.d.ts +3 -3
- package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.js +140 -140
- package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts +3 -3
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +243 -243
- package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +3 -3
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.js +213 -213
- package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +6 -6
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +148 -148
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +1 -1
- package/dist/lib/custom/custom-forms.module.js +85 -85
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js +3 -3
- package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js +5 -5
- package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js.map +1 -1
- package/package.json +30 -30
|
@@ -24,12 +24,12 @@ import * as i5 from "@memberjunction/ng-testing";
|
|
|
24
24
|
import * as i6 from "./entity-link-pill.component";
|
|
25
25
|
const _c0 = () => [1, 2, 3, 4, 5];
|
|
26
26
|
const _c1 = () => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
|
|
27
|
-
function
|
|
27
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
28
28
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
29
29
|
i0.ɵɵelementStart(0, "li");
|
|
30
30
|
i0.ɵɵelement(1, "i", 7);
|
|
31
31
|
i0.ɵɵelementStart(2, "a", 3);
|
|
32
|
-
i0.ɵɵlistener("click", function
|
|
32
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_9_Template_a_click_2_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.openTestSuite()); });
|
|
33
33
|
i0.ɵɵelement(3, "i", 66);
|
|
34
34
|
i0.ɵɵelementStart(4, "span", 5);
|
|
35
35
|
i0.ɵɵtext(5);
|
|
@@ -39,7 +39,7 @@ function TestSuiteRunFormComponentExtended_Conditional_9_Template(rf, ctx) { if
|
|
|
39
39
|
i0.ɵɵadvance(5);
|
|
40
40
|
i0.ɵɵtextInterpolate(ctx_r1.testSuite.Name);
|
|
41
41
|
} }
|
|
42
|
-
function
|
|
42
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
43
43
|
i0.ɵɵelementStart(0, "span", 15);
|
|
44
44
|
i0.ɵɵelement(1, "i", 67);
|
|
45
45
|
i0.ɵɵtext(2);
|
|
@@ -49,7 +49,7 @@ function TestSuiteRunFormComponentExtended_Conditional_25_Template(rf, ctx) { if
|
|
|
49
49
|
i0.ɵɵadvance(2);
|
|
50
50
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Environment, " ");
|
|
51
51
|
} }
|
|
52
|
-
function
|
|
52
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
53
53
|
i0.ɵɵelementStart(0, "span", 16);
|
|
54
54
|
i0.ɵɵelement(1, "i", 68);
|
|
55
55
|
i0.ɵɵtext(2);
|
|
@@ -59,15 +59,15 @@ function TestSuiteRunFormComponentExtended_Conditional_26_Template(rf, ctx) { if
|
|
|
59
59
|
i0.ɵɵadvance(2);
|
|
60
60
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.TriggerType, " ");
|
|
61
61
|
} }
|
|
62
|
-
function
|
|
62
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
63
63
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
64
64
|
i0.ɵɵelementStart(0, "button", 69);
|
|
65
|
-
i0.ɵɵlistener("click", function
|
|
65
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_29_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.reRunSuite()); });
|
|
66
66
|
i0.ɵɵelement(1, "i", 70);
|
|
67
67
|
i0.ɵɵtext(2, " Re-run Suite ");
|
|
68
68
|
i0.ɵɵelementEnd();
|
|
69
69
|
} }
|
|
70
|
-
function
|
|
70
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_107_Conditional_4_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
71
71
|
i0.ɵɵelementStart(0, "span", 78);
|
|
72
72
|
i0.ɵɵtext(1);
|
|
73
73
|
i0.ɵɵelementEnd();
|
|
@@ -76,29 +76,29 @@ function TestSuiteRunFormComponentExtended_Conditional_107_Conditional_4_For_2_T
|
|
|
76
76
|
i0.ɵɵadvance();
|
|
77
77
|
i0.ɵɵtextInterpolate(tag_r5);
|
|
78
78
|
} }
|
|
79
|
-
function
|
|
79
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_107_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
80
80
|
i0.ɵɵelementStart(0, "div", 74);
|
|
81
|
-
i0.ɵɵrepeaterCreate(1,
|
|
81
|
+
i0.ɵɵrepeaterCreate(1, MJTestSuiteRunFormComponentExtended_Conditional_107_Conditional_4_For_2_Template, 2, 1, "span", 78, i0.ɵɵrepeaterTrackByIdentity);
|
|
82
82
|
i0.ɵɵelementEnd();
|
|
83
83
|
} if (rf & 2) {
|
|
84
84
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
85
85
|
i0.ɵɵadvance();
|
|
86
86
|
i0.ɵɵrepeater(ctx_r1.tags);
|
|
87
87
|
} }
|
|
88
|
-
function
|
|
88
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_107_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
89
89
|
i0.ɵɵelementStart(0, "span", 75);
|
|
90
90
|
i0.ɵɵtext(1, "No tags");
|
|
91
91
|
i0.ɵɵelementEnd();
|
|
92
92
|
} }
|
|
93
|
-
function
|
|
93
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_107_Template(rf, ctx) { if (rf & 1) {
|
|
94
94
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
95
95
|
i0.ɵɵelementStart(0, "div", 45)(1, "div", 71)(2, "span", 72);
|
|
96
96
|
i0.ɵɵelement(3, "i", 73);
|
|
97
97
|
i0.ɵɵelementEnd();
|
|
98
|
-
i0.ɵɵconditionalCreate(4,
|
|
99
|
-
i0.ɵɵconditionalCreate(5,
|
|
98
|
+
i0.ɵɵconditionalCreate(4, MJTestSuiteRunFormComponentExtended_Conditional_107_Conditional_4_Template, 3, 0, "div", 74);
|
|
99
|
+
i0.ɵɵconditionalCreate(5, MJTestSuiteRunFormComponentExtended_Conditional_107_Conditional_5_Template, 2, 0, "span", 75);
|
|
100
100
|
i0.ɵɵelementStart(6, "button", 76);
|
|
101
|
-
i0.ɵɵlistener("click", function
|
|
101
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_107_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.startEditingTags()); });
|
|
102
102
|
i0.ɵɵelement(7, "i", 77);
|
|
103
103
|
i0.ɵɵtext(8, " Add ");
|
|
104
104
|
i0.ɵɵelementEnd()()();
|
|
@@ -109,12 +109,12 @@ function TestSuiteRunFormComponentExtended_Conditional_107_Template(rf, ctx) { i
|
|
|
109
109
|
i0.ɵɵadvance();
|
|
110
110
|
i0.ɵɵconditional(ctx_r1.tags.length === 0 ? 5 : -1);
|
|
111
111
|
} }
|
|
112
|
-
function
|
|
112
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_108_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
113
113
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
114
114
|
i0.ɵɵelementStart(0, "span", 83);
|
|
115
115
|
i0.ɵɵtext(1);
|
|
116
116
|
i0.ɵɵelementStart(2, "button", 92);
|
|
117
|
-
i0.ɵɵlistener("click", function
|
|
117
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_108_For_8_Template_button_click_2_listener() { const tag_r8 = i0.ɵɵrestoreView(_r7).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.removeTag(tag_r8)); });
|
|
118
118
|
i0.ɵɵelement(3, "i", 93);
|
|
119
119
|
i0.ɵɵelementEnd()();
|
|
120
120
|
} if (rf & 2) {
|
|
@@ -122,39 +122,39 @@ function TestSuiteRunFormComponentExtended_Conditional_108_For_8_Template(rf, ct
|
|
|
122
122
|
i0.ɵɵadvance();
|
|
123
123
|
i0.ɵɵtextInterpolate1(" ", tag_r8, " ");
|
|
124
124
|
} }
|
|
125
|
-
function
|
|
125
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_108_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
126
126
|
i0.ɵɵelementStart(0, "span", 84);
|
|
127
127
|
i0.ɵɵtext(1, "No tags yet");
|
|
128
128
|
i0.ɵɵelementEnd();
|
|
129
129
|
} }
|
|
130
|
-
function
|
|
130
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_108_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
131
131
|
i0.ɵɵelement(0, "i", 90);
|
|
132
132
|
} }
|
|
133
|
-
function
|
|
133
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_108_Template(rf, ctx) { if (rf & 1) {
|
|
134
134
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
135
135
|
i0.ɵɵelementStart(0, "div", 46)(1, "div", 79)(2, "span", 80);
|
|
136
136
|
i0.ɵɵelement(3, "i", 73);
|
|
137
137
|
i0.ɵɵtext(4, " Edit Tags");
|
|
138
138
|
i0.ɵɵelementEnd()();
|
|
139
139
|
i0.ɵɵelementStart(5, "div", 81)(6, "div", 82);
|
|
140
|
-
i0.ɵɵrepeaterCreate(7,
|
|
141
|
-
i0.ɵɵconditionalCreate(9,
|
|
140
|
+
i0.ɵɵrepeaterCreate(7, MJTestSuiteRunFormComponentExtended_Conditional_108_For_8_Template, 4, 1, "span", 83, i0.ɵɵrepeaterTrackByIdentity);
|
|
141
|
+
i0.ɵɵconditionalCreate(9, MJTestSuiteRunFormComponentExtended_Conditional_108_Conditional_9_Template, 2, 0, "span", 84);
|
|
142
142
|
i0.ɵɵelementEnd();
|
|
143
143
|
i0.ɵɵelementStart(10, "div", 85)(11, "input", 86);
|
|
144
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
145
|
-
i0.ɵɵlistener("keyup.enter", function
|
|
144
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJTestSuiteRunFormComponentExtended_Conditional_108_Template_input_ngModelChange_11_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.newTag, $event) || (ctx_r1.newTag = $event); return i0.ɵɵresetView($event); });
|
|
145
|
+
i0.ɵɵlistener("keyup.enter", function MJTestSuiteRunFormComponentExtended_Conditional_108_Template_input_keyup_enter_11_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.addTag()); });
|
|
146
146
|
i0.ɵɵelementEnd();
|
|
147
147
|
i0.ɵɵelementStart(12, "button", 87);
|
|
148
|
-
i0.ɵɵlistener("click", function
|
|
148
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_108_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.addTag()); });
|
|
149
149
|
i0.ɵɵelement(13, "i", 77);
|
|
150
150
|
i0.ɵɵelementEnd()()();
|
|
151
151
|
i0.ɵɵelementStart(14, "div", 88)(15, "button", 89);
|
|
152
|
-
i0.ɵɵlistener("click", function
|
|
153
|
-
i0.ɵɵconditionalCreate(16,
|
|
152
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_108_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.saveTags()); });
|
|
153
|
+
i0.ɵɵconditionalCreate(16, MJTestSuiteRunFormComponentExtended_Conditional_108_Conditional_16_Template, 1, 0, "i", 90);
|
|
154
154
|
i0.ɵɵtext(17);
|
|
155
155
|
i0.ɵɵelementEnd();
|
|
156
156
|
i0.ɵɵelementStart(18, "button", 91);
|
|
157
|
-
i0.ɵɵlistener("click", function
|
|
157
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_108_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.cancelEditingTags()); });
|
|
158
158
|
i0.ɵɵtext(19, "Cancel");
|
|
159
159
|
i0.ɵɵelementEnd()()();
|
|
160
160
|
} if (rf & 2) {
|
|
@@ -174,7 +174,7 @@ function TestSuiteRunFormComponentExtended_Conditional_108_Template(rf, ctx) { i
|
|
|
174
174
|
i0.ɵɵadvance();
|
|
175
175
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.savingTags ? "Saving..." : "Save", " ");
|
|
176
176
|
} }
|
|
177
|
-
function
|
|
177
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_117_Template(rf, ctx) { if (rf & 1) {
|
|
178
178
|
i0.ɵɵelementStart(0, "span", 51);
|
|
179
179
|
i0.ɵɵtext(1);
|
|
180
180
|
i0.ɵɵelementEnd();
|
|
@@ -183,7 +183,7 @@ function TestSuiteRunFormComponentExtended_Conditional_117_Template(rf, ctx) { i
|
|
|
183
183
|
i0.ɵɵadvance();
|
|
184
184
|
i0.ɵɵtextInterpolate(ctx_r1.testRuns.length);
|
|
185
185
|
} }
|
|
186
|
-
function
|
|
186
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
187
187
|
i0.ɵɵelementStart(0, "div", 110)(1, "span", 111);
|
|
188
188
|
i0.ɵɵtext(2, "Avg Rating");
|
|
189
189
|
i0.ɵɵelementEnd();
|
|
@@ -195,7 +195,7 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Condit
|
|
|
195
195
|
i0.ɵɵadvance(4);
|
|
196
196
|
i0.ɵɵtextInterpolate1("", ctx_r1.evaluationMetrics.humanAvgRating.toFixed(1), "/10");
|
|
197
197
|
} }
|
|
198
|
-
function
|
|
198
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_2_Conditional_12_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
199
199
|
i0.ɵɵelementStart(0, "span", 115);
|
|
200
200
|
i0.ɵɵtext(1);
|
|
201
201
|
i0.ɵɵelementEnd();
|
|
@@ -204,14 +204,14 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Condit
|
|
|
204
204
|
i0.ɵɵadvance();
|
|
205
205
|
i0.ɵɵtextInterpolate1("", ctx_r1.evaluationMetrics.humanIncorrectCount, " incorrect");
|
|
206
206
|
} }
|
|
207
|
-
function
|
|
207
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
208
208
|
i0.ɵɵelementStart(0, "div", 110)(1, "span", 111);
|
|
209
209
|
i0.ɵɵtext(2, "Correct");
|
|
210
210
|
i0.ɵɵelementEnd();
|
|
211
211
|
i0.ɵɵelementStart(3, "span", 114);
|
|
212
212
|
i0.ɵɵtext(4);
|
|
213
213
|
i0.ɵɵelementEnd();
|
|
214
|
-
i0.ɵɵconditionalCreate(5,
|
|
214
|
+
i0.ɵɵconditionalCreate(5, MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_2_Conditional_12_Conditional_5_Template, 2, 1, "span", 115);
|
|
215
215
|
i0.ɵɵelementEnd();
|
|
216
216
|
} if (rf & 2) {
|
|
217
217
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -220,7 +220,7 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Condit
|
|
|
220
220
|
i0.ɵɵadvance();
|
|
221
221
|
i0.ɵɵconditional(ctx_r1.evaluationMetrics.humanIncorrectCount > 0 ? 5 : -1);
|
|
222
222
|
} }
|
|
223
|
-
function
|
|
223
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_2_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
224
224
|
i0.ɵɵelementStart(0, "div", 113)(1, "span", 116);
|
|
225
225
|
i0.ɵɵelement(2, "i", 117);
|
|
226
226
|
i0.ɵɵtext(3);
|
|
@@ -230,7 +230,7 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Condit
|
|
|
230
230
|
i0.ɵɵadvance(3);
|
|
231
231
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.evaluationMetrics.humanPendingCount, " need review ");
|
|
232
232
|
} }
|
|
233
|
-
function
|
|
233
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
234
234
|
i0.ɵɵelementStart(0, "div", 106)(1, "div", 107);
|
|
235
235
|
i0.ɵɵelement(2, "i", 108);
|
|
236
236
|
i0.ɵɵelementStart(3, "span");
|
|
@@ -242,10 +242,10 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Condit
|
|
|
242
242
|
i0.ɵɵelementStart(9, "span", 112);
|
|
243
243
|
i0.ɵɵtext(10);
|
|
244
244
|
i0.ɵɵelementEnd()();
|
|
245
|
-
i0.ɵɵconditionalCreate(11,
|
|
246
|
-
i0.ɵɵconditionalCreate(12,
|
|
245
|
+
i0.ɵɵconditionalCreate(11, MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_2_Conditional_11_Template, 5, 1, "div", 110);
|
|
246
|
+
i0.ɵɵconditionalCreate(12, MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_2_Conditional_12_Template, 6, 2, "div", 110);
|
|
247
247
|
i0.ɵɵelementEnd();
|
|
248
|
-
i0.ɵɵconditionalCreate(13,
|
|
248
|
+
i0.ɵɵconditionalCreate(13, MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_2_Conditional_13_Template, 4, 1, "div", 113);
|
|
249
249
|
i0.ɵɵelementEnd();
|
|
250
250
|
} if (rf & 2) {
|
|
251
251
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -258,7 +258,7 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Condit
|
|
|
258
258
|
i0.ɵɵadvance();
|
|
259
259
|
i0.ɵɵconditional(ctx_r1.evaluationMetrics.humanPendingCount > 0 ? 13 : -1);
|
|
260
260
|
} }
|
|
261
|
-
function
|
|
261
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_3_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
262
262
|
i0.ɵɵelementStart(0, "div", 110)(1, "span", 111);
|
|
263
263
|
i0.ɵɵtext(2, "Avg Score");
|
|
264
264
|
i0.ɵɵelementEnd();
|
|
@@ -270,7 +270,7 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Condit
|
|
|
270
270
|
i0.ɵɵadvance(4);
|
|
271
271
|
i0.ɵɵtextInterpolate1("", (ctx_r1.evaluationMetrics.autoAvgScore * 100).toFixed(0), "%");
|
|
272
272
|
} }
|
|
273
|
-
function
|
|
273
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_3_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
274
274
|
i0.ɵɵelementStart(0, "div", 110)(1, "span", 111);
|
|
275
275
|
i0.ɵɵtext(2, "Pass Rate");
|
|
276
276
|
i0.ɵɵelementEnd();
|
|
@@ -282,7 +282,7 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Condit
|
|
|
282
282
|
i0.ɵɵadvance(4);
|
|
283
283
|
i0.ɵɵtextInterpolate1("", ctx_r1.evaluationMetrics.autoPassRate.toFixed(0), "%");
|
|
284
284
|
} }
|
|
285
|
-
function
|
|
285
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
286
286
|
i0.ɵɵelementStart(0, "div", 106)(1, "div", 107);
|
|
287
287
|
i0.ɵɵelement(2, "i", 118);
|
|
288
288
|
i0.ɵɵelementStart(3, "span");
|
|
@@ -294,8 +294,8 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Condit
|
|
|
294
294
|
i0.ɵɵelementStart(9, "span", 112);
|
|
295
295
|
i0.ɵɵtext(10);
|
|
296
296
|
i0.ɵɵelementEnd()();
|
|
297
|
-
i0.ɵɵconditionalCreate(11,
|
|
298
|
-
i0.ɵɵconditionalCreate(12,
|
|
297
|
+
i0.ɵɵconditionalCreate(11, MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_3_Conditional_11_Template, 5, 1, "div", 110);
|
|
298
|
+
i0.ɵɵconditionalCreate(12, MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_3_Conditional_12_Template, 5, 1, "div", 110);
|
|
299
299
|
i0.ɵɵelementEnd()();
|
|
300
300
|
} if (rf & 2) {
|
|
301
301
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -306,7 +306,7 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Condit
|
|
|
306
306
|
i0.ɵɵadvance();
|
|
307
307
|
i0.ɵɵconditional(ctx_r1.evaluationMetrics.autoEvaluatedCount > 0 ? 12 : -1);
|
|
308
308
|
} }
|
|
309
|
-
function
|
|
309
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_4_Conditional_16_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
310
310
|
i0.ɵɵelementStart(0, "span", 120);
|
|
311
311
|
i0.ɵɵtext(1);
|
|
312
312
|
i0.ɵɵelementEnd();
|
|
@@ -315,7 +315,7 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Condit
|
|
|
315
315
|
i0.ɵɵadvance();
|
|
316
316
|
i0.ɵɵtextInterpolate1("", ctx_r1.evaluationMetrics.execErrorCount, " errors");
|
|
317
317
|
} }
|
|
318
|
-
function
|
|
318
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_4_Conditional_16_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
319
319
|
i0.ɵɵelementStart(0, "span", 121);
|
|
320
320
|
i0.ɵɵtext(1);
|
|
321
321
|
i0.ɵɵelementEnd();
|
|
@@ -324,12 +324,12 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Condit
|
|
|
324
324
|
i0.ɵɵadvance();
|
|
325
325
|
i0.ɵɵtextInterpolate1("", ctx_r1.evaluationMetrics.execTimeoutCount, " timeouts");
|
|
326
326
|
} }
|
|
327
|
-
function
|
|
327
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_4_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
328
328
|
i0.ɵɵelementStart(0, "div", 110)(1, "span", 111);
|
|
329
329
|
i0.ɵɵtext(2, "Issues");
|
|
330
330
|
i0.ɵɵelementEnd();
|
|
331
|
-
i0.ɵɵconditionalCreate(3,
|
|
332
|
-
i0.ɵɵconditionalCreate(4,
|
|
331
|
+
i0.ɵɵconditionalCreate(3, MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_4_Conditional_16_Conditional_3_Template, 2, 1, "span", 120);
|
|
332
|
+
i0.ɵɵconditionalCreate(4, MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_4_Conditional_16_Conditional_4_Template, 2, 1, "span", 121);
|
|
333
333
|
i0.ɵɵelementEnd();
|
|
334
334
|
} if (rf & 2) {
|
|
335
335
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -338,7 +338,7 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Condit
|
|
|
338
338
|
i0.ɵɵadvance();
|
|
339
339
|
i0.ɵɵconditional(ctx_r1.evaluationMetrics.execTimeoutCount > 0 ? 4 : -1);
|
|
340
340
|
} }
|
|
341
|
-
function
|
|
341
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
342
342
|
i0.ɵɵelementStart(0, "div", 106)(1, "div", 107);
|
|
343
343
|
i0.ɵɵelement(2, "i", 119);
|
|
344
344
|
i0.ɵɵelementStart(3, "span");
|
|
@@ -356,7 +356,7 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Condit
|
|
|
356
356
|
i0.ɵɵelementStart(14, "span", 112);
|
|
357
357
|
i0.ɵɵtext(15);
|
|
358
358
|
i0.ɵɵelementEnd()();
|
|
359
|
-
i0.ɵɵconditionalCreate(16,
|
|
359
|
+
i0.ɵɵconditionalCreate(16, MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_4_Conditional_16_Template, 5, 2, "div", 110);
|
|
360
360
|
i0.ɵɵelementEnd()();
|
|
361
361
|
} if (rf & 2) {
|
|
362
362
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -367,11 +367,11 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Condit
|
|
|
367
367
|
i0.ɵɵadvance();
|
|
368
368
|
i0.ɵɵconditional(ctx_r1.evaluationMetrics.execErrorCount > 0 || ctx_r1.evaluationMetrics.execTimeoutCount > 0 ? 16 : -1);
|
|
369
369
|
} }
|
|
370
|
-
function
|
|
370
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
371
371
|
i0.ɵɵelementStart(0, "div", 102)(1, "div", 105);
|
|
372
|
-
i0.ɵɵconditionalCreate(2,
|
|
373
|
-
i0.ɵɵconditionalCreate(3,
|
|
374
|
-
i0.ɵɵconditionalCreate(4,
|
|
372
|
+
i0.ɵɵconditionalCreate(2, MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_2_Template, 14, 5, "div", 106);
|
|
373
|
+
i0.ɵɵconditionalCreate(3, MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_3_Template, 13, 4, "div", 106);
|
|
374
|
+
i0.ɵɵconditionalCreate(4, MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Conditional_4_Template, 17, 4, "div", 106);
|
|
375
375
|
i0.ɵɵelementEnd()();
|
|
376
376
|
} if (rf & 2) {
|
|
377
377
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -382,23 +382,23 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Templa
|
|
|
382
382
|
i0.ɵɵadvance();
|
|
383
383
|
i0.ɵɵconditional(ctx_r1.evalPreferences.showExecution ? 4 : -1);
|
|
384
384
|
} }
|
|
385
|
-
function
|
|
385
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_20_For_9_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
386
386
|
i0.ɵɵelement(0, "i", 130);
|
|
387
387
|
} }
|
|
388
|
-
function
|
|
388
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_20_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
389
389
|
i0.ɵɵelement(0, "i", 131);
|
|
390
390
|
} }
|
|
391
|
-
function
|
|
391
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_20_For_9_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
392
392
|
i0.ɵɵelement(0, "i", 117);
|
|
393
393
|
} }
|
|
394
|
-
function
|
|
394
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_20_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
395
395
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
396
396
|
i0.ɵɵelementStart(0, "div", 128);
|
|
397
|
-
i0.ɵɵlistener("click", function
|
|
397
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_20_For_9_Template_div_click_0_listener() { const item_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleRunExpanded(item_r10.run.id)); });
|
|
398
398
|
i0.ɵɵelementStart(1, "div", 129);
|
|
399
|
-
i0.ɵɵconditionalCreate(2,
|
|
400
|
-
i0.ɵɵconditionalCreate(3,
|
|
401
|
-
i0.ɵɵconditionalCreate(4,
|
|
399
|
+
i0.ɵɵconditionalCreate(2, MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_20_For_9_Conditional_2_Template, 1, 0, "i", 130);
|
|
400
|
+
i0.ɵɵconditionalCreate(3, MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_20_For_9_Conditional_3_Template, 1, 0, "i", 131);
|
|
401
|
+
i0.ɵɵconditionalCreate(4, MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_20_For_9_Conditional_4_Template, 1, 0, "i", 117);
|
|
402
402
|
i0.ɵɵelementEnd();
|
|
403
403
|
i0.ɵɵelementStart(5, "div", 132)(6, "span", 133);
|
|
404
404
|
i0.ɵɵtext(7);
|
|
@@ -423,10 +423,10 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Conditional_20_For_9_
|
|
|
423
423
|
i0.ɵɵadvance(2);
|
|
424
424
|
i0.ɵɵtextInterpolate(item_r10.reason);
|
|
425
425
|
} }
|
|
426
|
-
function
|
|
426
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_20_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
427
427
|
const _r11 = i0.ɵɵgetCurrentView();
|
|
428
428
|
i0.ɵɵelementStart(0, "div", 127)(1, "button", 91);
|
|
429
|
-
i0.ɵɵlistener("click", function
|
|
429
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_20_Conditional_10_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeTab("runs")); });
|
|
430
430
|
i0.ɵɵtext(2);
|
|
431
431
|
i0.ɵɵelementEnd()();
|
|
432
432
|
} if (rf & 2) {
|
|
@@ -434,7 +434,7 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Conditional_20_Condit
|
|
|
434
434
|
i0.ɵɵadvance(2);
|
|
435
435
|
i0.ɵɵtextInterpolate1(" View all ", ctx_r1.needsReviewItems.length, " items ");
|
|
436
436
|
} }
|
|
437
|
-
function
|
|
437
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
438
438
|
i0.ɵɵelementStart(0, "div", 103)(1, "div", 122)(2, "h3");
|
|
439
439
|
i0.ɵɵelement(3, "i", 123);
|
|
440
440
|
i0.ɵɵtext(4, " Needs Review");
|
|
@@ -443,8 +443,8 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Conditional_20_Templa
|
|
|
443
443
|
i0.ɵɵtext(6);
|
|
444
444
|
i0.ɵɵelementEnd()();
|
|
445
445
|
i0.ɵɵelementStart(7, "div", 125);
|
|
446
|
-
i0.ɵɵrepeaterCreate(8,
|
|
447
|
-
i0.ɵɵconditionalCreate(10,
|
|
446
|
+
i0.ɵɵrepeaterCreate(8, MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_20_For_9_Template, 12, 9, "div", 126, i0.ɵɵrepeaterTrackByIdentity);
|
|
447
|
+
i0.ɵɵconditionalCreate(10, MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_20_Conditional_10_Template, 3, 1, "div", 127);
|
|
448
448
|
i0.ɵɵelementEnd()();
|
|
449
449
|
} if (rf & 2) {
|
|
450
450
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -455,7 +455,7 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Conditional_20_Templa
|
|
|
455
455
|
i0.ɵɵadvance(2);
|
|
456
456
|
i0.ɵɵconditional(ctx_r1.needsReviewItems.length > 5 ? 10 : -1);
|
|
457
457
|
} }
|
|
458
|
-
function
|
|
458
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
459
459
|
i0.ɵɵelementStart(0, "div", 104)(1, "div", 137);
|
|
460
460
|
i0.ɵɵelement(2, "i", 138);
|
|
461
461
|
i0.ɵɵelementStart(3, "span");
|
|
@@ -466,7 +466,7 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Conditional_21_Templa
|
|
|
466
466
|
i0.ɵɵtext(7, " Auto-refreshing every 5 seconds ");
|
|
467
467
|
i0.ɵɵelementEnd()();
|
|
468
468
|
} }
|
|
469
|
-
function
|
|
469
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_129_Template(rf, ctx) { if (rf & 1) {
|
|
470
470
|
i0.ɵɵelementStart(0, "div", 58)(1, "div", 94)(2, "div", 95);
|
|
471
471
|
i0.ɵɵelement(3, "i", 11);
|
|
472
472
|
i0.ɵɵelementEnd();
|
|
@@ -486,9 +486,9 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Template(rf, ctx) { i
|
|
|
486
486
|
i0.ɵɵelementStart(17, "span", 100);
|
|
487
487
|
i0.ɵɵtext(18, "Tests Passed");
|
|
488
488
|
i0.ɵɵelementEnd()()()()();
|
|
489
|
-
i0.ɵɵconditionalCreate(19,
|
|
490
|
-
i0.ɵɵconditionalCreate(20,
|
|
491
|
-
i0.ɵɵconditionalCreate(21,
|
|
489
|
+
i0.ɵɵconditionalCreate(19, MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_19_Template, 5, 3, "div", 102);
|
|
490
|
+
i0.ɵɵconditionalCreate(20, MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_20_Template, 11, 2, "div", 103);
|
|
491
|
+
i0.ɵɵconditionalCreate(21, MJTestSuiteRunFormComponentExtended_Conditional_129_Conditional_21_Template, 8, 0, "div", 104);
|
|
492
492
|
i0.ɵɵelementEnd();
|
|
493
493
|
} if (rf & 2) {
|
|
494
494
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -509,10 +509,10 @@ function TestSuiteRunFormComponentExtended_Conditional_129_Template(rf, ctx) { i
|
|
|
509
509
|
i0.ɵɵadvance();
|
|
510
510
|
i0.ɵɵconditional(ctx_r1.record.Status === "Running" || ctx_r1.record.Status === "Pending" ? 21 : -1);
|
|
511
511
|
} }
|
|
512
|
-
function
|
|
512
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
513
513
|
const _r13 = i0.ɵɵgetCurrentView();
|
|
514
514
|
i0.ɵɵelementStart(0, "button", 153);
|
|
515
|
-
i0.ɵɵlistener("click", function
|
|
515
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_1_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setRunStatusFilter("Passed")); });
|
|
516
516
|
i0.ɵɵelement(1, "i", 154);
|
|
517
517
|
i0.ɵɵtext(2);
|
|
518
518
|
i0.ɵɵelementEnd();
|
|
@@ -522,10 +522,10 @@ function TestSuiteRunFormComponentExtended_Conditional_130_Conditional_1_Conditi
|
|
|
522
522
|
i0.ɵɵadvance(2);
|
|
523
523
|
i0.ɵɵtextInterpolate1(" Passed (", ctx_r1.getRunCountByStatus("Passed"), ") ");
|
|
524
524
|
} }
|
|
525
|
-
function
|
|
525
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
526
526
|
const _r14 = i0.ɵɵgetCurrentView();
|
|
527
527
|
i0.ɵɵelementStart(0, "button", 155);
|
|
528
|
-
i0.ɵɵlistener("click", function
|
|
528
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_1_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setRunStatusFilter("Failed")); });
|
|
529
529
|
i0.ɵɵelement(1, "i", 93);
|
|
530
530
|
i0.ɵɵtext(2);
|
|
531
531
|
i0.ɵɵelementEnd();
|
|
@@ -535,10 +535,10 @@ function TestSuiteRunFormComponentExtended_Conditional_130_Conditional_1_Conditi
|
|
|
535
535
|
i0.ɵɵadvance(2);
|
|
536
536
|
i0.ɵɵtextInterpolate1(" Failed (", ctx_r1.getRunCountByStatus("Failed"), ") ");
|
|
537
537
|
} }
|
|
538
|
-
function
|
|
538
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_1_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
539
539
|
const _r15 = i0.ɵɵgetCurrentView();
|
|
540
540
|
i0.ɵɵelementStart(0, "button", 156);
|
|
541
|
-
i0.ɵɵlistener("click", function
|
|
541
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_1_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setRunStatusFilter("Error")); });
|
|
542
542
|
i0.ɵɵelement(1, "i", 157);
|
|
543
543
|
i0.ɵɵtext(2);
|
|
544
544
|
i0.ɵɵelementEnd();
|
|
@@ -548,18 +548,18 @@ function TestSuiteRunFormComponentExtended_Conditional_130_Conditional_1_Conditi
|
|
|
548
548
|
i0.ɵɵadvance(2);
|
|
549
549
|
i0.ɵɵtextInterpolate1(" Error (", ctx_r1.getRunCountByStatus("Error"), ") ");
|
|
550
550
|
} }
|
|
551
|
-
function
|
|
551
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
552
552
|
const _r12 = i0.ɵɵgetCurrentView();
|
|
553
553
|
i0.ɵɵelementStart(0, "div", 141)(1, "div", 145)(2, "button", 146);
|
|
554
|
-
i0.ɵɵlistener("click", function
|
|
554
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_1_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setRunStatusFilter(null)); });
|
|
555
555
|
i0.ɵɵtext(3);
|
|
556
556
|
i0.ɵɵelementEnd();
|
|
557
|
-
i0.ɵɵconditionalCreate(4,
|
|
558
|
-
i0.ɵɵconditionalCreate(5,
|
|
559
|
-
i0.ɵɵconditionalCreate(6,
|
|
557
|
+
i0.ɵɵconditionalCreate(4, MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_1_Conditional_4_Template, 3, 3, "button", 147);
|
|
558
|
+
i0.ɵɵconditionalCreate(5, MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_1_Conditional_5_Template, 3, 3, "button", 148);
|
|
559
|
+
i0.ɵɵconditionalCreate(6, MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_1_Conditional_6_Template, 3, 3, "button", 149);
|
|
560
560
|
i0.ɵɵelementEnd();
|
|
561
561
|
i0.ɵɵelementStart(7, "div", 150)(8, "button", 151);
|
|
562
|
-
i0.ɵɵlistener("click", function
|
|
562
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_1_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.exportToCSV()); });
|
|
563
563
|
i0.ɵɵelement(9, "i", 152);
|
|
564
564
|
i0.ɵɵtext(10, " Export CSV ");
|
|
565
565
|
i0.ɵɵelementEnd()()();
|
|
@@ -576,22 +576,22 @@ function TestSuiteRunFormComponentExtended_Conditional_130_Conditional_1_Templat
|
|
|
576
576
|
i0.ɵɵadvance();
|
|
577
577
|
i0.ɵɵconditional(ctx_r1.getRunCountByStatus("Error") > 0 ? 6 : -1);
|
|
578
578
|
} }
|
|
579
|
-
function
|
|
579
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_2_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
580
580
|
i0.ɵɵelementStart(0, "div", 159);
|
|
581
581
|
i0.ɵɵelement(1, "div", 160)(2, "div", 161);
|
|
582
582
|
i0.ɵɵelementStart(3, "div", 162);
|
|
583
583
|
i0.ɵɵelement(4, "div", 163)(5, "div", 164);
|
|
584
584
|
i0.ɵɵelementEnd()();
|
|
585
585
|
} }
|
|
586
|
-
function
|
|
586
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
587
587
|
i0.ɵɵelementStart(0, "div", 142)(1, "div", 158);
|
|
588
|
-
i0.ɵɵrepeaterCreate(2,
|
|
588
|
+
i0.ɵɵrepeaterCreate(2, MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_2_For_3_Template, 6, 0, "div", 159, i0.ɵɵrepeaterTrackByIdentity);
|
|
589
589
|
i0.ɵɵelementEnd()();
|
|
590
590
|
} if (rf & 2) {
|
|
591
591
|
i0.ɵɵadvance(2);
|
|
592
592
|
i0.ɵɵrepeater(i0.ɵɵpureFunction0(0, _c0));
|
|
593
593
|
} }
|
|
594
|
-
function
|
|
594
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
595
595
|
i0.ɵɵelementStart(0, "span", 174);
|
|
596
596
|
i0.ɵɵelement(1, "i", 23);
|
|
597
597
|
i0.ɵɵtext(2);
|
|
@@ -601,7 +601,7 @@ function TestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_C
|
|
|
601
601
|
i0.ɵɵadvance(2);
|
|
602
602
|
i0.ɵɵtextInterpolate1(" ", run_r17.DurationSeconds.toFixed(1), "s ");
|
|
603
603
|
} }
|
|
604
|
-
function
|
|
604
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
605
605
|
i0.ɵɵelementStart(0, "span", 175);
|
|
606
606
|
i0.ɵɵelement(1, "i", 28);
|
|
607
607
|
i0.ɵɵtext(2);
|
|
@@ -611,13 +611,13 @@ function TestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_C
|
|
|
611
611
|
i0.ɵɵadvance(2);
|
|
612
612
|
i0.ɵɵtextInterpolate1(" ", run_r17.CostUSD.toFixed(6), " ");
|
|
613
613
|
} }
|
|
614
|
-
function
|
|
614
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
615
615
|
i0.ɵɵelement(0, "mj-entity-link-pill", 176);
|
|
616
616
|
} if (rf & 2) {
|
|
617
617
|
const run_r17 = i0.ɵɵnextContext().$implicit;
|
|
618
618
|
i0.ɵɵproperty("entityName", run_r17.TargetLogEntity)("recordId", run_r17.TargetLogID);
|
|
619
619
|
} }
|
|
620
|
-
function
|
|
620
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_15_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
621
621
|
i0.ɵɵelementStart(0, "span", 181);
|
|
622
622
|
i0.ɵɵtext(1);
|
|
623
623
|
i0.ɵɵelementEnd();
|
|
@@ -626,9 +626,9 @@ function TestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_C
|
|
|
626
626
|
i0.ɵɵadvance();
|
|
627
627
|
i0.ɵɵtextInterpolate(tag_r18);
|
|
628
628
|
} }
|
|
629
|
-
function
|
|
629
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
630
630
|
i0.ɵɵelementStart(0, "div", 177);
|
|
631
|
-
i0.ɵɵrepeaterCreate(1,
|
|
631
|
+
i0.ɵɵrepeaterCreate(1, MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_15_For_2_Template, 2, 1, "span", 181, i0.ɵɵrepeaterTrackByIdentity);
|
|
632
632
|
i0.ɵɵelementEnd();
|
|
633
633
|
} if (rf & 2) {
|
|
634
634
|
const run_r17 = i0.ɵɵnextContext().$implicit;
|
|
@@ -636,10 +636,10 @@ function TestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_C
|
|
|
636
636
|
i0.ɵɵadvance();
|
|
637
637
|
i0.ɵɵrepeater(ctx_r1.getRunTags(run_r17));
|
|
638
638
|
} }
|
|
639
|
-
function
|
|
639
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_18_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
640
640
|
const _r20 = i0.ɵɵgetCurrentView();
|
|
641
641
|
i0.ɵɵelementStart(0, "button", 198);
|
|
642
|
-
i0.ɵɵlistener("click", function
|
|
642
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_18_For_8_Template_button_click_0_listener($event) { const num_r21 = i0.ɵɵrestoreView(_r20).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); ctx_r1.setInlineRating(num_r21); return i0.ɵɵresetView($event.stopPropagation()); })("mouseenter", function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_18_For_8_Template_button_mouseenter_0_listener() { const num_r21 = i0.ɵɵrestoreView(_r20).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.inlineHoverRating = num_r21); })("mouseleave", function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_18_For_8_Template_button_mouseleave_0_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.inlineHoverRating = 0); });
|
|
643
643
|
i0.ɵɵtext(1);
|
|
644
644
|
i0.ɵɵelementEnd();
|
|
645
645
|
} if (rf & 2) {
|
|
@@ -649,7 +649,7 @@ function TestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_C
|
|
|
649
649
|
i0.ɵɵadvance();
|
|
650
650
|
i0.ɵɵtextInterpolate1(" ", num_r21, " ");
|
|
651
651
|
} }
|
|
652
|
-
function
|
|
652
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_18_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
653
653
|
i0.ɵɵelementStart(0, "div", 188)(1, "span", 199);
|
|
654
654
|
i0.ɵɵtext(2);
|
|
655
655
|
i0.ɵɵelementEnd();
|
|
@@ -663,7 +663,7 @@ function TestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_C
|
|
|
663
663
|
i0.ɵɵadvance(2);
|
|
664
664
|
i0.ɵɵtextInterpolate(ctx_r1.getInlineRatingLabel());
|
|
665
665
|
} }
|
|
666
|
-
function
|
|
666
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
667
667
|
const _r19 = i0.ɵɵgetCurrentView();
|
|
668
668
|
i0.ɵɵelementStart(0, "div", 180);
|
|
669
669
|
i0.ɵɵelement(1, "div", 182);
|
|
@@ -671,51 +671,51 @@ function TestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_C
|
|
|
671
671
|
i0.ɵɵtext(4, "Quick Feedback");
|
|
672
672
|
i0.ɵɵelementEnd();
|
|
673
673
|
i0.ɵɵelementStart(5, "div", 185)(6, "div", 186);
|
|
674
|
-
i0.ɵɵrepeaterCreate(7,
|
|
674
|
+
i0.ɵɵrepeaterCreate(7, MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_18_For_8_Template, 2, 11, "button", 187, i0.ɵɵrepeaterTrackByIdentity);
|
|
675
675
|
i0.ɵɵelementEnd();
|
|
676
|
-
i0.ɵɵconditionalCreate(9,
|
|
676
|
+
i0.ɵɵconditionalCreate(9, MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_18_Conditional_9_Template, 5, 2, "div", 188);
|
|
677
677
|
i0.ɵɵelementEnd();
|
|
678
678
|
i0.ɵɵelementStart(10, "div", 189)(11, "span", 190);
|
|
679
679
|
i0.ɵɵtext(12, "Was it correct?");
|
|
680
680
|
i0.ɵɵelementEnd();
|
|
681
681
|
i0.ɵɵelementStart(13, "div", 191)(14, "label", 192);
|
|
682
|
-
i0.ɵɵlistener("click", function
|
|
682
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_18_Template_label_click_14_listener($event) { i0.ɵɵrestoreView(_r19); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
683
683
|
i0.ɵɵelementStart(15, "input", 193);
|
|
684
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
684
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_18_Template_input_ngModelChange_15_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.inlineIsCorrect, $event) || (ctx_r1.inlineIsCorrect = $event); return i0.ɵɵresetView($event); });
|
|
685
685
|
i0.ɵɵelementEnd();
|
|
686
686
|
i0.ɵɵelementStart(16, "span");
|
|
687
687
|
i0.ɵɵtext(17, "Yes");
|
|
688
688
|
i0.ɵɵelementEnd()();
|
|
689
689
|
i0.ɵɵelementStart(18, "label", 192);
|
|
690
|
-
i0.ɵɵlistener("click", function
|
|
690
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_18_Template_label_click_18_listener($event) { i0.ɵɵrestoreView(_r19); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
691
691
|
i0.ɵɵelementStart(19, "input", 193);
|
|
692
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
692
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_18_Template_input_ngModelChange_19_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.inlineIsCorrect, $event) || (ctx_r1.inlineIsCorrect = $event); return i0.ɵɵresetView($event); });
|
|
693
693
|
i0.ɵɵelementEnd();
|
|
694
694
|
i0.ɵɵelementStart(20, "span");
|
|
695
695
|
i0.ɵɵtext(21, "No");
|
|
696
696
|
i0.ɵɵelementEnd()();
|
|
697
697
|
i0.ɵɵelementStart(22, "label", 192);
|
|
698
|
-
i0.ɵɵlistener("click", function
|
|
698
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_18_Template_label_click_22_listener($event) { i0.ɵɵrestoreView(_r19); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
699
699
|
i0.ɵɵelementStart(23, "input", 193);
|
|
700
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
700
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_18_Template_input_ngModelChange_23_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.inlineIsCorrect, $event) || (ctx_r1.inlineIsCorrect = $event); return i0.ɵɵresetView($event); });
|
|
701
701
|
i0.ɵɵelementEnd();
|
|
702
702
|
i0.ɵɵelementStart(24, "span");
|
|
703
703
|
i0.ɵɵtext(25, "Not Sure");
|
|
704
704
|
i0.ɵɵelementEnd()()()();
|
|
705
705
|
i0.ɵɵelementStart(26, "div", 194);
|
|
706
|
-
i0.ɵɵlistener("click", function
|
|
706
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_18_Template_div_click_26_listener($event) { i0.ɵɵrestoreView(_r19); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
707
707
|
i0.ɵɵelementStart(27, "textarea", 195);
|
|
708
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
708
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_18_Template_textarea_ngModelChange_27_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.inlineComments, $event) || (ctx_r1.inlineComments = $event); return i0.ɵɵresetView($event); });
|
|
709
709
|
i0.ɵɵelementEnd()();
|
|
710
710
|
i0.ɵɵelementStart(28, "div", 196);
|
|
711
|
-
i0.ɵɵlistener("click", function
|
|
711
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_18_Template_div_click_28_listener($event) { i0.ɵɵrestoreView(_r19); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
712
712
|
i0.ɵɵelementStart(29, "button", 151);
|
|
713
|
-
i0.ɵɵlistener("click", function
|
|
713
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_18_Template_button_click_29_listener() { i0.ɵɵrestoreView(_r19); const run_r17 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openTestRun(run_r17.ID)); });
|
|
714
714
|
i0.ɵɵelement(30, "i", 197);
|
|
715
715
|
i0.ɵɵtext(31, " View Full Details ");
|
|
716
716
|
i0.ɵɵelementEnd();
|
|
717
717
|
i0.ɵɵelementStart(32, "button", 89);
|
|
718
|
-
i0.ɵɵlistener("click", function
|
|
718
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_18_Template_button_click_32_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.saveInlineFeedback()); });
|
|
719
719
|
i0.ɵɵelement(33, "i", 11);
|
|
720
720
|
i0.ɵɵtext(34);
|
|
721
721
|
i0.ɵɵelementEnd()()()();
|
|
@@ -744,10 +744,10 @@ function TestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_C
|
|
|
744
744
|
i0.ɵɵadvance();
|
|
745
745
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.savingInlineFeedback ? "Saving..." : ctx_r1.hasFeedback(run_r17.ID) ? "Update" : "Save", " ");
|
|
746
746
|
} }
|
|
747
|
-
function
|
|
747
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
748
748
|
const _r16 = i0.ɵɵgetCurrentView();
|
|
749
749
|
i0.ɵɵelementStart(0, "div", 165)(1, "div", 166);
|
|
750
|
-
i0.ɵɵlistener("click", function
|
|
750
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Template_div_click_1_listener() { const run_r17 = i0.ɵɵrestoreView(_r16).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleRunExpanded(run_r17.ID)); });
|
|
751
751
|
i0.ɵɵelementStart(2, "div", 167);
|
|
752
752
|
i0.ɵɵtext(3);
|
|
753
753
|
i0.ɵɵelementEnd();
|
|
@@ -760,16 +760,16 @@ function TestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_T
|
|
|
760
760
|
i0.ɵɵelement(10, "app-evaluation-badge", 172);
|
|
761
761
|
i0.ɵɵelementEnd();
|
|
762
762
|
i0.ɵɵelementStart(11, "div", 173);
|
|
763
|
-
i0.ɵɵconditionalCreate(12,
|
|
764
|
-
i0.ɵɵconditionalCreate(13,
|
|
765
|
-
i0.ɵɵconditionalCreate(14,
|
|
763
|
+
i0.ɵɵconditionalCreate(12, MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_12_Template, 3, 1, "span", 174);
|
|
764
|
+
i0.ɵɵconditionalCreate(13, MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_13_Template, 3, 1, "span", 175);
|
|
765
|
+
i0.ɵɵconditionalCreate(14, MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_14_Template, 1, 2, "mj-entity-link-pill", 176);
|
|
766
766
|
i0.ɵɵelementEnd();
|
|
767
|
-
i0.ɵɵconditionalCreate(15,
|
|
767
|
+
i0.ɵɵconditionalCreate(15, MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_15_Template, 3, 0, "div", 177);
|
|
768
768
|
i0.ɵɵelementEnd();
|
|
769
769
|
i0.ɵɵelementStart(16, "div", 178);
|
|
770
770
|
i0.ɵɵelement(17, "i", 179);
|
|
771
771
|
i0.ɵɵelementEnd()();
|
|
772
|
-
i0.ɵɵconditionalCreate(18,
|
|
772
|
+
i0.ɵɵconditionalCreate(18, MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Conditional_18_Template, 35, 18, "div", 180);
|
|
773
773
|
i0.ɵɵelementEnd();
|
|
774
774
|
} if (rf & 2) {
|
|
775
775
|
const run_r17 = ctx.$implicit;
|
|
@@ -797,16 +797,16 @@ function TestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_T
|
|
|
797
797
|
i0.ɵɵadvance();
|
|
798
798
|
i0.ɵɵconditional(ctx_r1.expandedRunId === run_r17.ID ? 18 : -1);
|
|
799
799
|
} }
|
|
800
|
-
function
|
|
800
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
801
801
|
i0.ɵɵelementStart(0, "div", 143);
|
|
802
|
-
i0.ɵɵrepeaterCreate(1,
|
|
802
|
+
i0.ɵɵrepeaterCreate(1, MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_For_2_Template, 19, 22, "div", 165, i0.ɵɵrepeaterTrackByIdentity);
|
|
803
803
|
i0.ɵɵelementEnd();
|
|
804
804
|
} if (rf & 2) {
|
|
805
805
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
806
806
|
i0.ɵɵadvance();
|
|
807
807
|
i0.ɵɵrepeater(ctx_r1.getFilteredTestRuns());
|
|
808
808
|
} }
|
|
809
|
-
function
|
|
809
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
810
810
|
i0.ɵɵelementStart(0, "div", 144)(1, "div", 201);
|
|
811
811
|
i0.ɵɵelement(2, "i", 202);
|
|
812
812
|
i0.ɵɵelementEnd();
|
|
@@ -817,7 +817,7 @@ function TestSuiteRunFormComponentExtended_Conditional_130_Conditional_4_Templat
|
|
|
817
817
|
i0.ɵɵtext(6, "No test runs have been recorded for this suite execution.");
|
|
818
818
|
i0.ɵɵelementEnd()();
|
|
819
819
|
} }
|
|
820
|
-
function
|
|
820
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
821
821
|
const _r22 = i0.ɵɵgetCurrentView();
|
|
822
822
|
i0.ɵɵelementStart(0, "div", 144)(1, "div", 201);
|
|
823
823
|
i0.ɵɵelement(2, "i", 203);
|
|
@@ -829,17 +829,17 @@ function TestSuiteRunFormComponentExtended_Conditional_130_Conditional_5_Templat
|
|
|
829
829
|
i0.ɵɵtext(6, "No test runs match the current filter.");
|
|
830
830
|
i0.ɵɵelementEnd();
|
|
831
831
|
i0.ɵɵelementStart(7, "button", 151);
|
|
832
|
-
i0.ɵɵlistener("click", function
|
|
832
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_5_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setRunStatusFilter(null)); });
|
|
833
833
|
i0.ɵɵtext(8, "Clear Filter");
|
|
834
834
|
i0.ɵɵelementEnd()();
|
|
835
835
|
} }
|
|
836
|
-
function
|
|
836
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_130_Template(rf, ctx) { if (rf & 1) {
|
|
837
837
|
i0.ɵɵelementStart(0, "div", 59);
|
|
838
|
-
i0.ɵɵconditionalCreate(1,
|
|
839
|
-
i0.ɵɵconditionalCreate(2,
|
|
840
|
-
i0.ɵɵconditionalCreate(3,
|
|
841
|
-
i0.ɵɵconditionalCreate(4,
|
|
842
|
-
i0.ɵɵconditionalCreate(5,
|
|
838
|
+
i0.ɵɵconditionalCreate(1, MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_1_Template, 11, 6, "div", 141);
|
|
839
|
+
i0.ɵɵconditionalCreate(2, MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_2_Template, 4, 1, "div", 142);
|
|
840
|
+
i0.ɵɵconditionalCreate(3, MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_3_Template, 3, 0, "div", 143);
|
|
841
|
+
i0.ɵɵconditionalCreate(4, MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_4_Template, 7, 0, "div", 144);
|
|
842
|
+
i0.ɵɵconditionalCreate(5, MJTestSuiteRunFormComponentExtended_Conditional_130_Conditional_5_Template, 9, 0, "div", 144);
|
|
843
843
|
i0.ɵɵelementEnd();
|
|
844
844
|
} if (rf & 2) {
|
|
845
845
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -854,10 +854,10 @@ function TestSuiteRunFormComponentExtended_Conditional_130_Template(rf, ctx) { i
|
|
|
854
854
|
i0.ɵɵadvance();
|
|
855
855
|
i0.ɵɵconditional(ctx_r1.testRunsLoaded && !ctx_r1.loadingTestRuns && ctx_r1.testRuns.length > 0 && ctx_r1.getFilteredTestRuns().length === 0 ? 5 : -1);
|
|
856
856
|
} }
|
|
857
|
-
function
|
|
857
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_131_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
858
858
|
const _r23 = i0.ɵɵgetCurrentView();
|
|
859
859
|
i0.ɵɵelementStart(0, "a", 3);
|
|
860
|
-
i0.ɵɵlistener("click", function
|
|
860
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_131_Conditional_15_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openTestSuite()); });
|
|
861
861
|
i0.ɵɵtext(1);
|
|
862
862
|
i0.ɵɵelementEnd();
|
|
863
863
|
} if (rf & 2) {
|
|
@@ -865,12 +865,12 @@ function TestSuiteRunFormComponentExtended_Conditional_131_Conditional_15_Templa
|
|
|
865
865
|
i0.ɵɵadvance();
|
|
866
866
|
i0.ɵɵtextInterpolate(ctx_r1.testSuite.Name);
|
|
867
867
|
} }
|
|
868
|
-
function
|
|
868
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_131_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
869
869
|
i0.ɵɵelementStart(0, "span");
|
|
870
870
|
i0.ɵɵtext(1, "Loading...");
|
|
871
871
|
i0.ɵɵelementEnd();
|
|
872
872
|
} }
|
|
873
|
-
function
|
|
873
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_131_Template(rf, ctx) { if (rf & 1) {
|
|
874
874
|
i0.ɵɵelementStart(0, "div", 60)(1, "div", 204)(2, "h3");
|
|
875
875
|
i0.ɵɵelement(3, "i", 52);
|
|
876
876
|
i0.ɵɵtext(4, " Run Information");
|
|
@@ -885,8 +885,8 @@ function TestSuiteRunFormComponentExtended_Conditional_131_Template(rf, ctx) { i
|
|
|
885
885
|
i0.ɵɵtext(13, "Test Suite");
|
|
886
886
|
i0.ɵɵelementEnd();
|
|
887
887
|
i0.ɵɵelementStart(14, "div", 209);
|
|
888
|
-
i0.ɵɵconditionalCreate(15,
|
|
889
|
-
i0.ɵɵconditionalCreate(16,
|
|
888
|
+
i0.ɵɵconditionalCreate(15, MJTestSuiteRunFormComponentExtended_Conditional_131_Conditional_15_Template, 2, 1, "a", 210);
|
|
889
|
+
i0.ɵɵconditionalCreate(16, MJTestSuiteRunFormComponentExtended_Conditional_131_Conditional_16_Template, 2, 0, "span");
|
|
890
890
|
i0.ɵɵelementEnd()();
|
|
891
891
|
i0.ɵɵelementStart(17, "div", 206)(18, "div", 207);
|
|
892
892
|
i0.ɵɵtext(19, "Status");
|
|
@@ -965,14 +965,14 @@ function TestSuiteRunFormComponentExtended_Conditional_131_Template(rf, ctx) { i
|
|
|
965
965
|
i0.ɵɵadvance(5);
|
|
966
966
|
i0.ɵɵtextInterpolate(ctx_r1.record.AgentVersion || "N/A");
|
|
967
967
|
} }
|
|
968
|
-
function
|
|
968
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
969
969
|
i0.ɵɵelementStart(0, "div", 212);
|
|
970
970
|
i0.ɵɵelement(1, "i", 90);
|
|
971
971
|
i0.ɵɵelementStart(2, "span");
|
|
972
972
|
i0.ɵɵtext(3, "Loading test results...");
|
|
973
973
|
i0.ɵɵelementEnd()();
|
|
974
974
|
} }
|
|
975
|
-
function
|
|
975
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
976
976
|
i0.ɵɵelementStart(0, "div", 213)(1, "h3");
|
|
977
977
|
i0.ɵɵelement(2, "i", 214);
|
|
978
978
|
i0.ɵɵtext(3, " Summary Statistics");
|
|
@@ -1045,22 +1045,22 @@ function TestSuiteRunFormComponentExtended_Conditional_132_Conditional_2_Templat
|
|
|
1045
1045
|
i0.ɵɵadvance(8);
|
|
1046
1046
|
i0.ɵɵtextInterpolate1("$", ctx_r1.getTotalCost().toFixed(4));
|
|
1047
1047
|
} }
|
|
1048
|
-
function
|
|
1048
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
1049
1049
|
i0.ɵɵelementStart(0, "th", 236);
|
|
1050
1050
|
i0.ɵɵtext(1, "Status");
|
|
1051
1051
|
i0.ɵɵelementEnd();
|
|
1052
1052
|
} }
|
|
1053
|
-
function
|
|
1053
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
1054
1054
|
i0.ɵɵelementStart(0, "th", 237);
|
|
1055
1055
|
i0.ɵɵtext(1, "Auto Score");
|
|
1056
1056
|
i0.ɵɵelementEnd();
|
|
1057
1057
|
} }
|
|
1058
|
-
function
|
|
1058
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
1059
1059
|
i0.ɵɵelementStart(0, "th", 238);
|
|
1060
1060
|
i0.ɵɵtext(1, "Human Score");
|
|
1061
1061
|
i0.ɵɵelementEnd();
|
|
1062
1062
|
} }
|
|
1063
|
-
function
|
|
1063
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_7_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1064
1064
|
i0.ɵɵelementStart(0, "span", 247);
|
|
1065
1065
|
i0.ɵɵtext(1);
|
|
1066
1066
|
i0.ɵɵelementEnd();
|
|
@@ -1069,9 +1069,9 @@ function TestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_
|
|
|
1069
1069
|
i0.ɵɵadvance();
|
|
1070
1070
|
i0.ɵɵtextInterpolate(tag_r26);
|
|
1071
1071
|
} }
|
|
1072
|
-
function
|
|
1072
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
1073
1073
|
i0.ɵɵelementStart(0, "div", 245);
|
|
1074
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1074
|
+
i0.ɵɵrepeaterCreate(1, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_7_For_2_Template, 2, 1, "span", 247, i0.ɵɵrepeaterTrackByIdentity);
|
|
1075
1075
|
i0.ɵɵelementEnd();
|
|
1076
1076
|
} if (rf & 2) {
|
|
1077
1077
|
const run_r25 = i0.ɵɵnextContext().$implicit;
|
|
@@ -1079,7 +1079,7 @@ function TestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_
|
|
|
1079
1079
|
i0.ɵɵadvance();
|
|
1080
1080
|
i0.ɵɵrepeater(ctx_r1.getRunTags(run_r25).slice(0, 2));
|
|
1081
1081
|
} }
|
|
1082
|
-
function
|
|
1082
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
1083
1083
|
i0.ɵɵelementStart(0, "td", 236)(1, "span", 14);
|
|
1084
1084
|
i0.ɵɵelement(2, "i", 179);
|
|
1085
1085
|
i0.ɵɵtext(3);
|
|
@@ -1093,7 +1093,7 @@ function TestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_
|
|
|
1093
1093
|
i0.ɵɵadvance();
|
|
1094
1094
|
i0.ɵɵtextInterpolate1(" ", run_r25.Status, " ");
|
|
1095
1095
|
} }
|
|
1096
|
-
function
|
|
1096
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1097
1097
|
i0.ɵɵelementStart(0, "div", 248)(1, "div", 249);
|
|
1098
1098
|
i0.ɵɵelement(2, "div", 250);
|
|
1099
1099
|
i0.ɵɵelementEnd();
|
|
@@ -1108,15 +1108,15 @@ function TestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_
|
|
|
1108
1108
|
i0.ɵɵadvance(2);
|
|
1109
1109
|
i0.ɵɵtextInterpolate1("", (run_r25.Score * 100).toFixed(0), "%");
|
|
1110
1110
|
} }
|
|
1111
|
-
function
|
|
1111
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_9_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1112
1112
|
i0.ɵɵelementStart(0, "span", 246);
|
|
1113
1113
|
i0.ɵɵtext(1, "\u2014");
|
|
1114
1114
|
i0.ɵɵelementEnd();
|
|
1115
1115
|
} }
|
|
1116
|
-
function
|
|
1116
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1117
1117
|
i0.ɵɵelementStart(0, "td", 237);
|
|
1118
|
-
i0.ɵɵconditionalCreate(1,
|
|
1119
|
-
i0.ɵɵconditionalCreate(2,
|
|
1118
|
+
i0.ɵɵconditionalCreate(1, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_9_Conditional_1_Template, 5, 9, "div", 248);
|
|
1119
|
+
i0.ɵɵconditionalCreate(2, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_9_Conditional_2_Template, 2, 0, "span", 246);
|
|
1120
1120
|
i0.ɵɵelementEnd();
|
|
1121
1121
|
} if (rf & 2) {
|
|
1122
1122
|
const run_r25 = i0.ɵɵnextContext().$implicit;
|
|
@@ -1125,7 +1125,7 @@ function TestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_
|
|
|
1125
1125
|
i0.ɵɵadvance();
|
|
1126
1126
|
i0.ɵɵconditional(run_r25.Score == null ? 2 : -1);
|
|
1127
1127
|
} }
|
|
1128
|
-
function
|
|
1128
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_10_Conditional_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1129
1129
|
i0.ɵɵelementStart(0, "span", 255);
|
|
1130
1130
|
i0.ɵɵelement(1, "i", 179);
|
|
1131
1131
|
i0.ɵɵelementEnd();
|
|
@@ -1135,11 +1135,11 @@ function TestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_
|
|
|
1135
1135
|
i0.ɵɵadvance();
|
|
1136
1136
|
i0.ɵɵclassProp("fa-check", ctx_r1.getHumanIsCorrect(run_r25.ID) === true)("fa-times", ctx_r1.getHumanIsCorrect(run_r25.ID) === false)("correct", ctx_r1.getHumanIsCorrect(run_r25.ID) === true)("incorrect", ctx_r1.getHumanIsCorrect(run_r25.ID) === false);
|
|
1137
1137
|
} }
|
|
1138
|
-
function
|
|
1138
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_10_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1139
1139
|
i0.ɵɵelementStart(0, "div", 252)(1, "span", 254);
|
|
1140
1140
|
i0.ɵɵtext(2);
|
|
1141
1141
|
i0.ɵɵelementEnd();
|
|
1142
|
-
i0.ɵɵconditionalCreate(3,
|
|
1142
|
+
i0.ɵɵconditionalCreate(3, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_10_Conditional_1_Conditional_3_Template, 2, 8, "span", 255);
|
|
1143
1143
|
i0.ɵɵelementEnd();
|
|
1144
1144
|
} if (rf & 2) {
|
|
1145
1145
|
const run_r25 = i0.ɵɵnextContext(2).$implicit;
|
|
@@ -1151,15 +1151,15 @@ function TestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_
|
|
|
1151
1151
|
i0.ɵɵadvance();
|
|
1152
1152
|
i0.ɵɵconditional(ctx_r1.getHumanIsCorrect(run_r25.ID) !== null ? 3 : -1);
|
|
1153
1153
|
} }
|
|
1154
|
-
function
|
|
1154
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_10_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1155
1155
|
i0.ɵɵelementStart(0, "span", 253);
|
|
1156
1156
|
i0.ɵɵelement(1, "i", 256);
|
|
1157
1157
|
i0.ɵɵelementEnd();
|
|
1158
1158
|
} }
|
|
1159
|
-
function
|
|
1159
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1160
1160
|
i0.ɵɵelementStart(0, "td", 238);
|
|
1161
|
-
i0.ɵɵconditionalCreate(1,
|
|
1162
|
-
i0.ɵɵconditionalCreate(2,
|
|
1161
|
+
i0.ɵɵconditionalCreate(1, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_10_Conditional_1_Template, 4, 8, "div", 252);
|
|
1162
|
+
i0.ɵɵconditionalCreate(2, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_10_Conditional_2_Template, 2, 0, "span", 253);
|
|
1163
1163
|
i0.ɵɵelementEnd();
|
|
1164
1164
|
} if (rf & 2) {
|
|
1165
1165
|
const run_r25 = i0.ɵɵnextContext().$implicit;
|
|
@@ -1169,7 +1169,7 @@ function TestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_
|
|
|
1169
1169
|
i0.ɵɵadvance();
|
|
1170
1170
|
i0.ɵɵconditional(!ctx_r1.hasFeedback(run_r25.ID) ? 2 : -1);
|
|
1171
1171
|
} }
|
|
1172
|
-
function
|
|
1172
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
1173
1173
|
i0.ɵɵelementStart(0, "span");
|
|
1174
1174
|
i0.ɵɵtext(1);
|
|
1175
1175
|
i0.ɵɵelementEnd();
|
|
@@ -1178,12 +1178,12 @@ function TestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_
|
|
|
1178
1178
|
i0.ɵɵadvance();
|
|
1179
1179
|
i0.ɵɵtextInterpolate1("", run_r25.DurationSeconds.toFixed(1), "s");
|
|
1180
1180
|
} }
|
|
1181
|
-
function
|
|
1181
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
1182
1182
|
i0.ɵɵelementStart(0, "span", 246);
|
|
1183
1183
|
i0.ɵɵtext(1, "\u2014");
|
|
1184
1184
|
i0.ɵɵelementEnd();
|
|
1185
1185
|
} }
|
|
1186
|
-
function
|
|
1186
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
1187
1187
|
i0.ɵɵelementStart(0, "span");
|
|
1188
1188
|
i0.ɵɵtext(1);
|
|
1189
1189
|
i0.ɵɵelementEnd();
|
|
@@ -1192,33 +1192,33 @@ function TestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_
|
|
|
1192
1192
|
i0.ɵɵadvance();
|
|
1193
1193
|
i0.ɵɵtextInterpolate1("$", run_r25.CostUSD.toFixed(4));
|
|
1194
1194
|
} }
|
|
1195
|
-
function
|
|
1195
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
1196
1196
|
i0.ɵɵelementStart(0, "span", 246);
|
|
1197
1197
|
i0.ɵɵtext(1, "\u2014");
|
|
1198
1198
|
i0.ɵɵelementEnd();
|
|
1199
1199
|
} }
|
|
1200
|
-
function
|
|
1200
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Template(rf, ctx) { if (rf & 1) {
|
|
1201
1201
|
const _r24 = i0.ɵɵgetCurrentView();
|
|
1202
1202
|
i0.ɵɵelementStart(0, "tr", 242);
|
|
1203
|
-
i0.ɵɵlistener("click", function
|
|
1203
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Template_tr_click_0_listener() { const run_r25 = i0.ɵɵrestoreView(_r24).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openTestRun(run_r25.ID)); });
|
|
1204
1204
|
i0.ɵɵelementStart(1, "td", 234);
|
|
1205
1205
|
i0.ɵɵtext(2);
|
|
1206
1206
|
i0.ɵɵelementEnd();
|
|
1207
1207
|
i0.ɵɵelementStart(3, "td", 235)(4, "div", 243)(5, "span", 244);
|
|
1208
1208
|
i0.ɵɵtext(6);
|
|
1209
1209
|
i0.ɵɵelementEnd();
|
|
1210
|
-
i0.ɵɵconditionalCreate(7,
|
|
1210
|
+
i0.ɵɵconditionalCreate(7, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_7_Template, 3, 0, "div", 245);
|
|
1211
1211
|
i0.ɵɵelementEnd()();
|
|
1212
|
-
i0.ɵɵconditionalCreate(8,
|
|
1213
|
-
i0.ɵɵconditionalCreate(9,
|
|
1214
|
-
i0.ɵɵconditionalCreate(10,
|
|
1212
|
+
i0.ɵɵconditionalCreate(8, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_8_Template, 4, 16, "td", 236);
|
|
1213
|
+
i0.ɵɵconditionalCreate(9, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_9_Template, 3, 2, "td", 237);
|
|
1214
|
+
i0.ɵɵconditionalCreate(10, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_10_Template, 3, 2, "td", 238);
|
|
1215
1215
|
i0.ɵɵelementStart(11, "td", 239);
|
|
1216
|
-
i0.ɵɵconditionalCreate(12,
|
|
1217
|
-
i0.ɵɵconditionalCreate(13,
|
|
1216
|
+
i0.ɵɵconditionalCreate(12, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_12_Template, 2, 1, "span");
|
|
1217
|
+
i0.ɵɵconditionalCreate(13, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_13_Template, 2, 0, "span", 246);
|
|
1218
1218
|
i0.ɵɵelementEnd();
|
|
1219
1219
|
i0.ɵɵelementStart(14, "td", 240);
|
|
1220
|
-
i0.ɵɵconditionalCreate(15,
|
|
1221
|
-
i0.ɵɵconditionalCreate(16,
|
|
1220
|
+
i0.ɵɵconditionalCreate(15, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_15_Template, 2, 1, "span");
|
|
1221
|
+
i0.ɵɵconditionalCreate(16, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Conditional_16_Template, 2, 0, "span", 246);
|
|
1222
1222
|
i0.ɵɵelementEnd()();
|
|
1223
1223
|
} if (rf & 2) {
|
|
1224
1224
|
const run_r25 = ctx.$implicit;
|
|
@@ -1246,7 +1246,7 @@ function TestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_
|
|
|
1246
1246
|
i0.ɵɵadvance();
|
|
1247
1247
|
i0.ɵɵconditional(!run_r25.CostUSD ? 16 : -1);
|
|
1248
1248
|
} }
|
|
1249
|
-
function
|
|
1249
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1250
1250
|
i0.ɵɵelementStart(0, "div", 213)(1, "div", 225)(2, "h3");
|
|
1251
1251
|
i0.ɵɵelement(3, "i", 226);
|
|
1252
1252
|
i0.ɵɵtext(4, " Test Results");
|
|
@@ -1273,9 +1273,9 @@ function TestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_Templat
|
|
|
1273
1273
|
i0.ɵɵelementStart(24, "th", 235);
|
|
1274
1274
|
i0.ɵɵtext(25, "Test Name");
|
|
1275
1275
|
i0.ɵɵelementEnd();
|
|
1276
|
-
i0.ɵɵconditionalCreate(26,
|
|
1277
|
-
i0.ɵɵconditionalCreate(27,
|
|
1278
|
-
i0.ɵɵconditionalCreate(28,
|
|
1276
|
+
i0.ɵɵconditionalCreate(26, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_Conditional_26_Template, 2, 0, "th", 236);
|
|
1277
|
+
i0.ɵɵconditionalCreate(27, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_Conditional_27_Template, 2, 0, "th", 237);
|
|
1278
|
+
i0.ɵɵconditionalCreate(28, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_Conditional_28_Template, 2, 0, "th", 238);
|
|
1279
1279
|
i0.ɵɵelementStart(29, "th", 239);
|
|
1280
1280
|
i0.ɵɵtext(30, "Duration");
|
|
1281
1281
|
i0.ɵɵelementEnd();
|
|
@@ -1283,7 +1283,7 @@ function TestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_Templat
|
|
|
1283
1283
|
i0.ɵɵtext(32, "Cost");
|
|
1284
1284
|
i0.ɵɵelementEnd()()();
|
|
1285
1285
|
i0.ɵɵelementStart(33, "tbody");
|
|
1286
|
-
i0.ɵɵrepeaterCreate(34,
|
|
1286
|
+
i0.ɵɵrepeaterCreate(34, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_For_35_Template, 17, 18, "tr", 241, i0.ɵɵrepeaterTrackByIdentity);
|
|
1287
1287
|
i0.ɵɵelementEnd()()()();
|
|
1288
1288
|
} if (rf & 2) {
|
|
1289
1289
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1296,7 +1296,7 @@ function TestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_Templat
|
|
|
1296
1296
|
i0.ɵɵadvance(6);
|
|
1297
1297
|
i0.ɵɵrepeater(ctx_r1.testRuns);
|
|
1298
1298
|
} }
|
|
1299
|
-
function
|
|
1299
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1300
1300
|
i0.ɵɵelementStart(0, "div", 144)(1, "div", 201);
|
|
1301
1301
|
i0.ɵɵelement(2, "i", 54);
|
|
1302
1302
|
i0.ɵɵelementEnd();
|
|
@@ -1307,12 +1307,12 @@ function TestSuiteRunFormComponentExtended_Conditional_132_Conditional_4_Templat
|
|
|
1307
1307
|
i0.ɵɵtext(6, "Test runs will appear here once the suite execution completes.");
|
|
1308
1308
|
i0.ɵɵelementEnd()();
|
|
1309
1309
|
} }
|
|
1310
|
-
function
|
|
1310
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_132_Template(rf, ctx) { if (rf & 1) {
|
|
1311
1311
|
i0.ɵɵelementStart(0, "div", 61);
|
|
1312
|
-
i0.ɵɵconditionalCreate(1,
|
|
1313
|
-
i0.ɵɵconditionalCreate(2,
|
|
1314
|
-
i0.ɵɵconditionalCreate(3,
|
|
1315
|
-
i0.ɵɵconditionalCreate(4,
|
|
1312
|
+
i0.ɵɵconditionalCreate(1, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_1_Template, 4, 0, "div", 212);
|
|
1313
|
+
i0.ɵɵconditionalCreate(2, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_2_Template, 49, 7, "div", 213);
|
|
1314
|
+
i0.ɵɵconditionalCreate(3, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_3_Template, 36, 3, "div", 213);
|
|
1315
|
+
i0.ɵɵconditionalCreate(4, MJTestSuiteRunFormComponentExtended_Conditional_132_Conditional_4_Template, 7, 0, "div", 144);
|
|
1316
1316
|
i0.ɵɵelementEnd();
|
|
1317
1317
|
} if (rf & 2) {
|
|
1318
1318
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -1325,7 +1325,7 @@ function TestSuiteRunFormComponentExtended_Conditional_132_Template(rf, ctx) { i
|
|
|
1325
1325
|
i0.ɵɵadvance();
|
|
1326
1326
|
i0.ɵɵconditional(!ctx_r1.loadingTestRuns && ctx_r1.testRunsLoaded && ctx_r1.testRuns.length === 0 ? 4 : -1);
|
|
1327
1327
|
} }
|
|
1328
|
-
function
|
|
1328
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_133_Template(rf, ctx) { if (rf & 1) {
|
|
1329
1329
|
i0.ɵɵelementStart(0, "div", 62);
|
|
1330
1330
|
i0.ɵɵelement(1, "mj-execution-context", 257);
|
|
1331
1331
|
i0.ɵɵelementEnd();
|
|
@@ -1334,13 +1334,13 @@ function TestSuiteRunFormComponentExtended_Conditional_133_Template(rf, ctx) { i
|
|
|
1334
1334
|
i0.ɵɵadvance();
|
|
1335
1335
|
i0.ɵɵproperty("machineName", ctx_r1.record.MachineName)("machineId", ctx_r1.record.MachineID)("runByUserName", ctx_r1.record.RunByUserName)("runByUserEmail", ctx_r1.record.RunByUserEmail)("runContextDetailsJson", ctx_r1.record.RunContextDetails);
|
|
1336
1336
|
} }
|
|
1337
|
-
function
|
|
1337
|
+
function MJTestSuiteRunFormComponentExtended_Conditional_136_Template(rf, ctx) { if (rf & 1) {
|
|
1338
1338
|
const _r28 = i0.ɵɵgetCurrentView();
|
|
1339
1339
|
i0.ɵɵelementStart(0, "div", 65)(1, "div", 258);
|
|
1340
1340
|
i0.ɵɵelement(2, "i", 64);
|
|
1341
1341
|
i0.ɵɵtext(3, " Shortcuts ");
|
|
1342
1342
|
i0.ɵɵelementStart(4, "button", 259);
|
|
1343
|
-
i0.ɵɵlistener("click", function
|
|
1343
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Conditional_136_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleShortcuts()); });
|
|
1344
1344
|
i0.ɵɵelement(5, "i", 93);
|
|
1345
1345
|
i0.ɵɵelementEnd()();
|
|
1346
1346
|
i0.ɵɵelementStart(6, "div", 260)(7, "div", 261)(8, "span");
|
|
@@ -1377,7 +1377,7 @@ function TestSuiteRunFormComponentExtended_Conditional_136_Template(rf, ctx) { i
|
|
|
1377
1377
|
} }
|
|
1378
1378
|
/** Settings key for keyboard shortcuts visibility */
|
|
1379
1379
|
const SHORTCUTS_SETTINGS_KEY = '__mj.Testing.ShowKeyboardShortcuts';
|
|
1380
|
-
let
|
|
1380
|
+
let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExtended extends MJTestSuiteRunFormComponent {
|
|
1381
1381
|
constructor() {
|
|
1382
1382
|
super(...arguments);
|
|
1383
1383
|
this.destroy$ = new Subject();
|
|
@@ -2073,17 +2073,17 @@ let TestSuiteRunFormComponentExtended = class TestSuiteRunFormComponentExtended
|
|
|
2073
2073
|
URL.revokeObjectURL(link.href);
|
|
2074
2074
|
SharedService.Instance.CreateSimpleNotification('Export complete', 'success', 2000);
|
|
2075
2075
|
}
|
|
2076
|
-
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵ
|
|
2077
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
|
|
2078
|
-
i0.ɵɵlistener("keydown", function
|
|
2079
|
-
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 137, vars: 48, consts: [["kendoDialogContainer", "", 1, "test-suite-run-form"], [1, "suite-run-header"], ["aria-label", "Breadcrumb", 1, "breadcrumb"], ["href", "javascript:void(0)", 3, "click"], [1, "fas", "fa-vial"], [1, "breadcrumb-text"], [1, "current"], [1, "fas", "fa-chevron-right", "separator"], [1, "header-content"], [1, "header-left"], [1, "suite-run-icon"], [1, "fas", 3, "ngClass"], [1, "suite-run-info"], [1, "suite-run-meta"], [1, "status-badge", 3, "ngClass"], [1, "meta-tag", "environment"], [1, "meta-tag", "trigger"], [1, "header-actions"], ["kendoButton", "", "themeColor", "primary"], ["kendoButton", "", 3, "click", "disabled"], [1, "metrics-bar"], [1, "metric-card"], [1, "metric-icon"], [1, "fas", "fa-clock"], [1, "metric-content"], [1, "metric-value"], [1, "metric-label"], [1, "fas", "fa-percentage"], [1, "fas", "fa-dollar-sign"], [1, "fas", "fa-calendar"], [1, "results-summary"], [1, "result-item", "passed"], [1, "result-icon"], [1, "fas", "fa-check-circle"], [1, "result-content"], [1, "result-count"], [1, "result-label"], [1, "result-item", "failed"], [1, "fas", "fa-times-circle"], [1, "result-item", "error"], [1, "fas", "fa-exclamation-circle"], [1, "result-item", "skipped"], [1, "fas", "fa-forward"], [1, "result-item", "total"], [1, "fas", "fa-list"], [1, "tags-bar"], [1, "tags-editor-panel"], [1, "tabs-container"], ["role", "tablist", 1, "tabs"], ["role", "tab", 1, "tab", 3, "click"], [1, "fas", "fa-th-large"], [1, "tab-badge"], [1, "fas", "fa-info-circle"], ["role", "tab", "title", "Press 4", 1, "tab", 3, "click"], [1, "fas", "fa-chart-bar"], ["role", "tab", "title", "Press 5", 1, "tab", 3, "click"], [1, "fas", "fa-microchip"], [1, "tab-content"], [1, "overview-tab"], [1, "runs-tab"], [1, "details-tab"], [1, "analytics-tab"], [1, "execution-tab"], [1, "shortcuts-toggle", 3, "click", "title"], [1, "fas", "fa-keyboard"], [1, "keyboard-shortcuts"], [1, "fas", "fa-layer-group"], [1, "fas", "fa-server"], [1, "fas", "fa-bolt"], ["kendoButton", "", "themeColor", "primary", 3, "click"], [1, "fas", "fa-play"], [1, "tags-bar-content"], [1, "tags-bar-label"], [1, "fas", "fa-tags"], [1, "tags-bar-chips"], [1, "tags-bar-empty"], ["title", "Edit tags", 1, "tags-bar-edit", 3, "click"], [1, "fas", "fa-plus"], [1, "tag-inline"], [1, "tags-editor-header"], [1, "tags-editor-title"], [1, "tags-editor-body"], [1, "tags-editor-chips"], [1, "tag-editable"], [1, "tags-empty-hint"], [1, "tags-editor-input"], ["type", "text", "placeholder", "Type a tag and press Enter...", 1, "tag-text-input", 3, "ngModelChange", "keyup.enter", "ngModel"], ["kendoButton", "", "fillMode", "flat", 3, "click", "disabled"], [1, "tags-editor-footer"], ["kendoButton", "", "themeColor", "primary", 3, "click", "disabled"], [1, "fas", "fa-spinner", "fa-spin"], ["kendoButton", "", "fillMode", "flat", 3, "click"], ["title", "Remove tag", 1, "tag-remove-btn", 3, "click"], [1, "fas", "fa-times"], [1, "result-hero"], [1, "result-hero-icon"], [1, "result-hero-text"], [1, "result-hero-stats"], [1, "stat-item"], [1, "stat-value"], [1, "stat-label"], [1, "stat-divider"], [1, "evaluation-summary"], [1, "needs-review-section"], [1, "progress-section"], [1, "eval-summary-grid"], [1, "eval-summary-card"], [1, "eval-card-header"], [1, "fa-solid", "fa-user"], [1, "eval-card-body"], [1, "eval-stat-row"], [1, "eval-stat-label"], [1, "eval-stat-value"], [1, "eval-card-footer"], [1, "eval-stat-value", "correct"], [1, "eval-stat-value", "incorrect"], [1, "pending-badge"], [1, "fa-solid", "fa-clock"], [1, "fa-solid", "fa-robot"], [1, "fa-solid", "fa-circle-check"], [1, "eval-stat-value", "error"], [1, "eval-stat-value", "timeout"], [1, "needs-review-header"], [1, "fa-solid", "fa-user-clock"], [1, "review-count"], [1, "needs-review-list"], [1, "review-item", 3, "high-priority", "medium-priority"], [1, "review-more"], [1, "review-item", 3, "click"], [1, "review-item-icon"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "fa-solid", "fa-circle-dot"], [1, "review-item-content"], [1, "review-item-name"], [1, "review-item-reason"], [1, "review-item-action"], [1, "fa-solid", "fa-chevron-right"], [1, "progress-info"], [1, "fas", "fa-circle-notch", "fa-spin"], [1, "auto-refresh-notice"], [1, "fas", "fa-sync"], [1, "runs-toolbar"], [1, "loading-state"], [1, "test-runs-list"], [1, "empty-state"], [1, "run-filters"], [1, "filter-btn", 3, "click"], [1, "filter-btn", "passed", 3, "active"], [1, "filter-btn", "failed", 3, "active"], [1, "filter-btn", "error", 3, "active"], [1, "runs-actions"], ["kendoButton", "", 3, "click"], [1, "fas", "fa-download"], [1, "filter-btn", "passed", 3, "click"], [1, "fas", "fa-check"], [1, "filter-btn", "failed", 3, "click"], [1, "filter-btn", "error", 3, "click"], [1, "fas", "fa-exclamation"], [1, "skeleton-list"], [1, "skeleton-card"], [1, "skeleton-sequence"], [1, "skeleton-icon"], [1, "skeleton-content"], [1, "skeleton-line", "wide"], [1, "skeleton-line", "narrow"], [1, "test-run-card"], [1, "test-run-item", 3, "click"], [1, "run-sequence"], [1, "run-icon"], [1, "run-content"], [1, "run-header-row"], [1, "run-name"], [3, "executionStatus", "originalStatus", "autoScore", "humanRating", "humanIsCorrect", "hasHumanFeedback", "preferences", "mode"], [1, "run-meta"], [1, "run-duration"], [1, "run-cost"], [3, "entityName", "recordId"], [1, "run-tags"], [1, "run-expand"], [1, "fas"], [1, "inline-feedback"], [1, "tag-chip"], [1, "feedback-divider"], [1, "feedback-section"], [1, "feedback-label"], [1, "inline-rating"], [1, "rating-numbers"], ["type", "button", 1, "rating-btn", 3, "selected", "hover", "low", "mid", "high"], [1, "rating-info"], [1, "correctness-row"], [1, "correctness-label"], [1, "correctness-options"], [1, "radio-opt", 3, "click"], ["type", "radio", 3, "ngModelChange", "name", "value", "ngModel"], [1, "comments-row", 3, "click"], ["placeholder", "Add comments or corrections...", "rows", "3", 1, "feedback-textarea", 3, "ngModelChange", "ngModel"], [1, "feedback-actions", 3, "click"], [1, "fas", "fa-external-link-alt"], ["type", "button", 1, "rating-btn", 3, "click", "mouseenter", "mouseleave"], [1, "rating-value"], [1, "rating-label-text"], [1, "empty-icon"], [1, "fas", "fa-inbox"], [1, "fas", "fa-filter"], [1, "details-card"], [1, "details-grid"], [1, "detail-item"], [1, "detail-label"], [1, "detail-value", "monospace"], [1, "detail-value"], ["href", "javascript:void(0)"], [1, "status-inline", 3, "ngClass"], [1, "analytics-loading"], [1, "analytics-section"], [1, "fas", "fa-chart-pie"], [1, "stats-grid"], [1, "stat-card"], [1, "stat-icon", "passed"], [1, "stat-content"], [1, "stat-percent"], [1, "stat-icon", "failed"], [1, "stat-icon", "score"], [1, "fas", "fa-star"], [1, "stat-icon", "duration"], [1, "stat-icon", "cost"], [1, "analytics-header"], [1, "fas", "fa-table"], [1, "analytics-legend"], [1, "legend-item", "passed"], [1, "legend-item", "failed"], [1, "legend-item", "error"], [1, "legend-item", "skipped"], [1, "results-table-wrapper"], [1, "results-table"], [1, "seq-col"], [1, "name-col"], [1, "status-col"], [1, "score-col"], [1, "feedback-col"], [1, "duration-col"], [1, "cost-col"], [1, "result-row", 3, "row-passed", "row-failed", "row-error", "row-skipped"], [1, "result-row", 3, "click"], [1, "test-name-wrapper"], [1, "test-name"], [1, "test-tags"], [1, "na-value"], [1, "tag-mini"], [1, "score-display"], [1, "score-bar-mini"], [1, "score-fill"], [1, "score-text"], [1, "feedback-display"], [1, "na-value", "needs-review"], [1, "feedback-rating"], [1, "feedback-correctness"], [1, "fas", "fa-user-clock"], [3, "machineName", "machineId", "runByUserName", "runByUserEmail", "runContextDetailsJson"], [1, "shortcuts-header"], ["title", "Hide shortcuts", 1, "shortcuts-close", 3, "click"], [1, "shortcut-list"], [1, "shortcut-item"], [1, "shortcut-keys"]], template: function
|
|
2076
|
+
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJTestSuiteRunFormComponentExtended_BaseFactory; return function MJTestSuiteRunFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJTestSuiteRunFormComponentExtended_BaseFactory || (ɵMJTestSuiteRunFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJTestSuiteRunFormComponentExtended)))(__ngFactoryType__ || MJTestSuiteRunFormComponentExtended); }; })(); }
|
|
2077
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJTestSuiteRunFormComponentExtended, selectors: [["mj-test-suite-run-form"]], hostBindings: function MJTestSuiteRunFormComponentExtended_HostBindings(rf, ctx) { if (rf & 1) {
|
|
2078
|
+
i0.ɵɵlistener("keydown", function MJTestSuiteRunFormComponentExtended_keydown_HostBindingHandler($event) { return ctx.handleKeyboardShortcut($event); }, i0.ɵɵresolveDocument);
|
|
2079
|
+
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 137, vars: 48, consts: [["kendoDialogContainer", "", 1, "test-suite-run-form"], [1, "suite-run-header"], ["aria-label", "Breadcrumb", 1, "breadcrumb"], ["href", "javascript:void(0)", 3, "click"], [1, "fas", "fa-vial"], [1, "breadcrumb-text"], [1, "current"], [1, "fas", "fa-chevron-right", "separator"], [1, "header-content"], [1, "header-left"], [1, "suite-run-icon"], [1, "fas", 3, "ngClass"], [1, "suite-run-info"], [1, "suite-run-meta"], [1, "status-badge", 3, "ngClass"], [1, "meta-tag", "environment"], [1, "meta-tag", "trigger"], [1, "header-actions"], ["kendoButton", "", "themeColor", "primary"], ["kendoButton", "", 3, "click", "disabled"], [1, "metrics-bar"], [1, "metric-card"], [1, "metric-icon"], [1, "fas", "fa-clock"], [1, "metric-content"], [1, "metric-value"], [1, "metric-label"], [1, "fas", "fa-percentage"], [1, "fas", "fa-dollar-sign"], [1, "fas", "fa-calendar"], [1, "results-summary"], [1, "result-item", "passed"], [1, "result-icon"], [1, "fas", "fa-check-circle"], [1, "result-content"], [1, "result-count"], [1, "result-label"], [1, "result-item", "failed"], [1, "fas", "fa-times-circle"], [1, "result-item", "error"], [1, "fas", "fa-exclamation-circle"], [1, "result-item", "skipped"], [1, "fas", "fa-forward"], [1, "result-item", "total"], [1, "fas", "fa-list"], [1, "tags-bar"], [1, "tags-editor-panel"], [1, "tabs-container"], ["role", "tablist", 1, "tabs"], ["role", "tab", 1, "tab", 3, "click"], [1, "fas", "fa-th-large"], [1, "tab-badge"], [1, "fas", "fa-info-circle"], ["role", "tab", "title", "Press 4", 1, "tab", 3, "click"], [1, "fas", "fa-chart-bar"], ["role", "tab", "title", "Press 5", 1, "tab", 3, "click"], [1, "fas", "fa-microchip"], [1, "tab-content"], [1, "overview-tab"], [1, "runs-tab"], [1, "details-tab"], [1, "analytics-tab"], [1, "execution-tab"], [1, "shortcuts-toggle", 3, "click", "title"], [1, "fas", "fa-keyboard"], [1, "keyboard-shortcuts"], [1, "fas", "fa-layer-group"], [1, "fas", "fa-server"], [1, "fas", "fa-bolt"], ["kendoButton", "", "themeColor", "primary", 3, "click"], [1, "fas", "fa-play"], [1, "tags-bar-content"], [1, "tags-bar-label"], [1, "fas", "fa-tags"], [1, "tags-bar-chips"], [1, "tags-bar-empty"], ["title", "Edit tags", 1, "tags-bar-edit", 3, "click"], [1, "fas", "fa-plus"], [1, "tag-inline"], [1, "tags-editor-header"], [1, "tags-editor-title"], [1, "tags-editor-body"], [1, "tags-editor-chips"], [1, "tag-editable"], [1, "tags-empty-hint"], [1, "tags-editor-input"], ["type", "text", "placeholder", "Type a tag and press Enter...", 1, "tag-text-input", 3, "ngModelChange", "keyup.enter", "ngModel"], ["kendoButton", "", "fillMode", "flat", 3, "click", "disabled"], [1, "tags-editor-footer"], ["kendoButton", "", "themeColor", "primary", 3, "click", "disabled"], [1, "fas", "fa-spinner", "fa-spin"], ["kendoButton", "", "fillMode", "flat", 3, "click"], ["title", "Remove tag", 1, "tag-remove-btn", 3, "click"], [1, "fas", "fa-times"], [1, "result-hero"], [1, "result-hero-icon"], [1, "result-hero-text"], [1, "result-hero-stats"], [1, "stat-item"], [1, "stat-value"], [1, "stat-label"], [1, "stat-divider"], [1, "evaluation-summary"], [1, "needs-review-section"], [1, "progress-section"], [1, "eval-summary-grid"], [1, "eval-summary-card"], [1, "eval-card-header"], [1, "fa-solid", "fa-user"], [1, "eval-card-body"], [1, "eval-stat-row"], [1, "eval-stat-label"], [1, "eval-stat-value"], [1, "eval-card-footer"], [1, "eval-stat-value", "correct"], [1, "eval-stat-value", "incorrect"], [1, "pending-badge"], [1, "fa-solid", "fa-clock"], [1, "fa-solid", "fa-robot"], [1, "fa-solid", "fa-circle-check"], [1, "eval-stat-value", "error"], [1, "eval-stat-value", "timeout"], [1, "needs-review-header"], [1, "fa-solid", "fa-user-clock"], [1, "review-count"], [1, "needs-review-list"], [1, "review-item", 3, "high-priority", "medium-priority"], [1, "review-more"], [1, "review-item", 3, "click"], [1, "review-item-icon"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "fa-solid", "fa-circle-dot"], [1, "review-item-content"], [1, "review-item-name"], [1, "review-item-reason"], [1, "review-item-action"], [1, "fa-solid", "fa-chevron-right"], [1, "progress-info"], [1, "fas", "fa-circle-notch", "fa-spin"], [1, "auto-refresh-notice"], [1, "fas", "fa-sync"], [1, "runs-toolbar"], [1, "loading-state"], [1, "test-runs-list"], [1, "empty-state"], [1, "run-filters"], [1, "filter-btn", 3, "click"], [1, "filter-btn", "passed", 3, "active"], [1, "filter-btn", "failed", 3, "active"], [1, "filter-btn", "error", 3, "active"], [1, "runs-actions"], ["kendoButton", "", 3, "click"], [1, "fas", "fa-download"], [1, "filter-btn", "passed", 3, "click"], [1, "fas", "fa-check"], [1, "filter-btn", "failed", 3, "click"], [1, "filter-btn", "error", 3, "click"], [1, "fas", "fa-exclamation"], [1, "skeleton-list"], [1, "skeleton-card"], [1, "skeleton-sequence"], [1, "skeleton-icon"], [1, "skeleton-content"], [1, "skeleton-line", "wide"], [1, "skeleton-line", "narrow"], [1, "test-run-card"], [1, "test-run-item", 3, "click"], [1, "run-sequence"], [1, "run-icon"], [1, "run-content"], [1, "run-header-row"], [1, "run-name"], [3, "executionStatus", "originalStatus", "autoScore", "humanRating", "humanIsCorrect", "hasHumanFeedback", "preferences", "mode"], [1, "run-meta"], [1, "run-duration"], [1, "run-cost"], [3, "entityName", "recordId"], [1, "run-tags"], [1, "run-expand"], [1, "fas"], [1, "inline-feedback"], [1, "tag-chip"], [1, "feedback-divider"], [1, "feedback-section"], [1, "feedback-label"], [1, "inline-rating"], [1, "rating-numbers"], ["type", "button", 1, "rating-btn", 3, "selected", "hover", "low", "mid", "high"], [1, "rating-info"], [1, "correctness-row"], [1, "correctness-label"], [1, "correctness-options"], [1, "radio-opt", 3, "click"], ["type", "radio", 3, "ngModelChange", "name", "value", "ngModel"], [1, "comments-row", 3, "click"], ["placeholder", "Add comments or corrections...", "rows", "3", 1, "feedback-textarea", 3, "ngModelChange", "ngModel"], [1, "feedback-actions", 3, "click"], [1, "fas", "fa-external-link-alt"], ["type", "button", 1, "rating-btn", 3, "click", "mouseenter", "mouseleave"], [1, "rating-value"], [1, "rating-label-text"], [1, "empty-icon"], [1, "fas", "fa-inbox"], [1, "fas", "fa-filter"], [1, "details-card"], [1, "details-grid"], [1, "detail-item"], [1, "detail-label"], [1, "detail-value", "monospace"], [1, "detail-value"], ["href", "javascript:void(0)"], [1, "status-inline", 3, "ngClass"], [1, "analytics-loading"], [1, "analytics-section"], [1, "fas", "fa-chart-pie"], [1, "stats-grid"], [1, "stat-card"], [1, "stat-icon", "passed"], [1, "stat-content"], [1, "stat-percent"], [1, "stat-icon", "failed"], [1, "stat-icon", "score"], [1, "fas", "fa-star"], [1, "stat-icon", "duration"], [1, "stat-icon", "cost"], [1, "analytics-header"], [1, "fas", "fa-table"], [1, "analytics-legend"], [1, "legend-item", "passed"], [1, "legend-item", "failed"], [1, "legend-item", "error"], [1, "legend-item", "skipped"], [1, "results-table-wrapper"], [1, "results-table"], [1, "seq-col"], [1, "name-col"], [1, "status-col"], [1, "score-col"], [1, "feedback-col"], [1, "duration-col"], [1, "cost-col"], [1, "result-row", 3, "row-passed", "row-failed", "row-error", "row-skipped"], [1, "result-row", 3, "click"], [1, "test-name-wrapper"], [1, "test-name"], [1, "test-tags"], [1, "na-value"], [1, "tag-mini"], [1, "score-display"], [1, "score-bar-mini"], [1, "score-fill"], [1, "score-text"], [1, "feedback-display"], [1, "na-value", "needs-review"], [1, "feedback-rating"], [1, "feedback-correctness"], [1, "fas", "fa-user-clock"], [3, "machineName", "machineId", "runByUserName", "runByUserEmail", "runContextDetailsJson"], [1, "shortcuts-header"], ["title", "Hide shortcuts", 1, "shortcuts-close", 3, "click"], [1, "shortcut-list"], [1, "shortcut-item"], [1, "shortcut-keys"]], template: function MJTestSuiteRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
2080
2080
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "nav", 2)(3, "ol")(4, "li")(5, "a", 3);
|
|
2081
|
-
i0.ɵɵlistener("click", function
|
|
2081
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Template_a_click_5_listener() { return ctx.navigateToTestingDashboard(); });
|
|
2082
2082
|
i0.ɵɵelement(6, "i", 4);
|
|
2083
2083
|
i0.ɵɵelementStart(7, "span", 5);
|
|
2084
2084
|
i0.ɵɵtext(8, "Testing");
|
|
2085
2085
|
i0.ɵɵelementEnd()()();
|
|
2086
|
-
i0.ɵɵconditionalCreate(9,
|
|
2086
|
+
i0.ɵɵconditionalCreate(9, MJTestSuiteRunFormComponentExtended_Conditional_9_Template, 6, 1, "li");
|
|
2087
2087
|
i0.ɵɵelementStart(10, "li", 6);
|
|
2088
2088
|
i0.ɵɵelement(11, "i", 7);
|
|
2089
2089
|
i0.ɵɵelementStart(12, "span");
|
|
@@ -2099,14 +2099,14 @@ let TestSuiteRunFormComponentExtended = class TestSuiteRunFormComponentExtended
|
|
|
2099
2099
|
i0.ɵɵelement(23, "i", 11);
|
|
2100
2100
|
i0.ɵɵtext(24);
|
|
2101
2101
|
i0.ɵɵelementEnd();
|
|
2102
|
-
i0.ɵɵconditionalCreate(25,
|
|
2103
|
-
i0.ɵɵconditionalCreate(26,
|
|
2102
|
+
i0.ɵɵconditionalCreate(25, MJTestSuiteRunFormComponentExtended_Conditional_25_Template, 3, 1, "span", 15);
|
|
2103
|
+
i0.ɵɵconditionalCreate(26, MJTestSuiteRunFormComponentExtended_Conditional_26_Template, 3, 1, "span", 16);
|
|
2104
2104
|
i0.ɵɵelementEnd()()();
|
|
2105
2105
|
i0.ɵɵelementStart(27, "div", 17);
|
|
2106
2106
|
i0.ɵɵelement(28, "app-evaluation-mode-toggle");
|
|
2107
|
-
i0.ɵɵconditionalCreate(29,
|
|
2107
|
+
i0.ɵɵconditionalCreate(29, MJTestSuiteRunFormComponentExtended_Conditional_29_Template, 3, 0, "button", 18);
|
|
2108
2108
|
i0.ɵɵelementStart(30, "button", 19);
|
|
2109
|
-
i0.ɵɵlistener("click", function
|
|
2109
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Template_button_click_30_listener() { return ctx.refresh(); });
|
|
2110
2110
|
i0.ɵɵelement(31, "i", 11);
|
|
2111
2111
|
i0.ɵɵtext(32);
|
|
2112
2112
|
i0.ɵɵelementEnd()()();
|
|
@@ -2191,48 +2191,48 @@ let TestSuiteRunFormComponentExtended = class TestSuiteRunFormComponentExtended
|
|
|
2191
2191
|
i0.ɵɵelementStart(105, "span", 36);
|
|
2192
2192
|
i0.ɵɵtext(106, "Total");
|
|
2193
2193
|
i0.ɵɵelementEnd()()()();
|
|
2194
|
-
i0.ɵɵconditionalCreate(107,
|
|
2195
|
-
i0.ɵɵconditionalCreate(108,
|
|
2194
|
+
i0.ɵɵconditionalCreate(107, MJTestSuiteRunFormComponentExtended_Conditional_107_Template, 9, 2, "div", 45);
|
|
2195
|
+
i0.ɵɵconditionalCreate(108, MJTestSuiteRunFormComponentExtended_Conditional_108_Template, 20, 6, "div", 46);
|
|
2196
2196
|
i0.ɵɵelementEnd();
|
|
2197
2197
|
i0.ɵɵelementStart(109, "div", 47)(110, "div", 48)(111, "button", 49);
|
|
2198
|
-
i0.ɵɵlistener("click", function
|
|
2198
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Template_button_click_111_listener() { return ctx.changeTab("overview"); });
|
|
2199
2199
|
i0.ɵɵelement(112, "i", 50);
|
|
2200
2200
|
i0.ɵɵtext(113, " Overview ");
|
|
2201
2201
|
i0.ɵɵelementEnd();
|
|
2202
2202
|
i0.ɵɵelementStart(114, "button", 49);
|
|
2203
|
-
i0.ɵɵlistener("click", function
|
|
2203
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Template_button_click_114_listener() { return ctx.changeTab("runs"); });
|
|
2204
2204
|
i0.ɵɵelement(115, "i", 44);
|
|
2205
2205
|
i0.ɵɵtext(116, " Test Runs ");
|
|
2206
|
-
i0.ɵɵconditionalCreate(117,
|
|
2206
|
+
i0.ɵɵconditionalCreate(117, MJTestSuiteRunFormComponentExtended_Conditional_117_Template, 2, 1, "span", 51);
|
|
2207
2207
|
i0.ɵɵelementEnd();
|
|
2208
2208
|
i0.ɵɵelementStart(118, "button", 49);
|
|
2209
|
-
i0.ɵɵlistener("click", function
|
|
2209
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Template_button_click_118_listener() { return ctx.changeTab("details"); });
|
|
2210
2210
|
i0.ɵɵelement(119, "i", 52);
|
|
2211
2211
|
i0.ɵɵtext(120, " Details ");
|
|
2212
2212
|
i0.ɵɵelementEnd();
|
|
2213
2213
|
i0.ɵɵelementStart(121, "button", 53);
|
|
2214
|
-
i0.ɵɵlistener("click", function
|
|
2214
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Template_button_click_121_listener() { return ctx.changeTab("analytics"); });
|
|
2215
2215
|
i0.ɵɵelement(122, "i", 54);
|
|
2216
2216
|
i0.ɵɵtext(123, " Analytics ");
|
|
2217
2217
|
i0.ɵɵelementEnd();
|
|
2218
2218
|
i0.ɵɵelementStart(124, "button", 55);
|
|
2219
|
-
i0.ɵɵlistener("click", function
|
|
2219
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Template_button_click_124_listener() { return ctx.changeTab("execution"); });
|
|
2220
2220
|
i0.ɵɵelement(125, "i", 56);
|
|
2221
2221
|
i0.ɵɵelementStart(126, "span");
|
|
2222
2222
|
i0.ɵɵtext(127, "Execution");
|
|
2223
2223
|
i0.ɵɵelementEnd()()()();
|
|
2224
2224
|
i0.ɵɵelementStart(128, "div", 57);
|
|
2225
|
-
i0.ɵɵconditionalCreate(129,
|
|
2226
|
-
i0.ɵɵconditionalCreate(130,
|
|
2227
|
-
i0.ɵɵconditionalCreate(131,
|
|
2228
|
-
i0.ɵɵconditionalCreate(132,
|
|
2229
|
-
i0.ɵɵconditionalCreate(133,
|
|
2225
|
+
i0.ɵɵconditionalCreate(129, MJTestSuiteRunFormComponentExtended_Conditional_129_Template, 22, 16, "div", 58);
|
|
2226
|
+
i0.ɵɵconditionalCreate(130, MJTestSuiteRunFormComponentExtended_Conditional_130_Template, 6, 5, "div", 59);
|
|
2227
|
+
i0.ɵɵconditionalCreate(131, MJTestSuiteRunFormComponentExtended_Conditional_131_Template, 60, 18, "div", 60);
|
|
2228
|
+
i0.ɵɵconditionalCreate(132, MJTestSuiteRunFormComponentExtended_Conditional_132_Template, 5, 4, "div", 61);
|
|
2229
|
+
i0.ɵɵconditionalCreate(133, MJTestSuiteRunFormComponentExtended_Conditional_133_Template, 2, 5, "div", 62);
|
|
2230
2230
|
i0.ɵɵelementEnd();
|
|
2231
2231
|
i0.ɵɵelementStart(134, "button", 63);
|
|
2232
|
-
i0.ɵɵlistener("click", function
|
|
2232
|
+
i0.ɵɵlistener("click", function MJTestSuiteRunFormComponentExtended_Template_button_click_134_listener() { return ctx.toggleShortcuts(); });
|
|
2233
2233
|
i0.ɵɵelement(135, "i", 64);
|
|
2234
2234
|
i0.ɵɵelementEnd();
|
|
2235
|
-
i0.ɵɵconditionalCreate(136,
|
|
2235
|
+
i0.ɵɵconditionalCreate(136, MJTestSuiteRunFormComponentExtended_Conditional_136_Template, 34, 0, "div", 65);
|
|
2236
2236
|
i0.ɵɵelementEnd();
|
|
2237
2237
|
} if (rf & 2) {
|
|
2238
2238
|
i0.ɵɵadvance(9);
|
|
@@ -2316,16 +2316,16 @@ let TestSuiteRunFormComponentExtended = class TestSuiteRunFormComponentExtended
|
|
|
2316
2316
|
i0.ɵɵconditional(ctx.showShortcuts ? 136 : -1);
|
|
2317
2317
|
} }, dependencies: [i1.NgClass, i2.DefaultValueAccessor, i2.RadioControlValueAccessor, i2.NgControlStatus, i2.NgModel, i3.DialogContainerDirective, i4.ButtonComponent, i5.EvaluationBadgeComponent, i5.EvaluationModeToggleComponent, i5.ExecutionContextComponent, i6.EntityLinkPillComponent, i1.DatePipe], styles: ["\n\n\n\n\n\n\n\n[_nghost-%COMP%] {\n --suite-run-primary: #3b82f6;\n --suite-run-primary-light: #eff6ff;\n --suite-run-success: #10b981;\n --suite-run-success-light: #ecfdf5;\n --suite-run-danger: #ef4444;\n --suite-run-danger-light: #fef2f2;\n --suite-run-warning: #f59e0b;\n --suite-run-warning-light: #fffbeb;\n --suite-run-info: #8b5cf6;\n --suite-run-info-light: #f5f3ff;\n --suite-run-neutral: #6b7280;\n --suite-run-neutral-light: #f9fafb;\n --suite-run-bg: #f8fafc;\n --suite-run-card: #ffffff;\n --suite-run-border: #e2e8f0;\n --suite-run-text: #1e293b;\n --suite-run-text-secondary: #64748b;\n --suite-run-radius: 12px;\n --suite-run-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06);\n --suite-run-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\n --suite-run-transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n\n\n.test-suite-run-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--suite-run-bg);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n}\n\n\n\n\n\n.suite-run-header[_ngcontent-%COMP%] {\n background: var(--suite-run-card);\n border-bottom: 1px solid var(--suite-run-border);\n padding: 20px 24px;\n}\n\n\n\n.breadcrumb[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n\n.breadcrumb[_ngcontent-%COMP%] ol[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n list-style: none;\n margin: 0;\n padding: 0;\n font-size: 13px;\n}\n\n.breadcrumb[_ngcontent-%COMP%] li[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.breadcrumb[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n color: var(--suite-run-primary);\n text-decoration: none;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 8px;\n border-radius: 6px;\n transition: background 0.15s;\n}\n\n.breadcrumb[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover {\n background: rgba(59, 130, 246, 0.1);\n text-decoration: none;\n}\n\n.breadcrumb[_ngcontent-%COMP%] .separator[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--suite-run-text-secondary);\n margin: 0 4px;\n}\n\n.breadcrumb[_ngcontent-%COMP%] .current[_ngcontent-%COMP%] {\n color: var(--suite-run-text-secondary);\n font-weight: 500;\n}\n\n.breadcrumb-text[_ngcontent-%COMP%] {\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n align-items: flex-start;\n}\n\n.suite-run-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: var(--suite-run-radius);\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 24px;\n flex-shrink: 0;\n box-shadow: var(--suite-run-shadow);\n}\n\n.suite-run-info[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 24px;\n font-weight: 700;\n color: var(--suite-run-text);\n letter-spacing: -0.025em;\n}\n\n.suite-run-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.025em;\n}\n\n.status-badge.status-completed[_ngcontent-%COMP%] {\n background: var(--suite-run-success-light);\n color: var(--suite-run-success);\n}\n\n.status-badge.status-failed[_ngcontent-%COMP%] {\n background: var(--suite-run-danger-light);\n color: var(--suite-run-danger);\n}\n\n.status-badge.status-running[_ngcontent-%COMP%] {\n background: var(--suite-run-primary-light);\n color: var(--suite-run-primary);\n}\n\n.status-badge.status-pending[_ngcontent-%COMP%] {\n background: var(--suite-run-info-light);\n color: var(--suite-run-info);\n}\n\n.status-badge.status-cancelled[_ngcontent-%COMP%] {\n background: var(--suite-run-neutral-light);\n color: var(--suite-run-neutral);\n}\n\n.meta-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: var(--suite-run-neutral-light);\n border-radius: 6px;\n font-size: 12px;\n color: var(--suite-run-text-secondary);\n}\n\n.meta-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.7;\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n\n\n\n\n.metrics-bar[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);\n border: 1px solid var(--suite-run-border);\n border-radius: 10px;\n padding: 14px;\n transition: var(--suite-run-transition);\n}\n\n.metric-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: var(--suite-run-shadow);\n}\n\n.metric-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--suite-run-card);\n border-radius: 10px;\n color: var(--suite-run-primary);\n font-size: 16px;\n box-shadow: var(--suite-run-shadow);\n}\n\n.metric-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.metric-value[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 700;\n color: var(--suite-run-text);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.metric-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--suite-run-text-secondary);\n margin-top: 2px;\n}\n\n\n\n\n\n.results-summary[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding-top: 20px;\n border-top: 1px solid var(--suite-run-border);\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.result-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 16px;\n background: var(--suite-run-card);\n border: 1px solid var(--suite-run-border);\n border-radius: 10px;\n flex-shrink: 0;\n transition: var(--suite-run-transition);\n}\n\n.result-item[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: var(--suite-run-shadow);\n}\n\n.result-icon[_ngcontent-%COMP%] {\n font-size: 24px;\n}\n\n.result-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.result-count[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n line-height: 1.2;\n}\n\n.result-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 500;\n color: var(--suite-run-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.result-item.passed[_ngcontent-%COMP%] .result-icon[_ngcontent-%COMP%], \n.result-item.passed[_ngcontent-%COMP%] .result-count[_ngcontent-%COMP%] {\n color: var(--suite-run-success);\n}\n\n.result-item.failed[_ngcontent-%COMP%] .result-icon[_ngcontent-%COMP%], \n.result-item.failed[_ngcontent-%COMP%] .result-count[_ngcontent-%COMP%] {\n color: var(--suite-run-danger);\n}\n\n.result-item.error[_ngcontent-%COMP%] .result-icon[_ngcontent-%COMP%], \n.result-item.error[_ngcontent-%COMP%] .result-count[_ngcontent-%COMP%] {\n color: var(--suite-run-warning);\n}\n\n.result-item.skipped[_ngcontent-%COMP%] .result-icon[_ngcontent-%COMP%], \n.result-item.skipped[_ngcontent-%COMP%] .result-count[_ngcontent-%COMP%] {\n color: var(--suite-run-neutral);\n}\n\n.result-item.total[_ngcontent-%COMP%] .result-icon[_ngcontent-%COMP%], \n.result-item.total[_ngcontent-%COMP%] .result-count[_ngcontent-%COMP%] {\n color: var(--suite-run-primary);\n}\n\n\n\n\n\n.tabs-container[_ngcontent-%COMP%] {\n background: var(--suite-run-card);\n border-bottom: 1px solid var(--suite-run-border);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.tabs[_ngcontent-%COMP%] {\n display: flex;\n padding: 0 24px;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: none;\n}\n\n.tabs[_ngcontent-%COMP%]::-webkit-scrollbar {\n display: none;\n}\n\n.tab[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 16px 20px;\n border: none;\n background: transparent;\n border-bottom: 3px solid transparent;\n color: var(--suite-run-text-secondary);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: var(--suite-run-transition);\n white-space: nowrap;\n position: relative;\n}\n\n.tab[_ngcontent-%COMP%]:hover {\n color: var(--suite-run-primary);\n background: var(--suite-run-primary-light);\n}\n\n.tab.active[_ngcontent-%COMP%] {\n color: var(--suite-run-primary);\n border-bottom-color: var(--suite-run-primary);\n font-weight: 600;\n}\n\n.tab[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 15px;\n}\n\n.tab-badge[_ngcontent-%COMP%] {\n background: var(--suite-run-border);\n color: var(--suite-run-text-secondary);\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.tab.active[_ngcontent-%COMP%] .tab-badge[_ngcontent-%COMP%] {\n background: var(--suite-run-primary-light);\n color: var(--suite-run-primary);\n}\n\n.tab-shortcut[_ngcontent-%COMP%] {\n display: none;\n width: 18px;\n height: 18px;\n background: var(--suite-run-neutral-light);\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n color: var(--suite-run-text-secondary);\n align-items: center;\n justify-content: center;\n margin-left: 4px;\n}\n\n\n\n\n\n.tab-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n}\n\n\n\n\n\n.overview-tab[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n max-width: 800px;\n margin: 0 auto;\n width: 100%;\n}\n\n.result-hero[_ngcontent-%COMP%] {\n background: var(--suite-run-card);\n border-radius: var(--suite-run-radius);\n padding: 48px 32px;\n text-align: center;\n border: 2px solid var(--suite-run-border);\n transition: var(--suite-run-transition);\n}\n\n.result-hero.passed[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #ecfdf5 0%, #d1fae5 100%);\n border-color: var(--suite-run-success);\n}\n\n.result-hero.failed[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fef2f2 0%, #fecaca 100%);\n border-color: var(--suite-run-danger);\n}\n\n.result-hero.running[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);\n border-color: var(--suite-run-primary);\n}\n\n.result-hero.pending[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f5f3ff 0%, #ede9fe 100%);\n border-color: var(--suite-run-info);\n}\n\n.result-hero-icon[_ngcontent-%COMP%] {\n font-size: 72px;\n margin-bottom: 20px;\n}\n\n.result-hero.passed[_ngcontent-%COMP%] .result-hero-icon[_ngcontent-%COMP%] {\n color: var(--suite-run-success);\n}\n\n.result-hero.failed[_ngcontent-%COMP%] .result-hero-icon[_ngcontent-%COMP%] {\n color: var(--suite-run-danger);\n}\n\n.result-hero.running[_ngcontent-%COMP%] .result-hero-icon[_ngcontent-%COMP%] {\n color: var(--suite-run-primary);\n}\n\n.result-hero.pending[_ngcontent-%COMP%] .result-hero-icon[_ngcontent-%COMP%] {\n color: var(--suite-run-info);\n}\n\n.result-hero-text[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n font-size: 32px;\n font-weight: 800;\n color: var(--suite-run-text);\n letter-spacing: -0.025em;\n}\n\n.result-hero-stats[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 32px;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n color: var(--suite-run-text);\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: var(--suite-run-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat-divider[_ngcontent-%COMP%] {\n width: 1px;\n height: 40px;\n background: var(--suite-run-border);\n}\n\n\n\n.progress-section[_ngcontent-%COMP%] {\n background: var(--suite-run-primary-light);\n border: 1px solid rgba(59, 130, 246, 0.2);\n border-radius: var(--suite-run-radius);\n padding: 20px;\n text-align: center;\n}\n\n.progress-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 500;\n color: var(--suite-run-primary);\n margin-bottom: 8px;\n}\n\n.progress-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n}\n\n.auto-refresh-notice[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n font-size: 12px;\n color: var(--suite-run-text-secondary);\n}\n\n\n\n\n\n.runs-tab[_ngcontent-%COMP%] {\n max-width: 900px;\n margin: 0 auto;\n width: 100%;\n}\n\n\n\n.loading-state[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_fadeIn 0.3s ease;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.skeleton-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.skeleton-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n background: var(--suite-run-card);\n border-radius: var(--suite-run-radius);\n border: 1px solid var(--suite-run-border);\n}\n\n.skeleton-sequence[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n background: linear-gradient(90deg, #f1f5f9 25%, #e2e8f0 50%, #f1f5f9 75%);\n background-size: 200% 100%;\n animation: _ngcontent-%COMP%_shimmer 1.5s infinite;\n border-radius: 50%;\n}\n\n.skeleton-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n background: linear-gradient(90deg, #f1f5f9 25%, #e2e8f0 50%, #f1f5f9 75%);\n background-size: 200% 100%;\n animation: _ngcontent-%COMP%_shimmer 1.5s infinite;\n border-radius: 8px;\n}\n\n.skeleton-content[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.skeleton-line[_ngcontent-%COMP%] {\n height: 14px;\n background: linear-gradient(90deg, #f1f5f9 25%, #e2e8f0 50%, #f1f5f9 75%);\n background-size: 200% 100%;\n animation: _ngcontent-%COMP%_shimmer 1.5s infinite;\n border-radius: 4px;\n}\n\n.skeleton-line.wide[_ngcontent-%COMP%] {\n width: 70%;\n}\n\n.skeleton-line.narrow[_ngcontent-%COMP%] {\n width: 40%;\n}\n\n@keyframes _ngcontent-%COMP%_shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n}\n\n\n\n.test-runs-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.test-run-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n background: var(--suite-run-card);\n border: 1px solid var(--suite-run-border);\n border-radius: var(--suite-run-radius);\n cursor: pointer;\n transition: var(--suite-run-transition);\n}\n\n.test-run-item[_ngcontent-%COMP%]:hover {\n background: var(--suite-run-primary-light);\n border-color: #93c5fd;\n transform: translateX(4px);\n}\n\n.test-run-item[_ngcontent-%COMP%]:active {\n transform: translateX(2px);\n}\n\n.run-sequence[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--suite-run-neutral-light);\n border-radius: 50%;\n font-size: 13px;\n font-weight: 700;\n color: var(--suite-run-text-secondary);\n flex-shrink: 0;\n}\n\n.run-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 10px;\n color: white;\n font-size: 16px;\n flex-shrink: 0;\n box-shadow: var(--suite-run-shadow);\n}\n\n.run-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--suite-run-text);\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.run-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n font-size: 12px;\n color: var(--suite-run-text-secondary);\n flex-wrap: wrap;\n}\n\n.run-status[_ngcontent-%COMP%] {\n font-weight: 700;\n}\n\n.run-score[_ngcontent-%COMP%], \n.run-duration[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.run-score[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.run-duration[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.7;\n}\n\n.test-run-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n color: #cbd5e1;\n font-size: 14px;\n transition: var(--suite-run-transition);\n}\n\n.test-run-item[_ngcontent-%COMP%]:hover > i[_ngcontent-%COMP%] {\n color: var(--suite-run-primary);\n transform: translateX(4px);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n text-align: center;\n background: var(--suite-run-card);\n border-radius: var(--suite-run-radius);\n border: 2px dashed var(--suite-run-border);\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--suite-run-neutral-light);\n border-radius: 50%;\n margin-bottom: 20px;\n}\n\n.empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n color: #cbd5e1;\n}\n\n.empty-state[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--suite-run-text);\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n color: var(--suite-run-text-secondary);\n max-width: 300px;\n}\n\n\n\n\n\n.details-tab[_ngcontent-%COMP%] {\n max-width: 900px;\n margin: 0 auto;\n width: 100%;\n}\n\n.details-card[_ngcontent-%COMP%] {\n background: var(--suite-run-card);\n border-radius: var(--suite-run-radius);\n padding: 24px;\n box-shadow: var(--suite-run-shadow);\n}\n\n.details-card[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0 0 20px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--suite-run-text);\n padding-bottom: 12px;\n border-bottom: 1px solid var(--suite-run-border);\n}\n\n.details-card[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--suite-run-primary);\n}\n\n.details-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 20px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.detail-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--suite-run-text-secondary);\n}\n\n.detail-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--suite-run-text);\n word-wrap: break-word;\n}\n\n.detail-value.monospace[_ngcontent-%COMP%] {\n font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;\n font-size: 12px;\n background: var(--suite-run-neutral-light);\n padding: 6px 10px;\n border-radius: 6px;\n}\n\n.detail-value[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n color: var(--suite-run-primary);\n text-decoration: none;\n font-weight: 500;\n transition: var(--suite-run-transition);\n}\n\n.detail-value[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover {\n color: #2563eb;\n text-decoration: underline;\n}\n\n.status-inline[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.status-inline.status-completed[_ngcontent-%COMP%] {\n background: var(--suite-run-success-light);\n color: var(--suite-run-success);\n}\n\n.status-inline.status-failed[_ngcontent-%COMP%] {\n background: var(--suite-run-danger-light);\n color: var(--suite-run-danger);\n}\n\n.status-inline.status-running[_ngcontent-%COMP%] {\n background: var(--suite-run-primary-light);\n color: var(--suite-run-primary);\n}\n\n.status-inline.status-pending[_ngcontent-%COMP%] {\n background: var(--suite-run-info-light);\n color: var(--suite-run-info);\n}\n\n.status-inline.status-cancelled[_ngcontent-%COMP%] {\n background: var(--suite-run-neutral-light);\n color: var(--suite-run-neutral);\n}\n\n\n\n\n\n\n\n.shortcuts-toggle[_ngcontent-%COMP%] {\n position: fixed;\n bottom: 20px;\n right: 20px;\n width: 36px;\n height: 36px;\n border-radius: 50%;\n background: var(--suite-run-card);\n border: 1px solid var(--suite-run-border);\n box-shadow: var(--suite-run-shadow);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--suite-run-text-secondary);\n font-size: 14px;\n z-index: 99;\n transition: var(--suite-run-transition);\n opacity: 0.7;\n}\n\n.shortcuts-toggle[_ngcontent-%COMP%]:hover {\n opacity: 1;\n transform: scale(1.1);\n color: var(--suite-run-primary);\n border-color: var(--suite-run-primary);\n}\n\n.keyboard-shortcuts[_ngcontent-%COMP%] {\n position: fixed;\n bottom: 20px;\n right: 20px;\n background: var(--suite-run-card);\n border: 1px solid var(--suite-run-border);\n border-radius: var(--suite-run-radius);\n padding: 12px 16px;\n box-shadow: var(--suite-run-shadow-lg);\n font-size: 12px;\n z-index: 100;\n opacity: 0.9;\n transition: var(--suite-run-transition);\n}\n\n.keyboard-shortcuts[_ngcontent-%COMP%]:hover {\n opacity: 1;\n}\n\n.shortcuts-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n color: var(--suite-run-text);\n margin-bottom: 10px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--suite-run-border);\n}\n\n.shortcuts-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--suite-run-primary);\n}\n\n.shortcuts-close[_ngcontent-%COMP%] {\n margin-left: auto;\n background: none;\n border: none;\n cursor: pointer;\n color: var(--suite-run-text-muted);\n font-size: 12px;\n padding: 2px 4px;\n border-radius: 4px;\n transition: var(--suite-run-transition);\n}\n\n.shortcuts-close[_ngcontent-%COMP%]:hover {\n color: var(--suite-run-text);\n background: var(--suite-run-border);\n}\n\n.shortcut-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.shortcut-item[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 16px;\n}\n\n.shortcut-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:first-child {\n color: var(--suite-run-text-secondary);\n}\n\n.shortcut-keys[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\nkbd[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n background: linear-gradient(180deg, #f8fafc 0%, #e2e8f0 100%);\n border: 1px solid #cbd5e1;\n border-radius: 4px;\n font-family: inherit;\n font-size: 10px;\n font-weight: 600;\n color: var(--suite-run-text);\n box-shadow: 0 1px 0 #94a3b8;\n}\n\n\n\n\n\n@media (max-width: 1024px) {\n .suite-run-header[_ngcontent-%COMP%] {\n padding: 16px 20px;\n }\n\n .metrics-bar[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .result-hero-stats[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n\n .stat-divider[_ngcontent-%COMP%] {\n display: none;\n }\n\n .details-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .tab-shortcut[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n\n\n\n\n@media (max-width: 768px) {\n .suite-run-header[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .header-content[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-left[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .suite-run-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n font-size: 20px;\n }\n\n .suite-run-info[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n\n .header-actions[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: stretch;\n }\n\n .header-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n }\n\n .metrics-bar[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n gap: 8px;\n }\n\n .metric-card[_ngcontent-%COMP%] {\n padding: 12px;\n flex-direction: column;\n text-align: center;\n gap: 8px;\n }\n\n .metric-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n }\n\n .metric-value[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .results-summary[_ngcontent-%COMP%] {\n gap: 8px;\n padding-top: 16px;\n flex-wrap: nowrap;\n overflow-x: auto;\n padding-bottom: 8px;\n margin-bottom: -8px;\n }\n\n .result-item[_ngcontent-%COMP%] {\n padding: 10px 12px;\n min-width: 90px;\n }\n\n .result-icon[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n\n .result-count[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n\n .tabs[_ngcontent-%COMP%] {\n padding: 0 16px;\n }\n\n .tab[_ngcontent-%COMP%] {\n padding: 14px 16px;\n font-size: 13px;\n }\n\n .tab-content[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .result-hero[_ngcontent-%COMP%] {\n padding: 32px 20px;\n }\n\n .result-hero-icon[_ngcontent-%COMP%] {\n font-size: 56px;\n }\n\n .result-hero-text[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 24px;\n }\n\n .stat-value[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n\n .test-run-item[_ngcontent-%COMP%] {\n padding: 14px;\n }\n\n .run-sequence[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n font-size: 12px;\n }\n\n .run-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n font-size: 14px;\n }\n\n .run-name[_ngcontent-%COMP%] {\n font-size: 13px;\n }\n\n .run-meta[_ngcontent-%COMP%] {\n gap: 10px;\n font-size: 11px;\n }\n\n .empty-state[_ngcontent-%COMP%] {\n padding: 40px 16px;\n }\n\n .empty-icon[_ngcontent-%COMP%] {\n width: 64px;\n height: 64px;\n }\n\n .empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 28px;\n }\n\n .details-card[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .details-grid[_ngcontent-%COMP%] {\n gap: 16px;\n }\n\n .keyboard-shortcuts[_ngcontent-%COMP%], .shortcuts-toggle[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n\n\n\n\n@media (max-width: 480px) {\n .suite-run-header[_ngcontent-%COMP%] {\n padding: 12px;\n }\n\n .breadcrumb[_ngcontent-%COMP%] {\n font-size: 12px;\n margin-bottom: 12px;\n }\n\n .suite-run-icon[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n font-size: 18px;\n }\n\n .suite-run-info[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n\n .suite-run-meta[_ngcontent-%COMP%] {\n gap: 8px;\n }\n\n .status-badge[_ngcontent-%COMP%] {\n padding: 4px 10px;\n font-size: 11px;\n }\n\n .meta-tag[_ngcontent-%COMP%] {\n font-size: 11px;\n padding: 3px 8px;\n }\n\n .metrics-bar[_ngcontent-%COMP%] {\n grid-template-columns: 1fr 1fr;\n }\n\n .metric-card[_ngcontent-%COMP%] {\n padding: 10px;\n gap: 6px;\n }\n\n .metric-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n font-size: 14px;\n }\n\n .metric-value[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n\n .metric-label[_ngcontent-%COMP%] {\n font-size: 9px;\n }\n\n .result-item[_ngcontent-%COMP%] {\n padding: 8px 10px;\n min-width: 80px;\n gap: 8px;\n }\n\n .result-icon[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n\n .result-count[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .result-label[_ngcontent-%COMP%] {\n font-size: 9px;\n }\n\n .tabs[_ngcontent-%COMP%] {\n padding: 0 12px;\n }\n\n .tab[_ngcontent-%COMP%] {\n padding: 12px 14px;\n gap: 6px;\n }\n\n .tab[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n\n .tab-content[_ngcontent-%COMP%] {\n padding: 12px;\n }\n\n .result-hero[_ngcontent-%COMP%] {\n padding: 24px 16px;\n }\n\n .result-hero-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n }\n\n .result-hero-text[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n margin-bottom: 12px;\n }\n\n .stat-value[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n\n .stat-label[_ngcontent-%COMP%] {\n font-size: 10px;\n }\n\n .progress-section[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .progress-info[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n\n .test-run-item[_ngcontent-%COMP%] {\n padding: 12px;\n gap: 10px;\n }\n\n .run-sequence[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n font-size: 11px;\n }\n\n .run-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n font-size: 12px;\n border-radius: 8px;\n }\n\n .run-name[_ngcontent-%COMP%] {\n font-size: 12px;\n margin-bottom: 3px;\n }\n\n .run-meta[_ngcontent-%COMP%] {\n gap: 8px;\n font-size: 10px;\n }\n\n .empty-state[_ngcontent-%COMP%] {\n padding: 32px 12px;\n }\n\n .empty-state[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 13px;\n }\n\n .details-card[_ngcontent-%COMP%] {\n padding: 14px;\n }\n\n .details-card[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 14px;\n margin-bottom: 16px;\n }\n\n .detail-label[_ngcontent-%COMP%] {\n font-size: 10px;\n }\n\n .detail-value[_ngcontent-%COMP%] {\n font-size: 13px;\n }\n}\n\n\n\n\n\n@media (hover: none) and (pointer: coarse) {\n .test-run-item[_ngcontent-%COMP%] {\n min-height: 64px;\n }\n\n .test-run-item[_ngcontent-%COMP%]:hover {\n transform: none;\n background: var(--suite-run-card);\n border-color: var(--suite-run-border);\n }\n\n .test-run-item[_ngcontent-%COMP%]:active {\n background: var(--suite-run-primary-light);\n border-color: #93c5fd;\n }\n\n .tab[_ngcontent-%COMP%]:hover {\n background: transparent;\n color: var(--suite-run-text-secondary);\n }\n\n .tab[_ngcontent-%COMP%]:active {\n background: var(--suite-run-primary-light);\n color: var(--suite-run-primary);\n }\n\n .metric-card[_ngcontent-%COMP%]:hover {\n transform: none;\n box-shadow: none;\n }\n\n .result-item[_ngcontent-%COMP%]:hover {\n transform: none;\n box-shadow: none;\n }\n\n .keyboard-shortcuts[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n\n\n\n\n@media print {\n .suite-run-header[_ngcontent-%COMP%] {\n background: white;\n box-shadow: none;\n border-bottom: 2px solid #000;\n }\n\n .tabs-container[_ngcontent-%COMP%], \n .header-actions[_ngcontent-%COMP%], \n .keyboard-shortcuts[_ngcontent-%COMP%] {\n display: none;\n }\n\n .tab-content[_ngcontent-%COMP%] {\n padding: 20px 0;\n }\n\n .result-hero[_ngcontent-%COMP%], \n .test-run-item[_ngcontent-%COMP%], \n .details-card[_ngcontent-%COMP%] {\n box-shadow: none;\n border: 1px solid #ccc;\n }\n}\n\n\n\n\n\n@media (prefers-color-scheme: dark) {\n \n\n}\n\n\n\n\n\n.tags-bar[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding: 8px 14px;\n background: linear-gradient(135deg, rgba(59, 130, 246, 0.04) 0%, rgba(59, 130, 246, 0.08) 100%);\n border: 1px solid rgba(59, 130, 246, 0.15);\n border-radius: 8px;\n max-width: 600px;\n}\n\n.tags-bar-content[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n.tags-bar-label[_ngcontent-%COMP%] {\n color: var(--suite-run-text-secondary);\n font-size: 14px;\n}\n\n.tags-bar-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n opacity: 0.6;\n}\n\n.tags-bar-chips[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n flex: 1;\n}\n\n.tag-inline[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n background: var(--suite-run-primary-light);\n color: var(--suite-run-primary);\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n letter-spacing: 0.01em;\n}\n\n.tags-bar-empty[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--suite-run-text-secondary);\n opacity: 0.7;\n flex: 1;\n}\n\n.tags-bar-edit[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n background: transparent;\n border: 1px dashed var(--suite-run-border);\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n color: var(--suite-run-text-secondary);\n cursor: pointer;\n transition: var(--suite-run-transition);\n}\n\n.tags-bar-edit[_ngcontent-%COMP%]:hover {\n border-color: var(--suite-run-primary);\n color: var(--suite-run-primary);\n background: var(--suite-run-primary-light);\n}\n\n.tags-bar-edit[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n\n\n\n.tags-editor-panel[_ngcontent-%COMP%] {\n margin-top: 16px;\n background: var(--suite-run-card);\n border: 1px solid var(--suite-run-primary);\n border-radius: 10px;\n overflow: hidden;\n box-shadow: 0 4px 12px rgba(59, 130, 246, 0.1);\n max-width: 600px;\n}\n\n.tags-editor-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n background: var(--suite-run-primary-light);\n border-bottom: 1px solid rgba(59, 130, 246, 0.2);\n}\n\n.tags-editor-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--suite-run-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.tags-editor-body[_ngcontent-%COMP%] {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.tags-editor-chips[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n min-height: 32px;\n}\n\n.tag-editable[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 8px 5px 12px;\n background: var(--suite-run-card);\n border: 1px solid var(--suite-run-primary);\n color: var(--suite-run-primary);\n border-radius: 14px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.tag-remove-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n background: transparent;\n border: none;\n color: var(--suite-run-primary);\n cursor: pointer;\n border-radius: 50%;\n font-size: 9px;\n opacity: 0.6;\n transition: var(--suite-run-transition);\n}\n\n.tag-remove-btn[_ngcontent-%COMP%]:hover {\n opacity: 1;\n background: var(--suite-run-danger-light);\n color: var(--suite-run-danger);\n}\n\n.tags-empty-hint[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--suite-run-text-secondary);\n font-style: italic;\n padding: 4px 0;\n}\n\n.tags-editor-input[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.tag-text-input[_ngcontent-%COMP%] {\n flex: 1;\n padding: 10px 14px;\n border: 1px solid var(--suite-run-border);\n border-radius: 8px;\n font-size: 13px;\n background: var(--suite-run-neutral-light);\n}\n\n.tag-text-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--suite-run-primary);\n background: var(--suite-run-card);\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n.tag-text-input[_ngcontent-%COMP%]::placeholder {\n color: var(--suite-run-text-secondary);\n opacity: 0.6;\n}\n\n.tags-editor-footer[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-start;\n gap: 8px;\n padding: 12px 16px;\n background: var(--suite-run-neutral-light);\n border-top: 1px solid var(--suite-run-border);\n}\n\n\n\n\n\n.runs-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n padding: 12px 16px;\n background: var(--suite-run-card);\n border: 1px solid var(--suite-run-border);\n border-radius: var(--suite-run-radius);\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.run-filters[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.filter-btn[_ngcontent-%COMP%] {\n padding: 6px 14px;\n border: 1px solid var(--suite-run-border);\n background: var(--suite-run-card);\n border-radius: 20px;\n font-size: 12px;\n font-weight: 500;\n color: var(--suite-run-text-secondary);\n cursor: pointer;\n transition: var(--suite-run-transition);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.filter-btn[_ngcontent-%COMP%]:hover {\n border-color: var(--suite-run-primary);\n color: var(--suite-run-primary);\n}\n\n.filter-btn.active[_ngcontent-%COMP%] {\n background: var(--suite-run-primary);\n border-color: var(--suite-run-primary);\n color: white;\n}\n\n.filter-btn.passed[_ngcontent-%COMP%]:hover, \n.filter-btn.passed.active[_ngcontent-%COMP%] {\n background: var(--suite-run-success);\n border-color: var(--suite-run-success);\n color: white;\n}\n\n.filter-btn.failed[_ngcontent-%COMP%]:hover, \n.filter-btn.failed.active[_ngcontent-%COMP%] {\n background: var(--suite-run-danger);\n border-color: var(--suite-run-danger);\n color: white;\n}\n\n.filter-btn.error[_ngcontent-%COMP%]:hover, \n.filter-btn.error.active[_ngcontent-%COMP%] {\n background: var(--suite-run-warning);\n border-color: var(--suite-run-warning);\n color: white;\n}\n\n.runs-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n\n\n\n\n.test-run-card[_ngcontent-%COMP%] {\n background: var(--suite-run-card);\n border: 1px solid var(--suite-run-border);\n border-radius: var(--suite-run-radius);\n overflow: hidden;\n transition: var(--suite-run-transition);\n margin-bottom: 10px;\n}\n\n.test-run-card[_ngcontent-%COMP%]:hover {\n box-shadow: var(--suite-run-shadow);\n}\n\n.test-run-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n cursor: pointer;\n transition: var(--suite-run-transition);\n}\n\n.test-run-item[_ngcontent-%COMP%]:hover {\n background: var(--suite-run-primary-light);\n}\n\n.run-header-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 4px;\n}\n\n.run-feedback-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n background: var(--suite-run-info-light);\n color: var(--suite-run-info);\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.run-feedback-indicator[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.run-tags[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n margin-top: 6px;\n}\n\n.tag-mini[_ngcontent-%COMP%] {\n display: inline-flex;\n padding: 2px 8px;\n background: var(--suite-run-neutral-light);\n color: var(--suite-run-text-secondary);\n border-radius: 10px;\n font-size: 10px;\n font-weight: 500;\n}\n\n.tag-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 3px 10px;\n background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);\n border: 1px solid #bfdbfe;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n color: #1d4ed8;\n}\n\n.run-expand[_ngcontent-%COMP%] {\n color: var(--suite-run-text-secondary);\n transition: var(--suite-run-transition);\n}\n\n.test-run-item[_ngcontent-%COMP%]:hover .run-expand[_ngcontent-%COMP%] {\n color: var(--suite-run-primary);\n}\n\n.run-cost[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.run-cost[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.7;\n}\n\n\n\n\n\n.inline-feedback[_ngcontent-%COMP%] {\n padding: 0 16px 16px;\n animation: _ngcontent-%COMP%_slideDown 0.2s ease-out;\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.feedback-divider[_ngcontent-%COMP%] {\n height: 1px;\n background: var(--suite-run-border);\n margin-bottom: 16px;\n}\n\n.feedback-section[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.feedback-label[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--suite-run-text);\n}\n\n.inline-rating[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.rating-numbers[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.rating-btn[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border: 2px solid var(--suite-run-border);\n border-radius: 8px;\n background: var(--suite-run-neutral-light);\n color: var(--suite-run-text-secondary);\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n transition: var(--suite-run-transition);\n}\n\n.rating-btn[_ngcontent-%COMP%]:hover, \n.rating-btn.hover[_ngcontent-%COMP%] {\n transform: scale(1.1);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n}\n\n.rating-btn.low[_ngcontent-%COMP%]:hover, \n.rating-btn.low.hover[_ngcontent-%COMP%] {\n border-color: var(--suite-run-danger);\n background: var(--suite-run-danger-light);\n color: var(--suite-run-danger);\n}\n\n.rating-btn.mid[_ngcontent-%COMP%]:hover, \n.rating-btn.mid.hover[_ngcontent-%COMP%] {\n border-color: var(--suite-run-warning);\n background: var(--suite-run-warning-light);\n color: var(--suite-run-warning);\n}\n\n.rating-btn.high[_ngcontent-%COMP%]:hover, \n.rating-btn.high.hover[_ngcontent-%COMP%] {\n border-color: var(--suite-run-success);\n background: var(--suite-run-success-light);\n color: var(--suite-run-success);\n}\n\n.rating-btn.selected[_ngcontent-%COMP%] {\n transform: scale(1.1);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n}\n\n.rating-btn.selected.low[_ngcontent-%COMP%] {\n border-color: var(--suite-run-danger);\n background: var(--suite-run-danger);\n color: white;\n}\n\n.rating-btn.selected.mid[_ngcontent-%COMP%] {\n border-color: var(--suite-run-warning);\n background: var(--suite-run-warning);\n color: white;\n}\n\n.rating-btn.selected.high[_ngcontent-%COMP%] {\n border-color: var(--suite-run-success);\n background: var(--suite-run-success);\n color: white;\n}\n\n.rating-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 14px;\n background: var(--suite-run-neutral-light);\n border-radius: 8px;\n}\n\n.rating-value[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 700;\n color: var(--suite-run-text);\n}\n\n.rating-label-text[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--suite-run-text-secondary);\n}\n\n.correctness-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.correctness-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--suite-run-text);\n}\n\n.correctness-options[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n}\n\n.radio-opt[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n cursor: pointer;\n font-size: 13px;\n color: var(--suite-run-text-secondary);\n}\n\n.radio-opt[_ngcontent-%COMP%] input[type=\"radio\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n\n.comments-row[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.feedback-textarea[_ngcontent-%COMP%] {\n width: 100%;\n padding: 12px;\n border: 1px solid var(--suite-run-border);\n border-radius: 8px;\n font-size: 14px;\n font-family: inherit;\n resize: vertical;\n min-height: 80px;\n}\n\n.feedback-textarea[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--suite-run-primary);\n box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1);\n}\n\n.feedback-actions[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n gap: 12px;\n padding-top: 8px;\n}\n\n\n\n\n\n@media (max-width: 768px) {\n .tags-bar[_ngcontent-%COMP%] {\n padding: 8px 12px;\n }\n\n .tags-bar-content[_ngcontent-%COMP%] {\n gap: 8px;\n }\n\n .tag-inline[_ngcontent-%COMP%] {\n padding: 3px 8px;\n font-size: 10px;\n }\n\n .tags-editor-panel[_ngcontent-%COMP%] {\n margin-top: 12px;\n }\n\n .tags-editor-body[_ngcontent-%COMP%] {\n padding: 12px;\n }\n\n .tags-editor-footer[_ngcontent-%COMP%] {\n padding: 10px 12px;\n }\n\n .runs-toolbar[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n }\n\n .run-filters[_ngcontent-%COMP%] {\n justify-content: center;\n }\n\n .runs-actions[_ngcontent-%COMP%] {\n justify-content: center;\n }\n\n .rating-numbers[_ngcontent-%COMP%] {\n justify-content: center;\n }\n\n .rating-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n font-size: 12px;\n }\n\n .correctness-row[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 8px;\n }\n\n .feedback-actions[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .feedback-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n\n\n\n\n\n@keyframes _ngcontent-%COMP%_pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n}\n\n.result-hero.running[_ngcontent-%COMP%] .result-hero-icon[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_pulse 2s ease-in-out infinite;\n}\n\n\n\n.overview-tab[_ngcontent-%COMP%], \n.runs-tab[_ngcontent-%COMP%], \n.details-tab[_ngcontent-%COMP%], \n.analytics-tab[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_fadeIn 0.3s ease;\n}\n\n\n\n\n\n.analytics-tab[_ngcontent-%COMP%] {\n max-width: 1200px;\n margin: 0 auto;\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.analytics-section[_ngcontent-%COMP%] {\n background: var(--suite-run-card);\n border-radius: var(--suite-run-radius);\n padding: 24px;\n box-shadow: var(--suite-run-shadow);\n}\n\n.analytics-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0 0 20px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--suite-run-text);\n padding-bottom: 12px;\n border-bottom: 1px solid var(--suite-run-border);\n}\n\n.analytics-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--suite-run-primary);\n}\n\n.analytics-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 16px;\n margin-bottom: 20px;\n padding-bottom: 12px;\n border-bottom: 1px solid var(--suite-run-border);\n}\n\n.analytics-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n padding: 0;\n border: none;\n}\n\n.analytics-legend[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.legend-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.legend-item.passed[_ngcontent-%COMP%] {\n color: var(--suite-run-success);\n}\n\n.legend-item.failed[_ngcontent-%COMP%] {\n color: var(--suite-run-danger);\n}\n\n.legend-item.error[_ngcontent-%COMP%] {\n color: var(--suite-run-warning);\n}\n\n.legend-item.skipped[_ngcontent-%COMP%] {\n color: var(--suite-run-neutral);\n}\n\n\n\n.performance-matrix[_ngcontent-%COMP%] {\n border: 1px solid var(--suite-run-border);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.matrix-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 2fr 120px 150px 100px 100px;\n border-bottom: 1px solid var(--suite-run-border);\n transition: var(--suite-run-transition);\n cursor: pointer;\n}\n\n.matrix-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.matrix-row[_ngcontent-%COMP%]:hover:not(.matrix-header-row) {\n background: var(--suite-run-primary-light);\n}\n\n.matrix-row.passed[_ngcontent-%COMP%] {\n border-left: 4px solid var(--suite-run-success);\n}\n\n.matrix-row.failed[_ngcontent-%COMP%] {\n border-left: 4px solid var(--suite-run-danger);\n}\n\n.matrix-row.error[_ngcontent-%COMP%] {\n border-left: 4px solid var(--suite-run-warning);\n}\n\n.matrix-row.skipped[_ngcontent-%COMP%] {\n border-left: 4px solid var(--suite-run-neutral);\n}\n\n.matrix-header-row[_ngcontent-%COMP%] {\n background: var(--suite-run-neutral-light);\n font-weight: 600;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--suite-run-text-secondary);\n cursor: default;\n}\n\n.matrix-cell[_ngcontent-%COMP%] {\n padding: 12px 16px;\n display: flex;\n align-items: center;\n}\n\n.test-name-cell[_ngcontent-%COMP%] {\n gap: 12px;\n}\n\n.test-sequence[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--suite-run-neutral-light);\n border-radius: 50%;\n font-size: 11px;\n font-weight: 600;\n color: var(--suite-run-text-secondary);\n flex-shrink: 0;\n}\n\n.test-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--suite-run-text);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.status-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.status-indicator.status-passed[_ngcontent-%COMP%] {\n color: var(--suite-run-success);\n}\n\n.status-indicator.status-failed[_ngcontent-%COMP%] {\n color: var(--suite-run-danger);\n}\n\n.status-indicator.status-error[_ngcontent-%COMP%] {\n color: var(--suite-run-warning);\n}\n\n.status-indicator.status-skipped[_ngcontent-%COMP%] {\n color: var(--suite-run-neutral);\n}\n\n.status-indicator.status-pending[_ngcontent-%COMP%] {\n color: var(--suite-run-info);\n}\n\n.status-indicator.status-running[_ngcontent-%COMP%] {\n color: var(--suite-run-primary);\n}\n\n.score-bar[_ngcontent-%COMP%] {\n position: relative;\n width: 100%;\n height: 20px;\n background: var(--suite-run-neutral-light);\n border-radius: 10px;\n overflow: hidden;\n}\n\n.score-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 10px;\n transition: width 0.3s ease;\n}\n\n.score-fill.high[_ngcontent-%COMP%] {\n background: linear-gradient(90deg, var(--suite-run-success) 0%, #34d399 100%);\n}\n\n.score-fill.medium[_ngcontent-%COMP%] {\n background: linear-gradient(90deg, var(--suite-run-warning) 0%, #fbbf24 100%);\n}\n\n.score-fill.low[_ngcontent-%COMP%] {\n background: linear-gradient(90deg, var(--suite-run-danger) 0%, #f87171 100%);\n}\n\n.score-text[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 11px;\n font-weight: 600;\n color: var(--suite-run-text);\n}\n\n.na-value[_ngcontent-%COMP%] {\n color: var(--suite-run-text-secondary);\n opacity: 0.6;\n}\n\n\n\n.stats-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 16px;\n}\n\n.stat-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 20px;\n background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);\n border: 1px solid var(--suite-run-border);\n border-radius: 12px;\n transition: var(--suite-run-transition);\n}\n\n.stat-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: var(--suite-run-shadow);\n}\n\n.stat-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-size: 20px;\n}\n\n.stat-icon.passed[_ngcontent-%COMP%] {\n background: var(--suite-run-success-light);\n color: var(--suite-run-success);\n}\n\n.stat-icon.failed[_ngcontent-%COMP%] {\n background: var(--suite-run-danger-light);\n color: var(--suite-run-danger);\n}\n\n.stat-icon.score[_ngcontent-%COMP%] {\n background: var(--suite-run-warning-light);\n color: var(--suite-run-warning);\n}\n\n.stat-icon.duration[_ngcontent-%COMP%] {\n background: var(--suite-run-primary-light);\n color: var(--suite-run-primary);\n}\n\n.stat-icon.cost[_ngcontent-%COMP%] {\n background: var(--suite-run-info-light);\n color: var(--suite-run-info);\n}\n\n.stat-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.stat-card[_ngcontent-%COMP%] .stat-value[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n color: var(--suite-run-text);\n}\n\n.stat-card[_ngcontent-%COMP%] .stat-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: var(--suite-run-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat-percent[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--suite-run-text-secondary);\n}\n\n\n\n@media (max-width: 768px) {\n .analytics-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .matrix-row[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n gap: 8px;\n padding: 12px;\n }\n\n .matrix-header-row[_ngcontent-%COMP%] {\n display: none;\n }\n\n .matrix-cell[_ngcontent-%COMP%] {\n padding: 4px 0;\n }\n\n .test-name-cell[_ngcontent-%COMP%]::before, \n .status-cell[_ngcontent-%COMP%]::before, \n .score-cell[_ngcontent-%COMP%]::before, \n .duration-cell[_ngcontent-%COMP%]::before, \n .cost-cell[_ngcontent-%COMP%]::before {\n font-size: 10px;\n font-weight: 600;\n color: var(--suite-run-text-secondary);\n text-transform: uppercase;\n margin-right: 8px;\n min-width: 80px;\n }\n\n .status-cell[_ngcontent-%COMP%]::before { content: 'Status:'; }\n .score-cell[_ngcontent-%COMP%]::before { content: 'Score:'; }\n .duration-cell[_ngcontent-%COMP%]::before { content: 'Duration:'; }\n .cost-cell[_ngcontent-%COMP%]::before { content: 'Cost:'; }\n\n .stats-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr 1fr;\n }\n\n .stat-card[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .stat-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n font-size: 16px;\n }\n\n .stat-card[_ngcontent-%COMP%] .stat-value[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n\n\n\n.tab[_ngcontent-%COMP%]:focus-visible, \n.test-run-item[_ngcontent-%COMP%]:focus-visible, \nbutton[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--suite-run-primary);\n outline-offset: 2px;\n}\n\n\n\n\n\n.analytics-loading[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n padding: 60px 20px;\n color: var(--suite-run-text-secondary);\n}\n\n.analytics-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n color: var(--suite-run-primary);\n}\n\n\n\n\n\n.results-table-wrapper[_ngcontent-%COMP%] {\n border: 1px solid var(--suite-run-border);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.results-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.results-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] {\n background: var(--suite-run-neutral-light);\n}\n\n.results-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 12px 16px;\n text-align: left;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--suite-run-text-secondary);\n border-bottom: 1px solid var(--suite-run-border);\n}\n\n.results-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-bottom: 1px solid #f1f5f9;\n vertical-align: middle;\n}\n\n.results-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%] {\n border-bottom: none;\n}\n\n\n\n.seq-col[_ngcontent-%COMP%] {\n width: 40px;\n min-width: 40px;\n text-align: center;\n white-space: nowrap;\n}\n\n.name-col[_ngcontent-%COMP%] {\n \n\n width: auto;\n max-width: 50%;\n}\n\n.status-col[_ngcontent-%COMP%] {\n width: 1%; \n\n white-space: nowrap;\n}\n\n.score-col[_ngcontent-%COMP%] {\n width: 1%; \n\n min-width: 120px; \n\n white-space: nowrap;\n}\n\n.duration-col[_ngcontent-%COMP%] {\n width: 1%; \n\n white-space: nowrap;\n text-align: right;\n}\n\n.cost-col[_ngcontent-%COMP%] {\n width: 1%; \n\n white-space: nowrap;\n text-align: right;\n}\n\n\n\n.result-row[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: var(--suite-run-transition);\n}\n\n.result-row[_ngcontent-%COMP%]:hover {\n background: var(--suite-run-primary-light);\n}\n\n.result-row.row-passed[_ngcontent-%COMP%] {\n border-left: 4px solid var(--suite-run-success);\n}\n\n.result-row.row-failed[_ngcontent-%COMP%] {\n border-left: 4px solid var(--suite-run-danger);\n}\n\n.result-row.row-error[_ngcontent-%COMP%] {\n border-left: 4px solid var(--suite-run-warning);\n}\n\n.result-row.row-skipped[_ngcontent-%COMP%] {\n border-left: 4px solid var(--suite-run-neutral);\n}\n\n\n\n.test-name-wrapper[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.test-name-wrapper[_ngcontent-%COMP%] .test-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--suite-run-text);\n}\n\n.test-tags[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n\n\n.score-display[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.score-bar-mini[_ngcontent-%COMP%] {\n flex: 1;\n height: 6px;\n background: var(--suite-run-neutral-light);\n border-radius: 3px;\n overflow: hidden;\n min-width: 60px;\n}\n\n.score-bar-mini[_ngcontent-%COMP%] .score-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 3px;\n transition: width 0.3s ease;\n}\n\n.score-bar-mini[_ngcontent-%COMP%] .score-fill.high[_ngcontent-%COMP%] {\n background: var(--suite-run-success);\n}\n\n.score-bar-mini[_ngcontent-%COMP%] .score-fill.medium[_ngcontent-%COMP%] {\n background: var(--suite-run-warning);\n}\n\n.score-bar-mini[_ngcontent-%COMP%] .score-fill.low[_ngcontent-%COMP%] {\n background: var(--suite-run-danger);\n}\n\n.score-display[_ngcontent-%COMP%] .score-text[_ngcontent-%COMP%] {\n position: static;\n transform: none;\n font-size: 12px;\n font-weight: 600;\n color: var(--suite-run-text);\n min-width: 35px;\n text-align: right;\n}\n\n\n\n.results-table[_ngcontent-%COMP%] .status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.results-table[_ngcontent-%COMP%] .status-badge.status-passed[_ngcontent-%COMP%] {\n background: var(--suite-run-success-light);\n color: var(--suite-run-success);\n}\n\n.results-table[_ngcontent-%COMP%] .status-badge.status-failed[_ngcontent-%COMP%] {\n background: var(--suite-run-danger-light);\n color: var(--suite-run-danger);\n}\n\n.results-table[_ngcontent-%COMP%] .status-badge.status-error[_ngcontent-%COMP%] {\n background: var(--suite-run-warning-light);\n color: var(--suite-run-warning);\n}\n\n.results-table[_ngcontent-%COMP%] .status-badge.status-skipped[_ngcontent-%COMP%] {\n background: var(--suite-run-neutral-light);\n color: var(--suite-run-neutral);\n}\n\n.results-table[_ngcontent-%COMP%] .status-badge.status-pending[_ngcontent-%COMP%] {\n background: var(--suite-run-info-light);\n color: var(--suite-run-info);\n}\n\n.results-table[_ngcontent-%COMP%] .status-badge.status-running[_ngcontent-%COMP%] {\n background: var(--suite-run-primary-light);\n color: var(--suite-run-primary);\n}\n\n\n\n@media (max-width: 768px) {\n .results-table-wrapper[_ngcontent-%COMP%] {\n overflow-x: auto;\n }\n\n .results-table[_ngcontent-%COMP%] {\n min-width: 600px;\n }\n\n .results-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n .results-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 10px 12px;\n }\n\n .name-col[_ngcontent-%COMP%] {\n min-width: 150px;\n }\n}\n\n\n\n\n\n@media (prefers-contrast: high) {\n .status-badge[_ngcontent-%COMP%], \n .status-inline[_ngcontent-%COMP%] {\n border: 2px solid currentColor;\n }\n\n .test-run-item[_ngcontent-%COMP%] {\n border-width: 2px;\n }\n\n .tab.active[_ngcontent-%COMP%] {\n border-bottom-width: 4px;\n }\n}\n\n\n\n\n\n.evaluation-summary[_ngcontent-%COMP%] {\n margin-top: 20px;\n}\n\n.eval-summary-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n gap: 16px;\n}\n\n.eval-summary-card[_ngcontent-%COMP%] {\n background: var(--suite-run-card);\n border: 1px solid var(--suite-run-border);\n border-radius: var(--suite-run-radius);\n overflow: hidden;\n transition: var(--suite-run-transition);\n}\n\n.eval-summary-card[_ngcontent-%COMP%]:hover {\n box-shadow: var(--suite-run-shadow);\n}\n\n.eval-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n background: var(--suite-run-neutral-light);\n border-bottom: 1px solid var(--suite-run-border);\n font-size: 13px;\n font-weight: 600;\n color: var(--suite-run-text);\n}\n\n.eval-card-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--suite-run-primary);\n}\n\n.eval-card-body[_ngcontent-%COMP%] {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.eval-stat-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 12px;\n}\n\n.eval-stat-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--suite-run-text-secondary);\n}\n\n.eval-stat-value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--suite-run-text);\n}\n\n.eval-stat-value.correct[_ngcontent-%COMP%] {\n color: var(--suite-run-success);\n}\n\n.eval-stat-value.incorrect[_ngcontent-%COMP%] {\n color: var(--suite-run-danger);\n font-weight: 500;\n font-size: 12px;\n}\n\n.eval-stat-value.error[_ngcontent-%COMP%] {\n color: var(--suite-run-danger);\n}\n\n.eval-stat-value.timeout[_ngcontent-%COMP%] {\n color: var(--suite-run-warning);\n}\n\n.eval-card-footer[_ngcontent-%COMP%] {\n padding: 10px 16px;\n background: var(--suite-run-warning-light);\n border-top: 1px solid rgba(245, 158, 11, 0.2);\n}\n\n.pending-badge[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--suite-run-warning);\n}\n\n.pending-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n\n\n\n\n.needs-review-section[_ngcontent-%COMP%] {\n background: var(--suite-run-card);\n border: 1px solid var(--suite-run-border);\n border-radius: var(--suite-run-radius);\n overflow: hidden;\n}\n\n.needs-review-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 14px 20px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-bottom: 1px solid rgba(245, 158, 11, 0.3);\n}\n\n.needs-review-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #92400e;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.needs-review-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n}\n\n.review-count[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: #92400e;\n background: rgba(255, 255, 255, 0.6);\n padding: 2px 10px;\n border-radius: 12px;\n}\n\n.needs-review-list[_ngcontent-%COMP%] {\n padding: 8px;\n}\n\n.review-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n border-radius: 8px;\n cursor: pointer;\n transition: var(--suite-run-transition);\n}\n\n.review-item[_ngcontent-%COMP%]:hover {\n background: var(--suite-run-primary-light);\n}\n\n.review-item-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n font-size: 14px;\n flex-shrink: 0;\n}\n\n.review-item.high-priority[_ngcontent-%COMP%] .review-item-icon[_ngcontent-%COMP%] {\n background: var(--suite-run-danger-light);\n color: var(--suite-run-danger);\n}\n\n.review-item.medium-priority[_ngcontent-%COMP%] .review-item-icon[_ngcontent-%COMP%] {\n background: var(--suite-run-warning-light);\n color: var(--suite-run-warning);\n}\n\n.review-item[_ngcontent-%COMP%]:not(.high-priority):not(.medium-priority) .review-item-icon[_ngcontent-%COMP%] {\n background: var(--suite-run-neutral-light);\n color: var(--suite-run-neutral);\n}\n\n.review-item-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.review-item-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--suite-run-text);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.review-item-reason[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--suite-run-text-secondary);\n}\n\n.review-item-action[_ngcontent-%COMP%] {\n color: var(--suite-run-text-secondary);\n font-size: 12px;\n}\n\n.review-item[_ngcontent-%COMP%]:hover .review-item-action[_ngcontent-%COMP%] {\n color: var(--suite-run-primary);\n}\n\n.review-more[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n padding: 8px;\n border-top: 1px solid var(--suite-run-border);\n}\n\n\n\n@media (max-width: 768px) {\n .eval-summary-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .eval-card-header[_ngcontent-%COMP%] {\n padding: 10px 14px;\n font-size: 12px;\n }\n\n .eval-card-body[_ngcontent-%COMP%] {\n padding: 12px 14px;\n }\n\n .needs-review-header[_ngcontent-%COMP%] {\n padding: 12px 16px;\n }\n\n .needs-review-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 13px;\n }\n\n .review-item[_ngcontent-%COMP%] {\n padding: 10px 12px;\n }\n\n .review-item-icon[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n font-size: 12px;\n }\n}\n\n\n\n\n\n.feedback-col[_ngcontent-%COMP%] {\n width: 1%; \n\n white-space: nowrap;\n text-align: center;\n}\n\n.feedback-display[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n}\n\n.feedback-rating[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n padding: 2px 6px;\n border-radius: 4px;\n background: var(--suite-run-neutral-light);\n}\n\n.feedback-rating.low[_ngcontent-%COMP%] {\n background: var(--suite-run-danger-light);\n color: var(--suite-run-danger);\n}\n\n.feedback-rating.mid[_ngcontent-%COMP%] {\n background: var(--suite-run-warning-light);\n color: var(--suite-run-warning);\n}\n\n.feedback-rating.high[_ngcontent-%COMP%] {\n background: var(--suite-run-success-light);\n color: var(--suite-run-success);\n}\n\n.feedback-correctness[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.feedback-correctness[_ngcontent-%COMP%] i.correct[_ngcontent-%COMP%] {\n color: var(--suite-run-success);\n}\n\n.feedback-correctness[_ngcontent-%COMP%] i.incorrect[_ngcontent-%COMP%] {\n color: var(--suite-run-danger);\n}\n\n.na-value.needs-review[_ngcontent-%COMP%] {\n color: var(--suite-run-warning);\n opacity: 0.7;\n}\n\n.na-value.needs-review[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}"], changeDetection: 0 }); }
|
|
2318
2318
|
};
|
|
2319
|
-
|
|
2319
|
+
MJTestSuiteRunFormComponentExtended = __decorate([
|
|
2320
2320
|
RegisterClass(BaseFormComponent, 'MJ: Test Suite Runs')
|
|
2321
|
-
],
|
|
2322
|
-
export {
|
|
2323
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(
|
|
2321
|
+
], MJTestSuiteRunFormComponentExtended);
|
|
2322
|
+
export { MJTestSuiteRunFormComponentExtended };
|
|
2323
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJTestSuiteRunFormComponentExtended, [{
|
|
2324
2324
|
type: Component,
|
|
2325
2325
|
args: [{ standalone: false, selector: 'mj-test-suite-run-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"test-suite-run-form\" kendoDialogContainer>\n <!-- Header Section -->\n <div class=\"suite-run-header\">\n <!-- Breadcrumb Navigation -->\n <nav class=\"breadcrumb\" aria-label=\"Breadcrumb\">\n <ol>\n <li>\n <a href=\"javascript:void(0)\" (click)=\"navigateToTestingDashboard()\">\n <i class=\"fas fa-vial\"></i>\n <span class=\"breadcrumb-text\">Testing</span>\n </a>\n </li>\n @if (testSuite) {\n <li>\n <i class=\"fas fa-chevron-right separator\"></i>\n <a href=\"javascript:void(0)\" (click)=\"openTestSuite()\">\n <i class=\"fas fa-layer-group\"></i>\n <span class=\"breadcrumb-text\">{{ testSuite.Name }}</span>\n </a>\n </li>\n }\n <li class=\"current\">\n <i class=\"fas fa-chevron-right separator\"></i>\n <span>Run #{{ record.ID.substring(0, 8) }}</span>\n </li>\n </ol>\n </nav>\n\n <!-- Header Content -->\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"suite-run-icon\" [style.background-color]=\"getStatusColor()\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon()\"></i>\n </div>\n <div class=\"suite-run-info\">\n <h1>Suite Run</h1>\n <div class=\"suite-run-meta\">\n <span class=\"status-badge\" [ngClass]=\"getStatusClass()\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon()\"></i>\n {{ record.Status }}\n </span>\n @if (record.Environment) {\n <span class=\"meta-tag environment\">\n <i class=\"fas fa-server\"></i>\n {{ record.Environment }}\n </span>\n }\n @if (record.TriggerType) {\n <span class=\"meta-tag trigger\">\n <i class=\"fas fa-bolt\"></i>\n {{ record.TriggerType }}\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-actions\">\n <!-- Evaluation Mode Toggle -->\n <app-evaluation-mode-toggle></app-evaluation-mode-toggle>\n @if (record.SuiteID) {\n <button kendoButton (click)=\"reRunSuite()\" themeColor=\"primary\">\n <i class=\"fas fa-play\"></i> Re-run Suite\n </button>\n }\n <button kendoButton (click)=\"refresh()\" [disabled]=\"isRefreshing\">\n <i class=\"fas\" [ngClass]=\"isRefreshing ? 'fa-sync fa-spin' : 'fa-sync'\"></i>\n {{ isRefreshing ? 'Refreshing...' : 'Refresh' }}\n </button>\n </div>\n </div>\n\n <!-- Metrics Bar -->\n <div class=\"metrics-bar\">\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-clock\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ calculateDuration() }}</div>\n <div class=\"metric-label\">Duration</div>\n </div>\n </div>\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-percentage\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ getPassRate().toFixed(1) }}%</div>\n <div class=\"metric-label\">Pass Rate</div>\n </div>\n </div>\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-dollar-sign\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ formatCost(record.TotalCostUSD) }}</div>\n <div class=\"metric-label\">Total Cost</div>\n </div>\n </div>\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-calendar\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ getRelativeTime(record.StartedAt) }}</div>\n <div class=\"metric-label\">Started</div>\n </div>\n </div>\n </div>\n\n <!-- Results Summary -->\n <div class=\"results-summary\">\n <div class=\"result-item passed\">\n <div class=\"result-icon\">\n <i class=\"fas fa-check-circle\"></i>\n </div>\n <div class=\"result-content\">\n <span class=\"result-count\">{{ record.PassedTests || 0 }}</span>\n <span class=\"result-label\">Passed</span>\n </div>\n </div>\n <div class=\"result-item failed\">\n <div class=\"result-icon\">\n <i class=\"fas fa-times-circle\"></i>\n </div>\n <div class=\"result-content\">\n <span class=\"result-count\">{{ record.FailedTests || 0 }}</span>\n <span class=\"result-label\">Failed</span>\n </div>\n </div>\n <div class=\"result-item error\">\n <div class=\"result-icon\">\n <i class=\"fas fa-exclamation-circle\"></i>\n </div>\n <div class=\"result-content\">\n <span class=\"result-count\">{{ record.ErrorTests || 0 }}</span>\n <span class=\"result-label\">Errors</span>\n </div>\n </div>\n <div class=\"result-item skipped\">\n <div class=\"result-icon\">\n <i class=\"fas fa-forward\"></i>\n </div>\n <div class=\"result-content\">\n <span class=\"result-count\">{{ record.SkippedTests || 0 }}</span>\n <span class=\"result-label\">Skipped</span>\n </div>\n </div>\n <div class=\"result-item total\">\n <div class=\"result-icon\">\n <i class=\"fas fa-list\"></i>\n </div>\n <div class=\"result-content\">\n <span class=\"result-count\">{{ record.TotalTests || 0 }}</span>\n <span class=\"result-label\">Total</span>\n </div>\n </div>\n </div>\n\n <!-- Tags Section - Sleek inline design -->\n @if (!editingTags) {\n <div class=\"tags-bar\">\n <div class=\"tags-bar-content\">\n <span class=\"tags-bar-label\"><i class=\"fas fa-tags\"></i></span>\n @if (tags.length > 0) {\n <div class=\"tags-bar-chips\">\n @for (tag of tags; track tag) {\n <span class=\"tag-inline\">{{ tag }}</span>\n }\n </div>\n }\n @if (tags.length === 0) {\n <span class=\"tags-bar-empty\">No tags</span>\n }\n <button class=\"tags-bar-edit\" (click)=\"startEditingTags()\" title=\"Edit tags\">\n <i class=\"fas fa-plus\"></i> Add\n </button>\n </div>\n </div>\n }\n\n <!-- Tags Editor - Expanded when editing -->\n @if (editingTags) {\n <div class=\"tags-editor-panel\">\n <div class=\"tags-editor-header\">\n <span class=\"tags-editor-title\"><i class=\"fas fa-tags\"></i> Edit Tags</span>\n </div>\n <div class=\"tags-editor-body\">\n <div class=\"tags-editor-chips\">\n @for (tag of tags; track tag) {\n <span class=\"tag-editable\">\n {{ tag }}\n <button class=\"tag-remove-btn\" (click)=\"removeTag(tag)\" title=\"Remove tag\">\n <i class=\"fas fa-times\"></i>\n </button>\n </span>\n }\n @if (tags.length === 0) {\n <span class=\"tags-empty-hint\">No tags yet</span>\n }\n </div>\n <div class=\"tags-editor-input\">\n <input type=\"text\"\n [(ngModel)]=\"newTag\"\n placeholder=\"Type a tag and press Enter...\"\n (keyup.enter)=\"addTag()\"\n class=\"tag-text-input\" />\n <button kendoButton (click)=\"addTag()\" [disabled]=\"!newTag.trim()\" fillMode=\"flat\">\n <i class=\"fas fa-plus\"></i>\n </button>\n </div>\n </div>\n <div class=\"tags-editor-footer\">\n <button kendoButton (click)=\"saveTags()\" themeColor=\"primary\" [disabled]=\"savingTags\">\n @if (savingTags) {\n <i class=\"fas fa-spinner fa-spin\"></i>\n }\n {{ savingTags ? 'Saving...' : 'Save' }}\n </button>\n <button kendoButton (click)=\"cancelEditingTags()\" fillMode=\"flat\">Cancel</button>\n </div>\n </div>\n }\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs-container\">\n <div class=\"tabs\" role=\"tablist\">\n <button class=\"tab\"\n [class.active]=\"activeTab === 'overview'\"\n (click)=\"changeTab('overview')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'overview'\">\n <i class=\"fas fa-th-large\"></i> Overview\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 'runs'\"\n (click)=\"changeTab('runs')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'runs'\">\n <i class=\"fas fa-list\"></i> Test Runs\n @if (testRunsLoaded) {\n <span class=\"tab-badge\">{{ testRuns.length }}</span>\n }\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 'details'\"\n (click)=\"changeTab('details')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'details'\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 'analytics'\"\n (click)=\"changeTab('analytics')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'analytics'\"\n title=\"Press 4\">\n <i class=\"fas fa-chart-bar\"></i> Analytics\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 'execution'\"\n (click)=\"changeTab('execution')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'execution'\"\n title=\"Press 5\">\n <i class=\"fas fa-microchip\"></i>\n <span>Execution</span>\n </button>\n </div>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tab-content\">\n <!-- Overview Tab -->\n @if (activeTab === 'overview') {\n <div class=\"overview-tab\">\n <!-- Result Hero -->\n <div class=\"result-hero\"\n [class.passed]=\"record.Status === 'Completed' && getPassRate() >= 90\"\n [class.failed]=\"record.Status === 'Failed' || getPassRate() < 50\"\n [class.running]=\"record.Status === 'Running'\"\n [class.pending]=\"record.Status === 'Pending'\">\n <div class=\"result-hero-icon\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon()\"></i>\n </div>\n <div class=\"result-hero-text\">\n <h2>SUITE {{ record.Status.toUpperCase() || 'UNKNOWN' }}</h2>\n <div class=\"result-hero-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{ getPassRate().toFixed(1) }}%</span>\n <span class=\"stat-label\">Pass Rate</span>\n </div>\n <div class=\"stat-divider\"></div>\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{ record.PassedTests || 0 }} / {{ record.TotalTests || 0 }}</span>\n <span class=\"stat-label\">Tests Passed</span>\n </div>\n </div>\n </div>\n </div>\n <!-- Evaluation Metrics Summary -->\n @if (evaluationMetrics && feedbacksLoaded) {\n <div class=\"evaluation-summary\">\n <div class=\"eval-summary-grid\">\n <!-- Human Feedback Card -->\n @if (evalPreferences.showHuman) {\n <div class=\"eval-summary-card\">\n <div class=\"eval-card-header\">\n <i class=\"fa-solid fa-user\"></i>\n <span>Human Feedback</span>\n </div>\n <div class=\"eval-card-body\">\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Reviewed</span>\n <span class=\"eval-stat-value\">{{ evaluationMetrics.humanReviewedCount }} / {{ evaluationMetrics.totalRuns }}</span>\n </div>\n @if (evaluationMetrics.humanReviewedCount > 0) {\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Avg Rating</span>\n <span class=\"eval-stat-value\">{{ evaluationMetrics.humanAvgRating.toFixed(1) }}/10</span>\n </div>\n }\n @if (evaluationMetrics.humanReviewedCount > 0) {\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Correct</span>\n <span class=\"eval-stat-value correct\">{{ evaluationMetrics.humanCorrectCount }}</span>\n @if (evaluationMetrics.humanIncorrectCount > 0) {\n <span class=\"eval-stat-value incorrect\">{{ evaluationMetrics.humanIncorrectCount }} incorrect</span>\n }\n </div>\n }\n </div>\n @if (evaluationMetrics.humanPendingCount > 0) {\n <div class=\"eval-card-footer\">\n <span class=\"pending-badge\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ evaluationMetrics.humanPendingCount }} need review\n </span>\n </div>\n }\n </div>\n }\n <!-- Auto Score Card -->\n @if (evalPreferences.showAuto) {\n <div class=\"eval-summary-card\">\n <div class=\"eval-card-header\">\n <i class=\"fa-solid fa-robot\"></i>\n <span>Auto Evaluation</span>\n </div>\n <div class=\"eval-card-body\">\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Evaluated</span>\n <span class=\"eval-stat-value\">{{ evaluationMetrics.autoEvaluatedCount }} / {{ evaluationMetrics.totalRuns }}</span>\n </div>\n @if (evaluationMetrics.autoEvaluatedCount > 0) {\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Avg Score</span>\n <span class=\"eval-stat-value\">{{ (evaluationMetrics.autoAvgScore * 100).toFixed(0) }}%</span>\n </div>\n }\n @if (evaluationMetrics.autoEvaluatedCount > 0) {\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Pass Rate</span>\n <span class=\"eval-stat-value\">{{ evaluationMetrics.autoPassRate.toFixed(0) }}%</span>\n </div>\n }\n </div>\n </div>\n }\n <!-- Execution Card -->\n @if (evalPreferences.showExecution) {\n <div class=\"eval-summary-card\">\n <div class=\"eval-card-header\">\n <i class=\"fa-solid fa-circle-check\"></i>\n <span>Execution</span>\n </div>\n <div class=\"eval-card-body\">\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Completed</span>\n <span class=\"eval-stat-value\">{{ evaluationMetrics.execCompletedCount }} / {{ evaluationMetrics.totalRuns }}</span>\n </div>\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Success Rate</span>\n <span class=\"eval-stat-value\">{{ evaluationMetrics.execSuccessRate.toFixed(0) }}%</span>\n </div>\n @if (evaluationMetrics.execErrorCount > 0 || evaluationMetrics.execTimeoutCount > 0) {\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Issues</span>\n @if (evaluationMetrics.execErrorCount > 0) {\n <span class=\"eval-stat-value error\">{{ evaluationMetrics.execErrorCount }} errors</span>\n }\n @if (evaluationMetrics.execTimeoutCount > 0) {\n <span class=\"eval-stat-value timeout\">{{ evaluationMetrics.execTimeoutCount }} timeouts</span>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Needs Review Section -->\n @if (evalPreferences.showHuman && needsReviewItems.length > 0 && feedbacksLoaded) {\n <div class=\"needs-review-section\">\n <div class=\"needs-review-header\">\n <h3><i class=\"fa-solid fa-user-clock\"></i> Needs Review</h3>\n <span class=\"review-count\">{{ needsReviewItems.length }} items</span>\n </div>\n <div class=\"needs-review-list\">\n @for (item of needsReviewItems.slice(0, 5); track item) {\n <div class=\"review-item\"\n [class.high-priority]=\"item.priority === 'high'\"\n [class.medium-priority]=\"item.priority === 'medium'\"\n (click)=\"toggleRunExpanded(item.run.id)\">\n <div class=\"review-item-icon\">\n @if (item.priority === 'high') {\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n }\n @if (item.priority === 'medium') {\n <i class=\"fa-solid fa-circle-dot\"></i>\n }\n @if (item.priority === 'low') {\n <i class=\"fa-solid fa-clock\"></i>\n }\n </div>\n <div class=\"review-item-content\">\n <span class=\"review-item-name\">{{ item.run.testName }}</span>\n <span class=\"review-item-reason\">{{ item.reason }}</span>\n </div>\n <div class=\"review-item-action\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </div>\n </div>\n }\n @if (needsReviewItems.length > 5) {\n <div class=\"review-more\">\n <button kendoButton fillMode=\"flat\" (click)=\"changeTab('runs')\">\n View all {{ needsReviewItems.length }} items\n </button>\n </div>\n }\n </div>\n </div>\n }\n <!-- Progress Ring (when running) -->\n @if (record.Status === 'Running' || record.Status === 'Pending') {\n <div class=\"progress-section\">\n <div class=\"progress-info\">\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n <span>Suite execution in progress...</span>\n </div>\n <div class=\"auto-refresh-notice\">\n <i class=\"fas fa-sync\"></i>\n Auto-refreshing every 5 seconds\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Test Runs Tab -->\n @if (activeTab === 'runs') {\n <div class=\"runs-tab\">\n <!-- Toolbar -->\n @if (testRunsLoaded && testRuns.length > 0) {\n <div class=\"runs-toolbar\">\n <div class=\"run-filters\">\n <button class=\"filter-btn\"\n [class.active]=\"runStatusFilter === null\"\n (click)=\"setRunStatusFilter(null)\">\n All ({{ testRuns.length }})\n </button>\n @if (getRunCountByStatus('Passed') > 0) {\n <button class=\"filter-btn passed\"\n [class.active]=\"runStatusFilter === 'Passed'\"\n (click)=\"setRunStatusFilter('Passed')\"\n >\n <i class=\"fas fa-check\"></i> Passed ({{ getRunCountByStatus('Passed') }})\n </button>\n }\n @if (getRunCountByStatus('Failed') > 0) {\n <button class=\"filter-btn failed\"\n [class.active]=\"runStatusFilter === 'Failed'\"\n (click)=\"setRunStatusFilter('Failed')\"\n >\n <i class=\"fas fa-times\"></i> Failed ({{ getRunCountByStatus('Failed') }})\n </button>\n }\n @if (getRunCountByStatus('Error') > 0) {\n <button class=\"filter-btn error\"\n [class.active]=\"runStatusFilter === 'Error'\"\n (click)=\"setRunStatusFilter('Error')\"\n >\n <i class=\"fas fa-exclamation\"></i> Error ({{ getRunCountByStatus('Error') }})\n </button>\n }\n </div>\n <div class=\"runs-actions\">\n <button kendoButton (click)=\"exportToCSV()\">\n <i class=\"fas fa-download\"></i> Export CSV\n </button>\n </div>\n </div>\n }\n <!-- Loading State -->\n @if (loadingTestRuns) {\n <div class=\"loading-state\">\n <div class=\"skeleton-list\">\n @for (i of [1,2,3,4,5]; track i) {\n <div class=\"skeleton-card\">\n <div class=\"skeleton-sequence\"></div>\n <div class=\"skeleton-icon\"></div>\n <div class=\"skeleton-content\">\n <div class=\"skeleton-line wide\"></div>\n <div class=\"skeleton-line narrow\"></div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Test Runs List -->\n @if (!loadingTestRuns && testRuns.length > 0) {\n <div class=\"test-runs-list\">\n @for (run of getFilteredTestRuns(); track run) {\n <div class=\"test-run-card\">\n <div class=\"test-run-item\" (click)=\"toggleRunExpanded(run.ID)\">\n <div class=\"run-sequence\">{{ run.Sequence || '-' }}</div>\n <div class=\"run-icon\" [style.background-color]=\"getRunStatusColor(run.Status)\">\n <i class=\"fas\" [ngClass]=\"getRunStatusIcon(run.Status)\"></i>\n </div>\n <div class=\"run-content\">\n <div class=\"run-header-row\">\n <div class=\"run-name\">{{ run.Test }}</div>\n <!-- Evaluation Badge -->\n <app-evaluation-badge\n [executionStatus]=\"run.Status\"\n [originalStatus]=\"run.Status\"\n [autoScore]=\"run.Score\"\n [humanRating]=\"getFeedbackRating(run.ID) || null\"\n [humanIsCorrect]=\"getHumanIsCorrect(run.ID)\"\n [hasHumanFeedback]=\"hasFeedback(run.ID)\"\n [preferences]=\"evalPreferences\"\n [mode]=\"'compact'\">\n </app-evaluation-badge>\n </div>\n <div class=\"run-meta\">\n @if (run.DurationSeconds) {\n <span class=\"run-duration\">\n <i class=\"fas fa-clock\"></i> {{ run.DurationSeconds.toFixed(1) }}s\n </span>\n }\n @if (run.CostUSD) {\n <span class=\"run-cost\">\n <i class=\"fas fa-dollar-sign\"></i> {{ run.CostUSD.toFixed(6) }}\n </span>\n }\n @if (run.TargetLogEntityID && run.TargetLogID) {\n <mj-entity-link-pill\n [entityName]=\"run.TargetLogEntity\"\n [recordId]=\"run.TargetLogID\">\n </mj-entity-link-pill>\n }\n </div>\n @if (getRunTags(run).length > 0) {\n <div class=\"run-tags\">\n @for (tag of getRunTags(run); track tag) {\n <span class=\"tag-chip\">{{ tag }}</span>\n }\n </div>\n }\n </div>\n <div class=\"run-expand\">\n <i class=\"fas\" [class.fa-chevron-down]=\"expandedRunId !== run.ID\" [class.fa-chevron-up]=\"expandedRunId === run.ID\"></i>\n </div>\n </div>\n <!-- Expanded Inline Feedback -->\n @if (expandedRunId === run.ID) {\n <div class=\"inline-feedback\">\n <div class=\"feedback-divider\"></div>\n <div class=\"feedback-section\">\n <div class=\"feedback-label\">Quick Feedback</div>\n <div class=\"inline-rating\">\n <div class=\"rating-numbers\">\n @for (num of [1,2,3,4,5,6,7,8,9,10]; track num) {\n <button\n type=\"button\"\n class=\"rating-btn\"\n [class.selected]=\"num === inlineRating\"\n [class.hover]=\"num === inlineHoverRating\"\n [class.low]=\"num <= 3\"\n [class.mid]=\"num >= 4 && num <= 6\"\n [class.high]=\"num >= 7\"\n (click)=\"setInlineRating(num); $event.stopPropagation()\"\n (mouseenter)=\"inlineHoverRating = num\"\n (mouseleave)=\"inlineHoverRating = 0\">\n {{ num }}\n </button>\n }\n </div>\n @if (inlineRating > 0) {\n <div class=\"rating-info\">\n <span class=\"rating-value\">{{ inlineRating }}/10</span>\n <span class=\"rating-label-text\">{{ getInlineRatingLabel() }}</span>\n </div>\n }\n </div>\n <div class=\"correctness-row\">\n <span class=\"correctness-label\">Was it correct?</span>\n <div class=\"correctness-options\">\n <label class=\"radio-opt\" (click)=\"$event.stopPropagation()\">\n <input type=\"radio\" name=\"correct-{{run.ID}}\" [value]=\"true\" [(ngModel)]=\"inlineIsCorrect\">\n <span>Yes</span>\n </label>\n <label class=\"radio-opt\" (click)=\"$event.stopPropagation()\">\n <input type=\"radio\" name=\"correct-{{run.ID}}\" [value]=\"false\" [(ngModel)]=\"inlineIsCorrect\">\n <span>No</span>\n </label>\n <label class=\"radio-opt\" (click)=\"$event.stopPropagation()\">\n <input type=\"radio\" name=\"correct-{{run.ID}}\" [value]=\"null\" [(ngModel)]=\"inlineIsCorrect\">\n <span>Not Sure</span>\n </label>\n </div>\n </div>\n <div class=\"comments-row\" (click)=\"$event.stopPropagation()\">\n <textarea\n class=\"feedback-textarea\"\n [(ngModel)]=\"inlineComments\"\n placeholder=\"Add comments or corrections...\"\n rows=\"3\"></textarea>\n </div>\n <div class=\"feedback-actions\" (click)=\"$event.stopPropagation()\">\n <button kendoButton (click)=\"openTestRun(run.ID)\">\n <i class=\"fas fa-external-link-alt\"></i> View Full Details\n </button>\n <button kendoButton\n themeColor=\"primary\"\n (click)=\"saveInlineFeedback()\"\n [disabled]=\"!canSubmitInlineFeedback() || savingInlineFeedback\">\n <i class=\"fas\" [ngClass]=\"savingInlineFeedback ? 'fa-spinner fa-spin' : 'fa-save'\"></i>\n {{ savingInlineFeedback ? 'Saving...' : (hasFeedback(run.ID) ? 'Update' : 'Save') }}\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- Empty State -->\n @if (testRunsLoaded && !loadingTestRuns && testRuns.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fas fa-inbox\"></i>\n </div>\n <h4>No Test Runs Found</h4>\n <p>No test runs have been recorded for this suite execution.</p>\n </div>\n }\n <!-- Filtered Empty -->\n @if (testRunsLoaded && !loadingTestRuns && testRuns.length > 0 && getFilteredTestRuns().length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fas fa-filter\"></i>\n </div>\n <h4>No Matching Runs</h4>\n <p>No test runs match the current filter.</p>\n <button kendoButton (click)=\"setRunStatusFilter(null)\">Clear Filter</button>\n </div>\n }\n </div>\n }\n\n <!-- Details Tab -->\n @if (activeTab === 'details') {\n <div class=\"details-tab\">\n <div class=\"details-card\">\n <h3><i class=\"fas fa-info-circle\"></i> Run Information</h3>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <div class=\"detail-label\">Run ID</div>\n <div class=\"detail-value monospace\">{{ record.ID }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Test Suite</div>\n <div class=\"detail-value\">\n @if (testSuite) {\n <a href=\"javascript:void(0)\" (click)=\"openTestSuite()\">{{ testSuite.Name }}</a>\n }\n @if (!testSuite) {\n <span>Loading...</span>\n }\n </div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Status</div>\n <div class=\"detail-value\">\n <span class=\"status-inline\" [ngClass]=\"getStatusClass()\">{{ record.Status }}</span>\n </div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Run By</div>\n <div class=\"detail-value\">{{ record.RunByUser || 'N/A' }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Started At</div>\n <div class=\"detail-value\">{{ record.StartedAt | date:'medium' }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Completed At</div>\n <div class=\"detail-value\">{{ record.CompletedAt | date:'medium' }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Environment</div>\n <div class=\"detail-value\">{{ record.Environment || 'N/A' }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Trigger Type</div>\n <div class=\"detail-value\">{{ record.TriggerType || 'N/A' }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Git Commit</div>\n <div class=\"detail-value monospace\">{{ record.GitCommit || 'N/A' }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Agent Version</div>\n <div class=\"detail-value\">{{ record.AgentVersion || 'N/A' }}</div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Analytics Tab -->\n @if (activeTab === 'analytics') {\n <div class=\"analytics-tab\">\n <!-- Loading State -->\n @if (loadingTestRuns) {\n <div class=\"analytics-loading\">\n <i class=\"fas fa-spinner fa-spin\"></i>\n <span>Loading test results...</span>\n </div>\n }\n <!-- Summary Statistics - Moved to top for better overview -->\n @if (!loadingTestRuns && testRuns.length > 0) {\n <div class=\"analytics-section\">\n <h3><i class=\"fas fa-chart-pie\"></i> Summary Statistics</h3>\n <div class=\"stats-grid\">\n <div class=\"stat-card\">\n <div class=\"stat-icon passed\"><i class=\"fas fa-check-circle\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ getPassedCount() }}</div>\n <div class=\"stat-label\">Passed</div>\n <div class=\"stat-percent\">{{ getPassedPercent().toFixed(1) }}%</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon failed\"><i class=\"fas fa-times-circle\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ getFailedCount() }}</div>\n <div class=\"stat-label\">Failed</div>\n <div class=\"stat-percent\">{{ getFailedPercent().toFixed(1) }}%</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon score\"><i class=\"fas fa-star\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ (getAverageScore() * 100).toFixed(1) }}%</div>\n <div class=\"stat-label\">Avg Score</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon duration\"><i class=\"fas fa-clock\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ getAverageDuration().toFixed(1) }}s</div>\n <div class=\"stat-label\">Avg Duration</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon cost\"><i class=\"fas fa-dollar-sign\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">${{ getTotalCost().toFixed(4) }}</div>\n <div class=\"stat-label\">Total Cost</div>\n </div>\n </div>\n </div>\n </div>\n }\n <!-- Test Results Table -->\n @if (!loadingTestRuns && testRuns.length > 0) {\n <div class=\"analytics-section\">\n <div class=\"analytics-header\">\n <h3><i class=\"fas fa-table\"></i> Test Results</h3>\n <div class=\"analytics-legend\">\n <span class=\"legend-item passed\"><i class=\"fas fa-check-circle\"></i> Passed</span>\n <span class=\"legend-item failed\"><i class=\"fas fa-times-circle\"></i> Failed</span>\n <span class=\"legend-item error\"><i class=\"fas fa-exclamation-circle\"></i> Error</span>\n <span class=\"legend-item skipped\"><i class=\"fas fa-forward\"></i> Skipped</span>\n </div>\n </div>\n <!-- Results Table -->\n <div class=\"results-table-wrapper\">\n <table class=\"results-table\">\n <thead>\n <tr>\n <th class=\"seq-col\">#</th>\n <th class=\"name-col\">Test Name</th>\n @if (evalPreferences.showExecution) {\n <th class=\"status-col\">Status</th>\n }\n @if (evalPreferences.showAuto) {\n <th class=\"score-col\">Auto Score</th>\n }\n @if (evalPreferences.showHuman) {\n <th class=\"feedback-col\">Human Score</th>\n }\n <th class=\"duration-col\">Duration</th>\n <th class=\"cost-col\">Cost</th>\n </tr>\n </thead>\n <tbody>\n @for (run of testRuns; track run; let i = $index) {\n <tr\n class=\"result-row\"\n [class.row-passed]=\"run.Status === 'Passed'\"\n [class.row-failed]=\"run.Status === 'Failed'\"\n [class.row-error]=\"run.Status === 'Error'\"\n [class.row-skipped]=\"run.Status === 'Skipped'\"\n (click)=\"openTestRun(run.ID)\">\n <td class=\"seq-col\">{{ i + 1 }}</td>\n <td class=\"name-col\">\n <div class=\"test-name-wrapper\">\n <span class=\"test-name\">{{ run.Test || 'Unknown Test' }}</span>\n @if (getRunTags(run).length > 0) {\n <div class=\"test-tags\">\n @for (tag of getRunTags(run).slice(0, 2); track tag) {\n <span class=\"tag-mini\">{{ tag }}</span>\n }\n </div>\n }\n </div>\n </td>\n @if (evalPreferences.showExecution) {\n <td class=\"status-col\">\n <span class=\"status-badge\" [ngClass]=\"'status-' + run.Status.toLowerCase()\">\n <i class=\"fas\"\n [class.fa-check-circle]=\"run.Status === 'Passed'\"\n [class.fa-times-circle]=\"run.Status === 'Failed'\"\n [class.fa-exclamation-circle]=\"run.Status === 'Error'\"\n [class.fa-forward]=\"run.Status === 'Skipped'\"\n [class.fa-clock]=\"run.Status === 'Pending'\"\n [class.fa-spinner]=\"run.Status === 'Running'\"\n [class.fa-spin]=\"run.Status === 'Running'\"></i>\n {{ run.Status }}\n </span>\n </td>\n }\n @if (evalPreferences.showAuto) {\n <td class=\"score-col\">\n @if (run.Score != null) {\n <div class=\"score-display\">\n <div class=\"score-bar-mini\">\n <div class=\"score-fill\"\n [style.width.%]=\"run.Score * 100\"\n [class.high]=\"run.Score >= 0.8\"\n [class.medium]=\"run.Score >= 0.5 && run.Score < 0.8\"\n [class.low]=\"run.Score < 0.5\"></div>\n </div>\n <span class=\"score-text\">{{ (run.Score * 100).toFixed(0) }}%</span>\n </div>\n }\n @if (run.Score == null) {\n <span class=\"na-value\">\u2014</span>\n }\n </td>\n }\n @if (evalPreferences.showHuman) {\n <td class=\"feedback-col\">\n @if (hasFeedback(run.ID)) {\n <div class=\"feedback-display\">\n <span class=\"feedback-rating\" [class.low]=\"getFeedbackRating(run.ID) <= 3\" [class.mid]=\"getFeedbackRating(run.ID) >= 4 && getFeedbackRating(run.ID) <= 6\" [class.high]=\"getFeedbackRating(run.ID) >= 7\">\n {{ getFeedbackRating(run.ID) }}/10\n </span>\n @if (getHumanIsCorrect(run.ID) !== null) {\n <span class=\"feedback-correctness\">\n <i class=\"fas\" [class.fa-check]=\"getHumanIsCorrect(run.ID) === true\" [class.fa-times]=\"getHumanIsCorrect(run.ID) === false\" [class.correct]=\"getHumanIsCorrect(run.ID) === true\" [class.incorrect]=\"getHumanIsCorrect(run.ID) === false\"></i>\n </span>\n }\n </div>\n }\n @if (!hasFeedback(run.ID)) {\n <span class=\"na-value needs-review\">\n <i class=\"fas fa-user-clock\"></i>\n </span>\n }\n </td>\n }\n <td class=\"duration-col\">\n @if (run.DurationSeconds) {\n <span>{{ run.DurationSeconds.toFixed(1) }}s</span>\n }\n @if (!run.DurationSeconds) {\n <span class=\"na-value\">\u2014</span>\n }\n </td>\n <td class=\"cost-col\">\n @if (run.CostUSD) {\n <span>${{ run.CostUSD.toFixed(4) }}</span>\n }\n @if (!run.CostUSD) {\n <span class=\"na-value\">\u2014</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n <!-- Empty State -->\n @if (!loadingTestRuns && testRunsLoaded && testRuns.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fas fa-chart-bar\"></i>\n </div>\n <h4>No Test Results Yet</h4>\n <p>Test runs will appear here once the suite execution completes.</p>\n </div>\n }\n </div>\n }\n\n <!-- Execution Tab -->\n @if (activeTab === 'execution') {\n <div class=\"execution-tab\">\n <mj-execution-context\n [machineName]=\"record.MachineName\"\n [machineId]=\"record.MachineID\"\n [runByUserName]=\"record.RunByUserName\"\n [runByUserEmail]=\"record.RunByUserEmail\"\n [runContextDetailsJson]=\"record.RunContextDetails\">\n </mj-execution-context>\n </div>\n }\n </div>\n\n <!-- Keyboard Shortcuts Toggle Button -->\n <button class=\"shortcuts-toggle\" (click)=\"toggleShortcuts()\" [title]=\"showShortcuts ? 'Hide keyboard shortcuts' : 'Show keyboard shortcuts'\">\n <i class=\"fas fa-keyboard\"></i>\n </button>\n\n <!-- Keyboard Shortcuts Hint (Desktop Only) -->\n @if (showShortcuts) {\n <div class=\"keyboard-shortcuts\">\n <div class=\"shortcuts-header\">\n <i class=\"fas fa-keyboard\"></i>\n Shortcuts\n <button class=\"shortcuts-close\" (click)=\"toggleShortcuts()\" title=\"Hide shortcuts\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n <div class=\"shortcut-list\">\n <div class=\"shortcut-item\">\n <span>Refresh</span>\n <span class=\"shortcut-keys\"><kbd>Cmd</kbd><kbd>R</kbd></span>\n </div>\n <div class=\"shortcut-item\">\n <span>Re-run Suite</span>\n <span class=\"shortcut-keys\"><kbd>Cmd</kbd><kbd>Shift</kbd><kbd>R</kbd></span>\n </div>\n <div class=\"shortcut-item\">\n <span>Switch Tabs</span>\n <span class=\"shortcut-keys\"><kbd>1</kbd>-<kbd>5</kbd></span>\n </div>\n </div>\n </div>\n }\n</div>\n", styles: ["/* ===================================\n Test Suite Run Form - Premium UX\n World-class responsive design\n =================================== */\n\n/* CSS Custom Properties */\n:host {\n --suite-run-primary: #3b82f6;\n --suite-run-primary-light: #eff6ff;\n --suite-run-success: #10b981;\n --suite-run-success-light: #ecfdf5;\n --suite-run-danger: #ef4444;\n --suite-run-danger-light: #fef2f2;\n --suite-run-warning: #f59e0b;\n --suite-run-warning-light: #fffbeb;\n --suite-run-info: #8b5cf6;\n --suite-run-info-light: #f5f3ff;\n --suite-run-neutral: #6b7280;\n --suite-run-neutral-light: #f9fafb;\n --suite-run-bg: #f8fafc;\n --suite-run-card: #ffffff;\n --suite-run-border: #e2e8f0;\n --suite-run-text: #1e293b;\n --suite-run-text-secondary: #64748b;\n --suite-run-radius: 12px;\n --suite-run-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06);\n --suite-run-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\n --suite-run-transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n/* Base Container */\n.test-suite-run-form {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--suite-run-bg);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n}\n\n/* ===================================\n Header Section\n =================================== */\n.suite-run-header {\n background: var(--suite-run-card);\n border-bottom: 1px solid var(--suite-run-border);\n padding: 20px 24px;\n}\n\n/* Breadcrumb */\n.breadcrumb {\n margin-bottom: 16px;\n}\n\n.breadcrumb ol {\n display: flex;\n align-items: center;\n gap: 4px;\n list-style: none;\n margin: 0;\n padding: 0;\n font-size: 13px;\n}\n\n.breadcrumb li {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.breadcrumb a {\n color: var(--suite-run-primary);\n text-decoration: none;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 8px;\n border-radius: 6px;\n transition: background 0.15s;\n}\n\n.breadcrumb a:hover {\n background: rgba(59, 130, 246, 0.1);\n text-decoration: none;\n}\n\n.breadcrumb .separator {\n font-size: 10px;\n color: var(--suite-run-text-secondary);\n margin: 0 4px;\n}\n\n.breadcrumb .current {\n color: var(--suite-run-text-secondary);\n font-weight: 500;\n}\n\n.breadcrumb-text {\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Header Content */\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.header-left {\n display: flex;\n gap: 16px;\n align-items: flex-start;\n}\n\n.suite-run-icon {\n width: 56px;\n height: 56px;\n border-radius: var(--suite-run-radius);\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 24px;\n flex-shrink: 0;\n box-shadow: var(--suite-run-shadow);\n}\n\n.suite-run-info h1 {\n margin: 0 0 8px 0;\n font-size: 24px;\n font-weight: 700;\n color: var(--suite-run-text);\n letter-spacing: -0.025em;\n}\n\n.suite-run-meta {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.025em;\n}\n\n.status-badge.status-completed {\n background: var(--suite-run-success-light);\n color: var(--suite-run-success);\n}\n\n.status-badge.status-failed {\n background: var(--suite-run-danger-light);\n color: var(--suite-run-danger);\n}\n\n.status-badge.status-running {\n background: var(--suite-run-primary-light);\n color: var(--suite-run-primary);\n}\n\n.status-badge.status-pending {\n background: var(--suite-run-info-light);\n color: var(--suite-run-info);\n}\n\n.status-badge.status-cancelled {\n background: var(--suite-run-neutral-light);\n color: var(--suite-run-neutral);\n}\n\n.meta-tag {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: var(--suite-run-neutral-light);\n border-radius: 6px;\n font-size: 12px;\n color: var(--suite-run-text-secondary);\n}\n\n.meta-tag i {\n font-size: 10px;\n opacity: 0.7;\n}\n\n.header-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n/* ===================================\n Metrics Bar\n =================================== */\n.metrics-bar {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card {\n display: flex;\n align-items: center;\n gap: 12px;\n background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);\n border: 1px solid var(--suite-run-border);\n border-radius: 10px;\n padding: 14px;\n transition: var(--suite-run-transition);\n}\n\n.metric-card:hover {\n transform: translateY(-2px);\n box-shadow: var(--suite-run-shadow);\n}\n\n.metric-icon {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--suite-run-card);\n border-radius: 10px;\n color: var(--suite-run-primary);\n font-size: 16px;\n box-shadow: var(--suite-run-shadow);\n}\n\n.metric-content {\n flex: 1;\n min-width: 0;\n}\n\n.metric-value {\n font-size: 18px;\n font-weight: 700;\n color: var(--suite-run-text);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.metric-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--suite-run-text-secondary);\n margin-top: 2px;\n}\n\n/* ===================================\n Results Summary\n =================================== */\n.results-summary {\n display: flex;\n gap: 12px;\n padding-top: 20px;\n border-top: 1px solid var(--suite-run-border);\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.result-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 16px;\n background: var(--suite-run-card);\n border: 1px solid var(--suite-run-border);\n border-radius: 10px;\n flex-shrink: 0;\n transition: var(--suite-run-transition);\n}\n\n.result-item:hover {\n transform: translateY(-2px);\n box-shadow: var(--suite-run-shadow);\n}\n\n.result-icon {\n font-size: 24px;\n}\n\n.result-content {\n display: flex;\n flex-direction: column;\n}\n\n.result-count {\n font-size: 20px;\n font-weight: 700;\n line-height: 1.2;\n}\n\n.result-label {\n font-size: 11px;\n font-weight: 500;\n color: var(--suite-run-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.result-item.passed .result-icon,\n.result-item.passed .result-count {\n color: var(--suite-run-success);\n}\n\n.result-item.failed .result-icon,\n.result-item.failed .result-count {\n color: var(--suite-run-danger);\n}\n\n.result-item.error .result-icon,\n.result-item.error .result-count {\n color: var(--suite-run-warning);\n}\n\n.result-item.skipped .result-icon,\n.result-item.skipped .result-count {\n color: var(--suite-run-neutral);\n}\n\n.result-item.total .result-icon,\n.result-item.total .result-count {\n color: var(--suite-run-primary);\n}\n\n/* ===================================\n Tabs\n =================================== */\n.tabs-container {\n background: var(--suite-run-card);\n border-bottom: 1px solid var(--suite-run-border);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.tabs {\n display: flex;\n padding: 0 24px;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: none;\n}\n\n.tabs::-webkit-scrollbar {\n display: none;\n}\n\n.tab {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 16px 20px;\n border: none;\n background: transparent;\n border-bottom: 3px solid transparent;\n color: var(--suite-run-text-secondary);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: var(--suite-run-transition);\n white-space: nowrap;\n position: relative;\n}\n\n.tab:hover {\n color: var(--suite-run-primary);\n background: var(--suite-run-primary-light);\n}\n\n.tab.active {\n color: var(--suite-run-primary);\n border-bottom-color: var(--suite-run-primary);\n font-weight: 600;\n}\n\n.tab i {\n font-size: 15px;\n}\n\n.tab-badge {\n background: var(--suite-run-border);\n color: var(--suite-run-text-secondary);\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.tab.active .tab-badge {\n background: var(--suite-run-primary-light);\n color: var(--suite-run-primary);\n}\n\n.tab-shortcut {\n display: none;\n width: 18px;\n height: 18px;\n background: var(--suite-run-neutral-light);\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n color: var(--suite-run-text-secondary);\n align-items: center;\n justify-content: center;\n margin-left: 4px;\n}\n\n/* ===================================\n Tab Content\n =================================== */\n.tab-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n}\n\n/* ===================================\n Overview Tab\n =================================== */\n.overview-tab {\n display: flex;\n flex-direction: column;\n gap: 20px;\n max-width: 800px;\n margin: 0 auto;\n width: 100%;\n}\n\n.result-hero {\n background: var(--suite-run-card);\n border-radius: var(--suite-run-radius);\n padding: 48px 32px;\n text-align: center;\n border: 2px solid var(--suite-run-border);\n transition: var(--suite-run-transition);\n}\n\n.result-hero.passed {\n background: linear-gradient(135deg, #ecfdf5 0%, #d1fae5 100%);\n border-color: var(--suite-run-success);\n}\n\n.result-hero.failed {\n background: linear-gradient(135deg, #fef2f2 0%, #fecaca 100%);\n border-color: var(--suite-run-danger);\n}\n\n.result-hero.running {\n background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);\n border-color: var(--suite-run-primary);\n}\n\n.result-hero.pending {\n background: linear-gradient(135deg, #f5f3ff 0%, #ede9fe 100%);\n border-color: var(--suite-run-info);\n}\n\n.result-hero-icon {\n font-size: 72px;\n margin-bottom: 20px;\n}\n\n.result-hero.passed .result-hero-icon {\n color: var(--suite-run-success);\n}\n\n.result-hero.failed .result-hero-icon {\n color: var(--suite-run-danger);\n}\n\n.result-hero.running .result-hero-icon {\n color: var(--suite-run-primary);\n}\n\n.result-hero.pending .result-hero-icon {\n color: var(--suite-run-info);\n}\n\n.result-hero-text h2 {\n margin: 0 0 16px 0;\n font-size: 32px;\n font-weight: 800;\n color: var(--suite-run-text);\n letter-spacing: -0.025em;\n}\n\n.result-hero-stats {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 32px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat-value {\n font-size: 24px;\n font-weight: 700;\n color: var(--suite-run-text);\n}\n\n.stat-label {\n font-size: 12px;\n font-weight: 500;\n color: var(--suite-run-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat-divider {\n width: 1px;\n height: 40px;\n background: var(--suite-run-border);\n}\n\n/* Progress Section */\n.progress-section {\n background: var(--suite-run-primary-light);\n border: 1px solid rgba(59, 130, 246, 0.2);\n border-radius: var(--suite-run-radius);\n padding: 20px;\n text-align: center;\n}\n\n.progress-info {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 500;\n color: var(--suite-run-primary);\n margin-bottom: 8px;\n}\n\n.progress-info i {\n font-size: 20px;\n}\n\n.auto-refresh-notice {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n font-size: 12px;\n color: var(--suite-run-text-secondary);\n}\n\n/* ===================================\n Test Runs Tab\n =================================== */\n.runs-tab {\n max-width: 900px;\n margin: 0 auto;\n width: 100%;\n}\n\n/* Loading Skeleton */\n.loading-state {\n animation: fadeIn 0.3s ease;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.skeleton-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.skeleton-card {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n background: var(--suite-run-card);\n border-radius: var(--suite-run-radius);\n border: 1px solid var(--suite-run-border);\n}\n\n.skeleton-sequence {\n width: 32px;\n height: 32px;\n background: linear-gradient(90deg, #f1f5f9 25%, #e2e8f0 50%, #f1f5f9 75%);\n background-size: 200% 100%;\n animation: shimmer 1.5s infinite;\n border-radius: 50%;\n}\n\n.skeleton-icon {\n width: 40px;\n height: 40px;\n background: linear-gradient(90deg, #f1f5f9 25%, #e2e8f0 50%, #f1f5f9 75%);\n background-size: 200% 100%;\n animation: shimmer 1.5s infinite;\n border-radius: 8px;\n}\n\n.skeleton-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.skeleton-line {\n height: 14px;\n background: linear-gradient(90deg, #f1f5f9 25%, #e2e8f0 50%, #f1f5f9 75%);\n background-size: 200% 100%;\n animation: shimmer 1.5s infinite;\n border-radius: 4px;\n}\n\n.skeleton-line.wide {\n width: 70%;\n}\n\n.skeleton-line.narrow {\n width: 40%;\n}\n\n@keyframes shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n}\n\n/* Test Runs List */\n.test-runs-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.test-run-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n background: var(--suite-run-card);\n border: 1px solid var(--suite-run-border);\n border-radius: var(--suite-run-radius);\n cursor: pointer;\n transition: var(--suite-run-transition);\n}\n\n.test-run-item:hover {\n background: var(--suite-run-primary-light);\n border-color: #93c5fd;\n transform: translateX(4px);\n}\n\n.test-run-item:active {\n transform: translateX(2px);\n}\n\n.run-sequence {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--suite-run-neutral-light);\n border-radius: 50%;\n font-size: 13px;\n font-weight: 700;\n color: var(--suite-run-text-secondary);\n flex-shrink: 0;\n}\n\n.run-icon {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 10px;\n color: white;\n font-size: 16px;\n flex-shrink: 0;\n box-shadow: var(--suite-run-shadow);\n}\n\n.run-content {\n flex: 1;\n min-width: 0;\n}\n\n.run-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--suite-run-text);\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.run-meta {\n display: flex;\n gap: 16px;\n font-size: 12px;\n color: var(--suite-run-text-secondary);\n flex-wrap: wrap;\n}\n\n.run-status {\n font-weight: 700;\n}\n\n.run-score,\n.run-duration {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.run-score i,\n.run-duration i {\n font-size: 10px;\n opacity: 0.7;\n}\n\n.test-run-item > i {\n color: #cbd5e1;\n font-size: 14px;\n transition: var(--suite-run-transition);\n}\n\n.test-run-item:hover > i {\n color: var(--suite-run-primary);\n transform: translateX(4px);\n}\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n text-align: center;\n background: var(--suite-run-card);\n border-radius: var(--suite-run-radius);\n border: 2px dashed var(--suite-run-border);\n}\n\n.empty-icon {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--suite-run-neutral-light);\n border-radius: 50%;\n margin-bottom: 20px;\n}\n\n.empty-icon i {\n font-size: 32px;\n color: #cbd5e1;\n}\n\n.empty-state h4 {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--suite-run-text);\n}\n\n.empty-state p {\n margin: 0;\n font-size: 14px;\n color: var(--suite-run-text-secondary);\n max-width: 300px;\n}\n\n/* ===================================\n Details Tab\n =================================== */\n.details-tab {\n max-width: 900px;\n margin: 0 auto;\n width: 100%;\n}\n\n.details-card {\n background: var(--suite-run-card);\n border-radius: var(--suite-run-radius);\n padding: 24px;\n box-shadow: var(--suite-run-shadow);\n}\n\n.details-card h3 {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0 0 20px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--suite-run-text);\n padding-bottom: 12px;\n border-bottom: 1px solid var(--suite-run-border);\n}\n\n.details-card h3 i {\n color: var(--suite-run-primary);\n}\n\n.details-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 20px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.detail-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--suite-run-text-secondary);\n}\n\n.detail-value {\n font-size: 14px;\n color: var(--suite-run-text);\n word-wrap: break-word;\n}\n\n.detail-value.monospace {\n font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;\n font-size: 12px;\n background: var(--suite-run-neutral-light);\n padding: 6px 10px;\n border-radius: 6px;\n}\n\n.detail-value a {\n color: var(--suite-run-primary);\n text-decoration: none;\n font-weight: 500;\n transition: var(--suite-run-transition);\n}\n\n.detail-value a:hover {\n color: #2563eb;\n text-decoration: underline;\n}\n\n.status-inline {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.status-inline.status-completed {\n background: var(--suite-run-success-light);\n color: var(--suite-run-success);\n}\n\n.status-inline.status-failed {\n background: var(--suite-run-danger-light);\n color: var(--suite-run-danger);\n}\n\n.status-inline.status-running {\n background: var(--suite-run-primary-light);\n color: var(--suite-run-primary);\n}\n\n.status-inline.status-pending {\n background: var(--suite-run-info-light);\n color: var(--suite-run-info);\n}\n\n.status-inline.status-cancelled {\n background: var(--suite-run-neutral-light);\n color: var(--suite-run-neutral);\n}\n\n/* ===================================\n Keyboard Shortcuts\n =================================== */\n/* Toggle button - visible when shortcuts are hidden */\n.shortcuts-toggle {\n position: fixed;\n bottom: 20px;\n right: 20px;\n width: 36px;\n height: 36px;\n border-radius: 50%;\n background: var(--suite-run-card);\n border: 1px solid var(--suite-run-border);\n box-shadow: var(--suite-run-shadow);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--suite-run-text-secondary);\n font-size: 14px;\n z-index: 99;\n transition: var(--suite-run-transition);\n opacity: 0.7;\n}\n\n.shortcuts-toggle:hover {\n opacity: 1;\n transform: scale(1.1);\n color: var(--suite-run-primary);\n border-color: var(--suite-run-primary);\n}\n\n.keyboard-shortcuts {\n position: fixed;\n bottom: 20px;\n right: 20px;\n background: var(--suite-run-card);\n border: 1px solid var(--suite-run-border);\n border-radius: var(--suite-run-radius);\n padding: 12px 16px;\n box-shadow: var(--suite-run-shadow-lg);\n font-size: 12px;\n z-index: 100;\n opacity: 0.9;\n transition: var(--suite-run-transition);\n}\n\n.keyboard-shortcuts:hover {\n opacity: 1;\n}\n\n.shortcuts-header {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n color: var(--suite-run-text);\n margin-bottom: 10px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--suite-run-border);\n}\n\n.shortcuts-header i {\n color: var(--suite-run-primary);\n}\n\n.shortcuts-close {\n margin-left: auto;\n background: none;\n border: none;\n cursor: pointer;\n color: var(--suite-run-text-muted);\n font-size: 12px;\n padding: 2px 4px;\n border-radius: 4px;\n transition: var(--suite-run-transition);\n}\n\n.shortcuts-close:hover {\n color: var(--suite-run-text);\n background: var(--suite-run-border);\n}\n\n.shortcut-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.shortcut-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 16px;\n}\n\n.shortcut-item span:first-child {\n color: var(--suite-run-text-secondary);\n}\n\n.shortcut-keys {\n display: flex;\n gap: 4px;\n}\n\nkbd {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n background: linear-gradient(180deg, #f8fafc 0%, #e2e8f0 100%);\n border: 1px solid #cbd5e1;\n border-radius: 4px;\n font-family: inherit;\n font-size: 10px;\n font-weight: 600;\n color: var(--suite-run-text);\n box-shadow: 0 1px 0 #94a3b8;\n}\n\n/* ===================================\n Responsive Design - Tablet\n =================================== */\n@media (max-width: 1024px) {\n .suite-run-header {\n padding: 16px 20px;\n }\n\n .metrics-bar {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .result-hero-stats {\n flex-direction: column;\n gap: 16px;\n }\n\n .stat-divider {\n display: none;\n }\n\n .details-grid {\n grid-template-columns: 1fr;\n }\n\n .tab-shortcut {\n display: none;\n }\n}\n\n/* ===================================\n Responsive Design - Mobile\n =================================== */\n@media (max-width: 768px) {\n .suite-run-header {\n padding: 16px;\n }\n\n .header-content {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-left {\n width: 100%;\n }\n\n .suite-run-icon {\n width: 48px;\n height: 48px;\n font-size: 20px;\n }\n\n .suite-run-info h1 {\n font-size: 20px;\n }\n\n .header-actions {\n width: 100%;\n justify-content: stretch;\n }\n\n .header-actions button {\n flex: 1;\n }\n\n .metrics-bar {\n grid-template-columns: repeat(2, 1fr);\n gap: 8px;\n }\n\n .metric-card {\n padding: 12px;\n flex-direction: column;\n text-align: center;\n gap: 8px;\n }\n\n .metric-icon {\n width: 36px;\n height: 36px;\n }\n\n .metric-value {\n font-size: 16px;\n }\n\n .results-summary {\n gap: 8px;\n padding-top: 16px;\n flex-wrap: nowrap;\n overflow-x: auto;\n padding-bottom: 8px;\n margin-bottom: -8px;\n }\n\n .result-item {\n padding: 10px 12px;\n min-width: 90px;\n }\n\n .result-icon {\n font-size: 20px;\n }\n\n .result-count {\n font-size: 18px;\n }\n\n .tabs {\n padding: 0 16px;\n }\n\n .tab {\n padding: 14px 16px;\n font-size: 13px;\n }\n\n .tab-content {\n padding: 16px;\n }\n\n .result-hero {\n padding: 32px 20px;\n }\n\n .result-hero-icon {\n font-size: 56px;\n }\n\n .result-hero-text h2 {\n font-size: 24px;\n }\n\n .stat-value {\n font-size: 20px;\n }\n\n .test-run-item {\n padding: 14px;\n }\n\n .run-sequence {\n width: 28px;\n height: 28px;\n font-size: 12px;\n }\n\n .run-icon {\n width: 36px;\n height: 36px;\n font-size: 14px;\n }\n\n .run-name {\n font-size: 13px;\n }\n\n .run-meta {\n gap: 10px;\n font-size: 11px;\n }\n\n .empty-state {\n padding: 40px 16px;\n }\n\n .empty-icon {\n width: 64px;\n height: 64px;\n }\n\n .empty-icon i {\n font-size: 28px;\n }\n\n .details-card {\n padding: 16px;\n }\n\n .details-grid {\n gap: 16px;\n }\n\n .keyboard-shortcuts, .shortcuts-toggle {\n display: none;\n }\n}\n\n/* ===================================\n Responsive Design - Small Mobile\n =================================== */\n@media (max-width: 480px) {\n .suite-run-header {\n padding: 12px;\n }\n\n .breadcrumb {\n font-size: 12px;\n margin-bottom: 12px;\n }\n\n .suite-run-icon {\n width: 44px;\n height: 44px;\n font-size: 18px;\n }\n\n .suite-run-info h1 {\n font-size: 18px;\n }\n\n .suite-run-meta {\n gap: 8px;\n }\n\n .status-badge {\n padding: 4px 10px;\n font-size: 11px;\n }\n\n .meta-tag {\n font-size: 11px;\n padding: 3px 8px;\n }\n\n .metrics-bar {\n grid-template-columns: 1fr 1fr;\n }\n\n .metric-card {\n padding: 10px;\n gap: 6px;\n }\n\n .metric-icon {\n width: 32px;\n height: 32px;\n font-size: 14px;\n }\n\n .metric-value {\n font-size: 14px;\n }\n\n .metric-label {\n font-size: 9px;\n }\n\n .result-item {\n padding: 8px 10px;\n min-width: 80px;\n gap: 8px;\n }\n\n .result-icon {\n font-size: 18px;\n }\n\n .result-count {\n font-size: 16px;\n }\n\n .result-label {\n font-size: 9px;\n }\n\n .tabs {\n padding: 0 12px;\n }\n\n .tab {\n padding: 12px 14px;\n gap: 6px;\n }\n\n .tab i {\n font-size: 14px;\n }\n\n .tab-content {\n padding: 12px;\n }\n\n .result-hero {\n padding: 24px 16px;\n }\n\n .result-hero-icon {\n font-size: 48px;\n margin-bottom: 16px;\n }\n\n .result-hero-text h2 {\n font-size: 20px;\n margin-bottom: 12px;\n }\n\n .stat-value {\n font-size: 18px;\n }\n\n .stat-label {\n font-size: 10px;\n }\n\n .progress-section {\n padding: 16px;\n }\n\n .progress-info {\n font-size: 14px;\n }\n\n .test-run-item {\n padding: 12px;\n gap: 10px;\n }\n\n .run-sequence {\n width: 24px;\n height: 24px;\n font-size: 11px;\n }\n\n .run-icon {\n width: 32px;\n height: 32px;\n font-size: 12px;\n border-radius: 8px;\n }\n\n .run-name {\n font-size: 12px;\n margin-bottom: 3px;\n }\n\n .run-meta {\n gap: 8px;\n font-size: 10px;\n }\n\n .empty-state {\n padding: 32px 12px;\n }\n\n .empty-state h4 {\n font-size: 16px;\n }\n\n .empty-state p {\n font-size: 13px;\n }\n\n .details-card {\n padding: 14px;\n }\n\n .details-card h3 {\n font-size: 14px;\n margin-bottom: 16px;\n }\n\n .detail-label {\n font-size: 10px;\n }\n\n .detail-value {\n font-size: 13px;\n }\n}\n\n/* ===================================\n Touch Device Optimizations\n =================================== */\n@media (hover: none) and (pointer: coarse) {\n .test-run-item {\n min-height: 64px;\n }\n\n .test-run-item:hover {\n transform: none;\n background: var(--suite-run-card);\n border-color: var(--suite-run-border);\n }\n\n .test-run-item:active {\n background: var(--suite-run-primary-light);\n border-color: #93c5fd;\n }\n\n .tab:hover {\n background: transparent;\n color: var(--suite-run-text-secondary);\n }\n\n .tab:active {\n background: var(--suite-run-primary-light);\n color: var(--suite-run-primary);\n }\n\n .metric-card:hover {\n transform: none;\n box-shadow: none;\n }\n\n .result-item:hover {\n transform: none;\n box-shadow: none;\n }\n\n .keyboard-shortcuts {\n display: none;\n }\n}\n\n/* ===================================\n Print Styles\n =================================== */\n@media print {\n .suite-run-header {\n background: white;\n box-shadow: none;\n border-bottom: 2px solid #000;\n }\n\n .tabs-container,\n .header-actions,\n .keyboard-shortcuts {\n display: none;\n }\n\n .tab-content {\n padding: 20px 0;\n }\n\n .result-hero,\n .test-run-item,\n .details-card {\n box-shadow: none;\n border: 1px solid #ccc;\n }\n}\n\n/* ===================================\n Dark Mode Support (Future)\n =================================== */\n@media (prefers-color-scheme: dark) {\n /* Ready for dark mode implementation */\n}\n\n/* ===================================\n Tags Bar - Sleek Inline Display\n =================================== */\n.tags-bar {\n margin-top: 16px;\n padding: 8px 14px;\n background: linear-gradient(135deg, rgba(59, 130, 246, 0.04) 0%, rgba(59, 130, 246, 0.08) 100%);\n border: 1px solid rgba(59, 130, 246, 0.15);\n border-radius: 8px;\n max-width: 600px;\n}\n\n.tags-bar-content {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n.tags-bar-label {\n color: var(--suite-run-text-secondary);\n font-size: 14px;\n}\n\n.tags-bar-label i {\n opacity: 0.6;\n}\n\n.tags-bar-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n flex: 1;\n}\n\n.tag-inline {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n background: var(--suite-run-primary-light);\n color: var(--suite-run-primary);\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n letter-spacing: 0.01em;\n}\n\n.tags-bar-empty {\n font-size: 12px;\n color: var(--suite-run-text-secondary);\n opacity: 0.7;\n flex: 1;\n}\n\n.tags-bar-edit {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n background: transparent;\n border: 1px dashed var(--suite-run-border);\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n color: var(--suite-run-text-secondary);\n cursor: pointer;\n transition: var(--suite-run-transition);\n}\n\n.tags-bar-edit:hover {\n border-color: var(--suite-run-primary);\n color: var(--suite-run-primary);\n background: var(--suite-run-primary-light);\n}\n\n.tags-bar-edit i {\n font-size: 10px;\n}\n\n/* ===================================\n Tags Editor Panel - Expanded Edit Mode\n =================================== */\n.tags-editor-panel {\n margin-top: 16px;\n background: var(--suite-run-card);\n border: 1px solid var(--suite-run-primary);\n border-radius: 10px;\n overflow: hidden;\n box-shadow: 0 4px 12px rgba(59, 130, 246, 0.1);\n max-width: 600px;\n}\n\n.tags-editor-header {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n background: var(--suite-run-primary-light);\n border-bottom: 1px solid rgba(59, 130, 246, 0.2);\n}\n\n.tags-editor-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--suite-run-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.tags-editor-body {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.tags-editor-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n min-height: 32px;\n}\n\n.tag-editable {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 8px 5px 12px;\n background: var(--suite-run-card);\n border: 1px solid var(--suite-run-primary);\n color: var(--suite-run-primary);\n border-radius: 14px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.tag-remove-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n background: transparent;\n border: none;\n color: var(--suite-run-primary);\n cursor: pointer;\n border-radius: 50%;\n font-size: 9px;\n opacity: 0.6;\n transition: var(--suite-run-transition);\n}\n\n.tag-remove-btn:hover {\n opacity: 1;\n background: var(--suite-run-danger-light);\n color: var(--suite-run-danger);\n}\n\n.tags-empty-hint {\n font-size: 12px;\n color: var(--suite-run-text-secondary);\n font-style: italic;\n padding: 4px 0;\n}\n\n.tags-editor-input {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.tag-text-input {\n flex: 1;\n padding: 10px 14px;\n border: 1px solid var(--suite-run-border);\n border-radius: 8px;\n font-size: 13px;\n background: var(--suite-run-neutral-light);\n}\n\n.tag-text-input:focus {\n outline: none;\n border-color: var(--suite-run-primary);\n background: var(--suite-run-card);\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n.tag-text-input::placeholder {\n color: var(--suite-run-text-secondary);\n opacity: 0.6;\n}\n\n.tags-editor-footer {\n display: flex;\n justify-content: flex-start;\n gap: 8px;\n padding: 12px 16px;\n background: var(--suite-run-neutral-light);\n border-top: 1px solid var(--suite-run-border);\n}\n\n/* ===================================\n Runs Toolbar\n =================================== */\n.runs-toolbar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n padding: 12px 16px;\n background: var(--suite-run-card);\n border: 1px solid var(--suite-run-border);\n border-radius: var(--suite-run-radius);\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.run-filters {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.filter-btn {\n padding: 6px 14px;\n border: 1px solid var(--suite-run-border);\n background: var(--suite-run-card);\n border-radius: 20px;\n font-size: 12px;\n font-weight: 500;\n color: var(--suite-run-text-secondary);\n cursor: pointer;\n transition: var(--suite-run-transition);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.filter-btn:hover {\n border-color: var(--suite-run-primary);\n color: var(--suite-run-primary);\n}\n\n.filter-btn.active {\n background: var(--suite-run-primary);\n border-color: var(--suite-run-primary);\n color: white;\n}\n\n.filter-btn.passed:hover,\n.filter-btn.passed.active {\n background: var(--suite-run-success);\n border-color: var(--suite-run-success);\n color: white;\n}\n\n.filter-btn.failed:hover,\n.filter-btn.failed.active {\n background: var(--suite-run-danger);\n border-color: var(--suite-run-danger);\n color: white;\n}\n\n.filter-btn.error:hover,\n.filter-btn.error.active {\n background: var(--suite-run-warning);\n border-color: var(--suite-run-warning);\n color: white;\n}\n\n.runs-actions {\n display: flex;\n gap: 8px;\n}\n\n/* ===================================\n Test Run Card (Expandable)\n =================================== */\n.test-run-card {\n background: var(--suite-run-card);\n border: 1px solid var(--suite-run-border);\n border-radius: var(--suite-run-radius);\n overflow: hidden;\n transition: var(--suite-run-transition);\n margin-bottom: 10px;\n}\n\n.test-run-card:hover {\n box-shadow: var(--suite-run-shadow);\n}\n\n.test-run-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n cursor: pointer;\n transition: var(--suite-run-transition);\n}\n\n.test-run-item:hover {\n background: var(--suite-run-primary-light);\n}\n\n.run-header-row {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 4px;\n}\n\n.run-feedback-indicator {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n background: var(--suite-run-info-light);\n color: var(--suite-run-info);\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.run-feedback-indicator i {\n font-size: 10px;\n}\n\n.run-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n margin-top: 6px;\n}\n\n.tag-mini {\n display: inline-flex;\n padding: 2px 8px;\n background: var(--suite-run-neutral-light);\n color: var(--suite-run-text-secondary);\n border-radius: 10px;\n font-size: 10px;\n font-weight: 500;\n}\n\n.tag-chip {\n display: inline-flex;\n align-items: center;\n padding: 3px 10px;\n background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);\n border: 1px solid #bfdbfe;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n color: #1d4ed8;\n}\n\n.run-expand {\n color: var(--suite-run-text-secondary);\n transition: var(--suite-run-transition);\n}\n\n.test-run-item:hover .run-expand {\n color: var(--suite-run-primary);\n}\n\n.run-cost {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.run-cost i {\n font-size: 10px;\n opacity: 0.7;\n}\n\n/* ===================================\n Inline Feedback\n =================================== */\n.inline-feedback {\n padding: 0 16px 16px;\n animation: slideDown 0.2s ease-out;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.feedback-divider {\n height: 1px;\n background: var(--suite-run-border);\n margin-bottom: 16px;\n}\n\n.feedback-section {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.feedback-label {\n font-size: 14px;\n font-weight: 600;\n color: var(--suite-run-text);\n}\n\n.inline-rating {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.rating-numbers {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.rating-btn {\n width: 36px;\n height: 36px;\n border: 2px solid var(--suite-run-border);\n border-radius: 8px;\n background: var(--suite-run-neutral-light);\n color: var(--suite-run-text-secondary);\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n transition: var(--suite-run-transition);\n}\n\n.rating-btn:hover,\n.rating-btn.hover {\n transform: scale(1.1);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n}\n\n.rating-btn.low:hover,\n.rating-btn.low.hover {\n border-color: var(--suite-run-danger);\n background: var(--suite-run-danger-light);\n color: var(--suite-run-danger);\n}\n\n.rating-btn.mid:hover,\n.rating-btn.mid.hover {\n border-color: var(--suite-run-warning);\n background: var(--suite-run-warning-light);\n color: var(--suite-run-warning);\n}\n\n.rating-btn.high:hover,\n.rating-btn.high.hover {\n border-color: var(--suite-run-success);\n background: var(--suite-run-success-light);\n color: var(--suite-run-success);\n}\n\n.rating-btn.selected {\n transform: scale(1.1);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n}\n\n.rating-btn.selected.low {\n border-color: var(--suite-run-danger);\n background: var(--suite-run-danger);\n color: white;\n}\n\n.rating-btn.selected.mid {\n border-color: var(--suite-run-warning);\n background: var(--suite-run-warning);\n color: white;\n}\n\n.rating-btn.selected.high {\n border-color: var(--suite-run-success);\n background: var(--suite-run-success);\n color: white;\n}\n\n.rating-info {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 14px;\n background: var(--suite-run-neutral-light);\n border-radius: 8px;\n}\n\n.rating-value {\n font-size: 18px;\n font-weight: 700;\n color: var(--suite-run-text);\n}\n\n.rating-label-text {\n font-size: 13px;\n color: var(--suite-run-text-secondary);\n}\n\n.correctness-row {\n display: flex;\n align-items: center;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.correctness-label {\n font-size: 13px;\n font-weight: 500;\n color: var(--suite-run-text);\n}\n\n.correctness-options {\n display: flex;\n gap: 16px;\n}\n\n.radio-opt {\n display: flex;\n align-items: center;\n gap: 6px;\n cursor: pointer;\n font-size: 13px;\n color: var(--suite-run-text-secondary);\n}\n\n.radio-opt input[type=\"radio\"] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n\n.comments-row {\n width: 100%;\n}\n\n.feedback-textarea {\n width: 100%;\n padding: 12px;\n border: 1px solid var(--suite-run-border);\n border-radius: 8px;\n font-size: 14px;\n font-family: inherit;\n resize: vertical;\n min-height: 80px;\n}\n\n.feedback-textarea:focus {\n outline: none;\n border-color: var(--suite-run-primary);\n box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1);\n}\n\n.feedback-actions {\n display: flex;\n justify-content: space-between;\n gap: 12px;\n padding-top: 8px;\n}\n\n/* ===================================\n Mobile Responsive Updates\n =================================== */\n@media (max-width: 768px) {\n .tags-bar {\n padding: 8px 12px;\n }\n\n .tags-bar-content {\n gap: 8px;\n }\n\n .tag-inline {\n padding: 3px 8px;\n font-size: 10px;\n }\n\n .tags-editor-panel {\n margin-top: 12px;\n }\n\n .tags-editor-body {\n padding: 12px;\n }\n\n .tags-editor-footer {\n padding: 10px 12px;\n }\n\n .runs-toolbar {\n flex-direction: column;\n align-items: stretch;\n }\n\n .run-filters {\n justify-content: center;\n }\n\n .runs-actions {\n justify-content: center;\n }\n\n .rating-numbers {\n justify-content: center;\n }\n\n .rating-btn {\n width: 32px;\n height: 32px;\n font-size: 12px;\n }\n\n .correctness-row {\n flex-direction: column;\n align-items: flex-start;\n gap: 8px;\n }\n\n .feedback-actions {\n flex-direction: column;\n }\n\n .feedback-actions button {\n width: 100%;\n }\n}\n\n/* ===================================\n Animations\n =================================== */\n@keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n}\n\n.result-hero.running .result-hero-icon {\n animation: pulse 2s ease-in-out infinite;\n}\n\n/* Tab content fade in */\n.overview-tab,\n.runs-tab,\n.details-tab,\n.analytics-tab {\n animation: fadeIn 0.3s ease;\n}\n\n/* ===================================\n Analytics Tab\n =================================== */\n.analytics-tab {\n max-width: 1200px;\n margin: 0 auto;\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.analytics-section {\n background: var(--suite-run-card);\n border-radius: var(--suite-run-radius);\n padding: 24px;\n box-shadow: var(--suite-run-shadow);\n}\n\n.analytics-section h3 {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0 0 20px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--suite-run-text);\n padding-bottom: 12px;\n border-bottom: 1px solid var(--suite-run-border);\n}\n\n.analytics-section h3 i {\n color: var(--suite-run-primary);\n}\n\n.analytics-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 16px;\n margin-bottom: 20px;\n padding-bottom: 12px;\n border-bottom: 1px solid var(--suite-run-border);\n}\n\n.analytics-header h3 {\n margin: 0;\n padding: 0;\n border: none;\n}\n\n.analytics-legend {\n display: flex;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.legend-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.legend-item.passed {\n color: var(--suite-run-success);\n}\n\n.legend-item.failed {\n color: var(--suite-run-danger);\n}\n\n.legend-item.error {\n color: var(--suite-run-warning);\n}\n\n.legend-item.skipped {\n color: var(--suite-run-neutral);\n}\n\n/* Performance Matrix */\n.performance-matrix {\n border: 1px solid var(--suite-run-border);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.matrix-row {\n display: grid;\n grid-template-columns: 2fr 120px 150px 100px 100px;\n border-bottom: 1px solid var(--suite-run-border);\n transition: var(--suite-run-transition);\n cursor: pointer;\n}\n\n.matrix-row:last-child {\n border-bottom: none;\n}\n\n.matrix-row:hover:not(.matrix-header-row) {\n background: var(--suite-run-primary-light);\n}\n\n.matrix-row.passed {\n border-left: 4px solid var(--suite-run-success);\n}\n\n.matrix-row.failed {\n border-left: 4px solid var(--suite-run-danger);\n}\n\n.matrix-row.error {\n border-left: 4px solid var(--suite-run-warning);\n}\n\n.matrix-row.skipped {\n border-left: 4px solid var(--suite-run-neutral);\n}\n\n.matrix-header-row {\n background: var(--suite-run-neutral-light);\n font-weight: 600;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--suite-run-text-secondary);\n cursor: default;\n}\n\n.matrix-cell {\n padding: 12px 16px;\n display: flex;\n align-items: center;\n}\n\n.test-name-cell {\n gap: 12px;\n}\n\n.test-sequence {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--suite-run-neutral-light);\n border-radius: 50%;\n font-size: 11px;\n font-weight: 600;\n color: var(--suite-run-text-secondary);\n flex-shrink: 0;\n}\n\n.test-name {\n font-weight: 500;\n color: var(--suite-run-text);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.status-indicator {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.status-indicator.status-passed {\n color: var(--suite-run-success);\n}\n\n.status-indicator.status-failed {\n color: var(--suite-run-danger);\n}\n\n.status-indicator.status-error {\n color: var(--suite-run-warning);\n}\n\n.status-indicator.status-skipped {\n color: var(--suite-run-neutral);\n}\n\n.status-indicator.status-pending {\n color: var(--suite-run-info);\n}\n\n.status-indicator.status-running {\n color: var(--suite-run-primary);\n}\n\n.score-bar {\n position: relative;\n width: 100%;\n height: 20px;\n background: var(--suite-run-neutral-light);\n border-radius: 10px;\n overflow: hidden;\n}\n\n.score-fill {\n height: 100%;\n border-radius: 10px;\n transition: width 0.3s ease;\n}\n\n.score-fill.high {\n background: linear-gradient(90deg, var(--suite-run-success) 0%, #34d399 100%);\n}\n\n.score-fill.medium {\n background: linear-gradient(90deg, var(--suite-run-warning) 0%, #fbbf24 100%);\n}\n\n.score-fill.low {\n background: linear-gradient(90deg, var(--suite-run-danger) 0%, #f87171 100%);\n}\n\n.score-text {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 11px;\n font-weight: 600;\n color: var(--suite-run-text);\n}\n\n.na-value {\n color: var(--suite-run-text-secondary);\n opacity: 0.6;\n}\n\n/* Summary Statistics Grid */\n.stats-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 16px;\n}\n\n.stat-card {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 20px;\n background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);\n border: 1px solid var(--suite-run-border);\n border-radius: 12px;\n transition: var(--suite-run-transition);\n}\n\n.stat-card:hover {\n transform: translateY(-2px);\n box-shadow: var(--suite-run-shadow);\n}\n\n.stat-icon {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-size: 20px;\n}\n\n.stat-icon.passed {\n background: var(--suite-run-success-light);\n color: var(--suite-run-success);\n}\n\n.stat-icon.failed {\n background: var(--suite-run-danger-light);\n color: var(--suite-run-danger);\n}\n\n.stat-icon.score {\n background: var(--suite-run-warning-light);\n color: var(--suite-run-warning);\n}\n\n.stat-icon.duration {\n background: var(--suite-run-primary-light);\n color: var(--suite-run-primary);\n}\n\n.stat-icon.cost {\n background: var(--suite-run-info-light);\n color: var(--suite-run-info);\n}\n\n.stat-content {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.stat-card .stat-value {\n font-size: 24px;\n font-weight: 700;\n color: var(--suite-run-text);\n}\n\n.stat-card .stat-label {\n font-size: 12px;\n font-weight: 500;\n color: var(--suite-run-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat-percent {\n font-size: 12px;\n color: var(--suite-run-text-secondary);\n}\n\n/* Responsive Analytics */\n@media (max-width: 768px) {\n .analytics-header {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .matrix-row {\n grid-template-columns: 1fr;\n gap: 8px;\n padding: 12px;\n }\n\n .matrix-header-row {\n display: none;\n }\n\n .matrix-cell {\n padding: 4px 0;\n }\n\n .test-name-cell::before,\n .status-cell::before,\n .score-cell::before,\n .duration-cell::before,\n .cost-cell::before {\n font-size: 10px;\n font-weight: 600;\n color: var(--suite-run-text-secondary);\n text-transform: uppercase;\n margin-right: 8px;\n min-width: 80px;\n }\n\n .status-cell::before { content: 'Status:'; }\n .score-cell::before { content: 'Score:'; }\n .duration-cell::before { content: 'Duration:'; }\n .cost-cell::before { content: 'Cost:'; }\n\n .stats-grid {\n grid-template-columns: 1fr 1fr;\n }\n\n .stat-card {\n padding: 16px;\n }\n\n .stat-icon {\n width: 40px;\n height: 40px;\n font-size: 16px;\n }\n\n .stat-card .stat-value {\n font-size: 20px;\n }\n}\n\n/* Focus States for Accessibility */\n.tab:focus-visible,\n.test-run-item:focus-visible,\nbutton:focus-visible {\n outline: 2px solid var(--suite-run-primary);\n outline-offset: 2px;\n}\n\n/* ===================================\n Analytics Loading State\n =================================== */\n.analytics-loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n padding: 60px 20px;\n color: var(--suite-run-text-secondary);\n}\n\n.analytics-loading i {\n font-size: 32px;\n color: var(--suite-run-primary);\n}\n\n/* ===================================\n Results Table\n =================================== */\n.results-table-wrapper {\n border: 1px solid var(--suite-run-border);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.results-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.results-table thead {\n background: var(--suite-run-neutral-light);\n}\n\n.results-table th {\n padding: 12px 16px;\n text-align: left;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--suite-run-text-secondary);\n border-bottom: 1px solid var(--suite-run-border);\n}\n\n.results-table td {\n padding: 12px 16px;\n border-bottom: 1px solid #f1f5f9;\n vertical-align: middle;\n}\n\n.results-table tbody tr:last-child td {\n border-bottom: none;\n}\n\n/* Column widths - Fixed columns fit content, name column takes remainder (max 50%) */\n.seq-col {\n width: 40px;\n min-width: 40px;\n text-align: center;\n white-space: nowrap;\n}\n\n.name-col {\n /* Take remaining space, but cap at 50% of table width */\n width: auto;\n max-width: 50%;\n}\n\n.status-col {\n width: 1%; /* Shrink to fit content */\n white-space: nowrap;\n}\n\n.score-col {\n width: 1%; /* Shrink to fit content */\n min-width: 120px; /* Score bar needs some minimum width */\n white-space: nowrap;\n}\n\n.duration-col {\n width: 1%; /* Shrink to fit content */\n white-space: nowrap;\n text-align: right;\n}\n\n.cost-col {\n width: 1%; /* Shrink to fit content */\n white-space: nowrap;\n text-align: right;\n}\n\n/* Result Row */\n.result-row {\n cursor: pointer;\n transition: var(--suite-run-transition);\n}\n\n.result-row:hover {\n background: var(--suite-run-primary-light);\n}\n\n.result-row.row-passed {\n border-left: 4px solid var(--suite-run-success);\n}\n\n.result-row.row-failed {\n border-left: 4px solid var(--suite-run-danger);\n}\n\n.result-row.row-error {\n border-left: 4px solid var(--suite-run-warning);\n}\n\n.result-row.row-skipped {\n border-left: 4px solid var(--suite-run-neutral);\n}\n\n/* Test Name Wrapper */\n.test-name-wrapper {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.test-name-wrapper .test-name {\n font-weight: 500;\n color: var(--suite-run-text);\n}\n\n.test-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n/* Score Display */\n.score-display {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.score-bar-mini {\n flex: 1;\n height: 6px;\n background: var(--suite-run-neutral-light);\n border-radius: 3px;\n overflow: hidden;\n min-width: 60px;\n}\n\n.score-bar-mini .score-fill {\n height: 100%;\n border-radius: 3px;\n transition: width 0.3s ease;\n}\n\n.score-bar-mini .score-fill.high {\n background: var(--suite-run-success);\n}\n\n.score-bar-mini .score-fill.medium {\n background: var(--suite-run-warning);\n}\n\n.score-bar-mini .score-fill.low {\n background: var(--suite-run-danger);\n}\n\n.score-display .score-text {\n position: static;\n transform: none;\n font-size: 12px;\n font-weight: 600;\n color: var(--suite-run-text);\n min-width: 35px;\n text-align: right;\n}\n\n/* Status Badge in Table */\n.results-table .status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.results-table .status-badge.status-passed {\n background: var(--suite-run-success-light);\n color: var(--suite-run-success);\n}\n\n.results-table .status-badge.status-failed {\n background: var(--suite-run-danger-light);\n color: var(--suite-run-danger);\n}\n\n.results-table .status-badge.status-error {\n background: var(--suite-run-warning-light);\n color: var(--suite-run-warning);\n}\n\n.results-table .status-badge.status-skipped {\n background: var(--suite-run-neutral-light);\n color: var(--suite-run-neutral);\n}\n\n.results-table .status-badge.status-pending {\n background: var(--suite-run-info-light);\n color: var(--suite-run-info);\n}\n\n.results-table .status-badge.status-running {\n background: var(--suite-run-primary-light);\n color: var(--suite-run-primary);\n}\n\n/* Responsive Results Table */\n@media (max-width: 768px) {\n .results-table-wrapper {\n overflow-x: auto;\n }\n\n .results-table {\n min-width: 600px;\n }\n\n .results-table th,\n .results-table td {\n padding: 10px 12px;\n }\n\n .name-col {\n min-width: 150px;\n }\n}\n\n/* ===================================\n High Contrast Mode\n =================================== */\n@media (prefers-contrast: high) {\n .status-badge,\n .status-inline {\n border: 2px solid currentColor;\n }\n\n .test-run-item {\n border-width: 2px;\n }\n\n .tab.active {\n border-bottom-width: 4px;\n }\n}\n\n/* ===================================\n Evaluation Summary\n =================================== */\n.evaluation-summary {\n margin-top: 20px;\n}\n\n.eval-summary-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n gap: 16px;\n}\n\n.eval-summary-card {\n background: var(--suite-run-card);\n border: 1px solid var(--suite-run-border);\n border-radius: var(--suite-run-radius);\n overflow: hidden;\n transition: var(--suite-run-transition);\n}\n\n.eval-summary-card:hover {\n box-shadow: var(--suite-run-shadow);\n}\n\n.eval-card-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n background: var(--suite-run-neutral-light);\n border-bottom: 1px solid var(--suite-run-border);\n font-size: 13px;\n font-weight: 600;\n color: var(--suite-run-text);\n}\n\n.eval-card-header i {\n color: var(--suite-run-primary);\n}\n\n.eval-card-body {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.eval-stat-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 12px;\n}\n\n.eval-stat-label {\n font-size: 12px;\n color: var(--suite-run-text-secondary);\n}\n\n.eval-stat-value {\n font-size: 14px;\n font-weight: 600;\n color: var(--suite-run-text);\n}\n\n.eval-stat-value.correct {\n color: var(--suite-run-success);\n}\n\n.eval-stat-value.incorrect {\n color: var(--suite-run-danger);\n font-weight: 500;\n font-size: 12px;\n}\n\n.eval-stat-value.error {\n color: var(--suite-run-danger);\n}\n\n.eval-stat-value.timeout {\n color: var(--suite-run-warning);\n}\n\n.eval-card-footer {\n padding: 10px 16px;\n background: var(--suite-run-warning-light);\n border-top: 1px solid rgba(245, 158, 11, 0.2);\n}\n\n.pending-badge {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--suite-run-warning);\n}\n\n.pending-badge i {\n font-size: 11px;\n}\n\n/* ===================================\n Needs Review Section\n =================================== */\n.needs-review-section {\n background: var(--suite-run-card);\n border: 1px solid var(--suite-run-border);\n border-radius: var(--suite-run-radius);\n overflow: hidden;\n}\n\n.needs-review-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 14px 20px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-bottom: 1px solid rgba(245, 158, 11, 0.3);\n}\n\n.needs-review-header h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #92400e;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.needs-review-header h3 i {\n font-size: 16px;\n}\n\n.review-count {\n font-size: 12px;\n font-weight: 500;\n color: #92400e;\n background: rgba(255, 255, 255, 0.6);\n padding: 2px 10px;\n border-radius: 12px;\n}\n\n.needs-review-list {\n padding: 8px;\n}\n\n.review-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n border-radius: 8px;\n cursor: pointer;\n transition: var(--suite-run-transition);\n}\n\n.review-item:hover {\n background: var(--suite-run-primary-light);\n}\n\n.review-item-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n font-size: 14px;\n flex-shrink: 0;\n}\n\n.review-item.high-priority .review-item-icon {\n background: var(--suite-run-danger-light);\n color: var(--suite-run-danger);\n}\n\n.review-item.medium-priority .review-item-icon {\n background: var(--suite-run-warning-light);\n color: var(--suite-run-warning);\n}\n\n.review-item:not(.high-priority):not(.medium-priority) .review-item-icon {\n background: var(--suite-run-neutral-light);\n color: var(--suite-run-neutral);\n}\n\n.review-item-content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.review-item-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--suite-run-text);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.review-item-reason {\n font-size: 11px;\n color: var(--suite-run-text-secondary);\n}\n\n.review-item-action {\n color: var(--suite-run-text-secondary);\n font-size: 12px;\n}\n\n.review-item:hover .review-item-action {\n color: var(--suite-run-primary);\n}\n\n.review-more {\n display: flex;\n justify-content: center;\n padding: 8px;\n border-top: 1px solid var(--suite-run-border);\n}\n\n/* Mobile Responsive for Evaluation */\n@media (max-width: 768px) {\n .eval-summary-grid {\n grid-template-columns: 1fr;\n }\n\n .eval-card-header {\n padding: 10px 14px;\n font-size: 12px;\n }\n\n .eval-card-body {\n padding: 12px 14px;\n }\n\n .needs-review-header {\n padding: 12px 16px;\n }\n\n .needs-review-header h3 {\n font-size: 13px;\n }\n\n .review-item {\n padding: 10px 12px;\n }\n\n .review-item-icon {\n width: 28px;\n height: 28px;\n font-size: 12px;\n }\n}\n\n/* ===================================\n Feedback Column in Analytics Table\n =================================== */\n.feedback-col {\n width: 1%; /* Shrink to fit content */\n white-space: nowrap;\n text-align: center;\n}\n\n.feedback-display {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n}\n\n.feedback-rating {\n font-size: 13px;\n font-weight: 600;\n padding: 2px 6px;\n border-radius: 4px;\n background: var(--suite-run-neutral-light);\n}\n\n.feedback-rating.low {\n background: var(--suite-run-danger-light);\n color: var(--suite-run-danger);\n}\n\n.feedback-rating.mid {\n background: var(--suite-run-warning-light);\n color: var(--suite-run-warning);\n}\n\n.feedback-rating.high {\n background: var(--suite-run-success-light);\n color: var(--suite-run-success);\n}\n\n.feedback-correctness i {\n font-size: 12px;\n}\n\n.feedback-correctness i.correct {\n color: var(--suite-run-success);\n}\n\n.feedback-correctness i.incorrect {\n color: var(--suite-run-danger);\n}\n\n.na-value.needs-review {\n color: var(--suite-run-warning);\n opacity: 0.7;\n}\n\n.na-value.needs-review i {\n font-size: 14px;\n}\n"] }]
|
|
2326
2326
|
}], null, { handleKeyboardShortcut: [{
|
|
2327
2327
|
type: HostListener,
|
|
2328
2328
|
args: ['document:keydown', ['$event']]
|
|
2329
2329
|
}] }); })();
|
|
2330
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(
|
|
2330
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJTestSuiteRunFormComponentExtended, { className: "MJTestSuiteRunFormComponentExtended", filePath: "src/lib/custom/Tests/test-suite-run-form.component.ts", lineNumber: 35 }); })();
|
|
2331
2331
|
//# sourceMappingURL=test-suite-run-form.component.js.map
|