@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.
- package/dist/lib/custom/Actions/action-form.component.d.ts +20 -4
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +594 -287
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-result-code-dialog.component.d.ts +20 -0
- package/dist/lib/custom/Actions/action-result-code-dialog.component.d.ts.map +1 -0
- package/dist/lib/custom/Actions/action-result-code-dialog.component.js +127 -0
- package/dist/lib/custom/Actions/action-result-code-dialog.component.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +2 -2
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +3 -3
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +2 -2
- package/dist/lib/custom/custom-forms.module.d.ts +36 -35
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +3 -0
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/generated/Entities/AIPrompt/sections/details.component.d.ts +2 -2
- package/dist/lib/generated/Entities/AIPrompt/sections/details.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ComponentLibrary/sections/details.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ComponentLibrary/sections/details.component.js +22 -4
- package/dist/lib/generated/Entities/ComponentLibrary/sections/details.component.js.map +1 -1
- 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 "@
|
|
18
|
-
import * as i4 from "@angular
|
|
19
|
-
import * as i5 from "@progress/kendo-angular-
|
|
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",
|
|
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",
|
|
48
|
+
i0.ɵɵelementStart(0, "h4", 34);
|
|
47
49
|
i0.ɵɵtext(1);
|
|
48
50
|
i0.ɵɵelementEnd();
|
|
49
|
-
i0.ɵɵelementStart(2, "span",
|
|
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",
|
|
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",
|
|
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",
|
|
71
|
+
i0.ɵɵelementStart(5, "div")(6, "label", 36);
|
|
70
72
|
i0.ɵɵtext(7, " Type ");
|
|
71
|
-
i0.ɵɵelementStart(8, "span",
|
|
73
|
+
i0.ɵɵelementStart(8, "span", 38);
|
|
72
74
|
i0.ɵɵtext(9, "*");
|
|
73
75
|
i0.ɵɵelementEnd()();
|
|
74
|
-
i0.ɵɵelementStart(10, "kendo-dropdownlist",
|
|
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",
|
|
79
|
+
i0.ɵɵelementStart(11, "div")(12, "label", 36);
|
|
78
80
|
i0.ɵɵtext(13, " Category ");
|
|
79
|
-
i0.ɵɵelementStart(14, "span",
|
|
81
|
+
i0.ɵɵelementStart(14, "span", 38);
|
|
80
82
|
i0.ɵɵtext(15, "*");
|
|
81
83
|
i0.ɵɵelementEnd()();
|
|
82
|
-
i0.ɵɵelementStart(16, "kendo-dropdownlist",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
188
|
+
i0.ɵɵelement(2, "i", 52);
|
|
187
189
|
i0.ɵɵtext(3, " Approve ");
|
|
188
190
|
i0.ɵɵelementEnd();
|
|
189
|
-
i0.ɵɵelementStart(4, "button",
|
|
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",
|
|
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",
|
|
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",
|
|
211
|
-
i0.ɵɵelement(1, "i",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
234
|
-
i0.ɵɵelementStart(2, "p",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
255
|
-
i0.ɵɵelementStart(2, "p",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
275
|
+
i0.ɵɵelement(1, "i", 84);
|
|
274
276
|
i0.ɵɵelementEnd();
|
|
275
|
-
i0.ɵɵelementStart(2, "button",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
307
|
+
i0.ɵɵelementStart(1, "div", 74)(2, "span", 75);
|
|
306
308
|
i0.ɵɵtext(3);
|
|
307
309
|
i0.ɵɵelementEnd();
|
|
308
|
-
i0.ɵɵelementStart(4, "div",
|
|
309
|
-
i0.ɵɵtemplate(5, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_5_Template, 2, 0, "span",
|
|
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",
|
|
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",
|
|
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",
|
|
337
|
-
i0.ɵɵrepeaterCreate(1, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Template, 13, 11, "div",
|
|
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",
|
|
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",
|
|
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",
|
|
354
|
-
i0.ɵɵelement(1, "i",
|
|
355
|
-
i0.ɵɵelementStart(2, "p",
|
|
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",
|
|
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",
|
|
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",
|
|
370
|
+
i0.ɵɵelement(1, "i", 84);
|
|
369
371
|
i0.ɵɵelementEnd();
|
|
370
|
-
i0.ɵɵelementStart(2, "button",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
402
|
+
i0.ɵɵelementStart(1, "div", 74)(2, "span", 75);
|
|
401
403
|
i0.ɵɵtext(3);
|
|
402
404
|
i0.ɵɵelementEnd();
|
|
403
|
-
i0.ɵɵelementStart(4, "div",
|
|
404
|
-
i0.ɵɵtemplate(5, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_5_Template, 2, 0, "span",
|
|
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",
|
|
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",
|
|
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",
|
|
430
|
-
i0.ɵɵrepeaterCreate(1, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Template, 12, 8, "div",
|
|
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",
|
|
439
|
-
i0.ɵɵelement(3, "i",
|
|
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",
|
|
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",
|
|
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",
|
|
447
|
-
i0.ɵɵelement(11, "i",
|
|
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",
|
|
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",
|
|
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",
|
|
469
|
-
i0.ɵɵelement(1, "i",
|
|
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",
|
|
475
|
-
i0.ɵɵelement(1, "i",
|
|
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",
|
|
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",
|
|
487
|
-
i0.ɵɵelement(2, "i",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
533
|
-
i0.ɵɵelement(2, "i",
|
|
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",
|
|
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",
|
|
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",
|
|
564
|
-
i0.ɵɵelementStart(4, "div",
|
|
565
|
-
i0.ɵɵelement(7, "i",
|
|
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",
|
|
569
|
-
i0.ɵɵtemplate(10, ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_10_Template, 3, 1, "button",
|
|
570
|
-
i0.ɵɵelementStart(11, "button",
|
|
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",
|
|
574
|
+
i0.ɵɵelement(12, "i", 94);
|
|
573
575
|
i0.ɵɵtext(13, " Copy ");
|
|
574
576
|
i0.ɵɵelementEnd()()();
|
|
575
|
-
i0.ɵɵelementStart(14, "mj-code-editor",
|
|
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",
|
|
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",
|
|
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",
|
|
606
|
-
i0.ɵɵelement(1, "i",
|
|
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",
|
|
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",
|
|
630
|
+
i0.ɵɵelement(1, "i", 57);
|
|
618
631
|
i0.ɵɵtext(2, " Loading result codes... ");
|
|
619
632
|
i0.ɵɵelementEnd();
|
|
620
633
|
} }
|
|
621
|
-
function
|
|
622
|
-
i0.ɵɵelementStart(0, "p",
|
|
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
|
|
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",
|
|
629
|
-
i0.ɵɵelementStart(2, "p",
|
|
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,
|
|
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
|
|
640
|
-
i0.ɵɵelementStart(0, "div",
|
|
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
|
|
657
|
+
const code_r23 = i0.ɵɵnextContext().$implicit;
|
|
645
658
|
i0.ɵɵadvance();
|
|
646
|
-
i0.ɵɵtextInterpolate(
|
|
659
|
+
i0.ɵɵtextInterpolate(code_r23.Description);
|
|
647
660
|
} }
|
|
648
|
-
function
|
|
649
|
-
i0.ɵɵ
|
|
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",
|
|
679
|
+
i0.ɵɵelementStart(3, "div", 117)(4, "div", 118);
|
|
653
680
|
i0.ɵɵtext(5);
|
|
654
681
|
i0.ɵɵelementEnd();
|
|
655
|
-
i0.ɵɵtemplate(6,
|
|
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
|
|
659
|
-
i0.ɵɵ
|
|
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(
|
|
691
|
+
i0.ɵɵclassMap(code_r23.IsSuccess ? "fa-solid fa-check-circle" : "fa-solid fa-times-circle");
|
|
662
692
|
i0.ɵɵadvance(3);
|
|
663
|
-
i0.ɵɵtextInterpolate(
|
|
693
|
+
i0.ɵɵtextInterpolate(code_r23.ResultCode);
|
|
694
|
+
i0.ɵɵadvance();
|
|
695
|
+
i0.ɵɵconditional(code_r23.Description ? 6 : -1);
|
|
664
696
|
i0.ɵɵadvance();
|
|
665
|
-
i0.ɵɵconditional(
|
|
697
|
+
i0.ɵɵconditional(ctx_r1.EditMode ? 7 : -1);
|
|
666
698
|
} }
|
|
667
|
-
function
|
|
668
|
-
i0.ɵɵelementStart(0, "div",
|
|
669
|
-
i0.ɵɵrepeaterCreate(1,
|
|
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
|
|
677
|
-
i0.ɵɵelementStart(0, "span",
|
|
678
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
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",
|
|
716
|
+
i0.ɵɵelement(1, "i", 57);
|
|
685
717
|
i0.ɵɵtext(2, " Loading executions... ");
|
|
686
718
|
i0.ɵɵelementEnd();
|
|
687
719
|
} }
|
|
688
|
-
function
|
|
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",
|
|
691
|
-
i0.ɵɵelementStart(2, "p",
|
|
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
|
|
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
|
|
730
|
+
const execution_r26 = i0.ɵɵnextContext().$implicit;
|
|
699
731
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
700
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(ctx_r1.getExecutionDuration(
|
|
732
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(ctx_r1.getExecutionDuration(execution_r26)), " ");
|
|
701
733
|
} }
|
|
702
|
-
function
|
|
703
|
-
i0.ɵɵelementStart(0, "span",
|
|
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
|
|
708
|
-
const
|
|
709
|
-
i0.ɵɵelementStart(0, "tr",
|
|
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,
|
|
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",
|
|
751
|
+
i0.ɵɵelementStart(9, "td")(10, "span", 118);
|
|
720
752
|
i0.ɵɵtext(11);
|
|
721
753
|
i0.ɵɵelementEnd()();
|
|
722
|
-
i0.ɵɵelementStart(12, "td")(13, "button",
|
|
723
|
-
i0.ɵɵlistener("click", function
|
|
724
|
-
i0.ɵɵelement(14, "i",
|
|
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
|
|
759
|
+
const execution_r26 = ctx.$implicit;
|
|
728
760
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
729
|
-
i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(
|
|
761
|
+
i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(execution_r26));
|
|
730
762
|
i0.ɵɵadvance(2);
|
|
731
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(3, 10,
|
|
763
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(3, 10, execution_r26.StartedAt, "short"));
|
|
732
764
|
i0.ɵɵadvance(3);
|
|
733
|
-
i0.ɵɵconditional(
|
|
765
|
+
i0.ɵɵconditional(execution_r26.EndedAt ? 5 : 6);
|
|
734
766
|
i0.ɵɵadvance(3);
|
|
735
|
-
i0.ɵɵtextInterpolate(
|
|
767
|
+
i0.ɵɵtextInterpolate(execution_r26.User);
|
|
736
768
|
i0.ɵɵadvance(2);
|
|
737
|
-
i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(
|
|
769
|
+
i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(execution_r26))("failure", !ctx_r1.isExecutionSuccess(execution_r26));
|
|
738
770
|
i0.ɵɵadvance();
|
|
739
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
771
|
+
i0.ɵɵtextInterpolate1(" ", execution_r26.ResultCode, " ");
|
|
740
772
|
} }
|
|
741
|
-
function
|
|
742
|
-
i0.ɵɵelementStart(0, "div",
|
|
743
|
-
i0.ɵɵelement(2, "i",
|
|
744
|
-
i0.ɵɵelementStart(3, "div",
|
|
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",
|
|
779
|
+
i0.ɵɵelementStart(6, "div", 130);
|
|
748
780
|
i0.ɵɵtext(7);
|
|
749
781
|
i0.ɵɵelementEnd()()();
|
|
750
|
-
i0.ɵɵelementStart(8, "div",
|
|
751
|
-
i0.ɵɵelement(9, "i",
|
|
752
|
-
i0.ɵɵelementStart(10, "div",
|
|
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",
|
|
787
|
+
i0.ɵɵelementStart(13, "div", 132);
|
|
756
788
|
i0.ɵɵtext(14);
|
|
757
789
|
i0.ɵɵelementEnd()()();
|
|
758
|
-
i0.ɵɵelementStart(15, "div",
|
|
759
|
-
i0.ɵɵelement(16, "i",
|
|
760
|
-
i0.ɵɵelementStart(17, "div",
|
|
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",
|
|
795
|
+
i0.ɵɵelementStart(20, "div", 130);
|
|
764
796
|
i0.ɵɵtext(21);
|
|
765
797
|
i0.ɵɵelementEnd()()()();
|
|
766
|
-
i0.ɵɵelementStart(22, "h3",
|
|
767
|
-
i0.ɵɵelement(23, "i",
|
|
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",
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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
|
|
816
|
-
i0.ɵɵelementStart(0, "span",
|
|
817
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
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",
|
|
855
|
+
i0.ɵɵelement(1, "i", 57);
|
|
824
856
|
i0.ɵɵtext(2, " Loading libraries... ");
|
|
825
857
|
i0.ɵɵelementEnd();
|
|
826
858
|
} }
|
|
827
|
-
function
|
|
828
|
-
i0.ɵɵelementStart(0, "div",
|
|
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
|
|
833
|
-
i0.ɵɵelementStart(0, "div",
|
|
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 ɵ$
|
|
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[ɵ$
|
|
872
|
+
i0.ɵɵtextInterpolate(ctx_r1.actionLibraries[ɵ$index_637_r29].ItemsUsed);
|
|
841
873
|
} }
|
|
842
|
-
function
|
|
843
|
-
const
|
|
844
|
-
i0.ɵɵelementStart(0, "div",
|
|
845
|
-
i0.ɵɵlistener("click", function
|
|
846
|
-
i0.ɵɵelement(1, "i",
|
|
847
|
-
i0.ɵɵelementStart(2, "div",
|
|
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,
|
|
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",
|
|
884
|
+
i0.ɵɵelement(6, "i", 140);
|
|
853
885
|
i0.ɵɵelementEnd();
|
|
854
886
|
} if (rf & 2) {
|
|
855
|
-
const
|
|
856
|
-
const ɵ$
|
|
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(
|
|
891
|
+
i0.ɵɵtextInterpolate(lib_r28.Name);
|
|
860
892
|
i0.ɵɵadvance();
|
|
861
|
-
i0.ɵɵconditional(ctx_r1.actionLibraries[ɵ$
|
|
893
|
+
i0.ɵɵconditional(ctx_r1.actionLibraries[ɵ$index_637_r29].ItemsUsed ? 5 : -1);
|
|
862
894
|
} }
|
|
863
|
-
function
|
|
864
|
-
i0.ɵɵelementStart(0, "div",
|
|
865
|
-
i0.ɵɵrepeaterCreate(1,
|
|
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
|
|
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,
|
|
875
|
-
i0.ɵɵelementStart(2, "div", 28)(3, "div",
|
|
876
|
-
i0.ɵɵelement(5, "i",
|
|
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,
|
|
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",
|
|
882
|
-
i0.ɵɵelement(12, "i",
|
|
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",
|
|
918
|
+
i0.ɵɵelementStart(15, "span", 148);
|
|
887
919
|
i0.ɵɵtext(16, "View");
|
|
888
920
|
i0.ɵɵelementEnd()();
|
|
889
|
-
i0.ɵɵelementStart(17, "div",
|
|
890
|
-
i0.ɵɵelement(18, "i",
|
|
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",
|
|
926
|
+
i0.ɵɵelementStart(21, "span", 148);
|
|
895
927
|
i0.ɵɵtext(22, "View");
|
|
896
928
|
i0.ɵɵelementEnd()();
|
|
897
|
-
i0.ɵɵelementStart(23, "div",
|
|
898
|
-
i0.ɵɵelement(24, "i",
|
|
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",
|
|
934
|
+
i0.ɵɵelementStart(27, "span", 148);
|
|
903
935
|
i0.ɵɵtext(28, "View");
|
|
904
936
|
i0.ɵɵelementEnd()();
|
|
905
|
-
i0.ɵɵelementStart(29, "div",
|
|
906
|
-
i0.ɵɵelement(30, "i",
|
|
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",
|
|
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)(
|
|
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(
|
|
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.
|
|
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
|
|
1003
|
-
i0.ɵɵelementStart(0, "kendo-window",
|
|
1004
|
-
i0.ɵɵlistener("close", function ActionFormComponentExtended_Conditional_2_Template_kendo_window_close_0_listener() { i0.ɵɵrestoreView(
|
|
1005
|
-
i0.ɵɵelementStart(1, "mj-action-test-harness",
|
|
1006
|
-
i0.ɵɵlistener("visibilityChange", function ActionFormComponentExtended_Conditional_2_Template_mj_action_test_harness_visibilityChange_1_listener($event) { i0.ɵɵrestoreView(
|
|
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
|
|
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.
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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.
|
|
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
|
-
//
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
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:
|
|
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
|
-
|
|
1554
|
-
|
|
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,
|
|
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 }
|
|
1574
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionFormComponentExtended, { className: "ActionFormComponentExtended", filePath: "src/lib/custom/Actions/action-form.component.ts", lineNumber:
|
|
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
|