@memberjunction/ng-core-entity-forms 6.2.1 → 6.3.0-edge.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 (204) hide show
  1. package/README.md +5 -6
  2. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.d.ts.map +1 -1
  3. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js +3 -3
  4. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js.map +1 -1
  5. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts +12 -0
  6. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts.map +1 -1
  7. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js +293 -230
  8. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
  9. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +2 -2
  10. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +2 -2
  11. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +11 -0
  12. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  13. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +862 -812
  14. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  15. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +2 -2
  16. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +2 -2
  17. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +2 -2
  18. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +2 -2
  19. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +2 -2
  20. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +2 -2
  21. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +12 -0
  22. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  23. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +821 -763
  24. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  25. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +2 -2
  26. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +10 -0
  27. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  28. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +700 -605
  29. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  30. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +10 -0
  31. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
  32. package/dist/lib/custom/Actions/action-execution-log-form.component.js +223 -175
  33. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  34. package/dist/lib/custom/Actions/action-form.component.d.ts +10 -0
  35. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
  36. package/dist/lib/custom/Actions/action-form.component.js +502 -453
  37. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  38. package/dist/lib/custom/Companies/company-header.panel.d.ts.map +1 -1
  39. package/dist/lib/custom/Companies/company-header.panel.js +3 -3
  40. package/dist/lib/custom/Companies/company-header.panel.js.map +1 -1
  41. package/dist/lib/custom/Conversations/conversation-header.panel.d.ts.map +1 -1
  42. package/dist/lib/custom/Conversations/conversation-header.panel.js +3 -3
  43. package/dist/lib/custom/Conversations/conversation-header.panel.js.map +1 -1
  44. package/dist/lib/custom/Employees/employee-header.panel.d.ts.map +1 -1
  45. package/dist/lib/custom/Employees/employee-header.panel.js +3 -3
  46. package/dist/lib/custom/Employees/employee-header.panel.js.map +1 -1
  47. package/dist/lib/custom/Entities/entity-form.component.d.ts +15 -0
  48. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  49. package/dist/lib/custom/Entities/entity-form.component.js +836 -801
  50. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  51. package/dist/lib/custom/EntityActions/entityaction.form.component.js +2 -2
  52. package/dist/lib/custom/Files/file-form.component.js +2 -2
  53. package/dist/lib/custom/Lists/list-form.component.d.ts +5 -0
  54. package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
  55. package/dist/lib/custom/Lists/list-form.component.js +355 -338
  56. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  57. package/dist/lib/custom/MLModels/ml-model-form.component.js +3 -3
  58. package/dist/lib/custom/MLModels/ml-model-form.component.js.map +1 -1
  59. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +17 -35
  60. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -1
  61. package/dist/lib/custom/MLModels/ml-model-view-models.js +55 -54
  62. package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -1
  63. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +7 -99
  64. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -1
  65. package/dist/lib/custom/MLModels/ps-model-detail.component.js +124 -303
  66. package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -1
  67. package/dist/lib/custom/Queries/query-form.component.d.ts +9 -0
  68. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  69. package/dist/lib/custom/Queries/query-form.component.js +493 -444
  70. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  71. package/dist/lib/custom/Queries/query-run-dialog.component.js +2 -2
  72. package/dist/lib/custom/Templates/template-param-dialog.component.js +2 -2
  73. package/dist/lib/custom/Templates/templates-form.component.d.ts +9 -0
  74. package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
  75. package/dist/lib/custom/Templates/templates-form.component.js +118 -74
  76. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  77. package/dist/lib/custom/Tests/test-form.component.d.ts +5 -0
  78. package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
  79. package/dist/lib/custom/Tests/test-form.component.js +471 -451
  80. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  81. package/dist/lib/custom/Tests/test-run-form.component.d.ts +5 -0
  82. package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
  83. package/dist/lib/custom/Tests/test-run-form.component.js +312 -289
  84. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  85. package/dist/lib/custom/Tests/test-suite-form.component.d.ts +5 -0
  86. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  87. package/dist/lib/custom/Tests/test-suite-form.component.js +697 -677
  88. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  89. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +5 -0
  90. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
  91. package/dist/lib/custom/Tests/test-suite-run-form.component.js +453 -433
  92. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  93. package/dist/lib/custom/Users/user-header.panel.d.ts.map +1 -1
  94. package/dist/lib/custom/Users/user-header.panel.js +3 -3
  95. package/dist/lib/custom/Users/user-header.panel.js.map +1 -1
  96. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts +2 -2
  97. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts.map +1 -1
  98. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js +30 -13
  99. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js.map +1 -1
  100. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +23 -0
  101. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  102. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +276 -216
  103. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  104. package/dist/lib/custom/custom-forms.module.d.ts +1 -1
  105. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  106. package/dist/lib/custom/custom-forms.module.js +7 -1
  107. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  108. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
  109. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +32 -14
  110. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  111. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.d.ts.map +1 -1
  112. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +119 -95
  113. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
  114. package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.d.ts +10 -0
  115. package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.d.ts.map +1 -0
  116. package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.js +124 -0
  117. package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.js.map +1 -0
  118. package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.d.ts +10 -0
  119. package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.d.ts.map +1 -0
  120. package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.js +99 -0
  121. package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.js.map +1 -0
  122. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +2 -2
  123. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
  124. package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.d.ts +10 -0
  125. package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.d.ts.map +1 -0
  126. package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.js +95 -0
  127. package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.js.map +1 -0
  128. package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.d.ts +10 -0
  129. package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.d.ts.map +1 -0
  130. package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.js +60 -0
  131. package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.js.map +1 -0
  132. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  133. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +124 -106
  134. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  135. package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.d.ts.map +1 -1
  136. package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.js +12 -4
  137. package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.js.map +1 -1
  138. package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.d.ts.map +1 -1
  139. package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js +19 -11
  140. package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js.map +1 -1
  141. package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.d.ts +10 -0
  142. package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.d.ts.map +1 -0
  143. package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.js +62 -0
  144. package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.js.map +1 -0
  145. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.d.ts.map +1 -1
  146. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js +26 -12
  147. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js.map +1 -1
  148. package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.d.ts +10 -0
  149. package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.d.ts.map +1 -0
  150. package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.js +140 -0
  151. package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.js.map +1 -0
  152. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.d.ts.map +1 -1
  153. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +69 -15
  154. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
  155. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.d.ts.map +1 -1
  156. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js +31 -13
  157. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js.map +1 -1
  158. package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.d.ts +10 -0
  159. package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.d.ts.map +1 -0
  160. package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.js +205 -0
  161. package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.js.map +1 -0
  162. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.d.ts.map +1 -1
  163. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js +24 -6
  164. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js.map +1 -1
  165. package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.d.ts +10 -0
  166. package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.d.ts.map +1 -0
  167. package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.js +173 -0
  168. package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.js.map +1 -0
  169. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.d.ts.map +1 -1
  170. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js +46 -24
  171. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js.map +1 -1
  172. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js +22 -14
  173. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js.map +1 -1
  174. package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.d.ts +10 -0
  175. package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.d.ts.map +1 -0
  176. package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.js +175 -0
  177. package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.js.map +1 -0
  178. package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js +8 -6
  179. package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js.map +1 -1
  180. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.d.ts.map +1 -1
  181. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js +44 -36
  182. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
  183. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.d.ts.map +1 -1
  184. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js +54 -32
  185. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js.map +1 -1
  186. package/dist/lib/generated/generated-forms.module.d.ts +452 -443
  187. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  188. package/dist/lib/generated/generated-forms.module.js +27 -0
  189. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  190. package/dist/lib/panels/feature-values/feature-values.panel.js +1 -1
  191. package/dist/lib/panels/feature-values/feature-values.panel.js.map +1 -1
  192. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +1 -1
  193. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
  194. package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
  195. package/dist/lib/shared/components/template-editor.component.js +2 -2
  196. package/dist/lib/shared/phone-hero.d.ts +17 -0
  197. package/dist/lib/shared/phone-hero.d.ts.map +1 -0
  198. package/dist/lib/shared/phone-hero.js +30 -0
  199. package/dist/lib/shared/phone-hero.js.map +1 -0
  200. package/dist/lib/shared/phone-sections-state.d.ts +28 -0
  201. package/dist/lib/shared/phone-sections-state.d.ts.map +1 -0
  202. package/dist/lib/shared/phone-sections-state.js +38 -0
  203. package/dist/lib/shared/phone-sections-state.js.map +1 -0
  204. package/package.json +50 -50
@@ -1 +1 @@
1
- {"version":3,"file":"test-suite-run-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Tests/test-suite-run-form.component.ts","../../../../src/lib/custom/Tests/test-suite-run-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, HostListener, ViewContainerRef, inject } from '@angular/core';\nimport { Subject, interval } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { CompositeKey, Metadata, RunView } from '@memberjunction/core';\nimport { MJTestSuiteRunEntity, MJTestSuiteEntity, MJTestRunEntity, MJTestRunFeedbackEntity, MJUserSettingEntity, UserInfoEngine } from '@memberjunction/core-entities';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { RegisterClass } from '@memberjunction/global';\nimport { SharedService, NavigationService } from '@memberjunction/ng-shared';\nimport { ApplicationManager } from '@memberjunction/ng-base-application';\nimport { MJTestSuiteRunFormComponent } from '../../generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component';\nimport {\n TestingDialogService,\n TagsHelper,\n EvaluationPreferencesService,\n EvaluationPreferences,\n EvaluationMetrics,\n TestRunWithFeedback,\n calculateEvaluationMetrics,\n normalizeExecutionStatus,\n getNeedsReviewItems,\n NeedsReviewItem\n} from '@memberjunction/ng-testing';\n\n/** Settings key for keyboard shortcuts visibility */\nconst SHORTCUTS_SETTINGS_KEY = '__mj.Testing.ShowKeyboardShortcuts';\n\n@RegisterClass(BaseFormComponent, 'MJ: Test Suite Runs')\n@Component({\n standalone: false,\n selector: 'mj-test-suite-run-form',\n templateUrl: './test-suite-run-form.component.html',\n styleUrls: ['./test-suite-run-form.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MJTestSuiteRunFormComponentExtended extends MJTestSuiteRunFormComponent implements OnInit, OnDestroy {\n public override record!: MJTestSuiteRunEntity;\n\n private destroy$ = new Subject<void>();\n\n // UI state\n ActiveTab = 'overview';\n\n /** @deprecated Use {@link ActiveTab}. */\n get activeTab() {\n return this.ActiveTab;\n }\n /** @deprecated Use {@link ActiveTab}. */\n set activeTab(value) {\n this.ActiveTab = value;\n }\n Loading = false;\n\n /** @deprecated Use {@link Loading}. */\n get loading() {\n return this.Loading;\n }\n /** @deprecated Use {@link Loading}. */\n set loading(value) {\n this.Loading = value;\n }\n LoadingTestRuns = false;\n\n /** @deprecated Use {@link LoadingTestRuns}. */\n get loadingTestRuns() {\n return this.LoadingTestRuns;\n }\n /** @deprecated Use {@link LoadingTestRuns}. */\n set loadingTestRuns(value) {\n this.LoadingTestRuns = value;\n }\n LoadingFeedbacks = false;\n\n /** @deprecated Use {@link LoadingFeedbacks}. */\n get loadingFeedbacks() {\n return this.LoadingFeedbacks;\n }\n /** @deprecated Use {@link LoadingFeedbacks}. */\n set loadingFeedbacks(value) {\n this.LoadingFeedbacks = value;\n }\n error: string | null = null;\n TestRunsLoaded = false;\n\n /** @deprecated Use {@link TestRunsLoaded}. */\n get testRunsLoaded() {\n return this.TestRunsLoaded;\n }\n /** @deprecated Use {@link TestRunsLoaded}. */\n set testRunsLoaded(value) {\n this.TestRunsLoaded = value;\n }\n FeedbacksLoaded = false;\n\n /** @deprecated Use {@link FeedbacksLoaded}. */\n get feedbacksLoaded() {\n return this.FeedbacksLoaded;\n }\n /** @deprecated Use {@link FeedbacksLoaded}. */\n set feedbacksLoaded(value) {\n this.FeedbacksLoaded = value;\n }\n isRefreshing = false; // case-violation-ok-legacy-back-compat: an ancestor class already declares the PascalCase name\n AutoRefreshEnabled = false;\n\n /** @deprecated Use {@link AutoRefreshEnabled}. */\n get autoRefreshEnabled() {\n return this.AutoRefreshEnabled;\n }\n /** @deprecated Use {@link AutoRefreshEnabled}. */\n set autoRefreshEnabled(value) {\n this.AutoRefreshEnabled = value;\n }\n\n // Related entities\n TestSuite: MJTestSuiteEntity | null = null;\n\n /** @deprecated Use {@link TestSuite}. */\n get testSuite(): MJTestSuiteEntity | null {\n return this.TestSuite;\n }\n /** @deprecated Use {@link TestSuite}. */\n set testSuite(value: MJTestSuiteEntity | null) {\n this.TestSuite = value;\n }\n TestRuns: MJTestRunEntity[] = [];\n\n /** @deprecated Use {@link TestRuns}. */\n get testRuns(): MJTestRunEntity[] {\n return this.TestRuns;\n }\n /** @deprecated Use {@link TestRuns}. */\n set testRuns(value: MJTestRunEntity[]) {\n this.TestRuns = value;\n }\n Feedbacks: Map<string, MJTestRunFeedbackEntity> = new Map();\n\n /** @deprecated Use {@link Feedbacks}. */\n get feedbacks(): Map<string, MJTestRunFeedbackEntity> {\n return this.Feedbacks;\n }\n /** @deprecated Use {@link Feedbacks}. */\n set feedbacks(value: Map<string, MJTestRunFeedbackEntity>) {\n this.Feedbacks = value;\n }\n\n // Tags\n tags: string[] = [];\n NewTag = '';\n\n /** @deprecated Use {@link NewTag}. */\n get newTag() {\n return this.NewTag;\n }\n /** @deprecated Use {@link NewTag}. */\n set newTag(value) {\n this.NewTag = value;\n }\n EditingTags = false;\n\n /** @deprecated Use {@link EditingTags}. */\n get editingTags() {\n return this.EditingTags;\n }\n /** @deprecated Use {@link EditingTags}. */\n set editingTags(value) {\n this.EditingTags = value;\n }\n SavingTags = false;\n\n /** @deprecated Use {@link SavingTags}. */\n get savingTags() {\n return this.SavingTags;\n }\n /** @deprecated Use {@link SavingTags}. */\n set savingTags(value) {\n this.SavingTags = value;\n }\n\n // Inline feedback\n ExpandedRunId: string | null = null;\n\n /** @deprecated Use {@link ExpandedRunId}. */\n get expandedRunId(): string | null {\n return this.ExpandedRunId;\n }\n /** @deprecated Use {@link ExpandedRunId}. */\n set expandedRunId(value: string | null) {\n this.ExpandedRunId = value;\n }\n InlineRating: number = 0;\n\n /** @deprecated Use {@link InlineRating}. */\n get inlineRating(): number {\n return this.InlineRating;\n }\n /** @deprecated Use {@link InlineRating}. */\n set inlineRating(value: number) {\n this.InlineRating = value;\n }\n InlineHoverRating: number = 0;\n\n /** @deprecated Use {@link InlineHoverRating}. */\n get inlineHoverRating(): number {\n return this.InlineHoverRating;\n }\n /** @deprecated Use {@link InlineHoverRating}. */\n set inlineHoverRating(value: number) {\n this.InlineHoverRating = value;\n }\n InlineIsCorrect: boolean | null = null;\n\n /** @deprecated Use {@link InlineIsCorrect}. */\n get inlineIsCorrect(): boolean | null {\n return this.InlineIsCorrect;\n }\n /** @deprecated Use {@link InlineIsCorrect}. */\n set inlineIsCorrect(value: boolean | null) {\n this.InlineIsCorrect = value;\n }\n InlineComments: string = '';\n\n /** @deprecated Use {@link InlineComments}. */\n get inlineComments(): string {\n return this.InlineComments;\n }\n /** @deprecated Use {@link InlineComments}. */\n set inlineComments(value: string) {\n this.InlineComments = value;\n }\n SavingInlineFeedback = false;\n\n /** @deprecated Use {@link SavingInlineFeedback}. */\n get savingInlineFeedback() {\n return this.SavingInlineFeedback;\n }\n /** @deprecated Use {@link SavingInlineFeedback}. */\n set savingInlineFeedback(value) {\n this.SavingInlineFeedback = value;\n }\n\n // Filter for test runs\n RunStatusFilter: string | null = null;\n\n /** @deprecated Use {@link RunStatusFilter}. */\n get runStatusFilter(): string | null {\n return this.RunStatusFilter;\n }\n /** @deprecated Use {@link RunStatusFilter}. */\n set runStatusFilter(value: string | null) {\n this.RunStatusFilter = value;\n }\n\n // Keyboard shortcuts\n KeyboardShortcutsEnabled = true;\n\n /** @deprecated Use {@link KeyboardShortcutsEnabled}. */\n get keyboardShortcutsEnabled() {\n return this.KeyboardShortcutsEnabled;\n }\n /** @deprecated Use {@link KeyboardShortcutsEnabled}. */\n set keyboardShortcutsEnabled(value) {\n this.KeyboardShortcutsEnabled = value;\n }\n ShowShortcuts = false;\n\n /** @deprecated Use {@link ShowShortcuts}. */\n get showShortcuts() {\n return this.ShowShortcuts;\n }\n /** @deprecated Use {@link ShowShortcuts}. */\n set showShortcuts(value) {\n this.ShowShortcuts = value;\n } // Hidden by default\n private shortcutsSettingEntity: MJUserSettingEntity | null = null;\n private get metadata() { return this.ProviderToUse; }\n // Evaluation system\n EvalPreferences: EvaluationPreferences = {\n showExecution: true,\n showHuman: true,\n showAuto: false\n };\n\n /** @deprecated Use {@link EvalPreferences}. */\n get evalPreferences(): EvaluationPreferences {\n return this.EvalPreferences;\n }\n /** @deprecated Use {@link EvalPreferences}. */\n set evalPreferences(value: EvaluationPreferences) {\n this.EvalPreferences = value;\n }\n TestRunsWithFeedback: TestRunWithFeedback[] = [];\n\n /** @deprecated Use {@link TestRunsWithFeedback}. */\n get testRunsWithFeedback(): TestRunWithFeedback[] {\n return this.TestRunsWithFeedback;\n }\n /** @deprecated Use {@link TestRunsWithFeedback}. */\n set testRunsWithFeedback(value: TestRunWithFeedback[]) {\n this.TestRunsWithFeedback = value;\n }\n EvaluationMetrics: EvaluationMetrics | null = null;\n\n /** @deprecated Use {@link EvaluationMetrics}. */\n get evaluationMetrics(): EvaluationMetrics | null {\n return this.EvaluationMetrics;\n }\n /** @deprecated Use {@link EvaluationMetrics}. */\n set evaluationMetrics(value: EvaluationMetrics | null) {\n this.EvaluationMetrics = value;\n }\n NeedsReviewItems: NeedsReviewItem[] = [];\n\n /** @deprecated Use {@link NeedsReviewItems}. */\n get needsReviewItems(): NeedsReviewItem[] {\n return this.NeedsReviewItems;\n }\n /** @deprecated Use {@link NeedsReviewItems}. */\n set needsReviewItems(value: NeedsReviewItem[]) {\n this.NeedsReviewItems = value;\n }\n\n // Service injections\n private navigationService = inject(NavigationService);\n private testingDialogService = inject(TestingDialogService);\n private evalPrefsService = inject(EvaluationPreferencesService);\n private viewContainerRef = inject(ViewContainerRef);\n private appManager = inject(ApplicationManager);\n\n async ngOnInit() {\n await super.ngOnInit();\n this.loadShortcutsSetting();\n\n // Subscribe to evaluation preferences\n this.evalPrefsService.preferences$\n .pipe(takeUntil(this.destroy$))\n .subscribe(prefs => {\n this.EvalPreferences = prefs;\n this.cdr.markForCheck();\n });\n\n if (this.record && this.record.ID) {\n await this.loadRelatedData();\n this.parseTags();\n\n // Auto-refresh for running suite executions\n if (this.record.Status === 'Running' || this.record.Status === 'Pending') {\n this.startAutoRefresh();\n }\n }\n }\n\n private parseTags(): void {\n this.tags = TagsHelper.parseTags(this.record.Tags);\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // Keyboard shortcuts\n @HostListener('document:keydown', ['$event'])\n handleKeyboardShortcut(event: KeyboardEvent) {\n if (!this.KeyboardShortcutsEnabled) return;\n\n // Cmd/Ctrl + R: Refresh\n if ((event.metaKey || event.ctrlKey) && event.key === 'r' && !event.shiftKey) {\n event.preventDefault();\n this.Refresh();\n return;\n }\n\n // Cmd/Ctrl + Shift + R: Re-run suite\n if ((event.metaKey || event.ctrlKey) && event.shiftKey && event.key === 'r') {\n event.preventDefault();\n this.ReRunSuite();\n return;\n }\n\n // Number keys for tabs (1-4)\n if (!event.metaKey && !event.ctrlKey && !event.altKey) {\n switch (event.key) {\n case '1': this.ChangeTab('overview'); break;\n case '2': this.ChangeTab('runs'); break;\n case '3': this.ChangeTab('details'); break;\n case '4': this.ChangeTab('analytics'); break;\n }\n }\n }\n\n private startAutoRefresh() {\n this.AutoRefreshEnabled = true;\n interval(5000)\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n if (this.AutoRefreshEnabled && (this.record.Status === 'Running' || this.record.Status === 'Pending')) {\n this.silentRefresh();\n } else {\n this.AutoRefreshEnabled = false;\n }\n });\n }\n\n private async silentRefresh() {\n try {\n await this.record.Load(this.record.ID);\n this.cdr.markForCheck();\n } catch {\n // Silently fail on auto-refresh\n }\n }\n\n private async loadRelatedData() {\n this.Loading = true;\n this.error = null;\n\n try {\n // Load test suite\n if (this.record.SuiteID) {\n const md = this.ProviderToUse;\n const suite = await md.GetEntityObject<MJTestSuiteEntity>('MJ: Test Suites');\n if (suite && await suite.Load(this.record.SuiteID)) {\n this.TestSuite = suite;\n }\n }\n\n this.cdr.markForCheck();\n } catch (error) {\n console.error('Error loading related data:', error);\n this.error = 'Failed to load related data. Click to retry.';\n } finally {\n this.Loading = false;\n this.cdr.markForCheck();\n }\n }\n\n async retryLoad() {\n this.error = null;\n await this.loadRelatedData();\n }\n\n private async loadTestRuns() {\n if (this.TestRunsLoaded) return;\n\n this.LoadingTestRuns = true;\n this.cdr.markForCheck();\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJTestRunEntity>({\n EntityName: 'MJ: Test Runs',\n ExtraFilter: `TestSuiteRunID='${this.record.ID}'`,\n OrderBy: 'Sequence ASC, StartedAt ASC',\n ResultType: 'entity_object'\n });\n\n if (result.Success) {\n this.TestRuns = result.Results || [];\n }\n\n this.TestRunsLoaded = true;\n\n // Also load feedbacks for these runs\n if (this.TestRuns.length > 0) {\n await this.loadFeedbacks();\n }\n } catch (error) {\n console.error('Error loading test runs:', error);\n SharedService.Instance.CreateSimpleNotification('Failed to load test runs', 'error', 3000);\n } finally {\n this.LoadingTestRuns = false;\n this.cdr.markForCheck();\n }\n }\n\n ChangeTab(tab: string) {\n this.ActiveTab = tab;\n\n // Lazy load tabs\n if ((tab === 'runs' || tab === 'analytics') && !this.TestRunsLoaded) {\n this.loadTestRuns();\n }\n\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link ChangeTab}. */\n changeTab(tab: string) {\n return this.ChangeTab(tab);\n }\n\n GetStatusColor(): string {\n switch (this.record.Status) {\n case 'Completed': return '#10b981';\n case 'Failed': return '#ef4444';\n case 'Running': return '#3b82f6';\n case 'Pending': return '#8b5cf6';\n case 'Cancelled': return '#6b7280';\n default: return '#9ca3af';\n }\n }\n\n /** @deprecated Use {@link GetStatusColor}. */\n getStatusColor(): string {\n return this.GetStatusColor();\n }\n\n GetStatusIcon(): string {\n switch (this.record.Status) {\n case 'Completed': return 'fa-check-circle';\n case 'Failed': return 'fa-times-circle';\n case 'Running': return 'fa-circle-notch fa-spin';\n case 'Pending': return 'fa-hourglass-half';\n case 'Cancelled': return 'fa-ban';\n default: return 'fa-question-circle';\n }\n }\n\n /** @deprecated Use {@link GetStatusIcon}. */\n getStatusIcon(): string {\n return this.GetStatusIcon();\n }\n\n GetStatusClass(): string {\n return `status-${this.record.Status?.toLowerCase() || 'unknown'}`;\n }\n\n /** @deprecated Use {@link GetStatusClass}. */\n getStatusClass(): string {\n return this.GetStatusClass();\n }\n\n CalculateDuration(): string {\n if (!this.record.TotalDurationSeconds) return 'N/A';\n\n const seconds = this.record.TotalDurationSeconds;\n if (seconds < 60) return `${seconds.toFixed(1)}s`;\n if (seconds < 3600) {\n const mins = Math.floor(seconds / 60);\n const secs = Math.floor(seconds % 60);\n return `${mins}m ${secs}s`;\n }\n\n const hours = Math.floor(seconds / 3600);\n const mins = Math.floor((seconds % 3600) / 60);\n return `${hours}h ${mins}m`;\n }\n\n /** @deprecated Use {@link CalculateDuration}. */\n calculateDuration(): string {\n return this.CalculateDuration();\n }\n\n FormatCost(cost: number | null): string {\n if (cost === null || cost === undefined) return 'N/A';\n return `$${cost.toFixed(6)}`;\n }\n\n /** @deprecated Use {@link FormatCost}. */\n formatCost(cost: number | null): string {\n return this.FormatCost(cost);\n }\n\n GetPassRate(): number {\n const total = this.record.TotalTests || 0;\n const passed = this.record.PassedTests || 0;\n if (total === 0) return 0;\n return (passed / total) * 100;\n }\n\n /** @deprecated Use {@link GetPassRate}. */\n getPassRate(): number {\n return this.GetPassRate();\n }\n\n GetRelativeTime(date: Date | string | null): string {\n if (!date) return 'N/A';\n const d = new Date(date);\n const now = new Date();\n const diffMs = now.getTime() - d.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n\n if (diffMins < 1) return 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays < 7) return `${diffDays}d ago`;\n return d.toLocaleDateString();\n }\n\n /** @deprecated Use {@link GetRelativeTime}. */\n getRelativeTime(date: Date | string | null): string {\n return this.GetRelativeTime(date);\n }\n\n NavigateToTestingDashboard(): void {\n const testingApp = this.appManager.GetAppByName('Testing');\n if (testingApp) {\n this.navigationService.SwitchToApp(testingApp.ID);\n }\n }\n\n /** @deprecated Use {@link NavigateToTestingDashboard}. */\n navigateToTestingDashboard(): void {\n return this.NavigateToTestingDashboard();\n }\n\n OpenTestSuite() {\n if (this.TestSuite) {\n SharedService.Instance.OpenEntityRecord('MJ: Test Suites', CompositeKey.FromID(this.TestSuite.ID));\n }\n }\n\n /** @deprecated Use {@link OpenTestSuite}. */\n openTestSuite() {\n return this.OpenTestSuite();\n }\n\n OpenTestRun(runId: string) {\n SharedService.Instance.OpenEntityRecord('MJ: Test Runs', CompositeKey.FromID(runId));\n }\n\n /** @deprecated Use {@link OpenTestRun}. */\n openTestRun(runId: string) {\n return this.OpenTestRun(runId);\n }\n\n async ReRunSuite() {\n if (!this.record.SuiteID) {\n SharedService.Instance.CreateSimpleNotification('Cannot re-run: Suite ID not available', 'error', 3000);\n return;\n }\n\n this.testingDialogService.OpenSuitePanel(this.record.SuiteID);\n }\n\n /** @deprecated Use {@link ReRunSuite}. */\n async reRunSuite() {\n return this.ReRunSuite();\n }\n\n async Refresh() {\n this.isRefreshing = true;\n this.cdr.markForCheck();\n\n try {\n await this.record.Load(this.record.ID);\n await this.loadRelatedData();\n\n // Reset lazy-loaded data\n if (this.TestRunsLoaded) {\n this.TestRunsLoaded = false;\n this.TestRuns = [];\n await this.loadTestRuns();\n }\n\n SharedService.Instance.CreateSimpleNotification('Refreshed successfully', 'success', 2000);\n } catch {\n SharedService.Instance.CreateSimpleNotification('Failed to refresh', 'error', 3000);\n } finally {\n this.isRefreshing = false;\n this.cdr.markForCheck();\n }\n }\n\n /** @deprecated Use {@link Refresh}. */\n async refresh() {\n return this.Refresh();\n }\n\n GetRunStatusColor(status: string): string {\n switch (status) {\n case 'Passed': return '#10b981';\n case 'Failed': return '#ef4444';\n case 'Error': return '#f59e0b';\n case 'Timeout': return '#f97316';\n case 'Running': return '#3b82f6';\n case 'Pending': return '#8b5cf6';\n case 'Skipped': return '#6b7280';\n default: return '#9ca3af';\n }\n }\n\n /** @deprecated Use {@link GetRunStatusColor}. */\n getRunStatusColor(status: string): string {\n return this.GetRunStatusColor(status);\n }\n\n GetRunStatusIcon(status: string): string {\n switch (status) {\n case 'Passed': return 'fa-check';\n case 'Failed': return 'fa-times';\n case 'Error': return 'fa-exclamation';\n case 'Timeout': return 'fa-clock';\n case 'Running': return 'fa-circle-notch fa-spin';\n case 'Pending': return 'fa-hourglass-half';\n case 'Skipped': return 'fa-forward';\n default: return 'fa-question';\n }\n }\n\n /** @deprecated Use {@link GetRunStatusIcon}. */\n getRunStatusIcon(status: string): string {\n return this.GetRunStatusIcon(status);\n }\n\n // ===========================\n // Tag Management\n // ===========================\n\n StartEditingTags(): void {\n this.EditingTags = true;\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link StartEditingTags}. */\n startEditingTags(): void {\n return this.StartEditingTags();\n }\n\n CancelEditingTags(): void {\n this.EditingTags = false;\n this.NewTag = '';\n this.parseTags(); // Reset to original\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link CancelEditingTags}. */\n cancelEditingTags(): void {\n return this.CancelEditingTags();\n }\n\n AddTag(): void {\n const tag = this.NewTag.trim();\n if (tag && !this.tags.includes(tag)) {\n this.tags = [...this.tags, tag];\n this.NewTag = '';\n this.cdr.markForCheck();\n }\n }\n\n /** @deprecated Use {@link AddTag}. */\n addTag(): void {\n return this.AddTag();\n }\n\n RemoveTag(tag: string): void {\n this.tags = this.tags.filter(t => t !== tag);\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link RemoveTag}. */\n removeTag(tag: string): void {\n return this.RemoveTag(tag);\n }\n\n async SaveTags(): Promise<void> {\n // Auto-add any pending tag in the input before saving\n const pendingTag = this.NewTag.trim();\n if (pendingTag && !this.tags.includes(pendingTag)) {\n this.tags = [...this.tags, pendingTag];\n this.NewTag = '';\n }\n\n this.SavingTags = true;\n this.cdr.markForCheck();\n\n try {\n this.record.Tags = TagsHelper.toJson(this.tags);\n const result = await this.record.Save();\n\n if (result) {\n this.EditingTags = false;\n SharedService.Instance.CreateSimpleNotification('Tags saved successfully', 'success', 2000);\n } else {\n SharedService.Instance.CreateSimpleNotification(\n this.record.LatestResult?.Message || 'Failed to save tags',\n 'error',\n 3000\n );\n }\n } catch (error) {\n SharedService.Instance.CreateSimpleNotification('Failed to save tags', 'error', 3000);\n } finally {\n this.SavingTags = false;\n this.cdr.markForCheck();\n }\n }\n\n /** @deprecated Use {@link SaveTags}. */\n async saveTags(): Promise<void> {\n return this.SaveTags();\n }\n\n // ===========================\n // Test Run Filtering\n // ===========================\n\n SetRunStatusFilter(status: string | null): void {\n this.RunStatusFilter = status;\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link SetRunStatusFilter}. */\n setRunStatusFilter(status: string | null): void {\n return this.SetRunStatusFilter(status);\n }\n\n GetFilteredTestRuns(): MJTestRunEntity[] {\n if (!this.RunStatusFilter) return this.TestRuns;\n return this.TestRuns.filter(run => run.Status === this.RunStatusFilter);\n }\n\n /** @deprecated Use {@link GetFilteredTestRuns}. */\n getFilteredTestRuns(): MJTestRunEntity[] {\n return this.GetFilteredTestRuns();\n }\n\n GetRunCountByStatus(status: string): number {\n return this.TestRuns.filter(run => run.Status === status).length;\n }\n\n /** @deprecated Use {@link GetRunCountByStatus}. */\n getRunCountByStatus(status: string): number {\n return this.GetRunCountByStatus(status);\n }\n\n // ===========================\n // Inline Feedback\n // ===========================\n\n private async loadFeedbacks(): Promise<void> {\n if (this.FeedbacksLoaded) return;\n\n this.LoadingFeedbacks = true;\n this.cdr.markForCheck();\n\n try {\n const testRunIds = this.TestRuns.map(r => `'${r.ID}'`).join(',');\n if (!testRunIds) return;\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJTestRunFeedbackEntity>({\n EntityName: 'MJ: Test Run Feedbacks',\n ExtraFilter: `TestRunID IN (${testRunIds})`,\n ResultType: 'entity_object'\n });\n\n if (result.Success && result.Results) {\n this.Feedbacks.clear();\n for (const feedback of result.Results) {\n this.Feedbacks.set(feedback.TestRunID, feedback);\n }\n }\n\n // Build TestRunWithFeedback array and calculate metrics\n this.buildTestRunsWithFeedback();\n\n this.FeedbacksLoaded = true;\n } catch (error) {\n console.error('Error loading feedbacks:', error);\n } finally {\n this.LoadingFeedbacks = false;\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Build TestRunWithFeedback array from testRuns and feedbacks\n */\n private buildTestRunsWithFeedback(): void {\n this.TestRunsWithFeedback = this.TestRuns.map(run => {\n const feedback = this.Feedbacks.get(run.ID);\n return {\n id: run.ID,\n testId: run.TestID,\n testName: run.Test || 'Unknown Test',\n executionStatus: normalizeExecutionStatus(run.Status || 'Completed'),\n originalStatus: run.Status || 'Completed',\n duration: (run.DurationSeconds || 0) * 1000, // Convert to ms\n cost: run.CostUSD || 0,\n runDateTime: run.StartedAt ? new Date(run.StartedAt) : new Date(),\n autoScore: run.Score,\n passedChecks: null,\n failedChecks: null,\n totalChecks: null,\n humanRating: feedback?.Rating || null,\n humanIsCorrect: feedback?.IsCorrect ?? null,\n humanComments: feedback?.CorrectionSummary || null,\n hasHumanFeedback: !!feedback,\n feedbackId: feedback?.ID || null,\n tags: TagsHelper.parseTags(run.Tags),\n targetType: null,\n targetLogID: null\n };\n });\n\n // Calculate metrics\n this.EvaluationMetrics = calculateEvaluationMetrics(this.TestRunsWithFeedback);\n\n // Get items needing review\n this.NeedsReviewItems = getNeedsReviewItems(this.TestRunsWithFeedback);\n }\n\n ToggleRunExpanded(runId: string): void {\n if (this.ExpandedRunId === runId) {\n this.ExpandedRunId = null;\n } else {\n this.ExpandedRunId = runId;\n this.initializeInlineFeedback(runId);\n }\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link ToggleRunExpanded}. */\n toggleRunExpanded(runId: string): void {\n return this.ToggleRunExpanded(runId);\n }\n\n private initializeInlineFeedback(runId: string): void {\n const existingFeedback = this.Feedbacks.get(runId);\n if (existingFeedback) {\n this.InlineRating = existingFeedback.Rating || 0;\n this.InlineIsCorrect = existingFeedback.IsCorrect;\n this.InlineComments = existingFeedback.CorrectionSummary || '';\n } else {\n this.InlineRating = 0;\n this.InlineIsCorrect = null;\n this.InlineComments = '';\n }\n this.InlineHoverRating = 0;\n }\n\n SetInlineRating(value: number): void {\n this.InlineRating = value;\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link SetInlineRating}. */\n setInlineRating(value: number): void {\n return this.SetInlineRating(value);\n }\n\n GetInlineRatingLabel(): string {\n if (this.InlineRating <= 3) return 'Poor';\n if (this.InlineRating <= 5) return 'Below Average';\n if (this.InlineRating <= 6) return 'Average';\n if (this.InlineRating <= 7) return 'Good';\n if (this.InlineRating <= 8) return 'Very Good';\n if (this.InlineRating <= 9) return 'Excellent';\n return 'Outstanding';\n }\n\n /** @deprecated Use {@link GetInlineRatingLabel}. */\n getInlineRatingLabel(): string {\n return this.GetInlineRatingLabel();\n }\n\n CanSubmitInlineFeedback(): boolean {\n return this.InlineRating > 0 && this.InlineComments.trim().length > 0;\n }\n\n /** @deprecated Use {@link CanSubmitInlineFeedback}. */\n canSubmitInlineFeedback(): boolean {\n return this.CanSubmitInlineFeedback();\n }\n\n async SaveInlineFeedback(): Promise<void> {\n if (!this.ExpandedRunId || !this.CanSubmitInlineFeedback()) return;\n\n this.SavingInlineFeedback = true;\n this.cdr.markForCheck();\n\n try {\n const md = this.ProviderToUse;\n const currentUser = md.CurrentUser;\n\n let feedback = this.Feedbacks.get(this.ExpandedRunId);\n\n if (!feedback) {\n feedback = await md.GetEntityObject<MJTestRunFeedbackEntity>('MJ: Test Run Feedbacks', currentUser);\n feedback.TestRunID = this.ExpandedRunId;\n feedback.ReviewerUserID = currentUser.ID;\n }\n\n feedback.Rating = this.InlineRating;\n feedback.IsCorrect = this.InlineIsCorrect;\n feedback.CorrectionSummary = this.InlineComments.trim() || null;\n\n const result = await feedback.Save();\n\n if (result) {\n this.Feedbacks.set(this.ExpandedRunId, feedback);\n // Rebuild the metrics after feedback update\n this.buildTestRunsWithFeedback();\n SharedService.Instance.CreateSimpleNotification('Feedback saved', 'success', 2000);\n this.ExpandedRunId = null;\n } else {\n SharedService.Instance.CreateSimpleNotification(\n feedback.LatestResult?.Message || 'Failed to save feedback',\n 'error',\n 3000\n );\n }\n } catch (error) {\n SharedService.Instance.CreateSimpleNotification('Failed to save feedback', 'error', 3000);\n } finally {\n this.SavingInlineFeedback = false;\n this.cdr.markForCheck();\n }\n }\n\n /** @deprecated Use {@link SaveInlineFeedback}. */\n async saveInlineFeedback(): Promise<void> {\n return this.SaveInlineFeedback();\n }\n\n HasFeedback(runId: string): boolean {\n return this.Feedbacks.has(runId);\n }\n\n /** @deprecated Use {@link HasFeedback}. */\n hasFeedback(runId: string): boolean {\n return this.HasFeedback(runId);\n }\n\n GetFeedbackRating(runId: string): number {\n return this.Feedbacks.get(runId)?.Rating || 0;\n }\n\n /** @deprecated Use {@link GetFeedbackRating}. */\n getFeedbackRating(runId: string): number {\n return this.GetFeedbackRating(runId);\n }\n\n /**\n * Get TestRunWithFeedback by run ID for template binding\n */\n GetRunWithFeedback(runId: string): TestRunWithFeedback | undefined {\n return this.TestRunsWithFeedback.find(r => r.id === runId);\n }\n\n /** @deprecated Use {@link GetRunWithFeedback}. */\n getRunWithFeedback(runId: string): TestRunWithFeedback | undefined {\n return this.GetRunWithFeedback(runId);\n }\n\n /**\n * Get the human correctness status for a run\n */\n GetHumanIsCorrect(runId: string): boolean | null {\n return this.Feedbacks.get(runId)?.IsCorrect ?? null;\n }\n\n /** @deprecated Use {@link GetHumanIsCorrect}. */\n getHumanIsCorrect(runId: string): boolean | null {\n return this.GetHumanIsCorrect(runId);\n }\n\n // ===========================\n // Run Tags\n // ===========================\n\n GetRunTags(run: MJTestRunEntity): string[] {\n return TagsHelper.parseTags(run.Tags);\n }\n\n /** @deprecated Use {@link GetRunTags}. */\n getRunTags(run: MJTestRunEntity): string[] {\n return this.GetRunTags(run);\n }\n\n // ===========================\n // Keyboard Shortcuts Settings\n // ===========================\n\n /**\n * Load keyboard shortcuts visibility setting from user settings\n */\n private loadShortcutsSetting(): void {\n try {\n const engine = UserInfoEngine.Instance;\n const setting = engine.UserSettings.find(s => s.Setting === SHORTCUTS_SETTINGS_KEY);\n\n if (setting) {\n this.shortcutsSettingEntity = setting;\n this.ShowShortcuts = setting.Value === 'true';\n } else {\n // Default to hidden\n this.ShowShortcuts = false;\n }\n this.cdr.markForCheck();\n } catch (error) {\n console.warn('Failed to load shortcuts setting:', error);\n }\n }\n\n /**\n * Toggle keyboard shortcuts visibility and save preference\n */\n async ToggleShortcuts(): Promise<void> {\n this.ShowShortcuts = !this.ShowShortcuts;\n this.cdr.markForCheck();\n\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n if (!this.shortcutsSettingEntity) {\n const engine = UserInfoEngine.Instance;\n const setting = engine.UserSettings.find(s => s.Setting === SHORTCUTS_SETTINGS_KEY);\n\n if (setting) {\n this.shortcutsSettingEntity = setting;\n } else {\n this.shortcutsSettingEntity = await this.metadata.GetEntityObject<MJUserSettingEntity>('MJ: User Settings');\n this.shortcutsSettingEntity.UserID = userId;\n this.shortcutsSettingEntity.Setting = SHORTCUTS_SETTINGS_KEY;\n }\n }\n\n this.shortcutsSettingEntity.Value = this.ShowShortcuts ? 'true' : 'false';\n await this.shortcutsSettingEntity.Save();\n } catch (error) {\n console.warn('Failed to save shortcuts setting:', error);\n }\n }\n\n /** @deprecated Use {@link ToggleShortcuts}. */\n async toggleShortcuts(): Promise<void> {\n return this.ToggleShortcuts();\n }\n\n // ===========================\n // Analytics Calculations\n // ===========================\n\n GetPassedCount(): number {\n return this.TestRuns.filter(r => r.Status === 'Passed').length;\n }\n\n /** @deprecated Use {@link GetPassedCount}. */\n getPassedCount(): number {\n return this.GetPassedCount();\n }\n\n GetFailedCount(): number {\n return this.TestRuns.filter(r => r.Status === 'Failed' || r.Status === 'Error').length;\n }\n\n /** @deprecated Use {@link GetFailedCount}. */\n getFailedCount(): number {\n return this.GetFailedCount();\n }\n\n GetPassedPercent(): number {\n if (this.TestRuns.length === 0) return 0;\n return (this.GetPassedCount() / this.TestRuns.length) * 100;\n }\n\n /** @deprecated Use {@link GetPassedPercent}. */\n getPassedPercent(): number {\n return this.GetPassedPercent();\n }\n\n GetFailedPercent(): number {\n if (this.TestRuns.length === 0) return 0;\n return (this.GetFailedCount() / this.TestRuns.length) * 100;\n }\n\n /** @deprecated Use {@link GetFailedPercent}. */\n getFailedPercent(): number {\n return this.GetFailedPercent();\n }\n\n GetAverageScore(): number {\n const runsWithScore = this.TestRuns.filter(r => r.Score != null);\n if (runsWithScore.length === 0) return 0;\n const sum = runsWithScore.reduce((acc, r) => acc + (r.Score || 0), 0);\n return sum / runsWithScore.length;\n }\n\n /** @deprecated Use {@link GetAverageScore}. */\n getAverageScore(): number {\n return this.GetAverageScore();\n }\n\n GetAverageDuration(): number {\n const runsWithDuration = this.TestRuns.filter(r => r.DurationSeconds != null);\n if (runsWithDuration.length === 0) return 0;\n const sum = runsWithDuration.reduce((acc, r) => acc + (r.DurationSeconds || 0), 0);\n return sum / runsWithDuration.length;\n }\n\n /** @deprecated Use {@link GetAverageDuration}. */\n getAverageDuration(): number {\n return this.GetAverageDuration();\n }\n\n GetTotalCost(): number {\n return this.TestRuns.reduce((acc, r) => acc + (r.CostUSD || 0), 0);\n }\n\n /** @deprecated Use {@link GetTotalCost}. */\n getTotalCost(): number {\n return this.GetTotalCost();\n }\n\n // ===========================\n // Export\n // ===========================\n\n ExportToCSV(): void {\n const headers = ['Test Name', 'Status', 'Score', 'Duration (s)', 'Cost (USD)', 'Started At', 'Tags'];\n const rows = this.TestRuns.map(run => [\n run.Test || '',\n run.Status || '',\n run.Score?.toFixed(4) || '',\n run.DurationSeconds?.toFixed(2) || '',\n run.CostUSD?.toFixed(6) || '',\n run.StartedAt ? new Date(run.StartedAt).toISOString() : '',\n this.GetRunTags(run).join('; ')\n ]);\n\n const csvContent = [headers, ...rows]\n .map(row => row.map(cell => `\"${cell}\"`).join(','))\n .join('\\n');\n\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = `test-suite-run-${this.record.ID.substring(0, 8)}-results.csv`;\n link.click();\n URL.revokeObjectURL(link.href);\n\n SharedService.Instance.CreateSimpleNotification('Export complete', 'success', 2000);\n }\n\n /** @deprecated Use {@link ExportToCSV}. */\n exportToCSV(): void {\n return this.ExportToCSV();\n }\n}\n","<div class=\"test-suite-run-form\">\n <!-- Header Section -->\n <div class=\"suite-run-header\">\n <!-- Breadcrumb Navigation -->\n <nav class=\"breadcrumb\" aria-label=\"Breadcrumb\">\n <ol>\n <li>\n <a href=\"javascript:void(0)\" (click)=\"navigateToTestingDashboard()\">\n <i class=\"fas fa-vial\"></i>\n <span class=\"breadcrumb-text\">Testing</span>\n </a>\n </li>\n @if (testSuite) {\n <li>\n <i class=\"fas fa-chevron-right separator\"></i>\n <a href=\"javascript:void(0)\" (click)=\"openTestSuite()\">\n <i class=\"fas fa-layer-group\"></i>\n <span class=\"breadcrumb-text\">{{ testSuite.Name }}</span>\n </a>\n </li>\n }\n <li class=\"current\">\n <i class=\"fas fa-chevron-right separator\"></i>\n <span>Run #{{ record.ID.substring(0, 8) }}</span>\n </li>\n </ol>\n </nav>\n\n <!-- Header Content -->\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"suite-run-icon\" [style.background-color]=\"getStatusColor()\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon()\"></i>\n </div>\n <div class=\"suite-run-info\">\n <h1>Suite Run</h1>\n <div class=\"suite-run-meta\">\n <span class=\"status-badge\" [ngClass]=\"getStatusClass()\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon()\"></i>\n {{ record.Status }}\n </span>\n @if (record.Environment) {\n <span class=\"meta-tag environment\">\n <i class=\"fas fa-server\"></i>\n {{ record.Environment }}\n </span>\n }\n @if (record.TriggerType) {\n <span class=\"meta-tag trigger\">\n <i class=\"fas fa-bolt\"></i>\n {{ record.TriggerType }}\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-actions\">\n <!-- Evaluation Mode Toggle -->\n <app-evaluation-mode-toggle></app-evaluation-mode-toggle>\n @if (record.SuiteID) {\n <button mjButton (click)=\"reRunSuite()\" variant=\"primary\">\n <i class=\"fas fa-play\"></i> Re-run Suite\n </button>\n }\n <button mjButton (click)=\"refresh()\" [disabled]=\"isRefreshing\">\n <i class=\"fas\" [ngClass]=\"isRefreshing ? 'fa-sync fa-spin' : 'fa-sync'\"></i>\n {{ isRefreshing ? 'Refreshing...' : 'Refresh' }}\n </button>\n </div>\n </div>\n\n <!-- Metrics Bar -->\n <div class=\"metrics-bar\">\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-clock\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ calculateDuration() }}</div>\n <div class=\"metric-label\">Duration</div>\n </div>\n </div>\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-percentage\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ getPassRate().toFixed(1) }}%</div>\n <div class=\"metric-label\">Pass Rate</div>\n </div>\n </div>\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-dollar-sign\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ formatCost(record.TotalCostUSD) }}</div>\n <div class=\"metric-label\">Total Cost</div>\n </div>\n </div>\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-calendar\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ getRelativeTime(record.StartedAt) }}</div>\n <div class=\"metric-label\">Started</div>\n </div>\n </div>\n </div>\n\n <!-- Results Summary -->\n <div class=\"results-summary\">\n <div class=\"result-item passed\">\n <div class=\"result-icon\">\n <i class=\"fas fa-check-circle\"></i>\n </div>\n <div class=\"result-content\">\n <span class=\"result-count\">{{ record.PassedTests || 0 }}</span>\n <span class=\"result-label\">Passed</span>\n </div>\n </div>\n <div class=\"result-item failed\">\n <div class=\"result-icon\">\n <i class=\"fas fa-times-circle\"></i>\n </div>\n <div class=\"result-content\">\n <span class=\"result-count\">{{ record.FailedTests || 0 }}</span>\n <span class=\"result-label\">Failed</span>\n </div>\n </div>\n <div class=\"result-item error\">\n <div class=\"result-icon\">\n <i class=\"fas fa-exclamation-circle\"></i>\n </div>\n <div class=\"result-content\">\n <span class=\"result-count\">{{ record.ErrorTests || 0 }}</span>\n <span class=\"result-label\">Errors</span>\n </div>\n </div>\n <div class=\"result-item skipped\">\n <div class=\"result-icon\">\n <i class=\"fas fa-forward\"></i>\n </div>\n <div class=\"result-content\">\n <span class=\"result-count\">{{ record.SkippedTests || 0 }}</span>\n <span class=\"result-label\">Skipped</span>\n </div>\n </div>\n <div class=\"result-item total\">\n <div class=\"result-icon\">\n <i class=\"fas fa-list\"></i>\n </div>\n <div class=\"result-content\">\n <span class=\"result-count\">{{ record.TotalTests || 0 }}</span>\n <span class=\"result-label\">Total</span>\n </div>\n </div>\n </div>\n\n <!-- Tags Section - Sleek inline design -->\n @if (!editingTags) {\n <div class=\"tags-bar\">\n <div class=\"tags-bar-content\">\n <span class=\"tags-bar-label\"><i class=\"fas fa-tags\"></i></span>\n @if (tags.length > 0) {\n <div class=\"tags-bar-chips\">\n @for (tag of tags; track tag) {\n <span class=\"tag-inline\">{{ tag }}</span>\n }\n </div>\n }\n @if (tags.length === 0) {\n <span class=\"tags-bar-empty\">No tags</span>\n }\n <button class=\"tags-bar-edit\" (click)=\"startEditingTags()\" title=\"Edit tags\">\n <i class=\"fas fa-plus\"></i> Add\n </button>\n </div>\n </div>\n }\n\n <!-- Tags Editor - Expanded when editing -->\n @if (editingTags) {\n <div class=\"tags-editor-panel\">\n <div class=\"tags-editor-header\">\n <span class=\"tags-editor-title\"><i class=\"fas fa-tags\"></i> Edit Tags</span>\n </div>\n <div class=\"tags-editor-body\">\n <div class=\"tags-editor-chips\">\n @for (tag of tags; track tag) {\n <span class=\"tag-editable\">\n {{ tag }}\n <button class=\"tag-remove-btn\" (click)=\"removeTag(tag)\" title=\"Remove tag\">\n <i class=\"fas fa-times\"></i>\n </button>\n </span>\n }\n @if (tags.length === 0) {\n <span class=\"tags-empty-hint\">No tags yet</span>\n }\n </div>\n <div class=\"tags-editor-input\">\n <input type=\"text\"\n [(ngModel)]=\"newTag\"\n placeholder=\"Type a tag and press Enter...\"\n (keyup.enter)=\"addTag()\"\n class=\"tag-text-input\" />\n <button mjButton (click)=\"addTag()\" [disabled]=\"!newTag.trim()\" variant=\"flat\">\n <i class=\"fas fa-plus\"></i>\n </button>\n </div>\n </div>\n <div class=\"tags-editor-footer\">\n <button mjButton (click)=\"saveTags()\" variant=\"primary\" [disabled]=\"savingTags\">\n @if (savingTags) {\n <i class=\"fas fa-spinner fa-spin\"></i>\n }\n {{ savingTags ? 'Saving...' : 'Save' }}\n </button>\n <button mjButton (click)=\"cancelEditingTags()\" variant=\"flat\">Cancel</button>\n </div>\n </div>\n }\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs-container\">\n <div class=\"tabs\" role=\"tablist\">\n <button class=\"tab\"\n [class.active]=\"activeTab === 'overview'\"\n (click)=\"changeTab('overview')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'overview'\">\n <i class=\"fas fa-th-large\"></i> Overview\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 'runs'\"\n (click)=\"changeTab('runs')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'runs'\">\n <i class=\"fas fa-list\"></i> Test Runs\n @if (testRunsLoaded) {\n <span class=\"tab-badge\">{{ testRuns.length }}</span>\n }\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 'details'\"\n (click)=\"changeTab('details')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'details'\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 'analytics'\"\n (click)=\"changeTab('analytics')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'analytics'\"\n title=\"Press 4\">\n <i class=\"fas fa-chart-bar\"></i> Analytics\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 'execution'\"\n (click)=\"changeTab('execution')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'execution'\"\n title=\"Press 5\">\n <i class=\"fas fa-microchip\"></i>\n <span>Execution</span>\n </button>\n </div>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tab-content\">\n <!-- Overview Tab -->\n @if (activeTab === 'overview') {\n <div class=\"overview-tab\">\n <!-- Result Hero -->\n <div class=\"result-hero\"\n [class.passed]=\"record.Status === 'Completed' && getPassRate() >= 90\"\n [class.failed]=\"record.Status === 'Failed' || getPassRate() < 50\"\n [class.running]=\"record.Status === 'Running'\"\n [class.pending]=\"record.Status === 'Pending'\">\n <div class=\"result-hero-icon\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon()\"></i>\n </div>\n <div class=\"result-hero-text\">\n <h2>SUITE {{ record.Status.toUpperCase() || 'UNKNOWN' }}</h2>\n <div class=\"result-hero-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{ getPassRate().toFixed(1) }}%</span>\n <span class=\"stat-label\">Pass Rate</span>\n </div>\n <div class=\"stat-divider\"></div>\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{ record.PassedTests || 0 }} / {{ record.TotalTests || 0 }}</span>\n <span class=\"stat-label\">Tests Passed</span>\n </div>\n </div>\n </div>\n </div>\n <!-- Evaluation Metrics Summary -->\n @if (evaluationMetrics && feedbacksLoaded) {\n <div class=\"evaluation-summary\">\n <div class=\"eval-summary-grid\">\n <!-- Human Feedback Card -->\n @if (evalPreferences.showHuman) {\n <div class=\"eval-summary-card\">\n <div class=\"eval-card-header\">\n <i class=\"fa-solid fa-user\"></i>\n <span>Human Feedback</span>\n </div>\n <div class=\"eval-card-body\">\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Reviewed</span>\n <span class=\"eval-stat-value\">{{ evaluationMetrics.humanReviewedCount }} / {{ evaluationMetrics.totalRuns }}</span>\n </div>\n @if (evaluationMetrics.humanReviewedCount > 0) {\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Avg Rating</span>\n <span class=\"eval-stat-value\">{{ evaluationMetrics.humanAvgRating.toFixed(1) }}/10</span>\n </div>\n }\n @if (evaluationMetrics.humanReviewedCount > 0) {\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Correct</span>\n <span class=\"eval-stat-value correct\">{{ evaluationMetrics.humanCorrectCount }}</span>\n @if (evaluationMetrics.humanIncorrectCount > 0) {\n <span class=\"eval-stat-value incorrect\">{{ evaluationMetrics.humanIncorrectCount }} incorrect</span>\n }\n </div>\n }\n </div>\n @if (evaluationMetrics.humanPendingCount > 0) {\n <div class=\"eval-card-footer\">\n <span class=\"pending-badge\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ evaluationMetrics.humanPendingCount }} need review\n </span>\n </div>\n }\n </div>\n }\n <!-- Auto Score Card -->\n @if (evalPreferences.showAuto) {\n <div class=\"eval-summary-card\">\n <div class=\"eval-card-header\">\n <i class=\"fa-solid fa-robot\"></i>\n <span>Auto Evaluation</span>\n </div>\n <div class=\"eval-card-body\">\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Evaluated</span>\n <span class=\"eval-stat-value\">{{ evaluationMetrics.autoEvaluatedCount }} / {{ evaluationMetrics.totalRuns }}</span>\n </div>\n @if (evaluationMetrics.autoEvaluatedCount > 0) {\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Avg Score</span>\n <span class=\"eval-stat-value\">{{ (evaluationMetrics.autoAvgScore * 100).toFixed(0) }}%</span>\n </div>\n }\n @if (evaluationMetrics.autoEvaluatedCount > 0) {\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Pass Rate</span>\n <span class=\"eval-stat-value\">{{ evaluationMetrics.autoPassRate.toFixed(0) }}%</span>\n </div>\n }\n </div>\n </div>\n }\n <!-- Execution Card -->\n @if (evalPreferences.showExecution) {\n <div class=\"eval-summary-card\">\n <div class=\"eval-card-header\">\n <i class=\"fa-solid fa-circle-check\"></i>\n <span>Execution</span>\n </div>\n <div class=\"eval-card-body\">\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Completed</span>\n <span class=\"eval-stat-value\">{{ evaluationMetrics.execCompletedCount }} / {{ evaluationMetrics.totalRuns }}</span>\n </div>\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Success Rate</span>\n <span class=\"eval-stat-value\">{{ evaluationMetrics.execSuccessRate.toFixed(0) }}%</span>\n </div>\n @if (evaluationMetrics.execErrorCount > 0 || evaluationMetrics.execTimeoutCount > 0) {\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Issues</span>\n @if (evaluationMetrics.execErrorCount > 0) {\n <span class=\"eval-stat-value error\">{{ evaluationMetrics.execErrorCount }} errors</span>\n }\n @if (evaluationMetrics.execTimeoutCount > 0) {\n <span class=\"eval-stat-value timeout\">{{ evaluationMetrics.execTimeoutCount }} timeouts</span>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Needs Review Section -->\n @if (evalPreferences.showHuman && needsReviewItems.length > 0 && feedbacksLoaded) {\n <div class=\"needs-review-section\">\n <div class=\"needs-review-header\">\n <h3><i class=\"fa-solid fa-user-clock\"></i> Needs Review</h3>\n <span class=\"review-count\">{{ needsReviewItems.length }} items</span>\n </div>\n <div class=\"needs-review-list\">\n @for (item of needsReviewItems.slice(0, 5); track item) {\n <div class=\"review-item\"\n [class.high-priority]=\"item.priority === 'high'\"\n [class.medium-priority]=\"item.priority === 'medium'\"\n (click)=\"toggleRunExpanded(item.run.id)\">\n <div class=\"review-item-icon\">\n @if (item.priority === 'high') {\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n }\n @if (item.priority === 'medium') {\n <i class=\"fa-solid fa-circle-dot\"></i>\n }\n @if (item.priority === 'low') {\n <i class=\"fa-solid fa-clock\"></i>\n }\n </div>\n <div class=\"review-item-content\">\n <span class=\"review-item-name\">{{ item.run.testName }}</span>\n <span class=\"review-item-reason\">{{ item.reason }}</span>\n </div>\n <div class=\"review-item-action\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </div>\n </div>\n }\n @if (needsReviewItems.length > 5) {\n <div class=\"review-more\">\n <button mjButton variant=\"flat\" (click)=\"changeTab('runs')\">\n View all {{ needsReviewItems.length }} items\n </button>\n </div>\n }\n </div>\n </div>\n }\n <!-- Progress Ring (when running) -->\n @if (record.Status === 'Running' || record.Status === 'Pending') {\n <div class=\"progress-section\">\n <div class=\"progress-info\">\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n <span>Suite execution in progress...</span>\n </div>\n <div class=\"auto-refresh-notice\">\n <i class=\"fas fa-sync\"></i>\n Auto-refreshing every 5 seconds\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Test Runs Tab -->\n @if (activeTab === 'runs') {\n <div class=\"runs-tab\">\n <!-- Toolbar -->\n @if (testRunsLoaded && testRuns.length > 0) {\n <div class=\"runs-toolbar\">\n <div class=\"run-filters\">\n <button class=\"filter-btn\"\n [class.active]=\"runStatusFilter === null\"\n (click)=\"setRunStatusFilter(null)\">\n All ({{ testRuns.length }})\n </button>\n @if (getRunCountByStatus('Passed') > 0) {\n <button class=\"filter-btn passed\"\n [class.active]=\"runStatusFilter === 'Passed'\"\n (click)=\"setRunStatusFilter('Passed')\"\n >\n <i class=\"fas fa-check\"></i> Passed ({{ getRunCountByStatus('Passed') }})\n </button>\n }\n @if (getRunCountByStatus('Failed') > 0) {\n <button class=\"filter-btn failed\"\n [class.active]=\"runStatusFilter === 'Failed'\"\n (click)=\"setRunStatusFilter('Failed')\"\n >\n <i class=\"fas fa-times\"></i> Failed ({{ getRunCountByStatus('Failed') }})\n </button>\n }\n @if (getRunCountByStatus('Error') > 0) {\n <button class=\"filter-btn error\"\n [class.active]=\"runStatusFilter === 'Error'\"\n (click)=\"setRunStatusFilter('Error')\"\n >\n <i class=\"fas fa-exclamation\"></i> Error ({{ getRunCountByStatus('Error') }})\n </button>\n }\n </div>\n <div class=\"runs-actions\">\n <button mjButton (click)=\"exportToCSV()\">\n <i class=\"fas fa-download\"></i> Export CSV\n </button>\n </div>\n </div>\n }\n <!-- Loading State -->\n @if (loadingTestRuns) {\n <div class=\"loading-state\">\n <div class=\"skeleton-list\">\n @for (i of [1,2,3,4,5]; track i) {\n <div class=\"skeleton-card\">\n <div class=\"skeleton-sequence\"></div>\n <div class=\"skeleton-icon\"></div>\n <div class=\"skeleton-content\">\n <div class=\"skeleton-line wide\"></div>\n <div class=\"skeleton-line narrow\"></div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Test Runs List -->\n @if (!loadingTestRuns && testRuns.length > 0) {\n <div class=\"test-runs-list\">\n @for (run of getFilteredTestRuns(); track run) {\n <div class=\"test-run-card\">\n <div class=\"test-run-item\" (click)=\"toggleRunExpanded(run.ID)\">\n <div class=\"run-sequence\">{{ run.Sequence || '-' }}</div>\n <div class=\"run-icon\" [style.background-color]=\"getRunStatusColor(run.Status)\">\n <i class=\"fas\" [ngClass]=\"getRunStatusIcon(run.Status)\"></i>\n </div>\n <div class=\"run-content\">\n <div class=\"run-header-row\">\n <div class=\"run-name\">{{ run.Test }}</div>\n <!-- Evaluation Badge -->\n <app-evaluation-badge\n [executionStatus]=\"run.Status\"\n [originalStatus]=\"run.Status\"\n [autoScore]=\"run.Score\"\n [humanRating]=\"getFeedbackRating(run.ID) || null\"\n [humanIsCorrect]=\"getHumanIsCorrect(run.ID)\"\n [hasHumanFeedback]=\"hasFeedback(run.ID)\"\n [preferences]=\"evalPreferences\"\n [mode]=\"'compact'\">\n </app-evaluation-badge>\n </div>\n <div class=\"run-meta\">\n @if (run.DurationSeconds) {\n <span class=\"run-duration\">\n <i class=\"fas fa-clock\"></i> {{ run.DurationSeconds.toFixed(1) }}s\n </span>\n }\n @if (run.CostUSD) {\n <span class=\"run-cost\">\n <i class=\"fas fa-dollar-sign\"></i> {{ run.CostUSD.toFixed(6) }}\n </span>\n }\n @if (run.TargetLogEntityID && run.TargetLogID) {\n <mj-entity-link-pill\n [entityName]=\"run.TargetLogEntity\"\n [recordId]=\"run.TargetLogID\">\n </mj-entity-link-pill>\n }\n </div>\n @if (getRunTags(run).length > 0) {\n <div class=\"run-tags\">\n @for (tag of getRunTags(run); track tag) {\n <span class=\"tag-chip\">{{ tag }}</span>\n }\n </div>\n }\n </div>\n <div class=\"run-expand\">\n <i class=\"fas\" [class.fa-chevron-down]=\"expandedRunId !== run.ID\" [class.fa-chevron-up]=\"expandedRunId === run.ID\"></i>\n </div>\n </div>\n <!-- Expanded Inline Feedback -->\n @if (expandedRunId === run.ID) {\n <div class=\"inline-feedback\">\n <div class=\"feedback-divider\"></div>\n <div class=\"feedback-section\">\n <div class=\"feedback-label\">Quick Feedback</div>\n <div class=\"inline-rating\">\n <div class=\"rating-numbers\">\n @for (num of [1,2,3,4,5,6,7,8,9,10]; track num) {\n <button\n type=\"button\"\n class=\"rating-btn\"\n [class.selected]=\"num === inlineRating\"\n [class.hover]=\"num === inlineHoverRating\"\n [class.low]=\"num <= 3\"\n [class.mid]=\"num >= 4 && num <= 6\"\n [class.high]=\"num >= 7\"\n (click)=\"setInlineRating(num); $event.stopPropagation()\"\n (mouseenter)=\"inlineHoverRating = num\"\n (mouseleave)=\"inlineHoverRating = 0\">\n {{ num }}\n </button>\n }\n </div>\n @if (inlineRating > 0) {\n <div class=\"rating-info\">\n <span class=\"rating-value\">{{ inlineRating }}/10</span>\n <span class=\"rating-label-text\">{{ getInlineRatingLabel() }}</span>\n </div>\n }\n </div>\n <div class=\"correctness-row\">\n <span class=\"correctness-label\">Was it correct?</span>\n <div class=\"correctness-options\">\n <label class=\"radio-opt\" (click)=\"$event.stopPropagation()\">\n <input type=\"radio\" name=\"correct-{{run.ID}}\" [value]=\"true\" [(ngModel)]=\"inlineIsCorrect\">\n <span>Yes</span>\n </label>\n <label class=\"radio-opt\" (click)=\"$event.stopPropagation()\">\n <input type=\"radio\" name=\"correct-{{run.ID}}\" [value]=\"false\" [(ngModel)]=\"inlineIsCorrect\">\n <span>No</span>\n </label>\n <label class=\"radio-opt\" (click)=\"$event.stopPropagation()\">\n <input type=\"radio\" name=\"correct-{{run.ID}}\" [value]=\"null\" [(ngModel)]=\"inlineIsCorrect\">\n <span>Not Sure</span>\n </label>\n </div>\n </div>\n <div class=\"comments-row\" (click)=\"$event.stopPropagation()\">\n <textarea\n class=\"feedback-textarea\"\n [(ngModel)]=\"inlineComments\"\n placeholder=\"Add comments or corrections...\"\n rows=\"3\"></textarea>\n </div>\n <div class=\"feedback-actions\" (click)=\"$event.stopPropagation()\">\n <button mjButton (click)=\"openTestRun(run.ID)\">\n <i class=\"fas fa-external-link-alt\"></i> View Full Details\n </button>\n <button mjButton\n variant=\"primary\"\n (click)=\"saveInlineFeedback()\"\n [disabled]=\"!canSubmitInlineFeedback() || savingInlineFeedback\">\n <i class=\"fas\" [ngClass]=\"savingInlineFeedback ? 'fa-spinner fa-spin' : 'fa-save'\"></i>\n {{ savingInlineFeedback ? 'Saving...' : (hasFeedback(run.ID) ? 'Update' : 'Save') }}\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- Empty State -->\n @if (testRunsLoaded && !loadingTestRuns && testRuns.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-inbox\"\n Title=\"No Test Runs Found\"\n Message=\"No test runs have been recorded for this suite execution.\" />\n }\n <!-- Filtered Empty -->\n @if (testRunsLoaded && !loadingTestRuns && testRuns.length > 0 && getFilteredTestRuns().length === 0) {\n <mj-empty-state\n Variant=\"no-results\"\n Icon=\"fa-solid fa-filter\"\n Title=\"No Matching Runs\"\n Message=\"No test runs match the current filter.\"\n ActionText=\"Clear Filter\"\n ActionVariant=\"outline\"\n (Action)=\"setRunStatusFilter(null)\" />\n }\n </div>\n }\n\n <!-- Details Tab -->\n @if (activeTab === 'details') {\n <div class=\"details-tab\">\n <div class=\"details-card\">\n <h3><i class=\"fas fa-info-circle\"></i> Run Information</h3>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <div class=\"detail-label\">Run ID</div>\n <div class=\"detail-value monospace\">{{ record.ID }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Test Suite</div>\n <div class=\"detail-value\">\n @if (testSuite) {\n <a href=\"javascript:void(0)\" (click)=\"openTestSuite()\">{{ testSuite.Name }}</a>\n }\n @if (!testSuite) {\n <span>Loading...</span>\n }\n </div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Status</div>\n <div class=\"detail-value\">\n <span class=\"status-inline\" [ngClass]=\"getStatusClass()\">{{ record.Status }}</span>\n </div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Run By</div>\n <div class=\"detail-value\">{{ record.RunByUser || 'N/A' }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Started At</div>\n <div class=\"detail-value\">{{ record.StartedAt | date:'medium' }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Completed At</div>\n <div class=\"detail-value\">{{ record.CompletedAt | date:'medium' }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Environment</div>\n <div class=\"detail-value\">{{ record.Environment || 'N/A' }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Trigger Type</div>\n <div class=\"detail-value\">{{ record.TriggerType || 'N/A' }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Git Commit</div>\n <div class=\"detail-value monospace\">{{ record.GitCommit || 'N/A' }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Agent Version</div>\n <div class=\"detail-value\">{{ record.AgentVersion || 'N/A' }}</div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Analytics Tab -->\n @if (activeTab === 'analytics') {\n <div class=\"analytics-tab\">\n <!-- Loading State -->\n @if (loadingTestRuns) {\n <div class=\"analytics-loading\">\n <i class=\"fas fa-spinner fa-spin\"></i>\n <span>Loading test results...</span>\n </div>\n }\n <!-- Summary Statistics - Moved to top for better overview -->\n @if (!loadingTestRuns && testRuns.length > 0) {\n <div class=\"analytics-section\">\n <h3><i class=\"fas fa-chart-pie\"></i> Summary Statistics</h3>\n <div class=\"stats-grid\">\n <div class=\"stat-card\">\n <div class=\"stat-icon passed\"><i class=\"fas fa-check-circle\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ getPassedCount() }}</div>\n <div class=\"stat-label\">Passed</div>\n <div class=\"stat-percent\">{{ getPassedPercent().toFixed(1) }}%</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon failed\"><i class=\"fas fa-times-circle\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ getFailedCount() }}</div>\n <div class=\"stat-label\">Failed</div>\n <div class=\"stat-percent\">{{ getFailedPercent().toFixed(1) }}%</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon score\"><i class=\"fas fa-star\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ (getAverageScore() * 100).toFixed(1) }}%</div>\n <div class=\"stat-label\">Avg Score</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon duration\"><i class=\"fas fa-clock\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ getAverageDuration().toFixed(1) }}s</div>\n <div class=\"stat-label\">Avg Duration</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon cost\"><i class=\"fas fa-dollar-sign\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">${{ getTotalCost().toFixed(4) }}</div>\n <div class=\"stat-label\">Total Cost</div>\n </div>\n </div>\n </div>\n </div>\n }\n <!-- Test Results Table -->\n @if (!loadingTestRuns && testRuns.length > 0) {\n <div class=\"analytics-section\">\n <div class=\"analytics-header\">\n <h3><i class=\"fas fa-table\"></i> Test Results</h3>\n <div class=\"analytics-legend\">\n <span class=\"legend-item passed\"><i class=\"fas fa-check-circle\"></i> Passed</span>\n <span class=\"legend-item failed\"><i class=\"fas fa-times-circle\"></i> Failed</span>\n <span class=\"legend-item error\"><i class=\"fas fa-exclamation-circle\"></i> Error</span>\n <span class=\"legend-item skipped\"><i class=\"fas fa-forward\"></i> Skipped</span>\n </div>\n </div>\n <!-- Results Table -->\n <div class=\"results-table-wrapper\">\n <table class=\"results-table\">\n <thead>\n <tr>\n <th class=\"seq-col\">#</th>\n <th class=\"name-col\">Test Name</th>\n @if (evalPreferences.showExecution) {\n <th class=\"status-col\">Status</th>\n }\n @if (evalPreferences.showAuto) {\n <th class=\"score-col\">Auto Score</th>\n }\n @if (evalPreferences.showHuman) {\n <th class=\"feedback-col\">Human Score</th>\n }\n <th class=\"duration-col\">Duration</th>\n <th class=\"cost-col\">Cost</th>\n </tr>\n </thead>\n <tbody>\n @for (run of testRuns; track run; let i = $index) {\n <tr\n class=\"result-row\"\n [class.row-passed]=\"run.Status === 'Passed'\"\n [class.row-failed]=\"run.Status === 'Failed'\"\n [class.row-error]=\"run.Status === 'Error'\"\n [class.row-skipped]=\"run.Status === 'Skipped'\"\n (click)=\"openTestRun(run.ID)\">\n <td class=\"seq-col\">{{ i + 1 }}</td>\n <td class=\"name-col\">\n <div class=\"test-name-wrapper\">\n <span class=\"test-name\">{{ run.Test || 'Unknown Test' }}</span>\n @if (getRunTags(run).length > 0) {\n <div class=\"test-tags\">\n @for (tag of getRunTags(run).slice(0, 2); track tag) {\n <span class=\"tag-mini\">{{ tag }}</span>\n }\n </div>\n }\n </div>\n </td>\n @if (evalPreferences.showExecution) {\n <td class=\"status-col\">\n <span class=\"status-badge\" [ngClass]=\"'status-' + run.Status.toLowerCase()\">\n <i class=\"fas\"\n [class.fa-check-circle]=\"run.Status === 'Passed'\"\n [class.fa-times-circle]=\"run.Status === 'Failed'\"\n [class.fa-exclamation-circle]=\"run.Status === 'Error'\"\n [class.fa-forward]=\"run.Status === 'Skipped'\"\n [class.fa-clock]=\"run.Status === 'Pending'\"\n [class.fa-spinner]=\"run.Status === 'Running'\"\n [class.fa-spin]=\"run.Status === 'Running'\"></i>\n {{ run.Status }}\n </span>\n </td>\n }\n @if (evalPreferences.showAuto) {\n <td class=\"score-col\">\n @if (run.Score != null) {\n <div class=\"score-display\">\n <div class=\"score-bar-mini\">\n <div class=\"score-fill\"\n [style.width.%]=\"run.Score * 100\"\n [class.high]=\"run.Score >= 0.8\"\n [class.medium]=\"run.Score >= 0.5 && run.Score < 0.8\"\n [class.low]=\"run.Score < 0.5\"></div>\n </div>\n <span class=\"score-text\">{{ (run.Score * 100).toFixed(0) }}%</span>\n </div>\n }\n @if (run.Score == null) {\n <span class=\"na-value\">—</span>\n }\n </td>\n }\n @if (evalPreferences.showHuman) {\n <td class=\"feedback-col\">\n @if (hasFeedback(run.ID)) {\n <div class=\"feedback-display\">\n <span class=\"feedback-rating\" [class.low]=\"getFeedbackRating(run.ID) <= 3\" [class.mid]=\"getFeedbackRating(run.ID) >= 4 && getFeedbackRating(run.ID) <= 6\" [class.high]=\"getFeedbackRating(run.ID) >= 7\">\n {{ getFeedbackRating(run.ID) }}/10\n </span>\n @if (getHumanIsCorrect(run.ID) !== null) {\n <span class=\"feedback-correctness\">\n <i class=\"fas\" [class.fa-check]=\"getHumanIsCorrect(run.ID) === true\" [class.fa-times]=\"getHumanIsCorrect(run.ID) === false\" [class.correct]=\"getHumanIsCorrect(run.ID) === true\" [class.incorrect]=\"getHumanIsCorrect(run.ID) === false\"></i>\n </span>\n }\n </div>\n }\n @if (!hasFeedback(run.ID)) {\n <span class=\"na-value needs-review\">\n <i class=\"fas fa-user-clock\"></i>\n </span>\n }\n </td>\n }\n <td class=\"duration-col\">\n @if (run.DurationSeconds) {\n <span>{{ run.DurationSeconds.toFixed(1) }}s</span>\n }\n @if (!run.DurationSeconds) {\n <span class=\"na-value\">—</span>\n }\n </td>\n <td class=\"cost-col\">\n @if (run.CostUSD) {\n <span>${{ run.CostUSD.toFixed(4) }}</span>\n }\n @if (!run.CostUSD) {\n <span class=\"na-value\">—</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n <!-- Empty State -->\n @if (!loadingTestRuns && testRunsLoaded && testRuns.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-chart-bar\"\n Title=\"No Test Results Yet\"\n Message=\"Test runs will appear here once the suite execution completes.\" />\n }\n </div>\n }\n\n <!-- Execution Tab -->\n @if (activeTab === 'execution') {\n <div class=\"execution-tab\">\n <mj-execution-context\n [machineName]=\"record.MachineName\"\n [machineId]=\"record.MachineID\"\n [runByUserName]=\"record.RunByUserName\"\n [runByUserEmail]=\"record.RunByUserEmail\"\n [runContextDetailsJson]=\"record.RunContextDetails\">\n </mj-execution-context>\n </div>\n }\n </div>\n\n <!-- Keyboard Shortcuts Toggle Button -->\n <button class=\"shortcuts-toggle\" (click)=\"toggleShortcuts()\" [title]=\"showShortcuts ? 'Hide keyboard shortcuts' : 'Show keyboard shortcuts'\">\n <i class=\"fas fa-keyboard\"></i>\n </button>\n\n <!-- Keyboard Shortcuts Hint (Desktop Only) -->\n @if (showShortcuts) {\n <div class=\"keyboard-shortcuts\">\n <div class=\"shortcuts-header\">\n <i class=\"fas fa-keyboard\"></i>\n Shortcuts\n <button class=\"shortcuts-close\" (click)=\"toggleShortcuts()\" title=\"Hide shortcuts\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n <div class=\"shortcut-list\">\n <div class=\"shortcut-item\">\n <span>Refresh</span>\n <span class=\"shortcut-keys\"><kbd>Cmd</kbd><kbd>R</kbd></span>\n </div>\n <div class=\"shortcut-item\">\n <span>Re-run Suite</span>\n <span class=\"shortcut-keys\"><kbd>Cmd</kbd><kbd>Shift</kbd><kbd>R</kbd></span>\n </div>\n <div class=\"shortcut-item\">\n <span>Switch Tabs</span>\n <span class=\"shortcut-keys\"><kbd>1</kbd>-<kbd>5</kbd></span>\n </div>\n </div>\n </div>\n }\n</div>\n"]}
1
+ {"version":3,"file":"test-suite-run-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Tests/test-suite-run-form.component.ts","../../../../src/lib/custom/Tests/test-suite-run-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, HostListener, ViewContainerRef, inject } from '@angular/core';\nimport { Subject, interval } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { CompositeKey, Metadata, RunView } from '@memberjunction/core';\nimport { MJTestSuiteRunEntity, MJTestSuiteEntity, MJTestRunEntity, MJTestRunFeedbackEntity, MJUserSettingEntity, UserInfoEngine } from '@memberjunction/core-entities';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { RegisterClass } from '@memberjunction/global';\nimport { SharedService, NavigationService } from '@memberjunction/ng-shared';\nimport { ApplicationManager } from '@memberjunction/ng-base-application';\nimport { MJTestSuiteRunFormComponent } from '../../generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component';\nimport { SectionPickerItem } from '@memberjunction/ng-ui-components';\nimport {\n TestingDialogService,\n TagsHelper,\n EvaluationPreferencesService,\n EvaluationPreferences,\n EvaluationMetrics,\n TestRunWithFeedback,\n calculateEvaluationMetrics,\n normalizeExecutionStatus,\n getNeedsReviewItems,\n NeedsReviewItem\n} from '@memberjunction/ng-testing';\n\n/** Settings key for keyboard shortcuts visibility */\nconst SHORTCUTS_SETTINGS_KEY = '__mj.Testing.ShowKeyboardShortcuts';\n\n@RegisterClass(BaseFormComponent, 'MJ: Test Suite Runs')\n@Component({\n standalone: false,\n selector: 'mj-test-suite-run-form',\n templateUrl: './test-suite-run-form.component.html',\n styleUrls: ['./test-suite-run-form.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MJTestSuiteRunFormComponentExtended extends MJTestSuiteRunFormComponent implements OnInit, OnDestroy {\n public override record!: MJTestSuiteRunEntity;\n\n private destroy$ = new Subject<void>();\n\n // UI state\n ActiveTab = 'overview';\n\n /** @deprecated Use {@link ActiveTab}. */\n get activeTab() {\n return this.ActiveTab;\n }\n /** @deprecated Use {@link ActiveTab}. */\n set activeTab(value) {\n this.ActiveTab = value;\n }\n Loading = false;\n\n /** @deprecated Use {@link Loading}. */\n get loading() {\n return this.Loading;\n }\n /** @deprecated Use {@link Loading}. */\n set loading(value) {\n this.Loading = value;\n }\n LoadingTestRuns = false;\n\n /** @deprecated Use {@link LoadingTestRuns}. */\n get loadingTestRuns() {\n return this.LoadingTestRuns;\n }\n /** @deprecated Use {@link LoadingTestRuns}. */\n set loadingTestRuns(value) {\n this.LoadingTestRuns = value;\n }\n LoadingFeedbacks = false;\n\n /** @deprecated Use {@link LoadingFeedbacks}. */\n get loadingFeedbacks() {\n return this.LoadingFeedbacks;\n }\n /** @deprecated Use {@link LoadingFeedbacks}. */\n set loadingFeedbacks(value) {\n this.LoadingFeedbacks = value;\n }\n error: string | null = null;\n TestRunsLoaded = false;\n\n /** @deprecated Use {@link TestRunsLoaded}. */\n get testRunsLoaded() {\n return this.TestRunsLoaded;\n }\n /** @deprecated Use {@link TestRunsLoaded}. */\n set testRunsLoaded(value) {\n this.TestRunsLoaded = value;\n }\n FeedbacksLoaded = false;\n\n /** @deprecated Use {@link FeedbacksLoaded}. */\n get feedbacksLoaded() {\n return this.FeedbacksLoaded;\n }\n /** @deprecated Use {@link FeedbacksLoaded}. */\n set feedbacksLoaded(value) {\n this.FeedbacksLoaded = value;\n }\n isRefreshing = false; // case-violation-ok-legacy-back-compat: an ancestor class already declares the PascalCase name\n AutoRefreshEnabled = false;\n\n /** @deprecated Use {@link AutoRefreshEnabled}. */\n get autoRefreshEnabled() {\n return this.AutoRefreshEnabled;\n }\n /** @deprecated Use {@link AutoRefreshEnabled}. */\n set autoRefreshEnabled(value) {\n this.AutoRefreshEnabled = value;\n }\n\n // Related entities\n TestSuite: MJTestSuiteEntity | null = null;\n\n /** @deprecated Use {@link TestSuite}. */\n get testSuite(): MJTestSuiteEntity | null {\n return this.TestSuite;\n }\n /** @deprecated Use {@link TestSuite}. */\n set testSuite(value: MJTestSuiteEntity | null) {\n this.TestSuite = value;\n }\n TestRuns: MJTestRunEntity[] = [];\n\n /** @deprecated Use {@link TestRuns}. */\n get testRuns(): MJTestRunEntity[] {\n return this.TestRuns;\n }\n /** @deprecated Use {@link TestRuns}. */\n set testRuns(value: MJTestRunEntity[]) {\n this.TestRuns = value;\n }\n Feedbacks: Map<string, MJTestRunFeedbackEntity> = new Map();\n\n /** @deprecated Use {@link Feedbacks}. */\n get feedbacks(): Map<string, MJTestRunFeedbackEntity> {\n return this.Feedbacks;\n }\n /** @deprecated Use {@link Feedbacks}. */\n set feedbacks(value: Map<string, MJTestRunFeedbackEntity>) {\n this.Feedbacks = value;\n }\n\n // Tags\n tags: string[] = [];\n NewTag = '';\n\n /** @deprecated Use {@link NewTag}. */\n get newTag() {\n return this.NewTag;\n }\n /** @deprecated Use {@link NewTag}. */\n set newTag(value) {\n this.NewTag = value;\n }\n EditingTags = false;\n\n /** @deprecated Use {@link EditingTags}. */\n get editingTags() {\n return this.EditingTags;\n }\n /** @deprecated Use {@link EditingTags}. */\n set editingTags(value) {\n this.EditingTags = value;\n }\n SavingTags = false;\n\n /** @deprecated Use {@link SavingTags}. */\n get savingTags() {\n return this.SavingTags;\n }\n /** @deprecated Use {@link SavingTags}. */\n set savingTags(value) {\n this.SavingTags = value;\n }\n\n // Inline feedback\n ExpandedRunId: string | null = null;\n\n /** @deprecated Use {@link ExpandedRunId}. */\n get expandedRunId(): string | null {\n return this.ExpandedRunId;\n }\n /** @deprecated Use {@link ExpandedRunId}. */\n set expandedRunId(value: string | null) {\n this.ExpandedRunId = value;\n }\n InlineRating: number = 0;\n\n /** @deprecated Use {@link InlineRating}. */\n get inlineRating(): number {\n return this.InlineRating;\n }\n /** @deprecated Use {@link InlineRating}. */\n set inlineRating(value: number) {\n this.InlineRating = value;\n }\n InlineHoverRating: number = 0;\n\n /** @deprecated Use {@link InlineHoverRating}. */\n get inlineHoverRating(): number {\n return this.InlineHoverRating;\n }\n /** @deprecated Use {@link InlineHoverRating}. */\n set inlineHoverRating(value: number) {\n this.InlineHoverRating = value;\n }\n InlineIsCorrect: boolean | null = null;\n\n /** @deprecated Use {@link InlineIsCorrect}. */\n get inlineIsCorrect(): boolean | null {\n return this.InlineIsCorrect;\n }\n /** @deprecated Use {@link InlineIsCorrect}. */\n set inlineIsCorrect(value: boolean | null) {\n this.InlineIsCorrect = value;\n }\n InlineComments: string = '';\n\n /** @deprecated Use {@link InlineComments}. */\n get inlineComments(): string {\n return this.InlineComments;\n }\n /** @deprecated Use {@link InlineComments}. */\n set inlineComments(value: string) {\n this.InlineComments = value;\n }\n SavingInlineFeedback = false;\n\n /** @deprecated Use {@link SavingInlineFeedback}. */\n get savingInlineFeedback() {\n return this.SavingInlineFeedback;\n }\n /** @deprecated Use {@link SavingInlineFeedback}. */\n set savingInlineFeedback(value) {\n this.SavingInlineFeedback = value;\n }\n\n // Filter for test runs\n RunStatusFilter: string | null = null;\n\n /** @deprecated Use {@link RunStatusFilter}. */\n get runStatusFilter(): string | null {\n return this.RunStatusFilter;\n }\n /** @deprecated Use {@link RunStatusFilter}. */\n set runStatusFilter(value: string | null) {\n this.RunStatusFilter = value;\n }\n\n // Keyboard shortcuts\n KeyboardShortcutsEnabled = true;\n\n /** @deprecated Use {@link KeyboardShortcutsEnabled}. */\n get keyboardShortcutsEnabled() {\n return this.KeyboardShortcutsEnabled;\n }\n /** @deprecated Use {@link KeyboardShortcutsEnabled}. */\n set keyboardShortcutsEnabled(value) {\n this.KeyboardShortcutsEnabled = value;\n }\n ShowShortcuts = false;\n\n /** @deprecated Use {@link ShowShortcuts}. */\n get showShortcuts() {\n return this.ShowShortcuts;\n }\n /** @deprecated Use {@link ShowShortcuts}. */\n set showShortcuts(value) {\n this.ShowShortcuts = value;\n } // Hidden by default\n private shortcutsSettingEntity: MJUserSettingEntity | null = null;\n private get metadata() { return this.ProviderToUse; }\n // Evaluation system\n EvalPreferences: EvaluationPreferences = {\n showExecution: true,\n showHuman: true,\n showAuto: false\n };\n\n /** @deprecated Use {@link EvalPreferences}. */\n get evalPreferences(): EvaluationPreferences {\n return this.EvalPreferences;\n }\n /** @deprecated Use {@link EvalPreferences}. */\n set evalPreferences(value: EvaluationPreferences) {\n this.EvalPreferences = value;\n }\n TestRunsWithFeedback: TestRunWithFeedback[] = [];\n\n /** @deprecated Use {@link TestRunsWithFeedback}. */\n get testRunsWithFeedback(): TestRunWithFeedback[] {\n return this.TestRunsWithFeedback;\n }\n /** @deprecated Use {@link TestRunsWithFeedback}. */\n set testRunsWithFeedback(value: TestRunWithFeedback[]) {\n this.TestRunsWithFeedback = value;\n }\n EvaluationMetrics: EvaluationMetrics | null = null;\n\n /** @deprecated Use {@link EvaluationMetrics}. */\n get evaluationMetrics(): EvaluationMetrics | null {\n return this.EvaluationMetrics;\n }\n /** @deprecated Use {@link EvaluationMetrics}. */\n set evaluationMetrics(value: EvaluationMetrics | null) {\n this.EvaluationMetrics = value;\n }\n NeedsReviewItems: NeedsReviewItem[] = [];\n\n /** @deprecated Use {@link NeedsReviewItems}. */\n get needsReviewItems(): NeedsReviewItem[] {\n return this.NeedsReviewItems;\n }\n /** @deprecated Use {@link NeedsReviewItems}. */\n set needsReviewItems(value: NeedsReviewItem[]) {\n this.NeedsReviewItems = value;\n }\n\n // Service injections\n private navigationService = inject(NavigationService);\n private testingDialogService = inject(TestingDialogService);\n private evalPrefsService = inject(EvaluationPreferencesService);\n private viewContainerRef = inject(ViewContainerRef);\n private appManager = inject(ApplicationManager);\n\n async ngOnInit() {\n await super.ngOnInit();\n this.loadShortcutsSetting();\n\n // Subscribe to evaluation preferences\n this.evalPrefsService.preferences$\n .pipe(takeUntil(this.destroy$))\n .subscribe(prefs => {\n this.EvalPreferences = prefs;\n this.cdr.markForCheck();\n });\n\n if (this.record && this.record.ID) {\n await this.loadRelatedData();\n this.parseTags();\n\n // Auto-refresh for running suite executions\n if (this.record.Status === 'Running' || this.record.Status === 'Pending') {\n this.startAutoRefresh();\n }\n }\n }\n\n private parseTags(): void {\n this.tags = TagsHelper.parseTags(this.record.Tags);\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // Keyboard shortcuts\n @HostListener('document:keydown', ['$event'])\n handleKeyboardShortcut(event: KeyboardEvent) {\n if (!this.KeyboardShortcutsEnabled) return;\n\n // Cmd/Ctrl + R: Refresh\n if ((event.metaKey || event.ctrlKey) && event.key === 'r' && !event.shiftKey) {\n event.preventDefault();\n this.Refresh();\n return;\n }\n\n // Cmd/Ctrl + Shift + R: Re-run suite\n if ((event.metaKey || event.ctrlKey) && event.shiftKey && event.key === 'r') {\n event.preventDefault();\n this.ReRunSuite();\n return;\n }\n\n // Number keys for tabs (1-4)\n if (!event.metaKey && !event.ctrlKey && !event.altKey) {\n switch (event.key) {\n case '1': this.ChangeTab('overview'); break;\n case '2': this.ChangeTab('runs'); break;\n case '3': this.ChangeTab('details'); break;\n case '4': this.ChangeTab('analytics'); break;\n }\n }\n }\n\n private startAutoRefresh() {\n this.AutoRefreshEnabled = true;\n interval(5000)\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n if (this.AutoRefreshEnabled && (this.record.Status === 'Running' || this.record.Status === 'Pending')) {\n this.silentRefresh();\n } else {\n this.AutoRefreshEnabled = false;\n }\n });\n }\n\n private async silentRefresh() {\n try {\n await this.record.Load(this.record.ID);\n this.cdr.markForCheck();\n } catch {\n // Silently fail on auto-refresh\n }\n }\n\n private async loadRelatedData() {\n this.Loading = true;\n this.error = null;\n\n try {\n // Load test suite\n if (this.record.SuiteID) {\n const md = this.ProviderToUse;\n const suite = await md.GetEntityObject<MJTestSuiteEntity>('MJ: Test Suites');\n if (suite && await suite.Load(this.record.SuiteID)) {\n this.TestSuite = suite;\n }\n }\n\n this.cdr.markForCheck();\n } catch (error) {\n console.error('Error loading related data:', error);\n this.error = 'Failed to load related data. Click to retry.';\n } finally {\n this.Loading = false;\n this.cdr.markForCheck();\n }\n }\n\n async retryLoad() {\n this.error = null;\n await this.loadRelatedData();\n }\n\n private async loadTestRuns() {\n if (this.TestRunsLoaded) return;\n\n this.LoadingTestRuns = true;\n this.cdr.markForCheck();\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJTestRunEntity>({\n EntityName: 'MJ: Test Runs',\n ExtraFilter: `TestSuiteRunID='${this.record.ID}'`,\n OrderBy: 'Sequence ASC, StartedAt ASC',\n ResultType: 'entity_object'\n });\n\n if (result.Success) {\n this.TestRuns = result.Results || [];\n }\n\n this.TestRunsLoaded = true;\n\n // Also load feedbacks for these runs\n if (this.TestRuns.length > 0) {\n await this.loadFeedbacks();\n }\n } catch (error) {\n console.error('Error loading test runs:', error);\n SharedService.Instance.CreateSimpleNotification('Failed to load test runs', 'error', 3000);\n } finally {\n this.LoadingTestRuns = false;\n this.cdr.markForCheck();\n }\n }\n\n /** The tab strip as `mj-section-picker` items: strip order, the run count once loaded. */\n get SectionPickerItems(): SectionPickerItem[] {\n return [\n { Key: 'overview', Title: 'Overview', Icon: 'fas fa-th-large' },\n { Key: 'runs', Title: 'Test Runs', Icon: 'fas fa-list', Count: this.TestRunsLoaded ? this.TestRuns.length : null },\n { Key: 'details', Title: 'Details', Icon: 'fas fa-info-circle' },\n { Key: 'analytics', Title: 'Analytics', Icon: 'fas fa-chart-bar' },\n { Key: 'execution', Title: 'Execution', Icon: 'fas fa-microchip' },\n ];\n }\n\n /** A pick from the phone section sheet; goes through ChangeTab so lazy loads fire. An unknown key is ignored. */\n OnSectionPicked(key: string): void {\n if (this.SectionPickerItems.some((i) => i.Key === key)) this.ChangeTab(key);\n }\n\n ChangeTab(tab: string) {\n this.ActiveTab = tab;\n\n // Lazy load tabs\n if ((tab === 'runs' || tab === 'analytics') && !this.TestRunsLoaded) {\n this.loadTestRuns();\n }\n\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link ChangeTab}. */\n changeTab(tab: string) {\n return this.ChangeTab(tab);\n }\n\n GetStatusColor(): string {\n switch (this.record.Status) {\n case 'Completed': return '#10b981';\n case 'Failed': return '#ef4444';\n case 'Running': return '#3b82f6';\n case 'Pending': return '#8b5cf6';\n case 'Cancelled': return '#6b7280';\n default: return '#9ca3af';\n }\n }\n\n /** @deprecated Use {@link GetStatusColor}. */\n getStatusColor(): string {\n return this.GetStatusColor();\n }\n\n GetStatusIcon(): string {\n switch (this.record.Status) {\n case 'Completed': return 'fa-check-circle';\n case 'Failed': return 'fa-times-circle';\n case 'Running': return 'fa-circle-notch fa-spin';\n case 'Pending': return 'fa-hourglass-half';\n case 'Cancelled': return 'fa-ban';\n default: return 'fa-question-circle';\n }\n }\n\n /** @deprecated Use {@link GetStatusIcon}. */\n getStatusIcon(): string {\n return this.GetStatusIcon();\n }\n\n GetStatusClass(): string {\n return `status-${this.record.Status?.toLowerCase() || 'unknown'}`;\n }\n\n /** @deprecated Use {@link GetStatusClass}. */\n getStatusClass(): string {\n return this.GetStatusClass();\n }\n\n CalculateDuration(): string {\n if (!this.record.TotalDurationSeconds) return 'N/A';\n\n const seconds = this.record.TotalDurationSeconds;\n if (seconds < 60) return `${seconds.toFixed(1)}s`;\n if (seconds < 3600) {\n const mins = Math.floor(seconds / 60);\n const secs = Math.floor(seconds % 60);\n return `${mins}m ${secs}s`;\n }\n\n const hours = Math.floor(seconds / 3600);\n const mins = Math.floor((seconds % 3600) / 60);\n return `${hours}h ${mins}m`;\n }\n\n /** @deprecated Use {@link CalculateDuration}. */\n calculateDuration(): string {\n return this.CalculateDuration();\n }\n\n FormatCost(cost: number | null): string {\n if (cost === null || cost === undefined) return 'N/A';\n return `$${cost.toFixed(6)}`;\n }\n\n /** @deprecated Use {@link FormatCost}. */\n formatCost(cost: number | null): string {\n return this.FormatCost(cost);\n }\n\n GetPassRate(): number {\n const total = this.record.TotalTests || 0;\n const passed = this.record.PassedTests || 0;\n if (total === 0) return 0;\n return (passed / total) * 100;\n }\n\n /** @deprecated Use {@link GetPassRate}. */\n getPassRate(): number {\n return this.GetPassRate();\n }\n\n GetRelativeTime(date: Date | string | null): string {\n if (!date) return 'N/A';\n const d = new Date(date);\n const now = new Date();\n const diffMs = now.getTime() - d.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n\n if (diffMins < 1) return 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays < 7) return `${diffDays}d ago`;\n return d.toLocaleDateString();\n }\n\n /** @deprecated Use {@link GetRelativeTime}. */\n getRelativeTime(date: Date | string | null): string {\n return this.GetRelativeTime(date);\n }\n\n NavigateToTestingDashboard(): void {\n const testingApp = this.appManager.GetAppByName('Testing');\n if (testingApp) {\n this.navigationService.SwitchToApp(testingApp.ID);\n }\n }\n\n /** @deprecated Use {@link NavigateToTestingDashboard}. */\n navigateToTestingDashboard(): void {\n return this.NavigateToTestingDashboard();\n }\n\n OpenTestSuite() {\n if (this.TestSuite) {\n SharedService.Instance.OpenEntityRecord('MJ: Test Suites', CompositeKey.FromID(this.TestSuite.ID));\n }\n }\n\n /** @deprecated Use {@link OpenTestSuite}. */\n openTestSuite() {\n return this.OpenTestSuite();\n }\n\n OpenTestRun(runId: string) {\n SharedService.Instance.OpenEntityRecord('MJ: Test Runs', CompositeKey.FromID(runId));\n }\n\n /** @deprecated Use {@link OpenTestRun}. */\n openTestRun(runId: string) {\n return this.OpenTestRun(runId);\n }\n\n async ReRunSuite() {\n if (!this.record.SuiteID) {\n SharedService.Instance.CreateSimpleNotification('Cannot re-run: Suite ID not available', 'error', 3000);\n return;\n }\n\n this.testingDialogService.OpenSuitePanel(this.record.SuiteID);\n }\n\n /** @deprecated Use {@link ReRunSuite}. */\n async reRunSuite() {\n return this.ReRunSuite();\n }\n\n async Refresh() {\n this.isRefreshing = true;\n this.cdr.markForCheck();\n\n try {\n await this.record.Load(this.record.ID);\n await this.loadRelatedData();\n\n // Reset lazy-loaded data\n if (this.TestRunsLoaded) {\n this.TestRunsLoaded = false;\n this.TestRuns = [];\n await this.loadTestRuns();\n }\n\n SharedService.Instance.CreateSimpleNotification('Refreshed successfully', 'success', 2000);\n } catch {\n SharedService.Instance.CreateSimpleNotification('Failed to refresh', 'error', 3000);\n } finally {\n this.isRefreshing = false;\n this.cdr.markForCheck();\n }\n }\n\n /** @deprecated Use {@link Refresh}. */\n async refresh() {\n return this.Refresh();\n }\n\n GetRunStatusColor(status: string): string {\n switch (status) {\n case 'Passed': return '#10b981';\n case 'Failed': return '#ef4444';\n case 'Error': return '#f59e0b';\n case 'Timeout': return '#f97316';\n case 'Running': return '#3b82f6';\n case 'Pending': return '#8b5cf6';\n case 'Skipped': return '#6b7280';\n default: return '#9ca3af';\n }\n }\n\n /** @deprecated Use {@link GetRunStatusColor}. */\n getRunStatusColor(status: string): string {\n return this.GetRunStatusColor(status);\n }\n\n GetRunStatusIcon(status: string): string {\n switch (status) {\n case 'Passed': return 'fa-check';\n case 'Failed': return 'fa-times';\n case 'Error': return 'fa-exclamation';\n case 'Timeout': return 'fa-clock';\n case 'Running': return 'fa-circle-notch fa-spin';\n case 'Pending': return 'fa-hourglass-half';\n case 'Skipped': return 'fa-forward';\n default: return 'fa-question';\n }\n }\n\n /** @deprecated Use {@link GetRunStatusIcon}. */\n getRunStatusIcon(status: string): string {\n return this.GetRunStatusIcon(status);\n }\n\n // ===========================\n // Tag Management\n // ===========================\n\n StartEditingTags(): void {\n this.EditingTags = true;\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link StartEditingTags}. */\n startEditingTags(): void {\n return this.StartEditingTags();\n }\n\n CancelEditingTags(): void {\n this.EditingTags = false;\n this.NewTag = '';\n this.parseTags(); // Reset to original\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link CancelEditingTags}. */\n cancelEditingTags(): void {\n return this.CancelEditingTags();\n }\n\n AddTag(): void {\n const tag = this.NewTag.trim();\n if (tag && !this.tags.includes(tag)) {\n this.tags = [...this.tags, tag];\n this.NewTag = '';\n this.cdr.markForCheck();\n }\n }\n\n /** @deprecated Use {@link AddTag}. */\n addTag(): void {\n return this.AddTag();\n }\n\n RemoveTag(tag: string): void {\n this.tags = this.tags.filter(t => t !== tag);\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link RemoveTag}. */\n removeTag(tag: string): void {\n return this.RemoveTag(tag);\n }\n\n async SaveTags(): Promise<void> {\n // Auto-add any pending tag in the input before saving\n const pendingTag = this.NewTag.trim();\n if (pendingTag && !this.tags.includes(pendingTag)) {\n this.tags = [...this.tags, pendingTag];\n this.NewTag = '';\n }\n\n this.SavingTags = true;\n this.cdr.markForCheck();\n\n try {\n this.record.Tags = TagsHelper.toJson(this.tags);\n const result = await this.record.Save();\n\n if (result) {\n this.EditingTags = false;\n SharedService.Instance.CreateSimpleNotification('Tags saved successfully', 'success', 2000);\n } else {\n SharedService.Instance.CreateSimpleNotification(\n this.record.LatestResult?.Message || 'Failed to save tags',\n 'error',\n 3000\n );\n }\n } catch (error) {\n SharedService.Instance.CreateSimpleNotification('Failed to save tags', 'error', 3000);\n } finally {\n this.SavingTags = false;\n this.cdr.markForCheck();\n }\n }\n\n /** @deprecated Use {@link SaveTags}. */\n async saveTags(): Promise<void> {\n return this.SaveTags();\n }\n\n // ===========================\n // Test Run Filtering\n // ===========================\n\n SetRunStatusFilter(status: string | null): void {\n this.RunStatusFilter = status;\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link SetRunStatusFilter}. */\n setRunStatusFilter(status: string | null): void {\n return this.SetRunStatusFilter(status);\n }\n\n GetFilteredTestRuns(): MJTestRunEntity[] {\n if (!this.RunStatusFilter) return this.TestRuns;\n return this.TestRuns.filter(run => run.Status === this.RunStatusFilter);\n }\n\n /** @deprecated Use {@link GetFilteredTestRuns}. */\n getFilteredTestRuns(): MJTestRunEntity[] {\n return this.GetFilteredTestRuns();\n }\n\n GetRunCountByStatus(status: string): number {\n return this.TestRuns.filter(run => run.Status === status).length;\n }\n\n /** @deprecated Use {@link GetRunCountByStatus}. */\n getRunCountByStatus(status: string): number {\n return this.GetRunCountByStatus(status);\n }\n\n // ===========================\n // Inline Feedback\n // ===========================\n\n private async loadFeedbacks(): Promise<void> {\n if (this.FeedbacksLoaded) return;\n\n this.LoadingFeedbacks = true;\n this.cdr.markForCheck();\n\n try {\n const testRunIds = this.TestRuns.map(r => `'${r.ID}'`).join(',');\n if (!testRunIds) return;\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJTestRunFeedbackEntity>({\n EntityName: 'MJ: Test Run Feedbacks',\n ExtraFilter: `TestRunID IN (${testRunIds})`,\n ResultType: 'entity_object'\n });\n\n if (result.Success && result.Results) {\n this.Feedbacks.clear();\n for (const feedback of result.Results) {\n this.Feedbacks.set(feedback.TestRunID, feedback);\n }\n }\n\n // Build TestRunWithFeedback array and calculate metrics\n this.buildTestRunsWithFeedback();\n\n this.FeedbacksLoaded = true;\n } catch (error) {\n console.error('Error loading feedbacks:', error);\n } finally {\n this.LoadingFeedbacks = false;\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Build TestRunWithFeedback array from testRuns and feedbacks\n */\n private buildTestRunsWithFeedback(): void {\n this.TestRunsWithFeedback = this.TestRuns.map(run => {\n const feedback = this.Feedbacks.get(run.ID);\n return {\n id: run.ID,\n testId: run.TestID,\n testName: run.Test || 'Unknown Test',\n executionStatus: normalizeExecutionStatus(run.Status || 'Completed'),\n originalStatus: run.Status || 'Completed',\n duration: (run.DurationSeconds || 0) * 1000, // Convert to ms\n cost: run.CostUSD || 0,\n runDateTime: run.StartedAt ? new Date(run.StartedAt) : new Date(),\n autoScore: run.Score,\n passedChecks: null,\n failedChecks: null,\n totalChecks: null,\n humanRating: feedback?.Rating || null,\n humanIsCorrect: feedback?.IsCorrect ?? null,\n humanComments: feedback?.CorrectionSummary || null,\n hasHumanFeedback: !!feedback,\n feedbackId: feedback?.ID || null,\n tags: TagsHelper.parseTags(run.Tags),\n targetType: null,\n targetLogID: null\n };\n });\n\n // Calculate metrics\n this.EvaluationMetrics = calculateEvaluationMetrics(this.TestRunsWithFeedback);\n\n // Get items needing review\n this.NeedsReviewItems = getNeedsReviewItems(this.TestRunsWithFeedback);\n }\n\n ToggleRunExpanded(runId: string): void {\n if (this.ExpandedRunId === runId) {\n this.ExpandedRunId = null;\n } else {\n this.ExpandedRunId = runId;\n this.initializeInlineFeedback(runId);\n }\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link ToggleRunExpanded}. */\n toggleRunExpanded(runId: string): void {\n return this.ToggleRunExpanded(runId);\n }\n\n private initializeInlineFeedback(runId: string): void {\n const existingFeedback = this.Feedbacks.get(runId);\n if (existingFeedback) {\n this.InlineRating = existingFeedback.Rating || 0;\n this.InlineIsCorrect = existingFeedback.IsCorrect;\n this.InlineComments = existingFeedback.CorrectionSummary || '';\n } else {\n this.InlineRating = 0;\n this.InlineIsCorrect = null;\n this.InlineComments = '';\n }\n this.InlineHoverRating = 0;\n }\n\n SetInlineRating(value: number): void {\n this.InlineRating = value;\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link SetInlineRating}. */\n setInlineRating(value: number): void {\n return this.SetInlineRating(value);\n }\n\n GetInlineRatingLabel(): string {\n if (this.InlineRating <= 3) return 'Poor';\n if (this.InlineRating <= 5) return 'Below Average';\n if (this.InlineRating <= 6) return 'Average';\n if (this.InlineRating <= 7) return 'Good';\n if (this.InlineRating <= 8) return 'Very Good';\n if (this.InlineRating <= 9) return 'Excellent';\n return 'Outstanding';\n }\n\n /** @deprecated Use {@link GetInlineRatingLabel}. */\n getInlineRatingLabel(): string {\n return this.GetInlineRatingLabel();\n }\n\n CanSubmitInlineFeedback(): boolean {\n return this.InlineRating > 0 && this.InlineComments.trim().length > 0;\n }\n\n /** @deprecated Use {@link CanSubmitInlineFeedback}. */\n canSubmitInlineFeedback(): boolean {\n return this.CanSubmitInlineFeedback();\n }\n\n async SaveInlineFeedback(): Promise<void> {\n if (!this.ExpandedRunId || !this.CanSubmitInlineFeedback()) return;\n\n this.SavingInlineFeedback = true;\n this.cdr.markForCheck();\n\n try {\n const md = this.ProviderToUse;\n const currentUser = md.CurrentUser;\n\n let feedback = this.Feedbacks.get(this.ExpandedRunId);\n\n if (!feedback) {\n feedback = await md.GetEntityObject<MJTestRunFeedbackEntity>('MJ: Test Run Feedbacks', currentUser);\n feedback.TestRunID = this.ExpandedRunId;\n feedback.ReviewerUserID = currentUser.ID;\n }\n\n feedback.Rating = this.InlineRating;\n feedback.IsCorrect = this.InlineIsCorrect;\n feedback.CorrectionSummary = this.InlineComments.trim() || null;\n\n const result = await feedback.Save();\n\n if (result) {\n this.Feedbacks.set(this.ExpandedRunId, feedback);\n // Rebuild the metrics after feedback update\n this.buildTestRunsWithFeedback();\n SharedService.Instance.CreateSimpleNotification('Feedback saved', 'success', 2000);\n this.ExpandedRunId = null;\n } else {\n SharedService.Instance.CreateSimpleNotification(\n feedback.LatestResult?.Message || 'Failed to save feedback',\n 'error',\n 3000\n );\n }\n } catch (error) {\n SharedService.Instance.CreateSimpleNotification('Failed to save feedback', 'error', 3000);\n } finally {\n this.SavingInlineFeedback = false;\n this.cdr.markForCheck();\n }\n }\n\n /** @deprecated Use {@link SaveInlineFeedback}. */\n async saveInlineFeedback(): Promise<void> {\n return this.SaveInlineFeedback();\n }\n\n HasFeedback(runId: string): boolean {\n return this.Feedbacks.has(runId);\n }\n\n /** @deprecated Use {@link HasFeedback}. */\n hasFeedback(runId: string): boolean {\n return this.HasFeedback(runId);\n }\n\n GetFeedbackRating(runId: string): number {\n return this.Feedbacks.get(runId)?.Rating || 0;\n }\n\n /** @deprecated Use {@link GetFeedbackRating}. */\n getFeedbackRating(runId: string): number {\n return this.GetFeedbackRating(runId);\n }\n\n /**\n * Get TestRunWithFeedback by run ID for template binding\n */\n GetRunWithFeedback(runId: string): TestRunWithFeedback | undefined {\n return this.TestRunsWithFeedback.find(r => r.id === runId);\n }\n\n /** @deprecated Use {@link GetRunWithFeedback}. */\n getRunWithFeedback(runId: string): TestRunWithFeedback | undefined {\n return this.GetRunWithFeedback(runId);\n }\n\n /**\n * Get the human correctness status for a run\n */\n GetHumanIsCorrect(runId: string): boolean | null {\n return this.Feedbacks.get(runId)?.IsCorrect ?? null;\n }\n\n /** @deprecated Use {@link GetHumanIsCorrect}. */\n getHumanIsCorrect(runId: string): boolean | null {\n return this.GetHumanIsCorrect(runId);\n }\n\n // ===========================\n // Run Tags\n // ===========================\n\n GetRunTags(run: MJTestRunEntity): string[] {\n return TagsHelper.parseTags(run.Tags);\n }\n\n /** @deprecated Use {@link GetRunTags}. */\n getRunTags(run: MJTestRunEntity): string[] {\n return this.GetRunTags(run);\n }\n\n // ===========================\n // Keyboard Shortcuts Settings\n // ===========================\n\n /**\n * Load keyboard shortcuts visibility setting from user settings\n */\n private loadShortcutsSetting(): void {\n try {\n const engine = UserInfoEngine.Instance;\n const setting = engine.UserSettings.find(s => s.Setting === SHORTCUTS_SETTINGS_KEY);\n\n if (setting) {\n this.shortcutsSettingEntity = setting;\n this.ShowShortcuts = setting.Value === 'true';\n } else {\n // Default to hidden\n this.ShowShortcuts = false;\n }\n this.cdr.markForCheck();\n } catch (error) {\n console.warn('Failed to load shortcuts setting:', error);\n }\n }\n\n /**\n * Toggle keyboard shortcuts visibility and save preference\n */\n async ToggleShortcuts(): Promise<void> {\n this.ShowShortcuts = !this.ShowShortcuts;\n this.cdr.markForCheck();\n\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n if (!this.shortcutsSettingEntity) {\n const engine = UserInfoEngine.Instance;\n const setting = engine.UserSettings.find(s => s.Setting === SHORTCUTS_SETTINGS_KEY);\n\n if (setting) {\n this.shortcutsSettingEntity = setting;\n } else {\n this.shortcutsSettingEntity = await this.metadata.GetEntityObject<MJUserSettingEntity>('MJ: User Settings');\n this.shortcutsSettingEntity.UserID = userId;\n this.shortcutsSettingEntity.Setting = SHORTCUTS_SETTINGS_KEY;\n }\n }\n\n this.shortcutsSettingEntity.Value = this.ShowShortcuts ? 'true' : 'false';\n await this.shortcutsSettingEntity.Save();\n } catch (error) {\n console.warn('Failed to save shortcuts setting:', error);\n }\n }\n\n /** @deprecated Use {@link ToggleShortcuts}. */\n async toggleShortcuts(): Promise<void> {\n return this.ToggleShortcuts();\n }\n\n // ===========================\n // Analytics Calculations\n // ===========================\n\n GetPassedCount(): number {\n return this.TestRuns.filter(r => r.Status === 'Passed').length;\n }\n\n /** @deprecated Use {@link GetPassedCount}. */\n getPassedCount(): number {\n return this.GetPassedCount();\n }\n\n GetFailedCount(): number {\n return this.TestRuns.filter(r => r.Status === 'Failed' || r.Status === 'Error').length;\n }\n\n /** @deprecated Use {@link GetFailedCount}. */\n getFailedCount(): number {\n return this.GetFailedCount();\n }\n\n GetPassedPercent(): number {\n if (this.TestRuns.length === 0) return 0;\n return (this.GetPassedCount() / this.TestRuns.length) * 100;\n }\n\n /** @deprecated Use {@link GetPassedPercent}. */\n getPassedPercent(): number {\n return this.GetPassedPercent();\n }\n\n GetFailedPercent(): number {\n if (this.TestRuns.length === 0) return 0;\n return (this.GetFailedCount() / this.TestRuns.length) * 100;\n }\n\n /** @deprecated Use {@link GetFailedPercent}. */\n getFailedPercent(): number {\n return this.GetFailedPercent();\n }\n\n GetAverageScore(): number {\n const runsWithScore = this.TestRuns.filter(r => r.Score != null);\n if (runsWithScore.length === 0) return 0;\n const sum = runsWithScore.reduce((acc, r) => acc + (r.Score || 0), 0);\n return sum / runsWithScore.length;\n }\n\n /** @deprecated Use {@link GetAverageScore}. */\n getAverageScore(): number {\n return this.GetAverageScore();\n }\n\n GetAverageDuration(): number {\n const runsWithDuration = this.TestRuns.filter(r => r.DurationSeconds != null);\n if (runsWithDuration.length === 0) return 0;\n const sum = runsWithDuration.reduce((acc, r) => acc + (r.DurationSeconds || 0), 0);\n return sum / runsWithDuration.length;\n }\n\n /** @deprecated Use {@link GetAverageDuration}. */\n getAverageDuration(): number {\n return this.GetAverageDuration();\n }\n\n GetTotalCost(): number {\n return this.TestRuns.reduce((acc, r) => acc + (r.CostUSD || 0), 0);\n }\n\n /** @deprecated Use {@link GetTotalCost}. */\n getTotalCost(): number {\n return this.GetTotalCost();\n }\n\n // ===========================\n // Export\n // ===========================\n\n ExportToCSV(): void {\n const headers = ['Test Name', 'Status', 'Score', 'Duration (s)', 'Cost (USD)', 'Started At', 'Tags'];\n const rows = this.TestRuns.map(run => [\n run.Test || '',\n run.Status || '',\n run.Score?.toFixed(4) || '',\n run.DurationSeconds?.toFixed(2) || '',\n run.CostUSD?.toFixed(6) || '',\n run.StartedAt ? new Date(run.StartedAt).toISOString() : '',\n this.GetRunTags(run).join('; ')\n ]);\n\n const csvContent = [headers, ...rows]\n .map(row => row.map(cell => `\"${cell}\"`).join(','))\n .join('\\n');\n\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = `test-suite-run-${this.record.ID.substring(0, 8)}-results.csv`;\n link.click();\n URL.revokeObjectURL(link.href);\n\n SharedService.Instance.CreateSimpleNotification('Export complete', 'success', 2000);\n }\n\n /** @deprecated Use {@link ExportToCSV}. */\n exportToCSV(): void {\n return this.ExportToCSV();\n }\n}\n","<div class=\"test-suite-run-form\">\n <!-- Header Section -->\n <div class=\"suite-run-header\">\n <!-- Breadcrumb Navigation -->\n <nav class=\"breadcrumb\" aria-label=\"Breadcrumb\">\n <ol>\n <li>\n <a href=\"javascript:void(0)\" (click)=\"navigateToTestingDashboard()\">\n <i class=\"fas fa-vial\"></i>\n <span class=\"breadcrumb-text\">Testing</span>\n </a>\n </li>\n @if (testSuite) {\n <li>\n <i class=\"fas fa-chevron-right separator\"></i>\n <a href=\"javascript:void(0)\" (click)=\"openTestSuite()\">\n <i class=\"fas fa-layer-group\"></i>\n <span class=\"breadcrumb-text\">{{ testSuite.Name }}</span>\n </a>\n </li>\n }\n <li class=\"current\">\n <i class=\"fas fa-chevron-right separator\"></i>\n <span>Run #{{ record.ID.substring(0, 8) }}</span>\n </li>\n </ol>\n </nav>\n\n <!-- Header Content -->\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"suite-run-icon\" [style.background-color]=\"getStatusColor()\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon()\"></i>\n </div>\n <div class=\"suite-run-info\">\n <h1>Suite Run</h1>\n <div class=\"suite-run-meta\">\n <span class=\"status-badge\" [ngClass]=\"getStatusClass()\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon()\"></i>\n {{ record.Status }}\n </span>\n @if (record.Environment) {\n <span class=\"meta-tag environment\">\n <i class=\"fas fa-server\"></i>\n {{ record.Environment }}\n </span>\n }\n @if (record.TriggerType) {\n <span class=\"meta-tag trigger\">\n <i class=\"fas fa-bolt\"></i>\n {{ record.TriggerType }}\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-actions\">\n <!-- Evaluation Mode Toggle -->\n <app-evaluation-mode-toggle></app-evaluation-mode-toggle>\n @if (record.SuiteID) {\n <button mjButton (click)=\"reRunSuite()\" variant=\"primary\">\n <i class=\"fas fa-play\"></i> Re-run Suite\n </button>\n }\n <button mjButton (click)=\"refresh()\" [disabled]=\"isRefreshing\">\n <i class=\"fas\" [ngClass]=\"isRefreshing ? 'fa-sync fa-spin' : 'fa-sync'\"></i>\n {{ isRefreshing ? 'Refreshing...' : 'Refresh' }}\n </button>\n </div>\n </div>\n\n <!-- Metrics Bar -->\n <div class=\"metrics-bar\">\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-clock\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ calculateDuration() }}</div>\n <div class=\"metric-label\">Duration</div>\n </div>\n </div>\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-percentage\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ getPassRate().toFixed(1) }}%</div>\n <div class=\"metric-label\">Pass Rate</div>\n </div>\n </div>\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-dollar-sign\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ formatCost(record.TotalCostUSD) }}</div>\n <div class=\"metric-label\">Total Cost</div>\n </div>\n </div>\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-calendar\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ getRelativeTime(record.StartedAt) }}</div>\n <div class=\"metric-label\">Started</div>\n </div>\n </div>\n </div>\n\n <!-- Results Summary -->\n <div class=\"results-summary\">\n <div class=\"result-item passed\">\n <div class=\"result-icon\">\n <i class=\"fas fa-check-circle\"></i>\n </div>\n <div class=\"result-content\">\n <span class=\"result-count\">{{ record.PassedTests || 0 }}</span>\n <span class=\"result-label\">Passed</span>\n </div>\n </div>\n <div class=\"result-item failed\">\n <div class=\"result-icon\">\n <i class=\"fas fa-times-circle\"></i>\n </div>\n <div class=\"result-content\">\n <span class=\"result-count\">{{ record.FailedTests || 0 }}</span>\n <span class=\"result-label\">Failed</span>\n </div>\n </div>\n <div class=\"result-item error\">\n <div class=\"result-icon\">\n <i class=\"fas fa-exclamation-circle\"></i>\n </div>\n <div class=\"result-content\">\n <span class=\"result-count\">{{ record.ErrorTests || 0 }}</span>\n <span class=\"result-label\">Errors</span>\n </div>\n </div>\n <div class=\"result-item skipped\">\n <div class=\"result-icon\">\n <i class=\"fas fa-forward\"></i>\n </div>\n <div class=\"result-content\">\n <span class=\"result-count\">{{ record.SkippedTests || 0 }}</span>\n <span class=\"result-label\">Skipped</span>\n </div>\n </div>\n <div class=\"result-item total\">\n <div class=\"result-icon\">\n <i class=\"fas fa-list\"></i>\n </div>\n <div class=\"result-content\">\n <span class=\"result-count\">{{ record.TotalTests || 0 }}</span>\n <span class=\"result-label\">Total</span>\n </div>\n </div>\n </div>\n\n <!-- Tags Section - Sleek inline design -->\n @if (!editingTags) {\n <div class=\"tags-bar\">\n <div class=\"tags-bar-content\">\n <span class=\"tags-bar-label\"><i class=\"fas fa-tags\"></i></span>\n @if (tags.length > 0) {\n <div class=\"tags-bar-chips\">\n @for (tag of tags; track tag) {\n <span class=\"tag-inline\">{{ tag }}</span>\n }\n </div>\n }\n @if (tags.length === 0) {\n <span class=\"tags-bar-empty\">No tags</span>\n }\n <button class=\"tags-bar-edit\" (click)=\"startEditingTags()\" title=\"Edit tags\">\n <i class=\"fas fa-plus\"></i> Add\n </button>\n </div>\n </div>\n }\n\n <!-- Tags Editor - Expanded when editing -->\n @if (editingTags) {\n <div class=\"tags-editor-panel\">\n <div class=\"tags-editor-header\">\n <span class=\"tags-editor-title\"><i class=\"fas fa-tags\"></i> Edit Tags</span>\n </div>\n <div class=\"tags-editor-body\">\n <div class=\"tags-editor-chips\">\n @for (tag of tags; track tag) {\n <span class=\"tag-editable\">\n {{ tag }}\n <button class=\"tag-remove-btn\" (click)=\"removeTag(tag)\" title=\"Remove tag\">\n <i class=\"fas fa-times\"></i>\n </button>\n </span>\n }\n @if (tags.length === 0) {\n <span class=\"tags-empty-hint\">No tags yet</span>\n }\n </div>\n <div class=\"tags-editor-input\">\n <input type=\"text\"\n [(ngModel)]=\"newTag\"\n placeholder=\"Type a tag and press Enter...\"\n (keyup.enter)=\"addTag()\"\n class=\"tag-text-input\" />\n <button mjButton (click)=\"addTag()\" [disabled]=\"!newTag.trim()\" variant=\"flat\">\n <i class=\"fas fa-plus\"></i>\n </button>\n </div>\n </div>\n <div class=\"tags-editor-footer\">\n <button mjButton (click)=\"saveTags()\" variant=\"primary\" [disabled]=\"savingTags\">\n @if (savingTags) {\n <i class=\"fas fa-spinner fa-spin\"></i>\n }\n {{ savingTags ? 'Saving...' : 'Save' }}\n </button>\n <button mjButton (click)=\"cancelEditingTags()\" variant=\"flat\">Cancel</button>\n </div>\n </div>\n }\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs-container\">\n <!-- Phone: the strip becomes one button that opens the Sections sheet -->\n <mj-section-picker class=\"phone-section-picker\"\n [Items]=\"SectionPickerItems\"\n [ActiveKey]=\"ActiveTab\"\n (ActiveKeyChange)=\"OnSectionPicked($event)\"></mj-section-picker>\n <div class=\"tabs\" role=\"tablist\">\n <button class=\"tab\"\n [class.active]=\"activeTab === 'overview'\"\n (click)=\"changeTab('overview')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'overview'\">\n <i class=\"fas fa-th-large\"></i> Overview\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 'runs'\"\n (click)=\"changeTab('runs')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'runs'\">\n <i class=\"fas fa-list\"></i> Test Runs\n @if (testRunsLoaded) {\n <span class=\"tab-badge\">{{ testRuns.length }}</span>\n }\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 'details'\"\n (click)=\"changeTab('details')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'details'\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 'analytics'\"\n (click)=\"changeTab('analytics')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'analytics'\"\n title=\"Press 4\">\n <i class=\"fas fa-chart-bar\"></i> Analytics\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 'execution'\"\n (click)=\"changeTab('execution')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'execution'\"\n title=\"Press 5\">\n <i class=\"fas fa-microchip\"></i>\n <span>Execution</span>\n </button>\n </div>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tab-content\">\n <!-- Overview Tab -->\n @if (activeTab === 'overview') {\n <div class=\"overview-tab\">\n <!-- Result Hero -->\n <div class=\"result-hero\"\n [class.passed]=\"record.Status === 'Completed' && getPassRate() >= 90\"\n [class.failed]=\"record.Status === 'Failed' || getPassRate() < 50\"\n [class.running]=\"record.Status === 'Running'\"\n [class.pending]=\"record.Status === 'Pending'\">\n <div class=\"result-hero-icon\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon()\"></i>\n </div>\n <div class=\"result-hero-text\">\n <h2>SUITE {{ record.Status.toUpperCase() || 'UNKNOWN' }}</h2>\n <div class=\"result-hero-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{ getPassRate().toFixed(1) }}%</span>\n <span class=\"stat-label\">Pass Rate</span>\n </div>\n <div class=\"stat-divider\"></div>\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{ record.PassedTests || 0 }} / {{ record.TotalTests || 0 }}</span>\n <span class=\"stat-label\">Tests Passed</span>\n </div>\n </div>\n </div>\n </div>\n <!-- Evaluation Metrics Summary -->\n @if (evaluationMetrics && feedbacksLoaded) {\n <div class=\"evaluation-summary\">\n <div class=\"eval-summary-grid\">\n <!-- Human Feedback Card -->\n @if (evalPreferences.showHuman) {\n <div class=\"eval-summary-card\">\n <div class=\"eval-card-header\">\n <i class=\"fa-solid fa-user\"></i>\n <span>Human Feedback</span>\n </div>\n <div class=\"eval-card-body\">\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Reviewed</span>\n <span class=\"eval-stat-value\">{{ evaluationMetrics.humanReviewedCount }} / {{ evaluationMetrics.totalRuns }}</span>\n </div>\n @if (evaluationMetrics.humanReviewedCount > 0) {\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Avg Rating</span>\n <span class=\"eval-stat-value\">{{ evaluationMetrics.humanAvgRating.toFixed(1) }}/10</span>\n </div>\n }\n @if (evaluationMetrics.humanReviewedCount > 0) {\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Correct</span>\n <span class=\"eval-stat-value correct\">{{ evaluationMetrics.humanCorrectCount }}</span>\n @if (evaluationMetrics.humanIncorrectCount > 0) {\n <span class=\"eval-stat-value incorrect\">{{ evaluationMetrics.humanIncorrectCount }} incorrect</span>\n }\n </div>\n }\n </div>\n @if (evaluationMetrics.humanPendingCount > 0) {\n <div class=\"eval-card-footer\">\n <span class=\"pending-badge\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ evaluationMetrics.humanPendingCount }} need review\n </span>\n </div>\n }\n </div>\n }\n <!-- Auto Score Card -->\n @if (evalPreferences.showAuto) {\n <div class=\"eval-summary-card\">\n <div class=\"eval-card-header\">\n <i class=\"fa-solid fa-robot\"></i>\n <span>Auto Evaluation</span>\n </div>\n <div class=\"eval-card-body\">\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Evaluated</span>\n <span class=\"eval-stat-value\">{{ evaluationMetrics.autoEvaluatedCount }} / {{ evaluationMetrics.totalRuns }}</span>\n </div>\n @if (evaluationMetrics.autoEvaluatedCount > 0) {\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Avg Score</span>\n <span class=\"eval-stat-value\">{{ (evaluationMetrics.autoAvgScore * 100).toFixed(0) }}%</span>\n </div>\n }\n @if (evaluationMetrics.autoEvaluatedCount > 0) {\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Pass Rate</span>\n <span class=\"eval-stat-value\">{{ evaluationMetrics.autoPassRate.toFixed(0) }}%</span>\n </div>\n }\n </div>\n </div>\n }\n <!-- Execution Card -->\n @if (evalPreferences.showExecution) {\n <div class=\"eval-summary-card\">\n <div class=\"eval-card-header\">\n <i class=\"fa-solid fa-circle-check\"></i>\n <span>Execution</span>\n </div>\n <div class=\"eval-card-body\">\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Completed</span>\n <span class=\"eval-stat-value\">{{ evaluationMetrics.execCompletedCount }} / {{ evaluationMetrics.totalRuns }}</span>\n </div>\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Success Rate</span>\n <span class=\"eval-stat-value\">{{ evaluationMetrics.execSuccessRate.toFixed(0) }}%</span>\n </div>\n @if (evaluationMetrics.execErrorCount > 0 || evaluationMetrics.execTimeoutCount > 0) {\n <div class=\"eval-stat-row\">\n <span class=\"eval-stat-label\">Issues</span>\n @if (evaluationMetrics.execErrorCount > 0) {\n <span class=\"eval-stat-value error\">{{ evaluationMetrics.execErrorCount }} errors</span>\n }\n @if (evaluationMetrics.execTimeoutCount > 0) {\n <span class=\"eval-stat-value timeout\">{{ evaluationMetrics.execTimeoutCount }} timeouts</span>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Needs Review Section -->\n @if (evalPreferences.showHuman && needsReviewItems.length > 0 && feedbacksLoaded) {\n <div class=\"needs-review-section\">\n <div class=\"needs-review-header\">\n <h3><i class=\"fa-solid fa-user-clock\"></i> Needs Review</h3>\n <span class=\"review-count\">{{ needsReviewItems.length }} items</span>\n </div>\n <div class=\"needs-review-list\">\n @for (item of needsReviewItems.slice(0, 5); track item) {\n <div class=\"review-item\"\n [class.high-priority]=\"item.priority === 'high'\"\n [class.medium-priority]=\"item.priority === 'medium'\"\n (click)=\"toggleRunExpanded(item.run.id)\">\n <div class=\"review-item-icon\">\n @if (item.priority === 'high') {\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n }\n @if (item.priority === 'medium') {\n <i class=\"fa-solid fa-circle-dot\"></i>\n }\n @if (item.priority === 'low') {\n <i class=\"fa-solid fa-clock\"></i>\n }\n </div>\n <div class=\"review-item-content\">\n <span class=\"review-item-name\">{{ item.run.testName }}</span>\n <span class=\"review-item-reason\">{{ item.reason }}</span>\n </div>\n <div class=\"review-item-action\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </div>\n </div>\n }\n @if (needsReviewItems.length > 5) {\n <div class=\"review-more\">\n <button mjButton variant=\"flat\" (click)=\"changeTab('runs')\">\n View all {{ needsReviewItems.length }} items\n </button>\n </div>\n }\n </div>\n </div>\n }\n <!-- Progress Ring (when running) -->\n @if (record.Status === 'Running' || record.Status === 'Pending') {\n <div class=\"progress-section\">\n <div class=\"progress-info\">\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n <span>Suite execution in progress...</span>\n </div>\n <div class=\"auto-refresh-notice\">\n <i class=\"fas fa-sync\"></i>\n Auto-refreshing every 5 seconds\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Test Runs Tab -->\n @if (activeTab === 'runs') {\n <div class=\"runs-tab\">\n <!-- Toolbar -->\n @if (testRunsLoaded && testRuns.length > 0) {\n <div class=\"runs-toolbar\">\n <div class=\"run-filters\">\n <button class=\"filter-btn\"\n [class.active]=\"runStatusFilter === null\"\n (click)=\"setRunStatusFilter(null)\">\n All ({{ testRuns.length }})\n </button>\n @if (getRunCountByStatus('Passed') > 0) {\n <button class=\"filter-btn passed\"\n [class.active]=\"runStatusFilter === 'Passed'\"\n (click)=\"setRunStatusFilter('Passed')\"\n >\n <i class=\"fas fa-check\"></i> Passed ({{ getRunCountByStatus('Passed') }})\n </button>\n }\n @if (getRunCountByStatus('Failed') > 0) {\n <button class=\"filter-btn failed\"\n [class.active]=\"runStatusFilter === 'Failed'\"\n (click)=\"setRunStatusFilter('Failed')\"\n >\n <i class=\"fas fa-times\"></i> Failed ({{ getRunCountByStatus('Failed') }})\n </button>\n }\n @if (getRunCountByStatus('Error') > 0) {\n <button class=\"filter-btn error\"\n [class.active]=\"runStatusFilter === 'Error'\"\n (click)=\"setRunStatusFilter('Error')\"\n >\n <i class=\"fas fa-exclamation\"></i> Error ({{ getRunCountByStatus('Error') }})\n </button>\n }\n </div>\n <div class=\"runs-actions\">\n <button mjButton (click)=\"exportToCSV()\">\n <i class=\"fas fa-download\"></i> Export CSV\n </button>\n </div>\n </div>\n }\n <!-- Loading State -->\n @if (loadingTestRuns) {\n <div class=\"loading-state\">\n <div class=\"skeleton-list\">\n @for (i of [1,2,3,4,5]; track i) {\n <div class=\"skeleton-card\">\n <div class=\"skeleton-sequence\"></div>\n <div class=\"skeleton-icon\"></div>\n <div class=\"skeleton-content\">\n <div class=\"skeleton-line wide\"></div>\n <div class=\"skeleton-line narrow\"></div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Test Runs List -->\n @if (!loadingTestRuns && testRuns.length > 0) {\n <div class=\"test-runs-list\">\n @for (run of getFilteredTestRuns(); track run) {\n <div class=\"test-run-card\">\n <div class=\"test-run-item\" (click)=\"toggleRunExpanded(run.ID)\">\n <div class=\"run-sequence\">{{ run.Sequence || '-' }}</div>\n <div class=\"run-icon\" [style.background-color]=\"getRunStatusColor(run.Status)\">\n <i class=\"fas\" [ngClass]=\"getRunStatusIcon(run.Status)\"></i>\n </div>\n <div class=\"run-content\">\n <div class=\"run-header-row\">\n <div class=\"run-name\">{{ run.Test }}</div>\n <!-- Evaluation Badge -->\n <app-evaluation-badge\n [executionStatus]=\"run.Status\"\n [originalStatus]=\"run.Status\"\n [autoScore]=\"run.Score\"\n [humanRating]=\"getFeedbackRating(run.ID) || null\"\n [humanIsCorrect]=\"getHumanIsCorrect(run.ID)\"\n [hasHumanFeedback]=\"hasFeedback(run.ID)\"\n [preferences]=\"evalPreferences\"\n [mode]=\"'compact'\">\n </app-evaluation-badge>\n </div>\n <div class=\"run-meta\">\n @if (run.DurationSeconds) {\n <span class=\"run-duration\">\n <i class=\"fas fa-clock\"></i> {{ run.DurationSeconds.toFixed(1) }}s\n </span>\n }\n @if (run.CostUSD) {\n <span class=\"run-cost\">\n <i class=\"fas fa-dollar-sign\"></i> {{ run.CostUSD.toFixed(6) }}\n </span>\n }\n @if (run.TargetLogEntityID && run.TargetLogID) {\n <mj-entity-link-pill\n [entityName]=\"run.TargetLogEntity\"\n [recordId]=\"run.TargetLogID\">\n </mj-entity-link-pill>\n }\n </div>\n @if (getRunTags(run).length > 0) {\n <div class=\"run-tags\">\n @for (tag of getRunTags(run); track tag) {\n <span class=\"tag-chip\">{{ tag }}</span>\n }\n </div>\n }\n </div>\n <div class=\"run-expand\">\n <i class=\"fas\" [class.fa-chevron-down]=\"expandedRunId !== run.ID\" [class.fa-chevron-up]=\"expandedRunId === run.ID\"></i>\n </div>\n </div>\n <!-- Expanded Inline Feedback -->\n @if (expandedRunId === run.ID) {\n <div class=\"inline-feedback\">\n <div class=\"feedback-divider\"></div>\n <div class=\"feedback-section\">\n <div class=\"feedback-label\">Quick Feedback</div>\n <div class=\"inline-rating\">\n <div class=\"rating-numbers\">\n @for (num of [1,2,3,4,5,6,7,8,9,10]; track num) {\n <button\n type=\"button\"\n class=\"rating-btn\"\n [class.selected]=\"num === inlineRating\"\n [class.hover]=\"num === inlineHoverRating\"\n [class.low]=\"num <= 3\"\n [class.mid]=\"num >= 4 && num <= 6\"\n [class.high]=\"num >= 7\"\n (click)=\"setInlineRating(num); $event.stopPropagation()\"\n (mouseenter)=\"inlineHoverRating = num\"\n (mouseleave)=\"inlineHoverRating = 0\">\n {{ num }}\n </button>\n }\n </div>\n @if (inlineRating > 0) {\n <div class=\"rating-info\">\n <span class=\"rating-value\">{{ inlineRating }}/10</span>\n <span class=\"rating-label-text\">{{ getInlineRatingLabel() }}</span>\n </div>\n }\n </div>\n <div class=\"correctness-row\">\n <span class=\"correctness-label\">Was it correct?</span>\n <div class=\"correctness-options\">\n <label class=\"radio-opt\" (click)=\"$event.stopPropagation()\">\n <input type=\"radio\" name=\"correct-{{run.ID}}\" [value]=\"true\" [(ngModel)]=\"inlineIsCorrect\">\n <span>Yes</span>\n </label>\n <label class=\"radio-opt\" (click)=\"$event.stopPropagation()\">\n <input type=\"radio\" name=\"correct-{{run.ID}}\" [value]=\"false\" [(ngModel)]=\"inlineIsCorrect\">\n <span>No</span>\n </label>\n <label class=\"radio-opt\" (click)=\"$event.stopPropagation()\">\n <input type=\"radio\" name=\"correct-{{run.ID}}\" [value]=\"null\" [(ngModel)]=\"inlineIsCorrect\">\n <span>Not Sure</span>\n </label>\n </div>\n </div>\n <div class=\"comments-row\" (click)=\"$event.stopPropagation()\">\n <textarea\n class=\"feedback-textarea\"\n [(ngModel)]=\"inlineComments\"\n placeholder=\"Add comments or corrections...\"\n rows=\"3\"></textarea>\n </div>\n <div class=\"feedback-actions\" (click)=\"$event.stopPropagation()\">\n <button mjButton (click)=\"openTestRun(run.ID)\">\n <i class=\"fas fa-external-link-alt\"></i> View Full Details\n </button>\n <button mjButton\n variant=\"primary\"\n (click)=\"saveInlineFeedback()\"\n [disabled]=\"!canSubmitInlineFeedback() || savingInlineFeedback\">\n <i class=\"fas\" [ngClass]=\"savingInlineFeedback ? 'fa-spinner fa-spin' : 'fa-save'\"></i>\n {{ savingInlineFeedback ? 'Saving...' : (hasFeedback(run.ID) ? 'Update' : 'Save') }}\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- Empty State -->\n @if (testRunsLoaded && !loadingTestRuns && testRuns.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-inbox\"\n Title=\"No Test Runs Found\"\n Message=\"No test runs have been recorded for this suite execution.\" />\n }\n <!-- Filtered Empty -->\n @if (testRunsLoaded && !loadingTestRuns && testRuns.length > 0 && getFilteredTestRuns().length === 0) {\n <mj-empty-state\n Variant=\"no-results\"\n Icon=\"fa-solid fa-filter\"\n Title=\"No Matching Runs\"\n Message=\"No test runs match the current filter.\"\n ActionText=\"Clear Filter\"\n ActionVariant=\"outline\"\n (Action)=\"setRunStatusFilter(null)\" />\n }\n </div>\n }\n\n <!-- Details Tab -->\n @if (activeTab === 'details') {\n <div class=\"details-tab\">\n <div class=\"details-card\">\n <h3><i class=\"fas fa-info-circle\"></i> Run Information</h3>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <div class=\"detail-label\">Run ID</div>\n <div class=\"detail-value monospace\">{{ record.ID }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Test Suite</div>\n <div class=\"detail-value\">\n @if (testSuite) {\n <a href=\"javascript:void(0)\" (click)=\"openTestSuite()\">{{ testSuite.Name }}</a>\n }\n @if (!testSuite) {\n <span>Loading...</span>\n }\n </div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Status</div>\n <div class=\"detail-value\">\n <span class=\"status-inline\" [ngClass]=\"getStatusClass()\">{{ record.Status }}</span>\n </div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Run By</div>\n <div class=\"detail-value\">{{ record.RunByUser || 'N/A' }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Started At</div>\n <div class=\"detail-value\">{{ record.StartedAt | date:'medium' }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Completed At</div>\n <div class=\"detail-value\">{{ record.CompletedAt | date:'medium' }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Environment</div>\n <div class=\"detail-value\">{{ record.Environment || 'N/A' }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Trigger Type</div>\n <div class=\"detail-value\">{{ record.TriggerType || 'N/A' }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Git Commit</div>\n <div class=\"detail-value monospace\">{{ record.GitCommit || 'N/A' }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Agent Version</div>\n <div class=\"detail-value\">{{ record.AgentVersion || 'N/A' }}</div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Analytics Tab -->\n @if (activeTab === 'analytics') {\n <div class=\"analytics-tab\">\n <!-- Loading State -->\n @if (loadingTestRuns) {\n <div class=\"analytics-loading\">\n <i class=\"fas fa-spinner fa-spin\"></i>\n <span>Loading test results...</span>\n </div>\n }\n <!-- Summary Statistics - Moved to top for better overview -->\n @if (!loadingTestRuns && testRuns.length > 0) {\n <div class=\"analytics-section\">\n <h3><i class=\"fas fa-chart-pie\"></i> Summary Statistics</h3>\n <div class=\"stats-grid\">\n <div class=\"stat-card\">\n <div class=\"stat-icon passed\"><i class=\"fas fa-check-circle\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ getPassedCount() }}</div>\n <div class=\"stat-label\">Passed</div>\n <div class=\"stat-percent\">{{ getPassedPercent().toFixed(1) }}%</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon failed\"><i class=\"fas fa-times-circle\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ getFailedCount() }}</div>\n <div class=\"stat-label\">Failed</div>\n <div class=\"stat-percent\">{{ getFailedPercent().toFixed(1) }}%</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon score\"><i class=\"fas fa-star\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ (getAverageScore() * 100).toFixed(1) }}%</div>\n <div class=\"stat-label\">Avg Score</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon duration\"><i class=\"fas fa-clock\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ getAverageDuration().toFixed(1) }}s</div>\n <div class=\"stat-label\">Avg Duration</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon cost\"><i class=\"fas fa-dollar-sign\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">${{ getTotalCost().toFixed(4) }}</div>\n <div class=\"stat-label\">Total Cost</div>\n </div>\n </div>\n </div>\n </div>\n }\n <!-- Test Results Table -->\n @if (!loadingTestRuns && testRuns.length > 0) {\n <div class=\"analytics-section\">\n <div class=\"analytics-header\">\n <h3><i class=\"fas fa-table\"></i> Test Results</h3>\n <div class=\"analytics-legend\">\n <span class=\"legend-item passed\"><i class=\"fas fa-check-circle\"></i> Passed</span>\n <span class=\"legend-item failed\"><i class=\"fas fa-times-circle\"></i> Failed</span>\n <span class=\"legend-item error\"><i class=\"fas fa-exclamation-circle\"></i> Error</span>\n <span class=\"legend-item skipped\"><i class=\"fas fa-forward\"></i> Skipped</span>\n </div>\n </div>\n <!-- Results Table -->\n <div class=\"results-table-wrapper\">\n <table class=\"results-table\">\n <thead>\n <tr>\n <th class=\"seq-col\">#</th>\n <th class=\"name-col\">Test Name</th>\n @if (evalPreferences.showExecution) {\n <th class=\"status-col\">Status</th>\n }\n @if (evalPreferences.showAuto) {\n <th class=\"score-col\">Auto Score</th>\n }\n @if (evalPreferences.showHuman) {\n <th class=\"feedback-col\">Human Score</th>\n }\n <th class=\"duration-col\">Duration</th>\n <th class=\"cost-col\">Cost</th>\n </tr>\n </thead>\n <tbody>\n @for (run of testRuns; track run; let i = $index) {\n <tr\n class=\"result-row\"\n [class.row-passed]=\"run.Status === 'Passed'\"\n [class.row-failed]=\"run.Status === 'Failed'\"\n [class.row-error]=\"run.Status === 'Error'\"\n [class.row-skipped]=\"run.Status === 'Skipped'\"\n (click)=\"openTestRun(run.ID)\">\n <td class=\"seq-col\">{{ i + 1 }}</td>\n <td class=\"name-col\">\n <div class=\"test-name-wrapper\">\n <span class=\"test-name\">{{ run.Test || 'Unknown Test' }}</span>\n @if (getRunTags(run).length > 0) {\n <div class=\"test-tags\">\n @for (tag of getRunTags(run).slice(0, 2); track tag) {\n <span class=\"tag-mini\">{{ tag }}</span>\n }\n </div>\n }\n </div>\n </td>\n @if (evalPreferences.showExecution) {\n <td class=\"status-col\">\n <span class=\"status-badge\" [ngClass]=\"'status-' + run.Status.toLowerCase()\">\n <i class=\"fas\"\n [class.fa-check-circle]=\"run.Status === 'Passed'\"\n [class.fa-times-circle]=\"run.Status === 'Failed'\"\n [class.fa-exclamation-circle]=\"run.Status === 'Error'\"\n [class.fa-forward]=\"run.Status === 'Skipped'\"\n [class.fa-clock]=\"run.Status === 'Pending'\"\n [class.fa-spinner]=\"run.Status === 'Running'\"\n [class.fa-spin]=\"run.Status === 'Running'\"></i>\n {{ run.Status }}\n </span>\n </td>\n }\n @if (evalPreferences.showAuto) {\n <td class=\"score-col\">\n @if (run.Score != null) {\n <div class=\"score-display\">\n <div class=\"score-bar-mini\">\n <div class=\"score-fill\"\n [style.width.%]=\"run.Score * 100\"\n [class.high]=\"run.Score >= 0.8\"\n [class.medium]=\"run.Score >= 0.5 && run.Score < 0.8\"\n [class.low]=\"run.Score < 0.5\"></div>\n </div>\n <span class=\"score-text\">{{ (run.Score * 100).toFixed(0) }}%</span>\n </div>\n }\n @if (run.Score == null) {\n <span class=\"na-value\">—</span>\n }\n </td>\n }\n @if (evalPreferences.showHuman) {\n <td class=\"feedback-col\">\n @if (hasFeedback(run.ID)) {\n <div class=\"feedback-display\">\n <span class=\"feedback-rating\" [class.low]=\"getFeedbackRating(run.ID) <= 3\" [class.mid]=\"getFeedbackRating(run.ID) >= 4 && getFeedbackRating(run.ID) <= 6\" [class.high]=\"getFeedbackRating(run.ID) >= 7\">\n {{ getFeedbackRating(run.ID) }}/10\n </span>\n @if (getHumanIsCorrect(run.ID) !== null) {\n <span class=\"feedback-correctness\">\n <i class=\"fas\" [class.fa-check]=\"getHumanIsCorrect(run.ID) === true\" [class.fa-times]=\"getHumanIsCorrect(run.ID) === false\" [class.correct]=\"getHumanIsCorrect(run.ID) === true\" [class.incorrect]=\"getHumanIsCorrect(run.ID) === false\"></i>\n </span>\n }\n </div>\n }\n @if (!hasFeedback(run.ID)) {\n <span class=\"na-value needs-review\">\n <i class=\"fas fa-user-clock\"></i>\n </span>\n }\n </td>\n }\n <td class=\"duration-col\">\n @if (run.DurationSeconds) {\n <span>{{ run.DurationSeconds.toFixed(1) }}s</span>\n }\n @if (!run.DurationSeconds) {\n <span class=\"na-value\">—</span>\n }\n </td>\n <td class=\"cost-col\">\n @if (run.CostUSD) {\n <span>${{ run.CostUSD.toFixed(4) }}</span>\n }\n @if (!run.CostUSD) {\n <span class=\"na-value\">—</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n <!-- Empty State -->\n @if (!loadingTestRuns && testRunsLoaded && testRuns.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-chart-bar\"\n Title=\"No Test Results Yet\"\n Message=\"Test runs will appear here once the suite execution completes.\" />\n }\n </div>\n }\n\n <!-- Execution Tab -->\n @if (activeTab === 'execution') {\n <div class=\"execution-tab\">\n <mj-execution-context\n [machineName]=\"record.MachineName\"\n [machineId]=\"record.MachineID\"\n [runByUserName]=\"record.RunByUserName\"\n [runByUserEmail]=\"record.RunByUserEmail\"\n [runContextDetailsJson]=\"record.RunContextDetails\">\n </mj-execution-context>\n </div>\n }\n </div>\n\n <!-- Keyboard Shortcuts Toggle Button -->\n <button class=\"shortcuts-toggle\" (click)=\"toggleShortcuts()\" [title]=\"showShortcuts ? 'Hide keyboard shortcuts' : 'Show keyboard shortcuts'\">\n <i class=\"fas fa-keyboard\"></i>\n </button>\n\n <!-- Keyboard Shortcuts Hint (Desktop Only) -->\n @if (showShortcuts) {\n <div class=\"keyboard-shortcuts\">\n <div class=\"shortcuts-header\">\n <i class=\"fas fa-keyboard\"></i>\n Shortcuts\n <button class=\"shortcuts-close\" (click)=\"toggleShortcuts()\" title=\"Hide shortcuts\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n <div class=\"shortcut-list\">\n <div class=\"shortcut-item\">\n <span>Refresh</span>\n <span class=\"shortcut-keys\"><kbd>Cmd</kbd><kbd>R</kbd></span>\n </div>\n <div class=\"shortcut-item\">\n <span>Re-run Suite</span>\n <span class=\"shortcut-keys\"><kbd>Cmd</kbd><kbd>Shift</kbd><kbd>R</kbd></span>\n </div>\n <div class=\"shortcut-item\">\n <span>Switch Tabs</span>\n <span class=\"shortcut-keys\"><kbd>1</kbd>-<kbd>5</kbd></span>\n </div>\n </div>\n </div>\n }\n</div>\n"]}