@memberjunction/ng-core-entity-forms 5.29.0 → 5.30.1

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 (77) hide show
  1. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +4 -0
  2. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  3. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +567 -566
  4. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  5. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +3 -0
  6. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  7. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +243 -244
  8. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  9. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +3 -0
  10. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  11. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +417 -416
  12. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  13. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +51 -16
  14. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
  15. package/dist/lib/custom/Actions/action-execution-log-form.component.js +422 -139
  16. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  17. package/dist/lib/custom/Actions/action-form.component.d.ts +68 -1
  18. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
  19. package/dist/lib/custom/Actions/action-form.component.js +882 -422
  20. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  21. package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts +3 -0
  22. package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts.map +1 -1
  23. package/dist/lib/custom/EntityActions/entityaction.form.component.js +23 -22
  24. package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
  25. package/dist/lib/custom/Queries/query-form.component.d.ts +2 -0
  26. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  27. package/dist/lib/custom/Queries/query-form.component.js +617 -627
  28. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  29. package/dist/lib/custom/Templates/templates-form.component.d.ts +3 -0
  30. package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
  31. package/dist/lib/custom/Templates/templates-form.component.js +157 -158
  32. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  33. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
  34. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +176 -152
  35. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  36. package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.d.ts.map +1 -1
  37. package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.js +42 -6
  38. package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.js.map +1 -1
  39. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
  40. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +57 -49
  41. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
  42. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +83 -77
  43. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
  44. package/dist/lib/generated/Entities/MJArchiveRunDetail/mjarchiverundetail.form.component.js +2 -2
  45. package/dist/lib/generated/Entities/MJArchiveRunDetail/mjarchiverundetail.form.component.js.map +1 -1
  46. package/dist/lib/generated/Entities/MJCompanyIntegrationEntityMap/mjcompanyintegrationentitymap.form.component.js +10 -10
  47. package/dist/lib/generated/Entities/MJCompanyIntegrationEntityMap/mjcompanyintegrationentitymap.form.component.js.map +1 -1
  48. package/dist/lib/generated/Entities/MJEntityPermission/mjentitypermission.form.component.js +11 -9
  49. package/dist/lib/generated/Entities/MJEntityPermission/mjentitypermission.form.component.js.map +1 -1
  50. package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.js +9 -9
  51. package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.js.map +1 -1
  52. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js +23 -21
  53. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js.map +1 -1
  54. package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js +9 -7
  55. package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js.map +1 -1
  56. package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.d.ts +10 -0
  57. package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.d.ts.map +1 -0
  58. package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.js +85 -0
  59. package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.js.map +1 -0
  60. package/dist/lib/generated/Entities/MJResourcePermission/mjresourcepermission.form.component.d.ts.map +1 -1
  61. package/dist/lib/generated/Entities/MJResourcePermission/mjresourcepermission.form.component.js +21 -12
  62. package/dist/lib/generated/Entities/MJResourcePermission/mjresourcepermission.form.component.js.map +1 -1
  63. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js +5 -5
  64. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js.map +1 -1
  65. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js +21 -21
  66. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js.map +1 -1
  67. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  68. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +201 -183
  69. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  70. package/dist/lib/generated/generated-forms.module.d.ts +97 -96
  71. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  72. package/dist/lib/generated/generated-forms.module.js +36 -33
  73. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  74. package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
  75. package/dist/lib/shared/components/template-editor.component.js +14 -8
  76. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  77. package/package.json +34 -34
@@ -72,114 +72,292 @@ function MJActionExecutionLogFormComponentExtended_ng_template_34_Template(rf, c
72
72
  i0.ɵɵtext(1, " Execution Details ");
73
73
  } }
74
74
  function MJActionExecutionLogFormComponentExtended_Conditional_68_ng_template_1_Template(rf, ctx) { if (rf & 1) {
75
- i0.ɵɵelement(0, "i", 37);
76
- i0.ɵɵtext(1, " Input Parameters ");
75
+ i0.ɵɵelement(0, "i", 53);
76
+ i0.ɵɵtext(1, " Parameters ");
77
+ i0.ɵɵelementStart(2, "span", 54);
78
+ i0.ɵɵtext(3);
79
+ i0.ɵɵelementEnd();
80
+ } if (rf & 2) {
81
+ const ctx_r0 = i0.ɵɵnextContext(2);
82
+ i0.ɵɵadvance(3);
83
+ i0.ɵɵtextInterpolate(ctx_r0.paramCounts.All);
77
84
  } }
78
- function MJActionExecutionLogFormComponentExtended_Conditional_68_Template(rf, ctx) { if (rf & 1) {
79
- const _r4 = i0.ɵɵgetCurrentView();
80
- i0.ɵɵelementStart(0, "mj-accordion-panel", 22);
81
- i0.ɵɵtemplate(1, MJActionExecutionLogFormComponentExtended_Conditional_68_ng_template_1_Template, 2, 0, "ng-template", 23);
82
- i0.ɵɵelementStart(2, "div", 31)(3, "div", 32)(4, "span", 33);
83
- i0.ɵɵtext(5, "JSON (Input Parameters Only)");
85
+ function MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_28_Template(rf, ctx) { if (rf & 1) {
86
+ const _r5 = i0.ɵɵgetCurrentView();
87
+ i0.ɵɵelementStart(0, "button", 55);
88
+ i0.ɵɵlistener("click", function MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_28_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.searchText = ""); });
89
+ i0.ɵɵelement(1, "i", 56);
84
90
  i0.ɵɵelementEnd();
85
- i0.ɵɵelementStart(6, "button", 34);
86
- i0.ɵɵlistener("click", function MJActionExecutionLogFormComponentExtended_Conditional_68_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.copyToClipboard(ctx_r0.formattedInputParams)); });
87
- i0.ɵɵelement(7, "i", 35);
91
+ } }
92
+ function MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_32_Template(rf, ctx) { if (rf & 1) {
93
+ i0.ɵɵelement(0, "i", 13);
94
+ } if (rf & 2) {
95
+ const ctx_r0 = i0.ɵɵnextContext(2);
96
+ i0.ɵɵproperty("ngClass", ctx_r0.sortDir === "asc" ? "fa-arrow-down-short-wide" : "fa-arrow-up-wide-short");
97
+ } }
98
+ function MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_35_Template(rf, ctx) { if (rf & 1) {
99
+ i0.ɵɵelement(0, "i", 13);
100
+ } if (rf & 2) {
101
+ const ctx_r0 = i0.ɵɵnextContext(2);
102
+ i0.ɵɵproperty("ngClass", ctx_r0.sortDir === "asc" ? "fa-arrow-down-a-z" : "fa-arrow-up-z-a");
103
+ } }
104
+ function MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_39_Template(rf, ctx) { if (rf & 1) {
105
+ const _r6 = i0.ɵɵgetCurrentView();
106
+ i0.ɵɵelementStart(0, "div", 52)(1, "div", 57)(2, "span", 58);
107
+ i0.ɵɵtext(3, "Raw JSON");
108
+ i0.ɵɵelementEnd();
109
+ i0.ɵɵelementStart(4, "button", 59);
110
+ i0.ɵɵlistener("click", function MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_39_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.copyToClipboard(ctx_r0.formattedParams)); });
111
+ i0.ɵɵelement(5, "i", 60);
112
+ i0.ɵɵelementEnd()();
113
+ i0.ɵɵelementStart(6, "mj-code-editor", 61);
114
+ i0.ɵɵtwoWayListener("ngModelChange", function MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_39_Template_mj_code_editor_ngModelChange_6_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.formattedParams, $event) || (ctx_r0.formattedParams = $event); return i0.ɵɵresetView($event); });
88
115
  i0.ɵɵelementEnd()();
89
- i0.ɵɵelementStart(8, "mj-code-editor", 36);
90
- i0.ɵɵtwoWayListener("ngModelChange", function MJActionExecutionLogFormComponentExtended_Conditional_68_Template_mj_code_editor_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.formattedInputParams, $event) || (ctx_r0.formattedInputParams = $event); return i0.ɵɵresetView($event); });
91
- i0.ɵɵelementEnd()()();
92
116
  } if (rf & 2) {
93
- const ctx_r0 = i0.ɵɵnextContext();
94
- i0.ɵɵproperty("Expanded", ctx_r0.expandedSections.inputParams);
95
- i0.ɵɵadvance(8);
96
- i0.ɵɵtwoWayProperty("ngModel", ctx_r0.formattedInputParams);
117
+ const ctx_r0 = i0.ɵɵnextContext(2);
118
+ i0.ɵɵadvance(6);
119
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r0.formattedParams);
97
120
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
98
121
  } }
99
- function MJActionExecutionLogFormComponentExtended_Conditional_69_ng_template_1_Template(rf, ctx) { if (rf & 1) {
122
+ function MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Conditional_0_Template(rf, ctx) { if (rf & 1) {
123
+ const _r7 = i0.ɵɵgetCurrentView();
124
+ i0.ɵɵelementStart(0, "div", 62);
125
+ i0.ɵɵelement(1, "i", 64);
126
+ i0.ɵɵelementStart(2, "p");
127
+ i0.ɵɵtext(3, "No parameters match the current filter.");
128
+ i0.ɵɵelementEnd();
129
+ i0.ɵɵelementStart(4, "button", 65);
130
+ i0.ɵɵlistener("click", function MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Conditional_0_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.clearFilters()); });
131
+ i0.ɵɵtext(5, " Clear filters ");
132
+ i0.ɵɵelementEnd()();
133
+ } }
134
+ function MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Conditional_1_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
135
+ i0.ɵɵelement(0, "i", 37);
136
+ } }
137
+ function MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Conditional_1_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
138
+ i0.ɵɵelement(0, "i", 41);
139
+ } }
140
+ function MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Conditional_1_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
100
141
  i0.ɵɵelement(0, "i", 39);
101
- i0.ɵɵtext(1, " Output Parameters ");
102
142
  } }
103
- function MJActionExecutionLogFormComponentExtended_Conditional_69_Template(rf, ctx) { if (rf & 1) {
104
- const _r5 = i0.ɵɵgetCurrentView();
105
- i0.ɵɵelementStart(0, "mj-accordion-panel", 22);
106
- i0.ɵɵtemplate(1, MJActionExecutionLogFormComponentExtended_Conditional_69_ng_template_1_Template, 2, 0, "ng-template", 23);
107
- i0.ɵɵelementStart(2, "div", 31)(3, "div", 32)(4, "span", 33);
108
- i0.ɵɵtext(5, "JSON (Output Parameters Only)");
143
+ function MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Conditional_1_For_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
144
+ const _r9 = i0.ɵɵgetCurrentView();
145
+ i0.ɵɵelementStart(0, "button", 77);
146
+ i0.ɵɵlistener("click", function MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Conditional_1_For_2_Conditional_14_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const p_r10 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.toggleExpanded(p_r10)); });
147
+ i0.ɵɵelement(1, "i", 13);
109
148
  i0.ɵɵelementEnd();
110
- i0.ɵɵelementStart(6, "button", 34);
111
- i0.ɵɵlistener("click", function MJActionExecutionLogFormComponentExtended_Conditional_69_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.copyToClipboard(ctx_r0.formattedOutputParams)); });
112
- i0.ɵɵelement(7, "i", 35);
149
+ } if (rf & 2) {
150
+ const p_r10 = i0.ɵɵnextContext().$implicit;
151
+ i0.ɵɵclassProp("is-expanded", p_r10.Expanded);
152
+ i0.ɵɵproperty("title", p_r10.Expanded ? "Collapse" : "Expand");
153
+ i0.ɵɵadvance();
154
+ i0.ɵɵproperty("ngClass", p_r10.Expanded ? "fa-chevron-up" : "fa-chevron-down");
155
+ } }
156
+ function MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Conditional_1_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
157
+ const _r11 = i0.ɵɵgetCurrentView();
158
+ i0.ɵɵelementStart(0, "div", 76)(1, "mj-code-editor", 78);
159
+ i0.ɵɵtwoWayListener("ngModelChange", function MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Conditional_1_For_2_Conditional_19_Template_mj_code_editor_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r11); const p_r10 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(p_r10.FormattedValue, $event) || (p_r10.FormattedValue = $event); return i0.ɵɵresetView($event); });
113
160
  i0.ɵɵelementEnd()();
114
- i0.ɵɵelementStart(8, "mj-code-editor", 38);
115
- i0.ɵɵtwoWayListener("ngModelChange", function MJActionExecutionLogFormComponentExtended_Conditional_69_Template_mj_code_editor_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.formattedOutputParams, $event) || (ctx_r0.formattedOutputParams = $event); return i0.ɵɵresetView($event); });
161
+ } if (rf & 2) {
162
+ const p_r10 = i0.ɵɵnextContext().$implicit;
163
+ i0.ɵɵadvance();
164
+ i0.ɵɵtwoWayProperty("ngModel", p_r10.FormattedValue);
165
+ i0.ɵɵproperty("name", "param-" + p_r10.Name)("readonly", true)("language", "json")("lineWrapping", true);
166
+ } }
167
+ function MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
168
+ const _r8 = i0.ɵɵgetCurrentView();
169
+ i0.ɵɵelementStart(0, "li", 66)(1, "div", 67)(2, "span", 68);
170
+ i0.ɵɵconditionalCreate(3, MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Conditional_1_For_2_Conditional_3_Template, 1, 0, "i", 37)(4, MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Conditional_1_For_2_Conditional_4_Template, 1, 0, "i", 41)(5, MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Conditional_1_For_2_Conditional_5_Template, 1, 0, "i", 39);
171
+ i0.ɵɵtext(6);
172
+ i0.ɵɵelementEnd();
173
+ i0.ɵɵelementStart(7, "div", 69)(8, "span", 70);
174
+ i0.ɵɵtext(9);
175
+ i0.ɵɵelementEnd();
176
+ i0.ɵɵelementStart(10, "span", 71);
177
+ i0.ɵɵelement(11, "i", 13);
178
+ i0.ɵɵtext(12);
179
+ i0.ɵɵelementEnd()();
180
+ i0.ɵɵelementStart(13, "div", 72);
181
+ i0.ɵɵconditionalCreate(14, MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Conditional_1_For_2_Conditional_14_Template, 2, 4, "button", 73);
182
+ i0.ɵɵelementStart(15, "button", 74);
183
+ i0.ɵɵlistener("click", function MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Conditional_1_For_2_Template_button_click_15_listener() { const p_r10 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.copyParamValue(p_r10)); });
184
+ i0.ɵɵelement(16, "i", 60);
116
185
  i0.ɵɵelementEnd()()();
186
+ i0.ɵɵelementStart(17, "div", 75);
187
+ i0.ɵɵtext(18);
188
+ i0.ɵɵelementEnd();
189
+ i0.ɵɵconditionalCreate(19, MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Conditional_1_For_2_Conditional_19_Template, 2, 5, "div", 76);
190
+ i0.ɵɵelementEnd();
117
191
  } if (rf & 2) {
118
- const ctx_r0 = i0.ɵɵnextContext();
119
- i0.ɵɵproperty("Expanded", ctx_r0.expandedSections.outputParams);
120
- i0.ɵɵadvance(8);
121
- i0.ɵɵtwoWayProperty("ngModel", ctx_r0.formattedOutputParams);
122
- i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
192
+ const p_r10 = ctx.$implicit;
193
+ const ctx_r0 = i0.ɵɵnextContext(4);
194
+ i0.ɵɵattribute("data-type", p_r10.Type);
195
+ i0.ɵɵadvance(2);
196
+ i0.ɵɵattribute("data-type", p_r10.Type);
197
+ i0.ɵɵadvance();
198
+ i0.ɵɵconditional(p_r10.Type === "Input" ? 3 : p_r10.Type === "Output" ? 4 : 5);
199
+ i0.ɵɵadvance(3);
200
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.getTypeLabel(p_r10.Type), " ");
201
+ i0.ɵɵadvance(3);
202
+ i0.ɵɵtextInterpolate(p_r10.Name);
203
+ i0.ɵɵadvance();
204
+ i0.ɵɵattribute("data-kind", p_r10.ValueKind);
205
+ i0.ɵɵadvance();
206
+ i0.ɵɵproperty("ngClass", ctx_r0.getValueKindIcon(p_r10.ValueKind));
207
+ i0.ɵɵadvance();
208
+ i0.ɵɵtextInterpolate1(" ", p_r10.ValueKind, " ");
209
+ i0.ɵɵadvance(2);
210
+ i0.ɵɵconditional(p_r10.IsExpandable ? 14 : -1);
211
+ i0.ɵɵadvance(3);
212
+ i0.ɵɵattribute("data-kind", p_r10.ValueKind);
213
+ i0.ɵɵadvance();
214
+ i0.ɵɵtextInterpolate(p_r10.Preview);
215
+ i0.ɵɵadvance();
216
+ i0.ɵɵconditional(p_r10.IsExpandable && p_r10.Expanded ? 19 : -1);
123
217
  } }
124
- function MJActionExecutionLogFormComponentExtended_Conditional_70_ng_template_1_Template(rf, ctx) { if (rf & 1) {
125
- i0.ɵɵelement(0, "i", 41);
126
- i0.ɵɵtext(1, " Input+Output Parameters ");
218
+ function MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Conditional_1_Template(rf, ctx) { if (rf & 1) {
219
+ i0.ɵɵelementStart(0, "ul", 63);
220
+ i0.ɵɵrepeaterCreate(1, MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Conditional_1_For_2_Template, 20, 12, "li", 66, i0.ɵɵcomponentInstance().trackParam, true);
221
+ i0.ɵɵelementEnd();
222
+ } if (rf & 2) {
223
+ const ctx_r0 = i0.ɵɵnextContext(3);
224
+ i0.ɵɵadvance();
225
+ i0.ɵɵrepeater(ctx_r0.filteredParameters);
127
226
  } }
128
- function MJActionExecutionLogFormComponentExtended_Conditional_70_Template(rf, ctx) { if (rf & 1) {
129
- const _r6 = i0.ɵɵgetCurrentView();
227
+ function MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Template(rf, ctx) { if (rf & 1) {
228
+ i0.ɵɵconditionalCreate(0, MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Conditional_0_Template, 6, 0, "div", 62)(1, MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Conditional_1_Template, 3, 0, "ul", 63);
229
+ } if (rf & 2) {
230
+ const ctx_r0 = i0.ɵɵnextContext(2);
231
+ i0.ɵɵconditional(ctx_r0.filteredParameters.length === 0 ? 0 : 1);
232
+ } }
233
+ function MJActionExecutionLogFormComponentExtended_Conditional_68_Template(rf, ctx) { if (rf & 1) {
234
+ const _r4 = i0.ɵɵgetCurrentView();
130
235
  i0.ɵɵelementStart(0, "mj-accordion-panel", 22);
131
- i0.ɵɵtemplate(1, MJActionExecutionLogFormComponentExtended_Conditional_70_ng_template_1_Template, 2, 0, "ng-template", 23);
132
- i0.ɵɵelementStart(2, "div", 31)(3, "div", 32)(4, "span", 33);
133
- i0.ɵɵtext(5, "JSON (Input+Output Parameters)");
236
+ i0.ɵɵtemplate(1, MJActionExecutionLogFormComponentExtended_Conditional_68_ng_template_1_Template, 4, 1, "ng-template", 23);
237
+ i0.ɵɵelementStart(2, "div", 31)(3, "div", 32)(4, "div", 33)(5, "button", 34);
238
+ i0.ɵɵlistener("click", function MJActionExecutionLogFormComponentExtended_Conditional_68_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setTypeFilter("All")); });
239
+ i0.ɵɵtext(6, " All ");
240
+ i0.ɵɵelementStart(7, "span", 35);
241
+ i0.ɵɵtext(8);
242
+ i0.ɵɵelementEnd()();
243
+ i0.ɵɵelementStart(9, "button", 36);
244
+ i0.ɵɵlistener("click", function MJActionExecutionLogFormComponentExtended_Conditional_68_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setTypeFilter("Input")); });
245
+ i0.ɵɵelement(10, "i", 37);
246
+ i0.ɵɵtext(11, " Input ");
247
+ i0.ɵɵelementStart(12, "span", 35);
248
+ i0.ɵɵtext(13);
249
+ i0.ɵɵelementEnd()();
250
+ i0.ɵɵelementStart(14, "button", 38);
251
+ i0.ɵɵlistener("click", function MJActionExecutionLogFormComponentExtended_Conditional_68_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setTypeFilter("Both")); });
252
+ i0.ɵɵelement(15, "i", 39);
253
+ i0.ɵɵtext(16, " In/Out ");
254
+ i0.ɵɵelementStart(17, "span", 35);
255
+ i0.ɵɵtext(18);
256
+ i0.ɵɵelementEnd()();
257
+ i0.ɵɵelementStart(19, "button", 40);
258
+ i0.ɵɵlistener("click", function MJActionExecutionLogFormComponentExtended_Conditional_68_Template_button_click_19_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setTypeFilter("Output")); });
259
+ i0.ɵɵelement(20, "i", 41);
260
+ i0.ɵɵtext(21, " Output ");
261
+ i0.ɵɵelementStart(22, "span", 35);
262
+ i0.ɵɵtext(23);
263
+ i0.ɵɵelementEnd()()();
264
+ i0.ɵɵelementStart(24, "div", 42)(25, "div", 43);
265
+ i0.ɵɵelement(26, "i", 44);
266
+ i0.ɵɵelementStart(27, "input", 45);
267
+ i0.ɵɵtwoWayListener("ngModelChange", function MJActionExecutionLogFormComponentExtended_Conditional_68_Template_input_ngModelChange_27_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.searchText, $event) || (ctx_r0.searchText = $event); return i0.ɵɵresetView($event); });
268
+ i0.ɵɵelementEnd();
269
+ i0.ɵɵconditionalCreate(28, MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_28_Template, 2, 0, "button", 46);
134
270
  i0.ɵɵelementEnd();
135
- i0.ɵɵelementStart(6, "button", 34);
136
- i0.ɵɵlistener("click", function MJActionExecutionLogFormComponentExtended_Conditional_70_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.copyToClipboard(ctx_r0.formattedBothParams)); });
137
- i0.ɵɵelement(7, "i", 35);
271
+ i0.ɵɵelementStart(29, "div", 47)(30, "button", 48);
272
+ i0.ɵɵlistener("click", function MJActionExecutionLogFormComponentExtended_Conditional_68_Template_button_click_30_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.toggleSort("type")); });
273
+ i0.ɵɵtext(31, " Type ");
274
+ i0.ɵɵconditionalCreate(32, MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_32_Template, 1, 1, "i", 13);
275
+ i0.ɵɵelementEnd();
276
+ i0.ɵɵelementStart(33, "button", 49);
277
+ i0.ɵɵlistener("click", function MJActionExecutionLogFormComponentExtended_Conditional_68_Template_button_click_33_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.toggleSort("name")); });
278
+ i0.ɵɵtext(34, " Name ");
279
+ i0.ɵɵconditionalCreate(35, MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_35_Template, 1, 1, "i", 13);
138
280
  i0.ɵɵelementEnd()();
139
- i0.ɵɵelementStart(8, "mj-code-editor", 40);
140
- i0.ɵɵtwoWayListener("ngModelChange", function MJActionExecutionLogFormComponentExtended_Conditional_70_Template_mj_code_editor_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.formattedBothParams, $event) || (ctx_r0.formattedBothParams = $event); return i0.ɵɵresetView($event); });
281
+ i0.ɵɵelementStart(36, "button", 50);
282
+ i0.ɵɵlistener("click", function MJActionExecutionLogFormComponentExtended_Conditional_68_Template_button_click_36_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.toggleRawJson()); });
283
+ i0.ɵɵelement(37, "i", 51);
284
+ i0.ɵɵtext(38, " Raw ");
141
285
  i0.ɵɵelementEnd()()();
286
+ i0.ɵɵconditionalCreate(39, MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_39_Template, 7, 4, "div", 52)(40, MJActionExecutionLogFormComponentExtended_Conditional_68_Conditional_40_Template, 2, 1);
287
+ i0.ɵɵelementEnd()();
142
288
  } if (rf & 2) {
143
289
  const ctx_r0 = i0.ɵɵnextContext();
144
- i0.ɵɵproperty("Expanded", ctx_r0.expandedSections.bothParams);
145
- i0.ɵɵadvance(8);
146
- i0.ɵɵtwoWayProperty("ngModel", ctx_r0.formattedBothParams);
147
- i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
290
+ i0.ɵɵproperty("Expanded", true);
291
+ i0.ɵɵadvance(5);
292
+ i0.ɵɵclassProp("active", ctx_r0.typeFilter === "All");
293
+ i0.ɵɵadvance(3);
294
+ i0.ɵɵtextInterpolate(ctx_r0.paramCounts.All);
295
+ i0.ɵɵadvance();
296
+ i0.ɵɵclassProp("active", ctx_r0.typeFilter === "Input");
297
+ i0.ɵɵproperty("disabled", ctx_r0.paramCounts.Input === 0);
298
+ i0.ɵɵadvance(4);
299
+ i0.ɵɵtextInterpolate(ctx_r0.paramCounts.Input);
300
+ i0.ɵɵadvance();
301
+ i0.ɵɵclassProp("active", ctx_r0.typeFilter === "Both");
302
+ i0.ɵɵproperty("disabled", ctx_r0.paramCounts.Both === 0);
303
+ i0.ɵɵadvance(4);
304
+ i0.ɵɵtextInterpolate(ctx_r0.paramCounts.Both);
305
+ i0.ɵɵadvance();
306
+ i0.ɵɵclassProp("active", ctx_r0.typeFilter === "Output");
307
+ i0.ɵɵproperty("disabled", ctx_r0.paramCounts.Output === 0);
308
+ i0.ɵɵadvance(4);
309
+ i0.ɵɵtextInterpolate(ctx_r0.paramCounts.Output);
310
+ i0.ɵɵadvance(4);
311
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r0.searchText);
312
+ i0.ɵɵadvance();
313
+ i0.ɵɵconditional(ctx_r0.searchText ? 28 : -1);
314
+ i0.ɵɵadvance(2);
315
+ i0.ɵɵclassProp("active", ctx_r0.sortKey === "type");
316
+ i0.ɵɵadvance(2);
317
+ i0.ɵɵconditional(ctx_r0.sortKey === "type" ? 32 : -1);
318
+ i0.ɵɵadvance();
319
+ i0.ɵɵclassProp("active", ctx_r0.sortKey === "name");
320
+ i0.ɵɵadvance(2);
321
+ i0.ɵɵconditional(ctx_r0.sortKey === "name" ? 35 : -1);
322
+ i0.ɵɵadvance();
323
+ i0.ɵɵclassProp("active", ctx_r0.showRawJson);
324
+ i0.ɵɵadvance(3);
325
+ i0.ɵɵconditional(ctx_r0.showRawJson ? 39 : 40);
148
326
  } }
149
- function MJActionExecutionLogFormComponentExtended_Conditional_71_ng_template_1_Template(rf, ctx) { if (rf & 1) {
150
- i0.ɵɵelement(0, "i", 43);
327
+ function MJActionExecutionLogFormComponentExtended_Conditional_69_ng_template_1_Template(rf, ctx) { if (rf & 1) {
328
+ i0.ɵɵelement(0, "i", 81);
151
329
  i0.ɵɵtext(1, " Output Message ");
152
330
  } }
153
- function MJActionExecutionLogFormComponentExtended_Conditional_71_Template(rf, ctx) { if (rf & 1) {
154
- const _r7 = i0.ɵɵgetCurrentView();
331
+ function MJActionExecutionLogFormComponentExtended_Conditional_69_Template(rf, ctx) { if (rf & 1) {
332
+ const _r12 = i0.ɵɵgetCurrentView();
155
333
  i0.ɵɵelementStart(0, "mj-accordion-panel", 22);
156
- i0.ɵɵtemplate(1, MJActionExecutionLogFormComponentExtended_Conditional_71_ng_template_1_Template, 2, 0, "ng-template", 23);
157
- i0.ɵɵelementStart(2, "div", 31)(3, "div", 32)(4, "span", 33);
334
+ i0.ɵɵtemplate(1, MJActionExecutionLogFormComponentExtended_Conditional_69_ng_template_1_Template, 2, 0, "ng-template", 23);
335
+ i0.ɵɵelementStart(2, "div", 79)(3, "div", 57)(4, "span", 58);
158
336
  i0.ɵɵtext(5, "JSON");
159
337
  i0.ɵɵelementEnd();
160
- i0.ɵɵelementStart(6, "button", 34);
161
- i0.ɵɵlistener("click", function MJActionExecutionLogFormComponentExtended_Conditional_71_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.copyToClipboard(ctx_r0.formattedMessage)); });
162
- i0.ɵɵelement(7, "i", 35);
338
+ i0.ɵɵelementStart(6, "button", 59);
339
+ i0.ɵɵlistener("click", function MJActionExecutionLogFormComponentExtended_Conditional_69_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.copyToClipboard(ctx_r0.formattedMessage)); });
340
+ i0.ɵɵelement(7, "i", 60);
163
341
  i0.ɵɵelementEnd()();
164
- i0.ɵɵelementStart(8, "mj-code-editor", 42);
165
- i0.ɵɵtwoWayListener("ngModelChange", function MJActionExecutionLogFormComponentExtended_Conditional_71_Template_mj_code_editor_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.formattedMessage, $event) || (ctx_r0.formattedMessage = $event); return i0.ɵɵresetView($event); });
342
+ i0.ɵɵelementStart(8, "mj-code-editor", 80);
343
+ i0.ɵɵtwoWayListener("ngModelChange", function MJActionExecutionLogFormComponentExtended_Conditional_69_Template_mj_code_editor_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.formattedMessage, $event) || (ctx_r0.formattedMessage = $event); return i0.ɵɵresetView($event); });
166
344
  i0.ɵɵelementEnd()()();
167
345
  } if (rf & 2) {
168
346
  const ctx_r0 = i0.ɵɵnextContext();
169
- i0.ɵɵproperty("Expanded", ctx_r0.expandedSections.output);
347
+ i0.ɵɵproperty("Expanded", true);
170
348
  i0.ɵɵadvance(8);
171
349
  i0.ɵɵtwoWayProperty("ngModel", ctx_r0.formattedMessage);
172
350
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
173
351
  } }
174
- function MJActionExecutionLogFormComponentExtended_Conditional_72_ng_template_1_Template(rf, ctx) { if (rf & 1) {
175
- i0.ɵɵelement(0, "i", 46);
352
+ function MJActionExecutionLogFormComponentExtended_Conditional_70_ng_template_1_Template(rf, ctx) { if (rf & 1) {
353
+ i0.ɵɵelement(0, "i", 84);
176
354
  i0.ɵɵtext(1, " Execution Data ");
177
355
  } }
178
- function MJActionExecutionLogFormComponentExtended_Conditional_72_Template(rf, ctx) { if (rf & 1) {
356
+ function MJActionExecutionLogFormComponentExtended_Conditional_70_Template(rf, ctx) { if (rf & 1) {
179
357
  i0.ɵɵelementStart(0, "mj-accordion-panel", 22);
180
- i0.ɵɵtemplate(1, MJActionExecutionLogFormComponentExtended_Conditional_72_ng_template_1_Template, 2, 0, "ng-template", 23);
181
- i0.ɵɵelementStart(2, "div", 44);
182
- i0.ɵɵelement(3, "i", 45);
358
+ i0.ɵɵtemplate(1, MJActionExecutionLogFormComponentExtended_Conditional_70_ng_template_1_Template, 2, 0, "ng-template", 23);
359
+ i0.ɵɵelementStart(2, "div", 82);
360
+ i0.ɵɵelement(3, "i", 83);
183
361
  i0.ɵɵelementStart(4, "p");
184
362
  i0.ɵɵtext(5, "No execution data recorded");
185
363
  i0.ɵɵelementEnd()()();
@@ -192,29 +370,22 @@ let MJActionExecutionLogFormComponentExtended = class MJActionExecutionLogFormCo
192
370
  // Related entities
193
371
  this.action = null;
194
372
  this.user = null;
195
- // Parameter counts for visibility
196
- this.hasInputParams = false;
197
- this.hasOutputParams = false;
198
- this.hasBothParams = false;
199
373
  // Loading states
200
374
  this.isLoadingAction = false;
201
375
  this.isLoadingUser = false;
202
376
  // Formatted JSON fields
203
377
  this.formattedParams = '';
204
378
  this.formattedMessage = '';
205
- this.formattedInputParams = '';
206
- this.formattedOutputParams = '';
207
- this.formattedBothParams = '';
208
- // UI state
209
- this.expandedSections = {
210
- execution: true,
211
- input: true,
212
- output: true,
213
- inputParams: true,
214
- outputParams: true,
215
- bothParams: true,
216
- metadata: false
217
- };
379
+ // Unified parameter display
380
+ this.allParameters = [];
381
+ this.paramCounts = { All: 0, Input: 0, Output: 0, Both: 0 };
382
+ this.hasAnyParameters = false;
383
+ // Filter / sort / view state
384
+ this.typeFilter = 'All';
385
+ this.searchText = '';
386
+ this.sortKey = 'type';
387
+ this.sortDir = 'asc';
388
+ this.showRawJson = false;
218
389
  }
219
390
  async ngOnInit() {
220
391
  await super.ngOnInit();
@@ -277,9 +448,8 @@ let MJActionExecutionLogFormComponentExtended = class MJActionExecutionLogFormCo
277
448
  const parsed = JSON.parse(this.record.Params);
278
449
  const recursivelyParsed = ParseJSONRecursive(parsed, parseOptions);
279
450
  this.formattedParams = JSON.stringify(recursivelyParsed, null, 2);
280
- // Format parameter-specific views if params is an array of ActionParameter objects
281
451
  if (Array.isArray(recursivelyParsed)) {
282
- this.formatParameterSections(recursivelyParsed);
452
+ this.buildDisplayParameters(recursivelyParsed);
283
453
  }
284
454
  }
285
455
  catch (e) {
@@ -298,45 +468,164 @@ let MJActionExecutionLogFormComponentExtended = class MJActionExecutionLogFormCo
298
468
  }
299
469
  }
300
470
  }
301
- formatParameterSections(params) {
302
- // Reset visibility flags
303
- this.hasInputParams = false;
304
- this.hasOutputParams = false;
305
- this.hasBothParams = false;
306
- // Arrays to collect parameters by type
307
- const inputParams = [];
308
- const outputParams = [];
309
- const bothParams = [];
310
- // Sort parameters by type
311
- for (const param of params) {
312
- switch (param.Type) {
313
- case 'Input':
314
- inputParams.push(param);
315
- this.hasInputParams = true;
316
- break;
317
- case 'Output':
318
- outputParams.push(param);
319
- this.hasOutputParams = true;
320
- break;
321
- case 'Both':
322
- bothParams.push(param);
323
- this.hasBothParams = true;
324
- break;
471
+ /**
472
+ * Build the unified parameter display list once, so filtering/sorting can
473
+ * operate on a cheap, pre-computed structure.
474
+ */
475
+ buildDisplayParameters(params) {
476
+ this.paramCounts = { All: 0, Input: 0, Output: 0, Both: 0 };
477
+ this.allParameters = params
478
+ .filter((p) => p && typeof p.Name === 'string')
479
+ .map((p) => {
480
+ const valueKind = this.detectValueKind(p.Value);
481
+ const isExpandable = valueKind === 'array' || valueKind === 'object';
482
+ this.paramCounts.All += 1;
483
+ if (p.Type === 'Input' || p.Type === 'Output' || p.Type === 'Both') {
484
+ this.paramCounts[p.Type] += 1;
485
+ }
486
+ return {
487
+ Name: p.Name,
488
+ Value: p.Value,
489
+ Type: p.Type,
490
+ ValueKind: valueKind,
491
+ Preview: this.buildPreview(p.Value, valueKind),
492
+ IsExpandable: isExpandable,
493
+ Expanded: false,
494
+ FormattedValue: isExpandable ? JSON.stringify(p.Value, null, 2) : ''
495
+ };
496
+ });
497
+ this.hasAnyParameters = this.allParameters.length > 0;
498
+ }
499
+ detectValueKind(value) {
500
+ if (value === null)
501
+ return 'null';
502
+ if (value === undefined)
503
+ return 'undefined';
504
+ if (Array.isArray(value))
505
+ return 'array';
506
+ const t = typeof value;
507
+ if (t === 'string' || t === 'number' || t === 'boolean')
508
+ return t;
509
+ if (t === 'object')
510
+ return 'object';
511
+ return 'string';
512
+ }
513
+ /**
514
+ * Short inline preview for the row header. Objects/arrays get a compact
515
+ * one-liner; expansion reveals the full formatted JSON below.
516
+ */
517
+ buildPreview(value, kind) {
518
+ switch (kind) {
519
+ case 'null': return 'null';
520
+ case 'undefined': return 'undefined';
521
+ case 'boolean': return value ? 'true' : 'false';
522
+ case 'number': return String(value);
523
+ case 'string': {
524
+ const s = value;
525
+ return s.length > 160 ? `"${s.slice(0, 157)}…"` : `"${s}"`;
526
+ }
527
+ case 'array': {
528
+ const arr = value;
529
+ if (arr.length === 0)
530
+ return '[]';
531
+ if (arr.length <= 5 && arr.every((v) => v === null || typeof v !== 'object')) {
532
+ return `[${arr.map((v) => this.buildPreview(v, this.detectValueKind(v))).join(', ')}]`;
533
+ }
534
+ return `Array(${arr.length})`;
535
+ }
536
+ case 'object': {
537
+ const obj = value;
538
+ const keys = Object.keys(obj);
539
+ if (keys.length === 0)
540
+ return '{}';
541
+ const head = keys.slice(0, 3).join(', ');
542
+ return keys.length <= 3 ? `{ ${head} }` : `{ ${head}, …+${keys.length - 3} }`;
325
543
  }
326
544
  }
327
- // Format input parameters
328
- if (inputParams.length > 0) {
329
- this.formattedInputParams = JSON.stringify(inputParams, null, 2);
545
+ }
546
+ // --- Filter / sort / view helpers (invoked from template) ----------------
547
+ get filteredParameters() {
548
+ const needle = this.searchText.trim().toLowerCase();
549
+ let list = this.allParameters;
550
+ if (this.typeFilter !== 'All') {
551
+ list = list.filter((p) => p.Type === this.typeFilter);
330
552
  }
331
- // Format output parameters
332
- if (outputParams.length > 0) {
333
- this.formattedOutputParams = JSON.stringify(outputParams, null, 2);
553
+ if (needle) {
554
+ list = list.filter((p) => p.Name.toLowerCase().includes(needle) ||
555
+ (p.Preview && p.Preview.toLowerCase().includes(needle)));
334
556
  }
335
- // Format both parameters
336
- if (bothParams.length > 0) {
337
- this.formattedBothParams = JSON.stringify(bothParams, null, 2);
557
+ const typeOrder = { Input: 0, Both: 1, Output: 2 };
558
+ const dirMult = this.sortDir === 'asc' ? 1 : -1;
559
+ return [...list].sort((a, b) => {
560
+ if (this.sortKey === 'name') {
561
+ return dirMult * a.Name.localeCompare(b.Name, undefined, { sensitivity: 'base' });
562
+ }
563
+ const typeCmp = typeOrder[a.Type] - typeOrder[b.Type];
564
+ if (typeCmp !== 0)
565
+ return dirMult * typeCmp;
566
+ return a.Name.localeCompare(b.Name, undefined, { sensitivity: 'base' });
567
+ });
568
+ }
569
+ setTypeFilter(filter) {
570
+ this.typeFilter = filter;
571
+ }
572
+ toggleSort(key) {
573
+ if (this.sortKey === key) {
574
+ this.sortDir = this.sortDir === 'asc' ? 'desc' : 'asc';
575
+ }
576
+ else {
577
+ this.sortKey = key;
578
+ this.sortDir = 'asc';
579
+ }
580
+ }
581
+ toggleExpanded(param) {
582
+ if (!param.IsExpandable)
583
+ return;
584
+ param.Expanded = !param.Expanded;
585
+ }
586
+ toggleRawJson() {
587
+ this.showRawJson = !this.showRawJson;
588
+ }
589
+ clearFilters() {
590
+ this.typeFilter = 'All';
591
+ this.searchText = '';
592
+ }
593
+ trackParam(_index, p) {
594
+ return `${p.Type}::${p.Name}`;
595
+ }
596
+ copyParamValue(param) {
597
+ const text = param.IsExpandable
598
+ ? param.FormattedValue
599
+ : this.formatScalarForCopy(param.Value);
600
+ void this.copyToClipboard(text);
601
+ }
602
+ formatScalarForCopy(value) {
603
+ if (value === null)
604
+ return 'null';
605
+ if (value === undefined)
606
+ return '';
607
+ if (typeof value === 'string')
608
+ return value;
609
+ return String(value);
610
+ }
611
+ /**
612
+ * Returns the icon class for a value kind — rendered to the left of each
613
+ * preview so object/array/scalar rows are visually distinct at a glance.
614
+ */
615
+ getValueKindIcon(kind) {
616
+ switch (kind) {
617
+ case 'string': return 'fa-quote-right';
618
+ case 'number': return 'fa-hashtag';
619
+ case 'boolean': return 'fa-toggle-on';
620
+ case 'array': return 'fa-list-ol';
621
+ case 'object': return 'fa-code';
622
+ case 'null': return 'fa-circle-minus';
623
+ case 'undefined': return 'fa-ban';
338
624
  }
339
625
  }
626
+ getTypeLabel(type) {
627
+ return type === 'Both' ? 'In/Out' : type;
628
+ }
340
629
  // Navigation
341
630
  navigateToEntity(entityName, recordId) {
342
631
  if (!recordId)
@@ -421,7 +710,7 @@ let MJActionExecutionLogFormComponentExtended = class MJActionExecutionLogFormCo
421
710
  }
422
711
  }
423
712
  static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJActionExecutionLogFormComponentExtended_BaseFactory; return function MJActionExecutionLogFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJActionExecutionLogFormComponentExtended_BaseFactory || (ɵMJActionExecutionLogFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJActionExecutionLogFormComponentExtended)))(__ngFactoryType__ || MJActionExecutionLogFormComponentExtended); }; })(); }
424
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJActionExecutionLogFormComponentExtended, selectors: [["mj-action-execution-log-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 73, vars: 30, consts: [[1, "record-form-container", "action-execution-log-form", 2, "height", "100%", "display", "flex", "flex-direction", "column"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [1, "header"], [1, "header-content"], [1, "header-left"], [1, "icon-wrapper"], [1, "fas", "fa-terminal"], [1, "header-info"], [1, "meta-info"], [1, "action-name"], [1, "log-id"], [1, "header-right"], [1, "status-badge"], [1, "fas", 3, "ngClass"], [1, "execution-time"], [1, "fas", "fa-clock"], [1, "header-stats"], [1, "stat"], [1, "label"], [1, "value"], [1, "content-area"], [1, "accordion-container"], [3, "Expanded"], ["mjAccordionTitle", ""], [1, "details-grid"], [1, "detail-item"], [1, "monospace"], [1, "detail-value"], [1, "btn-link", 3, "click"], [1, "fas", "fa-external-link-alt"], [1, "fas", "fa-info-circle"], [1, "json-viewer"], [1, "json-toolbar"], [1, "json-label"], ["title", "Copy JSON", 1, "btn-icon", 3, "click"], [1, "fas", "fa-copy"], ["name", "formattedInputParams", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fas", "fa-sign-in-alt"], ["name", "formattedOutputParams", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fas", "fa-sign-out-alt"], ["name", "formattedBothParams", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fas", "fa-exchange-alt"], ["name", "formattedMessage", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fas", "fa-comment-alt"], [1, "empty-state"], [1, "fas", "fa-inbox"], [1, "fas", "fa-database"]], template: function MJActionExecutionLogFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
713
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJActionExecutionLogFormComponentExtended, selectors: [["mj-action-execution-log-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 71, vars: 28, consts: [[1, "record-form-container", "action-execution-log-form", 2, "height", "100%", "display", "flex", "flex-direction", "column"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [1, "header"], [1, "header-content"], [1, "header-left"], [1, "icon-wrapper"], [1, "fas", "fa-terminal"], [1, "header-info"], [1, "meta-info"], [1, "action-name"], [1, "log-id"], [1, "header-right"], [1, "status-badge"], [1, "fas", 3, "ngClass"], [1, "execution-time"], [1, "fas", "fa-clock"], [1, "header-stats"], [1, "stat"], [1, "label"], [1, "value"], [1, "content-area"], [1, "accordion-container"], [3, "Expanded"], ["mjAccordionTitle", ""], [1, "details-grid"], [1, "detail-item"], [1, "monospace"], [1, "detail-value"], [1, "btn-link", 3, "click"], [1, "fas", "fa-external-link-alt"], [1, "fas", "fa-info-circle"], [1, "params-panel"], [1, "params-toolbar"], [1, "filter-chips"], ["type", "button", 1, "chip", 3, "click"], [1, "chip-count"], ["type", "button", 1, "chip", "chip-input", 3, "click", "disabled"], [1, "fas", "fa-sign-in-alt"], ["type", "button", 1, "chip", "chip-both", 3, "click", "disabled"], [1, "fas", "fa-exchange-alt"], ["type", "button", 1, "chip", "chip-output", 3, "click", "disabled"], [1, "fas", "fa-sign-out-alt"], [1, "toolbar-right"], [1, "search-wrapper"], [1, "fas", "fa-search", "search-icon"], ["type", "text", "placeholder", "Search name or value\u2026", "name", "paramSearch", 1, "mj-input", "params-search", 3, "ngModelChange", "ngModel"], ["type", "button", "title", "Clear search", 1, "search-clear"], ["role", "group", "aria-label", "Sort parameters", 1, "sort-group"], ["type", "button", "title", "Sort by type", 1, "sort-btn", 3, "click"], ["type", "button", "title", "Sort by name", 1, "sort-btn", 3, "click"], ["type", "button", "title", "Toggle raw JSON view", 1, "raw-toggle", 3, "click"], [1, "fas", "fa-code"], [1, "json-viewer", "raw-json-viewer"], [1, "fas", "fa-sliders-h"], [1, "param-count-pill"], ["type", "button", "title", "Clear search", 1, "search-clear", 3, "click"], [1, "fas", "fa-times"], [1, "json-toolbar"], [1, "json-label"], ["title", "Copy JSON", 1, "btn-icon", 3, "click"], [1, "fas", "fa-copy"], ["name", "formattedParamsRaw", 2, "height", "360px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "empty-filter"], [1, "params-list"], [1, "fas", "fa-filter-circle-xmark"], ["type", "button", 1, "btn-link", 3, "click"], [1, "param-row"], [1, "param-header"], [1, "type-badge"], [1, "param-name-wrap"], [1, "param-name"], [1, "value-kind-chip"], [1, "param-actions"], ["type", "button", 1, "btn-icon", "param-expand", 3, "is-expanded", "title"], ["type", "button", "title", "Copy value", 1, "btn-icon", 3, "click"], [1, "param-preview"], [1, "param-expanded"], ["type", "button", 1, "btn-icon", "param-expand", 3, "click", "title"], [2, "height", "240px", "width", "100%", 3, "ngModelChange", "ngModel", "name", "readonly", "language", "lineWrapping"], [1, "json-viewer"], ["name", "formattedMessage", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fas", "fa-comment-alt"], [1, "empty-state"], [1, "fas", "fa-inbox"], [1, "fas", "fa-database"]], template: function MJActionExecutionLogFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
425
714
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3)(4, "div", 4)(5, "div", 5);
426
715
  i0.ɵɵelement(6, "i", 6);
427
716
  i0.ɵɵelementEnd();
@@ -492,11 +781,9 @@ let MJActionExecutionLogFormComponentExtended = class MJActionExecutionLogFormCo
492
781
  i0.ɵɵelementStart(66, "span");
493
782
  i0.ɵɵtext(67);
494
783
  i0.ɵɵelementEnd()()()();
495
- i0.ɵɵconditionalCreate(68, MJActionExecutionLogFormComponentExtended_Conditional_68_Template, 9, 5, "mj-accordion-panel", 22);
784
+ i0.ɵɵconditionalCreate(68, MJActionExecutionLogFormComponentExtended_Conditional_68_Template, 41, 27, "mj-accordion-panel", 22);
496
785
  i0.ɵɵconditionalCreate(69, MJActionExecutionLogFormComponentExtended_Conditional_69_Template, 9, 5, "mj-accordion-panel", 22);
497
- i0.ɵɵconditionalCreate(70, MJActionExecutionLogFormComponentExtended_Conditional_70_Template, 9, 5, "mj-accordion-panel", 22);
498
- i0.ɵɵconditionalCreate(71, MJActionExecutionLogFormComponentExtended_Conditional_71_Template, 9, 5, "mj-accordion-panel", 22);
499
- i0.ɵɵconditionalCreate(72, MJActionExecutionLogFormComponentExtended_Conditional_72_Template, 6, 1, "mj-accordion-panel", 22);
786
+ i0.ɵɵconditionalCreate(70, MJActionExecutionLogFormComponentExtended_Conditional_70_Template, 6, 1, "mj-accordion-panel", 22);
500
787
  i0.ɵɵelementEnd()()()();
501
788
  } if (rf & 2) {
502
789
  i0.ɵɵadvance(11);
@@ -512,7 +799,7 @@ let MJActionExecutionLogFormComponentExtended = class MJActionExecutionLogFormCo
512
799
  i0.ɵɵadvance(3);
513
800
  i0.ɵɵtextInterpolate1(" ", ctx.formatDuration(ctx.getExecutionDuration()), " ");
514
801
  i0.ɵɵadvance(6);
515
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(27, 27, ctx.record.StartedAt, "short"));
802
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(27, 25, ctx.record.StartedAt, "short"));
516
803
  i0.ɵɵadvance(2);
517
804
  i0.ɵɵconditional(ctx.record.EndedAt ? 28 : -1);
518
805
  i0.ɵɵadvance();
@@ -539,16 +826,12 @@ let MJActionExecutionLogFormComponentExtended = class MJActionExecutionLogFormCo
539
826
  i0.ɵɵadvance(5);
540
827
  i0.ɵɵtextInterpolate(ctx.record.RetentionPeriod ? ctx.record.RetentionPeriod + " days" : "Indefinite");
541
828
  i0.ɵɵadvance();
542
- i0.ɵɵconditional(ctx.hasInputParams && ctx.formattedInputParams ? 68 : -1);
543
- i0.ɵɵadvance();
544
- i0.ɵɵconditional(ctx.hasOutputParams && ctx.formattedOutputParams ? 69 : -1);
545
- i0.ɵɵadvance();
546
- i0.ɵɵconditional(ctx.hasBothParams && ctx.formattedBothParams ? 70 : -1);
829
+ i0.ɵɵconditional(ctx.hasAnyParameters ? 68 : -1);
547
830
  i0.ɵɵadvance();
548
- i0.ɵɵconditional(ctx.record.Message ? 71 : -1);
831
+ i0.ɵɵconditional(ctx.record.Message ? 69 : -1);
549
832
  i0.ɵɵadvance();
550
- i0.ɵɵconditional(!ctx.record.Params && !ctx.record.Message && !ctx.hasInputParams && !ctx.hasOutputParams && !ctx.hasBothParams ? 72 : -1);
551
- } }, dependencies: [i1.NgClass, i2.NgControlStatus, i2.NgModel, 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\n\n .k-panelbar {\n background: var(--mj-bg-surface-card) !important;\n border-color: var(--mj-border-default) !important;\n color: var(--mj-text-primary) !important;\n}\n\n .k-panelbar > .k-panelbar-header > .k-link {\n background: var(--mj-bg-surface-elevated) !important;\n color: var(--mj-text-primary) !important;\n border-color: var(--mj-border-default) !important;\n padding: 12px 16px;\n font-weight: var(--mj-font-semibold);\n}\n\n .k-panelbar > .k-panelbar-header > .k-link:hover {\n background: var(--mj-bg-surface-hover) !important;\n}\n\n .k-panelbar > .k-panelbar-header > .k-link .k-icon, \n .k-panelbar > .k-panelbar-header > .k-link .k-svg-icon {\n color: var(--mj-text-muted) !important;\n}\n\n .k-panelbar-item-content, \n .k-panelbar > .k-item > .k-animation-container .k-panelbar-item-content {\n padding: 0;\n background: var(--mj-bg-surface-card) !important;\n color: var(--mj-text-primary) !important;\n border-color: var(--mj-border-default) !important;\n}\n\n.k-panelbar[_ngcontent-%COMP%] > .k-item[_ngcontent-%COMP%] > .k-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 8px;\n color: var(--mj-text-muted);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 40px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: var(--mj-text-5xl);\n opacity: 0.3;\n margin-bottom: 16px;\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@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}"] }); }
833
+ i0.ɵɵconditional(!ctx.record.Params && !ctx.record.Message && !ctx.hasAnyParameters ? 70 : -1);
834
+ } }, dependencies: [i1.NgClass, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, 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\n\n .k-panelbar {\n background: var(--mj-bg-surface-card) !important;\n border-color: var(--mj-border-default) !important;\n color: var(--mj-text-primary) !important;\n}\n\n .k-panelbar > .k-panelbar-header > .k-link {\n background: var(--mj-bg-surface-elevated) !important;\n color: var(--mj-text-primary) !important;\n border-color: var(--mj-border-default) !important;\n padding: 12px 16px;\n font-weight: var(--mj-font-semibold);\n}\n\n .k-panelbar > .k-panelbar-header > .k-link:hover {\n background: var(--mj-bg-surface-hover) !important;\n}\n\n .k-panelbar > .k-panelbar-header > .k-link .k-icon, \n .k-panelbar > .k-panelbar-header > .k-link .k-svg-icon {\n color: var(--mj-text-muted) !important;\n}\n\n .k-panelbar-item-content, \n .k-panelbar > .k-item > .k-animation-container .k-panelbar-item-content {\n padding: 0;\n background: var(--mj-bg-surface-card) !important;\n color: var(--mj-text-primary) !important;\n border-color: var(--mj-border-default) !important;\n}\n\n.k-panelbar[_ngcontent-%COMP%] > .k-item[_ngcontent-%COMP%] > .k-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 8px;\n color: var(--mj-text-muted);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 40px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: var(--mj-text-5xl);\n opacity: 0.3;\n margin-bottom: 16px;\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.param-count-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 22px;\n height: 22px;\n padding: 0 7px;\n margin-left: 8px;\n border-radius: var(--mj-radius-full);\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 11px;\n font-weight: var(--mj-font-semibold);\n letter-spacing: 0.3px;\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.empty-filter[_ngcontent-%COMP%] {\n text-align: center;\n padding: 36px 20px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n border: 1px dashed var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n}\n.empty-filter[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: var(--mj-text-3xl);\n margin-bottom: 12px;\n opacity: 0.5;\n}\n.empty-filter[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0 0 12px;\n font-size: var(--mj-text-sm);\n}\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}"] }); }
552
835
  };
553
836
  MJActionExecutionLogFormComponentExtended = __decorate([
554
837
  RegisterClass(BaseFormComponent, 'MJ: Action Execution Logs')
@@ -556,7 +839,7 @@ MJActionExecutionLogFormComponentExtended = __decorate([
556
839
  export { MJActionExecutionLogFormComponentExtended };
557
840
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJActionExecutionLogFormComponentExtended, [{
558
841
  type: Component,
559
- args: [{ standalone: false, selector: 'mj-action-execution-log-form', template: "<div class=\"record-form-container action-execution-log-form\" style=\"height: 100%; display: flex; flex-direction: column;\">\n <div class=\"record-form\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n <!-- Header -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n <i class=\"fas fa-terminal\"></i>\n </div>\n <div class=\"header-info\">\n <h2>Action Execution Log</h2>\n <div class=\"meta-info\">\n @if (action) {\n <span class=\"action-name\">{{ action.Name }}</span>\n }\n <span class=\"log-id\">{{ record.ID }}</span>\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n <div class=\"status-badge\" [attr.data-status]=\"record.ResultCode?.toLowerCase()\">\n <i class=\"fas\" [ngClass]=\"getResultCodeIcon()\"></i>\n {{ record.ResultCode || 'UNKNOWN' }}\n </div>\n <div class=\"execution-time\">\n <i class=\"fas fa-clock\"></i>\n {{ formatDuration(getExecutionDuration()) }}\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.StartedAt | date:'short' }}</span>\n </div>\n @if (record.EndedAt) {\n <div class=\"stat\">\n <span class=\"label\">Ended</span>\n <span class=\"value\">{{ record.EndedAt | date:'short' }}</span>\n </div>\n }\n @if (action) {\n <div class=\"stat\">\n <span class=\"label\">Action</span>\n <span class=\"value\">\n <button class=\"btn-link\" (click)=\"navigateToAction()\">\n {{ action.Name }}\n <i class=\"fas fa-external-link-alt\"></i>\n </button>\n </span>\n </div>\n }\n @if (user) {\n <div class=\"stat\">\n <span class=\"label\">User</span>\n <span class=\"value\">\n <button class=\"btn-link\" (click)=\"navigateToUser()\">\n {{ user.Name }}\n <i class=\"fas fa-external-link-alt\"></i>\n </button>\n </span>\n </div>\n }\n </div>\n </div>\n\n <!-- Content Area -->\n <div class=\"content-area\">\n <div class=\"accordion-container\">\n <!-- Execution Details -->\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-info-circle\"></i> Execution Details\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Execution ID</label>\n <span class=\"monospace\">{{ record.ID }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Action ID</label>\n <span class=\"monospace\">{{ record.ActionID }}</span>\n </div>\n <div class=\"detail-item\">\n <label>User ID</label>\n <span class=\"monospace\">{{ record.UserID }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Result Code</label>\n <span class=\"detail-value\">\n <i class=\"fas\" [ngClass]=\"getResultCodeIcon()\" [style.color]=\"getResultCodeColor()\"></i>\n <span [style.color]=\"getResultCodeColor()\">{{ record.ResultCode || 'N/A' }}</span>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Duration</label>\n <span>{{ formatDuration(getExecutionDuration()) }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Retention Period</label>\n <span>{{ record.RetentionPeriod ? record.RetentionPeriod + ' days' : 'Indefinite' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Input Parameters Only -->\n @if (hasInputParams && formattedInputParams) {\n <mj-accordion-panel [Expanded]=\"expandedSections.inputParams\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-sign-in-alt\"></i> Input Parameters\n </ng-template>\n <div class=\"json-viewer\">\n <div class=\"json-toolbar\">\n <span class=\"json-label\">JSON (Input Parameters Only)</span>\n <button class=\"btn-icon\" title=\"Copy JSON\" (click)=\"copyToClipboard(formattedInputParams)\">\n <i class=\"fas fa-copy\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedInputParams\"\n name=\"formattedInputParams\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Output Parameters Only -->\n @if (hasOutputParams && formattedOutputParams) {\n <mj-accordion-panel [Expanded]=\"expandedSections.outputParams\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-sign-out-alt\"></i> Output Parameters\n </ng-template>\n <div class=\"json-viewer\">\n <div class=\"json-toolbar\">\n <span class=\"json-label\">JSON (Output Parameters Only)</span>\n <button class=\"btn-icon\" title=\"Copy JSON\" (click)=\"copyToClipboard(formattedOutputParams)\">\n <i class=\"fas fa-copy\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedOutputParams\"\n name=\"formattedOutputParams\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Input+Output Parameters -->\n @if (hasBothParams && formattedBothParams) {\n <mj-accordion-panel [Expanded]=\"expandedSections.bothParams\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-exchange-alt\"></i> Input+Output Parameters\n </ng-template>\n <div class=\"json-viewer\">\n <div class=\"json-toolbar\">\n <span class=\"json-label\">JSON (Input+Output Parameters)</span>\n <button class=\"btn-icon\" title=\"Copy JSON\" (click)=\"copyToClipboard(formattedBothParams)\">\n <i class=\"fas fa-copy\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedBothParams\"\n name=\"formattedBothParams\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Output Message -->\n @if (record.Message) {\n <mj-accordion-panel [Expanded]=\"expandedSections.output\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-comment-alt\"></i> Output Message\n </ng-template>\n <div class=\"json-viewer\">\n <div class=\"json-toolbar\">\n <span class=\"json-label\">JSON</span>\n <button class=\"btn-icon\" title=\"Copy JSON\" (click)=\"copyToClipboard(formattedMessage)\">\n <i class=\"fas fa-copy\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedMessage\"\n name=\"formattedMessage\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Empty States for missing data -->\n @if (!record.Params && !record.Message && !hasInputParams && !hasOutputParams && !hasBothParams) {\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-database\"></i> Execution Data\n </ng-template>\n <div class=\"empty-state\">\n <i class=\"fas fa-inbox\"></i>\n <p>No execution data recorded</p>\n </div>\n </mj-accordion-panel>\n }\n </div>\n </div>\n </div>\n</div>", styles: ["/* Action Execution Log Form Styles */\n:host {\n display: block;\n height: 100%;\n}\n\n.action-execution-log-form {\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/* Header Styles */\n.header {\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 {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.icon-wrapper {\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 h2 {\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 {\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 {\n font-weight: var(--mj-font-medium);\n color: var(--mj-text-secondary);\n}\n\n.log-id {\n font-family: monospace;\n font-size: var(--mj-text-xs);\n opacity: 0.7;\n}\n\n.header-right {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.status-badge {\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 {\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 {\n display: flex;\n gap: 24px;\n padding-top: 12px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.stat {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat .label {\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 .value {\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 {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n/* Content Area */\n.content-area {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* Details Grid */\n.details-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n padding: 20px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-item label {\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 {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-primary);\n}\n\n.btn-link {\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:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.loading {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-xs);\n}\n\n/* JSON Viewer */\n.json-viewer {\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 {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n}\n\n.json-label {\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 {\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:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n/* Status badge colors based on data-status attribute */\n.status-badge[data-status=\"success\"],\n.status-badge[data-status=\"ok\"],\n.status-badge[data-status=\"completed\"],\n.status-badge[data-status=\"200\"] {\n background-color: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.status-badge[data-status=\"error\"],\n.status-badge[data-status=\"failed\"],\n.status-badge[data-status=\"failure\"] {\n background-color: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.status-badge[data-status=\"warning\"],\n.status-badge[data-status=\"pending\"] {\n background-color: var(--mj-status-warning);\n color: var(--mj-color-warning-800);\n}\n\n.status-badge[data-status=\"info\"],\n.status-badge[data-status=\"running\"] {\n background-color: var(--mj-status-info);\n color: var(--mj-text-inverse);\n}\n\n.status-badge {\n background-color: var(--mj-text-muted);\n color: var(--mj-text-inverse);\n}\n\n/* Panel Bar overrides */\n::ng-deep .k-panelbar {\n background: var(--mj-bg-surface-card) !important;\n border-color: var(--mj-border-default) !important;\n color: var(--mj-text-primary) !important;\n}\n\n::ng-deep .k-panelbar > .k-panelbar-header > .k-link {\n background: var(--mj-bg-surface-elevated) !important;\n color: var(--mj-text-primary) !important;\n border-color: var(--mj-border-default) !important;\n padding: 12px 16px;\n font-weight: var(--mj-font-semibold);\n}\n\n::ng-deep .k-panelbar > .k-panelbar-header > .k-link:hover {\n background: var(--mj-bg-surface-hover) !important;\n}\n\n::ng-deep .k-panelbar > .k-panelbar-header > .k-link .k-icon,\n::ng-deep .k-panelbar > .k-panelbar-header > .k-link .k-svg-icon {\n color: var(--mj-text-muted) !important;\n}\n\n::ng-deep .k-panelbar-item-content,\n::ng-deep .k-panelbar > .k-item > .k-animation-container .k-panelbar-item-content {\n padding: 0;\n background: var(--mj-bg-surface-card) !important;\n color: var(--mj-text-primary) !important;\n border-color: var(--mj-border-default) !important;\n}\n\n.k-panelbar > .k-item > .k-link i {\n margin-right: 8px;\n color: var(--mj-text-muted);\n}\n\n/* Empty state */\n.empty-state {\n text-align: center;\n padding: 40px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: var(--mj-text-5xl);\n opacity: 0.3;\n margin-bottom: 16px;\n}\n\n.monospace {\n font-family: 'Courier New', Courier, monospace;\n font-size: var(--mj-text-xs);\n}\n\n/* Responsive adjustments */\n@media (max-width: 768px) {\n .header-content {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-stats {\n flex-wrap: wrap;\n }\n\n .details-grid {\n grid-template-columns: 1fr;\n }\n}\n"] }]
842
+ args: [{ standalone: false, selector: 'mj-action-execution-log-form', template: "<div class=\"record-form-container action-execution-log-form\" style=\"height: 100%; display: flex; flex-direction: column;\">\n <div class=\"record-form\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n <!-- Header -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n <i class=\"fas fa-terminal\"></i>\n </div>\n <div class=\"header-info\">\n <h2>Action Execution Log</h2>\n <div class=\"meta-info\">\n @if (action) {\n <span class=\"action-name\">{{ action.Name }}</span>\n }\n <span class=\"log-id\">{{ record.ID }}</span>\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n <div class=\"status-badge\" [attr.data-status]=\"record.ResultCode?.toLowerCase()\">\n <i class=\"fas\" [ngClass]=\"getResultCodeIcon()\"></i>\n {{ record.ResultCode || 'UNKNOWN' }}\n </div>\n <div class=\"execution-time\">\n <i class=\"fas fa-clock\"></i>\n {{ formatDuration(getExecutionDuration()) }}\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.StartedAt | date:'short' }}</span>\n </div>\n @if (record.EndedAt) {\n <div class=\"stat\">\n <span class=\"label\">Ended</span>\n <span class=\"value\">{{ record.EndedAt | date:'short' }}</span>\n </div>\n }\n @if (action) {\n <div class=\"stat\">\n <span class=\"label\">Action</span>\n <span class=\"value\">\n <button class=\"btn-link\" (click)=\"navigateToAction()\">\n {{ action.Name }}\n <i class=\"fas fa-external-link-alt\"></i>\n </button>\n </span>\n </div>\n }\n @if (user) {\n <div class=\"stat\">\n <span class=\"label\">User</span>\n <span class=\"value\">\n <button class=\"btn-link\" (click)=\"navigateToUser()\">\n {{ user.Name }}\n <i class=\"fas fa-external-link-alt\"></i>\n </button>\n </span>\n </div>\n }\n </div>\n </div>\n\n <!-- Content Area -->\n <div class=\"content-area\">\n <div class=\"accordion-container\">\n <!-- Execution Details -->\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-info-circle\"></i> Execution Details\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Execution ID</label>\n <span class=\"monospace\">{{ record.ID }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Action ID</label>\n <span class=\"monospace\">{{ record.ActionID }}</span>\n </div>\n <div class=\"detail-item\">\n <label>User ID</label>\n <span class=\"monospace\">{{ record.UserID }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Result Code</label>\n <span class=\"detail-value\">\n <i class=\"fas\" [ngClass]=\"getResultCodeIcon()\" [style.color]=\"getResultCodeColor()\"></i>\n <span [style.color]=\"getResultCodeColor()\">{{ record.ResultCode || 'N/A' }}</span>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Duration</label>\n <span>{{ formatDuration(getExecutionDuration()) }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Retention Period</label>\n <span>{{ record.RetentionPeriod ? record.RetentionPeriod + ' days' : 'Indefinite' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Unified Parameters section -->\n @if (hasAnyParameters) {\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-sliders-h\"></i>\n Parameters\n <span class=\"param-count-pill\">{{ paramCounts.All }}</span>\n </ng-template>\n <div class=\"params-panel\">\n <!-- Toolbar: filter chips, search, sort, raw toggle -->\n <div class=\"params-toolbar\">\n <div class=\"filter-chips\">\n <button\n type=\"button\"\n class=\"chip\"\n [class.active]=\"typeFilter === 'All'\"\n (click)=\"setTypeFilter('All')\">\n All <span class=\"chip-count\">{{ paramCounts.All }}</span>\n </button>\n <button\n type=\"button\"\n class=\"chip chip-input\"\n [class.active]=\"typeFilter === 'Input'\"\n [disabled]=\"paramCounts.Input === 0\"\n (click)=\"setTypeFilter('Input')\">\n <i class=\"fas fa-sign-in-alt\"></i>\n Input <span class=\"chip-count\">{{ paramCounts.Input }}</span>\n </button>\n <button\n type=\"button\"\n class=\"chip chip-both\"\n [class.active]=\"typeFilter === 'Both'\"\n [disabled]=\"paramCounts.Both === 0\"\n (click)=\"setTypeFilter('Both')\">\n <i class=\"fas fa-exchange-alt\"></i>\n In/Out <span class=\"chip-count\">{{ paramCounts.Both }}</span>\n </button>\n <button\n type=\"button\"\n class=\"chip chip-output\"\n [class.active]=\"typeFilter === 'Output'\"\n [disabled]=\"paramCounts.Output === 0\"\n (click)=\"setTypeFilter('Output')\">\n <i class=\"fas fa-sign-out-alt\"></i>\n Output <span class=\"chip-count\">{{ paramCounts.Output }}</span>\n </button>\n </div>\n\n <div class=\"toolbar-right\">\n <div class=\"search-wrapper\">\n <i class=\"fas fa-search search-icon\"></i>\n <input\n type=\"text\"\n class=\"mj-input params-search\"\n placeholder=\"Search name or value\u2026\"\n [(ngModel)]=\"searchText\"\n name=\"paramSearch\" />\n @if (searchText) {\n <button type=\"button\" class=\"search-clear\" (click)=\"searchText = ''\" title=\"Clear search\">\n <i class=\"fas fa-times\"></i>\n </button>\n }\n </div>\n\n <div class=\"sort-group\" role=\"group\" aria-label=\"Sort parameters\">\n <button\n type=\"button\"\n class=\"sort-btn\"\n [class.active]=\"sortKey === 'type'\"\n (click)=\"toggleSort('type')\"\n title=\"Sort by type\">\n Type\n @if (sortKey === 'type') {\n <i class=\"fas\" [ngClass]=\"sortDir === 'asc' ? 'fa-arrow-down-short-wide' : 'fa-arrow-up-wide-short'\"></i>\n }\n </button>\n <button\n type=\"button\"\n class=\"sort-btn\"\n [class.active]=\"sortKey === 'name'\"\n (click)=\"toggleSort('name')\"\n title=\"Sort by name\">\n Name\n @if (sortKey === 'name') {\n <i class=\"fas\" [ngClass]=\"sortDir === 'asc' ? 'fa-arrow-down-a-z' : 'fa-arrow-up-z-a'\"></i>\n }\n </button>\n </div>\n\n <button\n type=\"button\"\n class=\"raw-toggle\"\n [class.active]=\"showRawJson\"\n (click)=\"toggleRawJson()\"\n title=\"Toggle raw JSON view\">\n <i class=\"fas fa-code\"></i>\n Raw\n </button>\n </div>\n </div>\n\n @if (showRawJson) {\n <div class=\"json-viewer raw-json-viewer\">\n <div class=\"json-toolbar\">\n <span class=\"json-label\">Raw JSON</span>\n <button class=\"btn-icon\" title=\"Copy JSON\" (click)=\"copyToClipboard(formattedParams)\">\n <i class=\"fas fa-copy\"></i>\n </button>\n </div>\n <mj-code-editor\n [(ngModel)]=\"formattedParams\"\n name=\"formattedParamsRaw\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 360px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else {\n <!-- Rich param list -->\n @if (filteredParameters.length === 0) {\n <div class=\"empty-filter\">\n <i class=\"fas fa-filter-circle-xmark\"></i>\n <p>No parameters match the current filter.</p>\n <button type=\"button\" class=\"btn-link\" (click)=\"clearFilters()\">\n Clear filters\n </button>\n </div>\n } @else {\n <ul class=\"params-list\">\n @for (p of filteredParameters; track trackParam($index, p)) {\n <li class=\"param-row\" [attr.data-type]=\"p.Type\">\n <div class=\"param-header\">\n <span class=\"type-badge\" [attr.data-type]=\"p.Type\">\n @if (p.Type === 'Input') {\n <i class=\"fas fa-sign-in-alt\"></i>\n } @else if (p.Type === 'Output') {\n <i class=\"fas fa-sign-out-alt\"></i>\n } @else {\n <i class=\"fas fa-exchange-alt\"></i>\n }\n {{ getTypeLabel(p.Type) }}\n </span>\n <div class=\"param-name-wrap\">\n <span class=\"param-name\">{{ p.Name }}</span>\n <span class=\"value-kind-chip\" [attr.data-kind]=\"p.ValueKind\">\n <i class=\"fas\" [ngClass]=\"getValueKindIcon(p.ValueKind)\"></i>\n {{ p.ValueKind }}\n </span>\n </div>\n <div class=\"param-actions\">\n @if (p.IsExpandable) {\n <button type=\"button\" class=\"btn-icon param-expand\" [class.is-expanded]=\"p.Expanded\" (click)=\"toggleExpanded(p)\" [title]=\"p.Expanded ? 'Collapse' : 'Expand'\">\n <i class=\"fas\" [ngClass]=\"p.Expanded ? 'fa-chevron-up' : 'fa-chevron-down'\"></i>\n </button>\n }\n <button type=\"button\" class=\"btn-icon\" (click)=\"copyParamValue(p)\" title=\"Copy value\">\n <i class=\"fas fa-copy\"></i>\n </button>\n </div>\n </div>\n <div class=\"param-preview\" [attr.data-kind]=\"p.ValueKind\">{{ p.Preview }}</div>\n @if (p.IsExpandable && p.Expanded) {\n <div class=\"param-expanded\">\n <mj-code-editor\n [(ngModel)]=\"p.FormattedValue\"\n [name]=\"'param-' + p.Name\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 240px; width: 100%;\">\n </mj-code-editor>\n </div>\n }\n </li>\n }\n </ul>\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Output Message -->\n @if (record.Message) {\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-comment-alt\"></i> Output Message\n </ng-template>\n <div class=\"json-viewer\">\n <div class=\"json-toolbar\">\n <span class=\"json-label\">JSON</span>\n <button class=\"btn-icon\" title=\"Copy JSON\" (click)=\"copyToClipboard(formattedMessage)\">\n <i class=\"fas fa-copy\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedMessage\"\n name=\"formattedMessage\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Empty States for missing data -->\n @if (!record.Params && !record.Message && !hasAnyParameters) {\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-database\"></i> Execution Data\n </ng-template>\n <div class=\"empty-state\">\n <i class=\"fas fa-inbox\"></i>\n <p>No execution data recorded</p>\n </div>\n </mj-accordion-panel>\n }\n </div>\n </div>\n </div>\n</div>", styles: ["/* Action Execution Log Form Styles */\n:host {\n display: block;\n height: 100%;\n}\n\n.action-execution-log-form {\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/* Header Styles */\n.header {\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 {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.icon-wrapper {\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 h2 {\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 {\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 {\n font-weight: var(--mj-font-medium);\n color: var(--mj-text-secondary);\n}\n\n.log-id {\n font-family: monospace;\n font-size: var(--mj-text-xs);\n opacity: 0.7;\n}\n\n.header-right {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.status-badge {\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 {\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 {\n display: flex;\n gap: 24px;\n padding-top: 12px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.stat {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat .label {\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 .value {\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 {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n/* Content Area */\n.content-area {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* Details Grid */\n.details-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n padding: 20px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-item label {\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 {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-primary);\n}\n\n.btn-link {\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:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.loading {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-xs);\n}\n\n/* JSON Viewer */\n.json-viewer {\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 {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n}\n\n.json-label {\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 {\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:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n/* Status badge colors based on data-status attribute */\n.status-badge[data-status=\"success\"],\n.status-badge[data-status=\"ok\"],\n.status-badge[data-status=\"completed\"],\n.status-badge[data-status=\"200\"] {\n background-color: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.status-badge[data-status=\"error\"],\n.status-badge[data-status=\"failed\"],\n.status-badge[data-status=\"failure\"] {\n background-color: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.status-badge[data-status=\"warning\"],\n.status-badge[data-status=\"pending\"] {\n background-color: var(--mj-status-warning);\n color: var(--mj-color-warning-800);\n}\n\n.status-badge[data-status=\"info\"],\n.status-badge[data-status=\"running\"] {\n background-color: var(--mj-status-info);\n color: var(--mj-text-inverse);\n}\n\n.status-badge {\n background-color: var(--mj-text-muted);\n color: var(--mj-text-inverse);\n}\n\n/* Panel Bar overrides */\n::ng-deep .k-panelbar {\n background: var(--mj-bg-surface-card) !important;\n border-color: var(--mj-border-default) !important;\n color: var(--mj-text-primary) !important;\n}\n\n::ng-deep .k-panelbar > .k-panelbar-header > .k-link {\n background: var(--mj-bg-surface-elevated) !important;\n color: var(--mj-text-primary) !important;\n border-color: var(--mj-border-default) !important;\n padding: 12px 16px;\n font-weight: var(--mj-font-semibold);\n}\n\n::ng-deep .k-panelbar > .k-panelbar-header > .k-link:hover {\n background: var(--mj-bg-surface-hover) !important;\n}\n\n::ng-deep .k-panelbar > .k-panelbar-header > .k-link .k-icon,\n::ng-deep .k-panelbar > .k-panelbar-header > .k-link .k-svg-icon {\n color: var(--mj-text-muted) !important;\n}\n\n::ng-deep .k-panelbar-item-content,\n::ng-deep .k-panelbar > .k-item > .k-animation-container .k-panelbar-item-content {\n padding: 0;\n background: var(--mj-bg-surface-card) !important;\n color: var(--mj-text-primary) !important;\n border-color: var(--mj-border-default) !important;\n}\n\n.k-panelbar > .k-item > .k-link i {\n margin-right: 8px;\n color: var(--mj-text-muted);\n}\n\n/* Empty state */\n.empty-state {\n text-align: center;\n padding: 40px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: var(--mj-text-5xl);\n opacity: 0.3;\n margin-bottom: 16px;\n}\n\n.monospace {\n font-family: 'Courier New', Courier, monospace;\n font-size: var(--mj-text-xs);\n}\n\n/* ============================================================\n Unified Parameters Panel\n ============================================================ */\n\n.param-count-pill {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 22px;\n height: 22px;\n padding: 0 7px;\n margin-left: 8px;\n border-radius: var(--mj-radius-full);\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 11px;\n font-weight: var(--mj-font-semibold);\n letter-spacing: 0.3px;\n}\n\n.params-panel {\n padding: 18px 20px 22px;\n}\n\n/* Toolbar --------------------------------------------------------------- */\n.params-toolbar {\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 {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.chip {\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: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:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n.chip .chip-count {\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 i {\n font-size: 11px;\n}\n\n.chip.active {\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 .chip-count {\n background: color-mix(in srgb, var(--mj-text-inverse) 25%, transparent);\n color: var(--mj-text-inverse);\n}\n\n/* Chip type flavors (active state tints per Input/Output/Both). */\n.chip.chip-input.active {\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 {\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 {\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 {\n display: flex;\n gap: 8px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.search-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n}\n.search-icon {\n position: absolute;\n left: 10px;\n color: var(--mj-text-muted);\n font-size: 12px;\n pointer-events: none;\n}\n.params-search {\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 {\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:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-hover);\n}\n\n.sort-group {\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 {\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 + .sort-btn {\n border-left: 1px solid var(--mj-border-default);\n}\n.sort-btn:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n.sort-btn.active {\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 i { color: var(--mj-brand-primary); }\n\n.raw-toggle {\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:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n.raw-toggle.active {\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/* Param list rows -------------------------------------------------------- */\n.params-list {\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 {\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: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\"] { border-left-color: var(--mj-status-info); }\n.param-row[data-type=\"Output\"] { border-left-color: var(--mj-status-success); }\n.param-row[data-type=\"Both\"] { border-left-color: color-mix(in srgb, var(--mj-brand-primary) 75%, var(--mj-status-warning) 25%); }\n\n.param-header {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.type-badge {\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\"] {\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\"] {\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\"] {\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 {\n flex: 1;\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n.param-name {\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 {\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 i { font-size: 9px; }\n.value-kind-chip[data-kind=\"number\"] { color: var(--mj-status-info-text); background: var(--mj-status-info-bg); }\n.value-kind-chip[data-kind=\"boolean\"] { color: var(--mj-status-warning-text); background: var(--mj-status-warning-bg); }\n.value-kind-chip[data-kind=\"array\"] { 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\"] { 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\"],\n.value-kind-chip[data-kind=\"undefined\"] {\n color: var(--mj-text-disabled);\n background: var(--mj-bg-surface-sunken);\n}\n\n.param-actions {\n display: flex;\n gap: 4px;\n flex-shrink: 0;\n}\n.param-actions .btn-icon {\n width: 28px;\n height: 28px;\n}\n.param-expand.is-expanded {\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 {\n margin-top: 8px;\n padding-left: calc(64px + 12px); /* align under param name (after type badge) */\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\"] { color: var(--mj-status-success-text); }\n.param-preview[data-kind=\"number\"] { color: var(--mj-status-info-text); }\n.param-preview[data-kind=\"boolean\"] { color: var(--mj-status-warning-text); }\n.param-preview[data-kind=\"null\"],\n.param-preview[data-kind=\"undefined\"] { color: var(--mj-text-disabled); font-style: italic; }\n.param-preview[data-kind=\"array\"],\n.param-preview[data-kind=\"object\"] { color: var(--mj-brand-primary); }\n\n.param-expanded {\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 { margin-top: 4px; }\n\n.empty-filter {\n text-align: center;\n padding: 36px 20px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n border: 1px dashed var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n}\n.empty-filter i {\n font-size: var(--mj-text-3xl);\n margin-bottom: 12px;\n opacity: 0.5;\n}\n.empty-filter p {\n margin: 0 0 12px;\n font-size: var(--mj-text-sm);\n}\n\n/* Responsive adjustments */\n@media (max-width: 768px) {\n .header-content {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-stats {\n flex-wrap: wrap;\n }\n\n .details-grid {\n grid-template-columns: 1fr;\n }\n\n .params-toolbar {\n flex-direction: column;\n align-items: stretch;\n }\n .toolbar-right {\n justify-content: space-between;\n }\n .params-search { min-width: 0; width: 100%; }\n .search-wrapper { flex: 1; }\n\n .param-preview,\n .param-expanded {\n padding-left: 0;\n margin-left: 0;\n }\n}\n"] }]
560
843
  }], null, null); })();
561
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJActionExecutionLogFormComponentExtended, { className: "MJActionExecutionLogFormComponentExtended", filePath: "src/lib/custom/Actions/action-execution-log-form.component.ts", lineNumber: 22 }); })();
844
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJActionExecutionLogFormComponentExtended, { className: "MJActionExecutionLogFormComponentExtended", filePath: "src/lib/custom/Actions/action-execution-log-form.component.ts", lineNumber: 35 }); })();
562
845
  //# sourceMappingURL=action-execution-log-form.component.js.map