@memberjunction/ng-dashboards 2.116.0 → 2.118.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.
Files changed (65) hide show
  1. package/dist/Testing/components/testing-analytics.component.d.ts +56 -0
  2. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -0
  3. package/dist/Testing/components/testing-analytics.component.js +746 -0
  4. package/dist/Testing/components/testing-analytics.component.js.map +1 -0
  5. package/dist/Testing/components/testing-execution.component.d.ts +59 -0
  6. package/dist/Testing/components/testing-execution.component.d.ts.map +1 -0
  7. package/dist/Testing/components/testing-execution.component.js +649 -0
  8. package/dist/Testing/components/testing-execution.component.js.map +1 -0
  9. package/dist/Testing/components/testing-feedback.component.d.ts +55 -0
  10. package/dist/Testing/components/testing-feedback.component.d.ts.map +1 -0
  11. package/dist/Testing/components/testing-feedback.component.js +789 -0
  12. package/dist/Testing/components/testing-feedback.component.js.map +1 -0
  13. package/dist/Testing/components/testing-overview.component.d.ts +30 -0
  14. package/dist/Testing/components/testing-overview.component.d.ts.map +1 -0
  15. package/dist/Testing/components/testing-overview.component.js +342 -0
  16. package/dist/Testing/components/testing-overview.component.js.map +1 -0
  17. package/dist/Testing/components/testing-version-comparison.component.d.ts +58 -0
  18. package/dist/Testing/components/testing-version-comparison.component.d.ts.map +1 -0
  19. package/dist/Testing/components/testing-version-comparison.component.js +801 -0
  20. package/dist/Testing/components/testing-version-comparison.component.js.map +1 -0
  21. package/dist/Testing/components/widgets/cost-display.component.d.ts +16 -0
  22. package/dist/Testing/components/widgets/cost-display.component.d.ts.map +1 -0
  23. package/dist/Testing/components/widgets/cost-display.component.js +88 -0
  24. package/dist/Testing/components/widgets/cost-display.component.js.map +1 -0
  25. package/dist/Testing/components/widgets/oracle-breakdown-table.component.d.ts +20 -0
  26. package/dist/Testing/components/widgets/oracle-breakdown-table.component.d.ts.map +1 -0
  27. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js +280 -0
  28. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js.map +1 -0
  29. package/dist/Testing/components/widgets/score-indicator.component.d.ts +13 -0
  30. package/dist/Testing/components/widgets/score-indicator.component.d.ts.map +1 -0
  31. package/dist/Testing/components/widgets/score-indicator.component.js +93 -0
  32. package/dist/Testing/components/widgets/score-indicator.component.js.map +1 -0
  33. package/dist/Testing/components/widgets/suite-tree.component.d.ts +28 -0
  34. package/dist/Testing/components/widgets/suite-tree.component.d.ts.map +1 -0
  35. package/dist/Testing/components/widgets/suite-tree.component.js +275 -0
  36. package/dist/Testing/components/widgets/suite-tree.component.js.map +1 -0
  37. package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts +34 -0
  38. package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts.map +1 -0
  39. package/dist/Testing/components/widgets/test-run-detail-panel.component.js +373 -0
  40. package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -0
  41. package/dist/Testing/components/widgets/test-run-dialog.component.d.ts +63 -0
  42. package/dist/Testing/components/widgets/test-run-dialog.component.d.ts.map +1 -0
  43. package/dist/Testing/components/widgets/test-run-dialog.component.js +989 -0
  44. package/dist/Testing/components/widgets/test-run-dialog.component.js.map +1 -0
  45. package/dist/Testing/components/widgets/test-status-badge.component.d.ts +10 -0
  46. package/dist/Testing/components/widgets/test-status-badge.component.d.ts.map +1 -0
  47. package/dist/Testing/components/widgets/test-status-badge.component.js +68 -0
  48. package/dist/Testing/components/widgets/test-status-badge.component.js.map +1 -0
  49. package/dist/Testing/services/testing-instrumentation.service.d.ts +152 -0
  50. package/dist/Testing/services/testing-instrumentation.service.d.ts.map +1 -0
  51. package/dist/Testing/services/testing-instrumentation.service.js +579 -0
  52. package/dist/Testing/services/testing-instrumentation.service.js.map +1 -0
  53. package/dist/Testing/testing-dashboard.component.d.ts +52 -0
  54. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -0
  55. package/dist/Testing/testing-dashboard.component.js +273 -0
  56. package/dist/Testing/testing-dashboard.component.js.map +1 -0
  57. package/dist/module.d.ts +33 -20
  58. package/dist/module.d.ts.map +1 -1
  59. package/dist/module.js +55 -6
  60. package/dist/module.js.map +1 -1
  61. package/dist/public-api.d.ts +1 -0
  62. package/dist/public-api.d.ts.map +1 -1
  63. package/dist/public-api.js +3 -0
  64. package/dist/public-api.js.map +1 -1
  65. package/package.json +12 -10
@@ -0,0 +1,373 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ import * as i2 from "@angular/forms";
5
+ import * as i3 from "./test-status-badge.component";
6
+ import * as i4 from "./score-indicator.component";
7
+ import * as i5 from "./cost-display.component";
8
+ import * as i6 from "./oracle-breakdown-table.component";
9
+ function TestRunDetailPanelComponent_div_0_button_15_Template(rf, ctx) { if (rf & 1) {
10
+ const _r2 = i0.ɵɵgetCurrentView();
11
+ i0.ɵɵelementStart(0, "button", 35);
12
+ i0.ɵɵlistener("click", function TestRunDetailPanelComponent_div_0_button_15_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onClose()); });
13
+ i0.ɵɵelement(1, "i", 36);
14
+ i0.ɵɵelementEnd();
15
+ } }
16
+ function TestRunDetailPanelComponent_div_0_div_31_Template(rf, ctx) { if (rf & 1) {
17
+ const _r4 = i0.ɵɵgetCurrentView();
18
+ i0.ɵɵelementStart(0, "div", 14)(1, "div", 15);
19
+ i0.ɵɵtext(2, "Target");
20
+ i0.ɵɵelementEnd();
21
+ i0.ɵɵelementStart(3, "div", 37);
22
+ i0.ɵɵlistener("click", function TestRunDetailPanelComponent_div_0_div_31_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onViewTarget()); });
23
+ i0.ɵɵelement(4, "i", 38);
24
+ i0.ɵɵtext(5);
25
+ i0.ɵɵelementEnd()();
26
+ } if (rf & 2) {
27
+ const ctx_r2 = i0.ɵɵnextContext(2);
28
+ i0.ɵɵadvance(5);
29
+ i0.ɵɵtextInterpolate1(" ", ctx_r2.testRun.targetType, " ");
30
+ } }
31
+ function TestRunDetailPanelComponent_div_0_div_32_Template(rf, ctx) { if (rf & 1) {
32
+ i0.ɵɵelementStart(0, "div", 39);
33
+ i0.ɵɵelement(1, "app-oracle-breakdown-table", 40);
34
+ i0.ɵɵelementEnd();
35
+ } if (rf & 2) {
36
+ const ctx_r2 = i0.ɵɵnextContext(2);
37
+ i0.ɵɵadvance();
38
+ i0.ɵɵproperty("results", ctx_r2.oracleResults);
39
+ } }
40
+ function TestRunDetailPanelComponent_div_0_div_33_div_7_Template(rf, ctx) { if (rf & 1) {
41
+ i0.ɵɵelementStart(0, "div", 46)(1, "pre", 47);
42
+ i0.ɵɵtext(2);
43
+ i0.ɵɵelementEnd()();
44
+ } if (rf & 2) {
45
+ const ctx_r2 = i0.ɵɵnextContext(3);
46
+ i0.ɵɵadvance(2);
47
+ i0.ɵɵtextInterpolate(ctx_r2.formatJSON(ctx_r2.resultDetails));
48
+ } }
49
+ function TestRunDetailPanelComponent_div_0_div_33_Template(rf, ctx) { if (rf & 1) {
50
+ const _r5 = i0.ɵɵgetCurrentView();
51
+ i0.ɵɵelementStart(0, "div", 41)(1, "div", 23)(2, "h4");
52
+ i0.ɵɵelement(3, "i", 42);
53
+ i0.ɵɵtext(4, " Result Details ");
54
+ i0.ɵɵelementEnd();
55
+ i0.ɵɵelementStart(5, "button", 43);
56
+ i0.ɵɵlistener("click", function TestRunDetailPanelComponent_div_0_div_33_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.toggleResultDetails()); });
57
+ i0.ɵɵelement(6, "i", 44);
58
+ i0.ɵɵelementEnd()();
59
+ i0.ɵɵtemplate(7, TestRunDetailPanelComponent_div_0_div_33_div_7_Template, 3, 1, "div", 45);
60
+ i0.ɵɵelementEnd();
61
+ } if (rf & 2) {
62
+ const ctx_r2 = i0.ɵɵnextContext(2);
63
+ i0.ɵɵadvance(6);
64
+ i0.ɵɵclassProp("fa-chevron-down", !ctx_r2.showResultDetails)("fa-chevron-up", ctx_r2.showResultDetails);
65
+ i0.ɵɵadvance();
66
+ i0.ɵɵproperty("ngIf", ctx_r2.showResultDetails);
67
+ } }
68
+ function TestRunDetailPanelComponent_div_0_Template(rf, ctx) { if (rf & 1) {
69
+ const _r1 = i0.ɵɵgetCurrentView();
70
+ i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "div", 3)(3, "h3");
71
+ i0.ɵɵtext(4);
72
+ i0.ɵɵelementEnd();
73
+ i0.ɵɵelementStart(5, "div", 4)(6, "span", 5);
74
+ i0.ɵɵelement(7, "i", 6);
75
+ i0.ɵɵtext(8);
76
+ i0.ɵɵelementEnd();
77
+ i0.ɵɵelementStart(9, "span", 7);
78
+ i0.ɵɵelement(10, "i", 8);
79
+ i0.ɵɵtext(11);
80
+ i0.ɵɵpipe(12, "date");
81
+ i0.ɵɵelementEnd()()();
82
+ i0.ɵɵelementStart(13, "div", 9);
83
+ i0.ɵɵelement(14, "app-test-status-badge", 10);
84
+ i0.ɵɵtemplate(15, TestRunDetailPanelComponent_div_0_button_15_Template, 2, 0, "button", 11);
85
+ i0.ɵɵelementEnd()();
86
+ i0.ɵɵelementStart(16, "div", 12)(17, "div", 13)(18, "div", 14)(19, "div", 15);
87
+ i0.ɵɵtext(20, "Score");
88
+ i0.ɵɵelementEnd();
89
+ i0.ɵɵelement(21, "app-score-indicator", 16);
90
+ i0.ɵɵelementEnd();
91
+ i0.ɵɵelementStart(22, "div", 14)(23, "div", 15);
92
+ i0.ɵɵtext(24, "Cost");
93
+ i0.ɵɵelementEnd();
94
+ i0.ɵɵelement(25, "app-cost-display", 17);
95
+ i0.ɵɵelementEnd();
96
+ i0.ɵɵelementStart(26, "div", 14)(27, "div", 15);
97
+ i0.ɵɵtext(28, "Duration");
98
+ i0.ɵɵelementEnd();
99
+ i0.ɵɵelementStart(29, "div", 18);
100
+ i0.ɵɵtext(30);
101
+ i0.ɵɵelementEnd()();
102
+ i0.ɵɵtemplate(31, TestRunDetailPanelComponent_div_0_div_31_Template, 6, 1, "div", 19);
103
+ i0.ɵɵelementEnd();
104
+ i0.ɵɵtemplate(32, TestRunDetailPanelComponent_div_0_div_32_Template, 2, 1, "div", 20)(33, TestRunDetailPanelComponent_div_0_div_33_Template, 8, 5, "div", 21);
105
+ i0.ɵɵelementStart(34, "div", 22)(35, "div", 23)(36, "h4");
106
+ i0.ɵɵelement(37, "i", 24);
107
+ i0.ɵɵtext(38, " Human Feedback ");
108
+ i0.ɵɵelementEnd()();
109
+ i0.ɵɵelementStart(39, "div", 25)(40, "div", 26)(41, "div", 27)(42, "label");
110
+ i0.ɵɵtext(43, "Rating (1-10)");
111
+ i0.ɵɵelementEnd();
112
+ i0.ɵɵelementStart(44, "input", 28);
113
+ i0.ɵɵtwoWayListener("ngModelChange", function TestRunDetailPanelComponent_div_0_Template_input_ngModelChange_44_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.feedbackRating, $event) || (ctx_r2.feedbackRating = $event); return i0.ɵɵresetView($event); });
114
+ i0.ɵɵelementEnd()();
115
+ i0.ɵɵelementStart(45, "div", 27)(46, "label");
116
+ i0.ɵɵtext(47, "Is Correct?");
117
+ i0.ɵɵelementEnd();
118
+ i0.ɵɵelementStart(48, "div", 29)(49, "label", 30)(50, "input", 31);
119
+ i0.ɵɵtwoWayListener("ngModelChange", function TestRunDetailPanelComponent_div_0_Template_input_ngModelChange_50_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.feedbackIsCorrect, $event) || (ctx_r2.feedbackIsCorrect = $event); return i0.ɵɵresetView($event); });
120
+ i0.ɵɵelementEnd();
121
+ i0.ɵɵelementStart(51, "span");
122
+ i0.ɵɵtext(52, "Yes, the automated result is correct");
123
+ i0.ɵɵelementEnd()()()()();
124
+ i0.ɵɵelementStart(53, "div", 27)(54, "label");
125
+ i0.ɵɵtext(55, "Comments");
126
+ i0.ɵɵelementEnd();
127
+ i0.ɵɵelementStart(56, "textarea", 32);
128
+ i0.ɵɵtwoWayListener("ngModelChange", function TestRunDetailPanelComponent_div_0_Template_textarea_ngModelChange_56_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.feedbackComments, $event) || (ctx_r2.feedbackComments = $event); return i0.ɵɵresetView($event); });
129
+ i0.ɵɵelementEnd()();
130
+ i0.ɵɵelementStart(57, "button", 33);
131
+ i0.ɵɵlistener("click", function TestRunDetailPanelComponent_div_0_Template_button_click_57_listener() { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onSubmitFeedback()); });
132
+ i0.ɵɵelement(58, "i", 34);
133
+ i0.ɵɵtext(59);
134
+ i0.ɵɵelementEnd()()()()();
135
+ } if (rf & 2) {
136
+ const ctx_r2 = i0.ɵɵnextContext();
137
+ i0.ɵɵadvance(4);
138
+ i0.ɵɵtextInterpolate(ctx_r2.testRun.testName);
139
+ i0.ɵɵadvance(4);
140
+ i0.ɵɵtextInterpolate1(" ", ctx_r2.testRun.testType, " ");
141
+ i0.ɵɵadvance(3);
142
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(12, 19, ctx_r2.testRun.runDateTime, "medium"), " ");
143
+ i0.ɵɵadvance(3);
144
+ i0.ɵɵproperty("status", ctx_r2.testRun.status);
145
+ i0.ɵɵadvance();
146
+ i0.ɵɵproperty("ngIf", ctx_r2.closeable);
147
+ i0.ɵɵadvance(6);
148
+ i0.ɵɵproperty("score", ctx_r2.testRun.score)("showBar", true)("showIcon", true);
149
+ i0.ɵɵadvance(4);
150
+ i0.ɵɵproperty("cost", ctx_r2.testRun.cost)("showIcon", true);
151
+ i0.ɵɵadvance(5);
152
+ i0.ɵɵtextInterpolate(ctx_r2.formatDuration(ctx_r2.testRun.duration));
153
+ i0.ɵɵadvance();
154
+ i0.ɵɵproperty("ngIf", ctx_r2.testRun.targetType);
155
+ i0.ɵɵadvance();
156
+ i0.ɵɵproperty("ngIf", ctx_r2.oracleResults && ctx_r2.oracleResults.length > 0);
157
+ i0.ɵɵadvance();
158
+ i0.ɵɵproperty("ngIf", ctx_r2.resultDetails);
159
+ i0.ɵɵadvance(11);
160
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r2.feedbackRating);
161
+ i0.ɵɵadvance(6);
162
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r2.feedbackIsCorrect);
163
+ i0.ɵɵadvance(6);
164
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r2.feedbackComments);
165
+ i0.ɵɵadvance();
166
+ i0.ɵɵproperty("disabled", ctx_r2.submittingFeedback);
167
+ i0.ɵɵadvance(2);
168
+ i0.ɵɵtextInterpolate1(" ", ctx_r2.submittingFeedback ? "Submitting..." : "Submit Feedback", " ");
169
+ } }
170
+ export class TestRunDetailPanelComponent {
171
+ testRun;
172
+ oracleResults = [];
173
+ resultDetails = null;
174
+ closeable = true;
175
+ close = new EventEmitter();
176
+ viewTarget = new EventEmitter();
177
+ submitFeedback = new EventEmitter();
178
+ showResultDetails = false;
179
+ feedbackRating = 5;
180
+ feedbackIsCorrect = true;
181
+ feedbackComments = '';
182
+ submittingFeedback = false;
183
+ formatDuration(milliseconds) {
184
+ if (milliseconds < 1000) {
185
+ return `${milliseconds}ms`;
186
+ }
187
+ const seconds = Math.floor(milliseconds / 1000);
188
+ const minutes = Math.floor(seconds / 60);
189
+ if (minutes > 0) {
190
+ return `${minutes}m ${seconds % 60}s`;
191
+ }
192
+ return `${seconds}s`;
193
+ }
194
+ formatJSON(obj) {
195
+ try {
196
+ return JSON.stringify(obj, null, 2);
197
+ }
198
+ catch (error) {
199
+ return String(obj);
200
+ }
201
+ }
202
+ toggleResultDetails() {
203
+ this.showResultDetails = !this.showResultDetails;
204
+ }
205
+ onClose() {
206
+ this.close.emit();
207
+ }
208
+ onViewTarget() {
209
+ if (this.testRun.targetType && this.testRun.targetLogID) {
210
+ this.viewTarget.emit({
211
+ type: this.testRun.targetType,
212
+ id: this.testRun.targetLogID
213
+ });
214
+ }
215
+ }
216
+ async onSubmitFeedback() {
217
+ this.submittingFeedback = true;
218
+ this.submitFeedback.emit({
219
+ rating: this.feedbackRating,
220
+ isCorrect: this.feedbackIsCorrect,
221
+ comments: this.feedbackComments
222
+ });
223
+ // Reset after submission
224
+ setTimeout(() => {
225
+ this.submittingFeedback = false;
226
+ this.feedbackRating = 5;
227
+ this.feedbackIsCorrect = true;
228
+ this.feedbackComments = '';
229
+ }, 1000);
230
+ }
231
+ static ɵfac = function TestRunDetailPanelComponent_Factory(t) { return new (t || TestRunDetailPanelComponent)(); };
232
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TestRunDetailPanelComponent, selectors: [["app-test-run-detail-panel"]], inputs: { testRun: "testRun", oracleResults: "oracleResults", resultDetails: "resultDetails", closeable: "closeable" }, outputs: { close: "close", viewTarget: "viewTarget", submitFeedback: "submitFeedback" }, decls: 1, vars: 1, consts: [["class", "test-run-detail-panel", 4, "ngIf"], [1, "test-run-detail-panel"], [1, "detail-header"], [1, "header-left"], [1, "header-meta"], [1, "test-type"], [1, "fa-solid", "fa-tag"], [1, "run-time"], [1, "fa-solid", "fa-clock"], [1, "header-right"], [3, "status"], ["class", "close-btn", 3, "click", 4, "ngIf"], [1, "detail-content"], [1, "metrics-section"], [1, "metric-card"], [1, "metric-label"], [3, "score", "showBar", "showIcon"], [3, "cost", "showIcon"], [1, "metric-value"], ["class", "metric-card", 4, "ngIf"], ["class", "oracle-section", 4, "ngIf"], ["class", "details-section", 4, "ngIf"], [1, "feedback-section"], [1, "section-header"], [1, "fa-solid", "fa-comment-dots"], [1, "feedback-form"], [1, "form-row"], [1, "form-group"], ["type", "number", "min", "1", "max", "10", 1, "rating-input", 3, "ngModelChange", "ngModel"], [1, "checkbox-group"], [1, "checkbox-label"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], ["rows", "3", "placeholder", "Enter your feedback comments...", 1, "comments-textarea", 3, "ngModelChange", "ngModel"], [1, "submit-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-paper-plane"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "metric-value", "target-link", 3, "click"], [1, "fa-solid", "fa-external-link-alt"], [1, "oracle-section"], [3, "results"], [1, "details-section"], [1, "fa-solid", "fa-file-alt"], [1, "toggle-btn", 3, "click"], [1, "fa-solid"], ["class", "details-content", 4, "ngIf"], [1, "details-content"], [1, "json-viewer"]], template: function TestRunDetailPanelComponent_Template(rf, ctx) { if (rf & 1) {
233
+ i0.ɵɵtemplate(0, TestRunDetailPanelComponent_div_0_Template, 60, 22, "div", 0);
234
+ } if (rf & 2) {
235
+ i0.ɵɵproperty("ngIf", ctx.testRun);
236
+ } }, dependencies: [i1.NgIf, i2.DefaultValueAccessor, i2.NumberValueAccessor, i2.CheckboxControlValueAccessor, i2.NgControlStatus, i2.MinValidator, i2.MaxValidator, i2.NgModel, i3.TestStatusBadgeComponent, i4.ScoreIndicatorComponent, i5.CostDisplayComponent, i6.OracleBreakdownTableComponent, i1.DatePipe], styles: [".test-run-detail-panel[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n }\n\n .detail-header[_ngcontent-%COMP%] {\n padding: 20px;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n }\n\n .header-left[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n }\n\n .header-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n font-size: 12px;\n opacity: 0.9;\n }\n\n .header-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .header-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .close-btn[_ngcontent-%COMP%] {\n background: rgba(255, 255, 255, 0.2);\n border: none;\n color: white;\n padding: 8px 12px;\n border-radius: 4px;\n cursor: pointer;\n transition: background 0.2s ease;\n }\n\n .close-btn[_ngcontent-%COMP%]:hover {\n background: rgba(255, 255, 255, 0.3);\n }\n\n .detail-content[_ngcontent-%COMP%] {\n padding: 20px;\n }\n\n .metrics-section[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n }\n\n .metric-card[_ngcontent-%COMP%] {\n background: #f8f9fa;\n padding: 16px;\n border-radius: 8px;\n border-left: 4px solid #2196f3;\n }\n\n .metric-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #666;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 8px;\n }\n\n .metric-value[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: #333;\n }\n\n .target-link[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n color: #2196f3;\n cursor: pointer;\n font-size: 14px;\n }\n\n .target-link[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n }\n\n .oracle-section[_ngcontent-%COMP%], \n .details-section[_ngcontent-%COMP%], \n .feedback-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n }\n\n .section-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n padding-bottom: 8px;\n border-bottom: 1px solid #e0e0e0;\n }\n\n .section-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .section-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #2196f3;\n }\n\n .toggle-btn[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: #666;\n cursor: pointer;\n padding: 4px 8px;\n border-radius: 4px;\n transition: background 0.2s ease;\n }\n\n .toggle-btn[_ngcontent-%COMP%]:hover {\n background: #f0f0f0;\n }\n\n .details-content[_ngcontent-%COMP%] {\n margin-top: 12px;\n }\n\n .json-viewer[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n padding: 16px;\n font-size: 11px;\n line-height: 1.5;\n overflow-x: auto;\n max-height: 300px;\n overflow-y: auto;\n font-family: 'Courier New', monospace;\n }\n\n .feedback-form[_ngcontent-%COMP%] {\n background: #f8f9fa;\n padding: 16px;\n border-radius: 8px;\n }\n\n .form-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 2fr;\n gap: 16px;\n margin-bottom: 16px;\n }\n\n .form-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: #666;\n }\n\n .rating-input[_ngcontent-%COMP%] {\n padding: 8px 12px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 14px;\n }\n\n .checkbox-group[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n }\n\n .checkbox-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: #333;\n cursor: pointer;\n }\n\n .checkbox-label[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n }\n\n .comments-textarea[_ngcontent-%COMP%] {\n padding: 10px 12px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 13px;\n font-family: inherit;\n resize: vertical;\n }\n\n .submit-btn[_ngcontent-%COMP%] {\n background: #2196f3;\n color: white;\n border: none;\n padding: 10px 20px;\n border-radius: 4px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 8px;\n transition: background 0.2s ease;\n }\n\n .submit-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: #1976d2;\n }\n\n .submit-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n @media (max-width: 768px) {\n .form-row[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .metrics-section[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n }"] });
237
+ }
238
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TestRunDetailPanelComponent, [{
239
+ type: Component,
240
+ args: [{ selector: 'app-test-run-detail-panel', template: `
241
+ <div class="test-run-detail-panel" *ngIf="testRun">
242
+ <div class="detail-header">
243
+ <div class="header-left">
244
+ <h3>{{ testRun.testName }}</h3>
245
+ <div class="header-meta">
246
+ <span class="test-type">
247
+ <i class="fa-solid fa-tag"></i>
248
+ {{ testRun.testType }}
249
+ </span>
250
+ <span class="run-time">
251
+ <i class="fa-solid fa-clock"></i>
252
+ {{ testRun.runDateTime | date:'medium' }}
253
+ </span>
254
+ </div>
255
+ </div>
256
+ <div class="header-right">
257
+ <app-test-status-badge [status]="testRun.status"></app-test-status-badge>
258
+ <button class="close-btn" (click)="onClose()" *ngIf="closeable">
259
+ <i class="fa-solid fa-times"></i>
260
+ </button>
261
+ </div>
262
+ </div>
263
+
264
+ <div class="detail-content">
265
+ <!-- Main Metrics -->
266
+ <div class="metrics-section">
267
+ <div class="metric-card">
268
+ <div class="metric-label">Score</div>
269
+ <app-score-indicator [score]="testRun.score" [showBar]="true" [showIcon]="true"></app-score-indicator>
270
+ </div>
271
+ <div class="metric-card">
272
+ <div class="metric-label">Cost</div>
273
+ <app-cost-display [cost]="testRun.cost" [showIcon]="true"></app-cost-display>
274
+ </div>
275
+ <div class="metric-card">
276
+ <div class="metric-label">Duration</div>
277
+ <div class="metric-value">{{ formatDuration(testRun.duration) }}</div>
278
+ </div>
279
+ <div class="metric-card" *ngIf="testRun.targetType">
280
+ <div class="metric-label">Target</div>
281
+ <div class="metric-value target-link" (click)="onViewTarget()">
282
+ <i class="fa-solid fa-external-link-alt"></i>
283
+ {{ testRun.targetType }}
284
+ </div>
285
+ </div>
286
+ </div>
287
+
288
+ <!-- Oracle Breakdown -->
289
+ <div class="oracle-section" *ngIf="oracleResults && oracleResults.length > 0">
290
+ <app-oracle-breakdown-table [results]="oracleResults"></app-oracle-breakdown-table>
291
+ </div>
292
+
293
+ <!-- Result Details -->
294
+ <div class="details-section" *ngIf="resultDetails">
295
+ <div class="section-header">
296
+ <h4>
297
+ <i class="fa-solid fa-file-alt"></i>
298
+ Result Details
299
+ </h4>
300
+ <button class="toggle-btn" (click)="toggleResultDetails()">
301
+ <i class="fa-solid" [class.fa-chevron-down]="!showResultDetails" [class.fa-chevron-up]="showResultDetails"></i>
302
+ </button>
303
+ </div>
304
+ <div class="details-content" *ngIf="showResultDetails">
305
+ <pre class="json-viewer">{{ formatJSON(resultDetails) }}</pre>
306
+ </div>
307
+ </div>
308
+
309
+ <!-- Feedback Section -->
310
+ <div class="feedback-section">
311
+ <div class="section-header">
312
+ <h4>
313
+ <i class="fa-solid fa-comment-dots"></i>
314
+ Human Feedback
315
+ </h4>
316
+ </div>
317
+ <div class="feedback-form">
318
+ <div class="form-row">
319
+ <div class="form-group">
320
+ <label>Rating (1-10)</label>
321
+ <input
322
+ type="number"
323
+ [(ngModel)]="feedbackRating"
324
+ min="1"
325
+ max="10"
326
+ class="rating-input"
327
+ />
328
+ </div>
329
+ <div class="form-group">
330
+ <label>Is Correct?</label>
331
+ <div class="checkbox-group">
332
+ <label class="checkbox-label">
333
+ <input type="checkbox" [(ngModel)]="feedbackIsCorrect" />
334
+ <span>Yes, the automated result is correct</span>
335
+ </label>
336
+ </div>
337
+ </div>
338
+ </div>
339
+ <div class="form-group">
340
+ <label>Comments</label>
341
+ <textarea
342
+ [(ngModel)]="feedbackComments"
343
+ rows="3"
344
+ class="comments-textarea"
345
+ placeholder="Enter your feedback comments..."
346
+ ></textarea>
347
+ </div>
348
+ <button class="submit-btn" (click)="onSubmitFeedback()" [disabled]="submittingFeedback">
349
+ <i class="fa-solid fa-paper-plane"></i>
350
+ {{ submittingFeedback ? 'Submitting...' : 'Submit Feedback' }}
351
+ </button>
352
+ </div>
353
+ </div>
354
+ </div>
355
+ </div>
356
+ `, styles: ["\n .test-run-detail-panel {\n background: white;\n border-radius: 8px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n }\n\n .detail-header {\n padding: 20px;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n }\n\n .header-left h3 {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n }\n\n .header-meta {\n display: flex;\n gap: 16px;\n font-size: 12px;\n opacity: 0.9;\n }\n\n .header-meta span {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .header-right {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .close-btn {\n background: rgba(255, 255, 255, 0.2);\n border: none;\n color: white;\n padding: 8px 12px;\n border-radius: 4px;\n cursor: pointer;\n transition: background 0.2s ease;\n }\n\n .close-btn:hover {\n background: rgba(255, 255, 255, 0.3);\n }\n\n .detail-content {\n padding: 20px;\n }\n\n .metrics-section {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n }\n\n .metric-card {\n background: #f8f9fa;\n padding: 16px;\n border-radius: 8px;\n border-left: 4px solid #2196f3;\n }\n\n .metric-label {\n font-size: 11px;\n color: #666;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 8px;\n }\n\n .metric-value {\n font-size: 16px;\n font-weight: 600;\n color: #333;\n }\n\n .target-link {\n display: flex;\n align-items: center;\n gap: 6px;\n color: #2196f3;\n cursor: pointer;\n font-size: 14px;\n }\n\n .target-link:hover {\n text-decoration: underline;\n }\n\n .oracle-section,\n .details-section,\n .feedback-section {\n margin-bottom: 24px;\n }\n\n .section-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n padding-bottom: 8px;\n border-bottom: 1px solid #e0e0e0;\n }\n\n .section-header h4 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .section-header h4 i {\n color: #2196f3;\n }\n\n .toggle-btn {\n background: none;\n border: none;\n color: #666;\n cursor: pointer;\n padding: 4px 8px;\n border-radius: 4px;\n transition: background 0.2s ease;\n }\n\n .toggle-btn:hover {\n background: #f0f0f0;\n }\n\n .details-content {\n margin-top: 12px;\n }\n\n .json-viewer {\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n padding: 16px;\n font-size: 11px;\n line-height: 1.5;\n overflow-x: auto;\n max-height: 300px;\n overflow-y: auto;\n font-family: 'Courier New', monospace;\n }\n\n .feedback-form {\n background: #f8f9fa;\n padding: 16px;\n border-radius: 8px;\n }\n\n .form-row {\n display: grid;\n grid-template-columns: 1fr 2fr;\n gap: 16px;\n margin-bottom: 16px;\n }\n\n .form-group {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .form-group label {\n font-size: 12px;\n font-weight: 600;\n color: #666;\n }\n\n .rating-input {\n padding: 8px 12px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 14px;\n }\n\n .checkbox-group {\n display: flex;\n align-items: center;\n }\n\n .checkbox-label {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: #333;\n cursor: pointer;\n }\n\n .checkbox-label input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n }\n\n .comments-textarea {\n padding: 10px 12px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 13px;\n font-family: inherit;\n resize: vertical;\n }\n\n .submit-btn {\n background: #2196f3;\n color: white;\n border: none;\n padding: 10px 20px;\n border-radius: 4px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 8px;\n transition: background 0.2s ease;\n }\n\n .submit-btn:hover:not(:disabled) {\n background: #1976d2;\n }\n\n .submit-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n @media (max-width: 768px) {\n .form-row {\n grid-template-columns: 1fr;\n }\n\n .metrics-section {\n grid-template-columns: 1fr;\n }\n }\n "] }]
357
+ }], null, { testRun: [{
358
+ type: Input
359
+ }], oracleResults: [{
360
+ type: Input
361
+ }], resultDetails: [{
362
+ type: Input
363
+ }], closeable: [{
364
+ type: Input
365
+ }], close: [{
366
+ type: Output
367
+ }], viewTarget: [{
368
+ type: Output
369
+ }], submitFeedback: [{
370
+ type: Output
371
+ }] }); })();
372
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TestRunDetailPanelComponent, { className: "TestRunDetailPanelComponent", filePath: "src/Testing/components/widgets/test-run-detail-panel.component.ts", lineNumber: 382 }); })();
373
+ //# sourceMappingURL=test-run-detail-panel.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-run-detail-panel.component.js","sourceRoot":"","sources":["../../../../src/Testing/components/widgets/test-run-detail-panel.component.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import { OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
2
+ import { DialogRef } from '@progress/kendo-angular-dialog';
3
+ import { TestEntity, TestSuiteEntity } from '@memberjunction/core-entities';
4
+ import * as i0 from "@angular/core";
5
+ export declare class TestRunDialogComponent implements OnInit, OnDestroy {
6
+ private dialogRef;
7
+ private cdr;
8
+ private destroy$;
9
+ private testingClient;
10
+ private engine;
11
+ runMode: 'test' | 'suite';
12
+ searchText: string;
13
+ selectedTestId: string | null;
14
+ selectedSuiteId: string | null;
15
+ verbose: boolean;
16
+ parallel: boolean;
17
+ allTests: TestEntity[];
18
+ allSuites: TestSuiteEntity[];
19
+ filteredTests: TestEntity[];
20
+ filteredSuites: TestSuiteEntity[];
21
+ isRunning: boolean;
22
+ hasCompleted: boolean;
23
+ hasError: boolean;
24
+ progress: number;
25
+ executionTitle: string;
26
+ executionStatus: string;
27
+ result: any;
28
+ progressSteps: {
29
+ step: string;
30
+ label: string;
31
+ message: string;
32
+ active: boolean;
33
+ completed: boolean;
34
+ }[];
35
+ executionLog: Array<{
36
+ timestamp: Date;
37
+ message: string;
38
+ type: 'info' | 'success' | 'error';
39
+ }>;
40
+ get dialogTitle(): string;
41
+ constructor(dialogRef: DialogRef, cdr: ChangeDetectorRef);
42
+ ngOnInit(): Promise<void>;
43
+ ngOnDestroy(): void;
44
+ setRunMode(mode: 'test' | 'suite'): void;
45
+ filterItems(): void;
46
+ clearSearch(): void;
47
+ selectTest(testId: string): void;
48
+ selectSuite(suiteId: string): void;
49
+ canRun(): boolean;
50
+ runTest(): Promise<void>;
51
+ private executeTest;
52
+ private executeSuite;
53
+ private updateProgress;
54
+ private updateProgressStep;
55
+ private resetProgressSteps;
56
+ private completeAllSteps;
57
+ private addLogEntry;
58
+ resetDialog(): void;
59
+ onClose(): void;
60
+ static ɵfac: i0.ɵɵFactoryDeclaration<TestRunDialogComponent, never>;
61
+ static ɵcmp: i0.ɵɵComponentDeclaration<TestRunDialogComponent, "app-test-run-dialog", never, {}, {}, never, never, false, never>;
62
+ }
63
+ //# sourceMappingURL=test-run-dialog.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-run-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/Testing/components/widgets/test-run-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAA2B,MAAM,eAAe,CAAC;AACzG,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAK3D,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;;AAW5E,qBA02Ba,sBAAuB,YAAW,MAAM,EAAE,SAAS;IA8C5D,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,GAAG;IA9Cb,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,MAAM,CAAkB;IAGhC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAU;IACnC,UAAU,SAAM;IAChB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IACrC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IACtC,OAAO,UAAQ;IACf,QAAQ,UAAS;IAGjB,QAAQ,EAAE,UAAU,EAAE,CAAM;IAC5B,SAAS,EAAE,eAAe,EAAE,CAAM;IAClC,aAAa,EAAE,UAAU,EAAE,CAAM;IACjC,cAAc,EAAE,eAAe,EAAE,CAAM;IAGvC,SAAS,UAAS;IAClB,YAAY,UAAS;IACrB,QAAQ,UAAS;IACjB,QAAQ,SAAK;IACb,cAAc,SAAM;IACpB,eAAe,SAAM;IACrB,MAAM,EAAE,GAAG,CAAQ;IAEnB,aAAa;;;;;;QAMX;IAEF,YAAY,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAA;KAAE,CAAC,CAAM;IAEnG,IAAI,WAAW,IAAI,MAAM,CAKxB;gBAGS,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,iBAAiB;IAO1B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAY/B,WAAW,IAAI,IAAI;IAKnB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IASxC,WAAW,IAAI,IAAI;IAkBnB,WAAW,IAAI,IAAI;IAKnB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKhC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKlC,MAAM,IAAI,OAAO;IAKX,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YA2BhB,WAAW;YAgDX,YAAY;IAiD1B,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,kBAAkB;IA0B1B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,WAAW;IAanB,WAAW,IAAI,IAAI;IAiBnB,OAAO,IAAI,IAAI;yCA9UJ,sBAAsB;2CAAtB,sBAAsB;CAmVlC"}