@memberjunction/ng-core-entity-forms 6.2.0 → 6.3.0-edge.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -6
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.d.ts.map +1 -1
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js +3 -3
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js.map +1 -1
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts +12 -0
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js +293 -230
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +11 -0
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +862 -812
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +2 -2
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +12 -0
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +821 -763
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +2 -2
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +10 -0
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +700 -605
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +10 -0
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +223 -175
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts +10 -0
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +502 -453
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/Companies/company-header.panel.d.ts.map +1 -1
- package/dist/lib/custom/Companies/company-header.panel.js +3 -3
- package/dist/lib/custom/Companies/company-header.panel.js.map +1 -1
- package/dist/lib/custom/Conversations/conversation-header.panel.d.ts.map +1 -1
- package/dist/lib/custom/Conversations/conversation-header.panel.js +3 -3
- package/dist/lib/custom/Conversations/conversation-header.panel.js.map +1 -1
- package/dist/lib/custom/Employees/employee-header.panel.d.ts.map +1 -1
- package/dist/lib/custom/Employees/employee-header.panel.js +3 -3
- package/dist/lib/custom/Employees/employee-header.panel.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts +15 -0
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +836 -801
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.js +2 -2
- package/dist/lib/custom/Files/file-form.component.js +2 -2
- package/dist/lib/custom/Lists/list-form.component.d.ts +5 -0
- package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.js +355 -338
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-form.component.js +3 -3
- package/dist/lib/custom/MLModels/ml-model-form.component.js.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +17 -35
- package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-view-models.js +55 -54
- package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -1
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +7 -99
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -1
- package/dist/lib/custom/MLModels/ps-model-detail.component.js +124 -303
- package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts +9 -0
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +493 -444
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js +2 -2
- package/dist/lib/custom/Templates/template-param-dialog.component.js +2 -2
- package/dist/lib/custom/Templates/templates-form.component.d.ts +9 -0
- package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +118 -74
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.d.ts +5 -0
- package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +471 -451
- package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.d.ts +5 -0
- package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.js +312 -289
- package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts +5 -0
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +697 -677
- package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +5 -0
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.js +453 -433
- package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
- package/dist/lib/custom/Users/user-header.panel.d.ts.map +1 -1
- package/dist/lib/custom/Users/user-header.panel.js +3 -3
- package/dist/lib/custom/Users/user-header.panel.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts +2 -2
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js +30 -13
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +23 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +276 -216
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +7 -1
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +32 -14
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +119 -95
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.js +124 -0
- package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.js +99 -0
- package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +2 -2
- package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.js +95 -0
- package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.js +60 -0
- package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +124 -106
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.js +12 -4
- package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js +19 -11
- package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.js +62 -0
- package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js +26 -12
- package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.js +140 -0
- package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +69 -15
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js +31 -13
- package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.js +205 -0
- package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js +24 -6
- package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.js +173 -0
- package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js +46 -24
- package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js +22 -14
- package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.js +175 -0
- package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js +8 -6
- package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js +44 -36
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTask/mjtask.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js +54 -32
- package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +452 -443
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +27 -0
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/panels/feature-values/feature-values.panel.js +1 -1
- package/dist/lib/panels/feature-values/feature-values.panel.js.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +2 -2
- package/dist/lib/shared/phone-hero.d.ts +17 -0
- package/dist/lib/shared/phone-hero.d.ts.map +1 -0
- package/dist/lib/shared/phone-hero.js +30 -0
- package/dist/lib/shared/phone-hero.js.map +1 -0
- package/dist/lib/shared/phone-sections-state.d.ts +28 -0
- package/dist/lib/shared/phone-sections-state.d.ts.map +1 -0
- package/dist/lib/shared/phone-sections-state.js +38 -0
- package/dist/lib/shared/phone-sections-state.js.map +1 -0
- package/package.json +50 -50
|
@@ -12,6 +12,8 @@ import { RunView, CompositeKey } from '@memberjunction/core';
|
|
|
12
12
|
import { MJActionFormComponent } from '../../generated/Entities/MJAction/mjaction.form.component';
|
|
13
13
|
import { MJDialogService } from '@memberjunction/ng-ui-components';
|
|
14
14
|
import { ActionParamDialogComponent, ActionResultCodeDialogComponent } from '@memberjunction/ng-actions';
|
|
15
|
+
import { JoinHeroSummary, CountLabel } from '../../shared/phone-hero';
|
|
16
|
+
import { PhoneSectionsState } from '../../shared/phone-sections-state';
|
|
15
17
|
import * as i0 from "@angular/core";
|
|
16
18
|
import * as i1 from "@angular/forms";
|
|
17
19
|
import * as i2 from "@memberjunction/ng-ui-components";
|
|
@@ -34,7 +36,7 @@ const _forTrack1 = ($index, $item) => $item.id;
|
|
|
34
36
|
const _forTrack2 = ($index, $item) => $item.name;
|
|
35
37
|
function MJActionFormComponentExtended_Conditional_0_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
36
38
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
37
|
-
i0.ɵɵelementStart(0, "input",
|
|
39
|
+
i0.ɵɵelementStart(0, "input", 41);
|
|
38
40
|
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); });
|
|
39
41
|
i0.ɵɵelementEnd();
|
|
40
42
|
} if (rf & 2) {
|
|
@@ -42,8 +44,8 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_9_Template(rf,
|
|
|
42
44
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Name);
|
|
43
45
|
} }
|
|
44
46
|
function MJActionFormComponentExtended_Conditional_0_Conditional_10_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
45
|
-
i0.ɵɵelementStart(0, "span",
|
|
46
|
-
i0.ɵɵelement(1, "i",
|
|
47
|
+
i0.ɵɵelementStart(0, "span", 44);
|
|
48
|
+
i0.ɵɵelement(1, "i", 45);
|
|
47
49
|
i0.ɵɵtext(2);
|
|
48
50
|
i0.ɵɵelementEnd();
|
|
49
51
|
} if (rf & 2) {
|
|
@@ -56,13 +58,13 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_10_Conditional_
|
|
|
56
58
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.CodeApprovalStatus, " ");
|
|
57
59
|
} }
|
|
58
60
|
function MJActionFormComponentExtended_Conditional_0_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
59
|
-
i0.ɵɵelementStart(0, "h4",
|
|
61
|
+
i0.ɵɵelementStart(0, "h4", 42);
|
|
60
62
|
i0.ɵɵtext(1);
|
|
61
63
|
i0.ɵɵelementEnd();
|
|
62
|
-
i0.ɵɵelementStart(2, "span",
|
|
64
|
+
i0.ɵɵelementStart(2, "span", 43);
|
|
63
65
|
i0.ɵɵtext(3);
|
|
64
66
|
i0.ɵɵelementEnd();
|
|
65
|
-
i0.ɵɵconditionalCreate(4, MJActionFormComponentExtended_Conditional_0_Conditional_10_Conditional_4_Template, 3, 5, "span",
|
|
67
|
+
i0.ɵɵconditionalCreate(4, MJActionFormComponentExtended_Conditional_0_Conditional_10_Conditional_4_Template, 3, 5, "span", 44);
|
|
66
68
|
} if (rf & 2) {
|
|
67
69
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
68
70
|
i0.ɵɵadvance();
|
|
@@ -76,11 +78,11 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_10_Template(rf,
|
|
|
76
78
|
} }
|
|
77
79
|
function MJActionFormComponentExtended_Conditional_0_Conditional_11_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
78
80
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
79
|
-
i0.ɵɵelementStart(0, "div")(1, "label",
|
|
80
|
-
i0.ɵɵelement(2, "i",
|
|
81
|
+
i0.ɵɵelementStart(0, "div")(1, "label", 46);
|
|
82
|
+
i0.ɵɵelement(2, "i", 45);
|
|
81
83
|
i0.ɵɵtext(3, " Code Approval ");
|
|
82
84
|
i0.ɵɵelementEnd();
|
|
83
|
-
i0.ɵɵelementStart(4, "mj-dropdown",
|
|
85
|
+
i0.ɵɵelementStart(4, "mj-dropdown", 51);
|
|
84
86
|
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
87
|
i0.ɵɵelementEnd()();
|
|
86
88
|
} if (rf & 2) {
|
|
@@ -94,26 +96,26 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_11_Conditional_
|
|
|
94
96
|
} }
|
|
95
97
|
function MJActionFormComponentExtended_Conditional_0_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
96
98
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
97
|
-
i0.ɵɵelementStart(0, "div", 12)(1, "div")(2, "label",
|
|
99
|
+
i0.ɵɵelementStart(0, "div", 12)(1, "div")(2, "label", 46);
|
|
98
100
|
i0.ɵɵtext(3, "Status");
|
|
99
101
|
i0.ɵɵelementEnd();
|
|
100
|
-
i0.ɵɵelementStart(4, "mj-dropdown",
|
|
102
|
+
i0.ɵɵelementStart(4, "mj-dropdown", 47);
|
|
101
103
|
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); });
|
|
102
104
|
i0.ɵɵelementEnd()();
|
|
103
|
-
i0.ɵɵelementStart(5, "div")(6, "label",
|
|
105
|
+
i0.ɵɵelementStart(5, "div")(6, "label", 46);
|
|
104
106
|
i0.ɵɵtext(7, " Type ");
|
|
105
|
-
i0.ɵɵelementStart(8, "span",
|
|
107
|
+
i0.ɵɵelementStart(8, "span", 48);
|
|
106
108
|
i0.ɵɵtext(9, "*");
|
|
107
109
|
i0.ɵɵelementEnd()();
|
|
108
|
-
i0.ɵɵelementStart(10, "mj-dropdown",
|
|
110
|
+
i0.ɵɵelementStart(10, "mj-dropdown", 49);
|
|
109
111
|
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); });
|
|
110
112
|
i0.ɵɵelementEnd()();
|
|
111
|
-
i0.ɵɵelementStart(11, "div")(12, "label",
|
|
113
|
+
i0.ɵɵelementStart(11, "div")(12, "label", 46);
|
|
112
114
|
i0.ɵɵtext(13, " Category ");
|
|
113
|
-
i0.ɵɵelementStart(14, "span",
|
|
115
|
+
i0.ɵɵelementStart(14, "span", 48);
|
|
114
116
|
i0.ɵɵtext(15, "*");
|
|
115
117
|
i0.ɵɵelementEnd()();
|
|
116
|
-
i0.ɵɵelementStart(16, "mj-dropdown",
|
|
118
|
+
i0.ɵɵelementStart(16, "mj-dropdown", 50);
|
|
117
119
|
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
120
|
i0.ɵɵelementEnd()();
|
|
119
121
|
i0.ɵɵconditionalCreate(17, MJActionFormComponentExtended_Conditional_0_Conditional_11_Conditional_17_Template, 5, 14, "div");
|
|
@@ -134,7 +136,7 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_11_Template(rf,
|
|
|
134
136
|
} }
|
|
135
137
|
function MJActionFormComponentExtended_Conditional_0_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
136
138
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
137
|
-
i0.ɵɵelementStart(0, "textarea",
|
|
139
|
+
i0.ɵɵelementStart(0, "textarea", 52);
|
|
138
140
|
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); });
|
|
139
141
|
i0.ɵɵtext(1, " ");
|
|
140
142
|
i0.ɵɵelementEnd();
|
|
@@ -155,14 +157,14 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_13_Template(rf,
|
|
|
155
157
|
function MJActionFormComponentExtended_Conditional_0_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
156
158
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
157
159
|
i0.ɵɵelementStart(0, "div", 16);
|
|
158
|
-
i0.ɵɵelement(1, "i",
|
|
160
|
+
i0.ɵɵelement(1, "i", 53);
|
|
159
161
|
i0.ɵɵelementStart(2, "span", 18);
|
|
160
162
|
i0.ɵɵtext(3, "Category:");
|
|
161
163
|
i0.ɵɵelementEnd();
|
|
162
|
-
i0.ɵɵelementStart(4, "span",
|
|
164
|
+
i0.ɵɵelementStart(4, "span", 54);
|
|
163
165
|
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()); });
|
|
164
166
|
i0.ɵɵtext(5);
|
|
165
|
-
i0.ɵɵelement(6, "i",
|
|
167
|
+
i0.ɵɵelement(6, "i", 55);
|
|
166
168
|
i0.ɵɵelementEnd()();
|
|
167
169
|
} if (rf & 2) {
|
|
168
170
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -175,7 +177,7 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_22_Template(rf,
|
|
|
175
177
|
i0.ɵɵelementStart(2, "span", 18);
|
|
176
178
|
i0.ɵɵtext(3, "Code:");
|
|
177
179
|
i0.ɵɵelementEnd();
|
|
178
|
-
i0.ɵɵelementStart(4, "span",
|
|
180
|
+
i0.ɵɵelementStart(4, "span", 56);
|
|
179
181
|
i0.ɵɵtext(5);
|
|
180
182
|
i0.ɵɵelementEnd()();
|
|
181
183
|
} if (rf & 2) {
|
|
@@ -190,7 +192,7 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_22_Template(rf,
|
|
|
190
192
|
} }
|
|
191
193
|
function MJActionFormComponentExtended_Conditional_0_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
192
194
|
i0.ɵɵelementStart(0, "div", 16);
|
|
193
|
-
i0.ɵɵelement(1, "i",
|
|
195
|
+
i0.ɵɵelement(1, "i", 57);
|
|
194
196
|
i0.ɵɵelementStart(2, "span", 19);
|
|
195
197
|
i0.ɵɵtext(3);
|
|
196
198
|
i0.ɵɵelementEnd()();
|
|
@@ -201,9 +203,9 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_23_Template(rf,
|
|
|
201
203
|
} }
|
|
202
204
|
function MJActionFormComponentExtended_Conditional_0_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
203
205
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
204
|
-
i0.ɵɵelementStart(0, "button",
|
|
206
|
+
i0.ɵɵelementStart(0, "button", 58);
|
|
205
207
|
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",
|
|
208
|
+
i0.ɵɵelement(1, "i", 59);
|
|
207
209
|
i0.ɵɵtext(2, " Run ");
|
|
208
210
|
i0.ɵɵelementEnd();
|
|
209
211
|
} if (rf & 2) {
|
|
@@ -212,9 +214,9 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_26_Template(rf,
|
|
|
212
214
|
} }
|
|
213
215
|
function MJActionFormComponentExtended_Conditional_0_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
214
216
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
215
|
-
i0.ɵɵelementStart(0, "button",
|
|
217
|
+
i0.ɵɵelementStart(0, "button", 60);
|
|
216
218
|
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",
|
|
219
|
+
i0.ɵɵelement(1, "i", 61);
|
|
218
220
|
i0.ɵɵtext(2, " Regenerate ");
|
|
219
221
|
i0.ɵɵelementEnd();
|
|
220
222
|
} }
|
|
@@ -223,8 +225,23 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_28_Template(rf,
|
|
|
223
225
|
i0.ɵɵtext(1, " Action must be Active to execute ");
|
|
224
226
|
i0.ɵɵelementEnd();
|
|
225
227
|
} }
|
|
226
|
-
function
|
|
227
|
-
i0.ɵɵ
|
|
228
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
229
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
230
|
+
i0.ɵɵelementStart(0, "button", 62);
|
|
231
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_29_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleHeroDetails()); });
|
|
232
|
+
i0.ɵɵelementStart(1, "span", 63);
|
|
233
|
+
i0.ɵɵtext(2);
|
|
234
|
+
i0.ɵɵelementEnd();
|
|
235
|
+
i0.ɵɵelement(3, "i", 64);
|
|
236
|
+
i0.ɵɵelementEnd();
|
|
237
|
+
} if (rf & 2) {
|
|
238
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
239
|
+
i0.ɵɵattribute("aria-expanded", ctx_r1.HeroDetailsOpen);
|
|
240
|
+
i0.ɵɵadvance(2);
|
|
241
|
+
i0.ɵɵtextInterpolate(ctx_r1.HeroSummary);
|
|
242
|
+
} }
|
|
243
|
+
function MJActionFormComponentExtended_Conditional_0_ng_template_33_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
244
|
+
i0.ɵɵelementStart(0, "span", 66);
|
|
228
245
|
i0.ɵɵtext(1);
|
|
229
246
|
i0.ɵɵelementEnd();
|
|
230
247
|
} if (rf & 2) {
|
|
@@ -232,235 +249,235 @@ function MJActionFormComponentExtended_Conditional_0_ng_template_31_Conditional_
|
|
|
232
249
|
i0.ɵɵadvance();
|
|
233
250
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.actionParams.length, " ");
|
|
234
251
|
} }
|
|
235
|
-
function
|
|
236
|
-
i0.ɵɵelementStart(0, "span",
|
|
237
|
-
i0.ɵɵelement(1, "i",
|
|
252
|
+
function MJActionFormComponentExtended_Conditional_0_ng_template_33_Template(rf, ctx) { if (rf & 1) {
|
|
253
|
+
i0.ɵɵelementStart(0, "span", 65);
|
|
254
|
+
i0.ɵɵelement(1, "i", 57);
|
|
238
255
|
i0.ɵɵtext(2, " Parameters ");
|
|
239
|
-
i0.ɵɵconditionalCreate(3,
|
|
256
|
+
i0.ɵɵconditionalCreate(3, MJActionFormComponentExtended_Conditional_0_ng_template_33_Conditional_3_Template, 2, 1, "span", 66);
|
|
240
257
|
i0.ɵɵelementEnd();
|
|
241
258
|
} if (rf & 2) {
|
|
242
259
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
243
260
|
i0.ɵɵadvance(3);
|
|
244
261
|
i0.ɵɵconditional(ctx_r1.actionParams.length > 0 ? 3 : -1);
|
|
245
262
|
} }
|
|
246
|
-
function
|
|
247
|
-
i0.ɵɵelementStart(0, "div",
|
|
248
|
-
i0.ɵɵelement(1, "i",
|
|
263
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_35_Template(rf, ctx) { if (rf & 1) {
|
|
264
|
+
i0.ɵɵelementStart(0, "div", 31);
|
|
265
|
+
i0.ɵɵelement(1, "i", 67);
|
|
249
266
|
i0.ɵɵtext(2, " Loading parameters... ");
|
|
250
267
|
i0.ɵɵelementEnd();
|
|
251
268
|
} }
|
|
252
|
-
function
|
|
253
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
269
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
270
|
+
i0.ɵɵelement(0, "mj-empty-state", 32);
|
|
254
271
|
} if (rf & 2) {
|
|
255
272
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
256
273
|
i0.ɵɵproperty("Message", ctx_r1.EditMode && ctx_r1.record.IsSaved ? "Add parameters to define inputs and outputs for this action" : "");
|
|
257
274
|
} }
|
|
258
|
-
function
|
|
259
|
-
const
|
|
260
|
-
i0.ɵɵelementStart(0, "button",
|
|
261
|
-
i0.ɵɵlistener("click", function
|
|
262
|
-
i0.ɵɵelement(1, "i",
|
|
275
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
276
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
277
|
+
i0.ɵɵelementStart(0, "button", 77);
|
|
278
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.addParameter("Input")); });
|
|
279
|
+
i0.ɵɵelement(1, "i", 78);
|
|
263
280
|
i0.ɵɵtext(2, " Add Input ");
|
|
264
281
|
i0.ɵɵelementEnd();
|
|
265
282
|
} }
|
|
266
|
-
function
|
|
267
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
283
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
284
|
+
i0.ɵɵelement(0, "mj-empty-state", 72);
|
|
268
285
|
} }
|
|
269
|
-
function
|
|
270
|
-
i0.ɵɵelementStart(0, "span",
|
|
286
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_7_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
287
|
+
i0.ɵɵelementStart(0, "span", 84);
|
|
271
288
|
i0.ɵɵtext(1, "Required");
|
|
272
289
|
i0.ɵɵelementEnd();
|
|
273
290
|
} }
|
|
274
|
-
function
|
|
275
|
-
i0.ɵɵelementStart(0, "span",
|
|
291
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_7_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
292
|
+
i0.ɵɵelementStart(0, "span", 85);
|
|
276
293
|
i0.ɵɵtext(1, "Array");
|
|
277
294
|
i0.ɵɵelementEnd();
|
|
278
295
|
} }
|
|
279
|
-
function
|
|
280
|
-
const
|
|
281
|
-
i0.ɵɵelementStart(0, "button",
|
|
282
|
-
i0.ɵɵlistener("click", function
|
|
283
|
-
i0.ɵɵelement(1, "i",
|
|
296
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_7_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
297
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
298
|
+
i0.ɵɵelementStart(0, "button", 90);
|
|
299
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_7_For_2_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r14); const param_r13 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.editParameter(param_r13)); });
|
|
300
|
+
i0.ɵɵelement(1, "i", 91);
|
|
284
301
|
i0.ɵɵelementEnd();
|
|
285
|
-
i0.ɵɵelementStart(2, "button",
|
|
286
|
-
i0.ɵɵlistener("click", function
|
|
287
|
-
i0.ɵɵelement(3, "i",
|
|
302
|
+
i0.ɵɵelementStart(2, "button", 92);
|
|
303
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_7_For_2_Conditional_7_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r14); const param_r13 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.deleteParameter(param_r13)); });
|
|
304
|
+
i0.ɵɵelement(3, "i", 93);
|
|
288
305
|
i0.ɵɵelementEnd();
|
|
289
306
|
} }
|
|
290
|
-
function
|
|
291
|
-
i0.ɵɵelementStart(0, "div",
|
|
307
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_7_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
308
|
+
i0.ɵɵelementStart(0, "div", 88);
|
|
292
309
|
i0.ɵɵtext(1);
|
|
293
310
|
i0.ɵɵelementEnd();
|
|
294
311
|
} if (rf & 2) {
|
|
295
|
-
const
|
|
312
|
+
const param_r13 = i0.ɵɵnextContext().$implicit;
|
|
296
313
|
i0.ɵɵadvance();
|
|
297
|
-
i0.ɵɵtextInterpolate(
|
|
314
|
+
i0.ɵɵtextInterpolate(param_r13.Description);
|
|
298
315
|
} }
|
|
299
|
-
function
|
|
300
|
-
i0.ɵɵelementStart(0, "div",
|
|
316
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_7_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
317
|
+
i0.ɵɵelementStart(0, "div", 89)(1, "span", 94);
|
|
301
318
|
i0.ɵɵtext(2, "Default:");
|
|
302
319
|
i0.ɵɵelementEnd();
|
|
303
320
|
i0.ɵɵelementStart(3, "code");
|
|
304
321
|
i0.ɵɵtext(4);
|
|
305
322
|
i0.ɵɵelementEnd()();
|
|
306
323
|
} if (rf & 2) {
|
|
307
|
-
const
|
|
324
|
+
const param_r13 = i0.ɵɵnextContext().$implicit;
|
|
308
325
|
i0.ɵɵadvance(4);
|
|
309
|
-
i0.ɵɵtextInterpolate(
|
|
326
|
+
i0.ɵɵtextInterpolate(param_r13.DefaultValue);
|
|
310
327
|
} }
|
|
311
|
-
function
|
|
312
|
-
const
|
|
313
|
-
i0.ɵɵelementStart(0, "div",
|
|
314
|
-
i0.ɵɵlistener("click", function
|
|
315
|
-
i0.ɵɵelementStart(1, "div",
|
|
328
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_7_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
329
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
330
|
+
i0.ɵɵelementStart(0, "div", 80);
|
|
331
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_7_For_2_Template_div_click_0_listener($event) { const param_r13 = i0.ɵɵrestoreView(_r12).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onParamClick(param_r13, $event)); });
|
|
332
|
+
i0.ɵɵelementStart(1, "div", 81)(2, "span", 82);
|
|
316
333
|
i0.ɵɵtext(3);
|
|
317
334
|
i0.ɵɵelementEnd();
|
|
318
|
-
i0.ɵɵelementStart(4, "div",
|
|
319
|
-
i0.ɵɵconditionalCreate(5,
|
|
320
|
-
i0.ɵɵconditionalCreate(6,
|
|
321
|
-
i0.ɵɵconditionalCreate(7,
|
|
335
|
+
i0.ɵɵelementStart(4, "div", 83);
|
|
336
|
+
i0.ɵɵconditionalCreate(5, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_7_For_2_Conditional_5_Template, 2, 0, "span", 84);
|
|
337
|
+
i0.ɵɵconditionalCreate(6, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_7_For_2_Conditional_6_Template, 2, 0, "span", 85);
|
|
338
|
+
i0.ɵɵconditionalCreate(7, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_7_For_2_Conditional_7_Template, 4, 0);
|
|
322
339
|
i0.ɵɵelementEnd()();
|
|
323
|
-
i0.ɵɵelementStart(8, "div",
|
|
340
|
+
i0.ɵɵelementStart(8, "div", 86)(9, "div", 87);
|
|
324
341
|
i0.ɵɵtext(10);
|
|
325
342
|
i0.ɵɵelementEnd();
|
|
326
|
-
i0.ɵɵconditionalCreate(11,
|
|
327
|
-
i0.ɵɵconditionalCreate(12,
|
|
343
|
+
i0.ɵɵconditionalCreate(11, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_7_For_2_Conditional_11_Template, 2, 1, "div", 88);
|
|
344
|
+
i0.ɵɵconditionalCreate(12, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_7_For_2_Conditional_12_Template, 5, 1, "div", 89);
|
|
328
345
|
i0.ɵɵelementEnd()();
|
|
329
346
|
} if (rf & 2) {
|
|
330
|
-
const
|
|
347
|
+
const param_r13 = ctx.$implicit;
|
|
331
348
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
332
|
-
i0.ɵɵclassProp("required",
|
|
349
|
+
i0.ɵɵclassProp("required", param_r13.IsRequired)("clickable", true);
|
|
333
350
|
i0.ɵɵadvance(3);
|
|
334
|
-
i0.ɵɵtextInterpolate(
|
|
351
|
+
i0.ɵɵtextInterpolate(param_r13.Name);
|
|
335
352
|
i0.ɵɵadvance(2);
|
|
336
|
-
i0.ɵɵconditional(
|
|
353
|
+
i0.ɵɵconditional(param_r13.IsRequired ? 5 : -1);
|
|
337
354
|
i0.ɵɵadvance();
|
|
338
|
-
i0.ɵɵconditional(
|
|
355
|
+
i0.ɵɵconditional(param_r13.IsArray ? 6 : -1);
|
|
339
356
|
i0.ɵɵadvance();
|
|
340
357
|
i0.ɵɵconditional(ctx_r1.EditMode ? 7 : -1);
|
|
341
358
|
i0.ɵɵadvance(3);
|
|
342
|
-
i0.ɵɵtextInterpolate(
|
|
359
|
+
i0.ɵɵtextInterpolate(param_r13.ValueType);
|
|
343
360
|
i0.ɵɵadvance();
|
|
344
|
-
i0.ɵɵconditional(
|
|
361
|
+
i0.ɵɵconditional(param_r13.Description ? 11 : -1);
|
|
345
362
|
i0.ɵɵadvance();
|
|
346
|
-
i0.ɵɵconditional(
|
|
363
|
+
i0.ɵɵconditional(param_r13.DefaultValue ? 12 : -1);
|
|
347
364
|
} }
|
|
348
|
-
function
|
|
349
|
-
i0.ɵɵelementStart(0, "div",
|
|
350
|
-
i0.ɵɵrepeaterCreate(1,
|
|
365
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
366
|
+
i0.ɵɵelementStart(0, "div", 73);
|
|
367
|
+
i0.ɵɵrepeaterCreate(1, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_7_For_2_Template, 13, 11, "div", 79, _forTrack0);
|
|
351
368
|
i0.ɵɵelementEnd();
|
|
352
369
|
} if (rf & 2) {
|
|
353
370
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
354
371
|
i0.ɵɵadvance();
|
|
355
372
|
i0.ɵɵrepeater(ctx_r1.getInputParams());
|
|
356
373
|
} }
|
|
357
|
-
function
|
|
358
|
-
const
|
|
359
|
-
i0.ɵɵelementStart(0, "button",
|
|
360
|
-
i0.ɵɵlistener("click", function
|
|
361
|
-
i0.ɵɵelement(1, "i",
|
|
374
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
375
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
376
|
+
i0.ɵɵelementStart(0, "button", 77);
|
|
377
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_13_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.addParameter("Output")); });
|
|
378
|
+
i0.ɵɵelement(1, "i", 78);
|
|
362
379
|
i0.ɵɵtext(2, " Add Output ");
|
|
363
380
|
i0.ɵɵelementEnd();
|
|
364
381
|
} }
|
|
365
|
-
function
|
|
366
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
382
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
383
|
+
i0.ɵɵelement(0, "mj-empty-state", 76);
|
|
367
384
|
} }
|
|
368
|
-
function
|
|
369
|
-
i0.ɵɵelementStart(0, "span",
|
|
385
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_15_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
386
|
+
i0.ɵɵelementStart(0, "span", 85);
|
|
370
387
|
i0.ɵɵtext(1, "Array");
|
|
371
388
|
i0.ɵɵelementEnd();
|
|
372
389
|
} }
|
|
373
|
-
function
|
|
374
|
-
const
|
|
375
|
-
i0.ɵɵelementStart(0, "button",
|
|
376
|
-
i0.ɵɵlistener("click", function
|
|
377
|
-
i0.ɵɵelement(1, "i",
|
|
390
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_15_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
391
|
+
const _r18 = i0.ɵɵgetCurrentView();
|
|
392
|
+
i0.ɵɵelementStart(0, "button", 90);
|
|
393
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_15_For_2_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r18); const param_r17 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.editParameter(param_r17)); });
|
|
394
|
+
i0.ɵɵelement(1, "i", 91);
|
|
378
395
|
i0.ɵɵelementEnd();
|
|
379
|
-
i0.ɵɵelementStart(2, "button",
|
|
380
|
-
i0.ɵɵlistener("click", function
|
|
381
|
-
i0.ɵɵelement(3, "i",
|
|
396
|
+
i0.ɵɵelementStart(2, "button", 92);
|
|
397
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_15_For_2_Conditional_6_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r18); const param_r17 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.deleteParameter(param_r17)); });
|
|
398
|
+
i0.ɵɵelement(3, "i", 93);
|
|
382
399
|
i0.ɵɵelementEnd();
|
|
383
400
|
} }
|
|
384
|
-
function
|
|
385
|
-
i0.ɵɵelementStart(0, "div",
|
|
401
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_15_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
402
|
+
i0.ɵɵelementStart(0, "div", 88);
|
|
386
403
|
i0.ɵɵtext(1);
|
|
387
404
|
i0.ɵɵelementEnd();
|
|
388
405
|
} if (rf & 2) {
|
|
389
|
-
const
|
|
406
|
+
const param_r17 = i0.ɵɵnextContext().$implicit;
|
|
390
407
|
i0.ɵɵadvance();
|
|
391
|
-
i0.ɵɵtextInterpolate(
|
|
408
|
+
i0.ɵɵtextInterpolate(param_r17.Description);
|
|
392
409
|
} }
|
|
393
|
-
function
|
|
394
|
-
i0.ɵɵelementStart(0, "div",
|
|
410
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_15_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
411
|
+
i0.ɵɵelementStart(0, "div", 89)(1, "span", 94);
|
|
395
412
|
i0.ɵɵtext(2, "Default:");
|
|
396
413
|
i0.ɵɵelementEnd();
|
|
397
414
|
i0.ɵɵelementStart(3, "code");
|
|
398
415
|
i0.ɵɵtext(4);
|
|
399
416
|
i0.ɵɵelementEnd()();
|
|
400
417
|
} if (rf & 2) {
|
|
401
|
-
const
|
|
418
|
+
const param_r17 = i0.ɵɵnextContext().$implicit;
|
|
402
419
|
i0.ɵɵadvance(4);
|
|
403
|
-
i0.ɵɵtextInterpolate(
|
|
420
|
+
i0.ɵɵtextInterpolate(param_r17.DefaultValue);
|
|
404
421
|
} }
|
|
405
|
-
function
|
|
406
|
-
const
|
|
407
|
-
i0.ɵɵelementStart(0, "div",
|
|
408
|
-
i0.ɵɵlistener("click", function
|
|
409
|
-
i0.ɵɵelementStart(1, "div",
|
|
422
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_15_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
423
|
+
const _r16 = i0.ɵɵgetCurrentView();
|
|
424
|
+
i0.ɵɵelementStart(0, "div", 80);
|
|
425
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_15_For_2_Template_div_click_0_listener($event) { const param_r17 = i0.ɵɵrestoreView(_r16).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onParamClick(param_r17, $event)); });
|
|
426
|
+
i0.ɵɵelementStart(1, "div", 81)(2, "span", 82);
|
|
410
427
|
i0.ɵɵtext(3);
|
|
411
428
|
i0.ɵɵelementEnd();
|
|
412
|
-
i0.ɵɵelementStart(4, "div",
|
|
413
|
-
i0.ɵɵconditionalCreate(5,
|
|
414
|
-
i0.ɵɵconditionalCreate(6,
|
|
429
|
+
i0.ɵɵelementStart(4, "div", 83);
|
|
430
|
+
i0.ɵɵconditionalCreate(5, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_15_For_2_Conditional_5_Template, 2, 0, "span", 85);
|
|
431
|
+
i0.ɵɵconditionalCreate(6, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_15_For_2_Conditional_6_Template, 4, 0);
|
|
415
432
|
i0.ɵɵelementEnd()();
|
|
416
|
-
i0.ɵɵelementStart(7, "div",
|
|
433
|
+
i0.ɵɵelementStart(7, "div", 86)(8, "div", 87);
|
|
417
434
|
i0.ɵɵtext(9);
|
|
418
435
|
i0.ɵɵelementEnd();
|
|
419
|
-
i0.ɵɵconditionalCreate(10,
|
|
420
|
-
i0.ɵɵconditionalCreate(11,
|
|
436
|
+
i0.ɵɵconditionalCreate(10, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_15_For_2_Conditional_10_Template, 2, 1, "div", 88);
|
|
437
|
+
i0.ɵɵconditionalCreate(11, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_15_For_2_Conditional_11_Template, 5, 1, "div", 89);
|
|
421
438
|
i0.ɵɵelementEnd()();
|
|
422
439
|
} if (rf & 2) {
|
|
423
|
-
const
|
|
440
|
+
const param_r17 = ctx.$implicit;
|
|
424
441
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
425
442
|
i0.ɵɵclassProp("clickable", true);
|
|
426
443
|
i0.ɵɵadvance(3);
|
|
427
|
-
i0.ɵɵtextInterpolate(
|
|
444
|
+
i0.ɵɵtextInterpolate(param_r17.Name);
|
|
428
445
|
i0.ɵɵadvance(2);
|
|
429
|
-
i0.ɵɵconditional(
|
|
446
|
+
i0.ɵɵconditional(param_r17.IsArray ? 5 : -1);
|
|
430
447
|
i0.ɵɵadvance();
|
|
431
448
|
i0.ɵɵconditional(ctx_r1.EditMode ? 6 : -1);
|
|
432
449
|
i0.ɵɵadvance(3);
|
|
433
|
-
i0.ɵɵtextInterpolate(
|
|
450
|
+
i0.ɵɵtextInterpolate(param_r17.ValueType);
|
|
434
451
|
i0.ɵɵadvance();
|
|
435
|
-
i0.ɵɵconditional(
|
|
452
|
+
i0.ɵɵconditional(param_r17.Description ? 10 : -1);
|
|
436
453
|
i0.ɵɵadvance();
|
|
437
|
-
i0.ɵɵconditional(
|
|
454
|
+
i0.ɵɵconditional(param_r17.DefaultValue ? 11 : -1);
|
|
438
455
|
} }
|
|
439
|
-
function
|
|
440
|
-
i0.ɵɵelementStart(0, "div",
|
|
441
|
-
i0.ɵɵrepeaterCreate(1,
|
|
456
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
457
|
+
i0.ɵɵelementStart(0, "div", 73);
|
|
458
|
+
i0.ɵɵrepeaterCreate(1, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_15_For_2_Template, 12, 8, "div", 95, _forTrack0);
|
|
442
459
|
i0.ɵɵelementEnd();
|
|
443
460
|
} if (rf & 2) {
|
|
444
461
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
445
462
|
i0.ɵɵadvance();
|
|
446
463
|
i0.ɵɵrepeater(ctx_r1.getOutputParams());
|
|
447
464
|
} }
|
|
448
|
-
function
|
|
449
|
-
i0.ɵɵelementStart(0, "div",
|
|
450
|
-
i0.ɵɵelement(3, "i",
|
|
465
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_37_Template(rf, ctx) { if (rf & 1) {
|
|
466
|
+
i0.ɵɵelementStart(0, "div", 68)(1, "div", 69)(2, "h3");
|
|
467
|
+
i0.ɵɵelement(3, "i", 70);
|
|
451
468
|
i0.ɵɵtext(4, " Input Parameters");
|
|
452
469
|
i0.ɵɵelementEnd();
|
|
453
|
-
i0.ɵɵconditionalCreate(5,
|
|
470
|
+
i0.ɵɵconditionalCreate(5, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_5_Template, 3, 0, "button", 71);
|
|
454
471
|
i0.ɵɵelementEnd();
|
|
455
|
-
i0.ɵɵconditionalCreate(6,
|
|
472
|
+
i0.ɵɵconditionalCreate(6, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_6_Template, 1, 0, "mj-empty-state", 72)(7, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_7_Template, 3, 0, "div", 73);
|
|
456
473
|
i0.ɵɵelementEnd();
|
|
457
|
-
i0.ɵɵelementStart(8, "div",
|
|
458
|
-
i0.ɵɵelement(11, "i",
|
|
474
|
+
i0.ɵɵelementStart(8, "div", 74)(9, "div", 69)(10, "h3");
|
|
475
|
+
i0.ɵɵelement(11, "i", 75);
|
|
459
476
|
i0.ɵɵtext(12, " Output Parameters");
|
|
460
477
|
i0.ɵɵelementEnd();
|
|
461
|
-
i0.ɵɵconditionalCreate(13,
|
|
478
|
+
i0.ɵɵconditionalCreate(13, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_13_Template, 3, 0, "button", 71);
|
|
462
479
|
i0.ɵɵelementEnd();
|
|
463
|
-
i0.ɵɵconditionalCreate(14,
|
|
480
|
+
i0.ɵɵconditionalCreate(14, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_14_Template, 1, 0, "mj-empty-state", 76)(15, MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_15_Template, 3, 0, "div", 73);
|
|
464
481
|
i0.ɵɵelementEnd();
|
|
465
482
|
} if (rf & 2) {
|
|
466
483
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -475,47 +492,47 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_35_Template(rf,
|
|
|
475
492
|
i0.ɵɵadvance();
|
|
476
493
|
i0.ɵɵconditional(ctx_r1.getOutputParams().length === 0 ? 14 : 15);
|
|
477
494
|
} }
|
|
478
|
-
function
|
|
479
|
-
i0.ɵɵelementStart(0, "span",
|
|
480
|
-
i0.ɵɵelement(1, "i",
|
|
495
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_38_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
496
|
+
i0.ɵɵelementStart(0, "span", 106);
|
|
497
|
+
i0.ɵɵelement(1, "i", 107);
|
|
481
498
|
i0.ɵɵtext(2, " Locked ");
|
|
482
499
|
i0.ɵɵelementEnd();
|
|
483
500
|
} }
|
|
484
|
-
function
|
|
485
|
-
i0.ɵɵelementStart(0, "span",
|
|
486
|
-
i0.ɵɵelement(1, "i",
|
|
501
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_38_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
502
|
+
i0.ɵɵelementStart(0, "span", 65);
|
|
503
|
+
i0.ɵɵelement(1, "i", 105);
|
|
487
504
|
i0.ɵɵtext(2, " Code & Generation ");
|
|
488
|
-
i0.ɵɵconditionalCreate(3,
|
|
505
|
+
i0.ɵɵconditionalCreate(3, MJActionFormComponentExtended_Conditional_0_Conditional_38_ng_template_1_Conditional_3_Template, 3, 0, "span", 106);
|
|
489
506
|
i0.ɵɵelementEnd();
|
|
490
507
|
} if (rf & 2) {
|
|
491
508
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
492
509
|
i0.ɵɵadvance(3);
|
|
493
510
|
i0.ɵɵconditional(ctx_r1.record.CodeLocked ? 3 : -1);
|
|
494
511
|
} }
|
|
495
|
-
function
|
|
496
|
-
const
|
|
497
|
-
i0.ɵɵelementStart(0, "div",
|
|
498
|
-
i0.ɵɵelement(2, "i",
|
|
512
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_38_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
513
|
+
const _r20 = i0.ɵɵgetCurrentView();
|
|
514
|
+
i0.ɵɵelementStart(0, "div", 96)(1, "h3");
|
|
515
|
+
i0.ɵɵelement(2, "i", 61);
|
|
499
516
|
i0.ɵɵtext(3, " AI Generation");
|
|
500
517
|
i0.ɵɵelementEnd();
|
|
501
|
-
i0.ɵɵelementStart(4, "div",
|
|
518
|
+
i0.ɵɵelementStart(4, "div", 108)(5, "label");
|
|
502
519
|
i0.ɵɵtext(6, "User Prompt");
|
|
503
520
|
i0.ɵɵelementEnd();
|
|
504
|
-
i0.ɵɵelementStart(7, "textarea",
|
|
505
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
521
|
+
i0.ɵɵelementStart(7, "textarea", 109);
|
|
522
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_0_Conditional_38_Conditional_3_Template_textarea_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.UserPrompt, $event) || (ctx_r1.record.UserPrompt = $event); return i0.ɵɵresetView($event); });
|
|
506
523
|
i0.ɵɵtext(8, " ");
|
|
507
524
|
i0.ɵɵelementEnd()();
|
|
508
|
-
i0.ɵɵelementStart(9, "div",
|
|
525
|
+
i0.ɵɵelementStart(9, "div", 110)(10, "label");
|
|
509
526
|
i0.ɵɵtext(11, "Internal Comments (not sent to AI)");
|
|
510
527
|
i0.ɵɵelementEnd();
|
|
511
|
-
i0.ɵɵelementStart(12, "textarea",
|
|
512
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
528
|
+
i0.ɵɵelementStart(12, "textarea", 111);
|
|
529
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_0_Conditional_38_Conditional_3_Template_textarea_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.UserComments, $event) || (ctx_r1.record.UserComments = $event); return i0.ɵɵresetView($event); });
|
|
513
530
|
i0.ɵɵtext(13, " ");
|
|
514
531
|
i0.ɵɵelementEnd()();
|
|
515
|
-
i0.ɵɵelementStart(14, "div",
|
|
516
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
532
|
+
i0.ɵɵelementStart(14, "div", 112)(15, "mj-switch", 113);
|
|
533
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_0_Conditional_38_Conditional_3_Template_mj_switch_ngModelChange_15_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.CodeLocked, $event) || (ctx_r1.record.CodeLocked = $event); return i0.ɵɵresetView($event); });
|
|
517
534
|
i0.ɵɵelementEnd();
|
|
518
|
-
i0.ɵɵelementStart(16, "label",
|
|
535
|
+
i0.ɵɵelementStart(16, "label", 114);
|
|
519
536
|
i0.ɵɵtext(17, "Lock Code (prevent regeneration)");
|
|
520
537
|
i0.ɵɵelementEnd()()();
|
|
521
538
|
} if (rf & 2) {
|
|
@@ -529,11 +546,11 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_36_Conditional_
|
|
|
529
546
|
i0.ɵɵadvance(3);
|
|
530
547
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.CodeLocked);
|
|
531
548
|
} }
|
|
532
|
-
function
|
|
533
|
-
const
|
|
534
|
-
i0.ɵɵelementStart(0, "button",
|
|
535
|
-
i0.ɵɵlistener("click", function
|
|
536
|
-
i0.ɵɵelement(1, "i",
|
|
549
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_38_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
550
|
+
const _r21 = i0.ɵɵgetCurrentView();
|
|
551
|
+
i0.ɵɵelementStart(0, "button", 77);
|
|
552
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_38_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleCodeComments()); });
|
|
553
|
+
i0.ɵɵelement(1, "i", 115);
|
|
537
554
|
i0.ɵɵtext(2);
|
|
538
555
|
i0.ɵɵelementEnd();
|
|
539
556
|
} if (rf & 2) {
|
|
@@ -541,9 +558,9 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_36_Conditional_
|
|
|
541
558
|
i0.ɵɵadvance(2);
|
|
542
559
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.showCodeComments ? "Hide" : "Show", " AI Comments ");
|
|
543
560
|
} }
|
|
544
|
-
function
|
|
545
|
-
i0.ɵɵelementStart(0, "div",
|
|
546
|
-
i0.ɵɵelement(2, "i",
|
|
561
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_38_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
562
|
+
i0.ɵɵelementStart(0, "div", 103)(1, "h4");
|
|
563
|
+
i0.ɵɵelement(2, "i", 61);
|
|
547
564
|
i0.ɵɵtext(3, " AI Explanation");
|
|
548
565
|
i0.ɵɵelementEnd();
|
|
549
566
|
i0.ɵɵelementStart(4, "p");
|
|
@@ -554,13 +571,13 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_36_Conditional_
|
|
|
554
571
|
i0.ɵɵadvance(5);
|
|
555
572
|
i0.ɵɵtextInterpolate(ctx_r1.record.CodeComments);
|
|
556
573
|
} }
|
|
557
|
-
function
|
|
558
|
-
const
|
|
559
|
-
i0.ɵɵelementStart(0, "div",
|
|
574
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_38_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
575
|
+
const _r22 = i0.ɵɵgetCurrentView();
|
|
576
|
+
i0.ɵɵelementStart(0, "div", 104)(1, "label");
|
|
560
577
|
i0.ɵɵtext(2, "Rejection Comments");
|
|
561
578
|
i0.ɵɵelementEnd();
|
|
562
|
-
i0.ɵɵelementStart(3, "textarea",
|
|
563
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
579
|
+
i0.ɵɵelementStart(3, "textarea", 116);
|
|
580
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_0_Conditional_38_Conditional_16_Template_textarea_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.CodeApprovalComments, $event) || (ctx_r1.record.CodeApprovalComments = $event); return i0.ɵɵresetView($event); });
|
|
564
581
|
i0.ɵɵtext(4, " ");
|
|
565
582
|
i0.ɵɵelementEnd()();
|
|
566
583
|
} if (rf & 2) {
|
|
@@ -569,28 +586,28 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_36_Conditional_
|
|
|
569
586
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.CodeApprovalComments);
|
|
570
587
|
i0.ɵɵproperty("rows", 2);
|
|
571
588
|
} }
|
|
572
|
-
function
|
|
573
|
-
const
|
|
574
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
575
|
-
i0.ɵɵtemplate(1,
|
|
576
|
-
i0.ɵɵelementStart(2, "div",
|
|
577
|
-
i0.ɵɵconditionalCreate(3,
|
|
578
|
-
i0.ɵɵelementStart(4, "div",
|
|
579
|
-
i0.ɵɵelement(7, "i",
|
|
589
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_38_Template(rf, ctx) { if (rf & 1) {
|
|
590
|
+
const _r19 = i0.ɵɵgetCurrentView();
|
|
591
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 33);
|
|
592
|
+
i0.ɵɵtemplate(1, MJActionFormComponentExtended_Conditional_0_Conditional_38_ng_template_1_Template, 4, 1, "ng-template", 29);
|
|
593
|
+
i0.ɵɵelementStart(2, "div", 30);
|
|
594
|
+
i0.ɵɵconditionalCreate(3, MJActionFormComponentExtended_Conditional_0_Conditional_38_Conditional_3_Template, 18, 5, "div", 96);
|
|
595
|
+
i0.ɵɵelementStart(4, "div", 97)(5, "div", 98)(6, "h3");
|
|
596
|
+
i0.ɵɵelement(7, "i", 99);
|
|
580
597
|
i0.ɵɵtext(8, " Action Code");
|
|
581
598
|
i0.ɵɵelementEnd();
|
|
582
|
-
i0.ɵɵelementStart(9, "div",
|
|
583
|
-
i0.ɵɵconditionalCreate(10,
|
|
584
|
-
i0.ɵɵelementStart(11, "button",
|
|
585
|
-
i0.ɵɵlistener("click", function
|
|
586
|
-
i0.ɵɵelement(12, "i",
|
|
599
|
+
i0.ɵɵelementStart(9, "div", 100);
|
|
600
|
+
i0.ɵɵconditionalCreate(10, MJActionFormComponentExtended_Conditional_0_Conditional_38_Conditional_10_Template, 3, 1, "button", 71);
|
|
601
|
+
i0.ɵɵelementStart(11, "button", 77);
|
|
602
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_38_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.record.Code || "")); });
|
|
603
|
+
i0.ɵɵelement(12, "i", 101);
|
|
587
604
|
i0.ɵɵtext(13, " Copy ");
|
|
588
605
|
i0.ɵɵelementEnd()()();
|
|
589
|
-
i0.ɵɵelementStart(14, "mj-code-editor",
|
|
590
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
606
|
+
i0.ɵɵelementStart(14, "mj-code-editor", 102);
|
|
607
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJActionFormComponentExtended_Conditional_0_Conditional_38_Template_mj_code_editor_ngModelChange_14_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Code, $event) || (ctx_r1.record.Code = $event); return i0.ɵɵresetView($event); });
|
|
591
608
|
i0.ɵɵelementEnd();
|
|
592
|
-
i0.ɵɵconditionalCreate(15,
|
|
593
|
-
i0.ɵɵconditionalCreate(16,
|
|
609
|
+
i0.ɵɵconditionalCreate(15, MJActionFormComponentExtended_Conditional_0_Conditional_38_Conditional_15_Template, 6, 1, "div", 103);
|
|
610
|
+
i0.ɵɵconditionalCreate(16, MJActionFormComponentExtended_Conditional_0_Conditional_38_Conditional_16_Template, 5, 2, "div", 104);
|
|
594
611
|
i0.ɵɵelementEnd()()();
|
|
595
612
|
} if (rf & 2) {
|
|
596
613
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -607,11 +624,11 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_36_Template(rf,
|
|
|
607
624
|
i0.ɵɵadvance();
|
|
608
625
|
i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.record.CodeApprovalStatus === "Rejected" ? 16 : -1);
|
|
609
626
|
} }
|
|
610
|
-
function
|
|
611
|
-
i0.ɵɵelementStart(0, "span",
|
|
612
|
-
i0.ɵɵelement(1, "i",
|
|
627
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
628
|
+
i0.ɵɵelementStart(0, "span", 65);
|
|
629
|
+
i0.ɵɵelement(1, "i", 122);
|
|
613
630
|
i0.ɵɵtext(2, " Runtime Configuration & Permissions ");
|
|
614
|
-
i0.ɵɵelementStart(3, "span",
|
|
631
|
+
i0.ɵɵelementStart(3, "span", 123);
|
|
615
632
|
i0.ɵɵtext(4);
|
|
616
633
|
i0.ɵɵelementEnd()();
|
|
617
634
|
} if (rf & 2) {
|
|
@@ -619,34 +636,34 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_37_ng_template_
|
|
|
619
636
|
i0.ɵɵadvance(4);
|
|
620
637
|
i0.ɵɵtextInterpolate1(" (", ctx_r1.getRuntimeConfigSummary(), ") ");
|
|
621
638
|
} }
|
|
622
|
-
function
|
|
623
|
-
i0.ɵɵelementStart(0, "mj-alert",
|
|
639
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
640
|
+
i0.ɵɵelementStart(0, "mj-alert", 117)(1, "strong");
|
|
624
641
|
i0.ɵɵtext(2, "Missing or malformed RuntimeActionConfiguration.");
|
|
625
642
|
i0.ɵɵelementEnd();
|
|
626
643
|
i0.ɵɵtext(3, " This Runtime action cannot run until a valid configuration is supplied. Approval should not be granted in this state. ");
|
|
627
644
|
i0.ɵɵelementEnd();
|
|
628
645
|
} }
|
|
629
|
-
function
|
|
646
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_0_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
630
647
|
i0.ɵɵelementStart(0, "strong");
|
|
631
648
|
i0.ɵɵtext(1, "allowAnyEntity");
|
|
632
649
|
i0.ɵɵelementEnd();
|
|
633
650
|
} }
|
|
634
|
-
function
|
|
651
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_0_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
635
652
|
i0.ɵɵelementStart(0, "strong");
|
|
636
653
|
i0.ɵɵtext(1, "allowAnyAction");
|
|
637
654
|
i0.ɵɵelementEnd();
|
|
638
655
|
} }
|
|
639
|
-
function
|
|
656
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_0_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
640
657
|
i0.ɵɵelementStart(0, "strong");
|
|
641
658
|
i0.ɵɵtext(1, "allowAnyAgent");
|
|
642
659
|
i0.ɵɵelementEnd();
|
|
643
660
|
} }
|
|
644
|
-
function
|
|
645
|
-
i0.ɵɵelementStart(0, "mj-alert",
|
|
661
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
662
|
+
i0.ɵɵelementStart(0, "mj-alert", 124)(1, "div", 135);
|
|
646
663
|
i0.ɵɵtext(2, " This runtime action has one or more wildcard flags set that bypass the specific allowlists below: ");
|
|
647
|
-
i0.ɵɵconditionalCreate(3,
|
|
648
|
-
i0.ɵɵconditionalCreate(4,
|
|
649
|
-
i0.ɵɵconditionalCreate(5,
|
|
664
|
+
i0.ɵɵconditionalCreate(3, MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_0_Conditional_3_Template, 2, 0, "strong");
|
|
665
|
+
i0.ɵɵconditionalCreate(4, MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_0_Conditional_4_Template, 2, 0, "strong");
|
|
666
|
+
i0.ɵɵconditionalCreate(5, MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_0_Conditional_5_Template, 2, 0, "strong");
|
|
650
667
|
i0.ɵɵtext(6, " . 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. ");
|
|
651
668
|
i0.ɵɵelementEnd()();
|
|
652
669
|
} if (rf & 2) {
|
|
@@ -658,76 +675,76 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_
|
|
|
658
675
|
i0.ɵɵadvance();
|
|
659
676
|
i0.ɵɵconditional(ctx_r1.getWildcardFlags().agent ? 5 : -1);
|
|
660
677
|
} }
|
|
661
|
-
function
|
|
662
|
-
i0.ɵɵelementStart(0, "div",
|
|
678
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
679
|
+
i0.ɵɵelementStart(0, "div", 129);
|
|
663
680
|
i0.ɵɵtext(1, "None requested");
|
|
664
681
|
i0.ɵɵelementEnd();
|
|
665
682
|
} }
|
|
666
|
-
function
|
|
667
|
-
i0.ɵɵelementStart(0, "span",
|
|
683
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_7_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
684
|
+
i0.ɵɵelementStart(0, "span", 138);
|
|
668
685
|
i0.ɵɵtext(1);
|
|
669
686
|
i0.ɵɵelementEnd();
|
|
670
687
|
} if (rf & 2) {
|
|
671
|
-
const
|
|
688
|
+
const e_r23 = ctx.$implicit;
|
|
672
689
|
i0.ɵɵadvance();
|
|
673
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
690
|
+
i0.ɵɵtextInterpolate1(" ", e_r23.name, " ");
|
|
674
691
|
} }
|
|
675
|
-
function
|
|
676
|
-
i0.ɵɵelementStart(0, "div",
|
|
677
|
-
i0.ɵɵrepeaterCreate(1,
|
|
692
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
693
|
+
i0.ɵɵelementStart(0, "div", 130);
|
|
694
|
+
i0.ɵɵrepeaterCreate(1, MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_7_For_2_Template, 2, 1, "span", 138, _forTrack1);
|
|
678
695
|
i0.ɵɵelementEnd();
|
|
679
696
|
} if (rf & 2) {
|
|
680
697
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
681
698
|
i0.ɵɵadvance();
|
|
682
699
|
i0.ɵɵrepeater(ctx_r1.getAllowedEntities());
|
|
683
700
|
} }
|
|
684
|
-
function
|
|
685
|
-
i0.ɵɵelementStart(0, "div",
|
|
701
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
702
|
+
i0.ɵɵelementStart(0, "div", 129);
|
|
686
703
|
i0.ɵɵtext(1, "None requested");
|
|
687
704
|
i0.ɵɵelementEnd();
|
|
688
705
|
} }
|
|
689
|
-
function
|
|
690
|
-
i0.ɵɵelementStart(0, "span",
|
|
706
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_13_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
707
|
+
i0.ɵɵelementStart(0, "span", 138);
|
|
691
708
|
i0.ɵɵtext(1);
|
|
692
709
|
i0.ɵɵelementEnd();
|
|
693
710
|
} if (rf & 2) {
|
|
694
|
-
const
|
|
711
|
+
const a_r24 = ctx.$implicit;
|
|
695
712
|
i0.ɵɵadvance();
|
|
696
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
713
|
+
i0.ɵɵtextInterpolate1(" ", a_r24.name, " ");
|
|
697
714
|
} }
|
|
698
|
-
function
|
|
699
|
-
i0.ɵɵelementStart(0, "div",
|
|
700
|
-
i0.ɵɵrepeaterCreate(1,
|
|
715
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
716
|
+
i0.ɵɵelementStart(0, "div", 130);
|
|
717
|
+
i0.ɵɵrepeaterCreate(1, MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_13_For_2_Template, 2, 1, "span", 138, _forTrack1);
|
|
701
718
|
i0.ɵɵelementEnd();
|
|
702
719
|
} if (rf & 2) {
|
|
703
720
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
704
721
|
i0.ɵɵadvance();
|
|
705
722
|
i0.ɵɵrepeater(ctx_r1.getAllowedActions());
|
|
706
723
|
} }
|
|
707
|
-
function
|
|
708
|
-
i0.ɵɵelementStart(0, "div",
|
|
724
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
725
|
+
i0.ɵɵelementStart(0, "div", 129);
|
|
709
726
|
i0.ɵɵtext(1, "None requested");
|
|
710
727
|
i0.ɵɵelementEnd();
|
|
711
728
|
} }
|
|
712
|
-
function
|
|
713
|
-
i0.ɵɵelementStart(0, "span",
|
|
729
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_19_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
730
|
+
i0.ɵɵelementStart(0, "span", 138);
|
|
714
731
|
i0.ɵɵtext(1);
|
|
715
732
|
i0.ɵɵelementEnd();
|
|
716
733
|
} if (rf & 2) {
|
|
717
|
-
const
|
|
734
|
+
const g_r25 = ctx.$implicit;
|
|
718
735
|
i0.ɵɵadvance();
|
|
719
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
736
|
+
i0.ɵɵtextInterpolate1(" ", g_r25.name, " ");
|
|
720
737
|
} }
|
|
721
|
-
function
|
|
722
|
-
i0.ɵɵelementStart(0, "div",
|
|
723
|
-
i0.ɵɵrepeaterCreate(1,
|
|
738
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
739
|
+
i0.ɵɵelementStart(0, "div", 130);
|
|
740
|
+
i0.ɵɵrepeaterCreate(1, MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_19_For_2_Template, 2, 1, "span", 138, _forTrack1);
|
|
724
741
|
i0.ɵɵelementEnd();
|
|
725
742
|
} if (rf & 2) {
|
|
726
743
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
727
744
|
i0.ɵɵadvance();
|
|
728
745
|
i0.ɵɵrepeater(ctx_r1.getAllowedAgents());
|
|
729
746
|
} }
|
|
730
|
-
function
|
|
747
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
731
748
|
i0.ɵɵelementStart(0, "div");
|
|
732
749
|
i0.ɵɵtext(1);
|
|
733
750
|
i0.ɵɵelementEnd();
|
|
@@ -736,78 +753,78 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_
|
|
|
736
753
|
i0.ɵɵadvance();
|
|
737
754
|
i0.ɵɵtextInterpolate1("Max execution time: ", ctx_r1.record.MaxExecutionTimeMS, " ms");
|
|
738
755
|
} }
|
|
739
|
-
function
|
|
740
|
-
i0.ɵɵelementStart(0, "div",
|
|
756
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_35_Template(rf, ctx) { if (rf & 1) {
|
|
757
|
+
i0.ɵɵelementStart(0, "div", 129);
|
|
741
758
|
i0.ɵɵtext(1, "None (only default set: lodash, date-fns, uuid, validator)");
|
|
742
759
|
i0.ɵɵelementEnd();
|
|
743
760
|
} }
|
|
744
|
-
function
|
|
761
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_36_For_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
745
762
|
i0.ɵɵelementStart(0, "span", 18);
|
|
746
763
|
i0.ɵɵtext(1);
|
|
747
764
|
i0.ɵɵelementEnd();
|
|
748
765
|
} if (rf & 2) {
|
|
749
|
-
const
|
|
766
|
+
const lib_r26 = i0.ɵɵnextContext().$implicit;
|
|
750
767
|
i0.ɵɵadvance();
|
|
751
|
-
i0.ɵɵtextInterpolate1(" @",
|
|
768
|
+
i0.ɵɵtextInterpolate1(" @", lib_r26.version);
|
|
752
769
|
} }
|
|
753
|
-
function
|
|
754
|
-
i0.ɵɵelementStart(0, "span",
|
|
770
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_36_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
771
|
+
i0.ɵɵelementStart(0, "span", 139);
|
|
755
772
|
i0.ɵɵtext(1);
|
|
756
|
-
i0.ɵɵconditionalCreate(2,
|
|
773
|
+
i0.ɵɵconditionalCreate(2, MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_36_For_2_Conditional_2_Template, 2, 1, "span", 18);
|
|
757
774
|
i0.ɵɵelementEnd();
|
|
758
775
|
} if (rf & 2) {
|
|
759
|
-
const
|
|
776
|
+
const lib_r26 = ctx.$implicit;
|
|
760
777
|
i0.ɵɵadvance();
|
|
761
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
778
|
+
i0.ɵɵtextInterpolate1(" ", lib_r26.name);
|
|
762
779
|
i0.ɵɵadvance();
|
|
763
|
-
i0.ɵɵconditional(
|
|
780
|
+
i0.ɵɵconditional(lib_r26.version ? 2 : -1);
|
|
764
781
|
} }
|
|
765
|
-
function
|
|
766
|
-
i0.ɵɵelementStart(0, "div",
|
|
767
|
-
i0.ɵɵrepeaterCreate(1,
|
|
782
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
783
|
+
i0.ɵɵelementStart(0, "div", 137);
|
|
784
|
+
i0.ɵɵrepeaterCreate(1, MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_36_For_2_Template, 3, 2, "span", 139, _forTrack2);
|
|
768
785
|
i0.ɵɵelementEnd();
|
|
769
786
|
} if (rf & 2) {
|
|
770
787
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
771
788
|
i0.ɵɵadvance();
|
|
772
789
|
i0.ɵɵrepeater(ctx_r1.getRequestedLibraries());
|
|
773
790
|
} }
|
|
774
|
-
function
|
|
775
|
-
i0.ɵɵconditionalCreate(0,
|
|
776
|
-
i0.ɵɵelementStart(1, "div",
|
|
777
|
-
i0.ɵɵelement(4, "i",
|
|
791
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
792
|
+
i0.ɵɵconditionalCreate(0, MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_0_Template, 7, 3, "mj-alert", 124);
|
|
793
|
+
i0.ɵɵelementStart(1, "div", 125)(2, "div", 126)(3, "div", 127);
|
|
794
|
+
i0.ɵɵelement(4, "i", 128);
|
|
778
795
|
i0.ɵɵtext(5);
|
|
779
796
|
i0.ɵɵelementEnd();
|
|
780
|
-
i0.ɵɵconditionalCreate(6,
|
|
797
|
+
i0.ɵɵconditionalCreate(6, MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_6_Template, 2, 0, "div", 129)(7, MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_7_Template, 3, 0, "div", 130);
|
|
781
798
|
i0.ɵɵelementEnd();
|
|
782
|
-
i0.ɵɵelementStart(8, "div",
|
|
783
|
-
i0.ɵɵelement(10, "i",
|
|
799
|
+
i0.ɵɵelementStart(8, "div", 126)(9, "div", 127);
|
|
800
|
+
i0.ɵɵelement(10, "i", 131);
|
|
784
801
|
i0.ɵɵtext(11);
|
|
785
802
|
i0.ɵɵelementEnd();
|
|
786
|
-
i0.ɵɵconditionalCreate(12,
|
|
803
|
+
i0.ɵɵconditionalCreate(12, MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_12_Template, 2, 0, "div", 129)(13, MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_13_Template, 3, 0, "div", 130);
|
|
787
804
|
i0.ɵɵelementEnd();
|
|
788
|
-
i0.ɵɵelementStart(14, "div",
|
|
789
|
-
i0.ɵɵelement(16, "i",
|
|
805
|
+
i0.ɵɵelementStart(14, "div", 126)(15, "div", 127);
|
|
806
|
+
i0.ɵɵelement(16, "i", 132);
|
|
790
807
|
i0.ɵɵtext(17);
|
|
791
808
|
i0.ɵɵelementEnd();
|
|
792
|
-
i0.ɵɵconditionalCreate(18,
|
|
809
|
+
i0.ɵɵconditionalCreate(18, MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_18_Template, 2, 0, "div", 129)(19, MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_19_Template, 3, 0, "div", 130);
|
|
793
810
|
i0.ɵɵelementEnd()();
|
|
794
|
-
i0.ɵɵelementStart(20, "div",
|
|
795
|
-
i0.ɵɵelement(23, "i",
|
|
811
|
+
i0.ɵɵelementStart(20, "div", 133)(21, "div")(22, "div", 118);
|
|
812
|
+
i0.ɵɵelement(23, "i", 134);
|
|
796
813
|
i0.ɵɵtext(24, " Resource Limits ");
|
|
797
814
|
i0.ɵɵelementEnd();
|
|
798
|
-
i0.ɵɵelementStart(25, "div",
|
|
815
|
+
i0.ɵɵelementStart(25, "div", 135)(26, "div");
|
|
799
816
|
i0.ɵɵtext(27);
|
|
800
817
|
i0.ɵɵelementEnd();
|
|
801
818
|
i0.ɵɵelementStart(28, "div");
|
|
802
819
|
i0.ɵɵtext(29);
|
|
803
820
|
i0.ɵɵelementEnd();
|
|
804
|
-
i0.ɵɵconditionalCreate(30,
|
|
821
|
+
i0.ɵɵconditionalCreate(30, MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_30_Template, 2, 1, "div");
|
|
805
822
|
i0.ɵɵelementEnd()();
|
|
806
|
-
i0.ɵɵelementStart(31, "div")(32, "div",
|
|
807
|
-
i0.ɵɵelement(33, "i",
|
|
823
|
+
i0.ɵɵelementStart(31, "div")(32, "div", 118);
|
|
824
|
+
i0.ɵɵelement(33, "i", 136);
|
|
808
825
|
i0.ɵɵtext(34, " Additional Libraries ");
|
|
809
826
|
i0.ɵɵelementEnd();
|
|
810
|
-
i0.ɵɵconditionalCreate(35,
|
|
827
|
+
i0.ɵɵconditionalCreate(35, MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_35_Template, 2, 0, "div", 129)(36, MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Conditional_36_Template, 3, 0, "div", 137);
|
|
811
828
|
i0.ɵɵelementEnd()();
|
|
812
829
|
} if (rf & 2) {
|
|
813
830
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -833,35 +850,35 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_37_Conditional_
|
|
|
833
850
|
i0.ɵɵadvance(5);
|
|
834
851
|
i0.ɵɵconditional(ctx_r1.getRequestedLibraries().length === 0 ? 35 : 36);
|
|
835
852
|
} }
|
|
836
|
-
function
|
|
837
|
-
const
|
|
838
|
-
i0.ɵɵelementStart(0, "mj-alert",
|
|
853
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
854
|
+
const _r27 = i0.ɵɵgetCurrentView();
|
|
855
|
+
i0.ɵɵelementStart(0, "mj-alert", 121)(1, "div", 140);
|
|
839
856
|
i0.ɵɵtext(2, " Approving grants this action the permissions listed above on behalf of any user who invokes it. Review the code and permissions carefully before approving. ");
|
|
840
857
|
i0.ɵɵelementEnd();
|
|
841
|
-
i0.ɵɵelementStart(3, "div", 21)(4, "button",
|
|
842
|
-
i0.ɵɵlistener("click", function
|
|
843
|
-
i0.ɵɵelement(5, "i",
|
|
858
|
+
i0.ɵɵelementStart(3, "div", 21)(4, "button", 141);
|
|
859
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_12_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.approveCode()); });
|
|
860
|
+
i0.ɵɵelement(5, "i", 142);
|
|
844
861
|
i0.ɵɵtext(6, " Approve ");
|
|
845
862
|
i0.ɵɵelementEnd();
|
|
846
|
-
i0.ɵɵelementStart(7, "button",
|
|
847
|
-
i0.ɵɵlistener("click", function
|
|
848
|
-
i0.ɵɵelement(8, "i",
|
|
863
|
+
i0.ɵɵelementStart(7, "button", 143);
|
|
864
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_12_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.rejectCode()); });
|
|
865
|
+
i0.ɵɵelement(8, "i", 144);
|
|
849
866
|
i0.ɵɵtext(9, " Reject ");
|
|
850
867
|
i0.ɵɵelementEnd()()();
|
|
851
868
|
} }
|
|
852
|
-
function
|
|
853
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
854
|
-
i0.ɵɵtemplate(1,
|
|
855
|
-
i0.ɵɵelementStart(2, "div",
|
|
856
|
-
i0.ɵɵconditionalCreate(3,
|
|
857
|
-
i0.ɵɵelementStart(5, "div")(6, "div",
|
|
858
|
-
i0.ɵɵelement(7, "i",
|
|
869
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_39_Template(rf, ctx) { if (rf & 1) {
|
|
870
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 34);
|
|
871
|
+
i0.ɵɵtemplate(1, MJActionFormComponentExtended_Conditional_0_Conditional_39_ng_template_1_Template, 5, 1, "ng-template", 29);
|
|
872
|
+
i0.ɵɵelementStart(2, "div", 30);
|
|
873
|
+
i0.ɵɵconditionalCreate(3, MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_3_Template, 4, 0, "mj-alert", 117)(4, MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Template, 37, 11);
|
|
874
|
+
i0.ɵɵelementStart(5, "div")(6, "div", 118);
|
|
875
|
+
i0.ɵɵelement(7, "i", 119);
|
|
859
876
|
i0.ɵɵtext(8, " JavaScript Payload ");
|
|
860
877
|
i0.ɵɵelementEnd();
|
|
861
|
-
i0.ɵɵelementStart(9, "pre",
|
|
878
|
+
i0.ɵɵelementStart(9, "pre", 120)(10, "code");
|
|
862
879
|
i0.ɵɵtext(11);
|
|
863
880
|
i0.ɵɵelementEnd()()();
|
|
864
|
-
i0.ɵɵconditionalCreate(12,
|
|
881
|
+
i0.ɵɵconditionalCreate(12, MJActionFormComponentExtended_Conditional_0_Conditional_39_Conditional_12_Template, 10, 0, "mj-alert", 121);
|
|
865
882
|
i0.ɵɵelementEnd()();
|
|
866
883
|
} if (rf & 2) {
|
|
867
884
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -873,8 +890,8 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_37_Template(rf,
|
|
|
873
890
|
i0.ɵɵadvance();
|
|
874
891
|
i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.record.CodeApprovalStatus === "Pending" ? 12 : -1);
|
|
875
892
|
} }
|
|
876
|
-
function
|
|
877
|
-
i0.ɵɵelementStart(0, "span",
|
|
893
|
+
function MJActionFormComponentExtended_Conditional_0_ng_template_41_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
894
|
+
i0.ɵɵelementStart(0, "span", 146);
|
|
878
895
|
i0.ɵɵtext(1);
|
|
879
896
|
i0.ɵɵelementEnd();
|
|
880
897
|
} if (rf & 2) {
|
|
@@ -882,184 +899,184 @@ function MJActionFormComponentExtended_Conditional_0_ng_template_39_Conditional_
|
|
|
882
899
|
i0.ɵɵadvance();
|
|
883
900
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.resultCodes.length, " ");
|
|
884
901
|
} }
|
|
885
|
-
function
|
|
886
|
-
i0.ɵɵelementStart(0, "span",
|
|
887
|
-
i0.ɵɵelement(1, "i",
|
|
902
|
+
function MJActionFormComponentExtended_Conditional_0_ng_template_41_Template(rf, ctx) { if (rf & 1) {
|
|
903
|
+
i0.ɵɵelementStart(0, "span", 65);
|
|
904
|
+
i0.ɵɵelement(1, "i", 145);
|
|
888
905
|
i0.ɵɵtext(2, " Result Codes ");
|
|
889
|
-
i0.ɵɵconditionalCreate(3,
|
|
906
|
+
i0.ɵɵconditionalCreate(3, MJActionFormComponentExtended_Conditional_0_ng_template_41_Conditional_3_Template, 2, 1, "span", 146);
|
|
890
907
|
i0.ɵɵelementEnd();
|
|
891
908
|
} if (rf & 2) {
|
|
892
909
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
893
910
|
i0.ɵɵadvance(3);
|
|
894
911
|
i0.ɵɵconditional(ctx_r1.resultCodes.length > 0 ? 3 : -1);
|
|
895
912
|
} }
|
|
896
|
-
function
|
|
897
|
-
const
|
|
898
|
-
i0.ɵɵelementStart(0, "div",
|
|
899
|
-
i0.ɵɵlistener("click", function
|
|
900
|
-
i0.ɵɵelement(2, "i",
|
|
913
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_43_Template(rf, ctx) { if (rf & 1) {
|
|
914
|
+
const _r28 = i0.ɵɵgetCurrentView();
|
|
915
|
+
i0.ɵɵelementStart(0, "div", 36)(1, "button", 147);
|
|
916
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_43_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.addResultCode()); });
|
|
917
|
+
i0.ɵɵelement(2, "i", 78);
|
|
901
918
|
i0.ɵɵtext(3, " Add Result Code ");
|
|
902
919
|
i0.ɵɵelementEnd()();
|
|
903
920
|
} }
|
|
904
|
-
function
|
|
905
|
-
i0.ɵɵelementStart(0, "div",
|
|
906
|
-
i0.ɵɵelement(1, "i",
|
|
921
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_44_Template(rf, ctx) { if (rf & 1) {
|
|
922
|
+
i0.ɵɵelementStart(0, "div", 31);
|
|
923
|
+
i0.ɵɵelement(1, "i", 67);
|
|
907
924
|
i0.ɵɵtext(2, " Loading result codes... ");
|
|
908
925
|
i0.ɵɵelementEnd();
|
|
909
926
|
} }
|
|
910
|
-
function
|
|
911
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
927
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_45_Template(rf, ctx) { if (rf & 1) {
|
|
928
|
+
i0.ɵɵelement(0, "mj-empty-state", 37);
|
|
912
929
|
} if (rf & 2) {
|
|
913
930
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
914
931
|
i0.ɵɵproperty("Message", ctx_r1.EditMode && ctx_r1.record.IsSaved ? "Add result codes to define possible outcomes" : "");
|
|
915
932
|
} }
|
|
916
|
-
function
|
|
917
|
-
i0.ɵɵelementStart(0, "div",
|
|
933
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_46_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
934
|
+
i0.ɵɵelementStart(0, "div", 153);
|
|
918
935
|
i0.ɵɵtext(1);
|
|
919
936
|
i0.ɵɵelementEnd();
|
|
920
937
|
} if (rf & 2) {
|
|
921
|
-
const
|
|
938
|
+
const code_r30 = i0.ɵɵnextContext().$implicit;
|
|
922
939
|
i0.ɵɵadvance();
|
|
923
|
-
i0.ɵɵtextInterpolate(
|
|
940
|
+
i0.ɵɵtextInterpolate(code_r30.Description);
|
|
924
941
|
} }
|
|
925
|
-
function
|
|
926
|
-
const
|
|
927
|
-
i0.ɵɵelementStart(0, "div",
|
|
928
|
-
i0.ɵɵlistener("click", function
|
|
929
|
-
i0.ɵɵelement(2, "i",
|
|
942
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_46_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
943
|
+
const _r31 = i0.ɵɵgetCurrentView();
|
|
944
|
+
i0.ɵɵelementStart(0, "div", 154)(1, "button", 155);
|
|
945
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_46_For_2_Conditional_7_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r31); const code_r30 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); ctx_r1.editResultCode(code_r30); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
946
|
+
i0.ɵɵelement(2, "i", 91);
|
|
930
947
|
i0.ɵɵelementEnd();
|
|
931
|
-
i0.ɵɵelementStart(3, "button",
|
|
932
|
-
i0.ɵɵlistener("click", function
|
|
933
|
-
i0.ɵɵelement(4, "i",
|
|
948
|
+
i0.ɵɵelementStart(3, "button", 156);
|
|
949
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_46_For_2_Conditional_7_Template_button_click_3_listener($event) { i0.ɵɵrestoreView(_r31); const code_r30 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); ctx_r1.deleteResultCode(code_r30); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
950
|
+
i0.ɵɵelement(4, "i", 93);
|
|
934
951
|
i0.ɵɵelementEnd()();
|
|
935
952
|
} }
|
|
936
|
-
function
|
|
937
|
-
const
|
|
938
|
-
i0.ɵɵelementStart(0, "div",
|
|
939
|
-
i0.ɵɵlistener("click", function
|
|
940
|
-
i0.ɵɵelementStart(1, "div",
|
|
953
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_46_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
954
|
+
const _r29 = i0.ɵɵgetCurrentView();
|
|
955
|
+
i0.ɵɵelementStart(0, "div", 149);
|
|
956
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_46_For_2_Template_div_click_0_listener($event) { const code_r30 = i0.ɵɵrestoreView(_r29).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onResultCodeClick(code_r30, $event)); });
|
|
957
|
+
i0.ɵɵelementStart(1, "div", 150);
|
|
941
958
|
i0.ɵɵelement(2, "i");
|
|
942
959
|
i0.ɵɵelementEnd();
|
|
943
|
-
i0.ɵɵelementStart(3, "div",
|
|
960
|
+
i0.ɵɵelementStart(3, "div", 151)(4, "div", 152);
|
|
944
961
|
i0.ɵɵtext(5);
|
|
945
962
|
i0.ɵɵelementEnd();
|
|
946
|
-
i0.ɵɵconditionalCreate(6,
|
|
963
|
+
i0.ɵɵconditionalCreate(6, MJActionFormComponentExtended_Conditional_0_Conditional_46_For_2_Conditional_6_Template, 2, 1, "div", 153);
|
|
947
964
|
i0.ɵɵelementEnd();
|
|
948
|
-
i0.ɵɵconditionalCreate(7,
|
|
965
|
+
i0.ɵɵconditionalCreate(7, MJActionFormComponentExtended_Conditional_0_Conditional_46_For_2_Conditional_7_Template, 5, 0, "div", 154);
|
|
949
966
|
i0.ɵɵelementEnd();
|
|
950
967
|
} if (rf & 2) {
|
|
951
|
-
const
|
|
968
|
+
const code_r30 = ctx.$implicit;
|
|
952
969
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
953
|
-
i0.ɵɵclassProp("success",
|
|
970
|
+
i0.ɵɵclassProp("success", code_r30.IsSuccess)("failure", !code_r30.IsSuccess)("clickable", true);
|
|
954
971
|
i0.ɵɵadvance(2);
|
|
955
|
-
i0.ɵɵclassMap(
|
|
972
|
+
i0.ɵɵclassMap(code_r30.IsSuccess ? "fa-solid fa-check-circle" : "fa-solid fa-times-circle");
|
|
956
973
|
i0.ɵɵadvance(3);
|
|
957
|
-
i0.ɵɵtextInterpolate(
|
|
974
|
+
i0.ɵɵtextInterpolate(code_r30.ResultCode);
|
|
958
975
|
i0.ɵɵadvance();
|
|
959
|
-
i0.ɵɵconditional(
|
|
976
|
+
i0.ɵɵconditional(code_r30.Description ? 6 : -1);
|
|
960
977
|
i0.ɵɵadvance();
|
|
961
978
|
i0.ɵɵconditional(ctx_r1.EditMode ? 7 : -1);
|
|
962
979
|
} }
|
|
963
|
-
function
|
|
964
|
-
i0.ɵɵelementStart(0, "div",
|
|
965
|
-
i0.ɵɵrepeaterCreate(1,
|
|
980
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_46_Template(rf, ctx) { if (rf & 1) {
|
|
981
|
+
i0.ɵɵelementStart(0, "div", 38);
|
|
982
|
+
i0.ɵɵrepeaterCreate(1, MJActionFormComponentExtended_Conditional_0_Conditional_46_For_2_Template, 8, 11, "div", 148, _forTrack0);
|
|
966
983
|
i0.ɵɵelementEnd();
|
|
967
984
|
} if (rf & 2) {
|
|
968
985
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
969
986
|
i0.ɵɵadvance();
|
|
970
987
|
i0.ɵɵrepeater(ctx_r1.resultCodes);
|
|
971
988
|
} }
|
|
972
|
-
function
|
|
973
|
-
i0.ɵɵelementStart(0, "span",
|
|
974
|
-
i0.ɵɵelement(1, "i",
|
|
989
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_47_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
990
|
+
i0.ɵɵelementStart(0, "span", 65);
|
|
991
|
+
i0.ɵɵelement(1, "i", 158);
|
|
975
992
|
i0.ɵɵtext(2, " Execution & Monitoring ");
|
|
976
993
|
i0.ɵɵelementEnd();
|
|
977
994
|
} }
|
|
978
|
-
function
|
|
979
|
-
i0.ɵɵelementStart(0, "div",
|
|
980
|
-
i0.ɵɵelement(1, "i",
|
|
995
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_47_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
996
|
+
i0.ɵɵelementStart(0, "div", 31);
|
|
997
|
+
i0.ɵɵelement(1, "i", 67);
|
|
981
998
|
i0.ɵɵtext(2, " Loading executions... ");
|
|
982
999
|
i0.ɵɵelementEnd();
|
|
983
1000
|
} }
|
|
984
|
-
function
|
|
985
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
1001
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_47_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1002
|
+
i0.ɵɵelement(0, "mj-empty-state", 157);
|
|
986
1003
|
} }
|
|
987
|
-
function
|
|
1004
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_47_Conditional_5_For_41_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
988
1005
|
i0.ɵɵtext(0);
|
|
989
1006
|
} if (rf & 2) {
|
|
990
|
-
const
|
|
1007
|
+
const execution_r33 = i0.ɵɵnextContext().$implicit;
|
|
991
1008
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
992
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(ctx_r1.getExecutionDuration(
|
|
1009
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(ctx_r1.getExecutionDuration(execution_r33)), " ");
|
|
993
1010
|
} }
|
|
994
|
-
function
|
|
995
|
-
i0.ɵɵelementStart(0, "span",
|
|
1011
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_47_Conditional_5_For_41_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1012
|
+
i0.ɵɵelementStart(0, "span", 173);
|
|
996
1013
|
i0.ɵɵtext(1, "Running...");
|
|
997
1014
|
i0.ɵɵelementEnd();
|
|
998
1015
|
} }
|
|
999
|
-
function
|
|
1000
|
-
const
|
|
1001
|
-
i0.ɵɵelementStart(0, "tr",
|
|
1016
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_47_Conditional_5_For_41_Template(rf, ctx) { if (rf & 1) {
|
|
1017
|
+
const _r32 = i0.ɵɵgetCurrentView();
|
|
1018
|
+
i0.ɵɵelementStart(0, "tr", 172)(1, "td");
|
|
1002
1019
|
i0.ɵɵtext(2);
|
|
1003
1020
|
i0.ɵɵpipe(3, "date");
|
|
1004
1021
|
i0.ɵɵelementEnd();
|
|
1005
1022
|
i0.ɵɵelementStart(4, "td");
|
|
1006
|
-
i0.ɵɵconditionalCreate(5,
|
|
1023
|
+
i0.ɵɵconditionalCreate(5, MJActionFormComponentExtended_Conditional_0_Conditional_47_Conditional_5_For_41_Conditional_5_Template, 1, 1)(6, MJActionFormComponentExtended_Conditional_0_Conditional_47_Conditional_5_For_41_Conditional_6_Template, 2, 0, "span", 173);
|
|
1007
1024
|
i0.ɵɵelementEnd();
|
|
1008
1025
|
i0.ɵɵelementStart(7, "td");
|
|
1009
1026
|
i0.ɵɵtext(8);
|
|
1010
1027
|
i0.ɵɵelementEnd();
|
|
1011
|
-
i0.ɵɵelementStart(9, "td")(10, "span",
|
|
1028
|
+
i0.ɵɵelementStart(9, "td")(10, "span", 152);
|
|
1012
1029
|
i0.ɵɵtext(11);
|
|
1013
1030
|
i0.ɵɵelementEnd()();
|
|
1014
|
-
i0.ɵɵelementStart(12, "td")(13, "button",
|
|
1015
|
-
i0.ɵɵlistener("click", function
|
|
1016
|
-
i0.ɵɵelement(14, "i",
|
|
1031
|
+
i0.ɵɵelementStart(12, "td")(13, "button", 77);
|
|
1032
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_47_Conditional_5_For_41_Template_button_click_13_listener() { const execution_r33 = i0.ɵɵrestoreView(_r32).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToExecution(execution_r33.ID)); });
|
|
1033
|
+
i0.ɵɵelement(14, "i", 174);
|
|
1017
1034
|
i0.ɵɵelementEnd()()();
|
|
1018
1035
|
} if (rf & 2) {
|
|
1019
|
-
const
|
|
1036
|
+
const execution_r33 = ctx.$implicit;
|
|
1020
1037
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1021
|
-
i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(
|
|
1038
|
+
i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(execution_r33));
|
|
1022
1039
|
i0.ɵɵadvance(2);
|
|
1023
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(3, 10,
|
|
1040
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(3, 10, execution_r33.StartedAt, "short"));
|
|
1024
1041
|
i0.ɵɵadvance(3);
|
|
1025
|
-
i0.ɵɵconditional(
|
|
1042
|
+
i0.ɵɵconditional(execution_r33.EndedAt ? 5 : 6);
|
|
1026
1043
|
i0.ɵɵadvance(3);
|
|
1027
|
-
i0.ɵɵtextInterpolate(
|
|
1044
|
+
i0.ɵɵtextInterpolate(execution_r33.User);
|
|
1028
1045
|
i0.ɵɵadvance(2);
|
|
1029
|
-
i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(
|
|
1046
|
+
i0.ɵɵclassProp("success", ctx_r1.isExecutionSuccess(execution_r33))("failure", !ctx_r1.isExecutionSuccess(execution_r33));
|
|
1030
1047
|
i0.ɵɵadvance();
|
|
1031
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1048
|
+
i0.ɵɵtextInterpolate1(" ", execution_r33.ResultCode, " ");
|
|
1032
1049
|
} }
|
|
1033
|
-
function
|
|
1034
|
-
i0.ɵɵelementStart(0, "div",
|
|
1035
|
-
i0.ɵɵelement(2, "i",
|
|
1036
|
-
i0.ɵɵelementStart(3, "div",
|
|
1050
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_47_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1051
|
+
i0.ɵɵelementStart(0, "div", 159)(1, "div", 160);
|
|
1052
|
+
i0.ɵɵelement(2, "i", 161);
|
|
1053
|
+
i0.ɵɵelementStart(3, "div", 162)(4, "div", 163);
|
|
1037
1054
|
i0.ɵɵtext(5, "Avg Duration");
|
|
1038
1055
|
i0.ɵɵelementEnd();
|
|
1039
|
-
i0.ɵɵelementStart(6, "div",
|
|
1056
|
+
i0.ɵɵelementStart(6, "div", 164);
|
|
1040
1057
|
i0.ɵɵtext(7);
|
|
1041
1058
|
i0.ɵɵelementEnd()()();
|
|
1042
|
-
i0.ɵɵelementStart(8, "div",
|
|
1043
|
-
i0.ɵɵelement(9, "i",
|
|
1044
|
-
i0.ɵɵelementStart(10, "div",
|
|
1059
|
+
i0.ɵɵelementStart(8, "div", 160);
|
|
1060
|
+
i0.ɵɵelement(9, "i", 165);
|
|
1061
|
+
i0.ɵɵelementStart(10, "div", 162)(11, "div", 163);
|
|
1045
1062
|
i0.ɵɵtext(12, "Success Rate");
|
|
1046
1063
|
i0.ɵɵelementEnd();
|
|
1047
|
-
i0.ɵɵelementStart(13, "div",
|
|
1064
|
+
i0.ɵɵelementStart(13, "div", 166);
|
|
1048
1065
|
i0.ɵɵtext(14);
|
|
1049
1066
|
i0.ɵɵelementEnd()()();
|
|
1050
|
-
i0.ɵɵelementStart(15, "div",
|
|
1051
|
-
i0.ɵɵelement(16, "i",
|
|
1052
|
-
i0.ɵɵelementStart(17, "div",
|
|
1067
|
+
i0.ɵɵelementStart(15, "div", 160);
|
|
1068
|
+
i0.ɵɵelement(16, "i", 167);
|
|
1069
|
+
i0.ɵɵelementStart(17, "div", 162)(18, "div", 163);
|
|
1053
1070
|
i0.ɵɵtext(19, "Total Runs");
|
|
1054
1071
|
i0.ɵɵelementEnd();
|
|
1055
|
-
i0.ɵɵelementStart(20, "div",
|
|
1072
|
+
i0.ɵɵelementStart(20, "div", 164);
|
|
1056
1073
|
i0.ɵɵtext(21);
|
|
1057
1074
|
i0.ɵɵelementEnd()()()();
|
|
1058
|
-
i0.ɵɵelementStart(22, "h3",
|
|
1059
|
-
i0.ɵɵelement(23, "i",
|
|
1075
|
+
i0.ɵɵelementStart(22, "h3", 168);
|
|
1076
|
+
i0.ɵɵelement(23, "i", 169);
|
|
1060
1077
|
i0.ɵɵtext(24, " Recent Executions");
|
|
1061
1078
|
i0.ɵɵelementEnd();
|
|
1062
|
-
i0.ɵɵelementStart(25, "div",
|
|
1079
|
+
i0.ɵɵelementStart(25, "div", 170)(26, "table")(27, "thead")(28, "tr")(29, "th");
|
|
1063
1080
|
i0.ɵɵtext(30, "Started");
|
|
1064
1081
|
i0.ɵɵelementEnd();
|
|
1065
1082
|
i0.ɵɵelementStart(31, "th");
|
|
@@ -1075,7 +1092,7 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_45_Conditional_
|
|
|
1075
1092
|
i0.ɵɵtext(38, "Actions");
|
|
1076
1093
|
i0.ɵɵelementEnd()()();
|
|
1077
1094
|
i0.ɵɵelementStart(39, "tbody");
|
|
1078
|
-
i0.ɵɵrepeaterCreate(40,
|
|
1095
|
+
i0.ɵɵrepeaterCreate(40, MJActionFormComponentExtended_Conditional_0_Conditional_47_Conditional_5_For_41_Template, 15, 13, "tr", 171, _forTrack0);
|
|
1079
1096
|
i0.ɵɵelementEnd()()();
|
|
1080
1097
|
} if (rf & 2) {
|
|
1081
1098
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -1092,11 +1109,11 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_45_Conditional_
|
|
|
1092
1109
|
i0.ɵɵadvance(19);
|
|
1093
1110
|
i0.ɵɵrepeater(ctx_r1.recentExecutions);
|
|
1094
1111
|
} }
|
|
1095
|
-
function
|
|
1096
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
1097
|
-
i0.ɵɵtemplate(1,
|
|
1098
|
-
i0.ɵɵelementStart(2, "div",
|
|
1099
|
-
i0.ɵɵconditionalCreate(3,
|
|
1112
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_47_Template(rf, ctx) { if (rf & 1) {
|
|
1113
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 39);
|
|
1114
|
+
i0.ɵɵtemplate(1, MJActionFormComponentExtended_Conditional_0_Conditional_47_ng_template_1_Template, 3, 0, "ng-template", 29);
|
|
1115
|
+
i0.ɵɵelementStart(2, "div", 30);
|
|
1116
|
+
i0.ɵɵconditionalCreate(3, MJActionFormComponentExtended_Conditional_0_Conditional_47_Conditional_3_Template, 3, 0, "div", 31)(4, MJActionFormComponentExtended_Conditional_0_Conditional_47_Conditional_4_Template, 1, 0, "mj-empty-state", 157)(5, MJActionFormComponentExtended_Conditional_0_Conditional_47_Conditional_5_Template, 42, 7);
|
|
1100
1117
|
i0.ɵɵelementEnd()();
|
|
1101
1118
|
} if (rf & 2) {
|
|
1102
1119
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1104,100 +1121,100 @@ function MJActionFormComponentExtended_Conditional_0_Conditional_45_Template(rf,
|
|
|
1104
1121
|
i0.ɵɵadvance(3);
|
|
1105
1122
|
i0.ɵɵconditional(ctx_r1.isLoadingExecutions ? 3 : ctx_r1.recentExecutions.length === 0 ? 4 : 5);
|
|
1106
1123
|
} }
|
|
1107
|
-
function
|
|
1108
|
-
i0.ɵɵelementStart(0, "span",
|
|
1109
|
-
i0.ɵɵelement(1, "i",
|
|
1124
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_48_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1125
|
+
i0.ɵɵelementStart(0, "span", 65);
|
|
1126
|
+
i0.ɵɵelement(1, "i", 186);
|
|
1110
1127
|
i0.ɵɵtext(2, " Related Configuration ");
|
|
1111
1128
|
i0.ɵɵelementEnd();
|
|
1112
1129
|
} }
|
|
1113
|
-
function
|
|
1114
|
-
i0.ɵɵelementStart(0, "div",
|
|
1115
|
-
i0.ɵɵelement(1, "i",
|
|
1130
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_48_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
1131
|
+
i0.ɵɵelementStart(0, "div", 31);
|
|
1132
|
+
i0.ɵɵelement(1, "i", 67);
|
|
1116
1133
|
i0.ɵɵtext(2, " Loading libraries... ");
|
|
1117
1134
|
i0.ɵɵelementEnd();
|
|
1118
1135
|
} }
|
|
1119
|
-
function
|
|
1120
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
1136
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_48_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
1137
|
+
i0.ɵɵelement(0, "mj-empty-state", 177);
|
|
1121
1138
|
} }
|
|
1122
|
-
function
|
|
1123
|
-
i0.ɵɵelementStart(0, "div",
|
|
1139
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_48_Conditional_9_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1140
|
+
i0.ɵɵelementStart(0, "div", 191);
|
|
1124
1141
|
i0.ɵɵtext(1);
|
|
1125
1142
|
i0.ɵɵelementEnd();
|
|
1126
1143
|
} if (rf & 2) {
|
|
1127
|
-
const ɵ$
|
|
1144
|
+
const ɵ$index_787_r36 = i0.ɵɵnextContext().$index;
|
|
1128
1145
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1129
1146
|
i0.ɵɵadvance();
|
|
1130
|
-
i0.ɵɵtextInterpolate(ctx_r1.actionLibraries[ɵ$
|
|
1147
|
+
i0.ɵɵtextInterpolate(ctx_r1.actionLibraries[ɵ$index_787_r36].ItemsUsed);
|
|
1131
1148
|
} }
|
|
1132
|
-
function
|
|
1133
|
-
const
|
|
1134
|
-
i0.ɵɵelementStart(0, "div",
|
|
1135
|
-
i0.ɵɵlistener("click", function
|
|
1136
|
-
i0.ɵɵelement(1, "i",
|
|
1137
|
-
i0.ɵɵelementStart(2, "div",
|
|
1149
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_48_Conditional_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1150
|
+
const _r34 = i0.ɵɵgetCurrentView();
|
|
1151
|
+
i0.ɵɵelementStart(0, "div", 188);
|
|
1152
|
+
i0.ɵɵlistener("click", function MJActionFormComponentExtended_Conditional_0_Conditional_48_Conditional_9_For_2_Template_div_click_0_listener() { const lib_r35 = i0.ɵɵrestoreView(_r34).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToLibrary(lib_r35.ID)); });
|
|
1153
|
+
i0.ɵɵelement(1, "i", 176);
|
|
1154
|
+
i0.ɵɵelementStart(2, "div", 189)(3, "div", 190);
|
|
1138
1155
|
i0.ɵɵtext(4);
|
|
1139
1156
|
i0.ɵɵelementEnd();
|
|
1140
|
-
i0.ɵɵconditionalCreate(5,
|
|
1157
|
+
i0.ɵɵconditionalCreate(5, MJActionFormComponentExtended_Conditional_0_Conditional_48_Conditional_9_For_2_Conditional_5_Template, 2, 1, "div", 191);
|
|
1141
1158
|
i0.ɵɵelementEnd();
|
|
1142
|
-
i0.ɵɵelement(6, "i",
|
|
1159
|
+
i0.ɵɵelement(6, "i", 174);
|
|
1143
1160
|
i0.ɵɵelementEnd();
|
|
1144
1161
|
} if (rf & 2) {
|
|
1145
|
-
const
|
|
1146
|
-
const ɵ$
|
|
1162
|
+
const lib_r35 = ctx.$implicit;
|
|
1163
|
+
const ɵ$index_787_r36 = ctx.$index;
|
|
1147
1164
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1148
1165
|
i0.ɵɵadvance(4);
|
|
1149
|
-
i0.ɵɵtextInterpolate(
|
|
1166
|
+
i0.ɵɵtextInterpolate(lib_r35.Name);
|
|
1150
1167
|
i0.ɵɵadvance();
|
|
1151
|
-
i0.ɵɵconditional(ctx_r1.actionLibraries[ɵ$
|
|
1168
|
+
i0.ɵɵconditional(ctx_r1.actionLibraries[ɵ$index_787_r36].ItemsUsed ? 5 : -1);
|
|
1152
1169
|
} }
|
|
1153
|
-
function
|
|
1154
|
-
i0.ɵɵelementStart(0, "div",
|
|
1155
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1170
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_48_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1171
|
+
i0.ɵɵelementStart(0, "div", 178);
|
|
1172
|
+
i0.ɵɵrepeaterCreate(1, MJActionFormComponentExtended_Conditional_0_Conditional_48_Conditional_9_For_2_Template, 7, 2, "div", 187, _forTrack0);
|
|
1156
1173
|
i0.ɵɵelementEnd();
|
|
1157
1174
|
} if (rf & 2) {
|
|
1158
1175
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1159
1176
|
i0.ɵɵadvance();
|
|
1160
1177
|
i0.ɵɵrepeater(ctx_r1.libraries);
|
|
1161
1178
|
} }
|
|
1162
|
-
function
|
|
1163
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
1164
|
-
i0.ɵɵtemplate(1,
|
|
1165
|
-
i0.ɵɵelementStart(2, "div",
|
|
1166
|
-
i0.ɵɵelement(5, "i",
|
|
1179
|
+
function MJActionFormComponentExtended_Conditional_0_Conditional_48_Template(rf, ctx) { if (rf & 1) {
|
|
1180
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 40);
|
|
1181
|
+
i0.ɵɵtemplate(1, MJActionFormComponentExtended_Conditional_0_Conditional_48_ng_template_1_Template, 3, 0, "ng-template", 29);
|
|
1182
|
+
i0.ɵɵelementStart(2, "div", 30)(3, "div", 175)(4, "h3");
|
|
1183
|
+
i0.ɵɵelement(5, "i", 176);
|
|
1167
1184
|
i0.ɵɵtext(6, " Libraries");
|
|
1168
1185
|
i0.ɵɵelementEnd();
|
|
1169
|
-
i0.ɵɵconditionalCreate(7,
|
|
1186
|
+
i0.ɵɵconditionalCreate(7, MJActionFormComponentExtended_Conditional_0_Conditional_48_Conditional_7_Template, 3, 0, "div", 31)(8, MJActionFormComponentExtended_Conditional_0_Conditional_48_Conditional_8_Template, 1, 0, "mj-empty-state", 177)(9, MJActionFormComponentExtended_Conditional_0_Conditional_48_Conditional_9_Template, 3, 0, "div", 178);
|
|
1170
1187
|
i0.ɵɵelementEnd();
|
|
1171
|
-
i0.ɵɵelementStart(10, "div",
|
|
1172
|
-
i0.ɵɵelement(12, "i",
|
|
1188
|
+
i0.ɵɵelementStart(10, "div", 179)(11, "div", 180);
|
|
1189
|
+
i0.ɵɵelement(12, "i", 181);
|
|
1173
1190
|
i0.ɵɵelementStart(13, "span");
|
|
1174
1191
|
i0.ɵɵtext(14, "Authorizations");
|
|
1175
1192
|
i0.ɵɵelementEnd();
|
|
1176
|
-
i0.ɵɵelementStart(15, "span",
|
|
1193
|
+
i0.ɵɵelementStart(15, "span", 182);
|
|
1177
1194
|
i0.ɵɵtext(16, "View");
|
|
1178
1195
|
i0.ɵɵelementEnd()();
|
|
1179
|
-
i0.ɵɵelementStart(17, "div",
|
|
1180
|
-
i0.ɵɵelement(18, "i",
|
|
1196
|
+
i0.ɵɵelementStart(17, "div", 180);
|
|
1197
|
+
i0.ɵɵelement(18, "i", 183);
|
|
1181
1198
|
i0.ɵɵelementStart(19, "span");
|
|
1182
1199
|
i0.ɵɵtext(20, "Contexts");
|
|
1183
1200
|
i0.ɵɵelementEnd();
|
|
1184
|
-
i0.ɵɵelementStart(21, "span",
|
|
1201
|
+
i0.ɵɵelementStart(21, "span", 182);
|
|
1185
1202
|
i0.ɵɵtext(22, "View");
|
|
1186
1203
|
i0.ɵɵelementEnd()();
|
|
1187
|
-
i0.ɵɵelementStart(23, "div",
|
|
1188
|
-
i0.ɵɵelement(24, "i",
|
|
1204
|
+
i0.ɵɵelementStart(23, "div", 180);
|
|
1205
|
+
i0.ɵɵelement(24, "i", 184);
|
|
1189
1206
|
i0.ɵɵelementStart(25, "span");
|
|
1190
1207
|
i0.ɵɵtext(26, "Scheduled Actions");
|
|
1191
1208
|
i0.ɵɵelementEnd();
|
|
1192
|
-
i0.ɵɵelementStart(27, "span",
|
|
1209
|
+
i0.ɵɵelementStart(27, "span", 182);
|
|
1193
1210
|
i0.ɵɵtext(28, "View");
|
|
1194
1211
|
i0.ɵɵelementEnd()();
|
|
1195
|
-
i0.ɵɵelementStart(29, "div",
|
|
1196
|
-
i0.ɵɵelement(30, "i",
|
|
1212
|
+
i0.ɵɵelementStart(29, "div", 180);
|
|
1213
|
+
i0.ɵɵelement(30, "i", 185);
|
|
1197
1214
|
i0.ɵɵelementStart(31, "span");
|
|
1198
1215
|
i0.ɵɵtext(32, "Entity Actions");
|
|
1199
1216
|
i0.ɵɵelementEnd();
|
|
1200
|
-
i0.ɵɵelementStart(33, "span",
|
|
1217
|
+
i0.ɵɵelementStart(33, "span", 182);
|
|
1201
1218
|
i0.ɵɵtext(34, "View");
|
|
1202
1219
|
i0.ɵɵelementEnd()()()()();
|
|
1203
1220
|
} if (rf & 2) {
|
|
@@ -1234,27 +1251,33 @@ function MJActionFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf
|
|
|
1234
1251
|
i0.ɵɵconditionalCreate(27, MJActionFormComponentExtended_Conditional_0_Conditional_27_Template, 3, 0, "button", 23);
|
|
1235
1252
|
i0.ɵɵelementEnd();
|
|
1236
1253
|
i0.ɵɵconditionalCreate(28, MJActionFormComponentExtended_Conditional_0_Conditional_28_Template, 2, 0, "div", 24);
|
|
1237
|
-
i0.ɵɵelementEnd()()();
|
|
1238
|
-
i0.ɵɵelementStart(29, "div", 25)(30, "mj-accordion-panel", 26);
|
|
1239
|
-
i0.ɵɵtemplate(31, MJActionFormComponentExtended_Conditional_0_ng_template_31_Template, 4, 1, "ng-template", 27);
|
|
1240
|
-
i0.ɵɵelementStart(32, "div", 28);
|
|
1241
|
-
i0.ɵɵconditionalCreate(33, MJActionFormComponentExtended_Conditional_0_Conditional_33_Template, 3, 0, "div", 29)(34, MJActionFormComponentExtended_Conditional_0_Conditional_34_Template, 1, 1, "mj-empty-state", 30)(35, MJActionFormComponentExtended_Conditional_0_Conditional_35_Template, 16, 6);
|
|
1242
1254
|
i0.ɵɵelementEnd()();
|
|
1243
|
-
i0.ɵɵconditionalCreate(
|
|
1244
|
-
i0.ɵɵ
|
|
1245
|
-
i0.ɵɵelementStart(
|
|
1246
|
-
i0.ɵɵ
|
|
1247
|
-
i0.ɵɵelementStart(
|
|
1248
|
-
i0.ɵɵ
|
|
1249
|
-
i0.ɵɵ
|
|
1255
|
+
i0.ɵɵconditionalCreate(29, MJActionFormComponentExtended_Conditional_0_Conditional_29_Template, 4, 2, "button", 25);
|
|
1256
|
+
i0.ɵɵelementEnd();
|
|
1257
|
+
i0.ɵɵelementStart(30, "div", 26)(31, "mj-accordion-sections", 27);
|
|
1258
|
+
i0.ɵɵlistener("ActiveKeyChange", function MJActionFormComponentExtended_Conditional_0_Template_mj_accordion_sections_ActiveKeyChange_31_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Phone.Pick($event)); });
|
|
1259
|
+
i0.ɵɵelementStart(32, "mj-accordion-panel", 28);
|
|
1260
|
+
i0.ɵɵtemplate(33, MJActionFormComponentExtended_Conditional_0_ng_template_33_Template, 4, 1, "ng-template", 29);
|
|
1261
|
+
i0.ɵɵelementStart(34, "div", 30);
|
|
1262
|
+
i0.ɵɵconditionalCreate(35, MJActionFormComponentExtended_Conditional_0_Conditional_35_Template, 3, 0, "div", 31)(36, MJActionFormComponentExtended_Conditional_0_Conditional_36_Template, 1, 1, "mj-empty-state", 32)(37, MJActionFormComponentExtended_Conditional_0_Conditional_37_Template, 16, 6);
|
|
1250
1263
|
i0.ɵɵelementEnd()();
|
|
1251
|
-
i0.ɵɵconditionalCreate(
|
|
1252
|
-
i0.ɵɵconditionalCreate(
|
|
1253
|
-
i0.ɵɵ
|
|
1264
|
+
i0.ɵɵconditionalCreate(38, MJActionFormComponentExtended_Conditional_0_Conditional_38_Template, 17, 9, "mj-accordion-panel", 33);
|
|
1265
|
+
i0.ɵɵconditionalCreate(39, MJActionFormComponentExtended_Conditional_0_Conditional_39_Template, 13, 4, "mj-accordion-panel", 34);
|
|
1266
|
+
i0.ɵɵelementStart(40, "mj-accordion-panel", 35);
|
|
1267
|
+
i0.ɵɵtemplate(41, MJActionFormComponentExtended_Conditional_0_ng_template_41_Template, 4, 1, "ng-template", 29);
|
|
1268
|
+
i0.ɵɵelementStart(42, "div", 30);
|
|
1269
|
+
i0.ɵɵconditionalCreate(43, MJActionFormComponentExtended_Conditional_0_Conditional_43_Template, 4, 0, "div", 36);
|
|
1270
|
+
i0.ɵɵconditionalCreate(44, MJActionFormComponentExtended_Conditional_0_Conditional_44_Template, 3, 0, "div", 31)(45, MJActionFormComponentExtended_Conditional_0_Conditional_45_Template, 1, 1, "mj-empty-state", 37)(46, MJActionFormComponentExtended_Conditional_0_Conditional_46_Template, 3, 0, "div", 38);
|
|
1271
|
+
i0.ɵɵelementEnd()();
|
|
1272
|
+
i0.ɵɵconditionalCreate(47, MJActionFormComponentExtended_Conditional_0_Conditional_47_Template, 6, 2, "mj-accordion-panel", 39);
|
|
1273
|
+
i0.ɵɵconditionalCreate(48, MJActionFormComponentExtended_Conditional_0_Conditional_48_Template, 35, 2, "mj-accordion-panel", 40);
|
|
1274
|
+
i0.ɵɵelementEnd()()()()();
|
|
1254
1275
|
} if (rf & 2) {
|
|
1255
1276
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
1256
1277
|
i0.ɵɵproperty("Record", ctx_r1.record)("FormComponent", ctx_r1)("ToolbarConfig", ctx_r1.toolbarConfig)("WidthMode", "full-width");
|
|
1257
|
-
i0.ɵɵadvance(
|
|
1278
|
+
i0.ɵɵadvance(4);
|
|
1279
|
+
i0.ɵɵclassProp("hero-view", !ctx_r1.EditMode)("hero-compact", !ctx_r1.EditMode && !ctx_r1.HeroDetailsOpen);
|
|
1280
|
+
i0.ɵɵadvance(4);
|
|
1258
1281
|
i0.ɵɵclassMap(ctx_r1.getActionIcon());
|
|
1259
1282
|
i0.ɵɵstyleProp("color", ctx_r1.getTypeColor());
|
|
1260
1283
|
i0.ɵɵadvance();
|
|
@@ -1277,28 +1300,36 @@ function MJActionFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf
|
|
|
1277
1300
|
i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.record.Type === "Generated" ? 27 : -1);
|
|
1278
1301
|
i0.ɵɵadvance();
|
|
1279
1302
|
i0.ɵɵconditional(!ctx_r1.EditMode && ctx_r1.record.Status !== "Active" && ctx_r1.record.ID ? 28 : -1);
|
|
1303
|
+
i0.ɵɵadvance();
|
|
1304
|
+
i0.ɵɵconditional(!ctx_r1.EditMode && ctx_r1.HeroSummary ? 29 : -1);
|
|
1280
1305
|
i0.ɵɵadvance(2);
|
|
1281
|
-
i0.ɵɵproperty("
|
|
1306
|
+
i0.ɵɵproperty("Enabled", ctx_r1.Phone.IsPhone)("ActiveKey", ctx_r1.Phone.Section);
|
|
1307
|
+
i0.ɵɵadvance();
|
|
1308
|
+
i0.ɵɵproperty("SectionCount", ctx_r1.ActionParams.length)("Expanded", true);
|
|
1282
1309
|
i0.ɵɵadvance(3);
|
|
1283
|
-
i0.ɵɵconditional(ctx_r1.isLoadingParams ?
|
|
1310
|
+
i0.ɵɵconditional(ctx_r1.isLoadingParams ? 35 : ctx_r1.actionParams.length === 0 ? 36 : 37);
|
|
1284
1311
|
i0.ɵɵadvance(3);
|
|
1285
|
-
i0.ɵɵconditional(ctx_r1.record.Type === "Generated" ?
|
|
1312
|
+
i0.ɵɵconditional(ctx_r1.record.Type === "Generated" ? 38 : -1);
|
|
1286
1313
|
i0.ɵɵadvance();
|
|
1287
|
-
i0.ɵɵconditional(ctx_r1.isRuntimeAction ?
|
|
1314
|
+
i0.ɵɵconditional(ctx_r1.isRuntimeAction ? 39 : -1);
|
|
1288
1315
|
i0.ɵɵadvance();
|
|
1289
|
-
i0.ɵɵproperty("Expanded", ctx_r1.expandedSections.resultCodes);
|
|
1316
|
+
i0.ɵɵproperty("SectionCount", ctx_r1.ResultCodes.length)("Expanded", ctx_r1.expandedSections.resultCodes);
|
|
1290
1317
|
i0.ɵɵadvance(3);
|
|
1291
|
-
i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.record.IsSaved ?
|
|
1318
|
+
i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.record.IsSaved ? 43 : -1);
|
|
1292
1319
|
i0.ɵɵadvance();
|
|
1293
|
-
i0.ɵɵconditional(ctx_r1.isLoadingResultCodes ?
|
|
1320
|
+
i0.ɵɵconditional(ctx_r1.isLoadingResultCodes ? 44 : ctx_r1.resultCodes.length === 0 ? 45 : 46);
|
|
1294
1321
|
i0.ɵɵadvance(3);
|
|
1295
|
-
i0.ɵɵconditional(ctx_r1.record.IsSaved ?
|
|
1322
|
+
i0.ɵɵconditional(ctx_r1.record.IsSaved ? 47 : -1);
|
|
1296
1323
|
i0.ɵɵadvance();
|
|
1297
|
-
i0.ɵɵconditional(ctx_r1.record.IsSaved ?
|
|
1324
|
+
i0.ɵɵconditional(ctx_r1.record.IsSaved ? 48 : -1);
|
|
1298
1325
|
} }
|
|
1299
1326
|
let MJActionFormComponentExtended = class MJActionFormComponentExtended extends MJActionFormComponent {
|
|
1300
1327
|
constructor() {
|
|
1301
1328
|
super(...arguments);
|
|
1329
|
+
/** Phone width shows the stacked accordions as sections behind one picker (design call 7A). */
|
|
1330
|
+
this.Phone = new PhoneSectionsState(() => this.cdr.markForCheck());
|
|
1331
|
+
/** Phone hero (6A): whether the summary line is expanded to show the rest of the hero. */
|
|
1332
|
+
this.HeroDetailsOpen = false;
|
|
1302
1333
|
// This form has a fully custom layout (header panel + accordion
|
|
1303
1334
|
// sections we manage ourselves), so the toolbar's section-search,
|
|
1304
1335
|
// expand/collapse, manage-sections, and width-toggle widgets don't
|
|
@@ -1349,6 +1380,24 @@ let MJActionFormComponentExtended = class MJActionFormComponentExtended extends
|
|
|
1349
1380
|
this.viewContainerRef = inject(ViewContainerRef);
|
|
1350
1381
|
this.sharedService = inject(SharedService);
|
|
1351
1382
|
}
|
|
1383
|
+
ngOnDestroy() {
|
|
1384
|
+
super.ngOnDestroy();
|
|
1385
|
+
this.Phone.Stop();
|
|
1386
|
+
}
|
|
1387
|
+
/** Toggles the phone hero between its compact identity row and the full hero. */
|
|
1388
|
+
ToggleHeroDetails() {
|
|
1389
|
+
this.HeroDetailsOpen = !this.HeroDetailsOpen;
|
|
1390
|
+
this.cdr.markForCheck();
|
|
1391
|
+
}
|
|
1392
|
+
/** The phone hero's one-line summary of what the compact hero leaves out. */
|
|
1393
|
+
get HeroSummary() {
|
|
1394
|
+
return JoinHeroSummary([
|
|
1395
|
+
this.category?.Name,
|
|
1396
|
+
this.record.Type,
|
|
1397
|
+
CountLabel(this.ActionParams.length, 'param'),
|
|
1398
|
+
this.HasCodeApproval && this.record.CodeApprovalStatus ? `Code ${this.record.CodeApprovalStatus.toLowerCase()}` : null,
|
|
1399
|
+
]);
|
|
1400
|
+
}
|
|
1352
1401
|
/** @deprecated Use {@link ToolbarConfig}. */
|
|
1353
1402
|
get toolbarConfig() {
|
|
1354
1403
|
return this.ToolbarConfig;
|
|
@@ -2561,8 +2610,8 @@ let MJActionFormComponentExtended = class MJActionFormComponentExtended extends
|
|
|
2561
2610
|
return this.DeleteParameter(param);
|
|
2562
2611
|
}
|
|
2563
2612
|
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJActionFormComponentExtended_BaseFactory; return function MJActionFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJActionFormComponentExtended_BaseFactory || (ɵMJActionFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJActionFormComponentExtended)))(__ngFactoryType__ || MJActionFormComponentExtended); }; })(); }
|
|
2564
|
-
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"], ["Size", "compact", "Icon", "fa-solid fa-sliders", "Title", "No parameters defined", 3, "Message"], [2, "display", "flex", "justify-content", "flex-end", "margin-bottom", "12px"], ["Size", "compact", "Icon", "fa-solid fa-flag-checkered", "Title", "No result codes defined", 3, "Message"], [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, "params-section"], [1, "params-header"], [1, "fa-solid", "fa-sign-in-alt"], ["mjButton", "", "variant", "flat", "size", "sm"], ["Size", "compact", "Icon", "fa-solid fa-inbox", "Title", "No input parameters defined"], [1, "params-grid"], [1, "params-section", 2, "margin-top", "24px"], [1, "fa-solid", "fa-sign-out-alt"], ["Size", "compact", "Icon", "fa-solid fa-inbox", "Title", "No output parameters defined"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [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"], ["Variant", "error"], [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"], ["Variant", "warning", "Title", "Approval required before this Runtime action can execute.", 1, "approval-required-alert"], [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"], ["Variant", "warning", "Title", "Wildcard permissions enabled"], [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, "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, "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, "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"], ["Size", "compact", "Icon", "fa-solid fa-chart-line", "Title", "No executions yet"], [1, "fa-solid", "fa-chart-line", 2, "color", "var(--mj-text-muted)"], [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"], ["Size", "compact", "Icon", "fa-solid fa-book", "Title", "No libraries configured"], [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) {
|
|
2565
|
-
i0.ɵɵconditionalCreate(0, MJActionFormComponentExtended_Conditional_0_Template,
|
|
2613
|
+
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", "phone-hero", 2, "flex-shrink", "0", "padding", "20px", "background", "var(--mj-bg-surface-card)", "border-bottom", "2px solid var(--mj-border-default)"], [1, "hero-header-row"], [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"], [1, "phone-hero-detail", 2, "margin", "0 0 12px 0", "color", "var(--mj-text-muted)", "font-size", "0.9em", "line-height", "1.4"], [1, "quick-config", "phone-hero-detail", 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", "gap", "8px"], ["mjButton", "", "variant", "primary", "size", "lg", "title", "Open Run Harness", 1, "phone-hero-run", 3, "disabled"], ["mjButton", "", "variant", "outline", "size", "md", "title", "Regenerate Code"], [2, "font-size", "0.75em", "color", "var(--mj-status-error)", "text-align", "right"], ["type", "button", 1, "phone-hero-summary"], [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"], [3, "ActiveKeyChange", "Enabled", "ActiveKey"], ["SectionKey", "parameters", "SectionTitle", "Parameters", "SectionIcon", "fa-solid fa-sliders", 2, "margin-bottom", "12px", 3, "SectionCount", "Expanded"], ["mjAccordionTitle", ""], [1, "phone-flush-x", 2, "padding", "16px"], [1, "loading-state"], ["Size", "compact", "Icon", "fa-solid fa-sliders", "Title", "No parameters defined", 3, "Message"], ["SectionKey", "code", "SectionTitle", "Code & Generation", "SectionIcon", "fa-solid fa-code", 2, "margin-bottom", "12px", 3, "Expanded"], ["SectionKey", "runtime", "SectionTitle", "Runtime Configuration & Permissions", "SectionIcon", "fa-solid fa-wand-magic-sparkles", 2, "margin-bottom", "12px", 3, "Expanded"], ["SectionKey", "result-codes", "SectionTitle", "Result Codes", "SectionIcon", "fa-solid fa-flag-checkered", 2, "margin-bottom", "12px", 3, "SectionCount", "Expanded"], [2, "display", "flex", "justify-content", "flex-end", "margin-bottom", "12px"], ["Size", "compact", "Icon", "fa-solid fa-flag-checkered", "Title", "No result codes defined", 3, "Message"], [1, "result-codes-grid"], ["SectionKey", "execution", "SectionTitle", "Execution & Monitoring", "SectionIcon", "fa-solid fa-chart-line", 2, "margin-bottom", "12px", 3, "Expanded"], ["SectionKey", "related", "SectionTitle", "Related Configuration", "SectionIcon", "fa-solid fa-cogs", 2, "margin-bottom", "12px", 3, "Expanded"], ["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", "phone-hero-detail", 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", 1, "phone-hero-run", 3, "click", "disabled"], [1, "fa-solid", "fa-play"], ["mjButton", "", "variant", "outline", "size", "md", "title", "Regenerate Code", 3, "click"], [1, "fa-solid", "fa-robot"], ["type", "button", 1, "phone-hero-summary", 3, "click"], [1, "phone-hero-summary-text"], ["aria-hidden", "true", 1, "fa-solid", "fa-chevron-down"], [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, "params-section"], [1, "params-header"], [1, "fa-solid", "fa-sign-in-alt"], ["mjButton", "", "variant", "flat", "size", "sm"], ["Size", "compact", "Icon", "fa-solid fa-inbox", "Title", "No input parameters defined"], [1, "params-grid"], [1, "params-section", 2, "margin-top", "24px"], [1, "fa-solid", "fa-sign-out-alt"], ["Size", "compact", "Icon", "fa-solid fa-inbox", "Title", "No output parameters defined"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [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"], ["Variant", "error"], [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"], ["Variant", "warning", "Title", "Approval required before this Runtime action can execute.", 1, "approval-required-alert"], [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"], ["Variant", "warning", "Title", "Wildcard permissions enabled"], [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, "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, "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, "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"], ["Size", "compact", "Icon", "fa-solid fa-chart-line", "Title", "No executions yet"], [1, "fa-solid", "fa-chart-line", 2, "color", "var(--mj-text-muted)"], [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"], ["Size", "compact", "Icon", "fa-solid fa-book", "Title", "No libraries configured"], [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) {
|
|
2614
|
+
i0.ɵɵconditionalCreate(0, MJActionFormComponentExtended_Conditional_0_Template, 49, 36, "mj-record-form-container", 1);
|
|
2566
2615
|
i0.ɵɵelementStart(1, "mj-action-test-harness-dialog", 2);
|
|
2567
2616
|
i0.ɵɵlistener("Close", function MJActionFormComponentExtended_Template_mj_action_test_harness_dialog_Close_1_listener() { return ctx.onTestHarnessVisibilityChanged(false); });
|
|
2568
2617
|
i0.ɵɵelementEnd();
|
|
@@ -2570,7 +2619,7 @@ let MJActionFormComponentExtended = class MJActionFormComponentExtended extends
|
|
|
2570
2619
|
i0.ɵɵconditional(ctx.record ? 0 : -1);
|
|
2571
2620
|
i0.ɵɵadvance();
|
|
2572
2621
|
i0.ɵɵproperty("Action", ctx.record)("ActionParams", ctx.actionParams)("IsOpen", ctx.showTestHarness);
|
|
2573
|
-
} }, dependencies: [i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJEmptyStateComponent, i2.MJAlertComponent, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i2.MJDropdownComponent, i2.MJSwitchComponent, i3.MjRecordFormContainerComponent, i4.CodeEditorComponent, i5.ActionTestHarnessDialogComponent, i6.DatePipe], styles: ["\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n.approval-required-alert[_ngcontent-%COMP%] { margin-top: 16px; }\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.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.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.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.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.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.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.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-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.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.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.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.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\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}"] }); }
|
|
2622
|
+
} }, dependencies: [i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJEmptyStateComponent, i2.MJAlertComponent, i2.MJAccordionSectionsComponent, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i2.MJDropdownComponent, i2.MJSwitchComponent, i3.MjRecordFormContainerComponent, i4.CodeEditorComponent, i5.ActionTestHarnessDialogComponent, i6.DatePipe], styles: ["\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n.approval-required-alert[_ngcontent-%COMP%] { margin-top: 16px; }\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.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.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.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.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.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.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.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-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.result-codes-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 16px;\n}\n\n\n@media (max-width: 768px) {\n .result-codes-grid[_ngcontent-%COMP%] {\n grid-template-columns: minmax(0, 1fr);\n }\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.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.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.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\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.hero-header-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n}\n\n.action-buttons[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n align-items: flex-end;\n}\n\n@media (max-width: 768px) {\n .hero-header-row[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .action-buttons[_ngcontent-%COMP%] {\n width: 100%;\n align-items: stretch;\n }\n\n .action-buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n }\n\n .action-buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > button[_ngcontent-%COMP%] {\n flex: 1;\n }\n}\n\n\n\n@media (max-width: 768px) {\n .configuration-sections[_ngcontent-%COMP%] {\n padding: 12px 0 !important;\n border-top: 0 !important;\n background: transparent !important;\n }\n\n .phone-flush-x[_ngcontent-%COMP%] {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n}", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n.phone-hero-summary[_ngcontent-%COMP%], \n.phone-hero-only[_ngcontent-%COMP%] {\n display: none;\n}\n\n@media (max-width: 768px) {\n .phone-hero[_ngcontent-%COMP%] {\n padding: 12px !important;\n }\n\n \n .phone-hero.hero-compact[_ngcontent-%COMP%] .phone-hero-detail[_ngcontent-%COMP%], \n .phone-hero.hero-view[_ngcontent-%COMP%] .phone-hero-hide[_ngcontent-%COMP%] {\n display: none !important;\n }\n\n .phone-hero-only[_ngcontent-%COMP%] {\n display: inline-flex;\n }\n\n \n .phone-hero[_ngcontent-%COMP%] .phone-hero-stats[_ngcontent-%COMP%] {\n display: grid !important;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 8px;\n }\n\n .phone-hero-status[_ngcontent-%COMP%] {\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 999px);\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n vertical-align: middle;\n white-space: nowrap;\n }\n\n \n .phone-hero-status[data-status=\"running\"][_ngcontent-%COMP%] { color: var(--mj-status-warning-text); background: var(--mj-status-warning-bg); }\n .phone-hero-status[data-status=\"success\"][_ngcontent-%COMP%] { color: var(--mj-status-success-text); background: var(--mj-status-success-bg); }\n .phone-hero-status[data-status=\"error\"][_ngcontent-%COMP%] { color: var(--mj-status-error-text); background: var(--mj-status-error-bg); }\n .phone-hero-status[data-status=\"info\"][_ngcontent-%COMP%] { color: var(--mj-status-info-text); background: var(--mj-status-info-bg); }\n\n .phone-hero-top[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n gap: 10px;\n }\n\n .phone-hero-actions[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .phone-hero[_ngcontent-%COMP%] .phone-hero-run[_ngcontent-%COMP%] {\n width: 100%;\n min-height: 44px;\n justify-content: center;\n }\n\n \n\n .phone-hero-summary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n min-height: 44px;\n margin-top: 8px;\n padding: 0 4px;\n border: 0;\n border-top: 1px solid color-mix(in srgb, currentColor 20%, transparent);\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: var(--mj-text-sm);\n text-align: left;\n cursor: pointer;\n opacity: 0.85;\n }\n\n .phone-hero-summary[_ngcontent-%COMP%]:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n }\n\n .phone-hero-summary-text[_ngcontent-%COMP%] {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .phone-hero-summary[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n flex-shrink: 0;\n transition: transform 0.15s ease;\n }\n\n .phone-hero-summary[aria-expanded=\"true\"][_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .phone-hero-summary[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n transition: none;\n }\n}"] }); }
|
|
2574
2623
|
};
|
|
2575
2624
|
MJActionFormComponentExtended = __decorate([
|
|
2576
2625
|
RegisterClass(BaseFormComponent, 'MJ: Actions')
|
|
@@ -2578,7 +2627,7 @@ MJActionFormComponentExtended = __decorate([
|
|
|
2578
2627
|
export { MJActionFormComponentExtended };
|
|
2579
2628
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJActionFormComponentExtended, [{
|
|
2580
2629
|
type: Component,
|
|
2581
|
-
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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-sliders\"\n Title=\"No parameters defined\"\n [Message]=\"EditMode && record.IsSaved ? 'Add parameters to define inputs and outputs for this action' : ''\" />\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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-inbox\"\n Title=\"No input parameters defined\" />\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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-inbox\"\n Title=\"No output parameters defined\" />\n } @else {\n <div class=\"params-grid\">\n @for (param of getOutputParams(); track param.ID) {\n <div class=\"param-card\"\n [class.clickable]=\"true\"\n (click)=\"onParamClick(param, $event)\">\n <div class=\"param-header\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <div class=\"param-badges\">\n @if (param.IsArray) {\n <span class=\"array-badge\">Array</span>\n }\n @if (EditMode) {\n <button class=\"param-edit-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"param-delete-btn\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n <div class=\"param-details\">\n <div class=\"param-type\">{{ param.ValueType }}</div>\n @if (param.Description) {\n <div class=\"param-description\">{{ param.Description }}</div>\n }\n @if (param.DefaultValue) {\n <div class=\"param-default\">\n <span class=\"default-label\">Default:</span>\n <code>{{ param.DefaultValue }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Code & Generation Section (Only for Generated type) -->\n @if (record.Type === 'Generated') {\n <mj-accordion-panel\n [Expanded]=\"expandedSections.code\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n Code & Generation\n @if (record.CodeLocked) {\n <span style=\"background: var(--mj-status-warning); color: var(--mj-color-warning-800); padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n <i class=\"fa-solid fa-lock\"></i> Locked\n </span>\n }\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n @if (EditMode) {\n <div class=\"generation-panel\">\n <h3><i class=\"fa-solid fa-robot\"></i> AI Generation</h3>\n <div class=\"prompt-section\">\n <label>User Prompt</label>\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.UserPrompt\"\n name=\"userPrompt\"\n [rows]=\"8\"\n placeholder=\"Describe what this action should do...\"\n style=\"width: 100%; min-height: 120px;\">\n </textarea>\n </div>\n <div class=\"comments-section\">\n <label>Internal Comments (not sent to AI)</label>\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.UserComments\"\n name=\"userComments\"\n [rows]=\"2\"\n placeholder=\"Internal notes...\"\n style=\"width: 100%;\">\n </textarea>\n </div>\n <div class=\"generation-controls\">\n <mj-switch [(ngModel)]=\"record.CodeLocked\"\n name=\"codeLocked\">\n </mj-switch>\n <label style=\"margin-left: 8px;\">Lock Code (prevent regeneration)</label>\n </div>\n </div>\n }\n \n <div class=\"code-editor-section\">\n <div class=\"code-toolbar\">\n <h3><i class=\"fa-solid fa-file-code\"></i> Action Code</h3>\n <div class=\"code-actions\">\n @if (record.CodeComments) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"toggleCodeComments()\">\n <i class=\"fa-solid fa-comment\"></i> \n {{ showCodeComments ? 'Hide' : 'Show' }} AI Comments\n </button>\n }\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"copyToClipboard(record.Code || '')\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n </div>\n </div>\n <mj-code-editor \n [(ngModel)]=\"record.Code\"\n name=\"actionCode\"\n [readonly]=\"!EditMode || record.CodeLocked\"\n [language]=\"codeLanguage\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n \n @if (showCodeComments && record.CodeComments) {\n <div class=\"code-comments\">\n <h4><i class=\"fa-solid fa-robot\"></i> AI Explanation</h4>\n <p>{{ record.CodeComments }}</p>\n </div>\n }\n \n @if (EditMode && record.CodeApprovalStatus === 'Rejected') {\n <div class=\"approval-comments\">\n <label>Rejection Comments</label>\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.CodeApprovalComments\"\n name=\"codeApprovalComments\"\n [rows]=\"2\"\n placeholder=\"Explain why the code was rejected...\"\n style=\"width: 100%;\">\n </textarea>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Runtime Action Configuration Section (only for Type='Runtime') -->\n @if (isRuntimeAction) {\n <mj-accordion-panel\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-wand-magic-sparkles\" style=\"color: var(--mj-status-warning);\"></i>\n Runtime Configuration & Permissions\n <span style=\"color: var(--mj-text-muted); font-weight: 400; font-size: 0.85em;\">\n ({{ getRuntimeConfigSummary() }})\n </span>\n </span>\n </ng-template>\n\n <div style=\"padding: 16px;\">\n @if (!runtimeConfig) {\n <mj-alert Variant=\"error\">\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 </mj-alert>\n } @else {\n @if (getWildcardFlags().any) {\n <mj-alert Variant=\"warning\" Title=\"Wildcard permissions enabled\">\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 </mj-alert>\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 <mj-alert Variant=\"warning\" Title=\"Approval required before this Runtime action can execute.\" class=\"approval-required-alert\">\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 </mj-alert>\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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-flag-checkered\"\n Title=\"No result codes defined\"\n [Message]=\"EditMode && record.IsSaved ? 'Add result codes to define possible outcomes' : ''\" />\n } @else {\n <div class=\"result-codes-grid\">\n @for (code of resultCodes; track code.ID) {\n <div class=\"result-code-card\" \n [class.success]=\"code.IsSuccess\" \n [class.failure]=\"!code.IsSuccess\"\n [class.clickable]=\"true\"\n (click)=\"onResultCodeClick(code, $event)\">\n <div class=\"result-icon\">\n <i [class]=\"code.IsSuccess ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n </div>\n <div class=\"result-content\">\n <div class=\"result-code\">{{ code.ResultCode }}</div>\n @if (code.Description) {\n <div class=\"result-description\">{{ code.Description }}</div>\n }\n </div>\n @if (EditMode) {\n <div class=\"result-actions\">\n <button class=\"result-edit-btn\" (click)=\"editResultCode(code); $event.stopPropagation()\" title=\"Edit result code\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"result-delete-btn\" (click)=\"deleteResultCode(code); $event.stopPropagation()\" title=\"Delete result code\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Execution & Monitoring Section -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"expandedSections.execution\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-chart-line\" style=\"color: var(--mj-text-muted);\"></i>\n Execution & Monitoring\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n @if (isLoadingExecutions) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading executions...\n </div>\n } @else if (recentExecutions.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-chart-line\"\n Title=\"No executions yet\" />\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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-book\"\n Title=\"No libraries configured\" />\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/* positions the Runtime-action approval alert (mj-alert is margin-less but for bottom) */\n.approval-required-alert { margin-top: 16px; }\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-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/* 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"] }]
|
|
2630
|
+
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 phone-hero\" [class.hero-view]=\"!EditMode\" [class.hero-compact]=\"!EditMode && !HeroDetailsOpen\" style=\"flex-shrink: 0; padding: 20px; background: var(--mj-bg-surface-card); border-bottom: 2px solid var(--mj-border-default);\">\n <div class=\"hero-header-row\">\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 phone-hero-detail\"\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 class=\"phone-hero-detail\" 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 phone-hero-detail\" 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\">\n <div style=\"display: flex; gap: 8px;\">\n @if (record.ID && !EditMode) {\n <button mjButton variant=\"primary\" size=\"lg\" class=\"phone-hero-run\"\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 @if (!EditMode && HeroSummary) {\n <button type=\"button\" class=\"phone-hero-summary\" [attr.aria-expanded]=\"HeroDetailsOpen\" (click)=\"ToggleHeroDetails()\">\n <span class=\"phone-hero-summary-text\">{{ HeroSummary }}</span>\n <i class=\"fa-solid fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n }\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 <!-- Phone: one section at a time behind a picker; desktop keeps the accordions -->\n <mj-accordion-sections [Enabled]=\"Phone.IsPhone\" [ActiveKey]=\"Phone.Section\" (ActiveKeyChange)=\"Phone.Pick($event)\">\n \n <!-- Parameters Section (FIRST) -->\n <mj-accordion-panel SectionKey=\"parameters\" SectionTitle=\"Parameters\" SectionIcon=\"fa-solid fa-sliders\" [SectionCount]=\"ActionParams.length\"\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 class=\"phone-flush-x\" 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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-sliders\"\n Title=\"No parameters defined\"\n [Message]=\"EditMode && record.IsSaved ? 'Add parameters to define inputs and outputs for this action' : ''\" />\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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-inbox\"\n Title=\"No input parameters defined\" />\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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-inbox\"\n Title=\"No output parameters defined\" />\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 SectionKey=\"code\" SectionTitle=\"Code & Generation\" SectionIcon=\"fa-solid fa-code\"\n [Expanded]=\"expandedSections.code\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n Code & Generation\n @if (record.CodeLocked) {\n <span style=\"background: var(--mj-status-warning); color: var(--mj-color-warning-800); padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n <i class=\"fa-solid fa-lock\"></i> Locked\n </span>\n }\n </span>\n </ng-template>\n \n <div class=\"phone-flush-x\" 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 SectionKey=\"runtime\" SectionTitle=\"Runtime Configuration & Permissions\" SectionIcon=\"fa-solid fa-wand-magic-sparkles\"\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-wand-magic-sparkles\" style=\"color: var(--mj-status-warning);\"></i>\n Runtime Configuration & Permissions\n <span style=\"color: var(--mj-text-muted); font-weight: 400; font-size: 0.85em;\">\n ({{ getRuntimeConfigSummary() }})\n </span>\n </span>\n </ng-template>\n\n <div class=\"phone-flush-x\" style=\"padding: 16px;\">\n @if (!runtimeConfig) {\n <mj-alert Variant=\"error\">\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 </mj-alert>\n } @else {\n @if (getWildcardFlags().any) {\n <mj-alert Variant=\"warning\" Title=\"Wildcard permissions enabled\">\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 </mj-alert>\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 <mj-alert Variant=\"warning\" Title=\"Approval required before this Runtime action can execute.\" class=\"approval-required-alert\">\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 </mj-alert>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Result Codes Section -->\n <mj-accordion-panel SectionKey=\"result-codes\" SectionTitle=\"Result Codes\" SectionIcon=\"fa-solid fa-flag-checkered\" [SectionCount]=\"ResultCodes.length\"\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 class=\"phone-flush-x\" 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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-flag-checkered\"\n Title=\"No result codes defined\"\n [Message]=\"EditMode && record.IsSaved ? 'Add result codes to define possible outcomes' : ''\" />\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 SectionKey=\"execution\" SectionTitle=\"Execution & Monitoring\" SectionIcon=\"fa-solid fa-chart-line\"\n [Expanded]=\"expandedSections.execution\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-chart-line\" style=\"color: var(--mj-text-muted);\"></i>\n Execution & Monitoring\n </span>\n </ng-template>\n \n <div class=\"phone-flush-x\" 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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-chart-line\"\n Title=\"No executions yet\" />\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 SectionKey=\"related\" SectionTitle=\"Related Configuration\" SectionIcon=\"fa-solid fa-cogs\"\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 class=\"phone-flush-x\" 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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-book\"\n Title=\"No libraries configured\" />\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 </mj-accordion-sections>\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/* positions the Runtime-action approval alert (mj-alert is margin-less but for bottom) */\n.approval-required-alert { margin-top: 16px; }\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-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/* Phone: one full-width column, so a card can never be wider than the form. */\n@media (max-width: 768px) {\n .result-codes-grid {\n grid-template-columns: minmax(0, 1fr);\n }\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/* 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/* Hero header row: title block left, actions right; on a phone the actions drop under the title. */\n.hero-header-row {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n}\n\n.action-buttons {\n display: flex;\n flex-direction: column;\n gap: 8px;\n align-items: flex-end;\n}\n\n@media (max-width: 768px) {\n .hero-header-row {\n flex-direction: column;\n }\n\n .action-buttons {\n width: 100%;\n align-items: stretch;\n }\n\n .action-buttons > div {\n display: flex;\n gap: 8px;\n }\n\n .action-buttons > div > button {\n flex: 1;\n }\n}\n\n/* Phone: sections sit on the page's 12px gutter, so the container and the inline-padded body\n wrappers drop their side padding (they would indent every section twice). */\n@media (max-width: 768px) {\n .configuration-sections {\n padding: 12px 0 !important;\n border-top: 0 !important;\n background: transparent !important;\n }\n\n .phone-flush-x {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n}\n", "/* ============================================\n PHONE HERO (design call 6A), shared by the custom forms that own a hero.\n Under 768px the hero keeps icon, name, status and the primary action. Anything tagged\n .phone-hero-detail hides while the hero is compact and comes back when the summary line is\n tapped. Edit mode is untouched: the host only gets .hero-compact / .hero-view in view mode.\n Host: .phone-hero [class.hero-view]=\"!EditMode\" [class.hero-compact]=\"!EditMode && !HeroDetailsOpen\"\n Tags: .phone-hero-detail hidden while compact\n .phone-hero-hide hidden in view mode (said elsewhere on the phone hero)\n .phone-hero-only shown only on phones\n .phone-hero-top a title + action row that stacks\n .phone-hero-actions / .phone-hero-run the primary action, full width at 44px\n .phone-hero-stats a metric row that reflows to a 2-up grid when the hero is expanded\n .phone-hero-status a status chip in the identity row (with .phone-hero-only)\n ============================================ */\n.phone-hero-summary,\n.phone-hero-only {\n display: none;\n}\n\n@media (max-width: 768px) {\n .phone-hero {\n padding: 12px !important;\n }\n\n /* !important: several heroes carry inline display/padding styles on these rows */\n .phone-hero.hero-compact .phone-hero-detail,\n .phone-hero.hero-view .phone-hero-hide {\n display: none !important;\n }\n\n .phone-hero-only {\n display: inline-flex;\n }\n\n /* Lower specificity than the compact rule above, so a compact hero still hides it */\n .phone-hero .phone-hero-stats {\n display: grid !important;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 8px;\n }\n\n .phone-hero-status {\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 999px);\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n vertical-align: middle;\n white-space: nowrap;\n }\n\n /* data-status comes from RunStatusKind(); the -text / -bg pairs keep contrast in both themes */\n .phone-hero-status[data-status=\"running\"] { color: var(--mj-status-warning-text); background: var(--mj-status-warning-bg); }\n .phone-hero-status[data-status=\"success\"] { color: var(--mj-status-success-text); background: var(--mj-status-success-bg); }\n .phone-hero-status[data-status=\"error\"] { color: var(--mj-status-error-text); background: var(--mj-status-error-bg); }\n .phone-hero-status[data-status=\"info\"] { color: var(--mj-status-info-text); background: var(--mj-status-info-bg); }\n\n .phone-hero-top {\n flex-direction: column;\n align-items: stretch;\n gap: 10px;\n }\n\n .phone-hero-actions {\n width: 100%;\n }\n\n .phone-hero .phone-hero-run {\n width: 100%;\n min-height: 44px;\n justify-content: center;\n }\n\n /* Inherits the hero's text colour, so it reads on light heroes and on the brand-blue\n Queries hero alike; a muted token would be grey on blue. */\n .phone-hero-summary {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n min-height: 44px;\n margin-top: 8px;\n padding: 0 4px;\n border: 0;\n border-top: 1px solid color-mix(in srgb, currentColor 20%, transparent);\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: var(--mj-text-sm);\n text-align: left;\n cursor: pointer;\n opacity: 0.85;\n }\n\n .phone-hero-summary:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n }\n\n .phone-hero-summary-text {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .phone-hero-summary > i {\n flex-shrink: 0;\n transition: transform 0.15s ease;\n }\n\n .phone-hero-summary[aria-expanded=\"true\"] > i {\n transform: rotate(180deg);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .phone-hero-summary > i {\n transition: none;\n }\n}\n"] }]
|
|
2582
2631
|
}], null, null); })();
|
|
2583
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJActionFormComponentExtended, { className: "MJActionFormComponentExtended", filePath: "src/lib/custom/Actions/action-form.component.ts", lineNumber:
|
|
2632
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJActionFormComponentExtended, { className: "MJActionFormComponentExtended", filePath: "src/lib/custom/Actions/action-form.component.ts", lineNumber: 20 }); })();
|
|
2584
2633
|
//# sourceMappingURL=action-form.component.js.map
|