@memberjunction/ng-core-entity-forms 5.36.0 → 5.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (701) hide show
  1. package/README.md +23 -2
  2. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +20 -20
  3. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  4. package/dist/lib/custom/Queries/query-category-dialog.component.d.ts +2 -2
  5. package/dist/lib/custom/Queries/query-category-dialog.component.d.ts.map +1 -1
  6. package/dist/lib/custom/Queries/query-category-dialog.component.js +8 -21
  7. package/dist/lib/custom/Queries/query-category-dialog.component.js.map +1 -1
  8. package/dist/lib/custom/Queries/query-form.component.d.ts +11 -15
  9. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  10. package/dist/lib/custom/Queries/query-form.component.js +52 -152
  11. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  12. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +1 -8
  13. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  14. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +4 -64
  15. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  16. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +20 -1
  17. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  18. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +152 -14
  19. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  20. package/dist/lib/custom/custom-forms.module.d.ts +31 -30
  21. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  22. package/dist/lib/custom/custom-forms.module.js +17 -5
  23. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  24. package/dist/lib/generated/Entities/MJAIAction/mjaiaction.form.component.js +32 -22
  25. package/dist/lib/generated/Entities/MJAIAction/mjaiaction.form.component.js.map +1 -1
  26. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
  27. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +185 -157
  28. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  29. package/dist/lib/generated/Entities/MJAIAgentAction/mjaiagentaction.form.component.js +23 -14
  30. package/dist/lib/generated/Entities/MJAIAgentAction/mjaiagentaction.form.component.js.map +1 -1
  31. package/dist/lib/generated/Entities/MJAIAgentArtifactType/mjaiagentartifacttype.form.component.js +18 -9
  32. package/dist/lib/generated/Entities/MJAIAgentArtifactType/mjaiagentartifacttype.form.component.js.map +1 -1
  33. package/dist/lib/generated/Entities/MJAIAgentCategory/mjaiagentcategory.form.component.js +34 -24
  34. package/dist/lib/generated/Entities/MJAIAgentCategory/mjaiagentcategory.form.component.js.map +1 -1
  35. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.js +19 -10
  36. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.js.map +1 -1
  37. package/dist/lib/generated/Entities/MJAIAgentConfiguration/mjaiagentconfiguration.form.component.js +19 -10
  38. package/dist/lib/generated/Entities/MJAIAgentConfiguration/mjaiagentconfiguration.form.component.js.map +1 -1
  39. package/dist/lib/generated/Entities/MJAIAgentDataSource/mjaiagentdatasource.form.component.js +23 -14
  40. package/dist/lib/generated/Entities/MJAIAgentDataSource/mjaiagentdatasource.form.component.js.map +1 -1
  41. package/dist/lib/generated/Entities/MJAIAgentExample/mjaiagentexample.form.component.js +25 -16
  42. package/dist/lib/generated/Entities/MJAIAgentExample/mjaiagentexample.form.component.js.map +1 -1
  43. package/dist/lib/generated/Entities/MJAIAgentLearningCycle/mjaiagentlearningcycle.form.component.js +21 -12
  44. package/dist/lib/generated/Entities/MJAIAgentLearningCycle/mjaiagentlearningcycle.form.component.js.map +1 -1
  45. package/dist/lib/generated/Entities/MJAIAgentModality/mjaiagentmodality.form.component.js +19 -10
  46. package/dist/lib/generated/Entities/MJAIAgentModality/mjaiagentmodality.form.component.js.map +1 -1
  47. package/dist/lib/generated/Entities/MJAIAgentModel/mjaiagentmodel.form.component.js +19 -10
  48. package/dist/lib/generated/Entities/MJAIAgentModel/mjaiagentmodel.form.component.js.map +1 -1
  49. package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.js +32 -22
  50. package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.js.map +1 -1
  51. package/dist/lib/generated/Entities/MJAIAgentNoteType/mjaiagentnotetype.form.component.js +24 -15
  52. package/dist/lib/generated/Entities/MJAIAgentNoteType/mjaiagentnotetype.form.component.js.map +1 -1
  53. package/dist/lib/generated/Entities/MJAIAgentPermission/mjaiagentpermission.form.component.js +21 -12
  54. package/dist/lib/generated/Entities/MJAIAgentPermission/mjaiagentpermission.form.component.js.map +1 -1
  55. package/dist/lib/generated/Entities/MJAIAgentPrompt/mjaiagentprompt.form.component.js +20 -11
  56. package/dist/lib/generated/Entities/MJAIAgentPrompt/mjaiagentprompt.form.component.js.map +1 -1
  57. package/dist/lib/generated/Entities/MJAIAgentRelationship/mjaiagentrelationship.form.component.js +21 -12
  58. package/dist/lib/generated/Entities/MJAIAgentRelationship/mjaiagentrelationship.form.component.js.map +1 -1
  59. package/dist/lib/generated/Entities/MJAIAgentRequest/mjaiagentrequest.form.component.js +21 -12
  60. package/dist/lib/generated/Entities/MJAIAgentRequest/mjaiagentrequest.form.component.js.map +1 -1
  61. package/dist/lib/generated/Entities/MJAIAgentRequestType/mjaiagentrequesttype.form.component.js +26 -16
  62. package/dist/lib/generated/Entities/MJAIAgentRequestType/mjaiagentrequesttype.form.component.js.map +1 -1
  63. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +79 -69
  64. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
  65. package/dist/lib/generated/Entities/MJAIAgentRunMedia/mjaiagentrunmedia.form.component.js +21 -12
  66. package/dist/lib/generated/Entities/MJAIAgentRunMedia/mjaiagentrunmedia.form.component.js.map +1 -1
  67. package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js +36 -26
  68. package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js.map +1 -1
  69. package/dist/lib/generated/Entities/MJAIAgentSearchScope/mjaiagentsearchscope.form.component.js +23 -14
  70. package/dist/lib/generated/Entities/MJAIAgentSearchScope/mjaiagentsearchscope.form.component.js.map +1 -1
  71. package/dist/lib/generated/Entities/MJAIAgentStep/mjaiagentstep.form.component.js +36 -26
  72. package/dist/lib/generated/Entities/MJAIAgentStep/mjaiagentstep.form.component.js.map +1 -1
  73. package/dist/lib/generated/Entities/MJAIAgentStepPath/mjaiagentsteppath.form.component.js +19 -10
  74. package/dist/lib/generated/Entities/MJAIAgentStepPath/mjaiagentsteppath.form.component.js.map +1 -1
  75. package/dist/lib/generated/Entities/MJAIAgentType/mjaiagenttype.form.component.js +30 -20
  76. package/dist/lib/generated/Entities/MJAIAgentType/mjaiagenttype.form.component.js.map +1 -1
  77. package/dist/lib/generated/Entities/MJAIArchitecture/mjaiarchitecture.form.component.js +34 -24
  78. package/dist/lib/generated/Entities/MJAIArchitecture/mjaiarchitecture.form.component.js.map +1 -1
  79. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js +26 -16
  80. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js.map +1 -1
  81. package/dist/lib/generated/Entities/MJAIConfiguration/mjaiconfiguration.form.component.js +64 -54
  82. package/dist/lib/generated/Entities/MJAIConfiguration/mjaiconfiguration.form.component.js.map +1 -1
  83. package/dist/lib/generated/Entities/MJAIConfigurationParam/mjaiconfigurationparam.form.component.js +19 -10
  84. package/dist/lib/generated/Entities/MJAIConfigurationParam/mjaiconfigurationparam.form.component.js.map +1 -1
  85. package/dist/lib/generated/Entities/MJAICredentialBinding/mjaicredentialbinding.form.component.js +19 -10
  86. package/dist/lib/generated/Entities/MJAICredentialBinding/mjaicredentialbinding.form.component.js.map +1 -1
  87. package/dist/lib/generated/Entities/MJAIModality/mjaimodality.form.component.js +57 -47
  88. package/dist/lib/generated/Entities/MJAIModality/mjaimodality.form.component.js.map +1 -1
  89. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +149 -139
  90. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
  91. package/dist/lib/generated/Entities/MJAIModelAction/mjaimodelaction.form.component.js +19 -10
  92. package/dist/lib/generated/Entities/MJAIModelAction/mjaimodelaction.form.component.js.map +1 -1
  93. package/dist/lib/generated/Entities/MJAIModelArchitecture/mjaimodelarchitecture.form.component.js +19 -10
  94. package/dist/lib/generated/Entities/MJAIModelArchitecture/mjaimodelarchitecture.form.component.js.map +1 -1
  95. package/dist/lib/generated/Entities/MJAIModelCost/mjaimodelcost.form.component.js +21 -12
  96. package/dist/lib/generated/Entities/MJAIModelCost/mjaimodelcost.form.component.js.map +1 -1
  97. package/dist/lib/generated/Entities/MJAIModelModality/mjaimodelmodality.form.component.js +21 -12
  98. package/dist/lib/generated/Entities/MJAIModelModality/mjaimodelmodality.form.component.js.map +1 -1
  99. package/dist/lib/generated/Entities/MJAIModelPriceType/mjaimodelpricetype.form.component.js +24 -14
  100. package/dist/lib/generated/Entities/MJAIModelPriceType/mjaimodelpricetype.form.component.js.map +1 -1
  101. package/dist/lib/generated/Entities/MJAIModelPriceUnitType/mjaimodelpriceunittype.form.component.js +24 -14
  102. package/dist/lib/generated/Entities/MJAIModelPriceUnitType/mjaimodelpriceunittype.form.component.js.map +1 -1
  103. package/dist/lib/generated/Entities/MJAIModelType/mjaimodeltype.form.component.js +34 -24
  104. package/dist/lib/generated/Entities/MJAIModelType/mjaimodeltype.form.component.js.map +1 -1
  105. package/dist/lib/generated/Entities/MJAIModelVendor/mjaimodelvendor.form.component.js +26 -16
  106. package/dist/lib/generated/Entities/MJAIModelVendor/mjaimodelvendor.form.component.js.map +1 -1
  107. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +98 -88
  108. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
  109. package/dist/lib/generated/Entities/MJAIPromptCategory/mjaipromptcategory.form.component.js +32 -22
  110. package/dist/lib/generated/Entities/MJAIPromptCategory/mjaipromptcategory.form.component.js.map +1 -1
  111. package/dist/lib/generated/Entities/MJAIPromptModel/mjaipromptmodel.form.component.js +30 -20
  112. package/dist/lib/generated/Entities/MJAIPromptModel/mjaipromptmodel.form.component.js.map +1 -1
  113. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +53 -43
  114. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  115. package/dist/lib/generated/Entities/MJAIPromptRunMedia/mjaipromptrunmedia.form.component.js +28 -18
  116. package/dist/lib/generated/Entities/MJAIPromptRunMedia/mjaipromptrunmedia.form.component.js.map +1 -1
  117. package/dist/lib/generated/Entities/MJAIPromptType/mjaiprompttype.form.component.js +24 -14
  118. package/dist/lib/generated/Entities/MJAIPromptType/mjaiprompttype.form.component.js.map +1 -1
  119. package/dist/lib/generated/Entities/MJAIResultCache/mjairesultcache.form.component.js +23 -14
  120. package/dist/lib/generated/Entities/MJAIResultCache/mjairesultcache.form.component.js.map +1 -1
  121. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js +62 -52
  122. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js.map +1 -1
  123. package/dist/lib/generated/Entities/MJAIVendorType/mjaivendortype.form.component.js +21 -12
  124. package/dist/lib/generated/Entities/MJAIVendorType/mjaivendortype.form.component.js.map +1 -1
  125. package/dist/lib/generated/Entities/MJAIVendorTypeDefinition/mjaivendortypedefinition.form.component.js +30 -20
  126. package/dist/lib/generated/Entities/MJAIVendorTypeDefinition/mjaivendortypedefinition.form.component.js.map +1 -1
  127. package/dist/lib/generated/Entities/MJAPIApplication/mjapiapplication.form.component.js +37 -27
  128. package/dist/lib/generated/Entities/MJAPIApplication/mjapiapplication.form.component.js.map +1 -1
  129. package/dist/lib/generated/Entities/MJAPIApplicationScope/mjapiapplicationscope.form.component.js +19 -10
  130. package/dist/lib/generated/Entities/MJAPIApplicationScope/mjapiapplicationscope.form.component.js.map +1 -1
  131. package/dist/lib/generated/Entities/MJAPIKey/mjapikey.form.component.js +39 -29
  132. package/dist/lib/generated/Entities/MJAPIKey/mjapikey.form.component.js.map +1 -1
  133. package/dist/lib/generated/Entities/MJAPIKeyApplication/mjapikeyapplication.form.component.js +17 -8
  134. package/dist/lib/generated/Entities/MJAPIKeyApplication/mjapikeyapplication.form.component.js.map +1 -1
  135. package/dist/lib/generated/Entities/MJAPIKeyScope/mjapikeyscope.form.component.js +19 -10
  136. package/dist/lib/generated/Entities/MJAPIKeyScope/mjapikeyscope.form.component.js.map +1 -1
  137. package/dist/lib/generated/Entities/MJAPIKeyUsageLog/mjapikeyusagelog.form.component.js +21 -12
  138. package/dist/lib/generated/Entities/MJAPIKeyUsageLog/mjapikeyusagelog.form.component.js.map +1 -1
  139. package/dist/lib/generated/Entities/MJAPIScope/mjapiscope.form.component.js +37 -27
  140. package/dist/lib/generated/Entities/MJAPIScope/mjapiscope.form.component.js.map +1 -1
  141. package/dist/lib/generated/Entities/MJAccessControlRule/mjaccesscontrolrule.form.component.js +21 -12
  142. package/dist/lib/generated/Entities/MJAccessControlRule/mjaccesscontrolrule.form.component.js.map +1 -1
  143. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +86 -76
  144. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
  145. package/dist/lib/generated/Entities/MJActionAuthorization/mjactionauthorization.form.component.js +19 -10
  146. package/dist/lib/generated/Entities/MJActionAuthorization/mjactionauthorization.form.component.js.map +1 -1
  147. package/dist/lib/generated/Entities/MJActionCategory/mjactioncategory.form.component.js +37 -27
  148. package/dist/lib/generated/Entities/MJActionCategory/mjactioncategory.form.component.js.map +1 -1
  149. package/dist/lib/generated/Entities/MJActionContext/mjactioncontext.form.component.js +19 -10
  150. package/dist/lib/generated/Entities/MJActionContext/mjactioncontext.form.component.js.map +1 -1
  151. package/dist/lib/generated/Entities/MJActionContextType/mjactioncontexttype.form.component.js +24 -14
  152. package/dist/lib/generated/Entities/MJActionContextType/mjactioncontexttype.form.component.js.map +1 -1
  153. package/dist/lib/generated/Entities/MJActionExecutionLog/mjactionexecutionlog.form.component.js +21 -12
  154. package/dist/lib/generated/Entities/MJActionExecutionLog/mjactionexecutionlog.form.component.js.map +1 -1
  155. package/dist/lib/generated/Entities/MJActionFilter/mjactionfilter.form.component.js +24 -14
  156. package/dist/lib/generated/Entities/MJActionFilter/mjactionfilter.form.component.js.map +1 -1
  157. package/dist/lib/generated/Entities/MJActionLibrary/mjactionlibrary.form.component.js +19 -10
  158. package/dist/lib/generated/Entities/MJActionLibrary/mjactionlibrary.form.component.js.map +1 -1
  159. package/dist/lib/generated/Entities/MJActionParam/mjactionparam.form.component.js +32 -22
  160. package/dist/lib/generated/Entities/MJActionParam/mjactionparam.form.component.js.map +1 -1
  161. package/dist/lib/generated/Entities/MJActionResultCode/mjactionresultcode.form.component.js +19 -10
  162. package/dist/lib/generated/Entities/MJActionResultCode/mjactionresultcode.form.component.js.map +1 -1
  163. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.d.ts.map +1 -1
  164. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js +73 -45
  165. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js.map +1 -1
  166. package/dist/lib/generated/Entities/MJApplicationEntity/mjapplicationentity.form.component.js +19 -10
  167. package/dist/lib/generated/Entities/MJApplicationEntity/mjapplicationentity.form.component.js.map +1 -1
  168. package/dist/lib/generated/Entities/MJApplicationRole/mjapplicationrole.form.component.js +19 -10
  169. package/dist/lib/generated/Entities/MJApplicationRole/mjapplicationrole.form.component.js.map +1 -1
  170. package/dist/lib/generated/Entities/MJApplicationSetting/mjapplicationsetting.form.component.js +19 -10
  171. package/dist/lib/generated/Entities/MJApplicationSetting/mjapplicationsetting.form.component.js.map +1 -1
  172. package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.js +34 -24
  173. package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.js.map +1 -1
  174. package/dist/lib/generated/Entities/MJArchiveConfigurationEntity/mjarchiveconfigurationentity.form.component.js +21 -12
  175. package/dist/lib/generated/Entities/MJArchiveConfigurationEntity/mjarchiveconfigurationentity.form.component.js.map +1 -1
  176. package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.js +30 -20
  177. package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.js.map +1 -1
  178. package/dist/lib/generated/Entities/MJArchiveRunDetail/mjarchiverundetail.form.component.js +21 -12
  179. package/dist/lib/generated/Entities/MJArchiveRunDetail/mjarchiverundetail.form.component.js.map +1 -1
  180. package/dist/lib/generated/Entities/MJArtifact/mjartifact.form.component.js +32 -22
  181. package/dist/lib/generated/Entities/MJArtifact/mjartifact.form.component.js.map +1 -1
  182. package/dist/lib/generated/Entities/MJArtifactPermission/mjartifactpermission.form.component.js +19 -10
  183. package/dist/lib/generated/Entities/MJArtifactPermission/mjartifactpermission.form.component.js.map +1 -1
  184. package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.js +47 -37
  185. package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.js.map +1 -1
  186. package/dist/lib/generated/Entities/MJArtifactUse/mjartifactuse.form.component.js +19 -10
  187. package/dist/lib/generated/Entities/MJArtifactUse/mjartifactuse.form.component.js.map +1 -1
  188. package/dist/lib/generated/Entities/MJArtifactVersion/mjartifactversion.form.component.js +51 -41
  189. package/dist/lib/generated/Entities/MJArtifactVersion/mjartifactversion.form.component.js.map +1 -1
  190. package/dist/lib/generated/Entities/MJArtifactVersionAttribute/mjartifactversionattribute.form.component.js +21 -12
  191. package/dist/lib/generated/Entities/MJArtifactVersionAttribute/mjartifactversionattribute.form.component.js.map +1 -1
  192. package/dist/lib/generated/Entities/MJAuditLog/mjauditlog.form.component.js +19 -10
  193. package/dist/lib/generated/Entities/MJAuditLog/mjauditlog.form.component.js.map +1 -1
  194. package/dist/lib/generated/Entities/MJAuditLogType/mjauditlogtype.form.component.js +32 -22
  195. package/dist/lib/generated/Entities/MJAuditLogType/mjauditlogtype.form.component.js.map +1 -1
  196. package/dist/lib/generated/Entities/MJAuthorization/mjauthorization.form.component.js +47 -37
  197. package/dist/lib/generated/Entities/MJAuthorization/mjauthorization.form.component.js.map +1 -1
  198. package/dist/lib/generated/Entities/MJAuthorizationRole/mjauthorizationrole.form.component.js +19 -10
  199. package/dist/lib/generated/Entities/MJAuthorizationRole/mjauthorizationrole.form.component.js.map +1 -1
  200. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js +39 -29
  201. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js.map +1 -1
  202. package/dist/lib/generated/Entities/MJCollectionArtifact/mjcollectionartifact.form.component.js +19 -10
  203. package/dist/lib/generated/Entities/MJCollectionArtifact/mjcollectionartifact.form.component.js.map +1 -1
  204. package/dist/lib/generated/Entities/MJCollectionPermission/mjcollectionpermission.form.component.js +19 -10
  205. package/dist/lib/generated/Entities/MJCollectionPermission/mjcollectionpermission.form.component.js.map +1 -1
  206. package/dist/lib/generated/Entities/MJCommunicationBaseMessageType/mjcommunicationbasemessagetype.form.component.js +32 -22
  207. package/dist/lib/generated/Entities/MJCommunicationBaseMessageType/mjcommunicationbasemessagetype.form.component.js.map +1 -1
  208. package/dist/lib/generated/Entities/MJCommunicationLog/mjcommunicationlog.form.component.js +20 -11
  209. package/dist/lib/generated/Entities/MJCommunicationLog/mjcommunicationlog.form.component.js.map +1 -1
  210. package/dist/lib/generated/Entities/MJCommunicationProvider/mjcommunicationprovider.form.component.js +33 -23
  211. package/dist/lib/generated/Entities/MJCommunicationProvider/mjcommunicationprovider.form.component.js.map +1 -1
  212. package/dist/lib/generated/Entities/MJCommunicationProviderMessageType/mjcommunicationprovidermessagetype.form.component.js +26 -16
  213. package/dist/lib/generated/Entities/MJCommunicationProviderMessageType/mjcommunicationprovidermessagetype.form.component.js.map +1 -1
  214. package/dist/lib/generated/Entities/MJCommunicationRun/mjcommunicationrun.form.component.js +28 -18
  215. package/dist/lib/generated/Entities/MJCommunicationRun/mjcommunicationrun.form.component.js.map +1 -1
  216. package/dist/lib/generated/Entities/MJCompany/mjcompany.form.component.js +47 -37
  217. package/dist/lib/generated/Entities/MJCompany/mjcompany.form.component.js.map +1 -1
  218. package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js +53 -43
  219. package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js.map +1 -1
  220. package/dist/lib/generated/Entities/MJCompanyIntegrationEntityMap/mjcompanyintegrationentitymap.form.component.js +34 -24
  221. package/dist/lib/generated/Entities/MJCompanyIntegrationEntityMap/mjcompanyintegrationentitymap.form.component.js.map +1 -1
  222. package/dist/lib/generated/Entities/MJCompanyIntegrationFieldMap/mjcompanyintegrationfieldmap.form.component.js +19 -10
  223. package/dist/lib/generated/Entities/MJCompanyIntegrationFieldMap/mjcompanyintegrationfieldmap.form.component.js.map +1 -1
  224. package/dist/lib/generated/Entities/MJCompanyIntegrationRecordMap/mjcompanyintegrationrecordmap.form.component.js +19 -10
  225. package/dist/lib/generated/Entities/MJCompanyIntegrationRecordMap/mjcompanyintegrationrecordmap.form.component.js.map +1 -1
  226. package/dist/lib/generated/Entities/MJCompanyIntegrationRun/mjcompanyintegrationrun.form.component.js +39 -29
  227. package/dist/lib/generated/Entities/MJCompanyIntegrationRun/mjcompanyintegrationrun.form.component.js.map +1 -1
  228. package/dist/lib/generated/Entities/MJCompanyIntegrationRunAPILog/mjcompanyintegrationrunapilog.form.component.js +20 -11
  229. package/dist/lib/generated/Entities/MJCompanyIntegrationRunAPILog/mjcompanyintegrationrunapilog.form.component.js.map +1 -1
  230. package/dist/lib/generated/Entities/MJCompanyIntegrationRunDetail/mjcompanyintegrationrundetail.form.component.js +28 -18
  231. package/dist/lib/generated/Entities/MJCompanyIntegrationRunDetail/mjcompanyintegrationrundetail.form.component.js.map +1 -1
  232. package/dist/lib/generated/Entities/MJCompanyIntegrationSyncWatermark/mjcompanyintegrationsyncwatermark.form.component.js +19 -10
  233. package/dist/lib/generated/Entities/MJCompanyIntegrationSyncWatermark/mjcompanyintegrationsyncwatermark.form.component.js.map +1 -1
  234. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.d.ts.map +1 -1
  235. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.js +60 -32
  236. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.js.map +1 -1
  237. package/dist/lib/generated/Entities/MJComponentDependency/mjcomponentdependency.form.component.js +17 -8
  238. package/dist/lib/generated/Entities/MJComponentDependency/mjcomponentdependency.form.component.js.map +1 -1
  239. package/dist/lib/generated/Entities/MJComponentLibrary/mjcomponentlibrary.form.component.js +28 -18
  240. package/dist/lib/generated/Entities/MJComponentLibrary/mjcomponentlibrary.form.component.js.map +1 -1
  241. package/dist/lib/generated/Entities/MJComponentLibraryLink/mjcomponentlibrarylink.form.component.js +19 -10
  242. package/dist/lib/generated/Entities/MJComponentLibraryLink/mjcomponentlibrarylink.form.component.js.map +1 -1
  243. package/dist/lib/generated/Entities/MJComponentRegistry/mjcomponentregistry.form.component.js +26 -16
  244. package/dist/lib/generated/Entities/MJComponentRegistry/mjcomponentregistry.form.component.js.map +1 -1
  245. package/dist/lib/generated/Entities/MJContentFileType/mjcontentfiletype.form.component.js +28 -18
  246. package/dist/lib/generated/Entities/MJContentFileType/mjcontentfiletype.form.component.js.map +1 -1
  247. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js +49 -39
  248. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js.map +1 -1
  249. package/dist/lib/generated/Entities/MJContentItemAttribute/mjcontentitemattribute.form.component.js +13 -6
  250. package/dist/lib/generated/Entities/MJContentItemAttribute/mjcontentitemattribute.form.component.js.map +1 -1
  251. package/dist/lib/generated/Entities/MJContentItemDuplicate/mjcontentitemduplicate.form.component.js +19 -10
  252. package/dist/lib/generated/Entities/MJContentItemDuplicate/mjcontentitemduplicate.form.component.js.map +1 -1
  253. package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js +17 -8
  254. package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js.map +1 -1
  255. package/dist/lib/generated/Entities/MJContentProcessRun/mjcontentprocessrun.form.component.js +26 -16
  256. package/dist/lib/generated/Entities/MJContentProcessRun/mjcontentprocessrun.form.component.js.map +1 -1
  257. package/dist/lib/generated/Entities/MJContentProcessRunDetail/mjcontentprocessrundetail.form.component.js +28 -18
  258. package/dist/lib/generated/Entities/MJContentProcessRunDetail/mjcontentprocessrundetail.form.component.js.map +1 -1
  259. package/dist/lib/generated/Entities/MJContentProcessRunPromptRun/mjcontentprocessrunpromptrun.form.component.js +17 -8
  260. package/dist/lib/generated/Entities/MJContentProcessRunPromptRun/mjcontentprocessrunpromptrun.form.component.js.map +1 -1
  261. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +51 -41
  262. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
  263. package/dist/lib/generated/Entities/MJContentSourceParam/mjcontentsourceparam.form.component.js +13 -6
  264. package/dist/lib/generated/Entities/MJContentSourceParam/mjcontentsourceparam.form.component.js.map +1 -1
  265. package/dist/lib/generated/Entities/MJContentSourceType/mjcontentsourcetype.form.component.js +35 -25
  266. package/dist/lib/generated/Entities/MJContentSourceType/mjcontentsourcetype.form.component.js.map +1 -1
  267. package/dist/lib/generated/Entities/MJContentSourceTypeParam/mjcontentsourcetypeparam.form.component.js +15 -6
  268. package/dist/lib/generated/Entities/MJContentSourceTypeParam/mjcontentsourcetypeparam.form.component.js.map +1 -1
  269. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js +36 -26
  270. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js.map +1 -1
  271. package/dist/lib/generated/Entities/MJContentTypeAttribute/mjcontenttypeattribute.form.component.js +15 -6
  272. package/dist/lib/generated/Entities/MJContentTypeAttribute/mjcontenttypeattribute.form.component.js.map +1 -1
  273. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.d.ts.map +1 -1
  274. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +74 -50
  275. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
  276. package/dist/lib/generated/Entities/MJConversationArtifact/mjconversationartifact.form.component.js +37 -27
  277. package/dist/lib/generated/Entities/MJConversationArtifact/mjconversationartifact.form.component.js.map +1 -1
  278. package/dist/lib/generated/Entities/MJConversationArtifactPermission/mjconversationartifactpermission.form.component.js +18 -9
  279. package/dist/lib/generated/Entities/MJConversationArtifactPermission/mjconversationartifactpermission.form.component.js.map +1 -1
  280. package/dist/lib/generated/Entities/MJConversationArtifactVersion/mjconversationartifactversion.form.component.js +26 -16
  281. package/dist/lib/generated/Entities/MJConversationArtifactVersion/mjconversationartifactversion.form.component.js.map +1 -1
  282. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +72 -62
  283. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js.map +1 -1
  284. package/dist/lib/generated/Entities/MJConversationDetailArtifact/mjconversationdetailartifact.form.component.js +19 -10
  285. package/dist/lib/generated/Entities/MJConversationDetailArtifact/mjconversationdetailartifact.form.component.js.map +1 -1
  286. package/dist/lib/generated/Entities/MJConversationDetailAttachment/mjconversationdetailattachment.form.component.js +21 -12
  287. package/dist/lib/generated/Entities/MJConversationDetailAttachment/mjconversationdetailattachment.form.component.js.map +1 -1
  288. package/dist/lib/generated/Entities/MJConversationDetailRating/mjconversationdetailrating.form.component.js +19 -10
  289. package/dist/lib/generated/Entities/MJConversationDetailRating/mjconversationdetailrating.form.component.js.map +1 -1
  290. package/dist/lib/generated/Entities/MJCountry/mjcountry.form.component.js +32 -22
  291. package/dist/lib/generated/Entities/MJCountry/mjcountry.form.component.js.map +1 -1
  292. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js +59 -49
  293. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js.map +1 -1
  294. package/dist/lib/generated/Entities/MJCredentialCategory/mjcredentialcategory.form.component.js +32 -22
  295. package/dist/lib/generated/Entities/MJCredentialCategory/mjcredentialcategory.form.component.js.map +1 -1
  296. package/dist/lib/generated/Entities/MJCredentialType/mjcredentialtype.form.component.js +42 -32
  297. package/dist/lib/generated/Entities/MJCredentialType/mjcredentialtype.form.component.js.map +1 -1
  298. package/dist/lib/generated/Entities/MJDashboard/mjdashboard.form.component.js +44 -34
  299. package/dist/lib/generated/Entities/MJDashboard/mjdashboard.form.component.js.map +1 -1
  300. package/dist/lib/generated/Entities/MJDashboardCategory/mjdashboardcategory.form.component.js +42 -32
  301. package/dist/lib/generated/Entities/MJDashboardCategory/mjdashboardcategory.form.component.js.map +1 -1
  302. package/dist/lib/generated/Entities/MJDashboardCategoryLink/mjdashboardcategorylink.form.component.js +19 -10
  303. package/dist/lib/generated/Entities/MJDashboardCategoryLink/mjdashboardcategorylink.form.component.js.map +1 -1
  304. package/dist/lib/generated/Entities/MJDashboardCategoryPermission/mjdashboardcategorypermission.form.component.js +21 -12
  305. package/dist/lib/generated/Entities/MJDashboardCategoryPermission/mjdashboardcategorypermission.form.component.js.map +1 -1
  306. package/dist/lib/generated/Entities/MJDashboardPartType/mjdashboardparttype.form.component.js +19 -10
  307. package/dist/lib/generated/Entities/MJDashboardPartType/mjdashboardparttype.form.component.js.map +1 -1
  308. package/dist/lib/generated/Entities/MJDashboardPermission/mjdashboardpermission.form.component.js +19 -10
  309. package/dist/lib/generated/Entities/MJDashboardPermission/mjdashboardpermission.form.component.js.map +1 -1
  310. package/dist/lib/generated/Entities/MJDashboardUserPreference/mjdashboarduserpreference.form.component.js +21 -12
  311. package/dist/lib/generated/Entities/MJDashboardUserPreference/mjdashboarduserpreference.form.component.js.map +1 -1
  312. package/dist/lib/generated/Entities/MJDashboardUserState/mjdashboarduserstate.form.component.js +19 -10
  313. package/dist/lib/generated/Entities/MJDashboardUserState/mjdashboarduserstate.form.component.js.map +1 -1
  314. package/dist/lib/generated/Entities/MJDataContext/mjdatacontext.form.component.js +37 -27
  315. package/dist/lib/generated/Entities/MJDataContext/mjdatacontext.form.component.js.map +1 -1
  316. package/dist/lib/generated/Entities/MJDataContextItem/mjdatacontextitem.form.component.js +21 -12
  317. package/dist/lib/generated/Entities/MJDataContextItem/mjdatacontextitem.form.component.js.map +1 -1
  318. package/dist/lib/generated/Entities/MJDataset/mjdataset.form.component.js +24 -14
  319. package/dist/lib/generated/Entities/MJDataset/mjdataset.form.component.js.map +1 -1
  320. package/dist/lib/generated/Entities/MJDatasetItem/mjdatasetitem.form.component.js +21 -12
  321. package/dist/lib/generated/Entities/MJDatasetItem/mjdatasetitem.form.component.js.map +1 -1
  322. package/dist/lib/generated/Entities/MJDuplicateRun/mjduplicaterun.form.component.js +28 -18
  323. package/dist/lib/generated/Entities/MJDuplicateRun/mjduplicaterun.form.component.js.map +1 -1
  324. package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js +26 -16
  325. package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js.map +1 -1
  326. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js +19 -10
  327. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js.map +1 -1
  328. package/dist/lib/generated/Entities/MJEmployee/mjemployee.form.component.js +49 -39
  329. package/dist/lib/generated/Entities/MJEmployee/mjemployee.form.component.js.map +1 -1
  330. package/dist/lib/generated/Entities/MJEmployeeCompanyIntegration/mjemployeecompanyintegration.form.component.js +19 -10
  331. package/dist/lib/generated/Entities/MJEmployeeCompanyIntegration/mjemployeecompanyintegration.form.component.js.map +1 -1
  332. package/dist/lib/generated/Entities/MJEmployeeRole/mjemployeerole.form.component.js +18 -9
  333. package/dist/lib/generated/Entities/MJEmployeeRole/mjemployeerole.form.component.js.map +1 -1
  334. package/dist/lib/generated/Entities/MJEmployeeSkill/mjemployeeskill.form.component.js +17 -8
  335. package/dist/lib/generated/Entities/MJEmployeeSkill/mjemployeeskill.form.component.js.map +1 -1
  336. package/dist/lib/generated/Entities/MJEncryptionAlgorithm/mjencryptionalgorithm.form.component.js +22 -12
  337. package/dist/lib/generated/Entities/MJEncryptionAlgorithm/mjencryptionalgorithm.form.component.js.map +1 -1
  338. package/dist/lib/generated/Entities/MJEncryptionKey/mjencryptionkey.form.component.js +22 -12
  339. package/dist/lib/generated/Entities/MJEncryptionKey/mjencryptionkey.form.component.js.map +1 -1
  340. package/dist/lib/generated/Entities/MJEncryptionKeySource/mjencryptionkeysource.form.component.js +22 -12
  341. package/dist/lib/generated/Entities/MJEncryptionKeySource/mjencryptionkeysource.form.component.js.map +1 -1
  342. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  343. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +346 -318
  344. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  345. package/dist/lib/generated/Entities/MJEntityAIAction/mjentityaiaction.form.component.js +21 -12
  346. package/dist/lib/generated/Entities/MJEntityAIAction/mjentityaiaction.form.component.js.map +1 -1
  347. package/dist/lib/generated/Entities/MJEntityAction/mjentityaction.form.component.js +37 -27
  348. package/dist/lib/generated/Entities/MJEntityAction/mjentityaction.form.component.js.map +1 -1
  349. package/dist/lib/generated/Entities/MJEntityActionFilter/mjentityactionfilter.form.component.js +19 -10
  350. package/dist/lib/generated/Entities/MJEntityActionFilter/mjentityactionfilter.form.component.js.map +1 -1
  351. package/dist/lib/generated/Entities/MJEntityActionInvocation/mjentityactioninvocation.form.component.js +19 -10
  352. package/dist/lib/generated/Entities/MJEntityActionInvocation/mjentityactioninvocation.form.component.js.map +1 -1
  353. package/dist/lib/generated/Entities/MJEntityActionInvocationType/mjentityactioninvocationtype.form.component.js +24 -14
  354. package/dist/lib/generated/Entities/MJEntityActionInvocationType/mjentityactioninvocationtype.form.component.js.map +1 -1
  355. package/dist/lib/generated/Entities/MJEntityActionParam/mjentityactionparam.form.component.js +19 -10
  356. package/dist/lib/generated/Entities/MJEntityActionParam/mjentityactionparam.form.component.js.map +1 -1
  357. package/dist/lib/generated/Entities/MJEntityCommunicationField/mjentitycommunicationfield.form.component.js +17 -9
  358. package/dist/lib/generated/Entities/MJEntityCommunicationField/mjentitycommunicationfield.form.component.js.map +1 -1
  359. package/dist/lib/generated/Entities/MJEntityCommunicationMessageType/mjentitycommunicationmessagetype.form.component.js +26 -16
  360. package/dist/lib/generated/Entities/MJEntityCommunicationMessageType/mjentitycommunicationmessagetype.form.component.js.map +1 -1
  361. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js +44 -34
  362. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js.map +1 -1
  363. package/dist/lib/generated/Entities/MJEntityDocumentRun/mjentitydocumentrun.form.component.js +19 -10
  364. package/dist/lib/generated/Entities/MJEntityDocumentRun/mjentitydocumentrun.form.component.js.map +1 -1
  365. package/dist/lib/generated/Entities/MJEntityDocumentSetting/mjentitydocumentsetting.form.component.js +19 -10
  366. package/dist/lib/generated/Entities/MJEntityDocumentSetting/mjentitydocumentsetting.form.component.js.map +1 -1
  367. package/dist/lib/generated/Entities/MJEntityDocumentType/mjentitydocumenttype.form.component.js +24 -15
  368. package/dist/lib/generated/Entities/MJEntityDocumentType/mjentitydocumenttype.form.component.js.map +1 -1
  369. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +34 -24
  370. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
  371. package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.js +19 -10
  372. package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.js.map +1 -1
  373. package/dist/lib/generated/Entities/MJEntityFormOverride/mjentityformoverride.form.component.d.ts +10 -0
  374. package/dist/lib/generated/Entities/MJEntityFormOverride/mjentityformoverride.form.component.d.ts.map +1 -0
  375. package/dist/lib/generated/Entities/MJEntityFormOverride/mjentityformoverride.form.component.js +92 -0
  376. package/dist/lib/generated/Entities/MJEntityFormOverride/mjentityformoverride.form.component.js.map +1 -0
  377. package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js +28 -18
  378. package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js.map +1 -1
  379. package/dist/lib/generated/Entities/MJEntityOrganicKeyRelatedEntity/mjentityorganickeyrelatedentity.form.component.js +21 -12
  380. package/dist/lib/generated/Entities/MJEntityOrganicKeyRelatedEntity/mjentityorganickeyrelatedentity.form.component.js.map +1 -1
  381. package/dist/lib/generated/Entities/MJEntityPermission/mjentitypermission.form.component.js +21 -12
  382. package/dist/lib/generated/Entities/MJEntityPermission/mjentitypermission.form.component.js.map +1 -1
  383. package/dist/lib/generated/Entities/MJEntityRecordDocument/mjentityrecorddocument.form.component.js +30 -20
  384. package/dist/lib/generated/Entities/MJEntityRecordDocument/mjentityrecorddocument.form.component.js.map +1 -1
  385. package/dist/lib/generated/Entities/MJEntityRelationship/mjentityrelationship.form.component.js +23 -14
  386. package/dist/lib/generated/Entities/MJEntityRelationship/mjentityrelationship.form.component.js.map +1 -1
  387. package/dist/lib/generated/Entities/MJEntityRelationshipDisplayComponent/mjentityrelationshipdisplaycomponent.form.component.js +24 -14
  388. package/dist/lib/generated/Entities/MJEntityRelationshipDisplayComponent/mjentityrelationshipdisplaycomponent.form.component.js.map +1 -1
  389. package/dist/lib/generated/Entities/MJEntitySetting/mjentitysetting.form.component.js +17 -8
  390. package/dist/lib/generated/Entities/MJEntitySetting/mjentitysetting.form.component.js.map +1 -1
  391. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.js +57 -48
  392. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.js.map +1 -1
  393. package/dist/lib/generated/Entities/MJErrorLog/mjerrorlog.form.component.js +21 -12
  394. package/dist/lib/generated/Entities/MJErrorLog/mjerrorlog.form.component.js.map +1 -1
  395. package/dist/lib/generated/Entities/MJExplorerNavigationItem/mjexplorernavigationitem.form.component.js +21 -12
  396. package/dist/lib/generated/Entities/MJExplorerNavigationItem/mjexplorernavigationitem.form.component.js.map +1 -1
  397. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +49 -39
  398. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
  399. package/dist/lib/generated/Entities/MJFileCategory/mjfilecategory.form.component.js +32 -22
  400. package/dist/lib/generated/Entities/MJFileCategory/mjfilecategory.form.component.js.map +1 -1
  401. package/dist/lib/generated/Entities/MJFileEntityRecordLink/mjfileentityrecordlink.form.component.js +19 -10
  402. package/dist/lib/generated/Entities/MJFileEntityRecordLink/mjfileentityrecordlink.form.component.js.map +1 -1
  403. package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.js +52 -42
  404. package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.js.map +1 -1
  405. package/dist/lib/generated/Entities/MJFileStorageAccountPermission/mjfilestorageaccountpermission.form.component.js +19 -10
  406. package/dist/lib/generated/Entities/MJFileStorageAccountPermission/mjfilestorageaccountpermission.form.component.js.map +1 -1
  407. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js +46 -36
  408. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js.map +1 -1
  409. package/dist/lib/generated/Entities/MJGeneratedCode/mjgeneratedcode.form.component.js +23 -14
  410. package/dist/lib/generated/Entities/MJGeneratedCode/mjgeneratedcode.form.component.js.map +1 -1
  411. package/dist/lib/generated/Entities/MJGeneratedCodeCategory/mjgeneratedcodecategory.form.component.js +32 -22
  412. package/dist/lib/generated/Entities/MJGeneratedCodeCategory/mjgeneratedcodecategory.form.component.js.map +1 -1
  413. package/dist/lib/generated/Entities/MJInstanceConfiguration/mjinstanceconfiguration.form.component.js +19 -10
  414. package/dist/lib/generated/Entities/MJInstanceConfiguration/mjinstanceconfiguration.form.component.js.map +1 -1
  415. package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js +44 -34
  416. package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js.map +1 -1
  417. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js +36 -26
  418. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js.map +1 -1
  419. package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js +21 -12
  420. package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js.map +1 -1
  421. package/dist/lib/generated/Entities/MJIntegrationSourceType/mjintegrationsourcetype.form.component.js +26 -16
  422. package/dist/lib/generated/Entities/MJIntegrationSourceType/mjintegrationsourcetype.form.component.js.map +1 -1
  423. package/dist/lib/generated/Entities/MJIntegrationURLFormat/mjintegrationurlformat.form.component.js +21 -12
  424. package/dist/lib/generated/Entities/MJIntegrationURLFormat/mjintegrationurlformat.form.component.js.map +1 -1
  425. package/dist/lib/generated/Entities/MJKnowledgeHubSavedSearch/mjknowledgehubsavedsearch.form.component.js +21 -12
  426. package/dist/lib/generated/Entities/MJKnowledgeHubSavedSearch/mjknowledgehubsavedsearch.form.component.js.map +1 -1
  427. package/dist/lib/generated/Entities/MJLibrary/mjlibrary.form.component.js +32 -22
  428. package/dist/lib/generated/Entities/MJLibrary/mjlibrary.form.component.js.map +1 -1
  429. package/dist/lib/generated/Entities/MJLibraryItem/mjlibraryitem.form.component.js +17 -8
  430. package/dist/lib/generated/Entities/MJLibraryItem/mjlibraryitem.form.component.js.map +1 -1
  431. package/dist/lib/generated/Entities/MJList/mjlist.form.component.js +45 -35
  432. package/dist/lib/generated/Entities/MJList/mjlist.form.component.js.map +1 -1
  433. package/dist/lib/generated/Entities/MJListCategory/mjlistcategory.form.component.js +34 -24
  434. package/dist/lib/generated/Entities/MJListCategory/mjlistcategory.form.component.js.map +1 -1
  435. package/dist/lib/generated/Entities/MJListDetail/mjlistdetail.form.component.js +19 -10
  436. package/dist/lib/generated/Entities/MJListDetail/mjlistdetail.form.component.js.map +1 -1
  437. package/dist/lib/generated/Entities/MJListInvitation/mjlistinvitation.form.component.js +17 -8
  438. package/dist/lib/generated/Entities/MJListInvitation/mjlistinvitation.form.component.js.map +1 -1
  439. package/dist/lib/generated/Entities/MJListShare/mjlistshare.form.component.js +17 -8
  440. package/dist/lib/generated/Entities/MJListShare/mjlistshare.form.component.js.map +1 -1
  441. package/dist/lib/generated/Entities/MJMCPServer/mjmcpserver.form.component.js +43 -33
  442. package/dist/lib/generated/Entities/MJMCPServer/mjmcpserver.form.component.js.map +1 -1
  443. package/dist/lib/generated/Entities/MJMCPServerConnection/mjmcpserverconnection.form.component.js +54 -44
  444. package/dist/lib/generated/Entities/MJMCPServerConnection/mjmcpserverconnection.form.component.js.map +1 -1
  445. package/dist/lib/generated/Entities/MJMCPServerConnectionPermission/mjmcpserverconnectionpermission.form.component.js +19 -10
  446. package/dist/lib/generated/Entities/MJMCPServerConnectionPermission/mjmcpserverconnectionpermission.form.component.js.map +1 -1
  447. package/dist/lib/generated/Entities/MJMCPServerConnectionTool/mjmcpserverconnectiontool.form.component.js +19 -10
  448. package/dist/lib/generated/Entities/MJMCPServerConnectionTool/mjmcpserverconnectiontool.form.component.js.map +1 -1
  449. package/dist/lib/generated/Entities/MJMCPServerTool/mjmcpservertool.form.component.js +39 -29
  450. package/dist/lib/generated/Entities/MJMCPServerTool/mjmcpservertool.form.component.js.map +1 -1
  451. package/dist/lib/generated/Entities/MJMCPToolExecutionLog/mjmcptoolexecutionlog.form.component.js +23 -14
  452. package/dist/lib/generated/Entities/MJMCPToolExecutionLog/mjmcptoolexecutionlog.form.component.js.map +1 -1
  453. package/dist/lib/generated/Entities/MJMCPToolFavorite/mjmcptoolfavorite.form.component.js +17 -8
  454. package/dist/lib/generated/Entities/MJMCPToolFavorite/mjmcptoolfavorite.form.component.js.map +1 -1
  455. package/dist/lib/generated/Entities/MJOAuthAuthServerMetadataCache/mjoauthauthservermetadatacache.form.component.js +15 -6
  456. package/dist/lib/generated/Entities/MJOAuthAuthServerMetadataCache/mjoauthauthservermetadatacache.form.component.js.map +1 -1
  457. package/dist/lib/generated/Entities/MJOAuthAuthorizationState/mjoauthauthorizationstate.form.component.js +15 -6
  458. package/dist/lib/generated/Entities/MJOAuthAuthorizationState/mjoauthauthorizationstate.form.component.js.map +1 -1
  459. package/dist/lib/generated/Entities/MJOAuthClientRegistration/mjoauthclientregistration.form.component.js +15 -6
  460. package/dist/lib/generated/Entities/MJOAuthClientRegistration/mjoauthclientregistration.form.component.js.map +1 -1
  461. package/dist/lib/generated/Entities/MJOAuthToken/mjoauthtoken.form.component.js +15 -6
  462. package/dist/lib/generated/Entities/MJOAuthToken/mjoauthtoken.form.component.js.map +1 -1
  463. package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js +33 -23
  464. package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js.map +1 -1
  465. package/dist/lib/generated/Entities/MJOpenAppDependency/mjopenappdependency.form.component.js +15 -6
  466. package/dist/lib/generated/Entities/MJOpenAppDependency/mjopenappdependency.form.component.js.map +1 -1
  467. package/dist/lib/generated/Entities/MJOpenAppInstallHistory/mjopenappinstallhistory.form.component.js +15 -6
  468. package/dist/lib/generated/Entities/MJOpenAppInstallHistory/mjopenappinstallhistory.form.component.js.map +1 -1
  469. package/dist/lib/generated/Entities/MJOutputDeliveryType/mjoutputdeliverytype.form.component.js +24 -14
  470. package/dist/lib/generated/Entities/MJOutputDeliveryType/mjoutputdeliverytype.form.component.js.map +1 -1
  471. package/dist/lib/generated/Entities/MJOutputFormatType/mjoutputformattype.form.component.js +24 -14
  472. package/dist/lib/generated/Entities/MJOutputFormatType/mjoutputformattype.form.component.js.map +1 -1
  473. package/dist/lib/generated/Entities/MJOutputTriggerType/mjoutputtriggertype.form.component.js +24 -14
  474. package/dist/lib/generated/Entities/MJOutputTriggerType/mjoutputtriggertype.form.component.js.map +1 -1
  475. package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.js +21 -12
  476. package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.js.map +1 -1
  477. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js +39 -29
  478. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js.map +1 -1
  479. package/dist/lib/generated/Entities/MJPublicLink/mjpubliclink.form.component.js +21 -12
  480. package/dist/lib/generated/Entities/MJPublicLink/mjpubliclink.form.component.js.map +1 -1
  481. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js +66 -56
  482. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js.map +1 -1
  483. package/dist/lib/generated/Entities/MJQueryCategory/mjquerycategory.form.component.js +32 -22
  484. package/dist/lib/generated/Entities/MJQueryCategory/mjquerycategory.form.component.js.map +1 -1
  485. package/dist/lib/generated/Entities/MJQueryDependency/mjquerydependency.form.component.js +19 -10
  486. package/dist/lib/generated/Entities/MJQueryDependency/mjquerydependency.form.component.js.map +1 -1
  487. package/dist/lib/generated/Entities/MJQueryEntity/mjqueryentity.form.component.js +19 -10
  488. package/dist/lib/generated/Entities/MJQueryEntity/mjqueryentity.form.component.js.map +1 -1
  489. package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js +19 -10
  490. package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js.map +1 -1
  491. package/dist/lib/generated/Entities/MJQueryParameter/mjqueryparameter.form.component.js +19 -10
  492. package/dist/lib/generated/Entities/MJQueryParameter/mjqueryparameter.form.component.js.map +1 -1
  493. package/dist/lib/generated/Entities/MJQueryPermission/mjquerypermission.form.component.js +18 -9
  494. package/dist/lib/generated/Entities/MJQueryPermission/mjquerypermission.form.component.js.map +1 -1
  495. package/dist/lib/generated/Entities/MJQuerySQL/mjquerysql.form.component.js +19 -10
  496. package/dist/lib/generated/Entities/MJQuerySQL/mjquerysql.form.component.js.map +1 -1
  497. package/dist/lib/generated/Entities/MJQueue/mjqueue.form.component.js +28 -18
  498. package/dist/lib/generated/Entities/MJQueue/mjqueue.form.component.js.map +1 -1
  499. package/dist/lib/generated/Entities/MJQueueTask/mjqueuetask.form.component.js +21 -12
  500. package/dist/lib/generated/Entities/MJQueueTask/mjqueuetask.form.component.js.map +1 -1
  501. package/dist/lib/generated/Entities/MJQueueType/mjqueuetype.form.component.js +26 -16
  502. package/dist/lib/generated/Entities/MJQueueType/mjqueuetype.form.component.js.map +1 -1
  503. package/dist/lib/generated/Entities/MJRecommendation/mjrecommendation.form.component.js +24 -14
  504. package/dist/lib/generated/Entities/MJRecommendation/mjrecommendation.form.component.js.map +1 -1
  505. package/dist/lib/generated/Entities/MJRecommendationItem/mjrecommendationitem.form.component.js +17 -9
  506. package/dist/lib/generated/Entities/MJRecommendationItem/mjrecommendationitem.form.component.js.map +1 -1
  507. package/dist/lib/generated/Entities/MJRecommendationProvider/mjrecommendationprovider.form.component.js +24 -14
  508. package/dist/lib/generated/Entities/MJRecommendationProvider/mjrecommendationprovider.form.component.js.map +1 -1
  509. package/dist/lib/generated/Entities/MJRecommendationRun/mjrecommendationrun.form.component.js +28 -18
  510. package/dist/lib/generated/Entities/MJRecommendationRun/mjrecommendationrun.form.component.js.map +1 -1
  511. package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.js +36 -26
  512. package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.js.map +1 -1
  513. package/dist/lib/generated/Entities/MJRecordChangeReplayRun/mjrecordchangereplayrun.form.component.js +26 -16
  514. package/dist/lib/generated/Entities/MJRecordChangeReplayRun/mjrecordchangereplayrun.form.component.js.map +1 -1
  515. package/dist/lib/generated/Entities/MJRecordGeoCode/mjrecordgeocode.form.component.js +21 -12
  516. package/dist/lib/generated/Entities/MJRecordGeoCode/mjrecordgeocode.form.component.js.map +1 -1
  517. package/dist/lib/generated/Entities/MJRecordLink/mjrecordlink.form.component.js +21 -12
  518. package/dist/lib/generated/Entities/MJRecordLink/mjrecordlink.form.component.js.map +1 -1
  519. package/dist/lib/generated/Entities/MJRecordMergeDeletionLog/mjrecordmergedeletionlog.form.component.js +17 -8
  520. package/dist/lib/generated/Entities/MJRecordMergeDeletionLog/mjrecordmergedeletionlog.form.component.js.map +1 -1
  521. package/dist/lib/generated/Entities/MJRecordMergeLog/mjrecordmergelog.form.component.js +34 -24
  522. package/dist/lib/generated/Entities/MJRecordMergeLog/mjrecordmergelog.form.component.js.map +1 -1
  523. package/dist/lib/generated/Entities/MJReport/mjreport.form.component.js +39 -29
  524. package/dist/lib/generated/Entities/MJReport/mjreport.form.component.js.map +1 -1
  525. package/dist/lib/generated/Entities/MJReportCategory/mjreportcategory.form.component.js +32 -22
  526. package/dist/lib/generated/Entities/MJReportCategory/mjreportcategory.form.component.js.map +1 -1
  527. package/dist/lib/generated/Entities/MJReportSnapshot/mjreportsnapshot.form.component.js +19 -10
  528. package/dist/lib/generated/Entities/MJReportSnapshot/mjreportsnapshot.form.component.js.map +1 -1
  529. package/dist/lib/generated/Entities/MJReportUserState/mjreportuserstate.form.component.js +19 -10
  530. package/dist/lib/generated/Entities/MJReportUserState/mjreportuserstate.form.component.js.map +1 -1
  531. package/dist/lib/generated/Entities/MJReportVersion/mjreportversion.form.component.js +19 -10
  532. package/dist/lib/generated/Entities/MJReportVersion/mjreportversion.form.component.js.map +1 -1
  533. package/dist/lib/generated/Entities/MJResourceLink/mjresourcelink.form.component.js +15 -6
  534. package/dist/lib/generated/Entities/MJResourceLink/mjresourcelink.form.component.js.map +1 -1
  535. package/dist/lib/generated/Entities/MJResourcePermission/mjresourcepermission.form.component.js +23 -14
  536. package/dist/lib/generated/Entities/MJResourcePermission/mjresourcepermission.form.component.js.map +1 -1
  537. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.js +45 -35
  538. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.js.map +1 -1
  539. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.d.ts.map +1 -1
  540. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js +94 -66
  541. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js.map +1 -1
  542. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js +40 -31
  543. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js.map +1 -1
  544. package/dist/lib/generated/Entities/MJSQLDialect/mjsqldialect.form.component.js +32 -22
  545. package/dist/lib/generated/Entities/MJSQLDialect/mjsqldialect.form.component.js.map +1 -1
  546. package/dist/lib/generated/Entities/MJScheduledAction/mjscheduledaction.form.component.js +34 -24
  547. package/dist/lib/generated/Entities/MJScheduledAction/mjscheduledaction.form.component.js.map +1 -1
  548. package/dist/lib/generated/Entities/MJScheduledActionParam/mjscheduledactionparam.form.component.js +19 -10
  549. package/dist/lib/generated/Entities/MJScheduledActionParam/mjscheduledactionparam.form.component.js.map +1 -1
  550. package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js +38 -28
  551. package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js.map +1 -1
  552. package/dist/lib/generated/Entities/MJScheduledJobRun/mjscheduledjobrun.form.component.js +34 -24
  553. package/dist/lib/generated/Entities/MJScheduledJobRun/mjscheduledjobrun.form.component.js.map +1 -1
  554. package/dist/lib/generated/Entities/MJScheduledJobType/mjscheduledjobtype.form.component.js +26 -16
  555. package/dist/lib/generated/Entities/MJScheduledJobType/mjscheduledjobtype.form.component.js.map +1 -1
  556. package/dist/lib/generated/Entities/MJSchemaInfo/mjschemainfo.form.component.js +19 -10
  557. package/dist/lib/generated/Entities/MJSchemaInfo/mjschemainfo.form.component.js.map +1 -1
  558. package/dist/lib/generated/Entities/MJSearchExecutionLog/mjsearchexecutionlog.form.component.js +23 -14
  559. package/dist/lib/generated/Entities/MJSearchExecutionLog/mjsearchexecutionlog.form.component.js.map +1 -1
  560. package/dist/lib/generated/Entities/MJSearchProvider/mjsearchprovider.form.component.js +28 -18
  561. package/dist/lib/generated/Entities/MJSearchProvider/mjsearchprovider.form.component.js.map +1 -1
  562. package/dist/lib/generated/Entities/MJSearchScope/mjsearchscope.form.component.js +68 -58
  563. package/dist/lib/generated/Entities/MJSearchScope/mjsearchscope.form.component.js.map +1 -1
  564. package/dist/lib/generated/Entities/MJSearchScopeEntity/mjsearchscopeentity.form.component.js +21 -12
  565. package/dist/lib/generated/Entities/MJSearchScopeEntity/mjsearchscopeentity.form.component.js.map +1 -1
  566. package/dist/lib/generated/Entities/MJSearchScopeExternalIndex/mjsearchscopeexternalindex.form.component.js +21 -12
  567. package/dist/lib/generated/Entities/MJSearchScopeExternalIndex/mjsearchscopeexternalindex.form.component.js.map +1 -1
  568. package/dist/lib/generated/Entities/MJSearchScopePermission/mjsearchscopepermission.form.component.js +19 -10
  569. package/dist/lib/generated/Entities/MJSearchScopePermission/mjsearchscopepermission.form.component.js.map +1 -1
  570. package/dist/lib/generated/Entities/MJSearchScopeProvider/mjsearchscopeprovider.form.component.js +21 -12
  571. package/dist/lib/generated/Entities/MJSearchScopeProvider/mjsearchscopeprovider.form.component.js.map +1 -1
  572. package/dist/lib/generated/Entities/MJSearchScopeStorageAccount/mjsearchscopestorageaccount.form.component.js +19 -10
  573. package/dist/lib/generated/Entities/MJSearchScopeStorageAccount/mjsearchscopestorageaccount.form.component.js.map +1 -1
  574. package/dist/lib/generated/Entities/MJSearchScopeTestQuery/mjsearchscopetestquery.form.component.js +21 -12
  575. package/dist/lib/generated/Entities/MJSearchScopeTestQuery/mjsearchscopetestquery.form.component.js.map +1 -1
  576. package/dist/lib/generated/Entities/MJSkill/mjskill.form.component.js +32 -22
  577. package/dist/lib/generated/Entities/MJSkill/mjskill.form.component.js.map +1 -1
  578. package/dist/lib/generated/Entities/MJStateProvince/mjstateprovince.form.component.js +26 -16
  579. package/dist/lib/generated/Entities/MJStateProvince/mjstateprovince.form.component.js.map +1 -1
  580. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js +93 -83
  581. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js.map +1 -1
  582. package/dist/lib/generated/Entities/MJTagAuditLog/mjtagauditlog.form.component.js +19 -10
  583. package/dist/lib/generated/Entities/MJTagAuditLog/mjtagauditlog.form.component.js.map +1 -1
  584. package/dist/lib/generated/Entities/MJTagCoOccurrence/mjtagcooccurrence.form.component.js +19 -10
  585. package/dist/lib/generated/Entities/MJTagCoOccurrence/mjtagcooccurrence.form.component.js.map +1 -1
  586. package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.js +19 -10
  587. package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.js.map +1 -1
  588. package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.js +23 -14
  589. package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.js.map +1 -1
  590. package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.js +19 -10
  591. package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.js.map +1 -1
  592. package/dist/lib/generated/Entities/MJTaggedItem/mjtaggeditem.form.component.js +19 -10
  593. package/dist/lib/generated/Entities/MJTaggedItem/mjtaggeditem.form.component.js.map +1 -1
  594. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js +39 -29
  595. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js.map +1 -1
  596. package/dist/lib/generated/Entities/MJTaskDependency/mjtaskdependency.form.component.js +19 -10
  597. package/dist/lib/generated/Entities/MJTaskDependency/mjtaskdependency.form.component.js.map +1 -1
  598. package/dist/lib/generated/Entities/MJTaskType/mjtasktype.form.component.js +24 -14
  599. package/dist/lib/generated/Entities/MJTaskType/mjtasktype.form.component.js.map +1 -1
  600. package/dist/lib/generated/Entities/MJTemplate/mjtemplate.form.component.js +64 -54
  601. package/dist/lib/generated/Entities/MJTemplate/mjtemplate.form.component.js.map +1 -1
  602. package/dist/lib/generated/Entities/MJTemplateCategory/mjtemplatecategory.form.component.js +34 -24
  603. package/dist/lib/generated/Entities/MJTemplateCategory/mjtemplatecategory.form.component.js.map +1 -1
  604. package/dist/lib/generated/Entities/MJTemplateContent/mjtemplatecontent.form.component.js +26 -16
  605. package/dist/lib/generated/Entities/MJTemplateContent/mjtemplatecontent.form.component.js.map +1 -1
  606. package/dist/lib/generated/Entities/MJTemplateContentType/mjtemplatecontenttype.form.component.js +24 -15
  607. package/dist/lib/generated/Entities/MJTemplateContentType/mjtemplatecontenttype.form.component.js.map +1 -1
  608. package/dist/lib/generated/Entities/MJTemplateParam/mjtemplateparam.form.component.js +21 -12
  609. package/dist/lib/generated/Entities/MJTemplateParam/mjtemplateparam.form.component.js.map +1 -1
  610. package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js +34 -24
  611. package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js.map +1 -1
  612. package/dist/lib/generated/Entities/MJTestRubric/mjtestrubric.form.component.js +15 -6
  613. package/dist/lib/generated/Entities/MJTestRubric/mjtestrubric.form.component.js.map +1 -1
  614. package/dist/lib/generated/Entities/MJTestRun/mjtestrun.form.component.js +56 -46
  615. package/dist/lib/generated/Entities/MJTestRun/mjtestrun.form.component.js.map +1 -1
  616. package/dist/lib/generated/Entities/MJTestRunFeedback/mjtestrunfeedback.form.component.js +19 -10
  617. package/dist/lib/generated/Entities/MJTestRunFeedback/mjtestrunfeedback.form.component.js.map +1 -1
  618. package/dist/lib/generated/Entities/MJTestRunOutput/mjtestrunoutput.form.component.js +21 -12
  619. package/dist/lib/generated/Entities/MJTestRunOutput/mjtestrunoutput.form.component.js.map +1 -1
  620. package/dist/lib/generated/Entities/MJTestRunOutputType/mjtestrunoutputtype.form.component.js +24 -14
  621. package/dist/lib/generated/Entities/MJTestRunOutputType/mjtestrunoutputtype.form.component.js.map +1 -1
  622. package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js +39 -29
  623. package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js.map +1 -1
  624. package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.js +34 -24
  625. package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.js.map +1 -1
  626. package/dist/lib/generated/Entities/MJTestSuiteTest/mjtestsuitetest.form.component.js +15 -6
  627. package/dist/lib/generated/Entities/MJTestSuiteTest/mjtestsuitetest.form.component.js.map +1 -1
  628. package/dist/lib/generated/Entities/MJTestType/mjtesttype.form.component.js +30 -20
  629. package/dist/lib/generated/Entities/MJTestType/mjtesttype.form.component.js.map +1 -1
  630. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  631. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +530 -502
  632. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  633. package/dist/lib/generated/Entities/MJUserApplication/mjuserapplication.form.component.js +26 -16
  634. package/dist/lib/generated/Entities/MJUserApplication/mjuserapplication.form.component.js.map +1 -1
  635. package/dist/lib/generated/Entities/MJUserApplicationEntity/mjuserapplicationentity.form.component.js +19 -10
  636. package/dist/lib/generated/Entities/MJUserApplicationEntity/mjuserapplicationentity.form.component.js.map +1 -1
  637. package/dist/lib/generated/Entities/MJUserFavorite/mjuserfavorite.form.component.js +19 -10
  638. package/dist/lib/generated/Entities/MJUserFavorite/mjuserfavorite.form.component.js.map +1 -1
  639. package/dist/lib/generated/Entities/MJUserNotification/mjusernotification.form.component.js +19 -10
  640. package/dist/lib/generated/Entities/MJUserNotification/mjusernotification.form.component.js.map +1 -1
  641. package/dist/lib/generated/Entities/MJUserNotificationPreference/mjusernotificationpreference.form.component.js +19 -10
  642. package/dist/lib/generated/Entities/MJUserNotificationPreference/mjusernotificationpreference.form.component.js.map +1 -1
  643. package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.js +34 -24
  644. package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.js.map +1 -1
  645. package/dist/lib/generated/Entities/MJUserRecordLog/mjuserrecordlog.form.component.js +21 -12
  646. package/dist/lib/generated/Entities/MJUserRecordLog/mjuserrecordlog.form.component.js.map +1 -1
  647. package/dist/lib/generated/Entities/MJUserRole/mjuserrole.form.component.js +17 -8
  648. package/dist/lib/generated/Entities/MJUserRole/mjuserrole.form.component.js.map +1 -1
  649. package/dist/lib/generated/Entities/MJUserSetting/mjusersetting.form.component.js +17 -8
  650. package/dist/lib/generated/Entities/MJUserSetting/mjusersetting.form.component.js.map +1 -1
  651. package/dist/lib/generated/Entities/MJUserView/mjuserview.form.component.js +48 -38
  652. package/dist/lib/generated/Entities/MJUserView/mjuserview.form.component.js.map +1 -1
  653. package/dist/lib/generated/Entities/MJUserViewCategory/mjuserviewcategory.form.component.js +34 -24
  654. package/dist/lib/generated/Entities/MJUserViewCategory/mjuserviewcategory.form.component.js.map +1 -1
  655. package/dist/lib/generated/Entities/MJUserViewRun/mjuserviewrun.form.component.js +26 -16
  656. package/dist/lib/generated/Entities/MJUserViewRun/mjuserviewrun.form.component.js.map +1 -1
  657. package/dist/lib/generated/Entities/MJUserViewRunDetail/mjuserviewrundetail.form.component.js +17 -8
  658. package/dist/lib/generated/Entities/MJUserViewRunDetail/mjuserviewrundetail.form.component.js.map +1 -1
  659. package/dist/lib/generated/Entities/MJVectorDatabase/mjvectordatabase.form.component.js +32 -22
  660. package/dist/lib/generated/Entities/MJVectorDatabase/mjvectordatabase.form.component.js.map +1 -1
  661. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js +49 -39
  662. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js.map +1 -1
  663. package/dist/lib/generated/Entities/MJVersionInstallation/mjversioninstallation.form.component.js +21 -12
  664. package/dist/lib/generated/Entities/MJVersionInstallation/mjversioninstallation.form.component.js.map +1 -1
  665. package/dist/lib/generated/Entities/MJVersionLabel/mjversionlabel.form.component.js +44 -34
  666. package/dist/lib/generated/Entities/MJVersionLabel/mjversionlabel.form.component.js.map +1 -1
  667. package/dist/lib/generated/Entities/MJVersionLabelItem/mjversionlabelitem.form.component.js +18 -9
  668. package/dist/lib/generated/Entities/MJVersionLabelItem/mjversionlabelitem.form.component.js.map +1 -1
  669. package/dist/lib/generated/Entities/MJVersionLabelRestore/mjversionlabelrestore.form.component.js +19 -10
  670. package/dist/lib/generated/Entities/MJVersionLabelRestore/mjversionlabelrestore.form.component.js.map +1 -1
  671. package/dist/lib/generated/Entities/MJWorkflow/mjworkflow.form.component.js +32 -22
  672. package/dist/lib/generated/Entities/MJWorkflow/mjworkflow.form.component.js.map +1 -1
  673. package/dist/lib/generated/Entities/MJWorkflowEngine/mjworkflowengine.form.component.js +24 -14
  674. package/dist/lib/generated/Entities/MJWorkflowEngine/mjworkflowengine.form.component.js.map +1 -1
  675. package/dist/lib/generated/Entities/MJWorkflowRun/mjworkflowrun.form.component.js +19 -10
  676. package/dist/lib/generated/Entities/MJWorkflowRun/mjworkflowrun.form.component.js.map +1 -1
  677. package/dist/lib/generated/Entities/MJWorkspace/mjworkspace.form.component.js +26 -17
  678. package/dist/lib/generated/Entities/MJWorkspace/mjworkspace.form.component.js.map +1 -1
  679. package/dist/lib/generated/Entities/MJWorkspaceItem/mjworkspaceitem.form.component.js +21 -12
  680. package/dist/lib/generated/Entities/MJWorkspaceItem/mjworkspaceitem.form.component.js.map +1 -1
  681. package/dist/lib/generated/generated-forms.module.d.ts +161 -160
  682. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  683. package/dist/lib/generated/generated-forms.module.js +43 -40
  684. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  685. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts +62 -0
  686. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts.map +1 -0
  687. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js +386 -0
  688. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js.map +1 -0
  689. package/dist/lib/panels/content-sources/website-crawler-settings.panel.d.ts +41 -0
  690. package/dist/lib/panels/content-sources/website-crawler-settings.panel.d.ts.map +1 -0
  691. package/dist/lib/panels/content-sources/website-crawler-settings.panel.js +227 -0
  692. package/dist/lib/panels/content-sources/website-crawler-settings.panel.js.map +1 -0
  693. package/package.json +36 -36
  694. package/dist/lib/__tests__/content-source-form.test.d.ts +0 -2
  695. package/dist/lib/__tests__/content-source-form.test.d.ts.map +0 -1
  696. package/dist/lib/__tests__/content-source-form.test.js +0 -183
  697. package/dist/lib/__tests__/content-source-form.test.js.map +0 -1
  698. package/dist/lib/custom/ContentSources/content-source-form.component.d.ts +0 -76
  699. package/dist/lib/custom/ContentSources/content-source-form.component.d.ts.map +0 -1
  700. package/dist/lib/custom/ContentSources/content-source-form.component.js +0 -510
  701. package/dist/lib/custom/ContentSources/content-source-form.component.js.map +0 -1
@@ -609,7 +609,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Templat
609
609
  } if (rf & 2) {
610
610
  const ctx_r1 = i0.ɵɵnextContext(2);
611
611
  i0.ɵɵadvance(4);
612
- i0.ɵɵconditional(ctx_r1.record.Status === "Failed" || ctx_r1.record.Success === false ? 4 : -1);
612
+ i0.ɵɵconditional(ctx_r1.record.CompletedAt && (ctx_r1.record.Status === "Failed" || ctx_r1.record.Success === false) ? 4 : -1);
613
613
  } }
614
614
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_45_Template(rf, ctx) { if (rf & 1) {
615
615
  i0.ɵɵelementStart(0, "span", 92);
@@ -984,11 +984,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Templat
984
984
  const ctx_r1 = i0.ɵɵnextContext(2);
985
985
  i0.ɵɵproperty("Expanded", ctx_r1.validationExpanded);
986
986
  i0.ɵɵadvance(7);
987
- i0.ɵɵclassProp("success", ctx_r1.record.FinalValidationPassed)("failed", !ctx_r1.record.FinalValidationPassed);
987
+ i0.ɵɵclassProp("success", ctx_r1.record.FinalValidationPassed === true)("failed", ctx_r1.record.FinalValidationPassed === false);
988
988
  i0.ɵɵadvance();
989
- i0.ɵɵclassMap(ctx_r1.record.FinalValidationPassed ? "fa-solid fa-check-circle" : "fa-solid fa-times-circle");
989
+ i0.ɵɵclassMap(ctx_r1.record.FinalValidationPassed === true ? "fa-solid fa-check-circle" : ctx_r1.record.FinalValidationPassed === false ? "fa-solid fa-times-circle" : "fa-solid fa-hourglass-half");
990
990
  i0.ɵɵadvance();
991
- i0.ɵɵtextInterpolate1(" ", ctx_r1.record.FinalValidationPassed ? "Validation Passed" : "Validation Failed", " ");
991
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.record.FinalValidationPassed === true ? "Validation Passed" : ctx_r1.record.FinalValidationPassed === false ? "Validation Failed" : "Validation Pending", " ");
992
992
  i0.ɵɵadvance(6);
993
993
  i0.ɵɵtextInterpolate(ctx_r1.record.ValidationAttemptCount || 0);
994
994
  i0.ɵɵadvance(5);
@@ -2104,49 +2104,49 @@ let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtende
2104
2104
  getStatusColor() {
2105
2105
  if (!this.record)
2106
2106
  return '#6c757d';
2107
- if (this.record.Success === true) {
2107
+ if (!this.record.CompletedAt) {
2108
+ return '#ffc107'; // Yellow (still running — CompletedAt is the authority)
2109
+ }
2110
+ else if (this.record.Success === true) {
2108
2111
  return '#28a745'; // Green
2109
2112
  }
2110
2113
  else if (this.record.Success === false) {
2111
2114
  return '#dc3545'; // Red
2112
2115
  }
2113
- else if (this.record.CompletedAt) {
2114
- return '#17a2b8'; // Blue (completed but no success flag)
2115
- }
2116
2116
  else {
2117
- return '#ffc107'; // Yellow (running)
2117
+ return '#17a2b8'; // Blue (completed but no success flag)
2118
2118
  }
2119
2119
  }
2120
2120
  getStatusIcon() {
2121
2121
  if (!this.record)
2122
2122
  return 'fa-circle';
2123
- if (this.record.Success === true) {
2123
+ if (!this.record.CompletedAt) {
2124
+ return 'fa-spinner fa-spin';
2125
+ }
2126
+ else if (this.record.Success === true) {
2124
2127
  return 'fa-check-circle';
2125
2128
  }
2126
2129
  else if (this.record.Success === false) {
2127
2130
  return 'fa-times-circle';
2128
2131
  }
2129
- else if (this.record.CompletedAt) {
2130
- return 'fa-info-circle';
2131
- }
2132
2132
  else {
2133
- return 'fa-spinner fa-spin';
2133
+ return 'fa-info-circle';
2134
2134
  }
2135
2135
  }
2136
2136
  getStatusText() {
2137
2137
  if (!this.record)
2138
2138
  return 'Unknown';
2139
- if (this.record.Success === true) {
2139
+ if (!this.record.CompletedAt) {
2140
+ return 'Running';
2141
+ }
2142
+ else if (this.record.Success === true) {
2140
2143
  return 'Success';
2141
2144
  }
2142
2145
  else if (this.record.Success === false) {
2143
2146
  return 'Failed';
2144
2147
  }
2145
- else if (this.record.CompletedAt) {
2146
- return 'Completed';
2147
- }
2148
2148
  else {
2149
- return 'Running';
2149
+ return 'Completed';
2150
2150
  }
2151
2151
  }
2152
2152
  formatDuration(ms) {
@@ -2331,7 +2331,7 @@ MJAIPromptRunFormComponentExtended = __decorate([
2331
2331
  export { MJAIPromptRunFormComponentExtended };
2332
2332
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJAIPromptRunFormComponentExtended, [{
2333
2333
  type: Component,
2334
- 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\">\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(record.TokensUsed) }}</div>\n </div>\n </div>\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\">\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(record.TokensUsed) }}</div>\n </div>\n </div>\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 <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No chat messages found</p>\n </div>\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 <div class=\"empty-state\">\n <i class=\"fa-solid fa-database\"></i>\n <p>No data object found</p>\n </div>\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 <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No input messages recorded</p>\n </div>\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 <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No result data recorded</p>\n @if (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 </div>\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\">{{ formatTokens(record.TokensPrompt) }}</div>\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\">{{ formatTokens(record.TokensUsed) }}</div>\n @if (record.TokensUsedRollup && record.TokensUsedRollup !== record.TokensUsed) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensUsedRollup) }}</span>\n </div>\n }\n </div>\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\" [class.failed]=\"!record.FinalValidationPassed\">\n <i [class]=\"record.FinalValidationPassed ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n {{ record.FinalValidationPassed ? 'Validation Passed' : 'Validation Failed' }}\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/* Empty State */\n.empty-state {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 1.1em;\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"] }]
2334
+ 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\">\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(record.TokensUsed) }}</div>\n </div>\n </div>\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\">\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(record.TokensUsed) }}</div>\n </div>\n </div>\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 <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No chat messages found</p>\n </div>\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 <div class=\"empty-state\">\n <i class=\"fa-solid fa-database\"></i>\n <p>No data object found</p>\n </div>\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 <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No input messages recorded</p>\n </div>\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 <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No result data recorded</p>\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 </div>\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\">{{ formatTokens(record.TokensPrompt) }}</div>\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\">{{ formatTokens(record.TokensUsed) }}</div>\n @if (record.TokensUsedRollup && record.TokensUsedRollup !== record.TokensUsed) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensUsedRollup) }}</span>\n </div>\n }\n </div>\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/* Empty State */\n.empty-state {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 1.1em;\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"] }]
2335
2335
  }], null, null); })();
2336
2336
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJAIPromptRunFormComponentExtended, { className: "MJAIPromptRunFormComponentExtended", filePath: "src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.ts", lineNumber: 21 }); })();
2337
2337
  //# sourceMappingURL=ai-prompt-run-form.component.js.map