@memberjunction/ng-core-entity-forms 2.117.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 (206) hide show
  1. package/dist/lib/custom/Tests/test-form.component.d.ts +53 -0
  2. package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -0
  3. package/dist/lib/custom/Tests/test-form.component.js +718 -0
  4. package/dist/lib/custom/Tests/test-form.component.js.map +1 -0
  5. package/dist/lib/custom/Tests/test-rubric-form.component.d.ts +16 -0
  6. package/dist/lib/custom/Tests/test-rubric-form.component.d.ts.map +1 -0
  7. package/dist/lib/custom/Tests/test-rubric-form.component.js +138 -0
  8. package/dist/lib/custom/Tests/test-rubric-form.component.js.map +1 -0
  9. package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts +17 -0
  10. package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts.map +1 -0
  11. package/dist/lib/custom/Tests/test-run-feedback-form.component.js +134 -0
  12. package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -0
  13. package/dist/lib/custom/Tests/test-run-form.component.d.ts +58 -0
  14. package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -0
  15. package/dist/lib/custom/Tests/test-run-form.component.js +921 -0
  16. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -0
  17. package/dist/lib/custom/Tests/test-suite-form.component.d.ts +32 -0
  18. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -0
  19. package/dist/lib/custom/Tests/test-suite-form.component.js +355 -0
  20. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -0
  21. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +36 -0
  22. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -0
  23. package/dist/lib/custom/Tests/test-suite-run-form.component.js +571 -0
  24. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -0
  25. package/dist/lib/custom/custom-forms.module.d.ts +29 -23
  26. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  27. package/dist/lib/custom/custom-forms.module.js +39 -3
  28. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  29. package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.d.ts.map +1 -1
  30. package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js +63 -45
  31. package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js.map +1 -1
  32. package/dist/lib/generated/Entities/AIAgentConfiguration/aiagentconfiguration.form.component.d.ts +11 -0
  33. package/dist/lib/generated/Entities/AIAgentConfiguration/aiagentconfiguration.form.component.d.ts.map +1 -0
  34. package/dist/lib/generated/Entities/AIAgentConfiguration/aiagentconfiguration.form.component.js +79 -0
  35. package/dist/lib/generated/Entities/AIAgentConfiguration/aiagentconfiguration.form.component.js.map +1 -0
  36. package/dist/lib/generated/Entities/AIAgentExample/aiagentexample.form.component.d.ts.map +1 -1
  37. package/dist/lib/generated/Entities/AIAgentExample/aiagentexample.form.component.js +2 -12
  38. package/dist/lib/generated/Entities/AIAgentExample/aiagentexample.form.component.js.map +1 -1
  39. package/dist/lib/generated/Entities/AIAgentNote/aiagentnote.form.component.d.ts.map +1 -1
  40. package/dist/lib/generated/Entities/AIAgentNote/aiagentnote.form.component.js +2 -12
  41. package/dist/lib/generated/Entities/AIAgentNote/aiagentnote.form.component.js.map +1 -1
  42. package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js +32 -30
  43. package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js.map +1 -1
  44. package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.d.ts.map +1 -1
  45. package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.js +6 -16
  46. package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.js.map +1 -1
  47. package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.d.ts.map +1 -1
  48. package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js +37 -19
  49. package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js.map +1 -1
  50. package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.js +17 -15
  51. package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.js.map +1 -1
  52. package/dist/lib/generated/Entities/AIResultCache/airesultcache.form.component.d.ts.map +1 -1
  53. package/dist/lib/generated/Entities/AIResultCache/airesultcache.form.component.js +3 -11
  54. package/dist/lib/generated/Entities/AIResultCache/airesultcache.form.component.js.map +1 -1
  55. package/dist/lib/generated/Entities/ArtifactType/artifacttype.form.component.d.ts.map +1 -1
  56. package/dist/lib/generated/Entities/ArtifactType/artifacttype.form.component.js +9 -13
  57. package/dist/lib/generated/Entities/ArtifactType/artifacttype.form.component.js.map +1 -1
  58. package/dist/lib/generated/Entities/CommunicationLog/communicationlog.form.component.d.ts.map +1 -1
  59. package/dist/lib/generated/Entities/CommunicationLog/communicationlog.form.component.js +3 -11
  60. package/dist/lib/generated/Entities/CommunicationLog/communicationlog.form.component.js.map +1 -1
  61. package/dist/lib/generated/Entities/CompanyIntegrationRunAPILog/companyintegrationrunapilog.form.component.d.ts.map +1 -1
  62. package/dist/lib/generated/Entities/CompanyIntegrationRunAPILog/companyintegrationrunapilog.form.component.js +3 -11
  63. package/dist/lib/generated/Entities/CompanyIntegrationRunAPILog/companyintegrationrunapilog.form.component.js.map +1 -1
  64. package/dist/lib/generated/Entities/ContentFileType/contentfiletype.form.component.d.ts.map +1 -1
  65. package/dist/lib/generated/Entities/ContentFileType/contentfiletype.form.component.js +14 -20
  66. package/dist/lib/generated/Entities/ContentFileType/contentfiletype.form.component.js.map +1 -1
  67. package/dist/lib/generated/Entities/ContentItem/contentitem.form.component.js +13 -13
  68. package/dist/lib/generated/Entities/ContentItem/contentitem.form.component.js.map +1 -1
  69. package/dist/lib/generated/Entities/ContentItemAttribute/contentitemattribute.form.component.d.ts.map +1 -1
  70. package/dist/lib/generated/Entities/ContentItemAttribute/contentitemattribute.form.component.js +9 -15
  71. package/dist/lib/generated/Entities/ContentItemAttribute/contentitemattribute.form.component.js.map +1 -1
  72. package/dist/lib/generated/Entities/ContentItemTag/contentitemtag.form.component.js +10 -10
  73. package/dist/lib/generated/Entities/ContentItemTag/contentitemtag.form.component.js.map +1 -1
  74. package/dist/lib/generated/Entities/ContentProcessRun/contentprocessrun.form.component.d.ts.map +1 -1
  75. package/dist/lib/generated/Entities/ContentProcessRun/contentprocessrun.form.component.js +8 -14
  76. package/dist/lib/generated/Entities/ContentProcessRun/contentprocessrun.form.component.js.map +1 -1
  77. package/dist/lib/generated/Entities/ContentSource/contentsource.form.component.js +13 -13
  78. package/dist/lib/generated/Entities/ContentSource/contentsource.form.component.js.map +1 -1
  79. package/dist/lib/generated/Entities/ContentSourceParam/contentsourceparam.form.component.d.ts.map +1 -1
  80. package/dist/lib/generated/Entities/ContentSourceParam/contentsourceparam.form.component.js +8 -14
  81. package/dist/lib/generated/Entities/ContentSourceParam/contentsourceparam.form.component.js.map +1 -1
  82. package/dist/lib/generated/Entities/ContentSourceType/contentsourcetype.form.component.d.ts.map +1 -1
  83. package/dist/lib/generated/Entities/ContentSourceType/contentsourcetype.form.component.js +14 -20
  84. package/dist/lib/generated/Entities/ContentSourceType/contentsourcetype.form.component.js.map +1 -1
  85. package/dist/lib/generated/Entities/ContentSourceTypeParam/contentsourcetypeparam.form.component.d.ts.map +1 -1
  86. package/dist/lib/generated/Entities/ContentSourceTypeParam/contentsourcetypeparam.form.component.js +4 -16
  87. package/dist/lib/generated/Entities/ContentSourceTypeParam/contentsourcetypeparam.form.component.js.map +1 -1
  88. package/dist/lib/generated/Entities/ContentType/contenttype.form.component.d.ts.map +1 -1
  89. package/dist/lib/generated/Entities/ContentType/contenttype.form.component.js +17 -23
  90. package/dist/lib/generated/Entities/ContentType/contenttype.form.component.js.map +1 -1
  91. package/dist/lib/generated/Entities/ContentTypeAttribute/contenttypeattribute.form.component.d.ts.map +1 -1
  92. package/dist/lib/generated/Entities/ContentTypeAttribute/contenttypeattribute.form.component.js +5 -17
  93. package/dist/lib/generated/Entities/ContentTypeAttribute/contenttypeattribute.form.component.js.map +1 -1
  94. package/dist/lib/generated/Entities/Conversation/conversation.form.component.d.ts.map +1 -1
  95. package/dist/lib/generated/Entities/Conversation/conversation.form.component.js +40 -32
  96. package/dist/lib/generated/Entities/Conversation/conversation.form.component.js.map +1 -1
  97. package/dist/lib/generated/Entities/ConversationDetail/conversationdetail.form.component.js +64 -56
  98. package/dist/lib/generated/Entities/ConversationDetail/conversationdetail.form.component.js.map +1 -1
  99. package/dist/lib/generated/Entities/ConversationDetailArtifact/conversationdetailartifact.form.component.d.ts.map +1 -1
  100. package/dist/lib/generated/Entities/ConversationDetailArtifact/conversationdetailartifact.form.component.js +3 -11
  101. package/dist/lib/generated/Entities/ConversationDetailArtifact/conversationdetailartifact.form.component.js.map +1 -1
  102. package/dist/lib/generated/Entities/ConversationDetailRating/conversationdetailrating.form.component.d.ts.map +1 -1
  103. package/dist/lib/generated/Entities/ConversationDetailRating/conversationdetailrating.form.component.js +3 -11
  104. package/dist/lib/generated/Entities/ConversationDetailRating/conversationdetailrating.form.component.js.map +1 -1
  105. package/dist/lib/generated/Entities/DuplicateRunDetail/duplicaterundetail.form.component.d.ts.map +1 -1
  106. package/dist/lib/generated/Entities/DuplicateRunDetail/duplicaterundetail.form.component.js +8 -16
  107. package/dist/lib/generated/Entities/DuplicateRunDetail/duplicaterundetail.form.component.js.map +1 -1
  108. package/dist/lib/generated/Entities/DuplicateRunDetailMatch/duplicaterundetailmatch.form.component.d.ts.map +1 -1
  109. package/dist/lib/generated/Entities/DuplicateRunDetailMatch/duplicaterundetailmatch.form.component.js +2 -12
  110. package/dist/lib/generated/Entities/DuplicateRunDetailMatch/duplicaterundetailmatch.form.component.js.map +1 -1
  111. package/dist/lib/generated/Entities/EmployeeCompanyIntegration/employeecompanyintegration.form.component.d.ts.map +1 -1
  112. package/dist/lib/generated/Entities/EmployeeCompanyIntegration/employeecompanyintegration.form.component.js +3 -11
  113. package/dist/lib/generated/Entities/EmployeeCompanyIntegration/employeecompanyintegration.form.component.js.map +1 -1
  114. package/dist/lib/generated/Entities/EmployeeRole/employeerole.form.component.d.ts.map +1 -1
  115. package/dist/lib/generated/Entities/EmployeeRole/employeerole.form.component.js +4 -12
  116. package/dist/lib/generated/Entities/EmployeeRole/employeerole.form.component.js.map +1 -1
  117. package/dist/lib/generated/Entities/EmployeeSkill/employeeskill.form.component.d.ts.map +1 -1
  118. package/dist/lib/generated/Entities/EmployeeSkill/employeeskill.form.component.js +3 -11
  119. package/dist/lib/generated/Entities/EmployeeSkill/employeeskill.form.component.js.map +1 -1
  120. package/dist/lib/generated/Entities/EntityActionFilter/entityactionfilter.form.component.d.ts.map +1 -1
  121. package/dist/lib/generated/Entities/EntityActionFilter/entityactionfilter.form.component.js +2 -12
  122. package/dist/lib/generated/Entities/EntityActionFilter/entityactionfilter.form.component.js.map +1 -1
  123. package/dist/lib/generated/Entities/EntityActionInvocation/entityactioninvocation.form.component.d.ts.map +1 -1
  124. package/dist/lib/generated/Entities/EntityActionInvocation/entityactioninvocation.form.component.js +3 -11
  125. package/dist/lib/generated/Entities/EntityActionInvocation/entityactioninvocation.form.component.js.map +1 -1
  126. package/dist/lib/generated/Entities/EntityActionParam/entityactionparam.form.component.d.ts.map +1 -1
  127. package/dist/lib/generated/Entities/EntityActionParam/entityactionparam.form.component.js +3 -11
  128. package/dist/lib/generated/Entities/EntityActionParam/entityactionparam.form.component.js.map +1 -1
  129. package/dist/lib/generated/Entities/EntityCommunicationField/entitycommunicationfield.form.component.d.ts.map +1 -1
  130. package/dist/lib/generated/Entities/EntityCommunicationField/entitycommunicationfield.form.component.js +3 -11
  131. package/dist/lib/generated/Entities/EntityCommunicationField/entitycommunicationfield.form.component.js.map +1 -1
  132. package/dist/lib/generated/Entities/EntityFieldValue/entityfieldvalue.form.component.d.ts.map +1 -1
  133. package/dist/lib/generated/Entities/EntityFieldValue/entityfieldvalue.form.component.js +10 -15
  134. package/dist/lib/generated/Entities/EntityFieldValue/entityfieldvalue.form.component.js.map +1 -1
  135. package/dist/lib/generated/Entities/ErrorLog/errorlog.form.component.d.ts.map +1 -1
  136. package/dist/lib/generated/Entities/ErrorLog/errorlog.form.component.js +2 -12
  137. package/dist/lib/generated/Entities/ErrorLog/errorlog.form.component.js.map +1 -1
  138. package/dist/lib/generated/Entities/Recommendation/recommendation.form.component.d.ts.map +1 -1
  139. package/dist/lib/generated/Entities/Recommendation/recommendation.form.component.js +8 -16
  140. package/dist/lib/generated/Entities/Recommendation/recommendation.form.component.js.map +1 -1
  141. package/dist/lib/generated/Entities/RecommendationItem/recommendationitem.form.component.d.ts.map +1 -1
  142. package/dist/lib/generated/Entities/RecommendationItem/recommendationitem.form.component.js +3 -11
  143. package/dist/lib/generated/Entities/RecommendationItem/recommendationitem.form.component.js.map +1 -1
  144. package/dist/lib/generated/Entities/RecordChange/recordchange.form.component.d.ts.map +1 -1
  145. package/dist/lib/generated/Entities/RecordChange/recordchange.form.component.js +3 -11
  146. package/dist/lib/generated/Entities/RecordChange/recordchange.form.component.js.map +1 -1
  147. package/dist/lib/generated/Entities/RecordMergeDeletionLog/recordmergedeletionlog.form.component.d.ts.map +1 -1
  148. package/dist/lib/generated/Entities/RecordMergeDeletionLog/recordmergedeletionlog.form.component.js +3 -11
  149. package/dist/lib/generated/Entities/RecordMergeDeletionLog/recordmergedeletionlog.form.component.js.map +1 -1
  150. package/dist/lib/generated/Entities/Report/report.form.component.d.ts.map +1 -1
  151. package/dist/lib/generated/Entities/Report/report.form.component.js +17 -25
  152. package/dist/lib/generated/Entities/Report/report.form.component.js.map +1 -1
  153. package/dist/lib/generated/Entities/ResourceLink/resourcelink.form.component.d.ts.map +1 -1
  154. package/dist/lib/generated/Entities/ResourceLink/resourcelink.form.component.js +4 -16
  155. package/dist/lib/generated/Entities/ResourceLink/resourcelink.form.component.js.map +1 -1
  156. package/dist/lib/generated/Entities/ResourcePermission/resourcepermission.form.component.js +17 -17
  157. package/dist/lib/generated/Entities/ResourcePermission/resourcepermission.form.component.js.map +1 -1
  158. package/dist/lib/generated/Entities/ResourceType/resourcetype.form.component.d.ts.map +1 -1
  159. package/dist/lib/generated/Entities/ResourceType/resourcetype.form.component.js +32 -26
  160. package/dist/lib/generated/Entities/ResourceType/resourcetype.form.component.js.map +1 -1
  161. package/dist/lib/generated/Entities/Task/task.form.component.d.ts.map +1 -1
  162. package/dist/lib/generated/Entities/Task/task.form.component.js +17 -25
  163. package/dist/lib/generated/Entities/Task/task.form.component.js.map +1 -1
  164. package/dist/lib/generated/Entities/TemplateParam/templateparam.form.component.d.ts.map +1 -1
  165. package/dist/lib/generated/Entities/TemplateParam/templateparam.form.component.js +3 -11
  166. package/dist/lib/generated/Entities/TemplateParam/templateparam.form.component.js.map +1 -1
  167. package/dist/lib/generated/Entities/Test/test.form.component.d.ts +11 -0
  168. package/dist/lib/generated/Entities/Test/test.form.component.d.ts.map +1 -0
  169. package/dist/lib/generated/Entities/Test/test.form.component.js +129 -0
  170. package/dist/lib/generated/Entities/Test/test.form.component.js.map +1 -0
  171. package/dist/lib/generated/Entities/TestRubric/testrubric.form.component.d.ts +11 -0
  172. package/dist/lib/generated/Entities/TestRubric/testrubric.form.component.d.ts.map +1 -0
  173. package/dist/lib/generated/Entities/TestRubric/testrubric.form.component.js +63 -0
  174. package/dist/lib/generated/Entities/TestRubric/testrubric.form.component.js.map +1 -0
  175. package/dist/lib/generated/Entities/TestRun/testrun.form.component.d.ts +11 -0
  176. package/dist/lib/generated/Entities/TestRun/testrun.form.component.d.ts.map +1 -0
  177. package/dist/lib/generated/Entities/TestRun/testrun.form.component.js +183 -0
  178. package/dist/lib/generated/Entities/TestRun/testrun.form.component.js.map +1 -0
  179. package/dist/lib/generated/Entities/TestRunFeedback/testrunfeedback.form.component.d.ts +11 -0
  180. package/dist/lib/generated/Entities/TestRunFeedback/testrunfeedback.form.component.d.ts.map +1 -0
  181. package/dist/lib/generated/Entities/TestRunFeedback/testrunfeedback.form.component.js +63 -0
  182. package/dist/lib/generated/Entities/TestRunFeedback/testrunfeedback.form.component.js.map +1 -0
  183. package/dist/lib/generated/Entities/TestSuite/testsuite.form.component.d.ts +11 -0
  184. package/dist/lib/generated/Entities/TestSuite/testsuite.form.component.d.ts.map +1 -0
  185. package/dist/lib/generated/Entities/TestSuite/testsuite.form.component.js +119 -0
  186. package/dist/lib/generated/Entities/TestSuite/testsuite.form.component.js.map +1 -0
  187. package/dist/lib/generated/Entities/TestSuiteRun/testsuiterun.form.component.d.ts +11 -0
  188. package/dist/lib/generated/Entities/TestSuiteRun/testsuiterun.form.component.d.ts.map +1 -0
  189. package/dist/lib/generated/Entities/TestSuiteRun/testsuiterun.form.component.js +109 -0
  190. package/dist/lib/generated/Entities/TestSuiteRun/testsuiterun.form.component.js.map +1 -0
  191. package/dist/lib/generated/Entities/TestSuiteTest/testsuitetest.form.component.d.ts +11 -0
  192. package/dist/lib/generated/Entities/TestSuiteTest/testsuitetest.form.component.d.ts.map +1 -0
  193. package/dist/lib/generated/Entities/TestSuiteTest/testsuitetest.form.component.js +61 -0
  194. package/dist/lib/generated/Entities/TestSuiteTest/testsuitetest.form.component.js.map +1 -0
  195. package/dist/lib/generated/Entities/TestType/testtype.form.component.d.ts +11 -0
  196. package/dist/lib/generated/Entities/TestType/testtype.form.component.d.ts.map +1 -0
  197. package/dist/lib/generated/Entities/TestType/testtype.form.component.js +93 -0
  198. package/dist/lib/generated/Entities/TestType/testtype.form.component.js.map +1 -0
  199. package/dist/lib/generated/Entities/User/user.form.component.d.ts.map +1 -1
  200. package/dist/lib/generated/Entities/User/user.form.component.js +162 -108
  201. package/dist/lib/generated/Entities/User/user.form.component.js.map +1 -1
  202. package/dist/lib/generated/generated-forms.module.d.ts +133 -119
  203. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  204. package/dist/lib/generated/generated-forms.module.js +163 -70
  205. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  206. package/package.json +17 -17
@@ -0,0 +1,921 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Component, ChangeDetectionStrategy } from '@angular/core';
8
+ import { Subject } from 'rxjs';
9
+ import { CompositeKey, Metadata, RunView } from '@memberjunction/core';
10
+ import { BaseFormComponent } from '@memberjunction/ng-base-forms';
11
+ import { RegisterClass } from '@memberjunction/global';
12
+ import { SharedService } from '@memberjunction/ng-shared';
13
+ import { TestRunFormComponent } from '../../generated/Entities/TestRun/testrun.form.component';
14
+ import * as i0 from "@angular/core";
15
+ import * as i1 from "@memberjunction/ng-shared";
16
+ import * as i2 from "@angular/router";
17
+ import * as i3 from "@angular/common";
18
+ import * as i4 from "@progress/kendo-angular-buttons";
19
+ function TestRunFormComponentExtended_a_3_Template(rf, ctx) { if (rf & 1) {
20
+ const _r1 = i0.ɵɵgetCurrentView();
21
+ i0.ɵɵelementStart(0, "a", 37);
22
+ i0.ɵɵlistener("click", function TestRunFormComponentExtended_a_3_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.openTest()); });
23
+ i0.ɵɵelement(1, "i", 8);
24
+ i0.ɵɵtext(2);
25
+ i0.ɵɵelementEnd();
26
+ } if (rf & 2) {
27
+ const ctx_r1 = i0.ɵɵnextContext();
28
+ i0.ɵɵadvance(2);
29
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.test.Name, " ");
30
+ } }
31
+ function TestRunFormComponentExtended_i_4_Template(rf, ctx) { if (rf & 1) {
32
+ i0.ɵɵelement(0, "i", 38);
33
+ } }
34
+ function TestRunFormComponentExtended_span_18_Template(rf, ctx) { if (rf & 1) {
35
+ i0.ɵɵelementStart(0, "span", 39);
36
+ i0.ɵɵtext(1);
37
+ i0.ɵɵelementEnd();
38
+ } if (rf & 2) {
39
+ const ctx_r1 = i0.ɵɵnextContext();
40
+ i0.ɵɵadvance();
41
+ i0.ɵɵtextInterpolate(ctx_r1.test.Type);
42
+ } }
43
+ function TestRunFormComponentExtended_div_63_Template(rf, ctx) { if (rf & 1) {
44
+ const _r3 = i0.ɵɵgetCurrentView();
45
+ i0.ɵɵelementStart(0, "div", 22)(1, "span", 19);
46
+ i0.ɵɵtext(2, "Part of Suite:");
47
+ i0.ɵɵelementEnd();
48
+ i0.ɵɵelementStart(3, "a", 37);
49
+ i0.ɵɵlistener("click", function TestRunFormComponentExtended_div_63_Template_a_click_3_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.openTestSuiteRun()); });
50
+ i0.ɵɵtext(4);
51
+ i0.ɵɵelementEnd()();
52
+ } if (rf & 2) {
53
+ const ctx_r1 = i0.ɵɵnextContext();
54
+ i0.ɵɵadvance(4);
55
+ i0.ɵɵtextInterpolate2(" ", ctx_r1.testSuiteRun.ID, " (Seq: ", ctx_r1.record.Sequence, ") ");
56
+ } }
57
+ function TestRunFormComponentExtended_span_78_Template(rf, ctx) { if (rf & 1) {
58
+ i0.ɵɵelementStart(0, "span", 40);
59
+ i0.ɵɵtext(1);
60
+ i0.ɵɵelementEnd();
61
+ } if (rf & 2) {
62
+ const ctx_r1 = i0.ɵɵnextContext();
63
+ i0.ɵɵadvance();
64
+ i0.ɵɵtextInterpolate(ctx_r1.aiAgentRuns.length + ctx_r1.aiPromptRuns.length);
65
+ } }
66
+ function TestRunFormComponentExtended_span_83_Template(rf, ctx) { if (rf & 1) {
67
+ i0.ɵɵelementStart(0, "span", 40);
68
+ i0.ɵɵtext(1);
69
+ i0.ɵɵelementEnd();
70
+ } if (rf & 2) {
71
+ const ctx_r1 = i0.ɵɵnextContext();
72
+ i0.ɵɵadvance();
73
+ i0.ɵɵtextInterpolate(ctx_r1.feedbacks.length);
74
+ } }
75
+ function TestRunFormComponentExtended_div_85_div_11_div_4_div_8_Template(rf, ctx) { if (rf & 1) {
76
+ i0.ɵɵelementStart(0, "div", 62);
77
+ i0.ɵɵtext(1);
78
+ i0.ɵɵelementEnd();
79
+ } if (rf & 2) {
80
+ const check_r5 = i0.ɵɵnextContext().$implicit;
81
+ i0.ɵɵadvance();
82
+ i0.ɵɵtextInterpolate1("Weight: ", check_r5.weight, "");
83
+ } }
84
+ function TestRunFormComponentExtended_div_85_div_11_div_4_Template(rf, ctx) { if (rf & 1) {
85
+ i0.ɵɵelementStart(0, "div", 55)(1, "div", 56);
86
+ i0.ɵɵelement(2, "i", 57);
87
+ i0.ɵɵelementEnd();
88
+ i0.ɵɵelementStart(3, "div", 58)(4, "div", 59);
89
+ i0.ɵɵtext(5);
90
+ i0.ɵɵelementEnd();
91
+ i0.ɵɵelementStart(6, "div", 60);
92
+ i0.ɵɵtext(7);
93
+ i0.ɵɵelementEnd();
94
+ i0.ɵɵtemplate(8, TestRunFormComponentExtended_div_85_div_11_div_4_div_8_Template, 2, 1, "div", 61);
95
+ i0.ɵɵelementEnd()();
96
+ } if (rf & 2) {
97
+ const check_r5 = ctx.$implicit;
98
+ i0.ɵɵclassProp("passed", check_r5.passed)("failed", !check_r5.passed);
99
+ i0.ɵɵadvance(2);
100
+ i0.ɵɵclassProp("fa-check-circle", check_r5.passed)("fa-times-circle", !check_r5.passed);
101
+ i0.ɵɵadvance(3);
102
+ i0.ɵɵtextInterpolate(check_r5.name);
103
+ i0.ɵɵadvance(2);
104
+ i0.ɵɵtextInterpolate(check_r5.message);
105
+ i0.ɵɵadvance();
106
+ i0.ɵɵproperty("ngIf", check_r5.weight);
107
+ } }
108
+ function TestRunFormComponentExtended_div_85_div_11_Template(rf, ctx) { if (rf & 1) {
109
+ i0.ɵɵelementStart(0, "div", 52)(1, "h3");
110
+ i0.ɵɵtext(2, "Check Results");
111
+ i0.ɵɵelementEnd();
112
+ i0.ɵɵelementStart(3, "div", 53);
113
+ i0.ɵɵtemplate(4, TestRunFormComponentExtended_div_85_div_11_div_4_Template, 9, 11, "div", 54);
114
+ i0.ɵɵelementEnd()();
115
+ } if (rf & 2) {
116
+ const ctx_r1 = i0.ɵɵnextContext(2);
117
+ i0.ɵɵadvance(4);
118
+ i0.ɵɵproperty("ngForOf", ctx_r1.getCheckResults());
119
+ } }
120
+ function TestRunFormComponentExtended_div_85_Template(rf, ctx) { if (rf & 1) {
121
+ const _r4 = i0.ɵɵgetCurrentView();
122
+ i0.ɵɵelementStart(0, "div", 41)(1, "div", 42)(2, "div", 43);
123
+ i0.ɵɵelement(3, "i", 12);
124
+ i0.ɵɵelementEnd();
125
+ i0.ɵɵelementStart(4, "div", 44)(5, "h2");
126
+ i0.ɵɵtext(6);
127
+ i0.ɵɵelementEnd();
128
+ i0.ɵɵelementStart(7, "div", 45);
129
+ i0.ɵɵtext(8);
130
+ i0.ɵɵelementEnd();
131
+ i0.ɵɵelementStart(9, "div", 46);
132
+ i0.ɵɵtext(10);
133
+ i0.ɵɵelementEnd()()();
134
+ i0.ɵɵtemplate(11, TestRunFormComponentExtended_div_85_div_11_Template, 5, 1, "div", 47);
135
+ i0.ɵɵelementStart(12, "div", 48)(13, "h3");
136
+ i0.ɵɵtext(14, "Data Comparison");
137
+ i0.ɵɵelementEnd();
138
+ i0.ɵɵelementStart(15, "div", 49)(16, "button", 50);
139
+ i0.ɵɵlistener("click", function TestRunFormComponentExtended_div_85_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setComparisonView("input")); });
140
+ i0.ɵɵtext(17, " Input ");
141
+ i0.ɵɵelementEnd();
142
+ i0.ɵɵelementStart(18, "button", 50);
143
+ i0.ɵɵlistener("click", function TestRunFormComponentExtended_div_85_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setComparisonView("expected")); });
144
+ i0.ɵɵtext(19, " Expected ");
145
+ i0.ɵɵelementEnd();
146
+ i0.ɵɵelementStart(20, "button", 50);
147
+ i0.ɵɵlistener("click", function TestRunFormComponentExtended_div_85_Template_button_click_20_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setComparisonView("actual")); });
148
+ i0.ɵɵtext(21, " Actual ");
149
+ i0.ɵɵelementEnd()();
150
+ i0.ɵɵelementStart(22, "div", 51)(23, "pre");
151
+ i0.ɵɵtext(24);
152
+ i0.ɵɵpipe(25, "json");
153
+ i0.ɵɵelementEnd()()()();
154
+ } if (rf & 2) {
155
+ const ctx_r1 = i0.ɵɵnextContext();
156
+ i0.ɵɵadvance();
157
+ i0.ɵɵclassProp("passed", ctx_r1.record.Status === "Passed")("failed", ctx_r1.record.Status === "Failed");
158
+ i0.ɵɵadvance(2);
159
+ i0.ɵɵproperty("ngClass", ctx_r1.getStatusIcon());
160
+ i0.ɵɵadvance(3);
161
+ i0.ɵɵtextInterpolate1("TEST ", ctx_r1.record.Status.toUpperCase(), "");
162
+ i0.ɵɵadvance(2);
163
+ i0.ɵɵtextInterpolate1("Score: ", ctx_r1.formatScore(ctx_r1.record.Score), " / 1.0000");
164
+ i0.ɵɵadvance(2);
165
+ i0.ɵɵtextInterpolate2("", ctx_r1.record.PassedChecks, " of ", ctx_r1.record.TotalChecks, " checks passed");
166
+ i0.ɵɵadvance();
167
+ i0.ɵɵproperty("ngIf", ctx_r1.getCheckResults().length > 0);
168
+ i0.ɵɵadvance(5);
169
+ i0.ɵɵclassProp("active", ctx_r1.comparisonView === "input");
170
+ i0.ɵɵadvance(2);
171
+ i0.ɵɵclassProp("active", ctx_r1.comparisonView === "expected");
172
+ i0.ɵɵadvance(2);
173
+ i0.ɵɵclassProp("active", ctx_r1.comparisonView === "actual");
174
+ i0.ɵɵadvance(4);
175
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(25, 17, ctx_r1.getComparisonData()));
176
+ } }
177
+ function TestRunFormComponentExtended_div_86_a_11_Template(rf, ctx) { if (rf & 1) {
178
+ const _r6 = i0.ɵɵgetCurrentView();
179
+ i0.ɵɵelementStart(0, "a", 37);
180
+ i0.ɵɵlistener("click", function TestRunFormComponentExtended_div_86_a_11_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openTest()); });
181
+ i0.ɵɵtext(1);
182
+ i0.ɵɵelementEnd();
183
+ } if (rf & 2) {
184
+ const ctx_r1 = i0.ɵɵnextContext(2);
185
+ i0.ɵɵadvance();
186
+ i0.ɵɵtextInterpolate(ctx_r1.test.Name);
187
+ } }
188
+ function TestRunFormComponentExtended_div_86_div_64_Template(rf, ctx) { if (rf & 1) {
189
+ i0.ɵɵelementStart(0, "div", 70)(1, "h4");
190
+ i0.ɵɵtext(2, "Error Message");
191
+ i0.ɵɵelementEnd();
192
+ i0.ɵɵelementStart(3, "pre");
193
+ i0.ɵɵtext(4);
194
+ i0.ɵɵelementEnd()();
195
+ } if (rf & 2) {
196
+ const ctx_r1 = i0.ɵɵnextContext(2);
197
+ i0.ɵɵadvance(4);
198
+ i0.ɵɵtextInterpolate(ctx_r1.record.ErrorMessage);
199
+ } }
200
+ function TestRunFormComponentExtended_div_86_div_65_Template(rf, ctx) { if (rf & 1) {
201
+ i0.ɵɵelementStart(0, "div", 71)(1, "h4");
202
+ i0.ɵɵtext(2, "Full Result Details (JSON)");
203
+ i0.ɵɵelementEnd();
204
+ i0.ɵɵelementStart(3, "pre");
205
+ i0.ɵɵtext(4);
206
+ i0.ɵɵpipe(5, "json");
207
+ i0.ɵɵelementEnd()();
208
+ } if (rf & 2) {
209
+ const ctx_r1 = i0.ɵɵnextContext(2);
210
+ i0.ɵɵadvance(4);
211
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 1, ctx_r1.parsedData.resultDetails));
212
+ } }
213
+ function TestRunFormComponentExtended_div_86_Template(rf, ctx) { if (rf & 1) {
214
+ i0.ɵɵelementStart(0, "div", 63)(1, "div", 64)(2, "div", 65)(3, "div", 66);
215
+ i0.ɵɵtext(4, "Test Run ID");
216
+ i0.ɵɵelementEnd();
217
+ i0.ɵɵelementStart(5, "div", 67);
218
+ i0.ɵɵtext(6);
219
+ i0.ɵɵelementEnd()();
220
+ i0.ɵɵelementStart(7, "div", 65)(8, "div", 66);
221
+ i0.ɵɵtext(9, "Test");
222
+ i0.ɵɵelementEnd();
223
+ i0.ɵɵelementStart(10, "div", 67);
224
+ i0.ɵɵtemplate(11, TestRunFormComponentExtended_div_86_a_11_Template, 2, 1, "a", 3);
225
+ i0.ɵɵelementEnd()();
226
+ i0.ɵɵelementStart(12, "div", 65)(13, "div", 66);
227
+ i0.ɵɵtext(14, "Status");
228
+ i0.ɵɵelementEnd();
229
+ i0.ɵɵelementStart(15, "div", 67);
230
+ i0.ɵɵtext(16);
231
+ i0.ɵɵelementEnd()();
232
+ i0.ɵɵelementStart(17, "div", 65)(18, "div", 66);
233
+ i0.ɵɵtext(19, "Target Type");
234
+ i0.ɵɵelementEnd();
235
+ i0.ɵɵelementStart(20, "div", 67);
236
+ i0.ɵɵtext(21);
237
+ i0.ɵɵelementEnd()();
238
+ i0.ɵɵelementStart(22, "div", 65)(23, "div", 66);
239
+ i0.ɵɵtext(24, "Started At");
240
+ i0.ɵɵelementEnd();
241
+ i0.ɵɵelementStart(25, "div", 67);
242
+ i0.ɵɵtext(26);
243
+ i0.ɵɵpipe(27, "date");
244
+ i0.ɵɵelementEnd()();
245
+ i0.ɵɵelementStart(28, "div", 65)(29, "div", 66);
246
+ i0.ɵɵtext(30, "Completed At");
247
+ i0.ɵɵelementEnd();
248
+ i0.ɵɵelementStart(31, "div", 67);
249
+ i0.ɵɵtext(32);
250
+ i0.ɵɵpipe(33, "date");
251
+ i0.ɵɵelementEnd()();
252
+ i0.ɵɵelementStart(34, "div", 65)(35, "div", 66);
253
+ i0.ɵɵtext(36, "Duration");
254
+ i0.ɵɵelementEnd();
255
+ i0.ɵɵelementStart(37, "div", 67);
256
+ i0.ɵɵtext(38);
257
+ i0.ɵɵelementEnd()();
258
+ i0.ɵɵelementStart(39, "div", 65)(40, "div", 66);
259
+ i0.ɵɵtext(41, "Score");
260
+ i0.ɵɵelementEnd();
261
+ i0.ɵɵelementStart(42, "div", 67);
262
+ i0.ɵɵtext(43);
263
+ i0.ɵɵelementEnd()();
264
+ i0.ɵɵelementStart(44, "div", 65)(45, "div", 66);
265
+ i0.ɵɵtext(46, "Cost");
266
+ i0.ɵɵelementEnd();
267
+ i0.ɵɵelementStart(47, "div", 67);
268
+ i0.ɵɵtext(48);
269
+ i0.ɵɵelementEnd()();
270
+ i0.ɵɵelementStart(49, "div", 65)(50, "div", 66);
271
+ i0.ɵɵtext(51, "Passed Checks");
272
+ i0.ɵɵelementEnd();
273
+ i0.ɵɵelementStart(52, "div", 67);
274
+ i0.ɵɵtext(53);
275
+ i0.ɵɵelementEnd()();
276
+ i0.ɵɵelementStart(54, "div", 65)(55, "div", 66);
277
+ i0.ɵɵtext(56, "Failed Checks");
278
+ i0.ɵɵelementEnd();
279
+ i0.ɵɵelementStart(57, "div", 67);
280
+ i0.ɵɵtext(58);
281
+ i0.ɵɵelementEnd()();
282
+ i0.ɵɵelementStart(59, "div", 65)(60, "div", 66);
283
+ i0.ɵɵtext(61, "Total Checks");
284
+ i0.ɵɵelementEnd();
285
+ i0.ɵɵelementStart(62, "div", 67);
286
+ i0.ɵɵtext(63);
287
+ i0.ɵɵelementEnd()()();
288
+ i0.ɵɵtemplate(64, TestRunFormComponentExtended_div_86_div_64_Template, 5, 1, "div", 68)(65, TestRunFormComponentExtended_div_86_div_65_Template, 6, 3, "div", 69);
289
+ i0.ɵɵelementEnd();
290
+ } if (rf & 2) {
291
+ const ctx_r1 = i0.ɵɵnextContext();
292
+ i0.ɵɵadvance(6);
293
+ i0.ɵɵtextInterpolate(ctx_r1.record.ID);
294
+ i0.ɵɵadvance(5);
295
+ i0.ɵɵproperty("ngIf", ctx_r1.test);
296
+ i0.ɵɵadvance(5);
297
+ i0.ɵɵtextInterpolate(ctx_r1.record.Status);
298
+ i0.ɵɵadvance(5);
299
+ i0.ɵɵtextInterpolate(ctx_r1.record.TargetType || "N/A");
300
+ i0.ɵɵadvance(5);
301
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(27, 14, ctx_r1.record.StartedAt, "medium"));
302
+ i0.ɵɵadvance(6);
303
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(33, 17, ctx_r1.record.CompletedAt, "medium"));
304
+ i0.ɵɵadvance(6);
305
+ i0.ɵɵtextInterpolate(ctx_r1.calculateDuration());
306
+ i0.ɵɵadvance(5);
307
+ i0.ɵɵtextInterpolate(ctx_r1.formatScore(ctx_r1.record.Score));
308
+ i0.ɵɵadvance(5);
309
+ i0.ɵɵtextInterpolate(ctx_r1.formatCost(ctx_r1.record.CostUSD));
310
+ i0.ɵɵadvance(5);
311
+ i0.ɵɵtextInterpolate(ctx_r1.record.PassedChecks);
312
+ i0.ɵɵadvance(5);
313
+ i0.ɵɵtextInterpolate(ctx_r1.record.FailedChecks);
314
+ i0.ɵɵadvance(5);
315
+ i0.ɵɵtextInterpolate(ctx_r1.record.TotalChecks);
316
+ i0.ɵɵadvance();
317
+ i0.ɵɵproperty("ngIf", ctx_r1.record.ErrorMessage);
318
+ i0.ɵɵadvance();
319
+ i0.ɵɵproperty("ngIf", ctx_r1.record.ResultDetails);
320
+ } }
321
+ function TestRunFormComponentExtended_div_87_div_1_div_4_span_9_Template(rf, ctx) { if (rf & 1) {
322
+ i0.ɵɵelementStart(0, "span");
323
+ i0.ɵɵtext(1);
324
+ i0.ɵɵelementEnd();
325
+ } if (rf & 2) {
326
+ const run_r8 = i0.ɵɵnextContext().$implicit;
327
+ i0.ɵɵadvance();
328
+ i0.ɵɵtextInterpolate1("$", run_r8.TotalCost, "");
329
+ } }
330
+ function TestRunFormComponentExtended_div_87_div_1_div_4_Template(rf, ctx) { if (rf & 1) {
331
+ const _r7 = i0.ɵɵgetCurrentView();
332
+ i0.ɵɵelementStart(0, "div", 78);
333
+ i0.ɵɵlistener("click", function TestRunFormComponentExtended_div_87_div_1_div_4_Template_div_click_0_listener() { const run_r8 = i0.ɵɵrestoreView(_r7).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openAIAgentRun(run_r8.ID)); });
334
+ i0.ɵɵelementStart(1, "div", 79);
335
+ i0.ɵɵelement(2, "i", 29);
336
+ i0.ɵɵelementEnd();
337
+ i0.ɵɵelementStart(3, "div", 80)(4, "div", 81);
338
+ i0.ɵɵtext(5);
339
+ i0.ɵɵelementEnd();
340
+ i0.ɵɵelementStart(6, "div", 82)(7, "span");
341
+ i0.ɵɵtext(8);
342
+ i0.ɵɵelementEnd();
343
+ i0.ɵɵtemplate(9, TestRunFormComponentExtended_div_87_div_1_div_4_span_9_Template, 2, 1, "span", 83);
344
+ i0.ɵɵelementEnd()();
345
+ i0.ɵɵelement(10, "i", 84);
346
+ i0.ɵɵelementEnd();
347
+ } if (rf & 2) {
348
+ const run_r8 = ctx.$implicit;
349
+ i0.ɵɵadvance(5);
350
+ i0.ɵɵtextInterpolate(run_r8.Agent);
351
+ i0.ɵɵadvance(3);
352
+ i0.ɵɵtextInterpolate(run_r8.Status);
353
+ i0.ɵɵadvance();
354
+ i0.ɵɵproperty("ngIf", run_r8.TotalCost);
355
+ } }
356
+ function TestRunFormComponentExtended_div_87_div_1_Template(rf, ctx) { if (rf & 1) {
357
+ i0.ɵɵelementStart(0, "div", 75)(1, "h3");
358
+ i0.ɵɵtext(2);
359
+ i0.ɵɵelementEnd();
360
+ i0.ɵɵelementStart(3, "div", 76);
361
+ i0.ɵɵtemplate(4, TestRunFormComponentExtended_div_87_div_1_div_4_Template, 11, 3, "div", 77);
362
+ i0.ɵɵelementEnd()();
363
+ } if (rf & 2) {
364
+ const ctx_r1 = i0.ɵɵnextContext(2);
365
+ i0.ɵɵadvance(2);
366
+ i0.ɵɵtextInterpolate1("AI Agent Runs (", ctx_r1.aiAgentRuns.length, ")");
367
+ i0.ɵɵadvance(2);
368
+ i0.ɵɵproperty("ngForOf", ctx_r1.aiAgentRuns);
369
+ } }
370
+ function TestRunFormComponentExtended_div_87_div_2_div_4_span_7_Template(rf, ctx) { if (rf & 1) {
371
+ i0.ɵɵelementStart(0, "span");
372
+ i0.ɵɵtext(1);
373
+ i0.ɵɵelementEnd();
374
+ } if (rf & 2) {
375
+ const run_r10 = i0.ɵɵnextContext().$implicit;
376
+ i0.ɵɵadvance();
377
+ i0.ɵɵtextInterpolate1("$", run_r10.TotalCost, "");
378
+ } }
379
+ function TestRunFormComponentExtended_div_87_div_2_div_4_Template(rf, ctx) { if (rf & 1) {
380
+ const _r9 = i0.ɵɵgetCurrentView();
381
+ i0.ɵɵelementStart(0, "div", 78);
382
+ i0.ɵɵlistener("click", function TestRunFormComponentExtended_div_87_div_2_div_4_Template_div_click_0_listener() { const run_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openAIPromptRun(run_r10.ID)); });
383
+ i0.ɵɵelementStart(1, "div", 85);
384
+ i0.ɵɵelement(2, "i", 86);
385
+ i0.ɵɵelementEnd();
386
+ i0.ɵɵelementStart(3, "div", 80)(4, "div", 81);
387
+ i0.ɵɵtext(5);
388
+ i0.ɵɵelementEnd();
389
+ i0.ɵɵelementStart(6, "div", 82);
390
+ i0.ɵɵtemplate(7, TestRunFormComponentExtended_div_87_div_2_div_4_span_7_Template, 2, 1, "span", 83);
391
+ i0.ɵɵelementEnd()();
392
+ i0.ɵɵelement(8, "i", 84);
393
+ i0.ɵɵelementEnd();
394
+ } if (rf & 2) {
395
+ const run_r10 = ctx.$implicit;
396
+ i0.ɵɵadvance(5);
397
+ i0.ɵɵtextInterpolate(run_r10.Prompt || run_r10.Model);
398
+ i0.ɵɵadvance(2);
399
+ i0.ɵɵproperty("ngIf", run_r10.TotalCost);
400
+ } }
401
+ function TestRunFormComponentExtended_div_87_div_2_Template(rf, ctx) { if (rf & 1) {
402
+ i0.ɵɵelementStart(0, "div", 75)(1, "h3");
403
+ i0.ɵɵtext(2);
404
+ i0.ɵɵelementEnd();
405
+ i0.ɵɵelementStart(3, "div", 76);
406
+ i0.ɵɵtemplate(4, TestRunFormComponentExtended_div_87_div_2_div_4_Template, 9, 2, "div", 77);
407
+ i0.ɵɵelementEnd()();
408
+ } if (rf & 2) {
409
+ const ctx_r1 = i0.ɵɵnextContext(2);
410
+ i0.ɵɵadvance(2);
411
+ i0.ɵɵtextInterpolate1("AI Prompt Runs (", ctx_r1.aiPromptRuns.length, ")");
412
+ i0.ɵɵadvance(2);
413
+ i0.ɵɵproperty("ngForOf", ctx_r1.aiPromptRuns);
414
+ } }
415
+ function TestRunFormComponentExtended_div_87_div_3_Template(rf, ctx) { if (rf & 1) {
416
+ i0.ɵɵelementStart(0, "div", 87);
417
+ i0.ɵɵelement(1, "i", 88);
418
+ i0.ɵɵelementStart(2, "p");
419
+ i0.ɵɵtext(3, "No AI runs associated with this test execution");
420
+ i0.ɵɵelementEnd()();
421
+ } }
422
+ function TestRunFormComponentExtended_div_87_Template(rf, ctx) { if (rf & 1) {
423
+ i0.ɵɵelementStart(0, "div", 72);
424
+ i0.ɵɵtemplate(1, TestRunFormComponentExtended_div_87_div_1_Template, 5, 2, "div", 73)(2, TestRunFormComponentExtended_div_87_div_2_Template, 5, 2, "div", 73)(3, TestRunFormComponentExtended_div_87_div_3_Template, 4, 0, "div", 74);
425
+ i0.ɵɵelementEnd();
426
+ } if (rf & 2) {
427
+ const ctx_r1 = i0.ɵɵnextContext();
428
+ i0.ɵɵadvance();
429
+ i0.ɵɵproperty("ngIf", ctx_r1.aiAgentRuns.length > 0);
430
+ i0.ɵɵadvance();
431
+ i0.ɵɵproperty("ngIf", ctx_r1.aiPromptRuns.length > 0);
432
+ i0.ɵɵadvance();
433
+ i0.ɵɵproperty("ngIf", ctx_r1.aiRunsLoaded && ctx_r1.aiAgentRuns.length === 0 && ctx_r1.aiPromptRuns.length === 0);
434
+ } }
435
+ function TestRunFormComponentExtended_div_88_div_1_div_1_div_10_Template(rf, ctx) { if (rf & 1) {
436
+ i0.ɵɵelementStart(0, "div", 101);
437
+ i0.ɵɵtext(1);
438
+ i0.ɵɵelementEnd();
439
+ } if (rf & 2) {
440
+ const feedback_r11 = i0.ɵɵnextContext().$implicit;
441
+ i0.ɵɵadvance();
442
+ i0.ɵɵtextInterpolate1(" Automated Result: ", feedback_r11.IsCorrect ? "Correct" : "Incorrect", " ");
443
+ } }
444
+ function TestRunFormComponentExtended_div_88_div_1_div_1_div_11_Template(rf, ctx) { if (rf & 1) {
445
+ i0.ɵɵelementStart(0, "div", 102);
446
+ i0.ɵɵtext(1);
447
+ i0.ɵɵelementEnd();
448
+ } if (rf & 2) {
449
+ const feedback_r11 = i0.ɵɵnextContext().$implicit;
450
+ i0.ɵɵadvance();
451
+ i0.ɵɵtextInterpolate1(" ", feedback_r11.CorrectionSummary, " ");
452
+ } }
453
+ function TestRunFormComponentExtended_div_88_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
454
+ i0.ɵɵelementStart(0, "div", 93)(1, "div", 94)(2, "div", 95);
455
+ i0.ɵɵelement(3, "i", 96);
456
+ i0.ɵɵtext(4);
457
+ i0.ɵɵelementEnd();
458
+ i0.ɵɵelementStart(5, "div", 97);
459
+ i0.ɵɵtext(6);
460
+ i0.ɵɵpipe(7, "date");
461
+ i0.ɵɵelementEnd()();
462
+ i0.ɵɵelementStart(8, "div", 98);
463
+ i0.ɵɵtext(9);
464
+ i0.ɵɵelementEnd();
465
+ i0.ɵɵtemplate(10, TestRunFormComponentExtended_div_88_div_1_div_1_div_10_Template, 2, 1, "div", 99)(11, TestRunFormComponentExtended_div_88_div_1_div_1_div_11_Template, 2, 1, "div", 100);
466
+ i0.ɵɵelementEnd();
467
+ } if (rf & 2) {
468
+ const feedback_r11 = ctx.$implicit;
469
+ i0.ɵɵadvance(4);
470
+ i0.ɵɵtextInterpolate1(" ", feedback_r11.ReviewerUserID, " ");
471
+ i0.ɵɵadvance(2);
472
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(7, 5, feedback_r11.__mj_CreatedAt, "medium"), " ");
473
+ i0.ɵɵadvance(3);
474
+ i0.ɵɵtextInterpolate1(" Rating: ", feedback_r11.Rating, "/10 ");
475
+ i0.ɵɵadvance();
476
+ i0.ɵɵproperty("ngIf", feedback_r11.IsCorrect !== null);
477
+ i0.ɵɵadvance();
478
+ i0.ɵɵproperty("ngIf", feedback_r11.CorrectionSummary);
479
+ } }
480
+ function TestRunFormComponentExtended_div_88_div_1_Template(rf, ctx) { if (rf & 1) {
481
+ i0.ɵɵelementStart(0, "div", 91);
482
+ i0.ɵɵtemplate(1, TestRunFormComponentExtended_div_88_div_1_div_1_Template, 12, 8, "div", 92);
483
+ i0.ɵɵelementEnd();
484
+ } if (rf & 2) {
485
+ const ctx_r1 = i0.ɵɵnextContext(2);
486
+ i0.ɵɵadvance();
487
+ i0.ɵɵproperty("ngForOf", ctx_r1.feedbacks);
488
+ } }
489
+ function TestRunFormComponentExtended_div_88_div_2_Template(rf, ctx) { if (rf & 1) {
490
+ i0.ɵɵelementStart(0, "div", 87);
491
+ i0.ɵɵelement(1, "i", 88);
492
+ i0.ɵɵelementStart(2, "p");
493
+ i0.ɵɵtext(3, "No feedback submitted for this test run");
494
+ i0.ɵɵelementEnd()();
495
+ } }
496
+ function TestRunFormComponentExtended_div_88_Template(rf, ctx) { if (rf & 1) {
497
+ i0.ɵɵelementStart(0, "div", 89);
498
+ i0.ɵɵtemplate(1, TestRunFormComponentExtended_div_88_div_1_Template, 2, 1, "div", 90)(2, TestRunFormComponentExtended_div_88_div_2_Template, 4, 0, "div", 74);
499
+ i0.ɵɵelementEnd();
500
+ } if (rf & 2) {
501
+ const ctx_r1 = i0.ɵɵnextContext();
502
+ i0.ɵɵadvance();
503
+ i0.ɵɵproperty("ngIf", ctx_r1.feedbacks.length > 0);
504
+ i0.ɵɵadvance();
505
+ i0.ɵɵproperty("ngIf", ctx_r1.feedbackLoaded && ctx_r1.feedbacks.length === 0);
506
+ } }
507
+ let TestRunFormComponentExtended = class TestRunFormComponentExtended extends TestRunFormComponent {
508
+ constructor(elementRef, sharedService, router, route, cdr) {
509
+ super(elementRef, sharedService, router, route, cdr);
510
+ this.router = router;
511
+ this.cdr = cdr;
512
+ this.destroy$ = new Subject();
513
+ // UI state
514
+ this.activeTab = 'overview';
515
+ this.loading = false;
516
+ this.error = null;
517
+ this.aiRunsLoaded = false;
518
+ this.feedbackLoaded = false;
519
+ // Related entities
520
+ this.test = null;
521
+ this.testSuiteRun = null;
522
+ this.aiAgentRuns = [];
523
+ this.aiPromptRuns = [];
524
+ this.feedbacks = [];
525
+ // Parsed JSON data
526
+ this.parsedData = {};
527
+ // Active comparison view
528
+ this.comparisonView = 'input';
529
+ }
530
+ async ngOnInit() {
531
+ await super.ngOnInit();
532
+ if (this.record && this.record.ID) {
533
+ await this.loadRelatedData();
534
+ this.parseJsonFields();
535
+ }
536
+ }
537
+ ngOnDestroy() {
538
+ this.destroy$.next();
539
+ this.destroy$.complete();
540
+ }
541
+ async loadRelatedData() {
542
+ this.loading = true;
543
+ try {
544
+ // Load test
545
+ if (this.record.TestID) {
546
+ const md = new Metadata();
547
+ const test = await md.GetEntityObject('MJ: Tests');
548
+ if (test && await test.Load(this.record.TestID)) {
549
+ this.test = test;
550
+ }
551
+ }
552
+ // Load test suite run if part of a suite
553
+ if (this.record.TestSuiteRunID) {
554
+ const md = new Metadata();
555
+ const suiteRun = await md.GetEntityObject('MJ: Test Suite Runs');
556
+ if (suiteRun && await suiteRun.Load(this.record.TestSuiteRunID)) {
557
+ this.testSuiteRun = suiteRun;
558
+ }
559
+ }
560
+ this.cdr.markForCheck();
561
+ }
562
+ catch (error) {
563
+ console.error('Error loading related data:', error);
564
+ this.error = 'Failed to load related data';
565
+ }
566
+ finally {
567
+ this.loading = false;
568
+ this.cdr.markForCheck();
569
+ }
570
+ }
571
+ async loadAIRuns() {
572
+ if (this.aiRunsLoaded)
573
+ return;
574
+ try {
575
+ const rv = new RunView();
576
+ const [agentRuns, promptRuns] = await rv.RunViews([
577
+ {
578
+ EntityName: 'MJ: AI Agent Runs',
579
+ ExtraFilter: `TestRunID='${this.record.ID}'`,
580
+ OrderBy: 'StartedAt',
581
+ ResultType: 'entity_object'
582
+ },
583
+ {
584
+ EntityName: 'MJ: AI Prompt Runs',
585
+ ExtraFilter: `TestRunID='${this.record.ID}'`,
586
+ OrderBy: 'StartedAt',
587
+ ResultType: 'entity_object'
588
+ }
589
+ ]);
590
+ if (agentRuns.Success) {
591
+ this.aiAgentRuns = agentRuns.Results || [];
592
+ }
593
+ if (promptRuns.Success) {
594
+ this.aiPromptRuns = promptRuns.Results || [];
595
+ }
596
+ this.aiRunsLoaded = true;
597
+ this.cdr.markForCheck();
598
+ }
599
+ catch (error) {
600
+ console.error('Error loading AI runs:', error);
601
+ }
602
+ }
603
+ async loadFeedback() {
604
+ if (this.feedbackLoaded)
605
+ return;
606
+ try {
607
+ const rv = new RunView();
608
+ const result = await rv.RunView({
609
+ EntityName: 'MJ: Test Run Feedbacks',
610
+ ExtraFilter: `TestRunID='${this.record.ID}'`,
611
+ OrderBy: '__mj_CreatedAt DESC',
612
+ ResultType: 'entity_object'
613
+ });
614
+ if (result.Success) {
615
+ this.feedbacks = result.Results || [];
616
+ }
617
+ this.feedbackLoaded = true;
618
+ this.cdr.markForCheck();
619
+ }
620
+ catch (error) {
621
+ console.error('Error loading feedback:', error);
622
+ }
623
+ }
624
+ parseJsonFields() {
625
+ try {
626
+ if (this.record.InputData) {
627
+ this.parsedData.input = JSON.parse(this.record.InputData);
628
+ }
629
+ if (this.record.ExpectedOutputData) {
630
+ this.parsedData.expected = JSON.parse(this.record.ExpectedOutputData);
631
+ }
632
+ if (this.record.ActualOutputData) {
633
+ this.parsedData.actual = JSON.parse(this.record.ActualOutputData);
634
+ }
635
+ if (this.record.ResultDetails) {
636
+ this.parsedData.resultDetails = JSON.parse(this.record.ResultDetails);
637
+ }
638
+ }
639
+ catch (error) {
640
+ console.error('Error parsing JSON fields:', error);
641
+ }
642
+ }
643
+ changeTab(tab) {
644
+ this.activeTab = tab;
645
+ // Lazy load tabs
646
+ if (tab === 'ai-runs' && !this.aiRunsLoaded) {
647
+ this.loadAIRuns();
648
+ }
649
+ if (tab === 'feedback' && !this.feedbackLoaded) {
650
+ this.loadFeedback();
651
+ }
652
+ this.cdr.markForCheck();
653
+ }
654
+ setComparisonView(view) {
655
+ this.comparisonView = view;
656
+ this.cdr.markForCheck();
657
+ }
658
+ getStatusColor() {
659
+ switch (this.record.Status) {
660
+ case 'Passed': return '#4caf50';
661
+ case 'Failed': return '#f44336';
662
+ case 'Error': return '#ff9800';
663
+ case 'Running': return '#2196f3';
664
+ case 'Pending': return '#ffc107';
665
+ case 'Skipped': return '#9e9e9e';
666
+ default: return '#999';
667
+ }
668
+ }
669
+ getStatusIcon() {
670
+ switch (this.record.Status) {
671
+ case 'Passed': return 'fa-check-circle';
672
+ case 'Failed': return 'fa-times-circle';
673
+ case 'Error': return 'fa-exclamation-circle';
674
+ case 'Running': return 'fa-spinner fa-spin';
675
+ case 'Pending': return 'fa-clock';
676
+ case 'Skipped': return 'fa-forward';
677
+ default: return 'fa-question-circle';
678
+ }
679
+ }
680
+ calculateDuration() {
681
+ if (!this.record.DurationSeconds)
682
+ return 'N/A';
683
+ const seconds = this.record.DurationSeconds;
684
+ if (seconds < 60)
685
+ return `${seconds.toFixed(1)}s`;
686
+ if (seconds < 3600) {
687
+ const mins = Math.floor(seconds / 60);
688
+ const secs = Math.floor(seconds % 60);
689
+ return `${mins}m ${secs}s`;
690
+ }
691
+ const hours = Math.floor(seconds / 3600);
692
+ const mins = Math.floor((seconds % 3600) / 60);
693
+ return `${hours}h ${mins}m`;
694
+ }
695
+ formatScore(score) {
696
+ if (score === null || score === undefined)
697
+ return 'N/A';
698
+ return score.toFixed(4);
699
+ }
700
+ formatCost(cost) {
701
+ if (cost === null || cost === undefined)
702
+ return 'N/A';
703
+ return `$${cost.toFixed(6)}`;
704
+ }
705
+ openTest() {
706
+ if (this.test) {
707
+ SharedService.Instance.OpenEntityRecord('MJ: Tests', CompositeKey.FromID(this.test.ID));
708
+ }
709
+ }
710
+ openTestSuiteRun() {
711
+ if (this.testSuiteRun) {
712
+ SharedService.Instance.OpenEntityRecord('MJ: Test Suite Runs', CompositeKey.FromID(this.testSuiteRun.ID));
713
+ }
714
+ }
715
+ openAIAgentRun(runId) {
716
+ SharedService.Instance.OpenEntityRecord('MJ: AI Agent Runs', CompositeKey.FromID(runId));
717
+ }
718
+ openAIPromptRun(runId) {
719
+ SharedService.Instance.OpenEntityRecord('MJ: AI Prompt Runs', CompositeKey.FromID(runId));
720
+ }
721
+ async reRunTest() {
722
+ // TODO: Implement test re-run functionality
723
+ console.log('Re-run test:', this.record.TestID);
724
+ }
725
+ async refresh() {
726
+ await this.loadRelatedData();
727
+ this.cdr.markForCheck();
728
+ }
729
+ getComparisonData() {
730
+ switch (this.comparisonView) {
731
+ case 'input': return this.parsedData.input;
732
+ case 'expected': return this.parsedData.expected;
733
+ case 'actual': return this.parsedData.actual;
734
+ default: return null;
735
+ }
736
+ }
737
+ getCheckResults() {
738
+ if (!this.parsedData.resultDetails?.checkResults)
739
+ return [];
740
+ return this.parsedData.resultDetails.checkResults;
741
+ }
742
+ getPassRate() {
743
+ const total = this.record.TotalChecks || 0;
744
+ const passed = this.record.PassedChecks || 0;
745
+ if (total === 0)
746
+ return 0;
747
+ return (passed / total) * 100;
748
+ }
749
+ static { this.ɵfac = function TestRunFormComponentExtended_Factory(t) { return new (t || TestRunFormComponentExtended)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.SharedService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
750
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TestRunFormComponentExtended, selectors: [["mj-test-run-form"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 89, vars: 39, consts: [[1, "test-run-form"], [1, "test-run-header"], [1, "breadcrumb"], ["href", "javascript:void(0)", 3, "click", 4, "ngIf"], ["class", "fas fa-chevron-right", 4, "ngIf"], [1, "header-content"], [1, "header-left"], [1, "test-run-icon"], [1, "fas", "fa-flask"], [1, "test-run-info"], [1, "test-run-meta"], [1, "status-badge"], [1, "fas", 3, "ngClass"], ["class", "test-type", 4, "ngIf"], [1, "header-actions"], ["kendoButton", "", "icon", "refresh", 3, "click"], ["kendoButton", "", "icon", "sync", 3, "click"], [1, "metrics-bar"], [1, "metric-card"], [1, "metric-label"], [1, "metric-value"], [1, "secondary-metrics"], [1, "metric-item"], ["class", "metric-item", 4, "ngIf"], [1, "tabs-container"], [1, "tabs"], [1, "tab", 3, "click"], [1, "fas", "fa-th-large"], [1, "fas", "fa-list"], [1, "fas", "fa-robot"], ["class", "tab-badge", 4, "ngIf"], [1, "fas", "fa-comments"], [1, "tab-content"], ["class", "overview-tab", 4, "ngIf"], ["class", "details-tab", 4, "ngIf"], ["class", "ai-runs-tab", 4, "ngIf"], ["class", "feedback-tab", 4, "ngIf"], ["href", "javascript:void(0)", 3, "click"], [1, "fas", "fa-chevron-right"], [1, "test-type"], [1, "tab-badge"], [1, "overview-tab"], [1, "result-hero"], [1, "result-icon"], [1, "result-text"], [1, "result-score"], [1, "result-checks"], ["class", "check-results", 4, "ngIf"], [1, "comparison-section"], [1, "comparison-tabs"], [1, "comparison-tab", 3, "click"], [1, "comparison-content"], [1, "check-results"], [1, "check-list"], ["class", "check-item", 3, "passed", "failed", 4, "ngFor", "ngForOf"], [1, "check-item"], [1, "check-icon"], [1, "fas"], [1, "check-content"], [1, "check-name"], [1, "check-details"], ["class", "check-weight", 4, "ngIf"], [1, "check-weight"], [1, "details-tab"], [1, "details-grid"], [1, "detail-item"], [1, "detail-label"], [1, "detail-value"], ["class", "error-message", 4, "ngIf"], ["class", "result-details-json", 4, "ngIf"], [1, "error-message"], [1, "result-details-json"], [1, "ai-runs-tab"], ["class", "ai-runs-section", 4, "ngIf"], ["class", "no-data", 4, "ngIf"], [1, "ai-runs-section"], [1, "ai-run-list"], ["class", "ai-run-card", 3, "click", 4, "ngFor", "ngForOf"], [1, "ai-run-card", 3, "click"], [1, "ai-run-icon"], [1, "ai-run-content"], [1, "ai-run-name"], [1, "ai-run-meta"], [4, "ngIf"], [1, "fas", "fa-external-link-alt"], [1, "ai-run-icon", "prompt"], [1, "fas", "fa-comment-dots"], [1, "no-data"], [1, "fas", "fa-inbox"], [1, "feedback-tab"], ["class", "feedback-list", 4, "ngIf"], [1, "feedback-list"], ["class", "feedback-item", 4, "ngFor", "ngForOf"], [1, "feedback-item"], [1, "feedback-header"], [1, "feedback-user"], [1, "fas", "fa-user"], [1, "feedback-date"], [1, "feedback-rating"], ["class", "feedback-correct", 4, "ngIf"], ["class", "feedback-comments", 4, "ngIf"], [1, "feedback-correct"], [1, "feedback-comments"]], template: function TestRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
751
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2);
752
+ i0.ɵɵtemplate(3, TestRunFormComponentExtended_a_3_Template, 3, 1, "a", 3)(4, TestRunFormComponentExtended_i_4_Template, 1, 0, "i", 4);
753
+ i0.ɵɵelementStart(5, "span");
754
+ i0.ɵɵtext(6);
755
+ i0.ɵɵelementEnd()();
756
+ i0.ɵɵelementStart(7, "div", 5)(8, "div", 6)(9, "div", 7);
757
+ i0.ɵɵelement(10, "i", 8);
758
+ i0.ɵɵelementEnd();
759
+ i0.ɵɵelementStart(11, "div", 9)(12, "h1");
760
+ i0.ɵɵtext(13, "Test Run");
761
+ i0.ɵɵelementEnd();
762
+ i0.ɵɵelementStart(14, "div", 10)(15, "span", 11);
763
+ i0.ɵɵelement(16, "i", 12);
764
+ i0.ɵɵtext(17);
765
+ i0.ɵɵelementEnd();
766
+ i0.ɵɵtemplate(18, TestRunFormComponentExtended_span_18_Template, 2, 1, "span", 13);
767
+ i0.ɵɵelementEnd()()();
768
+ i0.ɵɵelementStart(19, "div", 14)(20, "button", 15);
769
+ i0.ɵɵlistener("click", function TestRunFormComponentExtended_Template_button_click_20_listener() { return ctx.reRunTest(); });
770
+ i0.ɵɵtext(21, " Re-run Test ");
771
+ i0.ɵɵelementEnd();
772
+ i0.ɵɵelementStart(22, "button", 16);
773
+ i0.ɵɵlistener("click", function TestRunFormComponentExtended_Template_button_click_22_listener() { return ctx.refresh(); });
774
+ i0.ɵɵtext(23, " Refresh ");
775
+ i0.ɵɵelementEnd()()();
776
+ i0.ɵɵelementStart(24, "div", 17)(25, "div", 18)(26, "div", 19);
777
+ i0.ɵɵtext(27, "Started");
778
+ i0.ɵɵelementEnd();
779
+ i0.ɵɵelementStart(28, "div", 20);
780
+ i0.ɵɵtext(29);
781
+ i0.ɵɵpipe(30, "date");
782
+ i0.ɵɵelementEnd()();
783
+ i0.ɵɵelementStart(31, "div", 18)(32, "div", 19);
784
+ i0.ɵɵtext(33, "Completed");
785
+ i0.ɵɵelementEnd();
786
+ i0.ɵɵelementStart(34, "div", 20);
787
+ i0.ɵɵtext(35);
788
+ i0.ɵɵpipe(36, "date");
789
+ i0.ɵɵelementEnd()();
790
+ i0.ɵɵelementStart(37, "div", 18)(38, "div", 19);
791
+ i0.ɵɵtext(39, "Duration");
792
+ i0.ɵɵelementEnd();
793
+ i0.ɵɵelementStart(40, "div", 20);
794
+ i0.ɵɵtext(41);
795
+ i0.ɵɵelementEnd()();
796
+ i0.ɵɵelementStart(42, "div", 18)(43, "div", 19);
797
+ i0.ɵɵtext(44, "Score");
798
+ i0.ɵɵelementEnd();
799
+ i0.ɵɵelementStart(45, "div", 20);
800
+ i0.ɵɵtext(46);
801
+ i0.ɵɵelementEnd()();
802
+ i0.ɵɵelementStart(47, "div", 18)(48, "div", 19);
803
+ i0.ɵɵtext(49, "Cost");
804
+ i0.ɵɵelementEnd();
805
+ i0.ɵɵelementStart(50, "div", 20);
806
+ i0.ɵɵtext(51);
807
+ i0.ɵɵelementEnd()()();
808
+ i0.ɵɵelementStart(52, "div", 21)(53, "div", 22)(54, "span", 19);
809
+ i0.ɵɵtext(55, "Checks:");
810
+ i0.ɵɵelementEnd();
811
+ i0.ɵɵelementStart(56, "span", 20);
812
+ i0.ɵɵtext(57);
813
+ i0.ɵɵelementEnd()();
814
+ i0.ɵɵelementStart(58, "div", 22)(59, "span", 19);
815
+ i0.ɵɵtext(60, "Run By:");
816
+ i0.ɵɵelementEnd();
817
+ i0.ɵɵelementStart(61, "span", 20);
818
+ i0.ɵɵtext(62);
819
+ i0.ɵɵelementEnd()();
820
+ i0.ɵɵtemplate(63, TestRunFormComponentExtended_div_63_Template, 5, 2, "div", 23);
821
+ i0.ɵɵelementEnd()();
822
+ i0.ɵɵelementStart(64, "div", 24)(65, "div", 25)(66, "button", 26);
823
+ i0.ɵɵlistener("click", function TestRunFormComponentExtended_Template_button_click_66_listener() { return ctx.changeTab("overview"); });
824
+ i0.ɵɵelement(67, "i", 27);
825
+ i0.ɵɵelementStart(68, "span");
826
+ i0.ɵɵtext(69, "Overview");
827
+ i0.ɵɵelementEnd()();
828
+ i0.ɵɵelementStart(70, "button", 26);
829
+ i0.ɵɵlistener("click", function TestRunFormComponentExtended_Template_button_click_70_listener() { return ctx.changeTab("details"); });
830
+ i0.ɵɵelement(71, "i", 28);
831
+ i0.ɵɵelementStart(72, "span");
832
+ i0.ɵɵtext(73, "Details");
833
+ i0.ɵɵelementEnd()();
834
+ i0.ɵɵelementStart(74, "button", 26);
835
+ i0.ɵɵlistener("click", function TestRunFormComponentExtended_Template_button_click_74_listener() { return ctx.changeTab("ai-runs"); });
836
+ i0.ɵɵelement(75, "i", 29);
837
+ i0.ɵɵelementStart(76, "span");
838
+ i0.ɵɵtext(77, "AI Runs");
839
+ i0.ɵɵelementEnd();
840
+ i0.ɵɵtemplate(78, TestRunFormComponentExtended_span_78_Template, 2, 1, "span", 30);
841
+ i0.ɵɵelementEnd();
842
+ i0.ɵɵelementStart(79, "button", 26);
843
+ i0.ɵɵlistener("click", function TestRunFormComponentExtended_Template_button_click_79_listener() { return ctx.changeTab("feedback"); });
844
+ i0.ɵɵelement(80, "i", 31);
845
+ i0.ɵɵelementStart(81, "span");
846
+ i0.ɵɵtext(82, "Feedback");
847
+ i0.ɵɵelementEnd();
848
+ i0.ɵɵtemplate(83, TestRunFormComponentExtended_span_83_Template, 2, 1, "span", 30);
849
+ i0.ɵɵelementEnd()()();
850
+ i0.ɵɵelementStart(84, "div", 32);
851
+ i0.ɵɵtemplate(85, TestRunFormComponentExtended_div_85_Template, 26, 19, "div", 33)(86, TestRunFormComponentExtended_div_86_Template, 66, 20, "div", 34)(87, TestRunFormComponentExtended_div_87_Template, 4, 3, "div", 35)(88, TestRunFormComponentExtended_div_88_Template, 3, 2, "div", 36);
852
+ i0.ɵɵelementEnd()();
853
+ } if (rf & 2) {
854
+ i0.ɵɵadvance(3);
855
+ i0.ɵɵproperty("ngIf", ctx.test);
856
+ i0.ɵɵadvance();
857
+ i0.ɵɵproperty("ngIf", ctx.test);
858
+ i0.ɵɵadvance(2);
859
+ i0.ɵɵtextInterpolate1("Run #", ctx.record.ID.substring(0, 8), "");
860
+ i0.ɵɵadvance(3);
861
+ i0.ɵɵstyleProp("background-color", ctx.getStatusColor());
862
+ i0.ɵɵadvance(6);
863
+ i0.ɵɵstyleProp("background-color", ctx.getStatusColor());
864
+ i0.ɵɵadvance();
865
+ i0.ɵɵproperty("ngClass", ctx.getStatusIcon());
866
+ i0.ɵɵadvance();
867
+ i0.ɵɵtextInterpolate1(" ", ctx.record.Status, " ");
868
+ i0.ɵɵadvance();
869
+ i0.ɵɵproperty("ngIf", ctx.test);
870
+ i0.ɵɵadvance(11);
871
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(30, 33, ctx.record.StartedAt, "short"));
872
+ i0.ɵɵadvance(6);
873
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(36, 36, ctx.record.CompletedAt, "short"));
874
+ i0.ɵɵadvance(6);
875
+ i0.ɵɵtextInterpolate(ctx.calculateDuration());
876
+ i0.ɵɵadvance(5);
877
+ i0.ɵɵtextInterpolate(ctx.formatScore(ctx.record.Score));
878
+ i0.ɵɵadvance(5);
879
+ i0.ɵɵtextInterpolate(ctx.formatCost(ctx.record.CostUSD));
880
+ i0.ɵɵadvance(6);
881
+ i0.ɵɵtextInterpolate2("", ctx.record.PassedChecks, "/", ctx.record.TotalChecks, "");
882
+ i0.ɵɵadvance(5);
883
+ i0.ɵɵtextInterpolate(ctx.record.RunByUser);
884
+ i0.ɵɵadvance();
885
+ i0.ɵɵproperty("ngIf", ctx.testSuiteRun);
886
+ i0.ɵɵadvance(3);
887
+ i0.ɵɵclassProp("active", ctx.activeTab === "overview");
888
+ i0.ɵɵadvance(4);
889
+ i0.ɵɵclassProp("active", ctx.activeTab === "details");
890
+ i0.ɵɵadvance(4);
891
+ i0.ɵɵclassProp("active", ctx.activeTab === "ai-runs");
892
+ i0.ɵɵadvance(4);
893
+ i0.ɵɵproperty("ngIf", ctx.aiRunsLoaded);
894
+ i0.ɵɵadvance();
895
+ i0.ɵɵclassProp("active", ctx.activeTab === "feedback");
896
+ i0.ɵɵadvance(4);
897
+ i0.ɵɵproperty("ngIf", ctx.feedbackLoaded);
898
+ i0.ɵɵadvance(2);
899
+ i0.ɵɵproperty("ngIf", ctx.activeTab === "overview");
900
+ i0.ɵɵadvance();
901
+ i0.ɵɵproperty("ngIf", ctx.activeTab === "details");
902
+ i0.ɵɵadvance();
903
+ i0.ɵɵproperty("ngIf", ctx.activeTab === "ai-runs");
904
+ i0.ɵɵadvance();
905
+ i0.ɵɵproperty("ngIf", ctx.activeTab === "feedback");
906
+ } }, dependencies: [i3.NgClass, i3.NgForOf, i3.NgIf, i4.ButtonComponent, i3.JsonPipe, i3.DatePipe], styles: [".test-run-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f8f9fa;\n}\n\n\n\n.test-run-header[_ngcontent-%COMP%] {\n background: white;\n border-bottom: 1px solid #e0e0e0;\n padding: 20px;\n}\n\n.breadcrumb[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: #666;\n margin-bottom: 16px;\n}\n\n.breadcrumb[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n color: #2196f3;\n text-decoration: none;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.breadcrumb[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 20px;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n}\n\n.test-run-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 24px;\n}\n\n.test-run-info[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 24px;\n font-weight: 600;\n color: #333;\n}\n\n.test-run-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 12px;\n color: white;\n font-size: 12px;\n font-weight: 600;\n}\n\n.test-type[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #666;\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.metrics-bar[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(5, 1fr);\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.metric-card[_ngcontent-%COMP%] {\n background: #f5f7fa;\n border-radius: 8px;\n padding: 12px;\n text-align: center;\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: #999;\n margin-bottom: 4px;\n}\n\n.metric-value[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.secondary-metrics[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 12px;\n border-top: 1px solid #e0e0e0;\n}\n\n.metric-item[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n font-size: 14px;\n}\n\n.metric-item[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n color: #666;\n text-transform: none;\n letter-spacing: normal;\n}\n\n.metric-item[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n color: #333;\n font-weight: 500;\n font-size: 14px;\n}\n\n.metric-item[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n color: #2196f3;\n text-decoration: none;\n}\n\n.metric-item[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n\n\n.tabs-container[_ngcontent-%COMP%] {\n background: white;\n border-bottom: 1px solid #e0e0e0;\n}\n\n.tabs[_ngcontent-%COMP%] {\n display: flex;\n padding: 0 20px;\n overflow-x: auto;\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: #666;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.tab[_ngcontent-%COMP%]:hover {\n color: #2196f3;\n background: rgba(33, 150, 243, 0.05);\n}\n\n.tab.active[_ngcontent-%COMP%] {\n color: #2196f3;\n border-bottom-color: #2196f3;\n}\n\n.tab[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n}\n\n.tab-badge[_ngcontent-%COMP%] {\n background: #e0e0e0;\n color: #666;\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: #e3f2fd;\n color: #2196f3;\n}\n\n\n\n.tab-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n\n\n.overview-tab[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.result-hero[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n padding: 32px;\n text-align: center;\n border: 3px solid #e0e0e0;\n}\n\n.result-hero.passed[_ngcontent-%COMP%] {\n background: #e8f5e9;\n border-color: #4caf50;\n}\n\n.result-hero.failed[_ngcontent-%COMP%] {\n background: #ffebee;\n border-color: #f44336;\n}\n\n.result-icon[_ngcontent-%COMP%] {\n font-size: 64px;\n margin-bottom: 16px;\n}\n\n.result-hero.passed[_ngcontent-%COMP%] .result-icon[_ngcontent-%COMP%] {\n color: #4caf50;\n}\n\n.result-hero.failed[_ngcontent-%COMP%] .result-icon[_ngcontent-%COMP%] {\n color: #f44336;\n}\n\n.result-text[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 32px;\n font-weight: 700;\n color: #333;\n}\n\n.result-score[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 600;\n color: #666;\n margin-bottom: 8px;\n}\n\n.result-checks[_ngcontent-%COMP%] {\n font-size: 16px;\n color: #999;\n}\n\n.check-results[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n padding: 20px;\n}\n\n.check-results[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n font-size: 18px;\n font-weight: 600;\n color: #333;\n}\n\n.check-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.check-item[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding: 12px;\n border-radius: 8px;\n border: 2px solid #e0e0e0;\n}\n\n.check-item.passed[_ngcontent-%COMP%] {\n background: #f1f8f4;\n border-color: #c8e6c9;\n}\n\n.check-item.failed[_ngcontent-%COMP%] {\n background: #fef5f5;\n border-color: #ffcdd2;\n}\n\n.check-icon[_ngcontent-%COMP%] {\n font-size: 20px;\n flex-shrink: 0;\n}\n\n.check-item.passed[_ngcontent-%COMP%] .check-icon[_ngcontent-%COMP%] {\n color: #4caf50;\n}\n\n.check-item.failed[_ngcontent-%COMP%] .check-icon[_ngcontent-%COMP%] {\n color: #f44336;\n}\n\n.check-content[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.check-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: #333;\n margin-bottom: 4px;\n}\n\n.check-details[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #666;\n line-height: 1.4;\n}\n\n.check-weight[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #999;\n margin-top: 4px;\n}\n\n.comparison-section[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n padding: 20px;\n}\n\n.comparison-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n font-size: 18px;\n font-weight: 600;\n color: #333;\n}\n\n.comparison-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-bottom: 16px;\n border-bottom: 2px solid #e0e0e0;\n}\n\n.comparison-tab[_ngcontent-%COMP%] {\n padding: 10px 20px;\n border: none;\n background: transparent;\n color: #666;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n border-bottom: 3px solid transparent;\n margin-bottom: -2px;\n transition: all 0.2s ease;\n}\n\n.comparison-tab[_ngcontent-%COMP%]:hover {\n color: #2196f3;\n}\n\n.comparison-tab.active[_ngcontent-%COMP%] {\n color: #2196f3;\n border-bottom-color: #2196f3;\n}\n\n.comparison-content[_ngcontent-%COMP%] {\n background: #1e1e1e;\n border-radius: 8px;\n padding: 16px;\n max-height: 400px;\n overflow-y: auto;\n}\n\n.comparison-content[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] {\n margin: 0;\n font-family: 'Courier New', monospace;\n font-size: 13px;\n line-height: 1.5;\n color: #e0e0e0;\n white-space: pre-wrap;\n word-wrap: break-word;\n}\n\n\n\n.details-tab[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.details-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 16px;\n background: white;\n border-radius: 12px;\n padding: 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: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: #999;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #333;\n word-wrap: break-word;\n}\n\n.detail-value[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n color: #2196f3;\n text-decoration: none;\n}\n\n.detail-value[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.error-message[_ngcontent-%COMP%], .result-details-json[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n padding: 20px;\n}\n\n.error-message[_ngcontent-%COMP%] h4[_ngcontent-%COMP%], .result-details-json[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.error-message[_ngcontent-%COMP%] pre[_ngcontent-%COMP%], .result-details-json[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] {\n margin: 0;\n font-family: 'Courier New', monospace;\n font-size: 13px;\n line-height: 1.5;\n color: #333;\n white-space: pre-wrap;\n word-wrap: break-word;\n background: #f5f7fa;\n padding: 16px;\n border-radius: 8px;\n}\n\n\n\n.ai-runs-tab[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.ai-runs-section[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n padding: 20px;\n}\n\n.ai-runs-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n font-size: 18px;\n font-weight: 600;\n color: #333;\n}\n\n.ai-run-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.ai-run-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n background: #f8f9fa;\n border: 2px solid transparent;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.ai-run-card[_ngcontent-%COMP%]:hover {\n background: #e3f2fd;\n border-color: #90caf9;\n}\n\n.ai-run-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #2196f3;\n color: white;\n border-radius: 8px;\n font-size: 18px;\n flex-shrink: 0;\n}\n\n.ai-run-icon.prompt[_ngcontent-%COMP%] {\n background: #9c27b0;\n}\n\n.ai-run-content[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.ai-run-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: #333;\n margin-bottom: 4px;\n}\n\n.ai-run-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: #666;\n}\n\n.ai-run-card[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n color: #999;\n font-size: 14px;\n}\n\n\n\n.feedback-tab[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n padding: 20px;\n}\n\n.feedback-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.feedback-item[_ngcontent-%COMP%] {\n padding: 16px;\n background: #f8f9fa;\n border-radius: 8px;\n border: 1px solid #e0e0e0;\n}\n\n.feedback-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n}\n\n.feedback-user[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: #333;\n}\n\n.feedback-date[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #999;\n}\n\n.feedback-rating[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #666;\n margin-bottom: 8px;\n}\n\n.feedback-correct[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #666;\n margin-bottom: 8px;\n}\n\n.feedback-comments[_ngcontent-%COMP%] {\n font-size: 14px;\n line-height: 1.5;\n color: #333;\n padding: 12px;\n background: white;\n border-radius: 6px;\n border-left: 3px solid #2196f3;\n}\n\n\n\n.no-data[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n color: #999;\n text-align: center;\n}\n\n.no-data[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.no-data[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n}\n\n\n\n@media (max-width: 1200px) {\n .metrics-bar[_ngcontent-%COMP%] {\n grid-template-columns: repeat(3, 1fr);\n }\n}\n\n@media (max-width: 768px) {\n .metrics-bar[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .details-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .header-content[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n\n .tabs[_ngcontent-%COMP%] {\n overflow-x: auto;\n }\n}"], changeDetection: 0 }); }
907
+ };
908
+ TestRunFormComponentExtended = __decorate([
909
+ RegisterClass(BaseFormComponent, 'MJ: Test Runs')
910
+ ], TestRunFormComponentExtended);
911
+ export { TestRunFormComponentExtended };
912
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TestRunFormComponentExtended, [{
913
+ type: Component,
914
+ args: [{ selector: 'mj-test-run-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"test-run-form\">\n <!-- Header Section -->\n <div class=\"test-run-header\">\n <div class=\"breadcrumb\">\n <a href=\"javascript:void(0)\" (click)=\"openTest()\" *ngIf=\"test\">\n <i class=\"fas fa-flask\"></i> {{ test.Name }}\n </a>\n <i class=\"fas fa-chevron-right\" *ngIf=\"test\"></i>\n <span>Run #{{ record.ID.substring(0, 8) }}</span>\n </div>\n\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"test-run-icon\" [style.background-color]=\"getStatusColor()\">\n <i class=\"fas fa-flask\"></i>\n </div>\n <div class=\"test-run-info\">\n <h1>Test Run</h1>\n <div class=\"test-run-meta\">\n <span class=\"status-badge\" [style.background-color]=\"getStatusColor()\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon()\"></i>\n {{ record.Status }}\n </span>\n <span class=\"test-type\" *ngIf=\"test\">{{ test.Type }}</span>\n </div>\n </div>\n </div>\n <div class=\"header-actions\">\n <button kendoButton (click)=\"reRunTest()\" icon=\"refresh\">\n Re-run Test\n </button>\n <button kendoButton (click)=\"refresh()\" icon=\"sync\">\n 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-label\">Started</div>\n <div class=\"metric-value\">{{ record.StartedAt | date:'short' }}</div>\n </div>\n <div class=\"metric-card\">\n <div class=\"metric-label\">Completed</div>\n <div class=\"metric-value\">{{ record.CompletedAt | date:'short' }}</div>\n </div>\n <div class=\"metric-card\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ calculateDuration() }}</div>\n </div>\n <div class=\"metric-card\">\n <div class=\"metric-label\">Score</div>\n <div class=\"metric-value\">{{ formatScore(record.Score) }}</div>\n </div>\n <div class=\"metric-card\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.CostUSD) }}</div>\n </div>\n </div>\n\n <!-- Secondary Metrics -->\n <div class=\"secondary-metrics\">\n <div class=\"metric-item\">\n <span class=\"metric-label\">Checks:</span>\n <span class=\"metric-value\">{{ record.PassedChecks }}/{{ record.TotalChecks }}</span>\n </div>\n <div class=\"metric-item\">\n <span class=\"metric-label\">Run By:</span>\n <span class=\"metric-value\">{{ record.RunByUser }}</span>\n </div>\n <div class=\"metric-item\" *ngIf=\"testSuiteRun\">\n <span class=\"metric-label\">Part of Suite:</span>\n <a href=\"javascript:void(0)\" (click)=\"openTestSuiteRun()\">\n {{ testSuiteRun.ID }} (Seq: {{ record.Sequence }})\n </a>\n </div>\n </div>\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs-container\">\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"activeTab === 'overview'\" (click)=\"changeTab('overview')\">\n <i class=\"fas fa-th-large\"></i>\n <span>Overview</span>\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'details'\" (click)=\"changeTab('details')\">\n <i class=\"fas fa-list\"></i>\n <span>Details</span>\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'ai-runs'\" (click)=\"changeTab('ai-runs')\">\n <i class=\"fas fa-robot\"></i>\n <span>AI Runs</span>\n <span class=\"tab-badge\" *ngIf=\"aiRunsLoaded\">{{ aiAgentRuns.length + aiPromptRuns.length }}</span>\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'feedback'\" (click)=\"changeTab('feedback')\">\n <i class=\"fas fa-comments\"></i>\n <span>Feedback</span>\n <span class=\"tab-badge\" *ngIf=\"feedbackLoaded\">{{ feedbacks.length }}</span>\n </button>\n </div>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tab-content\">\n <!-- Overview Tab -->\n <div class=\"overview-tab\" *ngIf=\"activeTab === 'overview'\">\n <!-- Result Hero -->\n <div class=\"result-hero\" [class.passed]=\"record.Status === 'Passed'\" [class.failed]=\"record.Status === 'Failed'\">\n <div class=\"result-icon\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon()\"></i>\n </div>\n <div class=\"result-text\">\n <h2>TEST {{ record.Status.toUpperCase() }}</h2>\n <div class=\"result-score\">Score: {{ formatScore(record.Score) }} / 1.0000</div>\n <div class=\"result-checks\">{{ record.PassedChecks }} of {{ record.TotalChecks }} checks passed</div>\n </div>\n </div>\n\n <!-- Check Results -->\n <div class=\"check-results\" *ngIf=\"getCheckResults().length > 0\">\n <h3>Check Results</h3>\n <div class=\"check-list\">\n <div class=\"check-item\" *ngFor=\"let check of getCheckResults()\" [class.passed]=\"check.passed\" [class.failed]=\"!check.passed\">\n <div class=\"check-icon\">\n <i class=\"fas\" [class.fa-check-circle]=\"check.passed\" [class.fa-times-circle]=\"!check.passed\"></i>\n </div>\n <div class=\"check-content\">\n <div class=\"check-name\">{{ check.name }}</div>\n <div class=\"check-details\">{{ check.message }}</div>\n <div class=\"check-weight\" *ngIf=\"check.weight\">Weight: {{ check.weight }}</div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Input / Expected / Actual Comparison -->\n <div class=\"comparison-section\">\n <h3>Data Comparison</h3>\n <div class=\"comparison-tabs\">\n <button class=\"comparison-tab\" [class.active]=\"comparisonView === 'input'\" (click)=\"setComparisonView('input')\">\n Input\n </button>\n <button class=\"comparison-tab\" [class.active]=\"comparisonView === 'expected'\" (click)=\"setComparisonView('expected')\">\n Expected\n </button>\n <button class=\"comparison-tab\" [class.active]=\"comparisonView === 'actual'\" (click)=\"setComparisonView('actual')\">\n Actual\n </button>\n </div>\n <div class=\"comparison-content\">\n <pre>{{ getComparisonData() | json }}</pre>\n </div>\n </div>\n </div>\n\n <!-- Details Tab -->\n <div class=\"details-tab\" *ngIf=\"activeTab === 'details'\">\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <div class=\"detail-label\">Test Run ID</div>\n <div class=\"detail-value\">{{ record.ID }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Test</div>\n <div class=\"detail-value\">\n <a href=\"javascript:void(0)\" (click)=\"openTest()\" *ngIf=\"test\">{{ test.Name }}</a>\n </div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Status</div>\n <div class=\"detail-value\">{{ record.Status }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Target Type</div>\n <div class=\"detail-value\">{{ record.TargetType || '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\">Duration</div>\n <div class=\"detail-value\">{{ calculateDuration() }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Score</div>\n <div class=\"detail-value\">{{ formatScore(record.Score) }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Cost</div>\n <div class=\"detail-value\">{{ formatCost(record.CostUSD) }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Passed Checks</div>\n <div class=\"detail-value\">{{ record.PassedChecks }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Failed Checks</div>\n <div class=\"detail-value\">{{ record.FailedChecks }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Total Checks</div>\n <div class=\"detail-value\">{{ record.TotalChecks }}</div>\n </div>\n </div>\n\n <div class=\"error-message\" *ngIf=\"record.ErrorMessage\">\n <h4>Error Message</h4>\n <pre>{{ record.ErrorMessage }}</pre>\n </div>\n\n <div class=\"result-details-json\" *ngIf=\"record.ResultDetails\">\n <h4>Full Result Details (JSON)</h4>\n <pre>{{ parsedData.resultDetails | json }}</pre>\n </div>\n </div>\n\n <!-- AI Runs Tab -->\n <div class=\"ai-runs-tab\" *ngIf=\"activeTab === 'ai-runs'\">\n <div class=\"ai-runs-section\" *ngIf=\"aiAgentRuns.length > 0\">\n <h3>AI Agent Runs ({{ aiAgentRuns.length }})</h3>\n <div class=\"ai-run-list\">\n <div class=\"ai-run-card\" *ngFor=\"let run of aiAgentRuns\" (click)=\"openAIAgentRun(run.ID)\">\n <div class=\"ai-run-icon\">\n <i class=\"fas fa-robot\"></i>\n </div>\n <div class=\"ai-run-content\">\n <div class=\"ai-run-name\">{{ run.Agent }}</div>\n <div class=\"ai-run-meta\">\n <span>{{ run.Status }}</span>\n <span *ngIf=\"run.TotalCost\">${{ run.TotalCost }}</span>\n </div>\n </div>\n <i class=\"fas fa-external-link-alt\"></i>\n </div>\n </div>\n </div>\n\n <div class=\"ai-runs-section\" *ngIf=\"aiPromptRuns.length > 0\">\n <h3>AI Prompt Runs ({{ aiPromptRuns.length }})</h3>\n <div class=\"ai-run-list\">\n <div class=\"ai-run-card\" *ngFor=\"let run of aiPromptRuns\" (click)=\"openAIPromptRun(run.ID)\">\n <div class=\"ai-run-icon prompt\">\n <i class=\"fas fa-comment-dots\"></i>\n </div>\n <div class=\"ai-run-content\">\n <div class=\"ai-run-name\">{{ run.Prompt || run.Model }}</div>\n <div class=\"ai-run-meta\">\n <span *ngIf=\"run.TotalCost\">${{ run.TotalCost }}</span>\n </div>\n </div>\n <i class=\"fas fa-external-link-alt\"></i>\n </div>\n </div>\n </div>\n\n <div class=\"no-data\" *ngIf=\"aiRunsLoaded && aiAgentRuns.length === 0 && aiPromptRuns.length === 0\">\n <i class=\"fas fa-inbox\"></i>\n <p>No AI runs associated with this test execution</p>\n </div>\n </div>\n\n <!-- Feedback Tab -->\n <div class=\"feedback-tab\" *ngIf=\"activeTab === 'feedback'\">\n <div class=\"feedback-list\" *ngIf=\"feedbacks.length > 0\">\n <div class=\"feedback-item\" *ngFor=\"let feedback of feedbacks\">\n <div class=\"feedback-header\">\n <div class=\"feedback-user\">\n <i class=\"fas fa-user\"></i>\n {{ feedback.ReviewerUserID }}\n </div>\n <div class=\"feedback-date\">\n {{ feedback.__mj_CreatedAt | date:'medium' }}\n </div>\n </div>\n <div class=\"feedback-rating\">\n Rating: {{ feedback.Rating }}/10\n </div>\n <div class=\"feedback-correct\" *ngIf=\"feedback.IsCorrect !== null\">\n Automated Result: {{ feedback.IsCorrect ? 'Correct' : 'Incorrect' }}\n </div>\n <div class=\"feedback-comments\" *ngIf=\"feedback.CorrectionSummary\">\n {{ feedback.CorrectionSummary }}\n </div>\n </div>\n </div>\n\n <div class=\"no-data\" *ngIf=\"feedbackLoaded && feedbacks.length === 0\">\n <i class=\"fas fa-inbox\"></i>\n <p>No feedback submitted for this test run</p>\n </div>\n </div>\n </div>\n</div>\n", styles: [".test-run-form {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f8f9fa;\n}\n\n/* Header */\n.test-run-header {\n background: white;\n border-bottom: 1px solid #e0e0e0;\n padding: 20px;\n}\n\n.breadcrumb {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: #666;\n margin-bottom: 16px;\n}\n\n.breadcrumb a {\n color: #2196f3;\n text-decoration: none;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.breadcrumb a:hover {\n text-decoration: underline;\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 20px;\n}\n\n.header-left {\n display: flex;\n gap: 16px;\n}\n\n.test-run-icon {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 24px;\n}\n\n.test-run-info h1 {\n margin: 0 0 8px 0;\n font-size: 24px;\n font-weight: 600;\n color: #333;\n}\n\n.test-run-meta {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 12px;\n color: white;\n font-size: 12px;\n font-weight: 600;\n}\n\n.test-type {\n font-size: 14px;\n color: #666;\n}\n\n.header-actions {\n display: flex;\n gap: 8px;\n}\n\n.metrics-bar {\n display: grid;\n grid-template-columns: repeat(5, 1fr);\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.metric-card {\n background: #f5f7fa;\n border-radius: 8px;\n padding: 12px;\n text-align: center;\n}\n\n.metric-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: #999;\n margin-bottom: 4px;\n}\n\n.metric-value {\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.secondary-metrics {\n display: flex;\n gap: 24px;\n padding-top: 12px;\n border-top: 1px solid #e0e0e0;\n}\n\n.metric-item {\n display: flex;\n gap: 8px;\n font-size: 14px;\n}\n\n.metric-item .metric-label {\n color: #666;\n text-transform: none;\n letter-spacing: normal;\n}\n\n.metric-item .metric-value {\n color: #333;\n font-weight: 500;\n font-size: 14px;\n}\n\n.metric-item a {\n color: #2196f3;\n text-decoration: none;\n}\n\n.metric-item a:hover {\n text-decoration: underline;\n}\n\n/* Tabs */\n.tabs-container {\n background: white;\n border-bottom: 1px solid #e0e0e0;\n}\n\n.tabs {\n display: flex;\n padding: 0 20px;\n overflow-x: auto;\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: #666;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.tab:hover {\n color: #2196f3;\n background: rgba(33, 150, 243, 0.05);\n}\n\n.tab.active {\n color: #2196f3;\n border-bottom-color: #2196f3;\n}\n\n.tab i {\n font-size: 16px;\n}\n\n.tab-badge {\n background: #e0e0e0;\n color: #666;\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: #e3f2fd;\n color: #2196f3;\n}\n\n/* Tab Content */\n.tab-content {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* Overview Tab */\n.overview-tab {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.result-hero {\n background: white;\n border-radius: 12px;\n padding: 32px;\n text-align: center;\n border: 3px solid #e0e0e0;\n}\n\n.result-hero.passed {\n background: #e8f5e9;\n border-color: #4caf50;\n}\n\n.result-hero.failed {\n background: #ffebee;\n border-color: #f44336;\n}\n\n.result-icon {\n font-size: 64px;\n margin-bottom: 16px;\n}\n\n.result-hero.passed .result-icon {\n color: #4caf50;\n}\n\n.result-hero.failed .result-icon {\n color: #f44336;\n}\n\n.result-text h2 {\n margin: 0 0 12px 0;\n font-size: 32px;\n font-weight: 700;\n color: #333;\n}\n\n.result-score {\n font-size: 20px;\n font-weight: 600;\n color: #666;\n margin-bottom: 8px;\n}\n\n.result-checks {\n font-size: 16px;\n color: #999;\n}\n\n.check-results {\n background: white;\n border-radius: 12px;\n padding: 20px;\n}\n\n.check-results h3 {\n margin: 0 0 16px 0;\n font-size: 18px;\n font-weight: 600;\n color: #333;\n}\n\n.check-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.check-item {\n display: flex;\n gap: 12px;\n padding: 12px;\n border-radius: 8px;\n border: 2px solid #e0e0e0;\n}\n\n.check-item.passed {\n background: #f1f8f4;\n border-color: #c8e6c9;\n}\n\n.check-item.failed {\n background: #fef5f5;\n border-color: #ffcdd2;\n}\n\n.check-icon {\n font-size: 20px;\n flex-shrink: 0;\n}\n\n.check-item.passed .check-icon {\n color: #4caf50;\n}\n\n.check-item.failed .check-icon {\n color: #f44336;\n}\n\n.check-content {\n flex: 1;\n}\n\n.check-name {\n font-size: 14px;\n font-weight: 600;\n color: #333;\n margin-bottom: 4px;\n}\n\n.check-details {\n font-size: 13px;\n color: #666;\n line-height: 1.4;\n}\n\n.check-weight {\n font-size: 12px;\n color: #999;\n margin-top: 4px;\n}\n\n.comparison-section {\n background: white;\n border-radius: 12px;\n padding: 20px;\n}\n\n.comparison-section h3 {\n margin: 0 0 16px 0;\n font-size: 18px;\n font-weight: 600;\n color: #333;\n}\n\n.comparison-tabs {\n display: flex;\n gap: 8px;\n margin-bottom: 16px;\n border-bottom: 2px solid #e0e0e0;\n}\n\n.comparison-tab {\n padding: 10px 20px;\n border: none;\n background: transparent;\n color: #666;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n border-bottom: 3px solid transparent;\n margin-bottom: -2px;\n transition: all 0.2s ease;\n}\n\n.comparison-tab:hover {\n color: #2196f3;\n}\n\n.comparison-tab.active {\n color: #2196f3;\n border-bottom-color: #2196f3;\n}\n\n.comparison-content {\n background: #1e1e1e;\n border-radius: 8px;\n padding: 16px;\n max-height: 400px;\n overflow-y: auto;\n}\n\n.comparison-content pre {\n margin: 0;\n font-family: 'Courier New', monospace;\n font-size: 13px;\n line-height: 1.5;\n color: #e0e0e0;\n white-space: pre-wrap;\n word-wrap: break-word;\n}\n\n/* Details Tab */\n.details-tab {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.details-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 16px;\n background: white;\n border-radius: 12px;\n padding: 20px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.detail-label {\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: #999;\n}\n\n.detail-value {\n font-size: 14px;\n color: #333;\n word-wrap: break-word;\n}\n\n.detail-value a {\n color: #2196f3;\n text-decoration: none;\n}\n\n.detail-value a:hover {\n text-decoration: underline;\n}\n\n.error-message, .result-details-json {\n background: white;\n border-radius: 12px;\n padding: 20px;\n}\n\n.error-message h4, .result-details-json h4 {\n margin: 0 0 12px 0;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.error-message pre, .result-details-json pre {\n margin: 0;\n font-family: 'Courier New', monospace;\n font-size: 13px;\n line-height: 1.5;\n color: #333;\n white-space: pre-wrap;\n word-wrap: break-word;\n background: #f5f7fa;\n padding: 16px;\n border-radius: 8px;\n}\n\n/* AI Runs Tab */\n.ai-runs-tab {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.ai-runs-section {\n background: white;\n border-radius: 12px;\n padding: 20px;\n}\n\n.ai-runs-section h3 {\n margin: 0 0 16px 0;\n font-size: 18px;\n font-weight: 600;\n color: #333;\n}\n\n.ai-run-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.ai-run-card {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n background: #f8f9fa;\n border: 2px solid transparent;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.ai-run-card:hover {\n background: #e3f2fd;\n border-color: #90caf9;\n}\n\n.ai-run-icon {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #2196f3;\n color: white;\n border-radius: 8px;\n font-size: 18px;\n flex-shrink: 0;\n}\n\n.ai-run-icon.prompt {\n background: #9c27b0;\n}\n\n.ai-run-content {\n flex: 1;\n}\n\n.ai-run-name {\n font-size: 14px;\n font-weight: 600;\n color: #333;\n margin-bottom: 4px;\n}\n\n.ai-run-meta {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: #666;\n}\n\n.ai-run-card > i {\n color: #999;\n font-size: 14px;\n}\n\n/* Feedback Tab */\n.feedback-tab {\n background: white;\n border-radius: 12px;\n padding: 20px;\n}\n\n.feedback-list {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.feedback-item {\n padding: 16px;\n background: #f8f9fa;\n border-radius: 8px;\n border: 1px solid #e0e0e0;\n}\n\n.feedback-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n}\n\n.feedback-user {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: #333;\n}\n\n.feedback-date {\n font-size: 12px;\n color: #999;\n}\n\n.feedback-rating {\n font-size: 14px;\n color: #666;\n margin-bottom: 8px;\n}\n\n.feedback-correct {\n font-size: 14px;\n color: #666;\n margin-bottom: 8px;\n}\n\n.feedback-comments {\n font-size: 14px;\n line-height: 1.5;\n color: #333;\n padding: 12px;\n background: white;\n border-radius: 6px;\n border-left: 3px solid #2196f3;\n}\n\n/* No Data State */\n.no-data {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n color: #999;\n text-align: center;\n}\n\n.no-data i {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.no-data p {\n margin: 0;\n font-size: 14px;\n}\n\n/* Responsive */\n@media (max-width: 1200px) {\n .metrics-bar {\n grid-template-columns: repeat(3, 1fr);\n }\n}\n\n@media (max-width: 768px) {\n .metrics-bar {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .details-grid {\n grid-template-columns: 1fr;\n }\n\n .header-content {\n flex-direction: column;\n gap: 16px;\n }\n\n .tabs {\n overflow-x: auto;\n }\n}\n"] }]
915
+ }], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }], null); })();
916
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TestRunFormComponentExtended, { className: "TestRunFormComponentExtended", filePath: "src/lib/custom/Tests/test-run-form.component.ts", lineNumber: 26 }); })();
917
+ export function LoadTestRunFormComponentExtended() {
918
+ // Prevents tree-shaking
919
+ }
920
+ LoadTestRunFormComponentExtended();
921
+ //# sourceMappingURL=test-run-form.component.js.map