@memberjunction/ng-core-entity-forms 5.28.0 → 5.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +4 -0
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +567 -566
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +3 -0
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +243 -244
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +3 -0
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +417 -416
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +51 -16
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +422 -139
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts +68 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +882 -422
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts +3 -0
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.js +23 -22
- package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts +13 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +798 -553
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.d.ts +3 -0
- package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +157 -158
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +44 -26
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.js +42 -6
- package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +57 -49
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +83 -77
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.js +123 -0
- package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJArchiveConfigurationEntity/mjarchiveconfigurationentity.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJArchiveConfigurationEntity/mjarchiveconfigurationentity.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJArchiveConfigurationEntity/mjarchiveconfigurationentity.form.component.js +87 -0
- package/dist/lib/generated/Entities/MJArchiveConfigurationEntity/mjarchiveconfigurationentity.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.js +109 -0
- package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJArchiveRunDetail/mjarchiverundetail.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJArchiveRunDetail/mjarchiverundetail.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJArchiveRunDetail/mjarchiverundetail.form.component.js +83 -0
- package/dist/lib/generated/Entities/MJArchiveRunDetail/mjarchiverundetail.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.js +39 -37
- package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +104 -68
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityPermission/mjentitypermission.form.component.js +11 -9
- package/dist/lib/generated/Entities/MJEntityPermission/mjentitypermission.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.js +32 -14
- package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js +23 -21
- package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js +9 -7
- package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMCPServerTool/mjmcpservertool.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJMCPServerTool/mjmcpservertool.form.component.js +24 -6
- package/dist/lib/generated/Entities/MJMCPServerTool/mjmcpservertool.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMCPToolFavorite/mjmcptoolfavorite.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMCPToolFavorite/mjmcptoolfavorite.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMCPToolFavorite/mjmcptoolfavorite.form.component.js +55 -0
- package/dist/lib/generated/Entities/MJMCPToolFavorite/mjmcptoolfavorite.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.js +85 -0
- package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJResourcePermission/mjresourcepermission.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJResourcePermission/mjresourcepermission.form.component.js +21 -12
- package/dist/lib/generated/Entities/MJResourcePermission/mjresourcepermission.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js +5 -5
- package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js +17 -17
- package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +241 -169
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +252 -246
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +168 -150
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +14 -8
- package/dist/lib/shared/components/template-editor.component.js.map +1 -1
- package/package.json +34 -34
|
@@ -6,7 +6,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
6
6
|
};
|
|
7
7
|
import { Component, inject, ViewContainerRef } from '@angular/core';
|
|
8
8
|
import { RegisterClass } from '@memberjunction/global';
|
|
9
|
-
import { BaseFormComponent } from '@memberjunction/ng-base-forms';
|
|
9
|
+
import { BaseFormComponent, CUSTOM_LAYOUT_TOOLBAR_CONFIG } from '@memberjunction/ng-base-forms';
|
|
10
10
|
import { SharedService } from '@memberjunction/ng-shared';
|
|
11
11
|
import { Metadata, RunView, CompositeKey } from '@memberjunction/core';
|
|
12
12
|
import { MJActionFormComponent } from '../../generated/Entities/MJAction/mjaction.form.component';
|
|
@@ -27,23 +27,42 @@ const _c4 = () => ({ text: "Generated", value: "Generated" });
|
|
|
27
27
|
const _c5 = () => ({ text: "Custom", value: "Custom" });
|
|
28
28
|
const _c6 = (a0, a1) => [a0, a1];
|
|
29
29
|
const _c7 = () => [];
|
|
30
|
+
const _c8 = () => ({ text: "Approved", value: "Approved" });
|
|
31
|
+
const _c9 = () => ({ text: "Rejected", value: "Rejected" });
|
|
30
32
|
const _forTrack0 = ($index, $item) => $item.ID;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
const _forTrack1 = ($index, $item) => $item.id;
|
|
34
|
+
const _forTrack2 = ($index, $item) => $item.name;
|
|
35
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
36
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
33
37
|
i0.ɵɵelementStart(0, "input", 33);
|
|
34
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
38
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_0_Conditional_9_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Name, $event) || (ctx_r1.record.Name = $event); return i0.ɵɵresetView($event); });
|
|
35
39
|
i0.ɵɵelementEnd();
|
|
36
40
|
} if (rf & 2) {
|
|
37
41
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
38
42
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Name);
|
|
39
43
|
} }
|
|
40
|
-
function
|
|
44
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_10_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
45
|
+
i0.ɵɵelementStart(0, "span", 36);
|
|
46
|
+
i0.ɵɵelement(1, "i", 37);
|
|
47
|
+
i0.ɵɵtext(2);
|
|
48
|
+
i0.ɵɵelementEnd();
|
|
49
|
+
} if (rf & 2) {
|
|
50
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
51
|
+
i0.ɵɵproperty("title", "Code " + ctx_r1.record.CodeApprovalStatus);
|
|
52
|
+
i0.ɵɵattribute("data-color", ctx_r1.record.CodeApprovalStatus === "Approved" ? "success" : ctx_r1.record.CodeApprovalStatus === "Pending" ? "warning" : "error");
|
|
53
|
+
i0.ɵɵadvance();
|
|
54
|
+
i0.ɵɵclassMap("fa-solid " + ctx_r1.getApprovalStatusIcon());
|
|
55
|
+
i0.ɵɵadvance();
|
|
56
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.CodeApprovalStatus, " ");
|
|
57
|
+
} }
|
|
58
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
41
59
|
i0.ɵɵelementStart(0, "h4", 34);
|
|
42
60
|
i0.ɵɵtext(1);
|
|
43
61
|
i0.ɵɵelementEnd();
|
|
44
62
|
i0.ɵɵelementStart(2, "span", 35);
|
|
45
63
|
i0.ɵɵtext(3);
|
|
46
64
|
i0.ɵɵelementEnd();
|
|
65
|
+
i0.ɵɵconditionalCreate(4, MJActionFormComponentExtended_Conditional_0_Conditional_10_Conditional_4_Template, 3, 5, "span", 36);
|
|
47
66
|
} if (rf & 2) {
|
|
48
67
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
49
68
|
i0.ɵɵadvance();
|
|
@@ -52,47 +71,71 @@ function MJActionFormComponentExtended_Conditional_1_Conditional_10_Template(rf,
|
|
|
52
71
|
i0.ɵɵattribute("data-color", ctx_r1.record.Status === "Active" ? "success" : ctx_r1.record.Status === "Pending" ? "warning" : "error");
|
|
53
72
|
i0.ɵɵadvance();
|
|
54
73
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Status, " ");
|
|
74
|
+
i0.ɵɵadvance();
|
|
75
|
+
i0.ɵɵconditional(ctx_r1.hasCodeApproval && ctx_r1.record.CodeApprovalStatus ? 4 : -1);
|
|
55
76
|
} }
|
|
56
|
-
function
|
|
57
|
-
const
|
|
58
|
-
i0.ɵɵelementStart(0, "div"
|
|
77
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_11_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
78
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
79
|
+
i0.ɵɵelementStart(0, "div")(1, "label", 38);
|
|
80
|
+
i0.ɵɵelement(2, "i", 37);
|
|
81
|
+
i0.ɵɵtext(3, " Code Approval ");
|
|
82
|
+
i0.ɵɵelementEnd();
|
|
83
|
+
i0.ɵɵelementStart(4, "mj-dropdown", 43);
|
|
84
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_0_Conditional_11_Conditional_17_Template_mj_dropdown_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.CodeApprovalStatus, $event) || (ctx_r1.record.CodeApprovalStatus = $event); return i0.ɵɵresetView($event); });
|
|
85
|
+
i0.ɵɵelementEnd()();
|
|
86
|
+
} if (rf & 2) {
|
|
87
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
88
|
+
i0.ɵɵadvance(2);
|
|
89
|
+
i0.ɵɵclassMap("fa-solid " + ctx_r1.getApprovalStatusIcon());
|
|
90
|
+
i0.ɵɵstyleProp("color", ctx_r1.getApprovalStatusColor());
|
|
91
|
+
i0.ɵɵadvance(2);
|
|
92
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.CodeApprovalStatus);
|
|
93
|
+
i0.ɵɵproperty("Data", i0.ɵɵpureFunction3(10, _c3, i0.ɵɵpureFunction0(7, _c8), i0.ɵɵpureFunction0(8, _c1), i0.ɵɵpureFunction0(9, _c9)))("ValuePrimitive", true);
|
|
94
|
+
} }
|
|
95
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
96
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
97
|
+
i0.ɵɵelementStart(0, "div", 12)(1, "div")(2, "label", 38);
|
|
59
98
|
i0.ɵɵtext(3, "Status");
|
|
60
99
|
i0.ɵɵelementEnd();
|
|
61
|
-
i0.ɵɵelementStart(4, "mj-dropdown",
|
|
62
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
100
|
+
i0.ɵɵelementStart(4, "mj-dropdown", 39);
|
|
101
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_0_Conditional_11_Template_mj_dropdown_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Status, $event) || (ctx_r1.record.Status = $event); return i0.ɵɵresetView($event); });
|
|
63
102
|
i0.ɵɵelementEnd()();
|
|
64
|
-
i0.ɵɵelementStart(5, "div")(6, "label",
|
|
103
|
+
i0.ɵɵelementStart(5, "div")(6, "label", 38);
|
|
65
104
|
i0.ɵɵtext(7, " Type ");
|
|
66
|
-
i0.ɵɵelementStart(8, "span",
|
|
105
|
+
i0.ɵɵelementStart(8, "span", 40);
|
|
67
106
|
i0.ɵɵtext(9, "*");
|
|
68
107
|
i0.ɵɵelementEnd()();
|
|
69
|
-
i0.ɵɵelementStart(10, "mj-dropdown",
|
|
70
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
108
|
+
i0.ɵɵelementStart(10, "mj-dropdown", 41);
|
|
109
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_0_Conditional_11_Template_mj_dropdown_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Type, $event) || (ctx_r1.record.Type = $event); return i0.ɵɵresetView($event); });
|
|
71
110
|
i0.ɵɵelementEnd()();
|
|
72
|
-
i0.ɵɵelementStart(11, "div")(12, "label",
|
|
111
|
+
i0.ɵɵelementStart(11, "div")(12, "label", 38);
|
|
73
112
|
i0.ɵɵtext(13, " Category ");
|
|
74
|
-
i0.ɵɵelementStart(14, "span",
|
|
113
|
+
i0.ɵɵelementStart(14, "span", 40);
|
|
75
114
|
i0.ɵɵtext(15, "*");
|
|
76
115
|
i0.ɵɵelementEnd()();
|
|
77
|
-
i0.ɵɵelementStart(16, "mj-dropdown",
|
|
78
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
79
|
-
i0.ɵɵelementEnd()()
|
|
116
|
+
i0.ɵɵelementStart(16, "mj-dropdown", 42);
|
|
117
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_0_Conditional_11_Template_mj_dropdown_ngModelChange_16_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.CategoryID, $event) || (ctx_r1.record.CategoryID = $event); return i0.ɵɵresetView($event); });
|
|
118
|
+
i0.ɵɵelementEnd()();
|
|
119
|
+
i0.ɵɵconditionalCreate(17, MJActionFormComponentExtended_Conditional_0_Conditional_11_Conditional_17_Template, 5, 14, "div");
|
|
120
|
+
i0.ɵɵelementEnd();
|
|
80
121
|
} if (rf & 2) {
|
|
81
122
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
82
123
|
i0.ɵɵadvance(4);
|
|
83
124
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Status);
|
|
84
|
-
i0.ɵɵproperty("Data", i0.ɵɵpureFunction3(
|
|
125
|
+
i0.ɵɵproperty("Data", i0.ɵɵpureFunction3(12, _c3, i0.ɵɵpureFunction0(9, _c0), i0.ɵɵpureFunction0(10, _c1), i0.ɵɵpureFunction0(11, _c2)))("ValuePrimitive", true);
|
|
85
126
|
i0.ɵɵadvance(6);
|
|
86
127
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Type);
|
|
87
|
-
i0.ɵɵproperty("Data", i0.ɵɵpureFunction2(
|
|
128
|
+
i0.ɵɵproperty("Data", i0.ɵɵpureFunction2(18, _c6, i0.ɵɵpureFunction0(16, _c4), i0.ɵɵpureFunction0(17, _c5)))("ValuePrimitive", true);
|
|
88
129
|
i0.ɵɵadvance(6);
|
|
89
130
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.CategoryID);
|
|
90
|
-
i0.ɵɵproperty("Data", i0.ɵɵpureFunction0(
|
|
131
|
+
i0.ɵɵproperty("Data", i0.ɵɵpureFunction0(21, _c7));
|
|
132
|
+
i0.ɵɵadvance();
|
|
133
|
+
i0.ɵɵconditional(ctx_r1.hasCodeApproval ? 17 : -1);
|
|
91
134
|
} }
|
|
92
|
-
function
|
|
93
|
-
const
|
|
94
|
-
i0.ɵɵelementStart(0, "textarea",
|
|
95
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
135
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
136
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
137
|
+
i0.ɵɵelementStart(0, "textarea", 44);
|
|
138
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_0_Conditional_12_Template_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Description, $event) || (ctx_r1.record.Description = $event); return i0.ɵɵresetView($event); });
|
|
96
139
|
i0.ɵɵtext(1, " ");
|
|
97
140
|
i0.ɵɵelementEnd();
|
|
98
141
|
} if (rf & 2) {
|
|
@@ -100,7 +143,7 @@ function MJActionFormComponentExtended_Conditional_1_Conditional_12_Template(rf,
|
|
|
100
143
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Description);
|
|
101
144
|
i0.ɵɵproperty("rows", 2);
|
|
102
145
|
} }
|
|
103
|
-
function
|
|
146
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
104
147
|
i0.ɵɵelementStart(0, "p", 14);
|
|
105
148
|
i0.ɵɵtext(1);
|
|
106
149
|
i0.ɵɵelementEnd();
|
|
@@ -109,30 +152,30 @@ function MJActionFormComponentExtended_Conditional_1_Conditional_13_Template(rf,
|
|
|
109
152
|
i0.ɵɵadvance();
|
|
110
153
|
i0.ɵɵtextInterpolate(ctx_r1.record.Description);
|
|
111
154
|
} }
|
|
112
|
-
function
|
|
113
|
-
const
|
|
155
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
156
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
114
157
|
i0.ɵɵelementStart(0, "div", 16);
|
|
115
|
-
i0.ɵɵelement(1, "i",
|
|
158
|
+
i0.ɵɵelement(1, "i", 45);
|
|
116
159
|
i0.ɵɵelementStart(2, "span", 18);
|
|
117
160
|
i0.ɵɵtext(3, "Category:");
|
|
118
161
|
i0.ɵɵelementEnd();
|
|
119
|
-
i0.ɵɵelementStart(4, "span",
|
|
120
|
-
i0.ɵɵlistener("click", function
|
|
162
|
+
i0.ɵɵelementStart(4, "span", 46);
|
|
163
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_15_Template_span_click_4_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToCategory()); });
|
|
121
164
|
i0.ɵɵtext(5);
|
|
122
|
-
i0.ɵɵelement(6, "i",
|
|
165
|
+
i0.ɵɵelement(6, "i", 47);
|
|
123
166
|
i0.ɵɵelementEnd()();
|
|
124
167
|
} if (rf & 2) {
|
|
125
168
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
126
169
|
i0.ɵɵadvance(5);
|
|
127
170
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.category.Name, " ");
|
|
128
171
|
} }
|
|
129
|
-
function
|
|
172
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
130
173
|
i0.ɵɵelementStart(0, "div", 16);
|
|
131
174
|
i0.ɵɵelement(1, "i");
|
|
132
175
|
i0.ɵɵelementStart(2, "span", 18);
|
|
133
176
|
i0.ɵɵtext(3, "Code:");
|
|
134
177
|
i0.ɵɵelementEnd();
|
|
135
|
-
i0.ɵɵelementStart(4, "span",
|
|
178
|
+
i0.ɵɵelementStart(4, "span", 48);
|
|
136
179
|
i0.ɵɵtext(5);
|
|
137
180
|
i0.ɵɵelementEnd()();
|
|
138
181
|
} if (rf & 2) {
|
|
@@ -145,9 +188,9 @@ function MJActionFormComponentExtended_Conditional_1_Conditional_22_Template(rf,
|
|
|
145
188
|
i0.ɵɵadvance();
|
|
146
189
|
i0.ɵɵtextInterpolate(ctx_r1.record.CodeApprovalStatus);
|
|
147
190
|
} }
|
|
148
|
-
function
|
|
191
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
149
192
|
i0.ɵɵelementStart(0, "div", 16);
|
|
150
|
-
i0.ɵɵelement(1, "i",
|
|
193
|
+
i0.ɵɵelement(1, "i", 49);
|
|
151
194
|
i0.ɵɵelementStart(2, "span", 19);
|
|
152
195
|
i0.ɵɵtext(3);
|
|
153
196
|
i0.ɵɵelementEnd()();
|
|
@@ -156,45 +199,32 @@ function MJActionFormComponentExtended_Conditional_1_Conditional_23_Template(rf,
|
|
|
156
199
|
i0.ɵɵadvance(3);
|
|
157
200
|
i0.ɵɵtextInterpolate1("", ctx_r1.actionParams.length, " Parameters");
|
|
158
201
|
} }
|
|
159
|
-
function
|
|
160
|
-
const
|
|
161
|
-
i0.ɵɵelementStart(0, "button",
|
|
162
|
-
i0.ɵɵlistener("click", function
|
|
163
|
-
i0.ɵɵelement(1, "i",
|
|
202
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
203
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
204
|
+
i0.ɵɵelementStart(0, "button", 50);
|
|
205
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_26_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openTestHarness()); });
|
|
206
|
+
i0.ɵɵelement(1, "i", 51);
|
|
164
207
|
i0.ɵɵtext(2, " Run ");
|
|
165
208
|
i0.ɵɵelementEnd();
|
|
166
209
|
} if (rf & 2) {
|
|
167
210
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
168
211
|
i0.ɵɵproperty("disabled", ctx_r1.record.Status !== "Active");
|
|
169
212
|
} }
|
|
170
|
-
function
|
|
171
|
-
const
|
|
172
|
-
i0.ɵɵelementStart(0, "button",
|
|
173
|
-
i0.ɵɵlistener("click", function
|
|
174
|
-
i0.ɵɵelement(1, "i",
|
|
213
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
214
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
215
|
+
i0.ɵɵelementStart(0, "button", 52);
|
|
216
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_27_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.regenerateCode()); });
|
|
217
|
+
i0.ɵɵelement(1, "i", 53);
|
|
175
218
|
i0.ɵɵtext(2, " Regenerate ");
|
|
176
219
|
i0.ɵɵelementEnd();
|
|
177
220
|
} }
|
|
178
|
-
function
|
|
179
|
-
const _r8 = i0.ɵɵgetCurrentView();
|
|
180
|
-
i0.ɵɵelementStart(0, "div", 21)(1, "button", 51);
|
|
181
|
-
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_1_Conditional_28_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.approveCode()); });
|
|
182
|
-
i0.ɵɵelement(2, "i", 52);
|
|
183
|
-
i0.ɵɵtext(3, " Approve ");
|
|
184
|
-
i0.ɵɵelementEnd();
|
|
185
|
-
i0.ɵɵelementStart(4, "button", 53);
|
|
186
|
-
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_1_Conditional_28_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.rejectCode()); });
|
|
187
|
-
i0.ɵɵelement(5, "i", 54);
|
|
188
|
-
i0.ɵɵtext(6, " Reject ");
|
|
189
|
-
i0.ɵɵelementEnd()();
|
|
190
|
-
} }
|
|
191
|
-
function MJActionFormComponentExtended_Conditional_1_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
221
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
192
222
|
i0.ɵɵelementStart(0, "div", 24);
|
|
193
223
|
i0.ɵɵtext(1, " Action must be Active to execute ");
|
|
194
224
|
i0.ɵɵelementEnd();
|
|
195
225
|
} }
|
|
196
|
-
function
|
|
197
|
-
i0.ɵɵelementStart(0, "span",
|
|
226
|
+
function MJActionFormComponentExtended_Conditional_0_ng_template_31_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
227
|
+
i0.ɵɵelementStart(0, "span", 55);
|
|
198
228
|
i0.ɵɵtext(1);
|
|
199
229
|
i0.ɵɵelementEnd();
|
|
200
230
|
} if (rf & 2) {
|
|
@@ -202,255 +232,255 @@ function MJActionFormComponentExtended_Conditional_1_ng_template_32_Conditional_
|
|
|
202
232
|
i0.ɵɵadvance();
|
|
203
233
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.actionParams.length, " ");
|
|
204
234
|
} }
|
|
205
|
-
function
|
|
206
|
-
i0.ɵɵelementStart(0, "span",
|
|
207
|
-
i0.ɵɵelement(1, "i",
|
|
235
|
+
function MJActionFormComponentExtended_Conditional_0_ng_template_31_Template(rf, ctx) { if (rf & 1) {
|
|
236
|
+
i0.ɵɵelementStart(0, "span", 54);
|
|
237
|
+
i0.ɵɵelement(1, "i", 49);
|
|
208
238
|
i0.ɵɵtext(2, " Parameters ");
|
|
209
|
-
i0.ɵɵconditionalCreate(3,
|
|
239
|
+
i0.ɵɵconditionalCreate(3, MJActionFormComponentExtended_Conditional_0_ng_template_31_Conditional_3_Template, 2, 1, "span", 55);
|
|
210
240
|
i0.ɵɵelementEnd();
|
|
211
241
|
} if (rf & 2) {
|
|
212
242
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
213
243
|
i0.ɵɵadvance(3);
|
|
214
244
|
i0.ɵɵconditional(ctx_r1.actionParams.length > 0 ? 3 : -1);
|
|
215
245
|
} }
|
|
216
|
-
function
|
|
246
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
217
247
|
i0.ɵɵelementStart(0, "div", 29);
|
|
218
|
-
i0.ɵɵelement(1, "i",
|
|
248
|
+
i0.ɵɵelement(1, "i", 56);
|
|
219
249
|
i0.ɵɵtext(2, " Loading parameters... ");
|
|
220
250
|
i0.ɵɵelementEnd();
|
|
221
251
|
} }
|
|
222
|
-
function
|
|
223
|
-
i0.ɵɵelementStart(0, "p",
|
|
252
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_34_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
253
|
+
i0.ɵɵelementStart(0, "p", 59);
|
|
224
254
|
i0.ɵɵtext(1, "Add parameters to define inputs and outputs for this action");
|
|
225
255
|
i0.ɵɵelementEnd();
|
|
226
256
|
} }
|
|
227
|
-
function
|
|
257
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
228
258
|
i0.ɵɵelementStart(0, "div", 30);
|
|
229
|
-
i0.ɵɵelement(1, "i",
|
|
230
|
-
i0.ɵɵelementStart(2, "p",
|
|
259
|
+
i0.ɵɵelement(1, "i", 57);
|
|
260
|
+
i0.ɵɵelementStart(2, "p", 58);
|
|
231
261
|
i0.ɵɵtext(3, "No parameters defined");
|
|
232
262
|
i0.ɵɵelementEnd();
|
|
233
|
-
i0.ɵɵconditionalCreate(4,
|
|
263
|
+
i0.ɵɵconditionalCreate(4, MJActionFormComponentExtended_Conditional_0_Conditional_34_Conditional_4_Template, 2, 0, "p", 59);
|
|
234
264
|
i0.ɵɵelementEnd();
|
|
235
265
|
} if (rf & 2) {
|
|
236
266
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
237
267
|
i0.ɵɵadvance(4);
|
|
238
268
|
i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.record.IsSaved ? 4 : -1);
|
|
239
269
|
} }
|
|
240
|
-
function
|
|
241
|
-
const
|
|
242
|
-
i0.ɵɵelementStart(0, "button",
|
|
243
|
-
i0.ɵɵlistener("click", function
|
|
244
|
-
i0.ɵɵelement(1, "i",
|
|
270
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
271
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
272
|
+
i0.ɵɵelementStart(0, "button", 68);
|
|
273
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.addParameter("Input")); });
|
|
274
|
+
i0.ɵɵelement(1, "i", 69);
|
|
245
275
|
i0.ɵɵtext(2, " Add Input ");
|
|
246
276
|
i0.ɵɵelementEnd();
|
|
247
277
|
} }
|
|
248
|
-
function
|
|
278
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
249
279
|
i0.ɵɵelementStart(0, "div", 30);
|
|
250
|
-
i0.ɵɵelement(1, "i",
|
|
251
|
-
i0.ɵɵelementStart(2, "p",
|
|
280
|
+
i0.ɵɵelement(1, "i", 70);
|
|
281
|
+
i0.ɵɵelementStart(2, "p", 58);
|
|
252
282
|
i0.ɵɵtext(3, "No input parameters defined");
|
|
253
283
|
i0.ɵɵelementEnd()();
|
|
254
284
|
} }
|
|
255
|
-
function
|
|
256
|
-
i0.ɵɵelementStart(0, "span",
|
|
285
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_7_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
286
|
+
i0.ɵɵelementStart(0, "span", 76);
|
|
257
287
|
i0.ɵɵtext(1, "Required");
|
|
258
288
|
i0.ɵɵelementEnd();
|
|
259
289
|
} }
|
|
260
|
-
function
|
|
261
|
-
i0.ɵɵelementStart(0, "span",
|
|
290
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_7_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
291
|
+
i0.ɵɵelementStart(0, "span", 77);
|
|
262
292
|
i0.ɵɵtext(1, "Array");
|
|
263
293
|
i0.ɵɵelementEnd();
|
|
264
294
|
} }
|
|
265
|
-
function
|
|
266
|
-
const
|
|
267
|
-
i0.ɵɵelementStart(0, "button",
|
|
268
|
-
i0.ɵɵlistener("click", function
|
|
269
|
-
i0.ɵɵelement(1, "i",
|
|
295
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_7_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
296
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
297
|
+
i0.ɵɵelementStart(0, "button", 82);
|
|
298
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_7_For_2_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r13); const param_r12 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.editParameter(param_r12)); });
|
|
299
|
+
i0.ɵɵelement(1, "i", 83);
|
|
270
300
|
i0.ɵɵelementEnd();
|
|
271
|
-
i0.ɵɵelementStart(2, "button",
|
|
272
|
-
i0.ɵɵlistener("click", function
|
|
273
|
-
i0.ɵɵelement(3, "i",
|
|
301
|
+
i0.ɵɵelementStart(2, "button", 84);
|
|
302
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_7_For_2_Conditional_7_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r13); const param_r12 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.deleteParameter(param_r12)); });
|
|
303
|
+
i0.ɵɵelement(3, "i", 85);
|
|
274
304
|
i0.ɵɵelementEnd();
|
|
275
305
|
} }
|
|
276
|
-
function
|
|
277
|
-
i0.ɵɵelementStart(0, "div",
|
|
306
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_7_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
307
|
+
i0.ɵɵelementStart(0, "div", 80);
|
|
278
308
|
i0.ɵɵtext(1);
|
|
279
309
|
i0.ɵɵelementEnd();
|
|
280
310
|
} if (rf & 2) {
|
|
281
|
-
const
|
|
311
|
+
const param_r12 = i0.ɵɵnextContext().$implicit;
|
|
282
312
|
i0.ɵɵadvance();
|
|
283
|
-
i0.ɵɵtextInterpolate(
|
|
313
|
+
i0.ɵɵtextInterpolate(param_r12.Description);
|
|
284
314
|
} }
|
|
285
|
-
function
|
|
286
|
-
i0.ɵɵelementStart(0, "div",
|
|
315
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_7_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
316
|
+
i0.ɵɵelementStart(0, "div", 81)(1, "span", 86);
|
|
287
317
|
i0.ɵɵtext(2, "Default:");
|
|
288
318
|
i0.ɵɵelementEnd();
|
|
289
319
|
i0.ɵɵelementStart(3, "code");
|
|
290
320
|
i0.ɵɵtext(4);
|
|
291
321
|
i0.ɵɵelementEnd()();
|
|
292
322
|
} if (rf & 2) {
|
|
293
|
-
const
|
|
323
|
+
const param_r12 = i0.ɵɵnextContext().$implicit;
|
|
294
324
|
i0.ɵɵadvance(4);
|
|
295
|
-
i0.ɵɵtextInterpolate(
|
|
325
|
+
i0.ɵɵtextInterpolate(param_r12.DefaultValue);
|
|
296
326
|
} }
|
|
297
|
-
function
|
|
298
|
-
const
|
|
299
|
-
i0.ɵɵelementStart(0, "div",
|
|
300
|
-
i0.ɵɵlistener("click", function
|
|
301
|
-
i0.ɵɵelementStart(1, "div",
|
|
327
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_7_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
328
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
329
|
+
i0.ɵɵelementStart(0, "div", 72);
|
|
330
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_7_For_2_Template_div_click_0_listener($event) { const param_r12 = i0.ɵɵrestoreView(_r11).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onParamClick(param_r12, $event)); });
|
|
331
|
+
i0.ɵɵelementStart(1, "div", 73)(2, "span", 74);
|
|
302
332
|
i0.ɵɵtext(3);
|
|
303
333
|
i0.ɵɵelementEnd();
|
|
304
|
-
i0.ɵɵelementStart(4, "div",
|
|
305
|
-
i0.ɵɵconditionalCreate(5,
|
|
306
|
-
i0.ɵɵconditionalCreate(6,
|
|
307
|
-
i0.ɵɵconditionalCreate(7,
|
|
334
|
+
i0.ɵɵelementStart(4, "div", 75);
|
|
335
|
+
i0.ɵɵconditionalCreate(5, MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_7_For_2_Conditional_5_Template, 2, 0, "span", 76);
|
|
336
|
+
i0.ɵɵconditionalCreate(6, MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_7_For_2_Conditional_6_Template, 2, 0, "span", 77);
|
|
337
|
+
i0.ɵɵconditionalCreate(7, MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_7_For_2_Conditional_7_Template, 4, 0);
|
|
308
338
|
i0.ɵɵelementEnd()();
|
|
309
|
-
i0.ɵɵelementStart(8, "div",
|
|
339
|
+
i0.ɵɵelementStart(8, "div", 78)(9, "div", 79);
|
|
310
340
|
i0.ɵɵtext(10);
|
|
311
341
|
i0.ɵɵelementEnd();
|
|
312
|
-
i0.ɵɵconditionalCreate(11,
|
|
313
|
-
i0.ɵɵconditionalCreate(12,
|
|
342
|
+
i0.ɵɵconditionalCreate(11, MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_7_For_2_Conditional_11_Template, 2, 1, "div", 80);
|
|
343
|
+
i0.ɵɵconditionalCreate(12, MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_7_For_2_Conditional_12_Template, 5, 1, "div", 81);
|
|
314
344
|
i0.ɵɵelementEnd()();
|
|
315
345
|
} if (rf & 2) {
|
|
316
|
-
const
|
|
346
|
+
const param_r12 = ctx.$implicit;
|
|
317
347
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
318
|
-
i0.ɵɵclassProp("required",
|
|
348
|
+
i0.ɵɵclassProp("required", param_r12.IsRequired)("clickable", true);
|
|
319
349
|
i0.ɵɵadvance(3);
|
|
320
|
-
i0.ɵɵtextInterpolate(
|
|
350
|
+
i0.ɵɵtextInterpolate(param_r12.Name);
|
|
321
351
|
i0.ɵɵadvance(2);
|
|
322
|
-
i0.ɵɵconditional(
|
|
352
|
+
i0.ɵɵconditional(param_r12.IsRequired ? 5 : -1);
|
|
323
353
|
i0.ɵɵadvance();
|
|
324
|
-
i0.ɵɵconditional(
|
|
354
|
+
i0.ɵɵconditional(param_r12.IsArray ? 6 : -1);
|
|
325
355
|
i0.ɵɵadvance();
|
|
326
356
|
i0.ɵɵconditional(ctx_r1.EditMode ? 7 : -1);
|
|
327
357
|
i0.ɵɵadvance(3);
|
|
328
|
-
i0.ɵɵtextInterpolate(
|
|
358
|
+
i0.ɵɵtextInterpolate(param_r12.ValueType);
|
|
329
359
|
i0.ɵɵadvance();
|
|
330
|
-
i0.ɵɵconditional(
|
|
360
|
+
i0.ɵɵconditional(param_r12.Description ? 11 : -1);
|
|
331
361
|
i0.ɵɵadvance();
|
|
332
|
-
i0.ɵɵconditional(
|
|
362
|
+
i0.ɵɵconditional(param_r12.DefaultValue ? 12 : -1);
|
|
333
363
|
} }
|
|
334
|
-
function
|
|
335
|
-
i0.ɵɵelementStart(0, "div",
|
|
336
|
-
i0.ɵɵrepeaterCreate(1,
|
|
364
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
365
|
+
i0.ɵɵelementStart(0, "div", 64);
|
|
366
|
+
i0.ɵɵrepeaterCreate(1, MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_7_For_2_Template, 13, 11, "div", 71, _forTrack0);
|
|
337
367
|
i0.ɵɵelementEnd();
|
|
338
368
|
} if (rf & 2) {
|
|
339
369
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
340
370
|
i0.ɵɵadvance();
|
|
341
371
|
i0.ɵɵrepeater(ctx_r1.getInputParams());
|
|
342
372
|
} }
|
|
343
|
-
function
|
|
344
|
-
const
|
|
345
|
-
i0.ɵɵelementStart(0, "button",
|
|
346
|
-
i0.ɵɵlistener("click", function
|
|
347
|
-
i0.ɵɵelement(1, "i",
|
|
373
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
374
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
375
|
+
i0.ɵɵelementStart(0, "button", 68);
|
|
376
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_13_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.addParameter("Output")); });
|
|
377
|
+
i0.ɵɵelement(1, "i", 69);
|
|
348
378
|
i0.ɵɵtext(2, " Add Output ");
|
|
349
379
|
i0.ɵɵelementEnd();
|
|
350
380
|
} }
|
|
351
|
-
function
|
|
352
|
-
i0.ɵɵelementStart(0, "div",
|
|
353
|
-
i0.ɵɵelement(1, "i",
|
|
354
|
-
i0.ɵɵelementStart(2, "p",
|
|
381
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
382
|
+
i0.ɵɵelementStart(0, "div", 67);
|
|
383
|
+
i0.ɵɵelement(1, "i", 70);
|
|
384
|
+
i0.ɵɵelementStart(2, "p", 58);
|
|
355
385
|
i0.ɵɵtext(3, "No output parameters defined");
|
|
356
386
|
i0.ɵɵelementEnd()();
|
|
357
387
|
} }
|
|
358
|
-
function
|
|
359
|
-
i0.ɵɵelementStart(0, "span",
|
|
388
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_15_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
389
|
+
i0.ɵɵelementStart(0, "span", 77);
|
|
360
390
|
i0.ɵɵtext(1, "Array");
|
|
361
391
|
i0.ɵɵelementEnd();
|
|
362
392
|
} }
|
|
363
|
-
function
|
|
364
|
-
const
|
|
365
|
-
i0.ɵɵelementStart(0, "button",
|
|
366
|
-
i0.ɵɵlistener("click", function
|
|
367
|
-
i0.ɵɵelement(1, "i",
|
|
393
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_15_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
394
|
+
const _r17 = i0.ɵɵgetCurrentView();
|
|
395
|
+
i0.ɵɵelementStart(0, "button", 82);
|
|
396
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_15_For_2_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r17); const param_r16 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.editParameter(param_r16)); });
|
|
397
|
+
i0.ɵɵelement(1, "i", 83);
|
|
368
398
|
i0.ɵɵelementEnd();
|
|
369
|
-
i0.ɵɵelementStart(2, "button",
|
|
370
|
-
i0.ɵɵlistener("click", function
|
|
371
|
-
i0.ɵɵelement(3, "i",
|
|
399
|
+
i0.ɵɵelementStart(2, "button", 84);
|
|
400
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_15_For_2_Conditional_6_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r17); const param_r16 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.deleteParameter(param_r16)); });
|
|
401
|
+
i0.ɵɵelement(3, "i", 85);
|
|
372
402
|
i0.ɵɵelementEnd();
|
|
373
403
|
} }
|
|
374
|
-
function
|
|
375
|
-
i0.ɵɵelementStart(0, "div",
|
|
404
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_15_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
405
|
+
i0.ɵɵelementStart(0, "div", 80);
|
|
376
406
|
i0.ɵɵtext(1);
|
|
377
407
|
i0.ɵɵelementEnd();
|
|
378
408
|
} if (rf & 2) {
|
|
379
|
-
const
|
|
409
|
+
const param_r16 = i0.ɵɵnextContext().$implicit;
|
|
380
410
|
i0.ɵɵadvance();
|
|
381
|
-
i0.ɵɵtextInterpolate(
|
|
411
|
+
i0.ɵɵtextInterpolate(param_r16.Description);
|
|
382
412
|
} }
|
|
383
|
-
function
|
|
384
|
-
i0.ɵɵelementStart(0, "div",
|
|
413
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_15_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
414
|
+
i0.ɵɵelementStart(0, "div", 81)(1, "span", 86);
|
|
385
415
|
i0.ɵɵtext(2, "Default:");
|
|
386
416
|
i0.ɵɵelementEnd();
|
|
387
417
|
i0.ɵɵelementStart(3, "code");
|
|
388
418
|
i0.ɵɵtext(4);
|
|
389
419
|
i0.ɵɵelementEnd()();
|
|
390
420
|
} if (rf & 2) {
|
|
391
|
-
const
|
|
421
|
+
const param_r16 = i0.ɵɵnextContext().$implicit;
|
|
392
422
|
i0.ɵɵadvance(4);
|
|
393
|
-
i0.ɵɵtextInterpolate(
|
|
423
|
+
i0.ɵɵtextInterpolate(param_r16.DefaultValue);
|
|
394
424
|
} }
|
|
395
|
-
function
|
|
396
|
-
const
|
|
397
|
-
i0.ɵɵelementStart(0, "div",
|
|
398
|
-
i0.ɵɵlistener("click", function
|
|
399
|
-
i0.ɵɵelementStart(1, "div",
|
|
425
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_15_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
426
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
427
|
+
i0.ɵɵelementStart(0, "div", 72);
|
|
428
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_15_For_2_Template_div_click_0_listener($event) { const param_r16 = i0.ɵɵrestoreView(_r15).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onParamClick(param_r16, $event)); });
|
|
429
|
+
i0.ɵɵelementStart(1, "div", 73)(2, "span", 74);
|
|
400
430
|
i0.ɵɵtext(3);
|
|
401
431
|
i0.ɵɵelementEnd();
|
|
402
|
-
i0.ɵɵelementStart(4, "div",
|
|
403
|
-
i0.ɵɵconditionalCreate(5,
|
|
404
|
-
i0.ɵɵconditionalCreate(6,
|
|
432
|
+
i0.ɵɵelementStart(4, "div", 75);
|
|
433
|
+
i0.ɵɵconditionalCreate(5, MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_15_For_2_Conditional_5_Template, 2, 0, "span", 77);
|
|
434
|
+
i0.ɵɵconditionalCreate(6, MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_15_For_2_Conditional_6_Template, 4, 0);
|
|
405
435
|
i0.ɵɵelementEnd()();
|
|
406
|
-
i0.ɵɵelementStart(7, "div",
|
|
436
|
+
i0.ɵɵelementStart(7, "div", 78)(8, "div", 79);
|
|
407
437
|
i0.ɵɵtext(9);
|
|
408
438
|
i0.ɵɵelementEnd();
|
|
409
|
-
i0.ɵɵconditionalCreate(10,
|
|
410
|
-
i0.ɵɵconditionalCreate(11,
|
|
439
|
+
i0.ɵɵconditionalCreate(10, MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_15_For_2_Conditional_10_Template, 2, 1, "div", 80);
|
|
440
|
+
i0.ɵɵconditionalCreate(11, MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_15_For_2_Conditional_11_Template, 5, 1, "div", 81);
|
|
411
441
|
i0.ɵɵelementEnd()();
|
|
412
442
|
} if (rf & 2) {
|
|
413
|
-
const
|
|
443
|
+
const param_r16 = ctx.$implicit;
|
|
414
444
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
415
445
|
i0.ɵɵclassProp("clickable", true);
|
|
416
446
|
i0.ɵɵadvance(3);
|
|
417
|
-
i0.ɵɵtextInterpolate(
|
|
447
|
+
i0.ɵɵtextInterpolate(param_r16.Name);
|
|
418
448
|
i0.ɵɵadvance(2);
|
|
419
|
-
i0.ɵɵconditional(
|
|
449
|
+
i0.ɵɵconditional(param_r16.IsArray ? 5 : -1);
|
|
420
450
|
i0.ɵɵadvance();
|
|
421
451
|
i0.ɵɵconditional(ctx_r1.EditMode ? 6 : -1);
|
|
422
452
|
i0.ɵɵadvance(3);
|
|
423
|
-
i0.ɵɵtextInterpolate(
|
|
453
|
+
i0.ɵɵtextInterpolate(param_r16.ValueType);
|
|
424
454
|
i0.ɵɵadvance();
|
|
425
|
-
i0.ɵɵconditional(
|
|
455
|
+
i0.ɵɵconditional(param_r16.Description ? 10 : -1);
|
|
426
456
|
i0.ɵɵadvance();
|
|
427
|
-
i0.ɵɵconditional(
|
|
457
|
+
i0.ɵɵconditional(param_r16.DefaultValue ? 11 : -1);
|
|
428
458
|
} }
|
|
429
|
-
function
|
|
430
|
-
i0.ɵɵelementStart(0, "div",
|
|
431
|
-
i0.ɵɵrepeaterCreate(1,
|
|
459
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
460
|
+
i0.ɵɵelementStart(0, "div", 64);
|
|
461
|
+
i0.ɵɵrepeaterCreate(1, MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_15_For_2_Template, 12, 8, "div", 87, _forTrack0);
|
|
432
462
|
i0.ɵɵelementEnd();
|
|
433
463
|
} if (rf & 2) {
|
|
434
464
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
435
465
|
i0.ɵɵadvance();
|
|
436
466
|
i0.ɵɵrepeater(ctx_r1.getOutputParams());
|
|
437
467
|
} }
|
|
438
|
-
function
|
|
439
|
-
i0.ɵɵelementStart(0, "div",
|
|
440
|
-
i0.ɵɵelement(3, "i",
|
|
468
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_35_Template(rf, ctx) { if (rf & 1) {
|
|
469
|
+
i0.ɵɵelementStart(0, "div", 60)(1, "div", 61)(2, "h3");
|
|
470
|
+
i0.ɵɵelement(3, "i", 62);
|
|
441
471
|
i0.ɵɵtext(4, " Input Parameters");
|
|
442
472
|
i0.ɵɵelementEnd();
|
|
443
|
-
i0.ɵɵconditionalCreate(5,
|
|
473
|
+
i0.ɵɵconditionalCreate(5, MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_5_Template, 3, 0, "button", 63);
|
|
444
474
|
i0.ɵɵelementEnd();
|
|
445
|
-
i0.ɵɵconditionalCreate(6,
|
|
475
|
+
i0.ɵɵconditionalCreate(6, MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_6_Template, 4, 0, "div", 30)(7, MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_7_Template, 3, 0, "div", 64);
|
|
446
476
|
i0.ɵɵelementEnd();
|
|
447
|
-
i0.ɵɵelementStart(8, "div",
|
|
448
|
-
i0.ɵɵelement(11, "i",
|
|
477
|
+
i0.ɵɵelementStart(8, "div", 65)(9, "div", 61)(10, "h3");
|
|
478
|
+
i0.ɵɵelement(11, "i", 66);
|
|
449
479
|
i0.ɵɵtext(12, " Output Parameters");
|
|
450
480
|
i0.ɵɵelementEnd();
|
|
451
|
-
i0.ɵɵconditionalCreate(13,
|
|
481
|
+
i0.ɵɵconditionalCreate(13, MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_13_Template, 3, 0, "button", 63);
|
|
452
482
|
i0.ɵɵelementEnd();
|
|
453
|
-
i0.ɵɵconditionalCreate(14,
|
|
483
|
+
i0.ɵɵconditionalCreate(14, MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_14_Template, 4, 0, "div", 67)(15, MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_15_Template, 3, 0, "div", 64);
|
|
454
484
|
i0.ɵɵelementEnd();
|
|
455
485
|
} if (rf & 2) {
|
|
456
486
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -465,47 +495,47 @@ function MJActionFormComponentExtended_Conditional_1_Conditional_36_Template(rf,
|
|
|
465
495
|
i0.ɵɵadvance();
|
|
466
496
|
i0.ɵɵconditional(ctx_r1.getOutputParams().length === 0 ? 14 : 15);
|
|
467
497
|
} }
|
|
468
|
-
function
|
|
469
|
-
i0.ɵɵelementStart(0, "span",
|
|
470
|
-
i0.ɵɵelement(1, "i",
|
|
498
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_36_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
499
|
+
i0.ɵɵelementStart(0, "span", 98);
|
|
500
|
+
i0.ɵɵelement(1, "i", 99);
|
|
471
501
|
i0.ɵɵtext(2, " Locked ");
|
|
472
502
|
i0.ɵɵelementEnd();
|
|
473
503
|
} }
|
|
474
|
-
function
|
|
475
|
-
i0.ɵɵelementStart(0, "span",
|
|
476
|
-
i0.ɵɵelement(1, "i",
|
|
504
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_36_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
505
|
+
i0.ɵɵelementStart(0, "span", 54);
|
|
506
|
+
i0.ɵɵelement(1, "i", 97);
|
|
477
507
|
i0.ɵɵtext(2, " Code & Generation ");
|
|
478
|
-
i0.ɵɵconditionalCreate(3,
|
|
508
|
+
i0.ɵɵconditionalCreate(3, MJActionFormComponentExtended_Conditional_0_Conditional_36_ng_template_1_Conditional_3_Template, 3, 0, "span", 98);
|
|
479
509
|
i0.ɵɵelementEnd();
|
|
480
510
|
} if (rf & 2) {
|
|
481
511
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
482
512
|
i0.ɵɵadvance(3);
|
|
483
513
|
i0.ɵɵconditional(ctx_r1.record.CodeLocked ? 3 : -1);
|
|
484
514
|
} }
|
|
485
|
-
function
|
|
486
|
-
const
|
|
487
|
-
i0.ɵɵelementStart(0, "div",
|
|
488
|
-
i0.ɵɵelement(2, "i",
|
|
515
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_36_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
516
|
+
const _r19 = i0.ɵɵgetCurrentView();
|
|
517
|
+
i0.ɵɵelementStart(0, "div", 88)(1, "h3");
|
|
518
|
+
i0.ɵɵelement(2, "i", 53);
|
|
489
519
|
i0.ɵɵtext(3, " AI Generation");
|
|
490
520
|
i0.ɵɵelementEnd();
|
|
491
|
-
i0.ɵɵelementStart(4, "div",
|
|
521
|
+
i0.ɵɵelementStart(4, "div", 100)(5, "label");
|
|
492
522
|
i0.ɵɵtext(6, "User Prompt");
|
|
493
523
|
i0.ɵɵelementEnd();
|
|
494
|
-
i0.ɵɵelementStart(7, "textarea",
|
|
495
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
524
|
+
i0.ɵɵelementStart(7, "textarea", 101);
|
|
525
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_0_Conditional_36_Conditional_3_Template_textarea_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.UserPrompt, $event) || (ctx_r1.record.UserPrompt = $event); return i0.ɵɵresetView($event); });
|
|
496
526
|
i0.ɵɵtext(8, " ");
|
|
497
527
|
i0.ɵɵelementEnd()();
|
|
498
|
-
i0.ɵɵelementStart(9, "div",
|
|
528
|
+
i0.ɵɵelementStart(9, "div", 102)(10, "label");
|
|
499
529
|
i0.ɵɵtext(11, "Internal Comments (not sent to AI)");
|
|
500
530
|
i0.ɵɵelementEnd();
|
|
501
|
-
i0.ɵɵelementStart(12, "textarea",
|
|
502
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
531
|
+
i0.ɵɵelementStart(12, "textarea", 103);
|
|
532
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_0_Conditional_36_Conditional_3_Template_textarea_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.UserComments, $event) || (ctx_r1.record.UserComments = $event); return i0.ɵɵresetView($event); });
|
|
503
533
|
i0.ɵɵtext(13, " ");
|
|
504
534
|
i0.ɵɵelementEnd()();
|
|
505
|
-
i0.ɵɵelementStart(14, "div",
|
|
506
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
535
|
+
i0.ɵɵelementStart(14, "div", 104)(15, "mj-switch", 105);
|
|
536
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_0_Conditional_36_Conditional_3_Template_mj_switch_ngModelChange_15_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.CodeLocked, $event) || (ctx_r1.record.CodeLocked = $event); return i0.ɵɵresetView($event); });
|
|
507
537
|
i0.ɵɵelementEnd();
|
|
508
|
-
i0.ɵɵelementStart(16, "label",
|
|
538
|
+
i0.ɵɵelementStart(16, "label", 106);
|
|
509
539
|
i0.ɵɵtext(17, "Lock Code (prevent regeneration)");
|
|
510
540
|
i0.ɵɵelementEnd()()();
|
|
511
541
|
} if (rf & 2) {
|
|
@@ -519,11 +549,11 @@ function MJActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_
|
|
|
519
549
|
i0.ɵɵadvance(3);
|
|
520
550
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.CodeLocked);
|
|
521
551
|
} }
|
|
522
|
-
function
|
|
523
|
-
const
|
|
524
|
-
i0.ɵɵelementStart(0, "button",
|
|
525
|
-
i0.ɵɵlistener("click", function
|
|
526
|
-
i0.ɵɵelement(1, "i",
|
|
552
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
553
|
+
const _r20 = i0.ɵɵgetCurrentView();
|
|
554
|
+
i0.ɵɵelementStart(0, "button", 68);
|
|
555
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleCodeComments()); });
|
|
556
|
+
i0.ɵɵelement(1, "i", 107);
|
|
527
557
|
i0.ɵɵtext(2);
|
|
528
558
|
i0.ɵɵelementEnd();
|
|
529
559
|
} if (rf & 2) {
|
|
@@ -531,9 +561,9 @@ function MJActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_
|
|
|
531
561
|
i0.ɵɵadvance(2);
|
|
532
562
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.showCodeComments ? "Hide" : "Show", " AI Comments ");
|
|
533
563
|
} }
|
|
534
|
-
function
|
|
535
|
-
i0.ɵɵelementStart(0, "div",
|
|
536
|
-
i0.ɵɵelement(2, "i",
|
|
564
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_36_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
565
|
+
i0.ɵɵelementStart(0, "div", 95)(1, "h4");
|
|
566
|
+
i0.ɵɵelement(2, "i", 53);
|
|
537
567
|
i0.ɵɵtext(3, " AI Explanation");
|
|
538
568
|
i0.ɵɵelementEnd();
|
|
539
569
|
i0.ɵɵelementStart(4, "p");
|
|
@@ -544,13 +574,13 @@ function MJActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_
|
|
|
544
574
|
i0.ɵɵadvance(5);
|
|
545
575
|
i0.ɵɵtextInterpolate(ctx_r1.record.CodeComments);
|
|
546
576
|
} }
|
|
547
|
-
function
|
|
548
|
-
const
|
|
549
|
-
i0.ɵɵelementStart(0, "div",
|
|
577
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_36_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
578
|
+
const _r21 = i0.ɵɵgetCurrentView();
|
|
579
|
+
i0.ɵɵelementStart(0, "div", 96)(1, "label");
|
|
550
580
|
i0.ɵɵtext(2, "Rejection Comments");
|
|
551
581
|
i0.ɵɵelementEnd();
|
|
552
|
-
i0.ɵɵelementStart(3, "textarea",
|
|
553
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
582
|
+
i0.ɵɵelementStart(3, "textarea", 108);
|
|
583
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_0_Conditional_36_Conditional_16_Template_textarea_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.CodeApprovalComments, $event) || (ctx_r1.record.CodeApprovalComments = $event); return i0.ɵɵresetView($event); });
|
|
554
584
|
i0.ɵɵtext(4, " ");
|
|
555
585
|
i0.ɵɵelementEnd()();
|
|
556
586
|
} if (rf & 2) {
|
|
@@ -559,28 +589,28 @@ function MJActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_
|
|
|
559
589
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.CodeApprovalComments);
|
|
560
590
|
i0.ɵɵproperty("rows", 2);
|
|
561
591
|
} }
|
|
562
|
-
function
|
|
563
|
-
const
|
|
592
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
593
|
+
const _r18 = i0.ɵɵgetCurrentView();
|
|
564
594
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 26);
|
|
565
|
-
i0.ɵɵtemplate(1,
|
|
595
|
+
i0.ɵɵtemplate(1, MJActionFormComponentExtended_Conditional_0_Conditional_36_ng_template_1_Template, 4, 1, "ng-template", 27);
|
|
566
596
|
i0.ɵɵelementStart(2, "div", 28);
|
|
567
|
-
i0.ɵɵconditionalCreate(3,
|
|
568
|
-
i0.ɵɵelementStart(4, "div",
|
|
569
|
-
i0.ɵɵelement(7, "i",
|
|
597
|
+
i0.ɵɵconditionalCreate(3, MJActionFormComponentExtended_Conditional_0_Conditional_36_Conditional_3_Template, 18, 5, "div", 88);
|
|
598
|
+
i0.ɵɵelementStart(4, "div", 89)(5, "div", 90)(6, "h3");
|
|
599
|
+
i0.ɵɵelement(7, "i", 91);
|
|
570
600
|
i0.ɵɵtext(8, " Action Code");
|
|
571
601
|
i0.ɵɵelementEnd();
|
|
572
|
-
i0.ɵɵelementStart(9, "div",
|
|
573
|
-
i0.ɵɵconditionalCreate(10,
|
|
574
|
-
i0.ɵɵelementStart(11, "button",
|
|
575
|
-
i0.ɵɵlistener("click", function
|
|
576
|
-
i0.ɵɵelement(12, "i",
|
|
602
|
+
i0.ɵɵelementStart(9, "div", 92);
|
|
603
|
+
i0.ɵɵconditionalCreate(10, MJActionFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template, 3, 1, "button", 63);
|
|
604
|
+
i0.ɵɵelementStart(11, "button", 68);
|
|
605
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_36_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.record.Code || "")); });
|
|
606
|
+
i0.ɵɵelement(12, "i", 93);
|
|
577
607
|
i0.ɵɵtext(13, " Copy ");
|
|
578
608
|
i0.ɵɵelementEnd()()();
|
|
579
|
-
i0.ɵɵelementStart(14, "mj-code-editor",
|
|
580
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
609
|
+
i0.ɵɵelementStart(14, "mj-code-editor", 94);
|
|
610
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_0_Conditional_36_Template_mj_code_editor_ngModelChange_14_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Code, $event) || (ctx_r1.record.Code = $event); return i0.ɵɵresetView($event); });
|
|
581
611
|
i0.ɵɵelementEnd();
|
|
582
|
-
i0.ɵɵconditionalCreate(15,
|
|
583
|
-
i0.ɵɵconditionalCreate(16,
|
|
612
|
+
i0.ɵɵconditionalCreate(15, MJActionFormComponentExtended_Conditional_0_Conditional_36_Conditional_15_Template, 6, 1, "div", 95);
|
|
613
|
+
i0.ɵɵconditionalCreate(16, MJActionFormComponentExtended_Conditional_0_Conditional_36_Conditional_16_Template, 5, 2, "div", 96);
|
|
584
614
|
i0.ɵɵelementEnd()()();
|
|
585
615
|
} if (rf & 2) {
|
|
586
616
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -597,8 +627,284 @@ function MJActionFormComponentExtended_Conditional_1_Conditional_37_Template(rf,
|
|
|
597
627
|
i0.ɵɵadvance();
|
|
598
628
|
i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.record.CodeApprovalStatus === "Rejected" ? 16 : -1);
|
|
599
629
|
} }
|
|
600
|
-
function
|
|
601
|
-
i0.ɵɵelementStart(0, "span",
|
|
630
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
631
|
+
i0.ɵɵelementStart(0, "span", 54);
|
|
632
|
+
i0.ɵɵelement(1, "i", 114);
|
|
633
|
+
i0.ɵɵtext(2, " Runtime Configuration & Permissions ");
|
|
634
|
+
i0.ɵɵelementStart(3, "span", 115);
|
|
635
|
+
i0.ɵɵtext(4);
|
|
636
|
+
i0.ɵɵelementEnd()();
|
|
637
|
+
} if (rf & 2) {
|
|
638
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
639
|
+
i0.ɵɵadvance(4);
|
|
640
|
+
i0.ɵɵtextInterpolate1(" (", ctx_r1.getRuntimeConfigSummary(), ") ");
|
|
641
|
+
} }
|
|
642
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
643
|
+
i0.ɵɵelementStart(0, "div", 109);
|
|
644
|
+
i0.ɵɵelement(1, "i", 116);
|
|
645
|
+
i0.ɵɵelementStart(2, "strong");
|
|
646
|
+
i0.ɵɵtext(3, "Missing or malformed RuntimeActionConfiguration.");
|
|
647
|
+
i0.ɵɵelementEnd();
|
|
648
|
+
i0.ɵɵtext(4, " This Runtime action cannot run until a valid configuration is supplied. Approval should not be granted in this state. ");
|
|
649
|
+
i0.ɵɵelementEnd();
|
|
650
|
+
} }
|
|
651
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_0_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
652
|
+
i0.ɵɵelementStart(0, "strong");
|
|
653
|
+
i0.ɵɵtext(1, "allowAnyEntity");
|
|
654
|
+
i0.ɵɵelementEnd();
|
|
655
|
+
} }
|
|
656
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_0_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
657
|
+
i0.ɵɵelementStart(0, "strong");
|
|
658
|
+
i0.ɵɵtext(1, "allowAnyAction");
|
|
659
|
+
i0.ɵɵelementEnd();
|
|
660
|
+
} }
|
|
661
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_0_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
662
|
+
i0.ɵɵelementStart(0, "strong");
|
|
663
|
+
i0.ɵɵtext(1, "allowAnyAgent");
|
|
664
|
+
i0.ɵɵelementEnd();
|
|
665
|
+
} }
|
|
666
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
667
|
+
i0.ɵɵelementStart(0, "div", 117)(1, "div", 131);
|
|
668
|
+
i0.ɵɵelement(2, "i", 132);
|
|
669
|
+
i0.ɵɵtext(3, " Wildcard permissions enabled ");
|
|
670
|
+
i0.ɵɵelementEnd();
|
|
671
|
+
i0.ɵɵelementStart(4, "div", 128);
|
|
672
|
+
i0.ɵɵtext(5, " This runtime action has one or more wildcard flags set that bypass the specific allowlists below: ");
|
|
673
|
+
i0.ɵɵconditionalCreate(6, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_0_Conditional_6_Template, 2, 0, "strong");
|
|
674
|
+
i0.ɵɵconditionalCreate(7, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_0_Conditional_7_Template, 2, 0, "strong");
|
|
675
|
+
i0.ɵɵconditionalCreate(8, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_0_Conditional_8_Template, 2, 0, "strong");
|
|
676
|
+
i0.ɵɵtext(9, " . Approving grants this action unrestricted access to that namespace on behalf of any user who invokes it. Only approve if the action is framework-authored or you have personally reviewed every place it touches those resources. ");
|
|
677
|
+
i0.ɵɵelementEnd()();
|
|
678
|
+
} if (rf & 2) {
|
|
679
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
680
|
+
i0.ɵɵadvance(6);
|
|
681
|
+
i0.ɵɵconditional(ctx_r1.getWildcardFlags().entity ? 6 : -1);
|
|
682
|
+
i0.ɵɵadvance();
|
|
683
|
+
i0.ɵɵconditional(ctx_r1.getWildcardFlags().action ? 7 : -1);
|
|
684
|
+
i0.ɵɵadvance();
|
|
685
|
+
i0.ɵɵconditional(ctx_r1.getWildcardFlags().agent ? 8 : -1);
|
|
686
|
+
} }
|
|
687
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
688
|
+
i0.ɵɵelementStart(0, "div", 122);
|
|
689
|
+
i0.ɵɵtext(1, "None requested");
|
|
690
|
+
i0.ɵɵelementEnd();
|
|
691
|
+
} }
|
|
692
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_7_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
693
|
+
i0.ɵɵelementStart(0, "span", 133);
|
|
694
|
+
i0.ɵɵtext(1);
|
|
695
|
+
i0.ɵɵelementEnd();
|
|
696
|
+
} if (rf & 2) {
|
|
697
|
+
const e_r22 = ctx.$implicit;
|
|
698
|
+
i0.ɵɵadvance();
|
|
699
|
+
i0.ɵɵtextInterpolate1(" ", e_r22.name, " ");
|
|
700
|
+
} }
|
|
701
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
702
|
+
i0.ɵɵelementStart(0, "div", 123);
|
|
703
|
+
i0.ɵɵrepeaterCreate(1, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_7_For_2_Template, 2, 1, "span", 133, _forTrack1);
|
|
704
|
+
i0.ɵɵelementEnd();
|
|
705
|
+
} if (rf & 2) {
|
|
706
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
707
|
+
i0.ɵɵadvance();
|
|
708
|
+
i0.ɵɵrepeater(ctx_r1.getAllowedEntities());
|
|
709
|
+
} }
|
|
710
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
711
|
+
i0.ɵɵelementStart(0, "div", 122);
|
|
712
|
+
i0.ɵɵtext(1, "None requested");
|
|
713
|
+
i0.ɵɵelementEnd();
|
|
714
|
+
} }
|
|
715
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_13_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
716
|
+
i0.ɵɵelementStart(0, "span", 133);
|
|
717
|
+
i0.ɵɵtext(1);
|
|
718
|
+
i0.ɵɵelementEnd();
|
|
719
|
+
} if (rf & 2) {
|
|
720
|
+
const a_r23 = ctx.$implicit;
|
|
721
|
+
i0.ɵɵadvance();
|
|
722
|
+
i0.ɵɵtextInterpolate1(" ", a_r23.name, " ");
|
|
723
|
+
} }
|
|
724
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
725
|
+
i0.ɵɵelementStart(0, "div", 123);
|
|
726
|
+
i0.ɵɵrepeaterCreate(1, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_13_For_2_Template, 2, 1, "span", 133, _forTrack1);
|
|
727
|
+
i0.ɵɵelementEnd();
|
|
728
|
+
} if (rf & 2) {
|
|
729
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
730
|
+
i0.ɵɵadvance();
|
|
731
|
+
i0.ɵɵrepeater(ctx_r1.getAllowedActions());
|
|
732
|
+
} }
|
|
733
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
734
|
+
i0.ɵɵelementStart(0, "div", 122);
|
|
735
|
+
i0.ɵɵtext(1, "None requested");
|
|
736
|
+
i0.ɵɵelementEnd();
|
|
737
|
+
} }
|
|
738
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_19_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
739
|
+
i0.ɵɵelementStart(0, "span", 133);
|
|
740
|
+
i0.ɵɵtext(1);
|
|
741
|
+
i0.ɵɵelementEnd();
|
|
742
|
+
} if (rf & 2) {
|
|
743
|
+
const g_r24 = ctx.$implicit;
|
|
744
|
+
i0.ɵɵadvance();
|
|
745
|
+
i0.ɵɵtextInterpolate1(" ", g_r24.name, " ");
|
|
746
|
+
} }
|
|
747
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
748
|
+
i0.ɵɵelementStart(0, "div", 123);
|
|
749
|
+
i0.ɵɵrepeaterCreate(1, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_19_For_2_Template, 2, 1, "span", 133, _forTrack1);
|
|
750
|
+
i0.ɵɵelementEnd();
|
|
751
|
+
} if (rf & 2) {
|
|
752
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
753
|
+
i0.ɵɵadvance();
|
|
754
|
+
i0.ɵɵrepeater(ctx_r1.getAllowedAgents());
|
|
755
|
+
} }
|
|
756
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
757
|
+
i0.ɵɵelementStart(0, "div");
|
|
758
|
+
i0.ɵɵtext(1);
|
|
759
|
+
i0.ɵɵelementEnd();
|
|
760
|
+
} if (rf & 2) {
|
|
761
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
762
|
+
i0.ɵɵadvance();
|
|
763
|
+
i0.ɵɵtextInterpolate1("Max execution time: ", ctx_r1.record.MaxExecutionTimeMS, " ms");
|
|
764
|
+
} }
|
|
765
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_35_Template(rf, ctx) { if (rf & 1) {
|
|
766
|
+
i0.ɵɵelementStart(0, "div", 122);
|
|
767
|
+
i0.ɵɵtext(1, "None (only default set: lodash, date-fns, uuid, validator)");
|
|
768
|
+
i0.ɵɵelementEnd();
|
|
769
|
+
} }
|
|
770
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_36_For_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
771
|
+
i0.ɵɵelementStart(0, "span", 18);
|
|
772
|
+
i0.ɵɵtext(1);
|
|
773
|
+
i0.ɵɵelementEnd();
|
|
774
|
+
} if (rf & 2) {
|
|
775
|
+
const lib_r25 = i0.ɵɵnextContext().$implicit;
|
|
776
|
+
i0.ɵɵadvance();
|
|
777
|
+
i0.ɵɵtextInterpolate1(" @", lib_r25.version);
|
|
778
|
+
} }
|
|
779
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_36_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
780
|
+
i0.ɵɵelementStart(0, "span", 134);
|
|
781
|
+
i0.ɵɵtext(1);
|
|
782
|
+
i0.ɵɵconditionalCreate(2, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_36_For_2_Conditional_2_Template, 2, 1, "span", 18);
|
|
783
|
+
i0.ɵɵelementEnd();
|
|
784
|
+
} if (rf & 2) {
|
|
785
|
+
const lib_r25 = ctx.$implicit;
|
|
786
|
+
i0.ɵɵadvance();
|
|
787
|
+
i0.ɵɵtextInterpolate1(" ", lib_r25.name);
|
|
788
|
+
i0.ɵɵadvance();
|
|
789
|
+
i0.ɵɵconditional(lib_r25.version ? 2 : -1);
|
|
790
|
+
} }
|
|
791
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
792
|
+
i0.ɵɵelementStart(0, "div", 130);
|
|
793
|
+
i0.ɵɵrepeaterCreate(1, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_36_For_2_Template, 3, 2, "span", 134, _forTrack2);
|
|
794
|
+
i0.ɵɵelementEnd();
|
|
795
|
+
} if (rf & 2) {
|
|
796
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
797
|
+
i0.ɵɵadvance();
|
|
798
|
+
i0.ɵɵrepeater(ctx_r1.getRequestedLibraries());
|
|
799
|
+
} }
|
|
800
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
801
|
+
i0.ɵɵconditionalCreate(0, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_0_Template, 10, 3, "div", 117);
|
|
802
|
+
i0.ɵɵelementStart(1, "div", 118)(2, "div", 119)(3, "div", 120);
|
|
803
|
+
i0.ɵɵelement(4, "i", 121);
|
|
804
|
+
i0.ɵɵtext(5);
|
|
805
|
+
i0.ɵɵelementEnd();
|
|
806
|
+
i0.ɵɵconditionalCreate(6, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_6_Template, 2, 0, "div", 122)(7, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_7_Template, 3, 0, "div", 123);
|
|
807
|
+
i0.ɵɵelementEnd();
|
|
808
|
+
i0.ɵɵelementStart(8, "div", 119)(9, "div", 120);
|
|
809
|
+
i0.ɵɵelement(10, "i", 124);
|
|
810
|
+
i0.ɵɵtext(11);
|
|
811
|
+
i0.ɵɵelementEnd();
|
|
812
|
+
i0.ɵɵconditionalCreate(12, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_12_Template, 2, 0, "div", 122)(13, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_13_Template, 3, 0, "div", 123);
|
|
813
|
+
i0.ɵɵelementEnd();
|
|
814
|
+
i0.ɵɵelementStart(14, "div", 119)(15, "div", 120);
|
|
815
|
+
i0.ɵɵelement(16, "i", 125);
|
|
816
|
+
i0.ɵɵtext(17);
|
|
817
|
+
i0.ɵɵelementEnd();
|
|
818
|
+
i0.ɵɵconditionalCreate(18, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_18_Template, 2, 0, "div", 122)(19, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_19_Template, 3, 0, "div", 123);
|
|
819
|
+
i0.ɵɵelementEnd()();
|
|
820
|
+
i0.ɵɵelementStart(20, "div", 126)(21, "div")(22, "div", 110);
|
|
821
|
+
i0.ɵɵelement(23, "i", 127);
|
|
822
|
+
i0.ɵɵtext(24, " Resource Limits ");
|
|
823
|
+
i0.ɵɵelementEnd();
|
|
824
|
+
i0.ɵɵelementStart(25, "div", 128)(26, "div");
|
|
825
|
+
i0.ɵɵtext(27);
|
|
826
|
+
i0.ɵɵelementEnd();
|
|
827
|
+
i0.ɵɵelementStart(28, "div");
|
|
828
|
+
i0.ɵɵtext(29);
|
|
829
|
+
i0.ɵɵelementEnd();
|
|
830
|
+
i0.ɵɵconditionalCreate(30, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_30_Template, 2, 1, "div");
|
|
831
|
+
i0.ɵɵelementEnd()();
|
|
832
|
+
i0.ɵɵelementStart(31, "div")(32, "div", 110);
|
|
833
|
+
i0.ɵɵelement(33, "i", 129);
|
|
834
|
+
i0.ɵɵtext(34, " Additional Libraries ");
|
|
835
|
+
i0.ɵɵelementEnd();
|
|
836
|
+
i0.ɵɵconditionalCreate(35, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_35_Template, 2, 0, "div", 122)(36, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Conditional_36_Template, 3, 0, "div", 130);
|
|
837
|
+
i0.ɵɵelementEnd()();
|
|
838
|
+
} if (rf & 2) {
|
|
839
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
840
|
+
i0.ɵɵconditional(ctx_r1.getWildcardFlags().any ? 0 : -1);
|
|
841
|
+
i0.ɵɵadvance(5);
|
|
842
|
+
i0.ɵɵtextInterpolate1(" Allowed Entities (", ctx_r1.getAllowedEntities().length, ") ");
|
|
843
|
+
i0.ɵɵadvance();
|
|
844
|
+
i0.ɵɵconditional(ctx_r1.getAllowedEntities().length === 0 ? 6 : 7);
|
|
845
|
+
i0.ɵɵadvance(5);
|
|
846
|
+
i0.ɵɵtextInterpolate1(" Allowed Actions (", ctx_r1.getAllowedActions().length, ") ");
|
|
847
|
+
i0.ɵɵadvance();
|
|
848
|
+
i0.ɵɵconditional(ctx_r1.getAllowedActions().length === 0 ? 12 : 13);
|
|
849
|
+
i0.ɵɵadvance(5);
|
|
850
|
+
i0.ɵɵtextInterpolate1(" Allowed Agents (", ctx_r1.getAllowedAgents().length, ") ");
|
|
851
|
+
i0.ɵɵadvance();
|
|
852
|
+
i0.ɵɵconditional(ctx_r1.getAllowedAgents().length === 0 ? 18 : 19);
|
|
853
|
+
i0.ɵɵadvance(9);
|
|
854
|
+
i0.ɵɵtextInterpolate1("Max memory: ", ctx_r1.getRuntimeLimits().maxMemoryMB, " MB");
|
|
855
|
+
i0.ɵɵadvance(2);
|
|
856
|
+
i0.ɵɵtextInterpolate1("Max bridge calls: ", ctx_r1.getRuntimeLimits().maxBridgeCalls);
|
|
857
|
+
i0.ɵɵadvance();
|
|
858
|
+
i0.ɵɵconditional(ctx_r1.record.MaxExecutionTimeMS ? 30 : -1);
|
|
859
|
+
i0.ɵɵadvance(5);
|
|
860
|
+
i0.ɵɵconditional(ctx_r1.getRequestedLibraries().length === 0 ? 35 : 36);
|
|
861
|
+
} }
|
|
862
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
863
|
+
const _r26 = i0.ɵɵgetCurrentView();
|
|
864
|
+
i0.ɵɵelementStart(0, "div", 113)(1, "div", 135);
|
|
865
|
+
i0.ɵɵelement(2, "i", 136);
|
|
866
|
+
i0.ɵɵtext(3, " Approval required before this Runtime action can execute. ");
|
|
867
|
+
i0.ɵɵelementEnd();
|
|
868
|
+
i0.ɵɵelementStart(4, "div", 137);
|
|
869
|
+
i0.ɵɵtext(5, " Approving grants this action the permissions listed above on behalf of any user who invokes it. Review the code and permissions carefully before approving. ");
|
|
870
|
+
i0.ɵɵelementEnd();
|
|
871
|
+
i0.ɵɵelementStart(6, "div", 21)(7, "button", 138);
|
|
872
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_12_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.approveCode()); });
|
|
873
|
+
i0.ɵɵelement(8, "i", 139);
|
|
874
|
+
i0.ɵɵtext(9, " Approve ");
|
|
875
|
+
i0.ɵɵelementEnd();
|
|
876
|
+
i0.ɵɵelementStart(10, "button", 140);
|
|
877
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_12_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.rejectCode()); });
|
|
878
|
+
i0.ɵɵelement(11, "i", 141);
|
|
879
|
+
i0.ɵɵtext(12, " Reject ");
|
|
880
|
+
i0.ɵɵelementEnd()()();
|
|
881
|
+
} }
|
|
882
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Template(rf, ctx) { if (rf & 1) {
|
|
883
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 26);
|
|
884
|
+
i0.ɵɵtemplate(1, MJActionFormComponentExtended_Conditional_0_Conditional_37_ng_template_1_Template, 5, 1, "ng-template", 27);
|
|
885
|
+
i0.ɵɵelementStart(2, "div", 28);
|
|
886
|
+
i0.ɵɵconditionalCreate(3, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_3_Template, 5, 0, "div", 109)(4, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_4_Template, 37, 11);
|
|
887
|
+
i0.ɵɵelementStart(5, "div")(6, "div", 110);
|
|
888
|
+
i0.ɵɵelement(7, "i", 111);
|
|
889
|
+
i0.ɵɵtext(8, " JavaScript Payload ");
|
|
890
|
+
i0.ɵɵelementEnd();
|
|
891
|
+
i0.ɵɵelementStart(9, "pre", 112)(10, "code");
|
|
892
|
+
i0.ɵɵtext(11);
|
|
893
|
+
i0.ɵɵelementEnd()()();
|
|
894
|
+
i0.ɵɵconditionalCreate(12, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_12_Template, 13, 0, "div", 113);
|
|
895
|
+
i0.ɵɵelementEnd()();
|
|
896
|
+
} if (rf & 2) {
|
|
897
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
898
|
+
i0.ɵɵproperty("Expanded", true);
|
|
899
|
+
i0.ɵɵadvance(3);
|
|
900
|
+
i0.ɵɵconditional(!ctx_r1.runtimeConfig ? 3 : 4);
|
|
901
|
+
i0.ɵɵadvance(8);
|
|
902
|
+
i0.ɵɵtextInterpolate(ctx_r1.record.Code);
|
|
903
|
+
i0.ɵɵadvance();
|
|
904
|
+
i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.record.CodeApprovalStatus === "Pending" ? 12 : -1);
|
|
905
|
+
} }
|
|
906
|
+
function MJActionFormComponentExtended_Conditional_0_ng_template_39_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
907
|
+
i0.ɵɵelementStart(0, "span", 143);
|
|
602
908
|
i0.ɵɵtext(1);
|
|
603
909
|
i0.ɵɵelementEnd();
|
|
604
910
|
} if (rf & 2) {
|
|
@@ -606,200 +912,200 @@ function MJActionFormComponentExtended_Conditional_1_ng_template_39_Conditional_
|
|
|
606
912
|
i0.ɵɵadvance();
|
|
607
913
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.resultCodes.length, " ");
|
|
608
914
|
} }
|
|
609
|
-
function
|
|
610
|
-
i0.ɵɵelementStart(0, "span",
|
|
611
|
-
i0.ɵɵelement(1, "i",
|
|
915
|
+
function MJActionFormComponentExtended_Conditional_0_ng_template_39_Template(rf, ctx) { if (rf & 1) {
|
|
916
|
+
i0.ɵɵelementStart(0, "span", 54);
|
|
917
|
+
i0.ɵɵelement(1, "i", 142);
|
|
612
918
|
i0.ɵɵtext(2, " Result Codes ");
|
|
613
|
-
i0.ɵɵconditionalCreate(3,
|
|
919
|
+
i0.ɵɵconditionalCreate(3, MJActionFormComponentExtended_Conditional_0_ng_template_39_Conditional_3_Template, 2, 1, "span", 143);
|
|
614
920
|
i0.ɵɵelementEnd();
|
|
615
921
|
} if (rf & 2) {
|
|
616
922
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
617
923
|
i0.ɵɵadvance(3);
|
|
618
924
|
i0.ɵɵconditional(ctx_r1.resultCodes.length > 0 ? 3 : -1);
|
|
619
925
|
} }
|
|
620
|
-
function
|
|
621
|
-
const
|
|
622
|
-
i0.ɵɵelementStart(0, "div", 31)(1, "button",
|
|
623
|
-
i0.ɵɵlistener("click", function
|
|
624
|
-
i0.ɵɵelement(2, "i",
|
|
926
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_41_Template(rf, ctx) { if (rf & 1) {
|
|
927
|
+
const _r27 = i0.ɵɵgetCurrentView();
|
|
928
|
+
i0.ɵɵelementStart(0, "div", 31)(1, "button", 144);
|
|
929
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_41_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.addResultCode()); });
|
|
930
|
+
i0.ɵɵelement(2, "i", 69);
|
|
625
931
|
i0.ɵɵtext(3, " Add Result Code ");
|
|
626
932
|
i0.ɵɵelementEnd()();
|
|
627
933
|
} }
|
|
628
|
-
function
|
|
934
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_42_Template(rf, ctx) { if (rf & 1) {
|
|
629
935
|
i0.ɵɵelementStart(0, "div", 29);
|
|
630
|
-
i0.ɵɵelement(1, "i",
|
|
936
|
+
i0.ɵɵelement(1, "i", 56);
|
|
631
937
|
i0.ɵɵtext(2, " Loading result codes... ");
|
|
632
938
|
i0.ɵɵelementEnd();
|
|
633
939
|
} }
|
|
634
|
-
function
|
|
635
|
-
i0.ɵɵelementStart(0, "p",
|
|
940
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
941
|
+
i0.ɵɵelementStart(0, "p", 59);
|
|
636
942
|
i0.ɵɵtext(1, "Add result codes to define possible outcomes");
|
|
637
943
|
i0.ɵɵelementEnd();
|
|
638
944
|
} }
|
|
639
|
-
function
|
|
945
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_43_Template(rf, ctx) { if (rf & 1) {
|
|
640
946
|
i0.ɵɵelementStart(0, "div", 30);
|
|
641
|
-
i0.ɵɵelement(1, "i",
|
|
642
|
-
i0.ɵɵelementStart(2, "p",
|
|
947
|
+
i0.ɵɵelement(1, "i", 145);
|
|
948
|
+
i0.ɵɵelementStart(2, "p", 58);
|
|
643
949
|
i0.ɵɵtext(3, "No result codes defined");
|
|
644
950
|
i0.ɵɵelementEnd();
|
|
645
|
-
i0.ɵɵconditionalCreate(4,
|
|
951
|
+
i0.ɵɵconditionalCreate(4, MJActionFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Template, 2, 0, "p", 59);
|
|
646
952
|
i0.ɵɵelementEnd();
|
|
647
953
|
} if (rf & 2) {
|
|
648
954
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
649
955
|
i0.ɵɵadvance(4);
|
|
650
956
|
i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.record.IsSaved ? 4 : -1);
|
|
651
957
|
} }
|
|
652
|
-
function
|
|
653
|
-
i0.ɵɵelementStart(0, "div",
|
|
958
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_44_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
959
|
+
i0.ɵɵelementStart(0, "div", 151);
|
|
654
960
|
i0.ɵɵtext(1);
|
|
655
961
|
i0.ɵɵelementEnd();
|
|
656
962
|
} if (rf & 2) {
|
|
657
|
-
const
|
|
963
|
+
const code_r29 = i0.ɵɵnextContext().$implicit;
|
|
658
964
|
i0.ɵɵadvance();
|
|
659
|
-
i0.ɵɵtextInterpolate(
|
|
965
|
+
i0.ɵɵtextInterpolate(code_r29.Description);
|
|
660
966
|
} }
|
|
661
|
-
function
|
|
662
|
-
const
|
|
663
|
-
i0.ɵɵelementStart(0, "div",
|
|
664
|
-
i0.ɵɵlistener("click", function
|
|
665
|
-
i0.ɵɵelement(2, "i",
|
|
967
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_44_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
968
|
+
const _r30 = i0.ɵɵgetCurrentView();
|
|
969
|
+
i0.ɵɵelementStart(0, "div", 152)(1, "button", 153);
|
|
970
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_44_For_2_Conditional_7_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r30); const code_r29 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); ctx_r1.editResultCode(code_r29); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
971
|
+
i0.ɵɵelement(2, "i", 83);
|
|
666
972
|
i0.ɵɵelementEnd();
|
|
667
|
-
i0.ɵɵelementStart(3, "button",
|
|
668
|
-
i0.ɵɵlistener("click", function
|
|
669
|
-
i0.ɵɵelement(4, "i",
|
|
973
|
+
i0.ɵɵelementStart(3, "button", 154);
|
|
974
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_44_For_2_Conditional_7_Template_button_click_3_listener($event) { i0.ɵɵrestoreView(_r30); const code_r29 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); ctx_r1.deleteResultCode(code_r29); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
975
|
+
i0.ɵɵelement(4, "i", 85);
|
|
670
976
|
i0.ɵɵelementEnd()();
|
|
671
977
|
} }
|
|
672
|
-
function
|
|
673
|
-
const
|
|
674
|
-
i0.ɵɵelementStart(0, "div",
|
|
675
|
-
i0.ɵɵlistener("click", function
|
|
676
|
-
i0.ɵɵelementStart(1, "div",
|
|
978
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_44_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
979
|
+
const _r28 = i0.ɵɵgetCurrentView();
|
|
980
|
+
i0.ɵɵelementStart(0, "div", 147);
|
|
981
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_44_For_2_Template_div_click_0_listener($event) { const code_r29 = i0.ɵɵrestoreView(_r28).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onResultCodeClick(code_r29, $event)); });
|
|
982
|
+
i0.ɵɵelementStart(1, "div", 148);
|
|
677
983
|
i0.ɵɵelement(2, "i");
|
|
678
984
|
i0.ɵɵelementEnd();
|
|
679
|
-
i0.ɵɵelementStart(3, "div",
|
|
985
|
+
i0.ɵɵelementStart(3, "div", 149)(4, "div", 150);
|
|
680
986
|
i0.ɵɵtext(5);
|
|
681
987
|
i0.ɵɵelementEnd();
|
|
682
|
-
i0.ɵɵconditionalCreate(6,
|
|
988
|
+
i0.ɵɵconditionalCreate(6, MJActionFormComponentExtended_Conditional_0_Conditional_44_For_2_Conditional_6_Template, 2, 1, "div", 151);
|
|
683
989
|
i0.ɵɵelementEnd();
|
|
684
|
-
i0.ɵɵconditionalCreate(7,
|
|
990
|
+
i0.ɵɵconditionalCreate(7, MJActionFormComponentExtended_Conditional_0_Conditional_44_For_2_Conditional_7_Template, 5, 0, "div", 152);
|
|
685
991
|
i0.ɵɵelementEnd();
|
|
686
992
|
} if (rf & 2) {
|
|
687
|
-
const
|
|
993
|
+
const code_r29 = ctx.$implicit;
|
|
688
994
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
689
|
-
i0.ɵɵclassProp("success",
|
|
995
|
+
i0.ɵɵclassProp("success", code_r29.IsSuccess)("failure", !code_r29.IsSuccess)("clickable", true);
|
|
690
996
|
i0.ɵɵadvance(2);
|
|
691
|
-
i0.ɵɵclassMap(
|
|
997
|
+
i0.ɵɵclassMap(code_r29.IsSuccess ? "fa-solid fa-check-circle" : "fa-solid fa-times-circle");
|
|
692
998
|
i0.ɵɵadvance(3);
|
|
693
|
-
i0.ɵɵtextInterpolate(
|
|
999
|
+
i0.ɵɵtextInterpolate(code_r29.ResultCode);
|
|
694
1000
|
i0.ɵɵadvance();
|
|
695
|
-
i0.ɵɵconditional(
|
|
1001
|
+
i0.ɵɵconditional(code_r29.Description ? 6 : -1);
|
|
696
1002
|
i0.ɵɵadvance();
|
|
697
1003
|
i0.ɵɵconditional(ctx_r1.EditMode ? 7 : -1);
|
|
698
1004
|
} }
|
|
699
|
-
function
|
|
1005
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_44_Template(rf, ctx) { if (rf & 1) {
|
|
700
1006
|
i0.ɵɵelementStart(0, "div", 32);
|
|
701
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1007
|
+
i0.ɵɵrepeaterCreate(1, MJActionFormComponentExtended_Conditional_0_Conditional_44_For_2_Template, 8, 11, "div", 146, _forTrack0);
|
|
702
1008
|
i0.ɵɵelementEnd();
|
|
703
1009
|
} if (rf & 2) {
|
|
704
1010
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
705
1011
|
i0.ɵɵadvance();
|
|
706
1012
|
i0.ɵɵrepeater(ctx_r1.resultCodes);
|
|
707
1013
|
} }
|
|
708
|
-
function
|
|
709
|
-
i0.ɵɵelementStart(0, "span",
|
|
710
|
-
i0.ɵɵelement(1, "i",
|
|
1014
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_45_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1015
|
+
i0.ɵɵelementStart(0, "span", 54);
|
|
1016
|
+
i0.ɵɵelement(1, "i", 155);
|
|
711
1017
|
i0.ɵɵtext(2, " Execution & Monitoring ");
|
|
712
1018
|
i0.ɵɵelementEnd();
|
|
713
1019
|
} }
|
|
714
|
-
function
|
|
1020
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_45_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
715
1021
|
i0.ɵɵelementStart(0, "div", 29);
|
|
716
|
-
i0.ɵɵelement(1, "i",
|
|
1022
|
+
i0.ɵɵelement(1, "i", 56);
|
|
717
1023
|
i0.ɵɵtext(2, " Loading executions... ");
|
|
718
1024
|
i0.ɵɵelementEnd();
|
|
719
1025
|
} }
|
|
720
|
-
function
|
|
1026
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
721
1027
|
i0.ɵɵelementStart(0, "div", 30);
|
|
722
|
-
i0.ɵɵelement(1, "i",
|
|
723
|
-
i0.ɵɵelementStart(2, "p",
|
|
1028
|
+
i0.ɵɵelement(1, "i", 156);
|
|
1029
|
+
i0.ɵɵelementStart(2, "p", 58);
|
|
724
1030
|
i0.ɵɵtext(3, "No executions yet");
|
|
725
1031
|
i0.ɵɵelementEnd()();
|
|
726
1032
|
} }
|
|
727
|
-
function
|
|
1033
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_45_Conditional_5_For_41_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
728
1034
|
i0.ɵɵtext(0);
|
|
729
1035
|
} if (rf & 2) {
|
|
730
|
-
const
|
|
1036
|
+
const execution_r32 = i0.ɵɵnextContext().$implicit;
|
|
731
1037
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
732
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(ctx_r1.getExecutionDuration(
|
|
1038
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(ctx_r1.getExecutionDuration(execution_r32)), " ");
|
|
733
1039
|
} }
|
|
734
|
-
function
|
|
735
|
-
i0.ɵɵelementStart(0, "span",
|
|
1040
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_45_Conditional_5_For_41_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1041
|
+
i0.ɵɵelementStart(0, "span", 171);
|
|
736
1042
|
i0.ɵɵtext(1, "Running...");
|
|
737
1043
|
i0.ɵɵelementEnd();
|
|
738
1044
|
} }
|
|
739
|
-
function
|
|
740
|
-
const
|
|
741
|
-
i0.ɵɵelementStart(0, "tr",
|
|
1045
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_45_Conditional_5_For_41_Template(rf, ctx) { if (rf & 1) {
|
|
1046
|
+
const _r31 = i0.ɵɵgetCurrentView();
|
|
1047
|
+
i0.ɵɵelementStart(0, "tr", 170)(1, "td");
|
|
742
1048
|
i0.ɵɵtext(2);
|
|
743
1049
|
i0.ɵɵpipe(3, "date");
|
|
744
1050
|
i0.ɵɵelementEnd();
|
|
745
1051
|
i0.ɵɵelementStart(4, "td");
|
|
746
|
-
i0.ɵɵconditionalCreate(5,
|
|
1052
|
+
i0.ɵɵconditionalCreate(5, MJActionFormComponentExtended_Conditional_0_Conditional_45_Conditional_5_For_41_Conditional_5_Template, 1, 1)(6, MJActionFormComponentExtended_Conditional_0_Conditional_45_Conditional_5_For_41_Conditional_6_Template, 2, 0, "span", 171);
|
|
747
1053
|
i0.ɵɵelementEnd();
|
|
748
1054
|
i0.ɵɵelementStart(7, "td");
|
|
749
1055
|
i0.ɵɵtext(8);
|
|
750
1056
|
i0.ɵɵelementEnd();
|
|
751
|
-
i0.ɵɵelementStart(9, "td")(10, "span",
|
|
1057
|
+
i0.ɵɵelementStart(9, "td")(10, "span", 150);
|
|
752
1058
|
i0.ɵɵtext(11);
|
|
753
1059
|
i0.ɵɵelementEnd()();
|
|
754
|
-
i0.ɵɵelementStart(12, "td")(13, "button",
|
|
755
|
-
i0.ɵɵlistener("click", function
|
|
756
|
-
i0.ɵɵelement(14, "i",
|
|
1060
|
+
i0.ɵɵelementStart(12, "td")(13, "button", 68);
|
|
1061
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_45_Conditional_5_For_41_Template_button_click_13_listener() { const execution_r32 = i0.ɵɵrestoreView(_r31).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToExecution(execution_r32.ID)); });
|
|
1062
|
+
i0.ɵɵelement(14, "i", 172);
|
|
757
1063
|
i0.ɵɵelementEnd()()();
|
|
758
1064
|
} if (rf & 2) {
|
|
759
|
-
const
|
|
1065
|
+
const execution_r32 = ctx.$implicit;
|
|
760
1066
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
761
|
-
i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(
|
|
1067
|
+
i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(execution_r32));
|
|
762
1068
|
i0.ɵɵadvance(2);
|
|
763
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(3, 10,
|
|
1069
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(3, 10, execution_r32.StartedAt, "short"));
|
|
764
1070
|
i0.ɵɵadvance(3);
|
|
765
|
-
i0.ɵɵconditional(
|
|
1071
|
+
i0.ɵɵconditional(execution_r32.EndedAt ? 5 : 6);
|
|
766
1072
|
i0.ɵɵadvance(3);
|
|
767
|
-
i0.ɵɵtextInterpolate(
|
|
1073
|
+
i0.ɵɵtextInterpolate(execution_r32.User);
|
|
768
1074
|
i0.ɵɵadvance(2);
|
|
769
|
-
i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(
|
|
1075
|
+
i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(execution_r32))("failure", !ctx_r1.isExecutionSuccess(execution_r32));
|
|
770
1076
|
i0.ɵɵadvance();
|
|
771
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1077
|
+
i0.ɵɵtextInterpolate1(" ", execution_r32.ResultCode, " ");
|
|
772
1078
|
} }
|
|
773
|
-
function
|
|
774
|
-
i0.ɵɵelementStart(0, "div",
|
|
775
|
-
i0.ɵɵelement(2, "i",
|
|
776
|
-
i0.ɵɵelementStart(3, "div",
|
|
1079
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_45_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1080
|
+
i0.ɵɵelementStart(0, "div", 157)(1, "div", 158);
|
|
1081
|
+
i0.ɵɵelement(2, "i", 159);
|
|
1082
|
+
i0.ɵɵelementStart(3, "div", 160)(4, "div", 161);
|
|
777
1083
|
i0.ɵɵtext(5, "Avg Duration");
|
|
778
1084
|
i0.ɵɵelementEnd();
|
|
779
|
-
i0.ɵɵelementStart(6, "div",
|
|
1085
|
+
i0.ɵɵelementStart(6, "div", 162);
|
|
780
1086
|
i0.ɵɵtext(7);
|
|
781
1087
|
i0.ɵɵelementEnd()()();
|
|
782
|
-
i0.ɵɵelementStart(8, "div",
|
|
783
|
-
i0.ɵɵelement(9, "i",
|
|
784
|
-
i0.ɵɵelementStart(10, "div",
|
|
1088
|
+
i0.ɵɵelementStart(8, "div", 158);
|
|
1089
|
+
i0.ɵɵelement(9, "i", 163);
|
|
1090
|
+
i0.ɵɵelementStart(10, "div", 160)(11, "div", 161);
|
|
785
1091
|
i0.ɵɵtext(12, "Success Rate");
|
|
786
1092
|
i0.ɵɵelementEnd();
|
|
787
|
-
i0.ɵɵelementStart(13, "div",
|
|
1093
|
+
i0.ɵɵelementStart(13, "div", 164);
|
|
788
1094
|
i0.ɵɵtext(14);
|
|
789
1095
|
i0.ɵɵelementEnd()()();
|
|
790
|
-
i0.ɵɵelementStart(15, "div",
|
|
791
|
-
i0.ɵɵelement(16, "i",
|
|
792
|
-
i0.ɵɵelementStart(17, "div",
|
|
1096
|
+
i0.ɵɵelementStart(15, "div", 158);
|
|
1097
|
+
i0.ɵɵelement(16, "i", 165);
|
|
1098
|
+
i0.ɵɵelementStart(17, "div", 160)(18, "div", 161);
|
|
793
1099
|
i0.ɵɵtext(19, "Total Runs");
|
|
794
1100
|
i0.ɵɵelementEnd();
|
|
795
|
-
i0.ɵɵelementStart(20, "div",
|
|
1101
|
+
i0.ɵɵelementStart(20, "div", 162);
|
|
796
1102
|
i0.ɵɵtext(21);
|
|
797
1103
|
i0.ɵɵelementEnd()()()();
|
|
798
|
-
i0.ɵɵelementStart(22, "h3",
|
|
799
|
-
i0.ɵɵelement(23, "i",
|
|
1104
|
+
i0.ɵɵelementStart(22, "h3", 166);
|
|
1105
|
+
i0.ɵɵelement(23, "i", 167);
|
|
800
1106
|
i0.ɵɵtext(24, " Recent Executions");
|
|
801
1107
|
i0.ɵɵelementEnd();
|
|
802
|
-
i0.ɵɵelementStart(25, "div",
|
|
1108
|
+
i0.ɵɵelementStart(25, "div", 168)(26, "table")(27, "thead")(28, "tr")(29, "th");
|
|
803
1109
|
i0.ɵɵtext(30, "Started");
|
|
804
1110
|
i0.ɵɵelementEnd();
|
|
805
1111
|
i0.ɵɵelementStart(31, "th");
|
|
@@ -815,7 +1121,7 @@ function MJActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_
|
|
|
815
1121
|
i0.ɵɵtext(38, "Actions");
|
|
816
1122
|
i0.ɵɵelementEnd()()();
|
|
817
1123
|
i0.ɵɵelementStart(39, "tbody");
|
|
818
|
-
i0.ɵɵrepeaterCreate(40,
|
|
1124
|
+
i0.ɵɵrepeaterCreate(40, MJActionFormComponentExtended_Conditional_0_Conditional_45_Conditional_5_For_41_Template, 15, 13, "tr", 169, _forTrack0);
|
|
819
1125
|
i0.ɵɵelementEnd()()();
|
|
820
1126
|
} if (rf & 2) {
|
|
821
1127
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -832,11 +1138,11 @@ function MJActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_
|
|
|
832
1138
|
i0.ɵɵadvance(19);
|
|
833
1139
|
i0.ɵɵrepeater(ctx_r1.recentExecutions);
|
|
834
1140
|
} }
|
|
835
|
-
function
|
|
1141
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_45_Template(rf, ctx) { if (rf & 1) {
|
|
836
1142
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 26);
|
|
837
|
-
i0.ɵɵtemplate(1,
|
|
1143
|
+
i0.ɵɵtemplate(1, MJActionFormComponentExtended_Conditional_0_Conditional_45_ng_template_1_Template, 3, 0, "ng-template", 27);
|
|
838
1144
|
i0.ɵɵelementStart(2, "div", 28);
|
|
839
|
-
i0.ɵɵconditionalCreate(3,
|
|
1145
|
+
i0.ɵɵconditionalCreate(3, MJActionFormComponentExtended_Conditional_0_Conditional_45_Conditional_3_Template, 3, 0, "div", 29)(4, MJActionFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Template, 4, 0, "div", 30)(5, MJActionFormComponentExtended_Conditional_0_Conditional_45_Conditional_5_Template, 42, 7);
|
|
840
1146
|
i0.ɵɵelementEnd()();
|
|
841
1147
|
} if (rf & 2) {
|
|
842
1148
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -844,102 +1150,102 @@ function MJActionFormComponentExtended_Conditional_1_Conditional_45_Template(rf,
|
|
|
844
1150
|
i0.ɵɵadvance(3);
|
|
845
1151
|
i0.ɵɵconditional(ctx_r1.isLoadingExecutions ? 3 : ctx_r1.recentExecutions.length === 0 ? 4 : 5);
|
|
846
1152
|
} }
|
|
847
|
-
function
|
|
848
|
-
i0.ɵɵelementStart(0, "span",
|
|
849
|
-
i0.ɵɵelement(1, "i",
|
|
1153
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_46_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1154
|
+
i0.ɵɵelementStart(0, "span", 54);
|
|
1155
|
+
i0.ɵɵelement(1, "i", 184);
|
|
850
1156
|
i0.ɵɵtext(2, " Related Configuration ");
|
|
851
1157
|
i0.ɵɵelementEnd();
|
|
852
1158
|
} }
|
|
853
|
-
function
|
|
1159
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_46_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
854
1160
|
i0.ɵɵelementStart(0, "div", 29);
|
|
855
|
-
i0.ɵɵelement(1, "i",
|
|
1161
|
+
i0.ɵɵelement(1, "i", 56);
|
|
856
1162
|
i0.ɵɵtext(2, " Loading libraries... ");
|
|
857
1163
|
i0.ɵɵelementEnd();
|
|
858
1164
|
} }
|
|
859
|
-
function
|
|
860
|
-
i0.ɵɵelementStart(0, "div",
|
|
1165
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_46_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
1166
|
+
i0.ɵɵelementStart(0, "div", 175)(1, "p");
|
|
861
1167
|
i0.ɵɵtext(2, "No libraries configured");
|
|
862
1168
|
i0.ɵɵelementEnd()();
|
|
863
1169
|
} }
|
|
864
|
-
function
|
|
865
|
-
i0.ɵɵelementStart(0, "div",
|
|
1170
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_46_Conditional_9_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1171
|
+
i0.ɵɵelementStart(0, "div", 189);
|
|
866
1172
|
i0.ɵɵtext(1);
|
|
867
1173
|
i0.ɵɵelementEnd();
|
|
868
1174
|
} if (rf & 2) {
|
|
869
|
-
const ɵ$
|
|
1175
|
+
const ɵ$index_825_r35 = i0.ɵɵnextContext().$index;
|
|
870
1176
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
871
1177
|
i0.ɵɵadvance();
|
|
872
|
-
i0.ɵɵtextInterpolate(ctx_r1.actionLibraries[ɵ$
|
|
873
|
-
} }
|
|
874
|
-
function
|
|
875
|
-
const
|
|
876
|
-
i0.ɵɵelementStart(0, "div",
|
|
877
|
-
i0.ɵɵlistener("click", function
|
|
878
|
-
i0.ɵɵelement(1, "i",
|
|
879
|
-
i0.ɵɵelementStart(2, "div",
|
|
1178
|
+
i0.ɵɵtextInterpolate(ctx_r1.actionLibraries[ɵ$index_825_r35].ItemsUsed);
|
|
1179
|
+
} }
|
|
1180
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_46_Conditional_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1181
|
+
const _r33 = i0.ɵɵgetCurrentView();
|
|
1182
|
+
i0.ɵɵelementStart(0, "div", 186);
|
|
1183
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_46_Conditional_9_For_2_Template_div_click_0_listener() { const lib_r34 = i0.ɵɵrestoreView(_r33).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToLibrary(lib_r34.ID)); });
|
|
1184
|
+
i0.ɵɵelement(1, "i", 174);
|
|
1185
|
+
i0.ɵɵelementStart(2, "div", 187)(3, "div", 188);
|
|
880
1186
|
i0.ɵɵtext(4);
|
|
881
1187
|
i0.ɵɵelementEnd();
|
|
882
|
-
i0.ɵɵconditionalCreate(5,
|
|
1188
|
+
i0.ɵɵconditionalCreate(5, MJActionFormComponentExtended_Conditional_0_Conditional_46_Conditional_9_For_2_Conditional_5_Template, 2, 1, "div", 189);
|
|
883
1189
|
i0.ɵɵelementEnd();
|
|
884
|
-
i0.ɵɵelement(6, "i",
|
|
1190
|
+
i0.ɵɵelement(6, "i", 172);
|
|
885
1191
|
i0.ɵɵelementEnd();
|
|
886
1192
|
} if (rf & 2) {
|
|
887
|
-
const
|
|
888
|
-
const ɵ$
|
|
1193
|
+
const lib_r34 = ctx.$implicit;
|
|
1194
|
+
const ɵ$index_825_r35 = ctx.$index;
|
|
889
1195
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
890
1196
|
i0.ɵɵadvance(4);
|
|
891
|
-
i0.ɵɵtextInterpolate(
|
|
1197
|
+
i0.ɵɵtextInterpolate(lib_r34.Name);
|
|
892
1198
|
i0.ɵɵadvance();
|
|
893
|
-
i0.ɵɵconditional(ctx_r1.actionLibraries[ɵ$
|
|
1199
|
+
i0.ɵɵconditional(ctx_r1.actionLibraries[ɵ$index_825_r35].ItemsUsed ? 5 : -1);
|
|
894
1200
|
} }
|
|
895
|
-
function
|
|
896
|
-
i0.ɵɵelementStart(0, "div",
|
|
897
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1201
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_46_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1202
|
+
i0.ɵɵelementStart(0, "div", 176);
|
|
1203
|
+
i0.ɵɵrepeaterCreate(1, MJActionFormComponentExtended_Conditional_0_Conditional_46_Conditional_9_For_2_Template, 7, 2, "div", 185, _forTrack0);
|
|
898
1204
|
i0.ɵɵelementEnd();
|
|
899
1205
|
} if (rf & 2) {
|
|
900
1206
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
901
1207
|
i0.ɵɵadvance();
|
|
902
1208
|
i0.ɵɵrepeater(ctx_r1.libraries);
|
|
903
1209
|
} }
|
|
904
|
-
function
|
|
1210
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_46_Template(rf, ctx) { if (rf & 1) {
|
|
905
1211
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 26);
|
|
906
|
-
i0.ɵɵtemplate(1,
|
|
907
|
-
i0.ɵɵelementStart(2, "div", 28)(3, "div",
|
|
908
|
-
i0.ɵɵelement(5, "i",
|
|
1212
|
+
i0.ɵɵtemplate(1, MJActionFormComponentExtended_Conditional_0_Conditional_46_ng_template_1_Template, 3, 0, "ng-template", 27);
|
|
1213
|
+
i0.ɵɵelementStart(2, "div", 28)(3, "div", 173)(4, "h3");
|
|
1214
|
+
i0.ɵɵelement(5, "i", 174);
|
|
909
1215
|
i0.ɵɵtext(6, " Libraries");
|
|
910
1216
|
i0.ɵɵelementEnd();
|
|
911
|
-
i0.ɵɵconditionalCreate(7,
|
|
1217
|
+
i0.ɵɵconditionalCreate(7, MJActionFormComponentExtended_Conditional_0_Conditional_46_Conditional_7_Template, 3, 0, "div", 29)(8, MJActionFormComponentExtended_Conditional_0_Conditional_46_Conditional_8_Template, 3, 0, "div", 175)(9, MJActionFormComponentExtended_Conditional_0_Conditional_46_Conditional_9_Template, 3, 0, "div", 176);
|
|
912
1218
|
i0.ɵɵelementEnd();
|
|
913
|
-
i0.ɵɵelementStart(10, "div",
|
|
914
|
-
i0.ɵɵelement(12, "i",
|
|
1219
|
+
i0.ɵɵelementStart(10, "div", 177)(11, "div", 178);
|
|
1220
|
+
i0.ɵɵelement(12, "i", 179);
|
|
915
1221
|
i0.ɵɵelementStart(13, "span");
|
|
916
1222
|
i0.ɵɵtext(14, "Authorizations");
|
|
917
1223
|
i0.ɵɵelementEnd();
|
|
918
|
-
i0.ɵɵelementStart(15, "span",
|
|
1224
|
+
i0.ɵɵelementStart(15, "span", 180);
|
|
919
1225
|
i0.ɵɵtext(16, "View");
|
|
920
1226
|
i0.ɵɵelementEnd()();
|
|
921
|
-
i0.ɵɵelementStart(17, "div",
|
|
922
|
-
i0.ɵɵelement(18, "i",
|
|
1227
|
+
i0.ɵɵelementStart(17, "div", 178);
|
|
1228
|
+
i0.ɵɵelement(18, "i", 181);
|
|
923
1229
|
i0.ɵɵelementStart(19, "span");
|
|
924
1230
|
i0.ɵɵtext(20, "Contexts");
|
|
925
1231
|
i0.ɵɵelementEnd();
|
|
926
|
-
i0.ɵɵelementStart(21, "span",
|
|
1232
|
+
i0.ɵɵelementStart(21, "span", 180);
|
|
927
1233
|
i0.ɵɵtext(22, "View");
|
|
928
1234
|
i0.ɵɵelementEnd()();
|
|
929
|
-
i0.ɵɵelementStart(23, "div",
|
|
930
|
-
i0.ɵɵelement(24, "i",
|
|
1235
|
+
i0.ɵɵelementStart(23, "div", 178);
|
|
1236
|
+
i0.ɵɵelement(24, "i", 182);
|
|
931
1237
|
i0.ɵɵelementStart(25, "span");
|
|
932
1238
|
i0.ɵɵtext(26, "Scheduled Actions");
|
|
933
1239
|
i0.ɵɵelementEnd();
|
|
934
|
-
i0.ɵɵelementStart(27, "span",
|
|
1240
|
+
i0.ɵɵelementStart(27, "span", 180);
|
|
935
1241
|
i0.ɵɵtext(28, "View");
|
|
936
1242
|
i0.ɵɵelementEnd()();
|
|
937
|
-
i0.ɵɵelementStart(29, "div",
|
|
938
|
-
i0.ɵɵelement(30, "i",
|
|
1243
|
+
i0.ɵɵelementStart(29, "div", 178);
|
|
1244
|
+
i0.ɵɵelement(30, "i", 183);
|
|
939
1245
|
i0.ɵɵelementStart(31, "span");
|
|
940
1246
|
i0.ɵɵtext(32, "Entity Actions");
|
|
941
1247
|
i0.ɵɵelementEnd();
|
|
942
|
-
i0.ɵɵelementStart(33, "span",
|
|
1248
|
+
i0.ɵɵelementStart(33, "span", 180);
|
|
943
1249
|
i0.ɵɵtext(34, "View");
|
|
944
1250
|
i0.ɵɵelementEnd()()()()();
|
|
945
1251
|
} if (rf & 2) {
|
|
@@ -948,17 +1254,18 @@ function MJActionFormComponentExtended_Conditional_1_Conditional_46_Template(rf,
|
|
|
948
1254
|
i0.ɵɵadvance(7);
|
|
949
1255
|
i0.ɵɵconditional(ctx_r1.isLoadingLibraries ? 7 : ctx_r1.actionLibraries.length === 0 ? 8 : 9);
|
|
950
1256
|
} }
|
|
951
|
-
function
|
|
952
|
-
i0.ɵɵ
|
|
953
|
-
i0.ɵɵ
|
|
954
|
-
i0.ɵɵ
|
|
1257
|
+
function MJActionFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
1258
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
1259
|
+
i0.ɵɵelementStart(0, "mj-record-form-container", 3);
|
|
1260
|
+
i0.ɵɵlistener("Navigate", function MJActionFormComponentExtended_Conditional_0_Template_mj_record_form_container_Navigate_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnFormNavigate($event)); })("DeleteRequested", function MJActionFormComponentExtended_Conditional_0_Template_mj_record_form_container_DeleteRequested_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDeleteRequested()); })("FavoriteToggled", function MJActionFormComponentExtended_Conditional_0_Template_mj_record_form_container_FavoriteToggled_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnFavoriteToggled()); })("HistoryRequested", function MJActionFormComponentExtended_Conditional_0_Template_mj_record_form_container_HistoryRequested_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnHistoryRequested()); })("ListManagementRequested", function MJActionFormComponentExtended_Conditional_0_Template_mj_record_form_container_ListManagementRequested_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnListManagementRequested()); });
|
|
1261
|
+
i0.ɵɵelementStart(1, "form", 4, 0)(3, "div", 5)(4, "div", 6)(5, "div", 7)(6, "div", 8)(7, "div", 9);
|
|
955
1262
|
i0.ɵɵelement(8, "i", 10);
|
|
956
|
-
i0.ɵɵconditionalCreate(9,
|
|
1263
|
+
i0.ɵɵconditionalCreate(9, MJActionFormComponentExtended_Conditional_0_Conditional_9_Template, 1, 1, "input", 11)(10, MJActionFormComponentExtended_Conditional_0_Conditional_10_Template, 5, 4);
|
|
957
1264
|
i0.ɵɵelementEnd();
|
|
958
|
-
i0.ɵɵconditionalCreate(11,
|
|
959
|
-
i0.ɵɵconditionalCreate(12,
|
|
1265
|
+
i0.ɵɵconditionalCreate(11, MJActionFormComponentExtended_Conditional_0_Conditional_11_Template, 18, 22, "div", 12);
|
|
1266
|
+
i0.ɵɵconditionalCreate(12, MJActionFormComponentExtended_Conditional_0_Conditional_12_Template, 2, 2, "textarea", 13)(13, MJActionFormComponentExtended_Conditional_0_Conditional_13_Template, 2, 1, "p", 14);
|
|
960
1267
|
i0.ɵɵelementStart(14, "div", 15);
|
|
961
|
-
i0.ɵɵconditionalCreate(15,
|
|
1268
|
+
i0.ɵɵconditionalCreate(15, MJActionFormComponentExtended_Conditional_0_Conditional_15_Template, 7, 1, "div", 16);
|
|
962
1269
|
i0.ɵɵelementStart(16, "div", 16);
|
|
963
1270
|
i0.ɵɵelement(17, "i", 17);
|
|
964
1271
|
i0.ɵɵelementStart(18, "span", 18);
|
|
@@ -967,36 +1274,35 @@ function MJActionFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf
|
|
|
967
1274
|
i0.ɵɵelementStart(20, "span", 19);
|
|
968
1275
|
i0.ɵɵtext(21);
|
|
969
1276
|
i0.ɵɵelementEnd()();
|
|
970
|
-
i0.ɵɵconditionalCreate(22,
|
|
971
|
-
i0.ɵɵconditionalCreate(23,
|
|
1277
|
+
i0.ɵɵconditionalCreate(22, MJActionFormComponentExtended_Conditional_0_Conditional_22_Template, 6, 7, "div", 16);
|
|
1278
|
+
i0.ɵɵconditionalCreate(23, MJActionFormComponentExtended_Conditional_0_Conditional_23_Template, 4, 1, "div", 16);
|
|
972
1279
|
i0.ɵɵelementEnd()();
|
|
973
1280
|
i0.ɵɵelementStart(24, "div", 20)(25, "div", 21);
|
|
974
|
-
i0.ɵɵconditionalCreate(26,
|
|
975
|
-
i0.ɵɵconditionalCreate(27,
|
|
1281
|
+
i0.ɵɵconditionalCreate(26, MJActionFormComponentExtended_Conditional_0_Conditional_26_Template, 3, 1, "button", 22);
|
|
1282
|
+
i0.ɵɵconditionalCreate(27, MJActionFormComponentExtended_Conditional_0_Conditional_27_Template, 3, 0, "button", 23);
|
|
976
1283
|
i0.ɵɵelementEnd();
|
|
977
|
-
i0.ɵɵconditionalCreate(28,
|
|
978
|
-
i0.ɵɵconditionalCreate(29, MJActionFormComponentExtended_Conditional_1_Conditional_29_Template, 2, 0, "div", 24);
|
|
1284
|
+
i0.ɵɵconditionalCreate(28, MJActionFormComponentExtended_Conditional_0_Conditional_28_Template, 2, 0, "div", 24);
|
|
979
1285
|
i0.ɵɵelementEnd()()();
|
|
980
|
-
i0.ɵɵelementStart(
|
|
981
|
-
i0.ɵɵtemplate(
|
|
982
|
-
i0.ɵɵelementStart(
|
|
983
|
-
i0.ɵɵconditionalCreate(
|
|
1286
|
+
i0.ɵɵelementStart(29, "div", 25)(30, "mj-accordion-panel", 26);
|
|
1287
|
+
i0.ɵɵtemplate(31, MJActionFormComponentExtended_Conditional_0_ng_template_31_Template, 4, 1, "ng-template", 27);
|
|
1288
|
+
i0.ɵɵelementStart(32, "div", 28);
|
|
1289
|
+
i0.ɵɵconditionalCreate(33, MJActionFormComponentExtended_Conditional_0_Conditional_33_Template, 3, 0, "div", 29)(34, MJActionFormComponentExtended_Conditional_0_Conditional_34_Template, 5, 1, "div", 30)(35, MJActionFormComponentExtended_Conditional_0_Conditional_35_Template, 16, 6);
|
|
984
1290
|
i0.ɵɵelementEnd()();
|
|
985
|
-
i0.ɵɵconditionalCreate(
|
|
1291
|
+
i0.ɵɵconditionalCreate(36, MJActionFormComponentExtended_Conditional_0_Conditional_36_Template, 17, 9, "mj-accordion-panel", 26);
|
|
1292
|
+
i0.ɵɵconditionalCreate(37, MJActionFormComponentExtended_Conditional_0_Conditional_37_Template, 13, 4, "mj-accordion-panel", 26);
|
|
986
1293
|
i0.ɵɵelementStart(38, "mj-accordion-panel", 26);
|
|
987
|
-
i0.ɵɵtemplate(39,
|
|
1294
|
+
i0.ɵɵtemplate(39, MJActionFormComponentExtended_Conditional_0_ng_template_39_Template, 4, 1, "ng-template", 27);
|
|
988
1295
|
i0.ɵɵelementStart(40, "div", 28);
|
|
989
|
-
i0.ɵɵconditionalCreate(41,
|
|
990
|
-
i0.ɵɵconditionalCreate(42,
|
|
1296
|
+
i0.ɵɵconditionalCreate(41, MJActionFormComponentExtended_Conditional_0_Conditional_41_Template, 4, 0, "div", 31);
|
|
1297
|
+
i0.ɵɵconditionalCreate(42, MJActionFormComponentExtended_Conditional_0_Conditional_42_Template, 3, 0, "div", 29)(43, MJActionFormComponentExtended_Conditional_0_Conditional_43_Template, 5, 1, "div", 30)(44, MJActionFormComponentExtended_Conditional_0_Conditional_44_Template, 3, 0, "div", 32);
|
|
991
1298
|
i0.ɵɵelementEnd()();
|
|
992
|
-
i0.ɵɵconditionalCreate(45,
|
|
993
|
-
i0.ɵɵconditionalCreate(46,
|
|
994
|
-
i0.ɵɵelementEnd()()();
|
|
1299
|
+
i0.ɵɵconditionalCreate(45, MJActionFormComponentExtended_Conditional_0_Conditional_45_Template, 6, 2, "mj-accordion-panel", 26);
|
|
1300
|
+
i0.ɵɵconditionalCreate(46, MJActionFormComponentExtended_Conditional_0_Conditional_46_Template, 35, 2, "mj-accordion-panel", 26);
|
|
1301
|
+
i0.ɵɵelementEnd()()()();
|
|
995
1302
|
} if (rf & 2) {
|
|
996
1303
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
997
|
-
i0.ɵɵ
|
|
998
|
-
i0.ɵɵ
|
|
999
|
-
i0.ɵɵadvance(6);
|
|
1304
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("FormComponent", ctx_r1)("ToolbarConfig", ctx_r1.toolbarConfig)("WidthMode", "full-width");
|
|
1305
|
+
i0.ɵɵadvance(8);
|
|
1000
1306
|
i0.ɵɵclassMap(ctx_r1.getActionIcon());
|
|
1001
1307
|
i0.ɵɵstyleProp("color", ctx_r1.getTypeColor());
|
|
1002
1308
|
i0.ɵɵadvance();
|
|
@@ -1010,23 +1316,23 @@ function MJActionFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf
|
|
|
1010
1316
|
i0.ɵɵadvance(6);
|
|
1011
1317
|
i0.ɵɵtextInterpolate(ctx_r1.record.Type);
|
|
1012
1318
|
i0.ɵɵadvance();
|
|
1013
|
-
i0.ɵɵconditional(ctx_r1.
|
|
1319
|
+
i0.ɵɵconditional(ctx_r1.hasCodeApproval && ctx_r1.record.CodeApprovalStatus ? 22 : -1);
|
|
1014
1320
|
i0.ɵɵadvance();
|
|
1015
1321
|
i0.ɵɵconditional(ctx_r1.actionParams.length > 0 ? 23 : -1);
|
|
1016
1322
|
i0.ɵɵadvance(3);
|
|
1017
|
-
i0.ɵɵconditional(ctx_r1.record.ID ? 26 : -1);
|
|
1323
|
+
i0.ɵɵconditional(ctx_r1.record.ID && !ctx_r1.EditMode ? 26 : -1);
|
|
1018
1324
|
i0.ɵɵadvance();
|
|
1019
1325
|
i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.record.Type === "Generated" ? 27 : -1);
|
|
1020
1326
|
i0.ɵɵadvance();
|
|
1021
|
-
i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.record.
|
|
1022
|
-
i0.ɵɵadvance();
|
|
1023
|
-
i0.ɵɵconditional(!ctx_r1.EditMode && ctx_r1.record.Status !== "Active" && ctx_r1.record.ID ? 29 : -1);
|
|
1327
|
+
i0.ɵɵconditional(!ctx_r1.EditMode && ctx_r1.record.Status !== "Active" && ctx_r1.record.ID ? 28 : -1);
|
|
1024
1328
|
i0.ɵɵadvance(2);
|
|
1025
1329
|
i0.ɵɵproperty("Expanded", true);
|
|
1026
1330
|
i0.ɵɵadvance(3);
|
|
1027
|
-
i0.ɵɵconditional(ctx_r1.isLoadingParams ?
|
|
1331
|
+
i0.ɵɵconditional(ctx_r1.isLoadingParams ? 33 : ctx_r1.actionParams.length === 0 ? 34 : 35);
|
|
1028
1332
|
i0.ɵɵadvance(3);
|
|
1029
|
-
i0.ɵɵconditional(ctx_r1.record.Type === "Generated" ?
|
|
1333
|
+
i0.ɵɵconditional(ctx_r1.record.Type === "Generated" ? 36 : -1);
|
|
1334
|
+
i0.ɵɵadvance();
|
|
1335
|
+
i0.ɵɵconditional(ctx_r1.isRuntimeAction ? 37 : -1);
|
|
1030
1336
|
i0.ɵɵadvance();
|
|
1031
1337
|
i0.ɵɵproperty("Expanded", ctx_r1.expandedSections.resultCodes);
|
|
1032
1338
|
i0.ɵɵadvance(3);
|
|
@@ -1041,6 +1347,12 @@ function MJActionFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf
|
|
|
1041
1347
|
let MJActionFormComponentExtended = class MJActionFormComponentExtended extends MJActionFormComponent {
|
|
1042
1348
|
constructor() {
|
|
1043
1349
|
super(...arguments);
|
|
1350
|
+
// This form has a fully custom layout (header panel + accordion
|
|
1351
|
+
// sections we manage ourselves), so the toolbar's section-search,
|
|
1352
|
+
// expand/collapse, manage-sections, and width-toggle widgets don't
|
|
1353
|
+
// apply. `CUSTOM_LAYOUT_TOOLBAR_CONFIG` hides the entire right-hand
|
|
1354
|
+
// group while keeping favorite / history / tags / list buttons intact.
|
|
1355
|
+
this.toolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;
|
|
1044
1356
|
// Related entities
|
|
1045
1357
|
this.category = null;
|
|
1046
1358
|
this.actionParams = [];
|
|
@@ -1085,6 +1397,8 @@ let MJActionFormComponentExtended = class MJActionFormComponentExtended extends
|
|
|
1085
1397
|
this.viewContainerRef = inject(ViewContainerRef);
|
|
1086
1398
|
this.sharedService = inject(SharedService);
|
|
1087
1399
|
}
|
|
1400
|
+
/** Custom-layout Action form looks best full-width on first open. */
|
|
1401
|
+
getDefaultFormWidthMode() { return 'full-width'; }
|
|
1088
1402
|
async ngOnInit() {
|
|
1089
1403
|
await super.ngOnInit();
|
|
1090
1404
|
if (this.record?.IsSaved) {
|
|
@@ -1174,13 +1488,19 @@ let MJActionFormComponentExtended = class MJActionFormComponentExtended extends
|
|
|
1174
1488
|
this.PendingRecords.length = 0;
|
|
1175
1489
|
this.paramsToDelete = [];
|
|
1176
1490
|
this.resultCodesToDelete = [];
|
|
1177
|
-
//
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
//
|
|
1183
|
-
|
|
1491
|
+
// Note: the base SaveRecord() already emits a "Record saved
|
|
1492
|
+
// successfully" toast on success — don't emit another one
|
|
1493
|
+
// from here or users get two toasts for one save.
|
|
1494
|
+
// Defer the post-save reload so the template's post-save CD
|
|
1495
|
+
// pass completes before `actionParams` / `resultCodes` mutate.
|
|
1496
|
+
// We also run the reload *silently* (no isLoadingParams flash)
|
|
1497
|
+
// and batch the final state into a single `detectChanges()`
|
|
1498
|
+
// to avoid NG0100: previously the spinner toggle + array
|
|
1499
|
+
// replacement generated multiple interleaved CD passes that
|
|
1500
|
+
// saw `actionParams.length` change between check/verify.
|
|
1501
|
+
queueMicrotask(() => {
|
|
1502
|
+
void this.reloadAfterSaveSilent();
|
|
1503
|
+
});
|
|
1184
1504
|
}
|
|
1185
1505
|
return success;
|
|
1186
1506
|
}
|
|
@@ -1270,6 +1590,58 @@ let MJActionFormComponentExtended = class MJActionFormComponentExtended extends
|
|
|
1270
1590
|
this.isLoadingResultCodes = false;
|
|
1271
1591
|
}
|
|
1272
1592
|
}
|
|
1593
|
+
/**
|
|
1594
|
+
* Silent post-save reload. Unlike `loadActionParams` / `loadResultCodes`,
|
|
1595
|
+
* this version:
|
|
1596
|
+
* - Does NOT toggle `isLoadingParams` / `isLoadingResultCodes`. No
|
|
1597
|
+
* spinner is needed; the form is already back in read mode.
|
|
1598
|
+
* - Runs both RunViews in parallel off a single network round-trip.
|
|
1599
|
+
* - Commits the results in one synchronous block, then calls
|
|
1600
|
+
* `detectChanges()` once so Angular sees a single CD pass rather
|
|
1601
|
+
* than the three-or-four passes the original flow produced.
|
|
1602
|
+
*
|
|
1603
|
+
* This is what eliminates the NG0100 "`actionParams.length` changed
|
|
1604
|
+
* from 33 to 35" error we were seeing after save: previously the
|
|
1605
|
+
* length flipped between the check and verify phases of a CD pass
|
|
1606
|
+
* triggered by the spinner-flag updates.
|
|
1607
|
+
*/
|
|
1608
|
+
async reloadAfterSaveSilent() {
|
|
1609
|
+
try {
|
|
1610
|
+
const rv = new RunView();
|
|
1611
|
+
const [paramResult, codeResult] = await rv.RunViews([
|
|
1612
|
+
{
|
|
1613
|
+
EntityName: 'MJ: Action Params',
|
|
1614
|
+
ExtraFilter: `ActionID='${this.record.ID}'`,
|
|
1615
|
+
OrderBy: 'Name',
|
|
1616
|
+
ResultType: 'entity_object'
|
|
1617
|
+
},
|
|
1618
|
+
{
|
|
1619
|
+
EntityName: 'MJ: Action Result Codes',
|
|
1620
|
+
ExtraFilter: `ActionID='${this.record.ID}'`,
|
|
1621
|
+
OrderBy: 'IsSuccess DESC, ResultCode',
|
|
1622
|
+
ResultType: 'entity_object'
|
|
1623
|
+
}
|
|
1624
|
+
]);
|
|
1625
|
+
const params = (paramResult.Success ? paramResult.Results : []);
|
|
1626
|
+
const codes = (codeResult.Success ? codeResult.Results : []);
|
|
1627
|
+
// Single synchronous commit — all template-observable arrays
|
|
1628
|
+
// swap at once, avoiding interleaved CD passes.
|
|
1629
|
+
this.actionParams = params;
|
|
1630
|
+
this._inputParams = params.filter((p) => {
|
|
1631
|
+
const type = p.Type?.trim().toLowerCase();
|
|
1632
|
+
return type === 'input' || type === 'both';
|
|
1633
|
+
});
|
|
1634
|
+
this._outputParams = params.filter((p) => {
|
|
1635
|
+
const type = p.Type?.trim().toLowerCase();
|
|
1636
|
+
return type === 'output' || type === 'both';
|
|
1637
|
+
});
|
|
1638
|
+
this.resultCodes = codes;
|
|
1639
|
+
this.cdr.detectChanges();
|
|
1640
|
+
}
|
|
1641
|
+
catch (e) {
|
|
1642
|
+
console.error('Post-save reload failed:', e);
|
|
1643
|
+
}
|
|
1644
|
+
}
|
|
1273
1645
|
async loadRecentExecutions() {
|
|
1274
1646
|
this.isLoadingExecutions = true;
|
|
1275
1647
|
try {
|
|
@@ -1385,10 +1757,101 @@ let MJActionFormComponentExtended = class MJActionFormComponentExtended extends
|
|
|
1385
1757
|
}
|
|
1386
1758
|
}
|
|
1387
1759
|
getTypeColor() {
|
|
1388
|
-
|
|
1760
|
+
switch (this.record.Type) {
|
|
1761
|
+
case 'Runtime':
|
|
1762
|
+
return 'var(--mj-status-warning)';
|
|
1763
|
+
case 'Generated':
|
|
1764
|
+
case 'Custom':
|
|
1765
|
+
default:
|
|
1766
|
+
return 'var(--mj-brand-primary)';
|
|
1767
|
+
}
|
|
1389
1768
|
}
|
|
1390
1769
|
getTypeIcon() {
|
|
1391
|
-
|
|
1770
|
+
switch (this.record.Type) {
|
|
1771
|
+
case 'Runtime': return 'fa-wand-magic-sparkles';
|
|
1772
|
+
case 'Generated': return 'fa-robot';
|
|
1773
|
+
case 'Custom':
|
|
1774
|
+
default: return 'fa-code';
|
|
1775
|
+
}
|
|
1776
|
+
}
|
|
1777
|
+
// =====================================================================
|
|
1778
|
+
// Runtime Actions — approval-UI helpers (Phase 1i)
|
|
1779
|
+
//
|
|
1780
|
+
// Only relevant when `record.Type === 'Runtime'`. Each method reads the
|
|
1781
|
+
// typed `RuntimeActionConfigurationObject` accessor emitted by CodeGen
|
|
1782
|
+
// (via the JSONType metadata system) so consumers never hand-parse the
|
|
1783
|
+
// raw JSON string. The approval panel uses these to surface the
|
|
1784
|
+
// permission set an approver is implicitly blessing.
|
|
1785
|
+
// =====================================================================
|
|
1786
|
+
get isRuntimeAction() {
|
|
1787
|
+
return this.record?.Type === 'Runtime';
|
|
1788
|
+
}
|
|
1789
|
+
get runtimeConfig() {
|
|
1790
|
+
if (!this.isRuntimeAction)
|
|
1791
|
+
return null;
|
|
1792
|
+
const accessor = this.record;
|
|
1793
|
+
return accessor.RuntimeActionConfigurationObject ?? null;
|
|
1794
|
+
}
|
|
1795
|
+
getAllowedEntities() {
|
|
1796
|
+
return this.runtimeConfig?.permissions?.allowedEntities ?? [];
|
|
1797
|
+
}
|
|
1798
|
+
getAllowedActions() {
|
|
1799
|
+
return this.runtimeConfig?.permissions?.allowedActions ?? [];
|
|
1800
|
+
}
|
|
1801
|
+
getAllowedAgents() {
|
|
1802
|
+
return this.runtimeConfig?.permissions?.allowedAgents ?? [];
|
|
1803
|
+
}
|
|
1804
|
+
getRequestedLibraries() {
|
|
1805
|
+
return this.runtimeConfig?.sandbox?.additionalLibraries ?? [];
|
|
1806
|
+
}
|
|
1807
|
+
getRuntimeLimits() {
|
|
1808
|
+
const limits = this.runtimeConfig?.limits ?? {};
|
|
1809
|
+
return {
|
|
1810
|
+
maxMemoryMB: limits.maxMemoryMB ?? 128,
|
|
1811
|
+
maxBridgeCalls: limits.maxBridgeCalls ?? 100
|
|
1812
|
+
};
|
|
1813
|
+
}
|
|
1814
|
+
getRuntimeConfigSummary() {
|
|
1815
|
+
const perms = this.runtimeConfig?.permissions;
|
|
1816
|
+
if (!perms)
|
|
1817
|
+
return 'No permissions declared';
|
|
1818
|
+
const e = perms.allowedEntities?.length ?? 0;
|
|
1819
|
+
const a = perms.allowedActions?.length ?? 0;
|
|
1820
|
+
const ag = perms.allowedAgents?.length ?? 0;
|
|
1821
|
+
const wildcards = this.getWildcardFlags();
|
|
1822
|
+
const parts = [];
|
|
1823
|
+
parts.push(wildcards.entity ? 'ANY entity' : `${e} entit${e === 1 ? 'y' : 'ies'}`);
|
|
1824
|
+
parts.push(wildcards.action ? 'ANY action' : `${a} action${a === 1 ? '' : 's'}`);
|
|
1825
|
+
parts.push(wildcards.agent ? 'ANY agent' : `${ag} agent${ag === 1 ? '' : 's'}`);
|
|
1826
|
+
return parts.join(', ');
|
|
1827
|
+
}
|
|
1828
|
+
/**
|
|
1829
|
+
* Returns which wildcard permission flags are set on the runtime
|
|
1830
|
+
* configuration. Any `true` flag is a prominent security-relevant
|
|
1831
|
+
* concession to the action — the approval UI renders a warning banner
|
|
1832
|
+
* when any of these are on so the approver sees the blast radius.
|
|
1833
|
+
*/
|
|
1834
|
+
getWildcardFlags() {
|
|
1835
|
+
const perms = this.runtimeConfig?.permissions;
|
|
1836
|
+
const entity = perms?.allowAnyEntity === true;
|
|
1837
|
+
const action = perms?.allowAnyAction === true;
|
|
1838
|
+
const agent = perms?.allowAnyAgent === true;
|
|
1839
|
+
return { entity, action, agent, any: entity || action || agent };
|
|
1840
|
+
}
|
|
1841
|
+
/**
|
|
1842
|
+
* Both Generated and Runtime actions carry executable code gated by
|
|
1843
|
+
* `CodeApprovalStatus` — the RuntimeActionExecutor refuses to run
|
|
1844
|
+
* anything that isn't `Approved`, and CodeGen blocks unapproved
|
|
1845
|
+
* Generated code from being emitted. Custom actions run registered
|
|
1846
|
+
* TypeScript classes and don't have this gate.
|
|
1847
|
+
*
|
|
1848
|
+
* Getter rather than method so Angular's change detector can't
|
|
1849
|
+
* observe inconsistent results across check/verify passes — this
|
|
1850
|
+
* is the standard fix for NG0100 when a conditional's expression
|
|
1851
|
+
* depends on a method call.
|
|
1852
|
+
*/
|
|
1853
|
+
get hasCodeApproval() {
|
|
1854
|
+
return this.record?.Type === 'Generated' || this.record?.Type === 'Runtime';
|
|
1392
1855
|
}
|
|
1393
1856
|
getApprovalStatusColor() {
|
|
1394
1857
|
switch (this.record.CodeApprovalStatus) {
|
|
@@ -1848,19 +2311,16 @@ let MJActionFormComponentExtended = class MJActionFormComponentExtended extends
|
|
|
1848
2311
|
this.cdr.detectChanges();
|
|
1849
2312
|
}
|
|
1850
2313
|
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJActionFormComponentExtended_BaseFactory; return function MJActionFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJActionFormComponentExtended_BaseFactory || (ɵMJActionFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJActionFormComponentExtended)))(__ngFactoryType__ || MJActionFormComponentExtended); }; })(); }
|
|
1851
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJActionFormComponentExtended, selectors: [["mj-action-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 4, consts: [["form", "ngForm"], [1, "record-form-container", 2, "height", "100%", "display", "flex", "flex-direction", "column"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [3, "Close", "Action", "ActionParams", "IsOpen"], [3, "Form"], [1, "action-main-area", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [1, "action-header", 2, "flex-shrink", "0", "padding", "20px", "background", "var(--mj-bg-surface-card)", "border-bottom", "2px solid var(--mj-border-default)"], [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"], ["type", "text", "name", "actionName", "placeholder", "Enter action name...", 1, "mj-input", 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...", 1, "mj-textarea", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModel", "rows"], [2, "margin", "0 0 12px 0", "color", "var(--mj-text-muted)", "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", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-secondary)", "font-weight", "500"], [1, "action-buttons", 2, "display", "flex", "flex-direction", "column", "gap", "8px", "align-items", "flex-end"], [2, "display", "flex", "gap", "8px"], ["mjButton", "", "variant", "primary", "size", "lg", "title", "Open Run Harness", 3, "disabled"], ["mjButton", "", "variant", "outline", "size", "md", "title", "Regenerate Code"], [2, "font-size", "0.75em", "color", "var(--mj-status-error)", "text-align", "right"], [1, "configuration-sections", 2, "flex", "1", "background", "var(--mj-bg-surface-card)", "border-top", "2px solid var(--mj-border-default)", "padding", "16px", "min-height", "0"], [2, "margin-bottom", "12px", 3, "Expanded"], ["mjAccordionTitle", ""], [2, "padding", "16px"], [1, "loading-state"], [1, "empty-state", 2, "padding", "30px", "text-align", "center"], [2, "display", "flex", "justify-content", "flex-end", "margin-bottom", "12px"], [1, "result-codes-grid"], ["type", "text", "name", "actionName", "placeholder", "Enter action name...", 1, "mj-input", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModelChange", "ngModel"], [2, "margin", "0", "color", "var(--mj-text-secondary)", "font-weight", "600", "flex", "1"], [1, "status-chip"], [2, "display", "block", "margin-bottom", "4px", "font-weight", "600", "color", "var(--mj-text-secondary)", "font-size", "0.9em"], ["name", "actionStatus", "TextField", "text", "ValueField", "value", 2, "width", "150px", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], [2, "color", "var(--mj-status-error)"], ["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...", 1, "mj-textarea", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-folder", 2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-secondary)", "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", "var(--mj-text-muted)"], ["mjButton", "", "variant", "primary", "size", "lg", "title", "Open Run Harness", 3, "click", "disabled"], [1, "fa-solid", "fa-play"], ["mjButton", "", "variant", "outline", "size", "md", "title", "Regenerate Code", 3, "click"], [1, "fa-solid", "fa-robot"], ["mjButton", "", "variant", "success", "size", "sm", 3, "click"], [1, "fa-solid", "fa-check"], ["mjButton", "", "variant", "danger", "size", "sm", 3, "click"], [1, "fa-solid", "fa-times"], [2, "display", "flex", "align-items", "center", "gap", "8px", "font-weight", "600"], [2, "background", "var(--mj-status-info)", "color", "var(--mj-text-inverse)", "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", "var(--mj-text-muted)", "opacity", "0.3"], [2, "margin", "12px 0 0 0", "color", "var(--mj-text-muted)"], [2, "margin", "8px 0 0 0", "font-size", "0.85em", "color", "var(--mj-text-muted)"], [1, "params-section"], [1, "params-header"], [1, "fa-solid", "fa-sign-in-alt"], ["mjButton", "", "variant", "flat", "size", "sm"], [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"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "fa-solid", "fa-inbox", 2, "font-size", "2em", "color", "var(--mj-text-muted)", "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", "var(--mj-text-muted)"], [2, "background", "var(--mj-status-warning)", "color", "var(--mj-color-warning-800)", "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...", 1, "mj-textarea", 2, "width", "100%", "min-height", "120px", 3, "ngModelChange", "ngModel", "rows"], [1, "comments-section"], ["name", "userComments", "placeholder", "Internal notes...", 1, "mj-textarea", 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...", 1, "mj-textarea", 2, "width", "100%", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-flag-checkered", 2, "color", "var(--mj-text-muted)"], [2, "background", "var(--mj-status-success)", "color", "var(--mj-text-inverse)", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-flag-checkered", 2, "font-size", "2em", "color", "var(--mj-text-muted)", "opacity", "0.3"], [1, "result-code-card", 3, "success", "failure", "clickable"], [1, "result-code-card", 3, "click"], [1, "result-icon"], [1, "result-content"], [1, "result-code"], [1, "result-description"], [1, "result-actions"], ["title", "Edit result code", 1, "result-edit-btn", 3, "click"], ["title", "Delete result code", 1, "result-delete-btn", 3, "click"], [1, "fa-solid", "fa-chart-line", 2, "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-chart-line", 2, "font-size", "2em", "color", "var(--mj-text-muted)", "opacity", "0.3"], [1, "execution-stats-row"], [1, "stat-box"], [1, "fa-solid", "fa-tachometer-alt"], [1, "stat-info"], [1, "stat-label", 2, "color", "var(--mj-text-primary)"], [1, "stat-value", 2, "color", "var(--mj-text-primary)"], [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", "var(--mj-text-muted)"], [1, "library-card"], [1, "library-card", 3, "click"], [1, "library-info"], [1, "library-name"], [1, "library-items"]], template: function MJActionFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
1852
|
-
i0.ɵɵ
|
|
1853
|
-
i0.ɵɵ
|
|
1854
|
-
i0.ɵɵ
|
|
1855
|
-
i0.ɵɵelementStart(2, "mj-action-test-harness-dialog", 3);
|
|
1856
|
-
i0.ɵɵlistener("Close", function MJActionFormComponentExtended_Template_mj_action_test_harness_dialog_Close_2_listener() { return ctx.onTestHarnessVisibilityChanged(false); });
|
|
2314
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJActionFormComponentExtended, selectors: [["mj-action-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 4, consts: [["form", "ngForm"], [3, "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [3, "Close", "Action", "ActionParams", "IsOpen"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [1, "action-main-area", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [1, "action-header", 2, "flex-shrink", "0", "padding", "20px", "background", "var(--mj-bg-surface-card)", "border-bottom", "2px solid var(--mj-border-default)"], [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"], ["type", "text", "name", "actionName", "placeholder", "Enter action name...", 1, "mj-input", 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...", 1, "mj-textarea", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModel", "rows"], [2, "margin", "0 0 12px 0", "color", "var(--mj-text-muted)", "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", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-secondary)", "font-weight", "500"], [1, "action-buttons", 2, "display", "flex", "flex-direction", "column", "gap", "8px", "align-items", "flex-end"], [2, "display", "flex", "gap", "8px"], ["mjButton", "", "variant", "primary", "size", "lg", "title", "Open Run Harness", 3, "disabled"], ["mjButton", "", "variant", "outline", "size", "md", "title", "Regenerate Code"], [2, "font-size", "0.75em", "color", "var(--mj-status-error)", "text-align", "right"], [1, "configuration-sections", 2, "flex", "1", "background", "var(--mj-bg-surface-card)", "border-top", "2px solid var(--mj-border-default)", "padding", "16px", "min-height", "0"], [2, "margin-bottom", "12px", 3, "Expanded"], ["mjAccordionTitle", ""], [2, "padding", "16px"], [1, "loading-state"], [1, "empty-state", 2, "padding", "30px", "text-align", "center"], [2, "display", "flex", "justify-content", "flex-end", "margin-bottom", "12px"], [1, "result-codes-grid"], ["type", "text", "name", "actionName", "placeholder", "Enter action name...", 1, "mj-input", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModelChange", "ngModel"], [2, "margin", "0", "color", "var(--mj-text-secondary)", "font-weight", "600", "flex", "1"], [1, "status-chip"], [1, "status-chip", 3, "title"], [2, "margin-right", "4px"], [2, "display", "block", "margin-bottom", "4px", "font-weight", "600", "color", "var(--mj-text-secondary)", "font-size", "0.9em"], ["name", "actionStatus", "TextField", "text", "ValueField", "value", 2, "width", "150px", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], [2, "color", "var(--mj-status-error)"], ["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", "codeApprovalStatus", "TextField", "text", "ValueField", "value", 2, "width", "160px", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], ["name", "actionDescription", "placeholder", "Enter action description...", 1, "mj-textarea", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-folder", 2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-secondary)", "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", "var(--mj-text-muted)"], ["mjButton", "", "variant", "primary", "size", "lg", "title", "Open Run Harness", 3, "click", "disabled"], [1, "fa-solid", "fa-play"], ["mjButton", "", "variant", "outline", "size", "md", "title", "Regenerate Code", 3, "click"], [1, "fa-solid", "fa-robot"], [2, "display", "flex", "align-items", "center", "gap", "8px", "font-weight", "600"], [2, "background", "var(--mj-status-info)", "color", "var(--mj-text-inverse)", "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", "var(--mj-text-muted)", "opacity", "0.3"], [2, "margin", "12px 0 0 0", "color", "var(--mj-text-muted)"], [2, "margin", "8px 0 0 0", "font-size", "0.85em", "color", "var(--mj-text-muted)"], [1, "params-section"], [1, "params-header"], [1, "fa-solid", "fa-sign-in-alt"], ["mjButton", "", "variant", "flat", "size", "sm"], [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"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "fa-solid", "fa-inbox", 2, "font-size", "2em", "color", "var(--mj-text-muted)", "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", "var(--mj-text-muted)"], [2, "background", "var(--mj-status-warning)", "color", "var(--mj-color-warning-800)", "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...", 1, "mj-textarea", 2, "width", "100%", "min-height", "120px", 3, "ngModelChange", "ngModel", "rows"], [1, "comments-section"], ["name", "userComments", "placeholder", "Internal notes...", 1, "mj-textarea", 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...", 1, "mj-textarea", 2, "width", "100%", 3, "ngModelChange", "ngModel", "rows"], [2, "padding", "12px", "background", "color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface))", "border-left", "3px solid var(--mj-status-error)", "border-radius", "4px"], [2, "font-weight", "600", "margin-bottom", "6px", "color", "var(--mj-text-primary)"], [1, "fa-solid", "fa-code", 2, "margin-right", "6px", "color", "var(--mj-text-muted)"], [2, "background", "var(--mj-bg-surface-sunken)", "color", "var(--mj-text-primary)", "padding", "12px", "border-radius", "4px", "overflow-x", "auto", "max-height", "400px", "font-family", "'SF Mono', Monaco, Consolas, monospace", "font-size", "0.85em", "margin", "0"], [2, "margin-top", "16px", "padding", "12px", "background", "color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface))", "border-radius", "6px"], [1, "fa-solid", "fa-wand-magic-sparkles", 2, "color", "var(--mj-status-warning)"], [2, "color", "var(--mj-text-muted)", "font-weight", "400", "font-size", "0.85em"], [1, "fa-solid", "fa-triangle-exclamation", 2, "color", "var(--mj-status-error)", "margin-right", "8px"], [2, "padding", "12px", "background", "color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface))", "border-left", "3px solid var(--mj-status-warning)", "border-radius", "4px", "margin-bottom", "16px"], [2, "display", "grid", "grid-template-columns", "repeat(auto-fit, minmax(280px, 1fr))", "gap", "16px", "margin-bottom", "20px"], [2, "border", "1px solid var(--mj-border-default)", "border-radius", "6px", "padding", "12px", "background", "var(--mj-bg-surface-card)"], [2, "font-weight", "600", "margin-bottom", "8px", "color", "var(--mj-text-primary)"], [1, "fa-solid", "fa-database", 2, "margin-right", "6px", "color", "var(--mj-brand-primary)"], [2, "color", "var(--mj-text-muted)", "font-style", "italic"], [2, "display", "flex", "flex-direction", "column", "gap", "4px"], [1, "fa-solid", "fa-bolt", 2, "margin-right", "6px", "color", "var(--mj-brand-primary)"], [1, "fa-solid", "fa-robot", 2, "margin-right", "6px", "color", "var(--mj-brand-primary)"], [2, "display", "grid", "grid-template-columns", "1fr 1fr", "gap", "16px", "margin-bottom", "16px"], [1, "fa-solid", "fa-gauge-high", 2, "margin-right", "6px", "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-secondary)", "font-size", "0.9em"], [1, "fa-solid", "fa-book", 2, "margin-right", "6px", "color", "var(--mj-text-muted)"], [2, "display", "flex", "flex-wrap", "wrap", "gap", "4px"], [2, "font-weight", "600", "margin-bottom", "4px", "color", "var(--mj-text-primary)"], [1, "fa-solid", "fa-triangle-exclamation", 2, "color", "var(--mj-status-warning)", "margin-right", "6px"], [2, "background", "var(--mj-bg-surface-sunken)", "padding", "4px 8px", "border-radius", "4px", "font-size", "0.9em", "color", "var(--mj-text-primary)"], [2, "background", "var(--mj-bg-surface-sunken)", "padding", "2px 8px", "border-radius", "10px", "font-size", "0.85em"], [2, "font-weight", "600", "margin-bottom", "8px"], [1, "fa-solid", "fa-circle-exclamation", 2, "color", "var(--mj-status-warning)", "margin-right", "6px"], [2, "color", "var(--mj-text-secondary)", "font-size", "0.9em", "margin-bottom", "12px"], [1, "mj-button", "mj-button-primary", 3, "click"], [1, "fa-solid", "fa-check"], [1, "mj-button", 3, "click"], [1, "fa-solid", "fa-ban"], [1, "fa-solid", "fa-flag-checkered", 2, "color", "var(--mj-text-muted)"], [2, "background", "var(--mj-status-success)", "color", "var(--mj-text-inverse)", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-flag-checkered", 2, "font-size", "2em", "color", "var(--mj-text-muted)", "opacity", "0.3"], [1, "result-code-card", 3, "success", "failure", "clickable"], [1, "result-code-card", 3, "click"], [1, "result-icon"], [1, "result-content"], [1, "result-code"], [1, "result-description"], [1, "result-actions"], ["title", "Edit result code", 1, "result-edit-btn", 3, "click"], ["title", "Delete result code", 1, "result-delete-btn", 3, "click"], [1, "fa-solid", "fa-chart-line", 2, "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-chart-line", 2, "font-size", "2em", "color", "var(--mj-text-muted)", "opacity", "0.3"], [1, "execution-stats-row"], [1, "stat-box"], [1, "fa-solid", "fa-tachometer-alt"], [1, "stat-info"], [1, "stat-label", 2, "color", "var(--mj-text-primary)"], [1, "stat-value", 2, "color", "var(--mj-text-primary)"], [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", "var(--mj-text-muted)"], [1, "library-card"], [1, "library-card", 3, "click"], [1, "library-info"], [1, "library-name"], [1, "library-items"]], template: function MJActionFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
2315
|
+
i0.ɵɵconditionalCreate(0, MJActionFormComponentExtended_Conditional_0_Template, 47, 27, "mj-record-form-container", 1);
|
|
2316
|
+
i0.ɵɵelementStart(1, "mj-action-test-harness-dialog", 2);
|
|
2317
|
+
i0.ɵɵlistener("Close", function MJActionFormComponentExtended_Template_mj_action_test_harness_dialog_Close_1_listener() { return ctx.onTestHarnessVisibilityChanged(false); });
|
|
1857
2318
|
i0.ɵɵelementEnd();
|
|
1858
2319
|
} if (rf & 2) {
|
|
1859
|
-
i0.ɵɵ
|
|
1860
|
-
i0.ɵɵconditional(ctx.record ? 1 : -1);
|
|
2320
|
+
i0.ɵɵconditional(ctx.record ? 0 : -1);
|
|
1861
2321
|
i0.ɵɵadvance();
|
|
1862
2322
|
i0.ɵɵproperty("Action", ctx.record)("ActionParams", ctx.actionParams)("IsOpen", ctx.showTestHarness);
|
|
1863
|
-
} }, dependencies: [i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i2.MJDropdownComponent, i2.MJSwitchComponent, i3.MjFormToolbarComponent, i4.CodeEditorComponent, i5.ActionTestHarnessDialogComponent, i6.DatePipe], styles: ["\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form[_ngcontent-%COMP%] {\n min-height: 0 !important;\n}\n\n\n\n.action-hero-header[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 32px;\n margin: -20px -20px 24px -20px;\n border-radius: 0 0 var(--mj-radius-lg) var(--mj-radius-lg);\n box-shadow: var(--mj-shadow-md);\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: var(--mj-radius-lg);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n backdrop-filter: blur(10px);\n}\n\n.action-icon-wrapper[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: var(--mj-text-4xl);\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: var(--mj-font-semibold);\n color: var(--mj-text-inverse);\n}\n\n.action-name-input[_ngcontent-%COMP%] {\n font-size: 1.8em;\n font-weight: var(--mj-font-semibold);\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n border: 2px solid color-mix(in srgb, var(--mj-text-inverse) 30%, transparent);\n color: var(--mj-text-inverse);\n padding: 8px 16px;\n border-radius: var(--mj-radius-md);\n min-width: 400px;\n}\n\n.action-name-input[_ngcontent-%COMP%]::placeholder {\n color: color-mix(in srgb, var(--mj-text-inverse) 60%, transparent);\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: var(--mj-radius-full);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n backdrop-filter: blur(10px);\n border: 1px solid color-mix(in srgb, var(--mj-text-inverse) 30%, transparent);\n}\n\n.action-category[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n color: color-mix(in srgb, var(--mj-text-inverse) 90%, transparent);\n font-size: 0.95em;\n cursor: pointer;\n transition: all var(--mj-transition-base);\n margin-bottom: 12px;\n}\n\n.action-category[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-inverse);\n transform: translateX(4px);\n}\n\n.action-description[_ngcontent-%COMP%] {\n color: color-mix(in srgb, var(--mj-text-inverse) 90%, transparent);\n font-size: 1.05em;\n line-height: var(--mj-leading-relaxed);\n margin: 0;\n}\n\n.action-description-input[_ngcontent-%COMP%] {\n width: 100%;\n max-width: 600px;\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n border: 2px solid color-mix(in srgb, var(--mj-text-inverse) 30%, transparent);\n color: var(--mj-text-inverse);\n border-radius: var(--mj-radius-md);\n}\n\n.action-description-input[_ngcontent-%COMP%]::placeholder {\n color: color-mix(in srgb, var(--mj-text-inverse) 60%, transparent);\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: color-mix(in srgb, var(--mj-text-inverse) 10%, transparent);\n backdrop-filter: blur(10px);\n border: 1px solid color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n border-radius: var(--mj-radius-lg);\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: var(--mj-text-2xl);\n color: color-mix(in srgb, var(--mj-text-inverse) 80%, transparent);\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: var(--mj-font-bold);\n color: var(--mj-text-inverse);\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n color: color-mix(in srgb, var(--mj-text-inverse) 70%, transparent);\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%] 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: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg);\n margin-bottom: 20px;\n overflow: hidden;\n transition: all var(--mj-transition-base);\n}\n\n.content-section[_ngcontent-%COMP%]:hover {\n box-shadow: var(--mj-shadow-md);\n}\n\n.section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n background: var(--mj-bg-surface-elevated);\n cursor: pointer;\n user-select: none;\n transition: background var(--mj-transition-base);\n}\n\n.section-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.section-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.3em;\n color: var(--mj-text-primary);\n flex: 1;\n}\n\n.section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.section-count[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: var(--mj-radius-full);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n}\n\n.toggle-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\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: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.required[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\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: var(--mj-text-sm);\n color: var(--mj-text-muted);\n font-weight: var(--mj-font-semibold);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.display-value[_ngcontent-%COMP%] {\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.display-value.code[_ngcontent-%COMP%] {\n font-family: 'Courier New', monospace;\n background: var(--mj-bg-surface-sunken);\n padding: 4px 8px;\n border-radius: var(--mj-radius-sm);\n}\n\n.approval-date[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n margin-left: 8px;\n}\n\n\n\n.generation-panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\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: var(--mj-color-indigo-500);\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: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\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 var(--mj-border-default);\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: var(--mj-status-warning);\n color: var(--mj-color-warning-800);\n border-radius: var(--mj-radius-full);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n}\n\n.code-editor-section[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\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: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.code-toolbar[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-secondary);\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: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-info) 30%, transparent);\n border-radius: var(--mj-radius-md);\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: var(--mj-status-info);\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: var(--mj-text-secondary);\n line-height: var(--mj-leading-relaxed);\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: var(--mj-font-semibold);\n color: var(--mj-status-error);\n}\n\n\n\n.params-section[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-lg);\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: var(--mj-text-secondary);\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: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 16px;\n transition: all var(--mj-transition-base);\n}\n\n.param-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.param-card.required[_ngcontent-%COMP%] {\n border-color: var(--mj-status-warning);\n}\n\n.param-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.param-card.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\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: var(--mj-font-semibold);\n color: var(--mj-text-primary);\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: var(--mj-text-muted);\n border-radius: var(--mj-radius-sm);\n transition: all var(--mj-transition-base);\n}\n\n.param-edit-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.param-delete-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error);\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: var(--mj-status-warning);\n color: var(--mj-color-warning-800);\n padding: 2px 6px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n}\n\n.array-badge[_ngcontent-%COMP%] {\n background: var(--mj-color-indigo-500);\n color: var(--mj-text-inverse);\n padding: 2px 6px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n}\n\n.param-type[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n margin-bottom: 8px;\n}\n\n.param-description[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\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 var(--mj-border-default);\n}\n\n.default-label[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n}\n\n.param-default[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n padding: 2px 6px;\n border-radius: var(--mj-radius-sm);\n font-family: 'Courier New', monospace;\n color: var(--mj-color-error-400);\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 var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n transition: all var(--mj-transition-base);\n position: relative;\n}\n\n.result-code-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.result-code-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.result-code-card.success[_ngcontent-%COMP%] {\n border-color: var(--mj-status-success);\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n}\n\n.result-code-card.failure[_ngcontent-%COMP%] {\n border-color: var(--mj-status-error);\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n}\n\n.result-actions[_ngcontent-%COMP%] {\n position: absolute;\n top: 8px;\n right: 8px;\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity var(--mj-transition-base);\n}\n\n.result-code-card[_ngcontent-%COMP%]:hover .result-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.result-edit-btn[_ngcontent-%COMP%], \n.result-delete-btn[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n padding: 4px 8px;\n cursor: pointer;\n transition: all var(--mj-transition-base);\n font-size: var(--mj-text-sm);\n}\n\n.result-edit-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.result-delete-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border-color: var(--mj-status-error);\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: var(--mj-status-success);\n}\n\n.result-code-card.failure[_ngcontent-%COMP%] .result-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.result-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.result-code[_ngcontent-%COMP%] {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n font-family: 'Courier New', monospace;\n}\n\n.result-description[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\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: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\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: var(--mj-text-muted);\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 var(--mj-border-default);\n border-radius: var(--mj-radius-md);\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: var(--mj-bg-surface-sunken);\n padding: 12px;\n text-align: left;\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.executions-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px;\n border-bottom: 1px solid var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n.execution-row[_ngcontent-%COMP%] {\n transition: background var(--mj-transition-base);\n}\n\n.execution-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.execution-row.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 5%, transparent);\n}\n\n.running[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n font-style: italic;\n}\n\n.result-code[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 8px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n font-family: 'Courier New', monospace;\n}\n\n.result-code.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.result-code.failure[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\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: var(--mj-text-secondary);\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: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all var(--mj-transition-base);\n}\n\n.library-card[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n transform: translateX(4px);\n}\n\n.library-card[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n font-size: 1.5em;\n color: var(--mj-text-muted);\n}\n\n.library-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.library-name[_ngcontent-%COMP%] {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.library-items[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\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: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all var(--mj-transition-base);\n}\n\n.related-entity-link[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n}\n\n.related-entity-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.related-entity-link[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:first-of-type {\n flex: 1;\n font-weight: var(--mj-font-medium);\n color: var(--mj-text-secondary);\n}\n\n.entity-count[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: var(--mj-text-sm);\n}\n\n\n\n.loading-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px;\n color: var(--mj-text-muted);\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: var(--mj-text-muted);\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: var(--mj-text-sm) !important;\n opacity: 0.7;\n}\n\n.no-params[_ngcontent-%COMP%] {\n text-align: center;\n padding: 20px;\n color: var(--mj-text-muted);\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}\n\n\n\n\n\n .k-expander {\n background: var(--mj-bg-surface-card) !important;\n border-color: var(--mj-border-default) !important;\n color: var(--mj-text-primary) !important;\n}\n\n .k-expander-header {\n background: var(--mj-bg-surface-elevated) !important;\n color: var(--mj-text-primary) !important;\n border-color: var(--mj-border-default) !important;\n}\n\n .k-expander-header:hover {\n background: var(--mj-bg-surface-hover) !important;\n}\n\n .k-expander-title {\n color: var(--mj-text-primary) !important;\n}\n\n .k-expander-indicator .k-icon, \n .k-expander-indicator .k-svg-icon {\n color: var(--mj-text-muted) !important;\n}\n\n .k-expander-content-wrapper {\n border-color: var(--mj-border-default) !important;\n}\n\n .k-expander-content {\n background: var(--mj-bg-surface-card) !important;\n border-color: var(--mj-border-default) !important;\n color: var(--mj-text-primary) !important;\n}"] }); }
|
|
2323
|
+
} }, dependencies: [i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i2.MJDropdownComponent, i2.MJSwitchComponent, i3.MjRecordFormContainerComponent, i4.CodeEditorComponent, i5.ActionTestHarnessDialogComponent, i6.DatePipe], styles: ["\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form[_ngcontent-%COMP%] {\n min-height: 0 !important;\n}\n\n\n\n.action-hero-header[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 32px;\n margin: -20px -20px 24px -20px;\n border-radius: 0 0 var(--mj-radius-lg) var(--mj-radius-lg);\n box-shadow: var(--mj-shadow-md);\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: var(--mj-radius-lg);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n backdrop-filter: blur(10px);\n}\n\n.action-icon-wrapper[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: var(--mj-text-4xl);\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: var(--mj-font-semibold);\n color: var(--mj-text-inverse);\n}\n\n.action-name-input[_ngcontent-%COMP%] {\n font-size: 1.8em;\n font-weight: var(--mj-font-semibold);\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n border: 2px solid color-mix(in srgb, var(--mj-text-inverse) 30%, transparent);\n color: var(--mj-text-inverse);\n padding: 8px 16px;\n border-radius: var(--mj-radius-md);\n min-width: 400px;\n}\n\n.action-name-input[_ngcontent-%COMP%]::placeholder {\n color: color-mix(in srgb, var(--mj-text-inverse) 60%, transparent);\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: var(--mj-radius-full);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n backdrop-filter: blur(10px);\n border: 1px solid color-mix(in srgb, var(--mj-text-inverse) 30%, transparent);\n}\n\n.action-category[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n color: color-mix(in srgb, var(--mj-text-inverse) 90%, transparent);\n font-size: 0.95em;\n cursor: pointer;\n transition: all var(--mj-transition-base);\n margin-bottom: 12px;\n}\n\n.action-category[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-inverse);\n transform: translateX(4px);\n}\n\n.action-description[_ngcontent-%COMP%] {\n color: color-mix(in srgb, var(--mj-text-inverse) 90%, transparent);\n font-size: 1.05em;\n line-height: var(--mj-leading-relaxed);\n margin: 0;\n}\n\n.action-description-input[_ngcontent-%COMP%] {\n width: 100%;\n max-width: 600px;\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n border: 2px solid color-mix(in srgb, var(--mj-text-inverse) 30%, transparent);\n color: var(--mj-text-inverse);\n border-radius: var(--mj-radius-md);\n}\n\n.action-description-input[_ngcontent-%COMP%]::placeholder {\n color: color-mix(in srgb, var(--mj-text-inverse) 60%, transparent);\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: color-mix(in srgb, var(--mj-text-inverse) 10%, transparent);\n backdrop-filter: blur(10px);\n border: 1px solid color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n border-radius: var(--mj-radius-lg);\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: var(--mj-text-2xl);\n color: color-mix(in srgb, var(--mj-text-inverse) 80%, transparent);\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: var(--mj-font-bold);\n color: var(--mj-text-inverse);\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n color: color-mix(in srgb, var(--mj-text-inverse) 70%, transparent);\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%] 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: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg);\n margin-bottom: 20px;\n overflow: hidden;\n transition: all var(--mj-transition-base);\n}\n\n.content-section[_ngcontent-%COMP%]:hover {\n box-shadow: var(--mj-shadow-md);\n}\n\n.section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n background: var(--mj-bg-surface-elevated);\n cursor: pointer;\n user-select: none;\n transition: background var(--mj-transition-base);\n}\n\n.section-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.section-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.3em;\n color: var(--mj-text-primary);\n flex: 1;\n}\n\n.section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.section-count[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: var(--mj-radius-full);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n}\n\n.toggle-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\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: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.required[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\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: var(--mj-text-sm);\n color: var(--mj-text-muted);\n font-weight: var(--mj-font-semibold);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.display-value[_ngcontent-%COMP%] {\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.display-value.code[_ngcontent-%COMP%] {\n font-family: 'Courier New', monospace;\n background: var(--mj-bg-surface-sunken);\n padding: 4px 8px;\n border-radius: var(--mj-radius-sm);\n}\n\n.approval-date[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n margin-left: 8px;\n}\n\n\n\n.generation-panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\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: var(--mj-color-indigo-500);\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: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\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 var(--mj-border-default);\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: var(--mj-status-warning);\n color: var(--mj-color-warning-800);\n border-radius: var(--mj-radius-full);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n}\n\n.code-editor-section[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\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: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.code-toolbar[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-secondary);\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: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-info) 30%, transparent);\n border-radius: var(--mj-radius-md);\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: var(--mj-status-info);\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: var(--mj-text-secondary);\n line-height: var(--mj-leading-relaxed);\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: var(--mj-font-semibold);\n color: var(--mj-status-error);\n}\n\n\n\n.params-section[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-lg);\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: var(--mj-text-secondary);\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: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 16px;\n transition: all var(--mj-transition-base);\n}\n\n.param-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.param-card.required[_ngcontent-%COMP%] {\n border-color: var(--mj-status-warning);\n}\n\n.param-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.param-card.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\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: var(--mj-font-semibold);\n color: var(--mj-text-primary);\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: var(--mj-text-muted);\n border-radius: var(--mj-radius-sm);\n transition: all var(--mj-transition-base);\n}\n\n.param-edit-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.param-delete-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error);\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: var(--mj-status-warning);\n color: var(--mj-color-warning-800);\n padding: 2px 6px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n}\n\n.array-badge[_ngcontent-%COMP%] {\n background: var(--mj-color-indigo-500);\n color: var(--mj-text-inverse);\n padding: 2px 6px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n}\n\n.param-type[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n margin-bottom: 8px;\n}\n\n.param-description[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\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 var(--mj-border-default);\n}\n\n.default-label[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n}\n\n.param-default[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n padding: 2px 6px;\n border-radius: var(--mj-radius-sm);\n font-family: 'Courier New', monospace;\n color: var(--mj-color-error-400);\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 var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n transition: all var(--mj-transition-base);\n position: relative;\n}\n\n.result-code-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.result-code-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.result-code-card.success[_ngcontent-%COMP%] {\n border-color: var(--mj-status-success);\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n}\n\n.result-code-card.failure[_ngcontent-%COMP%] {\n border-color: var(--mj-status-error);\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n}\n\n.result-actions[_ngcontent-%COMP%] {\n position: absolute;\n top: 8px;\n right: 8px;\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity var(--mj-transition-base);\n}\n\n.result-code-card[_ngcontent-%COMP%]:hover .result-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.result-edit-btn[_ngcontent-%COMP%], \n.result-delete-btn[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n padding: 4px 8px;\n cursor: pointer;\n transition: all var(--mj-transition-base);\n font-size: var(--mj-text-sm);\n}\n\n.result-edit-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.result-delete-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border-color: var(--mj-status-error);\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: var(--mj-status-success);\n}\n\n.result-code-card.failure[_ngcontent-%COMP%] .result-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.result-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.result-code[_ngcontent-%COMP%] {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n font-family: 'Courier New', monospace;\n}\n\n.result-description[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\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: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\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: var(--mj-text-muted);\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 var(--mj-border-default);\n border-radius: var(--mj-radius-md);\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: var(--mj-bg-surface-sunken);\n padding: 12px;\n text-align: left;\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.executions-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px;\n border-bottom: 1px solid var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n.execution-row[_ngcontent-%COMP%] {\n transition: background var(--mj-transition-base);\n}\n\n.execution-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.execution-row.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 5%, transparent);\n}\n\n.running[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n font-style: italic;\n}\n\n.result-code[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 8px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n font-family: 'Courier New', monospace;\n}\n\n.result-code.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.result-code.failure[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\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: var(--mj-text-secondary);\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: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all var(--mj-transition-base);\n}\n\n.library-card[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n transform: translateX(4px);\n}\n\n.library-card[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n font-size: 1.5em;\n color: var(--mj-text-muted);\n}\n\n.library-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.library-name[_ngcontent-%COMP%] {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.library-items[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\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: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all var(--mj-transition-base);\n}\n\n.related-entity-link[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n}\n\n.related-entity-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.related-entity-link[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:first-of-type {\n flex: 1;\n font-weight: var(--mj-font-medium);\n color: var(--mj-text-secondary);\n}\n\n.entity-count[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: var(--mj-text-sm);\n}\n\n\n\n.loading-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px;\n color: var(--mj-text-muted);\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: var(--mj-text-muted);\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: var(--mj-text-sm) !important;\n opacity: 0.7;\n}\n\n.no-params[_ngcontent-%COMP%] {\n text-align: center;\n padding: 20px;\n color: var(--mj-text-muted);\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}\n\n\n\n\n\n .k-expander {\n background: var(--mj-bg-surface-card) !important;\n border-color: var(--mj-border-default) !important;\n color: var(--mj-text-primary) !important;\n}\n\n .k-expander-header {\n background: var(--mj-bg-surface-elevated) !important;\n color: var(--mj-text-primary) !important;\n border-color: var(--mj-border-default) !important;\n}\n\n .k-expander-header:hover {\n background: var(--mj-bg-surface-hover) !important;\n}\n\n .k-expander-title {\n color: var(--mj-text-primary) !important;\n}\n\n .k-expander-indicator .k-icon, \n .k-expander-indicator .k-svg-icon {\n color: var(--mj-text-muted) !important;\n}\n\n .k-expander-content-wrapper {\n border-color: var(--mj-border-default) !important;\n}\n\n .k-expander-content {\n background: var(--mj-bg-surface-card) !important;\n border-color: var(--mj-border-default) !important;\n color: var(--mj-text-primary) !important;\n}"] }); }
|
|
1864
2324
|
};
|
|
1865
2325
|
MJActionFormComponentExtended = __decorate([
|
|
1866
2326
|
RegisterClass(BaseFormComponent, 'MJ: Actions')
|
|
@@ -1868,7 +2328,7 @@ MJActionFormComponentExtended = __decorate([
|
|
|
1868
2328
|
export { MJActionFormComponentExtended };
|
|
1869
2329
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJActionFormComponentExtended, [{
|
|
1870
2330
|
type: Component,
|
|
1871
|
-
args: [{ standalone: false, selector: 'mj-action-form', template: "<div class=\"record-form-container\" style=\"height: 100%; display: flex; flex-direction: column;\">\n @if (record) {\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\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; flex: 1; min-height: 0; overflow-y: auto;\">\n \n <!-- Header Section -->\n <div class=\"action-header\" style=\"flex-shrink: 0; padding: 20px; background: var(--mj-bg-surface-card); border-bottom: 2px solid var(--mj-border-default);\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n \n <!-- Left: Action Info -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 8px;\">\n <i [class]=\"getActionIcon()\" [style.color]=\"getTypeColor()\" style=\"font-size: 1.4em;\"></i>\n @if (EditMode) {\n <input type=\"text\" class=\"mj-input\"\n [(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 } @else {\n <h4 style=\"margin: 0; color: var(--mj-text-secondary); font-weight: 600; flex: 1;\">{{ record.Name || 'Untitled Action' }}</h4>\n <span class=\"status-chip\"\n [attr.data-color]=\"record.Status === 'Active' ? 'success' : record.Status === 'Pending' ? 'warning' : 'error'\">\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: var(--mj-text-secondary); font-size: 0.9em;\">Status</label>\n <mj-dropdown [(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 </mj-dropdown>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Type <span style=\"color: var(--mj-status-error);\">*</span>\n </label>\n <mj-dropdown [(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 </mj-dropdown>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Category <span style=\"color: var(--mj-status-error);\">*</span>\n </label>\n <mj-dropdown [(ngModel)]=\"record.CategoryID\"\n name=\"categoryID\"\n [Data]=\"[]\"\n Placeholder=\"Select category...\"\n style=\"width: 200px;\">\n </mj-dropdown>\n </div>\n </div>\n }\n \n @if (EditMode) {\n <textarea class=\"mj-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 </textarea>\n } @else if (record.Description) {\n <p style=\"margin: 0 0 12px 0; color: var(--mj-text-muted); 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: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Category:</span>\n <span style=\"color: var(--mj-text-secondary); 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: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Type:</span>\n <span style=\"color: var(--mj-text-secondary); 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: var(--mj-text-muted);\">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: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ actionParams.length }} Parameters</span>\n </div>\n }\n </div>\n </div>\n \n <!-- Right: Action Buttons -->\n <div class=\"action-buttons\" style=\"display: flex; flex-direction: column; gap: 8px; align-items: flex-end;\">\n <div style=\"display: flex; gap: 8px;\">\n @if (record.ID) {\n <button mjButton variant=\"primary\" size=\"lg\"\n (click)=\"openTestHarness()\"\n title=\"Open Run Harness\"\n [disabled]=\"record.Status !== 'Active'\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n @if (EditMode && record.Type === 'Generated') {\n <button mjButton variant=\"outline\" size=\"md\"\n (click)=\"regenerateCode()\"\n title=\"Regenerate Code\">\n <i class=\"fa-solid fa-robot\"></i> Regenerate\n </button>\n }\n </div>\n \n @if (EditMode && record.CodeApprovalStatus === 'Pending' && record.Type === 'Generated') {\n <div style=\"display: flex; gap: 8px;\">\n <button mjButton variant=\"success\" size=\"sm\"\n (click)=\"approveCode()\">\n <i class=\"fa-solid fa-check\"></i> Approve\n </button>\n <button mjButton variant=\"danger\" size=\"sm\"\n (click)=\"rejectCode()\">\n <i class=\"fa-solid fa-times\"></i> Reject\n </button>\n </div>\n }\n \n @if (!EditMode && record.Status !== 'Active' && record.ID) {\n <div style=\"font-size: 0.75em; color: var(--mj-status-error); 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: var(--mj-bg-surface-card); border-top: 2px solid var(--mj-border-default); padding: 16px; min-height: 0;\">\n \n <!-- Parameters Section (FIRST) -->\n <mj-accordion-panel\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: var(--mj-text-muted);\"></i>\n Parameters\n @if (actionParams.length > 0) {\n <span style=\"background: var(--mj-status-info); color: var(--mj-text-inverse); 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: var(--mj-text-muted); opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: var(--mj-text-muted);\">No parameters defined</p>\n @if (EditMode && record.IsSaved) {\n <p style=\"margin: 8px 0 0 0; font-size: 0.85em; color: var(--mj-text-muted);\">Add parameters to define inputs and outputs for this action</p>\n }\n </div>\n } @else {\n <!-- Input Parameters Grid -->\n <div class=\"params-section\">\n <div class=\"params-header\">\n <h3><i class=\"fa-solid fa-sign-in-alt\"></i> Input Parameters</h3>\n @if (EditMode && record.IsSaved) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"addParameter('Input')\">\n <i class=\"fa-solid fa-plus\"></i> Add Input\n </button>\n }\n </div>\n \n @if (getInputParams().length === 0) {\n <div class=\"empty-state\" style=\"padding: 30px; text-align: center;\">\n <i class=\"fa-solid fa-inbox\" style=\"font-size: 2em; color: var(--mj-text-muted); opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: var(--mj-text-muted);\">No input parameters defined</p>\n </div>\n } @else {\n <div class=\"params-grid\">\n @for (param of getInputParams(); track param.ID) {\n <div class=\"param-card\" [class.required]=\"param.IsRequired\" \n [class.clickable]=\"true\"\n (click)=\"onParamClick(param, $event)\">\n <div class=\"param-header\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <div class=\"param-badges\">\n @if (param.IsRequired) {\n <span class=\"required-badge\">Required</span>\n }\n @if (param.IsArray) {\n <span class=\"array-badge\">Array</span>\n }\n @if (EditMode) {\n <button class=\"param-edit-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"param-delete-btn\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n <div class=\"param-details\">\n <div class=\"param-type\">{{ param.ValueType }}</div>\n @if (param.Description) {\n <div class=\"param-description\">{{ param.Description }}</div>\n }\n @if (param.DefaultValue) {\n <div class=\"param-default\">\n <span class=\"default-label\">Default:</span>\n <code>{{ param.DefaultValue }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Output Parameters Grid -->\n <div class=\"params-section\" style=\"margin-top: 24px;\" \n [class.params-section-compact]=\"getOutputParams().length === 0\">\n <div class=\"params-header\">\n <h3><i class=\"fa-solid fa-sign-out-alt\"></i> Output Parameters</h3>\n @if (EditMode && record.IsSaved) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"addParameter('Output')\">\n <i class=\"fa-solid fa-plus\"></i> Add Output\n </button>\n }\n </div>\n \n @if (getOutputParams().length === 0) {\n <div class=\"empty-state\" style=\"padding: 20px; text-align: center;\">\n <i class=\"fa-solid fa-inbox\" style=\"font-size: 2em; color: var(--mj-text-muted); opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: var(--mj-text-muted);\">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 </mj-accordion-panel>\n\n <!-- Code & Generation Section (Only for Generated type) -->\n @if (record.Type === 'Generated') {\n <mj-accordion-panel\n [Expanded]=\"expandedSections.code\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n Code & Generation\n @if (record.CodeLocked) {\n <span style=\"background: var(--mj-status-warning); color: var(--mj-color-warning-800); 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 <textarea class=\"mj-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 </textarea>\n </div>\n <div class=\"comments-section\">\n <label>Internal Comments (not sent to AI)</label>\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.UserComments\"\n name=\"userComments\"\n [rows]=\"2\"\n placeholder=\"Internal notes...\"\n style=\"width: 100%;\">\n </textarea>\n </div>\n <div class=\"generation-controls\">\n <mj-switch [(ngModel)]=\"record.CodeLocked\"\n name=\"codeLocked\">\n </mj-switch>\n <label style=\"margin-left: 8px;\">Lock Code (prevent regeneration)</label>\n </div>\n </div>\n }\n \n <div class=\"code-editor-section\">\n <div class=\"code-toolbar\">\n <h3><i class=\"fa-solid fa-file-code\"></i> Action Code</h3>\n <div class=\"code-actions\">\n @if (record.CodeComments) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"toggleCodeComments()\">\n <i class=\"fa-solid fa-comment\"></i> \n {{ showCodeComments ? 'Hide' : 'Show' }} AI Comments\n </button>\n }\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"copyToClipboard(record.Code || '')\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n </div>\n </div>\n <mj-code-editor \n [(ngModel)]=\"record.Code\"\n name=\"actionCode\"\n [readonly]=\"!EditMode || record.CodeLocked\"\n [language]=\"codeLanguage\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n \n @if (showCodeComments && record.CodeComments) {\n <div class=\"code-comments\">\n <h4><i class=\"fa-solid fa-robot\"></i> AI Explanation</h4>\n <p>{{ record.CodeComments }}</p>\n </div>\n }\n \n @if (EditMode && record.CodeApprovalStatus === 'Rejected') {\n <div class=\"approval-comments\">\n <label>Rejection Comments</label>\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.CodeApprovalComments\"\n name=\"codeApprovalComments\"\n [rows]=\"2\"\n placeholder=\"Explain why the code was rejected...\"\n style=\"width: 100%;\">\n </textarea>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Result Codes Section -->\n <mj-accordion-panel\n [Expanded]=\"expandedSections.resultCodes\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-flag-checkered\" style=\"color: var(--mj-text-muted);\"></i>\n Result Codes\n @if (resultCodes.length > 0) {\n <span style=\"background: var(--mj-status-success); color: var(--mj-text-inverse); padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ resultCodes.length }}\n </span>\n }\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n <!-- Add Result Code Button -->\n @if (EditMode && record.IsSaved) {\n <div style=\"display: flex; justify-content: flex-end; margin-bottom: 12px;\">\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"addResultCode()\">\n <i class=\"fa-solid fa-plus\"></i> Add Result Code\n </button>\n </div>\n }\n \n @if (isLoadingResultCodes) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading result codes...\n </div>\n } @else if (resultCodes.length === 0) {\n <div class=\"empty-state\" style=\"padding: 30px; text-align: center;\">\n <i class=\"fa-solid fa-flag-checkered\" style=\"font-size: 2em; color: var(--mj-text-muted); opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: var(--mj-text-muted);\">No result codes defined</p>\n @if (EditMode && record.IsSaved) {\n <p style=\"margin: 8px 0 0 0; font-size: 0.85em; color: var(--mj-text-muted);\">Add result codes to define possible outcomes</p>\n }\n </div>\n } @else {\n <div class=\"result-codes-grid\">\n @for (code of resultCodes; track code.ID) {\n <div class=\"result-code-card\" \n [class.success]=\"code.IsSuccess\" \n [class.failure]=\"!code.IsSuccess\"\n [class.clickable]=\"true\"\n (click)=\"onResultCodeClick(code, $event)\">\n <div class=\"result-icon\">\n <i [class]=\"code.IsSuccess ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n </div>\n <div class=\"result-content\">\n <div class=\"result-code\">{{ code.ResultCode }}</div>\n @if (code.Description) {\n <div class=\"result-description\">{{ code.Description }}</div>\n }\n </div>\n @if (EditMode) {\n <div class=\"result-actions\">\n <button class=\"result-edit-btn\" (click)=\"editResultCode(code); $event.stopPropagation()\" title=\"Edit result code\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"result-delete-btn\" (click)=\"deleteResultCode(code); $event.stopPropagation()\" title=\"Delete result code\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Execution & Monitoring Section -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"expandedSections.execution\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-chart-line\" style=\"color: var(--mj-text-muted);\"></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: var(--mj-text-muted); opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: var(--mj-text-muted);\">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: var(--mj-text-primary);\">Avg Duration</div>\n <div class=\"stat-value\" style=\"color: var(--mj-text-primary);\">{{ 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: var(--mj-text-primary);\">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: var(--mj-text-primary);\">Total Runs</div>\n <div class=\"stat-value\" style=\"color: var(--mj-text-primary);\">{{ executionStats.totalRuns }}</div>\n </div>\n </div>\n </div>\n\n <h3 style=\"margin-top: 24px;\"><i class=\"fa-solid fa-history\"></i> Recent Executions</h3>\n <div class=\"executions-table\">\n <table>\n <thead>\n <tr>\n <th>Started</th>\n <th>Duration</th>\n <th>User</th>\n <th>Result</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (execution of recentExecutions; track execution.ID) {\n <tr class=\"execution-row\" [class.success]=\"isExecutionSuccess(execution)\">\n <td>{{ execution.StartedAt | date:'short' }}</td>\n <td>\n @if (execution.EndedAt) {\n {{ formatDuration(getExecutionDuration(execution)) }}\n } @else {\n <span class=\"running\">Running...</span>\n }\n </td>\n <td>{{ execution.User }}</td>\n <td>\n <span class=\"result-code\" \n [class.success]=\"isExecutionSuccess(execution)\"\n [class.failure]=\"!isExecutionSuccess(execution)\">\n {{ execution.ResultCode }}\n </span>\n </td>\n <td>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"navigateToExecution(execution.ID)\">\n <i class=\"fa-solid fa-external-link\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Related Configuration Section -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"expandedSections.configuration\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-cogs\" style=\"color: var(--mj-text-muted);\"></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 </mj-accordion-panel>\n }\n </div>\n </div>\n </form>\n }\n</div>\n\n<!-- Action Test Harness Dialog -->\n<mj-action-test-harness-dialog\n [Action]=\"record\"\n [ActionParams]=\"actionParams\"\n [IsOpen]=\"showTestHarness\"\n (Close)=\"onTestHarnessVisibilityChanged(false)\">\n</mj-action-test-harness-dialog>", styles: ["/* Enable flex layout for full-height scrolling */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form {\n min-height: 0 !important;\n}\n\n/* Hero Header Section */\n.action-hero-header {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 32px;\n margin: -20px -20px 24px -20px;\n border-radius: 0 0 var(--mj-radius-lg) var(--mj-radius-lg);\n box-shadow: var(--mj-shadow-md);\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: var(--mj-radius-lg);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n backdrop-filter: blur(10px);\n}\n\n.action-icon-wrapper i {\n font-size: var(--mj-text-4xl);\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: var(--mj-font-semibold);\n color: var(--mj-text-inverse);\n}\n\n.action-name-input {\n font-size: 1.8em;\n font-weight: var(--mj-font-semibold);\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n border: 2px solid color-mix(in srgb, var(--mj-text-inverse) 30%, transparent);\n color: var(--mj-text-inverse);\n padding: 8px 16px;\n border-radius: var(--mj-radius-md);\n min-width: 400px;\n}\n\n.action-name-input::placeholder {\n color: color-mix(in srgb, var(--mj-text-inverse) 60%, transparent);\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: var(--mj-radius-full);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n backdrop-filter: blur(10px);\n border: 1px solid color-mix(in srgb, var(--mj-text-inverse) 30%, transparent);\n}\n\n.action-category {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n color: color-mix(in srgb, var(--mj-text-inverse) 90%, transparent);\n font-size: 0.95em;\n cursor: pointer;\n transition: all var(--mj-transition-base);\n margin-bottom: 12px;\n}\n\n.action-category:hover {\n color: var(--mj-text-inverse);\n transform: translateX(4px);\n}\n\n.action-description {\n color: color-mix(in srgb, var(--mj-text-inverse) 90%, transparent);\n font-size: 1.05em;\n line-height: var(--mj-leading-relaxed);\n margin: 0;\n}\n\n.action-description-input {\n width: 100%;\n max-width: 600px;\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n border: 2px solid color-mix(in srgb, var(--mj-text-inverse) 30%, transparent);\n color: var(--mj-text-inverse);\n border-radius: var(--mj-radius-md);\n}\n\n.action-description-input::placeholder {\n color: color-mix(in srgb, var(--mj-text-inverse) 60%, transparent);\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: color-mix(in srgb, var(--mj-text-inverse) 10%, transparent);\n backdrop-filter: blur(10px);\n border: 1px solid color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n border-radius: var(--mj-radius-lg);\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: var(--mj-text-2xl);\n color: color-mix(in srgb, var(--mj-text-inverse) 80%, transparent);\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: var(--mj-font-bold);\n color: var(--mj-text-inverse);\n}\n\n.stat-label {\n font-size: var(--mj-text-sm);\n color: color-mix(in srgb, var(--mj-text-inverse) 70%, transparent);\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 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: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg);\n margin-bottom: 20px;\n overflow: hidden;\n transition: all var(--mj-transition-base);\n}\n\n.content-section:hover {\n box-shadow: var(--mj-shadow-md);\n}\n\n.section-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n background: var(--mj-bg-surface-elevated);\n cursor: pointer;\n user-select: none;\n transition: background var(--mj-transition-base);\n}\n\n.section-header:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.section-header h2 {\n margin: 0;\n font-size: 1.3em;\n color: var(--mj-text-primary);\n flex: 1;\n}\n\n.section-header i:first-child {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.section-count {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: var(--mj-radius-full);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n}\n\n.toggle-icon {\n color: var(--mj-text-muted);\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: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.required {\n color: var(--mj-status-error);\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: var(--mj-text-sm);\n color: var(--mj-text-muted);\n font-weight: var(--mj-font-semibold);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.display-value {\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.display-value.code {\n font-family: 'Courier New', monospace;\n background: var(--mj-bg-surface-sunken);\n padding: 4px 8px;\n border-radius: var(--mj-radius-sm);\n}\n\n.approval-date {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n margin-left: 8px;\n}\n\n/* Code Section */\n.generation-panel {\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 20px;\n margin-bottom: 24px;\n}\n\n.generation-panel h3 {\n margin: 0 0 16px 0;\n color: var(--mj-color-indigo-500);\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: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n}\n\n.generation-controls {\n display: flex;\n align-items: center;\n gap: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.code-locked-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n background: var(--mj-status-warning);\n color: var(--mj-color-warning-800);\n border-radius: var(--mj-radius-full);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n}\n\n.code-editor-section {\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\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: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.code-toolbar h3 {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-secondary);\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: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-info) 30%, transparent);\n border-radius: var(--mj-radius-md);\n padding: 16px;\n margin-top: 16px;\n}\n\n.code-comments h4 {\n margin: 0 0 8px 0;\n color: var(--mj-status-info);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.code-comments p {\n margin: 0;\n color: var(--mj-text-secondary);\n line-height: var(--mj-leading-relaxed);\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: var(--mj-font-semibold);\n color: var(--mj-status-error);\n}\n\n/* Parameters Section */\n.params-section {\n background: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-lg);\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: var(--mj-text-secondary);\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: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 16px;\n transition: all var(--mj-transition-base);\n}\n\n.param-card:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.param-card.required {\n border-color: var(--mj-status-warning);\n}\n\n.param-card.clickable {\n cursor: pointer;\n}\n\n.param-card.clickable:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\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: var(--mj-font-semibold);\n color: var(--mj-text-primary);\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: var(--mj-text-muted);\n border-radius: var(--mj-radius-sm);\n transition: all var(--mj-transition-base);\n}\n\n.param-edit-btn:hover {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.param-delete-btn:hover {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.param-details {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.required-badge {\n background: var(--mj-status-warning);\n color: var(--mj-color-warning-800);\n padding: 2px 6px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n}\n\n.array-badge {\n background: var(--mj-color-indigo-500);\n color: var(--mj-text-inverse);\n padding: 2px 6px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n}\n\n.param-type {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n margin-bottom: 8px;\n}\n\n.param-description {\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\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 var(--mj-border-default);\n}\n\n.default-label {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n}\n\n.param-default code {\n background: var(--mj-bg-surface-sunken);\n padding: 2px 6px;\n border-radius: var(--mj-radius-sm);\n font-family: 'Courier New', monospace;\n color: var(--mj-color-error-400);\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 var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n transition: all var(--mj-transition-base);\n position: relative;\n}\n\n.result-code-card.clickable {\n cursor: pointer;\n}\n\n.result-code-card:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.result-code-card.success {\n border-color: var(--mj-status-success);\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n}\n\n.result-code-card.failure {\n border-color: var(--mj-status-error);\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n}\n\n.result-actions {\n position: absolute;\n top: 8px;\n right: 8px;\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity var(--mj-transition-base);\n}\n\n.result-code-card:hover .result-actions {\n opacity: 1;\n}\n\n.result-edit-btn,\n.result-delete-btn {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n padding: 4px 8px;\n cursor: pointer;\n transition: all var(--mj-transition-base);\n font-size: var(--mj-text-sm);\n}\n\n.result-edit-btn:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.result-delete-btn:hover {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border-color: var(--mj-status-error);\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: var(--mj-status-success);\n}\n\n.result-code-card.failure .result-icon {\n color: var(--mj-status-error);\n}\n\n.result-content {\n flex: 1;\n min-width: 0;\n}\n\n.result-code {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n font-family: 'Courier New', monospace;\n}\n\n.result-description {\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\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: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\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: var(--mj-text-muted);\n}\n\n.stat-info {\n flex: 1;\n}\n\n.executions-table {\n overflow-x: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n}\n\n.executions-table table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.executions-table th {\n background: var(--mj-bg-surface-sunken);\n padding: 12px;\n text-align: left;\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.executions-table td {\n padding: 12px;\n border-bottom: 1px solid var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n.execution-row {\n transition: background var(--mj-transition-base);\n}\n\n.execution-row:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.execution-row.success {\n background: color-mix(in srgb, var(--mj-status-success) 5%, transparent);\n}\n\n.running {\n color: var(--mj-status-warning);\n font-style: italic;\n}\n\n.result-code {\n display: inline-block;\n padding: 4px 8px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n font-family: 'Courier New', monospace;\n}\n\n.result-code.success {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.result-code.failure {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\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: var(--mj-text-secondary);\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: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all var(--mj-transition-base);\n}\n\n.library-card:hover {\n background: var(--mj-bg-surface-hover);\n transform: translateX(4px);\n}\n\n.library-card i:first-child {\n font-size: 1.5em;\n color: var(--mj-text-muted);\n}\n\n.library-info {\n flex: 1;\n min-width: 0;\n}\n\n.library-name {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.library-items {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\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: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all var(--mj-transition-base);\n}\n\n.related-entity-link:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n}\n\n.related-entity-link i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.related-entity-link span:first-of-type {\n flex: 1;\n font-weight: var(--mj-font-medium);\n color: var(--mj-text-secondary);\n}\n\n.entity-count {\n color: var(--mj-brand-primary);\n font-size: var(--mj-text-sm);\n}\n\n/* Common States */\n.loading-state {\n text-align: center;\n padding: 60px;\n color: var(--mj-text-muted);\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: var(--mj-text-muted);\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: var(--mj-text-sm) !important;\n opacity: 0.7;\n}\n\n.no-params {\n text-align: center;\n padding: 20px;\n color: var(--mj-text-muted);\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}\n\n/* ============================================\n KENDO EXPANSION PANEL OVERRIDES\n ============================================ */\n::ng-deep .k-expander {\n background: var(--mj-bg-surface-card) !important;\n border-color: var(--mj-border-default) !important;\n color: var(--mj-text-primary) !important;\n}\n\n::ng-deep .k-expander-header {\n background: var(--mj-bg-surface-elevated) !important;\n color: var(--mj-text-primary) !important;\n border-color: var(--mj-border-default) !important;\n}\n\n::ng-deep .k-expander-header:hover {\n background: var(--mj-bg-surface-hover) !important;\n}\n\n::ng-deep .k-expander-title {\n color: var(--mj-text-primary) !important;\n}\n\n::ng-deep .k-expander-indicator .k-icon,\n::ng-deep .k-expander-indicator .k-svg-icon {\n color: var(--mj-text-muted) !important;\n}\n\n::ng-deep .k-expander-content-wrapper {\n border-color: var(--mj-border-default) !important;\n}\n\n::ng-deep .k-expander-content {\n background: var(--mj-bg-surface-card) !important;\n border-color: var(--mj-border-default) !important;\n color: var(--mj-text-primary) !important;\n}\n"] }]
|
|
2331
|
+
args: [{ standalone: false, selector: 'mj-action-form', template: "<!--\n NOTE: We wrap the form content in <mj-record-form-container> rather than\n using <mj-form-toolbar> directly. The container owns the toolbar AND the\n panels behind History/Tags/List buttons \u2014 without it those buttons emit\n events that nothing listens to and the features silently break. Follow\n this pattern for every custom entity form \u2014 see packages/Angular/CLAUDE.md.\n-->\n@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"toolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n\n <!-- Main Content Area -->\n <div class=\"action-main-area\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n \n <!-- Header Section -->\n <div class=\"action-header\" style=\"flex-shrink: 0; padding: 20px; background: var(--mj-bg-surface-card); border-bottom: 2px solid var(--mj-border-default);\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n \n <!-- Left: Action Info -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 8px;\">\n <i [class]=\"getActionIcon()\" [style.color]=\"getTypeColor()\" style=\"font-size: 1.4em;\"></i>\n @if (EditMode) {\n <input type=\"text\" class=\"mj-input\"\n [(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 } @else {\n <h4 style=\"margin: 0; color: var(--mj-text-secondary); font-weight: 600; flex: 1;\">{{ record.Name || 'Untitled Action' }}</h4>\n <span class=\"status-chip\"\n [attr.data-color]=\"record.Status === 'Active' ? 'success' : record.Status === 'Pending' ? 'warning' : 'error'\">\n {{ record.Status }}\n </span>\n @if (hasCodeApproval && record.CodeApprovalStatus) {\n <span class=\"status-chip\"\n [attr.data-color]=\"record.CodeApprovalStatus === 'Approved' ? 'success' : record.CodeApprovalStatus === 'Pending' ? 'warning' : 'error'\"\n [title]=\"'Code ' + record.CodeApprovalStatus\">\n <i [class]=\"'fa-solid ' + getApprovalStatusIcon()\" style=\"margin-right: 4px;\"></i>\n {{ record.CodeApprovalStatus }}\n </span>\n }\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: var(--mj-text-secondary); font-size: 0.9em;\">Status</label>\n <mj-dropdown [(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 </mj-dropdown>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Type <span style=\"color: var(--mj-status-error);\">*</span>\n </label>\n <mj-dropdown [(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 </mj-dropdown>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Category <span style=\"color: var(--mj-status-error);\">*</span>\n </label>\n <mj-dropdown [(ngModel)]=\"record.CategoryID\"\n name=\"categoryID\"\n [Data]=\"[]\"\n Placeholder=\"Select category...\"\n style=\"width: 200px;\">\n </mj-dropdown>\n </div>\n @if (hasCodeApproval) {\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n <i [class]=\"'fa-solid ' + getApprovalStatusIcon()\" [style.color]=\"getApprovalStatusColor()\" style=\"margin-right: 4px;\"></i>\n Code Approval\n </label>\n <mj-dropdown [(ngModel)]=\"record.CodeApprovalStatus\"\n name=\"codeApprovalStatus\"\n [Data]=\"[{text: 'Approved', value: 'Approved'}, {text: 'Pending', value: 'Pending'}, {text: 'Rejected', value: 'Rejected'}]\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n style=\"width: 160px;\">\n </mj-dropdown>\n </div>\n }\n </div>\n }\n \n @if (EditMode) {\n <textarea class=\"mj-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 </textarea>\n } @else if (record.Description) {\n <p style=\"margin: 0 0 12px 0; color: var(--mj-text-muted); 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: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Category:</span>\n <span style=\"color: var(--mj-text-secondary); 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: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Type:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ record.Type }}</span>\n </div>\n \n @if (hasCodeApproval && 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: var(--mj-text-muted);\">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: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-secondary); 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 && !EditMode) {\n <button mjButton variant=\"primary\" size=\"lg\"\n (click)=\"openTestHarness()\"\n title=\"Open Run Harness\"\n [disabled]=\"record.Status !== 'Active'\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n @if (EditMode && record.Type === 'Generated') {\n <button mjButton variant=\"outline\" size=\"md\"\n (click)=\"regenerateCode()\"\n title=\"Regenerate Code\">\n <i class=\"fa-solid fa-robot\"></i> Regenerate\n </button>\n }\n </div>\n \n @if (!EditMode && record.Status !== 'Active' && record.ID) {\n <div style=\"font-size: 0.75em; color: var(--mj-status-error); 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: var(--mj-bg-surface-card); border-top: 2px solid var(--mj-border-default); padding: 16px; min-height: 0;\">\n \n <!-- Parameters Section (FIRST) -->\n <mj-accordion-panel\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: var(--mj-text-muted);\"></i>\n Parameters\n @if (actionParams.length > 0) {\n <span style=\"background: var(--mj-status-info); color: var(--mj-text-inverse); 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: var(--mj-text-muted); opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: var(--mj-text-muted);\">No parameters defined</p>\n @if (EditMode && record.IsSaved) {\n <p style=\"margin: 8px 0 0 0; font-size: 0.85em; color: var(--mj-text-muted);\">Add parameters to define inputs and outputs for this action</p>\n }\n </div>\n } @else {\n <!-- Input Parameters Grid -->\n <div class=\"params-section\">\n <div class=\"params-header\">\n <h3><i class=\"fa-solid fa-sign-in-alt\"></i> Input Parameters</h3>\n @if (EditMode && record.IsSaved) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"addParameter('Input')\">\n <i class=\"fa-solid fa-plus\"></i> Add Input\n </button>\n }\n </div>\n \n @if (getInputParams().length === 0) {\n <div class=\"empty-state\" style=\"padding: 30px; text-align: center;\">\n <i class=\"fa-solid fa-inbox\" style=\"font-size: 2em; color: var(--mj-text-muted); opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: var(--mj-text-muted);\">No input parameters defined</p>\n </div>\n } @else {\n <div class=\"params-grid\">\n @for (param of getInputParams(); track param.ID) {\n <div class=\"param-card\" [class.required]=\"param.IsRequired\" \n [class.clickable]=\"true\"\n (click)=\"onParamClick(param, $event)\">\n <div class=\"param-header\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <div class=\"param-badges\">\n @if (param.IsRequired) {\n <span class=\"required-badge\">Required</span>\n }\n @if (param.IsArray) {\n <span class=\"array-badge\">Array</span>\n }\n @if (EditMode) {\n <button class=\"param-edit-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"param-delete-btn\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n <div class=\"param-details\">\n <div class=\"param-type\">{{ param.ValueType }}</div>\n @if (param.Description) {\n <div class=\"param-description\">{{ param.Description }}</div>\n }\n @if (param.DefaultValue) {\n <div class=\"param-default\">\n <span class=\"default-label\">Default:</span>\n <code>{{ param.DefaultValue }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Output Parameters Grid -->\n <div class=\"params-section\" style=\"margin-top: 24px;\" \n [class.params-section-compact]=\"getOutputParams().length === 0\">\n <div class=\"params-header\">\n <h3><i class=\"fa-solid fa-sign-out-alt\"></i> Output Parameters</h3>\n @if (EditMode && record.IsSaved) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"addParameter('Output')\">\n <i class=\"fa-solid fa-plus\"></i> Add Output\n </button>\n }\n </div>\n \n @if (getOutputParams().length === 0) {\n <div class=\"empty-state\" style=\"padding: 20px; text-align: center;\">\n <i class=\"fa-solid fa-inbox\" style=\"font-size: 2em; color: var(--mj-text-muted); opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: var(--mj-text-muted);\">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 </mj-accordion-panel>\n\n <!-- Code & Generation Section (Only for Generated type) -->\n @if (record.Type === 'Generated') {\n <mj-accordion-panel\n [Expanded]=\"expandedSections.code\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n Code & Generation\n @if (record.CodeLocked) {\n <span style=\"background: var(--mj-status-warning); color: var(--mj-color-warning-800); 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 <textarea class=\"mj-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 </textarea>\n </div>\n <div class=\"comments-section\">\n <label>Internal Comments (not sent to AI)</label>\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.UserComments\"\n name=\"userComments\"\n [rows]=\"2\"\n placeholder=\"Internal notes...\"\n style=\"width: 100%;\">\n </textarea>\n </div>\n <div class=\"generation-controls\">\n <mj-switch [(ngModel)]=\"record.CodeLocked\"\n name=\"codeLocked\">\n </mj-switch>\n <label style=\"margin-left: 8px;\">Lock Code (prevent regeneration)</label>\n </div>\n </div>\n }\n \n <div class=\"code-editor-section\">\n <div class=\"code-toolbar\">\n <h3><i class=\"fa-solid fa-file-code\"></i> Action Code</h3>\n <div class=\"code-actions\">\n @if (record.CodeComments) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"toggleCodeComments()\">\n <i class=\"fa-solid fa-comment\"></i> \n {{ showCodeComments ? 'Hide' : 'Show' }} AI Comments\n </button>\n }\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"copyToClipboard(record.Code || '')\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n </div>\n </div>\n <mj-code-editor \n [(ngModel)]=\"record.Code\"\n name=\"actionCode\"\n [readonly]=\"!EditMode || record.CodeLocked\"\n [language]=\"codeLanguage\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n \n @if (showCodeComments && record.CodeComments) {\n <div class=\"code-comments\">\n <h4><i class=\"fa-solid fa-robot\"></i> AI Explanation</h4>\n <p>{{ record.CodeComments }}</p>\n </div>\n }\n \n @if (EditMode && record.CodeApprovalStatus === 'Rejected') {\n <div class=\"approval-comments\">\n <label>Rejection Comments</label>\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.CodeApprovalComments\"\n name=\"codeApprovalComments\"\n [rows]=\"2\"\n placeholder=\"Explain why the code was rejected...\"\n style=\"width: 100%;\">\n </textarea>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Runtime Action Configuration Section (only for Type='Runtime') -->\n @if (isRuntimeAction) {\n <mj-accordion-panel\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-wand-magic-sparkles\" style=\"color: var(--mj-status-warning);\"></i>\n Runtime Configuration & Permissions\n <span style=\"color: var(--mj-text-muted); font-weight: 400; font-size: 0.85em;\">\n ({{ getRuntimeConfigSummary() }})\n </span>\n </span>\n </ng-template>\n\n <div style=\"padding: 16px;\">\n @if (!runtimeConfig) {\n <div style=\"padding: 12px; background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface)); border-left: 3px solid var(--mj-status-error); border-radius: 4px;\">\n <i class=\"fa-solid fa-triangle-exclamation\" style=\"color: var(--mj-status-error); margin-right: 8px;\"></i>\n <strong>Missing or malformed RuntimeActionConfiguration.</strong>\n This Runtime action cannot run until a valid configuration is supplied. Approval should not be granted in this state.\n </div>\n } @else {\n @if (getWildcardFlags().any) {\n <div style=\"padding: 12px; background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface)); border-left: 3px solid var(--mj-status-warning); border-radius: 4px; margin-bottom: 16px;\">\n <div style=\"font-weight: 600; margin-bottom: 4px; color: var(--mj-text-primary);\">\n <i class=\"fa-solid fa-triangle-exclamation\" style=\"color: var(--mj-status-warning); margin-right: 6px;\"></i>\n Wildcard permissions enabled\n </div>\n <div style=\"color: var(--mj-text-secondary); font-size: 0.9em;\">\n This runtime action has one or more wildcard flags set that bypass the specific allowlists below:\n @if (getWildcardFlags().entity) { <strong>allowAnyEntity</strong> }\n @if (getWildcardFlags().action) { <strong>allowAnyAction</strong> }\n @if (getWildcardFlags().agent) { <strong>allowAnyAgent</strong> }\n . Approving grants this action unrestricted access to that namespace on behalf of any user who invokes it. Only approve if the action is framework-authored or you have personally reviewed every place it touches those resources.\n </div>\n </div>\n }\n <!-- Declared permissions \u2014 the security contract an approver is blessing -->\n <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 16px; margin-bottom: 20px;\">\n <!-- Entities -->\n <div style=\"border: 1px solid var(--mj-border-default); border-radius: 6px; padding: 12px; background: var(--mj-bg-surface-card);\">\n <div style=\"font-weight: 600; margin-bottom: 8px; color: var(--mj-text-primary);\">\n <i class=\"fa-solid fa-database\" style=\"margin-right: 6px; color: var(--mj-brand-primary);\"></i>\n Allowed Entities ({{ getAllowedEntities().length }})\n </div>\n @if (getAllowedEntities().length === 0) {\n <div style=\"color: var(--mj-text-muted); font-style: italic;\">None requested</div>\n } @else {\n <div style=\"display: flex; flex-direction: column; gap: 4px;\">\n @for (e of getAllowedEntities(); track e.id) {\n <span style=\"background: var(--mj-bg-surface-sunken); padding: 4px 8px; border-radius: 4px; font-size: 0.9em; color: var(--mj-text-primary);\">\n {{ e.name }}\n </span>\n }\n </div>\n }\n </div>\n\n <!-- Actions -->\n <div style=\"border: 1px solid var(--mj-border-default); border-radius: 6px; padding: 12px; background: var(--mj-bg-surface-card);\">\n <div style=\"font-weight: 600; margin-bottom: 8px; color: var(--mj-text-primary);\">\n <i class=\"fa-solid fa-bolt\" style=\"margin-right: 6px; color: var(--mj-brand-primary);\"></i>\n Allowed Actions ({{ getAllowedActions().length }})\n </div>\n @if (getAllowedActions().length === 0) {\n <div style=\"color: var(--mj-text-muted); font-style: italic;\">None requested</div>\n } @else {\n <div style=\"display: flex; flex-direction: column; gap: 4px;\">\n @for (a of getAllowedActions(); track a.id) {\n <span style=\"background: var(--mj-bg-surface-sunken); padding: 4px 8px; border-radius: 4px; font-size: 0.9em; color: var(--mj-text-primary);\">\n {{ a.name }}\n </span>\n }\n </div>\n }\n </div>\n\n <!-- Agents -->\n <div style=\"border: 1px solid var(--mj-border-default); border-radius: 6px; padding: 12px; background: var(--mj-bg-surface-card);\">\n <div style=\"font-weight: 600; margin-bottom: 8px; color: var(--mj-text-primary);\">\n <i class=\"fa-solid fa-robot\" style=\"margin-right: 6px; color: var(--mj-brand-primary);\"></i>\n Allowed Agents ({{ getAllowedAgents().length }})\n </div>\n @if (getAllowedAgents().length === 0) {\n <div style=\"color: var(--mj-text-muted); font-style: italic;\">None requested</div>\n } @else {\n <div style=\"display: flex; flex-direction: column; gap: 4px;\">\n @for (g of getAllowedAgents(); track g.id) {\n <span style=\"background: var(--mj-bg-surface-sunken); padding: 4px 8px; border-radius: 4px; font-size: 0.9em; color: var(--mj-text-primary);\">\n {{ g.name }}\n </span>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Limits + libraries -->\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 16px;\">\n <div>\n <div style=\"font-weight: 600; margin-bottom: 6px; color: var(--mj-text-primary);\">\n <i class=\"fa-solid fa-gauge-high\" style=\"margin-right: 6px; color: var(--mj-text-muted);\"></i>\n Resource Limits\n </div>\n <div style=\"color: var(--mj-text-secondary); font-size: 0.9em;\">\n <div>Max memory: {{ getRuntimeLimits().maxMemoryMB }} MB</div>\n <div>Max bridge calls: {{ getRuntimeLimits().maxBridgeCalls }}</div>\n @if (record.MaxExecutionTimeMS) {\n <div>Max execution time: {{ record.MaxExecutionTimeMS }} ms</div>\n }\n </div>\n </div>\n <div>\n <div style=\"font-weight: 600; margin-bottom: 6px; color: var(--mj-text-primary);\">\n <i class=\"fa-solid fa-book\" style=\"margin-right: 6px; color: var(--mj-text-muted);\"></i>\n Additional Libraries\n </div>\n @if (getRequestedLibraries().length === 0) {\n <div style=\"color: var(--mj-text-muted); font-style: italic;\">None (only default set: lodash, date-fns, uuid, validator)</div>\n } @else {\n <div style=\"display: flex; flex-wrap: wrap; gap: 4px;\">\n @for (lib of getRequestedLibraries(); track lib.name) {\n <span style=\"background: var(--mj-bg-surface-sunken); padding: 2px 8px; border-radius: 10px; font-size: 0.85em;\">\n {{ lib.name }}@if (lib.version) {<span style=\"color: var(--mj-text-muted);\"> @{{ lib.version }}</span>}\n </span>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Code payload -->\n <div>\n <div style=\"font-weight: 600; margin-bottom: 6px; color: var(--mj-text-primary);\">\n <i class=\"fa-solid fa-code\" style=\"margin-right: 6px; color: var(--mj-text-muted);\"></i>\n JavaScript Payload\n </div>\n <pre style=\"background: var(--mj-bg-surface-sunken); color: var(--mj-text-primary); padding: 12px; border-radius: 4px; overflow-x: auto; max-height: 400px; font-family: 'SF Mono', Monaco, Consolas, monospace; font-size: 0.85em; margin: 0;\"><code>{{ record.Code }}</code></pre>\n </div>\n\n <!-- Approval actions (Runtime-specific labels) -->\n @if (EditMode && record.CodeApprovalStatus === 'Pending') {\n <div style=\"margin-top: 16px; padding: 12px; background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface)); border-radius: 6px;\">\n <div style=\"font-weight: 600; margin-bottom: 8px;\">\n <i class=\"fa-solid fa-circle-exclamation\" style=\"color: var(--mj-status-warning); margin-right: 6px;\"></i>\n Approval required before this Runtime action can execute.\n </div>\n <div style=\"color: var(--mj-text-secondary); font-size: 0.9em; margin-bottom: 12px;\">\n Approving grants this action the permissions listed above on behalf of any user who invokes it. Review the code and permissions carefully before approving.\n </div>\n <div style=\"display: flex; gap: 8px;\">\n <button class=\"mj-button mj-button-primary\" (click)=\"approveCode()\">\n <i class=\"fa-solid fa-check\"></i> Approve\n </button>\n <button class=\"mj-button\" (click)=\"rejectCode()\">\n <i class=\"fa-solid fa-ban\"></i> Reject\n </button>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Result Codes Section -->\n <mj-accordion-panel\n [Expanded]=\"expandedSections.resultCodes\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-flag-checkered\" style=\"color: var(--mj-text-muted);\"></i>\n Result Codes\n @if (resultCodes.length > 0) {\n <span style=\"background: var(--mj-status-success); color: var(--mj-text-inverse); padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ resultCodes.length }}\n </span>\n }\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n <!-- Add Result Code Button -->\n @if (EditMode && record.IsSaved) {\n <div style=\"display: flex; justify-content: flex-end; margin-bottom: 12px;\">\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"addResultCode()\">\n <i class=\"fa-solid fa-plus\"></i> Add Result Code\n </button>\n </div>\n }\n \n @if (isLoadingResultCodes) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading result codes...\n </div>\n } @else if (resultCodes.length === 0) {\n <div class=\"empty-state\" style=\"padding: 30px; text-align: center;\">\n <i class=\"fa-solid fa-flag-checkered\" style=\"font-size: 2em; color: var(--mj-text-muted); opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: var(--mj-text-muted);\">No result codes defined</p>\n @if (EditMode && record.IsSaved) {\n <p style=\"margin: 8px 0 0 0; font-size: 0.85em; color: var(--mj-text-muted);\">Add result codes to define possible outcomes</p>\n }\n </div>\n } @else {\n <div class=\"result-codes-grid\">\n @for (code of resultCodes; track code.ID) {\n <div class=\"result-code-card\" \n [class.success]=\"code.IsSuccess\" \n [class.failure]=\"!code.IsSuccess\"\n [class.clickable]=\"true\"\n (click)=\"onResultCodeClick(code, $event)\">\n <div class=\"result-icon\">\n <i [class]=\"code.IsSuccess ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n </div>\n <div class=\"result-content\">\n <div class=\"result-code\">{{ code.ResultCode }}</div>\n @if (code.Description) {\n <div class=\"result-description\">{{ code.Description }}</div>\n }\n </div>\n @if (EditMode) {\n <div class=\"result-actions\">\n <button class=\"result-edit-btn\" (click)=\"editResultCode(code); $event.stopPropagation()\" title=\"Edit result code\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"result-delete-btn\" (click)=\"deleteResultCode(code); $event.stopPropagation()\" title=\"Delete result code\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Execution & Monitoring Section -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"expandedSections.execution\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-chart-line\" style=\"color: var(--mj-text-muted);\"></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: var(--mj-text-muted); opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: var(--mj-text-muted);\">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: var(--mj-text-primary);\">Avg Duration</div>\n <div class=\"stat-value\" style=\"color: var(--mj-text-primary);\">{{ 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: var(--mj-text-primary);\">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: var(--mj-text-primary);\">Total Runs</div>\n <div class=\"stat-value\" style=\"color: var(--mj-text-primary);\">{{ executionStats.totalRuns }}</div>\n </div>\n </div>\n </div>\n\n <h3 style=\"margin-top: 24px;\"><i class=\"fa-solid fa-history\"></i> Recent Executions</h3>\n <div class=\"executions-table\">\n <table>\n <thead>\n <tr>\n <th>Started</th>\n <th>Duration</th>\n <th>User</th>\n <th>Result</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (execution of recentExecutions; track execution.ID) {\n <tr class=\"execution-row\" [class.success]=\"isExecutionSuccess(execution)\">\n <td>{{ execution.StartedAt | date:'short' }}</td>\n <td>\n @if (execution.EndedAt) {\n {{ formatDuration(getExecutionDuration(execution)) }}\n } @else {\n <span class=\"running\">Running...</span>\n }\n </td>\n <td>{{ execution.User }}</td>\n <td>\n <span class=\"result-code\" \n [class.success]=\"isExecutionSuccess(execution)\"\n [class.failure]=\"!isExecutionSuccess(execution)\">\n {{ execution.ResultCode }}\n </span>\n </td>\n <td>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"navigateToExecution(execution.ID)\">\n <i class=\"fa-solid fa-external-link\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Related Configuration Section -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"expandedSections.configuration\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-cogs\" style=\"color: var(--mj-text-muted);\"></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 </mj-accordion-panel>\n }\n </div>\n </div>\n </form>\n</mj-record-form-container>\n}\n\n<!-- Action Test Harness Dialog -->\n<mj-action-test-harness-dialog\n [Action]=\"record\"\n [ActionParams]=\"actionParams\"\n [IsOpen]=\"showTestHarness\"\n (Close)=\"onTestHarnessVisibilityChanged(false)\">\n</mj-action-test-harness-dialog>", styles: ["/* Enable flex layout for full-height scrolling */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form {\n min-height: 0 !important;\n}\n\n/* Hero Header Section */\n.action-hero-header {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 32px;\n margin: -20px -20px 24px -20px;\n border-radius: 0 0 var(--mj-radius-lg) var(--mj-radius-lg);\n box-shadow: var(--mj-shadow-md);\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: var(--mj-radius-lg);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n backdrop-filter: blur(10px);\n}\n\n.action-icon-wrapper i {\n font-size: var(--mj-text-4xl);\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: var(--mj-font-semibold);\n color: var(--mj-text-inverse);\n}\n\n.action-name-input {\n font-size: 1.8em;\n font-weight: var(--mj-font-semibold);\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n border: 2px solid color-mix(in srgb, var(--mj-text-inverse) 30%, transparent);\n color: var(--mj-text-inverse);\n padding: 8px 16px;\n border-radius: var(--mj-radius-md);\n min-width: 400px;\n}\n\n.action-name-input::placeholder {\n color: color-mix(in srgb, var(--mj-text-inverse) 60%, transparent);\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: var(--mj-radius-full);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n backdrop-filter: blur(10px);\n border: 1px solid color-mix(in srgb, var(--mj-text-inverse) 30%, transparent);\n}\n\n.action-category {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n color: color-mix(in srgb, var(--mj-text-inverse) 90%, transparent);\n font-size: 0.95em;\n cursor: pointer;\n transition: all var(--mj-transition-base);\n margin-bottom: 12px;\n}\n\n.action-category:hover {\n color: var(--mj-text-inverse);\n transform: translateX(4px);\n}\n\n.action-description {\n color: color-mix(in srgb, var(--mj-text-inverse) 90%, transparent);\n font-size: 1.05em;\n line-height: var(--mj-leading-relaxed);\n margin: 0;\n}\n\n.action-description-input {\n width: 100%;\n max-width: 600px;\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n border: 2px solid color-mix(in srgb, var(--mj-text-inverse) 30%, transparent);\n color: var(--mj-text-inverse);\n border-radius: var(--mj-radius-md);\n}\n\n.action-description-input::placeholder {\n color: color-mix(in srgb, var(--mj-text-inverse) 60%, transparent);\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: color-mix(in srgb, var(--mj-text-inverse) 10%, transparent);\n backdrop-filter: blur(10px);\n border: 1px solid color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n border-radius: var(--mj-radius-lg);\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: var(--mj-text-2xl);\n color: color-mix(in srgb, var(--mj-text-inverse) 80%, transparent);\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: var(--mj-font-bold);\n color: var(--mj-text-inverse);\n}\n\n.stat-label {\n font-size: var(--mj-text-sm);\n color: color-mix(in srgb, var(--mj-text-inverse) 70%, transparent);\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 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: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg);\n margin-bottom: 20px;\n overflow: hidden;\n transition: all var(--mj-transition-base);\n}\n\n.content-section:hover {\n box-shadow: var(--mj-shadow-md);\n}\n\n.section-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n background: var(--mj-bg-surface-elevated);\n cursor: pointer;\n user-select: none;\n transition: background var(--mj-transition-base);\n}\n\n.section-header:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.section-header h2 {\n margin: 0;\n font-size: 1.3em;\n color: var(--mj-text-primary);\n flex: 1;\n}\n\n.section-header i:first-child {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.section-count {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: var(--mj-radius-full);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n}\n\n.toggle-icon {\n color: var(--mj-text-muted);\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: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.required {\n color: var(--mj-status-error);\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: var(--mj-text-sm);\n color: var(--mj-text-muted);\n font-weight: var(--mj-font-semibold);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.display-value {\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.display-value.code {\n font-family: 'Courier New', monospace;\n background: var(--mj-bg-surface-sunken);\n padding: 4px 8px;\n border-radius: var(--mj-radius-sm);\n}\n\n.approval-date {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n margin-left: 8px;\n}\n\n/* Code Section */\n.generation-panel {\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 20px;\n margin-bottom: 24px;\n}\n\n.generation-panel h3 {\n margin: 0 0 16px 0;\n color: var(--mj-color-indigo-500);\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: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n}\n\n.generation-controls {\n display: flex;\n align-items: center;\n gap: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.code-locked-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n background: var(--mj-status-warning);\n color: var(--mj-color-warning-800);\n border-radius: var(--mj-radius-full);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n}\n\n.code-editor-section {\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\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: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.code-toolbar h3 {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-secondary);\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: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-info) 30%, transparent);\n border-radius: var(--mj-radius-md);\n padding: 16px;\n margin-top: 16px;\n}\n\n.code-comments h4 {\n margin: 0 0 8px 0;\n color: var(--mj-status-info);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.code-comments p {\n margin: 0;\n color: var(--mj-text-secondary);\n line-height: var(--mj-leading-relaxed);\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: var(--mj-font-semibold);\n color: var(--mj-status-error);\n}\n\n/* Parameters Section */\n.params-section {\n background: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-lg);\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: var(--mj-text-secondary);\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: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 16px;\n transition: all var(--mj-transition-base);\n}\n\n.param-card:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.param-card.required {\n border-color: var(--mj-status-warning);\n}\n\n.param-card.clickable {\n cursor: pointer;\n}\n\n.param-card.clickable:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\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: var(--mj-font-semibold);\n color: var(--mj-text-primary);\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: var(--mj-text-muted);\n border-radius: var(--mj-radius-sm);\n transition: all var(--mj-transition-base);\n}\n\n.param-edit-btn:hover {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.param-delete-btn:hover {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.param-details {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.required-badge {\n background: var(--mj-status-warning);\n color: var(--mj-color-warning-800);\n padding: 2px 6px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n}\n\n.array-badge {\n background: var(--mj-color-indigo-500);\n color: var(--mj-text-inverse);\n padding: 2px 6px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n}\n\n.param-type {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n margin-bottom: 8px;\n}\n\n.param-description {\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\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 var(--mj-border-default);\n}\n\n.default-label {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n}\n\n.param-default code {\n background: var(--mj-bg-surface-sunken);\n padding: 2px 6px;\n border-radius: var(--mj-radius-sm);\n font-family: 'Courier New', monospace;\n color: var(--mj-color-error-400);\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 var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n transition: all var(--mj-transition-base);\n position: relative;\n}\n\n.result-code-card.clickable {\n cursor: pointer;\n}\n\n.result-code-card:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.result-code-card.success {\n border-color: var(--mj-status-success);\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n}\n\n.result-code-card.failure {\n border-color: var(--mj-status-error);\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n}\n\n.result-actions {\n position: absolute;\n top: 8px;\n right: 8px;\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity var(--mj-transition-base);\n}\n\n.result-code-card:hover .result-actions {\n opacity: 1;\n}\n\n.result-edit-btn,\n.result-delete-btn {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n padding: 4px 8px;\n cursor: pointer;\n transition: all var(--mj-transition-base);\n font-size: var(--mj-text-sm);\n}\n\n.result-edit-btn:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.result-delete-btn:hover {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border-color: var(--mj-status-error);\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: var(--mj-status-success);\n}\n\n.result-code-card.failure .result-icon {\n color: var(--mj-status-error);\n}\n\n.result-content {\n flex: 1;\n min-width: 0;\n}\n\n.result-code {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n font-family: 'Courier New', monospace;\n}\n\n.result-description {\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\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: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\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: var(--mj-text-muted);\n}\n\n.stat-info {\n flex: 1;\n}\n\n.executions-table {\n overflow-x: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n}\n\n.executions-table table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.executions-table th {\n background: var(--mj-bg-surface-sunken);\n padding: 12px;\n text-align: left;\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.executions-table td {\n padding: 12px;\n border-bottom: 1px solid var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n.execution-row {\n transition: background var(--mj-transition-base);\n}\n\n.execution-row:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.execution-row.success {\n background: color-mix(in srgb, var(--mj-status-success) 5%, transparent);\n}\n\n.running {\n color: var(--mj-status-warning);\n font-style: italic;\n}\n\n.result-code {\n display: inline-block;\n padding: 4px 8px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n font-family: 'Courier New', monospace;\n}\n\n.result-code.success {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.result-code.failure {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\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: var(--mj-text-secondary);\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: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all var(--mj-transition-base);\n}\n\n.library-card:hover {\n background: var(--mj-bg-surface-hover);\n transform: translateX(4px);\n}\n\n.library-card i:first-child {\n font-size: 1.5em;\n color: var(--mj-text-muted);\n}\n\n.library-info {\n flex: 1;\n min-width: 0;\n}\n\n.library-name {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.library-items {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\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: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all var(--mj-transition-base);\n}\n\n.related-entity-link:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n}\n\n.related-entity-link i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.related-entity-link span:first-of-type {\n flex: 1;\n font-weight: var(--mj-font-medium);\n color: var(--mj-text-secondary);\n}\n\n.entity-count {\n color: var(--mj-brand-primary);\n font-size: var(--mj-text-sm);\n}\n\n/* Common States */\n.loading-state {\n text-align: center;\n padding: 60px;\n color: var(--mj-text-muted);\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: var(--mj-text-muted);\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: var(--mj-text-sm) !important;\n opacity: 0.7;\n}\n\n.no-params {\n text-align: center;\n padding: 20px;\n color: var(--mj-text-muted);\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}\n\n/* ============================================\n KENDO EXPANSION PANEL OVERRIDES\n ============================================ */\n::ng-deep .k-expander {\n background: var(--mj-bg-surface-card) !important;\n border-color: var(--mj-border-default) !important;\n color: var(--mj-text-primary) !important;\n}\n\n::ng-deep .k-expander-header {\n background: var(--mj-bg-surface-elevated) !important;\n color: var(--mj-text-primary) !important;\n border-color: var(--mj-border-default) !important;\n}\n\n::ng-deep .k-expander-header:hover {\n background: var(--mj-bg-surface-hover) !important;\n}\n\n::ng-deep .k-expander-title {\n color: var(--mj-text-primary) !important;\n}\n\n::ng-deep .k-expander-indicator .k-icon,\n::ng-deep .k-expander-indicator .k-svg-icon {\n color: var(--mj-text-muted) !important;\n}\n\n::ng-deep .k-expander-content-wrapper {\n border-color: var(--mj-border-default) !important;\n}\n\n::ng-deep .k-expander-content {\n background: var(--mj-bg-surface-card) !important;\n border-color: var(--mj-border-default) !important;\n color: var(--mj-text-primary) !important;\n}\n"] }]
|
|
1872
2332
|
}], null, null); })();
|
|
1873
2333
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJActionFormComponentExtended, { className: "MJActionFormComponentExtended", filePath: "src/lib/custom/Actions/action-form.component.ts", lineNumber: 18 }); })();
|
|
1874
2334
|
//# sourceMappingURL=action-form.component.js.map
|