@memberjunction/ng-core-entity-forms 2.90.0 → 2.92.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/dist/lib/custom/Actions/action-form.component.d.ts +20 -4
  2. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
  3. package/dist/lib/custom/Actions/action-form.component.js +594 -287
  4. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  5. package/dist/lib/custom/Actions/action-result-code-dialog.component.d.ts +20 -0
  6. package/dist/lib/custom/Actions/action-result-code-dialog.component.d.ts.map +1 -0
  7. package/dist/lib/custom/Actions/action-result-code-dialog.component.js +127 -0
  8. package/dist/lib/custom/Actions/action-result-code-dialog.component.js.map +1 -0
  9. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +2 -2
  10. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
  11. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +3 -3
  12. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
  13. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +2 -2
  14. package/dist/lib/custom/custom-forms.module.d.ts +36 -35
  15. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  16. package/dist/lib/custom/custom-forms.module.js +3 -0
  17. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  18. package/dist/lib/generated/Entities/AIPrompt/sections/details.component.d.ts +2 -2
  19. package/dist/lib/generated/Entities/AIPrompt/sections/details.component.d.ts.map +1 -1
  20. package/dist/lib/generated/Entities/ComponentLibrary/sections/details.component.d.ts.map +1 -1
  21. package/dist/lib/generated/Entities/ComponentLibrary/sections/details.component.js +22 -4
  22. package/dist/lib/generated/Entities/ComponentLibrary/sections/details.component.js.map +1 -1
  23. package/package.json +16 -16
@@ -4,19 +4,21 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { Component } from '@angular/core';
7
+ import { Component, inject, ViewContainerRef } from '@angular/core';
8
8
  import { RegisterClass } from '@memberjunction/global';
9
9
  import { BaseFormComponent } from '@memberjunction/ng-base-forms';
10
10
  import { SharedService } from '@memberjunction/ng-shared';
11
11
  import { Metadata, RunView, CompositeKey } from '@memberjunction/core';
12
12
  import { ActionFormComponent } from '../../generated/Entities/Action/action.form.component';
13
+ import { DialogService } from '@progress/kendo-angular-dialog';
13
14
  import { ActionParamDialogComponent } from './action-param-dialog.component';
15
+ import { ActionResultCodeDialogComponent } from './action-result-code-dialog.component';
14
16
  import * as i0 from "@angular/core";
15
17
  import * as i1 from "@memberjunction/ng-shared";
16
18
  import * as i2 from "@angular/router";
17
- import * as i3 from "@progress/kendo-angular-dialog";
18
- import * as i4 from "@angular/forms";
19
- import * as i5 from "@progress/kendo-angular-layout";
19
+ import * as i3 from "@angular/forms";
20
+ import * as i4 from "@progress/kendo-angular-layout";
21
+ import * as i5 from "@progress/kendo-angular-dialog";
20
22
  import * as i6 from "@progress/kendo-angular-inputs";
21
23
  import * as i7 from "@progress/kendo-angular-dropdowns";
22
24
  import * as i8 from "@progress/kendo-angular-buttons";
@@ -35,7 +37,7 @@ const _c6 = (a0, a1) => [a0, a1];
35
37
  const _c7 = () => [];
36
38
  function ActionFormComponentExtended_Conditional_1_Conditional_9_Template(rf, ctx) { if (rf & 1) {
37
39
  const _r1 = i0.ɵɵgetCurrentView();
38
- i0.ɵɵelementStart(0, "kendo-textbox", 32);
40
+ i0.ɵɵelementStart(0, "kendo-textbox", 33);
39
41
  i0.ɵɵtwoWayListener("ngModelChange", function ActionFormComponentExtended_Conditional_1_Conditional_9_Template_kendo_textbox_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Name, $event) || (ctx_r1.record.Name = $event); return i0.ɵɵresetView($event); });
40
42
  i0.ɵɵelementEnd();
41
43
  } if (rf & 2) {
@@ -43,10 +45,10 @@ function ActionFormComponentExtended_Conditional_1_Conditional_9_Template(rf, ct
43
45
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Name);
44
46
  } }
45
47
  function ActionFormComponentExtended_Conditional_1_Conditional_10_Template(rf, ctx) { if (rf & 1) {
46
- i0.ɵɵelementStart(0, "h4", 33);
48
+ i0.ɵɵelementStart(0, "h4", 34);
47
49
  i0.ɵɵtext(1);
48
50
  i0.ɵɵelementEnd();
49
- i0.ɵɵelementStart(2, "span", 34);
51
+ i0.ɵɵelementStart(2, "span", 35);
50
52
  i0.ɵɵtext(3);
51
53
  i0.ɵɵelementEnd();
52
54
  } if (rf & 2) {
@@ -60,26 +62,26 @@ function ActionFormComponentExtended_Conditional_1_Conditional_10_Template(rf, c
60
62
  } }
61
63
  function ActionFormComponentExtended_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
62
64
  const _r3 = i0.ɵɵgetCurrentView();
63
- i0.ɵɵelementStart(0, "div", 12)(1, "div")(2, "label", 35);
65
+ i0.ɵɵelementStart(0, "div", 12)(1, "div")(2, "label", 36);
64
66
  i0.ɵɵtext(3, "Status");
65
67
  i0.ɵɵelementEnd();
66
- i0.ɵɵelementStart(4, "kendo-dropdownlist", 36);
68
+ i0.ɵɵelementStart(4, "kendo-dropdownlist", 37);
67
69
  i0.ɵɵtwoWayListener("ngModelChange", function ActionFormComponentExtended_Conditional_1_Conditional_11_Template_kendo_dropdownlist_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Status, $event) || (ctx_r1.record.Status = $event); return i0.ɵɵresetView($event); });
68
70
  i0.ɵɵelementEnd()();
69
- i0.ɵɵelementStart(5, "div")(6, "label", 35);
71
+ i0.ɵɵelementStart(5, "div")(6, "label", 36);
70
72
  i0.ɵɵtext(7, " Type ");
71
- i0.ɵɵelementStart(8, "span", 37);
73
+ i0.ɵɵelementStart(8, "span", 38);
72
74
  i0.ɵɵtext(9, "*");
73
75
  i0.ɵɵelementEnd()();
74
- i0.ɵɵelementStart(10, "kendo-dropdownlist", 38);
76
+ i0.ɵɵelementStart(10, "kendo-dropdownlist", 39);
75
77
  i0.ɵɵtwoWayListener("ngModelChange", function ActionFormComponentExtended_Conditional_1_Conditional_11_Template_kendo_dropdownlist_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Type, $event) || (ctx_r1.record.Type = $event); return i0.ɵɵresetView($event); });
76
78
  i0.ɵɵelementEnd()();
77
- i0.ɵɵelementStart(11, "div")(12, "label", 35);
79
+ i0.ɵɵelementStart(11, "div")(12, "label", 36);
78
80
  i0.ɵɵtext(13, " Category ");
79
- i0.ɵɵelementStart(14, "span", 37);
81
+ i0.ɵɵelementStart(14, "span", 38);
80
82
  i0.ɵɵtext(15, "*");
81
83
  i0.ɵɵelementEnd()();
82
- i0.ɵɵelementStart(16, "kendo-dropdownlist", 39);
84
+ i0.ɵɵelementStart(16, "kendo-dropdownlist", 40);
83
85
  i0.ɵɵtwoWayListener("ngModelChange", function ActionFormComponentExtended_Conditional_1_Conditional_11_Template_kendo_dropdownlist_ngModelChange_16_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.CategoryID, $event) || (ctx_r1.record.CategoryID = $event); return i0.ɵɵresetView($event); });
84
86
  i0.ɵɵelementEnd()()();
85
87
  } if (rf & 2) {
@@ -96,7 +98,7 @@ function ActionFormComponentExtended_Conditional_1_Conditional_11_Template(rf, c
96
98
  } }
97
99
  function ActionFormComponentExtended_Conditional_1_Conditional_12_Template(rf, ctx) { if (rf & 1) {
98
100
  const _r4 = i0.ɵɵgetCurrentView();
99
- i0.ɵɵelementStart(0, "kendo-textarea", 40);
101
+ i0.ɵɵelementStart(0, "kendo-textarea", 41);
100
102
  i0.ɵɵtwoWayListener("ngModelChange", function ActionFormComponentExtended_Conditional_1_Conditional_12_Template_kendo_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Description, $event) || (ctx_r1.record.Description = $event); return i0.ɵɵresetView($event); });
101
103
  i0.ɵɵelementEnd();
102
104
  } if (rf & 2) {
@@ -116,14 +118,14 @@ function ActionFormComponentExtended_Conditional_1_Conditional_13_Template(rf, c
116
118
  function ActionFormComponentExtended_Conditional_1_Conditional_15_Template(rf, ctx) { if (rf & 1) {
117
119
  const _r5 = i0.ɵɵgetCurrentView();
118
120
  i0.ɵɵelementStart(0, "div", 16);
119
- i0.ɵɵelement(1, "i", 41);
121
+ i0.ɵɵelement(1, "i", 42);
120
122
  i0.ɵɵelementStart(2, "span", 18);
121
123
  i0.ɵɵtext(3, "Category:");
122
124
  i0.ɵɵelementEnd();
123
- i0.ɵɵelementStart(4, "span", 42);
125
+ i0.ɵɵelementStart(4, "span", 43);
124
126
  i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_15_Template_span_click_4_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToCategory()); });
125
127
  i0.ɵɵtext(5);
126
- i0.ɵɵelement(6, "i", 43);
128
+ i0.ɵɵelement(6, "i", 44);
127
129
  i0.ɵɵelementEnd()();
128
130
  } if (rf & 2) {
129
131
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -136,7 +138,7 @@ function ActionFormComponentExtended_Conditional_1_Conditional_22_Template(rf, c
136
138
  i0.ɵɵelementStart(2, "span", 18);
137
139
  i0.ɵɵtext(3, "Code:");
138
140
  i0.ɵɵelementEnd();
139
- i0.ɵɵelementStart(4, "span", 44);
141
+ i0.ɵɵelementStart(4, "span", 45);
140
142
  i0.ɵɵtext(5);
141
143
  i0.ɵɵelementEnd()();
142
144
  } if (rf & 2) {
@@ -151,7 +153,7 @@ function ActionFormComponentExtended_Conditional_1_Conditional_22_Template(rf, c
151
153
  } }
152
154
  function ActionFormComponentExtended_Conditional_1_Conditional_23_Template(rf, ctx) { if (rf & 1) {
153
155
  i0.ɵɵelementStart(0, "div", 16);
154
- i0.ɵɵelement(1, "i", 45);
156
+ i0.ɵɵelement(1, "i", 46);
155
157
  i0.ɵɵelementStart(2, "span", 19);
156
158
  i0.ɵɵtext(3);
157
159
  i0.ɵɵelementEnd()();
@@ -162,9 +164,9 @@ function ActionFormComponentExtended_Conditional_1_Conditional_23_Template(rf, c
162
164
  } }
163
165
  function ActionFormComponentExtended_Conditional_1_Conditional_26_Template(rf, ctx) { if (rf & 1) {
164
166
  const _r6 = i0.ɵɵgetCurrentView();
165
- i0.ɵɵelementStart(0, "button", 46);
167
+ i0.ɵɵelementStart(0, "button", 47);
166
168
  i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_26_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openTestHarness()); });
167
- i0.ɵɵelement(1, "i", 47);
169
+ i0.ɵɵelement(1, "i", 48);
168
170
  i0.ɵɵtext(2, " Run ");
169
171
  i0.ɵɵelementEnd();
170
172
  } if (rf & 2) {
@@ -173,22 +175,22 @@ function ActionFormComponentExtended_Conditional_1_Conditional_26_Template(rf, c
173
175
  } }
174
176
  function ActionFormComponentExtended_Conditional_1_Conditional_27_Template(rf, ctx) { if (rf & 1) {
175
177
  const _r7 = i0.ɵɵgetCurrentView();
176
- i0.ɵɵelementStart(0, "button", 48);
178
+ i0.ɵɵelementStart(0, "button", 49);
177
179
  i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_27_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.regenerateCode()); });
178
- i0.ɵɵelement(1, "i", 49);
180
+ i0.ɵɵelement(1, "i", 50);
179
181
  i0.ɵɵtext(2, " Regenerate ");
180
182
  i0.ɵɵelementEnd();
181
183
  } }
182
184
  function ActionFormComponentExtended_Conditional_1_Conditional_28_Template(rf, ctx) { if (rf & 1) {
183
185
  const _r8 = i0.ɵɵgetCurrentView();
184
- i0.ɵɵelementStart(0, "div", 21)(1, "button", 50);
186
+ i0.ɵɵelementStart(0, "div", 21)(1, "button", 51);
185
187
  i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_28_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.approveCode()); });
186
- i0.ɵɵelement(2, "i", 51);
188
+ i0.ɵɵelement(2, "i", 52);
187
189
  i0.ɵɵtext(3, " Approve ");
188
190
  i0.ɵɵelementEnd();
189
- i0.ɵɵelementStart(4, "button", 52);
191
+ i0.ɵɵelementStart(4, "button", 53);
190
192
  i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_28_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.rejectCode()); });
191
- i0.ɵɵelement(5, "i", 53);
193
+ i0.ɵɵelement(5, "i", 54);
192
194
  i0.ɵɵtext(6, " Reject ");
193
195
  i0.ɵɵelementEnd()();
194
196
  } }
@@ -198,7 +200,7 @@ function ActionFormComponentExtended_Conditional_1_Conditional_29_Template(rf, c
198
200
  i0.ɵɵelementEnd();
199
201
  } }
200
202
  function ActionFormComponentExtended_Conditional_1_ng_template_32_Conditional_3_Template(rf, ctx) { if (rf & 1) {
201
- i0.ɵɵelementStart(0, "span", 55);
203
+ i0.ɵɵelementStart(0, "span", 56);
202
204
  i0.ɵɵtext(1);
203
205
  i0.ɵɵelementEnd();
204
206
  } if (rf & 2) {
@@ -207,10 +209,10 @@ function ActionFormComponentExtended_Conditional_1_ng_template_32_Conditional_3_
207
209
  i0.ɵɵtextInterpolate1(" ", ctx_r1.actionParams.length, " ");
208
210
  } }
209
211
  function ActionFormComponentExtended_Conditional_1_ng_template_32_Template(rf, ctx) { if (rf & 1) {
210
- i0.ɵɵelementStart(0, "span", 54);
211
- i0.ɵɵelement(1, "i", 45);
212
+ i0.ɵɵelementStart(0, "span", 55);
213
+ i0.ɵɵelement(1, "i", 46);
212
214
  i0.ɵɵtext(2, " Parameters ");
213
- i0.ɵɵtemplate(3, ActionFormComponentExtended_Conditional_1_ng_template_32_Conditional_3_Template, 2, 1, "span", 55);
215
+ i0.ɵɵtemplate(3, ActionFormComponentExtended_Conditional_1_ng_template_32_Conditional_3_Template, 2, 1, "span", 56);
214
216
  i0.ɵɵelementEnd();
215
217
  } if (rf & 2) {
216
218
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -219,22 +221,22 @@ function ActionFormComponentExtended_Conditional_1_ng_template_32_Template(rf, c
219
221
  } }
220
222
  function ActionFormComponentExtended_Conditional_1_Conditional_34_Template(rf, ctx) { if (rf & 1) {
221
223
  i0.ɵɵelementStart(0, "div", 29);
222
- i0.ɵɵelement(1, "i", 56);
224
+ i0.ɵɵelement(1, "i", 57);
223
225
  i0.ɵɵtext(2, " Loading parameters... ");
224
226
  i0.ɵɵelementEnd();
225
227
  } }
226
228
  function ActionFormComponentExtended_Conditional_1_Conditional_35_Conditional_4_Template(rf, ctx) { if (rf & 1) {
227
- i0.ɵɵelementStart(0, "p", 59);
229
+ i0.ɵɵelementStart(0, "p", 60);
228
230
  i0.ɵɵtext(1, "Add parameters to define inputs and outputs for this action");
229
231
  i0.ɵɵelementEnd();
230
232
  } }
231
233
  function ActionFormComponentExtended_Conditional_1_Conditional_35_Template(rf, ctx) { if (rf & 1) {
232
234
  i0.ɵɵelementStart(0, "div", 30);
233
- i0.ɵɵelement(1, "i", 57);
234
- i0.ɵɵelementStart(2, "p", 58);
235
+ i0.ɵɵelement(1, "i", 58);
236
+ i0.ɵɵelementStart(2, "p", 59);
235
237
  i0.ɵɵtext(3, "No parameters defined");
236
238
  i0.ɵɵelementEnd();
237
- i0.ɵɵtemplate(4, ActionFormComponentExtended_Conditional_1_Conditional_35_Conditional_4_Template, 2, 0, "p", 59);
239
+ i0.ɵɵtemplate(4, ActionFormComponentExtended_Conditional_1_Conditional_35_Conditional_4_Template, 2, 0, "p", 60);
238
240
  i0.ɵɵelementEnd();
239
241
  } if (rf & 2) {
240
242
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -243,42 +245,42 @@ function ActionFormComponentExtended_Conditional_1_Conditional_35_Template(rf, c
243
245
  } }
244
246
  function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_5_Template(rf, ctx) { if (rf & 1) {
245
247
  const _r9 = i0.ɵɵgetCurrentView();
246
- i0.ɵɵelementStart(0, "button", 68);
248
+ i0.ɵɵelementStart(0, "button", 69);
247
249
  i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.addParameter("Input")); });
248
- i0.ɵɵelement(1, "i", 69);
250
+ i0.ɵɵelement(1, "i", 70);
249
251
  i0.ɵɵtext(2, " Add Input ");
250
252
  i0.ɵɵelementEnd();
251
253
  } }
252
254
  function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_6_Template(rf, ctx) { if (rf & 1) {
253
255
  i0.ɵɵelementStart(0, "div", 30);
254
- i0.ɵɵelement(1, "i", 70);
255
- i0.ɵɵelementStart(2, "p", 58);
256
+ i0.ɵɵelement(1, "i", 71);
257
+ i0.ɵɵelementStart(2, "p", 59);
256
258
  i0.ɵɵtext(3, "No input parameters defined");
257
259
  i0.ɵɵelementEnd()();
258
260
  } }
259
261
  function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
260
- i0.ɵɵelementStart(0, "span", 76);
262
+ i0.ɵɵelementStart(0, "span", 77);
261
263
  i0.ɵɵtext(1, "Required");
262
264
  i0.ɵɵelementEnd();
263
265
  } }
264
266
  function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
265
- i0.ɵɵelementStart(0, "span", 77);
267
+ i0.ɵɵelementStart(0, "span", 78);
266
268
  i0.ɵɵtext(1, "Array");
267
269
  i0.ɵɵelementEnd();
268
270
  } }
269
271
  function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
270
272
  const _r12 = i0.ɵɵgetCurrentView();
271
- i0.ɵɵelementStart(0, "button", 82);
273
+ i0.ɵɵelementStart(0, "button", 83);
272
274
  i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const param_r11 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.editParameter(param_r11)); });
273
- i0.ɵɵelement(1, "i", 83);
275
+ i0.ɵɵelement(1, "i", 84);
274
276
  i0.ɵɵelementEnd();
275
- i0.ɵɵelementStart(2, "button", 84);
277
+ i0.ɵɵelementStart(2, "button", 85);
276
278
  i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_7_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r12); const param_r11 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.deleteParameter(param_r11)); });
277
- i0.ɵɵelement(3, "i", 85);
279
+ i0.ɵɵelement(3, "i", 86);
278
280
  i0.ɵɵelementEnd();
279
281
  } }
280
282
  function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
281
- i0.ɵɵelementStart(0, "div", 80);
283
+ i0.ɵɵelementStart(0, "div", 81);
282
284
  i0.ɵɵtext(1);
283
285
  i0.ɵɵelementEnd();
284
286
  } if (rf & 2) {
@@ -287,7 +289,7 @@ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_
287
289
  i0.ɵɵtextInterpolate(param_r11.Description);
288
290
  } }
289
291
  function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
290
- i0.ɵɵelementStart(0, "div", 81)(1, "span", 86);
292
+ i0.ɵɵelementStart(0, "div", 82)(1, "span", 87);
291
293
  i0.ɵɵtext(2, "Default:");
292
294
  i0.ɵɵelementEnd();
293
295
  i0.ɵɵelementStart(3, "code");
@@ -300,18 +302,18 @@ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_
300
302
  } }
301
303
  function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Template(rf, ctx) { if (rf & 1) {
302
304
  const _r10 = i0.ɵɵgetCurrentView();
303
- i0.ɵɵelementStart(0, "div", 72);
305
+ i0.ɵɵelementStart(0, "div", 73);
304
306
  i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Template_div_click_0_listener($event) { const param_r11 = i0.ɵɵrestoreView(_r10).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onParamClick(param_r11, $event)); });
305
- i0.ɵɵelementStart(1, "div", 73)(2, "span", 74);
307
+ i0.ɵɵelementStart(1, "div", 74)(2, "span", 75);
306
308
  i0.ɵɵtext(3);
307
309
  i0.ɵɵelementEnd();
308
- i0.ɵɵelementStart(4, "div", 75);
309
- i0.ɵɵtemplate(5, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_5_Template, 2, 0, "span", 76)(6, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_6_Template, 2, 0, "span", 77)(7, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_7_Template, 4, 0);
310
+ i0.ɵɵelementStart(4, "div", 76);
311
+ i0.ɵɵtemplate(5, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_5_Template, 2, 0, "span", 77)(6, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_6_Template, 2, 0, "span", 78)(7, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_7_Template, 4, 0);
310
312
  i0.ɵɵelementEnd()();
311
- i0.ɵɵelementStart(8, "div", 78)(9, "div", 79);
313
+ i0.ɵɵelementStart(8, "div", 79)(9, "div", 80);
312
314
  i0.ɵɵtext(10);
313
315
  i0.ɵɵelementEnd();
314
- i0.ɵɵtemplate(11, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_11_Template, 2, 1, "div", 80)(12, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_12_Template, 5, 1, "div", 81);
316
+ i0.ɵɵtemplate(11, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_11_Template, 2, 1, "div", 81)(12, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_12_Template, 5, 1, "div", 82);
315
317
  i0.ɵɵelementEnd()();
316
318
  } if (rf & 2) {
317
319
  const param_r11 = ctx.$implicit;
@@ -333,8 +335,8 @@ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_
333
335
  i0.ɵɵconditional(param_r11.DefaultValue ? 12 : -1);
334
336
  } }
335
337
  function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_Template(rf, ctx) { if (rf & 1) {
336
- i0.ɵɵelementStart(0, "div", 64);
337
- i0.ɵɵrepeaterCreate(1, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Template, 13, 11, "div", 71, _forTrack0);
338
+ i0.ɵɵelementStart(0, "div", 65);
339
+ i0.ɵɵrepeaterCreate(1, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Template, 13, 11, "div", 72, _forTrack0);
338
340
  i0.ɵɵelementEnd();
339
341
  } if (rf & 2) {
340
342
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -343,37 +345,37 @@ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_
343
345
  } }
344
346
  function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_13_Template(rf, ctx) { if (rf & 1) {
345
347
  const _r13 = i0.ɵɵgetCurrentView();
346
- i0.ɵɵelementStart(0, "button", 68);
348
+ i0.ɵɵelementStart(0, "button", 69);
347
349
  i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_13_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.addParameter("Output")); });
348
- i0.ɵɵelement(1, "i", 69);
350
+ i0.ɵɵelement(1, "i", 70);
349
351
  i0.ɵɵtext(2, " Add Output ");
350
352
  i0.ɵɵelementEnd();
351
353
  } }
352
354
  function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_14_Template(rf, ctx) { if (rf & 1) {
353
- i0.ɵɵelementStart(0, "div", 67);
354
- i0.ɵɵelement(1, "i", 70);
355
- i0.ɵɵelementStart(2, "p", 58);
355
+ i0.ɵɵelementStart(0, "div", 68);
356
+ i0.ɵɵelement(1, "i", 71);
357
+ i0.ɵɵelementStart(2, "p", 59);
356
358
  i0.ɵɵtext(3, "No output parameters defined");
357
359
  i0.ɵɵelementEnd()();
358
360
  } }
359
361
  function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
360
- i0.ɵɵelementStart(0, "span", 77);
362
+ i0.ɵɵelementStart(0, "span", 78);
361
363
  i0.ɵɵtext(1, "Array");
362
364
  i0.ɵɵelementEnd();
363
365
  } }
364
366
  function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
365
367
  const _r16 = i0.ɵɵgetCurrentView();
366
- i0.ɵɵelementStart(0, "button", 82);
368
+ i0.ɵɵelementStart(0, "button", 83);
367
369
  i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r16); const param_r15 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.editParameter(param_r15)); });
368
- i0.ɵɵelement(1, "i", 83);
370
+ i0.ɵɵelement(1, "i", 84);
369
371
  i0.ɵɵelementEnd();
370
- i0.ɵɵelementStart(2, "button", 84);
372
+ i0.ɵɵelementStart(2, "button", 85);
371
373
  i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_6_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r16); const param_r15 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.deleteParameter(param_r15)); });
372
- i0.ɵɵelement(3, "i", 85);
374
+ i0.ɵɵelement(3, "i", 86);
373
375
  i0.ɵɵelementEnd();
374
376
  } }
375
377
  function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
376
- i0.ɵɵelementStart(0, "div", 80);
378
+ i0.ɵɵelementStart(0, "div", 81);
377
379
  i0.ɵɵtext(1);
378
380
  i0.ɵɵelementEnd();
379
381
  } if (rf & 2) {
@@ -382,7 +384,7 @@ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15
382
384
  i0.ɵɵtextInterpolate(param_r15.Description);
383
385
  } }
384
386
  function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
385
- i0.ɵɵelementStart(0, "div", 81)(1, "span", 86);
387
+ i0.ɵɵelementStart(0, "div", 82)(1, "span", 87);
386
388
  i0.ɵɵtext(2, "Default:");
387
389
  i0.ɵɵelementEnd();
388
390
  i0.ɵɵelementStart(3, "code");
@@ -395,18 +397,18 @@ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15
395
397
  } }
396
398
  function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Template(rf, ctx) { if (rf & 1) {
397
399
  const _r14 = i0.ɵɵgetCurrentView();
398
- i0.ɵɵelementStart(0, "div", 72);
400
+ i0.ɵɵelementStart(0, "div", 73);
399
401
  i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Template_div_click_0_listener($event) { const param_r15 = i0.ɵɵrestoreView(_r14).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onParamClick(param_r15, $event)); });
400
- i0.ɵɵelementStart(1, "div", 73)(2, "span", 74);
402
+ i0.ɵɵelementStart(1, "div", 74)(2, "span", 75);
401
403
  i0.ɵɵtext(3);
402
404
  i0.ɵɵelementEnd();
403
- i0.ɵɵelementStart(4, "div", 75);
404
- i0.ɵɵtemplate(5, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_5_Template, 2, 0, "span", 77)(6, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_6_Template, 4, 0);
405
+ i0.ɵɵelementStart(4, "div", 76);
406
+ i0.ɵɵtemplate(5, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_5_Template, 2, 0, "span", 78)(6, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_6_Template, 4, 0);
405
407
  i0.ɵɵelementEnd()();
406
- i0.ɵɵelementStart(7, "div", 78)(8, "div", 79);
408
+ i0.ɵɵelementStart(7, "div", 79)(8, "div", 80);
407
409
  i0.ɵɵtext(9);
408
410
  i0.ɵɵelementEnd();
409
- i0.ɵɵtemplate(10, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_10_Template, 2, 1, "div", 80)(11, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_11_Template, 5, 1, "div", 81);
411
+ i0.ɵɵtemplate(10, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_10_Template, 2, 1, "div", 81)(11, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_11_Template, 5, 1, "div", 82);
410
412
  i0.ɵɵelementEnd()();
411
413
  } if (rf & 2) {
412
414
  const param_r15 = ctx.$implicit;
@@ -426,8 +428,8 @@ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15
426
428
  i0.ɵɵconditional(param_r15.DefaultValue ? 11 : -1);
427
429
  } }
428
430
  function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_Template(rf, ctx) { if (rf & 1) {
429
- i0.ɵɵelementStart(0, "div", 64);
430
- i0.ɵɵrepeaterCreate(1, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Template, 12, 8, "div", 87, _forTrack0);
431
+ i0.ɵɵelementStart(0, "div", 65);
432
+ i0.ɵɵrepeaterCreate(1, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Template, 12, 8, "div", 88, _forTrack0);
431
433
  i0.ɵɵelementEnd();
432
434
  } if (rf & 2) {
433
435
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -435,21 +437,21 @@ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15
435
437
  i0.ɵɵrepeater(ctx_r1.getOutputParams());
436
438
  } }
437
439
  function ActionFormComponentExtended_Conditional_1_Conditional_36_Template(rf, ctx) { if (rf & 1) {
438
- i0.ɵɵelementStart(0, "div", 60)(1, "div", 61)(2, "h3");
439
- i0.ɵɵelement(3, "i", 62);
440
+ i0.ɵɵelementStart(0, "div", 61)(1, "div", 62)(2, "h3");
441
+ i0.ɵɵelement(3, "i", 63);
440
442
  i0.ɵɵtext(4, " Input Parameters");
441
443
  i0.ɵɵelementEnd();
442
- i0.ɵɵtemplate(5, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_5_Template, 3, 0, "button", 63);
444
+ i0.ɵɵtemplate(5, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_5_Template, 3, 0, "button", 64);
443
445
  i0.ɵɵelementEnd();
444
- i0.ɵɵtemplate(6, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_6_Template, 4, 0, "div", 30)(7, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_Template, 3, 0, "div", 64);
446
+ i0.ɵɵtemplate(6, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_6_Template, 4, 0, "div", 30)(7, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_Template, 3, 0, "div", 65);
445
447
  i0.ɵɵelementEnd();
446
- i0.ɵɵelementStart(8, "div", 65)(9, "div", 61)(10, "h3");
447
- i0.ɵɵelement(11, "i", 66);
448
+ i0.ɵɵelementStart(8, "div", 66)(9, "div", 62)(10, "h3");
449
+ i0.ɵɵelement(11, "i", 67);
448
450
  i0.ɵɵtext(12, " Output Parameters");
449
451
  i0.ɵɵelementEnd();
450
- i0.ɵɵtemplate(13, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_13_Template, 3, 0, "button", 63);
452
+ i0.ɵɵtemplate(13, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_13_Template, 3, 0, "button", 64);
451
453
  i0.ɵɵelementEnd();
452
- i0.ɵɵtemplate(14, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_14_Template, 4, 0, "div", 67)(15, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_Template, 3, 0, "div", 64);
454
+ i0.ɵɵtemplate(14, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_14_Template, 4, 0, "div", 68)(15, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_Template, 3, 0, "div", 65);
453
455
  i0.ɵɵelementEnd();
454
456
  } if (rf & 2) {
455
457
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -465,16 +467,16 @@ function ActionFormComponentExtended_Conditional_1_Conditional_36_Template(rf, c
465
467
  i0.ɵɵconditional(ctx_r1.getOutputParams().length === 0 ? 14 : 15);
466
468
  } }
467
469
  function ActionFormComponentExtended_Conditional_1_Conditional_37_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
468
- i0.ɵɵelementStart(0, "span", 98);
469
- i0.ɵɵelement(1, "i", 99);
470
+ i0.ɵɵelementStart(0, "span", 99);
471
+ i0.ɵɵelement(1, "i", 100);
470
472
  i0.ɵɵtext(2, " Locked ");
471
473
  i0.ɵɵelementEnd();
472
474
  } }
473
475
  function ActionFormComponentExtended_Conditional_1_Conditional_37_ng_template_1_Template(rf, ctx) { if (rf & 1) {
474
- i0.ɵɵelementStart(0, "span", 54);
475
- i0.ɵɵelement(1, "i", 97);
476
+ i0.ɵɵelementStart(0, "span", 55);
477
+ i0.ɵɵelement(1, "i", 98);
476
478
  i0.ɵɵtext(2, " Code & Generation ");
477
- i0.ɵɵtemplate(3, ActionFormComponentExtended_Conditional_1_Conditional_37_ng_template_1_Conditional_3_Template, 3, 0, "span", 98);
479
+ i0.ɵɵtemplate(3, ActionFormComponentExtended_Conditional_1_Conditional_37_ng_template_1_Conditional_3_Template, 3, 0, "span", 99);
478
480
  i0.ɵɵelementEnd();
479
481
  } if (rf & 2) {
480
482
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -483,26 +485,26 @@ function ActionFormComponentExtended_Conditional_1_Conditional_37_ng_template_1_
483
485
  } }
484
486
  function ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_3_Template(rf, ctx) { if (rf & 1) {
485
487
  const _r18 = i0.ɵɵgetCurrentView();
486
- i0.ɵɵelementStart(0, "div", 88)(1, "h3");
487
- i0.ɵɵelement(2, "i", 49);
488
+ i0.ɵɵelementStart(0, "div", 89)(1, "h3");
489
+ i0.ɵɵelement(2, "i", 50);
488
490
  i0.ɵɵtext(3, " AI Generation");
489
491
  i0.ɵɵelementEnd();
490
- i0.ɵɵelementStart(4, "div", 100)(5, "label");
492
+ i0.ɵɵelementStart(4, "div", 101)(5, "label");
491
493
  i0.ɵɵtext(6, "User Prompt");
492
494
  i0.ɵɵelementEnd();
493
- i0.ɵɵelementStart(7, "kendo-textarea", 101);
495
+ i0.ɵɵelementStart(7, "kendo-textarea", 102);
494
496
  i0.ɵɵtwoWayListener("ngModelChange", function ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_3_Template_kendo_textarea_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.UserPrompt, $event) || (ctx_r1.record.UserPrompt = $event); return i0.ɵɵresetView($event); });
495
497
  i0.ɵɵelementEnd()();
496
- i0.ɵɵelementStart(8, "div", 102)(9, "label");
498
+ i0.ɵɵelementStart(8, "div", 103)(9, "label");
497
499
  i0.ɵɵtext(10, "Internal Comments (not sent to AI)");
498
500
  i0.ɵɵelementEnd();
499
- i0.ɵɵelementStart(11, "kendo-textarea", 103);
501
+ i0.ɵɵelementStart(11, "kendo-textarea", 104);
500
502
  i0.ɵɵtwoWayListener("ngModelChange", function ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_3_Template_kendo_textarea_ngModelChange_11_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.UserComments, $event) || (ctx_r1.record.UserComments = $event); return i0.ɵɵresetView($event); });
501
503
  i0.ɵɵelementEnd()();
502
- i0.ɵɵelementStart(12, "div", 104)(13, "kendo-switch", 105);
504
+ i0.ɵɵelementStart(12, "div", 105)(13, "kendo-switch", 106);
503
505
  i0.ɵɵtwoWayListener("ngModelChange", function ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_3_Template_kendo_switch_ngModelChange_13_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.CodeLocked, $event) || (ctx_r1.record.CodeLocked = $event); return i0.ɵɵresetView($event); });
504
506
  i0.ɵɵelementEnd();
505
- i0.ɵɵelementStart(14, "label", 106);
507
+ i0.ɵɵelementStart(14, "label", 107);
506
508
  i0.ɵɵtext(15, "Lock Code (prevent regeneration)");
507
509
  i0.ɵɵelementEnd()()();
508
510
  } if (rf & 2) {
@@ -518,9 +520,9 @@ function ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_3_
518
520
  } }
519
521
  function ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_10_Template(rf, ctx) { if (rf & 1) {
520
522
  const _r19 = i0.ɵɵgetCurrentView();
521
- i0.ɵɵelementStart(0, "button", 68);
523
+ i0.ɵɵelementStart(0, "button", 69);
522
524
  i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleCodeComments()); });
523
- i0.ɵɵelement(1, "i", 107);
525
+ i0.ɵɵelement(1, "i", 108);
524
526
  i0.ɵɵtext(2);
525
527
  i0.ɵɵelementEnd();
526
528
  } if (rf & 2) {
@@ -529,8 +531,8 @@ function ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_10
529
531
  i0.ɵɵtextInterpolate1(" ", ctx_r1.showCodeComments ? "Hide" : "Show", " AI Comments ");
530
532
  } }
531
533
  function ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_15_Template(rf, ctx) { if (rf & 1) {
532
- i0.ɵɵelementStart(0, "div", 95)(1, "h4");
533
- i0.ɵɵelement(2, "i", 49);
534
+ i0.ɵɵelementStart(0, "div", 96)(1, "h4");
535
+ i0.ɵɵelement(2, "i", 50);
534
536
  i0.ɵɵtext(3, " AI Explanation");
535
537
  i0.ɵɵelementEnd();
536
538
  i0.ɵɵelementStart(4, "p");
@@ -543,10 +545,10 @@ function ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_15
543
545
  } }
544
546
  function ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_16_Template(rf, ctx) { if (rf & 1) {
545
547
  const _r20 = i0.ɵɵgetCurrentView();
546
- i0.ɵɵelementStart(0, "div", 96)(1, "label");
548
+ i0.ɵɵelementStart(0, "div", 97)(1, "label");
547
549
  i0.ɵɵtext(2, "Rejection Comments");
548
550
  i0.ɵɵelementEnd();
549
- i0.ɵɵelementStart(3, "kendo-textarea", 108);
551
+ i0.ɵɵelementStart(3, "kendo-textarea", 109);
550
552
  i0.ɵɵtwoWayListener("ngModelChange", function ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_16_Template_kendo_textarea_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.CodeApprovalComments, $event) || (ctx_r1.record.CodeApprovalComments = $event); return i0.ɵɵresetView($event); });
551
553
  i0.ɵɵelementEnd()();
552
554
  } if (rf & 2) {
@@ -560,22 +562,22 @@ function ActionFormComponentExtended_Conditional_1_Conditional_37_Template(rf, c
560
562
  i0.ɵɵelementStart(0, "kendo-expansionpanel", 26);
561
563
  i0.ɵɵtemplate(1, ActionFormComponentExtended_Conditional_1_Conditional_37_ng_template_1_Template, 4, 1, "ng-template", 27);
562
564
  i0.ɵɵelementStart(2, "div", 28);
563
- i0.ɵɵtemplate(3, ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_3_Template, 16, 5, "div", 88);
564
- i0.ɵɵelementStart(4, "div", 89)(5, "div", 90)(6, "h3");
565
- i0.ɵɵelement(7, "i", 91);
565
+ i0.ɵɵtemplate(3, ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_3_Template, 16, 5, "div", 89);
566
+ i0.ɵɵelementStart(4, "div", 90)(5, "div", 91)(6, "h3");
567
+ i0.ɵɵelement(7, "i", 92);
566
568
  i0.ɵɵtext(8, " Action Code");
567
569
  i0.ɵɵelementEnd();
568
- i0.ɵɵelementStart(9, "div", 92);
569
- i0.ɵɵtemplate(10, ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_10_Template, 3, 1, "button", 63);
570
- i0.ɵɵelementStart(11, "button", 68);
570
+ i0.ɵɵelementStart(9, "div", 93);
571
+ i0.ɵɵtemplate(10, ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_10_Template, 3, 1, "button", 64);
572
+ i0.ɵɵelementStart(11, "button", 69);
571
573
  i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_37_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.record.Code || "")); });
572
- i0.ɵɵelement(12, "i", 93);
574
+ i0.ɵɵelement(12, "i", 94);
573
575
  i0.ɵɵtext(13, " Copy ");
574
576
  i0.ɵɵelementEnd()()();
575
- i0.ɵɵelementStart(14, "mj-code-editor", 94);
577
+ i0.ɵɵelementStart(14, "mj-code-editor", 95);
576
578
  i0.ɵɵtwoWayListener("ngModelChange", function ActionFormComponentExtended_Conditional_1_Conditional_37_Template_mj_code_editor_ngModelChange_14_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Code, $event) || (ctx_r1.record.Code = $event); return i0.ɵɵresetView($event); });
577
579
  i0.ɵɵelementEnd();
578
- i0.ɵɵtemplate(15, ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_15_Template, 6, 1, "div", 95)(16, ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_16_Template, 4, 2, "div", 96);
580
+ i0.ɵɵtemplate(15, ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_15_Template, 6, 1, "div", 96)(16, ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_16_Template, 4, 2, "div", 97);
579
581
  i0.ɵɵelementEnd()()();
580
582
  } if (rf & 2) {
581
583
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -593,7 +595,7 @@ function ActionFormComponentExtended_Conditional_1_Conditional_37_Template(rf, c
593
595
  i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.record.CodeApprovalStatus === "Rejected" ? 16 : -1);
594
596
  } }
595
597
  function ActionFormComponentExtended_Conditional_1_ng_template_39_Conditional_3_Template(rf, ctx) { if (rf & 1) {
596
- i0.ɵɵelementStart(0, "span", 110);
598
+ i0.ɵɵelementStart(0, "span", 111);
597
599
  i0.ɵɵtext(1);
598
600
  i0.ɵɵelementEnd();
599
601
  } if (rf & 2) {
@@ -602,10 +604,10 @@ function ActionFormComponentExtended_Conditional_1_ng_template_39_Conditional_3_
602
604
  i0.ɵɵtextInterpolate1(" ", ctx_r1.resultCodes.length, " ");
603
605
  } }
604
606
  function ActionFormComponentExtended_Conditional_1_ng_template_39_Template(rf, ctx) { if (rf & 1) {
605
- i0.ɵɵelementStart(0, "span", 54);
606
- i0.ɵɵelement(1, "i", 109);
607
+ i0.ɵɵelementStart(0, "span", 55);
608
+ i0.ɵɵelement(1, "i", 110);
607
609
  i0.ɵɵtext(2, " Result Codes ");
608
- i0.ɵɵtemplate(3, ActionFormComponentExtended_Conditional_1_ng_template_39_Conditional_3_Template, 2, 1, "span", 110);
610
+ i0.ɵɵtemplate(3, ActionFormComponentExtended_Conditional_1_ng_template_39_Conditional_3_Template, 2, 1, "span", 111);
609
611
  i0.ɵɵelementEnd();
610
612
  } if (rf & 2) {
611
613
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -613,161 +615,191 @@ function ActionFormComponentExtended_Conditional_1_ng_template_39_Template(rf, c
613
615
  i0.ɵɵconditional(ctx_r1.resultCodes.length > 0 ? 3 : -1);
614
616
  } }
615
617
  function ActionFormComponentExtended_Conditional_1_Conditional_41_Template(rf, ctx) { if (rf & 1) {
618
+ const _r21 = i0.ɵɵgetCurrentView();
619
+ i0.ɵɵelementStart(0, "div", 31)(1, "button", 112);
620
+ i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_41_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.addResultCode()); });
621
+ i0.ɵɵelement(2, "i", 70);
622
+ i0.ɵɵtext(3, " Add Result Code ");
623
+ i0.ɵɵelementEnd()();
624
+ } if (rf & 2) {
625
+ i0.ɵɵadvance();
626
+ i0.ɵɵproperty("primary", true);
627
+ } }
628
+ function ActionFormComponentExtended_Conditional_1_Conditional_42_Template(rf, ctx) { if (rf & 1) {
616
629
  i0.ɵɵelementStart(0, "div", 29);
617
- i0.ɵɵelement(1, "i", 56);
630
+ i0.ɵɵelement(1, "i", 57);
618
631
  i0.ɵɵtext(2, " Loading result codes... ");
619
632
  i0.ɵɵelementEnd();
620
633
  } }
621
- function ActionFormComponentExtended_Conditional_1_Conditional_42_Conditional_4_Template(rf, ctx) { if (rf & 1) {
622
- i0.ɵɵelementStart(0, "p", 59);
634
+ function ActionFormComponentExtended_Conditional_1_Conditional_43_Conditional_4_Template(rf, ctx) { if (rf & 1) {
635
+ i0.ɵɵelementStart(0, "p", 60);
623
636
  i0.ɵɵtext(1, "Add result codes to define possible outcomes");
624
637
  i0.ɵɵelementEnd();
625
638
  } }
626
- function ActionFormComponentExtended_Conditional_1_Conditional_42_Template(rf, ctx) { if (rf & 1) {
639
+ function ActionFormComponentExtended_Conditional_1_Conditional_43_Template(rf, ctx) { if (rf & 1) {
627
640
  i0.ɵɵelementStart(0, "div", 30);
628
- i0.ɵɵelement(1, "i", 111);
629
- i0.ɵɵelementStart(2, "p", 58);
641
+ i0.ɵɵelement(1, "i", 113);
642
+ i0.ɵɵelementStart(2, "p", 59);
630
643
  i0.ɵɵtext(3, "No result codes defined");
631
644
  i0.ɵɵelementEnd();
632
- i0.ɵɵtemplate(4, ActionFormComponentExtended_Conditional_1_Conditional_42_Conditional_4_Template, 2, 0, "p", 59);
645
+ i0.ɵɵtemplate(4, ActionFormComponentExtended_Conditional_1_Conditional_43_Conditional_4_Template, 2, 0, "p", 60);
633
646
  i0.ɵɵelementEnd();
634
647
  } if (rf & 2) {
635
648
  const ctx_r1 = i0.ɵɵnextContext(2);
636
649
  i0.ɵɵadvance(4);
637
650
  i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.record.IsSaved ? 4 : -1);
638
651
  } }
639
- function ActionFormComponentExtended_Conditional_1_Conditional_43_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
640
- i0.ɵɵelementStart(0, "div", 117);
652
+ function ActionFormComponentExtended_Conditional_1_Conditional_44_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
653
+ i0.ɵɵelementStart(0, "div", 119);
641
654
  i0.ɵɵtext(1);
642
655
  i0.ɵɵelementEnd();
643
656
  } if (rf & 2) {
644
- const code_r21 = i0.ɵɵnextContext().$implicit;
657
+ const code_r23 = i0.ɵɵnextContext().$implicit;
645
658
  i0.ɵɵadvance();
646
- i0.ɵɵtextInterpolate(code_r21.Description);
659
+ i0.ɵɵtextInterpolate(code_r23.Description);
647
660
  } }
648
- function ActionFormComponentExtended_Conditional_1_Conditional_43_For_2_Template(rf, ctx) { if (rf & 1) {
649
- i0.ɵɵelementStart(0, "div", 113)(1, "div", 114);
661
+ function ActionFormComponentExtended_Conditional_1_Conditional_44_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
662
+ const _r24 = i0.ɵɵgetCurrentView();
663
+ i0.ɵɵelementStart(0, "div", 120)(1, "button", 121);
664
+ i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_44_For_2_Conditional_7_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r24); const code_r23 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); ctx_r1.editResultCode(code_r23); return i0.ɵɵresetView($event.stopPropagation()); });
665
+ i0.ɵɵelement(2, "i", 84);
666
+ i0.ɵɵelementEnd();
667
+ i0.ɵɵelementStart(3, "button", 122);
668
+ i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_44_For_2_Conditional_7_Template_button_click_3_listener($event) { i0.ɵɵrestoreView(_r24); const code_r23 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); ctx_r1.deleteResultCode(code_r23); return i0.ɵɵresetView($event.stopPropagation()); });
669
+ i0.ɵɵelement(4, "i", 86);
670
+ i0.ɵɵelementEnd()();
671
+ } }
672
+ function ActionFormComponentExtended_Conditional_1_Conditional_44_For_2_Template(rf, ctx) { if (rf & 1) {
673
+ const _r22 = i0.ɵɵgetCurrentView();
674
+ i0.ɵɵelementStart(0, "div", 115);
675
+ i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_44_For_2_Template_div_click_0_listener($event) { const code_r23 = i0.ɵɵrestoreView(_r22).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onResultCodeClick(code_r23, $event)); });
676
+ i0.ɵɵelementStart(1, "div", 116);
650
677
  i0.ɵɵelement(2, "i");
651
678
  i0.ɵɵelementEnd();
652
- i0.ɵɵelementStart(3, "div", 115)(4, "div", 116);
679
+ i0.ɵɵelementStart(3, "div", 117)(4, "div", 118);
653
680
  i0.ɵɵtext(5);
654
681
  i0.ɵɵelementEnd();
655
- i0.ɵɵtemplate(6, ActionFormComponentExtended_Conditional_1_Conditional_43_For_2_Conditional_6_Template, 2, 1, "div", 117);
656
- i0.ɵɵelementEnd()();
682
+ i0.ɵɵtemplate(6, ActionFormComponentExtended_Conditional_1_Conditional_44_For_2_Conditional_6_Template, 2, 1, "div", 119);
683
+ i0.ɵɵelementEnd();
684
+ i0.ɵɵtemplate(7, ActionFormComponentExtended_Conditional_1_Conditional_44_For_2_Conditional_7_Template, 5, 0, "div", 120);
685
+ i0.ɵɵelementEnd();
657
686
  } if (rf & 2) {
658
- const code_r21 = ctx.$implicit;
659
- i0.ɵɵclassProp("success", code_r21.IsSuccess)("failure", !code_r21.IsSuccess);
687
+ const code_r23 = ctx.$implicit;
688
+ const ctx_r1 = i0.ɵɵnextContext(3);
689
+ i0.ɵɵclassProp("success", code_r23.IsSuccess)("failure", !code_r23.IsSuccess)("clickable", true);
660
690
  i0.ɵɵadvance(2);
661
- i0.ɵɵclassMap(code_r21.IsSuccess ? "fa-solid fa-check-circle" : "fa-solid fa-times-circle");
691
+ i0.ɵɵclassMap(code_r23.IsSuccess ? "fa-solid fa-check-circle" : "fa-solid fa-times-circle");
662
692
  i0.ɵɵadvance(3);
663
- i0.ɵɵtextInterpolate(code_r21.ResultCode);
693
+ i0.ɵɵtextInterpolate(code_r23.ResultCode);
694
+ i0.ɵɵadvance();
695
+ i0.ɵɵconditional(code_r23.Description ? 6 : -1);
664
696
  i0.ɵɵadvance();
665
- i0.ɵɵconditional(code_r21.Description ? 6 : -1);
697
+ i0.ɵɵconditional(ctx_r1.EditMode ? 7 : -1);
666
698
  } }
667
- function ActionFormComponentExtended_Conditional_1_Conditional_43_Template(rf, ctx) { if (rf & 1) {
668
- i0.ɵɵelementStart(0, "div", 31);
669
- i0.ɵɵrepeaterCreate(1, ActionFormComponentExtended_Conditional_1_Conditional_43_For_2_Template, 7, 8, "div", 112, _forTrack0);
699
+ function ActionFormComponentExtended_Conditional_1_Conditional_44_Template(rf, ctx) { if (rf & 1) {
700
+ i0.ɵɵelementStart(0, "div", 32);
701
+ i0.ɵɵrepeaterCreate(1, ActionFormComponentExtended_Conditional_1_Conditional_44_For_2_Template, 8, 11, "div", 114, _forTrack0);
670
702
  i0.ɵɵelementEnd();
671
703
  } if (rf & 2) {
672
704
  const ctx_r1 = i0.ɵɵnextContext(2);
673
705
  i0.ɵɵadvance();
674
706
  i0.ɵɵrepeater(ctx_r1.resultCodes);
675
707
  } }
676
- function ActionFormComponentExtended_Conditional_1_Conditional_44_ng_template_1_Template(rf, ctx) { if (rf & 1) {
677
- i0.ɵɵelementStart(0, "span", 54);
678
- i0.ɵɵelement(1, "i", 118);
708
+ function ActionFormComponentExtended_Conditional_1_Conditional_45_ng_template_1_Template(rf, ctx) { if (rf & 1) {
709
+ i0.ɵɵelementStart(0, "span", 55);
710
+ i0.ɵɵelement(1, "i", 123);
679
711
  i0.ɵɵtext(2, " Execution & Monitoring ");
680
712
  i0.ɵɵelementEnd();
681
713
  } }
682
- function ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_3_Template(rf, ctx) { if (rf & 1) {
714
+ function ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_3_Template(rf, ctx) { if (rf & 1) {
683
715
  i0.ɵɵelementStart(0, "div", 29);
684
- i0.ɵɵelement(1, "i", 56);
716
+ i0.ɵɵelement(1, "i", 57);
685
717
  i0.ɵɵtext(2, " Loading executions... ");
686
718
  i0.ɵɵelementEnd();
687
719
  } }
688
- function ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_4_Template(rf, ctx) { if (rf & 1) {
720
+ function ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_4_Template(rf, ctx) { if (rf & 1) {
689
721
  i0.ɵɵelementStart(0, "div", 30);
690
- i0.ɵɵelement(1, "i", 119);
691
- i0.ɵɵelementStart(2, "p", 58);
722
+ i0.ɵɵelement(1, "i", 124);
723
+ i0.ɵɵelementStart(2, "p", 59);
692
724
  i0.ɵɵtext(3, "No executions yet");
693
725
  i0.ɵɵelementEnd()();
694
726
  } }
695
- function ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_For_41_Conditional_5_Template(rf, ctx) { if (rf & 1) {
727
+ function ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_5_For_41_Conditional_5_Template(rf, ctx) { if (rf & 1) {
696
728
  i0.ɵɵtext(0);
697
729
  } if (rf & 2) {
698
- const execution_r23 = i0.ɵɵnextContext().$implicit;
730
+ const execution_r26 = i0.ɵɵnextContext().$implicit;
699
731
  const ctx_r1 = i0.ɵɵnextContext(4);
700
- i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(ctx_r1.getExecutionDuration(execution_r23)), " ");
732
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(ctx_r1.getExecutionDuration(execution_r26)), " ");
701
733
  } }
702
- function ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_For_41_Conditional_6_Template(rf, ctx) { if (rf & 1) {
703
- i0.ɵɵelementStart(0, "span", 134);
734
+ function ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_5_For_41_Conditional_6_Template(rf, ctx) { if (rf & 1) {
735
+ i0.ɵɵelementStart(0, "span", 139);
704
736
  i0.ɵɵtext(1, "Running...");
705
737
  i0.ɵɵelementEnd();
706
738
  } }
707
- function ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_For_41_Template(rf, ctx) { if (rf & 1) {
708
- const _r22 = i0.ɵɵgetCurrentView();
709
- i0.ɵɵelementStart(0, "tr", 133)(1, "td");
739
+ function ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_5_For_41_Template(rf, ctx) { if (rf & 1) {
740
+ const _r25 = i0.ɵɵgetCurrentView();
741
+ i0.ɵɵelementStart(0, "tr", 138)(1, "td");
710
742
  i0.ɵɵtext(2);
711
743
  i0.ɵɵpipe(3, "date");
712
744
  i0.ɵɵelementEnd();
713
745
  i0.ɵɵelementStart(4, "td");
714
- i0.ɵɵtemplate(5, ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_For_41_Conditional_5_Template, 1, 1)(6, ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_For_41_Conditional_6_Template, 2, 0, "span", 134);
746
+ i0.ɵɵtemplate(5, ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_5_For_41_Conditional_5_Template, 1, 1)(6, ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_5_For_41_Conditional_6_Template, 2, 0, "span", 139);
715
747
  i0.ɵɵelementEnd();
716
748
  i0.ɵɵelementStart(7, "td");
717
749
  i0.ɵɵtext(8);
718
750
  i0.ɵɵelementEnd();
719
- i0.ɵɵelementStart(9, "td")(10, "span", 116);
751
+ i0.ɵɵelementStart(9, "td")(10, "span", 118);
720
752
  i0.ɵɵtext(11);
721
753
  i0.ɵɵelementEnd()();
722
- i0.ɵɵelementStart(12, "td")(13, "button", 68);
723
- i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_For_41_Template_button_click_13_listener() { const execution_r23 = i0.ɵɵrestoreView(_r22).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToExecution(execution_r23.ID)); });
724
- i0.ɵɵelement(14, "i", 135);
754
+ i0.ɵɵelementStart(12, "td")(13, "button", 69);
755
+ i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_5_For_41_Template_button_click_13_listener() { const execution_r26 = i0.ɵɵrestoreView(_r25).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToExecution(execution_r26.ID)); });
756
+ i0.ɵɵelement(14, "i", 140);
725
757
  i0.ɵɵelementEnd()()();
726
758
  } if (rf & 2) {
727
- const execution_r23 = ctx.$implicit;
759
+ const execution_r26 = ctx.$implicit;
728
760
  const ctx_r1 = i0.ɵɵnextContext(4);
729
- i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(execution_r23));
761
+ i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(execution_r26));
730
762
  i0.ɵɵadvance(2);
731
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(3, 10, execution_r23.StartedAt, "short"));
763
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(3, 10, execution_r26.StartedAt, "short"));
732
764
  i0.ɵɵadvance(3);
733
- i0.ɵɵconditional(execution_r23.EndedAt ? 5 : 6);
765
+ i0.ɵɵconditional(execution_r26.EndedAt ? 5 : 6);
734
766
  i0.ɵɵadvance(3);
735
- i0.ɵɵtextInterpolate(execution_r23.User);
767
+ i0.ɵɵtextInterpolate(execution_r26.User);
736
768
  i0.ɵɵadvance(2);
737
- i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(execution_r23))("failure", !ctx_r1.isExecutionSuccess(execution_r23));
769
+ i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(execution_r26))("failure", !ctx_r1.isExecutionSuccess(execution_r26));
738
770
  i0.ɵɵadvance();
739
- i0.ɵɵtextInterpolate1(" ", execution_r23.ResultCode, " ");
771
+ i0.ɵɵtextInterpolate1(" ", execution_r26.ResultCode, " ");
740
772
  } }
741
- function ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Template(rf, ctx) { if (rf & 1) {
742
- i0.ɵɵelementStart(0, "div", 120)(1, "div", 121);
743
- i0.ɵɵelement(2, "i", 122);
744
- i0.ɵɵelementStart(3, "div", 123)(4, "div", 124);
773
+ function ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_5_Template(rf, ctx) { if (rf & 1) {
774
+ i0.ɵɵelementStart(0, "div", 125)(1, "div", 126);
775
+ i0.ɵɵelement(2, "i", 127);
776
+ i0.ɵɵelementStart(3, "div", 128)(4, "div", 129);
745
777
  i0.ɵɵtext(5, "Avg Duration");
746
778
  i0.ɵɵelementEnd();
747
- i0.ɵɵelementStart(6, "div", 125);
779
+ i0.ɵɵelementStart(6, "div", 130);
748
780
  i0.ɵɵtext(7);
749
781
  i0.ɵɵelementEnd()()();
750
- i0.ɵɵelementStart(8, "div", 121);
751
- i0.ɵɵelement(9, "i", 126);
752
- i0.ɵɵelementStart(10, "div", 123)(11, "div", 124);
782
+ i0.ɵɵelementStart(8, "div", 126);
783
+ i0.ɵɵelement(9, "i", 131);
784
+ i0.ɵɵelementStart(10, "div", 128)(11, "div", 129);
753
785
  i0.ɵɵtext(12, "Success Rate");
754
786
  i0.ɵɵelementEnd();
755
- i0.ɵɵelementStart(13, "div", 127);
787
+ i0.ɵɵelementStart(13, "div", 132);
756
788
  i0.ɵɵtext(14);
757
789
  i0.ɵɵelementEnd()()();
758
- i0.ɵɵelementStart(15, "div", 121);
759
- i0.ɵɵelement(16, "i", 128);
760
- i0.ɵɵelementStart(17, "div", 123)(18, "div", 124);
790
+ i0.ɵɵelementStart(15, "div", 126);
791
+ i0.ɵɵelement(16, "i", 133);
792
+ i0.ɵɵelementStart(17, "div", 128)(18, "div", 129);
761
793
  i0.ɵɵtext(19, "Total Runs");
762
794
  i0.ɵɵelementEnd();
763
- i0.ɵɵelementStart(20, "div", 125);
795
+ i0.ɵɵelementStart(20, "div", 130);
764
796
  i0.ɵɵtext(21);
765
797
  i0.ɵɵelementEnd()()()();
766
- i0.ɵɵelementStart(22, "h3", 129);
767
- i0.ɵɵelement(23, "i", 130);
798
+ i0.ɵɵelementStart(22, "h3", 134);
799
+ i0.ɵɵelement(23, "i", 135);
768
800
  i0.ɵɵtext(24, " Recent Executions");
769
801
  i0.ɵɵelementEnd();
770
- i0.ɵɵelementStart(25, "div", 131)(26, "table")(27, "thead")(28, "tr")(29, "th");
802
+ i0.ɵɵelementStart(25, "div", 136)(26, "table")(27, "thead")(28, "tr")(29, "th");
771
803
  i0.ɵɵtext(30, "Started");
772
804
  i0.ɵɵelementEnd();
773
805
  i0.ɵɵelementStart(31, "th");
@@ -783,7 +815,7 @@ function ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_
783
815
  i0.ɵɵtext(38, "Actions");
784
816
  i0.ɵɵelementEnd()()();
785
817
  i0.ɵɵelementStart(39, "tbody");
786
- i0.ɵɵrepeaterCreate(40, ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_For_41_Template, 15, 13, "tr", 132, _forTrack0);
818
+ i0.ɵɵrepeaterCreate(40, ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_5_For_41_Template, 15, 13, "tr", 137, _forTrack0);
787
819
  i0.ɵɵelementEnd()()();
788
820
  } if (rf & 2) {
789
821
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -800,11 +832,11 @@ function ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_
800
832
  i0.ɵɵadvance(19);
801
833
  i0.ɵɵrepeater(ctx_r1.recentExecutions);
802
834
  } }
803
- function ActionFormComponentExtended_Conditional_1_Conditional_44_Template(rf, ctx) { if (rf & 1) {
835
+ function ActionFormComponentExtended_Conditional_1_Conditional_45_Template(rf, ctx) { if (rf & 1) {
804
836
  i0.ɵɵelementStart(0, "kendo-expansionpanel", 26);
805
- i0.ɵɵtemplate(1, ActionFormComponentExtended_Conditional_1_Conditional_44_ng_template_1_Template, 3, 0, "ng-template", 27);
837
+ i0.ɵɵtemplate(1, ActionFormComponentExtended_Conditional_1_Conditional_45_ng_template_1_Template, 3, 0, "ng-template", 27);
806
838
  i0.ɵɵelementStart(2, "div", 28);
807
- i0.ɵɵtemplate(3, ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_3_Template, 3, 0, "div", 29)(4, ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_4_Template, 4, 0, "div", 30)(5, ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Template, 42, 7);
839
+ i0.ɵɵtemplate(3, ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_3_Template, 3, 0, "div", 29)(4, ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_4_Template, 4, 0, "div", 30)(5, ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_5_Template, 42, 7);
808
840
  i0.ɵɵelementEnd()();
809
841
  } if (rf & 2) {
810
842
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -812,102 +844,102 @@ function ActionFormComponentExtended_Conditional_1_Conditional_44_Template(rf, c
812
844
  i0.ɵɵadvance(3);
813
845
  i0.ɵɵconditional(ctx_r1.isLoadingExecutions ? 3 : ctx_r1.recentExecutions.length === 0 ? 4 : 5);
814
846
  } }
815
- function ActionFormComponentExtended_Conditional_1_Conditional_45_ng_template_1_Template(rf, ctx) { if (rf & 1) {
816
- i0.ɵɵelementStart(0, "span", 54);
817
- i0.ɵɵelement(1, "i", 147);
847
+ function ActionFormComponentExtended_Conditional_1_Conditional_46_ng_template_1_Template(rf, ctx) { if (rf & 1) {
848
+ i0.ɵɵelementStart(0, "span", 55);
849
+ i0.ɵɵelement(1, "i", 152);
818
850
  i0.ɵɵtext(2, " Related Configuration ");
819
851
  i0.ɵɵelementEnd();
820
852
  } }
821
- function ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_7_Template(rf, ctx) { if (rf & 1) {
853
+ function ActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_7_Template(rf, ctx) { if (rf & 1) {
822
854
  i0.ɵɵelementStart(0, "div", 29);
823
- i0.ɵɵelement(1, "i", 56);
855
+ i0.ɵɵelement(1, "i", 57);
824
856
  i0.ɵɵtext(2, " Loading libraries... ");
825
857
  i0.ɵɵelementEnd();
826
858
  } }
827
- function ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_8_Template(rf, ctx) { if (rf & 1) {
828
- i0.ɵɵelementStart(0, "div", 138)(1, "p");
859
+ function ActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_8_Template(rf, ctx) { if (rf & 1) {
860
+ i0.ɵɵelementStart(0, "div", 143)(1, "p");
829
861
  i0.ɵɵtext(2, "No libraries configured");
830
862
  i0.ɵɵelementEnd()();
831
863
  } }
832
- function ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_9_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
833
- i0.ɵɵelementStart(0, "div", 152);
864
+ function ActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_9_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
865
+ i0.ɵɵelementStart(0, "div", 157);
834
866
  i0.ɵɵtext(1);
835
867
  i0.ɵɵelementEnd();
836
868
  } if (rf & 2) {
837
- const ɵ$index_618_r26 = i0.ɵɵnextContext().$index;
869
+ const ɵ$index_637_r29 = i0.ɵɵnextContext().$index;
838
870
  const ctx_r1 = i0.ɵɵnextContext(4);
839
871
  i0.ɵɵadvance();
840
- i0.ɵɵtextInterpolate(ctx_r1.actionLibraries[ɵ$index_618_r26].ItemsUsed);
872
+ i0.ɵɵtextInterpolate(ctx_r1.actionLibraries[ɵ$index_637_r29].ItemsUsed);
841
873
  } }
842
- function ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_9_For_2_Template(rf, ctx) { if (rf & 1) {
843
- const _r24 = i0.ɵɵgetCurrentView();
844
- i0.ɵɵelementStart(0, "div", 149);
845
- i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_9_For_2_Template_div_click_0_listener() { const lib_r25 = i0.ɵɵrestoreView(_r24).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToLibrary(lib_r25.ID)); });
846
- i0.ɵɵelement(1, "i", 137);
847
- i0.ɵɵelementStart(2, "div", 150)(3, "div", 151);
874
+ function ActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_9_For_2_Template(rf, ctx) { if (rf & 1) {
875
+ const _r27 = i0.ɵɵgetCurrentView();
876
+ i0.ɵɵelementStart(0, "div", 154);
877
+ i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_9_For_2_Template_div_click_0_listener() { const lib_r28 = i0.ɵɵrestoreView(_r27).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToLibrary(lib_r28.ID)); });
878
+ i0.ɵɵelement(1, "i", 142);
879
+ i0.ɵɵelementStart(2, "div", 155)(3, "div", 156);
848
880
  i0.ɵɵtext(4);
849
881
  i0.ɵɵelementEnd();
850
- i0.ɵɵtemplate(5, ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_9_For_2_Conditional_5_Template, 2, 1, "div", 152);
882
+ i0.ɵɵtemplate(5, ActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_9_For_2_Conditional_5_Template, 2, 1, "div", 157);
851
883
  i0.ɵɵelementEnd();
852
- i0.ɵɵelement(6, "i", 135);
884
+ i0.ɵɵelement(6, "i", 140);
853
885
  i0.ɵɵelementEnd();
854
886
  } if (rf & 2) {
855
- const lib_r25 = ctx.$implicit;
856
- const ɵ$index_618_r26 = ctx.$index;
887
+ const lib_r28 = ctx.$implicit;
888
+ const ɵ$index_637_r29 = ctx.$index;
857
889
  const ctx_r1 = i0.ɵɵnextContext(4);
858
890
  i0.ɵɵadvance(4);
859
- i0.ɵɵtextInterpolate(lib_r25.Name);
891
+ i0.ɵɵtextInterpolate(lib_r28.Name);
860
892
  i0.ɵɵadvance();
861
- i0.ɵɵconditional(ctx_r1.actionLibraries[ɵ$index_618_r26].ItemsUsed ? 5 : -1);
893
+ i0.ɵɵconditional(ctx_r1.actionLibraries[ɵ$index_637_r29].ItemsUsed ? 5 : -1);
862
894
  } }
863
- function ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_9_Template(rf, ctx) { if (rf & 1) {
864
- i0.ɵɵelementStart(0, "div", 139);
865
- i0.ɵɵrepeaterCreate(1, ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_9_For_2_Template, 7, 2, "div", 148, _forTrack0);
895
+ function ActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_9_Template(rf, ctx) { if (rf & 1) {
896
+ i0.ɵɵelementStart(0, "div", 144);
897
+ i0.ɵɵrepeaterCreate(1, ActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_9_For_2_Template, 7, 2, "div", 153, _forTrack0);
866
898
  i0.ɵɵelementEnd();
867
899
  } if (rf & 2) {
868
900
  const ctx_r1 = i0.ɵɵnextContext(3);
869
901
  i0.ɵɵadvance();
870
902
  i0.ɵɵrepeater(ctx_r1.libraries);
871
903
  } }
872
- function ActionFormComponentExtended_Conditional_1_Conditional_45_Template(rf, ctx) { if (rf & 1) {
904
+ function ActionFormComponentExtended_Conditional_1_Conditional_46_Template(rf, ctx) { if (rf & 1) {
873
905
  i0.ɵɵelementStart(0, "kendo-expansionpanel", 26);
874
- i0.ɵɵtemplate(1, ActionFormComponentExtended_Conditional_1_Conditional_45_ng_template_1_Template, 3, 0, "ng-template", 27);
875
- i0.ɵɵelementStart(2, "div", 28)(3, "div", 136)(4, "h3");
876
- i0.ɵɵelement(5, "i", 137);
906
+ i0.ɵɵtemplate(1, ActionFormComponentExtended_Conditional_1_Conditional_46_ng_template_1_Template, 3, 0, "ng-template", 27);
907
+ i0.ɵɵelementStart(2, "div", 28)(3, "div", 141)(4, "h3");
908
+ i0.ɵɵelement(5, "i", 142);
877
909
  i0.ɵɵtext(6, " Libraries");
878
910
  i0.ɵɵelementEnd();
879
- i0.ɵɵtemplate(7, ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_7_Template, 3, 0, "div", 29)(8, ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_8_Template, 3, 0, "div", 138)(9, ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_9_Template, 3, 0, "div", 139);
911
+ i0.ɵɵtemplate(7, ActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_7_Template, 3, 0, "div", 29)(8, ActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_8_Template, 3, 0, "div", 143)(9, ActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_9_Template, 3, 0, "div", 144);
880
912
  i0.ɵɵelementEnd();
881
- i0.ɵɵelementStart(10, "div", 140)(11, "div", 141);
882
- i0.ɵɵelement(12, "i", 142);
913
+ i0.ɵɵelementStart(10, "div", 145)(11, "div", 146);
914
+ i0.ɵɵelement(12, "i", 147);
883
915
  i0.ɵɵelementStart(13, "span");
884
916
  i0.ɵɵtext(14, "Authorizations");
885
917
  i0.ɵɵelementEnd();
886
- i0.ɵɵelementStart(15, "span", 143);
918
+ i0.ɵɵelementStart(15, "span", 148);
887
919
  i0.ɵɵtext(16, "View");
888
920
  i0.ɵɵelementEnd()();
889
- i0.ɵɵelementStart(17, "div", 141);
890
- i0.ɵɵelement(18, "i", 144);
921
+ i0.ɵɵelementStart(17, "div", 146);
922
+ i0.ɵɵelement(18, "i", 149);
891
923
  i0.ɵɵelementStart(19, "span");
892
924
  i0.ɵɵtext(20, "Contexts");
893
925
  i0.ɵɵelementEnd();
894
- i0.ɵɵelementStart(21, "span", 143);
926
+ i0.ɵɵelementStart(21, "span", 148);
895
927
  i0.ɵɵtext(22, "View");
896
928
  i0.ɵɵelementEnd()();
897
- i0.ɵɵelementStart(23, "div", 141);
898
- i0.ɵɵelement(24, "i", 145);
929
+ i0.ɵɵelementStart(23, "div", 146);
930
+ i0.ɵɵelement(24, "i", 150);
899
931
  i0.ɵɵelementStart(25, "span");
900
932
  i0.ɵɵtext(26, "Scheduled Actions");
901
933
  i0.ɵɵelementEnd();
902
- i0.ɵɵelementStart(27, "span", 143);
934
+ i0.ɵɵelementStart(27, "span", 148);
903
935
  i0.ɵɵtext(28, "View");
904
936
  i0.ɵɵelementEnd()();
905
- i0.ɵɵelementStart(29, "div", 141);
906
- i0.ɵɵelement(30, "i", 146);
937
+ i0.ɵɵelementStart(29, "div", 146);
938
+ i0.ɵɵelement(30, "i", 151);
907
939
  i0.ɵɵelementStart(31, "span");
908
940
  i0.ɵɵtext(32, "Entity Actions");
909
941
  i0.ɵɵelementEnd();
910
- i0.ɵɵelementStart(33, "span", 143);
942
+ i0.ɵɵelementStart(33, "span", 148);
911
943
  i0.ɵɵtext(34, "View");
912
944
  i0.ɵɵelementEnd()()()()();
913
945
  } if (rf & 2) {
@@ -950,9 +982,9 @@ function ActionFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf &
950
982
  i0.ɵɵelementStart(38, "kendo-expansionpanel", 26);
951
983
  i0.ɵɵtemplate(39, ActionFormComponentExtended_Conditional_1_ng_template_39_Template, 4, 1, "ng-template", 27);
952
984
  i0.ɵɵelementStart(40, "div", 28);
953
- i0.ɵɵtemplate(41, ActionFormComponentExtended_Conditional_1_Conditional_41_Template, 3, 0, "div", 29)(42, ActionFormComponentExtended_Conditional_1_Conditional_42_Template, 5, 1, "div", 30)(43, ActionFormComponentExtended_Conditional_1_Conditional_43_Template, 3, 0, "div", 31);
985
+ i0.ɵɵtemplate(41, ActionFormComponentExtended_Conditional_1_Conditional_41_Template, 4, 1, "div", 31)(42, ActionFormComponentExtended_Conditional_1_Conditional_42_Template, 3, 0, "div", 29)(43, ActionFormComponentExtended_Conditional_1_Conditional_43_Template, 5, 1, "div", 30)(44, ActionFormComponentExtended_Conditional_1_Conditional_44_Template, 3, 0, "div", 32);
954
986
  i0.ɵɵelementEnd()();
955
- i0.ɵɵtemplate(44, ActionFormComponentExtended_Conditional_1_Conditional_44_Template, 6, 2, "kendo-expansionpanel", 26)(45, ActionFormComponentExtended_Conditional_1_Conditional_45_Template, 35, 2, "kendo-expansionpanel", 26);
987
+ i0.ɵɵtemplate(45, ActionFormComponentExtended_Conditional_1_Conditional_45_Template, 6, 2, "kendo-expansionpanel", 26)(46, ActionFormComponentExtended_Conditional_1_Conditional_46_Template, 35, 2, "kendo-expansionpanel", 26);
956
988
  i0.ɵɵelementEnd()()();
957
989
  } if (rf & 2) {
958
990
  const ctx_r1 = i0.ɵɵnextContext();
@@ -992,18 +1024,20 @@ function ActionFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf &
992
1024
  i0.ɵɵadvance();
993
1025
  i0.ɵɵproperty("expanded", ctx_r1.expandedSections.resultCodes);
994
1026
  i0.ɵɵadvance(3);
995
- i0.ɵɵconditional(ctx_r1.isLoadingResultCodes ? 41 : ctx_r1.resultCodes.length === 0 ? 42 : 43);
996
- i0.ɵɵadvance(3);
997
- i0.ɵɵconditional(ctx_r1.record.IsSaved ? 44 : -1);
1027
+ i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.record.IsSaved ? 41 : -1);
998
1028
  i0.ɵɵadvance();
1029
+ i0.ɵɵconditional(ctx_r1.isLoadingResultCodes ? 42 : ctx_r1.resultCodes.length === 0 ? 43 : 44);
1030
+ i0.ɵɵadvance(3);
999
1031
  i0.ɵɵconditional(ctx_r1.record.IsSaved ? 45 : -1);
1032
+ i0.ɵɵadvance();
1033
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 46 : -1);
1000
1034
  } }
1001
1035
  function ActionFormComponentExtended_Conditional_2_Template(rf, ctx) { if (rf & 1) {
1002
- const _r27 = i0.ɵɵgetCurrentView();
1003
- i0.ɵɵelementStart(0, "kendo-window", 153);
1004
- i0.ɵɵlistener("close", function ActionFormComponentExtended_Conditional_2_Template_kendo_window_close_0_listener() { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged(false)); });
1005
- i0.ɵɵelementStart(1, "mj-action-test-harness", 154);
1006
- i0.ɵɵlistener("visibilityChange", function ActionFormComponentExtended_Conditional_2_Template_mj_action_test_harness_visibilityChange_1_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged($event)); });
1036
+ const _r30 = i0.ɵɵgetCurrentView();
1037
+ i0.ɵɵelementStart(0, "kendo-window", 158);
1038
+ i0.ɵɵlistener("close", function ActionFormComponentExtended_Conditional_2_Template_kendo_window_close_0_listener() { i0.ɵɵrestoreView(_r30); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged(false)); });
1039
+ i0.ɵɵelementStart(1, "mj-action-test-harness", 159);
1040
+ i0.ɵɵlistener("visibilityChange", function ActionFormComponentExtended_Conditional_2_Template_mj_action_test_harness_visibilityChange_1_listener($event) { i0.ɵɵrestoreView(_r30); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged($event)); });
1007
1041
  i0.ɵɵelementEnd()();
1008
1042
  } if (rf & 2) {
1009
1043
  const ctx_r1 = i0.ɵɵnextContext();
@@ -1013,10 +1047,9 @@ function ActionFormComponentExtended_Conditional_2_Template(rf, ctx) { if (rf &
1013
1047
  i0.ɵɵproperty("action", ctx_r1.record)("actionParams", ctx_r1.actionParams)("isVisible", ctx_r1.showTestHarness);
1014
1048
  } }
1015
1049
  let ActionFormComponentExtended = class ActionFormComponentExtended extends ActionFormComponent {
1016
- constructor(elementRef, sharedService, router, route, cdr, dialogService) {
1050
+ constructor(elementRef, sharedService, router, route, cdr) {
1017
1051
  super(elementRef, sharedService, router, route, cdr);
1018
1052
  this.cdr = cdr;
1019
- this.dialogService = dialogService;
1020
1053
  // Related entities
1021
1054
  this.category = null;
1022
1055
  this.actionParams = [];
@@ -1029,6 +1062,8 @@ let ActionFormComponentExtended = class ActionFormComponentExtended extends Acti
1029
1062
  this._outputParams = [];
1030
1063
  // Track params to delete
1031
1064
  this.paramsToDelete = [];
1065
+ // Track result codes to delete
1066
+ this.resultCodesToDelete = [];
1032
1067
  // Loading states
1033
1068
  this.isLoadingParams = false;
1034
1069
  this.isLoadingResultCodes = false;
@@ -1055,6 +1090,8 @@ let ActionFormComponentExtended = class ActionFormComponentExtended extends Acti
1055
1090
  // Code editor config
1056
1091
  this.codeLanguage = 'typescript';
1057
1092
  this.showCodeComments = false;
1093
+ this.dialogService = inject(DialogService);
1094
+ this.viewContainerRef = inject(ViewContainerRef);
1058
1095
  }
1059
1096
  async ngOnInit() {
1060
1097
  await super.ngOnInit();
@@ -1070,6 +1107,96 @@ let ActionFormComponentExtended = class ActionFormComponentExtended extends Acti
1070
1107
  ]);
1071
1108
  }
1072
1109
  }
1110
+ /**
1111
+ * Override InternalSaveRecord to handle Action and related ActionParams in a transaction
1112
+ * This follows the same pattern as AIAgentFormComponent
1113
+ */
1114
+ async InternalSaveRecord() {
1115
+ if (!this.record) {
1116
+ return false;
1117
+ }
1118
+ try {
1119
+ const md = new Metadata();
1120
+ const transactionGroup = await md.CreateTransactionGroup();
1121
+ // Set transaction group on the Action record
1122
+ this.record.TransactionGroup = transactionGroup;
1123
+ // Save the Action record first
1124
+ const actionSaved = await this.record.Save();
1125
+ if (!actionSaved) {
1126
+ console.error('Failed to save Action record');
1127
+ this.sharedService.CreateSimpleNotification('Failed to save Action record', 'error', 5000);
1128
+ return false;
1129
+ }
1130
+ // Process all pending records (params and result codes to save or delete)
1131
+ for (const pendingRecord of this.PendingRecords) {
1132
+ if (pendingRecord.entityObject.EntityInfo.Name === 'Action Params') {
1133
+ const param = pendingRecord.entityObject;
1134
+ // Ensure ActionID is set for new params
1135
+ if (!param.ActionID) {
1136
+ param.ActionID = this.record.ID;
1137
+ }
1138
+ param.TransactionGroup = transactionGroup;
1139
+ if (pendingRecord.action === 'save') {
1140
+ const saved = await param.Save();
1141
+ if (!saved) {
1142
+ console.error('Failed to save parameter:', param.Name);
1143
+ return false;
1144
+ }
1145
+ }
1146
+ else if (pendingRecord.action === 'delete') {
1147
+ const deleted = await param.Delete();
1148
+ if (!deleted) {
1149
+ console.error('Failed to delete parameter:', param.Name);
1150
+ return false;
1151
+ }
1152
+ }
1153
+ }
1154
+ else if (pendingRecord.entityObject.EntityInfo.Name === 'Action Result Codes') {
1155
+ const resultCode = pendingRecord.entityObject;
1156
+ // Ensure ActionID is set for new result codes
1157
+ if (!resultCode.ActionID) {
1158
+ resultCode.ActionID = this.record.ID;
1159
+ }
1160
+ resultCode.TransactionGroup = transactionGroup;
1161
+ if (pendingRecord.action === 'save') {
1162
+ const saved = await resultCode.Save();
1163
+ if (!saved) {
1164
+ console.error('Failed to save result code:', resultCode.ResultCode);
1165
+ return false;
1166
+ }
1167
+ }
1168
+ else if (pendingRecord.action === 'delete') {
1169
+ const deleted = await resultCode.Delete();
1170
+ if (!deleted) {
1171
+ console.error('Failed to delete result code:', resultCode.ResultCode);
1172
+ return false;
1173
+ }
1174
+ }
1175
+ }
1176
+ }
1177
+ // Submit the transaction
1178
+ const success = await transactionGroup.Submit();
1179
+ if (success) {
1180
+ // Clear pending records after successful save
1181
+ this.PendingRecords.length = 0;
1182
+ this.paramsToDelete = [];
1183
+ this.resultCodesToDelete = [];
1184
+ // Reload params and result codes to get updated data
1185
+ await Promise.all([
1186
+ this.loadActionParams(),
1187
+ this.loadResultCodes()
1188
+ ]);
1189
+ // Show success message
1190
+ this.sharedService.CreateSimpleNotification('Action and related records saved successfully', 'success', 3000);
1191
+ }
1192
+ return success;
1193
+ }
1194
+ catch (error) {
1195
+ console.error('Error saving Action and parameters:', error);
1196
+ this.sharedService.CreateSimpleNotification('Error saving Action: ' + error, 'error', 5000);
1197
+ return false;
1198
+ }
1199
+ }
1073
1200
  async loadCategory() {
1074
1201
  if (!this.record.CategoryID)
1075
1202
  return;
@@ -1091,7 +1218,8 @@ let ActionFormComponentExtended = class ActionFormComponentExtended extends Acti
1091
1218
  const result = await rv.RunView({
1092
1219
  EntityName: 'Action Params',
1093
1220
  ExtraFilter: `ActionID='${this.record.ID}'`,
1094
- OrderBy: 'Name'
1221
+ OrderBy: 'Name',
1222
+ ResultType: 'entity_object' // This ensures we get proper entity instances
1095
1223
  });
1096
1224
  if (result.Success) {
1097
1225
  this.actionParams = result.Results || [];
@@ -1130,7 +1258,8 @@ let ActionFormComponentExtended = class ActionFormComponentExtended extends Acti
1130
1258
  const result = await rv.RunView({
1131
1259
  EntityName: 'Action Result Codes',
1132
1260
  ExtraFilter: `ActionID='${this.record.ID}'`,
1133
- OrderBy: 'IsSuccess DESC, ResultCode'
1261
+ OrderBy: 'IsSuccess DESC, ResultCode',
1262
+ ResultType: 'entity_object' // This ensures we get proper entity instances
1134
1263
  });
1135
1264
  if (result.Success) {
1136
1265
  this.resultCodes = result.Results || [];
@@ -1448,7 +1577,7 @@ let ActionFormComponentExtended = class ActionFormComponentExtended extends Acti
1448
1577
  const dialogRef = this.dialogService.open({
1449
1578
  content: ActionParamDialogComponent,
1450
1579
  width: 500,
1451
- appendTo: this.elementRef.nativeElement
1580
+ appendTo: this.viewContainerRef
1452
1581
  });
1453
1582
  const dialog = dialogRef.content.instance;
1454
1583
  dialog.param = newParam;
@@ -1456,9 +1585,15 @@ let ActionFormComponentExtended = class ActionFormComponentExtended extends Acti
1456
1585
  dialog.editMode = true;
1457
1586
  dialogRef.result.subscribe(result => {
1458
1587
  if (result && result.save) {
1459
- // Add to local array and mark as new/dirty
1588
+ // The dialog has already modified the newParam entity directly
1589
+ // New entities are automatically dirty (IsSaved = false)
1590
+ // Add to local array
1460
1591
  this.actionParams.push(newParam);
1461
- // New params are not saved yet, they'll be detected by !IsSaved
1592
+ // Add to pending records for saving
1593
+ this.PendingRecords.push({
1594
+ entityObject: newParam,
1595
+ action: 'save'
1596
+ });
1462
1597
  // Update the filtered arrays
1463
1598
  this.updateParamArrays();
1464
1599
  this.cdr.detectChanges();
@@ -1469,7 +1604,7 @@ let ActionFormComponentExtended = class ActionFormComponentExtended extends Acti
1469
1604
  const dialogRef = this.dialogService.open({
1470
1605
  content: ActionParamDialogComponent,
1471
1606
  width: 500,
1472
- appendTo: this.elementRef.nativeElement
1607
+ appendTo: this.viewContainerRef
1473
1608
  });
1474
1609
  const dialog = dialogRef.content.instance;
1475
1610
  dialog.param = param;
@@ -1478,6 +1613,16 @@ let ActionFormComponentExtended = class ActionFormComponentExtended extends Acti
1478
1613
  dialogRef.result.subscribe(result => {
1479
1614
  if (result && result.save && this.EditMode) {
1480
1615
  // Param will be dirty from property changes in dialog
1616
+ // Ensure it's in pending records if modified
1617
+ if (param.Dirty) {
1618
+ const exists = this.PendingRecords.some(pr => pr.entityObject === param && pr.action === 'save');
1619
+ if (!exists) {
1620
+ this.PendingRecords.push({
1621
+ entityObject: param,
1622
+ action: 'save'
1623
+ });
1624
+ }
1625
+ }
1481
1626
  // Update the local arrays
1482
1627
  this.updateParamArrays();
1483
1628
  this.cdr.detectChanges();
@@ -1493,28 +1638,6 @@ let ActionFormComponentExtended = class ActionFormComponentExtended extends Acti
1493
1638
  // Show the parameter dialog
1494
1639
  this.editParameter(param);
1495
1640
  }
1496
- async deleteParameter(param) {
1497
- if (!this.EditMode)
1498
- return;
1499
- if (confirm(`Are you sure you want to delete parameter "${param.Name}"?`)) {
1500
- if (param.IsSaved) {
1501
- // Track for deletion using a separate array
1502
- if (!this.paramsToDelete)
1503
- this.paramsToDelete = [];
1504
- this.paramsToDelete.push(param);
1505
- }
1506
- else {
1507
- // Remove from local array if it's new
1508
- const index = this.actionParams.indexOf(param);
1509
- if (index > -1) {
1510
- this.actionParams.splice(index, 1);
1511
- }
1512
- }
1513
- // Update the filtered arrays
1514
- await this.updateParamArrays();
1515
- this.cdr.detectChanges();
1516
- }
1517
- }
1518
1641
  async updateParamArrays() {
1519
1642
  // Update cached filtered params - exclude deleted items
1520
1643
  const activeParams = this.actionParams.filter(p => !this.paramsToDelete || !this.paramsToDelete.includes(p));
@@ -1527,17 +1650,71 @@ let ActionFormComponentExtended = class ActionFormComponentExtended extends Acti
1527
1650
  return type === 'output' || type === 'both';
1528
1651
  });
1529
1652
  }
1530
- // Override to populate pending records with our action params
1653
+ // Override to populate pending records with our action params and result codes
1531
1654
  PopulatePendingRecords() {
1655
+ // Preserve existing pending records before base class clears them
1656
+ const currentPendingRecords = [...this.PendingRecords];
1657
+ // Call parent to handle child components
1532
1658
  super.PopulatePendingRecords();
1533
- // Add our action params to pending records
1534
- if (this.actionParams && this.actionParams.length > 0) {
1535
- for (const param of this.actionParams) {
1536
- if (param.Dirty || (this.paramsToDelete && this.paramsToDelete.includes(param)) || !param.IsSaved) {
1537
- const action = (this.paramsToDelete && this.paramsToDelete.includes(param)) ? 'delete' : 'save';
1659
+ // Re-add our preserved records
1660
+ for (const record of currentPendingRecords) {
1661
+ // Only re-add if it's an Action Param or Result Code (avoid duplicates)
1662
+ if (record.entityObject.EntityInfo.Name === 'Action Params' ||
1663
+ record.entityObject.EntityInfo.Name === 'Action Result Codes') {
1664
+ const exists = this.PendingRecords.some(pr => pr.entityObject === record.entityObject);
1665
+ if (!exists) {
1666
+ this.PendingRecords.push(record);
1667
+ }
1668
+ }
1669
+ }
1670
+ // Add action params that need saving
1671
+ for (const param of this.actionParams) {
1672
+ if (!param.IsSaved || param.Dirty) {
1673
+ // Check if not already in pending records
1674
+ const exists = this.PendingRecords.some(pr => pr.entityObject === param);
1675
+ if (!exists) {
1538
1676
  this.PendingRecords.push({
1539
1677
  entityObject: param,
1540
- action: action
1678
+ action: 'save'
1679
+ });
1680
+ }
1681
+ }
1682
+ }
1683
+ // Add params marked for deletion
1684
+ for (const param of this.paramsToDelete) {
1685
+ if (param.IsSaved) {
1686
+ // Check if not already in pending records
1687
+ const exists = this.PendingRecords.some(pr => pr.entityObject === param);
1688
+ if (!exists) {
1689
+ this.PendingRecords.push({
1690
+ entityObject: param,
1691
+ action: 'delete'
1692
+ });
1693
+ }
1694
+ }
1695
+ }
1696
+ // Add result codes that need saving
1697
+ for (const resultCode of this.resultCodes) {
1698
+ if (!resultCode.IsSaved || resultCode.Dirty) {
1699
+ // Check if not already in pending records
1700
+ const exists = this.PendingRecords.some(pr => pr.entityObject === resultCode);
1701
+ if (!exists) {
1702
+ this.PendingRecords.push({
1703
+ entityObject: resultCode,
1704
+ action: 'save'
1705
+ });
1706
+ }
1707
+ }
1708
+ }
1709
+ // Add result codes marked for deletion
1710
+ for (const resultCode of this.resultCodesToDelete) {
1711
+ if (resultCode.IsSaved) {
1712
+ // Check if not already in pending records
1713
+ const exists = this.PendingRecords.some(pr => pr.entityObject === resultCode);
1714
+ if (!exists) {
1715
+ this.PendingRecords.push({
1716
+ entityObject: resultCode,
1717
+ action: 'delete'
1541
1718
  });
1542
1719
  }
1543
1720
  }
@@ -1550,10 +1727,140 @@ let ActionFormComponentExtended = class ActionFormComponentExtended extends Acti
1550
1727
  getActionIcon() {
1551
1728
  return this.record?.IconClass || 'fa-solid fa-cog';
1552
1729
  }
1553
- static { this.ɵfac = function ActionFormComponentExtended_Factory(t) { return new (t || ActionFormComponentExtended)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.SharedService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i3.DialogService)); }; }
1554
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActionFormComponentExtended, selectors: [["mj-action-form"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 2, consts: [["form", "ngForm"], [1, "record-form-container"], [1, "record-form"], [3, "width", "height", "minWidth", "minHeight", "draggable", "resizable", "state", "title"], [3, "form"], [1, "action-main-area", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow-y", "auto"], [1, "action-header", 2, "flex-shrink", "0", "padding", "20px", "background", "#f8f9fa", "border-bottom", "2px solid #e9ecef"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "gap", "20px"], [2, "flex", "1", "min-width", "0"], [2, "display", "flex", "align-items", "center", "gap", "12px", "margin-bottom", "8px"], [2, "font-size", "1.4em"], ["name", "actionName", "placeholder", "Enter action name...", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModel"], [2, "display", "flex", "gap", "16px", "margin-bottom", "12px", "flex-wrap", "wrap"], ["name", "actionDescription", "placeholder", "Enter action description...", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModel", "rows"], [2, "margin", "0 0 12px 0", "color", "#6c757d", "font-size", "0.9em", "line-height", "1.4"], [1, "quick-config", 2, "display", "flex", "align-items", "center", "gap", "16px", "flex-wrap", "wrap"], [1, "config-item", 2, "display", "flex", "align-items", "center", "gap", "6px", "font-size", "0.85em"], [1, "fa-solid", "fa-cube", 2, "color", "#6c757d"], [2, "color", "#6c757d"], [2, "color", "#495057", "font-weight", "500"], [1, "action-buttons", 2, "display", "flex", "flex-direction", "column", "gap", "8px", "align-items", "flex-end"], [2, "display", "flex", "gap", "8px"], ["kendoButton", "", "themeColor", "primary", "size", "large", "title", "Open Run Harness", 3, "disabled"], ["kendoButton", "", "themeColor", "info", "size", "medium", "title", "Regenerate Code"], [2, "font-size", "0.75em", "color", "#dc3545", "text-align", "right"], [1, "configuration-sections", 2, "flex", "1", "background", "white", "border-top", "2px solid #e9ecef", "padding", "16px", "min-height", "0"], [2, "margin-bottom", "12px", 3, "expanded"], ["kendoExpansionPanelTitleDirective", ""], [2, "padding", "16px"], [1, "loading-state"], [1, "empty-state", 2, "padding", "30px", "text-align", "center"], [1, "result-codes-grid"], ["name", "actionName", "placeholder", "Enter action name...", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModelChange", "ngModel"], [2, "margin", "0", "color", "#495057", "font-weight", "600", "flex", "1"], [1, "status-badge", 2, "color", "white", "padding", "4px 10px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], [2, "display", "block", "margin-bottom", "4px", "font-weight", "600", "color", "#495057", "font-size", "0.9em"], ["name", "actionStatus", "textField", "text", "valueField", "value", 2, "width", "150px", 3, "ngModelChange", "ngModel", "data", "valuePrimitive"], [2, "color", "#dc3545"], ["name", "actionType", "textField", "text", "valueField", "value", 2, "width", "150px", 3, "ngModelChange", "ngModel", "data", "valuePrimitive"], ["name", "categoryID", "placeholder", "Select category...", 2, "width", "200px", 3, "ngModelChange", "ngModel", "data"], ["name", "actionDescription", "placeholder", "Enter action description...", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-folder", 2, "color", "#6c757d"], [2, "color", "#495057", "font-weight", "500", "cursor", "pointer", 3, "click"], [1, "fa-solid", "fa-external-link", 2, "font-size", "0.75em", "margin-left", "4px"], [2, "font-weight", "500"], [1, "fa-solid", "fa-sliders", 2, "color", "#6c757d"], ["kendoButton", "", "themeColor", "primary", "size", "large", "title", "Open Run Harness", 3, "click", "disabled"], [1, "fa-solid", "fa-play"], ["kendoButton", "", "themeColor", "info", "size", "medium", "title", "Regenerate Code", 3, "click"], [1, "fa-solid", "fa-robot"], ["kendoButton", "", "themeColor", "success", "size", "small", 3, "click"], [1, "fa-solid", "fa-check"], ["kendoButton", "", "themeColor", "error", "size", "small", 3, "click"], [1, "fa-solid", "fa-times"], [2, "display", "flex", "align-items", "center", "gap", "8px", "font-weight", "600"], [2, "background", "#17a2b8", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-sliders", 2, "font-size", "2em", "color", "#6c757d", "opacity", "0.3"], [2, "margin", "12px 0 0 0", "color", "#6c757d"], [2, "margin", "8px 0 0 0", "font-size", "0.85em", "color", "#6c757d"], [1, "params-section"], [1, "params-header"], [1, "fa-solid", "fa-sign-in-alt"], ["kendoButton", "", "fillMode", "flat", "size", "small"], [1, "params-grid"], [1, "params-section", 2, "margin-top", "24px"], [1, "fa-solid", "fa-sign-out-alt"], [1, "empty-state", 2, "padding", "20px", "text-align", "center"], ["kendoButton", "", "fillMode", "flat", "size", "small", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "fa-solid", "fa-inbox", 2, "font-size", "2em", "color", "#6c757d", "opacity", "0.3"], [1, "param-card", 3, "required", "clickable"], [1, "param-card", 3, "click"], [1, "param-header"], [1, "param-name"], [1, "param-badges"], [1, "required-badge"], [1, "array-badge"], [1, "param-details"], [1, "param-type"], [1, "param-description"], [1, "param-default"], ["title", "Edit parameter", 1, "param-edit-btn", 3, "click"], [1, "fa-solid", "fa-edit"], ["title", "Delete parameter", 1, "param-delete-btn", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "default-label"], [1, "param-card", 3, "clickable"], [1, "generation-panel"], [1, "code-editor-section"], [1, "code-toolbar"], [1, "fa-solid", "fa-file-code"], [1, "code-actions"], [1, "fa-solid", "fa-copy"], ["name", "actionCode", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "code-comments"], [1, "approval-comments"], [1, "fa-solid", "fa-code", 2, "color", "#6c757d"], [2, "background", "#ffc107", "color", "#856404", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [1, "fa-solid", "fa-lock"], [1, "prompt-section"], ["name", "userPrompt", "placeholder", "Describe what this action should do...", 2, "width", "100%", "min-height", "120px", 3, "ngModelChange", "ngModel", "rows"], [1, "comments-section"], ["name", "userComments", "placeholder", "Internal notes...", 2, "width", "100%", 3, "ngModelChange", "ngModel", "rows"], [1, "generation-controls"], ["name", "codeLocked", 3, "ngModelChange", "ngModel"], [2, "margin-left", "8px"], [1, "fa-solid", "fa-comment"], ["name", "codeApprovalComments", "placeholder", "Explain why the code was rejected...", 2, "width", "100%", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-flag-checkered", 2, "color", "#6c757d"], [2, "background", "#28a745", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [1, "fa-solid", "fa-flag-checkered", 2, "font-size", "2em", "color", "#6c757d", "opacity", "0.3"], [1, "result-code-card", 3, "success", "failure"], [1, "result-code-card"], [1, "result-icon"], [1, "result-content"], [1, "result-code"], [1, "result-description"], [1, "fa-solid", "fa-chart-line", 2, "color", "#6c757d"], [1, "fa-solid", "fa-chart-line", 2, "font-size", "2em", "color", "#6c757d", "opacity", "0.3"], [1, "execution-stats-row"], [1, "stat-box"], [1, "fa-solid", "fa-tachometer-alt"], [1, "stat-info"], [1, "stat-label", 2, "color", "#212529"], [1, "stat-value", 2, "color", "#212529"], [1, "fa-solid", "fa-check-circle"], [1, "stat-value", 2, "font-weight", "600"], [1, "fa-solid", "fa-play-circle"], [2, "margin-top", "24px"], [1, "fa-solid", "fa-history"], [1, "executions-table"], [1, "execution-row", 3, "success"], [1, "execution-row"], [1, "running"], [1, "fa-solid", "fa-external-link"], [1, "config-subsection"], [1, "fa-solid", "fa-book"], [1, "empty-state", "mini"], [1, "library-cards"], [1, "related-entities-grid"], [1, "related-entity-link"], [1, "fa-solid", "fa-shield-alt"], [1, "entity-count"], [1, "fa-solid", "fa-layer-group"], [1, "fa-solid", "fa-calendar"], [1, "fa-solid", "fa-cube"], [1, "fa-solid", "fa-cogs", 2, "color", "#6c757d"], [1, "library-card"], [1, "library-card", 3, "click"], [1, "library-info"], [1, "library-name"], [1, "library-items"], [3, "close", "width", "height", "minWidth", "minHeight", "draggable", "resizable", "state", "title"], [3, "visibilityChange", "action", "actionParams", "isVisible"]], template: function ActionFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
1730
+ // Result Code management methods
1731
+ async addResultCode() {
1732
+ if (!this.EditMode || !this.record.IsSaved)
1733
+ return;
1734
+ const md = new Metadata();
1735
+ const newResultCode = await md.GetEntityObject('Action Result Codes');
1736
+ // Set default values
1737
+ newResultCode.ActionID = this.record.ID;
1738
+ newResultCode.ResultCode = '';
1739
+ newResultCode.Description = '';
1740
+ newResultCode.IsSuccess = false;
1741
+ const dialogRef = this.dialogService.open({
1742
+ content: ActionResultCodeDialogComponent,
1743
+ width: 500,
1744
+ appendTo: this.viewContainerRef
1745
+ });
1746
+ const dialog = dialogRef.content.instance;
1747
+ dialog.resultCode = newResultCode;
1748
+ dialog.isNew = true;
1749
+ dialog.editMode = true;
1750
+ dialogRef.result.subscribe(result => {
1751
+ if (result && result.save) {
1752
+ // Add to local array
1753
+ this.resultCodes.push(newResultCode);
1754
+ // Add to pending records for saving
1755
+ this.PendingRecords.push({
1756
+ entityObject: newResultCode,
1757
+ action: 'save'
1758
+ });
1759
+ this.cdr.detectChanges();
1760
+ }
1761
+ });
1762
+ }
1763
+ async editResultCode(resultCode) {
1764
+ const dialogRef = this.dialogService.open({
1765
+ content: ActionResultCodeDialogComponent,
1766
+ width: 500,
1767
+ appendTo: this.viewContainerRef
1768
+ });
1769
+ const dialog = dialogRef.content.instance;
1770
+ dialog.resultCode = resultCode;
1771
+ dialog.isNew = false;
1772
+ dialog.editMode = this.EditMode;
1773
+ dialogRef.result.subscribe(result => {
1774
+ if (result && result.save && this.EditMode) {
1775
+ // Ensure it's in pending records if modified
1776
+ if (resultCode.Dirty) {
1777
+ const exists = this.PendingRecords.some(pr => pr.entityObject === resultCode && pr.action === 'save');
1778
+ if (!exists) {
1779
+ this.PendingRecords.push({
1780
+ entityObject: resultCode,
1781
+ action: 'save'
1782
+ });
1783
+ }
1784
+ }
1785
+ this.cdr.detectChanges();
1786
+ }
1787
+ });
1788
+ }
1789
+ onResultCodeClick(resultCode, event) {
1790
+ // Prevent event bubbling if clicking on edit/delete buttons
1791
+ const target = event.target;
1792
+ if (target.closest('.result-edit-btn') || target.closest('.result-delete-btn')) {
1793
+ return;
1794
+ }
1795
+ // Show the result code dialog
1796
+ this.editResultCode(resultCode);
1797
+ }
1798
+ /**
1799
+ * Delete a result code (marks for deletion on save)
1800
+ */
1801
+ deleteResultCode(resultCode) {
1802
+ if (!this.EditMode)
1803
+ return;
1804
+ // Remove from main array
1805
+ const index = this.resultCodes.indexOf(resultCode);
1806
+ if (index > -1) {
1807
+ this.resultCodes.splice(index, 1);
1808
+ }
1809
+ // Handle pending records
1810
+ if (resultCode.IsSaved) {
1811
+ // Add to deletion list for saved result codes
1812
+ this.resultCodesToDelete.push(resultCode);
1813
+ // Add to pending records for deletion
1814
+ this.PendingRecords.push({
1815
+ entityObject: resultCode,
1816
+ action: 'delete'
1817
+ });
1818
+ }
1819
+ else {
1820
+ // For unsaved result codes, just remove from pending records
1821
+ const pendingIndex = this.PendingRecords.findIndex(pr => pr.entityObject === resultCode && pr.action === 'save');
1822
+ if (pendingIndex >= 0) {
1823
+ this.PendingRecords.splice(pendingIndex, 1);
1824
+ }
1825
+ }
1826
+ this.cdr.detectChanges();
1827
+ }
1828
+ /**
1829
+ * Delete a parameter (marks for deletion on save)
1830
+ */
1831
+ deleteParameter(param) {
1832
+ if (!this.EditMode)
1833
+ return;
1834
+ // Remove from main array
1835
+ const index = this.actionParams.indexOf(param);
1836
+ if (index > -1) {
1837
+ this.actionParams.splice(index, 1);
1838
+ }
1839
+ // Handle pending records
1840
+ if (param.IsSaved) {
1841
+ // Add to deletion list for saved params
1842
+ this.paramsToDelete.push(param);
1843
+ // Add to pending records for deletion
1844
+ this.PendingRecords.push({
1845
+ entityObject: param,
1846
+ action: 'delete'
1847
+ });
1848
+ }
1849
+ else {
1850
+ // For unsaved params, just remove from pending records
1851
+ const pendingIndex = this.PendingRecords.findIndex(pr => pr.entityObject === param && pr.action === 'save');
1852
+ if (pendingIndex >= 0) {
1853
+ this.PendingRecords.splice(pendingIndex, 1);
1854
+ }
1855
+ }
1856
+ // Update filtered arrays
1857
+ this.updateParamArrays();
1858
+ this.cdr.detectChanges();
1859
+ }
1860
+ static { this.ɵfac = function ActionFormComponentExtended_Factory(t) { return new (t || ActionFormComponentExtended)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.SharedService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
1861
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActionFormComponentExtended, selectors: [["mj-action-form"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 2, consts: [["form", "ngForm"], [1, "record-form-container"], [1, "record-form"], [3, "width", "height", "minWidth", "minHeight", "draggable", "resizable", "state", "title"], [3, "form"], [1, "action-main-area", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow-y", "auto"], [1, "action-header", 2, "flex-shrink", "0", "padding", "20px", "background", "#f8f9fa", "border-bottom", "2px solid #e9ecef"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "gap", "20px"], [2, "flex", "1", "min-width", "0"], [2, "display", "flex", "align-items", "center", "gap", "12px", "margin-bottom", "8px"], [2, "font-size", "1.4em"], ["name", "actionName", "placeholder", "Enter action name...", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModel"], [2, "display", "flex", "gap", "16px", "margin-bottom", "12px", "flex-wrap", "wrap"], ["name", "actionDescription", "placeholder", "Enter action description...", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModel", "rows"], [2, "margin", "0 0 12px 0", "color", "#6c757d", "font-size", "0.9em", "line-height", "1.4"], [1, "quick-config", 2, "display", "flex", "align-items", "center", "gap", "16px", "flex-wrap", "wrap"], [1, "config-item", 2, "display", "flex", "align-items", "center", "gap", "6px", "font-size", "0.85em"], [1, "fa-solid", "fa-cube", 2, "color", "#6c757d"], [2, "color", "#6c757d"], [2, "color", "#495057", "font-weight", "500"], [1, "action-buttons", 2, "display", "flex", "flex-direction", "column", "gap", "8px", "align-items", "flex-end"], [2, "display", "flex", "gap", "8px"], ["kendoButton", "", "themeColor", "primary", "size", "large", "title", "Open Run Harness", 3, "disabled"], ["kendoButton", "", "themeColor", "info", "size", "medium", "title", "Regenerate Code"], [2, "font-size", "0.75em", "color", "#dc3545", "text-align", "right"], [1, "configuration-sections", 2, "flex", "1", "background", "white", "border-top", "2px solid #e9ecef", "padding", "16px", "min-height", "0"], [2, "margin-bottom", "12px", 3, "expanded"], ["kendoExpansionPanelTitleDirective", ""], [2, "padding", "16px"], [1, "loading-state"], [1, "empty-state", 2, "padding", "30px", "text-align", "center"], [2, "display", "flex", "justify-content", "flex-end", "margin-bottom", "12px"], [1, "result-codes-grid"], ["name", "actionName", "placeholder", "Enter action name...", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModelChange", "ngModel"], [2, "margin", "0", "color", "#495057", "font-weight", "600", "flex", "1"], [1, "status-badge", 2, "color", "white", "padding", "4px 10px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], [2, "display", "block", "margin-bottom", "4px", "font-weight", "600", "color", "#495057", "font-size", "0.9em"], ["name", "actionStatus", "textField", "text", "valueField", "value", 2, "width", "150px", 3, "ngModelChange", "ngModel", "data", "valuePrimitive"], [2, "color", "#dc3545"], ["name", "actionType", "textField", "text", "valueField", "value", 2, "width", "150px", 3, "ngModelChange", "ngModel", "data", "valuePrimitive"], ["name", "categoryID", "placeholder", "Select category...", 2, "width", "200px", 3, "ngModelChange", "ngModel", "data"], ["name", "actionDescription", "placeholder", "Enter action description...", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-folder", 2, "color", "#6c757d"], [2, "color", "#495057", "font-weight", "500", "cursor", "pointer", 3, "click"], [1, "fa-solid", "fa-external-link", 2, "font-size", "0.75em", "margin-left", "4px"], [2, "font-weight", "500"], [1, "fa-solid", "fa-sliders", 2, "color", "#6c757d"], ["kendoButton", "", "themeColor", "primary", "size", "large", "title", "Open Run Harness", 3, "click", "disabled"], [1, "fa-solid", "fa-play"], ["kendoButton", "", "themeColor", "info", "size", "medium", "title", "Regenerate Code", 3, "click"], [1, "fa-solid", "fa-robot"], ["kendoButton", "", "themeColor", "success", "size", "small", 3, "click"], [1, "fa-solid", "fa-check"], ["kendoButton", "", "themeColor", "error", "size", "small", 3, "click"], [1, "fa-solid", "fa-times"], [2, "display", "flex", "align-items", "center", "gap", "8px", "font-weight", "600"], [2, "background", "#17a2b8", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-sliders", 2, "font-size", "2em", "color", "#6c757d", "opacity", "0.3"], [2, "margin", "12px 0 0 0", "color", "#6c757d"], [2, "margin", "8px 0 0 0", "font-size", "0.85em", "color", "#6c757d"], [1, "params-section"], [1, "params-header"], [1, "fa-solid", "fa-sign-in-alt"], ["kendoButton", "", "fillMode", "flat", "size", "small"], [1, "params-grid"], [1, "params-section", 2, "margin-top", "24px"], [1, "fa-solid", "fa-sign-out-alt"], [1, "empty-state", 2, "padding", "20px", "text-align", "center"], ["kendoButton", "", "fillMode", "flat", "size", "small", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "fa-solid", "fa-inbox", 2, "font-size", "2em", "color", "#6c757d", "opacity", "0.3"], [1, "param-card", 3, "required", "clickable"], [1, "param-card", 3, "click"], [1, "param-header"], [1, "param-name"], [1, "param-badges"], [1, "required-badge"], [1, "array-badge"], [1, "param-details"], [1, "param-type"], [1, "param-description"], [1, "param-default"], ["title", "Edit parameter", 1, "param-edit-btn", 3, "click"], [1, "fa-solid", "fa-edit"], ["title", "Delete parameter", 1, "param-delete-btn", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "default-label"], [1, "param-card", 3, "clickable"], [1, "generation-panel"], [1, "code-editor-section"], [1, "code-toolbar"], [1, "fa-solid", "fa-file-code"], [1, "code-actions"], [1, "fa-solid", "fa-copy"], ["name", "actionCode", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "code-comments"], [1, "approval-comments"], [1, "fa-solid", "fa-code", 2, "color", "#6c757d"], [2, "background", "#ffc107", "color", "#856404", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [1, "fa-solid", "fa-lock"], [1, "prompt-section"], ["name", "userPrompt", "placeholder", "Describe what this action should do...", 2, "width", "100%", "min-height", "120px", 3, "ngModelChange", "ngModel", "rows"], [1, "comments-section"], ["name", "userComments", "placeholder", "Internal notes...", 2, "width", "100%", 3, "ngModelChange", "ngModel", "rows"], [1, "generation-controls"], ["name", "codeLocked", 3, "ngModelChange", "ngModel"], [2, "margin-left", "8px"], [1, "fa-solid", "fa-comment"], ["name", "codeApprovalComments", "placeholder", "Explain why the code was rejected...", 2, "width", "100%", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-flag-checkered", 2, "color", "#6c757d"], [2, "background", "#28a745", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], ["kendoButton", "", "size", "small", 3, "click", "primary"], [1, "fa-solid", "fa-flag-checkered", 2, "font-size", "2em", "color", "#6c757d", "opacity", "0.3"], [1, "result-code-card", 3, "success", "failure", "clickable"], [1, "result-code-card", 3, "click"], [1, "result-icon"], [1, "result-content"], [1, "result-code"], [1, "result-description"], [1, "result-actions"], ["title", "Edit result code", 1, "result-edit-btn", 3, "click"], ["title", "Delete result code", 1, "result-delete-btn", 3, "click"], [1, "fa-solid", "fa-chart-line", 2, "color", "#6c757d"], [1, "fa-solid", "fa-chart-line", 2, "font-size", "2em", "color", "#6c757d", "opacity", "0.3"], [1, "execution-stats-row"], [1, "stat-box"], [1, "fa-solid", "fa-tachometer-alt"], [1, "stat-info"], [1, "stat-label", 2, "color", "#212529"], [1, "stat-value", 2, "color", "#212529"], [1, "fa-solid", "fa-check-circle"], [1, "stat-value", 2, "font-weight", "600"], [1, "fa-solid", "fa-play-circle"], [2, "margin-top", "24px"], [1, "fa-solid", "fa-history"], [1, "executions-table"], [1, "execution-row", 3, "success"], [1, "execution-row"], [1, "running"], [1, "fa-solid", "fa-external-link"], [1, "config-subsection"], [1, "fa-solid", "fa-book"], [1, "empty-state", "mini"], [1, "library-cards"], [1, "related-entities-grid"], [1, "related-entity-link"], [1, "fa-solid", "fa-shield-alt"], [1, "entity-count"], [1, "fa-solid", "fa-layer-group"], [1, "fa-solid", "fa-calendar"], [1, "fa-solid", "fa-cube"], [1, "fa-solid", "fa-cogs", 2, "color", "#6c757d"], [1, "library-card"], [1, "library-card", 3, "click"], [1, "library-info"], [1, "library-name"], [1, "library-items"], [3, "close", "width", "height", "minWidth", "minHeight", "draggable", "resizable", "state", "title"], [3, "visibilityChange", "action", "actionParams", "isVisible"]], template: function ActionFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
1555
1862
  i0.ɵɵelementStart(0, "div", 1);
1556
- i0.ɵɵtemplate(1, ActionFormComponentExtended_Conditional_1_Template, 46, 23, "form", 2);
1863
+ i0.ɵɵtemplate(1, ActionFormComponentExtended_Conditional_1_Template, 47, 24, "form", 2);
1557
1864
  i0.ɵɵelementEnd();
1558
1865
  i0.ɵɵtemplate(2, ActionFormComponentExtended_Conditional_2_Template, 2, 12, "kendo-window", 3);
1559
1866
  } if (rf & 2) {
@@ -1561,7 +1868,7 @@ let ActionFormComponentExtended = class ActionFormComponentExtended extends Acti
1561
1868
  i0.ɵɵconditional(ctx.record ? 1 : -1);
1562
1869
  i0.ɵɵadvance();
1563
1870
  i0.ɵɵconditional(ctx.showTestHarness ? 2 : -1);
1564
- } }, dependencies: [i4.ɵNgNoValidate, i4.NgControlStatus, i4.NgControlStatusGroup, i4.NgModel, i4.NgForm, i5.ExpansionPanelComponent, i5.ExpansionPanelTitleDirective, i3.WindowComponent, i6.TextAreaComponent, i6.TextBoxComponent, i6.SwitchComponent, i7.DropDownListComponent, i8.ButtonComponent, i9.FormToolbarComponent, i10.CodeEditorComponent, i11.ActionTestHarnessComponent, i12.DatePipe], styles: ["\n\n.action-hero-header[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n padding: 32px;\n margin: -20px -20px 24px -20px;\n border-radius: 0 0 16px 16px;\n box-shadow: 0 4px 20px rgba(0,0,0,0.1);\n}\n\n.hero-content[_ngcontent-%COMP%] {\n max-width: 1400px;\n margin: 0 auto;\n}\n\n.action-identity[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 24px;\n margin-bottom: 24px;\n}\n\n.action-icon-wrapper[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n border-radius: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: rgba(255,255,255,0.2);\n backdrop-filter: blur(10px);\n}\n\n.action-icon-wrapper[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 36px;\n}\n\n.action-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.action-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n margin-bottom: 12px;\n flex-wrap: wrap;\n}\n\n.action-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 2em;\n font-weight: 600;\n color: white;\n}\n\n.action-name-input[_ngcontent-%COMP%] {\n font-size: 1.8em;\n font-weight: 600;\n background: rgba(255,255,255,0.2);\n border: 2px solid rgba(255,255,255,0.3);\n color: white;\n padding: 8px 16px;\n border-radius: 8px;\n min-width: 400px;\n}\n\n.action-name-input[_ngcontent-%COMP%]::placeholder {\n color: rgba(255,255,255,0.6);\n}\n\n.action-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.status-badge[_ngcontent-%COMP%], .type-badge[_ngcontent-%COMP%], .approval-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n font-size: 0.85em;\n font-weight: 500;\n background: rgba(255,255,255,0.2);\n backdrop-filter: blur(10px);\n border: 1px solid rgba(255,255,255,0.3);\n}\n\n.action-category[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n color: rgba(255,255,255,0.9);\n font-size: 0.95em;\n cursor: pointer;\n transition: all 0.2s;\n margin-bottom: 12px;\n}\n\n.action-category[_ngcontent-%COMP%]:hover {\n color: white;\n transform: translateX(4px);\n}\n\n.action-description[_ngcontent-%COMP%] {\n color: rgba(255,255,255,0.9);\n font-size: 1.05em;\n line-height: 1.5;\n margin: 0;\n}\n\n.action-description-input[_ngcontent-%COMP%] {\n width: 100%;\n max-width: 600px;\n background: rgba(255,255,255,0.2);\n border: 2px solid rgba(255,255,255,0.3);\n color: white;\n border-radius: 8px;\n}\n\n.action-description-input[_ngcontent-%COMP%]::placeholder {\n color: rgba(255,255,255,0.6);\n}\n\n\n\n.action-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n margin-bottom: 24px;\n flex-wrap: wrap;\n}\n\n.stat-card[_ngcontent-%COMP%] {\n background: rgba(255,255,255,0.1);\n backdrop-filter: blur(10px);\n border: 1px solid rgba(255,255,255,0.2);\n border-radius: 12px;\n padding: 16px 24px;\n display: flex;\n align-items: center;\n gap: 16px;\n min-width: 160px;\n}\n\n.stat-card[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: rgba(255,255,255,0.8);\n}\n\n.stat-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 1.4em;\n font-weight: 700;\n color: white;\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: rgba(255,255,255,0.7);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n\n\n.hero-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.hero-actions[_ngcontent-%COMP%] kendo-button[_ngcontent-%COMP%] {\n backdrop-filter: blur(10px);\n}\n\n\n\n.action-content[_ngcontent-%COMP%] {\n padding: 0 20px 20px;\n}\n\n.content-section[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #e9ecef;\n border-radius: 12px;\n margin-bottom: 20px;\n overflow: hidden;\n transition: all 0.3s ease;\n}\n\n.content-section[_ngcontent-%COMP%]:hover {\n box-shadow: 0 4px 12px rgba(0,0,0,0.08);\n}\n\n.section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n background: #f8f9fa;\n cursor: pointer;\n user-select: none;\n transition: background 0.2s;\n}\n\n.section-header[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n}\n\n.section-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.3em;\n color: #2c3e50;\n flex: 1;\n}\n\n.section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n font-size: 1.2em;\n color: #6c757d;\n}\n\n.section-count[_ngcontent-%COMP%] {\n background: #007bff;\n color: white;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 0.85em;\n font-weight: 500;\n}\n\n.toggle-icon[_ngcontent-%COMP%] {\n color: #6c757d;\n transition: transform 0.3s;\n}\n\n.toggle-icon.rotated[_ngcontent-%COMP%] {\n transform: rotate(-90deg);\n}\n\n.section-content[_ngcontent-%COMP%] {\n padding: 24px;\n animation: _ngcontent-%COMP%_slideDown 0.3s ease;\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n\n\n.overview-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n}\n\n.overview-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.overview-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #495057;\n font-size: 0.9em;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.required[_ngcontent-%COMP%] {\n color: #dc3545;\n}\n\n.full-width[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.overview-display[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 24px;\n}\n\n.display-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.display-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: #6c757d;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.display-value[_ngcontent-%COMP%] {\n font-size: 1.1em;\n color: #2c3e50;\n}\n\n.display-value.code[_ngcontent-%COMP%] {\n font-family: 'Courier New', monospace;\n background: #f8f9fa;\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.approval-date[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 0.85em;\n margin-left: 8px;\n}\n\n\n\n.generation-panel[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 20px;\n margin-bottom: 24px;\n}\n\n.generation-panel[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n color: #6f42c1;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.prompt-section[_ngcontent-%COMP%], .comments-section[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n\n.prompt-section[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .comments-section[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: 8px;\n font-weight: 600;\n color: #495057;\n}\n\n.generation-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding-top: 12px;\n border-top: 1px solid #dee2e6;\n}\n\n.code-locked-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n background: #ffc107;\n color: #856404;\n border-radius: 12px;\n font-size: 0.8em;\n font-weight: 500;\n}\n\n.code-editor-section[_ngcontent-%COMP%] {\n border: 1px solid #e9ecef;\n border-radius: 8px;\n overflow: hidden;\n}\n\n.code-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n}\n\n.code-toolbar[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.code-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.code-comments[_ngcontent-%COMP%] {\n background: #e3f2fd;\n border: 1px solid #90caf9;\n border-radius: 8px;\n padding: 16px;\n margin-top: 16px;\n}\n\n.code-comments[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: #1976d2;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.code-comments[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: #424242;\n line-height: 1.5;\n}\n\n.approval-comments[_ngcontent-%COMP%] {\n margin-top: 16px;\n}\n\n.approval-comments[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: 8px;\n font-weight: 600;\n color: #dc3545;\n}\n\n\n\n.params-section[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border-radius: 12px;\n padding: 20px;\n}\n\n.params-section.params-section-compact[_ngcontent-%COMP%] {\n padding: 12px 20px;\n}\n\n.params-section-compact[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] {\n padding: 12px !important;\n}\n\n.params-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.params-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.params-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.param-card[_ngcontent-%COMP%] {\n background: white;\n border: 2px solid #e9ecef;\n border-radius: 8px;\n padding: 16px;\n transition: all 0.2s;\n}\n\n.param-card[_ngcontent-%COMP%]:hover {\n border-color: #007bff;\n box-shadow: 0 2px 8px rgba(0,123,255,0.1);\n}\n\n.param-card.required[_ngcontent-%COMP%] {\n border-color: #ffc107;\n}\n\n.param-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.param-card.clickable[_ngcontent-%COMP%]:hover {\n background: #e7f3ff;\n border-color: #2196f3;\n transform: translateY(-1px);\n}\n\n.param-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.param-name[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #2c3e50;\n}\n\n.param-badges[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.param-edit-btn[_ngcontent-%COMP%], \n.param-delete-btn[_ngcontent-%COMP%] {\n background: none;\n border: none;\n padding: 4px 8px;\n cursor: pointer;\n color: #6c757d;\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.param-edit-btn[_ngcontent-%COMP%]:hover {\n background: #e3f2fd;\n color: #2196f3;\n}\n\n.param-delete-btn[_ngcontent-%COMP%]:hover {\n background: #ffebee;\n color: #f44336;\n}\n\n.param-details[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.required-badge[_ngcontent-%COMP%] {\n background: #ffc107;\n color: #856404;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.array-badge[_ngcontent-%COMP%] {\n background: #6f42c1;\n color: white;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.param-type[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 0.9em;\n margin-bottom: 8px;\n}\n\n.param-description[_ngcontent-%COMP%] {\n color: #495057;\n font-size: 0.9em;\n line-height: 1.4;\n margin-bottom: 8px;\n}\n\n.param-default[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid #e9ecef;\n}\n\n.default-label[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 0.85em;\n}\n\n.param-default[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: #f8f9fa;\n padding: 2px 6px;\n border-radius: 4px;\n font-family: 'Courier New', monospace;\n color: #e83e8c;\n}\n\n\n\n\n.result-codes-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.result-code-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n padding: 16px;\n border: 2px solid #e9ecef;\n border-radius: 8px;\n background: white;\n transition: all 0.2s;\n}\n\n.result-code-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(0,0,0,0.1);\n}\n\n.result-code-card.success[_ngcontent-%COMP%] {\n border-color: #28a745;\n background: #d4edda;\n}\n\n.result-code-card.failure[_ngcontent-%COMP%] {\n border-color: #dc3545;\n background: #f8d7da;\n}\n\n.result-icon[_ngcontent-%COMP%] {\n font-size: 1.5em;\n flex-shrink: 0;\n}\n\n.result-code-card.success[_ngcontent-%COMP%] .result-icon[_ngcontent-%COMP%] {\n color: #28a745;\n}\n\n.result-code-card.failure[_ngcontent-%COMP%] .result-icon[_ngcontent-%COMP%] {\n color: #dc3545;\n}\n\n.result-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.result-code[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #2c3e50;\n margin-bottom: 4px;\n font-family: 'Courier New', monospace;\n}\n\n.result-description[_ngcontent-%COMP%] {\n color: #495057;\n font-size: 0.9em;\n line-height: 1.4;\n}\n\n\n\n.execution-stats-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 20px;\n margin-bottom: 32px;\n flex-wrap: wrap;\n}\n\n.stat-box[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 200px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 20px;\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.stat-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2em;\n color: #6c757d;\n}\n\n.stat-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.executions-table[_ngcontent-%COMP%] {\n overflow-x: auto;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n}\n\n.executions-table[_ngcontent-%COMP%] table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.executions-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background: #f8f9fa;\n padding: 12px;\n text-align: left;\n font-weight: 600;\n color: #495057;\n border-bottom: 2px solid #e9ecef;\n}\n\n.executions-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px;\n border-bottom: 1px solid #e9ecef;\n}\n\n.execution-row[_ngcontent-%COMP%] {\n transition: background 0.2s;\n}\n\n.execution-row[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n}\n\n.execution-row.success[_ngcontent-%COMP%] {\n background: #d4edda20;\n}\n\n.running[_ngcontent-%COMP%] {\n color: #ffc107;\n font-style: italic;\n}\n\n.result-code[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 0.85em;\n font-weight: 500;\n font-family: 'Courier New', monospace;\n}\n\n.result-code.success[_ngcontent-%COMP%] {\n background: #d4edda;\n color: #155724;\n}\n\n.result-code.failure[_ngcontent-%COMP%] {\n background: #f8d7da;\n color: #721c24;\n}\n\n\n\n.config-subsection[_ngcontent-%COMP%] {\n margin-bottom: 32px;\n}\n\n.config-subsection[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.library-cards[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.library-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 16px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.library-card[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n transform: translateX(4px);\n}\n\n.library-card[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n font-size: 1.5em;\n color: #6c757d;\n}\n\n.library-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.library-name[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #2c3e50;\n margin-bottom: 4px;\n}\n\n.library-items[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 0.9em;\n font-family: 'Courier New', monospace;\n}\n\n.related-entities-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.related-entity-link[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.related-entity-link[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n border-color: #007bff;\n}\n\n.related-entity-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: #6c757d;\n}\n\n.related-entity-link[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:first-of-type {\n flex: 1;\n font-weight: 500;\n color: #495057;\n}\n\n.entity-count[_ngcontent-%COMP%] {\n color: #007bff;\n font-size: 0.9em;\n}\n\n\n\n.loading-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px;\n color: #6c757d;\n}\n\n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2em;\n margin-bottom: 12px;\n}\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px;\n color: #6c757d;\n}\n\n.empty-state.mini[_ngcontent-%COMP%] {\n padding: 20px;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n.empty-hint[_ngcontent-%COMP%] {\n margin-top: 8px !important;\n font-size: 0.9em !important;\n opacity: 0.7;\n}\n\n.no-params[_ngcontent-%COMP%] {\n text-align: center;\n padding: 20px;\n color: #6c757d;\n font-style: italic;\n}\n\n.no-params[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n\n\n@media (max-width: 768px) {\n .action-hero-header[_ngcontent-%COMP%] {\n padding: 20px;\n }\n \n .action-identity[_ngcontent-%COMP%] {\n flex-direction: column;\n text-align: center;\n }\n \n .action-icon-wrapper[_ngcontent-%COMP%] {\n margin: 0 auto;\n }\n \n .action-title-row[_ngcontent-%COMP%] {\n justify-content: center;\n }\n \n .action-stats[_ngcontent-%COMP%] {\n justify-content: center;\n }\n \n .params-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}"] }); }
1871
+ } }, dependencies: [i3.ɵNgNoValidate, i3.NgControlStatus, i3.NgControlStatusGroup, i3.NgModel, i3.NgForm, i4.ExpansionPanelComponent, i4.ExpansionPanelTitleDirective, i5.WindowComponent, i6.TextAreaComponent, i6.TextBoxComponent, i6.SwitchComponent, i7.DropDownListComponent, i8.ButtonComponent, i9.FormToolbarComponent, i10.CodeEditorComponent, i11.ActionTestHarnessComponent, i12.DatePipe], styles: ["\n\n.action-hero-header[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n padding: 32px;\n margin: -20px -20px 24px -20px;\n border-radius: 0 0 16px 16px;\n box-shadow: 0 4px 20px rgba(0,0,0,0.1);\n}\n\n.hero-content[_ngcontent-%COMP%] {\n max-width: 1400px;\n margin: 0 auto;\n}\n\n.action-identity[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 24px;\n margin-bottom: 24px;\n}\n\n.action-icon-wrapper[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n border-radius: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: rgba(255,255,255,0.2);\n backdrop-filter: blur(10px);\n}\n\n.action-icon-wrapper[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 36px;\n}\n\n.action-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.action-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n margin-bottom: 12px;\n flex-wrap: wrap;\n}\n\n.action-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 2em;\n font-weight: 600;\n color: white;\n}\n\n.action-name-input[_ngcontent-%COMP%] {\n font-size: 1.8em;\n font-weight: 600;\n background: rgba(255,255,255,0.2);\n border: 2px solid rgba(255,255,255,0.3);\n color: white;\n padding: 8px 16px;\n border-radius: 8px;\n min-width: 400px;\n}\n\n.action-name-input[_ngcontent-%COMP%]::placeholder {\n color: rgba(255,255,255,0.6);\n}\n\n.action-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.status-badge[_ngcontent-%COMP%], .type-badge[_ngcontent-%COMP%], .approval-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n font-size: 0.85em;\n font-weight: 500;\n background: rgba(255,255,255,0.2);\n backdrop-filter: blur(10px);\n border: 1px solid rgba(255,255,255,0.3);\n}\n\n.action-category[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n color: rgba(255,255,255,0.9);\n font-size: 0.95em;\n cursor: pointer;\n transition: all 0.2s;\n margin-bottom: 12px;\n}\n\n.action-category[_ngcontent-%COMP%]:hover {\n color: white;\n transform: translateX(4px);\n}\n\n.action-description[_ngcontent-%COMP%] {\n color: rgba(255,255,255,0.9);\n font-size: 1.05em;\n line-height: 1.5;\n margin: 0;\n}\n\n.action-description-input[_ngcontent-%COMP%] {\n width: 100%;\n max-width: 600px;\n background: rgba(255,255,255,0.2);\n border: 2px solid rgba(255,255,255,0.3);\n color: white;\n border-radius: 8px;\n}\n\n.action-description-input[_ngcontent-%COMP%]::placeholder {\n color: rgba(255,255,255,0.6);\n}\n\n\n\n.action-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n margin-bottom: 24px;\n flex-wrap: wrap;\n}\n\n.stat-card[_ngcontent-%COMP%] {\n background: rgba(255,255,255,0.1);\n backdrop-filter: blur(10px);\n border: 1px solid rgba(255,255,255,0.2);\n border-radius: 12px;\n padding: 16px 24px;\n display: flex;\n align-items: center;\n gap: 16px;\n min-width: 160px;\n}\n\n.stat-card[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: rgba(255,255,255,0.8);\n}\n\n.stat-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 1.4em;\n font-weight: 700;\n color: white;\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: rgba(255,255,255,0.7);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n\n\n.hero-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.hero-actions[_ngcontent-%COMP%] kendo-button[_ngcontent-%COMP%] {\n backdrop-filter: blur(10px);\n}\n\n\n\n.action-content[_ngcontent-%COMP%] {\n padding: 0 20px 20px;\n}\n\n.content-section[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #e9ecef;\n border-radius: 12px;\n margin-bottom: 20px;\n overflow: hidden;\n transition: all 0.3s ease;\n}\n\n.content-section[_ngcontent-%COMP%]:hover {\n box-shadow: 0 4px 12px rgba(0,0,0,0.08);\n}\n\n.section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n background: #f8f9fa;\n cursor: pointer;\n user-select: none;\n transition: background 0.2s;\n}\n\n.section-header[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n}\n\n.section-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.3em;\n color: #2c3e50;\n flex: 1;\n}\n\n.section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n font-size: 1.2em;\n color: #6c757d;\n}\n\n.section-count[_ngcontent-%COMP%] {\n background: #007bff;\n color: white;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 0.85em;\n font-weight: 500;\n}\n\n.toggle-icon[_ngcontent-%COMP%] {\n color: #6c757d;\n transition: transform 0.3s;\n}\n\n.toggle-icon.rotated[_ngcontent-%COMP%] {\n transform: rotate(-90deg);\n}\n\n.section-content[_ngcontent-%COMP%] {\n padding: 24px;\n animation: _ngcontent-%COMP%_slideDown 0.3s ease;\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n\n\n.overview-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n}\n\n.overview-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.overview-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #495057;\n font-size: 0.9em;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.required[_ngcontent-%COMP%] {\n color: #dc3545;\n}\n\n.full-width[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.overview-display[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 24px;\n}\n\n.display-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.display-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: #6c757d;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.display-value[_ngcontent-%COMP%] {\n font-size: 1.1em;\n color: #2c3e50;\n}\n\n.display-value.code[_ngcontent-%COMP%] {\n font-family: 'Courier New', monospace;\n background: #f8f9fa;\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.approval-date[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 0.85em;\n margin-left: 8px;\n}\n\n\n\n.generation-panel[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 20px;\n margin-bottom: 24px;\n}\n\n.generation-panel[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n color: #6f42c1;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.prompt-section[_ngcontent-%COMP%], .comments-section[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n\n.prompt-section[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .comments-section[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: 8px;\n font-weight: 600;\n color: #495057;\n}\n\n.generation-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding-top: 12px;\n border-top: 1px solid #dee2e6;\n}\n\n.code-locked-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n background: #ffc107;\n color: #856404;\n border-radius: 12px;\n font-size: 0.8em;\n font-weight: 500;\n}\n\n.code-editor-section[_ngcontent-%COMP%] {\n border: 1px solid #e9ecef;\n border-radius: 8px;\n overflow: hidden;\n}\n\n.code-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n}\n\n.code-toolbar[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.code-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.code-comments[_ngcontent-%COMP%] {\n background: #e3f2fd;\n border: 1px solid #90caf9;\n border-radius: 8px;\n padding: 16px;\n margin-top: 16px;\n}\n\n.code-comments[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: #1976d2;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.code-comments[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: #424242;\n line-height: 1.5;\n}\n\n.approval-comments[_ngcontent-%COMP%] {\n margin-top: 16px;\n}\n\n.approval-comments[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: 8px;\n font-weight: 600;\n color: #dc3545;\n}\n\n\n\n.params-section[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border-radius: 12px;\n padding: 20px;\n}\n\n.params-section.params-section-compact[_ngcontent-%COMP%] {\n padding: 12px 20px;\n}\n\n.params-section-compact[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] {\n padding: 12px !important;\n}\n\n.params-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.params-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.params-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.param-card[_ngcontent-%COMP%] {\n background: white;\n border: 2px solid #e9ecef;\n border-radius: 8px;\n padding: 16px;\n transition: all 0.2s;\n}\n\n.param-card[_ngcontent-%COMP%]:hover {\n border-color: #007bff;\n box-shadow: 0 2px 8px rgba(0,123,255,0.1);\n}\n\n.param-card.required[_ngcontent-%COMP%] {\n border-color: #ffc107;\n}\n\n.param-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.param-card.clickable[_ngcontent-%COMP%]:hover {\n background: #e7f3ff;\n border-color: #2196f3;\n transform: translateY(-1px);\n}\n\n.param-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.param-name[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #2c3e50;\n}\n\n.param-badges[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.param-edit-btn[_ngcontent-%COMP%], \n.param-delete-btn[_ngcontent-%COMP%] {\n background: none;\n border: none;\n padding: 4px 8px;\n cursor: pointer;\n color: #6c757d;\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.param-edit-btn[_ngcontent-%COMP%]:hover {\n background: #e3f2fd;\n color: #2196f3;\n}\n\n.param-delete-btn[_ngcontent-%COMP%]:hover {\n background: #ffebee;\n color: #f44336;\n}\n\n.param-details[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.required-badge[_ngcontent-%COMP%] {\n background: #ffc107;\n color: #856404;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.array-badge[_ngcontent-%COMP%] {\n background: #6f42c1;\n color: white;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.param-type[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 0.9em;\n margin-bottom: 8px;\n}\n\n.param-description[_ngcontent-%COMP%] {\n color: #495057;\n font-size: 0.9em;\n line-height: 1.4;\n margin-bottom: 8px;\n}\n\n.param-default[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid #e9ecef;\n}\n\n.default-label[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 0.85em;\n}\n\n.param-default[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: #f8f9fa;\n padding: 2px 6px;\n border-radius: 4px;\n font-family: 'Courier New', monospace;\n color: #e83e8c;\n}\n\n\n\n\n.result-codes-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.result-code-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n padding: 16px;\n border: 2px solid #e9ecef;\n border-radius: 8px;\n background: white;\n transition: all 0.2s;\n position: relative;\n}\n\n.result-code-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.result-code-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(0,0,0,0.1);\n}\n\n.result-code-card.success[_ngcontent-%COMP%] {\n border-color: #28a745;\n background: #d4edda;\n}\n\n.result-code-card.failure[_ngcontent-%COMP%] {\n border-color: #dc3545;\n background: #f8d7da;\n}\n\n.result-actions[_ngcontent-%COMP%] {\n position: absolute;\n top: 8px;\n right: 8px;\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s;\n}\n\n.result-code-card[_ngcontent-%COMP%]:hover .result-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.result-edit-btn[_ngcontent-%COMP%], \n.result-delete-btn[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n padding: 4px 8px;\n cursor: pointer;\n transition: all 0.2s;\n font-size: 0.85em;\n}\n\n.result-edit-btn[_ngcontent-%COMP%]:hover {\n background: #007bff;\n color: white;\n border-color: #007bff;\n}\n\n.result-delete-btn[_ngcontent-%COMP%]:hover {\n background: #dc3545;\n color: white;\n border-color: #dc3545;\n}\n\n.result-icon[_ngcontent-%COMP%] {\n font-size: 1.5em;\n flex-shrink: 0;\n}\n\n.result-code-card.success[_ngcontent-%COMP%] .result-icon[_ngcontent-%COMP%] {\n color: #28a745;\n}\n\n.result-code-card.failure[_ngcontent-%COMP%] .result-icon[_ngcontent-%COMP%] {\n color: #dc3545;\n}\n\n.result-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.result-code[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #2c3e50;\n margin-bottom: 4px;\n font-family: 'Courier New', monospace;\n}\n\n.result-description[_ngcontent-%COMP%] {\n color: #495057;\n font-size: 0.9em;\n line-height: 1.4;\n}\n\n\n\n.execution-stats-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 20px;\n margin-bottom: 32px;\n flex-wrap: wrap;\n}\n\n.stat-box[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 200px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 20px;\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.stat-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2em;\n color: #6c757d;\n}\n\n.stat-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.executions-table[_ngcontent-%COMP%] {\n overflow-x: auto;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n}\n\n.executions-table[_ngcontent-%COMP%] table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.executions-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background: #f8f9fa;\n padding: 12px;\n text-align: left;\n font-weight: 600;\n color: #495057;\n border-bottom: 2px solid #e9ecef;\n}\n\n.executions-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px;\n border-bottom: 1px solid #e9ecef;\n}\n\n.execution-row[_ngcontent-%COMP%] {\n transition: background 0.2s;\n}\n\n.execution-row[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n}\n\n.execution-row.success[_ngcontent-%COMP%] {\n background: #d4edda20;\n}\n\n.running[_ngcontent-%COMP%] {\n color: #ffc107;\n font-style: italic;\n}\n\n.result-code[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 0.85em;\n font-weight: 500;\n font-family: 'Courier New', monospace;\n}\n\n.result-code.success[_ngcontent-%COMP%] {\n background: #d4edda;\n color: #155724;\n}\n\n.result-code.failure[_ngcontent-%COMP%] {\n background: #f8d7da;\n color: #721c24;\n}\n\n\n\n.config-subsection[_ngcontent-%COMP%] {\n margin-bottom: 32px;\n}\n\n.config-subsection[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.library-cards[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.library-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 16px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.library-card[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n transform: translateX(4px);\n}\n\n.library-card[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n font-size: 1.5em;\n color: #6c757d;\n}\n\n.library-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.library-name[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #2c3e50;\n margin-bottom: 4px;\n}\n\n.library-items[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 0.9em;\n font-family: 'Courier New', monospace;\n}\n\n.related-entities-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.related-entity-link[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.related-entity-link[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n border-color: #007bff;\n}\n\n.related-entity-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: #6c757d;\n}\n\n.related-entity-link[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:first-of-type {\n flex: 1;\n font-weight: 500;\n color: #495057;\n}\n\n.entity-count[_ngcontent-%COMP%] {\n color: #007bff;\n font-size: 0.9em;\n}\n\n\n\n.loading-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px;\n color: #6c757d;\n}\n\n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2em;\n margin-bottom: 12px;\n}\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px;\n color: #6c757d;\n}\n\n.empty-state.mini[_ngcontent-%COMP%] {\n padding: 20px;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n.empty-hint[_ngcontent-%COMP%] {\n margin-top: 8px !important;\n font-size: 0.9em !important;\n opacity: 0.7;\n}\n\n.no-params[_ngcontent-%COMP%] {\n text-align: center;\n padding: 20px;\n color: #6c757d;\n font-style: italic;\n}\n\n.no-params[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n\n\n@media (max-width: 768px) {\n .action-hero-header[_ngcontent-%COMP%] {\n padding: 20px;\n }\n \n .action-identity[_ngcontent-%COMP%] {\n flex-direction: column;\n text-align: center;\n }\n \n .action-icon-wrapper[_ngcontent-%COMP%] {\n margin: 0 auto;\n }\n \n .action-title-row[_ngcontent-%COMP%] {\n justify-content: center;\n }\n \n .action-stats[_ngcontent-%COMP%] {\n justify-content: center;\n }\n \n .params-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}"] }); }
1565
1872
  };
1566
1873
  ActionFormComponentExtended = __decorate([
1567
1874
  RegisterClass(BaseFormComponent, 'Actions')
@@ -1569,9 +1876,9 @@ ActionFormComponentExtended = __decorate([
1569
1876
  export { ActionFormComponentExtended };
1570
1877
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ActionFormComponentExtended, [{
1571
1878
  type: Component,
1572
- args: [{ selector: 'mj-action-form', template: "<div class=\"record-form-container\">\n @if (record) {\n <form class=\"record-form\" #form=\"ngForm\">\n <mj-form-toolbar [form]=\"this\"></mj-form-toolbar>\n\n <!-- Main Content Area -->\n <div class=\"action-main-area\" style=\"display: flex; flex-direction: column; height: 100%; overflow-y: auto;\">\n \n <!-- Header Section -->\n <div class=\"action-header\" style=\"flex-shrink: 0; padding: 20px; background: #f8f9fa; border-bottom: 2px solid #e9ecef;\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n \n <!-- Left: Action Info -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 8px;\">\n <i [class]=\"getActionIcon()\" [style.color]=\"getTypeColor()\" style=\"font-size: 1.4em;\"></i>\n @if (EditMode) {\n <kendo-textbox [(ngModel)]=\"record.Name\" \n name=\"actionName\"\n placeholder=\"Enter action name...\"\n style=\"font-size: 1.2em; font-weight: 600; min-width: 300px; flex: 1;\">\n </kendo-textbox>\n } @else {\n <h4 style=\"margin: 0; color: #495057; font-weight: 600; flex: 1;\">{{ record.Name || 'Untitled Action' }}</h4>\n <span class=\"status-badge\" [style.background-color]=\"getStatusColor()\" \n style=\"color: white; padding: 4px 10px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\">\n {{ record.Status }}\n </span>\n }\n </div>\n \n <!-- Status and Type Editors when in edit mode -->\n @if (EditMode) {\n <div style=\"display: flex; gap: 16px; margin-bottom: 12px; flex-wrap: wrap;\">\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: #495057; font-size: 0.9em;\">Status</label>\n <kendo-dropdownlist [(ngModel)]=\"record.Status\"\n name=\"actionStatus\"\n [data]=\"[{text: 'Active', value: 'Active'}, {text: 'Pending', value: 'Pending'}, {text: 'Disabled', value: 'Disabled'}]\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n style=\"width: 150px;\">\n </kendo-dropdownlist>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: #495057; font-size: 0.9em;\">\n Type <span style=\"color: #dc3545;\">*</span>\n </label>\n <kendo-dropdownlist [(ngModel)]=\"record.Type\"\n name=\"actionType\"\n [data]=\"[{text: 'Generated', value: 'Generated'}, {text: 'Custom', value: 'Custom'}]\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n style=\"width: 150px;\">\n </kendo-dropdownlist>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: #495057; font-size: 0.9em;\">\n Category <span style=\"color: #dc3545;\">*</span>\n </label>\n <kendo-dropdownlist [(ngModel)]=\"record.CategoryID\"\n name=\"categoryID\"\n [data]=\"[]\"\n placeholder=\"Select category...\"\n style=\"width: 200px;\">\n </kendo-dropdownlist>\n </div>\n </div>\n }\n \n @if (EditMode) {\n <kendo-textarea [(ngModel)]=\"record.Description\" \n name=\"actionDescription\"\n [rows]=\"2\"\n placeholder=\"Enter action description...\"\n style=\"width: 100%; max-width: 600px; margin-bottom: 12px;\">\n </kendo-textarea>\n } @else if (record.Description) {\n <p style=\"margin: 0 0 12px 0; color: #6c757d; font-size: 0.9em; line-height: 1.4;\">{{ record.Description }}</p>\n }\n \n <!-- Quick Config Row -->\n <div class=\"quick-config\" style=\"display: flex; align-items: center; gap: 16px; flex-wrap: wrap;\">\n @if (category) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-folder\" style=\"color: #6c757d;\"></i>\n <span style=\"color: #6c757d;\">Category:</span>\n <span style=\"color: #495057; font-weight: 500; cursor: pointer;\" (click)=\"navigateToCategory()\">\n {{ category.Name }}\n <i class=\"fa-solid fa-external-link\" style=\"font-size: 0.75em; margin-left: 4px;\"></i>\n </span>\n </div>\n }\n \n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-cube\" style=\"color: #6c757d;\"></i>\n <span style=\"color: #6c757d;\">Type:</span>\n <span style=\"color: #495057; font-weight: 500;\">{{ record.Type }}</span>\n </div>\n \n @if (record.Type === 'Generated' && record.CodeApprovalStatus) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i [class]=\"'fa-solid ' + getApprovalStatusIcon()\" [style.color]=\"getApprovalStatusColor()\"></i>\n <span style=\"color: #6c757d;\">Code:</span>\n <span [style.color]=\"getApprovalStatusColor()\" style=\"font-weight: 500;\">{{ record.CodeApprovalStatus }}</span>\n </div>\n }\n \n @if (actionParams.length > 0) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: #6c757d;\"></i>\n <span style=\"color: #495057; font-weight: 500;\">{{ actionParams.length }} Parameters</span>\n </div>\n }\n </div>\n </div>\n \n <!-- Right: Action Buttons -->\n <div class=\"action-buttons\" style=\"display: flex; flex-direction: column; gap: 8px; align-items: flex-end;\">\n <div style=\"display: flex; gap: 8px;\">\n @if (record.ID) {\n <button kendoButton themeColor=\"primary\" size=\"large\"\n (click)=\"openTestHarness()\"\n title=\"Open Run Harness\"\n [disabled]=\"record.Status !== 'Active'\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n @if (EditMode && record.Type === 'Generated') {\n <button kendoButton themeColor=\"info\" size=\"medium\"\n (click)=\"regenerateCode()\"\n title=\"Regenerate Code\">\n <i class=\"fa-solid fa-robot\"></i> Regenerate\n </button>\n }\n </div>\n \n @if (EditMode && record.CodeApprovalStatus === 'Pending' && record.Type === 'Generated') {\n <div style=\"display: flex; gap: 8px;\">\n <button kendoButton themeColor=\"success\" size=\"small\"\n (click)=\"approveCode()\">\n <i class=\"fa-solid fa-check\"></i> Approve\n </button>\n <button kendoButton themeColor=\"error\" size=\"small\"\n (click)=\"rejectCode()\">\n <i class=\"fa-solid fa-times\"></i> Reject\n </button>\n </div>\n }\n \n @if (!EditMode && record.Status !== 'Active' && record.ID) {\n <div style=\"font-size: 0.75em; color: #dc3545; text-align: right;\">\n Action must be Active to execute\n </div>\n }\n </div>\n </div>\n </div>\n\n <!-- Configuration Sections with Expansion Panels -->\n <div class=\"configuration-sections\" style=\"flex: 1; background: white; border-top: 2px solid #e9ecef; padding: 16px; min-height: 0;\">\n \n <!-- Parameters Section (FIRST) -->\n <kendo-expansionpanel \n [expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: #6c757d;\"></i>\n Parameters\n @if (actionParams.length > 0) {\n <span style=\"background: #17a2b8; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ actionParams.length }}\n </span>\n }\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n @if (isLoadingParams) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading parameters...\n </div>\n } @else if (actionParams.length === 0) {\n <div class=\"empty-state\" style=\"padding: 30px; text-align: center;\">\n <i class=\"fa-solid fa-sliders\" style=\"font-size: 2em; color: #6c757d; opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: #6c757d;\">No parameters defined</p>\n @if (EditMode && record.IsSaved) {\n <p style=\"margin: 8px 0 0 0; font-size: 0.85em; color: #6c757d;\">Add parameters to define inputs and outputs for this action</p>\n }\n </div>\n } @else {\n <!-- Input Parameters Grid -->\n <div class=\"params-section\">\n <div class=\"params-header\">\n <h3><i class=\"fa-solid fa-sign-in-alt\"></i> Input Parameters</h3>\n @if (EditMode && record.IsSaved) {\n <button kendoButton fillMode=\"flat\" size=\"small\" (click)=\"addParameter('Input')\">\n <i class=\"fa-solid fa-plus\"></i> Add Input\n </button>\n }\n </div>\n \n @if (getInputParams().length === 0) {\n <div class=\"empty-state\" style=\"padding: 30px; text-align: center;\">\n <i class=\"fa-solid fa-inbox\" style=\"font-size: 2em; color: #6c757d; opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: #6c757d;\">No input parameters defined</p>\n </div>\n } @else {\n <div class=\"params-grid\">\n @for (param of getInputParams(); track param.ID) {\n <div class=\"param-card\" [class.required]=\"param.IsRequired\" \n [class.clickable]=\"true\"\n (click)=\"onParamClick(param, $event)\">\n <div class=\"param-header\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <div class=\"param-badges\">\n @if (param.IsRequired) {\n <span class=\"required-badge\">Required</span>\n }\n @if (param.IsArray) {\n <span class=\"array-badge\">Array</span>\n }\n @if (EditMode) {\n <button class=\"param-edit-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"param-delete-btn\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n <div class=\"param-details\">\n <div class=\"param-type\">{{ param.ValueType }}</div>\n @if (param.Description) {\n <div class=\"param-description\">{{ param.Description }}</div>\n }\n @if (param.DefaultValue) {\n <div class=\"param-default\">\n <span class=\"default-label\">Default:</span>\n <code>{{ param.DefaultValue }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Output Parameters Grid -->\n <div class=\"params-section\" style=\"margin-top: 24px;\" \n [class.params-section-compact]=\"getOutputParams().length === 0\">\n <div class=\"params-header\">\n <h3><i class=\"fa-solid fa-sign-out-alt\"></i> Output Parameters</h3>\n @if (EditMode && record.IsSaved) {\n <button kendoButton fillMode=\"flat\" size=\"small\" (click)=\"addParameter('Output')\">\n <i class=\"fa-solid fa-plus\"></i> Add Output\n </button>\n }\n </div>\n \n @if (getOutputParams().length === 0) {\n <div class=\"empty-state\" style=\"padding: 20px; text-align: center;\">\n <i class=\"fa-solid fa-inbox\" style=\"font-size: 2em; color: #6c757d; opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: #6c757d;\">No output parameters defined</p>\n </div>\n } @else {\n <div class=\"params-grid\">\n @for (param of getOutputParams(); track param.ID) {\n <div class=\"param-card\"\n [class.clickable]=\"true\"\n (click)=\"onParamClick(param, $event)\">\n <div class=\"param-header\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <div class=\"param-badges\">\n @if (param.IsArray) {\n <span class=\"array-badge\">Array</span>\n }\n @if (EditMode) {\n <button class=\"param-edit-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"param-delete-btn\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n <div class=\"param-details\">\n <div class=\"param-type\">{{ param.ValueType }}</div>\n @if (param.Description) {\n <div class=\"param-description\">{{ param.Description }}</div>\n }\n @if (param.DefaultValue) {\n <div class=\"param-default\">\n <span class=\"default-label\">Default:</span>\n <code>{{ param.DefaultValue }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </kendo-expansionpanel>\n\n <!-- Code & Generation Section (Only for Generated type) -->\n @if (record.Type === 'Generated') {\n <kendo-expansionpanel \n [expanded]=\"expandedSections.code\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: #6c757d;\"></i>\n Code & Generation\n @if (record.CodeLocked) {\n <span style=\"background: #ffc107; color: #856404; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n <i class=\"fa-solid fa-lock\"></i> Locked\n </span>\n }\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n @if (EditMode) {\n <div class=\"generation-panel\">\n <h3><i class=\"fa-solid fa-robot\"></i> AI Generation</h3>\n <div class=\"prompt-section\">\n <label>User Prompt</label>\n <kendo-textarea [(ngModel)]=\"record.UserPrompt\"\n name=\"userPrompt\"\n [rows]=\"8\"\n placeholder=\"Describe what this action should do...\"\n style=\"width: 100%; min-height: 120px;\">\n </kendo-textarea>\n </div>\n <div class=\"comments-section\">\n <label>Internal Comments (not sent to AI)</label>\n <kendo-textarea [(ngModel)]=\"record.UserComments\"\n name=\"userComments\"\n [rows]=\"2\"\n placeholder=\"Internal notes...\"\n style=\"width: 100%;\">\n </kendo-textarea>\n </div>\n <div class=\"generation-controls\">\n <kendo-switch [(ngModel)]=\"record.CodeLocked\"\n name=\"codeLocked\">\n </kendo-switch>\n <label style=\"margin-left: 8px;\">Lock Code (prevent regeneration)</label>\n </div>\n </div>\n }\n \n <div class=\"code-editor-section\">\n <div class=\"code-toolbar\">\n <h3><i class=\"fa-solid fa-file-code\"></i> Action Code</h3>\n <div class=\"code-actions\">\n @if (record.CodeComments) {\n <button kendoButton fillMode=\"flat\" size=\"small\" (click)=\"toggleCodeComments()\">\n <i class=\"fa-solid fa-comment\"></i> \n {{ showCodeComments ? 'Hide' : 'Show' }} AI Comments\n </button>\n }\n <button kendoButton fillMode=\"flat\" size=\"small\" (click)=\"copyToClipboard(record.Code || '')\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n </div>\n </div>\n <mj-code-editor \n [(ngModel)]=\"record.Code\"\n name=\"actionCode\"\n [readonly]=\"!EditMode || record.CodeLocked\"\n [language]=\"codeLanguage\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n \n @if (showCodeComments && record.CodeComments) {\n <div class=\"code-comments\">\n <h4><i class=\"fa-solid fa-robot\"></i> AI Explanation</h4>\n <p>{{ record.CodeComments }}</p>\n </div>\n }\n \n @if (EditMode && record.CodeApprovalStatus === 'Rejected') {\n <div class=\"approval-comments\">\n <label>Rejection Comments</label>\n <kendo-textarea [(ngModel)]=\"record.CodeApprovalComments\"\n name=\"codeApprovalComments\"\n [rows]=\"2\"\n placeholder=\"Explain why the code was rejected...\"\n style=\"width: 100%;\">\n </kendo-textarea>\n </div>\n }\n </div>\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Result Codes Section -->\n <kendo-expansionpanel \n [expanded]=\"expandedSections.resultCodes\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-flag-checkered\" style=\"color: #6c757d;\"></i>\n Result Codes\n @if (resultCodes.length > 0) {\n <span style=\"background: #28a745; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ resultCodes.length }}\n </span>\n }\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n @if (isLoadingResultCodes) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading result codes...\n </div>\n } @else if (resultCodes.length === 0) {\n <div class=\"empty-state\" style=\"padding: 30px; text-align: center;\">\n <i class=\"fa-solid fa-flag-checkered\" style=\"font-size: 2em; color: #6c757d; opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: #6c757d;\">No result codes defined</p>\n @if (EditMode && record.IsSaved) {\n <p style=\"margin: 8px 0 0 0; font-size: 0.85em; color: #6c757d;\">Add result codes to define possible outcomes</p>\n }\n </div>\n } @else {\n <div class=\"result-codes-grid\">\n @for (code of resultCodes; track code.ID) {\n <div class=\"result-code-card\" [class.success]=\"code.IsSuccess\" [class.failure]=\"!code.IsSuccess\">\n <div class=\"result-icon\">\n <i [class]=\"code.IsSuccess ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n </div>\n <div class=\"result-content\">\n <div class=\"result-code\">{{ code.ResultCode }}</div>\n @if (code.Description) {\n <div class=\"result-description\">{{ code.Description }}</div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n </kendo-expansionpanel>\n\n <!-- Execution & Monitoring Section -->\n @if (record.IsSaved) {\n <kendo-expansionpanel \n [expanded]=\"expandedSections.execution\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-chart-line\" style=\"color: #6c757d;\"></i>\n Execution & Monitoring\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n @if (isLoadingExecutions) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading executions...\n </div>\n } @else if (recentExecutions.length === 0) {\n <div class=\"empty-state\" style=\"padding: 30px; text-align: center;\">\n <i class=\"fa-solid fa-chart-line\" style=\"font-size: 2em; color: #6c757d; opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: #6c757d;\">No executions yet</p>\n </div>\n } @else {\n <div class=\"execution-stats-row\">\n <div class=\"stat-box\">\n <i class=\"fa-solid fa-tachometer-alt\"></i>\n <div class=\"stat-info\">\n <div class=\"stat-label\" style=\"color: #212529;\">Avg Duration</div>\n <div class=\"stat-value\" style=\"color: #212529;\">{{ formatDuration(executionStats.avgDuration) }}</div>\n </div>\n </div>\n <div class=\"stat-box\">\n <i class=\"fa-solid fa-check-circle\" [style.color]=\"getSuccessRateColor()\"></i>\n <div class=\"stat-info\">\n <div class=\"stat-label\" style=\"color: #212529;\">Success Rate</div>\n <div class=\"stat-value\" [style.color]=\"getSuccessRateColor()\" style=\"font-weight: 600;\">{{ executionStats.successRate.toFixed(0) }}%</div>\n </div>\n </div>\n <div class=\"stat-box\">\n <i class=\"fa-solid fa-play-circle\"></i>\n <div class=\"stat-info\">\n <div class=\"stat-label\" style=\"color: #212529;\">Total Runs</div>\n <div class=\"stat-value\" style=\"color: #212529;\">{{ executionStats.totalRuns }}</div>\n </div>\n </div>\n </div>\n\n <h3 style=\"margin-top: 24px;\"><i class=\"fa-solid fa-history\"></i> Recent Executions</h3>\n <div class=\"executions-table\">\n <table>\n <thead>\n <tr>\n <th>Started</th>\n <th>Duration</th>\n <th>User</th>\n <th>Result</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (execution of recentExecutions; track execution.ID) {\n <tr class=\"execution-row\" [class.success]=\"isExecutionSuccess(execution)\">\n <td>{{ execution.StartedAt | date:'short' }}</td>\n <td>\n @if (execution.EndedAt) {\n {{ formatDuration(getExecutionDuration(execution)) }}\n } @else {\n <span class=\"running\">Running...</span>\n }\n </td>\n <td>{{ execution.User }}</td>\n <td>\n <span class=\"result-code\" \n [class.success]=\"isExecutionSuccess(execution)\"\n [class.failure]=\"!isExecutionSuccess(execution)\">\n {{ execution.ResultCode }}\n </span>\n </td>\n <td>\n <button kendoButton fillMode=\"flat\" size=\"small\" (click)=\"navigateToExecution(execution.ID)\">\n <i class=\"fa-solid fa-external-link\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Related Configuration Section -->\n @if (record.IsSaved) {\n <kendo-expansionpanel \n [expanded]=\"expandedSections.configuration\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-cogs\" style=\"color: #6c757d;\"></i>\n Related Configuration\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n <!-- Libraries -->\n <div class=\"config-subsection\">\n <h3><i class=\"fa-solid fa-book\"></i> Libraries</h3>\n @if (isLoadingLibraries) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading libraries...\n </div>\n } @else if (actionLibraries.length === 0) {\n <div class=\"empty-state mini\">\n <p>No libraries configured</p>\n </div>\n } @else {\n <div class=\"library-cards\">\n @for (lib of libraries; track lib.ID; let i = $index) {\n <div class=\"library-card\" (click)=\"navigateToLibrary(lib.ID)\">\n <i class=\"fa-solid fa-book\"></i>\n <div class=\"library-info\">\n <div class=\"library-name\">{{ lib.Name }}</div>\n @if (actionLibraries[i].ItemsUsed) {\n <div class=\"library-items\">{{ actionLibraries[i].ItemsUsed }}</div>\n }\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Other Related Entities -->\n <div class=\"related-entities-grid\">\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-shield-alt\"></i>\n <span>Authorizations</span>\n <span class=\"entity-count\">View</span>\n </div>\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-layer-group\"></i>\n <span>Contexts</span>\n <span class=\"entity-count\">View</span>\n </div>\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-calendar\"></i>\n <span>Scheduled Actions</span>\n <span class=\"entity-count\">View</span>\n </div>\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-cube\"></i>\n <span>Entity Actions</span>\n <span class=\"entity-count\">View</span>\n </div>\n </div>\n </div>\n </kendo-expansionpanel>\n }\n </div>\n </div>\n </form>\n }\n</div>\n\n<!-- Action Test Harness -->\n@if (showTestHarness) {\n <kendo-window \n [width]=\"1200\" \n [height]=\"800\" \n [minWidth]=\"800\"\n [minHeight]=\"600\"\n [draggable]=\"true\"\n [resizable]=\"true\"\n [state]=\"'default'\"\n (close)=\"onTestHarnessVisibilityChanged(false)\"\n title=\"Run Action - {{ record.Name || 'Untitled' }}\">\n <mj-action-test-harness\n [action]=\"record\"\n [actionParams]=\"actionParams\"\n [isVisible]=\"showTestHarness\"\n (visibilityChange)=\"onTestHarnessVisibilityChanged($event)\">\n </mj-action-test-harness>\n </kendo-window>\n}", styles: ["/* Hero Header Section */\n.action-hero-header {\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n padding: 32px;\n margin: -20px -20px 24px -20px;\n border-radius: 0 0 16px 16px;\n box-shadow: 0 4px 20px rgba(0,0,0,0.1);\n}\n\n.hero-content {\n max-width: 1400px;\n margin: 0 auto;\n}\n\n.action-identity {\n display: flex;\n align-items: flex-start;\n gap: 24px;\n margin-bottom: 24px;\n}\n\n.action-icon-wrapper {\n width: 80px;\n height: 80px;\n border-radius: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: rgba(255,255,255,0.2);\n backdrop-filter: blur(10px);\n}\n\n.action-icon-wrapper i {\n font-size: 36px;\n}\n\n.action-info {\n flex: 1;\n min-width: 0;\n}\n\n.action-title-row {\n display: flex;\n align-items: center;\n gap: 16px;\n margin-bottom: 12px;\n flex-wrap: wrap;\n}\n\n.action-title {\n margin: 0;\n font-size: 2em;\n font-weight: 600;\n color: white;\n}\n\n.action-name-input {\n font-size: 1.8em;\n font-weight: 600;\n background: rgba(255,255,255,0.2);\n border: 2px solid rgba(255,255,255,0.3);\n color: white;\n padding: 8px 16px;\n border-radius: 8px;\n min-width: 400px;\n}\n\n.action-name-input::placeholder {\n color: rgba(255,255,255,0.6);\n}\n\n.action-badges {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.status-badge, .type-badge, .approval-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n font-size: 0.85em;\n font-weight: 500;\n background: rgba(255,255,255,0.2);\n backdrop-filter: blur(10px);\n border: 1px solid rgba(255,255,255,0.3);\n}\n\n.action-category {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n color: rgba(255,255,255,0.9);\n font-size: 0.95em;\n cursor: pointer;\n transition: all 0.2s;\n margin-bottom: 12px;\n}\n\n.action-category:hover {\n color: white;\n transform: translateX(4px);\n}\n\n.action-description {\n color: rgba(255,255,255,0.9);\n font-size: 1.05em;\n line-height: 1.5;\n margin: 0;\n}\n\n.action-description-input {\n width: 100%;\n max-width: 600px;\n background: rgba(255,255,255,0.2);\n border: 2px solid rgba(255,255,255,0.3);\n color: white;\n border-radius: 8px;\n}\n\n.action-description-input::placeholder {\n color: rgba(255,255,255,0.6);\n}\n\n/* Quick Stats */\n.action-stats {\n display: flex;\n gap: 24px;\n margin-bottom: 24px;\n flex-wrap: wrap;\n}\n\n.stat-card {\n background: rgba(255,255,255,0.1);\n backdrop-filter: blur(10px);\n border: 1px solid rgba(255,255,255,0.2);\n border-radius: 12px;\n padding: 16px 24px;\n display: flex;\n align-items: center;\n gap: 16px;\n min-width: 160px;\n}\n\n.stat-card i {\n font-size: 24px;\n color: rgba(255,255,255,0.8);\n}\n\n.stat-content {\n display: flex;\n flex-direction: column;\n}\n\n.stat-value {\n font-size: 1.4em;\n font-weight: 700;\n color: white;\n}\n\n.stat-label {\n font-size: 0.85em;\n color: rgba(255,255,255,0.7);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n/* Hero Actions */\n.hero-actions {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.hero-actions kendo-button {\n backdrop-filter: blur(10px);\n}\n\n/* Main Content Sections */\n.action-content {\n padding: 0 20px 20px;\n}\n\n.content-section {\n background: white;\n border: 1px solid #e9ecef;\n border-radius: 12px;\n margin-bottom: 20px;\n overflow: hidden;\n transition: all 0.3s ease;\n}\n\n.content-section:hover {\n box-shadow: 0 4px 12px rgba(0,0,0,0.08);\n}\n\n.section-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n background: #f8f9fa;\n cursor: pointer;\n user-select: none;\n transition: background 0.2s;\n}\n\n.section-header:hover {\n background: #e9ecef;\n}\n\n.section-header h2 {\n margin: 0;\n font-size: 1.3em;\n color: #2c3e50;\n flex: 1;\n}\n\n.section-header i:first-child {\n font-size: 1.2em;\n color: #6c757d;\n}\n\n.section-count {\n background: #007bff;\n color: white;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 0.85em;\n font-weight: 500;\n}\n\n.toggle-icon {\n color: #6c757d;\n transition: transform 0.3s;\n}\n\n.toggle-icon.rotated {\n transform: rotate(-90deg);\n}\n\n.section-content {\n padding: 24px;\n animation: slideDown 0.3s ease;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* Overview Section */\n.overview-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n}\n\n.overview-field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.overview-field label {\n font-weight: 600;\n color: #495057;\n font-size: 0.9em;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.required {\n color: #dc3545;\n}\n\n.full-width {\n width: 100%;\n}\n\n.overview-display {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 24px;\n}\n\n.display-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.display-field label {\n font-size: 0.85em;\n color: #6c757d;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.display-value {\n font-size: 1.1em;\n color: #2c3e50;\n}\n\n.display-value.code {\n font-family: 'Courier New', monospace;\n background: #f8f9fa;\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.approval-date {\n color: #6c757d;\n font-size: 0.85em;\n margin-left: 8px;\n}\n\n/* Code Section */\n.generation-panel {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 20px;\n margin-bottom: 24px;\n}\n\n.generation-panel h3 {\n margin: 0 0 16px 0;\n color: #6f42c1;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.prompt-section, .comments-section {\n margin-bottom: 16px;\n}\n\n.prompt-section label, .comments-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 600;\n color: #495057;\n}\n\n.generation-controls {\n display: flex;\n align-items: center;\n gap: 12px;\n padding-top: 12px;\n border-top: 1px solid #dee2e6;\n}\n\n.code-locked-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n background: #ffc107;\n color: #856404;\n border-radius: 12px;\n font-size: 0.8em;\n font-weight: 500;\n}\n\n.code-editor-section {\n border: 1px solid #e9ecef;\n border-radius: 8px;\n overflow: hidden;\n}\n\n.code-toolbar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n}\n\n.code-toolbar h3 {\n margin: 0;\n font-size: 1.1em;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.code-actions {\n display: flex;\n gap: 8px;\n}\n\n.code-comments {\n background: #e3f2fd;\n border: 1px solid #90caf9;\n border-radius: 8px;\n padding: 16px;\n margin-top: 16px;\n}\n\n.code-comments h4 {\n margin: 0 0 8px 0;\n color: #1976d2;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.code-comments p {\n margin: 0;\n color: #424242;\n line-height: 1.5;\n}\n\n.approval-comments {\n margin-top: 16px;\n}\n\n.approval-comments label {\n display: block;\n margin-bottom: 8px;\n font-weight: 600;\n color: #dc3545;\n}\n\n/* Parameters Section */\n.params-section {\n background: #f8f9fa;\n border-radius: 12px;\n padding: 20px;\n}\n\n.params-section.params-section-compact {\n padding: 12px 20px;\n}\n\n.params-section-compact .empty-state {\n padding: 12px !important;\n}\n\n.params-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.params-header h3 {\n margin: 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.params-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.param-card {\n background: white;\n border: 2px solid #e9ecef;\n border-radius: 8px;\n padding: 16px;\n transition: all 0.2s;\n}\n\n.param-card:hover {\n border-color: #007bff;\n box-shadow: 0 2px 8px rgba(0,123,255,0.1);\n}\n\n.param-card.required {\n border-color: #ffc107;\n}\n\n.param-card.clickable {\n cursor: pointer;\n}\n\n.param-card.clickable:hover {\n background: #e7f3ff;\n border-color: #2196f3;\n transform: translateY(-1px);\n}\n\n.param-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.param-name {\n font-weight: 600;\n color: #2c3e50;\n}\n\n.param-badges {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.param-edit-btn,\n.param-delete-btn {\n background: none;\n border: none;\n padding: 4px 8px;\n cursor: pointer;\n color: #6c757d;\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.param-edit-btn:hover {\n background: #e3f2fd;\n color: #2196f3;\n}\n\n.param-delete-btn:hover {\n background: #ffebee;\n color: #f44336;\n}\n\n.param-details {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.required-badge {\n background: #ffc107;\n color: #856404;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.array-badge {\n background: #6f42c1;\n color: white;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.param-type {\n color: #6c757d;\n font-size: 0.9em;\n margin-bottom: 8px;\n}\n\n.param-description {\n color: #495057;\n font-size: 0.9em;\n line-height: 1.4;\n margin-bottom: 8px;\n}\n\n.param-default {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid #e9ecef;\n}\n\n.default-label {\n color: #6c757d;\n font-size: 0.85em;\n}\n\n.param-default code {\n background: #f8f9fa;\n padding: 2px 6px;\n border-radius: 4px;\n font-family: 'Courier New', monospace;\n color: #e83e8c;\n}\n\n\n/* Result Codes Section */\n.result-codes-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.result-code-card {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n padding: 16px;\n border: 2px solid #e9ecef;\n border-radius: 8px;\n background: white;\n transition: all 0.2s;\n}\n\n.result-code-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(0,0,0,0.1);\n}\n\n.result-code-card.success {\n border-color: #28a745;\n background: #d4edda;\n}\n\n.result-code-card.failure {\n border-color: #dc3545;\n background: #f8d7da;\n}\n\n.result-icon {\n font-size: 1.5em;\n flex-shrink: 0;\n}\n\n.result-code-card.success .result-icon {\n color: #28a745;\n}\n\n.result-code-card.failure .result-icon {\n color: #dc3545;\n}\n\n.result-content {\n flex: 1;\n min-width: 0;\n}\n\n.result-code {\n font-weight: 600;\n color: #2c3e50;\n margin-bottom: 4px;\n font-family: 'Courier New', monospace;\n}\n\n.result-description {\n color: #495057;\n font-size: 0.9em;\n line-height: 1.4;\n}\n\n/* Execution Section */\n.execution-stats-row {\n display: flex;\n gap: 20px;\n margin-bottom: 32px;\n flex-wrap: wrap;\n}\n\n.stat-box {\n flex: 1;\n min-width: 200px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 20px;\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.stat-box i {\n font-size: 2em;\n color: #6c757d;\n}\n\n.stat-info {\n flex: 1;\n}\n\n.executions-table {\n overflow-x: auto;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n}\n\n.executions-table table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.executions-table th {\n background: #f8f9fa;\n padding: 12px;\n text-align: left;\n font-weight: 600;\n color: #495057;\n border-bottom: 2px solid #e9ecef;\n}\n\n.executions-table td {\n padding: 12px;\n border-bottom: 1px solid #e9ecef;\n}\n\n.execution-row {\n transition: background 0.2s;\n}\n\n.execution-row:hover {\n background: #f8f9fa;\n}\n\n.execution-row.success {\n background: #d4edda20;\n}\n\n.running {\n color: #ffc107;\n font-style: italic;\n}\n\n.result-code {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 0.85em;\n font-weight: 500;\n font-family: 'Courier New', monospace;\n}\n\n.result-code.success {\n background: #d4edda;\n color: #155724;\n}\n\n.result-code.failure {\n background: #f8d7da;\n color: #721c24;\n}\n\n/* Configuration Section */\n.config-subsection {\n margin-bottom: 32px;\n}\n\n.config-subsection h3 {\n margin: 0 0 16px 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.library-cards {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.library-card {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 16px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.library-card:hover {\n background: #e9ecef;\n transform: translateX(4px);\n}\n\n.library-card i:first-child {\n font-size: 1.5em;\n color: #6c757d;\n}\n\n.library-info {\n flex: 1;\n min-width: 0;\n}\n\n.library-name {\n font-weight: 600;\n color: #2c3e50;\n margin-bottom: 4px;\n}\n\n.library-items {\n color: #6c757d;\n font-size: 0.9em;\n font-family: 'Courier New', monospace;\n}\n\n.related-entities-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.related-entity-link {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.related-entity-link:hover {\n background: #e9ecef;\n border-color: #007bff;\n}\n\n.related-entity-link i {\n font-size: 1.2em;\n color: #6c757d;\n}\n\n.related-entity-link span:first-of-type {\n flex: 1;\n font-weight: 500;\n color: #495057;\n}\n\n.entity-count {\n color: #007bff;\n font-size: 0.9em;\n}\n\n/* Common States */\n.loading-state {\n text-align: center;\n padding: 60px;\n color: #6c757d;\n}\n\n.loading-state i {\n font-size: 2em;\n margin-bottom: 12px;\n}\n\n.empty-state {\n text-align: center;\n padding: 60px;\n color: #6c757d;\n}\n\n.empty-state.mini {\n padding: 20px;\n}\n\n.empty-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n.empty-hint {\n margin-top: 8px !important;\n font-size: 0.9em !important;\n opacity: 0.7;\n}\n\n.no-params {\n text-align: center;\n padding: 20px;\n color: #6c757d;\n font-style: italic;\n}\n\n.no-params p {\n margin: 0;\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n .action-hero-header {\n padding: 20px;\n }\n \n .action-identity {\n flex-direction: column;\n text-align: center;\n }\n \n .action-icon-wrapper {\n margin: 0 auto;\n }\n \n .action-title-row {\n justify-content: center;\n }\n \n .action-stats {\n justify-content: center;\n }\n \n .params-grid {\n grid-template-columns: 1fr;\n }\n}"] }]
1573
- }], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i3.DialogService }], null); })();
1574
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionFormComponentExtended, { className: "ActionFormComponentExtended", filePath: "src/lib/custom/Actions/action-form.component.ts", lineNumber: 18 }); })();
1879
+ args: [{ selector: 'mj-action-form', template: "<div class=\"record-form-container\">\n @if (record) {\n <form class=\"record-form\" #form=\"ngForm\">\n <mj-form-toolbar [form]=\"this\"></mj-form-toolbar>\n\n <!-- Main Content Area -->\n <div class=\"action-main-area\" style=\"display: flex; flex-direction: column; height: 100%; overflow-y: auto;\">\n \n <!-- Header Section -->\n <div class=\"action-header\" style=\"flex-shrink: 0; padding: 20px; background: #f8f9fa; border-bottom: 2px solid #e9ecef;\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n \n <!-- Left: Action Info -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 8px;\">\n <i [class]=\"getActionIcon()\" [style.color]=\"getTypeColor()\" style=\"font-size: 1.4em;\"></i>\n @if (EditMode) {\n <kendo-textbox [(ngModel)]=\"record.Name\" \n name=\"actionName\"\n placeholder=\"Enter action name...\"\n style=\"font-size: 1.2em; font-weight: 600; min-width: 300px; flex: 1;\">\n </kendo-textbox>\n } @else {\n <h4 style=\"margin: 0; color: #495057; font-weight: 600; flex: 1;\">{{ record.Name || 'Untitled Action' }}</h4>\n <span class=\"status-badge\" [style.background-color]=\"getStatusColor()\" \n style=\"color: white; padding: 4px 10px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\">\n {{ record.Status }}\n </span>\n }\n </div>\n \n <!-- Status and Type Editors when in edit mode -->\n @if (EditMode) {\n <div style=\"display: flex; gap: 16px; margin-bottom: 12px; flex-wrap: wrap;\">\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: #495057; font-size: 0.9em;\">Status</label>\n <kendo-dropdownlist [(ngModel)]=\"record.Status\"\n name=\"actionStatus\"\n [data]=\"[{text: 'Active', value: 'Active'}, {text: 'Pending', value: 'Pending'}, {text: 'Disabled', value: 'Disabled'}]\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n style=\"width: 150px;\">\n </kendo-dropdownlist>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: #495057; font-size: 0.9em;\">\n Type <span style=\"color: #dc3545;\">*</span>\n </label>\n <kendo-dropdownlist [(ngModel)]=\"record.Type\"\n name=\"actionType\"\n [data]=\"[{text: 'Generated', value: 'Generated'}, {text: 'Custom', value: 'Custom'}]\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n style=\"width: 150px;\">\n </kendo-dropdownlist>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: #495057; font-size: 0.9em;\">\n Category <span style=\"color: #dc3545;\">*</span>\n </label>\n <kendo-dropdownlist [(ngModel)]=\"record.CategoryID\"\n name=\"categoryID\"\n [data]=\"[]\"\n placeholder=\"Select category...\"\n style=\"width: 200px;\">\n </kendo-dropdownlist>\n </div>\n </div>\n }\n \n @if (EditMode) {\n <kendo-textarea [(ngModel)]=\"record.Description\" \n name=\"actionDescription\"\n [rows]=\"2\"\n placeholder=\"Enter action description...\"\n style=\"width: 100%; max-width: 600px; margin-bottom: 12px;\">\n </kendo-textarea>\n } @else if (record.Description) {\n <p style=\"margin: 0 0 12px 0; color: #6c757d; font-size: 0.9em; line-height: 1.4;\">{{ record.Description }}</p>\n }\n \n <!-- Quick Config Row -->\n <div class=\"quick-config\" style=\"display: flex; align-items: center; gap: 16px; flex-wrap: wrap;\">\n @if (category) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-folder\" style=\"color: #6c757d;\"></i>\n <span style=\"color: #6c757d;\">Category:</span>\n <span style=\"color: #495057; font-weight: 500; cursor: pointer;\" (click)=\"navigateToCategory()\">\n {{ category.Name }}\n <i class=\"fa-solid fa-external-link\" style=\"font-size: 0.75em; margin-left: 4px;\"></i>\n </span>\n </div>\n }\n \n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-cube\" style=\"color: #6c757d;\"></i>\n <span style=\"color: #6c757d;\">Type:</span>\n <span style=\"color: #495057; font-weight: 500;\">{{ record.Type }}</span>\n </div>\n \n @if (record.Type === 'Generated' && record.CodeApprovalStatus) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i [class]=\"'fa-solid ' + getApprovalStatusIcon()\" [style.color]=\"getApprovalStatusColor()\"></i>\n <span style=\"color: #6c757d;\">Code:</span>\n <span [style.color]=\"getApprovalStatusColor()\" style=\"font-weight: 500;\">{{ record.CodeApprovalStatus }}</span>\n </div>\n }\n \n @if (actionParams.length > 0) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: #6c757d;\"></i>\n <span style=\"color: #495057; font-weight: 500;\">{{ actionParams.length }} Parameters</span>\n </div>\n }\n </div>\n </div>\n \n <!-- Right: Action Buttons -->\n <div class=\"action-buttons\" style=\"display: flex; flex-direction: column; gap: 8px; align-items: flex-end;\">\n <div style=\"display: flex; gap: 8px;\">\n @if (record.ID) {\n <button kendoButton themeColor=\"primary\" size=\"large\"\n (click)=\"openTestHarness()\"\n title=\"Open Run Harness\"\n [disabled]=\"record.Status !== 'Active'\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n @if (EditMode && record.Type === 'Generated') {\n <button kendoButton themeColor=\"info\" size=\"medium\"\n (click)=\"regenerateCode()\"\n title=\"Regenerate Code\">\n <i class=\"fa-solid fa-robot\"></i> Regenerate\n </button>\n }\n </div>\n \n @if (EditMode && record.CodeApprovalStatus === 'Pending' && record.Type === 'Generated') {\n <div style=\"display: flex; gap: 8px;\">\n <button kendoButton themeColor=\"success\" size=\"small\"\n (click)=\"approveCode()\">\n <i class=\"fa-solid fa-check\"></i> Approve\n </button>\n <button kendoButton themeColor=\"error\" size=\"small\"\n (click)=\"rejectCode()\">\n <i class=\"fa-solid fa-times\"></i> Reject\n </button>\n </div>\n }\n \n @if (!EditMode && record.Status !== 'Active' && record.ID) {\n <div style=\"font-size: 0.75em; color: #dc3545; text-align: right;\">\n Action must be Active to execute\n </div>\n }\n </div>\n </div>\n </div>\n\n <!-- Configuration Sections with Expansion Panels -->\n <div class=\"configuration-sections\" style=\"flex: 1; background: white; border-top: 2px solid #e9ecef; padding: 16px; min-height: 0;\">\n \n <!-- Parameters Section (FIRST) -->\n <kendo-expansionpanel \n [expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: #6c757d;\"></i>\n Parameters\n @if (actionParams.length > 0) {\n <span style=\"background: #17a2b8; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ actionParams.length }}\n </span>\n }\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n @if (isLoadingParams) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading parameters...\n </div>\n } @else if (actionParams.length === 0) {\n <div class=\"empty-state\" style=\"padding: 30px; text-align: center;\">\n <i class=\"fa-solid fa-sliders\" style=\"font-size: 2em; color: #6c757d; opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: #6c757d;\">No parameters defined</p>\n @if (EditMode && record.IsSaved) {\n <p style=\"margin: 8px 0 0 0; font-size: 0.85em; color: #6c757d;\">Add parameters to define inputs and outputs for this action</p>\n }\n </div>\n } @else {\n <!-- Input Parameters Grid -->\n <div class=\"params-section\">\n <div class=\"params-header\">\n <h3><i class=\"fa-solid fa-sign-in-alt\"></i> Input Parameters</h3>\n @if (EditMode && record.IsSaved) {\n <button kendoButton fillMode=\"flat\" size=\"small\" (click)=\"addParameter('Input')\">\n <i class=\"fa-solid fa-plus\"></i> Add Input\n </button>\n }\n </div>\n \n @if (getInputParams().length === 0) {\n <div class=\"empty-state\" style=\"padding: 30px; text-align: center;\">\n <i class=\"fa-solid fa-inbox\" style=\"font-size: 2em; color: #6c757d; opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: #6c757d;\">No input parameters defined</p>\n </div>\n } @else {\n <div class=\"params-grid\">\n @for (param of getInputParams(); track param.ID) {\n <div class=\"param-card\" [class.required]=\"param.IsRequired\" \n [class.clickable]=\"true\"\n (click)=\"onParamClick(param, $event)\">\n <div class=\"param-header\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <div class=\"param-badges\">\n @if (param.IsRequired) {\n <span class=\"required-badge\">Required</span>\n }\n @if (param.IsArray) {\n <span class=\"array-badge\">Array</span>\n }\n @if (EditMode) {\n <button class=\"param-edit-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"param-delete-btn\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n <div class=\"param-details\">\n <div class=\"param-type\">{{ param.ValueType }}</div>\n @if (param.Description) {\n <div class=\"param-description\">{{ param.Description }}</div>\n }\n @if (param.DefaultValue) {\n <div class=\"param-default\">\n <span class=\"default-label\">Default:</span>\n <code>{{ param.DefaultValue }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Output Parameters Grid -->\n <div class=\"params-section\" style=\"margin-top: 24px;\" \n [class.params-section-compact]=\"getOutputParams().length === 0\">\n <div class=\"params-header\">\n <h3><i class=\"fa-solid fa-sign-out-alt\"></i> Output Parameters</h3>\n @if (EditMode && record.IsSaved) {\n <button kendoButton fillMode=\"flat\" size=\"small\" (click)=\"addParameter('Output')\">\n <i class=\"fa-solid fa-plus\"></i> Add Output\n </button>\n }\n </div>\n \n @if (getOutputParams().length === 0) {\n <div class=\"empty-state\" style=\"padding: 20px; text-align: center;\">\n <i class=\"fa-solid fa-inbox\" style=\"font-size: 2em; color: #6c757d; opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: #6c757d;\">No output parameters defined</p>\n </div>\n } @else {\n <div class=\"params-grid\">\n @for (param of getOutputParams(); track param.ID) {\n <div class=\"param-card\"\n [class.clickable]=\"true\"\n (click)=\"onParamClick(param, $event)\">\n <div class=\"param-header\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <div class=\"param-badges\">\n @if (param.IsArray) {\n <span class=\"array-badge\">Array</span>\n }\n @if (EditMode) {\n <button class=\"param-edit-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"param-delete-btn\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n <div class=\"param-details\">\n <div class=\"param-type\">{{ param.ValueType }}</div>\n @if (param.Description) {\n <div class=\"param-description\">{{ param.Description }}</div>\n }\n @if (param.DefaultValue) {\n <div class=\"param-default\">\n <span class=\"default-label\">Default:</span>\n <code>{{ param.DefaultValue }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </kendo-expansionpanel>\n\n <!-- Code & Generation Section (Only for Generated type) -->\n @if (record.Type === 'Generated') {\n <kendo-expansionpanel \n [expanded]=\"expandedSections.code\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: #6c757d;\"></i>\n Code & Generation\n @if (record.CodeLocked) {\n <span style=\"background: #ffc107; color: #856404; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n <i class=\"fa-solid fa-lock\"></i> Locked\n </span>\n }\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n @if (EditMode) {\n <div class=\"generation-panel\">\n <h3><i class=\"fa-solid fa-robot\"></i> AI Generation</h3>\n <div class=\"prompt-section\">\n <label>User Prompt</label>\n <kendo-textarea [(ngModel)]=\"record.UserPrompt\"\n name=\"userPrompt\"\n [rows]=\"8\"\n placeholder=\"Describe what this action should do...\"\n style=\"width: 100%; min-height: 120px;\">\n </kendo-textarea>\n </div>\n <div class=\"comments-section\">\n <label>Internal Comments (not sent to AI)</label>\n <kendo-textarea [(ngModel)]=\"record.UserComments\"\n name=\"userComments\"\n [rows]=\"2\"\n placeholder=\"Internal notes...\"\n style=\"width: 100%;\">\n </kendo-textarea>\n </div>\n <div class=\"generation-controls\">\n <kendo-switch [(ngModel)]=\"record.CodeLocked\"\n name=\"codeLocked\">\n </kendo-switch>\n <label style=\"margin-left: 8px;\">Lock Code (prevent regeneration)</label>\n </div>\n </div>\n }\n \n <div class=\"code-editor-section\">\n <div class=\"code-toolbar\">\n <h3><i class=\"fa-solid fa-file-code\"></i> Action Code</h3>\n <div class=\"code-actions\">\n @if (record.CodeComments) {\n <button kendoButton fillMode=\"flat\" size=\"small\" (click)=\"toggleCodeComments()\">\n <i class=\"fa-solid fa-comment\"></i> \n {{ showCodeComments ? 'Hide' : 'Show' }} AI Comments\n </button>\n }\n <button kendoButton fillMode=\"flat\" size=\"small\" (click)=\"copyToClipboard(record.Code || '')\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n </div>\n </div>\n <mj-code-editor \n [(ngModel)]=\"record.Code\"\n name=\"actionCode\"\n [readonly]=\"!EditMode || record.CodeLocked\"\n [language]=\"codeLanguage\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n \n @if (showCodeComments && record.CodeComments) {\n <div class=\"code-comments\">\n <h4><i class=\"fa-solid fa-robot\"></i> AI Explanation</h4>\n <p>{{ record.CodeComments }}</p>\n </div>\n }\n \n @if (EditMode && record.CodeApprovalStatus === 'Rejected') {\n <div class=\"approval-comments\">\n <label>Rejection Comments</label>\n <kendo-textarea [(ngModel)]=\"record.CodeApprovalComments\"\n name=\"codeApprovalComments\"\n [rows]=\"2\"\n placeholder=\"Explain why the code was rejected...\"\n style=\"width: 100%;\">\n </kendo-textarea>\n </div>\n }\n </div>\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Result Codes Section -->\n <kendo-expansionpanel \n [expanded]=\"expandedSections.resultCodes\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-flag-checkered\" style=\"color: #6c757d;\"></i>\n Result Codes\n @if (resultCodes.length > 0) {\n <span style=\"background: #28a745; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ resultCodes.length }}\n </span>\n }\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n <!-- Add Result Code Button -->\n @if (EditMode && record.IsSaved) {\n <div style=\"display: flex; justify-content: flex-end; margin-bottom: 12px;\">\n <button kendoButton [primary]=\"true\" size=\"small\" (click)=\"addResultCode()\">\n <i class=\"fa-solid fa-plus\"></i> Add Result Code\n </button>\n </div>\n }\n \n @if (isLoadingResultCodes) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading result codes...\n </div>\n } @else if (resultCodes.length === 0) {\n <div class=\"empty-state\" style=\"padding: 30px; text-align: center;\">\n <i class=\"fa-solid fa-flag-checkered\" style=\"font-size: 2em; color: #6c757d; opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: #6c757d;\">No result codes defined</p>\n @if (EditMode && record.IsSaved) {\n <p style=\"margin: 8px 0 0 0; font-size: 0.85em; color: #6c757d;\">Add result codes to define possible outcomes</p>\n }\n </div>\n } @else {\n <div class=\"result-codes-grid\">\n @for (code of resultCodes; track code.ID) {\n <div class=\"result-code-card\" \n [class.success]=\"code.IsSuccess\" \n [class.failure]=\"!code.IsSuccess\"\n [class.clickable]=\"true\"\n (click)=\"onResultCodeClick(code, $event)\">\n <div class=\"result-icon\">\n <i [class]=\"code.IsSuccess ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n </div>\n <div class=\"result-content\">\n <div class=\"result-code\">{{ code.ResultCode }}</div>\n @if (code.Description) {\n <div class=\"result-description\">{{ code.Description }}</div>\n }\n </div>\n @if (EditMode) {\n <div class=\"result-actions\">\n <button class=\"result-edit-btn\" (click)=\"editResultCode(code); $event.stopPropagation()\" title=\"Edit result code\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"result-delete-btn\" (click)=\"deleteResultCode(code); $event.stopPropagation()\" title=\"Delete result code\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </kendo-expansionpanel>\n\n <!-- Execution & Monitoring Section -->\n @if (record.IsSaved) {\n <kendo-expansionpanel \n [expanded]=\"expandedSections.execution\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-chart-line\" style=\"color: #6c757d;\"></i>\n Execution & Monitoring\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n @if (isLoadingExecutions) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading executions...\n </div>\n } @else if (recentExecutions.length === 0) {\n <div class=\"empty-state\" style=\"padding: 30px; text-align: center;\">\n <i class=\"fa-solid fa-chart-line\" style=\"font-size: 2em; color: #6c757d; opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: #6c757d;\">No executions yet</p>\n </div>\n } @else {\n <div class=\"execution-stats-row\">\n <div class=\"stat-box\">\n <i class=\"fa-solid fa-tachometer-alt\"></i>\n <div class=\"stat-info\">\n <div class=\"stat-label\" style=\"color: #212529;\">Avg Duration</div>\n <div class=\"stat-value\" style=\"color: #212529;\">{{ formatDuration(executionStats.avgDuration) }}</div>\n </div>\n </div>\n <div class=\"stat-box\">\n <i class=\"fa-solid fa-check-circle\" [style.color]=\"getSuccessRateColor()\"></i>\n <div class=\"stat-info\">\n <div class=\"stat-label\" style=\"color: #212529;\">Success Rate</div>\n <div class=\"stat-value\" [style.color]=\"getSuccessRateColor()\" style=\"font-weight: 600;\">{{ executionStats.successRate.toFixed(0) }}%</div>\n </div>\n </div>\n <div class=\"stat-box\">\n <i class=\"fa-solid fa-play-circle\"></i>\n <div class=\"stat-info\">\n <div class=\"stat-label\" style=\"color: #212529;\">Total Runs</div>\n <div class=\"stat-value\" style=\"color: #212529;\">{{ executionStats.totalRuns }}</div>\n </div>\n </div>\n </div>\n\n <h3 style=\"margin-top: 24px;\"><i class=\"fa-solid fa-history\"></i> Recent Executions</h3>\n <div class=\"executions-table\">\n <table>\n <thead>\n <tr>\n <th>Started</th>\n <th>Duration</th>\n <th>User</th>\n <th>Result</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (execution of recentExecutions; track execution.ID) {\n <tr class=\"execution-row\" [class.success]=\"isExecutionSuccess(execution)\">\n <td>{{ execution.StartedAt | date:'short' }}</td>\n <td>\n @if (execution.EndedAt) {\n {{ formatDuration(getExecutionDuration(execution)) }}\n } @else {\n <span class=\"running\">Running...</span>\n }\n </td>\n <td>{{ execution.User }}</td>\n <td>\n <span class=\"result-code\" \n [class.success]=\"isExecutionSuccess(execution)\"\n [class.failure]=\"!isExecutionSuccess(execution)\">\n {{ execution.ResultCode }}\n </span>\n </td>\n <td>\n <button kendoButton fillMode=\"flat\" size=\"small\" (click)=\"navigateToExecution(execution.ID)\">\n <i class=\"fa-solid fa-external-link\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Related Configuration Section -->\n @if (record.IsSaved) {\n <kendo-expansionpanel \n [expanded]=\"expandedSections.configuration\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-cogs\" style=\"color: #6c757d;\"></i>\n Related Configuration\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n <!-- Libraries -->\n <div class=\"config-subsection\">\n <h3><i class=\"fa-solid fa-book\"></i> Libraries</h3>\n @if (isLoadingLibraries) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading libraries...\n </div>\n } @else if (actionLibraries.length === 0) {\n <div class=\"empty-state mini\">\n <p>No libraries configured</p>\n </div>\n } @else {\n <div class=\"library-cards\">\n @for (lib of libraries; track lib.ID; let i = $index) {\n <div class=\"library-card\" (click)=\"navigateToLibrary(lib.ID)\">\n <i class=\"fa-solid fa-book\"></i>\n <div class=\"library-info\">\n <div class=\"library-name\">{{ lib.Name }}</div>\n @if (actionLibraries[i].ItemsUsed) {\n <div class=\"library-items\">{{ actionLibraries[i].ItemsUsed }}</div>\n }\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Other Related Entities -->\n <div class=\"related-entities-grid\">\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-shield-alt\"></i>\n <span>Authorizations</span>\n <span class=\"entity-count\">View</span>\n </div>\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-layer-group\"></i>\n <span>Contexts</span>\n <span class=\"entity-count\">View</span>\n </div>\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-calendar\"></i>\n <span>Scheduled Actions</span>\n <span class=\"entity-count\">View</span>\n </div>\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-cube\"></i>\n <span>Entity Actions</span>\n <span class=\"entity-count\">View</span>\n </div>\n </div>\n </div>\n </kendo-expansionpanel>\n }\n </div>\n </div>\n </form>\n }\n</div>\n\n<!-- Action Test Harness -->\n@if (showTestHarness) {\n <kendo-window \n [width]=\"1200\" \n [height]=\"800\" \n [minWidth]=\"800\"\n [minHeight]=\"600\"\n [draggable]=\"true\"\n [resizable]=\"true\"\n [state]=\"'default'\"\n (close)=\"onTestHarnessVisibilityChanged(false)\"\n title=\"Run Action - {{ record.Name || 'Untitled' }}\">\n <mj-action-test-harness\n [action]=\"record\"\n [actionParams]=\"actionParams\"\n [isVisible]=\"showTestHarness\"\n (visibilityChange)=\"onTestHarnessVisibilityChanged($event)\">\n </mj-action-test-harness>\n </kendo-window>\n}", styles: ["/* Hero Header Section */\n.action-hero-header {\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n padding: 32px;\n margin: -20px -20px 24px -20px;\n border-radius: 0 0 16px 16px;\n box-shadow: 0 4px 20px rgba(0,0,0,0.1);\n}\n\n.hero-content {\n max-width: 1400px;\n margin: 0 auto;\n}\n\n.action-identity {\n display: flex;\n align-items: flex-start;\n gap: 24px;\n margin-bottom: 24px;\n}\n\n.action-icon-wrapper {\n width: 80px;\n height: 80px;\n border-radius: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: rgba(255,255,255,0.2);\n backdrop-filter: blur(10px);\n}\n\n.action-icon-wrapper i {\n font-size: 36px;\n}\n\n.action-info {\n flex: 1;\n min-width: 0;\n}\n\n.action-title-row {\n display: flex;\n align-items: center;\n gap: 16px;\n margin-bottom: 12px;\n flex-wrap: wrap;\n}\n\n.action-title {\n margin: 0;\n font-size: 2em;\n font-weight: 600;\n color: white;\n}\n\n.action-name-input {\n font-size: 1.8em;\n font-weight: 600;\n background: rgba(255,255,255,0.2);\n border: 2px solid rgba(255,255,255,0.3);\n color: white;\n padding: 8px 16px;\n border-radius: 8px;\n min-width: 400px;\n}\n\n.action-name-input::placeholder {\n color: rgba(255,255,255,0.6);\n}\n\n.action-badges {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.status-badge, .type-badge, .approval-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n font-size: 0.85em;\n font-weight: 500;\n background: rgba(255,255,255,0.2);\n backdrop-filter: blur(10px);\n border: 1px solid rgba(255,255,255,0.3);\n}\n\n.action-category {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n color: rgba(255,255,255,0.9);\n font-size: 0.95em;\n cursor: pointer;\n transition: all 0.2s;\n margin-bottom: 12px;\n}\n\n.action-category:hover {\n color: white;\n transform: translateX(4px);\n}\n\n.action-description {\n color: rgba(255,255,255,0.9);\n font-size: 1.05em;\n line-height: 1.5;\n margin: 0;\n}\n\n.action-description-input {\n width: 100%;\n max-width: 600px;\n background: rgba(255,255,255,0.2);\n border: 2px solid rgba(255,255,255,0.3);\n color: white;\n border-radius: 8px;\n}\n\n.action-description-input::placeholder {\n color: rgba(255,255,255,0.6);\n}\n\n/* Quick Stats */\n.action-stats {\n display: flex;\n gap: 24px;\n margin-bottom: 24px;\n flex-wrap: wrap;\n}\n\n.stat-card {\n background: rgba(255,255,255,0.1);\n backdrop-filter: blur(10px);\n border: 1px solid rgba(255,255,255,0.2);\n border-radius: 12px;\n padding: 16px 24px;\n display: flex;\n align-items: center;\n gap: 16px;\n min-width: 160px;\n}\n\n.stat-card i {\n font-size: 24px;\n color: rgba(255,255,255,0.8);\n}\n\n.stat-content {\n display: flex;\n flex-direction: column;\n}\n\n.stat-value {\n font-size: 1.4em;\n font-weight: 700;\n color: white;\n}\n\n.stat-label {\n font-size: 0.85em;\n color: rgba(255,255,255,0.7);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n/* Hero Actions */\n.hero-actions {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.hero-actions kendo-button {\n backdrop-filter: blur(10px);\n}\n\n/* Main Content Sections */\n.action-content {\n padding: 0 20px 20px;\n}\n\n.content-section {\n background: white;\n border: 1px solid #e9ecef;\n border-radius: 12px;\n margin-bottom: 20px;\n overflow: hidden;\n transition: all 0.3s ease;\n}\n\n.content-section:hover {\n box-shadow: 0 4px 12px rgba(0,0,0,0.08);\n}\n\n.section-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n background: #f8f9fa;\n cursor: pointer;\n user-select: none;\n transition: background 0.2s;\n}\n\n.section-header:hover {\n background: #e9ecef;\n}\n\n.section-header h2 {\n margin: 0;\n font-size: 1.3em;\n color: #2c3e50;\n flex: 1;\n}\n\n.section-header i:first-child {\n font-size: 1.2em;\n color: #6c757d;\n}\n\n.section-count {\n background: #007bff;\n color: white;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 0.85em;\n font-weight: 500;\n}\n\n.toggle-icon {\n color: #6c757d;\n transition: transform 0.3s;\n}\n\n.toggle-icon.rotated {\n transform: rotate(-90deg);\n}\n\n.section-content {\n padding: 24px;\n animation: slideDown 0.3s ease;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* Overview Section */\n.overview-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n}\n\n.overview-field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.overview-field label {\n font-weight: 600;\n color: #495057;\n font-size: 0.9em;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.required {\n color: #dc3545;\n}\n\n.full-width {\n width: 100%;\n}\n\n.overview-display {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 24px;\n}\n\n.display-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.display-field label {\n font-size: 0.85em;\n color: #6c757d;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.display-value {\n font-size: 1.1em;\n color: #2c3e50;\n}\n\n.display-value.code {\n font-family: 'Courier New', monospace;\n background: #f8f9fa;\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.approval-date {\n color: #6c757d;\n font-size: 0.85em;\n margin-left: 8px;\n}\n\n/* Code Section */\n.generation-panel {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 20px;\n margin-bottom: 24px;\n}\n\n.generation-panel h3 {\n margin: 0 0 16px 0;\n color: #6f42c1;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.prompt-section, .comments-section {\n margin-bottom: 16px;\n}\n\n.prompt-section label, .comments-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 600;\n color: #495057;\n}\n\n.generation-controls {\n display: flex;\n align-items: center;\n gap: 12px;\n padding-top: 12px;\n border-top: 1px solid #dee2e6;\n}\n\n.code-locked-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n background: #ffc107;\n color: #856404;\n border-radius: 12px;\n font-size: 0.8em;\n font-weight: 500;\n}\n\n.code-editor-section {\n border: 1px solid #e9ecef;\n border-radius: 8px;\n overflow: hidden;\n}\n\n.code-toolbar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n}\n\n.code-toolbar h3 {\n margin: 0;\n font-size: 1.1em;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.code-actions {\n display: flex;\n gap: 8px;\n}\n\n.code-comments {\n background: #e3f2fd;\n border: 1px solid #90caf9;\n border-radius: 8px;\n padding: 16px;\n margin-top: 16px;\n}\n\n.code-comments h4 {\n margin: 0 0 8px 0;\n color: #1976d2;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.code-comments p {\n margin: 0;\n color: #424242;\n line-height: 1.5;\n}\n\n.approval-comments {\n margin-top: 16px;\n}\n\n.approval-comments label {\n display: block;\n margin-bottom: 8px;\n font-weight: 600;\n color: #dc3545;\n}\n\n/* Parameters Section */\n.params-section {\n background: #f8f9fa;\n border-radius: 12px;\n padding: 20px;\n}\n\n.params-section.params-section-compact {\n padding: 12px 20px;\n}\n\n.params-section-compact .empty-state {\n padding: 12px !important;\n}\n\n.params-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.params-header h3 {\n margin: 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.params-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.param-card {\n background: white;\n border: 2px solid #e9ecef;\n border-radius: 8px;\n padding: 16px;\n transition: all 0.2s;\n}\n\n.param-card:hover {\n border-color: #007bff;\n box-shadow: 0 2px 8px rgba(0,123,255,0.1);\n}\n\n.param-card.required {\n border-color: #ffc107;\n}\n\n.param-card.clickable {\n cursor: pointer;\n}\n\n.param-card.clickable:hover {\n background: #e7f3ff;\n border-color: #2196f3;\n transform: translateY(-1px);\n}\n\n.param-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.param-name {\n font-weight: 600;\n color: #2c3e50;\n}\n\n.param-badges {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.param-edit-btn,\n.param-delete-btn {\n background: none;\n border: none;\n padding: 4px 8px;\n cursor: pointer;\n color: #6c757d;\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.param-edit-btn:hover {\n background: #e3f2fd;\n color: #2196f3;\n}\n\n.param-delete-btn:hover {\n background: #ffebee;\n color: #f44336;\n}\n\n.param-details {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.required-badge {\n background: #ffc107;\n color: #856404;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.array-badge {\n background: #6f42c1;\n color: white;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.param-type {\n color: #6c757d;\n font-size: 0.9em;\n margin-bottom: 8px;\n}\n\n.param-description {\n color: #495057;\n font-size: 0.9em;\n line-height: 1.4;\n margin-bottom: 8px;\n}\n\n.param-default {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid #e9ecef;\n}\n\n.default-label {\n color: #6c757d;\n font-size: 0.85em;\n}\n\n.param-default code {\n background: #f8f9fa;\n padding: 2px 6px;\n border-radius: 4px;\n font-family: 'Courier New', monospace;\n color: #e83e8c;\n}\n\n\n/* Result Codes Section */\n.result-codes-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.result-code-card {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n padding: 16px;\n border: 2px solid #e9ecef;\n border-radius: 8px;\n background: white;\n transition: all 0.2s;\n position: relative;\n}\n\n.result-code-card.clickable {\n cursor: pointer;\n}\n\n.result-code-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(0,0,0,0.1);\n}\n\n.result-code-card.success {\n border-color: #28a745;\n background: #d4edda;\n}\n\n.result-code-card.failure {\n border-color: #dc3545;\n background: #f8d7da;\n}\n\n.result-actions {\n position: absolute;\n top: 8px;\n right: 8px;\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s;\n}\n\n.result-code-card:hover .result-actions {\n opacity: 1;\n}\n\n.result-edit-btn,\n.result-delete-btn {\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n padding: 4px 8px;\n cursor: pointer;\n transition: all 0.2s;\n font-size: 0.85em;\n}\n\n.result-edit-btn:hover {\n background: #007bff;\n color: white;\n border-color: #007bff;\n}\n\n.result-delete-btn:hover {\n background: #dc3545;\n color: white;\n border-color: #dc3545;\n}\n\n.result-icon {\n font-size: 1.5em;\n flex-shrink: 0;\n}\n\n.result-code-card.success .result-icon {\n color: #28a745;\n}\n\n.result-code-card.failure .result-icon {\n color: #dc3545;\n}\n\n.result-content {\n flex: 1;\n min-width: 0;\n}\n\n.result-code {\n font-weight: 600;\n color: #2c3e50;\n margin-bottom: 4px;\n font-family: 'Courier New', monospace;\n}\n\n.result-description {\n color: #495057;\n font-size: 0.9em;\n line-height: 1.4;\n}\n\n/* Execution Section */\n.execution-stats-row {\n display: flex;\n gap: 20px;\n margin-bottom: 32px;\n flex-wrap: wrap;\n}\n\n.stat-box {\n flex: 1;\n min-width: 200px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 20px;\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.stat-box i {\n font-size: 2em;\n color: #6c757d;\n}\n\n.stat-info {\n flex: 1;\n}\n\n.executions-table {\n overflow-x: auto;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n}\n\n.executions-table table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.executions-table th {\n background: #f8f9fa;\n padding: 12px;\n text-align: left;\n font-weight: 600;\n color: #495057;\n border-bottom: 2px solid #e9ecef;\n}\n\n.executions-table td {\n padding: 12px;\n border-bottom: 1px solid #e9ecef;\n}\n\n.execution-row {\n transition: background 0.2s;\n}\n\n.execution-row:hover {\n background: #f8f9fa;\n}\n\n.execution-row.success {\n background: #d4edda20;\n}\n\n.running {\n color: #ffc107;\n font-style: italic;\n}\n\n.result-code {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 0.85em;\n font-weight: 500;\n font-family: 'Courier New', monospace;\n}\n\n.result-code.success {\n background: #d4edda;\n color: #155724;\n}\n\n.result-code.failure {\n background: #f8d7da;\n color: #721c24;\n}\n\n/* Configuration Section */\n.config-subsection {\n margin-bottom: 32px;\n}\n\n.config-subsection h3 {\n margin: 0 0 16px 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.library-cards {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.library-card {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 16px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.library-card:hover {\n background: #e9ecef;\n transform: translateX(4px);\n}\n\n.library-card i:first-child {\n font-size: 1.5em;\n color: #6c757d;\n}\n\n.library-info {\n flex: 1;\n min-width: 0;\n}\n\n.library-name {\n font-weight: 600;\n color: #2c3e50;\n margin-bottom: 4px;\n}\n\n.library-items {\n color: #6c757d;\n font-size: 0.9em;\n font-family: 'Courier New', monospace;\n}\n\n.related-entities-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.related-entity-link {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.related-entity-link:hover {\n background: #e9ecef;\n border-color: #007bff;\n}\n\n.related-entity-link i {\n font-size: 1.2em;\n color: #6c757d;\n}\n\n.related-entity-link span:first-of-type {\n flex: 1;\n font-weight: 500;\n color: #495057;\n}\n\n.entity-count {\n color: #007bff;\n font-size: 0.9em;\n}\n\n/* Common States */\n.loading-state {\n text-align: center;\n padding: 60px;\n color: #6c757d;\n}\n\n.loading-state i {\n font-size: 2em;\n margin-bottom: 12px;\n}\n\n.empty-state {\n text-align: center;\n padding: 60px;\n color: #6c757d;\n}\n\n.empty-state.mini {\n padding: 20px;\n}\n\n.empty-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n.empty-hint {\n margin-top: 8px !important;\n font-size: 0.9em !important;\n opacity: 0.7;\n}\n\n.no-params {\n text-align: center;\n padding: 20px;\n color: #6c757d;\n font-style: italic;\n}\n\n.no-params p {\n margin: 0;\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n .action-hero-header {\n padding: 20px;\n }\n \n .action-identity {\n flex-direction: column;\n text-align: center;\n }\n \n .action-icon-wrapper {\n margin: 0 auto;\n }\n \n .action-title-row {\n justify-content: center;\n }\n \n .action-stats {\n justify-content: center;\n }\n \n .params-grid {\n grid-template-columns: 1fr;\n }\n}"] }]
1880
+ }], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }], null); })();
1881
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionFormComponentExtended, { className: "ActionFormComponentExtended", filePath: "src/lib/custom/Actions/action-form.component.ts", lineNumber: 19 }); })();
1575
1882
  // Loader function required for the component to be properly registered
1576
1883
  export function LoadActionFormComponentExtended() {
1577
1884
  // This function is called to ensure the form is loaded and registered