@memberjunction/ng-core-entity-forms 6.1.0-edge.5 → 6.1.0-edge.7

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 (201) hide show
  1. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js +2 -2
  2. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
  3. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js +1 -1
  4. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +1 -1
  5. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +1 -1
  6. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +3 -3
  7. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  8. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +1 -1
  9. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +1 -1
  10. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +1 -1
  11. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +1 -1
  12. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +1 -1
  13. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +3 -3
  14. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  15. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +2 -2
  16. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
  17. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +1 -1
  18. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +1 -1
  19. package/dist/lib/custom/Actions/action-execution-log-form.component.js +2 -2
  20. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  21. package/dist/lib/custom/Actions/action-form.component.js +2 -2
  22. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  23. package/dist/lib/custom/BridgeAgentIdentities/bridge-agent-identity-form.component.js +1 -1
  24. package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js +1 -1
  25. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  26. package/dist/lib/custom/Entities/entity-form.component.js +7 -10
  27. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  28. package/dist/lib/custom/EntityActions/entityaction.form.component.js +1 -1
  29. package/dist/lib/custom/Files/file-form.component.js +1 -1
  30. package/dist/lib/custom/Lists/list-form.component.d.ts +7 -0
  31. package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
  32. package/dist/lib/custom/Lists/list-form.component.js +32 -18
  33. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  34. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  35. package/dist/lib/custom/Queries/query-form.component.js +5 -7
  36. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  37. package/dist/lib/custom/Queries/query-run-dialog.component.js +1 -1
  38. package/dist/lib/custom/SessionBridges/session-bridge-form.component.js +1 -1
  39. package/dist/lib/custom/Templates/template-param-dialog.component.js +1 -1
  40. package/dist/lib/custom/Templates/template-params-grid.component.js +1 -1
  41. package/dist/lib/custom/Templates/templates-form.component.js +1 -1
  42. package/dist/lib/custom/Tests/entity-link-pill.component.d.ts.map +1 -1
  43. package/dist/lib/custom/Tests/entity-link-pill.component.js +3 -1
  44. package/dist/lib/custom/Tests/entity-link-pill.component.js.map +1 -1
  45. package/dist/lib/custom/Tests/test-form.component.js +1 -1
  46. package/dist/lib/custom/Tests/test-run-form.component.js +1 -1
  47. package/dist/lib/custom/Tests/test-suite-form.component.js +3 -3
  48. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  49. package/dist/lib/custom/Tests/test-suite-run-form.component.js +6 -6
  50. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  51. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +1 -1
  52. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +1 -1
  53. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +1 -1
  54. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +1 -1
  55. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +3 -3
  56. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  57. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js +1 -1
  58. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +86 -72
  59. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  60. package/dist/lib/generated/Entities/MJAIAgentAction/mjaiagentaction.form.component.js +10 -8
  61. package/dist/lib/generated/Entities/MJAIAgentAction/mjaiagentaction.form.component.js.map +1 -1
  62. package/dist/lib/generated/Entities/MJAIAgentCategory/mjaiagentcategory.form.component.d.ts.map +1 -1
  63. package/dist/lib/generated/Entities/MJAIAgentCategory/mjaiagentcategory.form.component.js +31 -25
  64. package/dist/lib/generated/Entities/MJAIAgentCategory/mjaiagentcategory.form.component.js.map +1 -1
  65. package/dist/lib/generated/Entities/MJAIAgentPersona/mjaiagentpersona.form.component.d.ts +10 -0
  66. package/dist/lib/generated/Entities/MJAIAgentPersona/mjaiagentpersona.form.component.d.ts.map +1 -0
  67. package/dist/lib/generated/Entities/MJAIAgentPersona/mjaiagentpersona.form.component.js +78 -0
  68. package/dist/lib/generated/Entities/MJAIAgentPersona/mjaiagentpersona.form.component.js.map +1 -0
  69. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
  70. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +136 -112
  71. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
  72. package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js +29 -21
  73. package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js.map +1 -1
  74. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js +3 -3
  75. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js.map +1 -1
  76. package/dist/lib/generated/Entities/MJAIArchitecture/mjaiarchitecture.form.component.d.ts.map +1 -1
  77. package/dist/lib/generated/Entities/MJAIArchitecture/mjaiarchitecture.form.component.js +27 -21
  78. package/dist/lib/generated/Entities/MJAIArchitecture/mjaiarchitecture.form.component.js.map +1 -1
  79. package/dist/lib/generated/Entities/MJAIConfiguration/mjaiconfiguration.form.component.d.ts.map +1 -1
  80. package/dist/lib/generated/Entities/MJAIConfiguration/mjaiconfiguration.form.component.js +67 -61
  81. package/dist/lib/generated/Entities/MJAIConfiguration/mjaiconfiguration.form.component.js.map +1 -1
  82. package/dist/lib/generated/Entities/MJAIModality/mjaimodality.form.component.d.ts.map +1 -1
  83. package/dist/lib/generated/Entities/MJAIModality/mjaimodality.form.component.js +29 -11
  84. package/dist/lib/generated/Entities/MJAIModality/mjaimodality.form.component.js.map +1 -1
  85. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.d.ts.map +1 -1
  86. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +49 -31
  87. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
  88. package/dist/lib/generated/Entities/MJAIModelPersona/mjaimodelpersona.form.component.d.ts +10 -0
  89. package/dist/lib/generated/Entities/MJAIModelPersona/mjaimodelpersona.form.component.d.ts.map +1 -0
  90. package/dist/lib/generated/Entities/MJAIModelPersona/mjaimodelpersona.form.component.js +74 -0
  91. package/dist/lib/generated/Entities/MJAIModelPersona/mjaimodelpersona.form.component.js.map +1 -0
  92. package/dist/lib/generated/Entities/MJAIPersona/mjaipersona.form.component.d.ts +10 -0
  93. package/dist/lib/generated/Entities/MJAIPersona/mjaipersona.form.component.d.ts.map +1 -0
  94. package/dist/lib/generated/Entities/MJAIPersona/mjaipersona.form.component.js +161 -0
  95. package/dist/lib/generated/Entities/MJAIPersona/mjaipersona.form.component.js.map +1 -0
  96. package/dist/lib/generated/Entities/MJAIPersonaVendor/mjaipersonavendor.form.component.d.ts +10 -0
  97. package/dist/lib/generated/Entities/MJAIPersonaVendor/mjaipersonavendor.form.component.d.ts.map +1 -0
  98. package/dist/lib/generated/Entities/MJAIPersonaVendor/mjaipersonavendor.form.component.js +80 -0
  99. package/dist/lib/generated/Entities/MJAIPersonaVendor/mjaipersonavendor.form.component.js.map +1 -0
  100. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +149 -147
  101. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
  102. package/dist/lib/generated/Entities/MJAIPromptModel/mjaipromptmodel.form.component.d.ts.map +1 -1
  103. package/dist/lib/generated/Entities/MJAIPromptModel/mjaipromptmodel.form.component.js +8 -12
  104. package/dist/lib/generated/Entities/MJAIPromptModel/mjaipromptmodel.form.component.js.map +1 -1
  105. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
  106. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +20 -24
  107. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  108. package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.js +34 -20
  109. package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.js.map +1 -1
  110. package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.js +8 -6
  111. package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.js.map +1 -1
  112. package/dist/lib/generated/Entities/MJAIUsageType/mjaiusagetype.form.component.js +10 -10
  113. package/dist/lib/generated/Entities/MJAIUsageType/mjaiusagetype.form.component.js.map +1 -1
  114. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.d.ts.map +1 -1
  115. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js +32 -14
  116. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js.map +1 -1
  117. package/dist/lib/generated/Entities/MJAPIScope/mjapiscope.form.component.d.ts.map +1 -1
  118. package/dist/lib/generated/Entities/MJAPIScope/mjapiscope.form.component.js +31 -25
  119. package/dist/lib/generated/Entities/MJAPIScope/mjapiscope.form.component.js.map +1 -1
  120. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.d.ts.map +1 -1
  121. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +114 -108
  122. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
  123. package/dist/lib/generated/Entities/MJActionCategory/mjactioncategory.form.component.d.ts.map +1 -1
  124. package/dist/lib/generated/Entities/MJActionCategory/mjactioncategory.form.component.js +31 -25
  125. package/dist/lib/generated/Entities/MJActionCategory/mjactioncategory.form.component.js.map +1 -1
  126. package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.d.ts.map +1 -1
  127. package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.js +43 -37
  128. package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.js.map +1 -1
  129. package/dist/lib/generated/Entities/MJAuditLogType/mjauditlogtype.form.component.d.ts.map +1 -1
  130. package/dist/lib/generated/Entities/MJAuditLogType/mjauditlogtype.form.component.js +25 -19
  131. package/dist/lib/generated/Entities/MJAuditLogType/mjauditlogtype.form.component.js.map +1 -1
  132. package/dist/lib/generated/Entities/MJAuthorization/mjauthorization.form.component.d.ts.map +1 -1
  133. package/dist/lib/generated/Entities/MJAuthorization/mjauthorization.form.component.js +45 -39
  134. package/dist/lib/generated/Entities/MJAuthorization/mjauthorization.form.component.js.map +1 -1
  135. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.d.ts.map +1 -1
  136. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js +43 -37
  137. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js.map +1 -1
  138. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.d.ts.map +1 -1
  139. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js +55 -49
  140. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js.map +1 -1
  141. package/dist/lib/generated/Entities/MJContentItemChunk/mjcontentitemchunk.form.component.d.ts.map +1 -1
  142. package/dist/lib/generated/Entities/MJContentItemChunk/mjcontentitemchunk.form.component.js +31 -25
  143. package/dist/lib/generated/Entities/MJContentItemChunk/mjcontentitemchunk.form.component.js.map +1 -1
  144. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.d.ts.map +1 -1
  145. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +45 -27
  146. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
  147. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.d.ts.map +1 -1
  148. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +71 -65
  149. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js.map +1 -1
  150. package/dist/lib/generated/Entities/MJConversationSkill/mjconversationskill.form.component.d.ts +10 -0
  151. package/dist/lib/generated/Entities/MJConversationSkill/mjconversationskill.form.component.d.ts.map +1 -0
  152. package/dist/lib/generated/Entities/MJConversationSkill/mjconversationskill.form.component.js +76 -0
  153. package/dist/lib/generated/Entities/MJConversationSkill/mjconversationskill.form.component.js.map +1 -0
  154. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +419 -415
  155. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  156. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.d.ts.map +1 -1
  157. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +23 -5
  158. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
  159. package/dist/lib/generated/Entities/MJEntityFieldPermission/mjentityfieldpermission.form.component.d.ts +10 -0
  160. package/dist/lib/generated/Entities/MJEntityFieldPermission/mjentityfieldpermission.form.component.d.ts.map +1 -0
  161. package/dist/lib/generated/Entities/MJEntityFieldPermission/mjentityfieldpermission.form.component.js +76 -0
  162. package/dist/lib/generated/Entities/MJEntityFieldPermission/mjentityfieldpermission.form.component.js.map +1 -0
  163. package/dist/lib/generated/Entities/MJIdentityClaim/mjidentityclaim.form.component.d.ts.map +1 -1
  164. package/dist/lib/generated/Entities/MJIdentityClaim/mjidentityclaim.form.component.js +5 -29
  165. package/dist/lib/generated/Entities/MJIdentityClaim/mjidentityclaim.form.component.js.map +1 -1
  166. package/dist/lib/generated/Entities/MJIdentityClaimType/mjidentityclaimtype.form.component.d.ts.map +1 -1
  167. package/dist/lib/generated/Entities/MJIdentityClaimType/mjidentityclaimtype.form.component.js +12 -24
  168. package/dist/lib/generated/Entities/MJIdentityClaimType/mjidentityclaimtype.form.component.js.map +1 -1
  169. package/dist/lib/generated/Entities/MJMagicLinkInvite/mjmagiclinkinvite.form.component.js +2 -2
  170. package/dist/lib/generated/Entities/MJMagicLinkInvite/mjmagiclinkinvite.form.component.js.map +1 -1
  171. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.d.ts.map +1 -1
  172. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js +33 -27
  173. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js.map +1 -1
  174. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.d.ts.map +1 -1
  175. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js +38 -20
  176. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js.map +1 -1
  177. package/dist/lib/generated/Entities/MJSkill/mjskill.form.component.d.ts.map +1 -1
  178. package/dist/lib/generated/Entities/MJSkill/mjskill.form.component.js +25 -19
  179. package/dist/lib/generated/Entities/MJSkill/mjskill.form.component.js.map +1 -1
  180. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js +2 -2
  181. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js.map +1 -1
  182. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js +2 -2
  183. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js.map +1 -1
  184. package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.d.ts.map +1 -1
  185. package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js +35 -29
  186. package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js.map +1 -1
  187. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +32 -32
  188. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  189. package/dist/lib/generated/Entities/MJVersionLabel/mjversionlabel.form.component.d.ts.map +1 -1
  190. package/dist/lib/generated/Entities/MJVersionLabel/mjversionlabel.form.component.js +39 -33
  191. package/dist/lib/generated/Entities/MJVersionLabel/mjversionlabel.form.component.js.map +1 -1
  192. package/dist/lib/generated/generated-forms.module.d.ts +474 -408
  193. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  194. package/dist/lib/generated/generated-forms.module.js +1276 -898
  195. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  196. package/dist/lib/panels/ai-agents/agent-realtime.panel.js +1 -1
  197. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js +1 -1
  198. package/dist/lib/panels/content-sources/website-crawler-settings.panel.js +1 -1
  199. package/dist/lib/panels/model-predictions/model-prediction.panel.js +1 -1
  200. package/dist/lib/shared/components/template-editor.component.js +1 -1
  201. package/package.json +48 -48
@@ -145,7 +145,7 @@ function ChatMessageViewerComponent_Conditional_20_Template(rf, ctx) { if (rf &
145
145
  i0.ɵɵelementStart(0, "div", 39);
146
146
  i0.ɵɵlistener("click", function ChatMessageViewerComponent_Conditional_20_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.closeFullScreen()); });
147
147
  i0.ɵɵelementStart(1, "div", 40);
148
- i0.ɵɵlistener("click", function ChatMessageViewerComponent_Conditional_20_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r8); return i0.ɵɵresetView($event.stopPropagation()); });
148
+ i0.ɵɵlistener("click", function ChatMessageViewerComponent_Conditional_20_Template_div_click_1_listener($event) { return $event.stopPropagation(); });
149
149
  i0.ɵɵelementStart(2, "div", 41)(3, "span", 42);
150
150
  i0.ɵɵelement(4, "i", 23);
151
151
  i0.ɵɵtext(5);
@@ -578,7 +578,7 @@ export class ChatMessageViewerComponent {
578
578
  i0.ɵɵconditional(ctx.displayMessages.length === 0 ? 18 : 19);
579
579
  i0.ɵɵadvance(2);
580
580
  i0.ɵɵconditional(ctx.FullScreenContent ? 20 : -1);
581
- } }, dependencies: [i1.CheckboxControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.MJEmptyStateComponent, i3.CodeEditorComponent], styles: [".chat-message-viewer[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden; \n\n}\n\n\n\n\n.filter-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 1.5rem;\n align-items: center;\n padding: 0.75rem;\n background-color: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n margin-bottom: 1rem;\n flex-shrink: 0; \n\n}\n\n.filter-checkbox[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n cursor: pointer;\n user-select: none;\n}\n\n.filter-checkbox[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n margin-right: 0.5rem;\n}\n\n.filter-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-size: 0.875rem;\n font-weight: 500;\n}\n\n.filter-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1rem;\n}\n\n\n\n.messages-container[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 0.5rem;\n padding-bottom: 1rem; \n\n max-height: 800px;\n}\n\n\n\n.message-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n margin-bottom: 0.75rem;\n overflow: hidden;\n transition: all 0.2s ease;\n}\n\n.message-card[_ngcontent-%COMP%]:hover {\n box-shadow: var(--mj-shadow-sm);\n}\n\n.message-card[_ngcontent-%COMP%]:last-child {\n margin-bottom: 2rem; \n\n}\n\n.message-card[data-role=\"system\"][_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.message-card[data-role=\"user\"][_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-status-success);\n}\n\n.message-card[data-role=\"assistant\"][_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n\n\n.message-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background-color: var(--mj-bg-surface-sunken);\n cursor: pointer;\n user-select: none;\n}\n\n.message-header[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-bg-surface-sunken);\n}\n\n.message-role[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.sequence-number[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-weight: 500;\n font-size: 0.85rem;\n margin-right: 4px;\n}\n\n.message-role[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.125rem;\n}\n\n.content-stats[_ngcontent-%COMP%] {\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-text-secondary);\n font-size: 0.8rem;\n font-weight: 400;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n white-space: nowrap;\n}\n\n.stat-divider[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.role-label[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 0.875rem;\n text-transform: uppercase;\n letter-spacing: 0.025em;\n}\n\n.message-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.action-button[_ngcontent-%COMP%], \n.toggle-button[_ngcontent-%COMP%] {\n background: none;\n border: none;\n padding: 0.25rem;\n cursor: pointer;\n color: var(--mj-text-secondary);\n transition: color 0.2s ease;\n}\n\n.action-button[_ngcontent-%COMP%]:hover, \n.toggle-button[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n}\n\n.action-button[_ngcontent-%COMP%] {\n padding: 0.25rem 0.5rem;\n}\n\n.action-button[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n}\n\n\n\n.message-content[_ngcontent-%COMP%] {\n padding: 1rem;\n}\n\n.content-blocks[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n margin-bottom: 1rem;\n}\n\n.content-block-indicator[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 0.375rem;\n padding: 0.25rem 0.75rem;\n background-color: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n border-radius: 9999px;\n font-size: 0.75rem;\n color: var(--mj-brand-primary-hover);\n}\n\n.content-block-indicator[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n}\n\n\n\n.text-content[_ngcontent-%COMP%], \n.json-content[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-content[_ngcontent-%COMP%] {\n background-color: var(--mj-bg-surface-sunken);\n}\n\n.text-content[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%], \n.json-content[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n min-height: 100px;\n}\n\n\n\n.multi-part-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n\n.content-part[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.content-part-label[_ngcontent-%COMP%] {\n background-color: var(--mj-bg-surface-sunken);\n padding: 0.5rem 1rem;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n user-select: none;\n transition: background-color 0.2s;\n}\n\n.content-part-label[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-border-default);\n}\n\n.content-part-label-content[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.content-part-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n color: var(--mj-text-secondary);\n}\n\n.content-part-toggle[_ngcontent-%COMP%] {\n background: none;\n border: none;\n padding: 0.25rem;\n cursor: pointer;\n color: var(--mj-text-secondary);\n transition: color 0.2s;\n}\n\n.content-part-toggle[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n}\n\n.content-part.collapsed[_ngcontent-%COMP%] .content-part-label[_ngcontent-%COMP%] {\n border-bottom: none;\n}\n\n.content-part-editor[_ngcontent-%COMP%] {\n background-color: var(--mj-bg-surface-sunken);\n}\n\n.content-part-editor[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n min-height: 80px;\n}\n\n\n\n.chat-message-viewer[_ngcontent-%COMP%] .cm-editor[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n}\n\n.chat-message-viewer[_ngcontent-%COMP%] .cm-editor.cm-focused[_ngcontent-%COMP%] {\n outline: none;\n}\n\n\n\n.content-part-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n\n\n.fullscreen-overlay[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-actions[_ngcontent-%COMP%] .action-button[_ngcontent-%COMP%] {\n font-size: 1rem;\n padding: 0.375rem 0.5rem;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n\n@media (max-width: 640px) {\n .filter-controls[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n gap: 0.75rem;\n }\n\n .filter-checkbox[_ngcontent-%COMP%] {\n min-width: calc(50% - 0.375rem);\n }\n}"] }); }
581
+ } }, dependencies: [i1.CheckboxControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.MJEmptyStateComponent, i3.CodeEditorComponent], styles: [".chat-message-viewer[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden; \n}\n\n\n\n.filter-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 1.5rem;\n align-items: center;\n padding: 0.75rem;\n background-color: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n margin-bottom: 1rem;\n flex-shrink: 0; \n}\n\n.filter-checkbox[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n cursor: pointer;\n user-select: none;\n}\n\n.filter-checkbox[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n margin-right: 0.5rem;\n}\n\n.filter-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-size: 0.875rem;\n font-weight: 500;\n}\n\n.filter-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1rem;\n}\n\n\n.messages-container[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 0.5rem;\n padding-bottom: 1rem; \n max-height: 800px;\n}\n\n\n.message-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n margin-bottom: 0.75rem;\n overflow: hidden;\n transition: all 0.2s ease;\n}\n\n.message-card[_ngcontent-%COMP%]:hover {\n box-shadow: var(--mj-shadow-sm);\n}\n\n.message-card[_ngcontent-%COMP%]:last-child {\n margin-bottom: 2rem; \n}\n\n.message-card[data-role=\"system\"][_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.message-card[data-role=\"user\"][_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-status-success);\n}\n\n.message-card[data-role=\"assistant\"][_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n\n.message-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background-color: var(--mj-bg-surface-sunken);\n cursor: pointer;\n user-select: none;\n}\n\n.message-header[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-bg-surface-sunken);\n}\n\n.message-role[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.sequence-number[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-weight: 500;\n font-size: 0.85rem;\n margin-right: 4px;\n}\n\n.message-role[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.125rem;\n}\n\n.content-stats[_ngcontent-%COMP%] {\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-text-secondary);\n font-size: 0.8rem;\n font-weight: 400;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n white-space: nowrap;\n}\n\n.stat-divider[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.role-label[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 0.875rem;\n text-transform: uppercase;\n letter-spacing: 0.025em;\n}\n\n.message-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.action-button[_ngcontent-%COMP%], \n.toggle-button[_ngcontent-%COMP%] {\n background: none;\n border: none;\n padding: 0.25rem;\n cursor: pointer;\n color: var(--mj-text-secondary);\n transition: color 0.2s ease;\n}\n\n.action-button[_ngcontent-%COMP%]:hover, \n.toggle-button[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n}\n\n.action-button[_ngcontent-%COMP%] {\n padding: 0.25rem 0.5rem;\n}\n\n.action-button[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n}\n\n\n.message-content[_ngcontent-%COMP%] {\n padding: 1rem;\n}\n\n.content-blocks[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n margin-bottom: 1rem;\n}\n\n.content-block-indicator[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 0.375rem;\n padding: 0.25rem 0.75rem;\n background-color: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n border-radius: 9999px;\n font-size: 0.75rem;\n color: var(--mj-brand-primary-hover);\n}\n\n.content-block-indicator[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n}\n\n\n.text-content[_ngcontent-%COMP%], \n.json-content[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-content[_ngcontent-%COMP%] {\n background-color: var(--mj-bg-surface-sunken);\n}\n\n.text-content[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%], \n.json-content[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n min-height: 100px;\n}\n\n\n.multi-part-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n\n.content-part[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.content-part-label[_ngcontent-%COMP%] {\n background-color: var(--mj-bg-surface-sunken);\n padding: 0.5rem 1rem;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n user-select: none;\n transition: background-color 0.2s;\n}\n\n.content-part-label[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-border-default);\n}\n\n.content-part-label-content[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.content-part-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n color: var(--mj-text-secondary);\n}\n\n.content-part-toggle[_ngcontent-%COMP%] {\n background: none;\n border: none;\n padding: 0.25rem;\n cursor: pointer;\n color: var(--mj-text-secondary);\n transition: color 0.2s;\n}\n\n.content-part-toggle[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n}\n\n.content-part.collapsed[_ngcontent-%COMP%] .content-part-label[_ngcontent-%COMP%] {\n border-bottom: none;\n}\n\n.content-part-editor[_ngcontent-%COMP%] {\n background-color: var(--mj-bg-surface-sunken);\n}\n\n.content-part-editor[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n min-height: 80px;\n}\n\n\n.chat-message-viewer[_ngcontent-%COMP%] .cm-editor[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n}\n\n.chat-message-viewer[_ngcontent-%COMP%] .cm-editor.cm-focused[_ngcontent-%COMP%] {\n outline: none;\n}\n\n\n.content-part-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n\n.fullscreen-overlay[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-actions[_ngcontent-%COMP%] .action-button[_ngcontent-%COMP%] {\n font-size: 1rem;\n padding: 0.375rem 0.5rem;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n@media (max-width: 640px) {\n .filter-controls[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n gap: 0.75rem;\n }\n\n .filter-checkbox[_ngcontent-%COMP%] {\n min-width: calc(50% - 0.375rem);\n }\n}"] }); }
582
582
  }
583
583
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ChatMessageViewerComponent, [{
584
584
  type: Component,
@@ -1 +1 @@
1
- {"version":3,"file":"chat-message-viewer.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIPromptRuns/chat-message-viewer.component.ts","../../../../src/lib/custom/AIPromptRuns/chat-message-viewer.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, OnInit, OnChanges } from '@angular/core';\nimport { ChatMessage, ChatMessageRole, ChatMessageContent, ChatMessageContentBlock } from '@memberjunction/ai';\n\ninterface MessageDisplay {\n message: ChatMessage;\n visible: boolean;\n expanded: boolean;\n sequenceNumber: number;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-chat-message-viewer',\n templateUrl: './chat-message-viewer.component.html',\n styleUrls: ['./chat-message-viewer.component.css']\n})\nexport class ChatMessageViewerComponent implements OnInit, OnChanges {\n @Input() messages: ChatMessage[] = [];\n \n public displayMessages: MessageDisplay[] = [];\n public showSystem = true;\n public showUser = true;\n public showAssistant = true;\n \n // Full-screen overlay state\n public FullScreenContent: string | null = null;\n public FullScreenLanguage = 'markdown';\n public FullScreenTitle = '';\n\n // Track expanded state for content parts\n private contentPartStates = new Map<string, boolean>();\n \n ngOnInit() {\n this.processMessages();\n }\n \n ngOnChanges() {\n this.processMessages();\n }\n \n private processMessages() {\n this.displayMessages = this.messages.map((msg, index) => ({\n message: msg,\n visible: this.isMessageVisible(msg),\n expanded: true,\n sequenceNumber: index + 1\n }));\n }\n \n private isMessageVisible(message: ChatMessage): boolean {\n switch (message.role) {\n case 'system':\n return this.showSystem;\n case 'user':\n return this.showUser;\n case 'assistant':\n return this.showAssistant;\n default:\n return true;\n }\n }\n \n public onFilterChange() {\n this.displayMessages.forEach(dm => {\n dm.visible = this.isMessageVisible(dm.message);\n });\n }\n \n public getRoleIcon(role: string): string {\n switch (role) {\n case 'system':\n return 'fa-cog';\n case 'user':\n return 'fa-user';\n case 'assistant':\n return 'fa-robot';\n default:\n return 'fa-comment';\n }\n }\n \n public getRoleColor(role: string): string {\n switch (role) {\n case 'system':\n return '#2563eb'; // blue\n case 'user':\n return '#059669'; // green\n case 'assistant':\n return '#7c3aed'; // purple\n default:\n return '#6b7280'; // gray\n }\n }\n \n public getRoleLabel(role: string): string {\n return role.charAt(0).toUpperCase() + role.slice(1);\n }\n \n public toggleMessage(index: number) {\n this.displayMessages[index].expanded = !this.displayMessages[index].expanded;\n }\n \n public getContentString(content: ChatMessageContent): string {\n if (typeof content === 'string') {\n return content;\n } else {\n const contentAny = content as any;\n // check to see if we have a text sub-property and if so\n if (contentAny.text?.trim().length > 0) {\n // we should return this \n return contentAny.text;\n }\n else {\n return JSON.stringify(content, null, 2);\n }\n }\n }\n \n public getContentLanguage(content: ChatMessageContent): string {\n const text = this.getContentString(content);\n \n // Try to detect language based on content\n if (text.trim().startsWith('{') || text.trim().startsWith('[')) {\n return 'json';\n } else if (text.includes('```') || text.includes('# ') || text.includes('**')) {\n return 'markdown';\n } else if (text.includes('function') || text.includes('const') || text.includes('let')) {\n return 'javascript';\n } else if (text.includes('SELECT') || text.includes('FROM') || text.includes('WHERE')) {\n return 'sql';\n }\n \n return 'markdown'; // default to markdown for formatting\n }\n \n public getContentBlockIcon(type: string): string {\n switch (type) {\n case 'image_url':\n return 'fa-image';\n case 'video_url':\n return 'fa-video';\n case 'audio_url':\n return 'fa-music';\n case 'file_url':\n return 'fa-file';\n default:\n return 'fa-paperclip';\n }\n }\n \n public isStringContent(content: ChatMessageContent): boolean {\n return typeof content === 'string';\n }\n \n public getContentJSON(content: ChatMessageContent): string {\n if (typeof content === 'string') {\n return content; // Shouldn't happen but just in case\n }\n // check to see if we have a text sub-property and if so\n // check to see if there are any other sub-properties that have non-empty values or non-empty-arrays/non-empty-object values\n const contentAny = content as any;\n if (contentAny.text?.trim().length > 0) {\n // check to see if there is just one more property called json, if that is the case, append that with a ```json block to the text\n // and return that\n if (contentAny.json) {\n return contentAny.text + '\\n\\n```json\\n' + JSON.stringify(contentAny.json, null, 2) + '\\n```';\n }\n else {\n // now check to see if there are any other sub-properties that have non-empty values or non-empty-arrays/non-empty-object values\n const hasNonEmptySubProps = Object.keys(contentAny).some(key => {\n if (key === 'text') return false; // skip text property\n const value = contentAny[key];\n if (typeof value === 'string' && value.trim().length > 0) return true;\n if (Array.isArray(value) && value.length > 0) return true;\n if (typeof value === 'object' && value !== null && Object.keys(value).length > 0) return true;\n return false;\n });\n if (hasNonEmptySubProps) {\n // return the full JSON with text included\n return JSON.stringify(contentAny, null, 2);\n }\n else {\n // if there are no other non-empty sub-properties, just return the text\n return contentAny.text;\n }\n }\n }\n else {\n // if there is no text property, just return the full JSON\n return JSON.stringify(content, null, 2);\n }\n }\n \n public getContentStats(content: ChatMessageContent): { chars: number; words: number; approxTokens: number } {\n let totalChars = 0;\n let totalWords = 0;\n \n if (typeof content === 'string') {\n // For string content, use the content directly\n totalChars = content.length;\n totalWords = content.trim() ? content.trim().split(/\\s+/).filter(word => word.length > 0).length : 0;\n } else {\n // For non-string content, calculate stats from all non-empty parts\n const contentAny = content as any;\n Object.keys(contentAny).forEach(key => {\n const value = contentAny[key];\n \n // Skip empty values\n if (value === null || value === undefined) return;\n \n let partText: string;\n if (typeof value === 'string') {\n partText = value;\n } else if (Array.isArray(value) && value.length > 0) {\n partText = JSON.stringify(value, null, 2);\n } else if (typeof value === 'object' && Object.keys(value).length > 0) {\n partText = JSON.stringify(value, null, 2);\n } else {\n return; // Skip empty arrays/objects\n }\n \n totalChars += partText.length;\n const partWords = partText.trim().split(/\\s+/).filter(word => word.length > 0).length;\n totalWords += partWords;\n });\n }\n \n const approxTokens = Math.round(totalWords * 1.25); // Average 1.25 tokens per word\n return { chars: totalChars, words: totalWords, approxTokens };\n }\n \n public copyMessageContent(content: ChatMessageContent) {\n const text = this.getContentString(content);\n navigator.clipboard.writeText(text).then(() => {\n console.log('Message content copied to clipboard');\n }).catch(err => {\n console.error('Failed to copy message:', err);\n });\n }\n \n /**\n * Get content parts for multi-part content display\n * Returns an array of {id, key, value, language, expanded} objects for each content part\n */\n public getContentParts(content: ChatMessageContent, messageIndex: number): Array<{id: string, key: string, value: string, language: string, expanded: boolean}> {\n if (typeof content === 'string') {\n const id = `msg-${messageIndex}-part-content`;\n return [{\n id: id,\n key: 'content', \n value: content, \n language: 'markdown',\n expanded: this.isPartExpanded(id)\n }];\n }\n \n const contentAny = content as any;\n const parts: Array<{id: string, key: string, value: string, language: string, expanded: boolean}> = [];\n \n // Process each key in the content object\n Object.keys(contentAny).forEach((key, index) => {\n const value = contentAny[key];\n \n // Skip empty values\n if (value === null || value === undefined) return;\n if (typeof value === 'string' && value.trim().length === 0) return;\n if (Array.isArray(value) && value.length === 0) return;\n if (typeof value === 'object' && Object.keys(value).length === 0) return;\n \n // Determine the display value and language\n let displayValue: string;\n let language: string;\n \n if (typeof value === 'string') {\n displayValue = value;\n language = this.detectLanguageForKey(key, value);\n } else {\n // For objects/arrays, stringify them\n displayValue = JSON.stringify(value, null, 2);\n language = 'json';\n }\n \n const id = `msg-${messageIndex}-part-${key}`;\n parts.push({\n id: id,\n key: this.formatKeyLabel(key),\n value: displayValue,\n language: language,\n expanded: this.isPartExpanded(id)\n });\n });\n \n return parts;\n }\n \n /**\n * Detect language based on key name and content\n */\n private detectLanguageForKey(key: string, value: string): string {\n // Check key-based hints first\n const keyLower = key.toLowerCase();\n if (keyLower.includes('json') || keyLower.includes('data')) return 'json';\n if (keyLower.includes('sql') || keyLower.includes('query')) return 'sql';\n if (keyLower.includes('code') || keyLower.includes('script')) return 'javascript';\n if (keyLower.includes('markdown') || keyLower.includes('md')) return 'markdown';\n if (keyLower.includes('html')) return 'html';\n if (keyLower.includes('css')) return 'css';\n if (keyLower.includes('xml')) return 'xml';\n if (keyLower.includes('yaml') || keyLower.includes('yml')) return 'yaml';\n \n // Fall back to content detection\n return this.getContentLanguage({text: value} as any);\n }\n \n /**\n * Format key name for display label\n */\n private formatKeyLabel(key: string): string {\n // Convert camelCase or snake_case to Title Case\n return key\n .replace(/([A-Z])/g, ' $1') // Add space before capitals\n .replace(/_/g, ' ') // Replace underscores with spaces\n .replace(/\\b\\w/g, l => l.toUpperCase()) // Capitalize first letter of each word\n .trim();\n }\n \n /**\n * Check if content has multiple parts (for non-string content)\n */\n public hasMultipleParts(content: ChatMessageContent): boolean {\n if (typeof content === 'string') return false;\n \n const contentAny = content as any;\n const nonEmptyKeys = Object.keys(contentAny).filter(key => {\n const value = contentAny[key];\n if (value === null || value === undefined) return false;\n if (typeof value === 'string' && value.trim().length === 0) return false;\n if (Array.isArray(value) && value.length === 0) return false;\n if (typeof value === 'object' && Object.keys(value).length === 0) return false;\n return true;\n });\n \n return nonEmptyKeys.length > 1;\n }\n \n /**\n * Check if a content part is expanded\n */\n private isPartExpanded(partId: string): boolean {\n // Default to expanded for all parts initially\n if (!this.contentPartStates.has(partId)) {\n this.contentPartStates.set(partId, true);\n }\n return this.contentPartStates.get(partId) || false;\n }\n \n /**\n * Toggle the expanded state of a content part\n */\n public toggleContentPart(partId: string): void {\n const currentState = this.contentPartStates.get(partId) || false;\n this.contentPartStates.set(partId, !currentState);\n }\n\n /**\n * Open the full-screen overlay with the given content\n */\n public openFullScreen(content: string, language: string, title: string): void {\n this.FullScreenContent = content;\n this.FullScreenLanguage = language;\n this.FullScreenTitle = title;\n }\n\n /**\n * Close the full-screen overlay\n */\n public closeFullScreen(): void {\n this.FullScreenContent = null;\n }\n\n /**\n * Copy text to clipboard\n */\n public copyToClipboard(text: string): void {\n navigator.clipboard.writeText(text).then(() => {\n console.log('Content copied to clipboard');\n }).catch(err => {\n console.error('Failed to copy:', err);\n });\n }\n}","<div class=\"chat-message-viewer\">\n <!-- Filter Controls -->\n <div class=\"filter-controls\">\n <label class=\"filter-checkbox\">\n <input type=\"checkbox\" \n [(ngModel)]=\"showSystem\" \n (ngModelChange)=\"onFilterChange()\"\n class=\"mj-checkbox\" />\n <span class=\"filter-label\">\n <i class=\"fa-solid fa-cog\" [style.color]=\"getRoleColor('system')\"></i>\n System\n </span>\n </label>\n \n <label class=\"filter-checkbox\">\n <input type=\"checkbox\" \n [(ngModel)]=\"showUser\" \n (ngModelChange)=\"onFilterChange()\"\n class=\"mj-checkbox\" />\n <span class=\"filter-label\">\n <i class=\"fa-solid fa-user\" [style.color]=\"getRoleColor('user')\"></i>\n User\n </span>\n </label>\n \n <label class=\"filter-checkbox\">\n <input type=\"checkbox\" \n [(ngModel)]=\"showAssistant\" \n (ngModelChange)=\"onFilterChange()\"\n class=\"mj-checkbox\" />\n <span class=\"filter-label\">\n <i class=\"fa-solid fa-robot\" [style.color]=\"getRoleColor('assistant')\"></i>\n Assistant\n </span>\n </label>\n </div>\n \n <!-- Messages List -->\n <div class=\"messages-container\">\n @if (displayMessages.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-comments\"\n Title=\"No messages to display\" />\n } @else {\n @for (item of displayMessages; track $index; let i = $index) {\n @if (item.visible) {\n <div class=\"message-card\" [attr.data-role]=\"item.message.role\">\n <!-- Message Header -->\n <div class=\"message-header\" (click)=\"toggleMessage(i)\">\n <div class=\"message-role\">\n <span class=\"sequence-number\">#{{ item.sequenceNumber }}</span>\n <i [class]=\"'fa-solid ' + getRoleIcon(item.message.role)\" \n [style.color]=\"getRoleColor(item.message.role)\"></i>\n <span class=\"role-label\">{{ getRoleLabel(item.message.role) }}</span>\n <span class=\"content-stats\">\n <span class=\"stat-item\">{{ getContentStats(item.message.content).chars.toLocaleString() }} chars</span>\n <span class=\"stat-divider\">•</span>\n <span class=\"stat-item\">~{{ getContentStats(item.message.content).approxTokens.toLocaleString() }} tokens</span>\n </span>\n </div>\n <div class=\"message-actions\">\n <button class=\"action-button\" type=\"button\"\n (click)=\"copyMessageContent(item.message.content); $event.stopPropagation()\"\n title=\"Copy message content\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n <button class=\"action-button\" type=\"button\"\n (click)=\"openFullScreen(getContentString(item.message.content), getContentLanguage(item.message.content), getRoleLabel(item.message.role) + ' #' + item.sequenceNumber); $event.stopPropagation()\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n <button class=\"toggle-button\" type=\"button\">\n <i [class]=\"item.expanded ? 'fa-solid fa-chevron-up' : 'fa-solid fa-chevron-down'\"></i>\n </button>\n </div>\n </div>\n \n <!-- Message Content -->\n @if (item.expanded) {\n <div class=\"message-content\">\n <!-- Main content -->\n @if (isStringContent(item.message.content)) {\n <div class=\"text-content\">\n <mj-code-editor \n [value]=\"getContentString(item.message.content)\"\n [readonly]=\"true\"\n [language]=\"getContentLanguage(item.message.content)\"\n style=\"max-height: 600px; overflow-y: auto;\">\n </mj-code-editor>\n </div>\n } @else {\n <!-- Non-string content with multiple parts -->\n <div class=\"multi-part-content\">\n @for (part of getContentParts(item.message.content, i); track part.id) {\n <div class=\"content-part\" [class.collapsed]=\"!part.expanded\">\n <div class=\"content-part-label\" (click)=\"toggleContentPart(part.id)\">\n <div class=\"content-part-label-content\">\n <i class=\"fa-solid fa-tag\"></i>\n {{ part.key }}\n </div>\n <div class=\"content-part-actions\">\n <button class=\"content-part-toggle\" type=\"button\"\n (click)=\"openFullScreen(part.value, part.language, part.key); $event.stopPropagation()\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n <button class=\"content-part-toggle\" type=\"button\">\n <i [class]=\"part.expanded ? 'fa-solid fa-chevron-up' : 'fa-solid fa-chevron-down'\"></i>\n </button>\n </div>\n </div>\n @if (part.expanded) {\n <div class=\"content-part-editor\">\n <mj-code-editor \n [value]=\"part.value\"\n [readonly]=\"true\"\n [language]=\"part.language\"\n style=\"max-height: 400px; overflow-y: auto;\">\n </mj-code-editor>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n }\n }\n </div>\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 class=\"action-button\" type=\"button\"\n (click)=\"copyToClipboard(FullScreenContent)\"\n title=\"Copy content\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n <button class=\"action-button\" type=\"button\"\n (click)=\"closeFullScreen()\"\n title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\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 }\n</div>"]}
1
+ {"version":3,"file":"chat-message-viewer.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIPromptRuns/chat-message-viewer.component.ts","../../../../src/lib/custom/AIPromptRuns/chat-message-viewer.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, OnInit, OnChanges } from '@angular/core';\nimport { ChatMessage, ChatMessageRole, ChatMessageContent, ChatMessageContentBlock } from '@memberjunction/ai';\n\ninterface MessageDisplay {\n message: ChatMessage;\n visible: boolean;\n expanded: boolean;\n sequenceNumber: number;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-chat-message-viewer',\n templateUrl: './chat-message-viewer.component.html',\n styleUrls: ['./chat-message-viewer.component.css']\n})\nexport class ChatMessageViewerComponent implements OnInit, OnChanges {\n @Input() messages: ChatMessage[] = [];\n \n public displayMessages: MessageDisplay[] = [];\n public showSystem = true;\n public showUser = true;\n public showAssistant = true;\n \n // Full-screen overlay state\n public FullScreenContent: string | null = null;\n public FullScreenLanguage = 'markdown';\n public FullScreenTitle = '';\n\n // Track expanded state for content parts\n private contentPartStates = new Map<string, boolean>();\n \n ngOnInit() {\n this.processMessages();\n }\n \n ngOnChanges() {\n this.processMessages();\n }\n \n private processMessages() {\n this.displayMessages = this.messages.map((msg, index) => ({\n message: msg,\n visible: this.isMessageVisible(msg),\n expanded: true,\n sequenceNumber: index + 1\n }));\n }\n \n private isMessageVisible(message: ChatMessage): boolean {\n switch (message.role) {\n case 'system':\n return this.showSystem;\n case 'user':\n return this.showUser;\n case 'assistant':\n return this.showAssistant;\n default:\n return true;\n }\n }\n \n public onFilterChange() {\n this.displayMessages.forEach(dm => {\n dm.visible = this.isMessageVisible(dm.message);\n });\n }\n \n public getRoleIcon(role: string): string {\n switch (role) {\n case 'system':\n return 'fa-cog';\n case 'user':\n return 'fa-user';\n case 'assistant':\n return 'fa-robot';\n default:\n return 'fa-comment';\n }\n }\n \n public getRoleColor(role: string): string {\n switch (role) {\n case 'system':\n return '#2563eb'; // blue\n case 'user':\n return '#059669'; // green\n case 'assistant':\n return '#7c3aed'; // purple\n default:\n return '#6b7280'; // gray\n }\n }\n \n public getRoleLabel(role: string): string {\n return role.charAt(0).toUpperCase() + role.slice(1);\n }\n \n public toggleMessage(index: number) {\n this.displayMessages[index].expanded = !this.displayMessages[index].expanded;\n }\n \n public getContentString(content: ChatMessageContent): string {\n if (typeof content === 'string') {\n return content;\n } else {\n const contentAny = content as any;\n // check to see if we have a text sub-property and if so\n if (contentAny.text?.trim().length > 0) {\n // we should return this \n return contentAny.text;\n }\n else {\n return JSON.stringify(content, null, 2);\n }\n }\n }\n \n public getContentLanguage(content: ChatMessageContent): string {\n const text = this.getContentString(content);\n \n // Try to detect language based on content\n if (text.trim().startsWith('{') || text.trim().startsWith('[')) {\n return 'json';\n } else if (text.includes('```') || text.includes('# ') || text.includes('**')) {\n return 'markdown';\n } else if (text.includes('function') || text.includes('const') || text.includes('let')) {\n return 'javascript';\n } else if (text.includes('SELECT') || text.includes('FROM') || text.includes('WHERE')) {\n return 'sql';\n }\n \n return 'markdown'; // default to markdown for formatting\n }\n \n public getContentBlockIcon(type: string): string {\n switch (type) {\n case 'image_url':\n return 'fa-image';\n case 'video_url':\n return 'fa-video';\n case 'audio_url':\n return 'fa-music';\n case 'file_url':\n return 'fa-file';\n default:\n return 'fa-paperclip';\n }\n }\n \n public isStringContent(content: ChatMessageContent): boolean {\n return typeof content === 'string';\n }\n \n public getContentJSON(content: ChatMessageContent): string {\n if (typeof content === 'string') {\n return content; // Shouldn't happen but just in case\n }\n // check to see if we have a text sub-property and if so\n // check to see if there are any other sub-properties that have non-empty values or non-empty-arrays/non-empty-object values\n const contentAny = content as any;\n if (contentAny.text?.trim().length > 0) {\n // check to see if there is just one more property called json, if that is the case, append that with a ```json block to the text\n // and return that\n if (contentAny.json) {\n return contentAny.text + '\\n\\n```json\\n' + JSON.stringify(contentAny.json, null, 2) + '\\n```';\n }\n else {\n // now check to see if there are any other sub-properties that have non-empty values or non-empty-arrays/non-empty-object values\n const hasNonEmptySubProps = Object.keys(contentAny).some(key => {\n if (key === 'text') return false; // skip text property\n const value = contentAny[key];\n if (typeof value === 'string' && value.trim().length > 0) return true;\n if (Array.isArray(value) && value.length > 0) return true;\n if (typeof value === 'object' && value !== null && Object.keys(value).length > 0) return true;\n return false;\n });\n if (hasNonEmptySubProps) {\n // return the full JSON with text included\n return JSON.stringify(contentAny, null, 2);\n }\n else {\n // if there are no other non-empty sub-properties, just return the text\n return contentAny.text;\n }\n }\n }\n else {\n // if there is no text property, just return the full JSON\n return JSON.stringify(content, null, 2);\n }\n }\n \n public getContentStats(content: ChatMessageContent): { chars: number; words: number; approxTokens: number } {\n let totalChars = 0;\n let totalWords = 0;\n \n if (typeof content === 'string') {\n // For string content, use the content directly\n totalChars = content.length;\n totalWords = content.trim() ? content.trim().split(/\\s+/).filter(word => word.length > 0).length : 0;\n } else {\n // For non-string content, calculate stats from all non-empty parts\n const contentAny = content as any;\n Object.keys(contentAny).forEach(key => {\n const value = contentAny[key];\n \n // Skip empty values\n if (value === null || value === undefined) return;\n \n let partText: string;\n if (typeof value === 'string') {\n partText = value;\n } else if (Array.isArray(value) && value.length > 0) {\n partText = JSON.stringify(value, null, 2);\n } else if (typeof value === 'object' && Object.keys(value).length > 0) {\n partText = JSON.stringify(value, null, 2);\n } else {\n return; // Skip empty arrays/objects\n }\n \n totalChars += partText.length;\n const partWords = partText.trim().split(/\\s+/).filter(word => word.length > 0).length;\n totalWords += partWords;\n });\n }\n \n const approxTokens = Math.round(totalWords * 1.25); // Average 1.25 tokens per word\n return { chars: totalChars, words: totalWords, approxTokens };\n }\n \n public copyMessageContent(content: ChatMessageContent) {\n const text = this.getContentString(content);\n navigator.clipboard.writeText(text).then(() => {\n console.log('Message content copied to clipboard');\n }).catch(err => {\n console.error('Failed to copy message:', err);\n });\n }\n \n /**\n * Get content parts for multi-part content display\n * Returns an array of {id, key, value, language, expanded} objects for each content part\n */\n public getContentParts(content: ChatMessageContent, messageIndex: number): Array<{id: string, key: string, value: string, language: string, expanded: boolean}> {\n if (typeof content === 'string') {\n const id = `msg-${messageIndex}-part-content`;\n return [{\n id: id,\n key: 'content', \n value: content, \n language: 'markdown',\n expanded: this.isPartExpanded(id)\n }];\n }\n \n const contentAny = content as any;\n const parts: Array<{id: string, key: string, value: string, language: string, expanded: boolean}> = [];\n \n // Process each key in the content object\n Object.keys(contentAny).forEach((key, index) => {\n const value = contentAny[key];\n \n // Skip empty values\n if (value === null || value === undefined) return;\n if (typeof value === 'string' && value.trim().length === 0) return;\n if (Array.isArray(value) && value.length === 0) return;\n if (typeof value === 'object' && Object.keys(value).length === 0) return;\n \n // Determine the display value and language\n let displayValue: string;\n let language: string;\n \n if (typeof value === 'string') {\n displayValue = value;\n language = this.detectLanguageForKey(key, value);\n } else {\n // For objects/arrays, stringify them\n displayValue = JSON.stringify(value, null, 2);\n language = 'json';\n }\n \n const id = `msg-${messageIndex}-part-${key}`;\n parts.push({\n id: id,\n key: this.formatKeyLabel(key),\n value: displayValue,\n language: language,\n expanded: this.isPartExpanded(id)\n });\n });\n \n return parts;\n }\n \n /**\n * Detect language based on key name and content\n */\n private detectLanguageForKey(key: string, value: string): string {\n // Check key-based hints first\n const keyLower = key.toLowerCase();\n if (keyLower.includes('json') || keyLower.includes('data')) return 'json';\n if (keyLower.includes('sql') || keyLower.includes('query')) return 'sql';\n if (keyLower.includes('code') || keyLower.includes('script')) return 'javascript';\n if (keyLower.includes('markdown') || keyLower.includes('md')) return 'markdown';\n if (keyLower.includes('html')) return 'html';\n if (keyLower.includes('css')) return 'css';\n if (keyLower.includes('xml')) return 'xml';\n if (keyLower.includes('yaml') || keyLower.includes('yml')) return 'yaml';\n \n // Fall back to content detection\n return this.getContentLanguage({text: value} as any);\n }\n \n /**\n * Format key name for display label\n */\n private formatKeyLabel(key: string): string {\n // Convert camelCase or snake_case to Title Case\n return key\n .replace(/([A-Z])/g, ' $1') // Add space before capitals\n .replace(/_/g, ' ') // Replace underscores with spaces\n .replace(/\\b\\w/g, l => l.toUpperCase()) // Capitalize first letter of each word\n .trim();\n }\n \n /**\n * Check if content has multiple parts (for non-string content)\n */\n public hasMultipleParts(content: ChatMessageContent): boolean {\n if (typeof content === 'string') return false;\n \n const contentAny = content as any;\n const nonEmptyKeys = Object.keys(contentAny).filter(key => {\n const value = contentAny[key];\n if (value === null || value === undefined) return false;\n if (typeof value === 'string' && value.trim().length === 0) return false;\n if (Array.isArray(value) && value.length === 0) return false;\n if (typeof value === 'object' && Object.keys(value).length === 0) return false;\n return true;\n });\n \n return nonEmptyKeys.length > 1;\n }\n \n /**\n * Check if a content part is expanded\n */\n private isPartExpanded(partId: string): boolean {\n // Default to expanded for all parts initially\n if (!this.contentPartStates.has(partId)) {\n this.contentPartStates.set(partId, true);\n }\n return this.contentPartStates.get(partId) || false;\n }\n \n /**\n * Toggle the expanded state of a content part\n */\n public toggleContentPart(partId: string): void {\n const currentState = this.contentPartStates.get(partId) || false;\n this.contentPartStates.set(partId, !currentState);\n }\n\n /**\n * Open the full-screen overlay with the given content\n */\n public openFullScreen(content: string, language: string, title: string): void {\n this.FullScreenContent = content;\n this.FullScreenLanguage = language;\n this.FullScreenTitle = title;\n }\n\n /**\n * Close the full-screen overlay\n */\n public closeFullScreen(): void {\n this.FullScreenContent = null;\n }\n\n /**\n * Copy text to clipboard\n */\n public copyToClipboard(text: string): void {\n navigator.clipboard.writeText(text).then(() => {\n console.log('Content copied to clipboard');\n }).catch(err => {\n console.error('Failed to copy:', err);\n });\n }\n}","<div class=\"chat-message-viewer\">\n <!-- Filter Controls -->\n <div class=\"filter-controls\">\n <label class=\"filter-checkbox\">\n <input type=\"checkbox\" \n [(ngModel)]=\"showSystem\" \n (ngModelChange)=\"onFilterChange()\"\n class=\"mj-checkbox\" />\n <span class=\"filter-label\">\n <i class=\"fa-solid fa-cog\" [style.color]=\"getRoleColor('system')\"></i>\n System\n </span>\n </label>\n \n <label class=\"filter-checkbox\">\n <input type=\"checkbox\" \n [(ngModel)]=\"showUser\" \n (ngModelChange)=\"onFilterChange()\"\n class=\"mj-checkbox\" />\n <span class=\"filter-label\">\n <i class=\"fa-solid fa-user\" [style.color]=\"getRoleColor('user')\"></i>\n User\n </span>\n </label>\n \n <label class=\"filter-checkbox\">\n <input type=\"checkbox\" \n [(ngModel)]=\"showAssistant\" \n (ngModelChange)=\"onFilterChange()\"\n class=\"mj-checkbox\" />\n <span class=\"filter-label\">\n <i class=\"fa-solid fa-robot\" [style.color]=\"getRoleColor('assistant')\"></i>\n Assistant\n </span>\n </label>\n </div>\n \n <!-- Messages List -->\n <div class=\"messages-container\">\n @if (displayMessages.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-comments\"\n Title=\"No messages to display\" />\n } @else {\n @for (item of displayMessages; track $index; let i = $index) {\n @if (item.visible) {\n <div class=\"message-card\" [attr.data-role]=\"item.message.role\">\n <!-- Message Header -->\n <div class=\"message-header\" (click)=\"toggleMessage(i)\">\n <div class=\"message-role\">\n <span class=\"sequence-number\">#{{ item.sequenceNumber }}</span>\n <i [class]=\"'fa-solid ' + getRoleIcon(item.message.role)\" \n [style.color]=\"getRoleColor(item.message.role)\"></i>\n <span class=\"role-label\">{{ getRoleLabel(item.message.role) }}</span>\n <span class=\"content-stats\">\n <span class=\"stat-item\">{{ getContentStats(item.message.content).chars.toLocaleString() }} chars</span>\n <span class=\"stat-divider\">•</span>\n <span class=\"stat-item\">~{{ getContentStats(item.message.content).approxTokens.toLocaleString() }} tokens</span>\n </span>\n </div>\n <div class=\"message-actions\">\n <button class=\"action-button\" type=\"button\"\n (click)=\"copyMessageContent(item.message.content); $event.stopPropagation()\"\n title=\"Copy message content\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n <button class=\"action-button\" type=\"button\"\n (click)=\"openFullScreen(getContentString(item.message.content), getContentLanguage(item.message.content), getRoleLabel(item.message.role) + ' #' + item.sequenceNumber); $event.stopPropagation()\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n <button class=\"toggle-button\" type=\"button\">\n <i [class]=\"item.expanded ? 'fa-solid fa-chevron-up' : 'fa-solid fa-chevron-down'\"></i>\n </button>\n </div>\n </div>\n \n <!-- Message Content -->\n @if (item.expanded) {\n <div class=\"message-content\">\n <!-- Main content -->\n @if (isStringContent(item.message.content)) {\n <div class=\"text-content\">\n <mj-code-editor \n [value]=\"getContentString(item.message.content)\"\n [readonly]=\"true\"\n [language]=\"getContentLanguage(item.message.content)\"\n style=\"max-height: 600px; overflow-y: auto;\">\n </mj-code-editor>\n </div>\n } @else {\n <!-- Non-string content with multiple parts -->\n <div class=\"multi-part-content\">\n @for (part of getContentParts(item.message.content, i); track part.id) {\n <div class=\"content-part\" [class.collapsed]=\"!part.expanded\">\n <div class=\"content-part-label\" (click)=\"toggleContentPart(part.id)\">\n <div class=\"content-part-label-content\">\n <i class=\"fa-solid fa-tag\"></i>\n {{ part.key }}\n </div>\n <div class=\"content-part-actions\">\n <button class=\"content-part-toggle\" type=\"button\"\n (click)=\"openFullScreen(part.value, part.language, part.key); $event.stopPropagation()\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n <button class=\"content-part-toggle\" type=\"button\">\n <i [class]=\"part.expanded ? 'fa-solid fa-chevron-up' : 'fa-solid fa-chevron-down'\"></i>\n </button>\n </div>\n </div>\n @if (part.expanded) {\n <div class=\"content-part-editor\">\n <mj-code-editor \n [value]=\"part.value\"\n [readonly]=\"true\"\n [language]=\"part.language\"\n style=\"max-height: 400px; overflow-y: auto;\">\n </mj-code-editor>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n }\n }\n </div>\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 class=\"action-button\" type=\"button\"\n (click)=\"copyToClipboard(FullScreenContent)\"\n title=\"Copy content\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n <button class=\"action-button\" type=\"button\"\n (click)=\"closeFullScreen()\"\n title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\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 }\n</div>"]}
@@ -3018,7 +3018,7 @@ let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended exte
3018
3018
  i0.ɵɵconditional(ctx.record ? 1 : -1);
3019
3019
  i0.ɵɵadvance();
3020
3020
  i0.ɵɵconditional(ctx.showTestHarness ? 2 : -1);
3021
- } }, dependencies: [i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJEmptyStateComponent, i2.MJAlertComponent, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i2.MJDropdownComponent, i2.MJNumericInputComponent, i2.MJWindowComponent, i3.MjFormFieldComponent, i3.MjRecordFormContainerComponent, i3.ExplorerEntityDataGridComponent, i4.CodeEditorComponent, i5.AITestHarnessComponent, i6.TemplateEditorComponent, i7.DatePipe], styles: ["\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form[_ngcontent-%COMP%] {\n min-height: 0 !important;\n}\n\n.custom-toolbar-actions[_ngcontent-%COMP%] {\n margin-left: auto;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.config-summary[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.config-item[_ngcontent-%COMP%] {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.config-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.template-tab-content[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n.template-header[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n.loading-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n\n\nmj-empty-state.no-template-state[_ngcontent-%COMP%], \nmj-empty-state.invalid-template-state[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.template-editor-container[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n}\n\n\n\n@media (max-width: 1200px) {\n .record-form-container[_ngcontent-%COMP%] .mj-tab-body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n grid-template-columns: 1fr !important;\n gap: 20px;\n }\n\n .config-summary[_ngcontent-%COMP%] {\n order: -1;\n position: static;\n max-height: none;\n }\n}\n\n\n\n@media (max-width: 768px) {\n .custom-toolbar-actions[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 4px !important;\n }\n\n .status-badge[_ngcontent-%COMP%] {\n align-self: flex-start;\n }\n}\n\n\n\n.record-form-container[_ngcontent-%COMP%] mj-form-section[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n\n\n.status-badge[_ngcontent-%COMP%], \n.config-item[_ngcontent-%COMP%], \n.template-header[_ngcontent-%COMP%] {\n transition: all 0.2s ease;\n}\n\n.config-item[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-sm);\n margin: 0 -8px;\n padding: 8px;\n}\n\n\n\n.history-row[_ngcontent-%COMP%] {\n transition: background 0.2s;\n}\n\n.history-row[_ngcontent-%COMP%]:not(.even-row) {\n background: var(--mj-bg-surface-card);\n}\n\n.history-row.even-row[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n.history-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default) !important;\n}\n\n\n\n.parameter-card[_ngcontent-%COMP%] {\n position: relative;\n overflow: hidden;\n}\n\n.parameter-card[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 4px;\n background: inherit;\n transition: width 0.2s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover::before {\n width: 6px;\n}\n\n.type-badge[_ngcontent-%COMP%] {\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n transition: transform 0.2s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover .type-badge[_ngcontent-%COMP%] {\n transform: scale(1.05);\n}\n\n\n\n.parameter-card[_ngcontent-%COMP%] i.fa-solid[_ngcontent-%COMP%] {\n transition: transform 0.3s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover i.fa-solid[_ngcontent-%COMP%] {\n transform: rotate(360deg);\n}\n\n\n\n@media (max-width: 768px) {\n .parameter-card[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n }\n\n .parameter-card[_ngcontent-%COMP%] h6[_ngcontent-%COMP%] {\n font-size: 0.95em;\n }\n\n .type-badge[_ngcontent-%COMP%] {\n font-size: 0.7em !important;\n }\n}"] }); }
3021
+ } }, dependencies: [i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJEmptyStateComponent, i2.MJAlertComponent, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i2.MJDropdownComponent, i2.MJNumericInputComponent, i2.MJWindowComponent, i3.MjFormFieldComponent, i3.MjRecordFormContainerComponent, i3.ExplorerEntityDataGridComponent, i4.CodeEditorComponent, i5.AITestHarnessComponent, i6.TemplateEditorComponent, i7.DatePipe], styles: ["\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form[_ngcontent-%COMP%] {\n min-height: 0 !important;\n}\n\n.custom-toolbar-actions[_ngcontent-%COMP%] {\n margin-left: auto;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.config-summary[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.config-item[_ngcontent-%COMP%] {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.config-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.template-tab-content[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n.template-header[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n.loading-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n\nmj-empty-state.no-template-state[_ngcontent-%COMP%], \nmj-empty-state.invalid-template-state[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.template-editor-container[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n}\n\n\n@media (max-width: 1200px) {\n .record-form-container[_ngcontent-%COMP%] .mj-tab-body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n grid-template-columns: 1fr !important;\n gap: 20px;\n }\n\n .config-summary[_ngcontent-%COMP%] {\n order: -1;\n position: static;\n max-height: none;\n }\n}\n\n\n@media (max-width: 768px) {\n .custom-toolbar-actions[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 4px !important;\n }\n\n .status-badge[_ngcontent-%COMP%] {\n align-self: flex-start;\n }\n}\n\n\n.record-form-container[_ngcontent-%COMP%] mj-form-section[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n\n.status-badge[_ngcontent-%COMP%], \n.config-item[_ngcontent-%COMP%], \n.template-header[_ngcontent-%COMP%] {\n transition: all 0.2s ease;\n}\n\n.config-item[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-sm);\n margin: 0 -8px;\n padding: 8px;\n}\n\n\n.history-row[_ngcontent-%COMP%] {\n transition: background 0.2s;\n}\n\n.history-row[_ngcontent-%COMP%]:not(.even-row) {\n background: var(--mj-bg-surface-card);\n}\n\n.history-row.even-row[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n.history-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default) !important;\n}\n\n\n.parameter-card[_ngcontent-%COMP%] {\n position: relative;\n overflow: hidden;\n}\n\n.parameter-card[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 4px;\n background: inherit;\n transition: width 0.2s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover::before {\n width: 6px;\n}\n\n.type-badge[_ngcontent-%COMP%] {\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n transition: transform 0.2s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover .type-badge[_ngcontent-%COMP%] {\n transform: scale(1.05);\n}\n\n\n.parameter-card[_ngcontent-%COMP%] i.fa-solid[_ngcontent-%COMP%] {\n transition: transform 0.3s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover i.fa-solid[_ngcontent-%COMP%] {\n transform: rotate(360deg);\n}\n\n\n@media (max-width: 768px) {\n .parameter-card[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n }\n\n .parameter-card[_ngcontent-%COMP%] h6[_ngcontent-%COMP%] {\n font-size: 0.95em;\n }\n\n .type-badge[_ngcontent-%COMP%] {\n font-size: 0.7em !important;\n }\n}"] }); }
3022
3022
  };
3023
3023
  MJAIPromptFormComponentExtended = __decorate([
3024
3024
  RegisterClass(BaseFormComponent, 'MJ: AI Prompts')
@@ -435,7 +435,7 @@ export class TemplateSelectorDialogComponent extends BaseAngularComponent {
435
435
  i0.ɵɵproperty("disabled", ctx.selectedTemplates.size === 0);
436
436
  i0.ɵɵadvance(2);
437
437
  i0.ɵɵtextInterpolate1(" Select ", ctx.selectedTemplates.size > 0 ? "(" + ctx.selectedTemplates.size + ")" : "", " ");
438
- } }, dependencies: [CommonModule, ReactiveFormsModule, i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.NgControlStatus, i1.FormControlDirective, i2.AsyncPipe], styles: ["\n\n.template-selector-dialog[_ngcontent-%COMP%] {\n padding: 20px;\n width: 100%;\n max-width: 800px;\n height: 600px;\n display: flex;\n flex-direction: column;\n}\n\n\n\n.dialog-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n padding-bottom: 15px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.dialog-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.5rem;\n color: var(--mj-text-primary);\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n}\n\n\n\n.search-filter-section[_ngcontent-%COMP%] {\n display: flex;\n gap: 15px;\n margin-bottom: 20px;\n}\n\n.search-container[_ngcontent-%COMP%] {\n flex: 1;\n position: relative;\n}\n\n.search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 10px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-muted);\n pointer-events: none;\n}\n\n.search-container[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n padding-left: 35px;\n width: 100%;\n}\n\n.category-filter[_ngcontent-%COMP%] {\n min-width: 200px;\n}\n\n.category-filter[_ngcontent-%COMP%] select[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n padding: 60px;\n font-size: 1.1rem;\n color: var(--mj-text-secondary);\n}\n\n.loading-container[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.5rem;\n color: var(--mj-brand-primary);\n}\n\n\n\n.templates-container[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n background: var(--mj-bg-surface);\n padding: 10px;\n}\n\n.templates-container.grid-mode[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 15px;\n}\n\n\n\n.template-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 15px;\n border: 2px solid transparent;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s ease;\n background: var(--mj-bg-surface-card);\n margin-bottom: 8px;\n}\n\n.template-item[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n}\n\n.template-item.selected[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n}\n\n.grid-mode[_ngcontent-%COMP%] .template-item[_ngcontent-%COMP%] {\n flex-direction: column;\n margin-bottom: 0;\n}\n\n.grid-mode[_ngcontent-%COMP%] .template-item[_ngcontent-%COMP%] .selection-indicator[_ngcontent-%COMP%] {\n align-self: flex-end;\n}\n\n\n\n.selection-indicator[_ngcontent-%COMP%] {\n flex-shrink: 0;\n margin-top: 2px;\n}\n\n.selection-indicator[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%], \n.selection-indicator[_ngcontent-%COMP%] input[type=\"radio\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n\n\n\n.template-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.template-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 8px;\n}\n\n.template-name[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n word-break: break-word;\n}\n\n.template-status[_ngcontent-%COMP%] {\n flex-shrink: 0;\n margin-left: 10px;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 0.75rem;\n font-weight: 500;\n color: var(--mj-text-inverse);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n\n\n.template-description[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n color: var(--mj-text-secondary);\n font-size: 0.9rem;\n line-height: 1.4;\n}\n\n\n\n.template-metadata[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 15px;\n font-size: 0.85rem;\n color: var(--mj-text-muted);\n}\n\n.metadata-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.metadata-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n}\n\n\n\n.no-templates[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n text-align: center;\n color: var(--mj-text-secondary);\n}\n\n.no-templates[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n color: var(--mj-text-muted);\n}\n\n.no-templates[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 10px 0;\n font-size: 1.2rem;\n}\n\n.no-templates[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.9rem;\n color: var(--mj-text-muted);\n}\n\n\n\n.dialog-actions[_ngcontent-%COMP%] {\n margin-top: 20px;\n padding-top: 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.action-buttons[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n}\n\n.action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 100px;\n}\n\n.action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n\n\n@media (max-width: 768px) {\n .template-selector-dialog[_ngcontent-%COMP%] {\n padding: 15px;\n height: 500px;\n }\n\n .search-filter-section[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 10px;\n }\n\n .category-filter[_ngcontent-%COMP%] {\n min-width: auto;\n }\n\n .templates-container.grid-mode[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .template-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .template-status[_ngcontent-%COMP%] {\n margin-left: 0;\n margin-top: 5px;\n }\n\n .template-metadata[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 8px;\n }\n\n .action-buttons[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: auto;\n }\n}\n\n\n\n.templates-container[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 8px;\n}\n\n.templates-container[_ngcontent-%COMP%]::-webkit-scrollbar-track {\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n}\n\n.templates-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 4px;\n}\n\n.templates-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-muted);\n}"] }); }
438
+ } }, dependencies: [CommonModule, ReactiveFormsModule, i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.NgControlStatus, i1.FormControlDirective, i2.AsyncPipe], styles: ["\n.template-selector-dialog[_ngcontent-%COMP%] {\n padding: 20px;\n width: 100%;\n max-width: 800px;\n height: 600px;\n display: flex;\n flex-direction: column;\n}\n\n\n.dialog-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n padding-bottom: 15px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.dialog-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.5rem;\n color: var(--mj-text-primary);\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n}\n\n\n.search-filter-section[_ngcontent-%COMP%] {\n display: flex;\n gap: 15px;\n margin-bottom: 20px;\n}\n\n.search-container[_ngcontent-%COMP%] {\n flex: 1;\n position: relative;\n}\n\n.search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 10px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-muted);\n pointer-events: none;\n}\n\n.search-container[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n padding-left: 35px;\n width: 100%;\n}\n\n.category-filter[_ngcontent-%COMP%] {\n min-width: 200px;\n}\n\n.category-filter[_ngcontent-%COMP%] select[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n padding: 60px;\n font-size: 1.1rem;\n color: var(--mj-text-secondary);\n}\n\n.loading-container[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.5rem;\n color: var(--mj-brand-primary);\n}\n\n\n.templates-container[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n background: var(--mj-bg-surface);\n padding: 10px;\n}\n\n.templates-container.grid-mode[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 15px;\n}\n\n\n.template-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 15px;\n border: 2px solid transparent;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s ease;\n background: var(--mj-bg-surface-card);\n margin-bottom: 8px;\n}\n\n.template-item[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n}\n\n.template-item.selected[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n}\n\n.grid-mode[_ngcontent-%COMP%] .template-item[_ngcontent-%COMP%] {\n flex-direction: column;\n margin-bottom: 0;\n}\n\n.grid-mode[_ngcontent-%COMP%] .template-item[_ngcontent-%COMP%] .selection-indicator[_ngcontent-%COMP%] {\n align-self: flex-end;\n}\n\n\n.selection-indicator[_ngcontent-%COMP%] {\n flex-shrink: 0;\n margin-top: 2px;\n}\n\n.selection-indicator[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%], \n.selection-indicator[_ngcontent-%COMP%] input[type=\"radio\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n\n\n.template-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.template-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 8px;\n}\n\n.template-name[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n word-break: break-word;\n}\n\n.template-status[_ngcontent-%COMP%] {\n flex-shrink: 0;\n margin-left: 10px;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 0.75rem;\n font-weight: 500;\n color: var(--mj-text-inverse);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n\n.template-description[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n color: var(--mj-text-secondary);\n font-size: 0.9rem;\n line-height: 1.4;\n}\n\n\n.template-metadata[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 15px;\n font-size: 0.85rem;\n color: var(--mj-text-muted);\n}\n\n.metadata-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.metadata-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n}\n\n\n.no-templates[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n text-align: center;\n color: var(--mj-text-secondary);\n}\n\n.no-templates[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n color: var(--mj-text-muted);\n}\n\n.no-templates[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 10px 0;\n font-size: 1.2rem;\n}\n\n.no-templates[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.9rem;\n color: var(--mj-text-muted);\n}\n\n\n.dialog-actions[_ngcontent-%COMP%] {\n margin-top: 20px;\n padding-top: 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.action-buttons[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n}\n\n.action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 100px;\n}\n\n.action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n\n@media (max-width: 768px) {\n .template-selector-dialog[_ngcontent-%COMP%] {\n padding: 15px;\n height: 500px;\n }\n\n .search-filter-section[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 10px;\n }\n\n .category-filter[_ngcontent-%COMP%] {\n min-width: auto;\n }\n\n .templates-container.grid-mode[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .template-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .template-status[_ngcontent-%COMP%] {\n margin-left: 0;\n margin-top: 5px;\n }\n\n .template-metadata[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 8px;\n }\n\n .action-buttons[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: auto;\n }\n}\n\n\n.templates-container[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 8px;\n}\n\n.templates-container[_ngcontent-%COMP%]::-webkit-scrollbar-track {\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n}\n\n.templates-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 4px;\n}\n\n.templates-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-muted);\n}"] }); }
439
439
  }
440
440
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TemplateSelectorDialogComponent, [{
441
441
  type: Component,
@@ -630,7 +630,7 @@ let MJActionExecutionLogFormComponentExtended = class MJActionExecutionLogFormCo
630
630
  navigateToEntity(entityName, recordId) {
631
631
  if (!recordId)
632
632
  return;
633
- SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromID(recordId));
633
+ SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromURLSegment(this.ProviderToUse.EntityByName(entityName), recordId));
634
634
  }
635
635
  navigateToAction() {
636
636
  if (this.record.ActionID) {
@@ -833,7 +833,7 @@ let MJActionExecutionLogFormComponentExtended = class MJActionExecutionLogFormCo
833
833
  i0.ɵɵconditional(ctx.record.Message ? 70 : -1);
834
834
  i0.ɵɵadvance();
835
835
  i0.ɵɵconditional(!ctx.record.Params && !ctx.record.Message && !ctx.hasAnyParameters ? 71 : -1);
836
- } }, dependencies: [i1.NgClass, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.MJEmptyStateComponent, i3.MJAccordionPanelComponent, i3.MJAccordionTitleDirective, i4.CodeEditorComponent, i1.DatePipe], styles: ["\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.action-execution-log-form[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n}\n\n\n\n.header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n padding: 20px;\n box-shadow: var(--mj-shadow-sm);\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.icon-wrapper[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background: var(--mj-status-info);\n border-radius: var(--mj-radius-lg);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: var(--mj-text-xl);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.header-info[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0;\n font-size: var(--mj-text-2xl);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n}\n\n.meta-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-top: 4px;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-muted);\n}\n\n.action-name[_ngcontent-%COMP%] {\n font-weight: var(--mj-font-medium);\n color: var(--mj-text-secondary);\n}\n\n.log-id[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: var(--mj-text-xs);\n opacity: 0.7;\n}\n\n.header-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n padding: 6px 16px;\n border-radius: var(--mj-radius-full);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-text-inverse);\n}\n\n.execution-time[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-muted);\n}\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 12px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.stat[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat[_ngcontent-%COMP%] .value[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n color: var(--mj-text-secondary);\n}\n\n.record-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n\n\n.content-area[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 20px;\n}\n\n\n\n.details-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n padding: 20px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-item[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n font-weight: var(--mj-font-semibold);\n}\n\n.detail-value[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-primary);\n}\n\n.btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n font-size: var(--mj-text-sm);\n padding: 4px;\n}\n\n.btn-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.loading[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-xs);\n}\n\n\n\n.json-viewer[_ngcontent-%COMP%] {\n padding: 20px;\n background: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-md);\n margin-bottom: 20px;\n}\n\n.json-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n}\n\n.json-label[_ngcontent-%COMP%] {\n background: var(--mj-status-info);\n color: var(--mj-text-inverse);\n padding: 4px 12px;\n border-radius: var(--mj-radius-full);\n font-size: 11px;\n font-weight: var(--mj-font-semibold);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.btn-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all var(--mj-transition-base);\n color: var(--mj-text-muted);\n}\n\n.btn-icon[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n\n\n.status-badge[data-status=\"success\"][_ngcontent-%COMP%], \n.status-badge[data-status=\"ok\"][_ngcontent-%COMP%], \n.status-badge[data-status=\"completed\"][_ngcontent-%COMP%], \n.status-badge[data-status=\"200\"][_ngcontent-%COMP%] {\n background-color: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.status-badge[data-status=\"error\"][_ngcontent-%COMP%], \n.status-badge[data-status=\"failed\"][_ngcontent-%COMP%], \n.status-badge[data-status=\"failure\"][_ngcontent-%COMP%] {\n background-color: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.status-badge[data-status=\"warning\"][_ngcontent-%COMP%], \n.status-badge[data-status=\"pending\"][_ngcontent-%COMP%] {\n background-color: var(--mj-status-warning);\n color: var(--mj-color-warning-800);\n}\n\n.status-badge[data-status=\"info\"][_ngcontent-%COMP%], \n.status-badge[data-status=\"running\"][_ngcontent-%COMP%] {\n background-color: var(--mj-status-info);\n color: var(--mj-text-inverse);\n}\n\n.status-badge[_ngcontent-%COMP%] {\n background-color: var(--mj-text-muted);\n color: var(--mj-text-inverse);\n}\n\n.monospace[_ngcontent-%COMP%] {\n font-family: 'Courier New', Courier, monospace;\n font-size: var(--mj-text-xs);\n}\n\n\n\n\n\n\n.params-panel[_ngcontent-%COMP%] {\n padding: 18px 20px 22px;\n}\n\n\n\n.params-toolbar[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 14px;\n align-items: center;\n justify-content: space-between;\n padding: 12px 14px;\n margin-bottom: 14px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n border-radius: var(--mj-radius-lg);\n}\n\n.filter-chips[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 6px 13px;\n border-radius: var(--mj-radius-full);\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n cursor: pointer;\n transition: all var(--mj-transition-base);\n}\n.chip[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n.chip[_ngcontent-%COMP%]:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n.chip[_ngcontent-%COMP%] .chip-count[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 18px;\n padding: 0 6px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-radius: var(--mj-radius-full);\n font-size: 11px;\n font-weight: var(--mj-font-semibold);\n}\n.chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.chip.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n}\n.chip.active[_ngcontent-%COMP%] .chip-count[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-text-inverse) 25%, transparent);\n color: var(--mj-text-inverse);\n}\n\n\n\n.chip.chip-input.active[_ngcontent-%COMP%] {\n background: var(--mj-status-info);\n border-color: var(--mj-status-info);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-status-info) 22%, transparent);\n}\n.chip.chip-output.active[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n border-color: var(--mj-status-success);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-status-success) 22%, transparent);\n}\n.chip.chip-both.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 75%, var(--mj-status-warning) 25%);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 75%, var(--mj-status-warning) 25%);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n}\n\n.toolbar-right[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.search-wrapper[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n}\n.search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 10px;\n color: var(--mj-text-muted);\n font-size: 12px;\n pointer-events: none;\n}\n.params-search[_ngcontent-%COMP%] {\n min-width: 220px;\n padding: 7px 30px 7px 30px;\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-sm);\n}\n.search-clear[_ngcontent-%COMP%] {\n position: absolute;\n right: 6px;\n width: 22px;\n height: 22px;\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n border-radius: var(--mj-radius-full);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n.search-clear[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-hover);\n}\n\n.sort-group[_ngcontent-%COMP%] {\n display: inline-flex;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n background: var(--mj-bg-surface);\n}\n.sort-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 12px;\n background: transparent;\n border: none;\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n cursor: pointer;\n transition: background var(--mj-transition-base);\n}\n.sort-btn[_ngcontent-%COMP%] + .sort-btn[_ngcontent-%COMP%] {\n border-left: 1px solid var(--mj-border-default);\n}\n.sort-btn[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n.sort-btn.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n.sort-btn.active[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n\n.raw-toggle[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 12px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n cursor: pointer;\n transition: all var(--mj-transition-base);\n}\n.raw-toggle[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n.raw-toggle.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, var(--mj-border-default));\n}\n\n\n\n.params-list[_ngcontent-%COMP%] {\n list-style: none;\n padding: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.param-row[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-left: 3px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 12px 14px;\n transition: border-color var(--mj-transition-base), box-shadow var(--mj-transition-base);\n}\n.param-row[_ngcontent-%COMP%]:hover {\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, var(--mj-border-default));\n box-shadow: 0 1px 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n.param-row[data-type=\"Input\"][_ngcontent-%COMP%] { border-left-color: var(--mj-status-info); }\n.param-row[data-type=\"Output\"][_ngcontent-%COMP%] { border-left-color: var(--mj-status-success); }\n.param-row[data-type=\"Both\"][_ngcontent-%COMP%] { border-left-color: color-mix(in srgb, var(--mj-brand-primary) 75%, var(--mj-status-warning) 25%); }\n\n.param-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.type-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 3px 10px;\n border-radius: var(--mj-radius-full);\n font-size: 11px;\n font-weight: var(--mj-font-semibold);\n text-transform: uppercase;\n letter-spacing: 0.4px;\n flex-shrink: 0;\n}\n.type-badge[data-type=\"Input\"][_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg);\n color: var(--mj-status-info-text);\n border: 1px solid color-mix(in srgb, var(--mj-status-info) 30%, transparent);\n}\n.type-badge[data-type=\"Output\"][_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 30%, transparent);\n}\n.type-badge[data-type=\"Both\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n.param-name-wrap[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n.param-name[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Fira Code', Menlo, Consolas, monospace;\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.value-kind-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-radius: var(--mj-radius-full);\n font-size: 10px;\n font-weight: var(--mj-font-medium);\n text-transform: lowercase;\n letter-spacing: 0.3px;\n flex-shrink: 0;\n}\n.value-kind-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 9px; }\n.value-kind-chip[data-kind=\"number\"][_ngcontent-%COMP%] { color: var(--mj-status-info-text); background: var(--mj-status-info-bg); }\n.value-kind-chip[data-kind=\"boolean\"][_ngcontent-%COMP%] { color: var(--mj-status-warning-text); background: var(--mj-status-warning-bg); }\n.value-kind-chip[data-kind=\"array\"][_ngcontent-%COMP%] { color: var(--mj-brand-primary); background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface)); }\n.value-kind-chip[data-kind=\"object\"][_ngcontent-%COMP%] { color: var(--mj-brand-primary); background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface)); }\n.value-kind-chip[data-kind=\"null\"][_ngcontent-%COMP%], \n.value-kind-chip[data-kind=\"undefined\"][_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n background: var(--mj-bg-surface-sunken);\n}\n\n.param-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n flex-shrink: 0;\n}\n.param-actions[_ngcontent-%COMP%] .btn-icon[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n}\n.param-expand.is-expanded[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, var(--mj-border-default));\n}\n\n.param-preview[_ngcontent-%COMP%] {\n margin-top: 8px;\n padding-left: calc(64px + 12px); \n\n font-family: 'SF Mono', 'Fira Code', Menlo, Consolas, monospace;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n word-break: break-word;\n line-height: 1.55;\n}\n.param-preview[data-kind=\"string\"][_ngcontent-%COMP%] { color: var(--mj-status-success-text); }\n.param-preview[data-kind=\"number\"][_ngcontent-%COMP%] { color: var(--mj-status-info-text); }\n.param-preview[data-kind=\"boolean\"][_ngcontent-%COMP%] { color: var(--mj-status-warning-text); }\n.param-preview[data-kind=\"null\"][_ngcontent-%COMP%], \n.param-preview[data-kind=\"undefined\"][_ngcontent-%COMP%] { color: var(--mj-text-disabled); font-style: italic; }\n.param-preview[data-kind=\"array\"][_ngcontent-%COMP%], \n.param-preview[data-kind=\"object\"][_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n\n.param-expanded[_ngcontent-%COMP%] {\n margin-top: 10px;\n margin-left: calc(64px + 12px);\n border: 1px solid var(--mj-border-subtle);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n background: var(--mj-bg-surface-sunken);\n}\n\n.raw-json-viewer[_ngcontent-%COMP%] { margin-top: 4px; }\n\n\n\n@media (max-width: 768px) {\n .header-content[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-stats[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n\n .details-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .params-toolbar[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n }\n .toolbar-right[_ngcontent-%COMP%] {\n justify-content: space-between;\n }\n .params-search[_ngcontent-%COMP%] { min-width: 0; width: 100%; }\n .search-wrapper[_ngcontent-%COMP%] { flex: 1; }\n\n .param-preview[_ngcontent-%COMP%], \n .param-expanded[_ngcontent-%COMP%] {\n padding-left: 0;\n margin-left: 0;\n }\n}"] }); }
836
+ } }, dependencies: [i1.NgClass, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.MJEmptyStateComponent, i3.MJAccordionPanelComponent, i3.MJAccordionTitleDirective, i4.CodeEditorComponent, i1.DatePipe], styles: ["\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.action-execution-log-form[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n}\n\n\n.header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n padding: 20px;\n box-shadow: var(--mj-shadow-sm);\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.icon-wrapper[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background: var(--mj-status-info);\n border-radius: var(--mj-radius-lg);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: var(--mj-text-xl);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.header-info[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0;\n font-size: var(--mj-text-2xl);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n}\n\n.meta-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-top: 4px;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-muted);\n}\n\n.action-name[_ngcontent-%COMP%] {\n font-weight: var(--mj-font-medium);\n color: var(--mj-text-secondary);\n}\n\n.log-id[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: var(--mj-text-xs);\n opacity: 0.7;\n}\n\n.header-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n padding: 6px 16px;\n border-radius: var(--mj-radius-full);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-text-inverse);\n}\n\n.execution-time[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-muted);\n}\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 12px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.stat[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat[_ngcontent-%COMP%] .value[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n color: var(--mj-text-secondary);\n}\n\n.record-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n\n.content-area[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 20px;\n}\n\n\n.details-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n padding: 20px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-item[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n font-weight: var(--mj-font-semibold);\n}\n\n.detail-value[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-primary);\n}\n\n.btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n font-size: var(--mj-text-sm);\n padding: 4px;\n}\n\n.btn-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.loading[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-xs);\n}\n\n\n.json-viewer[_ngcontent-%COMP%] {\n padding: 20px;\n background: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-md);\n margin-bottom: 20px;\n}\n\n.json-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n}\n\n.json-label[_ngcontent-%COMP%] {\n background: var(--mj-status-info);\n color: var(--mj-text-inverse);\n padding: 4px 12px;\n border-radius: var(--mj-radius-full);\n font-size: 11px;\n font-weight: var(--mj-font-semibold);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.btn-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all var(--mj-transition-base);\n color: var(--mj-text-muted);\n}\n\n.btn-icon[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n\n.status-badge[data-status=\"success\"][_ngcontent-%COMP%], \n.status-badge[data-status=\"ok\"][_ngcontent-%COMP%], \n.status-badge[data-status=\"completed\"][_ngcontent-%COMP%], \n.status-badge[data-status=\"200\"][_ngcontent-%COMP%] {\n background-color: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.status-badge[data-status=\"error\"][_ngcontent-%COMP%], \n.status-badge[data-status=\"failed\"][_ngcontent-%COMP%], \n.status-badge[data-status=\"failure\"][_ngcontent-%COMP%] {\n background-color: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.status-badge[data-status=\"warning\"][_ngcontent-%COMP%], \n.status-badge[data-status=\"pending\"][_ngcontent-%COMP%] {\n background-color: var(--mj-status-warning);\n color: var(--mj-color-warning-800);\n}\n\n.status-badge[data-status=\"info\"][_ngcontent-%COMP%], \n.status-badge[data-status=\"running\"][_ngcontent-%COMP%] {\n background-color: var(--mj-status-info);\n color: var(--mj-text-inverse);\n}\n\n.status-badge[_ngcontent-%COMP%] {\n background-color: var(--mj-text-muted);\n color: var(--mj-text-inverse);\n}\n\n.monospace[_ngcontent-%COMP%] {\n font-family: 'Courier New', Courier, monospace;\n font-size: var(--mj-text-xs);\n}\n\n\n\n\n\n.params-panel[_ngcontent-%COMP%] {\n padding: 18px 20px 22px;\n}\n\n\n.params-toolbar[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 14px;\n align-items: center;\n justify-content: space-between;\n padding: 12px 14px;\n margin-bottom: 14px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n border-radius: var(--mj-radius-lg);\n}\n\n.filter-chips[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 6px 13px;\n border-radius: var(--mj-radius-full);\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n cursor: pointer;\n transition: all var(--mj-transition-base);\n}\n.chip[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n.chip[_ngcontent-%COMP%]:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n.chip[_ngcontent-%COMP%] .chip-count[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 18px;\n padding: 0 6px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-radius: var(--mj-radius-full);\n font-size: 11px;\n font-weight: var(--mj-font-semibold);\n}\n.chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.chip.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n}\n.chip.active[_ngcontent-%COMP%] .chip-count[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-text-inverse) 25%, transparent);\n color: var(--mj-text-inverse);\n}\n\n\n.chip.chip-input.active[_ngcontent-%COMP%] {\n background: var(--mj-status-info);\n border-color: var(--mj-status-info);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-status-info) 22%, transparent);\n}\n.chip.chip-output.active[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n border-color: var(--mj-status-success);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-status-success) 22%, transparent);\n}\n.chip.chip-both.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 75%, var(--mj-status-warning) 25%);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 75%, var(--mj-status-warning) 25%);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n}\n\n.toolbar-right[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.search-wrapper[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n}\n.search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 10px;\n color: var(--mj-text-muted);\n font-size: 12px;\n pointer-events: none;\n}\n.params-search[_ngcontent-%COMP%] {\n min-width: 220px;\n padding: 7px 30px 7px 30px;\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-sm);\n}\n.search-clear[_ngcontent-%COMP%] {\n position: absolute;\n right: 6px;\n width: 22px;\n height: 22px;\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n border-radius: var(--mj-radius-full);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n.search-clear[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-hover);\n}\n\n.sort-group[_ngcontent-%COMP%] {\n display: inline-flex;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n background: var(--mj-bg-surface);\n}\n.sort-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 12px;\n background: transparent;\n border: none;\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n cursor: pointer;\n transition: background var(--mj-transition-base);\n}\n.sort-btn[_ngcontent-%COMP%] + .sort-btn[_ngcontent-%COMP%] {\n border-left: 1px solid var(--mj-border-default);\n}\n.sort-btn[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n.sort-btn.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n.sort-btn.active[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n\n.raw-toggle[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 12px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n cursor: pointer;\n transition: all var(--mj-transition-base);\n}\n.raw-toggle[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n.raw-toggle.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, var(--mj-border-default));\n}\n\n\n.params-list[_ngcontent-%COMP%] {\n list-style: none;\n padding: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.param-row[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-left: 3px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 12px 14px;\n transition: border-color var(--mj-transition-base), box-shadow var(--mj-transition-base);\n}\n.param-row[_ngcontent-%COMP%]:hover {\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, var(--mj-border-default));\n box-shadow: 0 1px 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n.param-row[data-type=\"Input\"][_ngcontent-%COMP%] { border-left-color: var(--mj-status-info); }\n.param-row[data-type=\"Output\"][_ngcontent-%COMP%] { border-left-color: var(--mj-status-success); }\n.param-row[data-type=\"Both\"][_ngcontent-%COMP%] { border-left-color: color-mix(in srgb, var(--mj-brand-primary) 75%, var(--mj-status-warning) 25%); }\n\n.param-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.type-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 3px 10px;\n border-radius: var(--mj-radius-full);\n font-size: 11px;\n font-weight: var(--mj-font-semibold);\n text-transform: uppercase;\n letter-spacing: 0.4px;\n flex-shrink: 0;\n}\n.type-badge[data-type=\"Input\"][_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg);\n color: var(--mj-status-info-text);\n border: 1px solid color-mix(in srgb, var(--mj-status-info) 30%, transparent);\n}\n.type-badge[data-type=\"Output\"][_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 30%, transparent);\n}\n.type-badge[data-type=\"Both\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n.param-name-wrap[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n.param-name[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Fira Code', Menlo, Consolas, monospace;\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.value-kind-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-radius: var(--mj-radius-full);\n font-size: 10px;\n font-weight: var(--mj-font-medium);\n text-transform: lowercase;\n letter-spacing: 0.3px;\n flex-shrink: 0;\n}\n.value-kind-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 9px; }\n.value-kind-chip[data-kind=\"number\"][_ngcontent-%COMP%] { color: var(--mj-status-info-text); background: var(--mj-status-info-bg); }\n.value-kind-chip[data-kind=\"boolean\"][_ngcontent-%COMP%] { color: var(--mj-status-warning-text); background: var(--mj-status-warning-bg); }\n.value-kind-chip[data-kind=\"array\"][_ngcontent-%COMP%] { color: var(--mj-brand-primary); background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface)); }\n.value-kind-chip[data-kind=\"object\"][_ngcontent-%COMP%] { color: var(--mj-brand-primary); background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface)); }\n.value-kind-chip[data-kind=\"null\"][_ngcontent-%COMP%], \n.value-kind-chip[data-kind=\"undefined\"][_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n background: var(--mj-bg-surface-sunken);\n}\n\n.param-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n flex-shrink: 0;\n}\n.param-actions[_ngcontent-%COMP%] .btn-icon[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n}\n.param-expand.is-expanded[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, var(--mj-border-default));\n}\n\n.param-preview[_ngcontent-%COMP%] {\n margin-top: 8px;\n padding-left: calc(64px + 12px); \n font-family: 'SF Mono', 'Fira Code', Menlo, Consolas, monospace;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n word-break: break-word;\n line-height: 1.55;\n}\n.param-preview[data-kind=\"string\"][_ngcontent-%COMP%] { color: var(--mj-status-success-text); }\n.param-preview[data-kind=\"number\"][_ngcontent-%COMP%] { color: var(--mj-status-info-text); }\n.param-preview[data-kind=\"boolean\"][_ngcontent-%COMP%] { color: var(--mj-status-warning-text); }\n.param-preview[data-kind=\"null\"][_ngcontent-%COMP%], \n.param-preview[data-kind=\"undefined\"][_ngcontent-%COMP%] { color: var(--mj-text-disabled); font-style: italic; }\n.param-preview[data-kind=\"array\"][_ngcontent-%COMP%], \n.param-preview[data-kind=\"object\"][_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n\n.param-expanded[_ngcontent-%COMP%] {\n margin-top: 10px;\n margin-left: calc(64px + 12px);\n border: 1px solid var(--mj-border-subtle);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n background: var(--mj-bg-surface-sunken);\n}\n\n.raw-json-viewer[_ngcontent-%COMP%] { margin-top: 4px; }\n\n\n@media (max-width: 768px) {\n .header-content[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-stats[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n\n .details-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .params-toolbar[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n }\n .toolbar-right[_ngcontent-%COMP%] {\n justify-content: space-between;\n }\n .params-search[_ngcontent-%COMP%] { min-width: 0; width: 100%; }\n .search-wrapper[_ngcontent-%COMP%] { flex: 1; }\n\n .param-preview[_ngcontent-%COMP%], \n .param-expanded[_ngcontent-%COMP%] {\n padding-left: 0;\n margin-left: 0;\n }\n}"] }); }
837
837
  };
838
838
  MJActionExecutionLogFormComponentExtended = __decorate([
839
839
  RegisterClass(BaseFormComponent, 'MJ: Action Execution Logs')