@memberjunction/ng-core-entity-forms 2.49.0 → 2.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/README.md +215 -1
  2. package/dist/lib/custom/AIAgents/agent-execution-monitor.component.d.ts +244 -0
  3. package/dist/lib/custom/AIAgents/agent-execution-monitor.component.d.ts.map +1 -0
  4. package/dist/lib/custom/AIAgents/agent-execution-monitor.component.js +1314 -0
  5. package/dist/lib/custom/AIAgents/agent-execution-monitor.component.js.map +1 -0
  6. package/dist/lib/custom/AIAgents/agent-execution-node.component.d.ts +19 -0
  7. package/dist/lib/custom/AIAgents/agent-execution-node.component.d.ts.map +1 -0
  8. package/dist/lib/custom/AIAgents/agent-execution-node.component.js +458 -0
  9. package/dist/lib/custom/AIAgents/agent-execution-node.component.js.map +1 -0
  10. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +171 -11
  11. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  12. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1411 -145
  13. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  14. package/dist/lib/custom/AIAgents/ai-test-harness-dialog.component.d.ts +78 -0
  15. package/dist/lib/custom/AIAgents/ai-test-harness-dialog.component.d.ts.map +1 -0
  16. package/dist/lib/custom/AIAgents/ai-test-harness-dialog.component.js +157 -0
  17. package/dist/lib/custom/AIAgents/ai-test-harness-dialog.component.js.map +1 -0
  18. package/dist/lib/custom/AIAgents/ai-test-harness.component.d.ts +508 -0
  19. package/dist/lib/custom/AIAgents/ai-test-harness.component.d.ts.map +1 -0
  20. package/dist/lib/custom/AIAgents/ai-test-harness.component.js +2658 -0
  21. package/dist/lib/custom/AIAgents/ai-test-harness.component.js.map +1 -0
  22. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +40 -0
  23. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -0
  24. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +965 -0
  25. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -0
  26. package/dist/lib/custom/AIPrompts/ai-prompt-execution-dialog.component.d.ts +5 -0
  27. package/dist/lib/custom/AIPrompts/ai-prompt-execution-dialog.component.d.ts.map +1 -1
  28. package/dist/lib/custom/AIPrompts/ai-prompt-execution-dialog.component.js +137 -99
  29. package/dist/lib/custom/AIPrompts/ai-prompt-execution-dialog.component.js.map +1 -1
  30. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +80 -4
  31. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  32. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +956 -470
  33. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  34. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +40 -0
  35. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -0
  36. package/dist/lib/custom/Actions/action-execution-log-form.component.js +530 -0
  37. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -0
  38. package/dist/lib/custom/Actions/action-form.component.d.ts +90 -0
  39. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -0
  40. package/dist/lib/custom/Actions/action-form.component.js +1579 -0
  41. package/dist/lib/custom/Actions/action-form.component.js.map +1 -0
  42. package/dist/lib/custom/Actions/action-param-dialog.component.d.ts +32 -0
  43. package/dist/lib/custom/Actions/action-param-dialog.component.d.ts.map +1 -0
  44. package/dist/lib/custom/Actions/action-param-dialog.component.js +320 -0
  45. package/dist/lib/custom/Actions/action-param-dialog.component.js.map +1 -0
  46. package/dist/lib/custom/Actions/action-test-harness-dialog.component.d.ts +15 -0
  47. package/dist/lib/custom/Actions/action-test-harness-dialog.component.d.ts.map +1 -0
  48. package/dist/lib/custom/Actions/action-test-harness-dialog.component.js +96 -0
  49. package/dist/lib/custom/Actions/action-test-harness-dialog.component.js.map +1 -0
  50. package/dist/lib/custom/Actions/action-test-harness.component.d.ts +50 -0
  51. package/dist/lib/custom/Actions/action-test-harness.component.d.ts.map +1 -0
  52. package/dist/lib/custom/Actions/action-test-harness.component.js +708 -0
  53. package/dist/lib/custom/Actions/action-test-harness.component.js.map +1 -0
  54. package/dist/lib/custom/custom-forms.module.d.ts +31 -19
  55. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  56. package/dist/lib/custom/custom-forms.module.js +94 -15
  57. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  58. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +35 -0
  59. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -0
  60. package/dist/lib/custom/shared/entity-selector-dialog.component.js +290 -0
  61. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -0
  62. package/dist/lib/custom/test-harness-dialog.service.d.ts +111 -0
  63. package/dist/lib/custom/test-harness-dialog.service.d.ts.map +1 -0
  64. package/dist/lib/custom/test-harness-dialog.service.js +211 -0
  65. package/dist/lib/custom/test-harness-dialog.service.js.map +1 -0
  66. package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js +12 -11
  67. package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js.map +1 -1
  68. package/dist/lib/generated/Entities/AIAgent/sections/aiagent-form-overview.component.d.ts +54 -0
  69. package/dist/lib/generated/Entities/AIAgent/sections/aiagent-form-overview.component.d.ts.map +1 -0
  70. package/dist/lib/generated/Entities/AIAgent/sections/aiagent-form-overview.component.js +492 -0
  71. package/dist/lib/generated/Entities/AIAgent/sections/aiagent-form-overview.component.js.map +1 -0
  72. package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js +8 -7
  73. package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js.map +1 -1
  74. package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js +8 -7
  75. package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js.map +1 -1
  76. package/dist/lib/generated/Entities/AIModel/aimodel.form.component.js +8 -7
  77. package/dist/lib/generated/Entities/AIModel/aimodel.form.component.js.map +1 -1
  78. package/dist/lib/generated/Entities/AIModelType/aimodeltype.form.component.js +12 -11
  79. package/dist/lib/generated/Entities/AIModelType/aimodeltype.form.component.js.map +1 -1
  80. package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js +12 -11
  81. package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js.map +1 -1
  82. package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.js +12 -11
  83. package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.js.map +1 -1
  84. package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.js +12 -11
  85. package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.js.map +1 -1
  86. package/dist/lib/generated/Entities/ActionExecutionLog/sections/details.component.d.ts.map +1 -1
  87. package/dist/lib/generated/Entities/ActionExecutionLog/sections/details.component.js +13 -4
  88. package/dist/lib/generated/Entities/ActionExecutionLog/sections/details.component.js.map +1 -1
  89. package/dist/public-api.d.ts +3 -0
  90. package/dist/public-api.d.ts.map +1 -1
  91. package/dist/public-api.js +16 -0
  92. package/dist/public-api.js.map +1 -1
  93. package/package.json +12 -11
  94. package/dist/lib/custom/AIAgents/ai-agent-execution-dialog.component.d.ts +0 -52
  95. package/dist/lib/custom/AIAgents/ai-agent-execution-dialog.component.d.ts.map +0 -1
  96. package/dist/lib/custom/AIAgents/ai-agent-execution-dialog.component.js +0 -590
  97. package/dist/lib/custom/AIAgents/ai-agent-execution-dialog.component.js.map +0 -1
@@ -0,0 +1,1579 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
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
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Component } from '@angular/core';
8
+ import { RegisterClass } from '@memberjunction/global';
9
+ import { BaseFormComponent } from '@memberjunction/ng-base-forms';
10
+ import { SharedService } from '@memberjunction/ng-shared';
11
+ import { Metadata, RunView, CompositeKey } from '@memberjunction/core';
12
+ import { ActionFormComponent } from '../../generated/Entities/Action/action.form.component';
13
+ import { ActionParamDialogComponent } from './action-param-dialog.component';
14
+ import * as i0 from "@angular/core";
15
+ import * as i1 from "@memberjunction/ng-shared";
16
+ import * as i2 from "@angular/router";
17
+ import * as i3 from "@progress/kendo-angular-dialog";
18
+ import * as i4 from "@angular/forms";
19
+ import * as i5 from "@progress/kendo-angular-layout";
20
+ import * as i6 from "@progress/kendo-angular-inputs";
21
+ import * as i7 from "@progress/kendo-angular-dropdowns";
22
+ import * as i8 from "@progress/kendo-angular-buttons";
23
+ import * as i9 from "@memberjunction/ng-form-toolbar";
24
+ import * as i10 from "@memberjunction/ng-container-directives";
25
+ import * as i11 from "@memberjunction/ng-code-editor";
26
+ import * as i12 from "./action-test-harness.component";
27
+ import * as i13 from "@angular/common";
28
+ const _forTrack0 = ($index, $item) => $item.ID;
29
+ const _c0 = () => ({ text: "Active", value: "Active" });
30
+ const _c1 = () => ({ text: "Pending", value: "Pending" });
31
+ const _c2 = () => ({ text: "Disabled", value: "Disabled" });
32
+ const _c3 = (a0, a1, a2) => [a0, a1, a2];
33
+ const _c4 = () => ({ text: "Generated", value: "Generated" });
34
+ const _c5 = () => ({ text: "Custom", value: "Custom" });
35
+ const _c6 = (a0, a1) => [a0, a1];
36
+ const _c7 = () => [];
37
+ function ActionFormComponentExtended_Conditional_1_Conditional_9_Template(rf, ctx) { if (rf & 1) {
38
+ const _r1 = i0.ɵɵgetCurrentView();
39
+ i0.ɵɵelementStart(0, "kendo-textbox", 32);
40
+ 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); });
41
+ i0.ɵɵelementEnd();
42
+ } if (rf & 2) {
43
+ const ctx_r1 = i0.ɵɵnextContext(2);
44
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Name);
45
+ } }
46
+ function ActionFormComponentExtended_Conditional_1_Conditional_10_Template(rf, ctx) { if (rf & 1) {
47
+ i0.ɵɵelementStart(0, "h4", 33);
48
+ i0.ɵɵtext(1);
49
+ i0.ɵɵelementEnd();
50
+ i0.ɵɵelementStart(2, "span", 34);
51
+ i0.ɵɵtext(3);
52
+ i0.ɵɵelementEnd();
53
+ } if (rf & 2) {
54
+ const ctx_r1 = i0.ɵɵnextContext(2);
55
+ i0.ɵɵadvance();
56
+ i0.ɵɵtextInterpolate(ctx_r1.record.Name || "Untitled Action");
57
+ i0.ɵɵadvance();
58
+ i0.ɵɵstyleProp("background-color", ctx_r1.getStatusColor());
59
+ i0.ɵɵadvance();
60
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Status, " ");
61
+ } }
62
+ function ActionFormComponentExtended_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
63
+ const _r3 = i0.ɵɵgetCurrentView();
64
+ i0.ɵɵelementStart(0, "div", 12)(1, "div")(2, "label", 35);
65
+ i0.ɵɵtext(3, "Status");
66
+ i0.ɵɵelementEnd();
67
+ i0.ɵɵelementStart(4, "kendo-dropdownlist", 36);
68
+ 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); });
69
+ i0.ɵɵelementEnd()();
70
+ i0.ɵɵelementStart(5, "div")(6, "label", 35);
71
+ i0.ɵɵtext(7, " Type ");
72
+ i0.ɵɵelementStart(8, "span", 37);
73
+ i0.ɵɵtext(9, "*");
74
+ i0.ɵɵelementEnd()();
75
+ i0.ɵɵelementStart(10, "kendo-dropdownlist", 38);
76
+ 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); });
77
+ i0.ɵɵelementEnd()();
78
+ i0.ɵɵelementStart(11, "div")(12, "label", 35);
79
+ i0.ɵɵtext(13, " Category ");
80
+ i0.ɵɵelementStart(14, "span", 37);
81
+ i0.ɵɵtext(15, "*");
82
+ i0.ɵɵelementEnd()();
83
+ i0.ɵɵelementStart(16, "kendo-dropdownlist", 39);
84
+ 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); });
85
+ i0.ɵɵelementEnd()()();
86
+ } if (rf & 2) {
87
+ const ctx_r1 = i0.ɵɵnextContext(2);
88
+ i0.ɵɵadvance(4);
89
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Status);
90
+ i0.ɵɵproperty("data", i0.ɵɵpureFunction3(11, _c3, i0.ɵɵpureFunction0(8, _c0), i0.ɵɵpureFunction0(9, _c1), i0.ɵɵpureFunction0(10, _c2)))("valuePrimitive", true);
91
+ i0.ɵɵadvance(6);
92
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Type);
93
+ i0.ɵɵproperty("data", i0.ɵɵpureFunction2(17, _c6, i0.ɵɵpureFunction0(15, _c4), i0.ɵɵpureFunction0(16, _c5)))("valuePrimitive", true);
94
+ i0.ɵɵadvance(6);
95
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.CategoryID);
96
+ i0.ɵɵproperty("data", i0.ɵɵpureFunction0(20, _c7));
97
+ } }
98
+ function ActionFormComponentExtended_Conditional_1_Conditional_12_Template(rf, ctx) { if (rf & 1) {
99
+ const _r4 = i0.ɵɵgetCurrentView();
100
+ i0.ɵɵelementStart(0, "kendo-textarea", 40);
101
+ 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); });
102
+ i0.ɵɵelementEnd();
103
+ } if (rf & 2) {
104
+ const ctx_r1 = i0.ɵɵnextContext(2);
105
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Description);
106
+ i0.ɵɵproperty("rows", 2);
107
+ } }
108
+ function ActionFormComponentExtended_Conditional_1_Conditional_13_Template(rf, ctx) { if (rf & 1) {
109
+ i0.ɵɵelementStart(0, "p", 14);
110
+ i0.ɵɵtext(1);
111
+ i0.ɵɵelementEnd();
112
+ } if (rf & 2) {
113
+ const ctx_r1 = i0.ɵɵnextContext(2);
114
+ i0.ɵɵadvance();
115
+ i0.ɵɵtextInterpolate(ctx_r1.record.Description);
116
+ } }
117
+ function ActionFormComponentExtended_Conditional_1_Conditional_15_Template(rf, ctx) { if (rf & 1) {
118
+ const _r5 = i0.ɵɵgetCurrentView();
119
+ i0.ɵɵelementStart(0, "div", 16);
120
+ i0.ɵɵelement(1, "i", 41);
121
+ i0.ɵɵelementStart(2, "span", 18);
122
+ i0.ɵɵtext(3, "Category:");
123
+ i0.ɵɵelementEnd();
124
+ i0.ɵɵelementStart(4, "span", 42);
125
+ 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()); });
126
+ i0.ɵɵtext(5);
127
+ i0.ɵɵelement(6, "i", 43);
128
+ i0.ɵɵelementEnd()();
129
+ } if (rf & 2) {
130
+ const ctx_r1 = i0.ɵɵnextContext(2);
131
+ i0.ɵɵadvance(5);
132
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.category.Name, " ");
133
+ } }
134
+ function ActionFormComponentExtended_Conditional_1_Conditional_22_Template(rf, ctx) { if (rf & 1) {
135
+ i0.ɵɵelementStart(0, "div", 16);
136
+ i0.ɵɵelement(1, "i");
137
+ i0.ɵɵelementStart(2, "span", 18);
138
+ i0.ɵɵtext(3, "Code:");
139
+ i0.ɵɵelementEnd();
140
+ i0.ɵɵelementStart(4, "span", 44);
141
+ i0.ɵɵtext(5);
142
+ i0.ɵɵelementEnd()();
143
+ } if (rf & 2) {
144
+ const ctx_r1 = i0.ɵɵnextContext(2);
145
+ i0.ɵɵadvance();
146
+ i0.ɵɵclassMap("fa-solid " + ctx_r1.getApprovalStatusIcon());
147
+ i0.ɵɵstyleProp("color", ctx_r1.getApprovalStatusColor());
148
+ i0.ɵɵadvance(3);
149
+ i0.ɵɵstyleProp("color", ctx_r1.getApprovalStatusColor());
150
+ i0.ɵɵadvance();
151
+ i0.ɵɵtextInterpolate(ctx_r1.record.CodeApprovalStatus);
152
+ } }
153
+ function ActionFormComponentExtended_Conditional_1_Conditional_23_Template(rf, ctx) { if (rf & 1) {
154
+ i0.ɵɵelementStart(0, "div", 16);
155
+ i0.ɵɵelement(1, "i", 45);
156
+ i0.ɵɵelementStart(2, "span", 19);
157
+ i0.ɵɵtext(3);
158
+ i0.ɵɵelementEnd()();
159
+ } if (rf & 2) {
160
+ const ctx_r1 = i0.ɵɵnextContext(2);
161
+ i0.ɵɵadvance(3);
162
+ i0.ɵɵtextInterpolate1("", ctx_r1.actionParams.length, " Parameters");
163
+ } }
164
+ function ActionFormComponentExtended_Conditional_1_Conditional_26_Template(rf, ctx) { if (rf & 1) {
165
+ const _r6 = i0.ɵɵgetCurrentView();
166
+ i0.ɵɵelementStart(0, "kendo-button", 46);
167
+ i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_26_Template_kendo_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openTestHarness()); });
168
+ i0.ɵɵelement(1, "i", 47);
169
+ i0.ɵɵtext(2, " Run ");
170
+ i0.ɵɵelementEnd();
171
+ } if (rf & 2) {
172
+ const ctx_r1 = i0.ɵɵnextContext(2);
173
+ i0.ɵɵproperty("disabled", ctx_r1.record.Status !== "Active");
174
+ } }
175
+ function ActionFormComponentExtended_Conditional_1_Conditional_27_Template(rf, ctx) { if (rf & 1) {
176
+ const _r7 = i0.ɵɵgetCurrentView();
177
+ i0.ɵɵelementStart(0, "kendo-button", 48);
178
+ i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_27_Template_kendo_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.regenerateCode()); });
179
+ i0.ɵɵelement(1, "i", 49);
180
+ i0.ɵɵtext(2, " Regenerate ");
181
+ i0.ɵɵelementEnd();
182
+ } }
183
+ function ActionFormComponentExtended_Conditional_1_Conditional_28_Template(rf, ctx) { if (rf & 1) {
184
+ const _r8 = i0.ɵɵgetCurrentView();
185
+ i0.ɵɵelementStart(0, "div", 21)(1, "kendo-button", 50);
186
+ i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_28_Template_kendo_button_click_1_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.approveCode()); });
187
+ i0.ɵɵelement(2, "i", 51);
188
+ i0.ɵɵtext(3, " Approve ");
189
+ i0.ɵɵelementEnd();
190
+ i0.ɵɵelementStart(4, "kendo-button", 52);
191
+ i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_28_Template_kendo_button_click_4_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.rejectCode()); });
192
+ i0.ɵɵelement(5, "i", 53);
193
+ i0.ɵɵtext(6, " Reject ");
194
+ i0.ɵɵelementEnd()();
195
+ } }
196
+ function ActionFormComponentExtended_Conditional_1_Conditional_29_Template(rf, ctx) { if (rf & 1) {
197
+ i0.ɵɵelementStart(0, "div", 24);
198
+ i0.ɵɵtext(1, " Action must be Active to execute ");
199
+ i0.ɵɵelementEnd();
200
+ } }
201
+ function ActionFormComponentExtended_Conditional_1_ng_template_32_Conditional_3_Template(rf, ctx) { if (rf & 1) {
202
+ i0.ɵɵelementStart(0, "span", 55);
203
+ i0.ɵɵtext(1);
204
+ i0.ɵɵelementEnd();
205
+ } if (rf & 2) {
206
+ const ctx_r1 = i0.ɵɵnextContext(3);
207
+ i0.ɵɵadvance();
208
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.actionParams.length, " ");
209
+ } }
210
+ function ActionFormComponentExtended_Conditional_1_ng_template_32_Template(rf, ctx) { if (rf & 1) {
211
+ i0.ɵɵelementStart(0, "span", 54);
212
+ i0.ɵɵelement(1, "i", 45);
213
+ i0.ɵɵtext(2, " Parameters ");
214
+ i0.ɵɵtemplate(3, ActionFormComponentExtended_Conditional_1_ng_template_32_Conditional_3_Template, 2, 1, "span", 55);
215
+ i0.ɵɵelementEnd();
216
+ } if (rf & 2) {
217
+ const ctx_r1 = i0.ɵɵnextContext(2);
218
+ i0.ɵɵadvance(3);
219
+ i0.ɵɵconditional(ctx_r1.actionParams.length > 0 ? 3 : -1);
220
+ } }
221
+ function ActionFormComponentExtended_Conditional_1_Conditional_34_Template(rf, ctx) { if (rf & 1) {
222
+ i0.ɵɵelementStart(0, "div", 29);
223
+ i0.ɵɵelement(1, "i", 56);
224
+ i0.ɵɵtext(2, " Loading parameters... ");
225
+ i0.ɵɵelementEnd();
226
+ } }
227
+ function ActionFormComponentExtended_Conditional_1_Conditional_35_Conditional_4_Template(rf, ctx) { if (rf & 1) {
228
+ i0.ɵɵelementStart(0, "p", 59);
229
+ i0.ɵɵtext(1, "Add parameters to define inputs and outputs for this action");
230
+ i0.ɵɵelementEnd();
231
+ } }
232
+ function ActionFormComponentExtended_Conditional_1_Conditional_35_Template(rf, ctx) { if (rf & 1) {
233
+ i0.ɵɵelementStart(0, "div", 30);
234
+ i0.ɵɵelement(1, "i", 57);
235
+ i0.ɵɵelementStart(2, "p", 58);
236
+ i0.ɵɵtext(3, "No parameters defined");
237
+ i0.ɵɵelementEnd();
238
+ i0.ɵɵtemplate(4, ActionFormComponentExtended_Conditional_1_Conditional_35_Conditional_4_Template, 2, 0, "p", 59);
239
+ i0.ɵɵelementEnd();
240
+ } if (rf & 2) {
241
+ const ctx_r1 = i0.ɵɵnextContext(2);
242
+ i0.ɵɵadvance(4);
243
+ i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.record.IsSaved ? 4 : -1);
244
+ } }
245
+ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_5_Template(rf, ctx) { if (rf & 1) {
246
+ const _r9 = i0.ɵɵgetCurrentView();
247
+ i0.ɵɵelementStart(0, "kendo-button", 68);
248
+ i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_5_Template_kendo_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.addParameter("Input")); });
249
+ i0.ɵɵelement(1, "i", 69);
250
+ i0.ɵɵtext(2, " Add Input ");
251
+ i0.ɵɵelementEnd();
252
+ } }
253
+ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_6_Template(rf, ctx) { if (rf & 1) {
254
+ i0.ɵɵelementStart(0, "div", 30);
255
+ i0.ɵɵelement(1, "i", 70);
256
+ i0.ɵɵelementStart(2, "p", 58);
257
+ i0.ɵɵtext(3, "No input parameters defined");
258
+ i0.ɵɵelementEnd()();
259
+ } }
260
+ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
261
+ i0.ɵɵelementStart(0, "span", 76);
262
+ i0.ɵɵtext(1, "Required");
263
+ i0.ɵɵelementEnd();
264
+ } }
265
+ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
266
+ i0.ɵɵelementStart(0, "span", 77);
267
+ i0.ɵɵtext(1, "Array");
268
+ i0.ɵɵelementEnd();
269
+ } }
270
+ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
271
+ const _r12 = i0.ɵɵgetCurrentView();
272
+ i0.ɵɵelementStart(0, "button", 82);
273
+ 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)); });
274
+ i0.ɵɵelement(1, "i", 83);
275
+ i0.ɵɵelementEnd();
276
+ i0.ɵɵelementStart(2, "button", 84);
277
+ 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)); });
278
+ i0.ɵɵelement(3, "i", 85);
279
+ i0.ɵɵelementEnd();
280
+ } }
281
+ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
282
+ i0.ɵɵelementStart(0, "div", 80);
283
+ i0.ɵɵtext(1);
284
+ i0.ɵɵelementEnd();
285
+ } if (rf & 2) {
286
+ const param_r11 = i0.ɵɵnextContext().$implicit;
287
+ i0.ɵɵadvance();
288
+ i0.ɵɵtextInterpolate(param_r11.Description);
289
+ } }
290
+ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
291
+ i0.ɵɵelementStart(0, "div", 81)(1, "span", 86);
292
+ i0.ɵɵtext(2, "Default:");
293
+ i0.ɵɵelementEnd();
294
+ i0.ɵɵelementStart(3, "code");
295
+ i0.ɵɵtext(4);
296
+ i0.ɵɵelementEnd()();
297
+ } if (rf & 2) {
298
+ const param_r11 = i0.ɵɵnextContext().$implicit;
299
+ i0.ɵɵadvance(4);
300
+ i0.ɵɵtextInterpolate(param_r11.DefaultValue);
301
+ } }
302
+ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Template(rf, ctx) { if (rf & 1) {
303
+ const _r10 = i0.ɵɵgetCurrentView();
304
+ i0.ɵɵelementStart(0, "div", 72);
305
+ 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)); });
306
+ i0.ɵɵelementStart(1, "div", 73)(2, "span", 74);
307
+ i0.ɵɵtext(3);
308
+ i0.ɵɵelementEnd();
309
+ i0.ɵɵelementStart(4, "div", 75);
310
+ i0.ɵɵtemplate(5, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_5_Template, 2, 0, "span", 76)(6, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_6_Template, 2, 0, "span", 77)(7, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_7_Template, 4, 0);
311
+ i0.ɵɵelementEnd()();
312
+ i0.ɵɵelementStart(8, "div", 78)(9, "div", 79);
313
+ i0.ɵɵtext(10);
314
+ i0.ɵɵelementEnd();
315
+ i0.ɵɵtemplate(11, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_11_Template, 2, 1, "div", 80)(12, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_12_Template, 5, 1, "div", 81);
316
+ i0.ɵɵelementEnd()();
317
+ } if (rf & 2) {
318
+ const param_r11 = ctx.$implicit;
319
+ const ctx_r1 = i0.ɵɵnextContext(4);
320
+ i0.ɵɵclassProp("required", param_r11.IsRequired)("clickable", true);
321
+ i0.ɵɵadvance(3);
322
+ i0.ɵɵtextInterpolate(param_r11.Name);
323
+ i0.ɵɵadvance(2);
324
+ i0.ɵɵconditional(param_r11.IsRequired ? 5 : -1);
325
+ i0.ɵɵadvance();
326
+ i0.ɵɵconditional(param_r11.IsArray ? 6 : -1);
327
+ i0.ɵɵadvance();
328
+ i0.ɵɵconditional(ctx_r1.EditMode ? 7 : -1);
329
+ i0.ɵɵadvance(3);
330
+ i0.ɵɵtextInterpolate(param_r11.ValueType);
331
+ i0.ɵɵadvance();
332
+ i0.ɵɵconditional(param_r11.Description ? 11 : -1);
333
+ i0.ɵɵadvance();
334
+ i0.ɵɵconditional(param_r11.DefaultValue ? 12 : -1);
335
+ } }
336
+ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_Template(rf, ctx) { if (rf & 1) {
337
+ i0.ɵɵelementStart(0, "div", 64);
338
+ i0.ɵɵrepeaterCreate(1, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Template, 13, 11, "div", 71, _forTrack0);
339
+ i0.ɵɵelementEnd();
340
+ } if (rf & 2) {
341
+ const ctx_r1 = i0.ɵɵnextContext(3);
342
+ i0.ɵɵadvance();
343
+ i0.ɵɵrepeater(ctx_r1.getInputParams());
344
+ } }
345
+ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_13_Template(rf, ctx) { if (rf & 1) {
346
+ const _r13 = i0.ɵɵgetCurrentView();
347
+ i0.ɵɵelementStart(0, "kendo-button", 68);
348
+ i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_13_Template_kendo_button_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.addParameter("Output")); });
349
+ i0.ɵɵelement(1, "i", 69);
350
+ i0.ɵɵtext(2, " Add Output ");
351
+ i0.ɵɵelementEnd();
352
+ } }
353
+ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_14_Template(rf, ctx) { if (rf & 1) {
354
+ i0.ɵɵelementStart(0, "div", 67);
355
+ i0.ɵɵelement(1, "i", 70);
356
+ i0.ɵɵelementStart(2, "p", 58);
357
+ i0.ɵɵtext(3, "No output parameters defined");
358
+ i0.ɵɵelementEnd()();
359
+ } }
360
+ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
361
+ i0.ɵɵelementStart(0, "span", 77);
362
+ i0.ɵɵtext(1, "Array");
363
+ i0.ɵɵelementEnd();
364
+ } }
365
+ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
366
+ const _r16 = i0.ɵɵgetCurrentView();
367
+ i0.ɵɵelementStart(0, "button", 82);
368
+ 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)); });
369
+ i0.ɵɵelement(1, "i", 83);
370
+ i0.ɵɵelementEnd();
371
+ i0.ɵɵelementStart(2, "button", 84);
372
+ 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)); });
373
+ i0.ɵɵelement(3, "i", 85);
374
+ i0.ɵɵelementEnd();
375
+ } }
376
+ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
377
+ i0.ɵɵelementStart(0, "div", 80);
378
+ i0.ɵɵtext(1);
379
+ i0.ɵɵelementEnd();
380
+ } if (rf & 2) {
381
+ const param_r15 = i0.ɵɵnextContext().$implicit;
382
+ i0.ɵɵadvance();
383
+ i0.ɵɵtextInterpolate(param_r15.Description);
384
+ } }
385
+ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
386
+ i0.ɵɵelementStart(0, "div", 81)(1, "span", 86);
387
+ i0.ɵɵtext(2, "Default:");
388
+ i0.ɵɵelementEnd();
389
+ i0.ɵɵelementStart(3, "code");
390
+ i0.ɵɵtext(4);
391
+ i0.ɵɵelementEnd()();
392
+ } if (rf & 2) {
393
+ const param_r15 = i0.ɵɵnextContext().$implicit;
394
+ i0.ɵɵadvance(4);
395
+ i0.ɵɵtextInterpolate(param_r15.DefaultValue);
396
+ } }
397
+ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Template(rf, ctx) { if (rf & 1) {
398
+ const _r14 = i0.ɵɵgetCurrentView();
399
+ i0.ɵɵelementStart(0, "div", 72);
400
+ 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)); });
401
+ i0.ɵɵelementStart(1, "div", 73)(2, "span", 74);
402
+ i0.ɵɵtext(3);
403
+ i0.ɵɵelementEnd();
404
+ i0.ɵɵelementStart(4, "div", 75);
405
+ i0.ɵɵtemplate(5, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_5_Template, 2, 0, "span", 77)(6, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_6_Template, 4, 0);
406
+ i0.ɵɵelementEnd()();
407
+ i0.ɵɵelementStart(7, "div", 78)(8, "div", 79);
408
+ i0.ɵɵtext(9);
409
+ i0.ɵɵelementEnd();
410
+ i0.ɵɵtemplate(10, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_10_Template, 2, 1, "div", 80)(11, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_11_Template, 5, 1, "div", 81);
411
+ i0.ɵɵelementEnd()();
412
+ } if (rf & 2) {
413
+ const param_r15 = ctx.$implicit;
414
+ const ctx_r1 = i0.ɵɵnextContext(4);
415
+ i0.ɵɵclassProp("clickable", true);
416
+ i0.ɵɵadvance(3);
417
+ i0.ɵɵtextInterpolate(param_r15.Name);
418
+ i0.ɵɵadvance(2);
419
+ i0.ɵɵconditional(param_r15.IsArray ? 5 : -1);
420
+ i0.ɵɵadvance();
421
+ i0.ɵɵconditional(ctx_r1.EditMode ? 6 : -1);
422
+ i0.ɵɵadvance(3);
423
+ i0.ɵɵtextInterpolate(param_r15.ValueType);
424
+ i0.ɵɵadvance();
425
+ i0.ɵɵconditional(param_r15.Description ? 10 : -1);
426
+ i0.ɵɵadvance();
427
+ i0.ɵɵconditional(param_r15.DefaultValue ? 11 : -1);
428
+ } }
429
+ function ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_Template(rf, ctx) { if (rf & 1) {
430
+ i0.ɵɵelementStart(0, "div", 64);
431
+ i0.ɵɵrepeaterCreate(1, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Template, 12, 8, "div", 87, _forTrack0);
432
+ i0.ɵɵelementEnd();
433
+ } if (rf & 2) {
434
+ const ctx_r1 = i0.ɵɵnextContext(3);
435
+ i0.ɵɵadvance();
436
+ i0.ɵɵrepeater(ctx_r1.getOutputParams());
437
+ } }
438
+ function ActionFormComponentExtended_Conditional_1_Conditional_36_Template(rf, ctx) { if (rf & 1) {
439
+ i0.ɵɵelementStart(0, "div", 60)(1, "div", 61)(2, "h3");
440
+ i0.ɵɵelement(3, "i", 62);
441
+ i0.ɵɵtext(4, " Input Parameters");
442
+ i0.ɵɵelementEnd();
443
+ i0.ɵɵtemplate(5, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_5_Template, 3, 0, "kendo-button", 63);
444
+ i0.ɵɵelementEnd();
445
+ i0.ɵɵtemplate(6, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_6_Template, 4, 0, "div", 30)(7, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_Template, 3, 0, "div", 64);
446
+ i0.ɵɵelementEnd();
447
+ i0.ɵɵelementStart(8, "div", 65)(9, "div", 61)(10, "h3");
448
+ i0.ɵɵelement(11, "i", 66);
449
+ i0.ɵɵtext(12, " Output Parameters");
450
+ i0.ɵɵelementEnd();
451
+ i0.ɵɵtemplate(13, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_13_Template, 3, 0, "kendo-button", 63);
452
+ i0.ɵɵelementEnd();
453
+ i0.ɵɵtemplate(14, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_14_Template, 4, 0, "div", 67)(15, ActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_Template, 3, 0, "div", 64);
454
+ i0.ɵɵelementEnd();
455
+ } if (rf & 2) {
456
+ const ctx_r1 = i0.ɵɵnextContext(2);
457
+ i0.ɵɵadvance(5);
458
+ i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.record.IsSaved ? 5 : -1);
459
+ i0.ɵɵadvance();
460
+ i0.ɵɵconditional(ctx_r1.getInputParams().length === 0 ? 6 : 7);
461
+ i0.ɵɵadvance(2);
462
+ i0.ɵɵclassProp("params-section-compact", ctx_r1.getOutputParams().length === 0);
463
+ i0.ɵɵadvance(5);
464
+ i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.record.IsSaved ? 13 : -1);
465
+ i0.ɵɵadvance();
466
+ i0.ɵɵconditional(ctx_r1.getOutputParams().length === 0 ? 14 : 15);
467
+ } }
468
+ function ActionFormComponentExtended_Conditional_1_Conditional_37_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
469
+ i0.ɵɵelementStart(0, "span", 98);
470
+ i0.ɵɵelement(1, "i", 99);
471
+ i0.ɵɵtext(2, " Locked ");
472
+ i0.ɵɵelementEnd();
473
+ } }
474
+ function ActionFormComponentExtended_Conditional_1_Conditional_37_ng_template_1_Template(rf, ctx) { if (rf & 1) {
475
+ i0.ɵɵelementStart(0, "span", 54);
476
+ i0.ɵɵelement(1, "i", 97);
477
+ i0.ɵɵtext(2, " Code & Generation ");
478
+ i0.ɵɵtemplate(3, ActionFormComponentExtended_Conditional_1_Conditional_37_ng_template_1_Conditional_3_Template, 3, 0, "span", 98);
479
+ i0.ɵɵelementEnd();
480
+ } if (rf & 2) {
481
+ const ctx_r1 = i0.ɵɵnextContext(3);
482
+ i0.ɵɵadvance(3);
483
+ i0.ɵɵconditional(ctx_r1.record.CodeLocked ? 3 : -1);
484
+ } }
485
+ function ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_3_Template(rf, ctx) { if (rf & 1) {
486
+ const _r18 = i0.ɵɵgetCurrentView();
487
+ i0.ɵɵelementStart(0, "div", 88)(1, "h3");
488
+ i0.ɵɵelement(2, "i", 49);
489
+ i0.ɵɵtext(3, " AI Generation");
490
+ i0.ɵɵelementEnd();
491
+ i0.ɵɵelementStart(4, "div", 100)(5, "label");
492
+ i0.ɵɵtext(6, "User Prompt");
493
+ i0.ɵɵelementEnd();
494
+ i0.ɵɵelementStart(7, "kendo-textarea", 101);
495
+ 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); });
496
+ i0.ɵɵelementEnd()();
497
+ i0.ɵɵelementStart(8, "div", 102)(9, "label");
498
+ i0.ɵɵtext(10, "Internal Comments (not sent to AI)");
499
+ i0.ɵɵelementEnd();
500
+ i0.ɵɵelementStart(11, "kendo-textarea", 103);
501
+ 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); });
502
+ i0.ɵɵelementEnd()();
503
+ i0.ɵɵelementStart(12, "div", 104)(13, "kendo-switch", 105);
504
+ 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); });
505
+ i0.ɵɵelementEnd();
506
+ i0.ɵɵelementStart(14, "label", 106);
507
+ i0.ɵɵtext(15, "Lock Code (prevent regeneration)");
508
+ i0.ɵɵelementEnd()()();
509
+ } if (rf & 2) {
510
+ const ctx_r1 = i0.ɵɵnextContext(3);
511
+ i0.ɵɵadvance(7);
512
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.UserPrompt);
513
+ i0.ɵɵproperty("rows", 8);
514
+ i0.ɵɵadvance(4);
515
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.UserComments);
516
+ i0.ɵɵproperty("rows", 2);
517
+ i0.ɵɵadvance(2);
518
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.CodeLocked);
519
+ } }
520
+ function ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_10_Template(rf, ctx) { if (rf & 1) {
521
+ const _r19 = i0.ɵɵgetCurrentView();
522
+ i0.ɵɵelementStart(0, "kendo-button", 68);
523
+ i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_10_Template_kendo_button_click_0_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleCodeComments()); });
524
+ i0.ɵɵelement(1, "i", 107);
525
+ i0.ɵɵtext(2);
526
+ i0.ɵɵelementEnd();
527
+ } if (rf & 2) {
528
+ const ctx_r1 = i0.ɵɵnextContext(3);
529
+ i0.ɵɵadvance(2);
530
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.showCodeComments ? "Hide" : "Show", " AI Comments ");
531
+ } }
532
+ function ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_15_Template(rf, ctx) { if (rf & 1) {
533
+ i0.ɵɵelementStart(0, "div", 95)(1, "h4");
534
+ i0.ɵɵelement(2, "i", 49);
535
+ i0.ɵɵtext(3, " AI Explanation");
536
+ i0.ɵɵelementEnd();
537
+ i0.ɵɵelementStart(4, "p");
538
+ i0.ɵɵtext(5);
539
+ i0.ɵɵelementEnd()();
540
+ } if (rf & 2) {
541
+ const ctx_r1 = i0.ɵɵnextContext(3);
542
+ i0.ɵɵadvance(5);
543
+ i0.ɵɵtextInterpolate(ctx_r1.record.CodeComments);
544
+ } }
545
+ function ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_16_Template(rf, ctx) { if (rf & 1) {
546
+ const _r20 = i0.ɵɵgetCurrentView();
547
+ i0.ɵɵelementStart(0, "div", 96)(1, "label");
548
+ i0.ɵɵtext(2, "Rejection Comments");
549
+ i0.ɵɵelementEnd();
550
+ i0.ɵɵelementStart(3, "kendo-textarea", 108);
551
+ 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); });
552
+ i0.ɵɵelementEnd()();
553
+ } if (rf & 2) {
554
+ const ctx_r1 = i0.ɵɵnextContext(3);
555
+ i0.ɵɵadvance(3);
556
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.CodeApprovalComments);
557
+ i0.ɵɵproperty("rows", 2);
558
+ } }
559
+ function ActionFormComponentExtended_Conditional_1_Conditional_37_Template(rf, ctx) { if (rf & 1) {
560
+ const _r17 = i0.ɵɵgetCurrentView();
561
+ i0.ɵɵelementStart(0, "kendo-expansionpanel", 26);
562
+ i0.ɵɵtemplate(1, ActionFormComponentExtended_Conditional_1_Conditional_37_ng_template_1_Template, 4, 1, "ng-template", 27);
563
+ i0.ɵɵelementStart(2, "div", 28);
564
+ i0.ɵɵtemplate(3, ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_3_Template, 16, 5, "div", 88);
565
+ i0.ɵɵelementStart(4, "div", 89)(5, "div", 90)(6, "h3");
566
+ i0.ɵɵelement(7, "i", 91);
567
+ i0.ɵɵtext(8, " Action Code");
568
+ i0.ɵɵelementEnd();
569
+ i0.ɵɵelementStart(9, "div", 92);
570
+ i0.ɵɵtemplate(10, ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_10_Template, 3, 1, "kendo-button", 63);
571
+ i0.ɵɵelementStart(11, "kendo-button", 68);
572
+ i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_37_Template_kendo_button_click_11_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.record.Code || "")); });
573
+ i0.ɵɵelement(12, "i", 93);
574
+ i0.ɵɵtext(13, " Copy ");
575
+ i0.ɵɵelementEnd()()();
576
+ i0.ɵɵelementStart(14, "mj-code-editor", 94);
577
+ 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); });
578
+ i0.ɵɵelementEnd();
579
+ i0.ɵɵtemplate(15, ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_15_Template, 6, 1, "div", 95)(16, ActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_16_Template, 4, 2, "div", 96);
580
+ i0.ɵɵelementEnd()()();
581
+ } if (rf & 2) {
582
+ const ctx_r1 = i0.ɵɵnextContext(2);
583
+ i0.ɵɵproperty("expanded", ctx_r1.expandedSections.code);
584
+ i0.ɵɵadvance(3);
585
+ i0.ɵɵconditional(ctx_r1.EditMode ? 3 : -1);
586
+ i0.ɵɵadvance(7);
587
+ i0.ɵɵconditional(ctx_r1.record.CodeComments ? 10 : -1);
588
+ i0.ɵɵadvance(4);
589
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Code);
590
+ i0.ɵɵproperty("readonly", !ctx_r1.EditMode || ctx_r1.record.CodeLocked)("language", ctx_r1.codeLanguage)("lineWrapping", true);
591
+ i0.ɵɵadvance();
592
+ i0.ɵɵconditional(ctx_r1.showCodeComments && ctx_r1.record.CodeComments ? 15 : -1);
593
+ i0.ɵɵadvance();
594
+ i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.record.CodeApprovalStatus === "Rejected" ? 16 : -1);
595
+ } }
596
+ function ActionFormComponentExtended_Conditional_1_ng_template_39_Conditional_3_Template(rf, ctx) { if (rf & 1) {
597
+ i0.ɵɵelementStart(0, "span", 110);
598
+ i0.ɵɵtext(1);
599
+ i0.ɵɵelementEnd();
600
+ } if (rf & 2) {
601
+ const ctx_r1 = i0.ɵɵnextContext(3);
602
+ i0.ɵɵadvance();
603
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.resultCodes.length, " ");
604
+ } }
605
+ function ActionFormComponentExtended_Conditional_1_ng_template_39_Template(rf, ctx) { if (rf & 1) {
606
+ i0.ɵɵelementStart(0, "span", 54);
607
+ i0.ɵɵelement(1, "i", 109);
608
+ i0.ɵɵtext(2, " Result Codes ");
609
+ i0.ɵɵtemplate(3, ActionFormComponentExtended_Conditional_1_ng_template_39_Conditional_3_Template, 2, 1, "span", 110);
610
+ i0.ɵɵelementEnd();
611
+ } if (rf & 2) {
612
+ const ctx_r1 = i0.ɵɵnextContext(2);
613
+ i0.ɵɵadvance(3);
614
+ i0.ɵɵconditional(ctx_r1.resultCodes.length > 0 ? 3 : -1);
615
+ } }
616
+ function ActionFormComponentExtended_Conditional_1_Conditional_41_Template(rf, ctx) { if (rf & 1) {
617
+ i0.ɵɵelementStart(0, "div", 29);
618
+ i0.ɵɵelement(1, "i", 56);
619
+ i0.ɵɵtext(2, " Loading result codes... ");
620
+ i0.ɵɵelementEnd();
621
+ } }
622
+ function ActionFormComponentExtended_Conditional_1_Conditional_42_Conditional_4_Template(rf, ctx) { if (rf & 1) {
623
+ i0.ɵɵelementStart(0, "p", 59);
624
+ i0.ɵɵtext(1, "Add result codes to define possible outcomes");
625
+ i0.ɵɵelementEnd();
626
+ } }
627
+ function ActionFormComponentExtended_Conditional_1_Conditional_42_Template(rf, ctx) { if (rf & 1) {
628
+ i0.ɵɵelementStart(0, "div", 30);
629
+ i0.ɵɵelement(1, "i", 111);
630
+ i0.ɵɵelementStart(2, "p", 58);
631
+ i0.ɵɵtext(3, "No result codes defined");
632
+ i0.ɵɵelementEnd();
633
+ i0.ɵɵtemplate(4, ActionFormComponentExtended_Conditional_1_Conditional_42_Conditional_4_Template, 2, 0, "p", 59);
634
+ i0.ɵɵelementEnd();
635
+ } if (rf & 2) {
636
+ const ctx_r1 = i0.ɵɵnextContext(2);
637
+ i0.ɵɵadvance(4);
638
+ i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.record.IsSaved ? 4 : -1);
639
+ } }
640
+ function ActionFormComponentExtended_Conditional_1_Conditional_43_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
641
+ i0.ɵɵelementStart(0, "div", 117);
642
+ i0.ɵɵtext(1);
643
+ i0.ɵɵelementEnd();
644
+ } if (rf & 2) {
645
+ const code_r21 = i0.ɵɵnextContext().$implicit;
646
+ i0.ɵɵadvance();
647
+ i0.ɵɵtextInterpolate(code_r21.Description);
648
+ } }
649
+ function ActionFormComponentExtended_Conditional_1_Conditional_43_For_2_Template(rf, ctx) { if (rf & 1) {
650
+ i0.ɵɵelementStart(0, "div", 113)(1, "div", 114);
651
+ i0.ɵɵelement(2, "i");
652
+ i0.ɵɵelementEnd();
653
+ i0.ɵɵelementStart(3, "div", 115)(4, "div", 116);
654
+ i0.ɵɵtext(5);
655
+ i0.ɵɵelementEnd();
656
+ i0.ɵɵtemplate(6, ActionFormComponentExtended_Conditional_1_Conditional_43_For_2_Conditional_6_Template, 2, 1, "div", 117);
657
+ i0.ɵɵelementEnd()();
658
+ } if (rf & 2) {
659
+ const code_r21 = ctx.$implicit;
660
+ i0.ɵɵclassProp("success", code_r21.IsSuccess)("failure", !code_r21.IsSuccess);
661
+ i0.ɵɵadvance(2);
662
+ i0.ɵɵclassMap(code_r21.IsSuccess ? "fa-solid fa-check-circle" : "fa-solid fa-times-circle");
663
+ i0.ɵɵadvance(3);
664
+ i0.ɵɵtextInterpolate(code_r21.ResultCode);
665
+ i0.ɵɵadvance();
666
+ i0.ɵɵconditional(code_r21.Description ? 6 : -1);
667
+ } }
668
+ function ActionFormComponentExtended_Conditional_1_Conditional_43_Template(rf, ctx) { if (rf & 1) {
669
+ i0.ɵɵelementStart(0, "div", 31);
670
+ i0.ɵɵrepeaterCreate(1, ActionFormComponentExtended_Conditional_1_Conditional_43_For_2_Template, 7, 8, "div", 112, _forTrack0);
671
+ i0.ɵɵelementEnd();
672
+ } if (rf & 2) {
673
+ const ctx_r1 = i0.ɵɵnextContext(2);
674
+ i0.ɵɵadvance();
675
+ i0.ɵɵrepeater(ctx_r1.resultCodes);
676
+ } }
677
+ function ActionFormComponentExtended_Conditional_1_Conditional_44_ng_template_1_Template(rf, ctx) { if (rf & 1) {
678
+ i0.ɵɵelementStart(0, "span", 54);
679
+ i0.ɵɵelement(1, "i", 118);
680
+ i0.ɵɵtext(2, " Execution & Monitoring ");
681
+ i0.ɵɵelementEnd();
682
+ } }
683
+ function ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_3_Template(rf, ctx) { if (rf & 1) {
684
+ i0.ɵɵelementStart(0, "div", 29);
685
+ i0.ɵɵelement(1, "i", 56);
686
+ i0.ɵɵtext(2, " Loading executions... ");
687
+ i0.ɵɵelementEnd();
688
+ } }
689
+ function ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_4_Template(rf, ctx) { if (rf & 1) {
690
+ i0.ɵɵelementStart(0, "div", 30);
691
+ i0.ɵɵelement(1, "i", 119);
692
+ i0.ɵɵelementStart(2, "p", 58);
693
+ i0.ɵɵtext(3, "No executions yet");
694
+ i0.ɵɵelementEnd()();
695
+ } }
696
+ function ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_For_41_Conditional_5_Template(rf, ctx) { if (rf & 1) {
697
+ i0.ɵɵtext(0);
698
+ } if (rf & 2) {
699
+ const execution_r23 = i0.ɵɵnextContext().$implicit;
700
+ const ctx_r1 = i0.ɵɵnextContext(4);
701
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(ctx_r1.getExecutionDuration(execution_r23)), " ");
702
+ } }
703
+ function ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_For_41_Conditional_6_Template(rf, ctx) { if (rf & 1) {
704
+ i0.ɵɵelementStart(0, "span", 134);
705
+ i0.ɵɵtext(1, "Running...");
706
+ i0.ɵɵelementEnd();
707
+ } }
708
+ function ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_For_41_Template(rf, ctx) { if (rf & 1) {
709
+ const _r22 = i0.ɵɵgetCurrentView();
710
+ i0.ɵɵelementStart(0, "tr", 133)(1, "td");
711
+ i0.ɵɵtext(2);
712
+ i0.ɵɵpipe(3, "date");
713
+ i0.ɵɵelementEnd();
714
+ i0.ɵɵelementStart(4, "td");
715
+ i0.ɵɵtemplate(5, ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_For_41_Conditional_5_Template, 1, 1)(6, ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_For_41_Conditional_6_Template, 2, 0, "span", 134);
716
+ i0.ɵɵelementEnd();
717
+ i0.ɵɵelementStart(7, "td");
718
+ i0.ɵɵtext(8);
719
+ i0.ɵɵelementEnd();
720
+ i0.ɵɵelementStart(9, "td")(10, "span", 116);
721
+ i0.ɵɵtext(11);
722
+ i0.ɵɵelementEnd()();
723
+ i0.ɵɵelementStart(12, "td")(13, "kendo-button", 68);
724
+ i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_For_41_Template_kendo_button_click_13_listener() { const execution_r23 = i0.ɵɵrestoreView(_r22).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToExecution(execution_r23.ID)); });
725
+ i0.ɵɵelement(14, "i", 135);
726
+ i0.ɵɵelementEnd()()();
727
+ } if (rf & 2) {
728
+ const execution_r23 = ctx.$implicit;
729
+ const ctx_r1 = i0.ɵɵnextContext(4);
730
+ i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(execution_r23));
731
+ i0.ɵɵadvance(2);
732
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(3, 10, execution_r23.StartedAt, "short"));
733
+ i0.ɵɵadvance(3);
734
+ i0.ɵɵconditional(execution_r23.EndedAt ? 5 : 6);
735
+ i0.ɵɵadvance(3);
736
+ i0.ɵɵtextInterpolate(execution_r23.User);
737
+ i0.ɵɵadvance(2);
738
+ i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(execution_r23))("failure", !ctx_r1.isExecutionSuccess(execution_r23));
739
+ i0.ɵɵadvance();
740
+ i0.ɵɵtextInterpolate1(" ", execution_r23.ResultCode, " ");
741
+ } }
742
+ function ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Template(rf, ctx) { if (rf & 1) {
743
+ i0.ɵɵelementStart(0, "div", 120)(1, "div", 121);
744
+ i0.ɵɵelement(2, "i", 122);
745
+ i0.ɵɵelementStart(3, "div", 123)(4, "div", 124);
746
+ i0.ɵɵtext(5, "Avg Duration");
747
+ i0.ɵɵelementEnd();
748
+ i0.ɵɵelementStart(6, "div", 125);
749
+ i0.ɵɵtext(7);
750
+ i0.ɵɵelementEnd()()();
751
+ i0.ɵɵelementStart(8, "div", 121);
752
+ i0.ɵɵelement(9, "i", 126);
753
+ i0.ɵɵelementStart(10, "div", 123)(11, "div", 124);
754
+ i0.ɵɵtext(12, "Success Rate");
755
+ i0.ɵɵelementEnd();
756
+ i0.ɵɵelementStart(13, "div", 127);
757
+ i0.ɵɵtext(14);
758
+ i0.ɵɵelementEnd()()();
759
+ i0.ɵɵelementStart(15, "div", 121);
760
+ i0.ɵɵelement(16, "i", 128);
761
+ i0.ɵɵelementStart(17, "div", 123)(18, "div", 124);
762
+ i0.ɵɵtext(19, "Total Runs");
763
+ i0.ɵɵelementEnd();
764
+ i0.ɵɵelementStart(20, "div", 125);
765
+ i0.ɵɵtext(21);
766
+ i0.ɵɵelementEnd()()()();
767
+ i0.ɵɵelementStart(22, "h3", 129);
768
+ i0.ɵɵelement(23, "i", 130);
769
+ i0.ɵɵtext(24, " Recent Executions");
770
+ i0.ɵɵelementEnd();
771
+ i0.ɵɵelementStart(25, "div", 131)(26, "table")(27, "thead")(28, "tr")(29, "th");
772
+ i0.ɵɵtext(30, "Started");
773
+ i0.ɵɵelementEnd();
774
+ i0.ɵɵelementStart(31, "th");
775
+ i0.ɵɵtext(32, "Duration");
776
+ i0.ɵɵelementEnd();
777
+ i0.ɵɵelementStart(33, "th");
778
+ i0.ɵɵtext(34, "User");
779
+ i0.ɵɵelementEnd();
780
+ i0.ɵɵelementStart(35, "th");
781
+ i0.ɵɵtext(36, "Result");
782
+ i0.ɵɵelementEnd();
783
+ i0.ɵɵelementStart(37, "th");
784
+ i0.ɵɵtext(38, "Actions");
785
+ i0.ɵɵelementEnd()()();
786
+ i0.ɵɵelementStart(39, "tbody");
787
+ i0.ɵɵrepeaterCreate(40, ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_For_41_Template, 15, 13, "tr", 132, _forTrack0);
788
+ i0.ɵɵelementEnd()()();
789
+ } if (rf & 2) {
790
+ const ctx_r1 = i0.ɵɵnextContext(3);
791
+ i0.ɵɵadvance(7);
792
+ i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.executionStats.avgDuration));
793
+ i0.ɵɵadvance(2);
794
+ i0.ɵɵstyleProp("color", ctx_r1.getSuccessRateColor());
795
+ i0.ɵɵadvance(4);
796
+ i0.ɵɵstyleProp("color", ctx_r1.getSuccessRateColor());
797
+ i0.ɵɵadvance();
798
+ i0.ɵɵtextInterpolate1("", ctx_r1.executionStats.successRate.toFixed(0), "%");
799
+ i0.ɵɵadvance(7);
800
+ i0.ɵɵtextInterpolate(ctx_r1.executionStats.totalRuns);
801
+ i0.ɵɵadvance(19);
802
+ i0.ɵɵrepeater(ctx_r1.recentExecutions);
803
+ } }
804
+ function ActionFormComponentExtended_Conditional_1_Conditional_44_Template(rf, ctx) { if (rf & 1) {
805
+ i0.ɵɵelementStart(0, "kendo-expansionpanel", 26);
806
+ i0.ɵɵtemplate(1, ActionFormComponentExtended_Conditional_1_Conditional_44_ng_template_1_Template, 3, 0, "ng-template", 27);
807
+ i0.ɵɵelementStart(2, "div", 28);
808
+ i0.ɵɵtemplate(3, ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_3_Template, 3, 0, "div", 29)(4, ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_4_Template, 4, 0, "div", 30)(5, ActionFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Template, 42, 7);
809
+ i0.ɵɵelementEnd()();
810
+ } if (rf & 2) {
811
+ const ctx_r1 = i0.ɵɵnextContext(2);
812
+ i0.ɵɵproperty("expanded", ctx_r1.expandedSections.execution);
813
+ i0.ɵɵadvance(3);
814
+ i0.ɵɵconditional(ctx_r1.isLoadingExecutions ? 3 : ctx_r1.recentExecutions.length === 0 ? 4 : 5);
815
+ } }
816
+ function ActionFormComponentExtended_Conditional_1_Conditional_45_ng_template_1_Template(rf, ctx) { if (rf & 1) {
817
+ i0.ɵɵelementStart(0, "span", 54);
818
+ i0.ɵɵelement(1, "i", 147);
819
+ i0.ɵɵtext(2, " Related Configuration ");
820
+ i0.ɵɵelementEnd();
821
+ } }
822
+ function ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_7_Template(rf, ctx) { if (rf & 1) {
823
+ i0.ɵɵelementStart(0, "div", 29);
824
+ i0.ɵɵelement(1, "i", 56);
825
+ i0.ɵɵtext(2, " Loading libraries... ");
826
+ i0.ɵɵelementEnd();
827
+ } }
828
+ function ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_8_Template(rf, ctx) { if (rf & 1) {
829
+ i0.ɵɵelementStart(0, "div", 138)(1, "p");
830
+ i0.ɵɵtext(2, "No libraries configured");
831
+ i0.ɵɵelementEnd()();
832
+ } }
833
+ function ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_9_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
834
+ i0.ɵɵelementStart(0, "div", 152);
835
+ i0.ɵɵtext(1);
836
+ i0.ɵɵelementEnd();
837
+ } if (rf & 2) {
838
+ const ɵ$index_618_r26 = i0.ɵɵnextContext().$index;
839
+ const ctx_r1 = i0.ɵɵnextContext(4);
840
+ i0.ɵɵadvance();
841
+ i0.ɵɵtextInterpolate(ctx_r1.actionLibraries[ɵ$index_618_r26].ItemsUsed);
842
+ } }
843
+ function ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_9_For_2_Template(rf, ctx) { if (rf & 1) {
844
+ const _r24 = i0.ɵɵgetCurrentView();
845
+ i0.ɵɵelementStart(0, "div", 149);
846
+ i0.ɵɵlistener("click", function ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_9_For_2_Template_div_click_0_listener() { const lib_r25 = i0.ɵɵrestoreView(_r24).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToLibrary(lib_r25.ID)); });
847
+ i0.ɵɵelement(1, "i", 137);
848
+ i0.ɵɵelementStart(2, "div", 150)(3, "div", 151);
849
+ i0.ɵɵtext(4);
850
+ i0.ɵɵelementEnd();
851
+ i0.ɵɵtemplate(5, ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_9_For_2_Conditional_5_Template, 2, 1, "div", 152);
852
+ i0.ɵɵelementEnd();
853
+ i0.ɵɵelement(6, "i", 135);
854
+ i0.ɵɵelementEnd();
855
+ } if (rf & 2) {
856
+ const lib_r25 = ctx.$implicit;
857
+ const ɵ$index_618_r26 = ctx.$index;
858
+ const ctx_r1 = i0.ɵɵnextContext(4);
859
+ i0.ɵɵadvance(4);
860
+ i0.ɵɵtextInterpolate(lib_r25.Name);
861
+ i0.ɵɵadvance();
862
+ i0.ɵɵconditional(ctx_r1.actionLibraries[ɵ$index_618_r26].ItemsUsed ? 5 : -1);
863
+ } }
864
+ function ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_9_Template(rf, ctx) { if (rf & 1) {
865
+ i0.ɵɵelementStart(0, "div", 139);
866
+ i0.ɵɵrepeaterCreate(1, ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_9_For_2_Template, 7, 2, "div", 148, _forTrack0);
867
+ i0.ɵɵelementEnd();
868
+ } if (rf & 2) {
869
+ const ctx_r1 = i0.ɵɵnextContext(3);
870
+ i0.ɵɵadvance();
871
+ i0.ɵɵrepeater(ctx_r1.libraries);
872
+ } }
873
+ function ActionFormComponentExtended_Conditional_1_Conditional_45_Template(rf, ctx) { if (rf & 1) {
874
+ i0.ɵɵelementStart(0, "kendo-expansionpanel", 26);
875
+ i0.ɵɵtemplate(1, ActionFormComponentExtended_Conditional_1_Conditional_45_ng_template_1_Template, 3, 0, "ng-template", 27);
876
+ i0.ɵɵelementStart(2, "div", 28)(3, "div", 136)(4, "h3");
877
+ i0.ɵɵelement(5, "i", 137);
878
+ i0.ɵɵtext(6, " Libraries");
879
+ i0.ɵɵelementEnd();
880
+ i0.ɵɵtemplate(7, ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_7_Template, 3, 0, "div", 29)(8, ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_8_Template, 3, 0, "div", 138)(9, ActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_9_Template, 3, 0, "div", 139);
881
+ i0.ɵɵelementEnd();
882
+ i0.ɵɵelementStart(10, "div", 140)(11, "div", 141);
883
+ i0.ɵɵelement(12, "i", 142);
884
+ i0.ɵɵelementStart(13, "span");
885
+ i0.ɵɵtext(14, "Authorizations");
886
+ i0.ɵɵelementEnd();
887
+ i0.ɵɵelementStart(15, "span", 143);
888
+ i0.ɵɵtext(16, "View");
889
+ i0.ɵɵelementEnd()();
890
+ i0.ɵɵelementStart(17, "div", 141);
891
+ i0.ɵɵelement(18, "i", 144);
892
+ i0.ɵɵelementStart(19, "span");
893
+ i0.ɵɵtext(20, "Contexts");
894
+ i0.ɵɵelementEnd();
895
+ i0.ɵɵelementStart(21, "span", 143);
896
+ i0.ɵɵtext(22, "View");
897
+ i0.ɵɵelementEnd()();
898
+ i0.ɵɵelementStart(23, "div", 141);
899
+ i0.ɵɵelement(24, "i", 145);
900
+ i0.ɵɵelementStart(25, "span");
901
+ i0.ɵɵtext(26, "Scheduled Actions");
902
+ i0.ɵɵelementEnd();
903
+ i0.ɵɵelementStart(27, "span", 143);
904
+ i0.ɵɵtext(28, "View");
905
+ i0.ɵɵelementEnd()();
906
+ i0.ɵɵelementStart(29, "div", 141);
907
+ i0.ɵɵelement(30, "i", 146);
908
+ i0.ɵɵelementStart(31, "span");
909
+ i0.ɵɵtext(32, "Entity Actions");
910
+ i0.ɵɵelementEnd();
911
+ i0.ɵɵelementStart(33, "span", 143);
912
+ i0.ɵɵtext(34, "View");
913
+ i0.ɵɵelementEnd()()()()();
914
+ } if (rf & 2) {
915
+ const ctx_r1 = i0.ɵɵnextContext(2);
916
+ i0.ɵɵproperty("expanded", ctx_r1.expandedSections.configuration);
917
+ i0.ɵɵadvance(7);
918
+ i0.ɵɵconditional(ctx_r1.isLoadingLibraries ? 7 : ctx_r1.actionLibraries.length === 0 ? 8 : 9);
919
+ } }
920
+ function ActionFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf & 1) {
921
+ i0.ɵɵelementStart(0, "form", 2, 0);
922
+ i0.ɵɵelement(2, "mj-form-toolbar", 4);
923
+ i0.ɵɵelementStart(3, "div", 5)(4, "div", 6)(5, "div", 7)(6, "div", 8)(7, "div", 9);
924
+ i0.ɵɵelement(8, "i", 10);
925
+ i0.ɵɵtemplate(9, ActionFormComponentExtended_Conditional_1_Conditional_9_Template, 1, 1, "kendo-textbox", 11)(10, ActionFormComponentExtended_Conditional_1_Conditional_10_Template, 4, 4);
926
+ i0.ɵɵelementEnd();
927
+ i0.ɵɵtemplate(11, ActionFormComponentExtended_Conditional_1_Conditional_11_Template, 17, 21, "div", 12)(12, ActionFormComponentExtended_Conditional_1_Conditional_12_Template, 1, 2, "kendo-textarea", 13)(13, ActionFormComponentExtended_Conditional_1_Conditional_13_Template, 2, 1, "p", 14);
928
+ i0.ɵɵelementStart(14, "div", 15);
929
+ i0.ɵɵtemplate(15, ActionFormComponentExtended_Conditional_1_Conditional_15_Template, 7, 1, "div", 16);
930
+ i0.ɵɵelementStart(16, "div", 16);
931
+ i0.ɵɵelement(17, "i", 17);
932
+ i0.ɵɵelementStart(18, "span", 18);
933
+ i0.ɵɵtext(19, "Type:");
934
+ i0.ɵɵelementEnd();
935
+ i0.ɵɵelementStart(20, "span", 19);
936
+ i0.ɵɵtext(21);
937
+ i0.ɵɵelementEnd()();
938
+ i0.ɵɵtemplate(22, ActionFormComponentExtended_Conditional_1_Conditional_22_Template, 6, 7, "div", 16)(23, ActionFormComponentExtended_Conditional_1_Conditional_23_Template, 4, 1, "div", 16);
939
+ i0.ɵɵelementEnd()();
940
+ i0.ɵɵelementStart(24, "div", 20)(25, "div", 21);
941
+ i0.ɵɵtemplate(26, ActionFormComponentExtended_Conditional_1_Conditional_26_Template, 3, 1, "kendo-button", 22)(27, ActionFormComponentExtended_Conditional_1_Conditional_27_Template, 3, 0, "kendo-button", 23);
942
+ i0.ɵɵelementEnd();
943
+ i0.ɵɵtemplate(28, ActionFormComponentExtended_Conditional_1_Conditional_28_Template, 7, 0, "div", 21)(29, ActionFormComponentExtended_Conditional_1_Conditional_29_Template, 2, 0, "div", 24);
944
+ i0.ɵɵelementEnd()()();
945
+ i0.ɵɵelementStart(30, "div", 25)(31, "kendo-expansionpanel", 26);
946
+ i0.ɵɵtemplate(32, ActionFormComponentExtended_Conditional_1_ng_template_32_Template, 4, 1, "ng-template", 27);
947
+ i0.ɵɵelementStart(33, "div", 28);
948
+ i0.ɵɵtemplate(34, ActionFormComponentExtended_Conditional_1_Conditional_34_Template, 3, 0, "div", 29)(35, ActionFormComponentExtended_Conditional_1_Conditional_35_Template, 5, 1, "div", 30)(36, ActionFormComponentExtended_Conditional_1_Conditional_36_Template, 16, 6);
949
+ i0.ɵɵelementEnd()();
950
+ i0.ɵɵtemplate(37, ActionFormComponentExtended_Conditional_1_Conditional_37_Template, 17, 9, "kendo-expansionpanel", 26);
951
+ i0.ɵɵelementStart(38, "kendo-expansionpanel", 26);
952
+ i0.ɵɵtemplate(39, ActionFormComponentExtended_Conditional_1_ng_template_39_Template, 4, 1, "ng-template", 27);
953
+ i0.ɵɵelementStart(40, "div", 28);
954
+ i0.ɵɵtemplate(41, ActionFormComponentExtended_Conditional_1_Conditional_41_Template, 3, 0, "div", 29)(42, ActionFormComponentExtended_Conditional_1_Conditional_42_Template, 5, 1, "div", 30)(43, ActionFormComponentExtended_Conditional_1_Conditional_43_Template, 3, 0, "div", 31);
955
+ i0.ɵɵelementEnd()();
956
+ i0.ɵɵtemplate(44, ActionFormComponentExtended_Conditional_1_Conditional_44_Template, 6, 2, "kendo-expansionpanel", 26)(45, ActionFormComponentExtended_Conditional_1_Conditional_45_Template, 35, 2, "kendo-expansionpanel", 26);
957
+ i0.ɵɵelementEnd()()();
958
+ } if (rf & 2) {
959
+ const ctx_r1 = i0.ɵɵnextContext();
960
+ i0.ɵɵadvance(2);
961
+ i0.ɵɵproperty("form", ctx_r1);
962
+ i0.ɵɵadvance(6);
963
+ i0.ɵɵclassMap("fa-solid " + ctx_r1.getTypeIcon());
964
+ i0.ɵɵstyleProp("color", ctx_r1.getTypeColor());
965
+ i0.ɵɵadvance();
966
+ i0.ɵɵconditional(ctx_r1.EditMode ? 9 : 10);
967
+ i0.ɵɵadvance(2);
968
+ i0.ɵɵconditional(ctx_r1.EditMode ? 11 : -1);
969
+ i0.ɵɵadvance();
970
+ i0.ɵɵconditional(ctx_r1.EditMode ? 12 : ctx_r1.record.Description ? 13 : -1);
971
+ i0.ɵɵadvance(3);
972
+ i0.ɵɵconditional(ctx_r1.category ? 15 : -1);
973
+ i0.ɵɵadvance(6);
974
+ i0.ɵɵtextInterpolate(ctx_r1.record.Type);
975
+ i0.ɵɵadvance();
976
+ i0.ɵɵconditional(ctx_r1.record.Type === "Generated" && ctx_r1.record.CodeApprovalStatus ? 22 : -1);
977
+ i0.ɵɵadvance();
978
+ i0.ɵɵconditional(ctx_r1.actionParams.length > 0 ? 23 : -1);
979
+ i0.ɵɵadvance(3);
980
+ i0.ɵɵconditional(ctx_r1.record.ID ? 26 : -1);
981
+ i0.ɵɵadvance();
982
+ i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.record.Type === "Generated" ? 27 : -1);
983
+ i0.ɵɵadvance();
984
+ i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.record.CodeApprovalStatus === "Pending" && ctx_r1.record.Type === "Generated" ? 28 : -1);
985
+ i0.ɵɵadvance();
986
+ i0.ɵɵconditional(!ctx_r1.EditMode && ctx_r1.record.Status !== "Active" && ctx_r1.record.ID ? 29 : -1);
987
+ i0.ɵɵadvance(2);
988
+ i0.ɵɵproperty("expanded", true);
989
+ i0.ɵɵadvance(3);
990
+ i0.ɵɵconditional(ctx_r1.isLoadingParams ? 34 : ctx_r1.actionParams.length === 0 ? 35 : 36);
991
+ i0.ɵɵadvance(3);
992
+ i0.ɵɵconditional(ctx_r1.record.Type === "Generated" ? 37 : -1);
993
+ i0.ɵɵadvance();
994
+ i0.ɵɵproperty("expanded", ctx_r1.expandedSections.resultCodes);
995
+ i0.ɵɵadvance(3);
996
+ i0.ɵɵconditional(ctx_r1.isLoadingResultCodes ? 41 : ctx_r1.resultCodes.length === 0 ? 42 : 43);
997
+ i0.ɵɵadvance(3);
998
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 44 : -1);
999
+ i0.ɵɵadvance();
1000
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 45 : -1);
1001
+ } }
1002
+ function ActionFormComponentExtended_Conditional_2_Template(rf, ctx) { if (rf & 1) {
1003
+ const _r27 = i0.ɵɵgetCurrentView();
1004
+ i0.ɵɵelementStart(0, "kendo-window", 153);
1005
+ i0.ɵɵlistener("close", function ActionFormComponentExtended_Conditional_2_Template_kendo_window_close_0_listener() { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged(false)); });
1006
+ i0.ɵɵelementStart(1, "mj-action-test-harness", 154);
1007
+ i0.ɵɵlistener("visibilityChange", function ActionFormComponentExtended_Conditional_2_Template_mj_action_test_harness_visibilityChange_1_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged($event)); });
1008
+ i0.ɵɵelementEnd()();
1009
+ } if (rf & 2) {
1010
+ const ctx_r1 = i0.ɵɵnextContext();
1011
+ i0.ɵɵpropertyInterpolate1("title", "Run Action - ", ctx_r1.record.Name || "Untitled", "");
1012
+ i0.ɵɵproperty("width", 1200)("height", 800)("minWidth", 800)("minHeight", 600)("draggable", true)("resizable", true)("state", "default");
1013
+ i0.ɵɵadvance();
1014
+ i0.ɵɵproperty("action", ctx_r1.record)("actionParams", ctx_r1.actionParams)("isVisible", ctx_r1.showTestHarness);
1015
+ } }
1016
+ let ActionFormComponentExtended = class ActionFormComponentExtended extends ActionFormComponent {
1017
+ constructor(elementRef, sharedService, router, route, cdr, dialogService) {
1018
+ super(elementRef, sharedService, router, route, cdr);
1019
+ this.cdr = cdr;
1020
+ this.dialogService = dialogService;
1021
+ // Related entities
1022
+ this.category = null;
1023
+ this.actionParams = [];
1024
+ this.resultCodes = [];
1025
+ this.recentExecutions = [];
1026
+ this.actionLibraries = [];
1027
+ this.libraries = [];
1028
+ // Cached filtered params
1029
+ this._inputParams = [];
1030
+ this._outputParams = [];
1031
+ // Track params to delete
1032
+ this.paramsToDelete = [];
1033
+ // Loading states
1034
+ this.isLoadingParams = false;
1035
+ this.isLoadingResultCodes = false;
1036
+ this.isLoadingExecutions = false;
1037
+ this.isLoadingLibraries = false;
1038
+ // UI state
1039
+ this.expandedSections = {
1040
+ overview: true,
1041
+ code: true,
1042
+ params: true,
1043
+ resultCodes: true,
1044
+ execution: false,
1045
+ configuration: false
1046
+ };
1047
+ // Test harness state
1048
+ this.showTestHarness = false;
1049
+ // Execution stats
1050
+ this.executionStats = {
1051
+ totalRuns: 0,
1052
+ successRate: 0,
1053
+ avgDuration: 0,
1054
+ lastRun: null
1055
+ };
1056
+ // Code editor config
1057
+ this.codeLanguage = 'typescript';
1058
+ this.showCodeComments = false;
1059
+ }
1060
+ async ngOnInit() {
1061
+ await super.ngOnInit();
1062
+ if (this.record?.IsSaved) {
1063
+ // Load all related data in parallel
1064
+ await Promise.all([
1065
+ this.loadCategory(),
1066
+ this.loadActionParams(),
1067
+ this.loadResultCodes(),
1068
+ this.loadRecentExecutions(),
1069
+ this.loadActionLibraries(),
1070
+ this.loadExecutionStats()
1071
+ ]);
1072
+ }
1073
+ }
1074
+ async loadCategory() {
1075
+ if (!this.record.CategoryID)
1076
+ return;
1077
+ try {
1078
+ const md = new Metadata();
1079
+ this.category = await md.GetEntityObject('Action Categories');
1080
+ if (this.category) {
1081
+ await this.category.Load(this.record.CategoryID);
1082
+ }
1083
+ }
1084
+ catch (error) {
1085
+ // Error loading category
1086
+ }
1087
+ }
1088
+ async loadActionParams() {
1089
+ this.isLoadingParams = true;
1090
+ try {
1091
+ const rv = new RunView();
1092
+ const result = await rv.RunView({
1093
+ EntityName: 'Action Params',
1094
+ ExtraFilter: `ActionID='${this.record.ID}'`,
1095
+ OrderBy: 'Name',
1096
+ ResultType: 'entity_object'
1097
+ });
1098
+ if (result.Success) {
1099
+ this.actionParams = result.Results || [];
1100
+ // Update cached filtered params - trim and lowercase Type values to handle any whitespace and case
1101
+ this._inputParams = this.actionParams.filter(p => {
1102
+ const type = p.Type?.trim().toLowerCase();
1103
+ return type === 'input' || type === 'both';
1104
+ });
1105
+ this._outputParams = this.actionParams.filter(p => {
1106
+ const type = p.Type?.trim().toLowerCase();
1107
+ return type === 'output' || type === 'both';
1108
+ });
1109
+ }
1110
+ else {
1111
+ // Failed to load action params
1112
+ this.actionParams = [];
1113
+ this._inputParams = [];
1114
+ this._outputParams = [];
1115
+ }
1116
+ }
1117
+ catch (error) {
1118
+ // Error loading action params
1119
+ this.actionParams = [];
1120
+ this._inputParams = [];
1121
+ this._outputParams = [];
1122
+ }
1123
+ finally {
1124
+ this.isLoadingParams = false;
1125
+ this.cdr.detectChanges(); // Force change detection
1126
+ }
1127
+ }
1128
+ async loadResultCodes() {
1129
+ this.isLoadingResultCodes = true;
1130
+ try {
1131
+ const rv = new RunView();
1132
+ const result = await rv.RunView({
1133
+ EntityName: 'Action Result Codes',
1134
+ ExtraFilter: `ActionID='${this.record.ID}'`,
1135
+ OrderBy: 'IsSuccess DESC, ResultCode',
1136
+ ResultType: 'entity_object'
1137
+ });
1138
+ if (result.Success) {
1139
+ this.resultCodes = result.Results || [];
1140
+ }
1141
+ else {
1142
+ // Failed to load result codes
1143
+ this.resultCodes = [];
1144
+ }
1145
+ }
1146
+ catch (error) {
1147
+ // Error loading result codes
1148
+ this.resultCodes = [];
1149
+ }
1150
+ finally {
1151
+ this.isLoadingResultCodes = false;
1152
+ }
1153
+ }
1154
+ async loadRecentExecutions() {
1155
+ this.isLoadingExecutions = true;
1156
+ try {
1157
+ const rv = new RunView();
1158
+ const result = await rv.RunView({
1159
+ EntityName: 'Action Execution Logs',
1160
+ ExtraFilter: `ActionID='${this.record.ID}'`,
1161
+ OrderBy: 'StartedAt DESC',
1162
+ MaxRows: 10,
1163
+ ResultType: 'entity_object'
1164
+ });
1165
+ if (result.Success) {
1166
+ this.recentExecutions = result.Results || [];
1167
+ }
1168
+ else {
1169
+ // Failed to load executions
1170
+ this.recentExecutions = [];
1171
+ }
1172
+ }
1173
+ catch (error) {
1174
+ // Error loading executions
1175
+ this.recentExecutions = [];
1176
+ }
1177
+ finally {
1178
+ this.isLoadingExecutions = false;
1179
+ }
1180
+ }
1181
+ async loadActionLibraries() {
1182
+ this.isLoadingLibraries = true;
1183
+ try {
1184
+ const rv = new RunView();
1185
+ const result = await rv.RunView({
1186
+ EntityName: 'Action Libraries',
1187
+ ExtraFilter: `ActionID='${this.record.ID}'`,
1188
+ OrderBy: 'Library',
1189
+ ResultType: 'entity_object'
1190
+ });
1191
+ if (result.Success) {
1192
+ this.actionLibraries = result.Results || [];
1193
+ // Load library details
1194
+ if (this.actionLibraries.length > 0) {
1195
+ const libraryIds = this.actionLibraries.map(al => al.LibraryID).filter(id => id);
1196
+ const md = new Metadata();
1197
+ this.libraries = [];
1198
+ for (const libId of libraryIds) {
1199
+ const lib = await md.GetEntityObject('Libraries');
1200
+ if (lib && libId) {
1201
+ await lib.Load(libId);
1202
+ this.libraries.push(lib);
1203
+ }
1204
+ }
1205
+ }
1206
+ }
1207
+ }
1208
+ catch (error) {
1209
+ // Error loading libraries
1210
+ }
1211
+ finally {
1212
+ this.isLoadingLibraries = false;
1213
+ }
1214
+ }
1215
+ async loadExecutionStats() {
1216
+ try {
1217
+ const rv = new RunView();
1218
+ // Load ALL executions for accurate statistics
1219
+ const result = await rv.RunView({
1220
+ EntityName: 'Action Execution Logs',
1221
+ ExtraFilter: `ActionID='${this.record.ID}'`,
1222
+ OrderBy: 'StartedAt DESC',
1223
+ ResultType: 'entity_object'
1224
+ });
1225
+ if (result.Success && result.Results && result.Results.length > 0) {
1226
+ const allExecutions = result.Results;
1227
+ this.executionStats.totalRuns = allExecutions.length;
1228
+ // Calculate success rate based on result codes
1229
+ const successfulRuns = allExecutions.filter(e => {
1230
+ const resultCode = this.resultCodes.find(rc => rc.ResultCode === e.ResultCode);
1231
+ return resultCode?.IsSuccess || false;
1232
+ });
1233
+ this.executionStats.successRate = this.executionStats.totalRuns > 0
1234
+ ? (successfulRuns.length / this.executionStats.totalRuns) * 100
1235
+ : 0;
1236
+ // Calculate average duration from ALL completed executions
1237
+ const completedExecutions = allExecutions.filter(e => e.StartedAt && e.EndedAt);
1238
+ if (completedExecutions.length > 0) {
1239
+ const totalDuration = completedExecutions.reduce((sum, e) => {
1240
+ const duration = new Date(e.EndedAt).getTime() - new Date(e.StartedAt).getTime();
1241
+ // Use absolute value to handle any swapped dates
1242
+ return sum + Math.abs(duration);
1243
+ }, 0);
1244
+ this.executionStats.avgDuration = totalDuration / completedExecutions.length;
1245
+ }
1246
+ // Get last run date from most recent execution
1247
+ this.executionStats.lastRun = new Date(allExecutions[0].StartedAt);
1248
+ }
1249
+ }
1250
+ catch (error) {
1251
+ // Error loading execution stats
1252
+ }
1253
+ }
1254
+ // UI Helper Methods
1255
+ getStatusColor() {
1256
+ switch (this.record.Status) {
1257
+ case 'Active': return '#28a745';
1258
+ case 'Pending': return '#ffc107';
1259
+ case 'Disabled': return '#dc3545';
1260
+ default: return '#6c757d';
1261
+ }
1262
+ }
1263
+ getStatusIcon() {
1264
+ switch (this.record.Status) {
1265
+ case 'Active': return 'fa-check-circle';
1266
+ case 'Pending': return 'fa-clock';
1267
+ case 'Disabled': return 'fa-ban';
1268
+ default: return 'fa-question-circle';
1269
+ }
1270
+ }
1271
+ getTypeColor() {
1272
+ return this.record.Type === 'Generated' ? '#6f42c1' : '#007bff';
1273
+ }
1274
+ getTypeIcon() {
1275
+ return this.record.Type === 'Generated' ? 'fa-robot' : 'fa-code';
1276
+ }
1277
+ getApprovalStatusColor() {
1278
+ switch (this.record.CodeApprovalStatus) {
1279
+ case 'Approved': return '#28a745';
1280
+ case 'Pending': return '#ffc107';
1281
+ case 'Rejected': return '#dc3545';
1282
+ default: return '#6c757d';
1283
+ }
1284
+ }
1285
+ getApprovalStatusIcon() {
1286
+ switch (this.record.CodeApprovalStatus) {
1287
+ case 'Approved': return 'fa-check-circle';
1288
+ case 'Pending': return 'fa-clock';
1289
+ case 'Rejected': return 'fa-times-circle';
1290
+ default: return 'fa-question-circle';
1291
+ }
1292
+ }
1293
+ getParamTypeIcon(type) {
1294
+ switch (type) {
1295
+ case 'Input': return 'fa-sign-in-alt';
1296
+ case 'Output': return 'fa-sign-out-alt';
1297
+ case 'Both': return 'fa-exchange-alt';
1298
+ default: return 'fa-question';
1299
+ }
1300
+ }
1301
+ getParamTypeColor(type) {
1302
+ switch (type) {
1303
+ case 'Input': return '#007bff';
1304
+ case 'Output': return '#28a745';
1305
+ case 'Both': return '#6f42c1';
1306
+ default: return '#6c757d';
1307
+ }
1308
+ }
1309
+ formatDuration(ms) {
1310
+ if (ms < 1000)
1311
+ return `${ms}ms`;
1312
+ if (ms < 60000)
1313
+ return `${(ms / 1000).toFixed(1)}s`;
1314
+ return `${(ms / 60000).toFixed(1)}m`;
1315
+ }
1316
+ formatDate(date) {
1317
+ if (!date)
1318
+ return 'Never';
1319
+ const d = typeof date === 'string' ? new Date(date) : date;
1320
+ const now = new Date();
1321
+ const diff = now.getTime() - d.getTime();
1322
+ if (diff < 60000)
1323
+ return 'Just now';
1324
+ if (diff < 3600000)
1325
+ return `${Math.floor(diff / 60000)}m ago`;
1326
+ if (diff < 86400000)
1327
+ return `${Math.floor(diff / 3600000)}h ago`;
1328
+ if (diff < 604800000)
1329
+ return `${Math.floor(diff / 86400000)}d ago`;
1330
+ return d.toLocaleDateString();
1331
+ }
1332
+ // Navigation
1333
+ navigateToEntity(entityName, recordId) {
1334
+ if (!recordId)
1335
+ return;
1336
+ SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromID(recordId));
1337
+ }
1338
+ navigateToCategory() {
1339
+ if (this.record.CategoryID) {
1340
+ this.navigateToEntity('Action Categories', this.record.CategoryID);
1341
+ }
1342
+ }
1343
+ navigateToExecution(executionId) {
1344
+ this.navigateToEntity('Action Execution Logs', executionId);
1345
+ }
1346
+ navigateToLibrary(libraryId) {
1347
+ this.navigateToEntity('Libraries', libraryId);
1348
+ }
1349
+ // Actions
1350
+ openTestHarness() {
1351
+ if (!this.record || !this.record.ID || !this.record.IsSaved || this.record.Status !== 'Active') {
1352
+ // Cannot open test harness: Action must be saved and active
1353
+ return;
1354
+ }
1355
+ this.showTestHarness = true;
1356
+ }
1357
+ /**
1358
+ * Event handler for test harness visibility changes
1359
+ */
1360
+ onTestHarnessVisibilityChanged(isVisible) {
1361
+ this.showTestHarness = isVisible;
1362
+ }
1363
+ async regenerateCode() {
1364
+ if (!this.EditMode)
1365
+ return;
1366
+ this.record.ForceCodeGeneration = true;
1367
+ await this.record.Save();
1368
+ // Reload related data after save
1369
+ await this.loadResultCodes();
1370
+ }
1371
+ toggleCodeComments() {
1372
+ this.showCodeComments = !this.showCodeComments;
1373
+ }
1374
+ async approveCode() {
1375
+ if (!this.EditMode)
1376
+ return;
1377
+ this.record.CodeApprovalStatus = 'Approved';
1378
+ this.record.CodeApprovedAt = new Date();
1379
+ // Note: CodeApprovedByUserID would be set server-side
1380
+ await this.record.Save();
1381
+ }
1382
+ async rejectCode() {
1383
+ if (!this.EditMode)
1384
+ return;
1385
+ this.record.CodeApprovalStatus = 'Rejected';
1386
+ await this.record.Save();
1387
+ }
1388
+ toggleSection(section) {
1389
+ this.expandedSections[section] = !this.expandedSections[section];
1390
+ }
1391
+ async copyToClipboard(text) {
1392
+ try {
1393
+ await navigator.clipboard.writeText(text);
1394
+ // Could add a notification here
1395
+ }
1396
+ catch (err) {
1397
+ // Failed to copy
1398
+ }
1399
+ }
1400
+ // Helper methods for template filtering
1401
+ getInputParams() {
1402
+ // Sort by IsRequired (required first) then by Name
1403
+ return this._inputParams.sort((a, b) => {
1404
+ if (a.IsRequired === b.IsRequired) {
1405
+ return (a.Name || '').localeCompare(b.Name || '');
1406
+ }
1407
+ return a.IsRequired ? -1 : 1;
1408
+ });
1409
+ }
1410
+ getOutputParams() {
1411
+ // Sort by Name
1412
+ return this._outputParams.sort((a, b) => (a.Name || '').localeCompare(b.Name || ''));
1413
+ }
1414
+ isExecutionSuccess(execution) {
1415
+ const code = execution.ResultCode?.toLowerCase();
1416
+ // First check if we have a result code definition
1417
+ const resultCode = this.resultCodes.find(rc => rc.ResultCode === execution.ResultCode);
1418
+ if (resultCode) {
1419
+ return resultCode.IsSuccess;
1420
+ }
1421
+ // Fallback to common success patterns if no result code defined
1422
+ return code === 'success' || code === 'ok' || code === 'completed' || code === '200';
1423
+ }
1424
+ getExecutionDuration(execution) {
1425
+ if (!execution.EndedAt)
1426
+ return 0;
1427
+ const startTime = new Date(execution.StartedAt).getTime();
1428
+ const endTime = new Date(execution.EndedAt).getTime();
1429
+ const duration = endTime - startTime;
1430
+ // Return absolute value to handle timezone mismatches
1431
+ return Math.abs(duration);
1432
+ }
1433
+ getSuccessRateColor() {
1434
+ const rate = this.executionStats.successRate;
1435
+ if (rate >= 80)
1436
+ return '#28a745'; // green
1437
+ if (rate >= 60)
1438
+ return '#ffc107'; // yellow
1439
+ return '#dc3545'; // red
1440
+ }
1441
+ // Parameter management methods
1442
+ async addParameter(type) {
1443
+ if (!this.EditMode || !this.record.IsSaved)
1444
+ return;
1445
+ const md = new Metadata();
1446
+ const newParam = await md.GetEntityObject('Action Params');
1447
+ // Set default values
1448
+ newParam.ActionID = this.record.ID;
1449
+ newParam.Name = '';
1450
+ newParam.Type = type;
1451
+ newParam.ValueType = 'Scalar';
1452
+ newParam.IsRequired = false;
1453
+ newParam.IsArray = false;
1454
+ const dialogRef = this.dialogService.open({
1455
+ content: ActionParamDialogComponent,
1456
+ width: 500,
1457
+ appendTo: this.elementRef.nativeElement
1458
+ });
1459
+ const dialog = dialogRef.content.instance;
1460
+ dialog.param = newParam;
1461
+ dialog.isNew = true;
1462
+ dialog.editMode = true;
1463
+ dialogRef.result.subscribe(result => {
1464
+ if (result && result.save) {
1465
+ // Add to local array and mark as new/dirty
1466
+ this.actionParams.push(newParam);
1467
+ // New params are not saved yet, they'll be detected by !IsSaved
1468
+ // Update the filtered arrays
1469
+ this.updateParamArrays();
1470
+ this.cdr.detectChanges();
1471
+ }
1472
+ });
1473
+ }
1474
+ async editParameter(param) {
1475
+ const dialogRef = this.dialogService.open({
1476
+ content: ActionParamDialogComponent,
1477
+ width: 500,
1478
+ appendTo: this.elementRef.nativeElement
1479
+ });
1480
+ const dialog = dialogRef.content.instance;
1481
+ dialog.param = param;
1482
+ dialog.isNew = false;
1483
+ dialog.editMode = this.EditMode;
1484
+ dialogRef.result.subscribe(result => {
1485
+ if (result && result.save && this.EditMode) {
1486
+ // Param will be dirty from property changes in dialog
1487
+ // Update the local arrays
1488
+ this.updateParamArrays();
1489
+ this.cdr.detectChanges();
1490
+ }
1491
+ });
1492
+ }
1493
+ onParamClick(param, event) {
1494
+ // Prevent event bubbling if clicking on edit/delete buttons
1495
+ const target = event.target;
1496
+ if (target.closest('.param-edit-btn') || target.closest('.param-delete-btn')) {
1497
+ return;
1498
+ }
1499
+ // Show the parameter dialog
1500
+ this.editParameter(param);
1501
+ }
1502
+ async deleteParameter(param) {
1503
+ if (!this.EditMode)
1504
+ return;
1505
+ if (confirm(`Are you sure you want to delete parameter "${param.Name}"?`)) {
1506
+ if (param.IsSaved) {
1507
+ // Track for deletion using a separate array
1508
+ if (!this.paramsToDelete)
1509
+ this.paramsToDelete = [];
1510
+ this.paramsToDelete.push(param);
1511
+ }
1512
+ else {
1513
+ // Remove from local array if it's new
1514
+ const index = this.actionParams.indexOf(param);
1515
+ if (index > -1) {
1516
+ this.actionParams.splice(index, 1);
1517
+ }
1518
+ }
1519
+ // Update the filtered arrays
1520
+ await this.updateParamArrays();
1521
+ this.cdr.detectChanges();
1522
+ }
1523
+ }
1524
+ async updateParamArrays() {
1525
+ // Update cached filtered params - exclude deleted items
1526
+ const activeParams = this.actionParams.filter(p => !this.paramsToDelete || !this.paramsToDelete.includes(p));
1527
+ this._inputParams = activeParams.filter(p => {
1528
+ const type = p.Type?.trim().toLowerCase();
1529
+ return type === 'input' || type === 'both';
1530
+ });
1531
+ this._outputParams = activeParams.filter(p => {
1532
+ const type = p.Type?.trim().toLowerCase();
1533
+ return type === 'output' || type === 'both';
1534
+ });
1535
+ }
1536
+ // Override to populate pending records with our action params
1537
+ PopulatePendingRecords() {
1538
+ super.PopulatePendingRecords();
1539
+ // Add our action params to pending records
1540
+ if (this.actionParams && this.actionParams.length > 0) {
1541
+ for (const param of this.actionParams) {
1542
+ if (param.Dirty || (this.paramsToDelete && this.paramsToDelete.includes(param)) || !param.IsSaved) {
1543
+ const action = (this.paramsToDelete && this.paramsToDelete.includes(param)) ? 'delete' : 'save';
1544
+ this.PendingRecords.push({
1545
+ entityObject: param,
1546
+ action: action
1547
+ });
1548
+ }
1549
+ }
1550
+ }
1551
+ }
1552
+ static { this.ɵfac = function ActionFormComponentExtended_Factory(t) { return new (t || ActionFormComponentExtended)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.SharedService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i3.DialogService)); }; }
1553
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActionFormComponentExtended, selectors: [["mj-action-form"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 4, consts: [["form", "ngForm"], ["mjFillContainer", "", 1, "record-form-container", 3, "bottomMargin", "rightMargin"], ["mjFillContainer", "", 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"], ["themeColor", "primary", "size", "large", "title", "Open Run Harness", 3, "disabled"], ["themeColor", "info", "size", "medium", "title", "Regenerate Code"], [2, "font-size", "0.75em", "color", "#dc3545", "text-align", "right"], [1, "configuration-sections", 2, "flex", "1", "background", "white", "border-top", "2px solid #e9ecef", "padding", "16px", "min-height", "0"], [2, "margin-bottom", "12px", 3, "expanded"], ["kendoExpansionPanelTitleDirective", ""], [2, "padding", "16px"], [1, "loading-state"], [1, "empty-state", 2, "padding", "30px", "text-align", "center"], [1, "result-codes-grid"], ["name", "actionName", "placeholder", "Enter action name...", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModelChange", "ngModel"], [2, "margin", "0", "color", "#495057", "font-weight", "600", "flex", "1"], [1, "status-badge", 2, "color", "white", "padding", "4px 10px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], [2, "display", "block", "margin-bottom", "4px", "font-weight", "600", "color", "#495057", "font-size", "0.9em"], ["name", "actionStatus", "textField", "text", "valueField", "value", 2, "width", "150px", 3, "ngModelChange", "ngModel", "data", "valuePrimitive"], [2, "color", "#dc3545"], ["name", "actionType", "textField", "text", "valueField", "value", 2, "width", "150px", 3, "ngModelChange", "ngModel", "data", "valuePrimitive"], ["name", "categoryID", "placeholder", "Select category...", 2, "width", "200px", 3, "ngModelChange", "ngModel", "data"], ["name", "actionDescription", "placeholder", "Enter action description...", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-folder", 2, "color", "#6c757d"], [2, "color", "#495057", "font-weight", "500", "cursor", "pointer", 3, "click"], [1, "fa-solid", "fa-external-link", 2, "font-size", "0.75em", "margin-left", "4px"], [2, "font-weight", "500"], [1, "fa-solid", "fa-sliders", 2, "color", "#6c757d"], ["themeColor", "primary", "size", "large", "title", "Open Run Harness", 3, "click", "disabled"], [1, "fa-solid", "fa-play"], ["themeColor", "info", "size", "medium", "title", "Regenerate Code", 3, "click"], [1, "fa-solid", "fa-robot"], ["themeColor", "success", "size", "small", 3, "click"], [1, "fa-solid", "fa-check"], ["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"], ["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"], ["fillMode", "flat", "size", "small", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "fa-solid", "fa-inbox", 2, "font-size", "2em", "color", "#6c757d", "opacity", "0.3"], [1, "param-card", 3, "required", "clickable"], [1, "param-card", 3, "click"], [1, "param-header"], [1, "param-name"], [1, "param-badges"], [1, "required-badge"], [1, "array-badge"], [1, "param-details"], [1, "param-type"], [1, "param-description"], [1, "param-default"], ["title", "Edit parameter", 1, "param-edit-btn", 3, "click"], [1, "fa-solid", "fa-edit"], ["title", "Delete parameter", 1, "param-delete-btn", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "default-label"], [1, "param-card", 3, "clickable"], [1, "generation-panel"], [1, "code-editor-section"], [1, "code-toolbar"], [1, "fa-solid", "fa-file-code"], [1, "code-actions"], [1, "fa-solid", "fa-copy"], ["name", "actionCode", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "code-comments"], [1, "approval-comments"], [1, "fa-solid", "fa-code", 2, "color", "#6c757d"], [2, "background", "#ffc107", "color", "#856404", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [1, "fa-solid", "fa-lock"], [1, "prompt-section"], ["name", "userPrompt", "placeholder", "Describe what this action should do...", 2, "width", "100%", "min-height", "120px", 3, "ngModelChange", "ngModel", "rows"], [1, "comments-section"], ["name", "userComments", "placeholder", "Internal notes...", 2, "width", "100%", 3, "ngModelChange", "ngModel", "rows"], [1, "generation-controls"], ["name", "codeLocked", 3, "ngModelChange", "ngModel"], [2, "margin-left", "8px"], [1, "fa-solid", "fa-comment"], ["name", "codeApprovalComments", "placeholder", "Explain why the code was rejected...", 2, "width", "100%", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-flag-checkered", 2, "color", "#6c757d"], [2, "background", "#28a745", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [1, "fa-solid", "fa-flag-checkered", 2, "font-size", "2em", "color", "#6c757d", "opacity", "0.3"], [1, "result-code-card", 3, "success", "failure"], [1, "result-code-card"], [1, "result-icon"], [1, "result-content"], [1, "result-code"], [1, "result-description"], [1, "fa-solid", "fa-chart-line", 2, "color", "#6c757d"], [1, "fa-solid", "fa-chart-line", 2, "font-size", "2em", "color", "#6c757d", "opacity", "0.3"], [1, "execution-stats-row"], [1, "stat-box"], [1, "fa-solid", "fa-tachometer-alt"], [1, "stat-info"], [1, "stat-label", 2, "color", "#212529"], [1, "stat-value", 2, "color", "#212529"], [1, "fa-solid", "fa-check-circle"], [1, "stat-value", 2, "font-weight", "600"], [1, "fa-solid", "fa-play-circle"], [2, "margin-top", "24px"], [1, "fa-solid", "fa-history"], [1, "executions-table"], [1, "execution-row", 3, "success"], [1, "execution-row"], [1, "running"], [1, "fa-solid", "fa-external-link"], [1, "config-subsection"], [1, "fa-solid", "fa-book"], [1, "empty-state", "mini"], [1, "library-cards"], [1, "related-entities-grid"], [1, "related-entity-link"], [1, "fa-solid", "fa-shield-alt"], [1, "entity-count"], [1, "fa-solid", "fa-layer-group"], [1, "fa-solid", "fa-calendar"], [1, "fa-solid", "fa-cube"], [1, "fa-solid", "fa-cogs", 2, "color", "#6c757d"], [1, "library-card"], [1, "library-card", 3, "click"], [1, "library-info"], [1, "library-name"], [1, "library-items"], [3, "close", "width", "height", "minWidth", "minHeight", "draggable", "resizable", "state", "title"], [3, "visibilityChange", "action", "actionParams", "isVisible"]], template: function ActionFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
1554
+ i0.ɵɵelementStart(0, "div", 1);
1555
+ i0.ɵɵtemplate(1, ActionFormComponentExtended_Conditional_1_Template, 46, 23, "form", 2);
1556
+ i0.ɵɵelementEnd();
1557
+ i0.ɵɵtemplate(2, ActionFormComponentExtended_Conditional_2_Template, 2, 12, "kendo-window", 3);
1558
+ } if (rf & 2) {
1559
+ i0.ɵɵproperty("bottomMargin", 20)("rightMargin", 5);
1560
+ i0.ɵɵadvance();
1561
+ i0.ɵɵconditional(ctx.record ? 1 : -1);
1562
+ i0.ɵɵadvance();
1563
+ 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.FillContainer, i11.CodeEditorComponent, i12.ActionTestHarnessComponent, i13.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}"] }); }
1565
+ };
1566
+ ActionFormComponentExtended = __decorate([
1567
+ RegisterClass(BaseFormComponent, 'Actions')
1568
+ ], ActionFormComponentExtended);
1569
+ export { ActionFormComponentExtended };
1570
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ActionFormComponentExtended, [{
1571
+ type: Component,
1572
+ args: [{ selector: 'mj-action-form', template: "<div class=\"record-form-container\" mjFillContainer [bottomMargin]=\"20\" [rightMargin]=\"5\">\n @if (record) {\n <form class=\"record-form\" #form=\"ngForm\" mjFillContainer>\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]=\"'fa-solid ' + getTypeIcon()\" [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 <kendo-button 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 </kendo-button>\n }\n @if (EditMode && record.Type === 'Generated') {\n <kendo-button themeColor=\"info\" size=\"medium\"\n (click)=\"regenerateCode()\"\n title=\"Regenerate Code\">\n <i class=\"fa-solid fa-robot\"></i> Regenerate\n </kendo-button>\n }\n </div>\n \n @if (EditMode && record.CodeApprovalStatus === 'Pending' && record.Type === 'Generated') {\n <div style=\"display: flex; gap: 8px;\">\n <kendo-button themeColor=\"success\" size=\"small\"\n (click)=\"approveCode()\">\n <i class=\"fa-solid fa-check\"></i> Approve\n </kendo-button>\n <kendo-button themeColor=\"error\" size=\"small\"\n (click)=\"rejectCode()\">\n <i class=\"fa-solid fa-times\"></i> Reject\n </kendo-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 <kendo-button fillMode=\"flat\" size=\"small\" (click)=\"addParameter('Input')\">\n <i class=\"fa-solid fa-plus\"></i> Add Input\n </kendo-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 <kendo-button fillMode=\"flat\" size=\"small\" (click)=\"addParameter('Output')\">\n <i class=\"fa-solid fa-plus\"></i> Add Output\n </kendo-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 <kendo-button fillMode=\"flat\" size=\"small\" (click)=\"toggleCodeComments()\">\n <i class=\"fa-solid fa-comment\"></i> \n {{ showCodeComments ? 'Hide' : 'Show' }} AI Comments\n </kendo-button>\n }\n <kendo-button fillMode=\"flat\" size=\"small\" (click)=\"copyToClipboard(record.Code || '')\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </kendo-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 <kendo-button fillMode=\"flat\" size=\"small\" (click)=\"navigateToExecution(execution.ID)\">\n <i class=\"fa-solid fa-external-link\"></i>\n </kendo-button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Related Configuration Section -->\n @if (record.IsSaved) {\n <kendo-expansionpanel \n [expanded]=\"expandedSections.configuration\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-cogs\" style=\"color: #6c757d;\"></i>\n Related Configuration\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n <!-- Libraries -->\n <div class=\"config-subsection\">\n <h3><i class=\"fa-solid fa-book\"></i> Libraries</h3>\n @if (isLoadingLibraries) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading libraries...\n </div>\n } @else if (actionLibraries.length === 0) {\n <div class=\"empty-state mini\">\n <p>No libraries configured</p>\n </div>\n } @else {\n <div class=\"library-cards\">\n @for (lib of libraries; track lib.ID; let i = $index) {\n <div class=\"library-card\" (click)=\"navigateToLibrary(lib.ID)\">\n <i class=\"fa-solid fa-book\"></i>\n <div class=\"library-info\">\n <div class=\"library-name\">{{ lib.Name }}</div>\n @if (actionLibraries[i].ItemsUsed) {\n <div class=\"library-items\">{{ actionLibraries[i].ItemsUsed }}</div>\n }\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Other Related Entities -->\n <div class=\"related-entities-grid\">\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-shield-alt\"></i>\n <span>Authorizations</span>\n <span class=\"entity-count\">View</span>\n </div>\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-layer-group\"></i>\n <span>Contexts</span>\n <span class=\"entity-count\">View</span>\n </div>\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-calendar\"></i>\n <span>Scheduled Actions</span>\n <span class=\"entity-count\">View</span>\n </div>\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-cube\"></i>\n <span>Entity Actions</span>\n <span class=\"entity-count\">View</span>\n </div>\n </div>\n </div>\n </kendo-expansionpanel>\n }\n </div>\n </div>\n </form>\n }\n</div>\n\n<!-- Action Test Harness -->\n@if (showTestHarness) {\n <kendo-window \n [width]=\"1200\" \n [height]=\"800\" \n [minWidth]=\"800\"\n [minHeight]=\"600\"\n [draggable]=\"true\"\n [resizable]=\"true\"\n [state]=\"'default'\"\n (close)=\"onTestHarnessVisibilityChanged(false)\"\n title=\"Run Action - {{ record.Name || 'Untitled' }}\">\n <mj-action-test-harness\n [action]=\"record\"\n [actionParams]=\"actionParams\"\n [isVisible]=\"showTestHarness\"\n (visibilityChange)=\"onTestHarnessVisibilityChanged($event)\">\n </mj-action-test-harness>\n </kendo-window>\n}", styles: ["/* Hero Header Section */\n.action-hero-header {\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n padding: 32px;\n margin: -20px -20px 24px -20px;\n border-radius: 0 0 16px 16px;\n box-shadow: 0 4px 20px rgba(0,0,0,0.1);\n}\n\n.hero-content {\n max-width: 1400px;\n margin: 0 auto;\n}\n\n.action-identity {\n display: flex;\n align-items: flex-start;\n gap: 24px;\n margin-bottom: 24px;\n}\n\n.action-icon-wrapper {\n width: 80px;\n height: 80px;\n border-radius: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: rgba(255,255,255,0.2);\n backdrop-filter: blur(10px);\n}\n\n.action-icon-wrapper i {\n font-size: 36px;\n}\n\n.action-info {\n flex: 1;\n min-width: 0;\n}\n\n.action-title-row {\n display: flex;\n align-items: center;\n gap: 16px;\n margin-bottom: 12px;\n flex-wrap: wrap;\n}\n\n.action-title {\n margin: 0;\n font-size: 2em;\n font-weight: 600;\n color: white;\n}\n\n.action-name-input {\n font-size: 1.8em;\n font-weight: 600;\n background: rgba(255,255,255,0.2);\n border: 2px solid rgba(255,255,255,0.3);\n color: white;\n padding: 8px 16px;\n border-radius: 8px;\n min-width: 400px;\n}\n\n.action-name-input::placeholder {\n color: rgba(255,255,255,0.6);\n}\n\n.action-badges {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.status-badge, .type-badge, .approval-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n font-size: 0.85em;\n font-weight: 500;\n background: rgba(255,255,255,0.2);\n backdrop-filter: blur(10px);\n border: 1px solid rgba(255,255,255,0.3);\n}\n\n.action-category {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n color: rgba(255,255,255,0.9);\n font-size: 0.95em;\n cursor: pointer;\n transition: all 0.2s;\n margin-bottom: 12px;\n}\n\n.action-category:hover {\n color: white;\n transform: translateX(4px);\n}\n\n.action-description {\n color: rgba(255,255,255,0.9);\n font-size: 1.05em;\n line-height: 1.5;\n margin: 0;\n}\n\n.action-description-input {\n width: 100%;\n max-width: 600px;\n background: rgba(255,255,255,0.2);\n border: 2px solid rgba(255,255,255,0.3);\n color: white;\n border-radius: 8px;\n}\n\n.action-description-input::placeholder {\n color: rgba(255,255,255,0.6);\n}\n\n/* Quick Stats */\n.action-stats {\n display: flex;\n gap: 24px;\n margin-bottom: 24px;\n flex-wrap: wrap;\n}\n\n.stat-card {\n background: rgba(255,255,255,0.1);\n backdrop-filter: blur(10px);\n border: 1px solid rgba(255,255,255,0.2);\n border-radius: 12px;\n padding: 16px 24px;\n display: flex;\n align-items: center;\n gap: 16px;\n min-width: 160px;\n}\n\n.stat-card i {\n font-size: 24px;\n color: rgba(255,255,255,0.8);\n}\n\n.stat-content {\n display: flex;\n flex-direction: column;\n}\n\n.stat-value {\n font-size: 1.4em;\n font-weight: 700;\n color: white;\n}\n\n.stat-label {\n font-size: 0.85em;\n color: rgba(255,255,255,0.7);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n/* Hero Actions */\n.hero-actions {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.hero-actions kendo-button {\n backdrop-filter: blur(10px);\n}\n\n/* Main Content Sections */\n.action-content {\n padding: 0 20px 20px;\n}\n\n.content-section {\n background: white;\n border: 1px solid #e9ecef;\n border-radius: 12px;\n margin-bottom: 20px;\n overflow: hidden;\n transition: all 0.3s ease;\n}\n\n.content-section:hover {\n box-shadow: 0 4px 12px rgba(0,0,0,0.08);\n}\n\n.section-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n background: #f8f9fa;\n cursor: pointer;\n user-select: none;\n transition: background 0.2s;\n}\n\n.section-header:hover {\n background: #e9ecef;\n}\n\n.section-header h2 {\n margin: 0;\n font-size: 1.3em;\n color: #2c3e50;\n flex: 1;\n}\n\n.section-header i:first-child {\n font-size: 1.2em;\n color: #6c757d;\n}\n\n.section-count {\n background: #007bff;\n color: white;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 0.85em;\n font-weight: 500;\n}\n\n.toggle-icon {\n color: #6c757d;\n transition: transform 0.3s;\n}\n\n.toggle-icon.rotated {\n transform: rotate(-90deg);\n}\n\n.section-content {\n padding: 24px;\n animation: slideDown 0.3s ease;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* Overview Section */\n.overview-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n}\n\n.overview-field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.overview-field label {\n font-weight: 600;\n color: #495057;\n font-size: 0.9em;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.required {\n color: #dc3545;\n}\n\n.full-width {\n width: 100%;\n}\n\n.overview-display {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 24px;\n}\n\n.display-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.display-field label {\n font-size: 0.85em;\n color: #6c757d;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.display-value {\n font-size: 1.1em;\n color: #2c3e50;\n}\n\n.display-value.code {\n font-family: 'Courier New', monospace;\n background: #f8f9fa;\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.approval-date {\n color: #6c757d;\n font-size: 0.85em;\n margin-left: 8px;\n}\n\n/* Code Section */\n.generation-panel {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 20px;\n margin-bottom: 24px;\n}\n\n.generation-panel h3 {\n margin: 0 0 16px 0;\n color: #6f42c1;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.prompt-section, .comments-section {\n margin-bottom: 16px;\n}\n\n.prompt-section label, .comments-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 600;\n color: #495057;\n}\n\n.generation-controls {\n display: flex;\n align-items: center;\n gap: 12px;\n padding-top: 12px;\n border-top: 1px solid #dee2e6;\n}\n\n.code-locked-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n background: #ffc107;\n color: #856404;\n border-radius: 12px;\n font-size: 0.8em;\n font-weight: 500;\n}\n\n.code-editor-section {\n border: 1px solid #e9ecef;\n border-radius: 8px;\n overflow: hidden;\n}\n\n.code-toolbar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n}\n\n.code-toolbar h3 {\n margin: 0;\n font-size: 1.1em;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.code-actions {\n display: flex;\n gap: 8px;\n}\n\n.code-comments {\n background: #e3f2fd;\n border: 1px solid #90caf9;\n border-radius: 8px;\n padding: 16px;\n margin-top: 16px;\n}\n\n.code-comments h4 {\n margin: 0 0 8px 0;\n color: #1976d2;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.code-comments p {\n margin: 0;\n color: #424242;\n line-height: 1.5;\n}\n\n.approval-comments {\n margin-top: 16px;\n}\n\n.approval-comments label {\n display: block;\n margin-bottom: 8px;\n font-weight: 600;\n color: #dc3545;\n}\n\n/* Parameters Section */\n.params-section {\n background: #f8f9fa;\n border-radius: 12px;\n padding: 20px;\n}\n\n.params-section.params-section-compact {\n padding: 12px 20px;\n}\n\n.params-section-compact .empty-state {\n padding: 12px !important;\n}\n\n.params-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.params-header h3 {\n margin: 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.params-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.param-card {\n background: white;\n border: 2px solid #e9ecef;\n border-radius: 8px;\n padding: 16px;\n transition: all 0.2s;\n}\n\n.param-card:hover {\n border-color: #007bff;\n box-shadow: 0 2px 8px rgba(0,123,255,0.1);\n}\n\n.param-card.required {\n border-color: #ffc107;\n}\n\n.param-card.clickable {\n cursor: pointer;\n}\n\n.param-card.clickable:hover {\n background: #e7f3ff;\n border-color: #2196f3;\n transform: translateY(-1px);\n}\n\n.param-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.param-name {\n font-weight: 600;\n color: #2c3e50;\n}\n\n.param-badges {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.param-edit-btn,\n.param-delete-btn {\n background: none;\n border: none;\n padding: 4px 8px;\n cursor: pointer;\n color: #6c757d;\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.param-edit-btn:hover {\n background: #e3f2fd;\n color: #2196f3;\n}\n\n.param-delete-btn:hover {\n background: #ffebee;\n color: #f44336;\n}\n\n.param-details {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.required-badge {\n background: #ffc107;\n color: #856404;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.array-badge {\n background: #6f42c1;\n color: white;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.param-type {\n color: #6c757d;\n font-size: 0.9em;\n margin-bottom: 8px;\n}\n\n.param-description {\n color: #495057;\n font-size: 0.9em;\n line-height: 1.4;\n margin-bottom: 8px;\n}\n\n.param-default {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid #e9ecef;\n}\n\n.default-label {\n color: #6c757d;\n font-size: 0.85em;\n}\n\n.param-default code {\n background: #f8f9fa;\n padding: 2px 6px;\n border-radius: 4px;\n font-family: 'Courier New', monospace;\n color: #e83e8c;\n}\n\n\n/* Result Codes Section */\n.result-codes-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.result-code-card {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n padding: 16px;\n border: 2px solid #e9ecef;\n border-radius: 8px;\n background: white;\n transition: all 0.2s;\n}\n\n.result-code-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(0,0,0,0.1);\n}\n\n.result-code-card.success {\n border-color: #28a745;\n background: #d4edda;\n}\n\n.result-code-card.failure {\n border-color: #dc3545;\n background: #f8d7da;\n}\n\n.result-icon {\n font-size: 1.5em;\n flex-shrink: 0;\n}\n\n.result-code-card.success .result-icon {\n color: #28a745;\n}\n\n.result-code-card.failure .result-icon {\n color: #dc3545;\n}\n\n.result-content {\n flex: 1;\n min-width: 0;\n}\n\n.result-code {\n font-weight: 600;\n color: #2c3e50;\n margin-bottom: 4px;\n font-family: 'Courier New', monospace;\n}\n\n.result-description {\n color: #495057;\n font-size: 0.9em;\n line-height: 1.4;\n}\n\n/* Execution Section */\n.execution-stats-row {\n display: flex;\n gap: 20px;\n margin-bottom: 32px;\n flex-wrap: wrap;\n}\n\n.stat-box {\n flex: 1;\n min-width: 200px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 20px;\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.stat-box i {\n font-size: 2em;\n color: #6c757d;\n}\n\n.stat-info {\n flex: 1;\n}\n\n.executions-table {\n overflow-x: auto;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n}\n\n.executions-table table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.executions-table th {\n background: #f8f9fa;\n padding: 12px;\n text-align: left;\n font-weight: 600;\n color: #495057;\n border-bottom: 2px solid #e9ecef;\n}\n\n.executions-table td {\n padding: 12px;\n border-bottom: 1px solid #e9ecef;\n}\n\n.execution-row {\n transition: background 0.2s;\n}\n\n.execution-row:hover {\n background: #f8f9fa;\n}\n\n.execution-row.success {\n background: #d4edda20;\n}\n\n.running {\n color: #ffc107;\n font-style: italic;\n}\n\n.result-code {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 0.85em;\n font-weight: 500;\n font-family: 'Courier New', monospace;\n}\n\n.result-code.success {\n background: #d4edda;\n color: #155724;\n}\n\n.result-code.failure {\n background: #f8d7da;\n color: #721c24;\n}\n\n/* Configuration Section */\n.config-subsection {\n margin-bottom: 32px;\n}\n\n.config-subsection h3 {\n margin: 0 0 16px 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.library-cards {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.library-card {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 16px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.library-card:hover {\n background: #e9ecef;\n transform: translateX(4px);\n}\n\n.library-card i:first-child {\n font-size: 1.5em;\n color: #6c757d;\n}\n\n.library-info {\n flex: 1;\n min-width: 0;\n}\n\n.library-name {\n font-weight: 600;\n color: #2c3e50;\n margin-bottom: 4px;\n}\n\n.library-items {\n color: #6c757d;\n font-size: 0.9em;\n font-family: 'Courier New', monospace;\n}\n\n.related-entities-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.related-entity-link {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.related-entity-link:hover {\n background: #e9ecef;\n border-color: #007bff;\n}\n\n.related-entity-link i {\n font-size: 1.2em;\n color: #6c757d;\n}\n\n.related-entity-link span:first-of-type {\n flex: 1;\n font-weight: 500;\n color: #495057;\n}\n\n.entity-count {\n color: #007bff;\n font-size: 0.9em;\n}\n\n/* Common States */\n.loading-state {\n text-align: center;\n padding: 60px;\n color: #6c757d;\n}\n\n.loading-state i {\n font-size: 2em;\n margin-bottom: 12px;\n}\n\n.empty-state {\n text-align: center;\n padding: 60px;\n color: #6c757d;\n}\n\n.empty-state.mini {\n padding: 20px;\n}\n\n.empty-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n.empty-hint {\n margin-top: 8px !important;\n font-size: 0.9em !important;\n opacity: 0.7;\n}\n\n.no-params {\n text-align: center;\n padding: 20px;\n color: #6c757d;\n font-style: italic;\n}\n\n.no-params p {\n margin: 0;\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n .action-hero-header {\n padding: 20px;\n }\n \n .action-identity {\n flex-direction: column;\n text-align: center;\n }\n \n .action-icon-wrapper {\n margin: 0 auto;\n }\n \n .action-title-row {\n justify-content: center;\n }\n \n .action-stats {\n justify-content: center;\n }\n \n .params-grid {\n grid-template-columns: 1fr;\n }\n}"] }]
1573
+ }], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i3.DialogService }], null); })();
1574
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionFormComponentExtended, { className: "ActionFormComponentExtended", filePath: "src/lib/custom/Actions/action-form.component.ts", lineNumber: 18 }); })();
1575
+ // Loader function required for the component to be properly registered
1576
+ export function LoadActionFormComponentExtended() {
1577
+ // This function is called to ensure the form is loaded and registered
1578
+ }
1579
+ //# sourceMappingURL=action-form.component.js.map