@memberjunction/ng-core-entity-forms 6.2.0-edge.3 → 6.2.0-edge.5

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 (179) hide show
  1. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +12 -0
  2. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  3. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +43 -26
  4. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  5. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +7 -1
  6. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  7. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +191 -178
  8. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  9. package/dist/lib/custom/AIPromptRuns/prompt-run-data-capture-note.component.d.ts +48 -0
  10. package/dist/lib/custom/AIPromptRuns/prompt-run-data-capture-note.component.d.ts.map +1 -0
  11. package/dist/lib/custom/AIPromptRuns/prompt-run-data-capture-note.component.js +195 -0
  12. package/dist/lib/custom/AIPromptRuns/prompt-run-data-capture-note.component.js.map +1 -0
  13. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +324 -322
  14. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  15. package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts +16 -3
  16. package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts.map +1 -1
  17. package/dist/lib/custom/Conversations/conversation-overview.panel.js +103 -43
  18. package/dist/lib/custom/Conversations/conversation-overview.panel.js.map +1 -1
  19. package/dist/lib/custom/Entities/entity-form.component.d.ts +8 -0
  20. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  21. package/dist/lib/custom/Entities/entity-form.component.js +18 -4
  22. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  23. package/dist/lib/custom/Files/file-form.component.d.ts +5 -5
  24. package/dist/lib/custom/Files/file-form.component.d.ts.map +1 -1
  25. package/dist/lib/custom/Files/file-form.component.js +227 -157
  26. package/dist/lib/custom/Files/file-form.component.js.map +1 -1
  27. package/dist/lib/custom/Files/file-form.logic.d.ts +24 -0
  28. package/dist/lib/custom/Files/file-form.logic.d.ts.map +1 -0
  29. package/dist/lib/custom/Files/file-form.logic.js +57 -0
  30. package/dist/lib/custom/Files/file-form.logic.js.map +1 -0
  31. package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
  32. package/dist/lib/custom/Lists/list-form.component.js +3 -2
  33. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  34. package/dist/lib/custom/Queries/query-form.component.js +2 -2
  35. package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts.map +1 -1
  36. package/dist/lib/custom/RecordProcesses/record-process-form.component.js +6 -3
  37. package/dist/lib/custom/RecordProcesses/record-process-form.component.js.map +1 -1
  38. package/dist/lib/custom/SearchScopes/searchscope-form.component.d.ts +3 -3
  39. package/dist/lib/custom/SearchScopes/searchscope-form.component.d.ts.map +1 -1
  40. package/dist/lib/custom/SearchScopes/searchscope-form.component.js +5 -7
  41. package/dist/lib/custom/SearchScopes/searchscope-form.component.js.map +1 -1
  42. package/dist/lib/custom/Templates/templates-form.component.js +2 -2
  43. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts +34 -0
  44. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts.map +1 -0
  45. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js +33 -0
  46. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js.map +1 -0
  47. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +3 -0
  48. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
  49. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +261 -242
  50. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  51. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
  52. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +8 -8
  53. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
  54. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts +37 -5
  55. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts.map +1 -1
  56. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +155 -79
  57. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
  58. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +8 -0
  59. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  60. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +59 -8
  61. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  62. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +34 -9
  63. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  64. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +164 -43
  65. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  66. package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.js +3 -1
  67. package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.js.map +1 -1
  68. package/dist/lib/custom/custom-forms.module.d.ts +82 -79
  69. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  70. package/dist/lib/custom/custom-forms.module.js +16 -2
  71. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  72. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
  73. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +65 -47
  74. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  75. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +115 -117
  76. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
  77. package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.d.ts.map +1 -1
  78. package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js +64 -24
  79. package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js.map +1 -1
  80. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js +74 -52
  81. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js.map +1 -1
  82. package/dist/lib/generated/Entities/MJAIAgentSessionRecordingShard/mjaiagentsessionrecordingshard.form.component.d.ts +10 -0
  83. package/dist/lib/generated/Entities/MJAIAgentSessionRecordingShard/mjaiagentsessionrecordingshard.form.component.d.ts.map +1 -0
  84. package/dist/lib/generated/Entities/MJAIAgentSessionRecordingShard/mjaiagentsessionrecordingshard.form.component.js +86 -0
  85. package/dist/lib/generated/Entities/MJAIAgentSessionRecordingShard/mjaiagentsessionrecordingshard.form.component.js.map +1 -0
  86. package/dist/lib/generated/Entities/MJAIAgentUserPolicy/mjaiagentuserpolicy.form.component.d.ts +10 -0
  87. package/dist/lib/generated/Entities/MJAIAgentUserPolicy/mjaiagentuserpolicy.form.component.d.ts.map +1 -0
  88. package/dist/lib/generated/Entities/MJAIAgentUserPolicy/mjaiagentuserpolicy.form.component.js +132 -0
  89. package/dist/lib/generated/Entities/MJAIAgentUserPolicy/mjaiagentuserpolicy.form.component.js.map +1 -0
  90. package/dist/lib/generated/Entities/MJAIBridgeAgentIdentity/mjaibridgeagentidentity.form.component.js +12 -10
  91. package/dist/lib/generated/Entities/MJAIBridgeAgentIdentity/mjaibridgeagentidentity.form.component.js.map +1 -1
  92. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.d.ts.map +1 -1
  93. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +86 -32
  94. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
  95. package/dist/lib/generated/Entities/MJAIPersona/mjaipersona.form.component.d.ts.map +1 -1
  96. package/dist/lib/generated/Entities/MJAIPersona/mjaipersona.form.component.js +25 -7
  97. package/dist/lib/generated/Entities/MJAIPersona/mjaipersona.form.component.js.map +1 -1
  98. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.d.ts.map +1 -1
  99. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +180 -160
  100. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
  101. package/dist/lib/generated/Entities/MJActionParam/mjactionparam.form.component.js +16 -14
  102. package/dist/lib/generated/Entities/MJActionParam/mjactionparam.form.component.js.map +1 -1
  103. package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.js +23 -21
  104. package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.js.map +1 -1
  105. package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.js +21 -19
  106. package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.js.map +1 -1
  107. package/dist/lib/generated/Entities/MJCommunicationProvider/mjcommunicationprovider.form.component.js +30 -20
  108. package/dist/lib/generated/Entities/MJCommunicationProvider/mjcommunicationprovider.form.component.js.map +1 -1
  109. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.d.ts.map +1 -1
  110. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +32 -14
  111. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
  112. package/dist/lib/generated/Entities/MJConversationBranch/mjconversationbranch.form.component.d.ts +10 -0
  113. package/dist/lib/generated/Entities/MJConversationBranch/mjconversationbranch.form.component.d.ts.map +1 -0
  114. package/dist/lib/generated/Entities/MJConversationBranch/mjconversationbranch.form.component.js +111 -0
  115. package/dist/lib/generated/Entities/MJConversationBranch/mjconversationbranch.form.component.js.map +1 -0
  116. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.d.ts.map +1 -1
  117. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +59 -67
  118. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js.map +1 -1
  119. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.d.ts.map +1 -1
  120. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js +35 -17
  121. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js.map +1 -1
  122. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  123. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +112 -94
  124. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  125. package/dist/lib/generated/Entities/MJFeaturePipelineVersion/mjfeaturepipelineversion.form.component.d.ts +10 -0
  126. package/dist/lib/generated/Entities/MJFeaturePipelineVersion/mjfeaturepipelineversion.form.component.d.ts.map +1 -0
  127. package/dist/lib/generated/Entities/MJFeaturePipelineVersion/mjfeaturepipelineversion.form.component.js +130 -0
  128. package/dist/lib/generated/Entities/MJFeaturePipelineVersion/mjfeaturepipelineversion.form.component.js.map +1 -0
  129. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js +26 -14
  130. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js.map +1 -1
  131. package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.js +23 -19
  132. package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.js.map +1 -1
  133. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js +29 -27
  134. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js.map +1 -1
  135. package/dist/lib/generated/Entities/MJProcessRunDetail/mjprocessrundetail.form.component.js +17 -15
  136. package/dist/lib/generated/Entities/MJProcessRunDetail/mjprocessrundetail.form.component.js.map +1 -1
  137. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.d.ts.map +1 -1
  138. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js +27 -9
  139. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
  140. package/dist/lib/generated/Entities/MJScopedNotificationConfig/mjscopednotificationconfig.form.component.d.ts +10 -0
  141. package/dist/lib/generated/Entities/MJScopedNotificationConfig/mjscopednotificationconfig.form.component.d.ts.map +1 -0
  142. package/dist/lib/generated/Entities/MJScopedNotificationConfig/mjscopednotificationconfig.form.component.js +106 -0
  143. package/dist/lib/generated/Entities/MJScopedNotificationConfig/mjscopednotificationconfig.form.component.js.map +1 -0
  144. package/dist/lib/generated/Entities/MJTest/mjtest.form.component.d.ts.map +1 -1
  145. package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js +24 -6
  146. package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js.map +1 -1
  147. package/dist/lib/generated/Entities/MJTestRun/mjtestrun.form.component.d.ts.map +1 -1
  148. package/dist/lib/generated/Entities/MJTestRun/mjtestrun.form.component.js +29 -11
  149. package/dist/lib/generated/Entities/MJTestRun/mjtestrun.form.component.js.map +1 -1
  150. package/dist/lib/generated/Entities/MJTheme/mjtheme.form.component.d.ts.map +1 -1
  151. package/dist/lib/generated/Entities/MJTheme/mjtheme.form.component.js +13 -3
  152. package/dist/lib/generated/Entities/MJTheme/mjtheme.form.component.js.map +1 -1
  153. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  154. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +788 -714
  155. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  156. package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.d.ts.map +1 -1
  157. package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.js +24 -6
  158. package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.js.map +1 -1
  159. package/dist/lib/generated/Entities/MJUserRoutine/mjuserroutine.form.component.js +31 -25
  160. package/dist/lib/generated/Entities/MJUserRoutine/mjuserroutine.form.component.js.map +1 -1
  161. package/dist/lib/generated/generated-forms.module.d.ts +286 -281
  162. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  163. package/dist/lib/generated/generated-forms.module.js +15 -0
  164. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  165. package/dist/lib/panels/feature-values/feature-values.logic.d.ts +55 -0
  166. package/dist/lib/panels/feature-values/feature-values.logic.d.ts.map +1 -0
  167. package/dist/lib/panels/feature-values/feature-values.logic.js +88 -0
  168. package/dist/lib/panels/feature-values/feature-values.logic.js.map +1 -0
  169. package/dist/lib/panels/feature-values/feature-values.panel.d.ts +39 -0
  170. package/dist/lib/panels/feature-values/feature-values.panel.d.ts.map +1 -0
  171. package/dist/lib/panels/feature-values/feature-values.panel.js +303 -0
  172. package/dist/lib/panels/feature-values/feature-values.panel.js.map +1 -0
  173. package/dist/lib/shared/components/template-editor.component.js +2 -2
  174. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  175. package/dist/public-api.d.ts +1 -0
  176. package/dist/public-api.d.ts.map +1 -1
  177. package/dist/public-api.js +1 -0
  178. package/dist/public-api.js.map +1 -1
  179. package/package.json +48 -47
@@ -18,7 +18,8 @@ import * as i2 from "@memberjunction/ng-ui-components";
18
18
  import * as i3 from "@memberjunction/ng-base-forms";
19
19
  import * as i4 from "@memberjunction/ng-code-editor";
20
20
  import * as i5 from "./chat-message-viewer.component";
21
- import * as i6 from "@angular/common";
21
+ import * as i6 from "./prompt-run-data-capture-note.component";
22
+ import * as i7 from "@angular/common";
22
23
  const _forTrack0 = ($index, $item) => $item.attemptNumber;
23
24
  const _forTrack1 = ($index, $item) => $item.ID;
24
25
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_11_Template(rf, ctx) { if (rf & 1) {
@@ -390,7 +391,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Templat
390
391
  i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 3 : -1);
391
392
  } }
392
393
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
393
- i0.ɵɵelementStart(0, "span", 114);
394
+ i0.ɵɵelementStart(0, "span", 115);
394
395
  i0.ɵɵtext(1);
395
396
  i0.ɵɵelementEnd();
396
397
  } if (rf & 2) {
@@ -399,10 +400,10 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_temp
399
400
  i0.ɵɵtextInterpolate1("(", ctx_r1.chatMessages.length, ")");
400
401
  } }
401
402
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Template(rf, ctx) { if (rf & 1) {
402
- i0.ɵɵelementStart(0, "span", 112);
403
- i0.ɵɵelement(1, "i", 113);
403
+ i0.ɵɵelementStart(0, "span", 113);
404
+ i0.ɵɵelement(1, "i", 114);
404
405
  i0.ɵɵtext(2, " Messages ");
405
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Conditional_3_Template, 2, 1, "span", 114);
406
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Conditional_3_Template, 2, 1, "span", 115);
406
407
  i0.ɵɵelementEnd();
407
408
  } if (rf & 2) {
408
409
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -411,7 +412,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_temp
411
412
  } }
412
413
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_4_Template(rf, ctx) { if (rf & 1) {
413
414
  i0.ɵɵelementStart(0, "div", 102);
414
- i0.ɵɵelement(1, "i", 115);
415
+ i0.ɵɵelement(1, "i", 116);
415
416
  i0.ɵɵelementStart(2, "p");
416
417
  i0.ɵɵtext(3, "Loading messages...");
417
418
  i0.ɵɵelementEnd()();
@@ -431,8 +432,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_temp
431
432
  i0.ɵɵelementEnd();
432
433
  } }
433
434
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Template(rf, ctx) { if (rf & 1) {
434
- i0.ɵɵelementStart(0, "span", 112);
435
- i0.ɵɵelement(1, "i", 116);
435
+ i0.ɵɵelementStart(0, "span", 113);
436
+ i0.ɵɵelement(1, "i", 117);
436
437
  i0.ɵɵtext(2, " Data ");
437
438
  i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Conditional_3_Template, 2, 0, "span", 99);
438
439
  i0.ɵɵelementEnd();
@@ -441,19 +442,19 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_temp
441
442
  i0.ɵɵadvance(3);
442
443
  i0.ɵɵconditional(ctx_r1.inputData ? 3 : -1);
443
444
  } }
444
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template(rf, ctx) { if (rf & 1) {
445
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_11_Template(rf, ctx) { if (rf & 1) {
445
446
  const _r9 = i0.ɵɵgetCurrentView();
446
- i0.ɵɵelementStart(0, "div", 33)(1, "div", 106)(2, "button", 107);
447
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedData, "Data")); });
448
- i0.ɵɵelement(3, "i", 108);
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);
449
450
  i0.ɵɵtext(4, " Copy ");
450
451
  i0.ɵɵelementEnd();
451
- i0.ɵɵelementStart(5, "button", 109);
452
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_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")); });
453
- i0.ɵɵelement(6, "i", 110);
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);
454
455
  i0.ɵɵelementEnd()();
455
- i0.ɵɵelementStart(7, "mj-code-editor", 117);
456
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_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); });
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); });
457
458
  i0.ɵɵelementEnd()();
458
459
  } if (rf & 2) {
459
460
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -461,11 +462,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditi
461
462
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedData);
462
463
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
463
464
  } }
464
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_11_Template(rf, ctx) { if (rf & 1) {
465
- i0.ɵɵelement(0, "mj-empty-state", 105);
465
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_12_Template(rf, ctx) { if (rf & 1) {
466
+ i0.ɵɵelement(0, "mj-empty-state", 106);
466
467
  } }
467
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_13_Template(rf, ctx) { if (rf & 1) {
468
- i0.ɵɵelementStart(0, "span", 112);
468
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_14_Template(rf, ctx) { if (rf & 1) {
469
+ i0.ɵɵelementStart(0, "span", 113);
469
470
  i0.ɵɵelement(1, "i", 94);
470
471
  i0.ɵɵtext(2, " Raw ");
471
472
  i0.ɵɵelementEnd();
@@ -480,21 +481,22 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Templat
480
481
  i0.ɵɵelementStart(7, "mj-accordion-panel", 100);
481
482
  i0.ɵɵtemplate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Template, 4, 1, "ng-template", 28);
482
483
  i0.ɵɵelementStart(9, "div", 101);
483
- i0.ɵɵconditionalCreate(10, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template, 8, 4, "div", 33)(11, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_11_Template, 1, 0, "mj-empty-state", 105);
484
- i0.ɵɵelementEnd()();
485
- i0.ɵɵelementStart(12, "mj-accordion-panel", 100);
486
- i0.ɵɵtemplate(13, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_13_Template, 3, 0, "ng-template", 28);
487
- i0.ɵɵelementStart(14, "div", 101)(15, "div", 33)(16, "div", 106)(17, "button", 107);
488
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedMessages, "Messages")); });
489
- i0.ɵɵelement(18, "i", 108);
490
- i0.ɵɵtext(19, " Copy ");
491
- i0.ɵɵelementEnd();
492
- i0.ɵɵelementStart(20, "button", 109);
493
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template_button_click_20_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedMessages, "json", "Raw Messages")); });
494
- i0.ɵɵelement(21, "i", 110);
495
- i0.ɵɵelementEnd()();
496
- i0.ɵɵelementStart(22, "mj-code-editor", 111);
497
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template_mj_code_editor_ngModelChange_22_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); });
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);
492
+ i0.ɵɵtext(20, " Copy ");
493
+ 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);
497
+ 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); });
498
500
  i0.ɵɵelementEnd()()()()();
499
501
  } if (rf & 2) {
500
502
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -505,7 +507,9 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Templat
505
507
  i0.ɵɵadvance(3);
506
508
  i0.ɵɵproperty("Expanded", ctx_r1.dataExpanded);
507
509
  i0.ɵɵadvance(3);
508
- i0.ɵɵconditional(ctx_r1.inputData && ctx_r1.formattedData ? 10 : 11);
510
+ i0.ɵɵproperty("DataCapture", ctx_r1.DataCapture)("DataShape", ctx_r1.DataShape)("DataCaptureNote", ctx_r1.DataCaptureNote);
511
+ i0.ɵɵadvance();
512
+ i0.ɵɵconditional(ctx_r1.inputData && ctx_r1.formattedData ? 11 : ctx_r1.DataCapture !== "None" ? 12 : -1);
509
513
  i0.ɵɵadvance(2);
510
514
  i0.ɵɵproperty("Expanded", ctx_r1.rawExpanded);
511
515
  i0.ɵɵadvance(10);
@@ -521,16 +525,16 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditi
521
525
  i0.ɵɵelementEnd();
522
526
  } }
523
527
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_4_Template(rf, ctx) { if (rf & 1) {
524
- i0.ɵɵelementStart(0, "span", 119);
528
+ i0.ɵɵelementStart(0, "span", 120);
525
529
  i0.ɵɵtext(1, "Error");
526
530
  i0.ɵɵelementEnd();
527
531
  } }
528
532
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Template(rf, ctx) { if (rf & 1) {
529
533
  i0.ɵɵelementStart(0, "span", 97);
530
- i0.ɵɵelement(1, "i", 118);
534
+ i0.ɵɵelement(1, "i", 119);
531
535
  i0.ɵɵtext(2, " Result ");
532
536
  i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_3_Template, 2, 0, "span", 99);
533
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_4_Template, 2, 0, "span", 119);
537
+ i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_4_Template, 2, 0, "span", 120);
534
538
  i0.ɵɵelementEnd();
535
539
  } if (rf & 2) {
536
540
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -541,8 +545,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Templat
541
545
  } }
542
546
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Template(rf, ctx) { if (rf & 1) {
543
547
  i0.ɵɵelementStart(0, "div", 32);
544
- i0.ɵɵelement(1, "i", 120);
545
- i0.ɵɵelementStart(2, "div", 121)(3, "h4");
548
+ i0.ɵɵelement(1, "i", 121);
549
+ i0.ɵɵelementStart(2, "div", 122)(3, "h4");
546
550
  i0.ɵɵtext(4, "Error Message");
547
551
  i0.ɵɵelementEnd();
548
552
  i0.ɵɵelementStart(5, "p");
@@ -555,16 +559,16 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Templat
555
559
  } }
556
560
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template(rf, ctx) { if (rf & 1) {
557
561
  const _r10 = i0.ɵɵgetCurrentView();
558
- i0.ɵɵelementStart(0, "div", 33)(1, "div", 106)(2, "button", 107);
562
+ i0.ɵɵelementStart(0, "div", 33)(1, "div", 107)(2, "button", 108);
559
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")); });
560
- i0.ɵɵelement(3, "i", 108);
564
+ i0.ɵɵelement(3, "i", 109);
561
565
  i0.ɵɵtext(4, " Copy ");
562
566
  i0.ɵɵelementEnd();
563
- i0.ɵɵelementStart(5, "button", 109);
567
+ i0.ɵɵelementStart(5, "button", 110);
564
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")); });
565
- i0.ɵɵelement(6, "i", 110);
569
+ i0.ɵɵelement(6, "i", 111);
566
570
  i0.ɵɵelementEnd()();
567
- i0.ɵɵelementStart(7, "mj-code-editor", 122);
571
+ i0.ɵɵelementStart(7, "mj-code-editor", 123);
568
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); });
569
573
  i0.ɵɵelementEnd()();
570
574
  } if (rf & 2) {
@@ -574,7 +578,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Templat
574
578
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
575
579
  } }
576
580
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
577
- i0.ɵɵelementStart(0, "p", 124)(1, "strong");
581
+ i0.ɵɵelementStart(0, "p", 125)(1, "strong");
578
582
  i0.ɵɵtext(2, "Status:");
579
583
  i0.ɵɵelementEnd();
580
584
  i0.ɵɵtext(3);
@@ -586,14 +590,14 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditi
586
590
  } }
587
591
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
588
592
  const _r11 = i0.ɵɵgetCurrentView();
589
- i0.ɵɵelementStart(0, "div", 125)(1, "div", 106)(2, "h4", 127);
593
+ i0.ɵɵelementStart(0, "div", 126)(1, "div", 107)(2, "h4", 128);
590
594
  i0.ɵɵtext(3, "Error Details");
591
595
  i0.ɵɵelementEnd();
592
- i0.ɵɵelementStart(4, "button", 109);
596
+ i0.ɵɵelementStart(4, "button", 110);
593
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")); });
594
- i0.ɵɵelement(5, "i", 110);
598
+ i0.ɵɵelement(5, "i", 111);
595
599
  i0.ɵɵelementEnd()();
596
- i0.ɵɵelement(6, "mj-code-editor", 128);
600
+ i0.ɵɵelement(6, "mj-code-editor", 129);
597
601
  i0.ɵɵelementEnd();
598
602
  } if (rf & 2) {
599
603
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -601,15 +605,15 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditi
601
605
  i0.ɵɵproperty("ngModel", ctx_r1.formattedErrorDetails)("disabled", true)("language", "json")("lineWrapping", true);
602
606
  } }
603
607
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
604
- i0.ɵɵelementStart(0, "p", 126);
608
+ i0.ɵɵelementStart(0, "p", 127);
605
609
  i0.ɵɵtext(1, " The prompt execution failed but no additional error information is available. ");
606
610
  i0.ɵɵelementEnd();
607
611
  } }
608
612
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_1_Template(rf, ctx) { if (rf & 1) {
609
- i0.ɵɵelementStart(0, "div", 123);
610
- i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_1_Conditional_1_Template, 4, 1, "p", 124);
611
- i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_1_Conditional_2_Template, 7, 4, "div", 125);
612
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_1_Conditional_3_Template, 2, 0, "p", 126);
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);
613
617
  i0.ɵɵelementEnd();
614
618
  } if (rf & 2) {
615
619
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -622,7 +626,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditi
622
626
  } }
623
627
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Template(rf, ctx) { if (rf & 1) {
624
628
  i0.ɵɵelementStart(0, "mj-empty-state", 34);
625
- i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_1_Template, 4, 3, "div", 123);
629
+ i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_1_Template, 4, 3, "div", 124);
626
630
  i0.ɵɵelementEnd();
627
631
  } if (rf & 2) {
628
632
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -631,7 +635,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Templat
631
635
  } }
632
636
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_45_Template(rf, ctx) { if (rf & 1) {
633
637
  i0.ɵɵelementStart(0, "span", 97);
634
- i0.ɵɵelement(1, "i", 129);
638
+ i0.ɵɵelement(1, "i", 130);
635
639
  i0.ɵɵtext(2, " Token Usage & Metrics ");
636
640
  i0.ɵɵelementEnd();
637
641
  } }
@@ -740,7 +744,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Templat
740
744
  } }
741
745
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_84_Template(rf, ctx) { if (rf & 1) {
742
746
  i0.ɵɵelementStart(0, "div", 36)(1, "div", 37);
743
- i0.ɵɵelement(2, "i", 130);
747
+ i0.ɵɵelement(2, "i", 131);
744
748
  i0.ɵɵelementStart(3, "h4");
745
749
  i0.ɵɵtext(4, "Queue Time");
746
750
  i0.ɵɵelementEnd()();
@@ -754,7 +758,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_84_Templat
754
758
  } }
755
759
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Template(rf, ctx) { if (rf & 1) {
756
760
  i0.ɵɵelementStart(0, "div", 36)(1, "div", 37);
757
- i0.ɵɵelement(2, "i", 131);
761
+ i0.ɵɵelement(2, "i", 132);
758
762
  i0.ɵɵelementStart(3, "h4");
759
763
  i0.ɵɵtext(4, "Prompt Time");
760
764
  i0.ɵɵelementEnd()();
@@ -768,7 +772,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Templat
768
772
  } }
769
773
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_86_Template(rf, ctx) { if (rf & 1) {
770
774
  i0.ɵɵelementStart(0, "div", 36)(1, "div", 37);
771
- i0.ɵɵelement(2, "i", 132);
775
+ i0.ɵɵelement(2, "i", 133);
772
776
  i0.ɵɵelementStart(3, "h4");
773
777
  i0.ɵɵtext(4, "Completion Time");
774
778
  i0.ɵɵelementEnd()();
@@ -797,10 +801,10 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Templat
797
801
  i0.ɵɵelementStart(0, "div", 48)(1, "span", 88);
798
802
  i0.ɵɵtext(2, "Agent:");
799
803
  i0.ɵɵelementEnd();
800
- i0.ɵɵelementStart(3, "span", 133);
804
+ i0.ɵɵelementStart(3, "span", 134);
801
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)); });
802
806
  i0.ɵɵtext(4);
803
- i0.ɵɵelement(5, "i", 134);
807
+ i0.ɵɵelement(5, "i", 135);
804
808
  i0.ɵɵelementEnd()();
805
809
  } if (rf & 2) {
806
810
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -808,7 +812,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Templat
808
812
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent, " ");
809
813
  } }
810
814
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
811
- i0.ɵɵelementStart(0, "span", 114);
815
+ i0.ɵɵelementStart(0, "span", 115);
812
816
  i0.ɵɵtext(1);
813
817
  i0.ɵɵelementEnd();
814
818
  } if (rf & 2) {
@@ -817,21 +821,21 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_temp
817
821
  i0.ɵɵtextInterpolate1("(", ctx_r1.record.ValidationAttemptCount, " attempts)");
818
822
  } }
819
823
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
820
- i0.ɵɵelementStart(0, "span", 146);
824
+ i0.ɵɵelementStart(0, "span", 147);
821
825
  i0.ɵɵtext(1, "Passed");
822
826
  i0.ɵɵelementEnd();
823
827
  } }
824
828
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
825
- i0.ɵɵelementStart(0, "span", 119);
829
+ i0.ɵɵelementStart(0, "span", 120);
826
830
  i0.ɵɵtext(1, "Failed");
827
831
  i0.ɵɵelementEnd();
828
832
  } }
829
833
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Template(rf, ctx) { if (rf & 1) {
830
834
  i0.ɵɵelementStart(0, "span", 97);
831
- i0.ɵɵelement(1, "i", 145);
835
+ i0.ɵɵelement(1, "i", 146);
832
836
  i0.ɵɵtext(2, " Validation & Retries ");
833
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_3_Template, 2, 1, "span", 114);
834
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_4_Template, 2, 0, "span", 146)(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_5_Template, 2, 0, "span", 119);
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);
835
839
  i0.ɵɵelementEnd();
836
840
  } if (rf & 2) {
837
841
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -841,7 +845,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_temp
841
845
  i0.ɵɵconditional(ctx_r1.record.FinalValidationPassed ? 4 : ctx_r1.record.FinalValidationPassed === false ? 5 : -1);
842
846
  } }
843
847
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_31_Conditional_6_Template(rf, ctx) { if (rf & 1) {
844
- i0.ɵɵelementStart(0, "span", 147);
848
+ i0.ɵɵelementStart(0, "span", 148);
845
849
  i0.ɵɵtext(1);
846
850
  i0.ɵɵelementEnd();
847
851
  } if (rf & 2) {
@@ -850,14 +854,14 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditi
850
854
  i0.ɵɵtextInterpolate1("", ctx_r1.record.ValidationErrorCount, " validation errors");
851
855
  } }
852
856
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_31_Template(rf, ctx) { if (rf & 1) {
853
- i0.ɵɵelementStart(0, "div", 140)(1, "h5");
854
- i0.ɵɵelement(2, "i", 120);
857
+ i0.ɵɵelementStart(0, "div", 141)(1, "h5");
858
+ i0.ɵɵelement(2, "i", 121);
855
859
  i0.ɵɵtext(3, " Final Validation Error");
856
860
  i0.ɵɵelementEnd();
857
861
  i0.ɵɵelementStart(4, "p");
858
862
  i0.ɵɵtext(5);
859
863
  i0.ɵɵelementEnd();
860
- i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_31_Conditional_6_Template, 2, 1, "span", 147);
864
+ i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_31_Conditional_6_Template, 2, 1, "span", 148);
861
865
  i0.ɵɵelementEnd();
862
866
  } if (rf & 2) {
863
867
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -867,7 +871,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditi
867
871
  i0.ɵɵconditional(ctx_r1.record && ctx_r1.record.ValidationErrorCount && ctx_r1.record.ValidationErrorCount > 0 ? 6 : -1);
868
872
  } }
869
873
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_32_Template(rf, ctx) { if (rf & 1) {
870
- i0.ɵɵelementStart(0, "div", 141)(1, "h5");
874
+ i0.ɵɵelementStart(0, "div", 142)(1, "h5");
871
875
  i0.ɵɵelement(2, "i", 57);
872
876
  i0.ɵɵtext(3, " Most Common Error");
873
877
  i0.ɵɵelementEnd();
@@ -880,23 +884,23 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditi
880
884
  i0.ɵɵtextInterpolate(ctx_r1.record.CommonValidationError);
881
885
  } }
882
886
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_33_Template(rf, ctx) { if (rf & 1) {
883
- i0.ɵɵelementStart(0, "div", 142)(1, "h4");
887
+ i0.ɵɵelementStart(0, "div", 143)(1, "h4");
884
888
  i0.ɵɵtext(2, "Retry Timeline");
885
889
  i0.ɵɵelementEnd();
886
- i0.ɵɵelementStart(3, "div", 148)(4, "div", 149);
890
+ i0.ɵɵelementStart(3, "div", 149)(4, "div", 150);
887
891
  i0.ɵɵelement(5, "i", 91);
888
892
  i0.ɵɵelementStart(6, "span");
889
893
  i0.ɵɵtext(7);
890
894
  i0.ɵɵpipe(8, "date");
891
895
  i0.ɵɵelementEnd()();
892
- i0.ɵɵelementStart(9, "div", 149);
893
- i0.ɵɵelement(10, "i", 132);
896
+ i0.ɵɵelementStart(9, "div", 150);
897
+ i0.ɵɵelement(10, "i", 133);
894
898
  i0.ɵɵelementStart(11, "span");
895
899
  i0.ɵɵtext(12);
896
900
  i0.ɵɵpipe(13, "date");
897
901
  i0.ɵɵelementEnd()();
898
- i0.ɵɵelementStart(14, "div", 149);
899
- i0.ɵɵelement(15, "i", 150);
902
+ i0.ɵɵelementStart(14, "div", 150);
903
+ i0.ɵɵelement(15, "i", 151);
900
904
  i0.ɵɵelementStart(16, "span");
901
905
  i0.ɵɵtext(17);
902
906
  i0.ɵɵelementEnd()()()();
@@ -910,7 +914,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditi
910
914
  i0.ɵɵtextInterpolate1("Total Retry Duration: ", ctx_r1.formatDuration(ctx_r1.record.TotalRetryDurationMS));
911
915
  } }
912
916
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Conditional_7_Conditional_2_Template(rf, ctx) { if (rf & 1) {
913
- i0.ɵɵelementStart(0, "span", 147);
917
+ i0.ɵɵelementStart(0, "span", 148);
914
918
  i0.ɵɵtext(1);
915
919
  i0.ɵɵelementEnd();
916
920
  } if (rf & 2) {
@@ -919,10 +923,10 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditi
919
923
  i0.ɵɵtextInterpolate1("(", attempt_r14.validationErrorCount, " errors)");
920
924
  } }
921
925
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Conditional_7_Template(rf, ctx) { if (rf & 1) {
922
- i0.ɵɵelementStart(0, "span", 158);
926
+ i0.ɵɵelementStart(0, "span", 159);
923
927
  i0.ɵɵtext(1);
924
928
  i0.ɵɵelementEnd();
925
- i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Conditional_7_Conditional_2_Template, 2, 1, "span", 147);
929
+ i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Conditional_7_Conditional_2_Template, 2, 1, "span", 148);
926
930
  } if (rf & 2) {
927
931
  const attempt_r14 = i0.ɵɵnextContext().$implicit;
928
932
  i0.ɵɵadvance();
@@ -931,7 +935,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditi
931
935
  i0.ɵɵconditional(attempt_r14.validationErrorCount > 0 ? 2 : -1);
932
936
  } }
933
937
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Conditional_8_Template(rf, ctx) { if (rf & 1) {
934
- i0.ɵɵelementStart(0, "span", 157);
938
+ i0.ɵɵelementStart(0, "span", 158);
935
939
  i0.ɵɵtext(1);
936
940
  i0.ɵɵelementEnd();
937
941
  } if (rf & 2) {
@@ -940,15 +944,15 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditi
940
944
  i0.ɵɵtextInterpolate1("Output: ", attempt_r14.outputLength, " chars");
941
945
  } }
942
946
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Template(rf, ctx) { if (rf & 1) {
943
- i0.ɵɵelementStart(0, "div", 153)(1, "div", 154);
947
+ i0.ɵɵelementStart(0, "div", 154)(1, "div", 155);
944
948
  i0.ɵɵelement(2, "i");
945
949
  i0.ɵɵtext(3);
946
950
  i0.ɵɵelementEnd();
947
- i0.ɵɵelementStart(4, "div", 155)(5, "span", 156);
951
+ i0.ɵɵelementStart(4, "div", 156)(5, "span", 157);
948
952
  i0.ɵɵtext(6);
949
953
  i0.ɵɵelementEnd();
950
954
  i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Conditional_7_Template, 3, 2);
951
- i0.ɵɵconditionalCreate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Conditional_8_Template, 2, 1, "span", 157);
955
+ i0.ɵɵconditionalCreate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Conditional_8_Template, 2, 1, "span", 158);
952
956
  i0.ɵɵelementEnd()();
953
957
  } if (rf & 2) {
954
958
  const attempt_r14 = ctx.$implicit;
@@ -965,11 +969,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditi
965
969
  i0.ɵɵconditional(attempt_r14.outputLength ? 8 : -1);
966
970
  } }
967
971
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_Template(rf, ctx) { if (rf & 1) {
968
- i0.ɵɵelementStart(0, "div", 143)(1, "h4");
972
+ i0.ɵɵelementStart(0, "div", 144)(1, "h4");
969
973
  i0.ɵɵtext(2, "Validation Attempts");
970
974
  i0.ɵɵelementEnd();
971
- i0.ɵɵelementStart(3, "div", 151);
972
- i0.ɵɵrepeaterCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Template, 9, 10, "div", 152, _forTrack0);
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);
973
977
  i0.ɵɵelementEnd()();
974
978
  } if (rf & 2) {
975
979
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -978,14 +982,14 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditi
978
982
  } }
979
983
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_35_Template(rf, ctx) { if (rf & 1) {
980
984
  const _r15 = i0.ɵɵgetCurrentView();
981
- i0.ɵɵelementStart(0, "div", 144)(1, "div", 106)(2, "h4", 127);
985
+ i0.ɵɵelementStart(0, "div", 145)(1, "div", 107)(2, "h4", 128);
982
986
  i0.ɵɵtext(3, "Validation Summary Details");
983
987
  i0.ɵɵelementEnd();
984
- i0.ɵɵelementStart(4, "button", 109);
988
+ i0.ɵɵelementStart(4, "button", 110);
985
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")); });
986
- i0.ɵɵelement(5, "i", 110);
990
+ i0.ɵɵelement(5, "i", 111);
987
991
  i0.ɵɵelementEnd()();
988
- i0.ɵɵelementStart(6, "div", 159)(7, "mj-code-editor", 160);
992
+ i0.ɵɵelementStart(6, "div", 160)(7, "mj-code-editor", 161);
989
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); });
990
994
  i0.ɵɵelementEnd()()();
991
995
  } if (rf & 2) {
@@ -996,14 +1000,14 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditi
996
1000
  } }
997
1001
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_36_Template(rf, ctx) { if (rf & 1) {
998
1002
  const _r16 = i0.ɵɵgetCurrentView();
999
- i0.ɵɵelementStart(0, "div", 144)(1, "div", 106)(2, "h4", 127);
1003
+ i0.ɵɵelementStart(0, "div", 145)(1, "div", 107)(2, "h4", 128);
1000
1004
  i0.ɵɵtext(3, "Validation Attempts (Raw JSON)");
1001
1005
  i0.ɵɵelementEnd();
1002
- i0.ɵɵelementStart(4, "button", 109);
1006
+ i0.ɵɵelementStart(4, "button", 110);
1003
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")); });
1004
- i0.ɵɵelement(5, "i", 110);
1008
+ i0.ɵɵelement(5, "i", 111);
1005
1009
  i0.ɵɵelementEnd()();
1006
- i0.ɵɵelementStart(6, "div", 159)(7, "mj-code-editor", 161);
1010
+ i0.ɵɵelementStart(6, "div", 160)(7, "mj-code-editor", 162);
1007
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); });
1008
1012
  i0.ɵɵelementEnd()()();
1009
1013
  } if (rf & 2) {
@@ -1017,44 +1021,44 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Templat
1017
1021
  i0.ɵɵelementStart(0, "mj-accordion-panel", 27);
1018
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)); });
1019
1023
  i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Template, 6, 2, "ng-template", 28);
1020
- i0.ɵɵelementStart(2, "div", 29)(3, "div", 135)(4, "div", 136)(5, "h4");
1024
+ i0.ɵɵelementStart(2, "div", 29)(3, "div", 136)(4, "div", 137)(5, "h4");
1021
1025
  i0.ɵɵtext(6, "Validation Summary");
1022
1026
  i0.ɵɵelementEnd();
1023
- i0.ɵɵelementStart(7, "div", 137);
1027
+ i0.ɵɵelementStart(7, "div", 138);
1024
1028
  i0.ɵɵelement(8, "i");
1025
1029
  i0.ɵɵtext(9);
1026
1030
  i0.ɵɵelementEnd()();
1027
- i0.ɵɵelementStart(10, "div", 138)(11, "div", 139)(12, "div", 88);
1031
+ i0.ɵɵelementStart(10, "div", 139)(11, "div", 140)(12, "div", 88);
1028
1032
  i0.ɵɵtext(13, "Total Attempts");
1029
1033
  i0.ɵɵelementEnd();
1030
1034
  i0.ɵɵelementStart(14, "div", 89);
1031
1035
  i0.ɵɵtext(15);
1032
1036
  i0.ɵɵelementEnd()();
1033
- i0.ɵɵelementStart(16, "div", 139)(17, "div", 88);
1037
+ i0.ɵɵelementStart(16, "div", 140)(17, "div", 88);
1034
1038
  i0.ɵɵtext(18, "Successful");
1035
1039
  i0.ɵɵelementEnd();
1036
1040
  i0.ɵɵelementStart(19, "div", 89);
1037
1041
  i0.ɵɵtext(20);
1038
1042
  i0.ɵɵelementEnd()();
1039
- i0.ɵɵelementStart(21, "div", 139)(22, "div", 88);
1043
+ i0.ɵɵelementStart(21, "div", 140)(22, "div", 88);
1040
1044
  i0.ɵɵtext(23, "Behavior");
1041
1045
  i0.ɵɵelementEnd();
1042
1046
  i0.ɵɵelementStart(24, "div", 89);
1043
1047
  i0.ɵɵtext(25);
1044
1048
  i0.ɵɵelementEnd()();
1045
- i0.ɵɵelementStart(26, "div", 139)(27, "div", 88);
1049
+ i0.ɵɵelementStart(26, "div", 140)(27, "div", 88);
1046
1050
  i0.ɵɵtext(28, "Retry Strategy");
1047
1051
  i0.ɵɵelementEnd();
1048
1052
  i0.ɵɵelementStart(29, "div", 89);
1049
1053
  i0.ɵɵtext(30);
1050
1054
  i0.ɵɵelementEnd()()();
1051
- i0.ɵɵconditionalCreate(31, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_31_Template, 7, 2, "div", 140);
1052
- i0.ɵɵconditionalCreate(32, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_32_Template, 6, 1, "div", 141);
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);
1053
1057
  i0.ɵɵelementEnd();
1054
- i0.ɵɵconditionalCreate(33, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_33_Template, 18, 9, "div", 142);
1055
- i0.ɵɵconditionalCreate(34, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_Template, 6, 0, "div", 143);
1056
- i0.ɵɵconditionalCreate(35, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_35_Template, 8, 4, "div", 144);
1057
- i0.ɵɵconditionalCreate(36, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_36_Template, 8, 4, "div", 144);
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);
1058
1062
  i0.ɵɵelementEnd()();
1059
1063
  } if (rf & 2) {
1060
1064
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1087,7 +1091,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Templat
1087
1091
  i0.ɵɵconditional(ctx_r1.record.ValidationAttempts ? 36 : -1);
1088
1092
  } }
1089
1093
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1090
- i0.ɵɵelementStart(0, "span", 114);
1094
+ i0.ɵɵelementStart(0, "span", 115);
1091
1095
  i0.ɵɵtext(1);
1092
1096
  i0.ɵɵelementEnd();
1093
1097
  } if (rf & 2) {
@@ -1097,9 +1101,9 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_ng_temp
1097
1101
  } }
1098
1102
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1099
1103
  i0.ɵɵelementStart(0, "span", 97);
1100
- i0.ɵɵelement(1, "i", 164);
1104
+ i0.ɵɵelement(1, "i", 165);
1101
1105
  i0.ɵɵtext(2, " Run Hierarchy ");
1102
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_ng_template_1_Conditional_3_Template, 2, 1, "span", 114);
1106
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_ng_template_1_Conditional_3_Template, 2, 1, "span", 115);
1103
1107
  i0.ɵɵelementEnd();
1104
1108
  } if (rf & 2) {
1105
1109
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1108,21 +1112,21 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_ng_temp
1108
1112
  } }
1109
1113
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1110
1114
  const _r17 = i0.ɵɵgetCurrentView();
1111
- i0.ɵɵelementStart(0, "div", 162)(1, "h4");
1115
+ i0.ɵɵelementStart(0, "div", 163)(1, "h4");
1112
1116
  i0.ɵɵelement(2, "i", 84);
1113
1117
  i0.ɵɵtext(3, " Parent Run");
1114
1118
  i0.ɵɵelementEnd();
1115
- i0.ɵɵelementStart(4, "div", 165);
1119
+ i0.ɵɵelementStart(4, "div", 166);
1116
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)); });
1117
- i0.ɵɵelementStart(5, "div", 166);
1121
+ i0.ɵɵelementStart(5, "div", 167);
1118
1122
  i0.ɵɵelement(6, "i");
1119
1123
  i0.ɵɵelementEnd();
1120
- i0.ɵɵelementStart(7, "div", 167)(8, "div", 168);
1124
+ i0.ɵɵelementStart(7, "div", 168)(8, "div", 169);
1121
1125
  i0.ɵɵtext(9);
1122
- i0.ɵɵelementStart(10, "span", 169);
1126
+ i0.ɵɵelementStart(10, "span", 170);
1123
1127
  i0.ɵɵtext(11);
1124
1128
  i0.ɵɵelementEnd()();
1125
- i0.ɵɵelementStart(12, "div", 170)(13, "span");
1129
+ i0.ɵɵelementStart(12, "div", 171)(13, "span");
1126
1130
  i0.ɵɵelement(14, "i", 91);
1127
1131
  i0.ɵɵtext(15);
1128
1132
  i0.ɵɵelementEnd();
@@ -1135,7 +1139,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditi
1135
1139
  i0.ɵɵtext(21);
1136
1140
  i0.ɵɵpipe(22, "date");
1137
1141
  i0.ɵɵelementEnd()()();
1138
- i0.ɵɵelement(23, "i", 134);
1142
+ i0.ɵɵelement(23, "i", 135);
1139
1143
  i0.ɵɵelementEnd()();
1140
1144
  } if (rf & 2) {
1141
1145
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1155,7 +1159,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditi
1155
1159
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(22, 9, ctx_r1.parentRun.RunAt, "short"));
1156
1160
  } }
1157
1161
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1158
- i0.ɵɵelementStart(0, "span", 175);
1162
+ i0.ɵɵelementStart(0, "span", 176);
1159
1163
  i0.ɵɵtext(1);
1160
1164
  i0.ɵɵelementEnd();
1161
1165
  } if (rf & 2) {
@@ -1165,18 +1169,18 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditi
1165
1169
  } }
1166
1170
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_For_6_Template(rf, ctx) { if (rf & 1) {
1167
1171
  const _r18 = i0.ɵɵgetCurrentView();
1168
- i0.ɵɵelementStart(0, "div", 174);
1172
+ i0.ɵɵelementStart(0, "div", 175);
1169
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)); });
1170
- i0.ɵɵelementStart(1, "div", 166);
1174
+ i0.ɵɵelementStart(1, "div", 167);
1171
1175
  i0.ɵɵelement(2, "i");
1172
1176
  i0.ɵɵelementEnd();
1173
- i0.ɵɵelementStart(3, "div", 167)(4, "div", 168);
1177
+ i0.ɵɵelementStart(3, "div", 168)(4, "div", 169);
1174
1178
  i0.ɵɵtext(5);
1175
- i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_For_6_Conditional_6_Template, 2, 1, "span", 175);
1176
- i0.ɵɵelementStart(7, "span", 169);
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);
1177
1181
  i0.ɵɵtext(8);
1178
1182
  i0.ɵɵelementEnd()();
1179
- i0.ɵɵelementStart(9, "div", 170)(10, "span", 16);
1183
+ i0.ɵɵelementStart(9, "div", 171)(10, "span", 16);
1180
1184
  i0.ɵɵelement(11, "i");
1181
1185
  i0.ɵɵtext(12);
1182
1186
  i0.ɵɵelementEnd();
@@ -1188,7 +1192,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditi
1188
1192
  i0.ɵɵelement(17, "i", 43);
1189
1193
  i0.ɵɵtext(18);
1190
1194
  i0.ɵɵelementEnd()()();
1191
- i0.ɵɵelement(19, "i", 134);
1195
+ i0.ɵɵelement(19, "i", 135);
1192
1196
  i0.ɵɵelementEnd();
1193
1197
  } if (rf & 2) {
1194
1198
  const childRun_r19 = ctx.$implicit;
@@ -1215,12 +1219,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditi
1215
1219
  i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(childRun_r19.TokensUsed));
1216
1220
  } }
1217
1221
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1218
- i0.ɵɵelementStart(0, "div", 163)(1, "h4");
1219
- i0.ɵɵelement(2, "i", 171);
1222
+ i0.ɵɵelementStart(0, "div", 164)(1, "h4");
1223
+ i0.ɵɵelement(2, "i", 172);
1220
1224
  i0.ɵɵtext(3, " Child Runs");
1221
1225
  i0.ɵɵelementEnd();
1222
- i0.ɵɵelementStart(4, "div", 172);
1223
- i0.ɵɵrepeaterCreate(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_For_6_Template, 20, 14, "div", 173, _forTrack1);
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);
1224
1228
  i0.ɵɵelementEnd()();
1225
1229
  } if (rf & 2) {
1226
1230
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1231,8 +1235,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Templat
1231
1235
  i0.ɵɵelementStart(0, "mj-accordion-panel", 49);
1232
1236
  i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_ng_template_1_Template, 4, 1, "ng-template", 28);
1233
1237
  i0.ɵɵelementStart(2, "div", 29);
1234
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_3_Template, 24, 12, "div", 162);
1235
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Template, 7, 0, "div", 163);
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);
1236
1240
  i0.ɵɵelementEnd()();
1237
1241
  } if (rf & 2) {
1238
1242
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1253,11 +1257,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Templat
1253
1257
  i0.ɵɵelementStart(0, "div", 51)(1, "label");
1254
1258
  i0.ɵɵtext(2, "Agent");
1255
1259
  i0.ɵɵelementEnd();
1256
- i0.ɵɵelementStart(3, "div", 176);
1260
+ i0.ɵɵelementStart(3, "div", 177);
1257
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)); });
1258
- i0.ɵɵelement(4, "i", 177);
1262
+ i0.ɵɵelement(4, "i", 178);
1259
1263
  i0.ɵɵtext(5);
1260
- i0.ɵɵelement(6, "i", 134);
1264
+ i0.ɵɵelement(6, "i", 135);
1261
1265
  i0.ɵɵelementEnd()();
1262
1266
  } if (rf & 2) {
1263
1267
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1311,7 +1315,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Templa
1311
1315
  i0.ɵɵtext(2, "Completed At");
1312
1316
  i0.ɵɵelementEnd();
1313
1317
  i0.ɵɵelementStart(3, "div", 52);
1314
- i0.ɵɵelement(4, "i", 178);
1318
+ i0.ɵɵelement(4, "i", 179);
1315
1319
  i0.ɵɵtext(5);
1316
1320
  i0.ɵɵpipe(6, "date");
1317
1321
  i0.ɵɵelementEnd()();
@@ -1333,16 +1337,16 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_155_Templa
1333
1337
  i0.ɵɵelementStart(0, "mj-accordion-panel", 27);
1334
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)); });
1335
1339
  i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_155_ng_template_1_Template, 5, 0, "ng-template", 28);
1336
- i0.ɵɵelementStart(2, "div", 29)(3, "div", 33)(4, "div", 106)(5, "button", 107);
1340
+ i0.ɵɵelementStart(2, "div", 29)(3, "div", 33)(4, "div", 107)(5, "button", 108);
1337
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")); });
1338
- i0.ɵɵelement(6, "i", 108);
1342
+ i0.ɵɵelement(6, "i", 109);
1339
1343
  i0.ɵɵtext(7, " Copy ");
1340
1344
  i0.ɵɵelementEnd();
1341
- i0.ɵɵelementStart(8, "button", 109);
1345
+ i0.ɵɵelementStart(8, "button", 110);
1342
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")); });
1343
- i0.ɵɵelement(9, "i", 110);
1347
+ i0.ɵɵelement(9, "i", 111);
1344
1348
  i0.ɵɵelementEnd()();
1345
- i0.ɵɵelementStart(10, "mj-code-editor", 179);
1349
+ i0.ɵɵelementStart(10, "mj-code-editor", 180);
1346
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); });
1347
1351
  i0.ɵɵelementEnd()()()();
1348
1352
  } if (rf & 2) {
@@ -1353,12 +1357,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_155_Templa
1353
1357
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
1354
1358
  } }
1355
1359
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_157_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1356
- i0.ɵɵelementStart(0, "span", 146);
1360
+ i0.ɵɵelementStart(0, "span", 147);
1357
1361
  i0.ɵɵtext(1, "Cached");
1358
1362
  i0.ɵɵelementEnd();
1359
1363
  } }
1360
1364
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_157_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1361
- i0.ɵɵelementStart(0, "span", 146);
1365
+ i0.ɵɵelementStart(0, "span", 147);
1362
1366
  i0.ɵɵtext(1, "Selected");
1363
1367
  i0.ɵɵelementEnd();
1364
1368
  } }
@@ -1366,8 +1370,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_157_Templa
1366
1370
  i0.ɵɵelementStart(0, "span", 97);
1367
1371
  i0.ɵɵelement(1, "i", 82);
1368
1372
  i0.ɵɵtext(2, " Model Selection & Performance ");
1369
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_157_Conditional_3_Template, 2, 0, "span", 146);
1370
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_157_Conditional_4_Template, 2, 0, "span", 146);
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);
1371
1375
  i0.ɵɵelementEnd();
1372
1376
  } if (rf & 2) {
1373
1377
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1381,7 +1385,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_184_Templa
1381
1385
  i0.ɵɵtext(2, "Cache Key");
1382
1386
  i0.ɵɵelementEnd();
1383
1387
  i0.ɵɵelementStart(3, "div", 52);
1384
- i0.ɵɵelement(4, "i", 180);
1388
+ i0.ɵɵelement(4, "i", 181);
1385
1389
  i0.ɵɵelementStart(5, "code");
1386
1390
  i0.ɵɵtext(6);
1387
1391
  i0.ɵɵelementEnd()()();
@@ -1395,11 +1399,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_185_Templa
1395
1399
  i0.ɵɵelementStart(0, "div", 51)(1, "label");
1396
1400
  i0.ɵɵtext(2, "Judge Prompt");
1397
1401
  i0.ɵɵelementEnd();
1398
- i0.ɵɵelementStart(3, "div", 181);
1402
+ i0.ɵɵelementStart(3, "div", 182);
1399
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)); });
1400
- i0.ɵɵelement(4, "i", 182);
1404
+ i0.ɵɵelement(4, "i", 183);
1401
1405
  i0.ɵɵtext(5);
1402
- i0.ɵɵelement(6, "i", 134);
1406
+ i0.ɵɵelement(6, "i", 135);
1403
1407
  i0.ɵɵelementEnd()();
1404
1408
  } if (rf & 2) {
1405
1409
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1411,7 +1415,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_186_Templa
1411
1415
  i0.ɵɵtext(2, "Judge Score");
1412
1416
  i0.ɵɵelementEnd();
1413
1417
  i0.ɵɵelementStart(3, "div", 52);
1414
- i0.ɵɵelement(4, "i", 183);
1418
+ i0.ɵɵelement(4, "i", 184);
1415
1419
  i0.ɵɵtext(5);
1416
1420
  i0.ɵɵelementEnd()();
1417
1421
  } if (rf & 2) {
@@ -1437,7 +1441,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Condit
1437
1441
  i0.ɵɵtext(2, "Cancellation Reason");
1438
1442
  i0.ɵɵelementEnd();
1439
1443
  i0.ɵɵelementStart(3, "div", 52);
1440
- i0.ɵɵelement(4, "i", 186);
1444
+ i0.ɵɵelement(4, "i", 187);
1441
1445
  i0.ɵɵtext(5);
1442
1446
  i0.ɵɵelementEnd()();
1443
1447
  } if (rf & 2) {
@@ -1449,8 +1453,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Templa
1449
1453
  i0.ɵɵelementStart(0, "div", 51)(1, "label");
1450
1454
  i0.ɵɵtext(2, "Cancelled");
1451
1455
  i0.ɵɵelementEnd();
1452
- i0.ɵɵelementStart(3, "div", 184);
1453
- i0.ɵɵelement(4, "i", 185);
1456
+ i0.ɵɵelementStart(3, "div", 185);
1457
+ i0.ɵɵelement(4, "i", 186);
1454
1458
  i0.ɵɵtext(5, " Yes ");
1455
1459
  i0.ɵɵelementEnd()();
1456
1460
  i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Conditional_6_Template, 6, 1, "div", 65);
@@ -1461,14 +1465,14 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Templa
1461
1465
  } }
1462
1466
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Template(rf, ctx) { if (rf & 1) {
1463
1467
  const _r23 = i0.ɵɵgetCurrentView();
1464
- i0.ɵɵelementStart(0, "div", 66)(1, "div", 106)(2, "h4", 127);
1468
+ i0.ɵɵelementStart(0, "div", 66)(1, "div", 107)(2, "h4", 128);
1465
1469
  i0.ɵɵtext(3, "Model Selection Details");
1466
1470
  i0.ɵɵelementEnd();
1467
- i0.ɵɵelementStart(4, "button", 109);
1471
+ i0.ɵɵelementStart(4, "button", 110);
1468
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")); });
1469
- i0.ɵɵelement(5, "i", 110);
1473
+ i0.ɵɵelement(5, "i", 111);
1470
1474
  i0.ɵɵelementEnd()();
1471
- i0.ɵɵelementStart(6, "div", 159)(7, "mj-code-editor", 187);
1475
+ i0.ɵɵelementStart(6, "div", 160)(7, "mj-code-editor", 188);
1472
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); });
1473
1477
  i0.ɵɵelementEnd()()();
1474
1478
  } if (rf & 2) {
@@ -1479,14 +1483,14 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Templa
1479
1483
  } }
1480
1484
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_202_Template(rf, ctx) { if (rf & 1) {
1481
1485
  const _r24 = i0.ɵɵgetCurrentView();
1482
- i0.ɵɵelementStart(0, "div", 67)(1, "div", 106)(2, "h4", 127);
1486
+ i0.ɵɵelementStart(0, "div", 67)(1, "div", 107)(2, "h4", 128);
1483
1487
  i0.ɵɵtext(3, "Error Details");
1484
1488
  i0.ɵɵelementEnd();
1485
- i0.ɵɵelementStart(4, "button", 109);
1489
+ i0.ɵɵelementStart(4, "button", 110);
1486
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")); });
1487
- i0.ɵɵelement(5, "i", 110);
1491
+ i0.ɵɵelement(5, "i", 111);
1488
1492
  i0.ɵɵelementEnd()();
1489
- i0.ɵɵelementStart(6, "div", 159)(7, "mj-code-editor", 188);
1493
+ i0.ɵɵelementStart(6, "div", 160)(7, "mj-code-editor", 189);
1490
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); });
1491
1495
  i0.ɵɵelementEnd()()();
1492
1496
  } if (rf & 2) {
@@ -1533,7 +1537,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1533
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)); });
1534
1538
  i0.ɵɵtemplate(34, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Template, 4, 1, "ng-template", 28);
1535
1539
  i0.ɵɵelementStart(35, "div", 29);
1536
- i0.ɵɵconditionalCreate(36, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template, 23, 9, "div", 30)(37, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_37_Template, 1, 0, "mj-empty-state", 31);
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);
1537
1541
  i0.ɵɵelementEnd()();
1538
1542
  i0.ɵɵelementStart(38, "mj-accordion-panel", 27);
1539
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)); });
@@ -1892,26 +1896,26 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1892
1896
  } }
1893
1897
  function MJAIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1894
1898
  const _r25 = i0.ɵɵgetCurrentView();
1895
- i0.ɵɵelementStart(0, "div", 189);
1899
+ i0.ɵɵelementStart(0, "div", 190);
1896
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()); });
1897
- i0.ɵɵelementStart(1, "div", 190);
1901
+ i0.ɵɵelementStart(1, "div", 191);
1898
1902
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_div_click_1_listener($event) { return $event.stopPropagation(); });
1899
- i0.ɵɵelementStart(2, "div", 191)(3, "span", 192);
1900
- i0.ɵɵelement(4, "i", 110);
1903
+ i0.ɵɵelementStart(2, "div", 192)(3, "span", 193);
1904
+ i0.ɵɵelement(4, "i", 111);
1901
1905
  i0.ɵɵtext(5);
1902
1906
  i0.ɵɵelementEnd();
1903
- i0.ɵɵelementStart(6, "div", 193)(7, "button", 194);
1907
+ i0.ɵɵelementStart(6, "div", 194)(7, "button", 195);
1904
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)); });
1905
- i0.ɵɵelement(8, "i", 108);
1909
+ i0.ɵɵelement(8, "i", 109);
1906
1910
  i0.ɵɵtext(9, " Copy ");
1907
1911
  i0.ɵɵelementEnd();
1908
- i0.ɵɵelementStart(10, "button", 195);
1912
+ i0.ɵɵelementStart(10, "button", 196);
1909
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()); });
1910
- i0.ɵɵelement(11, "i", 196);
1914
+ i0.ɵɵelement(11, "i", 197);
1911
1915
  i0.ɵɵtext(12, " Close ");
1912
1916
  i0.ɵɵelementEnd()()();
1913
- i0.ɵɵelementStart(13, "div", 197);
1914
- i0.ɵɵelement(14, "mj-code-editor", 198);
1917
+ i0.ɵɵelementStart(13, "div", 198);
1918
+ i0.ɵɵelement(14, "mj-code-editor", 199);
1915
1919
  i0.ɵɵelementEnd()()();
1916
1920
  } if (rf & 2) {
1917
1921
  const ctx_r1 = i0.ɵɵnextContext();
@@ -1959,6 +1963,12 @@ let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtende
1959
1963
  // Parsed input data
1960
1964
  this.ChatMessages = [];
1961
1965
  this.InputData = null;
1966
+ /** Template-data capture mode stored with this run; null for runs saved before capture modes existed. */
1967
+ this.DataCapture = null;
1968
+ /** Key sizes of the template inputs, stored in `None` mode. */
1969
+ this.DataShape = null;
1970
+ /** Why a `Referenced` run stored `Full`. */
1971
+ this.DataCaptureNote = null;
1962
1972
  // Validation data
1963
1973
  this.ValidationAttempts = [];
1964
1974
  this.ValidationSummary = null;
@@ -2333,6 +2343,9 @@ let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtende
2333
2343
  this.InputData = messageData.inputData;
2334
2344
  this.FormattedMessages = messageData.formattedMessages;
2335
2345
  this.FormattedData = messageData.formattedData;
2346
+ this.DataCapture = messageData.dataCapture;
2347
+ this.DataShape = messageData.dataShape;
2348
+ this.DataCaptureNote = messageData.dataCaptureNote;
2336
2349
  console.log('📄 Input data formatted. Chat messages:', this.ChatMessages.length, 'Input data exists:', !!this.InputData);
2337
2350
  console.log('📊 Formatting result data...');
2338
2351
  // Format result data
@@ -2731,14 +2744,14 @@ let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtende
2731
2744
  // Don't auto-expand validation panel anymore - let user expand when needed
2732
2745
  }
2733
2746
  static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJAIPromptRunFormComponentExtended_BaseFactory; return function MJAIPromptRunFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJAIPromptRunFormComponentExtended_BaseFactory || (ɵMJAIPromptRunFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJAIPromptRunFormComponentExtended)))(__ngFactoryType__ || MJAIPromptRunFormComponentExtended); }; })(); }
2734
- 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"], ["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) {
2747
+ 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) {
2735
2748
  i0.ɵɵconditionalCreate(0, MJAIPromptRunFormComponentExtended_Conditional_0_Template, 203, 104, "mj-record-form-container", 1);
2736
2749
  i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_1_Template, 15, 4, "div", 2);
2737
2750
  } if (rf & 2) {
2738
2751
  i0.ɵɵconditional(ctx.record ? 0 : -1);
2739
2752
  i0.ɵɵadvance();
2740
2753
  i0.ɵɵconditional(ctx.FullScreenContent ? 1 : -1);
2741
- } }, 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.DecimalPipe, i6.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: white;\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: white;\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: white;\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: white;\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 }); }
2754
+ } }, 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: white;\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: white;\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: white;\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: white;\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 }); }
2742
2755
  };
2743
2756
  MJAIPromptRunFormComponentExtended = __decorate([
2744
2757
  RegisterClass(BaseFormComponent, 'MJ: AI Prompt Runs')
@@ -2746,7 +2759,7 @@ MJAIPromptRunFormComponentExtended = __decorate([
2746
2759
  export { MJAIPromptRunFormComponentExtended };
2747
2760
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJAIPromptRunFormComponentExtended, [{
2748
2761
  type: Component,
2749
- 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 @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 {\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: white;\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: white;\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: white;\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: white;\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"] }]
2762
+ 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: white;\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: white;\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: white;\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: white;\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"] }]
2750
2763
  }], null, null); })();
2751
2764
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJAIPromptRunFormComponentExtended, { className: "MJAIPromptRunFormComponentExtended", filePath: "src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.ts", lineNumber: 21 }); })();
2752
2765
  //# sourceMappingURL=ai-prompt-run-form.component.js.map