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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +4 -0
  2. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  3. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +567 -566
  4. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  5. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +3 -0
  6. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  7. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +243 -244
  8. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  9. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +3 -0
  10. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  11. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +417 -416
  12. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  13. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +51 -16
  14. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
  15. package/dist/lib/custom/Actions/action-execution-log-form.component.js +422 -139
  16. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  17. package/dist/lib/custom/Actions/action-form.component.d.ts +68 -1
  18. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
  19. package/dist/lib/custom/Actions/action-form.component.js +882 -422
  20. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  21. package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts +3 -0
  22. package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts.map +1 -1
  23. package/dist/lib/custom/EntityActions/entityaction.form.component.js +23 -22
  24. package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
  25. package/dist/lib/custom/Queries/query-form.component.d.ts +2 -0
  26. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  27. package/dist/lib/custom/Queries/query-form.component.js +617 -627
  28. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  29. package/dist/lib/custom/Templates/templates-form.component.d.ts +3 -0
  30. package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
  31. package/dist/lib/custom/Templates/templates-form.component.js +157 -158
  32. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  33. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
  34. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +176 -152
  35. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  36. package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.d.ts.map +1 -1
  37. package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.js +42 -6
  38. package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.js.map +1 -1
  39. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
  40. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +57 -49
  41. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
  42. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +83 -77
  43. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
  44. package/dist/lib/generated/Entities/MJArchiveRunDetail/mjarchiverundetail.form.component.js +2 -2
  45. package/dist/lib/generated/Entities/MJArchiveRunDetail/mjarchiverundetail.form.component.js.map +1 -1
  46. package/dist/lib/generated/Entities/MJCompanyIntegrationEntityMap/mjcompanyintegrationentitymap.form.component.js +10 -10
  47. package/dist/lib/generated/Entities/MJCompanyIntegrationEntityMap/mjcompanyintegrationentitymap.form.component.js.map +1 -1
  48. package/dist/lib/generated/Entities/MJEntityPermission/mjentitypermission.form.component.js +11 -9
  49. package/dist/lib/generated/Entities/MJEntityPermission/mjentitypermission.form.component.js.map +1 -1
  50. package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.js +9 -9
  51. package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.js.map +1 -1
  52. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js +23 -21
  53. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js.map +1 -1
  54. package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js +9 -7
  55. package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js.map +1 -1
  56. package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.d.ts +10 -0
  57. package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.d.ts.map +1 -0
  58. package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.js +85 -0
  59. package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.js.map +1 -0
  60. package/dist/lib/generated/Entities/MJResourcePermission/mjresourcepermission.form.component.d.ts.map +1 -1
  61. package/dist/lib/generated/Entities/MJResourcePermission/mjresourcepermission.form.component.js +21 -12
  62. package/dist/lib/generated/Entities/MJResourcePermission/mjresourcepermission.form.component.js.map +1 -1
  63. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js +5 -5
  64. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js.map +1 -1
  65. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js +21 -21
  66. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js.map +1 -1
  67. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  68. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +201 -183
  69. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  70. package/dist/lib/generated/generated-forms.module.d.ts +97 -96
  71. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  72. package/dist/lib/generated/generated-forms.module.js +36 -33
  73. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  74. package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
  75. package/dist/lib/shared/components/template-editor.component.js +14 -8
  76. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  77. package/package.json +34 -34
@@ -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
- function MJActionFormComponentExtended_Conditional_1_Conditional_9_Template(rf, ctx) { if (rf & 1) {
32
- const _r1 = i0.ɵɵgetCurrentView();
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 MJActionFormComponentExtended_Conditional_1_Conditional_9_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Name, $event) || (ctx_r1.record.Name = $event); return i0.ɵɵresetView($event); });
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 MJActionFormComponentExtended_Conditional_1_Conditional_10_Template(rf, ctx) { if (rf & 1) {
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 MJActionFormComponentExtended_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
57
- const _r3 = i0.ɵɵgetCurrentView();
58
- i0.ɵɵelementStart(0, "div", 12)(1, "div")(2, "label", 36);
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", 37);
62
- i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_1_Conditional_11_Template_mj_dropdown_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Status, $event) || (ctx_r1.record.Status = $event); return i0.ɵɵresetView($event); });
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", 36);
103
+ i0.ɵɵelementStart(5, "div")(6, "label", 38);
65
104
  i0.ɵɵtext(7, " Type ");
66
- i0.ɵɵelementStart(8, "span", 38);
105
+ i0.ɵɵelementStart(8, "span", 40);
67
106
  i0.ɵɵtext(9, "*");
68
107
  i0.ɵɵelementEnd()();
69
- i0.ɵɵelementStart(10, "mj-dropdown", 39);
70
- i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_1_Conditional_11_Template_mj_dropdown_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Type, $event) || (ctx_r1.record.Type = $event); return i0.ɵɵresetView($event); });
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", 36);
111
+ i0.ɵɵelementStart(11, "div")(12, "label", 38);
73
112
  i0.ɵɵtext(13, " Category ");
74
- i0.ɵɵelementStart(14, "span", 38);
113
+ i0.ɵɵelementStart(14, "span", 40);
75
114
  i0.ɵɵtext(15, "*");
76
115
  i0.ɵɵelementEnd()();
77
- i0.ɵɵelementStart(16, "mj-dropdown", 40);
78
- i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_1_Conditional_11_Template_mj_dropdown_ngModelChange_16_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.CategoryID, $event) || (ctx_r1.record.CategoryID = $event); return i0.ɵɵresetView($event); });
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(11, _c3, i0.ɵɵpureFunction0(8, _c0), i0.ɵɵpureFunction0(9, _c1), i0.ɵɵpureFunction0(10, _c2)))("ValuePrimitive", true);
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(17, _c6, i0.ɵɵpureFunction0(15, _c4), i0.ɵɵpureFunction0(16, _c5)))("ValuePrimitive", true);
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(20, _c7));
131
+ i0.ɵɵproperty("Data", i0.ɵɵpureFunction0(21, _c7));
132
+ i0.ɵɵadvance();
133
+ i0.ɵɵconditional(ctx_r1.hasCodeApproval ? 17 : -1);
91
134
  } }
92
- function MJActionFormComponentExtended_Conditional_1_Conditional_12_Template(rf, ctx) { if (rf & 1) {
93
- const _r4 = i0.ɵɵgetCurrentView();
94
- i0.ɵɵelementStart(0, "textarea", 41);
95
- i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_1_Conditional_12_Template_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Description, $event) || (ctx_r1.record.Description = $event); return i0.ɵɵresetView($event); });
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 MJActionFormComponentExtended_Conditional_1_Conditional_13_Template(rf, ctx) { if (rf & 1) {
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 MJActionFormComponentExtended_Conditional_1_Conditional_15_Template(rf, ctx) { if (rf & 1) {
113
- const _r5 = i0.ɵɵgetCurrentView();
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", 42);
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", 43);
120
- i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_1_Conditional_15_Template_span_click_4_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToCategory()); });
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", 44);
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 MJActionFormComponentExtended_Conditional_1_Conditional_22_Template(rf, ctx) { if (rf & 1) {
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", 45);
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 MJActionFormComponentExtended_Conditional_1_Conditional_23_Template(rf, ctx) { if (rf & 1) {
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", 46);
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 MJActionFormComponentExtended_Conditional_1_Conditional_26_Template(rf, ctx) { if (rf & 1) {
160
- const _r6 = i0.ɵɵgetCurrentView();
161
- i0.ɵɵelementStart(0, "button", 47);
162
- i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_1_Conditional_26_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openTestHarness()); });
163
- i0.ɵɵelement(1, "i", 48);
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 MJActionFormComponentExtended_Conditional_1_Conditional_27_Template(rf, ctx) { if (rf & 1) {
171
- const _r7 = i0.ɵɵgetCurrentView();
172
- i0.ɵɵelementStart(0, "button", 49);
173
- i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_1_Conditional_27_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.regenerateCode()); });
174
- i0.ɵɵelement(1, "i", 50);
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 MJActionFormComponentExtended_Conditional_1_Conditional_28_Template(rf, ctx) { if (rf & 1) {
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 MJActionFormComponentExtended_Conditional_1_ng_template_32_Conditional_3_Template(rf, ctx) { if (rf & 1) {
197
- i0.ɵɵelementStart(0, "span", 56);
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 MJActionFormComponentExtended_Conditional_1_ng_template_32_Template(rf, ctx) { if (rf & 1) {
206
- i0.ɵɵelementStart(0, "span", 55);
207
- i0.ɵɵelement(1, "i", 46);
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, MJActionFormComponentExtended_Conditional_1_ng_template_32_Conditional_3_Template, 2, 1, "span", 56);
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 MJActionFormComponentExtended_Conditional_1_Conditional_34_Template(rf, ctx) { if (rf & 1) {
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", 57);
248
+ i0.ɵɵelement(1, "i", 56);
219
249
  i0.ɵɵtext(2, " Loading parameters... ");
220
250
  i0.ɵɵelementEnd();
221
251
  } }
222
- function MJActionFormComponentExtended_Conditional_1_Conditional_35_Conditional_4_Template(rf, ctx) { if (rf & 1) {
223
- i0.ɵɵelementStart(0, "p", 60);
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 MJActionFormComponentExtended_Conditional_1_Conditional_35_Template(rf, ctx) { if (rf & 1) {
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", 58);
230
- i0.ɵɵelementStart(2, "p", 59);
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, MJActionFormComponentExtended_Conditional_1_Conditional_35_Conditional_4_Template, 2, 0, "p", 60);
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 MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_5_Template(rf, ctx) { if (rf & 1) {
241
- const _r9 = i0.ɵɵgetCurrentView();
242
- i0.ɵɵelementStart(0, "button", 69);
243
- i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.addParameter("Input")); });
244
- i0.ɵɵelement(1, "i", 70);
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 MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_6_Template(rf, ctx) { if (rf & 1) {
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", 71);
251
- i0.ɵɵelementStart(2, "p", 59);
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 MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
256
- i0.ɵɵelementStart(0, "span", 77);
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 MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
261
- i0.ɵɵelementStart(0, "span", 78);
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 MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
266
- const _r12 = i0.ɵɵgetCurrentView();
267
- i0.ɵɵelementStart(0, "button", 83);
268
- i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const param_r11 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.editParameter(param_r11)); });
269
- i0.ɵɵelement(1, "i", 84);
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", 85);
272
- i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_7_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r12); const param_r11 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.deleteParameter(param_r11)); });
273
- i0.ɵɵelement(3, "i", 86);
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 MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
277
- i0.ɵɵelementStart(0, "div", 81);
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 param_r11 = i0.ɵɵnextContext().$implicit;
311
+ const param_r12 = i0.ɵɵnextContext().$implicit;
282
312
  i0.ɵɵadvance();
283
- i0.ɵɵtextInterpolate(param_r11.Description);
313
+ i0.ɵɵtextInterpolate(param_r12.Description);
284
314
  } }
285
- function MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
286
- i0.ɵɵelementStart(0, "div", 82)(1, "span", 87);
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 param_r11 = i0.ɵɵnextContext().$implicit;
323
+ const param_r12 = i0.ɵɵnextContext().$implicit;
294
324
  i0.ɵɵadvance(4);
295
- i0.ɵɵtextInterpolate(param_r11.DefaultValue);
325
+ i0.ɵɵtextInterpolate(param_r12.DefaultValue);
296
326
  } }
297
- function MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Template(rf, ctx) { if (rf & 1) {
298
- const _r10 = i0.ɵɵgetCurrentView();
299
- i0.ɵɵelementStart(0, "div", 73);
300
- i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Template_div_click_0_listener($event) { const param_r11 = i0.ɵɵrestoreView(_r10).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onParamClick(param_r11, $event)); });
301
- i0.ɵɵelementStart(1, "div", 74)(2, "span", 75);
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", 76);
305
- i0.ɵɵconditionalCreate(5, MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_5_Template, 2, 0, "span", 77);
306
- i0.ɵɵconditionalCreate(6, MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_6_Template, 2, 0, "span", 78);
307
- i0.ɵɵconditionalCreate(7, MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_7_Template, 4, 0);
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", 79)(9, "div", 80);
339
+ i0.ɵɵelementStart(8, "div", 78)(9, "div", 79);
310
340
  i0.ɵɵtext(10);
311
341
  i0.ɵɵelementEnd();
312
- i0.ɵɵconditionalCreate(11, MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_11_Template, 2, 1, "div", 81);
313
- i0.ɵɵconditionalCreate(12, MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Conditional_12_Template, 5, 1, "div", 82);
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 param_r11 = ctx.$implicit;
346
+ const param_r12 = ctx.$implicit;
317
347
  const ctx_r1 = i0.ɵɵnextContext(4);
318
- i0.ɵɵclassProp("required", param_r11.IsRequired)("clickable", true);
348
+ i0.ɵɵclassProp("required", param_r12.IsRequired)("clickable", true);
319
349
  i0.ɵɵadvance(3);
320
- i0.ɵɵtextInterpolate(param_r11.Name);
350
+ i0.ɵɵtextInterpolate(param_r12.Name);
321
351
  i0.ɵɵadvance(2);
322
- i0.ɵɵconditional(param_r11.IsRequired ? 5 : -1);
352
+ i0.ɵɵconditional(param_r12.IsRequired ? 5 : -1);
323
353
  i0.ɵɵadvance();
324
- i0.ɵɵconditional(param_r11.IsArray ? 6 : -1);
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(param_r11.ValueType);
358
+ i0.ɵɵtextInterpolate(param_r12.ValueType);
329
359
  i0.ɵɵadvance();
330
- i0.ɵɵconditional(param_r11.Description ? 11 : -1);
360
+ i0.ɵɵconditional(param_r12.Description ? 11 : -1);
331
361
  i0.ɵɵadvance();
332
- i0.ɵɵconditional(param_r11.DefaultValue ? 12 : -1);
362
+ i0.ɵɵconditional(param_r12.DefaultValue ? 12 : -1);
333
363
  } }
334
- function MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_Template(rf, ctx) { if (rf & 1) {
335
- i0.ɵɵelementStart(0, "div", 65);
336
- i0.ɵɵrepeaterCreate(1, MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_For_2_Template, 13, 11, "div", 72, _forTrack0);
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 MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_13_Template(rf, ctx) { if (rf & 1) {
344
- const _r13 = i0.ɵɵgetCurrentView();
345
- i0.ɵɵelementStart(0, "button", 69);
346
- i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_13_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.addParameter("Output")); });
347
- i0.ɵɵelement(1, "i", 70);
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 MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_14_Template(rf, ctx) { if (rf & 1) {
352
- i0.ɵɵelementStart(0, "div", 68);
353
- i0.ɵɵelement(1, "i", 71);
354
- i0.ɵɵelementStart(2, "p", 59);
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 MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
359
- i0.ɵɵelementStart(0, "span", 78);
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 MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
364
- const _r16 = i0.ɵɵgetCurrentView();
365
- i0.ɵɵelementStart(0, "button", 83);
366
- i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r16); const param_r15 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.editParameter(param_r15)); });
367
- i0.ɵɵelement(1, "i", 84);
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", 85);
370
- i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_6_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r16); const param_r15 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.deleteParameter(param_r15)); });
371
- i0.ɵɵelement(3, "i", 86);
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 MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
375
- i0.ɵɵelementStart(0, "div", 81);
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 param_r15 = i0.ɵɵnextContext().$implicit;
409
+ const param_r16 = i0.ɵɵnextContext().$implicit;
380
410
  i0.ɵɵadvance();
381
- i0.ɵɵtextInterpolate(param_r15.Description);
411
+ i0.ɵɵtextInterpolate(param_r16.Description);
382
412
  } }
383
- function MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
384
- i0.ɵɵelementStart(0, "div", 82)(1, "span", 87);
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 param_r15 = i0.ɵɵnextContext().$implicit;
421
+ const param_r16 = i0.ɵɵnextContext().$implicit;
392
422
  i0.ɵɵadvance(4);
393
- i0.ɵɵtextInterpolate(param_r15.DefaultValue);
423
+ i0.ɵɵtextInterpolate(param_r16.DefaultValue);
394
424
  } }
395
- function MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Template(rf, ctx) { if (rf & 1) {
396
- const _r14 = i0.ɵɵgetCurrentView();
397
- i0.ɵɵelementStart(0, "div", 73);
398
- i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Template_div_click_0_listener($event) { const param_r15 = i0.ɵɵrestoreView(_r14).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onParamClick(param_r15, $event)); });
399
- i0.ɵɵelementStart(1, "div", 74)(2, "span", 75);
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", 76);
403
- i0.ɵɵconditionalCreate(5, MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_5_Template, 2, 0, "span", 78);
404
- i0.ɵɵconditionalCreate(6, MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_6_Template, 4, 0);
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", 79)(8, "div", 80);
436
+ i0.ɵɵelementStart(7, "div", 78)(8, "div", 79);
407
437
  i0.ɵɵtext(9);
408
438
  i0.ɵɵelementEnd();
409
- i0.ɵɵconditionalCreate(10, MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_10_Template, 2, 1, "div", 81);
410
- i0.ɵɵconditionalCreate(11, MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Conditional_11_Template, 5, 1, "div", 82);
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 param_r15 = ctx.$implicit;
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(param_r15.Name);
447
+ i0.ɵɵtextInterpolate(param_r16.Name);
418
448
  i0.ɵɵadvance(2);
419
- i0.ɵɵconditional(param_r15.IsArray ? 5 : -1);
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(param_r15.ValueType);
453
+ i0.ɵɵtextInterpolate(param_r16.ValueType);
424
454
  i0.ɵɵadvance();
425
- i0.ɵɵconditional(param_r15.Description ? 10 : -1);
455
+ i0.ɵɵconditional(param_r16.Description ? 10 : -1);
426
456
  i0.ɵɵadvance();
427
- i0.ɵɵconditional(param_r15.DefaultValue ? 11 : -1);
457
+ i0.ɵɵconditional(param_r16.DefaultValue ? 11 : -1);
428
458
  } }
429
- function MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_Template(rf, ctx) { if (rf & 1) {
430
- i0.ɵɵelementStart(0, "div", 65);
431
- i0.ɵɵrepeaterCreate(1, MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_For_2_Template, 12, 8, "div", 88, _forTrack0);
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 MJActionFormComponentExtended_Conditional_1_Conditional_36_Template(rf, ctx) { if (rf & 1) {
439
- i0.ɵɵelementStart(0, "div", 61)(1, "div", 62)(2, "h3");
440
- i0.ɵɵelement(3, "i", 63);
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, MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_5_Template, 3, 0, "button", 64);
473
+ i0.ɵɵconditionalCreate(5, MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_5_Template, 3, 0, "button", 63);
444
474
  i0.ɵɵelementEnd();
445
- i0.ɵɵconditionalCreate(6, MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_6_Template, 4, 0, "div", 30)(7, MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_7_Template, 3, 0, "div", 65);
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", 66)(9, "div", 62)(10, "h3");
448
- i0.ɵɵelement(11, "i", 67);
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, MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_13_Template, 3, 0, "button", 64);
481
+ i0.ɵɵconditionalCreate(13, MJActionFormComponentExtended_Conditional_0_Conditional_35_Conditional_13_Template, 3, 0, "button", 63);
452
482
  i0.ɵɵelementEnd();
453
- i0.ɵɵconditionalCreate(14, MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_14_Template, 4, 0, "div", 68)(15, MJActionFormComponentExtended_Conditional_1_Conditional_36_Conditional_15_Template, 3, 0, "div", 65);
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 MJActionFormComponentExtended_Conditional_1_Conditional_37_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
469
- i0.ɵɵelementStart(0, "span", 99);
470
- i0.ɵɵelement(1, "i", 100);
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 MJActionFormComponentExtended_Conditional_1_Conditional_37_ng_template_1_Template(rf, ctx) { if (rf & 1) {
475
- i0.ɵɵelementStart(0, "span", 55);
476
- i0.ɵɵelement(1, "i", 98);
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, MJActionFormComponentExtended_Conditional_1_Conditional_37_ng_template_1_Conditional_3_Template, 3, 0, "span", 99);
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 MJActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_3_Template(rf, ctx) { if (rf & 1) {
486
- const _r18 = i0.ɵɵgetCurrentView();
487
- i0.ɵɵelementStart(0, "div", 89)(1, "h3");
488
- i0.ɵɵelement(2, "i", 50);
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", 101)(5, "label");
521
+ i0.ɵɵelementStart(4, "div", 100)(5, "label");
492
522
  i0.ɵɵtext(6, "User Prompt");
493
523
  i0.ɵɵelementEnd();
494
- i0.ɵɵelementStart(7, "textarea", 102);
495
- i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_3_Template_textarea_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.UserPrompt, $event) || (ctx_r1.record.UserPrompt = $event); return i0.ɵɵresetView($event); });
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", 103)(10, "label");
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", 104);
502
- i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_3_Template_textarea_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.UserComments, $event) || (ctx_r1.record.UserComments = $event); return i0.ɵɵresetView($event); });
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", 105)(15, "mj-switch", 106);
506
- i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_3_Template_mj_switch_ngModelChange_15_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.CodeLocked, $event) || (ctx_r1.record.CodeLocked = $event); return i0.ɵɵresetView($event); });
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", 107);
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 MJActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_10_Template(rf, ctx) { if (rf & 1) {
523
- const _r19 = i0.ɵɵgetCurrentView();
524
- i0.ɵɵelementStart(0, "button", 69);
525
- i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleCodeComments()); });
526
- i0.ɵɵelement(1, "i", 108);
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 MJActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_15_Template(rf, ctx) { if (rf & 1) {
535
- i0.ɵɵelementStart(0, "div", 96)(1, "h4");
536
- i0.ɵɵelement(2, "i", 50);
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 MJActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_16_Template(rf, ctx) { if (rf & 1) {
548
- const _r20 = i0.ɵɵgetCurrentView();
549
- i0.ɵɵelementStart(0, "div", 97)(1, "label");
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", 109);
553
- i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_16_Template_textarea_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.CodeApprovalComments, $event) || (ctx_r1.record.CodeApprovalComments = $event); return i0.ɵɵresetView($event); });
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 MJActionFormComponentExtended_Conditional_1_Conditional_37_Template(rf, ctx) { if (rf & 1) {
563
- const _r17 = i0.ɵɵgetCurrentView();
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, MJActionFormComponentExtended_Conditional_1_Conditional_37_ng_template_1_Template, 4, 1, "ng-template", 27);
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, MJActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_3_Template, 18, 5, "div", 89);
568
- i0.ɵɵelementStart(4, "div", 90)(5, "div", 91)(6, "h3");
569
- i0.ɵɵelement(7, "i", 92);
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", 93);
573
- i0.ɵɵconditionalCreate(10, MJActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_10_Template, 3, 1, "button", 64);
574
- i0.ɵɵelementStart(11, "button", 69);
575
- i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_1_Conditional_37_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.record.Code || "")); });
576
- i0.ɵɵelement(12, "i", 94);
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", 95);
580
- i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_1_Conditional_37_Template_mj_code_editor_ngModelChange_14_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Code, $event) || (ctx_r1.record.Code = $event); return i0.ɵɵresetView($event); });
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, MJActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_15_Template, 6, 1, "div", 96);
583
- i0.ɵɵconditionalCreate(16, MJActionFormComponentExtended_Conditional_1_Conditional_37_Conditional_16_Template, 5, 2, "div", 97);
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 MJActionFormComponentExtended_Conditional_1_ng_template_39_Conditional_3_Template(rf, ctx) { if (rf & 1) {
601
- i0.ɵɵelementStart(0, "span", 111);
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 MJActionFormComponentExtended_Conditional_1_ng_template_39_Template(rf, ctx) { if (rf & 1) {
610
- i0.ɵɵelementStart(0, "span", 55);
611
- i0.ɵɵelement(1, "i", 110);
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, MJActionFormComponentExtended_Conditional_1_ng_template_39_Conditional_3_Template, 2, 1, "span", 111);
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 MJActionFormComponentExtended_Conditional_1_Conditional_41_Template(rf, ctx) { if (rf & 1) {
621
- const _r21 = i0.ɵɵgetCurrentView();
622
- i0.ɵɵelementStart(0, "div", 31)(1, "button", 112);
623
- i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_1_Conditional_41_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.addResultCode()); });
624
- i0.ɵɵelement(2, "i", 70);
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 MJActionFormComponentExtended_Conditional_1_Conditional_42_Template(rf, ctx) { if (rf & 1) {
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", 57);
936
+ i0.ɵɵelement(1, "i", 56);
631
937
  i0.ɵɵtext(2, " Loading result codes... ");
632
938
  i0.ɵɵelementEnd();
633
939
  } }
634
- function MJActionFormComponentExtended_Conditional_1_Conditional_43_Conditional_4_Template(rf, ctx) { if (rf & 1) {
635
- i0.ɵɵelementStart(0, "p", 60);
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 MJActionFormComponentExtended_Conditional_1_Conditional_43_Template(rf, ctx) { if (rf & 1) {
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", 113);
642
- i0.ɵɵelementStart(2, "p", 59);
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, MJActionFormComponentExtended_Conditional_1_Conditional_43_Conditional_4_Template, 2, 0, "p", 60);
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 MJActionFormComponentExtended_Conditional_1_Conditional_44_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
653
- i0.ɵɵelementStart(0, "div", 119);
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 code_r23 = i0.ɵɵnextContext().$implicit;
963
+ const code_r29 = i0.ɵɵnextContext().$implicit;
658
964
  i0.ɵɵadvance();
659
- i0.ɵɵtextInterpolate(code_r23.Description);
965
+ i0.ɵɵtextInterpolate(code_r29.Description);
660
966
  } }
661
- function MJActionFormComponentExtended_Conditional_1_Conditional_44_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
662
- const _r24 = i0.ɵɵgetCurrentView();
663
- i0.ɵɵelementStart(0, "div", 120)(1, "button", 121);
664
- i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_1_Conditional_44_For_2_Conditional_7_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r24); const code_r23 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); ctx_r1.editResultCode(code_r23); return i0.ɵɵresetView($event.stopPropagation()); });
665
- i0.ɵɵelement(2, "i", 84);
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", 122);
668
- i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_1_Conditional_44_For_2_Conditional_7_Template_button_click_3_listener($event) { i0.ɵɵrestoreView(_r24); const code_r23 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); ctx_r1.deleteResultCode(code_r23); return i0.ɵɵresetView($event.stopPropagation()); });
669
- i0.ɵɵelement(4, "i", 86);
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 MJActionFormComponentExtended_Conditional_1_Conditional_44_For_2_Template(rf, ctx) { if (rf & 1) {
673
- const _r22 = i0.ɵɵgetCurrentView();
674
- i0.ɵɵelementStart(0, "div", 115);
675
- i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_1_Conditional_44_For_2_Template_div_click_0_listener($event) { const code_r23 = i0.ɵɵrestoreView(_r22).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onResultCodeClick(code_r23, $event)); });
676
- i0.ɵɵelementStart(1, "div", 116);
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", 117)(4, "div", 118);
985
+ i0.ɵɵelementStart(3, "div", 149)(4, "div", 150);
680
986
  i0.ɵɵtext(5);
681
987
  i0.ɵɵelementEnd();
682
- i0.ɵɵconditionalCreate(6, MJActionFormComponentExtended_Conditional_1_Conditional_44_For_2_Conditional_6_Template, 2, 1, "div", 119);
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, MJActionFormComponentExtended_Conditional_1_Conditional_44_For_2_Conditional_7_Template, 5, 0, "div", 120);
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 code_r23 = ctx.$implicit;
993
+ const code_r29 = ctx.$implicit;
688
994
  const ctx_r1 = i0.ɵɵnextContext(3);
689
- i0.ɵɵclassProp("success", code_r23.IsSuccess)("failure", !code_r23.IsSuccess)("clickable", true);
995
+ i0.ɵɵclassProp("success", code_r29.IsSuccess)("failure", !code_r29.IsSuccess)("clickable", true);
690
996
  i0.ɵɵadvance(2);
691
- i0.ɵɵclassMap(code_r23.IsSuccess ? "fa-solid fa-check-circle" : "fa-solid fa-times-circle");
997
+ i0.ɵɵclassMap(code_r29.IsSuccess ? "fa-solid fa-check-circle" : "fa-solid fa-times-circle");
692
998
  i0.ɵɵadvance(3);
693
- i0.ɵɵtextInterpolate(code_r23.ResultCode);
999
+ i0.ɵɵtextInterpolate(code_r29.ResultCode);
694
1000
  i0.ɵɵadvance();
695
- i0.ɵɵconditional(code_r23.Description ? 6 : -1);
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 MJActionFormComponentExtended_Conditional_1_Conditional_44_Template(rf, ctx) { if (rf & 1) {
1005
+ function MJActionFormComponentExtended_Conditional_0_Conditional_44_Template(rf, ctx) { if (rf & 1) {
700
1006
  i0.ɵɵelementStart(0, "div", 32);
701
- i0.ɵɵrepeaterCreate(1, MJActionFormComponentExtended_Conditional_1_Conditional_44_For_2_Template, 8, 11, "div", 114, _forTrack0);
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 MJActionFormComponentExtended_Conditional_1_Conditional_45_ng_template_1_Template(rf, ctx) { if (rf & 1) {
709
- i0.ɵɵelementStart(0, "span", 55);
710
- i0.ɵɵelement(1, "i", 123);
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 MJActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_3_Template(rf, ctx) { if (rf & 1) {
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", 57);
1022
+ i0.ɵɵelement(1, "i", 56);
717
1023
  i0.ɵɵtext(2, " Loading executions... ");
718
1024
  i0.ɵɵelementEnd();
719
1025
  } }
720
- function MJActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_4_Template(rf, ctx) { if (rf & 1) {
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", 124);
723
- i0.ɵɵelementStart(2, "p", 59);
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 MJActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_5_For_41_Conditional_5_Template(rf, ctx) { if (rf & 1) {
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 execution_r26 = i0.ɵɵnextContext().$implicit;
1036
+ const execution_r32 = i0.ɵɵnextContext().$implicit;
731
1037
  const ctx_r1 = i0.ɵɵnextContext(4);
732
- i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(ctx_r1.getExecutionDuration(execution_r26)), " ");
1038
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(ctx_r1.getExecutionDuration(execution_r32)), " ");
733
1039
  } }
734
- function MJActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_5_For_41_Conditional_6_Template(rf, ctx) { if (rf & 1) {
735
- i0.ɵɵelementStart(0, "span", 139);
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 MJActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_5_For_41_Template(rf, ctx) { if (rf & 1) {
740
- const _r25 = i0.ɵɵgetCurrentView();
741
- i0.ɵɵelementStart(0, "tr", 138)(1, "td");
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, MJActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_5_For_41_Conditional_5_Template, 1, 1)(6, MJActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_5_For_41_Conditional_6_Template, 2, 0, "span", 139);
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", 118);
1057
+ i0.ɵɵelementStart(9, "td")(10, "span", 150);
752
1058
  i0.ɵɵtext(11);
753
1059
  i0.ɵɵelementEnd()();
754
- i0.ɵɵelementStart(12, "td")(13, "button", 69);
755
- i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_5_For_41_Template_button_click_13_listener() { const execution_r26 = i0.ɵɵrestoreView(_r25).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToExecution(execution_r26.ID)); });
756
- i0.ɵɵelement(14, "i", 140);
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 execution_r26 = ctx.$implicit;
1065
+ const execution_r32 = ctx.$implicit;
760
1066
  const ctx_r1 = i0.ɵɵnextContext(4);
761
- i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(execution_r26));
1067
+ i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(execution_r32));
762
1068
  i0.ɵɵadvance(2);
763
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(3, 10, execution_r26.StartedAt, "short"));
1069
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(3, 10, execution_r32.StartedAt, "short"));
764
1070
  i0.ɵɵadvance(3);
765
- i0.ɵɵconditional(execution_r26.EndedAt ? 5 : 6);
1071
+ i0.ɵɵconditional(execution_r32.EndedAt ? 5 : 6);
766
1072
  i0.ɵɵadvance(3);
767
- i0.ɵɵtextInterpolate(execution_r26.User);
1073
+ i0.ɵɵtextInterpolate(execution_r32.User);
768
1074
  i0.ɵɵadvance(2);
769
- i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(execution_r26))("failure", !ctx_r1.isExecutionSuccess(execution_r26));
1075
+ i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(execution_r32))("failure", !ctx_r1.isExecutionSuccess(execution_r32));
770
1076
  i0.ɵɵadvance();
771
- i0.ɵɵtextInterpolate1(" ", execution_r26.ResultCode, " ");
1077
+ i0.ɵɵtextInterpolate1(" ", execution_r32.ResultCode, " ");
772
1078
  } }
773
- function MJActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_5_Template(rf, ctx) { if (rf & 1) {
774
- i0.ɵɵelementStart(0, "div", 125)(1, "div", 126);
775
- i0.ɵɵelement(2, "i", 127);
776
- i0.ɵɵelementStart(3, "div", 128)(4, "div", 129);
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", 130);
1085
+ i0.ɵɵelementStart(6, "div", 162);
780
1086
  i0.ɵɵtext(7);
781
1087
  i0.ɵɵelementEnd()()();
782
- i0.ɵɵelementStart(8, "div", 126);
783
- i0.ɵɵelement(9, "i", 131);
784
- i0.ɵɵelementStart(10, "div", 128)(11, "div", 129);
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", 132);
1093
+ i0.ɵɵelementStart(13, "div", 164);
788
1094
  i0.ɵɵtext(14);
789
1095
  i0.ɵɵelementEnd()()();
790
- i0.ɵɵelementStart(15, "div", 126);
791
- i0.ɵɵelement(16, "i", 133);
792
- i0.ɵɵelementStart(17, "div", 128)(18, "div", 129);
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", 130);
1101
+ i0.ɵɵelementStart(20, "div", 162);
796
1102
  i0.ɵɵtext(21);
797
1103
  i0.ɵɵelementEnd()()()();
798
- i0.ɵɵelementStart(22, "h3", 134);
799
- i0.ɵɵelement(23, "i", 135);
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", 136)(26, "table")(27, "thead")(28, "tr")(29, "th");
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, MJActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_5_For_41_Template, 15, 13, "tr", 137, _forTrack0);
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 MJActionFormComponentExtended_Conditional_1_Conditional_45_Template(rf, ctx) { if (rf & 1) {
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, MJActionFormComponentExtended_Conditional_1_Conditional_45_ng_template_1_Template, 3, 0, "ng-template", 27);
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, MJActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_3_Template, 3, 0, "div", 29)(4, MJActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_4_Template, 4, 0, "div", 30)(5, MJActionFormComponentExtended_Conditional_1_Conditional_45_Conditional_5_Template, 42, 7);
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 MJActionFormComponentExtended_Conditional_1_Conditional_46_ng_template_1_Template(rf, ctx) { if (rf & 1) {
848
- i0.ɵɵelementStart(0, "span", 55);
849
- i0.ɵɵelement(1, "i", 152);
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 MJActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_7_Template(rf, ctx) { if (rf & 1) {
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", 57);
1161
+ i0.ɵɵelement(1, "i", 56);
856
1162
  i0.ɵɵtext(2, " Loading libraries... ");
857
1163
  i0.ɵɵelementEnd();
858
1164
  } }
859
- function MJActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_8_Template(rf, ctx) { if (rf & 1) {
860
- i0.ɵɵelementStart(0, "div", 143)(1, "p");
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 MJActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_9_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
865
- i0.ɵɵelementStart(0, "div", 157);
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 ɵ$index_641_r29 = i0.ɵɵnextContext().$index;
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[ɵ$index_641_r29].ItemsUsed);
873
- } }
874
- function MJActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_9_For_2_Template(rf, ctx) { if (rf & 1) {
875
- const _r27 = i0.ɵɵgetCurrentView();
876
- i0.ɵɵelementStart(0, "div", 154);
877
- i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_9_For_2_Template_div_click_0_listener() { const lib_r28 = i0.ɵɵrestoreView(_r27).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToLibrary(lib_r28.ID)); });
878
- i0.ɵɵelement(1, "i", 142);
879
- i0.ɵɵelementStart(2, "div", 155)(3, "div", 156);
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, MJActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_9_For_2_Conditional_5_Template, 2, 1, "div", 157);
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", 140);
1190
+ i0.ɵɵelement(6, "i", 172);
885
1191
  i0.ɵɵelementEnd();
886
1192
  } if (rf & 2) {
887
- const lib_r28 = ctx.$implicit;
888
- const ɵ$index_641_r29 = ctx.$index;
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(lib_r28.Name);
1197
+ i0.ɵɵtextInterpolate(lib_r34.Name);
892
1198
  i0.ɵɵadvance();
893
- i0.ɵɵconditional(ctx_r1.actionLibraries[ɵ$index_641_r29].ItemsUsed ? 5 : -1);
1199
+ i0.ɵɵconditional(ctx_r1.actionLibraries[ɵ$index_825_r35].ItemsUsed ? 5 : -1);
894
1200
  } }
895
- function MJActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_9_Template(rf, ctx) { if (rf & 1) {
896
- i0.ɵɵelementStart(0, "div", 144);
897
- i0.ɵɵrepeaterCreate(1, MJActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_9_For_2_Template, 7, 2, "div", 153, _forTrack0);
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 MJActionFormComponentExtended_Conditional_1_Conditional_46_Template(rf, ctx) { if (rf & 1) {
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, MJActionFormComponentExtended_Conditional_1_Conditional_46_ng_template_1_Template, 3, 0, "ng-template", 27);
907
- i0.ɵɵelementStart(2, "div", 28)(3, "div", 141)(4, "h3");
908
- i0.ɵɵelement(5, "i", 142);
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, MJActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_7_Template, 3, 0, "div", 29)(8, MJActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_8_Template, 3, 0, "div", 143)(9, MJActionFormComponentExtended_Conditional_1_Conditional_46_Conditional_9_Template, 3, 0, "div", 144);
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", 145)(11, "div", 146);
914
- i0.ɵɵelement(12, "i", 147);
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", 148);
1224
+ i0.ɵɵelementStart(15, "span", 180);
919
1225
  i0.ɵɵtext(16, "View");
920
1226
  i0.ɵɵelementEnd()();
921
- i0.ɵɵelementStart(17, "div", 146);
922
- i0.ɵɵelement(18, "i", 149);
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", 148);
1232
+ i0.ɵɵelementStart(21, "span", 180);
927
1233
  i0.ɵɵtext(22, "View");
928
1234
  i0.ɵɵelementEnd()();
929
- i0.ɵɵelementStart(23, "div", 146);
930
- i0.ɵɵelement(24, "i", 150);
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", 148);
1240
+ i0.ɵɵelementStart(27, "span", 180);
935
1241
  i0.ɵɵtext(28, "View");
936
1242
  i0.ɵɵelementEnd()();
937
- i0.ɵɵelementStart(29, "div", 146);
938
- i0.ɵɵelement(30, "i", 151);
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", 148);
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 MJActionFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf & 1) {
952
- i0.ɵɵelementStart(0, "form", 2, 0);
953
- i0.ɵɵelement(2, "mj-form-toolbar", 4);
954
- i0.ɵɵelementStart(3, "div", 5)(4, "div", 6)(5, "div", 7)(6, "div", 8)(7, "div", 9);
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, MJActionFormComponentExtended_Conditional_1_Conditional_9_Template, 1, 1, "input", 11)(10, MJActionFormComponentExtended_Conditional_1_Conditional_10_Template, 4, 3);
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, MJActionFormComponentExtended_Conditional_1_Conditional_11_Template, 17, 21, "div", 12);
959
- i0.ɵɵconditionalCreate(12, MJActionFormComponentExtended_Conditional_1_Conditional_12_Template, 2, 2, "textarea", 13)(13, MJActionFormComponentExtended_Conditional_1_Conditional_13_Template, 2, 1, "p", 14);
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, MJActionFormComponentExtended_Conditional_1_Conditional_15_Template, 7, 1, "div", 16);
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, MJActionFormComponentExtended_Conditional_1_Conditional_22_Template, 6, 7, "div", 16);
971
- i0.ɵɵconditionalCreate(23, MJActionFormComponentExtended_Conditional_1_Conditional_23_Template, 4, 1, "div", 16);
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, MJActionFormComponentExtended_Conditional_1_Conditional_26_Template, 3, 1, "button", 22);
975
- i0.ɵɵconditionalCreate(27, MJActionFormComponentExtended_Conditional_1_Conditional_27_Template, 3, 0, "button", 23);
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, MJActionFormComponentExtended_Conditional_1_Conditional_28_Template, 7, 0, "div", 21);
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(30, "div", 25)(31, "mj-accordion-panel", 26);
981
- i0.ɵɵtemplate(32, MJActionFormComponentExtended_Conditional_1_ng_template_32_Template, 4, 1, "ng-template", 27);
982
- i0.ɵɵelementStart(33, "div", 28);
983
- i0.ɵɵconditionalCreate(34, MJActionFormComponentExtended_Conditional_1_Conditional_34_Template, 3, 0, "div", 29)(35, MJActionFormComponentExtended_Conditional_1_Conditional_35_Template, 5, 1, "div", 30)(36, MJActionFormComponentExtended_Conditional_1_Conditional_36_Template, 16, 6);
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(37, MJActionFormComponentExtended_Conditional_1_Conditional_37_Template, 17, 9, "mj-accordion-panel", 26);
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, MJActionFormComponentExtended_Conditional_1_ng_template_39_Template, 4, 1, "ng-template", 27);
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, MJActionFormComponentExtended_Conditional_1_Conditional_41_Template, 4, 0, "div", 31);
990
- i0.ɵɵconditionalCreate(42, MJActionFormComponentExtended_Conditional_1_Conditional_42_Template, 3, 0, "div", 29)(43, MJActionFormComponentExtended_Conditional_1_Conditional_43_Template, 5, 1, "div", 30)(44, MJActionFormComponentExtended_Conditional_1_Conditional_44_Template, 3, 0, "div", 32);
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, MJActionFormComponentExtended_Conditional_1_Conditional_45_Template, 6, 2, "mj-accordion-panel", 26);
993
- i0.ɵɵconditionalCreate(46, MJActionFormComponentExtended_Conditional_1_Conditional_46_Template, 35, 2, "mj-accordion-panel", 26);
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.ɵɵadvance(2);
998
- i0.ɵɵproperty("Form", ctx_r1);
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.record.Type === "Generated" && ctx_r1.record.CodeApprovalStatus ? 22 : -1);
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.CodeApprovalStatus === "Pending" && ctx_r1.record.Type === "Generated" ? 28 : -1);
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 ? 34 : ctx_r1.actionParams.length === 0 ? 35 : 36);
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" ? 37 : -1);
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
- // Reload params and result codes to get updated data
1178
- await Promise.all([
1179
- this.loadActionParams(),
1180
- this.loadResultCodes()
1181
- ]);
1182
- // Show success message
1183
- this.sharedService.CreateSimpleNotification('Action and related records saved successfully', 'success', 3000);
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
- return this.record.Type === 'Generated' ? 'var(--mj-brand-primary)' : 'var(--mj-brand-primary)';
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
- return this.record.Type === 'Generated' ? 'fa-robot' : 'fa-code';
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.ɵɵelementStart(0, "div", 1);
1853
- i0.ɵɵconditionalCreate(1, MJActionFormComponentExtended_Conditional_1_Template, 47, 24, "form", 2);
1854
- i0.ɵɵelementEnd();
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.ɵɵadvance();
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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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