@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
@@ -12,6 +12,8 @@ import { MJAIPromptRunFormComponent } from '../../generated/Entities/MJAIPromptR
12
12
  import { SharedService } from '@memberjunction/ng-shared';
13
13
  import { TestHarnessWindowManagerService } from '@memberjunction/ng-ai-test-harness';
14
14
  import { ParseJSONRecursive } from '@memberjunction/global';
15
+ import { JoinHeroSummary, RunStatusKind } from '../../shared/phone-hero';
16
+ import { PhoneSectionsState } from '../../shared/phone-sections-state';
15
17
  import * as i0 from "@angular/core";
16
18
  import * as i1 from "@angular/forms";
17
19
  import * as i2 from "@memberjunction/ng-ui-components";
@@ -31,11 +33,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_11_Templat
31
33
  i0.ɵɵadvance();
32
34
  i0.ɵɵtextInterpolate1("#", ctx_r1.record.ID.substring(0, 8));
33
35
  } }
34
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_20_Template(rf, ctx) { if (rf & 1) {
35
- i0.ɵɵelementStart(0, "div", 17)(1, "div", 14);
36
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_23_Template(rf, ctx) { if (rf & 1) {
37
+ i0.ɵɵelementStart(0, "div", 19)(1, "div", 16);
36
38
  i0.ɵɵtext(2, "Execution");
37
39
  i0.ɵɵelementEnd();
38
- i0.ɵɵelementStart(3, "div", 15);
40
+ i0.ɵɵelementStart(3, "div", 17);
39
41
  i0.ɵɵelement(4, "i");
40
42
  i0.ɵɵtext(5);
41
43
  i0.ɵɵelementEnd()();
@@ -47,28 +49,28 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_20_Templat
47
49
  i0.ɵɵadvance();
48
50
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.RunType, " ");
49
51
  } }
50
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template(rf, ctx) { if (rf & 1) {
52
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_24_Conditional_0_Template(rf, ctx) { if (rf & 1) {
51
53
  const _r3 = i0.ɵɵgetCurrentView();
52
- i0.ɵɵelementStart(0, "div", 68)(1, "div", 14);
54
+ i0.ɵɵelementStart(0, "div", 78)(1, "div", 16);
53
55
  i0.ɵɵtext(2, "Prompt");
54
56
  i0.ɵɵelementEnd();
55
- i0.ɵɵelementStart(3, "div", 70);
56
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.record.ChildPromptID)); });
57
- i0.ɵɵelement(4, "i", 71);
57
+ i0.ɵɵelementStart(3, "div", 80);
58
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_24_Conditional_0_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.record.ChildPromptID)); });
59
+ i0.ɵɵelement(4, "i", 81);
58
60
  i0.ɵɵtext(5);
59
61
  i0.ɵɵelementEnd();
60
- i0.ɵɵelementStart(6, "div", 72);
61
- i0.ɵɵelement(7, "span", 73);
62
- i0.ɵɵelementStart(8, "span", 74);
62
+ i0.ɵɵelementStart(6, "div", 82);
63
+ i0.ɵɵelement(7, "span", 83);
64
+ i0.ɵɵelementStart(8, "span", 84);
63
65
  i0.ɵɵtext(9, "wrapped by");
64
66
  i0.ɵɵelementEnd();
65
- i0.ɵɵelement(10, "span", 73);
67
+ i0.ɵɵelement(10, "span", 83);
66
68
  i0.ɵɵelementEnd();
67
- i0.ɵɵelementStart(11, "div", 75);
68
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template_div_click_11_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.prompt.ID)); });
69
- i0.ɵɵelement(12, "i", 76);
69
+ i0.ɵɵelementStart(11, "div", 85);
70
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_24_Conditional_0_Template_div_click_11_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.prompt.ID)); });
71
+ i0.ɵɵelement(12, "i", 86);
70
72
  i0.ɵɵtext(13);
71
- i0.ɵɵelement(14, "i", 77);
73
+ i0.ɵɵelement(14, "i", 87);
72
74
  i0.ɵɵelementEnd()();
73
75
  } if (rf & 2) {
74
76
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -77,14 +79,14 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditi
77
79
  i0.ɵɵadvance(8);
78
80
  i0.ɵɵtextInterpolate1(" ", ctx_r1.prompt.Name, " ");
79
81
  } }
80
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_1_Template(rf, ctx) { if (rf & 1) {
82
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_24_Conditional_1_Template(rf, ctx) { if (rf & 1) {
81
83
  const _r4 = i0.ɵɵgetCurrentView();
82
- i0.ɵɵelementStart(0, "div", 69)(1, "div", 14);
84
+ i0.ɵɵelementStart(0, "div", 79)(1, "div", 16);
83
85
  i0.ɵɵtext(2, "Prompt");
84
86
  i0.ɵɵelementEnd();
85
- i0.ɵɵelementStart(3, "div", 78);
86
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_1_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.prompt.ID)); });
87
- i0.ɵɵelement(4, "i", 79);
87
+ i0.ɵɵelementStart(3, "div", 88);
88
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_24_Conditional_1_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.prompt.ID)); });
89
+ i0.ɵɵelement(4, "i", 89);
88
90
  i0.ɵɵtext(5);
89
91
  i0.ɵɵelementEnd()();
90
92
  } if (rf & 2) {
@@ -92,14 +94,14 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditi
92
94
  i0.ɵɵadvance(5);
93
95
  i0.ɵɵtextInterpolate1(" ", ctx_r1.prompt.Name, " ");
94
96
  } }
95
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Template(rf, ctx) { if (rf & 1) {
96
- i0.ɵɵconditionalCreate(0, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template, 15, 2, "div", 68)(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_1_Template, 6, 1, "div", 69);
97
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_24_Template(rf, ctx) { if (rf & 1) {
98
+ i0.ɵɵconditionalCreate(0, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_24_Conditional_0_Template, 15, 2, "div", 78)(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_24_Conditional_1_Template, 6, 1, "div", 79);
97
99
  } if (rf & 2) {
98
100
  const ctx_r1 = i0.ɵɵnextContext(2);
99
101
  i0.ɵɵconditional(ctx_r1.record.ChildPromptID ? 0 : 1);
100
102
  } }
101
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Conditional_7_Template(rf, ctx) { if (rf & 1) {
102
- i0.ɵɵelementStart(0, "span", 83);
103
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_25_Conditional_7_Template(rf, ctx) { if (rf & 1) {
104
+ i0.ɵɵelementStart(0, "span", 93);
103
105
  i0.ɵɵtext(1);
104
106
  i0.ɵɵelementEnd();
105
107
  } if (rf & 2) {
@@ -107,18 +109,18 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Conditi
107
109
  i0.ɵɵadvance();
108
110
  i0.ɵɵtextInterpolate(ctx_r1.record.Vendor);
109
111
  } }
110
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Template(rf, ctx) { if (rf & 1) {
112
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_25_Template(rf, ctx) { if (rf & 1) {
111
113
  const _r5 = i0.ɵɵgetCurrentView();
112
- i0.ɵɵelementStart(0, "div", 18)(1, "div", 14);
114
+ i0.ɵɵelementStart(0, "div", 20)(1, "div", 16);
113
115
  i0.ɵɵtext(2, "Model");
114
116
  i0.ɵɵelementEnd();
115
- i0.ɵɵelementStart(3, "div", 80);
116
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Models", ctx_r1.model.ID)); });
117
- i0.ɵɵelementStart(4, "span", 81);
118
- i0.ɵɵelement(5, "i", 82);
117
+ i0.ɵɵelementStart(3, "div", 90);
118
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_25_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Models", ctx_r1.model.ID)); });
119
+ i0.ɵɵelementStart(4, "span", 91);
120
+ i0.ɵɵelement(5, "i", 92);
119
121
  i0.ɵɵtext(6);
120
122
  i0.ɵɵelementEnd();
121
- i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Conditional_7_Template, 2, 1, "span", 83);
123
+ i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_25_Conditional_7_Template, 2, 1, "span", 93);
122
124
  i0.ɵɵelementEnd()();
123
125
  } if (rf & 2) {
124
126
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -127,22 +129,22 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Templat
127
129
  i0.ɵɵadvance();
128
130
  i0.ɵɵconditional(ctx_r1.record.Vendor ? 7 : -1);
129
131
  } }
130
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_23_Template(rf, ctx) { if (rf & 1) {
132
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_26_Template(rf, ctx) { if (rf & 1) {
131
133
  const _r6 = i0.ɵɵgetCurrentView();
132
- i0.ɵɵelementStart(0, "span", 19);
133
- i0.ɵɵelement(1, "i", 84);
134
- i0.ɵɵelementStart(2, "a", 85);
135
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_23_Template_a_click_2_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToOriginalRun()); });
134
+ i0.ɵɵelementStart(0, "span", 21);
135
+ i0.ɵɵelement(1, "i", 94);
136
+ i0.ɵɵelementStart(2, "a", 95);
137
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_26_Template_a_click_2_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToOriginalRun()); });
136
138
  i0.ɵɵtext(3, "Original Run");
137
139
  i0.ɵɵelementEnd()();
138
140
  } }
139
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_9_Template(rf, ctx) { if (rf & 1) {
140
- i0.ɵɵelementStart(0, "div", 86);
141
- i0.ɵɵelement(1, "i", 53);
142
- i0.ɵɵelementStart(2, "div", 87)(3, "div", 88);
141
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_33_Conditional_9_Template(rf, ctx) { if (rf & 1) {
142
+ i0.ɵɵelementStart(0, "div", 96);
143
+ i0.ɵɵelement(1, "i", 61);
144
+ i0.ɵɵelementStart(2, "div", 97)(3, "div", 98);
143
145
  i0.ɵɵtext(4, "Temperature");
144
146
  i0.ɵɵelementEnd();
145
- i0.ɵɵelementStart(5, "div", 89);
147
+ i0.ɵɵelementStart(5, "div", 99);
146
148
  i0.ɵɵtext(6);
147
149
  i0.ɵɵelementEnd()()();
148
150
  } if (rf & 2) {
@@ -150,13 +152,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
150
152
  i0.ɵɵadvance(6);
151
153
  i0.ɵɵtextInterpolate(ctx_r1.record.Temperature);
152
154
  } }
153
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_10_Template(rf, ctx) { if (rf & 1) {
154
- i0.ɵɵelementStart(0, "div", 86);
155
- i0.ɵɵelement(1, "i", 54);
156
- i0.ɵɵelementStart(2, "div", 87)(3, "div", 88);
155
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_33_Conditional_10_Template(rf, ctx) { if (rf & 1) {
156
+ i0.ɵɵelementStart(0, "div", 96);
157
+ i0.ɵɵelement(1, "i", 62);
158
+ i0.ɵɵelementStart(2, "div", 97)(3, "div", 98);
157
159
  i0.ɵɵtext(4, "Top P");
158
160
  i0.ɵɵelementEnd();
159
- i0.ɵɵelementStart(5, "div", 89);
161
+ i0.ɵɵelementStart(5, "div", 99);
160
162
  i0.ɵɵtext(6);
161
163
  i0.ɵɵelementEnd()()();
162
164
  } if (rf & 2) {
@@ -164,13 +166,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
164
166
  i0.ɵɵadvance(6);
165
167
  i0.ɵɵtextInterpolate(ctx_r1.record.TopP);
166
168
  } }
167
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_11_Template(rf, ctx) { if (rf & 1) {
168
- i0.ɵɵelementStart(0, "div", 86);
169
- i0.ɵɵelement(1, "i", 55);
170
- i0.ɵɵelementStart(2, "div", 87)(3, "div", 88);
169
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_33_Conditional_11_Template(rf, ctx) { if (rf & 1) {
170
+ i0.ɵɵelementStart(0, "div", 96);
171
+ i0.ɵɵelement(1, "i", 63);
172
+ i0.ɵɵelementStart(2, "div", 97)(3, "div", 98);
171
173
  i0.ɵɵtext(4, "Top K");
172
174
  i0.ɵɵelementEnd();
173
- i0.ɵɵelementStart(5, "div", 89);
175
+ i0.ɵɵelementStart(5, "div", 99);
174
176
  i0.ɵɵtext(6);
175
177
  i0.ɵɵelementEnd()()();
176
178
  } if (rf & 2) {
@@ -178,13 +180,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
178
180
  i0.ɵɵadvance(6);
179
181
  i0.ɵɵtextInterpolate(ctx_r1.record.TopK);
180
182
  } }
181
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_12_Template(rf, ctx) { if (rf & 1) {
182
- i0.ɵɵelementStart(0, "div", 86);
183
- i0.ɵɵelement(1, "i", 93);
184
- i0.ɵɵelementStart(2, "div", 87)(3, "div", 88);
183
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_33_Conditional_12_Template(rf, ctx) { if (rf & 1) {
184
+ i0.ɵɵelementStart(0, "div", 96);
185
+ i0.ɵɵelement(1, "i", 103);
186
+ i0.ɵɵelementStart(2, "div", 97)(3, "div", 98);
185
187
  i0.ɵɵtext(4, "Effort Level");
186
188
  i0.ɵɵelementEnd();
187
- i0.ɵɵelementStart(5, "div", 89);
189
+ i0.ɵɵelementStart(5, "div", 99);
188
190
  i0.ɵɵtext(6);
189
191
  i0.ɵɵelementEnd()()();
190
192
  } if (rf & 2) {
@@ -192,13 +194,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
192
194
  i0.ɵɵadvance(6);
193
195
  i0.ɵɵtextInterpolate(ctx_r1.record.EffortLevel);
194
196
  } }
195
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_13_Template(rf, ctx) { if (rf & 1) {
196
- i0.ɵɵelementStart(0, "div", 86);
197
- i0.ɵɵelement(1, "i", 94);
198
- i0.ɵɵelementStart(2, "div", 87)(3, "div", 88);
197
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_33_Conditional_13_Template(rf, ctx) { if (rf & 1) {
198
+ i0.ɵɵelementStart(0, "div", 96);
199
+ i0.ɵɵelement(1, "i", 104);
200
+ i0.ɵɵelementStart(2, "div", 97)(3, "div", 98);
199
201
  i0.ɵɵtext(4, "Response Format");
200
202
  i0.ɵɵelementEnd();
201
- i0.ɵɵelementStart(5, "div", 89);
203
+ i0.ɵɵelementStart(5, "div", 99);
202
204
  i0.ɵɵtext(6);
203
205
  i0.ɵɵelementEnd()()();
204
206
  } if (rf & 2) {
@@ -206,13 +208,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
206
208
  i0.ɵɵadvance(6);
207
209
  i0.ɵɵtextInterpolate(ctx_r1.record.ResponseFormat);
208
210
  } }
209
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_29_Template(rf, ctx) { if (rf & 1) {
210
- i0.ɵɵelementStart(0, "div", 86);
211
- i0.ɵɵelement(1, "i", 95);
212
- i0.ɵɵelementStart(2, "div", 87)(3, "div", 88);
211
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_33_Conditional_29_Template(rf, ctx) { if (rf & 1) {
212
+ i0.ɵɵelementStart(0, "div", 96);
213
+ i0.ɵɵelement(1, "i", 105);
214
+ i0.ɵɵelementStart(2, "div", 97)(3, "div", 98);
213
215
  i0.ɵɵtext(4, "Cached");
214
216
  i0.ɵɵelementEnd();
215
- i0.ɵɵelementStart(5, "div", 89);
217
+ i0.ɵɵelementStart(5, "div", 99);
216
218
  i0.ɵɵtext(6);
217
219
  i0.ɵɵelementEnd()()();
218
220
  } if (rf & 2) {
@@ -220,13 +222,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
220
222
  i0.ɵɵadvance(6);
221
223
  i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensCacheRead));
222
224
  } }
223
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_37_Template(rf, ctx) { if (rf & 1) {
224
- i0.ɵɵelementStart(0, "div", 86);
225
- i0.ɵɵelement(1, "i", 96);
226
- i0.ɵɵelementStart(2, "div", 87)(3, "div", 88);
225
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_33_Conditional_37_Template(rf, ctx) { if (rf & 1) {
226
+ i0.ɵɵelementStart(0, "div", 96);
227
+ i0.ɵɵelement(1, "i", 106);
228
+ i0.ɵɵelementStart(2, "div", 97)(3, "div", 98);
227
229
  i0.ɵɵtext(4, "Started");
228
230
  i0.ɵɵelementEnd();
229
- i0.ɵɵelementStart(5, "div", 89);
231
+ i0.ɵɵelementStart(5, "div", 99);
230
232
  i0.ɵɵtext(6);
231
233
  i0.ɵɵpipe(7, "date");
232
234
  i0.ɵɵelementEnd()()();
@@ -235,49 +237,49 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
235
237
  i0.ɵɵadvance(6);
236
238
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(7, 1, ctx_r1.record.RunAt, "short"));
237
239
  } }
238
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Template(rf, ctx) { if (rf & 1) {
240
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_33_Template(rf, ctx) { if (rf & 1) {
239
241
  const _r7 = i0.ɵɵgetCurrentView();
240
- i0.ɵɵelementStart(0, "div", 25)(1, "div", 86);
241
- i0.ɵɵelement(2, "i", 76);
242
- i0.ɵɵelementStart(3, "div", 87)(4, "div", 88);
242
+ i0.ɵɵelementStart(0, "div", 27)(1, "div", 96);
243
+ i0.ɵɵelement(2, "i", 86);
244
+ i0.ɵɵelementStart(3, "div", 97)(4, "div", 98);
243
245
  i0.ɵɵtext(5, "Configuration");
244
246
  i0.ɵɵelementEnd();
245
- i0.ɵɵelementStart(6, "div", 89)(7, "a", 90);
246
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Template_a_click_7_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Configurations", ctx_r1.record.ConfigurationID)); });
247
+ i0.ɵɵelementStart(6, "div", 99)(7, "a", 100);
248
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_33_Template_a_click_7_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Configurations", ctx_r1.record.ConfigurationID)); });
247
249
  i0.ɵɵtext(8);
248
250
  i0.ɵɵelementEnd()()()();
249
- i0.ɵɵconditionalCreate(9, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_9_Template, 7, 1, "div", 86);
250
- i0.ɵɵconditionalCreate(10, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_10_Template, 7, 1, "div", 86);
251
- i0.ɵɵconditionalCreate(11, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_11_Template, 7, 1, "div", 86);
252
- i0.ɵɵconditionalCreate(12, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_12_Template, 7, 1, "div", 86);
253
- i0.ɵɵconditionalCreate(13, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_13_Template, 7, 1, "div", 86);
254
- i0.ɵɵelementEnd();
255
- i0.ɵɵelementStart(14, "div", 25)(15, "div", 86);
256
- i0.ɵɵelement(16, "i", 91);
257
- i0.ɵɵelementStart(17, "div", 87)(18, "div", 88);
251
+ i0.ɵɵconditionalCreate(9, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_33_Conditional_9_Template, 7, 1, "div", 96);
252
+ i0.ɵɵconditionalCreate(10, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_33_Conditional_10_Template, 7, 1, "div", 96);
253
+ i0.ɵɵconditionalCreate(11, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_33_Conditional_11_Template, 7, 1, "div", 96);
254
+ i0.ɵɵconditionalCreate(12, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_33_Conditional_12_Template, 7, 1, "div", 96);
255
+ i0.ɵɵconditionalCreate(13, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_33_Conditional_13_Template, 7, 1, "div", 96);
256
+ i0.ɵɵelementEnd();
257
+ i0.ɵɵelementStart(14, "div", 27)(15, "div", 96);
258
+ i0.ɵɵelement(16, "i", 101);
259
+ i0.ɵɵelementStart(17, "div", 97)(18, "div", 98);
258
260
  i0.ɵɵtext(19, "Duration");
259
261
  i0.ɵɵelementEnd();
260
- i0.ɵɵelementStart(20, "div", 89);
262
+ i0.ɵɵelementStart(20, "div", 99);
261
263
  i0.ɵɵtext(21);
262
264
  i0.ɵɵelementEnd()()();
263
- i0.ɵɵelementStart(22, "div", 92);
264
- i0.ɵɵelement(23, "i", 43);
265
- i0.ɵɵelementStart(24, "div", 87)(25, "div", 88);
265
+ i0.ɵɵelementStart(22, "div", 102);
266
+ i0.ɵɵelement(23, "i", 49);
267
+ i0.ɵɵelementStart(24, "div", 97)(25, "div", 98);
266
268
  i0.ɵɵtext(26, "Total Tokens");
267
269
  i0.ɵɵelementEnd();
268
- i0.ɵɵelementStart(27, "div", 89);
270
+ i0.ɵɵelementStart(27, "div", 99);
269
271
  i0.ɵɵtext(28);
270
272
  i0.ɵɵelementEnd()()();
271
- i0.ɵɵconditionalCreate(29, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_29_Template, 7, 1, "div", 86);
272
- i0.ɵɵelementStart(30, "div", 86);
273
- i0.ɵɵelement(31, "i", 45);
274
- i0.ɵɵelementStart(32, "div", 87)(33, "div", 88);
273
+ i0.ɵɵconditionalCreate(29, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_33_Conditional_29_Template, 7, 1, "div", 96);
274
+ i0.ɵɵelementStart(30, "div", 96);
275
+ i0.ɵɵelement(31, "i", 51);
276
+ i0.ɵɵelementStart(32, "div", 97)(33, "div", 98);
275
277
  i0.ɵɵtext(34, "Cost");
276
278
  i0.ɵɵelementEnd();
277
- i0.ɵɵelementStart(35, "div", 89);
279
+ i0.ɵɵelementStart(35, "div", 99);
278
280
  i0.ɵɵtext(36);
279
281
  i0.ɵɵelementEnd()()();
280
- i0.ɵɵconditionalCreate(37, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_37_Template, 8, 4, "div", 86);
282
+ i0.ɵɵconditionalCreate(37, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_33_Conditional_37_Template, 8, 4, "div", 96);
281
283
  i0.ɵɵelementEnd();
282
284
  } if (rf & 2) {
283
285
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -304,13 +306,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Templat
304
306
  i0.ɵɵadvance();
305
307
  i0.ɵɵconditional(ctx_r1.record.RunAt ? 37 : -1);
306
308
  } }
307
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_15_Template(rf, ctx) { if (rf & 1) {
308
- i0.ɵɵelementStart(0, "div", 86);
309
- i0.ɵɵelement(1, "i", 95);
310
- i0.ɵɵelementStart(2, "div", 87)(3, "div", 88);
309
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_34_Conditional_15_Template(rf, ctx) { if (rf & 1) {
310
+ i0.ɵɵelementStart(0, "div", 96);
311
+ i0.ɵɵelement(1, "i", 105);
312
+ i0.ɵɵelementStart(2, "div", 97)(3, "div", 98);
311
313
  i0.ɵɵtext(4, "Cached");
312
314
  i0.ɵɵelementEnd();
313
- i0.ɵɵelementStart(5, "div", 89);
315
+ i0.ɵɵelementStart(5, "div", 99);
314
316
  i0.ɵɵtext(6);
315
317
  i0.ɵɵelementEnd()()();
316
318
  } if (rf & 2) {
@@ -318,13 +320,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditi
318
320
  i0.ɵɵadvance(6);
319
321
  i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensCacheRead));
320
322
  } }
321
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_23_Template(rf, ctx) { if (rf & 1) {
322
- i0.ɵɵelementStart(0, "div", 86);
323
- i0.ɵɵelement(1, "i", 96);
324
- i0.ɵɵelementStart(2, "div", 87)(3, "div", 88);
323
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_34_Conditional_23_Template(rf, ctx) { if (rf & 1) {
324
+ i0.ɵɵelementStart(0, "div", 96);
325
+ i0.ɵɵelement(1, "i", 106);
326
+ i0.ɵɵelementStart(2, "div", 97)(3, "div", 98);
325
327
  i0.ɵɵtext(4, "Started");
326
328
  i0.ɵɵelementEnd();
327
- i0.ɵɵelementStart(5, "div", 89);
329
+ i0.ɵɵelementStart(5, "div", 99);
328
330
  i0.ɵɵtext(6);
329
331
  i0.ɵɵpipe(7, "date");
330
332
  i0.ɵɵelementEnd()()();
@@ -333,33 +335,33 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditi
333
335
  i0.ɵɵadvance(6);
334
336
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(7, 1, ctx_r1.record.RunAt, "short"));
335
337
  } }
336
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Template(rf, ctx) { if (rf & 1) {
337
- i0.ɵɵelementStart(0, "div", 25)(1, "div", 86);
338
- i0.ɵɵelement(2, "i", 91);
339
- i0.ɵɵelementStart(3, "div", 87)(4, "div", 88);
338
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_34_Template(rf, ctx) { if (rf & 1) {
339
+ i0.ɵɵelementStart(0, "div", 27)(1, "div", 96);
340
+ i0.ɵɵelement(2, "i", 101);
341
+ i0.ɵɵelementStart(3, "div", 97)(4, "div", 98);
340
342
  i0.ɵɵtext(5, "Duration");
341
343
  i0.ɵɵelementEnd();
342
- i0.ɵɵelementStart(6, "div", 89);
344
+ i0.ɵɵelementStart(6, "div", 99);
343
345
  i0.ɵɵtext(7);
344
346
  i0.ɵɵelementEnd()()();
345
- i0.ɵɵelementStart(8, "div", 92);
346
- i0.ɵɵelement(9, "i", 43);
347
- i0.ɵɵelementStart(10, "div", 87)(11, "div", 88);
347
+ i0.ɵɵelementStart(8, "div", 102);
348
+ i0.ɵɵelement(9, "i", 49);
349
+ i0.ɵɵelementStart(10, "div", 97)(11, "div", 98);
348
350
  i0.ɵɵtext(12, "Total Tokens");
349
351
  i0.ɵɵelementEnd();
350
- i0.ɵɵelementStart(13, "div", 89);
352
+ i0.ɵɵelementStart(13, "div", 99);
351
353
  i0.ɵɵtext(14);
352
354
  i0.ɵɵelementEnd()()();
353
- i0.ɵɵconditionalCreate(15, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_15_Template, 7, 1, "div", 86);
354
- i0.ɵɵelementStart(16, "div", 86);
355
- i0.ɵɵelement(17, "i", 45);
356
- i0.ɵɵelementStart(18, "div", 87)(19, "div", 88);
355
+ i0.ɵɵconditionalCreate(15, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_34_Conditional_15_Template, 7, 1, "div", 96);
356
+ i0.ɵɵelementStart(16, "div", 96);
357
+ i0.ɵɵelement(17, "i", 51);
358
+ i0.ɵɵelementStart(18, "div", 97)(19, "div", 98);
357
359
  i0.ɵɵtext(20, "Cost");
358
360
  i0.ɵɵelementEnd();
359
- i0.ɵɵelementStart(21, "div", 89);
361
+ i0.ɵɵelementStart(21, "div", 99);
360
362
  i0.ɵɵtext(22);
361
363
  i0.ɵɵelementEnd()()();
362
- i0.ɵɵconditionalCreate(23, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_23_Template, 8, 4, "div", 86);
364
+ i0.ɵɵconditionalCreate(23, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_34_Conditional_23_Template, 8, 4, "div", 96);
363
365
  i0.ɵɵelementEnd();
364
366
  } if (rf & 2) {
365
367
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -374,24 +376,39 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Templat
374
376
  i0.ɵɵadvance();
375
377
  i0.ɵɵconditional(ctx_r1.record.RunAt ? 23 : -1);
376
378
  } }
377
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Conditional_3_Template(rf, ctx) { if (rf & 1) {
378
- i0.ɵɵelementStart(0, "span", 99);
379
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_35_Template(rf, ctx) { if (rf & 1) {
380
+ const _r8 = i0.ɵɵgetCurrentView();
381
+ i0.ɵɵelementStart(0, "button", 107);
382
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_35_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleHeroDetails()); });
383
+ i0.ɵɵelementStart(1, "span", 108);
384
+ i0.ɵɵtext(2);
385
+ i0.ɵɵelementEnd();
386
+ i0.ɵɵelement(3, "i", 109);
387
+ i0.ɵɵelementEnd();
388
+ } if (rf & 2) {
389
+ const ctx_r1 = i0.ɵɵnextContext(2);
390
+ i0.ɵɵattribute("aria-expanded", ctx_r1.HeroDetailsOpen);
391
+ i0.ɵɵadvance(2);
392
+ i0.ɵɵtextInterpolate(ctx_r1.HeroSummary);
393
+ } }
394
+ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_3_Template(rf, ctx) { if (rf & 1) {
395
+ i0.ɵɵelementStart(0, "span", 112);
379
396
  i0.ɵɵtext(1, "JSON");
380
397
  i0.ɵɵelementEnd();
381
398
  } }
382
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Template(rf, ctx) { if (rf & 1) {
383
- i0.ɵɵelementStart(0, "span", 97);
384
- i0.ɵɵelement(1, "i", 98);
399
+ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Template(rf, ctx) { if (rf & 1) {
400
+ i0.ɵɵelementStart(0, "span", 110);
401
+ i0.ɵɵelement(1, "i", 111);
385
402
  i0.ɵɵtext(2, " Input ");
386
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Conditional_3_Template, 2, 0, "span", 99);
403
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_3_Template, 2, 0, "span", 112);
387
404
  i0.ɵɵelementEnd();
388
405
  } if (rf & 2) {
389
406
  const ctx_r1 = i0.ɵɵnextContext(2);
390
407
  i0.ɵɵadvance(3);
391
408
  i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 3 : -1);
392
409
  } }
393
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
394
- i0.ɵɵelementStart(0, "span", 115);
410
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_ng_template_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
411
+ i0.ɵɵelementStart(0, "span", 128);
395
412
  i0.ɵɵtext(1);
396
413
  i0.ɵɵelementEnd();
397
414
  } if (rf & 2) {
@@ -399,62 +416,62 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_temp
399
416
  i0.ɵɵadvance();
400
417
  i0.ɵɵtextInterpolate1("(", ctx_r1.chatMessages.length, ")");
401
418
  } }
402
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Template(rf, ctx) { if (rf & 1) {
403
- i0.ɵɵelementStart(0, "span", 113);
404
- i0.ɵɵelement(1, "i", 114);
419
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_ng_template_2_Template(rf, ctx) { if (rf & 1) {
420
+ i0.ɵɵelementStart(0, "span", 126);
421
+ i0.ɵɵelement(1, "i", 127);
405
422
  i0.ɵɵtext(2, " Messages ");
406
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Conditional_3_Template, 2, 1, "span", 115);
423
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_ng_template_2_Conditional_3_Template, 2, 1, "span", 128);
407
424
  i0.ɵɵelementEnd();
408
425
  } if (rf & 2) {
409
426
  const ctx_r1 = i0.ɵɵnextContext(3);
410
427
  i0.ɵɵadvance(3);
411
428
  i0.ɵɵconditional(ctx_r1.chatMessages.length > 0 ? 3 : -1);
412
429
  } }
413
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_4_Template(rf, ctx) { if (rf & 1) {
414
- i0.ɵɵelementStart(0, "div", 102);
415
- i0.ɵɵelement(1, "i", 116);
430
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Template(rf, ctx) { if (rf & 1) {
431
+ i0.ɵɵelementStart(0, "div", 115);
432
+ i0.ɵɵelement(1, "i", 129);
416
433
  i0.ɵɵelementStart(2, "p");
417
434
  i0.ɵɵtext(3, "Loading messages...");
418
435
  i0.ɵɵelementEnd()();
419
436
  } }
420
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_5_Template(rf, ctx) { if (rf & 1) {
421
- i0.ɵɵelement(0, "mj-chat-message-viewer", 103);
437
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Conditional_5_Template(rf, ctx) { if (rf & 1) {
438
+ i0.ɵɵelement(0, "mj-chat-message-viewer", 116);
422
439
  } if (rf & 2) {
423
440
  const ctx_r1 = i0.ɵɵnextContext(3);
424
441
  i0.ɵɵproperty("messages", ctx_r1.chatMessages);
425
442
  } }
426
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_6_Template(rf, ctx) { if (rf & 1) {
427
- i0.ɵɵelement(0, "mj-empty-state", 104);
443
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Conditional_6_Template(rf, ctx) { if (rf & 1) {
444
+ i0.ɵɵelement(0, "mj-empty-state", 117);
428
445
  } }
429
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Conditional_3_Template(rf, ctx) { if (rf & 1) {
430
- i0.ɵɵelementStart(0, "span", 99);
446
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_ng_template_8_Conditional_3_Template(rf, ctx) { if (rf & 1) {
447
+ i0.ɵɵelementStart(0, "span", 112);
431
448
  i0.ɵɵtext(1, "Object");
432
449
  i0.ɵɵelementEnd();
433
450
  } }
434
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Template(rf, ctx) { if (rf & 1) {
435
- i0.ɵɵelementStart(0, "span", 113);
436
- i0.ɵɵelement(1, "i", 117);
451
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_ng_template_8_Template(rf, ctx) { if (rf & 1) {
452
+ i0.ɵɵelementStart(0, "span", 126);
453
+ i0.ɵɵelement(1, "i", 130);
437
454
  i0.ɵɵtext(2, " Data ");
438
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Conditional_3_Template, 2, 0, "span", 99);
455
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_ng_template_8_Conditional_3_Template, 2, 0, "span", 112);
439
456
  i0.ɵɵelementEnd();
440
457
  } if (rf & 2) {
441
458
  const ctx_r1 = i0.ɵɵnextContext(3);
442
459
  i0.ɵɵadvance(3);
443
460
  i0.ɵɵconditional(ctx_r1.inputData ? 3 : -1);
444
461
  } }
445
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_11_Template(rf, ctx) { if (rf & 1) {
446
- const _r9 = i0.ɵɵgetCurrentView();
447
- i0.ɵɵelementStart(0, "div", 33)(1, "div", 107)(2, "button", 108);
448
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_11_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedData, "Data")); });
449
- i0.ɵɵelement(3, "i", 109);
462
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Conditional_11_Template(rf, ctx) { if (rf & 1) {
463
+ const _r10 = i0.ɵɵgetCurrentView();
464
+ i0.ɵɵelementStart(0, "div", 38)(1, "div", 120)(2, "button", 121);
465
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Conditional_11_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedData, "Data")); });
466
+ i0.ɵɵelement(3, "i", 122);
450
467
  i0.ɵɵtext(4, " Copy ");
451
468
  i0.ɵɵelementEnd();
452
- i0.ɵɵelementStart(5, "button", 110);
453
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_11_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedData, "json", "Data")); });
454
- i0.ɵɵelement(6, "i", 111);
469
+ i0.ɵɵelementStart(5, "button", 123);
470
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Conditional_11_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedData, "json", "Data")); });
471
+ i0.ɵɵelement(6, "i", 124);
455
472
  i0.ɵɵelementEnd()();
456
- i0.ɵɵelementStart(7, "mj-code-editor", 118);
457
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_11_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedData, $event) || (ctx_r1.formattedData = $event); return i0.ɵɵresetView($event); });
473
+ i0.ɵɵelementStart(7, "mj-code-editor", 131);
474
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Conditional_11_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedData, $event) || (ctx_r1.formattedData = $event); return i0.ɵɵresetView($event); });
458
475
  i0.ɵɵelementEnd()();
459
476
  } if (rf & 2) {
460
477
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -462,41 +479,41 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditi
462
479
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedData);
463
480
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
464
481
  } }
465
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_12_Template(rf, ctx) { if (rf & 1) {
466
- i0.ɵɵelement(0, "mj-empty-state", 106);
482
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Conditional_12_Template(rf, ctx) { if (rf & 1) {
483
+ i0.ɵɵelement(0, "mj-empty-state", 119);
467
484
  } }
468
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_14_Template(rf, ctx) { if (rf & 1) {
469
- i0.ɵɵelementStart(0, "span", 113);
470
- i0.ɵɵelement(1, "i", 94);
485
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_ng_template_14_Template(rf, ctx) { if (rf & 1) {
486
+ i0.ɵɵelementStart(0, "span", 126);
487
+ i0.ɵɵelement(1, "i", 104);
471
488
  i0.ɵɵtext(2, " Raw ");
472
489
  i0.ɵɵelementEnd();
473
490
  } }
474
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template(rf, ctx) { if (rf & 1) {
475
- const _r8 = i0.ɵɵgetCurrentView();
476
- i0.ɵɵelementStart(0, "div", 30)(1, "mj-accordion-panel", 100);
477
- i0.ɵɵtemplate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Template, 4, 1, "ng-template", 28);
478
- i0.ɵɵelementStart(3, "div", 101);
479
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_4_Template, 4, 0, "div", 102)(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_5_Template, 1, 1, "mj-chat-message-viewer", 103)(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_6_Template, 1, 0, "mj-empty-state", 104);
480
- i0.ɵɵelementEnd()();
481
- i0.ɵɵelementStart(7, "mj-accordion-panel", 100);
482
- i0.ɵɵtemplate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Template, 4, 1, "ng-template", 28);
483
- i0.ɵɵelementStart(9, "div", 101);
484
- i0.ɵɵelement(10, "mj-prompt-run-data-capture-note", 105);
485
- i0.ɵɵconditionalCreate(11, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_11_Template, 8, 4, "div", 33)(12, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_12_Template, 1, 0, "mj-empty-state", 106);
486
- i0.ɵɵelementEnd()();
487
- i0.ɵɵelementStart(13, "mj-accordion-panel", 100);
488
- i0.ɵɵtemplate(14, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_14_Template, 3, 0, "ng-template", 28);
489
- i0.ɵɵelementStart(15, "div", 101)(16, "div", 33)(17, "div", 107)(18, "button", 108);
490
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedMessages, "Messages")); });
491
- i0.ɵɵelement(19, "i", 109);
491
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Template(rf, ctx) { if (rf & 1) {
492
+ const _r9 = i0.ɵɵgetCurrentView();
493
+ i0.ɵɵelementStart(0, "div", 34)(1, "mj-accordion-panel", 113);
494
+ i0.ɵɵtemplate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_ng_template_2_Template, 4, 1, "ng-template", 32);
495
+ i0.ɵɵelementStart(3, "div", 114);
496
+ i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Template, 4, 0, "div", 115)(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Conditional_5_Template, 1, 1, "mj-chat-message-viewer", 116)(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Conditional_6_Template, 1, 0, "mj-empty-state", 117);
497
+ i0.ɵɵelementEnd()();
498
+ i0.ɵɵelementStart(7, "mj-accordion-panel", 113);
499
+ i0.ɵɵtemplate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_ng_template_8_Template, 4, 1, "ng-template", 32);
500
+ i0.ɵɵelementStart(9, "div", 114);
501
+ i0.ɵɵelement(10, "mj-prompt-run-data-capture-note", 118);
502
+ i0.ɵɵconditionalCreate(11, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Conditional_11_Template, 8, 4, "div", 38)(12, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Conditional_12_Template, 1, 0, "mj-empty-state", 119);
503
+ i0.ɵɵelementEnd()();
504
+ i0.ɵɵelementStart(13, "mj-accordion-panel", 113);
505
+ i0.ɵɵtemplate(14, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_ng_template_14_Template, 3, 0, "ng-template", 32);
506
+ i0.ɵɵelementStart(15, "div", 114)(16, "div", 38)(17, "div", 120)(18, "button", 121);
507
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedMessages, "Messages")); });
508
+ i0.ɵɵelement(19, "i", 122);
492
509
  i0.ɵɵtext(20, " Copy ");
493
510
  i0.ɵɵelementEnd();
494
- i0.ɵɵelementStart(21, "button", 110);
495
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template_button_click_21_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedMessages, "json", "Raw Messages")); });
496
- i0.ɵɵelement(22, "i", 111);
511
+ i0.ɵɵelementStart(21, "button", 123);
512
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Template_button_click_21_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedMessages, "json", "Raw Messages")); });
513
+ i0.ɵɵelement(22, "i", 124);
497
514
  i0.ɵɵelementEnd()();
498
- i0.ɵɵelementStart(23, "mj-code-editor", 112);
499
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template_mj_code_editor_ngModelChange_23_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedMessages, $event) || (ctx_r1.formattedMessages = $event); return i0.ɵɵresetView($event); });
515
+ i0.ɵɵelementStart(23, "mj-code-editor", 125);
516
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Template_mj_code_editor_ngModelChange_23_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedMessages, $event) || (ctx_r1.formattedMessages = $event); return i0.ɵɵresetView($event); });
500
517
  i0.ɵɵelementEnd()()()()();
501
518
  } if (rf & 2) {
502
519
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -516,25 +533,25 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Templat
516
533
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedMessages);
517
534
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
518
535
  } }
519
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_37_Template(rf, ctx) { if (rf & 1) {
520
- i0.ɵɵelement(0, "mj-empty-state", 31);
536
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template(rf, ctx) { if (rf & 1) {
537
+ i0.ɵɵelement(0, "mj-empty-state", 35);
521
538
  } }
522
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_3_Template(rf, ctx) { if (rf & 1) {
523
- i0.ɵɵelementStart(0, "span", 99);
539
+ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_44_Conditional_3_Template(rf, ctx) { if (rf & 1) {
540
+ i0.ɵɵelementStart(0, "span", 112);
524
541
  i0.ɵɵtext(1, "JSON");
525
542
  i0.ɵɵelementEnd();
526
543
  } }
527
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_4_Template(rf, ctx) { if (rf & 1) {
528
- i0.ɵɵelementStart(0, "span", 120);
544
+ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_44_Conditional_4_Template(rf, ctx) { if (rf & 1) {
545
+ i0.ɵɵelementStart(0, "span", 133);
529
546
  i0.ɵɵtext(1, "Error");
530
547
  i0.ɵɵelementEnd();
531
548
  } }
532
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Template(rf, ctx) { if (rf & 1) {
533
- i0.ɵɵelementStart(0, "span", 97);
534
- i0.ɵɵelement(1, "i", 119);
549
+ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_44_Template(rf, ctx) { if (rf & 1) {
550
+ i0.ɵɵelementStart(0, "span", 110);
551
+ i0.ɵɵelement(1, "i", 132);
535
552
  i0.ɵɵtext(2, " Result ");
536
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_3_Template, 2, 0, "span", 99);
537
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_4_Template, 2, 0, "span", 120);
553
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_44_Conditional_3_Template, 2, 0, "span", 112);
554
+ i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_44_Conditional_4_Template, 2, 0, "span", 133);
538
555
  i0.ɵɵelementEnd();
539
556
  } if (rf & 2) {
540
557
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -543,10 +560,10 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Templat
543
560
  i0.ɵɵadvance();
544
561
  i0.ɵɵconditional(ctx_r1.record.ErrorMessage ? 4 : -1);
545
562
  } }
546
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Template(rf, ctx) { if (rf & 1) {
547
- i0.ɵɵelementStart(0, "div", 32);
548
- i0.ɵɵelement(1, "i", 121);
549
- i0.ɵɵelementStart(2, "div", 122)(3, "h4");
563
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_46_Template(rf, ctx) { if (rf & 1) {
564
+ i0.ɵɵelementStart(0, "div", 37);
565
+ i0.ɵɵelement(1, "i", 134);
566
+ i0.ɵɵelementStart(2, "div", 135)(3, "h4");
550
567
  i0.ɵɵtext(4, "Error Message");
551
568
  i0.ɵɵelementEnd();
552
569
  i0.ɵɵelementStart(5, "p");
@@ -557,19 +574,19 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Templat
557
574
  i0.ɵɵadvance(6);
558
575
  i0.ɵɵtextInterpolate(ctx_r1.record.ErrorMessage);
559
576
  } }
560
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template(rf, ctx) { if (rf & 1) {
561
- const _r10 = i0.ɵɵgetCurrentView();
562
- i0.ɵɵelementStart(0, "div", 33)(1, "div", 107)(2, "button", 108);
563
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedResult, "Result")); });
564
- i0.ɵɵelement(3, "i", 109);
577
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_47_Template(rf, ctx) { if (rf & 1) {
578
+ const _r11 = i0.ɵɵgetCurrentView();
579
+ i0.ɵɵelementStart(0, "div", 38)(1, "div", 120)(2, "button", 121);
580
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_47_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedResult, "Result")); });
581
+ i0.ɵɵelement(3, "i", 122);
565
582
  i0.ɵɵtext(4, " Copy ");
566
583
  i0.ɵɵelementEnd();
567
- i0.ɵɵelementStart(5, "button", 110);
568
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedResult, "json", "Result")); });
569
- i0.ɵɵelement(6, "i", 111);
584
+ i0.ɵɵelementStart(5, "button", 123);
585
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_47_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedResult, "json", "Result")); });
586
+ i0.ɵɵelement(6, "i", 124);
570
587
  i0.ɵɵelementEnd()();
571
- i0.ɵɵelementStart(7, "mj-code-editor", 123);
572
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedResult, $event) || (ctx_r1.formattedResult = $event); return i0.ɵɵresetView($event); });
588
+ i0.ɵɵelementStart(7, "mj-code-editor", 136);
589
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_47_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedResult, $event) || (ctx_r1.formattedResult = $event); return i0.ɵɵresetView($event); });
573
590
  i0.ɵɵelementEnd()();
574
591
  } if (rf & 2) {
575
592
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -577,8 +594,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Templat
577
594
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedResult);
578
595
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
579
596
  } }
580
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
581
- i0.ɵɵelementStart(0, "p", 125)(1, "strong");
597
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_48_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
598
+ i0.ɵɵelementStart(0, "p", 138)(1, "strong");
582
599
  i0.ɵɵtext(2, "Status:");
583
600
  i0.ɵɵelementEnd();
584
601
  i0.ɵɵtext(3);
@@ -588,32 +605,32 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditi
588
605
  i0.ɵɵadvance(3);
589
606
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Status, " ");
590
607
  } }
591
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
592
- const _r11 = i0.ɵɵgetCurrentView();
593
- i0.ɵɵelementStart(0, "div", 126)(1, "div", 107)(2, "h4", 128);
608
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_48_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
609
+ const _r12 = i0.ɵɵgetCurrentView();
610
+ i0.ɵɵelementStart(0, "div", 139)(1, "div", 120)(2, "h4", 141);
594
611
  i0.ɵɵtext(3, "Error Details");
595
612
  i0.ɵɵelementEnd();
596
- i0.ɵɵelementStart(4, "button", 110);
597
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_1_Conditional_2_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedErrorDetails, "json", "Error Details")); });
598
- i0.ɵɵelement(5, "i", 111);
613
+ i0.ɵɵelementStart(4, "button", 123);
614
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_48_Conditional_1_Conditional_2_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedErrorDetails, "json", "Error Details")); });
615
+ i0.ɵɵelement(5, "i", 124);
599
616
  i0.ɵɵelementEnd()();
600
- i0.ɵɵelement(6, "mj-code-editor", 129);
617
+ i0.ɵɵelement(6, "mj-code-editor", 142);
601
618
  i0.ɵɵelementEnd();
602
619
  } if (rf & 2) {
603
620
  const ctx_r1 = i0.ɵɵnextContext(4);
604
621
  i0.ɵɵadvance(6);
605
622
  i0.ɵɵproperty("ngModel", ctx_r1.formattedErrorDetails)("disabled", true)("language", "json")("lineWrapping", true);
606
623
  } }
607
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
608
- i0.ɵɵelementStart(0, "p", 127);
624
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_48_Conditional_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
625
+ i0.ɵɵelementStart(0, "p", 140);
609
626
  i0.ɵɵtext(1, " The prompt execution failed but no additional error information is available. ");
610
627
  i0.ɵɵelementEnd();
611
628
  } }
612
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_1_Template(rf, ctx) { if (rf & 1) {
613
- i0.ɵɵelementStart(0, "div", 124);
614
- i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_1_Conditional_1_Template, 4, 1, "p", 125);
615
- i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_1_Conditional_2_Template, 7, 4, "div", 126);
616
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_1_Conditional_3_Template, 2, 0, "p", 127);
629
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_48_Conditional_1_Template(rf, ctx) { if (rf & 1) {
630
+ i0.ɵɵelementStart(0, "div", 137);
631
+ i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_48_Conditional_1_Conditional_1_Template, 4, 1, "p", 138);
632
+ i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_48_Conditional_1_Conditional_2_Template, 7, 4, "div", 139);
633
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_48_Conditional_1_Conditional_3_Template, 2, 0, "p", 140);
617
634
  i0.ɵɵelementEnd();
618
635
  } if (rf & 2) {
619
636
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -624,23 +641,23 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditi
624
641
  i0.ɵɵadvance();
625
642
  i0.ɵɵconditional(!ctx_r1.formattedErrorDetails ? 3 : -1);
626
643
  } }
627
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Template(rf, ctx) { if (rf & 1) {
628
- i0.ɵɵelementStart(0, "mj-empty-state", 34);
629
- i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_1_Template, 4, 3, "div", 124);
644
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_48_Template(rf, ctx) { if (rf & 1) {
645
+ i0.ɵɵelementStart(0, "mj-empty-state", 39);
646
+ i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_48_Conditional_1_Template, 4, 3, "div", 137);
630
647
  i0.ɵɵelementEnd();
631
648
  } if (rf & 2) {
632
649
  const ctx_r1 = i0.ɵɵnextContext(2);
633
650
  i0.ɵɵadvance();
634
651
  i0.ɵɵconditional(ctx_r1.record.CompletedAt && (ctx_r1.record.Status === "Failed" || ctx_r1.record.Success === false) ? 1 : -1);
635
652
  } }
636
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_45_Template(rf, ctx) { if (rf & 1) {
637
- i0.ɵɵelementStart(0, "span", 97);
638
- i0.ɵɵelement(1, "i", 130);
653
+ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_50_Template(rf, ctx) { if (rf & 1) {
654
+ i0.ɵɵelementStart(0, "span", 110);
655
+ i0.ɵɵelement(1, "i", 143);
639
656
  i0.ɵɵtext(2, " Token Usage & Metrics ");
640
657
  i0.ɵɵelementEnd();
641
658
  } }
642
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_55_Template(rf, ctx) { if (rf & 1) {
643
- i0.ɵɵelementStart(0, "div", 40)(1, "span");
659
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_60_Template(rf, ctx) { if (rf & 1) {
660
+ i0.ɵɵelementStart(0, "div", 46)(1, "span");
644
661
  i0.ɵɵtext(2);
645
662
  i0.ɵɵelementEnd()();
646
663
  } if (rf & 2) {
@@ -648,8 +665,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_55_Templat
648
665
  i0.ɵɵadvance(2);
649
666
  i0.ɵɵtextInterpolate1("incl. ", ctx_r1.formatTokens(ctx_r1.CachedTokens), " cached");
650
667
  } }
651
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_56_Template(rf, ctx) { if (rf & 1) {
652
- i0.ɵɵelementStart(0, "div", 40)(1, "span");
668
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_61_Template(rf, ctx) { if (rf & 1) {
669
+ i0.ɵɵelementStart(0, "div", 46)(1, "span");
653
670
  i0.ɵɵtext(2);
654
671
  i0.ɵɵelementEnd()();
655
672
  } if (rf & 2) {
@@ -657,8 +674,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_56_Templat
657
674
  i0.ɵɵadvance(2);
658
675
  i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensPromptRollup));
659
676
  } }
660
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_64_Template(rf, ctx) { if (rf & 1) {
661
- i0.ɵɵelementStart(0, "div", 40)(1, "span");
677
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_69_Template(rf, ctx) { if (rf & 1) {
678
+ i0.ɵɵelementStart(0, "div", 46)(1, "span");
662
679
  i0.ɵɵtext(2);
663
680
  i0.ɵɵelementEnd()();
664
681
  } if (rf & 2) {
@@ -666,8 +683,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_64_Templat
666
683
  i0.ɵɵadvance(2);
667
684
  i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensCompletionRollup));
668
685
  } }
669
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_72_Template(rf, ctx) { if (rf & 1) {
670
- i0.ɵɵelementStart(0, "div", 40)(1, "span");
686
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_77_Template(rf, ctx) { if (rf & 1) {
687
+ i0.ɵɵelementStart(0, "div", 46)(1, "span");
671
688
  i0.ɵɵtext(2);
672
689
  i0.ɵɵelementEnd()();
673
690
  } if (rf & 2) {
@@ -675,8 +692,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_72_Templat
675
692
  i0.ɵɵadvance(2);
676
693
  i0.ɵɵtextInterpolate1("incl. ", ctx_r1.formatTokens(ctx_r1.CachedTokens), " cached");
677
694
  } }
678
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Template(rf, ctx) { if (rf & 1) {
679
- i0.ɵɵelementStart(0, "div", 40)(1, "span");
695
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_78_Template(rf, ctx) { if (rf & 1) {
696
+ i0.ɵɵelementStart(0, "div", 46)(1, "span");
680
697
  i0.ɵɵtext(2);
681
698
  i0.ɵɵelementEnd()();
682
699
  } if (rf & 2) {
@@ -684,8 +701,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Templat
684
701
  i0.ɵɵadvance(2);
685
702
  i0.ɵɵtextInterpolate1("Net rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensUsedRollup));
686
703
  } }
687
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_74_Conditional_7_Template(rf, ctx) { if (rf & 1) {
688
- i0.ɵɵelementStart(0, "div", 40)(1, "span");
704
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_79_Conditional_7_Template(rf, ctx) { if (rf & 1) {
705
+ i0.ɵɵelementStart(0, "div", 46)(1, "span");
689
706
  i0.ɵɵtext(2);
690
707
  i0.ɵɵelementEnd()();
691
708
  } if (rf & 2) {
@@ -693,8 +710,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_74_Conditi
693
710
  i0.ɵɵadvance(2);
694
711
  i0.ɵɵtextInterpolate1("Write: ", ctx_r1.formatTokens(ctx_r1.record.TokensCacheWrite));
695
712
  } }
696
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_74_Conditional_8_Template(rf, ctx) { if (rf & 1) {
697
- i0.ɵɵelementStart(0, "div", 40)(1, "span");
713
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_79_Conditional_8_Template(rf, ctx) { if (rf & 1) {
714
+ i0.ɵɵelementStart(0, "div", 46)(1, "span");
698
715
  i0.ɵɵtext(2);
699
716
  i0.ɵɵpipe(3, "number");
700
717
  i0.ɵɵelementEnd()();
@@ -703,17 +720,17 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_74_Conditi
703
720
  i0.ɵɵadvance(2);
704
721
  i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(3, 1, ctx_r1.CacheHitRatePct, "1.0-0"), "% hit rate");
705
722
  } }
706
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_74_Template(rf, ctx) { if (rf & 1) {
707
- i0.ɵɵelementStart(0, "div", 36)(1, "div", 37);
708
- i0.ɵɵelement(2, "i", 95);
723
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_79_Template(rf, ctx) { if (rf & 1) {
724
+ i0.ɵɵelementStart(0, "div", 42)(1, "div", 43);
725
+ i0.ɵɵelement(2, "i", 105);
709
726
  i0.ɵɵelementStart(3, "h4");
710
727
  i0.ɵɵtext(4, "Cache Read");
711
728
  i0.ɵɵelementEnd()();
712
- i0.ɵɵelementStart(5, "div", 42);
729
+ i0.ɵɵelementStart(5, "div", 48);
713
730
  i0.ɵɵtext(6);
714
731
  i0.ɵɵelementEnd();
715
- i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_74_Conditional_7_Template, 3, 1, "div", 40);
716
- i0.ɵɵconditionalCreate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_74_Conditional_8_Template, 4, 4, "div", 40);
732
+ i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_79_Conditional_7_Template, 3, 1, "div", 46);
733
+ i0.ɵɵconditionalCreate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_79_Conditional_8_Template, 4, 4, "div", 46);
717
734
  i0.ɵɵelementEnd();
718
735
  } if (rf & 2) {
719
736
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -724,8 +741,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_74_Templat
724
741
  i0.ɵɵadvance();
725
742
  i0.ɵɵconditional(ctx_r1.record.TokensCacheRead || ctx_r1.record.TokensCacheWrite ? 8 : -1);
726
743
  } }
727
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Template(rf, ctx) { if (rf & 1) {
728
- i0.ɵɵelementStart(0, "div", 40)(1, "span");
744
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Template(rf, ctx) { if (rf & 1) {
745
+ i0.ɵɵelementStart(0, "div", 46)(1, "span");
729
746
  i0.ɵɵtext(2);
730
747
  i0.ɵɵelementEnd()();
731
748
  } if (rf & 2) {
@@ -733,8 +750,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Templat
733
750
  i0.ɵɵadvance(2);
734
751
  i0.ɵɵtextInterpolate1("Total: ", ctx_r1.formatCost(ctx_r1.record.TotalCost));
735
752
  } }
736
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Template(rf, ctx) { if (rf & 1) {
737
- i0.ɵɵelementStart(0, "div", 46);
753
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template(rf, ctx) { if (rf & 1) {
754
+ i0.ɵɵelementStart(0, "div", 52);
738
755
  i0.ɵɵtext(1);
739
756
  i0.ɵɵelementEnd();
740
757
  } if (rf & 2) {
@@ -742,13 +759,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Templat
742
759
  i0.ɵɵadvance();
743
760
  i0.ɵɵtextInterpolate(ctx_r1.record.CostCurrency);
744
761
  } }
745
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_84_Template(rf, ctx) { if (rf & 1) {
746
- i0.ɵɵelementStart(0, "div", 36)(1, "div", 37);
747
- i0.ɵɵelement(2, "i", 131);
762
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Template(rf, ctx) { if (rf & 1) {
763
+ i0.ɵɵelementStart(0, "div", 42)(1, "div", 43);
764
+ i0.ɵɵelement(2, "i", 144);
748
765
  i0.ɵɵelementStart(3, "h4");
749
766
  i0.ɵɵtext(4, "Queue Time");
750
767
  i0.ɵɵelementEnd()();
751
- i0.ɵɵelementStart(5, "div", 42);
768
+ i0.ɵɵelementStart(5, "div", 48);
752
769
  i0.ɵɵtext(6);
753
770
  i0.ɵɵelementEnd()();
754
771
  } if (rf & 2) {
@@ -756,13 +773,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_84_Templat
756
773
  i0.ɵɵadvance(6);
757
774
  i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.QueueTime));
758
775
  } }
759
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Template(rf, ctx) { if (rf & 1) {
760
- i0.ɵɵelementStart(0, "div", 36)(1, "div", 37);
761
- i0.ɵɵelement(2, "i", 132);
776
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Template(rf, ctx) { if (rf & 1) {
777
+ i0.ɵɵelementStart(0, "div", 42)(1, "div", 43);
778
+ i0.ɵɵelement(2, "i", 145);
762
779
  i0.ɵɵelementStart(3, "h4");
763
780
  i0.ɵɵtext(4, "Prompt Time");
764
781
  i0.ɵɵelementEnd()();
765
- i0.ɵɵelementStart(5, "div", 42);
782
+ i0.ɵɵelementStart(5, "div", 48);
766
783
  i0.ɵɵtext(6);
767
784
  i0.ɵɵelementEnd()();
768
785
  } if (rf & 2) {
@@ -770,13 +787,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Templat
770
787
  i0.ɵɵadvance(6);
771
788
  i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.PromptTime));
772
789
  } }
773
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_86_Template(rf, ctx) { if (rf & 1) {
774
- i0.ɵɵelementStart(0, "div", 36)(1, "div", 37);
775
- i0.ɵɵelement(2, "i", 133);
790
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Template(rf, ctx) { if (rf & 1) {
791
+ i0.ɵɵelementStart(0, "div", 42)(1, "div", 43);
792
+ i0.ɵɵelement(2, "i", 146);
776
793
  i0.ɵɵelementStart(3, "h4");
777
794
  i0.ɵɵtext(4, "Completion Time");
778
795
  i0.ɵɵelementEnd()();
779
- i0.ɵɵelementStart(5, "div", 42);
796
+ i0.ɵɵelementStart(5, "div", 48);
780
797
  i0.ɵɵtext(6);
781
798
  i0.ɵɵelementEnd()();
782
799
  } if (rf & 2) {
@@ -784,11 +801,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_86_Templat
784
801
  i0.ɵɵadvance(6);
785
802
  i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.CompletionTime));
786
803
  } }
787
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template(rf, ctx) { if (rf & 1) {
788
- i0.ɵɵelementStart(0, "div", 48)(1, "span", 88);
804
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_93_Template(rf, ctx) { if (rf & 1) {
805
+ i0.ɵɵelementStart(0, "div", 54)(1, "span", 98);
789
806
  i0.ɵɵtext(2, "Execution Order:");
790
807
  i0.ɵɵelementEnd();
791
- i0.ɵɵelementStart(3, "span", 89);
808
+ i0.ɵɵelementStart(3, "span", 99);
792
809
  i0.ɵɵtext(4);
793
810
  i0.ɵɵelementEnd()();
794
811
  } if (rf & 2) {
@@ -796,23 +813,23 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Templat
796
813
  i0.ɵɵadvance(4);
797
814
  i0.ɵɵtextInterpolate(ctx_r1.record.ExecutionOrder);
798
815
  } }
799
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Template(rf, ctx) { if (rf & 1) {
800
- const _r12 = i0.ɵɵgetCurrentView();
801
- i0.ɵɵelementStart(0, "div", 48)(1, "span", 88);
816
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_94_Template(rf, ctx) { if (rf & 1) {
817
+ const _r13 = i0.ɵɵgetCurrentView();
818
+ i0.ɵɵelementStart(0, "div", 54)(1, "span", 98);
802
819
  i0.ɵɵtext(2, "Agent:");
803
820
  i0.ɵɵelementEnd();
804
- i0.ɵɵelementStart(3, "span", 134);
805
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Template_span_click_3_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Agents", ctx_r1.record.AgentID)); });
821
+ i0.ɵɵelementStart(3, "span", 147);
822
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_94_Template_span_click_3_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Agents", ctx_r1.record.AgentID)); });
806
823
  i0.ɵɵtext(4);
807
- i0.ɵɵelement(5, "i", 135);
824
+ i0.ɵɵelement(5, "i", 148);
808
825
  i0.ɵɵelementEnd()();
809
826
  } if (rf & 2) {
810
827
  const ctx_r1 = i0.ɵɵnextContext(2);
811
828
  i0.ɵɵadvance(4);
812
829
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent, " ");
813
830
  } }
814
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
815
- i0.ɵɵelementStart(0, "span", 115);
831
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
832
+ i0.ɵɵelementStart(0, "span", 128);
816
833
  i0.ɵɵtext(1);
817
834
  i0.ɵɵelementEnd();
818
835
  } if (rf & 2) {
@@ -820,22 +837,22 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_temp
820
837
  i0.ɵɵadvance();
821
838
  i0.ɵɵtextInterpolate1("(", ctx_r1.record.ValidationAttemptCount, " attempts)");
822
839
  } }
823
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
824
- i0.ɵɵelementStart(0, "span", 147);
840
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_ng_template_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
841
+ i0.ɵɵelementStart(0, "span", 161);
825
842
  i0.ɵɵtext(1, "Passed");
826
843
  i0.ɵɵelementEnd();
827
844
  } }
828
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
829
- i0.ɵɵelementStart(0, "span", 120);
845
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_ng_template_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
846
+ i0.ɵɵelementStart(0, "span", 133);
830
847
  i0.ɵɵtext(1, "Failed");
831
848
  i0.ɵɵelementEnd();
832
849
  } }
833
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Template(rf, ctx) { if (rf & 1) {
834
- i0.ɵɵelementStart(0, "span", 97);
835
- i0.ɵɵelement(1, "i", 146);
850
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_ng_template_1_Template(rf, ctx) { if (rf & 1) {
851
+ i0.ɵɵelementStart(0, "span", 110);
852
+ i0.ɵɵelement(1, "i", 160);
836
853
  i0.ɵɵtext(2, " Validation & Retries ");
837
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_3_Template, 2, 1, "span", 115);
838
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_4_Template, 2, 0, "span", 147)(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_5_Template, 2, 0, "span", 120);
854
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_ng_template_1_Conditional_3_Template, 2, 1, "span", 128);
855
+ i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_ng_template_1_Conditional_4_Template, 2, 0, "span", 161)(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_ng_template_1_Conditional_5_Template, 2, 0, "span", 133);
839
856
  i0.ɵɵelementEnd();
840
857
  } if (rf & 2) {
841
858
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -844,8 +861,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_temp
844
861
  i0.ɵɵadvance();
845
862
  i0.ɵɵconditional(ctx_r1.record.FinalValidationPassed ? 4 : ctx_r1.record.FinalValidationPassed === false ? 5 : -1);
846
863
  } }
847
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_31_Conditional_6_Template(rf, ctx) { if (rf & 1) {
848
- i0.ɵɵelementStart(0, "span", 148);
864
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_31_Conditional_6_Template(rf, ctx) { if (rf & 1) {
865
+ i0.ɵɵelementStart(0, "span", 162);
849
866
  i0.ɵɵtext(1);
850
867
  i0.ɵɵelementEnd();
851
868
  } if (rf & 2) {
@@ -853,15 +870,15 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditi
853
870
  i0.ɵɵadvance();
854
871
  i0.ɵɵtextInterpolate1("", ctx_r1.record.ValidationErrorCount, " validation errors");
855
872
  } }
856
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_31_Template(rf, ctx) { if (rf & 1) {
857
- i0.ɵɵelementStart(0, "div", 141)(1, "h5");
858
- i0.ɵɵelement(2, "i", 121);
873
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_31_Template(rf, ctx) { if (rf & 1) {
874
+ i0.ɵɵelementStart(0, "div", 155)(1, "h5");
875
+ i0.ɵɵelement(2, "i", 134);
859
876
  i0.ɵɵtext(3, " Final Validation Error");
860
877
  i0.ɵɵelementEnd();
861
878
  i0.ɵɵelementStart(4, "p");
862
879
  i0.ɵɵtext(5);
863
880
  i0.ɵɵelementEnd();
864
- i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_31_Conditional_6_Template, 2, 1, "span", 148);
881
+ i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_31_Conditional_6_Template, 2, 1, "span", 162);
865
882
  i0.ɵɵelementEnd();
866
883
  } if (rf & 2) {
867
884
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -870,9 +887,9 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditi
870
887
  i0.ɵɵadvance();
871
888
  i0.ɵɵconditional(ctx_r1.record && ctx_r1.record.ValidationErrorCount && ctx_r1.record.ValidationErrorCount > 0 ? 6 : -1);
872
889
  } }
873
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_32_Template(rf, ctx) { if (rf & 1) {
874
- i0.ɵɵelementStart(0, "div", 142)(1, "h5");
875
- i0.ɵɵelement(2, "i", 57);
890
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_32_Template(rf, ctx) { if (rf & 1) {
891
+ i0.ɵɵelementStart(0, "div", 156)(1, "h5");
892
+ i0.ɵɵelement(2, "i", 65);
876
893
  i0.ɵɵtext(3, " Most Common Error");
877
894
  i0.ɵɵelementEnd();
878
895
  i0.ɵɵelementStart(4, "p");
@@ -883,24 +900,24 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditi
883
900
  i0.ɵɵadvance(5);
884
901
  i0.ɵɵtextInterpolate(ctx_r1.record.CommonValidationError);
885
902
  } }
886
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_33_Template(rf, ctx) { if (rf & 1) {
887
- i0.ɵɵelementStart(0, "div", 143)(1, "h4");
903
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_33_Template(rf, ctx) { if (rf & 1) {
904
+ i0.ɵɵelementStart(0, "div", 157)(1, "h4");
888
905
  i0.ɵɵtext(2, "Retry Timeline");
889
906
  i0.ɵɵelementEnd();
890
- i0.ɵɵelementStart(3, "div", 149)(4, "div", 150);
891
- i0.ɵɵelement(5, "i", 91);
907
+ i0.ɵɵelementStart(3, "div", 163)(4, "div", 164);
908
+ i0.ɵɵelement(5, "i", 101);
892
909
  i0.ɵɵelementStart(6, "span");
893
910
  i0.ɵɵtext(7);
894
911
  i0.ɵɵpipe(8, "date");
895
912
  i0.ɵɵelementEnd()();
896
- i0.ɵɵelementStart(9, "div", 150);
897
- i0.ɵɵelement(10, "i", 133);
913
+ i0.ɵɵelementStart(9, "div", 164);
914
+ i0.ɵɵelement(10, "i", 146);
898
915
  i0.ɵɵelementStart(11, "span");
899
916
  i0.ɵɵtext(12);
900
917
  i0.ɵɵpipe(13, "date");
901
918
  i0.ɵɵelementEnd()();
902
- i0.ɵɵelementStart(14, "div", 150);
903
- i0.ɵɵelement(15, "i", 151);
919
+ i0.ɵɵelementStart(14, "div", 164);
920
+ i0.ɵɵelement(15, "i", 165);
904
921
  i0.ɵɵelementStart(16, "span");
905
922
  i0.ɵɵtext(17);
906
923
  i0.ɵɵelementEnd()()()();
@@ -913,84 +930,84 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditi
913
930
  i0.ɵɵadvance(5);
914
931
  i0.ɵɵtextInterpolate1("Total Retry Duration: ", ctx_r1.formatDuration(ctx_r1.record.TotalRetryDurationMS));
915
932
  } }
916
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Conditional_7_Conditional_2_Template(rf, ctx) { if (rf & 1) {
917
- i0.ɵɵelementStart(0, "span", 148);
933
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_34_For_5_Conditional_7_Conditional_2_Template(rf, ctx) { if (rf & 1) {
934
+ i0.ɵɵelementStart(0, "span", 162);
918
935
  i0.ɵɵtext(1);
919
936
  i0.ɵɵelementEnd();
920
937
  } if (rf & 2) {
921
- const attempt_r14 = i0.ɵɵnextContext(2).$implicit;
938
+ const attempt_r15 = i0.ɵɵnextContext(2).$implicit;
922
939
  i0.ɵɵadvance();
923
- i0.ɵɵtextInterpolate1("(", attempt_r14.validationErrorCount, " errors)");
940
+ i0.ɵɵtextInterpolate1("(", attempt_r15.validationErrorCount, " errors)");
924
941
  } }
925
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Conditional_7_Template(rf, ctx) { if (rf & 1) {
926
- i0.ɵɵelementStart(0, "span", 159);
942
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_34_For_5_Conditional_7_Template(rf, ctx) { if (rf & 1) {
943
+ i0.ɵɵelementStart(0, "span", 173);
927
944
  i0.ɵɵtext(1);
928
945
  i0.ɵɵelementEnd();
929
- i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Conditional_7_Conditional_2_Template, 2, 1, "span", 148);
946
+ i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_34_For_5_Conditional_7_Conditional_2_Template, 2, 1, "span", 162);
930
947
  } if (rf & 2) {
931
- const attempt_r14 = i0.ɵɵnextContext().$implicit;
948
+ const attempt_r15 = i0.ɵɵnextContext().$implicit;
932
949
  i0.ɵɵadvance();
933
- i0.ɵɵtextInterpolate(attempt_r14.errorMessage || "Unknown error");
950
+ i0.ɵɵtextInterpolate(attempt_r15.errorMessage || "Unknown error");
934
951
  i0.ɵɵadvance();
935
- i0.ɵɵconditional(attempt_r14.validationErrorCount > 0 ? 2 : -1);
952
+ i0.ɵɵconditional(attempt_r15.validationErrorCount > 0 ? 2 : -1);
936
953
  } }
937
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Conditional_8_Template(rf, ctx) { if (rf & 1) {
938
- i0.ɵɵelementStart(0, "span", 158);
954
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_34_For_5_Conditional_8_Template(rf, ctx) { if (rf & 1) {
955
+ i0.ɵɵelementStart(0, "span", 172);
939
956
  i0.ɵɵtext(1);
940
957
  i0.ɵɵelementEnd();
941
958
  } if (rf & 2) {
942
- const attempt_r14 = i0.ɵɵnextContext().$implicit;
959
+ const attempt_r15 = i0.ɵɵnextContext().$implicit;
943
960
  i0.ɵɵadvance();
944
- i0.ɵɵtextInterpolate1("Output: ", attempt_r14.outputLength, " chars");
961
+ i0.ɵɵtextInterpolate1("Output: ", attempt_r15.outputLength, " chars");
945
962
  } }
946
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Template(rf, ctx) { if (rf & 1) {
947
- i0.ɵɵelementStart(0, "div", 154)(1, "div", 155);
963
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_34_For_5_Template(rf, ctx) { if (rf & 1) {
964
+ i0.ɵɵelementStart(0, "div", 168)(1, "div", 169);
948
965
  i0.ɵɵelement(2, "i");
949
966
  i0.ɵɵtext(3);
950
967
  i0.ɵɵelementEnd();
951
- i0.ɵɵelementStart(4, "div", 156)(5, "span", 157);
968
+ i0.ɵɵelementStart(4, "div", 170)(5, "span", 171);
952
969
  i0.ɵɵtext(6);
953
970
  i0.ɵɵelementEnd();
954
- i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Conditional_7_Template, 3, 2);
955
- i0.ɵɵconditionalCreate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Conditional_8_Template, 2, 1, "span", 158);
971
+ i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_34_For_5_Conditional_7_Template, 3, 2);
972
+ i0.ɵɵconditionalCreate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_34_For_5_Conditional_8_Template, 2, 1, "span", 172);
956
973
  i0.ɵɵelementEnd()();
957
974
  } if (rf & 2) {
958
- const attempt_r14 = ctx.$implicit;
959
- i0.ɵɵclassProp("success", attempt_r14.success)("failed", !attempt_r14.success);
975
+ const attempt_r15 = ctx.$implicit;
976
+ i0.ɵɵclassProp("success", attempt_r15.success)("failed", !attempt_r15.success);
960
977
  i0.ɵɵadvance(2);
961
- i0.ɵɵclassMap(attempt_r14.success ? "fa-solid fa-check" : "fa-solid fa-times");
978
+ i0.ɵɵclassMap(attempt_r15.success ? "fa-solid fa-check" : "fa-solid fa-times");
962
979
  i0.ɵɵadvance();
963
- i0.ɵɵtextInterpolate1(" Attempt #", attempt_r14.attemptNumber, " ");
980
+ i0.ɵɵtextInterpolate1(" Attempt #", attempt_r15.attemptNumber, " ");
964
981
  i0.ɵɵadvance(3);
965
- i0.ɵɵtextInterpolate(attempt_r14.timestamp);
982
+ i0.ɵɵtextInterpolate(attempt_r15.timestamp);
966
983
  i0.ɵɵadvance();
967
- i0.ɵɵconditional(!attempt_r14.success ? 7 : -1);
984
+ i0.ɵɵconditional(!attempt_r15.success ? 7 : -1);
968
985
  i0.ɵɵadvance();
969
- i0.ɵɵconditional(attempt_r14.outputLength ? 8 : -1);
986
+ i0.ɵɵconditional(attempt_r15.outputLength ? 8 : -1);
970
987
  } }
971
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_Template(rf, ctx) { if (rf & 1) {
972
- i0.ɵɵelementStart(0, "div", 144)(1, "h4");
988
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_34_Template(rf, ctx) { if (rf & 1) {
989
+ i0.ɵɵelementStart(0, "div", 158)(1, "h4");
973
990
  i0.ɵɵtext(2, "Validation Attempts");
974
991
  i0.ɵɵelementEnd();
975
- i0.ɵɵelementStart(3, "div", 152);
976
- i0.ɵɵrepeaterCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Template, 9, 10, "div", 153, _forTrack0);
992
+ i0.ɵɵelementStart(3, "div", 166);
993
+ i0.ɵɵrepeaterCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_34_For_5_Template, 9, 10, "div", 167, _forTrack0);
977
994
  i0.ɵɵelementEnd()();
978
995
  } if (rf & 2) {
979
996
  const ctx_r1 = i0.ɵɵnextContext(3);
980
997
  i0.ɵɵadvance(4);
981
998
  i0.ɵɵrepeater(ctx_r1.validationAttempts);
982
999
  } }
983
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_35_Template(rf, ctx) { if (rf & 1) {
984
- const _r15 = i0.ɵɵgetCurrentView();
985
- i0.ɵɵelementStart(0, "div", 145)(1, "div", 107)(2, "h4", 128);
1000
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_35_Template(rf, ctx) { if (rf & 1) {
1001
+ const _r16 = i0.ɵɵgetCurrentView();
1002
+ i0.ɵɵelementStart(0, "div", 159)(1, "div", 120)(2, "h4", 141);
986
1003
  i0.ɵɵtext(3, "Validation Summary Details");
987
1004
  i0.ɵɵelementEnd();
988
- i0.ɵɵelementStart(4, "button", 110);
989
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_35_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedValidationSummary, "json", "Validation Summary")); });
990
- i0.ɵɵelement(5, "i", 111);
1005
+ i0.ɵɵelementStart(4, "button", 123);
1006
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_35_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedValidationSummary, "json", "Validation Summary")); });
1007
+ i0.ɵɵelement(5, "i", 124);
991
1008
  i0.ɵɵelementEnd()();
992
- i0.ɵɵelementStart(6, "div", 160)(7, "mj-code-editor", 161);
993
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_35_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationSummary, $event) || (ctx_r1.formattedValidationSummary = $event); return i0.ɵɵresetView($event); });
1009
+ i0.ɵɵelementStart(6, "div", 174)(7, "mj-code-editor", 175);
1010
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_35_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationSummary, $event) || (ctx_r1.formattedValidationSummary = $event); return i0.ɵɵresetView($event); });
994
1011
  i0.ɵɵelementEnd()()();
995
1012
  } if (rf & 2) {
996
1013
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -998,17 +1015,17 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditi
998
1015
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedValidationSummary);
999
1016
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
1000
1017
  } }
1001
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_36_Template(rf, ctx) { if (rf & 1) {
1002
- const _r16 = i0.ɵɵgetCurrentView();
1003
- i0.ɵɵelementStart(0, "div", 145)(1, "div", 107)(2, "h4", 128);
1018
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_36_Template(rf, ctx) { if (rf & 1) {
1019
+ const _r17 = i0.ɵɵgetCurrentView();
1020
+ i0.ɵɵelementStart(0, "div", 159)(1, "div", 120)(2, "h4", 141);
1004
1021
  i0.ɵɵtext(3, "Validation Attempts (Raw JSON)");
1005
1022
  i0.ɵɵelementEnd();
1006
- i0.ɵɵelementStart(4, "button", 110);
1007
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_36_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedValidationAttempts, "json", "Validation Attempts")); });
1008
- i0.ɵɵelement(5, "i", 111);
1023
+ i0.ɵɵelementStart(4, "button", 123);
1024
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_36_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedValidationAttempts, "json", "Validation Attempts")); });
1025
+ i0.ɵɵelement(5, "i", 124);
1009
1026
  i0.ɵɵelementEnd()();
1010
- i0.ɵɵelementStart(6, "div", 160)(7, "mj-code-editor", 162);
1011
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_36_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationAttempts, $event) || (ctx_r1.formattedValidationAttempts = $event); return i0.ɵɵresetView($event); });
1027
+ i0.ɵɵelementStart(6, "div", 174)(7, "mj-code-editor", 176);
1028
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_36_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationAttempts, $event) || (ctx_r1.formattedValidationAttempts = $event); return i0.ɵɵresetView($event); });
1012
1029
  i0.ɵɵelementEnd()()();
1013
1030
  } if (rf & 2) {
1014
1031
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1016,49 +1033,49 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditi
1016
1033
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedValidationAttempts);
1017
1034
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
1018
1035
  } }
1019
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Template(rf, ctx) { if (rf & 1) {
1020
- const _r13 = i0.ɵɵgetCurrentView();
1021
- i0.ɵɵelementStart(0, "mj-accordion-panel", 27);
1022
- i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onValidationPanelToggle($event)); });
1023
- i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Template, 6, 2, "ng-template", 28);
1024
- i0.ɵɵelementStart(2, "div", 29)(3, "div", 136)(4, "div", 137)(5, "h4");
1036
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Template(rf, ctx) { if (rf & 1) {
1037
+ const _r14 = i0.ɵɵgetCurrentView();
1038
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 149);
1039
+ i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onValidationPanelToggle($event)); });
1040
+ i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_ng_template_1_Template, 6, 2, "ng-template", 32);
1041
+ i0.ɵɵelementStart(2, "div", 33)(3, "div", 150)(4, "div", 151)(5, "h4");
1025
1042
  i0.ɵɵtext(6, "Validation Summary");
1026
1043
  i0.ɵɵelementEnd();
1027
- i0.ɵɵelementStart(7, "div", 138);
1044
+ i0.ɵɵelementStart(7, "div", 152);
1028
1045
  i0.ɵɵelement(8, "i");
1029
1046
  i0.ɵɵtext(9);
1030
1047
  i0.ɵɵelementEnd()();
1031
- i0.ɵɵelementStart(10, "div", 139)(11, "div", 140)(12, "div", 88);
1048
+ i0.ɵɵelementStart(10, "div", 153)(11, "div", 154)(12, "div", 98);
1032
1049
  i0.ɵɵtext(13, "Total Attempts");
1033
1050
  i0.ɵɵelementEnd();
1034
- i0.ɵɵelementStart(14, "div", 89);
1051
+ i0.ɵɵelementStart(14, "div", 99);
1035
1052
  i0.ɵɵtext(15);
1036
1053
  i0.ɵɵelementEnd()();
1037
- i0.ɵɵelementStart(16, "div", 140)(17, "div", 88);
1054
+ i0.ɵɵelementStart(16, "div", 154)(17, "div", 98);
1038
1055
  i0.ɵɵtext(18, "Successful");
1039
1056
  i0.ɵɵelementEnd();
1040
- i0.ɵɵelementStart(19, "div", 89);
1057
+ i0.ɵɵelementStart(19, "div", 99);
1041
1058
  i0.ɵɵtext(20);
1042
1059
  i0.ɵɵelementEnd()();
1043
- i0.ɵɵelementStart(21, "div", 140)(22, "div", 88);
1060
+ i0.ɵɵelementStart(21, "div", 154)(22, "div", 98);
1044
1061
  i0.ɵɵtext(23, "Behavior");
1045
1062
  i0.ɵɵelementEnd();
1046
- i0.ɵɵelementStart(24, "div", 89);
1063
+ i0.ɵɵelementStart(24, "div", 99);
1047
1064
  i0.ɵɵtext(25);
1048
1065
  i0.ɵɵelementEnd()();
1049
- i0.ɵɵelementStart(26, "div", 140)(27, "div", 88);
1066
+ i0.ɵɵelementStart(26, "div", 154)(27, "div", 98);
1050
1067
  i0.ɵɵtext(28, "Retry Strategy");
1051
1068
  i0.ɵɵelementEnd();
1052
- i0.ɵɵelementStart(29, "div", 89);
1069
+ i0.ɵɵelementStart(29, "div", 99);
1053
1070
  i0.ɵɵtext(30);
1054
1071
  i0.ɵɵelementEnd()()();
1055
- i0.ɵɵconditionalCreate(31, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_31_Template, 7, 2, "div", 141);
1056
- i0.ɵɵconditionalCreate(32, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_32_Template, 6, 1, "div", 142);
1072
+ i0.ɵɵconditionalCreate(31, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_31_Template, 7, 2, "div", 155);
1073
+ i0.ɵɵconditionalCreate(32, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_32_Template, 6, 1, "div", 156);
1057
1074
  i0.ɵɵelementEnd();
1058
- i0.ɵɵconditionalCreate(33, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_33_Template, 18, 9, "div", 143);
1059
- i0.ɵɵconditionalCreate(34, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_Template, 6, 0, "div", 144);
1060
- i0.ɵɵconditionalCreate(35, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_35_Template, 8, 4, "div", 145);
1061
- i0.ɵɵconditionalCreate(36, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_36_Template, 8, 4, "div", 145);
1075
+ i0.ɵɵconditionalCreate(33, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_33_Template, 18, 9, "div", 157);
1076
+ i0.ɵɵconditionalCreate(34, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_34_Template, 6, 0, "div", 158);
1077
+ i0.ɵɵconditionalCreate(35, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_35_Template, 8, 4, "div", 159);
1078
+ i0.ɵɵconditionalCreate(36, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Conditional_36_Template, 8, 4, "div", 159);
1062
1079
  i0.ɵɵelementEnd()();
1063
1080
  } if (rf & 2) {
1064
1081
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1090,8 +1107,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Templat
1090
1107
  i0.ɵɵadvance();
1091
1108
  i0.ɵɵconditional(ctx_r1.record.ValidationAttempts ? 36 : -1);
1092
1109
  } }
1093
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1094
- i0.ɵɵelementStart(0, "span", 115);
1110
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1111
+ i0.ɵɵelementStart(0, "span", 128);
1095
1112
  i0.ɵɵtext(1);
1096
1113
  i0.ɵɵelementEnd();
1097
1114
  } if (rf & 2) {
@@ -1099,47 +1116,47 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_ng_temp
1099
1116
  i0.ɵɵadvance();
1100
1117
  i0.ɵɵtextInterpolate1("(", ctx_r1.childRuns.length, " children)");
1101
1118
  } }
1102
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1103
- i0.ɵɵelementStart(0, "span", 97);
1104
- i0.ɵɵelement(1, "i", 165);
1119
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1120
+ i0.ɵɵelementStart(0, "span", 110);
1121
+ i0.ɵɵelement(1, "i", 179);
1105
1122
  i0.ɵɵtext(2, " Run Hierarchy ");
1106
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_ng_template_1_Conditional_3_Template, 2, 1, "span", 115);
1123
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_ng_template_1_Conditional_3_Template, 2, 1, "span", 128);
1107
1124
  i0.ɵɵelementEnd();
1108
1125
  } if (rf & 2) {
1109
1126
  const ctx_r1 = i0.ɵɵnextContext(3);
1110
1127
  i0.ɵɵadvance(3);
1111
1128
  i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 3 : -1);
1112
1129
  } }
1113
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1114
- const _r17 = i0.ɵɵgetCurrentView();
1115
- i0.ɵɵelementStart(0, "div", 163)(1, "h4");
1116
- i0.ɵɵelement(2, "i", 84);
1130
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1131
+ const _r18 = i0.ɵɵgetCurrentView();
1132
+ i0.ɵɵelementStart(0, "div", 177)(1, "h4");
1133
+ i0.ɵɵelement(2, "i", 94);
1117
1134
  i0.ɵɵtext(3, " Parent Run");
1118
1135
  i0.ɵɵelementEnd();
1119
- i0.ɵɵelementStart(4, "div", 166);
1120
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_3_Template_div_click_4_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", ctx_r1.parentRun.ID)); });
1121
- i0.ɵɵelementStart(5, "div", 167);
1136
+ i0.ɵɵelementStart(4, "div", 180);
1137
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Conditional_3_Template_div_click_4_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", ctx_r1.parentRun.ID)); });
1138
+ i0.ɵɵelementStart(5, "div", 181);
1122
1139
  i0.ɵɵelement(6, "i");
1123
1140
  i0.ɵɵelementEnd();
1124
- i0.ɵɵelementStart(7, "div", 168)(8, "div", 169);
1141
+ i0.ɵɵelementStart(7, "div", 182)(8, "div", 183);
1125
1142
  i0.ɵɵtext(9);
1126
- i0.ɵɵelementStart(10, "span", 170);
1143
+ i0.ɵɵelementStart(10, "span", 184);
1127
1144
  i0.ɵɵtext(11);
1128
1145
  i0.ɵɵelementEnd()();
1129
- i0.ɵɵelementStart(12, "div", 171)(13, "span");
1130
- i0.ɵɵelement(14, "i", 91);
1146
+ i0.ɵɵelementStart(12, "div", 185)(13, "span");
1147
+ i0.ɵɵelement(14, "i", 101);
1131
1148
  i0.ɵɵtext(15);
1132
1149
  i0.ɵɵelementEnd();
1133
1150
  i0.ɵɵelementStart(16, "span");
1134
- i0.ɵɵelement(17, "i", 43);
1151
+ i0.ɵɵelement(17, "i", 49);
1135
1152
  i0.ɵɵtext(18);
1136
1153
  i0.ɵɵelementEnd();
1137
1154
  i0.ɵɵelementStart(19, "span");
1138
- i0.ɵɵelement(20, "i", 96);
1155
+ i0.ɵɵelement(20, "i", 106);
1139
1156
  i0.ɵɵtext(21);
1140
1157
  i0.ɵɵpipe(22, "date");
1141
1158
  i0.ɵɵelementEnd()()();
1142
- i0.ɵɵelement(23, "i", 135);
1159
+ i0.ɵɵelement(23, "i", 148);
1143
1160
  i0.ɵɵelementEnd()();
1144
1161
  } if (rf & 2) {
1145
1162
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1158,85 +1175,85 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditi
1158
1175
  i0.ɵɵadvance(3);
1159
1176
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(22, 9, ctx_r1.parentRun.RunAt, "short"));
1160
1177
  } }
1161
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1162
- i0.ɵɵelementStart(0, "span", 176);
1178
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Conditional_4_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1179
+ i0.ɵɵelementStart(0, "span", 190);
1163
1180
  i0.ɵɵtext(1);
1164
1181
  i0.ɵɵelementEnd();
1165
1182
  } if (rf & 2) {
1166
- const childRun_r19 = i0.ɵɵnextContext().$implicit;
1183
+ const childRun_r20 = i0.ɵɵnextContext().$implicit;
1167
1184
  i0.ɵɵadvance();
1168
- i0.ɵɵtextInterpolate1("#", childRun_r19.ExecutionOrder);
1185
+ i0.ɵɵtextInterpolate1("#", childRun_r20.ExecutionOrder);
1169
1186
  } }
1170
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_For_6_Template(rf, ctx) { if (rf & 1) {
1171
- const _r18 = i0.ɵɵgetCurrentView();
1172
- i0.ɵɵelementStart(0, "div", 175);
1173
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_For_6_Template_div_click_0_listener() { const childRun_r19 = i0.ɵɵrestoreView(_r18).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", childRun_r19.ID)); });
1174
- i0.ɵɵelementStart(1, "div", 167);
1187
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Conditional_4_For_6_Template(rf, ctx) { if (rf & 1) {
1188
+ const _r19 = i0.ɵɵgetCurrentView();
1189
+ i0.ɵɵelementStart(0, "div", 189);
1190
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Conditional_4_For_6_Template_div_click_0_listener() { const childRun_r20 = i0.ɵɵrestoreView(_r19).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", childRun_r20.ID)); });
1191
+ i0.ɵɵelementStart(1, "div", 181);
1175
1192
  i0.ɵɵelement(2, "i");
1176
1193
  i0.ɵɵelementEnd();
1177
- i0.ɵɵelementStart(3, "div", 168)(4, "div", 169);
1194
+ i0.ɵɵelementStart(3, "div", 182)(4, "div", 183);
1178
1195
  i0.ɵɵtext(5);
1179
- i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_For_6_Conditional_6_Template, 2, 1, "span", 176);
1180
- i0.ɵɵelementStart(7, "span", 170);
1196
+ i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Conditional_4_For_6_Conditional_6_Template, 2, 1, "span", 190);
1197
+ i0.ɵɵelementStart(7, "span", 184);
1181
1198
  i0.ɵɵtext(8);
1182
1199
  i0.ɵɵelementEnd()();
1183
- i0.ɵɵelementStart(9, "div", 171)(10, "span", 16);
1200
+ i0.ɵɵelementStart(9, "div", 185)(10, "span", 18);
1184
1201
  i0.ɵɵelement(11, "i");
1185
1202
  i0.ɵɵtext(12);
1186
1203
  i0.ɵɵelementEnd();
1187
1204
  i0.ɵɵelementStart(13, "span");
1188
- i0.ɵɵelement(14, "i", 91);
1205
+ i0.ɵɵelement(14, "i", 101);
1189
1206
  i0.ɵɵtext(15);
1190
1207
  i0.ɵɵelementEnd();
1191
1208
  i0.ɵɵelementStart(16, "span");
1192
- i0.ɵɵelement(17, "i", 43);
1209
+ i0.ɵɵelement(17, "i", 49);
1193
1210
  i0.ɵɵtext(18);
1194
1211
  i0.ɵɵelementEnd()()();
1195
- i0.ɵɵelement(19, "i", 135);
1212
+ i0.ɵɵelement(19, "i", 148);
1196
1213
  i0.ɵɵelementEnd();
1197
1214
  } if (rf & 2) {
1198
- const childRun_r19 = ctx.$implicit;
1215
+ const childRun_r20 = ctx.$implicit;
1199
1216
  const ctx_r1 = i0.ɵɵnextContext(4);
1200
1217
  i0.ɵɵadvance();
1201
1218
  i0.ɵɵstyleProp("background-color", ctx_r1.getStatusColor() + "20");
1202
1219
  i0.ɵɵadvance();
1203
- i0.ɵɵclassMap("fa-solid " + ctx_r1.getRunTypeIcon(childRun_r19.RunType));
1220
+ i0.ɵɵclassMap("fa-solid " + ctx_r1.getRunTypeIcon(childRun_r20.RunType));
1204
1221
  i0.ɵɵadvance(3);
1205
- i0.ɵɵtextInterpolate1(" Child Run #", childRun_r19.ID.substring(0, 8), " ");
1222
+ i0.ɵɵtextInterpolate1(" Child Run #", childRun_r20.ID.substring(0, 8), " ");
1206
1223
  i0.ɵɵadvance();
1207
- i0.ɵɵconditional(childRun_r19.ExecutionOrder !== null ? 6 : -1);
1224
+ i0.ɵɵconditional(childRun_r20.ExecutionOrder !== null ? 6 : -1);
1208
1225
  i0.ɵɵadvance(2);
1209
- i0.ɵɵtextInterpolate(childRun_r19.RunType);
1226
+ i0.ɵɵtextInterpolate(childRun_r20.RunType);
1210
1227
  i0.ɵɵadvance(2);
1211
1228
  i0.ɵɵstyleProp("color", ctx_r1.getStatusColor());
1212
1229
  i0.ɵɵadvance();
1213
1230
  i0.ɵɵclassMap("fa-solid " + ctx_r1.getStatusIcon());
1214
1231
  i0.ɵɵadvance();
1215
- i0.ɵɵtextInterpolate1(" ", childRun_r19.Success ? "Success" : childRun_r19.ErrorMessage ? "Failed" : "Running", " ");
1232
+ i0.ɵɵtextInterpolate1(" ", childRun_r20.Success ? "Success" : childRun_r20.ErrorMessage ? "Failed" : "Running", " ");
1216
1233
  i0.ɵɵadvance(3);
1217
- i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(childRun_r19.ExecutionTimeMS));
1234
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(childRun_r20.ExecutionTimeMS));
1218
1235
  i0.ɵɵadvance(3);
1219
- i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(childRun_r19.TokensUsed));
1236
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(childRun_r20.TokensUsed));
1220
1237
  } }
1221
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1222
- i0.ɵɵelementStart(0, "div", 164)(1, "h4");
1223
- i0.ɵɵelement(2, "i", 172);
1238
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1239
+ i0.ɵɵelementStart(0, "div", 178)(1, "h4");
1240
+ i0.ɵɵelement(2, "i", 186);
1224
1241
  i0.ɵɵtext(3, " Child Runs");
1225
1242
  i0.ɵɵelementEnd();
1226
- i0.ɵɵelementStart(4, "div", 173);
1227
- i0.ɵɵrepeaterCreate(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_For_6_Template, 20, 14, "div", 174, _forTrack1);
1243
+ i0.ɵɵelementStart(4, "div", 187);
1244
+ i0.ɵɵrepeaterCreate(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Conditional_4_For_6_Template, 20, 14, "div", 188, _forTrack1);
1228
1245
  i0.ɵɵelementEnd()();
1229
1246
  } if (rf & 2) {
1230
1247
  const ctx_r1 = i0.ɵɵnextContext(3);
1231
1248
  i0.ɵɵadvance(5);
1232
1249
  i0.ɵɵrepeater(ctx_r1.childRuns);
1233
1250
  } }
1234
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Template(rf, ctx) { if (rf & 1) {
1235
- i0.ɵɵelementStart(0, "mj-accordion-panel", 49);
1236
- i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_ng_template_1_Template, 4, 1, "ng-template", 28);
1237
- i0.ɵɵelementStart(2, "div", 29);
1238
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_3_Template, 24, 12, "div", 163);
1239
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Template, 7, 0, "div", 164);
1251
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Template(rf, ctx) { if (rf & 1) {
1252
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 56);
1253
+ i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_ng_template_1_Template, 4, 1, "ng-template", 32);
1254
+ i0.ɵɵelementStart(2, "div", 33);
1255
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Conditional_3_Template, 24, 12, "div", 177);
1256
+ i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Conditional_4_Template, 7, 0, "div", 178);
1240
1257
  i0.ɵɵelementEnd()();
1241
1258
  } if (rf & 2) {
1242
1259
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1246,33 +1263,33 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Templat
1246
1263
  i0.ɵɵadvance();
1247
1264
  i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 4 : -1);
1248
1265
  } }
1249
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_93_Template(rf, ctx) { if (rf & 1) {
1250
- i0.ɵɵelementStart(0, "span", 97);
1251
- i0.ɵɵelement(1, "i", 62);
1266
+ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_98_Template(rf, ctx) { if (rf & 1) {
1267
+ i0.ɵɵelementStart(0, "span", 110);
1268
+ i0.ɵɵelement(1, "i", 72);
1252
1269
  i0.ɵɵtext(2, " Additional Details ");
1253
1270
  i0.ɵɵelementEnd();
1254
1271
  } }
1255
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Template(rf, ctx) { if (rf & 1) {
1256
- const _r20 = i0.ɵɵgetCurrentView();
1257
- i0.ɵɵelementStart(0, "div", 51)(1, "label");
1272
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_101_Template(rf, ctx) { if (rf & 1) {
1273
+ const _r21 = i0.ɵɵgetCurrentView();
1274
+ i0.ɵɵelementStart(0, "div", 59)(1, "label");
1258
1275
  i0.ɵɵtext(2, "Agent");
1259
1276
  i0.ɵɵelementEnd();
1260
- i0.ɵɵelementStart(3, "div", 177);
1261
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Agents", ctx_r1.record.AgentID)); });
1262
- i0.ɵɵelement(4, "i", 178);
1277
+ i0.ɵɵelementStart(3, "div", 191);
1278
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_101_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Agents", ctx_r1.record.AgentID)); });
1279
+ i0.ɵɵelement(4, "i", 192);
1263
1280
  i0.ɵɵtext(5);
1264
- i0.ɵɵelement(6, "i", 135);
1281
+ i0.ɵɵelement(6, "i", 148);
1265
1282
  i0.ɵɵelementEnd()();
1266
1283
  } if (rf & 2) {
1267
1284
  const ctx_r1 = i0.ɵɵnextContext(2);
1268
1285
  i0.ɵɵadvance(5);
1269
1286
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent || "Unknown", " ");
1270
1287
  } }
1271
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_97_Template(rf, ctx) { if (rf & 1) {
1272
- i0.ɵɵelementStart(0, "div", 51)(1, "label");
1288
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_102_Template(rf, ctx) { if (rf & 1) {
1289
+ i0.ɵɵelementStart(0, "div", 59)(1, "label");
1273
1290
  i0.ɵɵtext(2, "Run Type");
1274
1291
  i0.ɵɵelementEnd();
1275
- i0.ɵɵelementStart(3, "div", 52);
1292
+ i0.ɵɵelementStart(3, "div", 60);
1276
1293
  i0.ɵɵelement(4, "i");
1277
1294
  i0.ɵɵtext(5);
1278
1295
  i0.ɵɵelementEnd()();
@@ -1283,12 +1300,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_97_Templat
1283
1300
  i0.ɵɵadvance();
1284
1301
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.RunType, " ");
1285
1302
  } }
1286
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_98_Template(rf, ctx) { if (rf & 1) {
1287
- i0.ɵɵelementStart(0, "div", 51)(1, "label");
1303
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_103_Template(rf, ctx) { if (rf & 1) {
1304
+ i0.ɵɵelementStart(0, "div", 59)(1, "label");
1288
1305
  i0.ɵɵtext(2, "Response Format");
1289
1306
  i0.ɵɵelementEnd();
1290
- i0.ɵɵelementStart(3, "div", 52);
1291
- i0.ɵɵelement(4, "i", 94);
1307
+ i0.ɵɵelementStart(3, "div", 60);
1308
+ i0.ɵɵelement(4, "i", 104);
1292
1309
  i0.ɵɵtext(5);
1293
1310
  i0.ɵɵelementEnd()();
1294
1311
  } if (rf & 2) {
@@ -1296,12 +1313,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_98_Templat
1296
1313
  i0.ɵɵadvance(5);
1297
1314
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.ResponseFormat, " ");
1298
1315
  } }
1299
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_153_Template(rf, ctx) { if (rf & 1) {
1300
- i0.ɵɵelementStart(0, "div", 51)(1, "label");
1316
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_158_Template(rf, ctx) { if (rf & 1) {
1317
+ i0.ɵɵelementStart(0, "div", 59)(1, "label");
1301
1318
  i0.ɵɵtext(2, "Started At");
1302
1319
  i0.ɵɵelementEnd();
1303
- i0.ɵɵelementStart(3, "div", 52);
1304
- i0.ɵɵelement(4, "i", 91);
1320
+ i0.ɵɵelementStart(3, "div", 60);
1321
+ i0.ɵɵelement(4, "i", 101);
1305
1322
  i0.ɵɵtext(5);
1306
1323
  i0.ɵɵpipe(6, "date");
1307
1324
  i0.ɵɵelementEnd()();
@@ -1310,12 +1327,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_153_Templa
1310
1327
  i0.ɵɵadvance(5);
1311
1328
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.RunAt, "medium"), " ");
1312
1329
  } }
1313
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template(rf, ctx) { if (rf & 1) {
1314
- i0.ɵɵelementStart(0, "div", 51)(1, "label");
1330
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_159_Template(rf, ctx) { if (rf & 1) {
1331
+ i0.ɵɵelementStart(0, "div", 59)(1, "label");
1315
1332
  i0.ɵɵtext(2, "Completed At");
1316
1333
  i0.ɵɵelementEnd();
1317
- i0.ɵɵelementStart(3, "div", 52);
1318
- i0.ɵɵelement(4, "i", 179);
1334
+ i0.ɵɵelementStart(3, "div", 60);
1335
+ i0.ɵɵelement(4, "i", 193);
1319
1336
  i0.ɵɵtext(5);
1320
1337
  i0.ɵɵpipe(6, "date");
1321
1338
  i0.ɵɵelementEnd()();
@@ -1324,30 +1341,30 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Templa
1324
1341
  i0.ɵɵadvance(5);
1325
1342
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.CompletedAt, "medium"), " ");
1326
1343
  } }
1327
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_155_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1328
- i0.ɵɵelementStart(0, "span", 97);
1329
- i0.ɵɵelement(1, "i", 82);
1344
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_160_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1345
+ i0.ɵɵelementStart(0, "span", 110);
1346
+ i0.ɵɵelement(1, "i", 92);
1330
1347
  i0.ɵɵtext(2, " Model Specific Response Details ");
1331
- i0.ɵɵelementStart(3, "span", 99);
1348
+ i0.ɵɵelementStart(3, "span", 112);
1332
1349
  i0.ɵɵtext(4, "JSON");
1333
1350
  i0.ɵɵelementEnd()();
1334
1351
  } }
1335
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_155_Template(rf, ctx) { if (rf & 1) {
1336
- const _r21 = i0.ɵɵgetCurrentView();
1337
- i0.ɵɵelementStart(0, "mj-accordion-panel", 27);
1338
- i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_155_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onModelSpecificPanelToggle($event)); });
1339
- i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_155_ng_template_1_Template, 5, 0, "ng-template", 28);
1340
- i0.ɵɵelementStart(2, "div", 29)(3, "div", 33)(4, "div", 107)(5, "button", 108);
1341
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_155_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedModelSpecificResponseDetails, "Model Specific Response Details")); });
1342
- i0.ɵɵelement(6, "i", 109);
1352
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_160_Template(rf, ctx) { if (rf & 1) {
1353
+ const _r22 = i0.ɵɵgetCurrentView();
1354
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 194);
1355
+ i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_160_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onModelSpecificPanelToggle($event)); });
1356
+ i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_160_ng_template_1_Template, 5, 0, "ng-template", 32);
1357
+ i0.ɵɵelementStart(2, "div", 33)(3, "div", 38)(4, "div", 120)(5, "button", 121);
1358
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_160_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedModelSpecificResponseDetails, "Model Specific Response Details")); });
1359
+ i0.ɵɵelement(6, "i", 122);
1343
1360
  i0.ɵɵtext(7, " Copy ");
1344
1361
  i0.ɵɵelementEnd();
1345
- i0.ɵɵelementStart(8, "button", 110);
1346
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_155_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedModelSpecificResponseDetails, "json", "Model Specific Response Details")); });
1347
- i0.ɵɵelement(9, "i", 111);
1362
+ i0.ɵɵelementStart(8, "button", 123);
1363
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_160_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedModelSpecificResponseDetails, "json", "Model Specific Response Details")); });
1364
+ i0.ɵɵelement(9, "i", 124);
1348
1365
  i0.ɵɵelementEnd()();
1349
- i0.ɵɵelementStart(10, "mj-code-editor", 180);
1350
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_155_Template_mj_code_editor_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedModelSpecificResponseDetails, $event) || (ctx_r1.formattedModelSpecificResponseDetails = $event); return i0.ɵɵresetView($event); });
1366
+ i0.ɵɵelementStart(10, "mj-code-editor", 195);
1367
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_160_Template_mj_code_editor_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedModelSpecificResponseDetails, $event) || (ctx_r1.formattedModelSpecificResponseDetails = $event); return i0.ɵɵresetView($event); });
1351
1368
  i0.ɵɵelementEnd()()()();
1352
1369
  } if (rf & 2) {
1353
1370
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1356,22 +1373,22 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_155_Templa
1356
1373
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedModelSpecificResponseDetails);
1357
1374
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
1358
1375
  } }
1359
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_157_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1360
- i0.ɵɵelementStart(0, "span", 147);
1376
+ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_162_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1377
+ i0.ɵɵelementStart(0, "span", 161);
1361
1378
  i0.ɵɵtext(1, "Cached");
1362
1379
  i0.ɵɵelementEnd();
1363
1380
  } }
1364
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_157_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1365
- i0.ɵɵelementStart(0, "span", 147);
1381
+ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_162_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1382
+ i0.ɵɵelementStart(0, "span", 161);
1366
1383
  i0.ɵɵtext(1, "Selected");
1367
1384
  i0.ɵɵelementEnd();
1368
1385
  } }
1369
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_157_Template(rf, ctx) { if (rf & 1) {
1370
- i0.ɵɵelementStart(0, "span", 97);
1371
- i0.ɵɵelement(1, "i", 82);
1386
+ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_162_Template(rf, ctx) { if (rf & 1) {
1387
+ i0.ɵɵelementStart(0, "span", 110);
1388
+ i0.ɵɵelement(1, "i", 92);
1372
1389
  i0.ɵɵtext(2, " Model Selection & Performance ");
1373
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_157_Conditional_3_Template, 2, 0, "span", 147);
1374
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_157_Conditional_4_Template, 2, 0, "span", 147);
1390
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_162_Conditional_3_Template, 2, 0, "span", 161);
1391
+ i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_162_Conditional_4_Template, 2, 0, "span", 161);
1375
1392
  i0.ɵɵelementEnd();
1376
1393
  } if (rf & 2) {
1377
1394
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1380,12 +1397,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_157_Templa
1380
1397
  i0.ɵɵadvance();
1381
1398
  i0.ɵɵconditional(ctx_r1.record.WasSelectedResult ? 4 : -1);
1382
1399
  } }
1383
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_184_Template(rf, ctx) { if (rf & 1) {
1384
- i0.ɵɵelementStart(0, "div", 65)(1, "label");
1400
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_189_Template(rf, ctx) { if (rf & 1) {
1401
+ i0.ɵɵelementStart(0, "div", 75)(1, "label");
1385
1402
  i0.ɵɵtext(2, "Cache Key");
1386
1403
  i0.ɵɵelementEnd();
1387
- i0.ɵɵelementStart(3, "div", 52);
1388
- i0.ɵɵelement(4, "i", 181);
1404
+ i0.ɵɵelementStart(3, "div", 60);
1405
+ i0.ɵɵelement(4, "i", 196);
1389
1406
  i0.ɵɵelementStart(5, "code");
1390
1407
  i0.ɵɵtext(6);
1391
1408
  i0.ɵɵelementEnd()()();
@@ -1394,28 +1411,28 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_184_Templa
1394
1411
  i0.ɵɵadvance(6);
1395
1412
  i0.ɵɵtextInterpolate(ctx_r1.record.CacheKey);
1396
1413
  } }
1397
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_185_Template(rf, ctx) { if (rf & 1) {
1398
- const _r22 = i0.ɵɵgetCurrentView();
1399
- i0.ɵɵelementStart(0, "div", 51)(1, "label");
1414
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_190_Template(rf, ctx) { if (rf & 1) {
1415
+ const _r23 = i0.ɵɵgetCurrentView();
1416
+ i0.ɵɵelementStart(0, "div", 59)(1, "label");
1400
1417
  i0.ɵɵtext(2, "Judge Prompt");
1401
1418
  i0.ɵɵelementEnd();
1402
- i0.ɵɵelementStart(3, "div", 182);
1403
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_185_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.record.JudgeID)); });
1404
- i0.ɵɵelement(4, "i", 183);
1419
+ i0.ɵɵelementStart(3, "div", 197);
1420
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_190_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.record.JudgeID)); });
1421
+ i0.ɵɵelement(4, "i", 198);
1405
1422
  i0.ɵɵtext(5);
1406
- i0.ɵɵelement(6, "i", 135);
1423
+ i0.ɵɵelement(6, "i", 148);
1407
1424
  i0.ɵɵelementEnd()();
1408
1425
  } if (rf & 2) {
1409
1426
  const ctx_r1 = i0.ɵɵnextContext(2);
1410
1427
  i0.ɵɵadvance(5);
1411
1428
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Judge || "Unknown", " ");
1412
1429
  } }
1413
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_186_Template(rf, ctx) { if (rf & 1) {
1414
- i0.ɵɵelementStart(0, "div", 51)(1, "label");
1430
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_191_Template(rf, ctx) { if (rf & 1) {
1431
+ i0.ɵɵelementStart(0, "div", 59)(1, "label");
1415
1432
  i0.ɵɵtext(2, "Judge Score");
1416
1433
  i0.ɵɵelementEnd();
1417
- i0.ɵɵelementStart(3, "div", 52);
1418
- i0.ɵɵelement(4, "i", 184);
1434
+ i0.ɵɵelementStart(3, "div", 60);
1435
+ i0.ɵɵelement(4, "i", 199);
1419
1436
  i0.ɵɵtext(5);
1420
1437
  i0.ɵɵelementEnd()();
1421
1438
  } if (rf & 2) {
@@ -1423,12 +1440,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_186_Templa
1423
1440
  i0.ɵɵadvance(5);
1424
1441
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.JudgeScore, " ");
1425
1442
  } }
1426
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Template(rf, ctx) { if (rf & 1) {
1427
- i0.ɵɵelementStart(0, "div", 51)(1, "label");
1443
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_204_Template(rf, ctx) { if (rf & 1) {
1444
+ i0.ɵɵelementStart(0, "div", 59)(1, "label");
1428
1445
  i0.ɵɵtext(2, "First Token Time");
1429
1446
  i0.ɵɵelementEnd();
1430
- i0.ɵɵelementStart(3, "div", 52);
1431
- i0.ɵɵelement(4, "i", 95);
1447
+ i0.ɵɵelementStart(3, "div", 60);
1448
+ i0.ɵɵelement(4, "i", 105);
1432
1449
  i0.ɵɵtext(5);
1433
1450
  i0.ɵɵelementEnd()();
1434
1451
  } if (rf & 2) {
@@ -1436,12 +1453,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Templa
1436
1453
  i0.ɵɵadvance(5);
1437
1454
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.FirstTokenTime, " ms ");
1438
1455
  } }
1439
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1440
- i0.ɵɵelementStart(0, "div", 65)(1, "label");
1456
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_205_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1457
+ i0.ɵɵelementStart(0, "div", 75)(1, "label");
1441
1458
  i0.ɵɵtext(2, "Cancellation Reason");
1442
1459
  i0.ɵɵelementEnd();
1443
- i0.ɵɵelementStart(3, "div", 52);
1444
- i0.ɵɵelement(4, "i", 187);
1460
+ i0.ɵɵelementStart(3, "div", 60);
1461
+ i0.ɵɵelement(4, "i", 202);
1445
1462
  i0.ɵɵtext(5);
1446
1463
  i0.ɵɵelementEnd()();
1447
1464
  } if (rf & 2) {
@@ -1449,31 +1466,31 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Condit
1449
1466
  i0.ɵɵadvance(5);
1450
1467
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.CancellationReason, " ");
1451
1468
  } }
1452
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Template(rf, ctx) { if (rf & 1) {
1453
- i0.ɵɵelementStart(0, "div", 51)(1, "label");
1469
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_205_Template(rf, ctx) { if (rf & 1) {
1470
+ i0.ɵɵelementStart(0, "div", 59)(1, "label");
1454
1471
  i0.ɵɵtext(2, "Cancelled");
1455
1472
  i0.ɵɵelementEnd();
1456
- i0.ɵɵelementStart(3, "div", 185);
1457
- i0.ɵɵelement(4, "i", 186);
1473
+ i0.ɵɵelementStart(3, "div", 200);
1474
+ i0.ɵɵelement(4, "i", 201);
1458
1475
  i0.ɵɵtext(5, " Yes ");
1459
1476
  i0.ɵɵelementEnd()();
1460
- i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Conditional_6_Template, 6, 1, "div", 65);
1477
+ i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_205_Conditional_6_Template, 6, 1, "div", 75);
1461
1478
  } if (rf & 2) {
1462
1479
  const ctx_r1 = i0.ɵɵnextContext(2);
1463
1480
  i0.ɵɵadvance(6);
1464
1481
  i0.ɵɵconditional(ctx_r1.record.CancellationReason ? 6 : -1);
1465
1482
  } }
1466
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Template(rf, ctx) { if (rf & 1) {
1467
- const _r23 = i0.ɵɵgetCurrentView();
1468
- i0.ɵɵelementStart(0, "div", 66)(1, "div", 107)(2, "h4", 128);
1483
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_206_Template(rf, ctx) { if (rf & 1) {
1484
+ const _r24 = i0.ɵɵgetCurrentView();
1485
+ i0.ɵɵelementStart(0, "div", 76)(1, "div", 120)(2, "h4", 141);
1469
1486
  i0.ɵɵtext(3, "Model Selection Details");
1470
1487
  i0.ɵɵelementEnd();
1471
- i0.ɵɵelementStart(4, "button", 110);
1472
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedModelSelection, "json", "Model Selection")); });
1473
- i0.ɵɵelement(5, "i", 111);
1488
+ i0.ɵɵelementStart(4, "button", 123);
1489
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_206_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedModelSelection, "json", "Model Selection")); });
1490
+ i0.ɵɵelement(5, "i", 124);
1474
1491
  i0.ɵɵelementEnd()();
1475
- i0.ɵɵelementStart(6, "div", 160)(7, "mj-code-editor", 188);
1476
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedModelSelection, $event) || (ctx_r1.formattedModelSelection = $event); return i0.ɵɵresetView($event); });
1492
+ i0.ɵɵelementStart(6, "div", 174)(7, "mj-code-editor", 203);
1493
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_206_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedModelSelection, $event) || (ctx_r1.formattedModelSelection = $event); return i0.ɵɵresetView($event); });
1477
1494
  i0.ɵɵelementEnd()()();
1478
1495
  } if (rf & 2) {
1479
1496
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1481,17 +1498,17 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Templa
1481
1498
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedModelSelection);
1482
1499
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
1483
1500
  } }
1484
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_202_Template(rf, ctx) { if (rf & 1) {
1485
- const _r24 = i0.ɵɵgetCurrentView();
1486
- i0.ɵɵelementStart(0, "div", 67)(1, "div", 107)(2, "h4", 128);
1501
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_207_Template(rf, ctx) { if (rf & 1) {
1502
+ const _r25 = i0.ɵɵgetCurrentView();
1503
+ i0.ɵɵelementStart(0, "div", 77)(1, "div", 120)(2, "h4", 141);
1487
1504
  i0.ɵɵtext(3, "Error Details");
1488
1505
  i0.ɵɵelementEnd();
1489
- i0.ɵɵelementStart(4, "button", 110);
1490
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_202_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedErrorDetails, "json", "Error Details")); });
1491
- i0.ɵɵelement(5, "i", 111);
1506
+ i0.ɵɵelementStart(4, "button", 123);
1507
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_207_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedErrorDetails, "json", "Error Details")); });
1508
+ i0.ɵɵelement(5, "i", 124);
1492
1509
  i0.ɵɵelementEnd()();
1493
- i0.ɵɵelementStart(6, "div", 160)(7, "mj-code-editor", 189);
1494
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_202_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedErrorDetails, $event) || (ctx_r1.formattedErrorDetails = $event); return i0.ɵɵresetView($event); });
1510
+ i0.ɵɵelementStart(6, "div", 174)(7, "mj-code-editor", 204);
1511
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_207_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedErrorDetails, $event) || (ctx_r1.formattedErrorDetails = $event); return i0.ɵɵresetView($event); });
1495
1512
  i0.ɵɵelementEnd()()();
1496
1513
  } if (rf & 2) {
1497
1514
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1509,237 +1526,251 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1509
1526
  i0.ɵɵelementStart(8, "div", 9)(9, "h1", 10);
1510
1527
  i0.ɵɵtext(10, " Prompt Run ");
1511
1528
  i0.ɵɵconditionalCreate(11, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_11_Template, 2, 1, "span", 11);
1529
+ i0.ɵɵelementStart(12, "span", 12);
1530
+ i0.ɵɵelement(13, "i", 13);
1531
+ i0.ɵɵtext(14);
1532
+ i0.ɵɵelementEnd()();
1533
+ i0.ɵɵelementStart(15, "div", 14)(16, "div", 15)(17, "div", 16);
1534
+ i0.ɵɵtext(18, "Status");
1512
1535
  i0.ɵɵelementEnd();
1513
- i0.ɵɵelementStart(12, "div", 12)(13, "div", 13)(14, "div", 14);
1514
- i0.ɵɵtext(15, "Status");
1515
- i0.ɵɵelementEnd();
1516
- i0.ɵɵelementStart(16, "div", 15);
1517
- i0.ɵɵelement(17, "span", 16)(18, "i");
1518
- i0.ɵɵtext(19);
1536
+ i0.ɵɵelementStart(19, "div", 17);
1537
+ i0.ɵɵelement(20, "span", 18)(21, "i");
1538
+ i0.ɵɵtext(22);
1519
1539
  i0.ɵɵelementEnd()();
1520
- i0.ɵɵconditionalCreate(20, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_20_Template, 6, 5, "div", 17);
1521
- i0.ɵɵconditionalCreate(21, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Template, 2, 1);
1522
- i0.ɵɵconditionalCreate(22, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Template, 8, 2, "div", 18);
1523
- i0.ɵɵconditionalCreate(23, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_23_Template, 4, 0, "span", 19);
1540
+ i0.ɵɵconditionalCreate(23, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_23_Template, 6, 5, "div", 19);
1541
+ i0.ɵɵconditionalCreate(24, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_24_Template, 2, 1);
1542
+ i0.ɵɵconditionalCreate(25, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_25_Template, 8, 2, "div", 20);
1543
+ i0.ɵɵconditionalCreate(26, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_26_Template, 4, 0, "span", 21);
1524
1544
  i0.ɵɵelementEnd()()();
1525
- i0.ɵɵelementStart(24, "div", 20)(25, "button", 21);
1526
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_button_click_25_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.reRunPrompt()); });
1527
- i0.ɵɵelement(26, "i", 22);
1528
- i0.ɵɵtext(27, " Re-Run ");
1529
- i0.ɵɵelementEnd();
1530
- i0.ɵɵelementStart(28, "button", 23);
1531
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.refreshData()); });
1545
+ i0.ɵɵelementStart(27, "div", 22)(28, "button", 23);
1546
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.reRunPrompt()); });
1532
1547
  i0.ɵɵelement(29, "i", 24);
1548
+ i0.ɵɵtext(30, " Re-Run ");
1549
+ i0.ɵɵelementEnd();
1550
+ i0.ɵɵelementStart(31, "button", 25);
1551
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_button_click_31_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.refreshData()); });
1552
+ i0.ɵɵelement(32, "i", 26);
1533
1553
  i0.ɵɵelementEnd()()();
1534
- i0.ɵɵconditionalCreate(30, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Template, 38, 11)(31, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Template, 24, 5, "div", 25);
1535
- i0.ɵɵelementEnd();
1536
- i0.ɵɵelementStart(32, "div", 26)(33, "mj-accordion-panel", 27);
1537
- i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_33_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onInputPanelToggle($event)); });
1538
- i0.ɵɵtemplate(34, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Template, 4, 1, "ng-template", 28);
1539
- i0.ɵɵelementStart(35, "div", 29);
1540
- i0.ɵɵconditionalCreate(36, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template, 24, 12, "div", 30)(37, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_37_Template, 1, 0, "mj-empty-state", 31);
1541
- i0.ɵɵelementEnd()();
1542
- i0.ɵɵelementStart(38, "mj-accordion-panel", 27);
1543
- i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_38_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onResultPanelToggle($event)); });
1544
- i0.ɵɵtemplate(39, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Template, 5, 2, "ng-template", 28);
1545
- i0.ɵɵelementStart(40, "div", 29);
1546
- i0.ɵɵconditionalCreate(41, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Template, 7, 1, "div", 32);
1547
- i0.ɵɵconditionalCreate(42, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template, 8, 4, "div", 33)(43, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Template, 2, 1, "mj-empty-state", 34);
1548
- i0.ɵɵelementEnd()();
1549
- i0.ɵɵelementStart(44, "mj-accordion-panel", 27);
1550
- i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_44_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onMetricsPanelToggle($event)); });
1551
- i0.ɵɵtemplate(45, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_45_Template, 3, 0, "ng-template", 28);
1552
- i0.ɵɵelementStart(46, "div", 29)(47, "div", 35)(48, "div", 36)(49, "div", 37);
1553
- i0.ɵɵelement(50, "i", 38);
1554
- i0.ɵɵelementStart(51, "h4");
1555
- i0.ɵɵtext(52, "Prompt Tokens");
1556
- i0.ɵɵelementEnd()();
1557
- i0.ɵɵelementStart(53, "div", 39);
1558
- i0.ɵɵtext(54);
1559
- i0.ɵɵelementEnd();
1560
- i0.ɵɵconditionalCreate(55, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_55_Template, 3, 1, "div", 40);
1561
- i0.ɵɵconditionalCreate(56, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_56_Template, 3, 1, "div", 40);
1562
- i0.ɵɵelementEnd();
1563
- i0.ɵɵelementStart(57, "div", 36)(58, "div", 37);
1564
- i0.ɵɵelement(59, "i", 41);
1565
- i0.ɵɵelementStart(60, "h4");
1566
- i0.ɵɵtext(61, "Completion Tokens");
1567
- i0.ɵɵelementEnd()();
1568
- i0.ɵɵelementStart(62, "div", 42);
1569
- i0.ɵɵtext(63);
1570
- i0.ɵɵelementEnd();
1571
- i0.ɵɵconditionalCreate(64, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_64_Template, 3, 1, "div", 40);
1572
- i0.ɵɵelementEnd();
1573
- i0.ɵɵelementStart(65, "div", 36)(66, "div", 37);
1574
- i0.ɵɵelement(67, "i", 43);
1575
- i0.ɵɵelementStart(68, "h4");
1576
- i0.ɵɵtext(69, "Total Tokens");
1577
- i0.ɵɵelementEnd()();
1578
- i0.ɵɵelementStart(70, "div", 44);
1579
- i0.ɵɵtext(71);
1580
- i0.ɵɵelementEnd();
1581
- i0.ɵɵconditionalCreate(72, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_72_Template, 3, 1, "div", 40);
1582
- i0.ɵɵconditionalCreate(73, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Template, 3, 1, "div", 40);
1583
- i0.ɵɵelementEnd();
1584
- i0.ɵɵconditionalCreate(74, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_74_Template, 9, 3, "div", 36);
1585
- i0.ɵɵelementStart(75, "div", 36)(76, "div", 37);
1586
- i0.ɵɵelement(77, "i", 45);
1587
- i0.ɵɵelementStart(78, "h4");
1588
- i0.ɵɵtext(79, "Cost");
1589
- i0.ɵɵelementEnd()();
1590
- i0.ɵɵelementStart(80, "div", 42);
1591
- i0.ɵɵtext(81);
1592
- i0.ɵɵelementEnd();
1593
- i0.ɵɵconditionalCreate(82, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Template, 3, 1, "div", 40);
1594
- i0.ɵɵconditionalCreate(83, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Template, 2, 1, "div", 46);
1595
- i0.ɵɵelementEnd();
1596
- i0.ɵɵconditionalCreate(84, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_84_Template, 7, 1, "div", 36);
1597
- i0.ɵɵconditionalCreate(85, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Template, 7, 1, "div", 36);
1598
- i0.ɵɵconditionalCreate(86, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_86_Template, 7, 1, "div", 36);
1599
- i0.ɵɵelementEnd();
1600
- i0.ɵɵelementStart(87, "div", 47);
1601
- i0.ɵɵconditionalCreate(88, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template, 5, 1, "div", 48);
1602
- i0.ɵɵconditionalCreate(89, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Template, 6, 1, "div", 48);
1554
+ i0.ɵɵconditionalCreate(33, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_33_Template, 38, 11)(34, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_34_Template, 24, 5, "div", 27);
1555
+ i0.ɵɵconditionalCreate(35, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_35_Template, 4, 2, "button", 28);
1556
+ i0.ɵɵelementEnd();
1557
+ i0.ɵɵelementStart(36, "div", 29)(37, "mj-accordion-sections", 30);
1558
+ i0.ɵɵlistener("ActiveKeyChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_sections_ActiveKeyChange_37_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Phone.Pick($event)); });
1559
+ i0.ɵɵelementStart(38, "mj-accordion-panel", 31);
1560
+ i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_38_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onInputPanelToggle($event)); });
1561
+ i0.ɵɵtemplate(39, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Template, 4, 1, "ng-template", 32);
1562
+ i0.ɵɵelementStart(40, "div", 33);
1563
+ i0.ɵɵconditionalCreate(41, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Template, 24, 12, "div", 34)(42, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template, 1, 0, "mj-empty-state", 35);
1564
+ i0.ɵɵelementEnd()();
1565
+ i0.ɵɵelementStart(43, "mj-accordion-panel", 36);
1566
+ i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_43_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onResultPanelToggle($event)); });
1567
+ i0.ɵɵtemplate(44, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_44_Template, 5, 2, "ng-template", 32);
1568
+ i0.ɵɵelementStart(45, "div", 33);
1569
+ i0.ɵɵconditionalCreate(46, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_46_Template, 7, 1, "div", 37);
1570
+ i0.ɵɵconditionalCreate(47, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_47_Template, 8, 4, "div", 38)(48, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_48_Template, 2, 1, "mj-empty-state", 39);
1571
+ i0.ɵɵelementEnd()();
1572
+ i0.ɵɵelementStart(49, "mj-accordion-panel", 40);
1573
+ i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_49_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onMetricsPanelToggle($event)); });
1574
+ i0.ɵɵtemplate(50, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_50_Template, 3, 0, "ng-template", 32);
1575
+ i0.ɵɵelementStart(51, "div", 33)(52, "div", 41)(53, "div", 42)(54, "div", 43);
1576
+ i0.ɵɵelement(55, "i", 44);
1577
+ i0.ɵɵelementStart(56, "h4");
1578
+ i0.ɵɵtext(57, "Prompt Tokens");
1579
+ i0.ɵɵelementEnd()();
1580
+ i0.ɵɵelementStart(58, "div", 45);
1581
+ i0.ɵɵtext(59);
1582
+ i0.ɵɵelementEnd();
1583
+ i0.ɵɵconditionalCreate(60, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_60_Template, 3, 1, "div", 46);
1584
+ i0.ɵɵconditionalCreate(61, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_61_Template, 3, 1, "div", 46);
1585
+ i0.ɵɵelementEnd();
1586
+ i0.ɵɵelementStart(62, "div", 42)(63, "div", 43);
1587
+ i0.ɵɵelement(64, "i", 47);
1588
+ i0.ɵɵelementStart(65, "h4");
1589
+ i0.ɵɵtext(66, "Completion Tokens");
1590
+ i0.ɵɵelementEnd()();
1591
+ i0.ɵɵelementStart(67, "div", 48);
1592
+ i0.ɵɵtext(68);
1593
+ i0.ɵɵelementEnd();
1594
+ i0.ɵɵconditionalCreate(69, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_69_Template, 3, 1, "div", 46);
1595
+ i0.ɵɵelementEnd();
1596
+ i0.ɵɵelementStart(70, "div", 42)(71, "div", 43);
1597
+ i0.ɵɵelement(72, "i", 49);
1598
+ i0.ɵɵelementStart(73, "h4");
1599
+ i0.ɵɵtext(74, "Total Tokens");
1600
+ i0.ɵɵelementEnd()();
1601
+ i0.ɵɵelementStart(75, "div", 50);
1602
+ i0.ɵɵtext(76);
1603
+ i0.ɵɵelementEnd();
1604
+ i0.ɵɵconditionalCreate(77, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_77_Template, 3, 1, "div", 46);
1605
+ i0.ɵɵconditionalCreate(78, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_78_Template, 3, 1, "div", 46);
1606
+ i0.ɵɵelementEnd();
1607
+ i0.ɵɵconditionalCreate(79, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_79_Template, 9, 3, "div", 42);
1608
+ i0.ɵɵelementStart(80, "div", 42)(81, "div", 43);
1609
+ i0.ɵɵelement(82, "i", 51);
1610
+ i0.ɵɵelementStart(83, "h4");
1611
+ i0.ɵɵtext(84, "Cost");
1612
+ i0.ɵɵelementEnd()();
1613
+ i0.ɵɵelementStart(85, "div", 48);
1614
+ i0.ɵɵtext(86);
1615
+ i0.ɵɵelementEnd();
1616
+ i0.ɵɵconditionalCreate(87, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Template, 3, 1, "div", 46);
1617
+ i0.ɵɵconditionalCreate(88, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template, 2, 1, "div", 52);
1618
+ i0.ɵɵelementEnd();
1619
+ i0.ɵɵconditionalCreate(89, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Template, 7, 1, "div", 42);
1620
+ i0.ɵɵconditionalCreate(90, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Template, 7, 1, "div", 42);
1621
+ i0.ɵɵconditionalCreate(91, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Template, 7, 1, "div", 42);
1622
+ i0.ɵɵelementEnd();
1623
+ i0.ɵɵelementStart(92, "div", 53);
1624
+ i0.ɵɵconditionalCreate(93, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_93_Template, 5, 1, "div", 54);
1625
+ i0.ɵɵconditionalCreate(94, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_94_Template, 6, 1, "div", 54);
1603
1626
  i0.ɵɵelementEnd()()();
1604
- i0.ɵɵconditionalCreate(90, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Template, 37, 18, "mj-accordion-panel", 49);
1605
- i0.ɵɵconditionalCreate(91, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Template, 5, 3, "mj-accordion-panel", 49);
1606
- i0.ɵɵelementStart(92, "mj-accordion-panel", 49);
1607
- i0.ɵɵtemplate(93, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_93_Template, 3, 0, "ng-template", 28);
1608
- i0.ɵɵelementStart(94, "div", 29)(95, "div", 50);
1609
- i0.ɵɵconditionalCreate(96, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Template, 7, 1, "div", 51);
1610
- i0.ɵɵconditionalCreate(97, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_97_Template, 6, 3, "div", 51);
1611
- i0.ɵɵconditionalCreate(98, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_98_Template, 6, 1, "div", 51);
1612
- i0.ɵɵelementStart(99, "div", 51)(100, "label");
1613
- i0.ɵɵtext(101, "Temperature");
1627
+ i0.ɵɵconditionalCreate(95, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Template, 37, 18, "mj-accordion-panel", 55);
1628
+ i0.ɵɵconditionalCreate(96, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Template, 5, 3, "mj-accordion-panel", 56);
1629
+ i0.ɵɵelementStart(97, "mj-accordion-panel", 57);
1630
+ i0.ɵɵtemplate(98, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_98_Template, 3, 0, "ng-template", 32);
1631
+ i0.ɵɵelementStart(99, "div", 33)(100, "div", 58);
1632
+ i0.ɵɵconditionalCreate(101, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_101_Template, 7, 1, "div", 59);
1633
+ i0.ɵɵconditionalCreate(102, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_102_Template, 6, 3, "div", 59);
1634
+ i0.ɵɵconditionalCreate(103, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_103_Template, 6, 1, "div", 59);
1635
+ i0.ɵɵelementStart(104, "div", 59)(105, "label");
1636
+ i0.ɵɵtext(106, "Temperature");
1614
1637
  i0.ɵɵelementEnd();
1615
- i0.ɵɵelementStart(102, "div", 52);
1616
- i0.ɵɵelement(103, "i", 53);
1617
- i0.ɵɵtext(104);
1638
+ i0.ɵɵelementStart(107, "div", 60);
1639
+ i0.ɵɵelement(108, "i", 61);
1640
+ i0.ɵɵtext(109);
1618
1641
  i0.ɵɵelementEnd()();
1619
- i0.ɵɵelementStart(105, "div", 51)(106, "label");
1620
- i0.ɵɵtext(107, "Top P");
1642
+ i0.ɵɵelementStart(110, "div", 59)(111, "label");
1643
+ i0.ɵɵtext(112, "Top P");
1621
1644
  i0.ɵɵelementEnd();
1622
- i0.ɵɵelementStart(108, "div", 52);
1623
- i0.ɵɵelement(109, "i", 54);
1624
- i0.ɵɵtext(110);
1645
+ i0.ɵɵelementStart(113, "div", 60);
1646
+ i0.ɵɵelement(114, "i", 62);
1647
+ i0.ɵɵtext(115);
1625
1648
  i0.ɵɵelementEnd()();
1626
- i0.ɵɵelementStart(111, "div", 51)(112, "label");
1627
- i0.ɵɵtext(113, "Top K");
1649
+ i0.ɵɵelementStart(116, "div", 59)(117, "label");
1650
+ i0.ɵɵtext(118, "Top K");
1628
1651
  i0.ɵɵelementEnd();
1629
- i0.ɵɵelementStart(114, "div", 52);
1630
- i0.ɵɵelement(115, "i", 55);
1631
- i0.ɵɵtext(116);
1652
+ i0.ɵɵelementStart(119, "div", 60);
1653
+ i0.ɵɵelement(120, "i", 63);
1654
+ i0.ɵɵtext(121);
1632
1655
  i0.ɵɵelementEnd()();
1633
- i0.ɵɵelementStart(117, "div", 51)(118, "label");
1634
- i0.ɵɵtext(119, "Min P");
1656
+ i0.ɵɵelementStart(122, "div", 59)(123, "label");
1657
+ i0.ɵɵtext(124, "Min P");
1635
1658
  i0.ɵɵelementEnd();
1636
- i0.ɵɵelementStart(120, "div", 52);
1637
- i0.ɵɵelement(121, "i", 56);
1638
- i0.ɵɵtext(122);
1659
+ i0.ɵɵelementStart(125, "div", 60);
1660
+ i0.ɵɵelement(126, "i", 64);
1661
+ i0.ɵɵtext(127);
1639
1662
  i0.ɵɵelementEnd()();
1640
- i0.ɵɵelementStart(123, "div", 51)(124, "label");
1641
- i0.ɵɵtext(125, "Frequency Penalty");
1663
+ i0.ɵɵelementStart(128, "div", 59)(129, "label");
1664
+ i0.ɵɵtext(130, "Frequency Penalty");
1642
1665
  i0.ɵɵelementEnd();
1643
- i0.ɵɵelementStart(126, "div", 52);
1644
- i0.ɵɵelement(127, "i", 57);
1645
- i0.ɵɵtext(128);
1666
+ i0.ɵɵelementStart(131, "div", 60);
1667
+ i0.ɵɵelement(132, "i", 65);
1668
+ i0.ɵɵtext(133);
1646
1669
  i0.ɵɵelementEnd()();
1647
- i0.ɵɵelementStart(129, "div", 51)(130, "label");
1648
- i0.ɵɵtext(131, "Presence Penalty");
1670
+ i0.ɵɵelementStart(134, "div", 59)(135, "label");
1671
+ i0.ɵɵtext(136, "Presence Penalty");
1649
1672
  i0.ɵɵelementEnd();
1650
- i0.ɵɵelementStart(132, "div", 52);
1651
- i0.ɵɵelement(133, "i", 58);
1652
- i0.ɵɵtext(134);
1673
+ i0.ɵɵelementStart(137, "div", 60);
1674
+ i0.ɵɵelement(138, "i", 66);
1675
+ i0.ɵɵtext(139);
1653
1676
  i0.ɵɵelementEnd()();
1654
- i0.ɵɵelementStart(135, "div", 51)(136, "label");
1655
- i0.ɵɵtext(137, "Seed");
1677
+ i0.ɵɵelementStart(140, "div", 59)(141, "label");
1678
+ i0.ɵɵtext(142, "Seed");
1656
1679
  i0.ɵɵelementEnd();
1657
- i0.ɵɵelementStart(138, "div", 52);
1658
- i0.ɵɵelement(139, "i", 59);
1659
- i0.ɵɵtext(140);
1680
+ i0.ɵɵelementStart(143, "div", 60);
1681
+ i0.ɵɵelement(144, "i", 67);
1682
+ i0.ɵɵtext(145);
1660
1683
  i0.ɵɵelementEnd()();
1661
- i0.ɵɵelementStart(141, "div", 51)(142, "label");
1662
- i0.ɵɵtext(143, "Stop Sequences");
1684
+ i0.ɵɵelementStart(146, "div", 59)(147, "label");
1685
+ i0.ɵɵtext(148, "Stop Sequences");
1663
1686
  i0.ɵɵelementEnd();
1664
- i0.ɵɵelementStart(144, "div", 52);
1665
- i0.ɵɵelement(145, "i", 60);
1666
- i0.ɵɵtext(146);
1687
+ i0.ɵɵelementStart(149, "div", 60);
1688
+ i0.ɵɵelement(150, "i", 68);
1689
+ i0.ɵɵtext(151);
1667
1690
  i0.ɵɵelementEnd()();
1668
- i0.ɵɵelementStart(147, "div", 51)(148, "label");
1669
- i0.ɵɵtext(149, "Assistant Prefill");
1691
+ i0.ɵɵelementStart(152, "div", 59)(153, "label");
1692
+ i0.ɵɵtext(154, "Assistant Prefill");
1670
1693
  i0.ɵɵelementEnd();
1671
- i0.ɵɵelementStart(150, "div", 52);
1672
- i0.ɵɵelement(151, "i", 61);
1673
- i0.ɵɵtext(152);
1694
+ i0.ɵɵelementStart(155, "div", 60);
1695
+ i0.ɵɵelement(156, "i", 69);
1696
+ i0.ɵɵtext(157);
1674
1697
  i0.ɵɵelementEnd()();
1675
- i0.ɵɵconditionalCreate(153, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_153_Template, 7, 4, "div", 51);
1676
- i0.ɵɵconditionalCreate(154, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template, 7, 4, "div", 51);
1698
+ i0.ɵɵconditionalCreate(158, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_158_Template, 7, 4, "div", 59);
1699
+ i0.ɵɵconditionalCreate(159, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_159_Template, 7, 4, "div", 59);
1677
1700
  i0.ɵɵelementEnd()()();
1678
- i0.ɵɵconditionalCreate(155, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_155_Template, 11, 5, "mj-accordion-panel", 49);
1679
- i0.ɵɵelementStart(156, "mj-accordion-panel", 27);
1680
- i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_156_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onModelSelectionPanelToggle($event)); });
1681
- i0.ɵɵtemplate(157, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_157_Template, 5, 2, "ng-template", 28);
1682
- i0.ɵɵelementStart(158, "div", 29)(159, "div", 50)(160, "div", 51)(161, "label");
1683
- i0.ɵɵtext(162, "Status");
1701
+ i0.ɵɵconditionalCreate(160, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_160_Template, 11, 5, "mj-accordion-panel", 70);
1702
+ i0.ɵɵelementStart(161, "mj-accordion-panel", 71);
1703
+ i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_161_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onModelSelectionPanelToggle($event)); });
1704
+ i0.ɵɵtemplate(162, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_162_Template, 5, 2, "ng-template", 32);
1705
+ i0.ɵɵelementStart(163, "div", 33)(164, "div", 58)(165, "div", 59)(166, "label");
1706
+ i0.ɵɵtext(167, "Status");
1684
1707
  i0.ɵɵelementEnd();
1685
- i0.ɵɵelementStart(163, "div", 52);
1686
- i0.ɵɵelement(164, "i", 62);
1687
- i0.ɵɵtext(165);
1708
+ i0.ɵɵelementStart(168, "div", 60);
1709
+ i0.ɵɵelement(169, "i", 72);
1710
+ i0.ɵɵtext(170);
1688
1711
  i0.ɵɵelementEnd()();
1689
- i0.ɵɵelementStart(166, "div", 51)(167, "label");
1690
- i0.ɵɵtext(168, "Selection Strategy");
1712
+ i0.ɵɵelementStart(171, "div", 59)(172, "label");
1713
+ i0.ɵɵtext(173, "Selection Strategy");
1691
1714
  i0.ɵɵelementEnd();
1692
- i0.ɵɵelementStart(169, "div", 52);
1693
- i0.ɵɵelement(170, "i", 63);
1694
- i0.ɵɵtext(171);
1715
+ i0.ɵɵelementStart(174, "div", 60);
1716
+ i0.ɵɵelement(175, "i", 73);
1717
+ i0.ɵɵtext(176);
1695
1718
  i0.ɵɵelementEnd()();
1696
- i0.ɵɵelementStart(172, "div", 51)(173, "label");
1697
- i0.ɵɵtext(174, "Model Power Rank");
1719
+ i0.ɵɵelementStart(177, "div", 59)(178, "label");
1720
+ i0.ɵɵtext(179, "Model Power Rank");
1698
1721
  i0.ɵɵelementEnd();
1699
- i0.ɵɵelementStart(175, "div", 52);
1700
- i0.ɵɵelement(176, "i", 64);
1701
- i0.ɵɵtext(177);
1722
+ i0.ɵɵelementStart(180, "div", 60);
1723
+ i0.ɵɵelement(181, "i", 74);
1724
+ i0.ɵɵtext(182);
1702
1725
  i0.ɵɵelementEnd()();
1703
- i0.ɵɵelementStart(178, "div", 51)(179, "label");
1704
- i0.ɵɵtext(180, "Cache Hit");
1726
+ i0.ɵɵelementStart(183, "div", 59)(184, "label");
1727
+ i0.ɵɵtext(185, "Cache Hit");
1705
1728
  i0.ɵɵelementEnd();
1706
- i0.ɵɵelementStart(181, "div", 52);
1707
- i0.ɵɵelement(182, "i");
1708
- i0.ɵɵtext(183);
1729
+ i0.ɵɵelementStart(186, "div", 60);
1730
+ i0.ɵɵelement(187, "i");
1731
+ i0.ɵɵtext(188);
1709
1732
  i0.ɵɵelementEnd()();
1710
- i0.ɵɵconditionalCreate(184, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_184_Template, 7, 1, "div", 65);
1711
- i0.ɵɵconditionalCreate(185, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_185_Template, 7, 1, "div", 51);
1712
- i0.ɵɵconditionalCreate(186, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_186_Template, 6, 1, "div", 51);
1713
- i0.ɵɵelementStart(187, "div", 51)(188, "label");
1714
- i0.ɵɵtext(189, "Was Selected Result");
1733
+ i0.ɵɵconditionalCreate(189, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_189_Template, 7, 1, "div", 75);
1734
+ i0.ɵɵconditionalCreate(190, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_190_Template, 7, 1, "div", 59);
1735
+ i0.ɵɵconditionalCreate(191, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_191_Template, 6, 1, "div", 59);
1736
+ i0.ɵɵelementStart(192, "div", 59)(193, "label");
1737
+ i0.ɵɵtext(194, "Was Selected Result");
1715
1738
  i0.ɵɵelementEnd();
1716
- i0.ɵɵelementStart(190, "div", 52);
1717
- i0.ɵɵelement(191, "i");
1718
- i0.ɵɵtext(192);
1739
+ i0.ɵɵelementStart(195, "div", 60);
1740
+ i0.ɵɵelement(196, "i");
1741
+ i0.ɵɵtext(197);
1719
1742
  i0.ɵɵelementEnd()();
1720
- i0.ɵɵelementStart(193, "div", 51)(194, "label");
1721
- i0.ɵɵtext(195, "Streaming Enabled");
1743
+ i0.ɵɵelementStart(198, "div", 59)(199, "label");
1744
+ i0.ɵɵtext(200, "Streaming Enabled");
1722
1745
  i0.ɵɵelementEnd();
1723
- i0.ɵɵelementStart(196, "div", 52);
1724
- i0.ɵɵelement(197, "i");
1725
- i0.ɵɵtext(198);
1746
+ i0.ɵɵelementStart(201, "div", 60);
1747
+ i0.ɵɵelement(202, "i");
1748
+ i0.ɵɵtext(203);
1726
1749
  i0.ɵɵelementEnd()();
1727
- i0.ɵɵconditionalCreate(199, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Template, 6, 1, "div", 51);
1728
- i0.ɵɵconditionalCreate(200, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Template, 7, 1);
1750
+ i0.ɵɵconditionalCreate(204, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_204_Template, 6, 1, "div", 59);
1751
+ i0.ɵɵconditionalCreate(205, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_205_Template, 7, 1);
1729
1752
  i0.ɵɵelementEnd();
1730
- i0.ɵɵconditionalCreate(201, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Template, 8, 4, "div", 66);
1731
- i0.ɵɵconditionalCreate(202, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_202_Template, 8, 4, "div", 67);
1732
- i0.ɵɵelementEnd()()()()();
1753
+ i0.ɵɵconditionalCreate(206, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_206_Template, 8, 4, "div", 76);
1754
+ i0.ɵɵconditionalCreate(207, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_207_Template, 8, 4, "div", 77);
1755
+ i0.ɵɵelementEnd()()()()()();
1733
1756
  } if (rf & 2) {
1734
1757
  const ctx_r1 = i0.ɵɵnextContext();
1735
1758
  i0.ɵɵproperty("Record", ctx_r1.record)("FormComponent", ctx_r1)("ToolbarConfig", ctx_r1.toolbarConfig)("WidthMode", "full-width");
1736
- i0.ɵɵadvance(6);
1759
+ i0.ɵɵadvance(3);
1760
+ i0.ɵɵclassProp("hero-view", !ctx_r1.EditMode)("hero-compact", !ctx_r1.EditMode && !ctx_r1.HeroDetailsOpen);
1761
+ i0.ɵɵadvance(3);
1737
1762
  i0.ɵɵstyleProp("background-color", ctx_r1.getStatusColor() + "20");
1738
1763
  i0.ɵɵadvance();
1739
1764
  i0.ɵɵclassMap("fa-solid " + ctx_r1.getStatusIcon());
1740
1765
  i0.ɵɵstyleProp("color", ctx_r1.getStatusColor());
1741
1766
  i0.ɵɵadvance(4);
1742
1767
  i0.ɵɵconditional(ctx_r1.record.ID ? 11 : -1);
1768
+ i0.ɵɵadvance();
1769
+ i0.ɵɵattribute("data-status", ctx_r1.StatusKind);
1770
+ i0.ɵɵadvance();
1771
+ i0.ɵɵclassMap("fa-solid " + ctx_r1.getStatusIcon());
1772
+ i0.ɵɵadvance();
1773
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getStatusText(), " ");
1743
1774
  i0.ɵɵadvance(6);
1744
1775
  i0.ɵɵstyleProp("background-color", ctx_r1.getStatusColor());
1745
1776
  i0.ɵɵadvance();
@@ -1748,73 +1779,77 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1748
1779
  i0.ɵɵadvance();
1749
1780
  i0.ɵɵtextInterpolate1(" ", ctx_r1.getStatusText(), " ");
1750
1781
  i0.ɵɵadvance();
1751
- i0.ɵɵconditional(ctx_r1.record.RunType ? 20 : -1);
1782
+ i0.ɵɵconditional(ctx_r1.record.RunType ? 23 : -1);
1752
1783
  i0.ɵɵadvance();
1753
- i0.ɵɵconditional(ctx_r1.prompt ? 21 : -1);
1784
+ i0.ɵɵconditional(ctx_r1.prompt ? 24 : -1);
1754
1785
  i0.ɵɵadvance();
1755
- i0.ɵɵconditional(ctx_r1.model ? 22 : -1);
1786
+ i0.ɵɵconditional(ctx_r1.model ? 25 : -1);
1756
1787
  i0.ɵɵadvance();
1757
- i0.ɵɵconditional(ctx_r1.record.RerunFromPromptRunID ? 23 : -1);
1788
+ i0.ɵɵconditional(ctx_r1.record.RerunFromPromptRunID ? 26 : -1);
1758
1789
  i0.ɵɵadvance(7);
1759
- i0.ɵɵconditional(ctx_r1.record.ConfigurationID ? 30 : 31);
1760
- i0.ɵɵadvance(3);
1790
+ i0.ɵɵconditional(ctx_r1.record.ConfigurationID ? 33 : 34);
1791
+ i0.ɵɵadvance(2);
1792
+ i0.ɵɵconditional(!ctx_r1.EditMode && ctx_r1.HeroSummary ? 35 : -1);
1793
+ i0.ɵɵadvance(2);
1794
+ i0.ɵɵproperty("Enabled", ctx_r1.Phone.IsPhone)("ActiveKey", ctx_r1.Phone.Section);
1795
+ i0.ɵɵadvance();
1761
1796
  i0.ɵɵproperty("Expanded", ctx_r1.inputExpanded);
1762
1797
  i0.ɵɵadvance(3);
1763
- i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 36 : 37);
1798
+ i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 41 : 42);
1764
1799
  i0.ɵɵadvance(2);
1765
1800
  i0.ɵɵproperty("Expanded", ctx_r1.resultExpanded);
1766
1801
  i0.ɵɵadvance(3);
1767
- i0.ɵɵconditional(ctx_r1.record.ErrorMessage ? 41 : -1);
1802
+ i0.ɵɵconditional(ctx_r1.record.ErrorMessage ? 46 : -1);
1768
1803
  i0.ɵɵadvance();
1769
- i0.ɵɵconditional(ctx_r1.record.Result && ctx_r1.record.Result.trim() !== "" ? 42 : !ctx_r1.record.ErrorMessage ? 43 : -1);
1804
+ i0.ɵɵconditional(ctx_r1.record.Result && ctx_r1.record.Result.trim() !== "" ? 47 : !ctx_r1.record.ErrorMessage ? 48 : -1);
1770
1805
  i0.ɵɵadvance(2);
1771
1806
  i0.ɵɵproperty("Expanded", ctx_r1.metricsExpanded);
1772
1807
  i0.ɵɵadvance(10);
1773
1808
  i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.FullPromptTokens));
1774
1809
  i0.ɵɵadvance();
1775
- i0.ɵɵconditional(ctx_r1.CachedTokens > 0 ? 55 : -1);
1810
+ i0.ɵɵconditional(ctx_r1.CachedTokens > 0 ? 60 : -1);
1776
1811
  i0.ɵɵadvance();
1777
- i0.ɵɵconditional(ctx_r1.record.TokensPromptRollup && ctx_r1.record.TokensPromptRollup !== ctx_r1.record.TokensPrompt ? 56 : -1);
1812
+ i0.ɵɵconditional(ctx_r1.record.TokensPromptRollup && ctx_r1.record.TokensPromptRollup !== ctx_r1.record.TokensPrompt ? 61 : -1);
1778
1813
  i0.ɵɵadvance(7);
1779
1814
  i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensCompletion));
1780
1815
  i0.ɵɵadvance();
1781
- i0.ɵɵconditional(ctx_r1.record.TokensCompletionRollup && ctx_r1.record.TokensCompletionRollup !== ctx_r1.record.TokensCompletion ? 64 : -1);
1816
+ i0.ɵɵconditional(ctx_r1.record.TokensCompletionRollup && ctx_r1.record.TokensCompletionRollup !== ctx_r1.record.TokensCompletion ? 69 : -1);
1782
1817
  i0.ɵɵadvance(7);
1783
1818
  i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.TotalTokensProcessed));
1784
1819
  i0.ɵɵadvance();
1785
- i0.ɵɵconditional(ctx_r1.CachedTokens > 0 ? 72 : -1);
1820
+ i0.ɵɵconditional(ctx_r1.CachedTokens > 0 ? 77 : -1);
1786
1821
  i0.ɵɵadvance();
1787
- i0.ɵɵconditional(ctx_r1.record.TokensUsedRollup && ctx_r1.record.TokensUsedRollup !== ctx_r1.record.TokensUsed ? 73 : -1);
1822
+ i0.ɵɵconditional(ctx_r1.record.TokensUsedRollup && ctx_r1.record.TokensUsedRollup !== ctx_r1.record.TokensUsed ? 78 : -1);
1788
1823
  i0.ɵɵadvance();
1789
- i0.ɵɵconditional(ctx_r1.record.TokensCacheRead != null || ctx_r1.record.TokensCacheWrite != null ? 74 : -1);
1824
+ i0.ɵɵconditional(ctx_r1.record.TokensCacheRead != null || ctx_r1.record.TokensCacheWrite != null ? 79 : -1);
1790
1825
  i0.ɵɵadvance(7);
1791
1826
  i0.ɵɵtextInterpolate(ctx_r1.formatCost(ctx_r1.record.Cost));
1792
1827
  i0.ɵɵadvance();
1793
- i0.ɵɵconditional(ctx_r1.record.TotalCost && ctx_r1.record.TotalCost !== ctx_r1.record.Cost ? 82 : -1);
1828
+ i0.ɵɵconditional(ctx_r1.record.TotalCost && ctx_r1.record.TotalCost !== ctx_r1.record.Cost ? 87 : -1);
1794
1829
  i0.ɵɵadvance();
1795
- i0.ɵɵconditional(ctx_r1.record.CostCurrency ? 83 : -1);
1830
+ i0.ɵɵconditional(ctx_r1.record.CostCurrency ? 88 : -1);
1796
1831
  i0.ɵɵadvance();
1797
- i0.ɵɵconditional(ctx_r1.record.QueueTime != null ? 84 : -1);
1832
+ i0.ɵɵconditional(ctx_r1.record.QueueTime != null ? 89 : -1);
1798
1833
  i0.ɵɵadvance();
1799
- i0.ɵɵconditional(ctx_r1.record.PromptTime != null ? 85 : -1);
1834
+ i0.ɵɵconditional(ctx_r1.record.PromptTime != null ? 90 : -1);
1800
1835
  i0.ɵɵadvance();
1801
- i0.ɵɵconditional(ctx_r1.record.CompletionTime != null ? 86 : -1);
1836
+ i0.ɵɵconditional(ctx_r1.record.CompletionTime != null ? 91 : -1);
1802
1837
  i0.ɵɵadvance(2);
1803
- i0.ɵɵconditional(ctx_r1.record.ExecutionOrder !== null ? 88 : -1);
1838
+ i0.ɵɵconditional(ctx_r1.record.ExecutionOrder !== null ? 93 : -1);
1804
1839
  i0.ɵɵadvance();
1805
- i0.ɵɵconditional(ctx_r1.record.AgentID ? 89 : -1);
1840
+ i0.ɵɵconditional(ctx_r1.record.AgentID ? 94 : -1);
1806
1841
  i0.ɵɵadvance();
1807
- i0.ɵɵconditional(ctx_r1.record && (ctx_r1.record.ValidationAttemptCount && ctx_r1.record.ValidationAttemptCount > 0 || ctx_r1.record.ValidationBehavior) ? 90 : -1);
1842
+ i0.ɵɵconditional(ctx_r1.record && (ctx_r1.record.ValidationAttemptCount && ctx_r1.record.ValidationAttemptCount > 0 || ctx_r1.record.ValidationBehavior) ? 95 : -1);
1808
1843
  i0.ɵɵadvance();
1809
- i0.ɵɵconditional(ctx_r1.record.ParentID || ctx_r1.childRuns.length > 0 ? 91 : -1);
1844
+ i0.ɵɵconditional(ctx_r1.record.ParentID || ctx_r1.childRuns.length > 0 ? 96 : -1);
1810
1845
  i0.ɵɵadvance();
1811
1846
  i0.ɵɵproperty("Expanded", false);
1812
1847
  i0.ɵɵadvance(4);
1813
- i0.ɵɵconditional(ctx_r1.record.AgentID ? 96 : -1);
1848
+ i0.ɵɵconditional(ctx_r1.record.AgentID ? 101 : -1);
1814
1849
  i0.ɵɵadvance();
1815
- i0.ɵɵconditional(ctx_r1.record.RunType ? 97 : -1);
1850
+ i0.ɵɵconditional(ctx_r1.record.RunType ? 102 : -1);
1816
1851
  i0.ɵɵadvance();
1817
- i0.ɵɵconditional(ctx_r1.record.ResponseFormat ? 98 : -1);
1852
+ i0.ɵɵconditional(ctx_r1.record.ResponseFormat ? 103 : -1);
1818
1853
  i0.ɵɵadvance(4);
1819
1854
  i0.ɵɵclassProp("null-value", ctx_r1.record.Temperature === null || ctx_r1.record.Temperature === undefined);
1820
1855
  i0.ɵɵadvance(2);
@@ -1852,11 +1887,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1852
1887
  i0.ɵɵadvance(2);
1853
1888
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.AssistantPrefill || "\u2014", " ");
1854
1889
  i0.ɵɵadvance();
1855
- i0.ɵɵconditional(ctx_r1.record.RunAt ? 153 : -1);
1890
+ i0.ɵɵconditional(ctx_r1.record.RunAt ? 158 : -1);
1856
1891
  i0.ɵɵadvance();
1857
- i0.ɵɵconditional(ctx_r1.record.CompletedAt ? 154 : -1);
1892
+ i0.ɵɵconditional(ctx_r1.record.CompletedAt ? 159 : -1);
1858
1893
  i0.ɵɵadvance();
1859
- i0.ɵɵconditional(ctx_r1.record.ModelSpecificResponseDetails ? 155 : -1);
1894
+ i0.ɵɵconditional(ctx_r1.record.ModelSpecificResponseDetails ? 160 : -1);
1860
1895
  i0.ɵɵadvance();
1861
1896
  i0.ɵɵproperty("Expanded", false);
1862
1897
  i0.ɵɵadvance(9);
@@ -1872,11 +1907,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1872
1907
  i0.ɵɵadvance();
1873
1908
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.CacheHit ? "Yes" : "No", " ");
1874
1909
  i0.ɵɵadvance();
1875
- i0.ɵɵconditional(ctx_r1.record.CacheKey ? 184 : -1);
1910
+ i0.ɵɵconditional(ctx_r1.record.CacheKey ? 189 : -1);
1876
1911
  i0.ɵɵadvance();
1877
- i0.ɵɵconditional(ctx_r1.record.JudgeID ? 185 : -1);
1912
+ i0.ɵɵconditional(ctx_r1.record.JudgeID ? 190 : -1);
1878
1913
  i0.ɵɵadvance();
1879
- i0.ɵɵconditional(ctx_r1.record.JudgeScore !== null ? 186 : -1);
1914
+ i0.ɵɵconditional(ctx_r1.record.JudgeScore !== null ? 191 : -1);
1880
1915
  i0.ɵɵadvance(5);
1881
1916
  i0.ɵɵclassMap(ctx_r1.record.WasSelectedResult ? "fa-solid fa-trophy" : "fa-solid fa-times");
1882
1917
  i0.ɵɵadvance();
@@ -1886,36 +1921,36 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1886
1921
  i0.ɵɵadvance();
1887
1922
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.StreamingEnabled ? "Yes" : "No", " ");
1888
1923
  i0.ɵɵadvance();
1889
- i0.ɵɵconditional(ctx_r1.record.FirstTokenTime !== null ? 199 : -1);
1924
+ i0.ɵɵconditional(ctx_r1.record.FirstTokenTime !== null ? 204 : -1);
1890
1925
  i0.ɵɵadvance();
1891
- i0.ɵɵconditional(ctx_r1.record.Cancelled ? 200 : -1);
1926
+ i0.ɵɵconditional(ctx_r1.record.Cancelled ? 205 : -1);
1892
1927
  i0.ɵɵadvance();
1893
- i0.ɵɵconditional(ctx_r1.record.ModelSelection ? 201 : -1);
1928
+ i0.ɵɵconditional(ctx_r1.record.ModelSelection ? 206 : -1);
1894
1929
  i0.ɵɵadvance();
1895
- i0.ɵɵconditional(ctx_r1.record.ErrorDetails ? 202 : -1);
1930
+ i0.ɵɵconditional(ctx_r1.record.ErrorDetails ? 207 : -1);
1896
1931
  } }
1897
1932
  function MJAIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1898
- const _r25 = i0.ɵɵgetCurrentView();
1899
- i0.ɵɵelementStart(0, "div", 190);
1900
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeFullScreen()); });
1901
- i0.ɵɵelementStart(1, "div", 191);
1933
+ const _r26 = i0.ɵɵgetCurrentView();
1934
+ i0.ɵɵelementStart(0, "div", 205);
1935
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeFullScreen()); });
1936
+ i0.ɵɵelementStart(1, "div", 206);
1902
1937
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_div_click_1_listener($event) { return $event.stopPropagation(); });
1903
- i0.ɵɵelementStart(2, "div", 192)(3, "span", 193);
1904
- i0.ɵɵelement(4, "i", 111);
1938
+ i0.ɵɵelementStart(2, "div", 207)(3, "span", 208);
1939
+ i0.ɵɵelement(4, "i", 124);
1905
1940
  i0.ɵɵtext(5);
1906
1941
  i0.ɵɵelementEnd();
1907
- i0.ɵɵelementStart(6, "div", 194)(7, "button", 195);
1908
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.FullScreenContent, ctx_r1.FullScreenTitle)); });
1909
- i0.ɵɵelement(8, "i", 109);
1942
+ i0.ɵɵelementStart(6, "div", 209)(7, "button", 210);
1943
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.FullScreenContent, ctx_r1.FullScreenTitle)); });
1944
+ i0.ɵɵelement(8, "i", 122);
1910
1945
  i0.ɵɵtext(9, " Copy ");
1911
1946
  i0.ɵɵelementEnd();
1912
- i0.ɵɵelementStart(10, "button", 196);
1913
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeFullScreen()); });
1914
- i0.ɵɵelement(11, "i", 197);
1947
+ i0.ɵɵelementStart(10, "button", 211);
1948
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeFullScreen()); });
1949
+ i0.ɵɵelement(11, "i", 212);
1915
1950
  i0.ɵɵtext(12, " Close ");
1916
1951
  i0.ɵɵelementEnd()()();
1917
- i0.ɵɵelementStart(13, "div", 198);
1918
- i0.ɵɵelement(14, "mj-code-editor", 199);
1952
+ i0.ɵɵelementStart(13, "div", 213);
1953
+ i0.ɵɵelement(14, "mj-code-editor", 214);
1919
1954
  i0.ɵɵelementEnd()()();
1920
1955
  } if (rf & 2) {
1921
1956
  const ctx_r1 = i0.ɵɵnextContext();
@@ -1927,6 +1962,10 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if
1927
1962
  let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtended extends MJAIPromptRunFormComponent {
1928
1963
  constructor() {
1929
1964
  super(...arguments);
1965
+ /** Phone width shows the stacked accordions as sections behind one picker (design call 7A). */
1966
+ this.Phone = new PhoneSectionsState(() => this.cdr.markForCheck());
1967
+ /** Phone hero (6A): whether the summary line is expanded to show the rest of the hero. */
1968
+ this.HeroDetailsOpen = false;
1930
1969
  this.ToolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;
1931
1970
  // Related entities
1932
1971
  this.Prompt = null;
@@ -1980,6 +2019,20 @@ let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtende
1980
2019
  this.testHarnessWindowService = inject(TestHarnessWindowManagerService);
1981
2020
  this.viewContainerRef = inject(ViewContainerRef);
1982
2021
  }
2022
+ /** Toggles the phone hero between its compact identity row and the full hero. */
2023
+ ToggleHeroDetails() {
2024
+ this.HeroDetailsOpen = !this.HeroDetailsOpen;
2025
+ this.cdr.markForCheck();
2026
+ }
2027
+ /** The phone hero's one-line summary of what the compact hero leaves out. */
2028
+ get HeroSummary() {
2029
+ return JoinHeroSummary([
2030
+ this.record.RunType,
2031
+ this.record.ChildPrompt || this.Prompt?.Name,
2032
+ this.model?.Name,
2033
+ this.formatDuration(this.record.ExecutionTimeMS),
2034
+ ]);
2035
+ }
1983
2036
  /** @deprecated Use {@link ToolbarConfig}. */
1984
2037
  get toolbarConfig() {
1985
2038
  return this.ToolbarConfig;
@@ -2227,6 +2280,7 @@ let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtende
2227
2280
  }
2228
2281
  ngOnDestroy() {
2229
2282
  super.ngOnDestroy();
2283
+ this.Phone.Stop();
2230
2284
  // Clean up any resources
2231
2285
  // Currently no subscriptions or timers to clean up
2232
2286
  // This is here for future use and to complete the lifecycle
@@ -2454,6 +2508,10 @@ let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtende
2454
2508
  return '#17a2b8'; // Blue (completed but no success flag)
2455
2509
  }
2456
2510
  }
2511
+ /** The phone status chip's kind, which picks its `--mj-status-*` tokens. */
2512
+ get StatusKind() {
2513
+ return RunStatusKind(!!this.record?.CompletedAt, this.record?.Success);
2514
+ }
2457
2515
  /** @deprecated Use {@link GetStatusColor}. */
2458
2516
  getStatusColor() {
2459
2517
  return this.GetStatusColor();
@@ -2746,14 +2804,14 @@ let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtende
2746
2804
  // Don't auto-expand validation panel anymore - let user expand when needed
2747
2805
  }
2748
2806
  static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJAIPromptRunFormComponentExtended_BaseFactory; return function MJAIPromptRunFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJAIPromptRunFormComponentExtended_BaseFactory || (ɵMJAIPromptRunFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJAIPromptRunFormComponentExtended)))(__ngFactoryType__ || MJAIPromptRunFormComponentExtended); }; })(); }
2749
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJAIPromptRunFormComponentExtended, selectors: [["mj-ai-prompt-run-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 2, consts: [["form", "ngForm"], [3, "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "fullscreen-overlay"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [1, "prompt-run-header"], [1, "header-content"], [1, "run-overview"], [1, "run-icon-wrapper"], [1, "run-info"], [1, "run-title"], [1, "run-id"], [1, "run-meta"], [1, "meta-card", "status-card"], [1, "c3-card-label"], [1, "meta-card-body"], [1, "status-indicator"], [1, "meta-card", "execution-card"], [1, "model-card-c3"], ["title", "View Original Run", 1, "original-run"], [1, "run-actions"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Re-run this prompt", 3, "click"], [1, "fa-solid", "fa-play-circle"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Refresh data", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "metrics-bar"], [1, "form-content", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [2, "margin-bottom", "8px", 3, "ExpandedChange", "Expanded"], ["mjAccordionTitle", ""], [1, "panel-content"], [1, "nested-panels"], ["Size", "compact", "Icon", "fa-solid fa-comment-slash", "Title", "No input messages recorded"], [1, "error-message"], [1, "json-editor-container"], ["Size", "compact", "Icon", "fa-solid fa-inbox", "Title", "No result data recorded"], [1, "metrics-grid"], [1, "metric-card"], [1, "metric-header"], [1, "fa-solid", "fa-message"], ["title", "Full input the model processed \u2014 uncached (new) prompt tokens plus any cached tokens", 1, "metric-value", "large"], [1, "metric-rollup"], [1, "fa-solid", "fa-reply"], [1, "metric-value", "large"], [1, "fa-solid", "fa-coins"], ["title", "Prompt + completion + cached tokens \u2014 the full amount the model processed", 1, "metric-value", "large"], [1, "fa-solid", "fa-dollar-sign"], [1, "metric-currency"], [1, "additional-metrics"], [1, "metric-row"], [2, "margin-bottom", "8px", 3, "Expanded"], [1, "detail-fields-grid"], [1, "detail-field"], [1, "detail-value"], [1, "fa-solid", "fa-temperature-high"], [1, "fa-solid", "fa-percentage"], [1, "fa-solid", "fa-list-ol"], [1, "fa-solid", "fa-filter"], [1, "fa-solid", "fa-repeat"], [1, "fa-solid", "fa-plus-circle"], [1, "fa-solid", "fa-seedling"], [1, "fa-solid", "fa-stop-circle"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-strategy"], [1, "fa-solid", "fa-ranking-star"], [1, "detail-field", "full-width"], [1, "model-selection-json"], [1, "error-details-json"], [1, "prompt-card-c3"], [1, "meta-card", "prompt-single-card"], ["title", "View Agent Prompt", 1, "c3-child-section", 3, "click"], [1, "fa-solid", "fa-comment", "prompt-icon"], [1, "c3-divider"], [1, "c3-line"], [1, "c3-divider-label"], ["title", "View System Prompt", 1, "c3-parent-section", 3, "click"], [1, "fa-solid", "fa-cog"], [1, "fa-solid", "fa-arrow-up-right-from-square", "c3-link-icon"], ["title", "View Prompt", 1, "meta-card-body", "clickable", 3, "click"], [1, "fa-solid", "fa-comment-dots", 2, "color", "var(--mj-brand-primary)"], ["title", "View Model", 1, "c3-card-body", 3, "click"], [1, "c3-model-name"], [1, "fa-solid", "fa-microchip"], [1, "c3-vendor-name"], [1, "fa-solid", "fa-level-up-alt"], [1, "original-link", 3, "click"], [1, "metric-item"], [1, "metric-content"], [1, "metric-label"], [1, "metric-value"], ["href", "javascript:void(0)", 1, "config-link", 3, "click"], [1, "fa-solid", "fa-clock"], ["title", "Total tokens the model processed, including cached input", 1, "metric-item"], [1, "fa-solid", "fa-tachometer-alt"], [1, "fa-solid", "fa-code"], [1, "fa-solid", "fa-bolt"], [1, "fa-solid", "fa-calendar"], [1, "panel-title"], [1, "fa-solid", "fa-comment-dots"], [1, "panel-badge"], [1, "sub-expansion-panel", 2, "margin-bottom", "8px", 3, "Expanded"], [1, "sub-panel-content"], [1, "loading-state"], [3, "messages"], ["Size", "compact", "Icon", "fa-solid fa-comment-slash", "Title", "No chat messages found"], [3, "DataCapture", "DataShape", "DataCaptureNote"], ["Size", "compact", "Icon", "fa-solid fa-database", "Title", "No data object found"], [1, "json-toolbar"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Copy JSON", 3, "click"], [1, "fa-solid", "fa-copy"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "View full screen", 3, "click"], [1, "fa-solid", "fa-expand"], ["name", "formattedMessages", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "sub-panel-title"], [1, "fa-solid", "fa-comments"], [1, "panel-count"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-database"], ["name", "formattedData", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-square-check"], [1, "panel-badge", "error"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "error-content"], ["name", "formattedResult", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "error-info"], [1, "finish-reason"], [1, "error-details"], [1, "error-hint"], [2, "margin", "0"], [2, "height", "200px", "width", "100%", 3, "ngModel", "disabled", "language", "lineWrapping"], [1, "fa-solid", "fa-chart-line"], [1, "fa-solid", "fa-hourglass-start"], [1, "fa-solid", "fa-brain"], [1, "fa-solid", "fa-flag-checkered"], [1, "metric-value", "link", 3, "click"], [1, "fa-solid", "fa-external-link"], [1, "validation-summary"], [1, "summary-header"], [1, "validation-status"], [1, "validation-metrics"], [1, "metric-card", "small"], [1, "validation-error"], [1, "common-error"], [1, "retry-timeline"], [1, "validation-attempts"], [1, "validation-json"], [1, "fa-solid", "fa-shield-check"], [1, "panel-badge", "success"], [1, "error-count"], [1, "timeline-info"], [1, "timeline-stat"], [1, "fa-solid", "fa-stopwatch"], [1, "attempts-list"], [1, "attempt-item", 3, "success", "failed"], [1, "attempt-item"], [1, "attempt-number"], [1, "attempt-details"], [1, "attempt-time"], [1, "output-length"], [1, "attempt-error"], [1, "json-viewer-container"], ["name", "formattedValidationSummary", 2, "height", "200px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], ["name", "formattedValidationAttempts", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "parent-run-section"], [1, "child-runs-section"], [1, "fa-solid", "fa-sitemap"], [1, "run-item", "parent", 3, "click"], [1, "run-item-icon"], [1, "run-item-content"], [1, "run-item-title"], [1, "run-item-type"], [1, "run-item-meta"], [1, "fa-solid", "fa-level-down-alt"], [1, "runs-list"], [1, "run-item", "child"], [1, "run-item", "child", 3, "click"], [1, "execution-order"], ["title", "View Agent", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-robot"], [1, "fa-solid", "fa-check-circle"], ["name", "formattedModelSpecificResponseDetails", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-key"], ["title", "View Judge Prompt", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-gavel"], [1, "fa-solid", "fa-star"], [1, "detail-value", "error"], [1, "fa-solid", "fa-ban"], [1, "fa-solid", "fa-exclamation-circle"], ["name", "formattedModelSelection", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], ["name", "formattedErrorDetails", 2, "height", "200px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fullscreen-overlay", 3, "click"], [1, "fullscreen-container", 3, "click"], [1, "fullscreen-header"], [1, "fullscreen-title"], [1, "fullscreen-actions"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Copy content", 3, "click"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "fullscreen-body"], [2, "height", "100%", "width", "100%", 3, "value", "readonly", "language"]], template: function MJAIPromptRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
2750
- i0.ɵɵconditionalCreate(0, MJAIPromptRunFormComponentExtended_Conditional_0_Template, 203, 104, "mj-record-form-container", 1);
2807
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJAIPromptRunFormComponentExtended, selectors: [["mj-ai-prompt-run-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 2, consts: [["form", "ngForm"], [3, "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "fullscreen-overlay"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [1, "prompt-run-header", "phone-hero"], [1, "header-content"], [1, "run-overview"], [1, "run-icon-wrapper"], [1, "run-info"], [1, "run-title"], [1, "run-id"], [1, "phone-hero-only", "phone-hero-status"], ["aria-hidden", "true"], [1, "run-meta", "phone-hero-detail"], [1, "meta-card", "status-card"], [1, "c3-card-label"], [1, "meta-card-body"], [1, "status-indicator"], [1, "meta-card", "execution-card"], [1, "model-card-c3"], ["title", "View Original Run", 1, "original-run"], [1, "run-actions", "phone-hero-detail"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Re-run this prompt", 3, "click"], [1, "fa-solid", "fa-play-circle"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Refresh data", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "metrics-bar", "phone-hero-detail", "phone-hero-stats"], ["type", "button", 1, "phone-hero-summary"], [1, "form-content", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [3, "ActiveKeyChange", "Enabled", "ActiveKey"], ["SectionKey", "input", "SectionTitle", "Input", "SectionIcon", "fa-solid fa-comment-dots", 2, "margin-bottom", "8px", 3, "ExpandedChange", "Expanded"], ["mjAccordionTitle", ""], [1, "panel-content"], [1, "nested-panels"], ["Size", "compact", "Icon", "fa-solid fa-comment-slash", "Title", "No input messages recorded"], ["SectionKey", "result", "SectionTitle", "Result", "SectionIcon", "fa-solid fa-square-check", 2, "margin-bottom", "8px", 3, "ExpandedChange", "Expanded"], [1, "error-message"], [1, "json-editor-container"], ["Size", "compact", "Icon", "fa-solid fa-inbox", "Title", "No result data recorded"], ["SectionKey", "metrics", "SectionTitle", "Token Usage & Metrics", "SectionIcon", "fa-solid fa-chart-line", 2, "margin-bottom", "8px", 3, "ExpandedChange", "Expanded"], [1, "metrics-grid"], [1, "metric-card"], [1, "metric-header"], [1, "fa-solid", "fa-message"], ["title", "Full input the model processed \u2014 uncached (new) prompt tokens plus any cached tokens", 1, "metric-value", "large"], [1, "metric-rollup"], [1, "fa-solid", "fa-reply"], [1, "metric-value", "large"], [1, "fa-solid", "fa-coins"], ["title", "Prompt + completion + cached tokens \u2014 the full amount the model processed", 1, "metric-value", "large"], [1, "fa-solid", "fa-dollar-sign"], [1, "metric-currency"], [1, "additional-metrics"], [1, "metric-row"], ["SectionKey", "validation", "SectionTitle", "Validation & Retries", "SectionIcon", "fa-solid fa-shield-check", 2, "margin-bottom", "8px", 3, "Expanded"], ["SectionKey", "hierarchy", "SectionTitle", "Run Hierarchy", "SectionIcon", "fa-solid fa-sitemap", 2, "margin-bottom", "8px", 3, "Expanded"], ["SectionKey", "details", "SectionTitle", "Additional Details", "SectionIcon", "fa-solid fa-info-circle", 2, "margin-bottom", "8px", 3, "Expanded"], [1, "detail-fields-grid"], [1, "detail-field"], [1, "detail-value"], [1, "fa-solid", "fa-temperature-high"], [1, "fa-solid", "fa-percentage"], [1, "fa-solid", "fa-list-ol"], [1, "fa-solid", "fa-filter"], [1, "fa-solid", "fa-repeat"], [1, "fa-solid", "fa-plus-circle"], [1, "fa-solid", "fa-seedling"], [1, "fa-solid", "fa-stop-circle"], [1, "fa-solid", "fa-wand-magic-sparkles"], ["SectionKey", "model-response", "SectionTitle", "Model Specific Response Details", "SectionIcon", "fa-solid fa-microchip", 2, "margin-bottom", "8px", 3, "Expanded"], ["SectionKey", "model-selection", "SectionTitle", "Model Selection & Performance", "SectionIcon", "fa-solid fa-microchip", 2, "margin-bottom", "8px", 3, "ExpandedChange", "Expanded"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-strategy"], [1, "fa-solid", "fa-ranking-star"], [1, "detail-field", "full-width"], [1, "model-selection-json"], [1, "error-details-json"], [1, "prompt-card-c3"], [1, "meta-card", "prompt-single-card"], ["title", "View Agent Prompt", 1, "c3-child-section", 3, "click"], [1, "fa-solid", "fa-comment", "prompt-icon"], [1, "c3-divider"], [1, "c3-line"], [1, "c3-divider-label"], ["title", "View System Prompt", 1, "c3-parent-section", 3, "click"], [1, "fa-solid", "fa-cog"], [1, "fa-solid", "fa-arrow-up-right-from-square", "c3-link-icon"], ["title", "View Prompt", 1, "meta-card-body", "clickable", 3, "click"], [1, "fa-solid", "fa-comment-dots", 2, "color", "var(--mj-brand-primary)"], ["title", "View Model", 1, "c3-card-body", 3, "click"], [1, "c3-model-name"], [1, "fa-solid", "fa-microchip"], [1, "c3-vendor-name"], [1, "fa-solid", "fa-level-up-alt"], [1, "original-link", 3, "click"], [1, "metric-item"], [1, "metric-content"], [1, "metric-label"], [1, "metric-value"], ["href", "javascript:void(0)", 1, "config-link", 3, "click"], [1, "fa-solid", "fa-clock"], ["title", "Total tokens the model processed, including cached input", 1, "metric-item"], [1, "fa-solid", "fa-tachometer-alt"], [1, "fa-solid", "fa-code"], [1, "fa-solid", "fa-bolt"], [1, "fa-solid", "fa-calendar"], ["type", "button", 1, "phone-hero-summary", 3, "click"], [1, "phone-hero-summary-text"], ["aria-hidden", "true", 1, "fa-solid", "fa-chevron-down"], [1, "panel-title"], [1, "fa-solid", "fa-comment-dots"], [1, "panel-badge"], [1, "sub-expansion-panel", 2, "margin-bottom", "8px", 3, "Expanded"], [1, "sub-panel-content"], [1, "loading-state"], [3, "messages"], ["Size", "compact", "Icon", "fa-solid fa-comment-slash", "Title", "No chat messages found"], [3, "DataCapture", "DataShape", "DataCaptureNote"], ["Size", "compact", "Icon", "fa-solid fa-database", "Title", "No data object found"], [1, "json-toolbar"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Copy JSON", 3, "click"], [1, "fa-solid", "fa-copy"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "View full screen", 3, "click"], [1, "fa-solid", "fa-expand"], ["name", "formattedMessages", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "sub-panel-title"], [1, "fa-solid", "fa-comments"], [1, "panel-count"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-database"], ["name", "formattedData", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-square-check"], [1, "panel-badge", "error"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "error-content"], ["name", "formattedResult", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "error-info"], [1, "finish-reason"], [1, "error-details"], [1, "error-hint"], [2, "margin", "0"], [2, "height", "200px", "width", "100%", 3, "ngModel", "disabled", "language", "lineWrapping"], [1, "fa-solid", "fa-chart-line"], [1, "fa-solid", "fa-hourglass-start"], [1, "fa-solid", "fa-brain"], [1, "fa-solid", "fa-flag-checkered"], [1, "metric-value", "link", 3, "click"], [1, "fa-solid", "fa-external-link"], ["SectionKey", "validation", "SectionTitle", "Validation & Retries", "SectionIcon", "fa-solid fa-shield-check", 2, "margin-bottom", "8px", 3, "ExpandedChange", "Expanded"], [1, "validation-summary"], [1, "summary-header"], [1, "validation-status"], [1, "validation-metrics"], [1, "metric-card", "small"], [1, "validation-error"], [1, "common-error"], [1, "retry-timeline"], [1, "validation-attempts"], [1, "validation-json"], [1, "fa-solid", "fa-shield-check"], [1, "panel-badge", "success"], [1, "error-count"], [1, "timeline-info"], [1, "timeline-stat"], [1, "fa-solid", "fa-stopwatch"], [1, "attempts-list"], [1, "attempt-item", 3, "success", "failed"], [1, "attempt-item"], [1, "attempt-number"], [1, "attempt-details"], [1, "attempt-time"], [1, "output-length"], [1, "attempt-error"], [1, "json-viewer-container"], ["name", "formattedValidationSummary", 2, "height", "200px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], ["name", "formattedValidationAttempts", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "parent-run-section"], [1, "child-runs-section"], [1, "fa-solid", "fa-sitemap"], [1, "run-item", "parent", 3, "click"], [1, "run-item-icon"], [1, "run-item-content"], [1, "run-item-title"], [1, "run-item-type"], [1, "run-item-meta"], [1, "fa-solid", "fa-level-down-alt"], [1, "runs-list"], [1, "run-item", "child"], [1, "run-item", "child", 3, "click"], [1, "execution-order"], ["title", "View Agent", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-robot"], [1, "fa-solid", "fa-check-circle"], ["SectionKey", "model-response", "SectionTitle", "Model Specific Response Details", "SectionIcon", "fa-solid fa-microchip", 2, "margin-bottom", "8px", 3, "ExpandedChange", "Expanded"], ["name", "formattedModelSpecificResponseDetails", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-key"], ["title", "View Judge Prompt", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-gavel"], [1, "fa-solid", "fa-star"], [1, "detail-value", "error"], [1, "fa-solid", "fa-ban"], [1, "fa-solid", "fa-exclamation-circle"], ["name", "formattedModelSelection", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], ["name", "formattedErrorDetails", 2, "height", "200px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fullscreen-overlay", 3, "click"], [1, "fullscreen-container", 3, "click"], [1, "fullscreen-header"], [1, "fullscreen-title"], [1, "fullscreen-actions"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Copy content", 3, "click"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "fullscreen-body"], [2, "height", "100%", "width", "100%", 3, "value", "readonly", "language"]], template: function MJAIPromptRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
2808
+ i0.ɵɵconditionalCreate(0, MJAIPromptRunFormComponentExtended_Conditional_0_Template, 208, 115, "mj-record-form-container", 1);
2751
2809
  i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_1_Template, 15, 4, "div", 2);
2752
2810
  } if (rf & 2) {
2753
2811
  i0.ɵɵconditional(ctx.record ? 0 : -1);
2754
2812
  i0.ɵɵadvance();
2755
2813
  i0.ɵɵconditional(ctx.FullScreenContent ? 1 : -1);
2756
- } }, dependencies: [i1.ɵNgNoValidate, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJEmptyStateComponent, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i3.MjRecordFormContainerComponent, i4.CodeEditorComponent, i5.ChatMessageViewerComponent, i6.PromptRunDataCaptureNoteComponent, i7.DecimalPipe, i7.DatePipe], styles: ["\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0 !important;\n overflow: hidden;\n}\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n\n.error-info[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding: 16px;\n background-color: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n.finish-reason[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: var(--mj-status-error);\n font-size: 14px;\n}\n\n.error-details[_ngcontent-%COMP%] {\n margin-top: 12px;\n}\n\n.error-details[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: color-mix(in srgb, var(--mj-status-error) 80%, black);\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint[_ngcontent-%COMP%] {\n margin: 0;\n color: color-mix(in srgb, var(--mj-status-error) 70%, black);\n font-size: 14px;\n font-style: italic;\n}\n\n\n.prompt-run-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n}\n\n.run-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-title[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-size: 0.8em;\n color: var(--mj-text-muted);\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: stretch;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n\n.meta-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n}\n\n.meta-card-body[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n}\n\n.meta-card-body.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: color 0.15s;\n}\n\n.meta-card-body.clickable[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n\n.status-indicator[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n\n.prompt-card-c3[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.c3-child-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n font-size: 0.92em;\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-child-section[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.c3-child-section[_ngcontent-%COMP%] i.prompt-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.c3-divider[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 14px;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-line[_ngcontent-%COMP%] {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n.c3-divider-label[_ngcontent-%COMP%] {\n font-size: 0.55rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.c3-parent-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px 9px 14px;\n font-size: 0.76em;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.c3-parent-section[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n}\n\n.c3-parent-section[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n}\n\n.c3-link-icon[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 0.6rem !important;\n opacity: 0.4;\n}\n\n.c3-parent-section[_ngcontent-%COMP%]:hover .c3-link-icon[_ngcontent-%COMP%] {\n opacity: 0.8;\n}\n\n\n.model-card-c3[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: border-color 0.15s;\n}\n\n.model-card-c3[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n}\n\n.c3-card-label[_ngcontent-%COMP%] {\n font-size: 0.6rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.c3-card-body[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.c3-model-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.c3-model-name[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.9rem;\n}\n\n.c3-vendor-name[_ngcontent-%COMP%] {\n font-size: 0.72em;\n color: var(--mj-text-muted);\n font-weight: 400;\n padding-left: 22px;\n}\n\n.original-run[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n font-size: 0.85em;\n}\n\n.original-link[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-status-error) 85%, black);\n text-decoration: underline;\n}\n\n.run-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n\n.metrics-bar[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n flex-wrap: wrap;\n}\n\n.metric-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.metric-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label[_ngcontent-%COMP%] {\n font-size: 0.75em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value[_ngcontent-%COMP%] {\n font-size: 1.1em;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n text-decoration: underline;\n}\n\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n\n.sub-panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content[_ngcontent-%COMP%] {\n padding: 0;\n}\n\n\n.nested-panels[_ngcontent-%COMP%] mj-accordion-panel[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n\n.sub-panel-content[_ngcontent-%COMP%] mj-chat-message-viewer[_ngcontent-%COMP%] {\n display: block;\n min-height: 200px;\n max-height: 750px; \n height: auto;\n overflow: hidden;\n}\n\n\n.sub-expansion-panel[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n\n.sub-expansion-panel[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.panel-badge[_ngcontent-%COMP%] {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.panel-count[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content[_ngcontent-%COMP%] {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n\n.json-editor-container[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: flex-end;\n}\n\n\n.error-message[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.5em;\n color: var(--mj-status-error);\n flex-shrink: 0;\n}\n\n.error-content[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 1em;\n}\n\n.error-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n\n.loading-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: var(--mj-brand-primary);\n}\n\n.loading-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n\n.metrics-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.metric-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.9em;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.metric-value.large[_ngcontent-%COMP%] {\n font-size: 1.8em;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.metric-rollup[_ngcontent-%COMP%] {\n margin-top: 8px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.metric-currency[_ngcontent-%COMP%] {\n margin-top: 4px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n}\n\n\n.additional-metrics[_ngcontent-%COMP%] {\n padding-top: 16px;\n}\n\n.metric-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.metric-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-primary);\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n}\n\n\n.parent-run-section[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.parent-run-section[_ngcontent-%COMP%]:last-child, \n.child-runs-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n}\n\n.run-item.parent[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.run-item.parent[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n}\n\n.run-item-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n color: var(--mj-text-inverse);\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.run-item-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.run-item-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.run-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%]:last-child {\n color: var(--mj-text-muted);\n font-size: 0.85em;\n}\n\n\n.detail-fields-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: var(--mj-text-primary);\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n color: var(--mj-text-muted);\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%]:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n opacity: 0.5;\n}\n\n\nmj-accordion-panel[_ngcontent-%COMP%] {\n display: block;\n}\n\n\n.validation-summary[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.summary-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.validation-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.validation-status.failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.validation-metrics[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small[_ngcontent-%COMP%] {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.error-count[_ngcontent-%COMP%] {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n\n.retry-timeline[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.retry-timeline[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.timeline-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n}\n\n.timeline-stat[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n\n.validation-attempts[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.validation-attempts[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.attempts-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 18%, var(--mj-bg-surface));\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n}\n\n.attempt-number[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.attempt-item.success[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.attempt-details[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.attempt-error[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n flex: 1 0 100%;\n}\n\n.output-length[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n\n.validation-json[_ngcontent-%COMP%] {\n margin-top: 24px;\n}\n\n.validation-json[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.json-viewer-container[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n\n.panel-badge.success[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n\n.fullscreen-overlay[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n height: 100%;\n}"], changeDetection: 0 }); }
2814
+ } }, dependencies: [i1.ɵNgNoValidate, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJEmptyStateComponent, i2.MJAccordionSectionsComponent, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i3.MjRecordFormContainerComponent, i4.CodeEditorComponent, i5.ChatMessageViewerComponent, i6.PromptRunDataCaptureNoteComponent, i7.DecimalPipe, i7.DatePipe], styles: ["\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0 !important;\n overflow: hidden;\n}\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n\n.error-info[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding: 16px;\n background-color: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n.finish-reason[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: var(--mj-status-error);\n font-size: 14px;\n}\n\n.error-details[_ngcontent-%COMP%] {\n margin-top: 12px;\n}\n\n.error-details[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: color-mix(in srgb, var(--mj-status-error) 80%, black);\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint[_ngcontent-%COMP%] {\n margin: 0;\n color: color-mix(in srgb, var(--mj-status-error) 70%, black);\n font-size: 14px;\n font-style: italic;\n}\n\n\n.prompt-run-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n min-width: 0; \n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n}\n\n.run-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-title[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-size: 0.8em;\n color: var(--mj-text-muted);\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: stretch;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n\n.meta-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n}\n\n.meta-card-body[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n}\n\n.meta-card-body.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: color 0.15s;\n}\n\n.meta-card-body.clickable[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n\n.status-indicator[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n\n.prompt-card-c3[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.c3-child-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n font-size: 0.92em;\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-child-section[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.c3-child-section[_ngcontent-%COMP%] i.prompt-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.c3-divider[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 14px;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-line[_ngcontent-%COMP%] {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n.c3-divider-label[_ngcontent-%COMP%] {\n font-size: 0.55rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.c3-parent-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px 9px 14px;\n font-size: 0.76em;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.c3-parent-section[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n}\n\n.c3-parent-section[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n}\n\n.c3-link-icon[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 0.6rem !important;\n opacity: 0.4;\n}\n\n.c3-parent-section[_ngcontent-%COMP%]:hover .c3-link-icon[_ngcontent-%COMP%] {\n opacity: 0.8;\n}\n\n\n.model-card-c3[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: border-color 0.15s;\n}\n\n.model-card-c3[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n}\n\n.c3-card-label[_ngcontent-%COMP%] {\n font-size: 0.6rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.c3-card-body[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.c3-model-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.c3-model-name[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.9rem;\n}\n\n.c3-vendor-name[_ngcontent-%COMP%] {\n font-size: 0.72em;\n color: var(--mj-text-muted);\n font-weight: 400;\n padding-left: 22px;\n}\n\n.original-run[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n font-size: 0.85em;\n}\n\n.original-link[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-status-error) 85%, black);\n text-decoration: underline;\n}\n\n.run-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n\n.metrics-bar[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n flex-wrap: wrap;\n}\n\n.metric-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.metric-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label[_ngcontent-%COMP%] {\n font-size: 0.75em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value[_ngcontent-%COMP%] {\n font-size: 1.1em;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n text-decoration: underline;\n}\n\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n\n\n\n.form-content[_ngcontent-%COMP%] mj-accordion-sections[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n\n.sub-panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content[_ngcontent-%COMP%] {\n padding: 0;\n}\n\n\n.nested-panels[_ngcontent-%COMP%] mj-accordion-panel[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n\n.sub-panel-content[_ngcontent-%COMP%] mj-chat-message-viewer[_ngcontent-%COMP%] {\n display: block;\n min-height: 200px;\n max-height: 750px; \n height: auto;\n overflow: hidden;\n}\n\n\n.sub-expansion-panel[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n\n.sub-expansion-panel[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.panel-badge[_ngcontent-%COMP%] {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.panel-count[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content[_ngcontent-%COMP%] {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n\n.json-editor-container[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: flex-end;\n}\n\n\n.error-message[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.5em;\n color: var(--mj-status-error);\n flex-shrink: 0;\n}\n\n.error-content[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 1em;\n}\n\n.error-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n\n.loading-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: var(--mj-brand-primary);\n}\n\n.loading-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n\n.metrics-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.metric-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.9em;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.metric-value.large[_ngcontent-%COMP%] {\n font-size: 1.8em;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.metric-rollup[_ngcontent-%COMP%] {\n margin-top: 8px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.metric-currency[_ngcontent-%COMP%] {\n margin-top: 4px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n}\n\n\n.additional-metrics[_ngcontent-%COMP%] {\n padding-top: 16px;\n}\n\n.metric-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.metric-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-primary);\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n}\n\n\n.parent-run-section[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.parent-run-section[_ngcontent-%COMP%]:last-child, \n.child-runs-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n}\n\n.run-item.parent[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.run-item.parent[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n}\n\n.run-item-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n color: var(--mj-text-inverse);\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.run-item-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.run-item-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.run-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%]:last-child {\n color: var(--mj-text-muted);\n font-size: 0.85em;\n}\n\n\n.detail-fields-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: var(--mj-text-primary);\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n color: var(--mj-text-muted);\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%]:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n opacity: 0.5;\n}\n\n\nmj-accordion-panel[_ngcontent-%COMP%] {\n display: block;\n}\n\n\n.validation-summary[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.summary-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.validation-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.validation-status.failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.validation-metrics[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small[_ngcontent-%COMP%] {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.error-count[_ngcontent-%COMP%] {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n\n.retry-timeline[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.retry-timeline[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.timeline-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n}\n\n.timeline-stat[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n\n.validation-attempts[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.validation-attempts[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.attempts-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 18%, var(--mj-bg-surface));\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n}\n\n.attempt-number[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.attempt-item.success[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.attempt-details[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.attempt-error[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n flex: 1 0 100%;\n}\n\n.output-length[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n\n.validation-json[_ngcontent-%COMP%] {\n margin-top: 24px;\n}\n\n.validation-json[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.json-viewer-container[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n\n.panel-badge.success[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n\n.fullscreen-overlay[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n@media (max-width: 768px) {\n .header-content[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n\n .run-actions[_ngcontent-%COMP%] {\n flex-basis: 100%;\n }\n}\n\n\n\n\n@media (max-width: 768px) {\n .run-overview[_ngcontent-%COMP%] {\n gap: 10px;\n }\n\n .run-icon-wrapper[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n border-radius: 10px;\n }\n\n .run-title[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n row-gap: 4px;\n font-size: 1.15em;\n }\n\n .form-content[_ngcontent-%COMP%] {\n padding: 12px;\n }\n\n .form-content[_ngcontent-%COMP%] .panel-content[_ngcontent-%COMP%] {\n padding: 0;\n }\n}", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n.phone-hero-summary[_ngcontent-%COMP%], \n.phone-hero-only[_ngcontent-%COMP%] {\n display: none;\n}\n\n@media (max-width: 768px) {\n .phone-hero[_ngcontent-%COMP%] {\n padding: 12px !important;\n }\n\n \n .phone-hero.hero-compact[_ngcontent-%COMP%] .phone-hero-detail[_ngcontent-%COMP%], \n .phone-hero.hero-view[_ngcontent-%COMP%] .phone-hero-hide[_ngcontent-%COMP%] {\n display: none !important;\n }\n\n .phone-hero-only[_ngcontent-%COMP%] {\n display: inline-flex;\n }\n\n \n .phone-hero[_ngcontent-%COMP%] .phone-hero-stats[_ngcontent-%COMP%] {\n display: grid !important;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 8px;\n }\n\n .phone-hero-status[_ngcontent-%COMP%] {\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 999px);\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n vertical-align: middle;\n white-space: nowrap;\n }\n\n \n .phone-hero-status[data-status=\"running\"][_ngcontent-%COMP%] { color: var(--mj-status-warning-text); background: var(--mj-status-warning-bg); }\n .phone-hero-status[data-status=\"success\"][_ngcontent-%COMP%] { color: var(--mj-status-success-text); background: var(--mj-status-success-bg); }\n .phone-hero-status[data-status=\"error\"][_ngcontent-%COMP%] { color: var(--mj-status-error-text); background: var(--mj-status-error-bg); }\n .phone-hero-status[data-status=\"info\"][_ngcontent-%COMP%] { color: var(--mj-status-info-text); background: var(--mj-status-info-bg); }\n\n .phone-hero-top[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n gap: 10px;\n }\n\n .phone-hero-actions[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .phone-hero[_ngcontent-%COMP%] .phone-hero-run[_ngcontent-%COMP%] {\n width: 100%;\n min-height: 44px;\n justify-content: center;\n }\n\n \n\n .phone-hero-summary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n min-height: 44px;\n margin-top: 8px;\n padding: 0 4px;\n border: 0;\n border-top: 1px solid color-mix(in srgb, currentColor 20%, transparent);\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: var(--mj-text-sm);\n text-align: left;\n cursor: pointer;\n opacity: 0.85;\n }\n\n .phone-hero-summary[_ngcontent-%COMP%]:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n }\n\n .phone-hero-summary-text[_ngcontent-%COMP%] {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .phone-hero-summary[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n flex-shrink: 0;\n transition: transform 0.15s ease;\n }\n\n .phone-hero-summary[aria-expanded=\"true\"][_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .phone-hero-summary[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n transition: none;\n }\n}"], changeDetection: 0 }); }
2757
2815
  };
2758
2816
  MJAIPromptRunFormComponentExtended = __decorate([
2759
2817
  RegisterClass(BaseFormComponent, 'MJ: AI Prompt Runs')
@@ -2761,7 +2819,7 @@ MJAIPromptRunFormComponentExtended = __decorate([
2761
2819
  export { MJAIPromptRunFormComponentExtended };
2762
2820
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJAIPromptRunFormComponentExtended, [{
2763
2821
  type: Component,
2764
- args: [{ standalone: false, selector: 'mj-ai-prompt-run-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"toolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n\n <!-- Header Section -->\n <div class=\"prompt-run-header\">\n <div class=\"header-content\">\n <div class=\"run-overview\">\n <div class=\"run-icon-wrapper\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n </div>\n <div class=\"run-info\">\n <h1 class=\"run-title\">\n Prompt Run\n @if (record.ID) {\n <span class=\"run-id\">#{{ record.ID.substring(0, 8) }}</span>\n }\n </h1>\n <div class=\"run-meta\">\n <!-- Status Card -->\n <div class=\"meta-card status-card\">\n <div class=\"c3-card-label\">Status</div>\n <div class=\"meta-card-body\">\n <span class=\"status-indicator\" [style.background-color]=\"getStatusColor()\"></span>\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n {{ getStatusText() }}\n </div>\n </div>\n\n <!-- Execution Card -->\n @if (record.RunType) {\n <div class=\"meta-card execution-card\">\n <div class=\"c3-card-label\">Execution</div>\n <div class=\"meta-card-body\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\" [style.color]=\"getRunTypeColor(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n\n <!-- Prompt Card -->\n @if (prompt) {\n @if (record.ChildPromptID) {\n <!-- C3 Stacked Connector: child prompt prominent, parent nested -->\n <div class=\"prompt-card-c3\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"c3-child-section\" (click)=\"navigateToEntity('MJ: AI Prompts', record.ChildPromptID)\" title=\"View Agent Prompt\">\n <i class=\"fa-solid fa-comment prompt-icon\"></i>\n {{ record.ChildPrompt }}\n </div>\n <div class=\"c3-divider\">\n <span class=\"c3-line\"></span>\n <span class=\"c3-divider-label\">wrapped by</span>\n <span class=\"c3-line\"></span>\n </div>\n <div class=\"c3-parent-section\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View System Prompt\">\n <i class=\"fa-solid fa-cog\"></i>\n {{ prompt.Name }}\n <i class=\"fa-solid fa-arrow-up-right-from-square c3-link-icon\"></i>\n </div>\n </div>\n } @else {\n <!-- Single prompt (no child) \u2014 same card style -->\n <div class=\"meta-card prompt-single-card\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"meta-card-body clickable\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View Prompt\">\n <i class=\"fa-solid fa-comment-dots\" style=\"color: var(--mj-brand-primary);\"></i>\n {{ prompt.Name }}\n </div>\n </div>\n }\n }\n\n <!-- Model Card -->\n @if (model) {\n <div class=\"model-card-c3\">\n <div class=\"c3-card-label\">Model</div>\n <div class=\"c3-card-body\" (click)=\"navigateToEntity('MJ: AI Models', model.ID)\" title=\"View Model\">\n <span class=\"c3-model-name\"><i class=\"fa-solid fa-microchip\"></i> {{ model.Name }}</span>\n @if (record.Vendor) {\n <span class=\"c3-vendor-name\">{{ record.Vendor }}</span>\n }\n </div>\n </div>\n }\n @if (record.RerunFromPromptRunID) {\n <span class=\"original-run\" title=\"View Original Run\">\n <i class=\"fa-solid fa-level-up-alt\"></i>\n <a (click)=\"navigateToOriginalRun()\" class=\"original-link\">Original Run</a>\n </span>\n }\n </div>\n </div>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"run-actions\">\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"reRunPrompt()\" title=\"Re-run this prompt\">\n <i class=\"fa-solid fa-play-circle\"></i>\n Re-Run\n </button>\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"refreshData()\" title=\"Refresh data\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n \n <!-- Key Metrics Bar -->\n @if (record.ConfigurationID) {\n <!-- Configuration Bar -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-cog\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Configuration</div>\n <div class=\"metric-value\">\n <a href=\"javascript:void(0)\" class=\"config-link\" (click)=\"navigateToEntity('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\n </div>\n @if (record.Temperature !== null && record.Temperature !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Temperature</div>\n <div class=\"metric-value\">{{ record.Temperature }}</div>\n </div>\n </div>\n }\n @if (record.TopP !== null && record.TopP !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-percentage\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top P</div>\n <div class=\"metric-value\">{{ record.TopP }}</div>\n </div>\n </div>\n }\n @if (record.TopK !== null && record.TopK !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-list-ol\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top K</div>\n <div class=\"metric-value\">{{ record.TopK }}</div>\n </div>\n </div>\n }\n @if (record.EffortLevel !== null && record.EffortLevel !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-tachometer-alt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Effort Level</div>\n <div class=\"metric-value\">{{ record.EffortLevel }}</div>\n </div>\n </div>\n }\n @if (record.ResponseFormat) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-code\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Response Format</div>\n <div class=\"metric-value\">{{ record.ResponseFormat }}</div>\n </div>\n </div>\n }\n </div>\n \n <!-- Execution Metrics Bar (always show when configuration exists) -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\" title=\"Total tokens the model processed, including cached input\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(TotalTokensProcessed) }}</div>\n </div>\n </div>\n @if (record.TokensCacheRead) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-bolt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cached</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensCacheRead) }}</div>\n </div>\n </div>\n }\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n } @else {\n <!-- Execution Metrics Bar (original behavior when no configuration) -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\" title=\"Total tokens the model processed, including cached input\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(TotalTokensProcessed) }}</div>\n </div>\n </div>\n @if (record.TokensCacheRead) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-bolt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cached</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensCacheRead) }}</div>\n </div>\n </div>\n }\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Main Content with Expansion Panels -->\n <div class=\"form-content\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n\n <!-- Input Panel with nested sub-panels -->\n <mj-accordion-panel [Expanded]=\"inputExpanded\" (ExpandedChange)=\"onInputPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n Input\n @if (record.Messages && record.Messages.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (record.Messages && record.Messages.trim() !== '') {\n <!-- Nested expansion panels for sub-sections -->\n <div class=\"nested-panels\">\n <!-- Messages Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"messagesExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-comments\"></i>\n Messages\n @if (chatMessages.length > 0) {\n <span class=\"panel-count\">({{ chatMessages.length }})</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (isParsingMessages || isLoadingRelatedData) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <p>Loading messages...</p>\n </div>\n } @else if (chatMessages.length > 0) {\n <mj-chat-message-viewer \n [messages]=\"chatMessages\">\n </mj-chat-message-viewer>\n } @else {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-comment-slash\"\n Title=\"No chat messages found\" />\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Data Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"dataExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-database\"></i>\n Data\n @if (inputData) {\n <span class=\"panel-badge\">Object</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n <mj-prompt-run-data-capture-note [DataCapture]=\"DataCapture\" [DataShape]=\"DataShape\" [DataCaptureNote]=\"DataCaptureNote\" />\n @if (inputData && formattedData) {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedData, 'Data')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedData, 'json', 'Data')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedData\"\n name=\"formattedData\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else if (DataCapture !== 'None') {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-database\"\n Title=\"No data object found\" />\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Raw Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"rawExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Raw\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedMessages, 'Messages')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedMessages, 'json', 'Raw Messages')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedMessages\"\n name=\"formattedMessages\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </mj-accordion-panel>\n </div>\n } @else {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-comment-slash\"\n Title=\"No input messages recorded\" />\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Result Panel -->\n <mj-accordion-panel [Expanded]=\"resultExpanded\" (ExpandedChange)=\"onResultPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-square-check\"></i>\n Result\n @if (record.Result && record.Result.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n @if (record.ErrorMessage) {\n <span class=\"panel-badge error\">Error</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (record.ErrorMessage) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <div class=\"error-content\">\n <h4>Error Message</h4>\n <p>{{ record.ErrorMessage }}</p>\n </div>\n </div>\n }\n \n @if (record.Result && record.Result.trim() !== '') {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedResult, 'Result')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedResult, 'json', 'Result')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedResult\"\n name=\"formattedResult\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else if (!record.ErrorMessage) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-inbox\"\n Title=\"No result data recorded\">\n @if (record.CompletedAt && (record.Status === 'Failed' || record.Success === false)) {\n <div class=\"error-info\">\n @if (record.Status) {\n <p class=\"finish-reason\">\n <strong>Status:</strong> {{ record.Status }}\n </p>\n }\n @if (formattedErrorDetails) {\n <div class=\"error-details\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor\n [ngModel]=\"formattedErrorDetails\"\n [disabled]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n }\n @if (!formattedErrorDetails) {\n <p class=\"error-hint\">\n The prompt execution failed but no additional error information is available.\n </p>\n }\n </div>\n }\n </mj-empty-state>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Token Usage & Metrics Panel -->\n <mj-accordion-panel [Expanded]=\"metricsExpanded\" (ExpandedChange)=\"onMetricsPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Token Usage &amp; Metrics\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"metrics-grid\">\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-message\"></i>\n <h4>Prompt Tokens</h4>\n </div>\n <div class=\"metric-value large\" title=\"Full input the model processed \u2014 uncached (new) prompt tokens plus any cached tokens\">{{ formatTokens(FullPromptTokens) }}</div>\n @if (CachedTokens > 0) {\n <div class=\"metric-rollup\">\n <span>incl. {{ formatTokens(CachedTokens) }} cached</span>\n </div>\n }\n @if (record.TokensPromptRollup && record.TokensPromptRollup !== record.TokensPrompt) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensPromptRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-reply\"></i>\n <h4>Completion Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensCompletion) }}</div>\n @if (record.TokensCompletionRollup && record.TokensCompletionRollup !== record.TokensCompletion) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensCompletionRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-coins\"></i>\n <h4>Total Tokens</h4>\n </div>\n <div class=\"metric-value large\" title=\"Prompt + completion + cached tokens \u2014 the full amount the model processed\">{{ formatTokens(TotalTokensProcessed) }}</div>\n @if (CachedTokens > 0) {\n <div class=\"metric-rollup\">\n <span>incl. {{ formatTokens(CachedTokens) }} cached</span>\n </div>\n }\n @if (record.TokensUsedRollup && record.TokensUsedRollup !== record.TokensUsed) {\n <div class=\"metric-rollup\">\n <span>Net rollup: {{ formatTokens(record.TokensUsedRollup) }}</span>\n </div>\n }\n </div>\n\n <!-- Prompt-cache tokens (provider cache reads = hits, writes = cache creation).\n Only rendered when the provider reported cache usage. -->\n @if (record.TokensCacheRead != null || record.TokensCacheWrite != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-bolt\"></i>\n <h4>Cache Read</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensCacheRead) }}</div>\n @if (record.TokensCacheWrite) {\n <div class=\"metric-rollup\">\n <span>Write: {{ formatTokens(record.TokensCacheWrite) }}</span>\n </div>\n }\n @if (record.TokensCacheRead || record.TokensCacheWrite) {\n <div class=\"metric-rollup\">\n <span>{{ CacheHitRatePct | number:'1.0-0' }}% hit rate</span>\n </div>\n }\n </div>\n }\n\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <h4>Cost</h4>\n </div>\n <div class=\"metric-value large\">{{ formatCost(record.Cost) }}</div>\n @if (record.TotalCost && record.TotalCost !== record.Cost) {\n <div class=\"metric-rollup\">\n <span>Total: {{ formatCost(record.TotalCost) }}</span>\n </div>\n }\n @if (record.CostCurrency) {\n <div class=\"metric-currency\">{{ record.CostCurrency }}</div>\n }\n </div>\n \n <!-- Timing Metrics -->\n @if (record.QueueTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-hourglass-start\"></i>\n <h4>Queue Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.QueueTime) }}</div>\n </div>\n }\n \n @if (record.PromptTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-brain\"></i>\n <h4>Prompt Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.PromptTime) }}</div>\n </div>\n }\n \n @if (record.CompletionTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <h4>Completion Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.CompletionTime) }}</div>\n </div>\n }\n </div>\n \n <!-- Additional Metrics -->\n <div class=\"additional-metrics\">\n @if (record.ExecutionOrder !== null) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Execution Order:</span>\n <span class=\"metric-value\">{{ record.ExecutionOrder }}</span>\n </div>\n }\n @if (record.AgentID) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Agent:</span>\n <span class=\"metric-value link\" (click)=\"navigateToEntity('MJ: AI Agents', record.AgentID)\">\n {{ record.Agent }}\n <i class=\"fa-solid fa-external-link\"></i>\n </span>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Validation & Retry Panel -->\n @if (record && ((record.ValidationAttemptCount && record.ValidationAttemptCount > 0) || record.ValidationBehavior)) {\n <mj-accordion-panel [Expanded]=\"validationExpanded\" (ExpandedChange)=\"onValidationPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-check\"></i>\n Validation &amp; Retries\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <span class=\"panel-count\">({{ record.ValidationAttemptCount }} attempts)</span>\n }\n @if (record.FinalValidationPassed) {\n <span class=\"panel-badge success\">Passed</span>\n } @else if (record.FinalValidationPassed === false) {\n <span class=\"panel-badge error\">Failed</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <!-- Validation Summary -->\n <div class=\"validation-summary\">\n <div class=\"summary-header\">\n <h4>Validation Summary</h4>\n <div class=\"validation-status\" [class.success]=\"record.FinalValidationPassed === true\" [class.failed]=\"record.FinalValidationPassed === false\">\n <i [class]=\"record.FinalValidationPassed === true ? 'fa-solid fa-check-circle' : (record.FinalValidationPassed === false ? 'fa-solid fa-times-circle' : 'fa-solid fa-hourglass-half')\"></i>\n {{ record.FinalValidationPassed === true ? 'Validation Passed' : (record.FinalValidationPassed === false ? 'Validation Failed' : 'Validation Pending') }}\n </div>\n </div>\n \n <div class=\"validation-metrics\">\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Total Attempts</div>\n <div class=\"metric-value\">{{ record.ValidationAttemptCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Successful</div>\n <div class=\"metric-value\">{{ record.SuccessfulValidationCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Behavior</div>\n <div class=\"metric-value\">{{ record.ValidationBehavior || 'Not set' }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Retry Strategy</div>\n <div class=\"metric-value\">{{ record.RetryStrategy || 'Not set' }}</div>\n </div>\n </div>\n \n @if (record.FinalValidationError) {\n <div class=\"validation-error\">\n <h5><i class=\"fa-solid fa-exclamation-triangle\"></i> Final Validation Error</h5>\n <p>{{ record.FinalValidationError }}</p>\n @if (record && record.ValidationErrorCount && record.ValidationErrorCount > 0) {\n <span class=\"error-count\">{{ record.ValidationErrorCount }} validation errors</span>\n }\n </div>\n }\n \n @if (record.CommonValidationError && record.CommonValidationError !== record.FinalValidationError) {\n <div class=\"common-error\">\n <h5><i class=\"fa-solid fa-repeat\"></i> Most Common Error</h5>\n <p>{{ record.CommonValidationError }}</p>\n </div>\n }\n </div>\n \n <!-- Retry Timeline -->\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <div class=\"retry-timeline\">\n <h4>Retry Timeline</h4>\n <div class=\"timeline-info\">\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>First Attempt: {{ record.FirstAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <span>Last Attempt: {{ record.LastAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-stopwatch\"></i>\n <span>Total Retry Duration: {{ formatDuration(record.TotalRetryDurationMS) }}</span>\n </div>\n </div>\n </div>\n }\n \n <!-- Validation Attempts Details -->\n @if (validationAttempts && validationAttempts.length > 0) {\n <div class=\"validation-attempts\">\n <h4>Validation Attempts</h4>\n <div class=\"attempts-list\">\n @for (attempt of validationAttempts; track attempt.attemptNumber) {\n <div class=\"attempt-item\" [class.success]=\"attempt.success\" [class.failed]=\"!attempt.success\">\n <div class=\"attempt-number\">\n <i [class]=\"attempt.success ? 'fa-solid fa-check' : 'fa-solid fa-times'\"></i>\n Attempt #{{ attempt.attemptNumber }}\n </div>\n <div class=\"attempt-details\">\n <span class=\"attempt-time\">{{ attempt.timestamp }}</span>\n @if (!attempt.success) {\n <span class=\"attempt-error\">{{ attempt.errorMessage || 'Unknown error' }}</span>\n @if (attempt.validationErrorCount > 0) {\n <span class=\"error-count\">({{ attempt.validationErrorCount }} errors)</span>\n }\n }\n @if (attempt.outputLength) {\n <span class=\"output-length\">Output: {{ attempt.outputLength }} chars</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Validation Summary JSON -->\n @if (validationSummary) {\n <div class=\"validation-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Validation Summary Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedValidationSummary, 'json', 'Validation Summary')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedValidationSummary\"\n name=\"formattedValidationSummary\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n \n <!-- Validation Attempts JSON -->\n @if (record.ValidationAttempts) {\n <div class=\"validation-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Validation Attempts (Raw JSON)</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedValidationAttempts, 'json', 'Validation Attempts')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedValidationAttempts\"\n name=\"formattedValidationAttempts\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Hierarchy Panel (for parent/child relationships) -->\n @if (record.ParentID || childRuns.length > 0) {\n <mj-accordion-panel [Expanded]=\"hierarchyExpanded\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sitemap\"></i>\n Run Hierarchy\n @if (childRuns.length > 0) {\n <span class=\"panel-count\">({{ childRuns.length }} children)</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (parentRun) {\n <div class=\"parent-run-section\">\n <h4><i class=\"fa-solid fa-level-up-alt\"></i> Parent Run</h4>\n <div class=\"run-item parent\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', parentRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(parentRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Parent Run #{{ parentRun.ID.substring(0, 8) }}\n <span class=\"run-item-type\">{{ parentRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(parentRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(parentRun.TokensUsed) }}</span>\n <span><i class=\"fa-solid fa-calendar\"></i> {{ parentRun.RunAt | date:'short' }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (childRuns.length > 0) {\n <div class=\"child-runs-section\">\n <h4><i class=\"fa-solid fa-level-down-alt\"></i> Child Runs</h4>\n <div class=\"runs-list\">\n @for (childRun of childRuns; track childRun.ID) {\n <div class=\"run-item child\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', childRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(childRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Child Run #{{ childRun.ID.substring(0, 8) }}\n @if (childRun.ExecutionOrder !== null) {\n <span class=\"execution-order\">#{{ childRun.ExecutionOrder }}</span>\n }\n <span class=\"run-item-type\">{{ childRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span class=\"status-indicator\" [style.color]=\"getStatusColor()\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\"></i>\n {{ childRun.Success ? 'Success' : childRun.ErrorMessage ? 'Failed' : 'Running' }}\n </span>\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(childRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(childRun.TokensUsed) }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Additional Details Panel -->\n <mj-accordion-panel [Expanded]=\"false\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Additional Details\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n @if (record.AgentID) {\n <div class=\"detail-field\">\n <label>Agent</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('MJ: AI Agents', record.AgentID)\" title=\"View Agent\">\n <i class=\"fa-solid fa-robot\"></i>\n {{ record.Agent || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n \n @if (record.RunType) {\n <div class=\"detail-field\">\n <label>Run Type</label>\n <div class=\"detail-value\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n \n @if (record.ResponseFormat) {\n <div class=\"detail-field\">\n <label>Response Format</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-code\"></i>\n {{ record.ResponseFormat }}\n </div>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Temperature</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Temperature === null || record.Temperature === undefined\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n {{ record.Temperature !== null && record.Temperature !== undefined ? record.Temperature : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopP === null || record.TopP === undefined\">\n <i class=\"fa-solid fa-percentage\"></i>\n {{ record.TopP !== null && record.TopP !== undefined ? record.TopP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top K</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopK === null || record.TopK === undefined\">\n <i class=\"fa-solid fa-list-ol\"></i>\n {{ record.TopK !== null && record.TopK !== undefined ? record.TopK : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Min P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.MinP === null || record.MinP === undefined\">\n <i class=\"fa-solid fa-filter\"></i>\n {{ record.MinP !== null && record.MinP !== undefined ? record.MinP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Frequency Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.FrequencyPenalty === null || record.FrequencyPenalty === undefined\">\n <i class=\"fa-solid fa-repeat\"></i>\n {{ record.FrequencyPenalty !== null && record.FrequencyPenalty !== undefined ? record.FrequencyPenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Presence Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.PresencePenalty === null || record.PresencePenalty === undefined\">\n <i class=\"fa-solid fa-plus-circle\"></i>\n {{ record.PresencePenalty !== null && record.PresencePenalty !== undefined ? record.PresencePenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Seed</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Seed === null || record.Seed === undefined\">\n <i class=\"fa-solid fa-seedling\"></i>\n {{ record.Seed !== null && record.Seed !== undefined ? record.Seed : '\u2014' }}\n </div>\n </div>\n\n <div class=\"detail-field\">\n <label>Stop Sequences</label>\n <div class=\"detail-value\" [class.null-value]=\"!record.StopSequences\">\n <i class=\"fa-solid fa-stop-circle\"></i>\n {{ record.StopSequences || '\u2014' }}\n </div>\n </div>\n\n <div class=\"detail-field\">\n <label>Assistant Prefill</label>\n <div class=\"detail-value\" [class.null-value]=\"!record.AssistantPrefill\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n {{ record.AssistantPrefill || '\u2014' }}\n </div>\n </div>\n\n @if (record.RunAt) {\n <div class=\"detail-field\">\n <label>Started At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ record.RunAt | date:'medium' }}\n </div>\n </div>\n }\n \n @if (record.CompletedAt) {\n <div class=\"detail-field\">\n <label>Completed At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{ record.CompletedAt | date:'medium' }}\n </div>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Model Specific Response Details Panel -->\n @if (record.ModelSpecificResponseDetails) {\n <mj-accordion-panel [Expanded]=\"modelSpecificExpanded\" (ExpandedChange)=\"onModelSpecificPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Specific Response Details\n <span class=\"panel-badge\">JSON</span>\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedModelSpecificResponseDetails, 'Model Specific Response Details')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedModelSpecificResponseDetails, 'json', 'Model Specific Response Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedModelSpecificResponseDetails\"\n name=\"formattedModelSpecificResponseDetails\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Model Selection & Performance Panel (v2.78 fields) -->\n <mj-accordion-panel [Expanded]=\"false\" (ExpandedChange)=\"onModelSelectionPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Selection &amp; Performance\n @if (record.CacheHit) {\n <span class=\"panel-badge success\">Cached</span>\n }\n @if (record.WasSelectedResult) {\n <span class=\"panel-badge success\">Selected</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n <!-- Model Selection Details -->\n <div class=\"detail-field\">\n <label>Status</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-info-circle\"></i>\n {{ record.Status || 'Unknown' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Selection Strategy</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-strategy\"></i>\n {{ record.SelectionStrategy || '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Model Power Rank</label>\n <div class=\"detail-value\" [class.null-value]=\"record.ModelPowerRank === null\">\n <i class=\"fa-solid fa-ranking-star\"></i>\n {{ record.ModelPowerRank !== null ? record.ModelPowerRank : '\u2014' }}\n </div>\n </div>\n \n <!-- Cache Information -->\n <div class=\"detail-field\">\n <label>Cache Hit</label>\n <div class=\"detail-value\">\n <i [class]=\"record.CacheHit ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n {{ record.CacheHit ? 'Yes' : 'No' }}\n </div>\n </div>\n \n @if (record.CacheKey) {\n <div class=\"detail-field full-width\">\n <label>Cache Key</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-key\"></i>\n <code>{{ record.CacheKey }}</code>\n </div>\n </div>\n }\n \n <!-- Judge Information -->\n @if (record.JudgeID) {\n <div class=\"detail-field\">\n <label>Judge Prompt</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('MJ: AI Prompts', record.JudgeID)\" title=\"View Judge Prompt\">\n <i class=\"fa-solid fa-gavel\"></i>\n {{ record.Judge || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (record.JudgeScore !== null) {\n <div class=\"detail-field\">\n <label>Judge Score</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-star\"></i>\n {{ record.JudgeScore }}\n </div>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Was Selected Result</label>\n <div class=\"detail-value\">\n <i [class]=\"record.WasSelectedResult ? 'fa-solid fa-trophy' : 'fa-solid fa-times'\"></i>\n {{ record.WasSelectedResult ? 'Yes' : 'No' }}\n </div>\n </div>\n \n <!-- Performance Metrics -->\n <div class=\"detail-field\">\n <label>Streaming Enabled</label>\n <div class=\"detail-value\">\n <i [class]=\"record.StreamingEnabled ? 'fa-solid fa-stream' : 'fa-solid fa-ban'\"></i>\n {{ record.StreamingEnabled ? 'Yes' : 'No' }}\n </div>\n </div>\n \n @if (record.FirstTokenTime !== null) {\n <div class=\"detail-field\">\n <label>First Token Time</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-bolt\"></i>\n {{ record.FirstTokenTime }} ms\n </div>\n </div>\n }\n \n @if (record.Cancelled) {\n <div class=\"detail-field\">\n <label>Cancelled</label>\n <div class=\"detail-value error\">\n <i class=\"fa-solid fa-ban\"></i>\n Yes\n </div>\n </div>\n \n @if (record.CancellationReason) {\n <div class=\"detail-field full-width\">\n <label>Cancellation Reason</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n {{ record.CancellationReason }}\n </div>\n </div>\n }\n }\n </div>\n \n <!-- Model Selection JSON -->\n @if (record.ModelSelection) {\n <div class=\"model-selection-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Model Selection Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedModelSelection, 'json', 'Model Selection')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedModelSelection\"\n name=\"formattedModelSelection\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n \n <!-- Error Details JSON -->\n @if (record.ErrorDetails) {\n <div class=\"error-details-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedErrorDetails\"\n name=\"formattedErrorDetails\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n </div>\n </form>\n</mj-record-form-container>\n}\n\n<!-- Full-screen overlay -->\n @if (FullScreenContent) {\n <div class=\"fullscreen-overlay\" (click)=\"closeFullScreen()\">\n <div class=\"fullscreen-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"fullscreen-header\">\n <span class=\"fullscreen-title\">\n <i class=\"fa-solid fa-expand\"></i>\n {{ FullScreenTitle }}\n </span>\n <div class=\"fullscreen-actions\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(FullScreenContent, FullScreenTitle)\"\n title=\"Copy content\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"closeFullScreen()\"\n title=\"Close\">\n <i class=\"fa-solid fa-times\"></i> Close\n </button>\n </div>\n </div>\n <div class=\"fullscreen-body\">\n <mj-code-editor\n [value]=\"FullScreenContent\"\n [readonly]=\"true\"\n [language]=\"FullScreenLanguage\"\n style=\"height: 100%; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </div>\n }", styles: ["/* Host and Container Layout */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0 !important;\n overflow: hidden;\n}\n\n.form-content {\n padding: 16px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n/* Error Info Styles */\n.error-info {\n margin-top: 16px;\n padding: 16px;\n background-color: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n.finish-reason {\n margin: 0 0 12px 0;\n color: var(--mj-status-error);\n font-size: 14px;\n}\n\n.error-details {\n margin-top: 12px;\n}\n\n.error-details h4 {\n margin: 0 0 8px 0;\n color: color-mix(in srgb, var(--mj-status-error) 80%, black);\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint {\n margin: 0;\n color: color-mix(in srgb, var(--mj-status-error) 70%, black);\n font-size: 14px;\n font-style: italic;\n}\n\n/* Header Section */\n.prompt-run-header {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper i {\n font-size: 24px;\n}\n\n.run-info {\n flex: 1;\n min-width: 0;\n}\n\n.run-title {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id {\n font-size: 0.8em;\n color: var(--mj-text-muted);\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta {\n display: flex;\n align-items: stretch;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n/* Shared meta-card style (Status, Execution, single Prompt) */\n.meta-card {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n}\n\n.meta-card-body {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n}\n\n.meta-card-body.clickable {\n cursor: pointer;\n transition: color 0.15s;\n}\n\n.meta-card-body.clickable:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Status indicator dot */\n.status-indicator {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n/* C3 Stacked Connector \u2014 Prompt Card */\n.prompt-card-c3 {\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.c3-child-section {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n font-size: 0.92em;\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-child-section:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.c3-child-section i.prompt-icon {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.c3-divider {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 14px;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-line {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n.c3-divider-label {\n font-size: 0.55rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.c3-parent-section {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px 9px 14px;\n font-size: 0.76em;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.c3-parent-section:hover {\n color: var(--mj-text-secondary);\n}\n\n.c3-parent-section i {\n font-size: 0.75rem;\n}\n\n.c3-link-icon {\n margin-left: auto;\n font-size: 0.6rem !important;\n opacity: 0.4;\n}\n\n.c3-parent-section:hover .c3-link-icon {\n opacity: 0.8;\n}\n\n/* C3 Model Card */\n.model-card-c3 {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: border-color 0.15s;\n}\n\n.model-card-c3:hover {\n border-color: var(--mj-border-strong);\n}\n\n.c3-card-label {\n font-size: 0.6rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.c3-card-body {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.c3-model-name {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.c3-model-name i {\n color: var(--mj-text-muted);\n font-size: 0.9rem;\n}\n\n.c3-vendor-name {\n font-size: 0.72em;\n color: var(--mj-text-muted);\n font-weight: 400;\n padding-left: 22px;\n}\n\n.original-run {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n font-size: 0.85em;\n}\n\n.original-link {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link:hover {\n color: color-mix(in srgb, var(--mj-status-error) 85%, black);\n text-decoration: underline;\n}\n\n.run-actions {\n display: flex;\n gap: 8px;\n}\n\n/* Metrics Bar */\n.metrics-bar {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n flex-wrap: wrap;\n}\n\n.metric-item {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item > i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.metric-content {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label {\n font-size: 0.75em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value {\n font-size: 1.1em;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-link {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n text-decoration: underline;\n}\n\n/* Panels */\n.form-content {\n padding: 16px;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n/* Nested Sub-Panel Styles */\n.sub-panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content {\n padding: 0;\n}\n\n/* Nested accordion panel styles */\n.nested-panels mj-accordion-panel {\n margin-bottom: 8px;\n}\n\n/* Ensure chat message viewer takes appropriate height */\n.sub-panel-content mj-chat-message-viewer {\n display: block;\n min-height: 200px;\n max-height: 750px; /* Increased by 50% from 500px */\n height: auto;\n overflow: hidden;\n}\n\n/* Different colors for sub-expansion panels */\n.sub-expansion-panel {\n margin-bottom: 8px;\n}\n\n/* Sub-expansion panel styles */\n.sub-expansion-panel {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.panel-badge {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.panel-count {\n color: var(--mj-text-muted);\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n/* JSON Editor Container */\n.json-editor-container {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar {\n background: var(--mj-bg-surface-card);\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: flex-end;\n}\n\n/* Error Message */\n.error-message {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message i {\n font-size: 1.5em;\n color: var(--mj-status-error);\n flex-shrink: 0;\n}\n\n.error-content h4 {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 1em;\n}\n\n.error-content p {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n/* Loading State */\n.loading-state {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.loading-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: var(--mj-brand-primary);\n}\n\n.loading-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n/* Metrics Grid */\n.metrics-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.metric-header h4 {\n margin: 0;\n font-size: 0.9em;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.metric-value.large {\n font-size: 1.8em;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.metric-rollup {\n margin-top: 8px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.metric-currency {\n margin-top: 4px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n}\n\n/* Additional Metrics */\n.additional-metrics {\n padding-top: 16px;\n}\n\n.metric-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.metric-row:last-child {\n border-bottom: none;\n}\n\n.metric-row .metric-label {\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.metric-row .metric-value {\n font-weight: 400;\n color: var(--mj-text-primary);\n}\n\n.metric-row .metric-value.link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row .metric-value.link:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n}\n\n/* Hierarchy Section */\n.parent-run-section,\n.child-runs-section {\n margin-bottom: 24px;\n}\n\n.parent-run-section:last-child,\n.child-runs-section:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section h4,\n.child-runs-section h4 {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n}\n\n.run-item.parent {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.run-item.parent:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n}\n\n.run-item-icon {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order {\n background: var(--mj-text-muted);\n color: var(--mj-text-inverse);\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.run-item-meta {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.run-item-meta span {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator {\n font-weight: 500;\n}\n\n.run-item > i:last-child {\n color: var(--mj-text-muted);\n font-size: 0.85em;\n}\n\n/* Detail Fields Grid */\n.detail-fields-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field label {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: var(--mj-text-primary);\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value i:first-child {\n color: var(--mj-text-muted);\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable {\n cursor: pointer;\n}\n\n.detail-value.clickable:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable i:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable:hover i:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n.detail-value.null-value i:first-child {\n opacity: 0.5;\n}\n\n/* Accordion Panel Overrides */\nmj-accordion-panel {\n display: block;\n}\n\n/* Validation Panel Styles */\n.validation-summary {\n margin-bottom: 24px;\n}\n\n.summary-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header h4 {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.validation-status {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.validation-status.failed {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.validation-metrics {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small .metric-label {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small .metric-value {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error,\n.common-error {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error h5,\n.common-error h5 {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error p,\n.common-error p {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.error-count {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n/* Retry Timeline */\n.retry-timeline {\n margin-bottom: 24px;\n}\n\n.retry-timeline h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.timeline-info {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n}\n\n.timeline-stat i {\n font-size: 1.1em;\n}\n\n/* Validation Attempts */\n.validation-attempts {\n margin-bottom: 24px;\n}\n\n.validation-attempts h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.attempts-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success {\n background: color-mix(in srgb, var(--mj-status-success) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 18%, var(--mj-bg-surface));\n}\n\n.attempt-item.failed {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n}\n\n.attempt-number {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.attempt-item.success .attempt-number {\n color: var(--mj-status-success);\n}\n\n.attempt-item.failed .attempt-number {\n color: var(--mj-status-error);\n}\n\n.attempt-details {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time {\n color: var(--mj-text-muted);\n}\n\n.attempt-error {\n color: var(--mj-status-error);\n flex: 1 0 100%;\n}\n\n.output-length {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n/* Validation JSON */\n.validation-json {\n margin-top: 24px;\n}\n\n.validation-json h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.json-viewer-container {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n/* Panel badge styles */\n.panel-badge.success {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n/* Full-screen overlay */\n.fullscreen-overlay {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title i {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-body {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body mj-code-editor {\n display: block;\n height: 100%;\n}\n"] }]
2822
+ args: [{ standalone: false, selector: 'mj-ai-prompt-run-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"toolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n\n <!-- Header Section -->\n <div class=\"prompt-run-header phone-hero\" [class.hero-view]=\"!EditMode\" [class.hero-compact]=\"!EditMode && !HeroDetailsOpen\">\n <div class=\"header-content\">\n <div class=\"run-overview\">\n <div class=\"run-icon-wrapper\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n </div>\n <div class=\"run-info\">\n <h1 class=\"run-title\">\n Prompt Run\n @if (record.ID) {\n <span class=\"run-id\">#{{ record.ID.substring(0, 8) }}</span>\n }\n <span class=\"phone-hero-only phone-hero-status\" [attr.data-status]=\"StatusKind\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\" aria-hidden=\"true\"></i>\n {{ getStatusText() }}\n </span>\n </h1>\n <div class=\"run-meta phone-hero-detail\">\n <!-- Status Card -->\n <div class=\"meta-card status-card\">\n <div class=\"c3-card-label\">Status</div>\n <div class=\"meta-card-body\">\n <span class=\"status-indicator\" [style.background-color]=\"getStatusColor()\"></span>\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n {{ getStatusText() }}\n </div>\n </div>\n\n <!-- Execution Card -->\n @if (record.RunType) {\n <div class=\"meta-card execution-card\">\n <div class=\"c3-card-label\">Execution</div>\n <div class=\"meta-card-body\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\" [style.color]=\"getRunTypeColor(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n\n <!-- Prompt Card -->\n @if (prompt) {\n @if (record.ChildPromptID) {\n <!-- C3 Stacked Connector: child prompt prominent, parent nested -->\n <div class=\"prompt-card-c3\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"c3-child-section\" (click)=\"navigateToEntity('MJ: AI Prompts', record.ChildPromptID)\" title=\"View Agent Prompt\">\n <i class=\"fa-solid fa-comment prompt-icon\"></i>\n {{ record.ChildPrompt }}\n </div>\n <div class=\"c3-divider\">\n <span class=\"c3-line\"></span>\n <span class=\"c3-divider-label\">wrapped by</span>\n <span class=\"c3-line\"></span>\n </div>\n <div class=\"c3-parent-section\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View System Prompt\">\n <i class=\"fa-solid fa-cog\"></i>\n {{ prompt.Name }}\n <i class=\"fa-solid fa-arrow-up-right-from-square c3-link-icon\"></i>\n </div>\n </div>\n } @else {\n <!-- Single prompt (no child) \u2014 same card style -->\n <div class=\"meta-card prompt-single-card\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"meta-card-body clickable\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View Prompt\">\n <i class=\"fa-solid fa-comment-dots\" style=\"color: var(--mj-brand-primary);\"></i>\n {{ prompt.Name }}\n </div>\n </div>\n }\n }\n\n <!-- Model Card -->\n @if (model) {\n <div class=\"model-card-c3\">\n <div class=\"c3-card-label\">Model</div>\n <div class=\"c3-card-body\" (click)=\"navigateToEntity('MJ: AI Models', model.ID)\" title=\"View Model\">\n <span class=\"c3-model-name\"><i class=\"fa-solid fa-microchip\"></i> {{ model.Name }}</span>\n @if (record.Vendor) {\n <span class=\"c3-vendor-name\">{{ record.Vendor }}</span>\n }\n </div>\n </div>\n }\n @if (record.RerunFromPromptRunID) {\n <span class=\"original-run\" title=\"View Original Run\">\n <i class=\"fa-solid fa-level-up-alt\"></i>\n <a (click)=\"navigateToOriginalRun()\" class=\"original-link\">Original Run</a>\n </span>\n }\n </div>\n </div>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"run-actions phone-hero-detail\">\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"reRunPrompt()\" title=\"Re-run this prompt\">\n <i class=\"fa-solid fa-play-circle\"></i>\n Re-Run\n </button>\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"refreshData()\" title=\"Refresh data\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n \n <!-- Key Metrics Bar -->\n @if (record.ConfigurationID) {\n <!-- Configuration Bar -->\n <div class=\"metrics-bar phone-hero-detail phone-hero-stats\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-cog\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Configuration</div>\n <div class=\"metric-value\">\n <a href=\"javascript:void(0)\" class=\"config-link\" (click)=\"navigateToEntity('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\n </div>\n @if (record.Temperature !== null && record.Temperature !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Temperature</div>\n <div class=\"metric-value\">{{ record.Temperature }}</div>\n </div>\n </div>\n }\n @if (record.TopP !== null && record.TopP !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-percentage\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top P</div>\n <div class=\"metric-value\">{{ record.TopP }}</div>\n </div>\n </div>\n }\n @if (record.TopK !== null && record.TopK !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-list-ol\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top K</div>\n <div class=\"metric-value\">{{ record.TopK }}</div>\n </div>\n </div>\n }\n @if (record.EffortLevel !== null && record.EffortLevel !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-tachometer-alt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Effort Level</div>\n <div class=\"metric-value\">{{ record.EffortLevel }}</div>\n </div>\n </div>\n }\n @if (record.ResponseFormat) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-code\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Response Format</div>\n <div class=\"metric-value\">{{ record.ResponseFormat }}</div>\n </div>\n </div>\n }\n </div>\n \n <!-- Execution Metrics Bar (always show when configuration exists) -->\n <div class=\"metrics-bar phone-hero-detail phone-hero-stats\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\" title=\"Total tokens the model processed, including cached input\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(TotalTokensProcessed) }}</div>\n </div>\n </div>\n @if (record.TokensCacheRead) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-bolt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cached</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensCacheRead) }}</div>\n </div>\n </div>\n }\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n } @else {\n <!-- Execution Metrics Bar (original behavior when no configuration) -->\n <div class=\"metrics-bar phone-hero-detail phone-hero-stats\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\" title=\"Total tokens the model processed, including cached input\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(TotalTokensProcessed) }}</div>\n </div>\n </div>\n @if (record.TokensCacheRead) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-bolt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cached</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensCacheRead) }}</div>\n </div>\n </div>\n }\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n }\n @if (!EditMode && HeroSummary) {\n <button type=\"button\" class=\"phone-hero-summary\" [attr.aria-expanded]=\"HeroDetailsOpen\" (click)=\"ToggleHeroDetails()\">\n <span class=\"phone-hero-summary-text\">{{ HeroSummary }}</span>\n <i class=\"fa-solid fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n\n <!-- Main Content with Expansion Panels -->\n <div class=\"form-content\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n <!-- Phone: one section at a time behind a picker; desktop keeps the accordions -->\n <mj-accordion-sections [Enabled]=\"Phone.IsPhone\" [ActiveKey]=\"Phone.Section\" (ActiveKeyChange)=\"Phone.Pick($event)\">\n\n <!-- Input Panel with nested sub-panels -->\n <mj-accordion-panel SectionKey=\"input\" SectionTitle=\"Input\" SectionIcon=\"fa-solid fa-comment-dots\" [Expanded]=\"inputExpanded\" (ExpandedChange)=\"onInputPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n Input\n @if (record.Messages && record.Messages.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (record.Messages && record.Messages.trim() !== '') {\n <!-- Nested expansion panels for sub-sections -->\n <div class=\"nested-panels\">\n <!-- Messages Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"messagesExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-comments\"></i>\n Messages\n @if (chatMessages.length > 0) {\n <span class=\"panel-count\">({{ chatMessages.length }})</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (isParsingMessages || isLoadingRelatedData) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <p>Loading messages...</p>\n </div>\n } @else if (chatMessages.length > 0) {\n <mj-chat-message-viewer \n [messages]=\"chatMessages\">\n </mj-chat-message-viewer>\n } @else {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-comment-slash\"\n Title=\"No chat messages found\" />\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Data Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"dataExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-database\"></i>\n Data\n @if (inputData) {\n <span class=\"panel-badge\">Object</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n <mj-prompt-run-data-capture-note [DataCapture]=\"DataCapture\" [DataShape]=\"DataShape\" [DataCaptureNote]=\"DataCaptureNote\" />\n @if (inputData && formattedData) {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedData, 'Data')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedData, 'json', 'Data')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedData\"\n name=\"formattedData\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else if (DataCapture !== 'None') {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-database\"\n Title=\"No data object found\" />\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Raw Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"rawExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Raw\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedMessages, 'Messages')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedMessages, 'json', 'Raw Messages')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedMessages\"\n name=\"formattedMessages\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </mj-accordion-panel>\n </div>\n } @else {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-comment-slash\"\n Title=\"No input messages recorded\" />\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Result Panel -->\n <mj-accordion-panel SectionKey=\"result\" SectionTitle=\"Result\" SectionIcon=\"fa-solid fa-square-check\" [Expanded]=\"resultExpanded\" (ExpandedChange)=\"onResultPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-square-check\"></i>\n Result\n @if (record.Result && record.Result.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n @if (record.ErrorMessage) {\n <span class=\"panel-badge error\">Error</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (record.ErrorMessage) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <div class=\"error-content\">\n <h4>Error Message</h4>\n <p>{{ record.ErrorMessage }}</p>\n </div>\n </div>\n }\n \n @if (record.Result && record.Result.trim() !== '') {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedResult, 'Result')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedResult, 'json', 'Result')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedResult\"\n name=\"formattedResult\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else if (!record.ErrorMessage) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-inbox\"\n Title=\"No result data recorded\">\n @if (record.CompletedAt && (record.Status === 'Failed' || record.Success === false)) {\n <div class=\"error-info\">\n @if (record.Status) {\n <p class=\"finish-reason\">\n <strong>Status:</strong> {{ record.Status }}\n </p>\n }\n @if (formattedErrorDetails) {\n <div class=\"error-details\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor\n [ngModel]=\"formattedErrorDetails\"\n [disabled]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n }\n @if (!formattedErrorDetails) {\n <p class=\"error-hint\">\n The prompt execution failed but no additional error information is available.\n </p>\n }\n </div>\n }\n </mj-empty-state>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Token Usage & Metrics Panel -->\n <mj-accordion-panel SectionKey=\"metrics\" SectionTitle=\"Token Usage &amp; Metrics\" SectionIcon=\"fa-solid fa-chart-line\" [Expanded]=\"metricsExpanded\" (ExpandedChange)=\"onMetricsPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Token Usage &amp; Metrics\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"metrics-grid\">\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-message\"></i>\n <h4>Prompt Tokens</h4>\n </div>\n <div class=\"metric-value large\" title=\"Full input the model processed \u2014 uncached (new) prompt tokens plus any cached tokens\">{{ formatTokens(FullPromptTokens) }}</div>\n @if (CachedTokens > 0) {\n <div class=\"metric-rollup\">\n <span>incl. {{ formatTokens(CachedTokens) }} cached</span>\n </div>\n }\n @if (record.TokensPromptRollup && record.TokensPromptRollup !== record.TokensPrompt) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensPromptRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-reply\"></i>\n <h4>Completion Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensCompletion) }}</div>\n @if (record.TokensCompletionRollup && record.TokensCompletionRollup !== record.TokensCompletion) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensCompletionRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-coins\"></i>\n <h4>Total Tokens</h4>\n </div>\n <div class=\"metric-value large\" title=\"Prompt + completion + cached tokens \u2014 the full amount the model processed\">{{ formatTokens(TotalTokensProcessed) }}</div>\n @if (CachedTokens > 0) {\n <div class=\"metric-rollup\">\n <span>incl. {{ formatTokens(CachedTokens) }} cached</span>\n </div>\n }\n @if (record.TokensUsedRollup && record.TokensUsedRollup !== record.TokensUsed) {\n <div class=\"metric-rollup\">\n <span>Net rollup: {{ formatTokens(record.TokensUsedRollup) }}</span>\n </div>\n }\n </div>\n\n <!-- Prompt-cache tokens (provider cache reads = hits, writes = cache creation).\n Only rendered when the provider reported cache usage. -->\n @if (record.TokensCacheRead != null || record.TokensCacheWrite != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-bolt\"></i>\n <h4>Cache Read</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensCacheRead) }}</div>\n @if (record.TokensCacheWrite) {\n <div class=\"metric-rollup\">\n <span>Write: {{ formatTokens(record.TokensCacheWrite) }}</span>\n </div>\n }\n @if (record.TokensCacheRead || record.TokensCacheWrite) {\n <div class=\"metric-rollup\">\n <span>{{ CacheHitRatePct | number:'1.0-0' }}% hit rate</span>\n </div>\n }\n </div>\n }\n\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <h4>Cost</h4>\n </div>\n <div class=\"metric-value large\">{{ formatCost(record.Cost) }}</div>\n @if (record.TotalCost && record.TotalCost !== record.Cost) {\n <div class=\"metric-rollup\">\n <span>Total: {{ formatCost(record.TotalCost) }}</span>\n </div>\n }\n @if (record.CostCurrency) {\n <div class=\"metric-currency\">{{ record.CostCurrency }}</div>\n }\n </div>\n \n <!-- Timing Metrics -->\n @if (record.QueueTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-hourglass-start\"></i>\n <h4>Queue Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.QueueTime) }}</div>\n </div>\n }\n \n @if (record.PromptTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-brain\"></i>\n <h4>Prompt Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.PromptTime) }}</div>\n </div>\n }\n \n @if (record.CompletionTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <h4>Completion Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.CompletionTime) }}</div>\n </div>\n }\n </div>\n \n <!-- Additional Metrics -->\n <div class=\"additional-metrics\">\n @if (record.ExecutionOrder !== null) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Execution Order:</span>\n <span class=\"metric-value\">{{ record.ExecutionOrder }}</span>\n </div>\n }\n @if (record.AgentID) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Agent:</span>\n <span class=\"metric-value link\" (click)=\"navigateToEntity('MJ: AI Agents', record.AgentID)\">\n {{ record.Agent }}\n <i class=\"fa-solid fa-external-link\"></i>\n </span>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Validation & Retry Panel -->\n @if (record && ((record.ValidationAttemptCount && record.ValidationAttemptCount > 0) || record.ValidationBehavior)) {\n <mj-accordion-panel SectionKey=\"validation\" SectionTitle=\"Validation &amp; Retries\" SectionIcon=\"fa-solid fa-shield-check\" [Expanded]=\"validationExpanded\" (ExpandedChange)=\"onValidationPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-check\"></i>\n Validation &amp; Retries\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <span class=\"panel-count\">({{ record.ValidationAttemptCount }} attempts)</span>\n }\n @if (record.FinalValidationPassed) {\n <span class=\"panel-badge success\">Passed</span>\n } @else if (record.FinalValidationPassed === false) {\n <span class=\"panel-badge error\">Failed</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <!-- Validation Summary -->\n <div class=\"validation-summary\">\n <div class=\"summary-header\">\n <h4>Validation Summary</h4>\n <div class=\"validation-status\" [class.success]=\"record.FinalValidationPassed === true\" [class.failed]=\"record.FinalValidationPassed === false\">\n <i [class]=\"record.FinalValidationPassed === true ? 'fa-solid fa-check-circle' : (record.FinalValidationPassed === false ? 'fa-solid fa-times-circle' : 'fa-solid fa-hourglass-half')\"></i>\n {{ record.FinalValidationPassed === true ? 'Validation Passed' : (record.FinalValidationPassed === false ? 'Validation Failed' : 'Validation Pending') }}\n </div>\n </div>\n \n <div class=\"validation-metrics\">\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Total Attempts</div>\n <div class=\"metric-value\">{{ record.ValidationAttemptCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Successful</div>\n <div class=\"metric-value\">{{ record.SuccessfulValidationCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Behavior</div>\n <div class=\"metric-value\">{{ record.ValidationBehavior || 'Not set' }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Retry Strategy</div>\n <div class=\"metric-value\">{{ record.RetryStrategy || 'Not set' }}</div>\n </div>\n </div>\n \n @if (record.FinalValidationError) {\n <div class=\"validation-error\">\n <h5><i class=\"fa-solid fa-exclamation-triangle\"></i> Final Validation Error</h5>\n <p>{{ record.FinalValidationError }}</p>\n @if (record && record.ValidationErrorCount && record.ValidationErrorCount > 0) {\n <span class=\"error-count\">{{ record.ValidationErrorCount }} validation errors</span>\n }\n </div>\n }\n \n @if (record.CommonValidationError && record.CommonValidationError !== record.FinalValidationError) {\n <div class=\"common-error\">\n <h5><i class=\"fa-solid fa-repeat\"></i> Most Common Error</h5>\n <p>{{ record.CommonValidationError }}</p>\n </div>\n }\n </div>\n \n <!-- Retry Timeline -->\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <div class=\"retry-timeline\">\n <h4>Retry Timeline</h4>\n <div class=\"timeline-info\">\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>First Attempt: {{ record.FirstAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <span>Last Attempt: {{ record.LastAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-stopwatch\"></i>\n <span>Total Retry Duration: {{ formatDuration(record.TotalRetryDurationMS) }}</span>\n </div>\n </div>\n </div>\n }\n \n <!-- Validation Attempts Details -->\n @if (validationAttempts && validationAttempts.length > 0) {\n <div class=\"validation-attempts\">\n <h4>Validation Attempts</h4>\n <div class=\"attempts-list\">\n @for (attempt of validationAttempts; track attempt.attemptNumber) {\n <div class=\"attempt-item\" [class.success]=\"attempt.success\" [class.failed]=\"!attempt.success\">\n <div class=\"attempt-number\">\n <i [class]=\"attempt.success ? 'fa-solid fa-check' : 'fa-solid fa-times'\"></i>\n Attempt #{{ attempt.attemptNumber }}\n </div>\n <div class=\"attempt-details\">\n <span class=\"attempt-time\">{{ attempt.timestamp }}</span>\n @if (!attempt.success) {\n <span class=\"attempt-error\">{{ attempt.errorMessage || 'Unknown error' }}</span>\n @if (attempt.validationErrorCount > 0) {\n <span class=\"error-count\">({{ attempt.validationErrorCount }} errors)</span>\n }\n }\n @if (attempt.outputLength) {\n <span class=\"output-length\">Output: {{ attempt.outputLength }} chars</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Validation Summary JSON -->\n @if (validationSummary) {\n <div class=\"validation-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Validation Summary Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedValidationSummary, 'json', 'Validation Summary')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedValidationSummary\"\n name=\"formattedValidationSummary\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n \n <!-- Validation Attempts JSON -->\n @if (record.ValidationAttempts) {\n <div class=\"validation-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Validation Attempts (Raw JSON)</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedValidationAttempts, 'json', 'Validation Attempts')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedValidationAttempts\"\n name=\"formattedValidationAttempts\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Hierarchy Panel (for parent/child relationships) -->\n @if (record.ParentID || childRuns.length > 0) {\n <mj-accordion-panel SectionKey=\"hierarchy\" SectionTitle=\"Run Hierarchy\" SectionIcon=\"fa-solid fa-sitemap\" [Expanded]=\"hierarchyExpanded\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sitemap\"></i>\n Run Hierarchy\n @if (childRuns.length > 0) {\n <span class=\"panel-count\">({{ childRuns.length }} children)</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (parentRun) {\n <div class=\"parent-run-section\">\n <h4><i class=\"fa-solid fa-level-up-alt\"></i> Parent Run</h4>\n <div class=\"run-item parent\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', parentRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(parentRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Parent Run #{{ parentRun.ID.substring(0, 8) }}\n <span class=\"run-item-type\">{{ parentRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(parentRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(parentRun.TokensUsed) }}</span>\n <span><i class=\"fa-solid fa-calendar\"></i> {{ parentRun.RunAt | date:'short' }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (childRuns.length > 0) {\n <div class=\"child-runs-section\">\n <h4><i class=\"fa-solid fa-level-down-alt\"></i> Child Runs</h4>\n <div class=\"runs-list\">\n @for (childRun of childRuns; track childRun.ID) {\n <div class=\"run-item child\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', childRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(childRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Child Run #{{ childRun.ID.substring(0, 8) }}\n @if (childRun.ExecutionOrder !== null) {\n <span class=\"execution-order\">#{{ childRun.ExecutionOrder }}</span>\n }\n <span class=\"run-item-type\">{{ childRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span class=\"status-indicator\" [style.color]=\"getStatusColor()\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\"></i>\n {{ childRun.Success ? 'Success' : childRun.ErrorMessage ? 'Failed' : 'Running' }}\n </span>\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(childRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(childRun.TokensUsed) }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Additional Details Panel -->\n <mj-accordion-panel SectionKey=\"details\" SectionTitle=\"Additional Details\" SectionIcon=\"fa-solid fa-info-circle\" [Expanded]=\"false\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Additional Details\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n @if (record.AgentID) {\n <div class=\"detail-field\">\n <label>Agent</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('MJ: AI Agents', record.AgentID)\" title=\"View Agent\">\n <i class=\"fa-solid fa-robot\"></i>\n {{ record.Agent || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n \n @if (record.RunType) {\n <div class=\"detail-field\">\n <label>Run Type</label>\n <div class=\"detail-value\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n \n @if (record.ResponseFormat) {\n <div class=\"detail-field\">\n <label>Response Format</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-code\"></i>\n {{ record.ResponseFormat }}\n </div>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Temperature</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Temperature === null || record.Temperature === undefined\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n {{ record.Temperature !== null && record.Temperature !== undefined ? record.Temperature : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopP === null || record.TopP === undefined\">\n <i class=\"fa-solid fa-percentage\"></i>\n {{ record.TopP !== null && record.TopP !== undefined ? record.TopP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top K</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopK === null || record.TopK === undefined\">\n <i class=\"fa-solid fa-list-ol\"></i>\n {{ record.TopK !== null && record.TopK !== undefined ? record.TopK : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Min P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.MinP === null || record.MinP === undefined\">\n <i class=\"fa-solid fa-filter\"></i>\n {{ record.MinP !== null && record.MinP !== undefined ? record.MinP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Frequency Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.FrequencyPenalty === null || record.FrequencyPenalty === undefined\">\n <i class=\"fa-solid fa-repeat\"></i>\n {{ record.FrequencyPenalty !== null && record.FrequencyPenalty !== undefined ? record.FrequencyPenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Presence Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.PresencePenalty === null || record.PresencePenalty === undefined\">\n <i class=\"fa-solid fa-plus-circle\"></i>\n {{ record.PresencePenalty !== null && record.PresencePenalty !== undefined ? record.PresencePenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Seed</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Seed === null || record.Seed === undefined\">\n <i class=\"fa-solid fa-seedling\"></i>\n {{ record.Seed !== null && record.Seed !== undefined ? record.Seed : '\u2014' }}\n </div>\n </div>\n\n <div class=\"detail-field\">\n <label>Stop Sequences</label>\n <div class=\"detail-value\" [class.null-value]=\"!record.StopSequences\">\n <i class=\"fa-solid fa-stop-circle\"></i>\n {{ record.StopSequences || '\u2014' }}\n </div>\n </div>\n\n <div class=\"detail-field\">\n <label>Assistant Prefill</label>\n <div class=\"detail-value\" [class.null-value]=\"!record.AssistantPrefill\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n {{ record.AssistantPrefill || '\u2014' }}\n </div>\n </div>\n\n @if (record.RunAt) {\n <div class=\"detail-field\">\n <label>Started At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ record.RunAt | date:'medium' }}\n </div>\n </div>\n }\n \n @if (record.CompletedAt) {\n <div class=\"detail-field\">\n <label>Completed At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{ record.CompletedAt | date:'medium' }}\n </div>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Model Specific Response Details Panel -->\n @if (record.ModelSpecificResponseDetails) {\n <mj-accordion-panel SectionKey=\"model-response\" SectionTitle=\"Model Specific Response Details\" SectionIcon=\"fa-solid fa-microchip\" [Expanded]=\"modelSpecificExpanded\" (ExpandedChange)=\"onModelSpecificPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Specific Response Details\n <span class=\"panel-badge\">JSON</span>\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedModelSpecificResponseDetails, 'Model Specific Response Details')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedModelSpecificResponseDetails, 'json', 'Model Specific Response Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedModelSpecificResponseDetails\"\n name=\"formattedModelSpecificResponseDetails\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Model Selection & Performance Panel (v2.78 fields) -->\n <mj-accordion-panel SectionKey=\"model-selection\" SectionTitle=\"Model Selection &amp; Performance\" SectionIcon=\"fa-solid fa-microchip\" [Expanded]=\"false\" (ExpandedChange)=\"onModelSelectionPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Selection &amp; Performance\n @if (record.CacheHit) {\n <span class=\"panel-badge success\">Cached</span>\n }\n @if (record.WasSelectedResult) {\n <span class=\"panel-badge success\">Selected</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n <!-- Model Selection Details -->\n <div class=\"detail-field\">\n <label>Status</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-info-circle\"></i>\n {{ record.Status || 'Unknown' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Selection Strategy</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-strategy\"></i>\n {{ record.SelectionStrategy || '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Model Power Rank</label>\n <div class=\"detail-value\" [class.null-value]=\"record.ModelPowerRank === null\">\n <i class=\"fa-solid fa-ranking-star\"></i>\n {{ record.ModelPowerRank !== null ? record.ModelPowerRank : '\u2014' }}\n </div>\n </div>\n \n <!-- Cache Information -->\n <div class=\"detail-field\">\n <label>Cache Hit</label>\n <div class=\"detail-value\">\n <i [class]=\"record.CacheHit ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n {{ record.CacheHit ? 'Yes' : 'No' }}\n </div>\n </div>\n \n @if (record.CacheKey) {\n <div class=\"detail-field full-width\">\n <label>Cache Key</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-key\"></i>\n <code>{{ record.CacheKey }}</code>\n </div>\n </div>\n }\n \n <!-- Judge Information -->\n @if (record.JudgeID) {\n <div class=\"detail-field\">\n <label>Judge Prompt</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('MJ: AI Prompts', record.JudgeID)\" title=\"View Judge Prompt\">\n <i class=\"fa-solid fa-gavel\"></i>\n {{ record.Judge || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (record.JudgeScore !== null) {\n <div class=\"detail-field\">\n <label>Judge Score</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-star\"></i>\n {{ record.JudgeScore }}\n </div>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Was Selected Result</label>\n <div class=\"detail-value\">\n <i [class]=\"record.WasSelectedResult ? 'fa-solid fa-trophy' : 'fa-solid fa-times'\"></i>\n {{ record.WasSelectedResult ? 'Yes' : 'No' }}\n </div>\n </div>\n \n <!-- Performance Metrics -->\n <div class=\"detail-field\">\n <label>Streaming Enabled</label>\n <div class=\"detail-value\">\n <i [class]=\"record.StreamingEnabled ? 'fa-solid fa-stream' : 'fa-solid fa-ban'\"></i>\n {{ record.StreamingEnabled ? 'Yes' : 'No' }}\n </div>\n </div>\n \n @if (record.FirstTokenTime !== null) {\n <div class=\"detail-field\">\n <label>First Token Time</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-bolt\"></i>\n {{ record.FirstTokenTime }} ms\n </div>\n </div>\n }\n \n @if (record.Cancelled) {\n <div class=\"detail-field\">\n <label>Cancelled</label>\n <div class=\"detail-value error\">\n <i class=\"fa-solid fa-ban\"></i>\n Yes\n </div>\n </div>\n \n @if (record.CancellationReason) {\n <div class=\"detail-field full-width\">\n <label>Cancellation Reason</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n {{ record.CancellationReason }}\n </div>\n </div>\n }\n }\n </div>\n \n <!-- Model Selection JSON -->\n @if (record.ModelSelection) {\n <div class=\"model-selection-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Model Selection Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedModelSelection, 'json', 'Model Selection')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedModelSelection\"\n name=\"formattedModelSelection\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n \n <!-- Error Details JSON -->\n @if (record.ErrorDetails) {\n <div class=\"error-details-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedErrorDetails\"\n name=\"formattedErrorDetails\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n </mj-accordion-sections>\n </div>\n </form>\n</mj-record-form-container>\n}\n\n<!-- Full-screen overlay -->\n @if (FullScreenContent) {\n <div class=\"fullscreen-overlay\" (click)=\"closeFullScreen()\">\n <div class=\"fullscreen-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"fullscreen-header\">\n <span class=\"fullscreen-title\">\n <i class=\"fa-solid fa-expand\"></i>\n {{ FullScreenTitle }}\n </span>\n <div class=\"fullscreen-actions\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(FullScreenContent, FullScreenTitle)\"\n title=\"Copy content\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"closeFullScreen()\"\n title=\"Close\">\n <i class=\"fa-solid fa-times\"></i> Close\n </button>\n </div>\n </div>\n <div class=\"fullscreen-body\">\n <mj-code-editor\n [value]=\"FullScreenContent\"\n [readonly]=\"true\"\n [language]=\"FullScreenLanguage\"\n style=\"height: 100%; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </div>\n }", styles: ["/* Host and Container Layout */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0 !important;\n overflow: hidden;\n}\n\n.form-content {\n padding: 16px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n/* Error Info Styles */\n.error-info {\n margin-top: 16px;\n padding: 16px;\n background-color: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n.finish-reason {\n margin: 0 0 12px 0;\n color: var(--mj-status-error);\n font-size: 14px;\n}\n\n.error-details {\n margin-top: 12px;\n}\n\n.error-details h4 {\n margin: 0 0 8px 0;\n color: color-mix(in srgb, var(--mj-status-error) 80%, black);\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint {\n margin: 0;\n color: color-mix(in srgb, var(--mj-status-error) 70%, black);\n font-size: 14px;\n font-style: italic;\n}\n\n/* Header Section */\n.prompt-run-header {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n min-width: 0; /* a flex child; without this it cannot shrink below its title row */\n}\n\n.run-icon-wrapper {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper i {\n font-size: 24px;\n}\n\n.run-info {\n flex: 1;\n min-width: 0;\n}\n\n.run-title {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id {\n font-size: 0.8em;\n color: var(--mj-text-muted);\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta {\n display: flex;\n align-items: stretch;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n/* Shared meta-card style (Status, Execution, single Prompt) */\n.meta-card {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n}\n\n.meta-card-body {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n}\n\n.meta-card-body.clickable {\n cursor: pointer;\n transition: color 0.15s;\n}\n\n.meta-card-body.clickable:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Status indicator dot */\n.status-indicator {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n/* C3 Stacked Connector \u2014 Prompt Card */\n.prompt-card-c3 {\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.c3-child-section {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n font-size: 0.92em;\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-child-section:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.c3-child-section i.prompt-icon {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.c3-divider {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 14px;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-line {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n.c3-divider-label {\n font-size: 0.55rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.c3-parent-section {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px 9px 14px;\n font-size: 0.76em;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.c3-parent-section:hover {\n color: var(--mj-text-secondary);\n}\n\n.c3-parent-section i {\n font-size: 0.75rem;\n}\n\n.c3-link-icon {\n margin-left: auto;\n font-size: 0.6rem !important;\n opacity: 0.4;\n}\n\n.c3-parent-section:hover .c3-link-icon {\n opacity: 0.8;\n}\n\n/* C3 Model Card */\n.model-card-c3 {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: border-color 0.15s;\n}\n\n.model-card-c3:hover {\n border-color: var(--mj-border-strong);\n}\n\n.c3-card-label {\n font-size: 0.6rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.c3-card-body {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.c3-model-name {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.c3-model-name i {\n color: var(--mj-text-muted);\n font-size: 0.9rem;\n}\n\n.c3-vendor-name {\n font-size: 0.72em;\n color: var(--mj-text-muted);\n font-weight: 400;\n padding-left: 22px;\n}\n\n.original-run {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n font-size: 0.85em;\n}\n\n.original-link {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link:hover {\n color: color-mix(in srgb, var(--mj-status-error) 85%, black);\n text-decoration: underline;\n}\n\n.run-actions {\n display: flex;\n gap: 8px;\n}\n\n/* Metrics Bar */\n.metrics-bar {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n flex-wrap: wrap;\n}\n\n.metric-item {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item > i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.metric-content {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label {\n font-size: 0.75em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value {\n font-size: 1.1em;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-link {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n text-decoration: underline;\n}\n\n/* Panels */\n.form-content {\n padding: 16px;\n}\n\n/* The panels sit inside mj-accordion-sections (the phone section picker's host). Keep them in a flex\n column on desktop too, as they were as direct flex children of .form-content: in a plain block their\n margins collapse and the gap between panels halves. */\n.form-content mj-accordion-sections {\n display: flex;\n flex-direction: column;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n/* Nested Sub-Panel Styles */\n.sub-panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content {\n padding: 0;\n}\n\n/* Nested accordion panel styles */\n.nested-panels mj-accordion-panel {\n margin-bottom: 8px;\n}\n\n/* Ensure chat message viewer takes appropriate height */\n.sub-panel-content mj-chat-message-viewer {\n display: block;\n min-height: 200px;\n max-height: 750px; /* Increased by 50% from 500px */\n height: auto;\n overflow: hidden;\n}\n\n/* Different colors for sub-expansion panels */\n.sub-expansion-panel {\n margin-bottom: 8px;\n}\n\n/* Sub-expansion panel styles */\n.sub-expansion-panel {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.panel-badge {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.panel-count {\n color: var(--mj-text-muted);\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n/* JSON Editor Container */\n.json-editor-container {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar {\n background: var(--mj-bg-surface-card);\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: flex-end;\n}\n\n/* Error Message */\n.error-message {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message i {\n font-size: 1.5em;\n color: var(--mj-status-error);\n flex-shrink: 0;\n}\n\n.error-content h4 {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 1em;\n}\n\n.error-content p {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n/* Loading State */\n.loading-state {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.loading-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: var(--mj-brand-primary);\n}\n\n.loading-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n/* Metrics Grid */\n.metrics-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.metric-header h4 {\n margin: 0;\n font-size: 0.9em;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.metric-value.large {\n font-size: 1.8em;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.metric-rollup {\n margin-top: 8px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.metric-currency {\n margin-top: 4px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n}\n\n/* Additional Metrics */\n.additional-metrics {\n padding-top: 16px;\n}\n\n.metric-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.metric-row:last-child {\n border-bottom: none;\n}\n\n.metric-row .metric-label {\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.metric-row .metric-value {\n font-weight: 400;\n color: var(--mj-text-primary);\n}\n\n.metric-row .metric-value.link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row .metric-value.link:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n}\n\n/* Hierarchy Section */\n.parent-run-section,\n.child-runs-section {\n margin-bottom: 24px;\n}\n\n.parent-run-section:last-child,\n.child-runs-section:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section h4,\n.child-runs-section h4 {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n}\n\n.run-item.parent {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.run-item.parent:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n}\n\n.run-item-icon {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order {\n background: var(--mj-text-muted);\n color: var(--mj-text-inverse);\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.run-item-meta {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.run-item-meta span {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator {\n font-weight: 500;\n}\n\n.run-item > i:last-child {\n color: var(--mj-text-muted);\n font-size: 0.85em;\n}\n\n/* Detail Fields Grid */\n.detail-fields-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field label {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: var(--mj-text-primary);\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value i:first-child {\n color: var(--mj-text-muted);\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable {\n cursor: pointer;\n}\n\n.detail-value.clickable:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable i:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable:hover i:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n.detail-value.null-value i:first-child {\n opacity: 0.5;\n}\n\n/* Accordion Panel Overrides */\nmj-accordion-panel {\n display: block;\n}\n\n/* Validation Panel Styles */\n.validation-summary {\n margin-bottom: 24px;\n}\n\n.summary-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header h4 {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.validation-status {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.validation-status.failed {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.validation-metrics {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small .metric-label {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small .metric-value {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error,\n.common-error {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error h5,\n.common-error h5 {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error p,\n.common-error p {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.error-count {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n/* Retry Timeline */\n.retry-timeline {\n margin-bottom: 24px;\n}\n\n.retry-timeline h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.timeline-info {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n}\n\n.timeline-stat i {\n font-size: 1.1em;\n}\n\n/* Validation Attempts */\n.validation-attempts {\n margin-bottom: 24px;\n}\n\n.validation-attempts h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.attempts-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success {\n background: color-mix(in srgb, var(--mj-status-success) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 18%, var(--mj-bg-surface));\n}\n\n.attempt-item.failed {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n}\n\n.attempt-number {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.attempt-item.success .attempt-number {\n color: var(--mj-status-success);\n}\n\n.attempt-item.failed .attempt-number {\n color: var(--mj-status-error);\n}\n\n.attempt-details {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time {\n color: var(--mj-text-muted);\n}\n\n.attempt-error {\n color: var(--mj-status-error);\n flex: 1 0 100%;\n}\n\n.output-length {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n/* Validation JSON */\n.validation-json {\n margin-top: 24px;\n}\n\n.validation-json h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.json-viewer-container {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n/* Panel badge styles */\n.panel-badge.success {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n/* Full-screen overlay */\n.fullscreen-overlay {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title i {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-body {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body mj-code-editor {\n display: block;\n height: 100%;\n}\n\n/* Phone (375px): the Re-Run / Refresh row drops under the title instead of overflowing. */\n@media (max-width: 768px) {\n .header-content {\n flex-wrap: wrap;\n }\n\n .run-actions {\n flex-basis: 100%;\n }\n}\n\n/* Phone: sections sit at the page gutter; the desktop panel padding would indent them twice.\n The hero's title row (\"Prompt Run\", the id, the status chip) wraps at a phone size, beside\n a smaller icon. */\n@media (max-width: 768px) {\n .run-overview {\n gap: 10px;\n }\n\n .run-icon-wrapper {\n width: 40px;\n height: 40px;\n border-radius: 10px;\n }\n\n .run-title {\n flex-wrap: wrap;\n row-gap: 4px;\n font-size: 1.15em;\n }\n\n .form-content {\n padding: 12px;\n }\n\n .form-content .panel-content {\n padding: 0;\n }\n}\n", "/* ============================================\n PHONE HERO (design call 6A), shared by the custom forms that own a hero.\n Under 768px the hero keeps icon, name, status and the primary action. Anything tagged\n .phone-hero-detail hides while the hero is compact and comes back when the summary line is\n tapped. Edit mode is untouched: the host only gets .hero-compact / .hero-view in view mode.\n Host: .phone-hero [class.hero-view]=\"!EditMode\" [class.hero-compact]=\"!EditMode && !HeroDetailsOpen\"\n Tags: .phone-hero-detail hidden while compact\n .phone-hero-hide hidden in view mode (said elsewhere on the phone hero)\n .phone-hero-only shown only on phones\n .phone-hero-top a title + action row that stacks\n .phone-hero-actions / .phone-hero-run the primary action, full width at 44px\n .phone-hero-stats a metric row that reflows to a 2-up grid when the hero is expanded\n .phone-hero-status a status chip in the identity row (with .phone-hero-only)\n ============================================ */\n.phone-hero-summary,\n.phone-hero-only {\n display: none;\n}\n\n@media (max-width: 768px) {\n .phone-hero {\n padding: 12px !important;\n }\n\n /* !important: several heroes carry inline display/padding styles on these rows */\n .phone-hero.hero-compact .phone-hero-detail,\n .phone-hero.hero-view .phone-hero-hide {\n display: none !important;\n }\n\n .phone-hero-only {\n display: inline-flex;\n }\n\n /* Lower specificity than the compact rule above, so a compact hero still hides it */\n .phone-hero .phone-hero-stats {\n display: grid !important;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 8px;\n }\n\n .phone-hero-status {\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 999px);\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n vertical-align: middle;\n white-space: nowrap;\n }\n\n /* data-status comes from RunStatusKind(); the -text / -bg pairs keep contrast in both themes */\n .phone-hero-status[data-status=\"running\"] { color: var(--mj-status-warning-text); background: var(--mj-status-warning-bg); }\n .phone-hero-status[data-status=\"success\"] { color: var(--mj-status-success-text); background: var(--mj-status-success-bg); }\n .phone-hero-status[data-status=\"error\"] { color: var(--mj-status-error-text); background: var(--mj-status-error-bg); }\n .phone-hero-status[data-status=\"info\"] { color: var(--mj-status-info-text); background: var(--mj-status-info-bg); }\n\n .phone-hero-top {\n flex-direction: column;\n align-items: stretch;\n gap: 10px;\n }\n\n .phone-hero-actions {\n width: 100%;\n }\n\n .phone-hero .phone-hero-run {\n width: 100%;\n min-height: 44px;\n justify-content: center;\n }\n\n /* Inherits the hero's text colour, so it reads on light heroes and on the brand-blue\n Queries hero alike; a muted token would be grey on blue. */\n .phone-hero-summary {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n min-height: 44px;\n margin-top: 8px;\n padding: 0 4px;\n border: 0;\n border-top: 1px solid color-mix(in srgb, currentColor 20%, transparent);\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: var(--mj-text-sm);\n text-align: left;\n cursor: pointer;\n opacity: 0.85;\n }\n\n .phone-hero-summary:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n }\n\n .phone-hero-summary-text {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .phone-hero-summary > i {\n flex-shrink: 0;\n transition: transform 0.15s ease;\n }\n\n .phone-hero-summary[aria-expanded=\"true\"] > i {\n transform: rotate(180deg);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .phone-hero-summary > i {\n transition: none;\n }\n}\n"] }]
2765
2823
  }], null, null); })();
2766
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJAIPromptRunFormComponentExtended, { className: "MJAIPromptRunFormComponentExtended", filePath: "src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.ts", lineNumber: 21 }); })();
2824
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJAIPromptRunFormComponentExtended, { className: "MJAIPromptRunFormComponentExtended", filePath: "src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.ts", lineNumber: 23 }); })();
2767
2825
  //# sourceMappingURL=ai-prompt-run-form.component.js.map