@memberjunction/ng-core-entity-forms 5.28.0 → 5.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +4 -0
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +567 -566
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +3 -0
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +243 -244
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +3 -0
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +417 -416
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +51 -16
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +422 -139
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts +68 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +882 -422
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts +3 -0
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.js +23 -22
- package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts +13 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +798 -553
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.d.ts +3 -0
- package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +157 -158
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +44 -26
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.js +42 -6
- package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +57 -49
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +83 -77
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.js +123 -0
- package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJArchiveConfigurationEntity/mjarchiveconfigurationentity.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJArchiveConfigurationEntity/mjarchiveconfigurationentity.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJArchiveConfigurationEntity/mjarchiveconfigurationentity.form.component.js +87 -0
- package/dist/lib/generated/Entities/MJArchiveConfigurationEntity/mjarchiveconfigurationentity.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.js +109 -0
- package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJArchiveRunDetail/mjarchiverundetail.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJArchiveRunDetail/mjarchiverundetail.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJArchiveRunDetail/mjarchiverundetail.form.component.js +83 -0
- package/dist/lib/generated/Entities/MJArchiveRunDetail/mjarchiverundetail.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.js +39 -37
- package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +104 -68
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityPermission/mjentitypermission.form.component.js +11 -9
- package/dist/lib/generated/Entities/MJEntityPermission/mjentitypermission.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.js +32 -14
- package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js +23 -21
- package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js +9 -7
- package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMCPServerTool/mjmcpservertool.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJMCPServerTool/mjmcpservertool.form.component.js +24 -6
- package/dist/lib/generated/Entities/MJMCPServerTool/mjmcpservertool.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMCPToolFavorite/mjmcptoolfavorite.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMCPToolFavorite/mjmcptoolfavorite.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMCPToolFavorite/mjmcptoolfavorite.form.component.js +55 -0
- package/dist/lib/generated/Entities/MJMCPToolFavorite/mjmcptoolfavorite.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.js +85 -0
- package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJResourcePermission/mjresourcepermission.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJResourcePermission/mjresourcepermission.form.component.js +21 -12
- package/dist/lib/generated/Entities/MJResourcePermission/mjresourcepermission.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js +5 -5
- package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js +17 -17
- package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +241 -169
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +252 -246
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +168 -150
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +14 -8
- package/dist/lib/shared/components/template-editor.component.js.map +1 -1
- package/package.json +34 -34
|
@@ -6,7 +6,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
6
6
|
};
|
|
7
7
|
import { Component, ViewChild, ViewContainerRef, inject } from '@angular/core';
|
|
8
8
|
import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
|
|
9
|
-
import { BaseFormComponent } from '@memberjunction/ng-base-forms';
|
|
9
|
+
import { BaseFormComponent, CUSTOM_LAYOUT_TOOLBAR_CONFIG } from '@memberjunction/ng-base-forms';
|
|
10
10
|
import { SharedService } from '@memberjunction/ng-shared';
|
|
11
11
|
import { Metadata, RunView, CompositeKey } from '@memberjunction/core';
|
|
12
12
|
import { MJNotificationService } from '@memberjunction/ng-notifications';
|
|
@@ -32,16 +32,16 @@ const _c6 = () => ({ text: "Static Count", value: "StaticCount" });
|
|
|
32
32
|
const _c7 = () => ({ text: "Config Param", value: "ConfigParam" });
|
|
33
33
|
function _forTrack0($index, $item) { return this.getModelTrackId($item) || $index; }
|
|
34
34
|
const _forTrack1 = ($index, $item) => $item.ID;
|
|
35
|
-
function
|
|
36
|
-
const
|
|
35
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
36
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
37
37
|
i0.ɵɵelementStart(0, "input", 51);
|
|
38
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
38
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_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
39
|
i0.ɵɵelementEnd();
|
|
40
40
|
} if (rf & 2) {
|
|
41
41
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
42
42
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Name);
|
|
43
43
|
} }
|
|
44
|
-
function
|
|
44
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
45
45
|
i0.ɵɵelementStart(0, "h4", 52);
|
|
46
46
|
i0.ɵɵtext(1);
|
|
47
47
|
i0.ɵɵelementEnd();
|
|
@@ -57,36 +57,36 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_10_Template(r
|
|
|
57
57
|
i0.ɵɵadvance();
|
|
58
58
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Status, " ");
|
|
59
59
|
} }
|
|
60
|
-
function
|
|
60
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
61
61
|
i0.ɵɵelementStart(0, "div", 56);
|
|
62
62
|
i0.ɵɵelement(1, "i", 58);
|
|
63
63
|
i0.ɵɵtext(2, " Loading types... ");
|
|
64
64
|
i0.ɵɵelementEnd();
|
|
65
65
|
} }
|
|
66
|
-
function
|
|
67
|
-
const
|
|
66
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
67
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
68
68
|
i0.ɵɵelementStart(0, "mj-dropdown", 59);
|
|
69
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
69
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_11_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.TypeID, $event) || (ctx_r1.record.TypeID = $event); return i0.ɵɵresetView($event); });
|
|
70
70
|
i0.ɵɵelementEnd();
|
|
71
71
|
} if (rf & 2) {
|
|
72
72
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
73
73
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.TypeID);
|
|
74
74
|
i0.ɵɵproperty("Data", ctx_r1.availablePromptTypes)("ValuePrimitive", true)("Filterable", true);
|
|
75
75
|
} }
|
|
76
|
-
function
|
|
77
|
-
const
|
|
76
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
77
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
78
78
|
i0.ɵɵelementStart(0, "div", 13)(1, "div")(2, "label", 45);
|
|
79
79
|
i0.ɵɵtext(3, "Status");
|
|
80
80
|
i0.ɵɵelementEnd();
|
|
81
81
|
i0.ɵɵelementStart(4, "mj-dropdown", 54);
|
|
82
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
82
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_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); });
|
|
83
83
|
i0.ɵɵelementEnd()();
|
|
84
84
|
i0.ɵɵelementStart(5, "div")(6, "label", 45);
|
|
85
85
|
i0.ɵɵtext(7, " Type ");
|
|
86
86
|
i0.ɵɵelementStart(8, "span", 55);
|
|
87
87
|
i0.ɵɵtext(9, "*");
|
|
88
88
|
i0.ɵɵelementEnd()();
|
|
89
|
-
i0.ɵɵconditionalCreate(10,
|
|
89
|
+
i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_10_Template, 3, 0, "div", 56)(11, MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_11_Template, 1, 4, "mj-dropdown", 57);
|
|
90
90
|
i0.ɵɵelementEnd()();
|
|
91
91
|
} if (rf & 2) {
|
|
92
92
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -96,17 +96,17 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_11_Template(r
|
|
|
96
96
|
i0.ɵɵadvance(6);
|
|
97
97
|
i0.ɵɵconditional(ctx_r1.isLoadingPromptTypes ? 10 : 11);
|
|
98
98
|
} }
|
|
99
|
-
function
|
|
100
|
-
const
|
|
99
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
100
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
101
101
|
i0.ɵɵelementStart(0, "textarea", 60);
|
|
102
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
102
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_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); });
|
|
103
103
|
i0.ɵɵelementEnd();
|
|
104
104
|
} if (rf & 2) {
|
|
105
105
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
106
106
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Description);
|
|
107
107
|
i0.ɵɵproperty("rows", 2);
|
|
108
108
|
} }
|
|
109
|
-
function
|
|
109
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
110
110
|
i0.ɵɵelementStart(0, "p", 15);
|
|
111
111
|
i0.ɵɵtext(1);
|
|
112
112
|
i0.ɵɵelementEnd();
|
|
@@ -115,7 +115,7 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_13_Template(r
|
|
|
115
115
|
i0.ɵɵadvance();
|
|
116
116
|
i0.ɵɵtextInterpolate(ctx_r1.record.Description);
|
|
117
117
|
} }
|
|
118
|
-
function
|
|
118
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
119
119
|
i0.ɵɵelementStart(0, "div", 17);
|
|
120
120
|
i0.ɵɵelement(1, "i", 61);
|
|
121
121
|
i0.ɵɵelementStart(2, "span", 19);
|
|
@@ -129,14 +129,14 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_15_Template(r
|
|
|
129
129
|
i0.ɵɵadvance(5);
|
|
130
130
|
i0.ɵɵtextInterpolate(ctx_r1.getPromptTypeDisplayName(ctx_r1.record.TypeID));
|
|
131
131
|
} }
|
|
132
|
-
function
|
|
132
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
133
133
|
i0.ɵɵelementStart(0, "div", 17);
|
|
134
134
|
i0.ɵɵelement(1, "i", 62);
|
|
135
135
|
i0.ɵɵelementStart(2, "span", 63);
|
|
136
136
|
i0.ɵɵtext(3, "Caching Enabled");
|
|
137
137
|
i0.ɵɵelementEnd()();
|
|
138
138
|
} }
|
|
139
|
-
function
|
|
139
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
140
140
|
i0.ɵɵelementStart(0, "div", 17);
|
|
141
141
|
i0.ɵɵelement(1, "i", 64);
|
|
142
142
|
i0.ɵɵelementStart(2, "span", 19);
|
|
@@ -150,31 +150,31 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_29_Template(r
|
|
|
150
150
|
i0.ɵɵadvance(5);
|
|
151
151
|
i0.ɵɵtextInterpolate(ctx_r1.record.EffortLevel);
|
|
152
152
|
} }
|
|
153
|
-
function
|
|
154
|
-
const
|
|
153
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_32_Template(rf, ctx) { if (rf & 1) {
|
|
154
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
155
155
|
i0.ɵɵelementStart(0, "button", 65);
|
|
156
|
-
i0.ɵɵlistener("click", function
|
|
156
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_32_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openTestHarness()); });
|
|
157
157
|
i0.ɵɵelement(1, "i", 66);
|
|
158
158
|
i0.ɵɵtext(2, " Run ");
|
|
159
159
|
i0.ɵɵelementEnd();
|
|
160
160
|
} }
|
|
161
|
-
function
|
|
161
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_33_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
162
162
|
i0.ɵɵtext(0, " \u2022 Prompt must be Active");
|
|
163
163
|
i0.ɵɵelement(1, "br");
|
|
164
164
|
} }
|
|
165
|
-
function
|
|
165
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_33_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
166
166
|
i0.ɵɵtext(0, " \u2022 Template is required");
|
|
167
167
|
i0.ɵɵelement(1, "br");
|
|
168
168
|
} }
|
|
169
|
-
function
|
|
169
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_33_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
170
170
|
i0.ɵɵtext(0, " \u2022 Template not found");
|
|
171
171
|
i0.ɵɵelement(1, "br");
|
|
172
172
|
} }
|
|
173
|
-
function
|
|
173
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
174
174
|
i0.ɵɵelementStart(0, "div", 26);
|
|
175
|
-
i0.ɵɵconditionalCreate(1,
|
|
176
|
-
i0.ɵɵconditionalCreate(2,
|
|
177
|
-
i0.ɵɵconditionalCreate(3,
|
|
175
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_33_Conditional_1_Template, 2, 0);
|
|
176
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_33_Conditional_2_Template, 2, 0);
|
|
177
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_33_Conditional_3_Template, 2, 0);
|
|
178
178
|
i0.ɵɵelementEnd();
|
|
179
179
|
} if (rf & 2) {
|
|
180
180
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -185,7 +185,7 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_33_Template(r
|
|
|
185
185
|
i0.ɵɵadvance();
|
|
186
186
|
i0.ɵɵconditional(!ctx_r1.template && ctx_r1.record.TemplateID ? 3 : -1);
|
|
187
187
|
} }
|
|
188
|
-
function
|
|
188
|
+
function MJAIPromptFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
189
189
|
i0.ɵɵelementStart(0, "span", 68);
|
|
190
190
|
i0.ɵɵtext(1);
|
|
191
191
|
i0.ɵɵelementEnd();
|
|
@@ -194,40 +194,40 @@ function MJAIPromptFormComponentExtended_Conditional_2_ng_template_36_Conditiona
|
|
|
194
194
|
i0.ɵɵadvance();
|
|
195
195
|
i0.ɵɵtextInterpolate1("\u2022 ", ctx_r1.template.Name);
|
|
196
196
|
} }
|
|
197
|
-
function
|
|
197
|
+
function MJAIPromptFormComponentExtended_Conditional_1_ng_template_36_Template(rf, ctx) { if (rf & 1) {
|
|
198
198
|
i0.ɵɵelementStart(0, "span", 67);
|
|
199
199
|
i0.ɵɵelement(1, "i", 21);
|
|
200
200
|
i0.ɵɵtext(2, " Template Editor ");
|
|
201
|
-
i0.ɵɵconditionalCreate(3,
|
|
201
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Template, 2, 1, "span", 68);
|
|
202
202
|
i0.ɵɵelementEnd();
|
|
203
203
|
} if (rf & 2) {
|
|
204
204
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
205
205
|
i0.ɵɵadvance(3);
|
|
206
206
|
i0.ɵɵconditional(ctx_r1.template ? 3 : -1);
|
|
207
207
|
} }
|
|
208
|
-
function
|
|
208
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_38_Template(rf, ctx) { if (rf & 1) {
|
|
209
209
|
i0.ɵɵelementStart(0, "div", 31);
|
|
210
210
|
i0.ɵɵelement(1, "i", 69);
|
|
211
211
|
i0.ɵɵtext(2, " Loading template... ");
|
|
212
212
|
i0.ɵɵelementEnd();
|
|
213
213
|
} }
|
|
214
|
-
function
|
|
215
|
-
const
|
|
214
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
215
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
216
216
|
i0.ɵɵelementStart(0, "button", 76);
|
|
217
|
-
i0.ɵɵlistener("click", function
|
|
217
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createNewTemplate()); });
|
|
218
218
|
i0.ɵɵelement(1, "i", 77);
|
|
219
219
|
i0.ɵɵtext(2, " Create New Template ");
|
|
220
220
|
i0.ɵɵelementEnd();
|
|
221
221
|
} }
|
|
222
|
-
function
|
|
223
|
-
const
|
|
222
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
223
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
224
224
|
i0.ɵɵelementStart(0, "button", 78);
|
|
225
|
-
i0.ɵɵlistener("click", function
|
|
225
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.linkExistingTemplate()); });
|
|
226
226
|
i0.ɵɵelement(1, "i", 79);
|
|
227
227
|
i0.ɵɵtext(2, " Link Existing Template ");
|
|
228
228
|
i0.ɵɵelementEnd();
|
|
229
229
|
} }
|
|
230
|
-
function
|
|
230
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Template(rf, ctx) { if (rf & 1) {
|
|
231
231
|
i0.ɵɵelementStart(0, "div", 32);
|
|
232
232
|
i0.ɵɵelement(1, "i", 70);
|
|
233
233
|
i0.ɵɵelementStart(2, "h5", 71);
|
|
@@ -237,8 +237,8 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_39_Template(r
|
|
|
237
237
|
i0.ɵɵtext(5, " This AI prompt needs a template to define its structure and parameters. Create a new template or link to an existing one. ");
|
|
238
238
|
i0.ɵɵelementEnd();
|
|
239
239
|
i0.ɵɵelementStart(6, "div", 73);
|
|
240
|
-
i0.ɵɵconditionalCreate(7,
|
|
241
|
-
i0.ɵɵconditionalCreate(8,
|
|
240
|
+
i0.ɵɵconditionalCreate(7, MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_7_Template, 3, 0, "button", 74);
|
|
241
|
+
i0.ɵɵconditionalCreate(8, MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_8_Template, 3, 0, "button", 75);
|
|
242
242
|
i0.ɵɵelementEnd()();
|
|
243
243
|
} if (rf & 2) {
|
|
244
244
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -247,16 +247,16 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_39_Template(r
|
|
|
247
247
|
i0.ɵɵadvance();
|
|
248
248
|
i0.ɵɵconditional(ctx_r1.UserCanReadTemplates ? 8 : -1);
|
|
249
249
|
} }
|
|
250
|
-
function
|
|
251
|
-
const
|
|
250
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
251
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
252
252
|
i0.ɵɵelementStart(0, "button", 76);
|
|
253
|
-
i0.ɵɵlistener("click", function
|
|
253
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createNewTemplate()); });
|
|
254
254
|
i0.ɵɵelement(1, "i", 77);
|
|
255
255
|
i0.ɵɵtext(2, " Create New Template ");
|
|
256
256
|
i0.ɵɵelementEnd();
|
|
257
257
|
} }
|
|
258
|
-
function
|
|
259
|
-
const
|
|
258
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Template(rf, ctx) { if (rf & 1) {
|
|
259
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
260
260
|
i0.ɵɵelementStart(0, "div", 33);
|
|
261
261
|
i0.ɵɵelement(1, "i", 80);
|
|
262
262
|
i0.ɵɵelementStart(2, "h5", 81);
|
|
@@ -266,37 +266,37 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_40_Template(r
|
|
|
266
266
|
i0.ɵɵtext(5, " The referenced template could not be loaded. It may have been deleted or moved. ");
|
|
267
267
|
i0.ɵɵelementEnd();
|
|
268
268
|
i0.ɵɵelementStart(6, "div", 73)(7, "button", 78);
|
|
269
|
-
i0.ɵɵlistener("click", function
|
|
269
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.loadTemplate()); });
|
|
270
270
|
i0.ɵɵelement(8, "i", 82);
|
|
271
271
|
i0.ɵɵtext(9, " Retry Loading ");
|
|
272
272
|
i0.ɵɵelementEnd();
|
|
273
|
-
i0.ɵɵconditionalCreate(10,
|
|
273
|
+
i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Conditional_10_Template, 3, 0, "button", 74);
|
|
274
274
|
i0.ɵɵelementEnd()();
|
|
275
275
|
} if (rf & 2) {
|
|
276
276
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
277
277
|
i0.ɵɵadvance(10);
|
|
278
278
|
i0.ɵɵconditional(ctx_r1.UserCanCreateTemplates ? 10 : -1);
|
|
279
279
|
} }
|
|
280
|
-
function
|
|
281
|
-
const
|
|
280
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
281
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
282
282
|
i0.ɵɵelementStart(0, "button", 88);
|
|
283
|
-
i0.ɵɵlistener("click", function
|
|
283
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.linkExistingTemplate()); });
|
|
284
284
|
i0.ɵɵelement(1, "i", 89);
|
|
285
285
|
i0.ɵɵtext(2, " Change Template ");
|
|
286
286
|
i0.ɵɵelementEnd();
|
|
287
287
|
} }
|
|
288
|
-
function
|
|
289
|
-
const
|
|
288
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
289
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
290
290
|
i0.ɵɵelementStart(0, "button", 90);
|
|
291
|
-
i0.ɵɵlistener("click", function
|
|
291
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.openTemplateInNewWindow()); });
|
|
292
292
|
i0.ɵɵelement(1, "i", 91);
|
|
293
293
|
i0.ɵɵtext(2, " Open in New Window ");
|
|
294
294
|
i0.ɵɵelementEnd();
|
|
295
295
|
} }
|
|
296
|
-
function
|
|
296
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
297
297
|
i0.ɵɵelementStart(0, "div", 83);
|
|
298
|
-
i0.ɵɵconditionalCreate(1,
|
|
299
|
-
i0.ɵɵconditionalCreate(2,
|
|
298
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_1_Template, 3, 0, "button", 86);
|
|
299
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_2_Template, 3, 0, "button", 87);
|
|
300
300
|
i0.ɵɵelementEnd();
|
|
301
301
|
} if (rf & 2) {
|
|
302
302
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -305,12 +305,12 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_41_Conditiona
|
|
|
305
305
|
i0.ɵɵadvance();
|
|
306
306
|
i0.ɵɵconditional(ctx_r1.UserCanReadTemplates ? 2 : -1);
|
|
307
307
|
} }
|
|
308
|
-
function
|
|
309
|
-
const
|
|
308
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Template(rf, ctx) { if (rf & 1) {
|
|
309
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
310
310
|
i0.ɵɵelementStart(0, "div", 34);
|
|
311
|
-
i0.ɵɵconditionalCreate(1,
|
|
311
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Template, 3, 2, "div", 83);
|
|
312
312
|
i0.ɵɵelementStart(2, "div", 84)(3, "mj-template-editor", 85, 1);
|
|
313
|
-
i0.ɵɵlistener("contentChange", function
|
|
313
|
+
i0.ɵɵlistener("contentChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Template_mj_template_editor_contentChange_3_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTemplateContentChange($event)); })("runTemplate", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Template_mj_template_editor_runTemplate_3_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTemplateRun($event)); });
|
|
314
314
|
i0.ɵɵelementEnd()()();
|
|
315
315
|
} if (rf & 2) {
|
|
316
316
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -319,7 +319,7 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_41_Template(r
|
|
|
319
319
|
i0.ɵɵadvance(2);
|
|
320
320
|
i0.ɵɵproperty("template", ctx_r1.template)("config", ctx_r1.templateEditorConfig);
|
|
321
321
|
} }
|
|
322
|
-
function
|
|
322
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
323
323
|
i0.ɵɵelementStart(0, "span", 95);
|
|
324
324
|
i0.ɵɵtext(1);
|
|
325
325
|
i0.ɵɵelementEnd();
|
|
@@ -328,11 +328,11 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_ng_templat
|
|
|
328
328
|
i0.ɵɵadvance();
|
|
329
329
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.promptModels.length, " ");
|
|
330
330
|
} }
|
|
331
|
-
function
|
|
331
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
332
332
|
i0.ɵɵelementStart(0, "span", 67);
|
|
333
333
|
i0.ɵɵelement(1, "i", 94);
|
|
334
334
|
i0.ɵɵtext(2, " Models ");
|
|
335
|
-
i0.ɵɵconditionalCreate(3,
|
|
335
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_template_1_Conditional_3_Template, 2, 1, "span", 95);
|
|
336
336
|
i0.ɵɵelementStart(4, "span", 96);
|
|
337
337
|
i0.ɵɵelement(5, "i", 97);
|
|
338
338
|
i0.ɵɵtext(6, " Priority order (first available model will be used) ");
|
|
@@ -342,259 +342,259 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_ng_templat
|
|
|
342
342
|
i0.ɵɵadvance(3);
|
|
343
343
|
i0.ɵɵconditional(ctx_r1.promptModels.length > 0 ? 3 : -1);
|
|
344
344
|
} }
|
|
345
|
-
function
|
|
345
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
346
346
|
i0.ɵɵelementStart(0, "div", 93);
|
|
347
347
|
i0.ɵɵelement(1, "i", 58);
|
|
348
348
|
i0.ɵɵtext(2, " Loading models... ");
|
|
349
349
|
i0.ɵɵelementEnd();
|
|
350
350
|
} }
|
|
351
|
-
function
|
|
352
|
-
const
|
|
351
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
352
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
353
353
|
i0.ɵɵelementStart(0, "div", 100)(1, "button", 101);
|
|
354
|
-
i0.ɵɵlistener("click", function
|
|
354
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Conditional_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
|
|
355
355
|
i0.ɵɵelement(2, "i", 77);
|
|
356
356
|
i0.ɵɵtext(3, " Add Model ");
|
|
357
357
|
i0.ɵɵelementEnd()();
|
|
358
358
|
} }
|
|
359
|
-
function
|
|
359
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
360
360
|
i0.ɵɵelementStart(0, "div", 98);
|
|
361
361
|
i0.ɵɵelement(1, "i", 99);
|
|
362
362
|
i0.ɵɵtext(2, " No models configured ");
|
|
363
|
-
i0.ɵɵconditionalCreate(3,
|
|
363
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Conditional_3_Template, 4, 0, "div", 100);
|
|
364
364
|
i0.ɵɵelementEnd();
|
|
365
365
|
} if (rf & 2) {
|
|
366
366
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
367
367
|
i0.ɵɵadvance(3);
|
|
368
368
|
i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.UserCanCreatePromptModels ? 3 : -1);
|
|
369
369
|
} }
|
|
370
|
-
function
|
|
370
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
371
371
|
i0.ɵɵelementStart(0, "div", 102);
|
|
372
372
|
i0.ɵɵelement(1, "i", 107);
|
|
373
373
|
i0.ɵɵtext(2, " Models are tried in priority order (highest priority first). The first available model that meets requirements will be used for execution. ");
|
|
374
374
|
i0.ɵɵelementEnd();
|
|
375
375
|
} }
|
|
376
|
-
function
|
|
376
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
377
377
|
i0.ɵɵelement(0, "i", 123);
|
|
378
378
|
i0.ɵɵelementStart(1, "span", 124);
|
|
379
379
|
i0.ɵɵtext(2);
|
|
380
380
|
i0.ɵɵelementEnd();
|
|
381
381
|
} if (rf & 2) {
|
|
382
|
-
const ɵ$
|
|
382
|
+
const ɵ$index_310_r17 = i0.ɵɵnextContext().$index;
|
|
383
383
|
i0.ɵɵadvance(2);
|
|
384
|
-
i0.ɵɵtextInterpolate1("#", ɵ$
|
|
384
|
+
i0.ɵɵtextInterpolate1("#", ɵ$index_310_r17 + 1);
|
|
385
385
|
} }
|
|
386
|
-
function
|
|
386
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
387
387
|
i0.ɵɵelementStart(0, "span", 110);
|
|
388
388
|
i0.ɵɵtext(1);
|
|
389
389
|
i0.ɵɵelementEnd();
|
|
390
390
|
} if (rf & 2) {
|
|
391
|
-
const
|
|
392
|
-
const
|
|
393
|
-
const ɵ$
|
|
394
|
-
i0.ɵɵproperty("title", i0.ɵɵinterpolate1("Priority ",
|
|
391
|
+
const ctx_r17 = i0.ɵɵnextContext();
|
|
392
|
+
const model_r19 = ctx_r17.$implicit;
|
|
393
|
+
const ɵ$index_310_r17 = ctx_r17.$index;
|
|
394
|
+
i0.ɵɵproperty("title", i0.ɵɵinterpolate1("Priority ", model_r19.Priority, " - Higher priority numbers are tried first"));
|
|
395
395
|
i0.ɵɵadvance();
|
|
396
|
-
i0.ɵɵtextInterpolate1("#", ɵ$
|
|
396
|
+
i0.ɵɵtextInterpolate1("#", ɵ$index_310_r17 + 1);
|
|
397
397
|
} }
|
|
398
|
-
function
|
|
399
|
-
const
|
|
398
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
399
|
+
const _r20 = i0.ɵɵgetCurrentView();
|
|
400
400
|
i0.ɵɵelementStart(0, "mj-dropdown", 125);
|
|
401
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
402
|
-
i0.ɵɵlistener("ValueChange", function
|
|
401
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r20); const model_r19 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(model_r19.ModelID, $event) || (model_r19.ModelID = $event); return i0.ɵɵresetView($event); });
|
|
402
|
+
i0.ɵɵlistener("ValueChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r20); const ɵ$index_310_r17 = i0.ɵɵnextContext().$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onModelChange($event, ɵ$index_310_r17)); });
|
|
403
403
|
i0.ɵɵelementEnd();
|
|
404
404
|
} if (rf & 2) {
|
|
405
|
-
const
|
|
405
|
+
const model_r19 = i0.ɵɵnextContext().$implicit;
|
|
406
406
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
407
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
408
|
-
i0.ɵɵproperty("name", "modelId_" + ctx_r1.getModelTrackId(
|
|
407
|
+
i0.ɵɵtwoWayProperty("ngModel", model_r19.ModelID);
|
|
408
|
+
i0.ɵɵproperty("name", "modelId_" + ctx_r1.getModelTrackId(model_r19))("Data", ctx_r1.availableModels)("ValuePrimitive", true)("Filterable", true);
|
|
409
409
|
} }
|
|
410
|
-
function
|
|
410
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
411
411
|
i0.ɵɵelementStart(0, "span", 22);
|
|
412
412
|
i0.ɵɵtext(1);
|
|
413
413
|
i0.ɵɵelementEnd();
|
|
414
414
|
} if (rf & 2) {
|
|
415
|
-
const
|
|
415
|
+
const model_r19 = i0.ɵɵnextContext().$implicit;
|
|
416
416
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
417
417
|
i0.ɵɵadvance();
|
|
418
|
-
i0.ɵɵtextInterpolate(ctx_r1.getModelDisplayName(
|
|
418
|
+
i0.ɵɵtextInterpolate(ctx_r1.getModelDisplayName(model_r19.ModelID));
|
|
419
419
|
} }
|
|
420
|
-
function
|
|
421
|
-
const
|
|
420
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
421
|
+
const _r21 = i0.ɵɵgetCurrentView();
|
|
422
422
|
i0.ɵɵelementStart(0, "mj-dropdown", 128);
|
|
423
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
423
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r21); const model_r19 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r19.VendorID, $event) || (model_r19.VendorID = $event); return i0.ɵɵresetView($event); });
|
|
424
424
|
i0.ɵɵelementEnd();
|
|
425
425
|
} if (rf & 2) {
|
|
426
|
-
const
|
|
426
|
+
const model_r19 = i0.ɵɵnextContext(3).$implicit;
|
|
427
427
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
428
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
429
|
-
i0.ɵɵproperty("name", "vendorId_" + ctx_r1.getModelTrackId(
|
|
428
|
+
i0.ɵɵtwoWayProperty("ngModel", model_r19.VendorID);
|
|
429
|
+
i0.ɵɵproperty("name", "vendorId_" + ctx_r1.getModelTrackId(model_r19))("Data", ctx_r1.getVendorsForModelSync(model_r19.ModelID))("ValuePrimitive", true)("Filterable", true);
|
|
430
430
|
} }
|
|
431
|
-
function
|
|
431
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
432
432
|
i0.ɵɵelementStart(0, "span", 131);
|
|
433
433
|
i0.ɵɵtext(1);
|
|
434
434
|
i0.ɵɵelementEnd();
|
|
435
435
|
} if (rf & 2) {
|
|
436
|
-
const
|
|
436
|
+
const model_r19 = i0.ɵɵnextContext(5).$implicit;
|
|
437
437
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
438
438
|
i0.ɵɵadvance();
|
|
439
|
-
i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(
|
|
439
|
+
i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r19.ModelID, ctx_r1.getVendorsForModelSync(model_r19.ModelID)[0].ID), ")");
|
|
440
440
|
} }
|
|
441
|
-
function
|
|
441
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
442
442
|
i0.ɵɵelementStart(0, "span", 130);
|
|
443
443
|
i0.ɵɵtext(1);
|
|
444
|
-
i0.ɵɵconditionalCreate(2,
|
|
444
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Conditional_2_Template, 2, 1, "span", 131);
|
|
445
445
|
i0.ɵɵelementEnd();
|
|
446
446
|
} if (rf & 2) {
|
|
447
|
-
const
|
|
447
|
+
const model_r19 = i0.ɵɵnextContext(4).$implicit;
|
|
448
448
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
449
|
-
i0.ɵɵstyleProp("color", ctx_r1.getVendorStatusColor(
|
|
449
|
+
i0.ɵɵstyleProp("color", ctx_r1.getVendorStatusColor(model_r19.ModelID, ctx_r1.getVendorsForModelSync(model_r19.ModelID)[0].ID));
|
|
450
450
|
i0.ɵɵadvance();
|
|
451
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.getVendorsForModelSync(
|
|
451
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.getVendorsForModelSync(model_r19.ModelID)[0].Name, " ");
|
|
452
452
|
i0.ɵɵadvance();
|
|
453
|
-
i0.ɵɵconditional(ctx_r1.getModelVendorStatus(
|
|
453
|
+
i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r19.ModelID, ctx_r1.getVendorsForModelSync(model_r19.ModelID)[0].ID) !== "Active" ? 2 : -1);
|
|
454
454
|
} }
|
|
455
|
-
function
|
|
455
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
456
456
|
i0.ɵɵelementStart(0, "span", 126);
|
|
457
457
|
i0.ɵɵtext(1, "No vendors available");
|
|
458
458
|
i0.ɵɵelementEnd();
|
|
459
459
|
} }
|
|
460
|
-
function
|
|
461
|
-
i0.ɵɵconditionalCreate(0,
|
|
460
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
461
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template, 3, 4, "span", 129)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template, 2, 0, "span", 126);
|
|
462
462
|
} if (rf & 2) {
|
|
463
|
-
const
|
|
463
|
+
const model_r19 = i0.ɵɵnextContext(3).$implicit;
|
|
464
464
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
465
|
-
i0.ɵɵconditional(ctx_r1.getVendorsForModelSync(
|
|
465
|
+
i0.ɵɵconditional(ctx_r1.getVendorsForModelSync(model_r19.ModelID).length === 1 ? 0 : 1);
|
|
466
466
|
} }
|
|
467
|
-
function
|
|
468
|
-
i0.ɵɵconditionalCreate(0,
|
|
467
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
468
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template, 1, 5, "mj-dropdown", 127)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Template, 2, 1);
|
|
469
469
|
} if (rf & 2) {
|
|
470
|
-
const
|
|
470
|
+
const model_r19 = i0.ɵɵnextContext(2).$implicit;
|
|
471
471
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
472
|
-
i0.ɵɵconditional(ctx_r1.shouldShowVendorDropdown(
|
|
472
|
+
i0.ɵɵconditional(ctx_r1.shouldShowVendorDropdown(model_r19.ModelID) ? 0 : 1);
|
|
473
473
|
} }
|
|
474
|
-
function
|
|
474
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
475
475
|
i0.ɵɵelementStart(0, "span", 126);
|
|
476
476
|
i0.ɵɵtext(1, "Select model first");
|
|
477
477
|
i0.ɵɵelementEnd();
|
|
478
478
|
} }
|
|
479
|
-
function
|
|
480
|
-
i0.ɵɵconditionalCreate(0,
|
|
479
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
480
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Template, 2, 1)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_1_Template, 2, 0, "span", 126);
|
|
481
481
|
} if (rf & 2) {
|
|
482
|
-
const
|
|
483
|
-
i0.ɵɵconditional(
|
|
482
|
+
const model_r19 = i0.ɵɵnextContext().$implicit;
|
|
483
|
+
i0.ɵɵconditional(model_r19.ModelID ? 0 : 1);
|
|
484
484
|
} }
|
|
485
|
-
function
|
|
485
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
486
486
|
i0.ɵɵelementStart(0, "span", 131);
|
|
487
487
|
i0.ɵɵtext(1);
|
|
488
488
|
i0.ɵɵelementEnd();
|
|
489
489
|
} if (rf & 2) {
|
|
490
|
-
const
|
|
490
|
+
const model_r19 = i0.ɵɵnextContext(3).$implicit;
|
|
491
491
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
492
492
|
i0.ɵɵadvance();
|
|
493
|
-
i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(
|
|
493
|
+
i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r19.ModelID, model_r19.VendorID), ")");
|
|
494
494
|
} }
|
|
495
|
-
function
|
|
495
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
496
496
|
i0.ɵɵelementStart(0, "span", 115);
|
|
497
497
|
i0.ɵɵtext(1);
|
|
498
|
-
i0.ɵɵconditionalCreate(2,
|
|
498
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Conditional_2_Template, 2, 1, "span", 131);
|
|
499
499
|
i0.ɵɵelementEnd();
|
|
500
500
|
} if (rf & 2) {
|
|
501
|
-
const
|
|
501
|
+
const model_r19 = i0.ɵɵnextContext(2).$implicit;
|
|
502
502
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
503
|
-
i0.ɵɵstyleProp("color", ctx_r1.getVendorStatusColor(
|
|
503
|
+
i0.ɵɵstyleProp("color", ctx_r1.getVendorStatusColor(model_r19.ModelID, model_r19.VendorID));
|
|
504
504
|
i0.ɵɵadvance();
|
|
505
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.getVendorDisplayName(
|
|
505
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.getVendorDisplayName(model_r19.VendorID), " ");
|
|
506
506
|
i0.ɵɵadvance();
|
|
507
|
-
i0.ɵɵconditional(ctx_r1.getModelVendorStatus(
|
|
507
|
+
i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r19.ModelID, model_r19.VendorID) !== "Active" ? 2 : -1);
|
|
508
508
|
} }
|
|
509
|
-
function
|
|
509
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
510
510
|
i0.ɵɵelementStart(0, "span", 133);
|
|
511
511
|
i0.ɵɵtext(1, "-");
|
|
512
512
|
i0.ɵɵelementEnd();
|
|
513
513
|
} }
|
|
514
|
-
function
|
|
515
|
-
i0.ɵɵconditionalCreate(0,
|
|
514
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
515
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Template, 3, 4, "span", 132)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_1_Template, 2, 0, "span", 133);
|
|
516
516
|
} if (rf & 2) {
|
|
517
|
-
const
|
|
518
|
-
i0.ɵɵconditional(
|
|
517
|
+
const model_r19 = i0.ɵɵnextContext().$implicit;
|
|
518
|
+
i0.ɵɵconditional(model_r19.VendorID && model_r19.ModelID ? 0 : 1);
|
|
519
519
|
} }
|
|
520
|
-
function
|
|
520
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
521
521
|
i0.ɵɵelementStart(0, "div", 134);
|
|
522
522
|
i0.ɵɵelement(1, "i", 58);
|
|
523
523
|
i0.ɵɵtext(2, " Loading... ");
|
|
524
524
|
i0.ɵɵelementEnd();
|
|
525
525
|
} }
|
|
526
|
-
function
|
|
527
|
-
const
|
|
526
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
527
|
+
const _r22 = i0.ɵɵgetCurrentView();
|
|
528
528
|
i0.ɵɵelementStart(0, "mj-dropdown", 136);
|
|
529
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
530
|
-
i0.ɵɵlistener("ValueChange", function
|
|
529
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r22); const model_r19 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵtwoWayBindingSet(model_r19.ConfigurationID, $event) || (model_r19.ConfigurationID = $event); return i0.ɵɵresetView($event); });
|
|
530
|
+
i0.ɵɵlistener("ValueChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r22); const ɵ$index_310_r17 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onConfigurationChange($event, ɵ$index_310_r17)); });
|
|
531
531
|
i0.ɵɵelementEnd();
|
|
532
532
|
} if (rf & 2) {
|
|
533
|
-
const
|
|
533
|
+
const model_r19 = i0.ɵɵnextContext(2).$implicit;
|
|
534
534
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
535
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
536
|
-
i0.ɵɵproperty("name", "configurationId_" + ctx_r1.getModelTrackId(
|
|
535
|
+
i0.ɵɵtwoWayProperty("ngModel", model_r19.ConfigurationID);
|
|
536
|
+
i0.ɵɵproperty("name", "configurationId_" + ctx_r1.getModelTrackId(model_r19))("Data", ctx_r1.availableConfigurations)("ValuePrimitive", true)("Filterable", true);
|
|
537
537
|
} }
|
|
538
|
-
function
|
|
539
|
-
i0.ɵɵconditionalCreate(0,
|
|
538
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
539
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_0_Template, 3, 0, "div", 134)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template, 1, 5, "mj-dropdown", 135);
|
|
540
540
|
} if (rf & 2) {
|
|
541
541
|
const ctx_r1 = i0.ɵɵnextContext(6);
|
|
542
542
|
i0.ɵɵconditional(ctx_r1.isLoadingConfigurations ? 0 : 1);
|
|
543
543
|
} }
|
|
544
|
-
function
|
|
544
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
545
545
|
i0.ɵɵelementStart(0, "span", 115);
|
|
546
546
|
i0.ɵɵtext(1);
|
|
547
547
|
i0.ɵɵelementEnd();
|
|
548
548
|
} if (rf & 2) {
|
|
549
|
-
const
|
|
549
|
+
const model_r19 = i0.ɵɵnextContext().$implicit;
|
|
550
550
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
551
551
|
i0.ɵɵadvance();
|
|
552
|
-
i0.ɵɵtextInterpolate(ctx_r1.getConfigurationDisplayName(
|
|
552
|
+
i0.ɵɵtextInterpolate(ctx_r1.getConfigurationDisplayName(model_r19.ConfigurationID));
|
|
553
553
|
} }
|
|
554
|
-
function
|
|
554
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
555
555
|
i0.ɵɵelementStart(0, "span", 117);
|
|
556
556
|
i0.ɵɵtext(1);
|
|
557
557
|
i0.ɵɵpipe(2, "date");
|
|
558
558
|
i0.ɵɵelementEnd();
|
|
559
559
|
} if (rf & 2) {
|
|
560
|
-
const
|
|
560
|
+
const model_r19 = i0.ɵɵnextContext().$implicit;
|
|
561
561
|
i0.ɵɵadvance();
|
|
562
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(2, 1,
|
|
562
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(2, 1, model_r19.__mj_CreatedAt, "short"));
|
|
563
563
|
} }
|
|
564
|
-
function
|
|
564
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
565
565
|
i0.ɵɵelementStart(0, "span", 118);
|
|
566
566
|
i0.ɵɵtext(1, "New");
|
|
567
567
|
i0.ɵɵelementEnd();
|
|
568
568
|
} }
|
|
569
|
-
function
|
|
570
|
-
const
|
|
569
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
570
|
+
const _r23 = i0.ɵɵgetCurrentView();
|
|
571
571
|
i0.ɵɵelementStart(0, "button", 139);
|
|
572
|
-
i0.ɵɵlistener("click", function
|
|
572
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r23); const ɵ$index_310_r17 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelUp(ɵ$index_310_r17)); });
|
|
573
573
|
i0.ɵɵelement(1, "i", 140);
|
|
574
574
|
i0.ɵɵelementEnd();
|
|
575
575
|
i0.ɵɵelementStart(2, "button", 141);
|
|
576
|
-
i0.ɵɵlistener("click", function
|
|
576
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r23); const ɵ$index_310_r17 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelDown(ɵ$index_310_r17)); });
|
|
577
577
|
i0.ɵɵelement(3, "i", 142);
|
|
578
578
|
i0.ɵɵelementEnd();
|
|
579
579
|
} if (rf & 2) {
|
|
580
|
-
const ɵ$
|
|
580
|
+
const ɵ$index_310_r17 = i0.ɵɵnextContext(2).$index;
|
|
581
581
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
582
|
-
i0.ɵɵproperty("disabled", ɵ$
|
|
582
|
+
i0.ɵɵproperty("disabled", ɵ$index_310_r17 === 0);
|
|
583
583
|
i0.ɵɵadvance(2);
|
|
584
|
-
i0.ɵɵproperty("disabled", ɵ$
|
|
584
|
+
i0.ɵɵproperty("disabled", ɵ$index_310_r17 === ctx_r1.promptModels.length - 1);
|
|
585
585
|
} }
|
|
586
|
-
function
|
|
587
|
-
const
|
|
586
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
587
|
+
const _r24 = i0.ɵɵgetCurrentView();
|
|
588
588
|
i0.ɵɵelementStart(0, "button", 143);
|
|
589
|
-
i0.ɵɵlistener("click", function
|
|
589
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r24); const ɵ$index_310_r17 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.removePromptModel(ɵ$index_310_r17)); });
|
|
590
590
|
i0.ɵɵelement(1, "i", 144);
|
|
591
591
|
i0.ɵɵelementEnd();
|
|
592
592
|
} }
|
|
593
|
-
function
|
|
593
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
594
594
|
i0.ɵɵelementStart(0, "div", 137);
|
|
595
|
-
i0.ɵɵconditionalCreate(1,
|
|
595
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template, 4, 2);
|
|
596
596
|
i0.ɵɵelementEnd();
|
|
597
|
-
i0.ɵɵconditionalCreate(2,
|
|
597
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template, 2, 0, "button", 138);
|
|
598
598
|
} if (rf & 2) {
|
|
599
599
|
const ctx_r1 = i0.ɵɵnextContext(6);
|
|
600
600
|
i0.ɵɵadvance();
|
|
@@ -602,166 +602,166 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
|
|
|
602
602
|
i0.ɵɵadvance();
|
|
603
603
|
i0.ɵɵconditional(ctx_r1.UserCanDeletePromptModels ? 2 : -1);
|
|
604
604
|
} }
|
|
605
|
-
function
|
|
605
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
606
606
|
i0.ɵɵelementStart(0, "span")(1, "strong");
|
|
607
607
|
i0.ɵɵtext(2, "Status:");
|
|
608
608
|
i0.ɵɵelementEnd();
|
|
609
609
|
i0.ɵɵtext(3);
|
|
610
610
|
i0.ɵɵelementEnd();
|
|
611
611
|
} if (rf & 2) {
|
|
612
|
-
const
|
|
612
|
+
const model_r19 = i0.ɵɵnextContext().$implicit;
|
|
613
613
|
i0.ɵɵadvance(3);
|
|
614
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
614
|
+
i0.ɵɵtextInterpolate1(" ", model_r19.Status);
|
|
615
615
|
} }
|
|
616
|
-
function
|
|
617
|
-
const
|
|
616
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
617
|
+
const _r26 = i0.ɵɵgetCurrentView();
|
|
618
618
|
i0.ɵɵelementStart(0, "div")(1, "label", 149);
|
|
619
619
|
i0.ɵɵtext(2, "Parallel Count");
|
|
620
620
|
i0.ɵɵelementEnd();
|
|
621
621
|
i0.ɵɵelementStart(3, "mj-numeric-input", 151);
|
|
622
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
622
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template_mj_numeric_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r26); const model_r19 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r19.ParallelCount, $event) || (model_r19.ParallelCount = $event); return i0.ɵɵresetView($event); });
|
|
623
623
|
i0.ɵɵelementEnd()();
|
|
624
624
|
} if (rf & 2) {
|
|
625
|
-
const
|
|
626
|
-
const
|
|
627
|
-
const ɵ$
|
|
625
|
+
const ctx_r17 = i0.ɵɵnextContext(3);
|
|
626
|
+
const model_r19 = ctx_r17.$implicit;
|
|
627
|
+
const ɵ$index_310_r17 = ctx_r17.$index;
|
|
628
628
|
i0.ɵɵadvance(3);
|
|
629
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
630
|
-
i0.ɵɵproperty("name", "parallelCount_" + ɵ$
|
|
629
|
+
i0.ɵɵtwoWayProperty("ngModel", model_r19.ParallelCount);
|
|
630
|
+
i0.ɵɵproperty("name", "parallelCount_" + ɵ$index_310_r17)("Min", 1)("Step", 1)("Format", "n0");
|
|
631
631
|
} }
|
|
632
|
-
function
|
|
633
|
-
const
|
|
632
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
633
|
+
const _r27 = i0.ɵɵgetCurrentView();
|
|
634
634
|
i0.ɵɵelementStart(0, "div")(1, "label", 149);
|
|
635
635
|
i0.ɵɵtext(2, "Config Parameter");
|
|
636
636
|
i0.ɵɵelementEnd();
|
|
637
637
|
i0.ɵɵelementStart(3, "input", 152);
|
|
638
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
638
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r27); const model_r19 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r19.ParallelConfigParam, $event) || (model_r19.ParallelConfigParam = $event); return i0.ɵɵresetView($event); });
|
|
639
639
|
i0.ɵɵelementEnd()();
|
|
640
640
|
} if (rf & 2) {
|
|
641
|
-
const
|
|
642
|
-
const
|
|
643
|
-
const ɵ$
|
|
641
|
+
const ctx_r17 = i0.ɵɵnextContext(3);
|
|
642
|
+
const model_r19 = ctx_r17.$implicit;
|
|
643
|
+
const ɵ$index_310_r17 = ctx_r17.$index;
|
|
644
644
|
i0.ɵɵadvance(3);
|
|
645
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
646
|
-
i0.ɵɵproperty("name", "parallelConfigParam_" + ɵ$
|
|
645
|
+
i0.ɵɵtwoWayProperty("ngModel", model_r19.ParallelConfigParam);
|
|
646
|
+
i0.ɵɵproperty("name", "parallelConfigParam_" + ɵ$index_310_r17);
|
|
647
647
|
} }
|
|
648
|
-
function
|
|
649
|
-
const
|
|
648
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
649
|
+
const _r25 = i0.ɵɵgetCurrentView();
|
|
650
650
|
i0.ɵɵelementStart(0, "div", 147)(1, "div")(2, "label", 149);
|
|
651
651
|
i0.ɵɵtext(3, "Parallel Mode");
|
|
652
652
|
i0.ɵɵelementEnd();
|
|
653
653
|
i0.ɵɵelementStart(4, "mj-dropdown", 150);
|
|
654
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
654
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template_mj_dropdown_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r25); const model_r19 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵtwoWayBindingSet(model_r19.ParallelizationMode, $event) || (model_r19.ParallelizationMode = $event); return i0.ɵɵresetView($event); });
|
|
655
655
|
i0.ɵɵelementEnd()();
|
|
656
|
-
i0.ɵɵconditionalCreate(5,
|
|
657
|
-
i0.ɵɵconditionalCreate(6,
|
|
656
|
+
i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template, 4, 5, "div");
|
|
657
|
+
i0.ɵɵconditionalCreate(6, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template, 4, 2, "div");
|
|
658
658
|
i0.ɵɵelementEnd();
|
|
659
659
|
} if (rf & 2) {
|
|
660
|
-
const
|
|
661
|
-
const
|
|
662
|
-
const ɵ$
|
|
660
|
+
const ctx_r17 = i0.ɵɵnextContext(2);
|
|
661
|
+
const model_r19 = ctx_r17.$implicit;
|
|
662
|
+
const ɵ$index_310_r17 = ctx_r17.$index;
|
|
663
663
|
i0.ɵɵadvance(4);
|
|
664
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
665
|
-
i0.ɵɵproperty("name", "parallelMode_" + ɵ$
|
|
664
|
+
i0.ɵɵtwoWayProperty("ngModel", model_r19.ParallelizationMode);
|
|
665
|
+
i0.ɵɵproperty("name", "parallelMode_" + ɵ$index_310_r17)("Data", i0.ɵɵpureFunction3(9, _c4, i0.ɵɵpureFunction0(6, _c5), i0.ɵɵpureFunction0(7, _c6), i0.ɵɵpureFunction0(8, _c7)))("ValuePrimitive", true);
|
|
666
666
|
i0.ɵɵadvance();
|
|
667
|
-
i0.ɵɵconditional(
|
|
667
|
+
i0.ɵɵconditional(model_r19.ParallelizationMode === "StaticCount" ? 5 : -1);
|
|
668
668
|
i0.ɵɵadvance();
|
|
669
|
-
i0.ɵɵconditional(
|
|
669
|
+
i0.ɵɵconditional(model_r19.ParallelizationMode === "ConfigParam" ? 6 : -1);
|
|
670
670
|
} }
|
|
671
|
-
function
|
|
671
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
672
672
|
i0.ɵɵelementStart(0, "span")(1, "strong");
|
|
673
673
|
i0.ɵɵtext(2, "Parallel Mode:");
|
|
674
674
|
i0.ɵɵelementEnd();
|
|
675
675
|
i0.ɵɵtext(3);
|
|
676
676
|
i0.ɵɵelementEnd();
|
|
677
677
|
} if (rf & 2) {
|
|
678
|
-
const
|
|
678
|
+
const model_r19 = i0.ɵɵnextContext(3).$implicit;
|
|
679
679
|
i0.ɵɵadvance(3);
|
|
680
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
680
|
+
i0.ɵɵtextInterpolate1(" ", model_r19.ParallelizationMode);
|
|
681
681
|
} }
|
|
682
|
-
function
|
|
682
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
683
683
|
i0.ɵɵelementStart(0, "span")(1, "strong");
|
|
684
684
|
i0.ɵɵtext(2, "Parallel Count:");
|
|
685
685
|
i0.ɵɵelementEnd();
|
|
686
686
|
i0.ɵɵtext(3);
|
|
687
687
|
i0.ɵɵelementEnd();
|
|
688
688
|
} if (rf & 2) {
|
|
689
|
-
const
|
|
689
|
+
const model_r19 = i0.ɵɵnextContext(3).$implicit;
|
|
690
690
|
i0.ɵɵadvance(3);
|
|
691
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
691
|
+
i0.ɵɵtextInterpolate1(" ", model_r19.ParallelCount);
|
|
692
692
|
} }
|
|
693
|
-
function
|
|
693
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
694
694
|
i0.ɵɵelementStart(0, "span")(1, "strong");
|
|
695
695
|
i0.ɵɵtext(2, "Config Param:");
|
|
696
696
|
i0.ɵɵelementEnd();
|
|
697
697
|
i0.ɵɵtext(3);
|
|
698
698
|
i0.ɵɵelementEnd();
|
|
699
699
|
} if (rf & 2) {
|
|
700
|
-
const
|
|
700
|
+
const model_r19 = i0.ɵɵnextContext(3).$implicit;
|
|
701
701
|
i0.ɵɵadvance(3);
|
|
702
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
702
|
+
i0.ɵɵtextInterpolate1(" ", model_r19.ParallelConfigParam);
|
|
703
703
|
} }
|
|
704
|
-
function
|
|
704
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
705
705
|
i0.ɵɵelementStart(0, "div", 148);
|
|
706
|
-
i0.ɵɵconditionalCreate(1,
|
|
707
|
-
i0.ɵɵconditionalCreate(2,
|
|
708
|
-
i0.ɵɵconditionalCreate(3,
|
|
706
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_1_Template, 4, 1, "span");
|
|
707
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_2_Template, 4, 1, "span");
|
|
708
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_3_Template, 4, 1, "span");
|
|
709
709
|
i0.ɵɵelementEnd();
|
|
710
710
|
} if (rf & 2) {
|
|
711
|
-
const
|
|
711
|
+
const model_r19 = i0.ɵɵnextContext(2).$implicit;
|
|
712
712
|
i0.ɵɵadvance();
|
|
713
|
-
i0.ɵɵconditional(
|
|
713
|
+
i0.ɵɵconditional(model_r19.ParallelizationMode ? 1 : -1);
|
|
714
714
|
i0.ɵɵadvance();
|
|
715
|
-
i0.ɵɵconditional(
|
|
715
|
+
i0.ɵɵconditional(model_r19.ParallelCount ? 2 : -1);
|
|
716
716
|
i0.ɵɵadvance();
|
|
717
|
-
i0.ɵɵconditional(
|
|
717
|
+
i0.ɵɵconditional(model_r19.ParallelConfigParam ? 3 : -1);
|
|
718
718
|
} }
|
|
719
|
-
function
|
|
719
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
720
720
|
i0.ɵɵelementStart(0, "div", 122)(1, "div", 145);
|
|
721
721
|
i0.ɵɵelement(2, "i", 146);
|
|
722
722
|
i0.ɵɵtext(3, " Model-Specific Parallel Execution ");
|
|
723
723
|
i0.ɵɵelementEnd();
|
|
724
|
-
i0.ɵɵconditionalCreate(4,
|
|
724
|
+
i0.ɵɵconditionalCreate(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template, 7, 13, "div", 147)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Template, 4, 3, "div", 148);
|
|
725
725
|
i0.ɵɵelementEnd();
|
|
726
726
|
} if (rf & 2) {
|
|
727
727
|
const ctx_r1 = i0.ɵɵnextContext(6);
|
|
728
728
|
i0.ɵɵadvance(4);
|
|
729
729
|
i0.ɵɵconditional(ctx_r1.EditMode ? 4 : 5);
|
|
730
730
|
} }
|
|
731
|
-
function
|
|
732
|
-
const
|
|
731
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Template(rf, ctx) { if (rf & 1) {
|
|
732
|
+
const _r16 = i0.ɵɵgetCurrentView();
|
|
733
733
|
i0.ɵɵelementStart(0, "div", 108);
|
|
734
|
-
i0.ɵɵlistener("dragstart", function
|
|
734
|
+
i0.ɵɵlistener("dragstart", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Template_div_dragstart_0_listener($event) { const ɵ$index_310_r17 = i0.ɵɵrestoreView(_r16).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragStart($event, ɵ$index_310_r17)); })("dragover", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Template_div_dragover_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragOver($event)); })("drop", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Template_div_drop_0_listener($event) { const ɵ$index_310_r17 = i0.ɵɵrestoreView(_r16).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDrop($event, ɵ$index_310_r17)); })("dragend", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Template_div_dragend_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragEnd($event)); });
|
|
735
735
|
i0.ɵɵelementStart(1, "div", 109);
|
|
736
|
-
i0.ɵɵconditionalCreate(2,
|
|
736
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_2_Template, 3, 1)(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_3_Template, 2, 3, "span", 110);
|
|
737
737
|
i0.ɵɵelementEnd();
|
|
738
738
|
i0.ɵɵelementStart(4, "div", 111);
|
|
739
|
-
i0.ɵɵconditionalCreate(5,
|
|
739
|
+
i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template, 1, 5, "mj-dropdown", 112)(6, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_6_Template, 2, 1, "span", 22);
|
|
740
740
|
i0.ɵɵelementEnd();
|
|
741
741
|
i0.ɵɵelementStart(7, "div", 113);
|
|
742
|
-
i0.ɵɵconditionalCreate(8,
|
|
742
|
+
i0.ɵɵconditionalCreate(8, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Template, 2, 1)(9, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Template, 2, 1);
|
|
743
743
|
i0.ɵɵelementEnd();
|
|
744
744
|
i0.ɵɵelementStart(10, "div", 114);
|
|
745
|
-
i0.ɵɵconditionalCreate(11,
|
|
745
|
+
i0.ɵɵconditionalCreate(11, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Template, 2, 1)(12, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_12_Template, 2, 1, "span", 115);
|
|
746
746
|
i0.ɵɵelementEnd();
|
|
747
747
|
i0.ɵɵelementStart(13, "div", 116);
|
|
748
|
-
i0.ɵɵconditionalCreate(14,
|
|
748
|
+
i0.ɵɵconditionalCreate(14, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_14_Template, 3, 4, "span", 117)(15, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_15_Template, 2, 0, "span", 118);
|
|
749
749
|
i0.ɵɵelementEnd();
|
|
750
750
|
i0.ɵɵelementStart(16, "div", 119);
|
|
751
|
-
i0.ɵɵconditionalCreate(17,
|
|
751
|
+
i0.ɵɵconditionalCreate(17, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Template, 3, 2);
|
|
752
752
|
i0.ɵɵelementEnd()();
|
|
753
753
|
i0.ɵɵelementStart(18, "div", 120);
|
|
754
754
|
i0.ɵɵelement(19, "div");
|
|
755
755
|
i0.ɵɵelementStart(20, "div")(21, "div", 121);
|
|
756
|
-
i0.ɵɵconditionalCreate(22,
|
|
756
|
+
i0.ɵɵconditionalCreate(22, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_22_Template, 4, 1, "span");
|
|
757
757
|
i0.ɵɵelementEnd();
|
|
758
|
-
i0.ɵɵconditionalCreate(23,
|
|
758
|
+
i0.ɵɵconditionalCreate(23, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Template, 6, 1, "div", 122);
|
|
759
759
|
i0.ɵɵelementEnd()();
|
|
760
760
|
} if (rf & 2) {
|
|
761
|
-
const
|
|
762
|
-
const ɵ$
|
|
761
|
+
const model_r19 = ctx.$implicit;
|
|
762
|
+
const ɵ$index_310_r17 = ctx.$index;
|
|
763
763
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
764
|
-
i0.ɵɵstyleProp("background", !
|
|
764
|
+
i0.ɵɵstyleProp("background", !model_r19.ModelID ? "#fff3cd" : ctx_r1.draggedIndex === ɵ$index_310_r17 ? "color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))" : "var(--mj-bg-surface-card)")("border-left", !model_r19.ModelID ? "3px solid #ffc107" : "none")("opacity", ctx_r1.draggedIndex === ɵ$index_310_r17 ? "0.5" : "1");
|
|
765
765
|
i0.ɵɵproperty("draggable", ctx_r1.EditMode);
|
|
766
766
|
i0.ɵɵadvance(2);
|
|
767
767
|
i0.ɵɵconditional(ctx_r1.EditMode ? 2 : 3);
|
|
@@ -772,24 +772,24 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
|
|
|
772
772
|
i0.ɵɵadvance(3);
|
|
773
773
|
i0.ɵɵconditional(ctx_r1.EditMode ? 11 : 12);
|
|
774
774
|
i0.ɵɵadvance(3);
|
|
775
|
-
i0.ɵɵconditional(
|
|
775
|
+
i0.ɵɵconditional(model_r19.ID ? 14 : 15);
|
|
776
776
|
i0.ɵɵadvance(3);
|
|
777
777
|
i0.ɵɵconditional(ctx_r1.EditMode ? 17 : -1);
|
|
778
778
|
i0.ɵɵadvance(5);
|
|
779
|
-
i0.ɵɵconditional(
|
|
779
|
+
i0.ɵɵconditional(model_r19.Status ? 22 : -1);
|
|
780
780
|
i0.ɵɵadvance();
|
|
781
781
|
i0.ɵɵconditional(ctx_r1.record.ParallelizationMode === "ModelSpecific" ? 23 : -1);
|
|
782
782
|
} }
|
|
783
|
-
function
|
|
784
|
-
const
|
|
783
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
784
|
+
const _r28 = i0.ɵɵgetCurrentView();
|
|
785
785
|
i0.ɵɵelementStart(0, "div", 106)(1, "button", 153);
|
|
786
|
-
i0.ɵɵlistener("click", function
|
|
786
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_18_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
|
|
787
787
|
i0.ɵɵelement(2, "i", 77);
|
|
788
788
|
i0.ɵɵtext(3, " Add Model ");
|
|
789
789
|
i0.ɵɵelementEnd()();
|
|
790
790
|
} }
|
|
791
|
-
function
|
|
792
|
-
i0.ɵɵconditionalCreate(0,
|
|
791
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
792
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_0_Template, 3, 0, "div", 102);
|
|
793
793
|
i0.ɵɵelementStart(1, "div", 103)(2, "div", 104);
|
|
794
794
|
i0.ɵɵelement(3, "i", 105);
|
|
795
795
|
i0.ɵɵelementEnd();
|
|
@@ -810,8 +810,8 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
|
|
|
810
810
|
i0.ɵɵelementStart(14, "div");
|
|
811
811
|
i0.ɵɵtext(15, "Actions");
|
|
812
812
|
i0.ɵɵelementEnd()();
|
|
813
|
-
i0.ɵɵrepeaterCreate(16,
|
|
814
|
-
i0.ɵɵconditionalCreate(18,
|
|
813
|
+
i0.ɵɵrepeaterCreate(16, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Template, 24, 15, null, null, _forTrack0, true);
|
|
814
|
+
i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_18_Template, 4, 0, "div", 106);
|
|
815
815
|
} if (rf & 2) {
|
|
816
816
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
817
817
|
i0.ɵɵconditional(ctx_r1.promptModels.length > 1 ? 0 : -1);
|
|
@@ -820,17 +820,17 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
|
|
|
820
820
|
i0.ɵɵadvance(2);
|
|
821
821
|
i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.UserCanCreatePromptModels ? 18 : -1);
|
|
822
822
|
} }
|
|
823
|
-
function
|
|
824
|
-
i0.ɵɵconditionalCreate(0,
|
|
823
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
824
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Template, 4, 1, "div", 98)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Template, 19, 2);
|
|
825
825
|
} if (rf & 2) {
|
|
826
826
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
827
827
|
i0.ɵɵconditional(ctx_r1.promptModels.length === 0 ? 0 : 1);
|
|
828
828
|
} }
|
|
829
|
-
function
|
|
829
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Template(rf, ctx) { if (rf & 1) {
|
|
830
830
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
|
|
831
|
-
i0.ɵɵtemplate(1,
|
|
831
|
+
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_template_1_Template, 7, 1, "ng-template", 29);
|
|
832
832
|
i0.ɵɵelementStart(2, "div", 35)(3, "div", 92);
|
|
833
|
-
i0.ɵɵconditionalCreate(4,
|
|
833
|
+
i0.ɵɵconditionalCreate(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_4_Template, 3, 0, "div", 93)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Template, 2, 1);
|
|
834
834
|
i0.ɵɵelementEnd()()();
|
|
835
835
|
} if (rf & 2) {
|
|
836
836
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -838,48 +838,48 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Template(r
|
|
|
838
838
|
i0.ɵɵadvance(4);
|
|
839
839
|
i0.ɵɵconditional(ctx_r1.isLoadingModels ? 4 : 5);
|
|
840
840
|
} }
|
|
841
|
-
function
|
|
841
|
+
function MJAIPromptFormComponentExtended_Conditional_1_ng_template_44_Template(rf, ctx) { if (rf & 1) {
|
|
842
842
|
i0.ɵɵelementStart(0, "span", 67);
|
|
843
843
|
i0.ɵɵelement(1, "i", 154);
|
|
844
844
|
i0.ɵɵtext(2, " Advanced Configuration ");
|
|
845
845
|
i0.ɵɵelementEnd();
|
|
846
846
|
} }
|
|
847
|
-
function
|
|
847
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_49_Template(rf, ctx) { if (rf & 1) {
|
|
848
848
|
i0.ɵɵelement(0, "mj-form-field", 38);
|
|
849
849
|
} if (rf & 2) {
|
|
850
850
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
851
851
|
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
|
|
852
852
|
} }
|
|
853
|
-
function
|
|
853
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_50_Template(rf, ctx) { if (rf & 1) {
|
|
854
854
|
i0.ɵɵelement(0, "mj-form-field", 39);
|
|
855
855
|
} if (rf & 2) {
|
|
856
856
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
857
857
|
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
|
|
858
858
|
} }
|
|
859
|
-
function
|
|
859
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_59_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
860
860
|
i0.ɵɵelementStart(0, "div", 155);
|
|
861
861
|
i0.ɵɵelement(1, "i", 58);
|
|
862
862
|
i0.ɵɵtext(2, " Loading prompts... ");
|
|
863
863
|
i0.ɵɵelementEnd();
|
|
864
864
|
} }
|
|
865
|
-
function
|
|
866
|
-
const
|
|
865
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_59_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
866
|
+
const _r29 = i0.ɵɵgetCurrentView();
|
|
867
867
|
i0.ɵɵelementStart(0, "mj-dropdown", 157);
|
|
868
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
869
|
-
i0.ɵɵlistener("ValueChange", function
|
|
868
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_59_Conditional_1_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.ResultSelectorPromptID, $event) || (ctx_r1.record.ResultSelectorPromptID = $event); return i0.ɵɵresetView($event); });
|
|
869
|
+
i0.ɵɵlistener("ValueChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_59_Conditional_1_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onResultSelectorChange($event)); });
|
|
870
870
|
i0.ɵɵelementEnd();
|
|
871
871
|
} if (rf & 2) {
|
|
872
872
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
873
873
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.ResultSelectorPromptID);
|
|
874
874
|
i0.ɵɵproperty("Data", ctx_r1.resultSelectorTreeData)("ValuePrimitive", true)("Filterable", true);
|
|
875
875
|
} }
|
|
876
|
-
function
|
|
877
|
-
i0.ɵɵconditionalCreate(0,
|
|
876
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_59_Template(rf, ctx) { if (rf & 1) {
|
|
877
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_59_Conditional_0_Template, 3, 0, "div", 155)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_59_Conditional_1_Template, 1, 4, "mj-dropdown", 156);
|
|
878
878
|
} if (rf & 2) {
|
|
879
879
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
880
880
|
i0.ɵɵconditional(ctx_r1.isLoadingResultSelectorData ? 0 : 1);
|
|
881
881
|
} }
|
|
882
|
-
function
|
|
882
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_60_Template(rf, ctx) { if (rf & 1) {
|
|
883
883
|
i0.ɵɵelementStart(0, "span", 46);
|
|
884
884
|
i0.ɵɵtext(1);
|
|
885
885
|
i0.ɵɵelementEnd();
|
|
@@ -888,13 +888,13 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_60_Template(r
|
|
|
888
888
|
i0.ɵɵadvance();
|
|
889
889
|
i0.ɵɵtextInterpolate(ctx_r1.getPromptDisplayName(ctx_r1.record.ResultSelectorPromptID || "") || "None selected");
|
|
890
890
|
} }
|
|
891
|
-
function
|
|
891
|
+
function MJAIPromptFormComponentExtended_Conditional_1_ng_template_62_Template(rf, ctx) { if (rf & 1) {
|
|
892
892
|
i0.ɵɵelementStart(0, "span", 67);
|
|
893
893
|
i0.ɵɵelement(1, "i", 158);
|
|
894
894
|
i0.ɵɵtext(2, " Prefill & Output Control ");
|
|
895
895
|
i0.ɵɵelementEnd();
|
|
896
896
|
} }
|
|
897
|
-
function
|
|
897
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
898
898
|
i0.ɵɵelementStart(0, "span", 67);
|
|
899
899
|
i0.ɵɵelement(1, "i", 159);
|
|
900
900
|
i0.ɵɵtext(2, " Template Parameters ");
|
|
@@ -910,43 +910,43 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_ng_templat
|
|
|
910
910
|
i0.ɵɵadvance(4);
|
|
911
911
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.templateParams.length, " ");
|
|
912
912
|
} }
|
|
913
|
-
function
|
|
913
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
914
914
|
i0.ɵɵelementStart(0, "div", 93);
|
|
915
915
|
i0.ɵɵelement(1, "i", 58);
|
|
916
916
|
i0.ɵɵtext(2, " Loading template parameters... ");
|
|
917
917
|
i0.ɵɵelementEnd();
|
|
918
918
|
} }
|
|
919
|
-
function
|
|
919
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
920
920
|
i0.ɵɵelementStart(0, "div", 98);
|
|
921
921
|
i0.ɵɵelement(1, "i", 99);
|
|
922
922
|
i0.ɵɵtext(2, " This template has no parameters defined ");
|
|
923
923
|
i0.ɵɵelementEnd();
|
|
924
924
|
} }
|
|
925
|
-
function
|
|
925
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
926
926
|
i0.ɵɵelementStart(0, "span", 173);
|
|
927
927
|
i0.ɵɵtext(1, "*");
|
|
928
928
|
i0.ɵɵelementEnd();
|
|
929
929
|
} }
|
|
930
|
-
function
|
|
930
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
931
931
|
i0.ɵɵelementStart(0, "span", 175);
|
|
932
932
|
i0.ɵɵtext(1, "Required");
|
|
933
933
|
i0.ɵɵelementEnd();
|
|
934
934
|
} }
|
|
935
|
-
function
|
|
935
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
936
936
|
i0.ɵɵelementStart(0, "span", 176);
|
|
937
937
|
i0.ɵɵtext(1, "Optional");
|
|
938
938
|
i0.ɵɵelementEnd();
|
|
939
939
|
} }
|
|
940
|
-
function
|
|
940
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
941
941
|
i0.ɵɵelementStart(0, "p", 177);
|
|
942
942
|
i0.ɵɵtext(1);
|
|
943
943
|
i0.ɵɵelementEnd();
|
|
944
944
|
} if (rf & 2) {
|
|
945
|
-
const
|
|
945
|
+
const param_r30 = i0.ɵɵnextContext().$implicit;
|
|
946
946
|
i0.ɵɵadvance();
|
|
947
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
947
|
+
i0.ɵɵtextInterpolate1(" ", param_r30.Description, " ");
|
|
948
948
|
} }
|
|
949
|
-
function
|
|
949
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
950
950
|
i0.ɵɵelementStart(0, "div", 182)(1, "label", 183);
|
|
951
951
|
i0.ɵɵtext(2, "Default Value");
|
|
952
952
|
i0.ɵɵelementEnd();
|
|
@@ -954,11 +954,11 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditiona
|
|
|
954
954
|
i0.ɵɵtext(4);
|
|
955
955
|
i0.ɵɵelementEnd()();
|
|
956
956
|
} if (rf & 2) {
|
|
957
|
-
const
|
|
957
|
+
const param_r30 = i0.ɵɵnextContext().$implicit;
|
|
958
958
|
i0.ɵɵadvance(4);
|
|
959
|
-
i0.ɵɵtextInterpolate(
|
|
959
|
+
i0.ɵɵtextInterpolate(param_r30.DefaultValue);
|
|
960
960
|
} }
|
|
961
|
-
function
|
|
961
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
962
962
|
i0.ɵɵelementStart(0, "div", 182)(1, "label", 183);
|
|
963
963
|
i0.ɵɵtext(2, "Entity");
|
|
964
964
|
i0.ɵɵelementEnd();
|
|
@@ -966,32 +966,32 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditiona
|
|
|
966
966
|
i0.ɵɵtext(4);
|
|
967
967
|
i0.ɵɵelementEnd()();
|
|
968
968
|
} if (rf & 2) {
|
|
969
|
-
const
|
|
969
|
+
const param_r30 = i0.ɵɵnextContext().$implicit;
|
|
970
970
|
i0.ɵɵadvance(4);
|
|
971
|
-
i0.ɵɵtextInterpolate(
|
|
971
|
+
i0.ɵɵtextInterpolate(param_r30.Entity || "Entity ID: " + param_r30.EntityID);
|
|
972
972
|
} }
|
|
973
|
-
function
|
|
973
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_20_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
974
974
|
i0.ɵɵtext(0);
|
|
975
975
|
} if (rf & 2) {
|
|
976
|
-
const
|
|
977
|
-
i0.ɵɵtextInterpolate1(" (",
|
|
976
|
+
const param_r30 = i0.ɵɵnextContext(2).$implicit;
|
|
977
|
+
i0.ɵɵtextInterpolate1(" (", param_r30.LinkedParameterField, ") ");
|
|
978
978
|
} }
|
|
979
|
-
function
|
|
979
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
980
980
|
i0.ɵɵelementStart(0, "div", 182)(1, "label", 183);
|
|
981
981
|
i0.ɵɵtext(2, "Linked To");
|
|
982
982
|
i0.ɵɵelementEnd();
|
|
983
983
|
i0.ɵɵelementStart(3, "span", 178);
|
|
984
984
|
i0.ɵɵtext(4);
|
|
985
|
-
i0.ɵɵconditionalCreate(5,
|
|
985
|
+
i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_20_Conditional_5_Template, 1, 1);
|
|
986
986
|
i0.ɵɵelementEnd()();
|
|
987
987
|
} if (rf & 2) {
|
|
988
|
-
const
|
|
988
|
+
const param_r30 = i0.ɵɵnextContext().$implicit;
|
|
989
989
|
i0.ɵɵadvance(4);
|
|
990
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
990
|
+
i0.ɵɵtextInterpolate1(" ", param_r30.LinkedParameterName, " ");
|
|
991
991
|
i0.ɵɵadvance();
|
|
992
|
-
i0.ɵɵconditional(
|
|
992
|
+
i0.ɵɵconditional(param_r30.LinkedParameterField ? 5 : -1);
|
|
993
993
|
} }
|
|
994
|
-
function
|
|
994
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
995
995
|
i0.ɵɵelementStart(0, "div", 182)(1, "label", 183);
|
|
996
996
|
i0.ɵɵtext(2, "Filter");
|
|
997
997
|
i0.ɵɵelementEnd();
|
|
@@ -999,11 +999,11 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditiona
|
|
|
999
999
|
i0.ɵɵtext(4);
|
|
1000
1000
|
i0.ɵɵelementEnd()();
|
|
1001
1001
|
} if (rf & 2) {
|
|
1002
|
-
const
|
|
1002
|
+
const param_r30 = i0.ɵɵnextContext().$implicit;
|
|
1003
1003
|
i0.ɵɵadvance(4);
|
|
1004
|
-
i0.ɵɵtextInterpolate(
|
|
1004
|
+
i0.ɵɵtextInterpolate(param_r30.ExtraFilter);
|
|
1005
1005
|
} }
|
|
1006
|
-
function
|
|
1006
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
1007
1007
|
i0.ɵɵelementStart(0, "div", 182)(1, "label", 183);
|
|
1008
1008
|
i0.ɵɵtext(2, "Record ID");
|
|
1009
1009
|
i0.ɵɵelementEnd();
|
|
@@ -1011,69 +1011,69 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditiona
|
|
|
1011
1011
|
i0.ɵɵtext(4);
|
|
1012
1012
|
i0.ɵɵelementEnd()();
|
|
1013
1013
|
} if (rf & 2) {
|
|
1014
|
-
const
|
|
1014
|
+
const param_r30 = i0.ɵɵnextContext().$implicit;
|
|
1015
1015
|
i0.ɵɵadvance(4);
|
|
1016
|
-
i0.ɵɵtextInterpolate(
|
|
1016
|
+
i0.ɵɵtextInterpolate(param_r30.RecordID);
|
|
1017
1017
|
} }
|
|
1018
|
-
function
|
|
1018
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1019
1019
|
i0.ɵɵelementStart(0, "div", 168)(1, "div", 169)(2, "div", 170);
|
|
1020
1020
|
i0.ɵɵelement(3, "i", 171);
|
|
1021
1021
|
i0.ɵɵelementStart(4, "h6", 172);
|
|
1022
1022
|
i0.ɵɵtext(5);
|
|
1023
|
-
i0.ɵɵconditionalCreate(6,
|
|
1023
|
+
i0.ɵɵconditionalCreate(6, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_6_Template, 2, 0, "span", 173);
|
|
1024
1024
|
i0.ɵɵelementEnd()();
|
|
1025
1025
|
i0.ɵɵelementStart(7, "div", 170)(8, "span", 174);
|
|
1026
1026
|
i0.ɵɵtext(9);
|
|
1027
1027
|
i0.ɵɵelementEnd();
|
|
1028
|
-
i0.ɵɵconditionalCreate(10,
|
|
1028
|
+
i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_10_Template, 2, 0, "span", 175)(11, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_11_Template, 2, 0, "span", 176);
|
|
1029
1029
|
i0.ɵɵelementEnd()();
|
|
1030
|
-
i0.ɵɵconditionalCreate(12,
|
|
1030
|
+
i0.ɵɵconditionalCreate(12, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_12_Template, 2, 1, "p", 177);
|
|
1031
1031
|
i0.ɵɵelementStart(13, "div", 178)(14, "span", 179);
|
|
1032
1032
|
i0.ɵɵelement(15, "i", 180);
|
|
1033
1033
|
i0.ɵɵtext(16);
|
|
1034
1034
|
i0.ɵɵelementEnd()();
|
|
1035
1035
|
i0.ɵɵelementStart(17, "div", 181);
|
|
1036
|
-
i0.ɵɵconditionalCreate(18,
|
|
1037
|
-
i0.ɵɵconditionalCreate(19,
|
|
1038
|
-
i0.ɵɵconditionalCreate(20,
|
|
1039
|
-
i0.ɵɵconditionalCreate(21,
|
|
1040
|
-
i0.ɵɵconditionalCreate(22,
|
|
1036
|
+
i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_18_Template, 5, 1, "div", 182);
|
|
1037
|
+
i0.ɵɵconditionalCreate(19, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_19_Template, 5, 1, "div", 182);
|
|
1038
|
+
i0.ɵɵconditionalCreate(20, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_20_Template, 6, 2, "div", 182);
|
|
1039
|
+
i0.ɵɵconditionalCreate(21, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_21_Template, 5, 1, "div", 182);
|
|
1040
|
+
i0.ɵɵconditionalCreate(22, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_22_Template, 5, 1, "div", 182);
|
|
1041
1041
|
i0.ɵɵelementEnd()();
|
|
1042
1042
|
} if (rf & 2) {
|
|
1043
|
-
const
|
|
1043
|
+
const param_r30 = ctx.$implicit;
|
|
1044
1044
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1045
|
-
i0.ɵɵstyleProp("border-left", "4px solid " + ctx_r1.getParamTypeColor(
|
|
1045
|
+
i0.ɵɵstyleProp("border-left", "4px solid " + ctx_r1.getParamTypeColor(param_r30.Type));
|
|
1046
1046
|
i0.ɵɵadvance(3);
|
|
1047
|
-
i0.ɵɵclassMap("fa-solid " + ctx_r1.getParamTypeIcon(
|
|
1048
|
-
i0.ɵɵstyleProp("color", ctx_r1.getParamTypeColor(
|
|
1047
|
+
i0.ɵɵclassMap("fa-solid " + ctx_r1.getParamTypeIcon(param_r30.Type));
|
|
1048
|
+
i0.ɵɵstyleProp("color", ctx_r1.getParamTypeColor(param_r30.Type));
|
|
1049
1049
|
i0.ɵɵadvance(2);
|
|
1050
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1050
|
+
i0.ɵɵtextInterpolate1(" ", param_r30.Name, " ");
|
|
1051
1051
|
i0.ɵɵadvance();
|
|
1052
|
-
i0.ɵɵconditional(
|
|
1052
|
+
i0.ɵɵconditional(param_r30.IsRequired ? 6 : -1);
|
|
1053
1053
|
i0.ɵɵadvance(2);
|
|
1054
|
-
i0.ɵɵstyleProp("background-color", ctx_r1.getParamTypeColor(
|
|
1054
|
+
i0.ɵɵstyleProp("background-color", ctx_r1.getParamTypeColor(param_r30.Type));
|
|
1055
1055
|
i0.ɵɵadvance();
|
|
1056
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1056
|
+
i0.ɵɵtextInterpolate1(" ", param_r30.Type, " ");
|
|
1057
1057
|
i0.ɵɵadvance();
|
|
1058
|
-
i0.ɵɵconditional(
|
|
1058
|
+
i0.ɵɵconditional(param_r30.IsRequired ? 10 : 11);
|
|
1059
1059
|
i0.ɵɵadvance(2);
|
|
1060
|
-
i0.ɵɵconditional(
|
|
1060
|
+
i0.ɵɵconditional(param_r30.Description ? 12 : -1);
|
|
1061
1061
|
i0.ɵɵadvance(4);
|
|
1062
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.getParamTypeDescription(
|
|
1062
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.getParamTypeDescription(param_r30), " ");
|
|
1063
1063
|
i0.ɵɵadvance(2);
|
|
1064
|
-
i0.ɵɵconditional(
|
|
1064
|
+
i0.ɵɵconditional(param_r30.DefaultValue ? 18 : -1);
|
|
1065
1065
|
i0.ɵɵadvance();
|
|
1066
|
-
i0.ɵɵconditional(
|
|
1066
|
+
i0.ɵɵconditional(param_r30.EntityID ? 19 : -1);
|
|
1067
1067
|
i0.ɵɵadvance();
|
|
1068
|
-
i0.ɵɵconditional(
|
|
1068
|
+
i0.ɵɵconditional(param_r30.LinkedParameterName ? 20 : -1);
|
|
1069
1069
|
i0.ɵɵadvance();
|
|
1070
|
-
i0.ɵɵconditional(
|
|
1070
|
+
i0.ɵɵconditional(param_r30.ExtraFilter ? 21 : -1);
|
|
1071
1071
|
i0.ɵɵadvance();
|
|
1072
|
-
i0.ɵɵconditional(
|
|
1072
|
+
i0.ɵɵconditional(param_r30.RecordID ? 22 : -1);
|
|
1073
1073
|
} }
|
|
1074
|
-
function
|
|
1074
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1075
1075
|
i0.ɵɵelementStart(0, "div", 162);
|
|
1076
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1076
|
+
i0.ɵɵrepeaterCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Template, 23, 19, "div", 163, _forTrack1);
|
|
1077
1077
|
i0.ɵɵelementEnd();
|
|
1078
1078
|
i0.ɵɵelementStart(3, "div", 164)(4, "div", 165);
|
|
1079
1079
|
i0.ɵɵelement(5, "i", 166);
|
|
@@ -1087,11 +1087,11 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditiona
|
|
|
1087
1087
|
i0.ɵɵadvance();
|
|
1088
1088
|
i0.ɵɵrepeater(ctx_r1.templateParams);
|
|
1089
1089
|
} }
|
|
1090
|
-
function
|
|
1090
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Template(rf, ctx) { if (rf & 1) {
|
|
1091
1091
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
|
|
1092
|
-
i0.ɵɵtemplate(1,
|
|
1092
|
+
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_ng_template_1_Template, 8, 1, "ng-template", 29);
|
|
1093
1093
|
i0.ɵɵelementStart(2, "div", 35);
|
|
1094
|
-
i0.ɵɵconditionalCreate(3,
|
|
1094
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_3_Template, 3, 0, "div", 93)(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_4_Template, 3, 0, "div", 98)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_Template, 10, 0);
|
|
1095
1095
|
i0.ɵɵelementEnd()();
|
|
1096
1096
|
} if (rf & 2) {
|
|
1097
1097
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1099,7 +1099,7 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Template(r
|
|
|
1099
1099
|
i0.ɵɵadvance(3);
|
|
1100
1100
|
i0.ɵɵconditional(ctx_r1.isLoadingTemplateParams ? 3 : ctx_r1.templateParams.length === 0 ? 4 : 5);
|
|
1101
1101
|
} }
|
|
1102
|
-
function
|
|
1102
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1103
1103
|
i0.ɵɵelementStart(0, "span", 67);
|
|
1104
1104
|
i0.ɵɵelement(1, "i", 21);
|
|
1105
1105
|
i0.ɵɵtext(2, " Output Example (JSON) ");
|
|
@@ -1107,10 +1107,10 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_ng_templat
|
|
|
1107
1107
|
i0.ɵɵtext(4, "\u2022 Required for object output type");
|
|
1108
1108
|
i0.ɵɵelementEnd()();
|
|
1109
1109
|
} }
|
|
1110
|
-
function
|
|
1111
|
-
const
|
|
1110
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1111
|
+
const _r31 = i0.ɵɵgetCurrentView();
|
|
1112
1112
|
i0.ɵɵelementStart(0, "mj-code-editor", 190);
|
|
1113
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1113
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_3_Template_mj_code_editor_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r31); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.OutputExample, $event) || (ctx_r1.record.OutputExample = $event); return i0.ɵɵresetView($event); });
|
|
1114
1114
|
i0.ɵɵelementEnd();
|
|
1115
1115
|
i0.ɵɵelementStart(1, "div", 191);
|
|
1116
1116
|
i0.ɵɵelement(2, "i", 99);
|
|
@@ -1120,7 +1120,7 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_Conditiona
|
|
|
1120
1120
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1121
1121
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.OutputExample);
|
|
1122
1122
|
} }
|
|
1123
|
-
function
|
|
1123
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1124
1124
|
i0.ɵɵelementStart(0, "div", 187);
|
|
1125
1125
|
i0.ɵɵtext(1);
|
|
1126
1126
|
i0.ɵɵelementEnd();
|
|
@@ -1129,17 +1129,17 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_Conditiona
|
|
|
1129
1129
|
i0.ɵɵadvance();
|
|
1130
1130
|
i0.ɵɵtextInterpolate(ctx_r1.record.OutputExample);
|
|
1131
1131
|
} }
|
|
1132
|
-
function
|
|
1132
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1133
1133
|
i0.ɵɵelementStart(0, "div", 188);
|
|
1134
1134
|
i0.ɵɵelement(1, "i", 192);
|
|
1135
1135
|
i0.ɵɵtext(2, " Output example is required when output type is 'object' ");
|
|
1136
1136
|
i0.ɵɵelementEnd();
|
|
1137
1137
|
} }
|
|
1138
|
-
function
|
|
1138
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Template(rf, ctx) { if (rf & 1) {
|
|
1139
1139
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
|
|
1140
|
-
i0.ɵɵtemplate(1,
|
|
1140
|
+
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_ng_template_1_Template, 5, 0, "ng-template", 29);
|
|
1141
1141
|
i0.ɵɵelementStart(2, "div", 186);
|
|
1142
|
-
i0.ɵɵconditionalCreate(3,
|
|
1142
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_3_Template, 4, 1)(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_4_Template, 2, 1, "div", 187)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_Template, 3, 0, "div", 188);
|
|
1143
1143
|
i0.ɵɵelementEnd()();
|
|
1144
1144
|
} if (rf & 2) {
|
|
1145
1145
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1147,7 +1147,7 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_Template(r
|
|
|
1147
1147
|
i0.ɵɵadvance(3);
|
|
1148
1148
|
i0.ɵɵconditional(ctx_r1.EditMode ? 3 : ctx_r1.record.OutputExample ? 4 : 5);
|
|
1149
1149
|
} }
|
|
1150
|
-
function
|
|
1150
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1151
1151
|
i0.ɵɵelementStart(0, "span", 195);
|
|
1152
1152
|
i0.ɵɵtext(1);
|
|
1153
1153
|
i0.ɵɵelementEnd();
|
|
@@ -1156,25 +1156,25 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_ng_templat
|
|
|
1156
1156
|
i0.ɵɵadvance();
|
|
1157
1157
|
i0.ɵɵtextInterpolate1("(", ctx_r1.executionHistory.length, ")");
|
|
1158
1158
|
} }
|
|
1159
|
-
function
|
|
1159
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1160
1160
|
i0.ɵɵelementStart(0, "span", 67);
|
|
1161
1161
|
i0.ɵɵelement(1, "i", 194);
|
|
1162
1162
|
i0.ɵɵtext(2, " Execution History ");
|
|
1163
|
-
i0.ɵɵconditionalCreate(3,
|
|
1163
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_ng_template_1_Conditional_3_Template, 2, 1, "span", 195);
|
|
1164
1164
|
i0.ɵɵelementEnd();
|
|
1165
1165
|
} if (rf & 2) {
|
|
1166
1166
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1167
1167
|
i0.ɵɵadvance(3);
|
|
1168
1168
|
i0.ɵɵconditional(ctx_r1.executionHistory.length > 0 ? 3 : -1);
|
|
1169
1169
|
} }
|
|
1170
|
-
function
|
|
1170
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1171
1171
|
i0.ɵɵelementStart(0, "div", 193);
|
|
1172
1172
|
i0.ɵɵelement(1, "i", 196);
|
|
1173
1173
|
i0.ɵɵelementStart(2, "p");
|
|
1174
1174
|
i0.ɵɵtext(3, "Loading execution history...");
|
|
1175
1175
|
i0.ɵɵelementEnd()();
|
|
1176
1176
|
} }
|
|
1177
|
-
function
|
|
1177
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1178
1178
|
i0.ɵɵelementStart(0, "div", 193);
|
|
1179
1179
|
i0.ɵɵelement(1, "i", 197);
|
|
1180
1180
|
i0.ɵɵelementStart(2, "p");
|
|
@@ -1184,41 +1184,41 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditiona
|
|
|
1184
1184
|
i0.ɵɵtext(5, "Run this prompt to see execution history here");
|
|
1185
1185
|
i0.ɵɵelementEnd()();
|
|
1186
1186
|
} }
|
|
1187
|
-
function
|
|
1187
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1188
1188
|
i0.ɵɵelement(0, "i", 210);
|
|
1189
1189
|
} if (rf & 2) {
|
|
1190
1190
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1191
1191
|
i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
|
|
1192
1192
|
} }
|
|
1193
|
-
function
|
|
1193
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
1194
1194
|
i0.ɵɵelement(0, "i", 210);
|
|
1195
1195
|
} if (rf & 2) {
|
|
1196
1196
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1197
1197
|
i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
|
|
1198
1198
|
} }
|
|
1199
|
-
function
|
|
1199
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
1200
1200
|
i0.ɵɵelement(0, "i", 210);
|
|
1201
1201
|
} if (rf & 2) {
|
|
1202
1202
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1203
1203
|
i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
|
|
1204
1204
|
} }
|
|
1205
|
-
function
|
|
1205
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
1206
1206
|
i0.ɵɵelement(0, "i", 210);
|
|
1207
1207
|
} if (rf & 2) {
|
|
1208
1208
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1209
1209
|
i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
|
|
1210
1210
|
} }
|
|
1211
|
-
function
|
|
1211
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_For_41_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
1212
1212
|
i0.ɵɵelementStart(0, "span", 217);
|
|
1213
1213
|
i0.ɵɵtext(1);
|
|
1214
1214
|
i0.ɵɵelementEnd();
|
|
1215
1215
|
} if (rf & 2) {
|
|
1216
|
-
const
|
|
1216
|
+
const run_r34 = i0.ɵɵnextContext().$implicit;
|
|
1217
1217
|
i0.ɵɵadvance();
|
|
1218
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1218
|
+
i0.ɵɵtextInterpolate1(" ", run_r34.RunType, " ");
|
|
1219
1219
|
} }
|
|
1220
|
-
function
|
|
1221
|
-
const
|
|
1220
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_For_41_Template(rf, ctx) { if (rf & 1) {
|
|
1221
|
+
const _r33 = i0.ɵɵgetCurrentView();
|
|
1222
1222
|
i0.ɵɵelementStart(0, "tr", 211)(1, "td", 212)(2, "span", 213);
|
|
1223
1223
|
i0.ɵɵelement(3, "i");
|
|
1224
1224
|
i0.ɵɵelementStart(4, "span", 22);
|
|
@@ -1242,39 +1242,39 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditiona
|
|
|
1242
1242
|
i0.ɵɵtext(18);
|
|
1243
1243
|
i0.ɵɵelementEnd();
|
|
1244
1244
|
i0.ɵɵelementStart(19, "td", 216);
|
|
1245
|
-
i0.ɵɵconditionalCreate(20,
|
|
1245
|
+
i0.ɵɵconditionalCreate(20, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_For_41_Conditional_20_Template, 2, 1, "span", 217);
|
|
1246
1246
|
i0.ɵɵelementEnd();
|
|
1247
1247
|
i0.ɵɵelementStart(21, "td", 216)(22, "button", 218);
|
|
1248
|
-
i0.ɵɵlistener("click", function
|
|
1248
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_For_41_Template_button_click_22_listener() { const run_r34 = i0.ɵɵrestoreView(_r33).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToPromptRun(run_r34.ID)); });
|
|
1249
1249
|
i0.ɵɵelement(23, "i", 219);
|
|
1250
1250
|
i0.ɵɵelementEnd()()();
|
|
1251
1251
|
} if (rf & 2) {
|
|
1252
|
-
const
|
|
1253
|
-
const ɵ$
|
|
1252
|
+
const run_r34 = ctx.$implicit;
|
|
1253
|
+
const ɵ$index_851_r35 = ctx.$index;
|
|
1254
1254
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1255
|
-
i0.ɵɵclassProp("even-row", ɵ$
|
|
1255
|
+
i0.ɵɵclassProp("even-row", ɵ$index_851_r35 % 2 === 0);
|
|
1256
1256
|
i0.ɵɵadvance(3);
|
|
1257
|
-
i0.ɵɵclassMap("fa-solid " + ctx_r1.getExecutionStatusIcon(
|
|
1258
|
-
i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(
|
|
1257
|
+
i0.ɵɵclassMap("fa-solid " + ctx_r1.getExecutionStatusIcon(run_r34.Success));
|
|
1258
|
+
i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r34.Success));
|
|
1259
1259
|
i0.ɵɵadvance();
|
|
1260
|
-
i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(
|
|
1260
|
+
i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r34.Success));
|
|
1261
1261
|
i0.ɵɵadvance();
|
|
1262
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1262
|
+
i0.ɵɵtextInterpolate1(" ", run_r34.Success === true ? "Success" : run_r34.Success === false ? "Failed" : "Running", " ");
|
|
1263
1263
|
i0.ɵɵadvance(2);
|
|
1264
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(8, 15,
|
|
1264
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(8, 15, run_r34.RunAt, "short"), " ");
|
|
1265
1265
|
i0.ɵɵadvance(5);
|
|
1266
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1266
|
+
i0.ɵɵtextInterpolate1(" ", run_r34.Model || "Unknown", " ");
|
|
1267
1267
|
i0.ɵɵadvance(2);
|
|
1268
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(
|
|
1268
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(run_r34.ExecutionTimeMS), " ");
|
|
1269
1269
|
i0.ɵɵadvance(2);
|
|
1270
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(
|
|
1270
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(run_r34.TokensUsed), " ");
|
|
1271
1271
|
i0.ɵɵadvance(2);
|
|
1272
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatCost(
|
|
1272
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatCost(run_r34.TotalCost || run_r34.Cost), " ");
|
|
1273
1273
|
i0.ɵɵadvance(2);
|
|
1274
|
-
i0.ɵɵconditional(
|
|
1274
|
+
i0.ɵɵconditional(run_r34.RunType ? 20 : -1);
|
|
1275
1275
|
} }
|
|
1276
|
-
function
|
|
1277
|
-
const
|
|
1276
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1277
|
+
const _r32 = i0.ɵɵgetCurrentView();
|
|
1278
1278
|
i0.ɵɵelementStart(0, "div", 198)(1, "div", 133);
|
|
1279
1279
|
i0.ɵɵtext(2);
|
|
1280
1280
|
i0.ɵɵelementEnd();
|
|
@@ -1282,24 +1282,24 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditiona
|
|
|
1282
1282
|
i0.ɵɵtext(5, "Sort by:");
|
|
1283
1283
|
i0.ɵɵelementEnd();
|
|
1284
1284
|
i0.ɵɵelementStart(6, "div", 200)(7, "button", 201);
|
|
1285
|
-
i0.ɵɵlistener("click", function
|
|
1285
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("runAt")); });
|
|
1286
1286
|
i0.ɵɵtext(8, " Date ");
|
|
1287
|
-
i0.ɵɵconditionalCreate(9,
|
|
1287
|
+
i0.ɵɵconditionalCreate(9, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Conditional_9_Template, 1, 2, "i", 202);
|
|
1288
1288
|
i0.ɵɵelementEnd();
|
|
1289
1289
|
i0.ɵɵelementStart(10, "button", 201);
|
|
1290
|
-
i0.ɵɵlistener("click", function
|
|
1290
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("executionTime")); });
|
|
1291
1291
|
i0.ɵɵtext(11, " Duration ");
|
|
1292
|
-
i0.ɵɵconditionalCreate(12,
|
|
1292
|
+
i0.ɵɵconditionalCreate(12, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Conditional_12_Template, 1, 2, "i", 202);
|
|
1293
1293
|
i0.ɵɵelementEnd();
|
|
1294
1294
|
i0.ɵɵelementStart(13, "button", 201);
|
|
1295
|
-
i0.ɵɵlistener("click", function
|
|
1295
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("tokens")); });
|
|
1296
1296
|
i0.ɵɵtext(14, " Tokens ");
|
|
1297
|
-
i0.ɵɵconditionalCreate(15,
|
|
1297
|
+
i0.ɵɵconditionalCreate(15, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Conditional_15_Template, 1, 2, "i", 202);
|
|
1298
1298
|
i0.ɵɵelementEnd();
|
|
1299
1299
|
i0.ɵɵelementStart(16, "button", 201);
|
|
1300
|
-
i0.ɵɵlistener("click", function
|
|
1300
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("cost")); });
|
|
1301
1301
|
i0.ɵɵtext(17, " Cost ");
|
|
1302
|
-
i0.ɵɵconditionalCreate(18,
|
|
1302
|
+
i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Conditional_18_Template, 1, 2, "i", 202);
|
|
1303
1303
|
i0.ɵɵelementEnd()()()();
|
|
1304
1304
|
i0.ɵɵelementStart(19, "div", 203)(20, "table", 204)(21, "thead")(22, "tr", 205)(23, "th", 206);
|
|
1305
1305
|
i0.ɵɵtext(24, "Status");
|
|
@@ -1326,7 +1326,7 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditiona
|
|
|
1326
1326
|
i0.ɵɵtext(38, "Actions");
|
|
1327
1327
|
i0.ɵɵelementEnd()()();
|
|
1328
1328
|
i0.ɵɵelementStart(39, "tbody");
|
|
1329
|
-
i0.ɵɵrepeaterCreate(40,
|
|
1329
|
+
i0.ɵɵrepeaterCreate(40, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_For_41_Template, 24, 18, "tr", 209, _forTrack1);
|
|
1330
1330
|
i0.ɵɵelementEnd()()();
|
|
1331
1331
|
} if (rf & 2) {
|
|
1332
1332
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -1351,11 +1351,11 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditiona
|
|
|
1351
1351
|
i0.ɵɵadvance(22);
|
|
1352
1352
|
i0.ɵɵrepeater(ctx_r1.executionHistory);
|
|
1353
1353
|
} }
|
|
1354
|
-
function
|
|
1354
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Template(rf, ctx) { if (rf & 1) {
|
|
1355
1355
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
|
|
1356
|
-
i0.ɵɵtemplate(1,
|
|
1356
|
+
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_ng_template_1_Template, 4, 1, "ng-template", 29);
|
|
1357
1357
|
i0.ɵɵelementStart(2, "div", 186);
|
|
1358
|
-
i0.ɵɵconditionalCreate(3,
|
|
1358
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_3_Template, 4, 0, "div", 193)(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_4_Template, 6, 0, "div", 193)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Template, 42, 13);
|
|
1359
1359
|
i0.ɵɵelementEnd()();
|
|
1360
1360
|
} if (rf & 2) {
|
|
1361
1361
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1363,15 +1363,15 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Template(r
|
|
|
1363
1363
|
i0.ɵɵadvance(3);
|
|
1364
1364
|
i0.ɵɵconditional(ctx_r1.isLoadingHistory ? 3 : ctx_r1.executionHistory.length === 0 ? 4 : 5);
|
|
1365
1365
|
} }
|
|
1366
|
-
function
|
|
1366
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1367
1367
|
i0.ɵɵelementStart(0, "span", 67);
|
|
1368
1368
|
i0.ɵɵelement(1, "i", 221);
|
|
1369
1369
|
i0.ɵɵtext(2, " Result Cache ");
|
|
1370
1370
|
i0.ɵɵelementEnd();
|
|
1371
1371
|
} }
|
|
1372
|
-
function
|
|
1372
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Template(rf, ctx) { if (rf & 1) {
|
|
1373
1373
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
|
|
1374
|
-
i0.ɵɵtemplate(1,
|
|
1374
|
+
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_ng_template_1_Template, 3, 0, "ng-template", 29);
|
|
1375
1375
|
i0.ɵɵelementStart(2, "div", 35);
|
|
1376
1376
|
i0.ɵɵelement(3, "mj-explorer-entity-data-grid", 220);
|
|
1377
1377
|
i0.ɵɵelementEnd()();
|
|
@@ -1381,15 +1381,15 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_75_Template(r
|
|
|
1381
1381
|
i0.ɵɵadvance(3);
|
|
1382
1382
|
i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: AI Result Cache", "AIPromptID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: AI Result Cache"))("AllowLoad", true)("ShowToolbar", false);
|
|
1383
1383
|
} }
|
|
1384
|
-
function
|
|
1384
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1385
1385
|
i0.ɵɵelementStart(0, "span", 67);
|
|
1386
1386
|
i0.ɵɵelement(1, "i", 223);
|
|
1387
1387
|
i0.ɵɵtext(2, " Related Items ");
|
|
1388
1388
|
i0.ɵɵelementEnd();
|
|
1389
1389
|
} }
|
|
1390
|
-
function
|
|
1390
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Template(rf, ctx) { if (rf & 1) {
|
|
1391
1391
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
|
|
1392
|
-
i0.ɵɵtemplate(1,
|
|
1392
|
+
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_ng_template_1_Template, 3, 0, "ng-template", 29);
|
|
1393
1393
|
i0.ɵɵelementStart(2, "div", 35)(3, "div", 36)(4, "div")(5, "h6", 222);
|
|
1394
1394
|
i0.ɵɵtext(6, "AI Agents Using This Prompt");
|
|
1395
1395
|
i0.ɵɵelementEnd();
|
|
@@ -1408,17 +1408,18 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_76_Template(r
|
|
|
1408
1408
|
i0.ɵɵadvance(4);
|
|
1409
1409
|
i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: AI Prompts", "ResultSelectorPromptID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: AI Prompts"))("AllowLoad", true)("ShowToolbar", false);
|
|
1410
1410
|
} }
|
|
1411
|
-
function
|
|
1412
|
-
i0.ɵɵ
|
|
1413
|
-
i0.ɵɵ
|
|
1414
|
-
i0.ɵɵ
|
|
1411
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1412
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
1413
|
+
i0.ɵɵelementStart(0, "mj-record-form-container", 4);
|
|
1414
|
+
i0.ɵɵlistener("Navigate", function MJAIPromptFormComponentExtended_Conditional_1_Template_mj_record_form_container_Navigate_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnFormNavigate($event)); })("DeleteRequested", function MJAIPromptFormComponentExtended_Conditional_1_Template_mj_record_form_container_DeleteRequested_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDeleteRequested()); })("FavoriteToggled", function MJAIPromptFormComponentExtended_Conditional_1_Template_mj_record_form_container_FavoriteToggled_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnFavoriteToggled()); })("HistoryRequested", function MJAIPromptFormComponentExtended_Conditional_1_Template_mj_record_form_container_HistoryRequested_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnHistoryRequested()); })("ListManagementRequested", function MJAIPromptFormComponentExtended_Conditional_1_Template_mj_record_form_container_ListManagementRequested_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnListManagementRequested()); });
|
|
1415
|
+
i0.ɵɵelementStart(1, "form", 5, 0)(3, "div", 6)(4, "div", 7)(5, "div", 8)(6, "div", 9)(7, "div", 10);
|
|
1415
1416
|
i0.ɵɵelement(8, "i", 11);
|
|
1416
|
-
i0.ɵɵconditionalCreate(9,
|
|
1417
|
+
i0.ɵɵconditionalCreate(9, MJAIPromptFormComponentExtended_Conditional_1_Conditional_9_Template, 1, 1, "input", 12)(10, MJAIPromptFormComponentExtended_Conditional_1_Conditional_10_Template, 4, 4);
|
|
1417
1418
|
i0.ɵɵelementEnd();
|
|
1418
|
-
i0.ɵɵconditionalCreate(11,
|
|
1419
|
-
i0.ɵɵconditionalCreate(12,
|
|
1419
|
+
i0.ɵɵconditionalCreate(11, MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Template, 12, 11, "div", 13);
|
|
1420
|
+
i0.ɵɵconditionalCreate(12, MJAIPromptFormComponentExtended_Conditional_1_Conditional_12_Template, 1, 2, "textarea", 14)(13, MJAIPromptFormComponentExtended_Conditional_1_Conditional_13_Template, 2, 1, "p", 15);
|
|
1420
1421
|
i0.ɵɵelementStart(14, "div", 16);
|
|
1421
|
-
i0.ɵɵconditionalCreate(15,
|
|
1422
|
+
i0.ɵɵconditionalCreate(15, MJAIPromptFormComponentExtended_Conditional_1_Conditional_15_Template, 6, 1, "div", 17);
|
|
1422
1423
|
i0.ɵɵelementStart(16, "div", 17);
|
|
1423
1424
|
i0.ɵɵelement(17, "i", 18);
|
|
1424
1425
|
i0.ɵɵelementStart(18, "span", 19);
|
|
@@ -1435,26 +1436,26 @@ function MJAIPromptFormComponentExtended_Conditional_2_Template(rf, ctx) { if (r
|
|
|
1435
1436
|
i0.ɵɵelementStart(26, "span", 22);
|
|
1436
1437
|
i0.ɵɵtext(27);
|
|
1437
1438
|
i0.ɵɵelementEnd()();
|
|
1438
|
-
i0.ɵɵconditionalCreate(28,
|
|
1439
|
-
i0.ɵɵconditionalCreate(29,
|
|
1439
|
+
i0.ɵɵconditionalCreate(28, MJAIPromptFormComponentExtended_Conditional_1_Conditional_28_Template, 4, 0, "div", 17);
|
|
1440
|
+
i0.ɵɵconditionalCreate(29, MJAIPromptFormComponentExtended_Conditional_1_Conditional_29_Template, 6, 1, "div", 17);
|
|
1440
1441
|
i0.ɵɵelementEnd()();
|
|
1441
1442
|
i0.ɵɵelementStart(30, "div", 23)(31, "div", 24);
|
|
1442
|
-
i0.ɵɵconditionalCreate(32,
|
|
1443
|
+
i0.ɵɵconditionalCreate(32, MJAIPromptFormComponentExtended_Conditional_1_Conditional_32_Template, 3, 0, "button", 25);
|
|
1443
1444
|
i0.ɵɵelementEnd();
|
|
1444
|
-
i0.ɵɵconditionalCreate(33,
|
|
1445
|
+
i0.ɵɵconditionalCreate(33, MJAIPromptFormComponentExtended_Conditional_1_Conditional_33_Template, 4, 3, "div", 26);
|
|
1445
1446
|
i0.ɵɵelementEnd()()();
|
|
1446
1447
|
i0.ɵɵelementStart(34, "div", 27)(35, "mj-accordion-panel", 28);
|
|
1447
|
-
i0.ɵɵtemplate(36,
|
|
1448
|
+
i0.ɵɵtemplate(36, MJAIPromptFormComponentExtended_Conditional_1_ng_template_36_Template, 4, 1, "ng-template", 29);
|
|
1448
1449
|
i0.ɵɵelementStart(37, "div", 30);
|
|
1449
|
-
i0.ɵɵconditionalCreate(38,
|
|
1450
|
+
i0.ɵɵconditionalCreate(38, MJAIPromptFormComponentExtended_Conditional_1_Conditional_38_Template, 3, 0, "div", 31)(39, MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Template, 9, 2, "div", 32)(40, MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Template, 11, 1, "div", 33)(41, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Template, 5, 3, "div", 34);
|
|
1450
1451
|
i0.ɵɵelementEnd()();
|
|
1451
|
-
i0.ɵɵconditionalCreate(42,
|
|
1452
|
+
i0.ɵɵconditionalCreate(42, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Template, 6, 2, "mj-accordion-panel", 28);
|
|
1452
1453
|
i0.ɵɵelementStart(43, "mj-accordion-panel", 28);
|
|
1453
|
-
i0.ɵɵtemplate(44,
|
|
1454
|
+
i0.ɵɵtemplate(44, MJAIPromptFormComponentExtended_Conditional_1_ng_template_44_Template, 3, 0, "ng-template", 29);
|
|
1454
1455
|
i0.ɵɵelementStart(45, "div", 35)(46, "div", 36)(47, "div");
|
|
1455
1456
|
i0.ɵɵelement(48, "mj-form-field", 37);
|
|
1456
|
-
i0.ɵɵconditionalCreate(49,
|
|
1457
|
-
i0.ɵɵconditionalCreate(50,
|
|
1457
|
+
i0.ɵɵconditionalCreate(49, MJAIPromptFormComponentExtended_Conditional_1_Conditional_49_Template, 1, 3, "mj-form-field", 38);
|
|
1458
|
+
i0.ɵɵconditionalCreate(50, MJAIPromptFormComponentExtended_Conditional_1_Conditional_50_Template, 1, 3, "mj-form-field", 39);
|
|
1458
1459
|
i0.ɵɵelement(51, "mj-form-field", 40)(52, "mj-form-field", 41);
|
|
1459
1460
|
i0.ɵɵelementEnd();
|
|
1460
1461
|
i0.ɵɵelementStart(53, "div");
|
|
@@ -1462,10 +1463,10 @@ function MJAIPromptFormComponentExtended_Conditional_2_Template(rf, ctx) { if (r
|
|
|
1462
1463
|
i0.ɵɵelementStart(56, "div", 44)(57, "label", 45);
|
|
1463
1464
|
i0.ɵɵtext(58, " Result Selector Prompt ");
|
|
1464
1465
|
i0.ɵɵelementEnd();
|
|
1465
|
-
i0.ɵɵconditionalCreate(59,
|
|
1466
|
+
i0.ɵɵconditionalCreate(59, MJAIPromptFormComponentExtended_Conditional_1_Conditional_59_Template, 2, 1)(60, MJAIPromptFormComponentExtended_Conditional_1_Conditional_60_Template, 2, 1, "span", 46);
|
|
1466
1467
|
i0.ɵɵelementEnd()()()()();
|
|
1467
1468
|
i0.ɵɵelementStart(61, "mj-accordion-panel", 28);
|
|
1468
|
-
i0.ɵɵtemplate(62,
|
|
1469
|
+
i0.ɵɵtemplate(62, MJAIPromptFormComponentExtended_Conditional_1_ng_template_62_Template, 3, 0, "ng-template", 29);
|
|
1469
1470
|
i0.ɵɵelementStart(63, "div", 35)(64, "p", 47);
|
|
1470
1471
|
i0.ɵɵtext(65, " Assistant prefill seeds the model's response with an initial string, guiding output format and content. Stop sequences terminate generation when encountered. ");
|
|
1471
1472
|
i0.ɵɵelementEnd();
|
|
@@ -1475,17 +1476,16 @@ function MJAIPromptFormComponentExtended_Conditional_2_Template(rf, ctx) { if (r
|
|
|
1475
1476
|
i0.ɵɵelementStart(70, "div");
|
|
1476
1477
|
i0.ɵɵelement(71, "mj-form-field", 50);
|
|
1477
1478
|
i0.ɵɵelementEnd()()()();
|
|
1478
|
-
i0.ɵɵconditionalCreate(72,
|
|
1479
|
-
i0.ɵɵconditionalCreate(73,
|
|
1480
|
-
i0.ɵɵconditionalCreate(74,
|
|
1481
|
-
i0.ɵɵconditionalCreate(75,
|
|
1482
|
-
i0.ɵɵconditionalCreate(76,
|
|
1483
|
-
i0.ɵɵelementEnd()()();
|
|
1479
|
+
i0.ɵɵconditionalCreate(72, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Template, 6, 2, "mj-accordion-panel", 28);
|
|
1480
|
+
i0.ɵɵconditionalCreate(73, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Template, 6, 2, "mj-accordion-panel", 28);
|
|
1481
|
+
i0.ɵɵconditionalCreate(74, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Template, 6, 2, "mj-accordion-panel", 28);
|
|
1482
|
+
i0.ɵɵconditionalCreate(75, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Template, 4, 5, "mj-accordion-panel", 28);
|
|
1483
|
+
i0.ɵɵconditionalCreate(76, MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Template, 12, 9, "mj-accordion-panel", 28);
|
|
1484
|
+
i0.ɵɵelementEnd()()()();
|
|
1484
1485
|
} if (rf & 2) {
|
|
1485
1486
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
1486
|
-
i0.ɵɵ
|
|
1487
|
-
i0.ɵɵ
|
|
1488
|
-
i0.ɵɵadvance(7);
|
|
1487
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("FormComponent", ctx_r1)("ToolbarConfig", ctx_r1.toolbarConfig)("WidthMode", "full-width");
|
|
1488
|
+
i0.ɵɵadvance(9);
|
|
1489
1489
|
i0.ɵɵconditional(ctx_r1.EditMode ? 9 : 10);
|
|
1490
1490
|
i0.ɵɵadvance(2);
|
|
1491
1491
|
i0.ɵɵconditional(ctx_r1.EditMode ? 11 : -1);
|
|
@@ -1550,12 +1550,12 @@ function MJAIPromptFormComponentExtended_Conditional_2_Template(rf, ctx) { if (r
|
|
|
1550
1550
|
i0.ɵɵadvance();
|
|
1551
1551
|
i0.ɵɵconditional(ctx_r1.record.IsSaved ? 76 : -1);
|
|
1552
1552
|
} }
|
|
1553
|
-
function
|
|
1554
|
-
const
|
|
1553
|
+
function MJAIPromptFormComponentExtended_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1554
|
+
const _r36 = i0.ɵɵgetCurrentView();
|
|
1555
1555
|
i0.ɵɵelementStart(0, "mj-window", 224);
|
|
1556
|
-
i0.ɵɵlistener("Close", function
|
|
1556
|
+
i0.ɵɵlistener("Close", function MJAIPromptFormComponentExtended_Conditional_2_Template_mj_window_Close_0_listener() { i0.ɵɵrestoreView(_r36); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged(false)); });
|
|
1557
1557
|
i0.ɵɵelementStart(1, "mj-ai-test-harness", 225);
|
|
1558
|
-
i0.ɵɵlistener("visibilityChange", function
|
|
1558
|
+
i0.ɵɵlistener("visibilityChange", function MJAIPromptFormComponentExtended_Conditional_2_Template_mj_ai_test_harness_visibilityChange_1_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged($event)); });
|
|
1559
1559
|
i0.ɵɵelementEnd()();
|
|
1560
1560
|
} if (rf & 2) {
|
|
1561
1561
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -1569,6 +1569,7 @@ let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended exte
|
|
|
1569
1569
|
this.testHarnessService = inject(AITestHarnessDialogService);
|
|
1570
1570
|
this.viewContainerRef = inject(ViewContainerRef);
|
|
1571
1571
|
this.promptManagementService = inject(AIPromptManagementService);
|
|
1572
|
+
this.toolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;
|
|
1572
1573
|
this.template = null;
|
|
1573
1574
|
this.templateContent = null;
|
|
1574
1575
|
this.templateParams = [];
|
|
@@ -1609,6 +1610,8 @@ let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended exte
|
|
|
1609
1610
|
this._metadata = new Metadata();
|
|
1610
1611
|
this.__InferenceProvider_VendorTypeDefinitionID = '';
|
|
1611
1612
|
}
|
|
1613
|
+
/** Custom-layout AI Prompt form looks best full-width on first open. */
|
|
1614
|
+
getDefaultFormWidthMode() { return 'full-width'; }
|
|
1612
1615
|
// Main AI Prompt permissions inherited from BaseFormComponent:
|
|
1613
1616
|
// - UserCanEdit (Update permission)
|
|
1614
1617
|
// - UserCanRead (Read permission)
|
|
@@ -3035,18 +3038,16 @@ let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended exte
|
|
|
3035
3038
|
} if (rf & 2) {
|
|
3036
3039
|
let _t;
|
|
3037
3040
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.templateEditor = _t.first);
|
|
3038
|
-
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 2, consts: [["form", "ngForm"], ["templateEditor", ""], [1, "record-form-container", 2, "height", "100%", "display", "flex", "flex-direction", "column"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [3, "Width", "Height", "MinWidth", "MinHeight", "Draggable", "Resizable", "Visible", "Title"], [3, "Form"], [1, "prompt-main-area", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [1, "prompt-header", 2, "flex-shrink", "0", "padding", "20px", "background", "var(--mj-bg-surface-sunken)", "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"], [1, "fa-solid", "fa-robot", 2, "color", "var(--mj-brand-primary)", "font-size", "1.4em"], ["type", "text", "name", "promptName", "placeholder", "Enter prompt 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", "promptDescription", "placeholder", "Enter prompt 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-layer-group", 2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-secondary)", "font-weight", "500"], [1, "fa-solid", "fa-code", 2, "color", "var(--mj-text-muted)"], [2, "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", "Run AI Prompt Test Harness"], [2, "font-size", "0.75em", "color", "#dc3545", "text-align", "right", "max-width", "200px"], [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", ""], [1, "template-section", 2, "display", "flex", "flex-direction", "column", "min-height", "400px", "padding", "8px"], [1, "loading-state", 2, "flex", "1", "display", "flex", "align-items", "center", "justify-content", "center", "color", "var(--mj-text-muted)"], [1, "no-template-state", 2, "flex", "1", "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "padding", "40px", "color", "var(--mj-text-muted)"], [1, "invalid-template-state", 2, "flex", "1", "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "padding", "40px", "color", "#dc3545"], [1, "template-editor-container", 2, "flex", "1", "display", "flex", "flex-direction", "column", "min-height", "350px"], [2, "padding", "16px 0"], [2, "display", "grid", "grid-template-columns", "1fr 1fr", "gap", "20px"], ["FieldName", "ParallelizationMode", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ParallelCount", "Type", "numerictextbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ParallelConfigParam", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "OutputType", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "EffortLevel", "Type", "numerictextbox", "Caption", "Effort Level (1-100)", "Description", "Higher values request more thorough reasoning", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ValidationBehavior", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "EnableCaching", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode"], [2, "margin-bottom", "16px"], [2, "display", "block", "margin-bottom", "4px", "font-weight", "600", "color", "var(--mj-text-secondary)", "font-size", "0.9em"], [2, "color", "var(--mj-text-secondary)"], [2, "margin", "0 0 12px 0", "font-size", "0.85em", "color", "var(--mj-text-muted)"], ["FieldName", "AssistantPrefill", "Type", "textarea", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "StopSequences", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "PrefillFallbackMode", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["type", "text", "name", "promptName", "placeholder", "Enter prompt 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-badge", 2, "color", "white", "padding", "4px 10px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], ["name", "promptStatus", "TextField", "text", "ValueField", "value", 2, "width", "150px", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], [2, "color", "#dc3545"], [2, "padding", "8px", "color", "var(--mj-text-muted)", "font-style", "italic", "width", "200px"], ["name", "promptTypeID", "TextField", "Name", "ValueField", "ID", "Placeholder", "Select prompt type...", 2, "width", "200px", 3, "ngModel", "Data", "ValuePrimitive", "Filterable"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["name", "promptTypeID", "TextField", "Name", "ValueField", "ID", "Placeholder", "Select prompt type...", 2, "width", "200px", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive", "Filterable"], ["name", "promptDescription", "placeholder", "Enter prompt description...", 1, "mj-textarea", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-tag", 2, "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-database", 2, "color", "#28a745"], [2, "color", "#28a745", "font-weight", "500"], [1, "fa-solid", "fa-tachometer-alt", 2, "color", "var(--mj-text-muted)"], ["mjButton", "", "variant", "primary", "size", "lg", "title", "Run AI Prompt Test Harness", 3, "click"], [1, "fa-solid", "fa-play"], [2, "display", "flex", "align-items", "center", "gap", "8px", "font-weight", "600"], [2, "color", "var(--mj-text-muted)", "font-size", "0.9em", "font-weight", "normal"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "24px", "margin-right", "12px"], [1, "fa-solid", "fa-code", 2, "font-size", "64px", "margin-bottom", "20px", "opacity", "0.3"], [2, "margin-bottom", "12px", "color", "var(--mj-text-secondary)"], [2, "margin-bottom", "24px", "text-align", "center", "max-width", "400px"], [2, "display", "flex", "gap", "12px"], ["mjButton", "", "variant", "primary"], ["mjButton", "", "variant", "outline"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "fa-solid", "fa-plus"], ["mjButton", "", "variant", "outline", 3, "click"], [1, "fa-solid", "fa-link"], [1, "fa-solid", "fa-exclamation-triangle", 2, "font-size", "64px", "margin-bottom", "20px", "opacity", "0.7"], [2, "margin-bottom", "12px"], [1, "fa-solid", "fa-refresh"], [1, "template-actions", 2, "display", "flex", "gap", "8px", "padding", "8px", "border-bottom", "1px solid var(--mj-border-default)", "background", "var(--mj-bg-surface-sunken)"], [2, "flex", "1", "background", "var(--mj-bg-surface-card)", "border-radius", "6px", "border", "1px solid var(--mj-border-default)"], [2, "display", "block", "min-height", "300px", 3, "contentChange", "runTemplate", "template", "config"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Change to a different template"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Open template in new window"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Change to a different template", 3, "click"], [1, "fa-solid", "fa-exchange-alt"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Open template in new window", 3, "click"], [1, "fa-solid", "fa-external-link-alt"], [1, "model-management", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "6px", "background", "var(--mj-bg-surface-sunken)"], [1, "loading-state", 2, "padding", "20px", "text-align", "center", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-microchip", 2, "color", "var(--mj-text-muted)"], [1, "badge", 2, "background", "#17a2b8", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [2, "color", "var(--mj-text-muted)", "font-size", "0.8em", "font-weight", "normal", "margin-left", "8px"], ["title", "Models are tried in order from top to bottom. The first available model will be used.", 1, "fa-solid", "fa-info-circle"], [1, "empty-state", 2, "padding", "20px", "text-align", "center", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-info-circle"], [2, "margin-top", "10px"], ["mjButton", "", "variant", "outline", "size", "sm", 3, "click"], [2, "padding", "12px 16px", "background", "color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))", "border-bottom", "1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default))", "color", "var(--mj-brand-primary)", "font-size", "0.85em"], [1, "model-header", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "background", "var(--mj-bg-surface-sunken)", "font-weight", "600", "font-size", "0.85em", "color", "var(--mj-text-secondary)", "border-bottom", "1px solid var(--mj-border-default)"], ["title", "Priority order - models are tried from top to bottom"], [1, "fa-solid", "fa-sort", 2, "color", "var(--mj-text-muted)"], [1, "add-model-row", 2, "padding", "12px 16px", "text-align", "center", "background", "var(--mj-bg-surface-sunken)", "border-top", "1px solid var(--mj-border-default)"], [1, "fa-solid", "fa-info-circle", 2, "margin-right", "6px"], [1, "model-row", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "border-bottom", "1px solid var(--mj-border-default)", "align-items", "start", "transition", "background 0.2s, opacity 0.2s", 3, "dragstart", "dragover", "drop", "dragend", "draggable"], [1, "drag-handle", 2, "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "color", "var(--mj-text-muted)"], [2, "font-size", "0.9em", "font-weight", "600", 3, "title"], [1, "model-select"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select a model...", 2, "width", "100%", 3, "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [1, "model-vendor"], [1, "model-configuration"], [2, "font-size", "0.9em"], [1, "model-created"], [2, "color", "var(--mj-text-muted)", "font-size", "0.8em"], [2, "color", "#28a745", "font-size", "0.8em", "font-style", "italic"], [1, "model-actions", 2, "display", "flex", "gap", "2px", "flex-direction", "column"], [2, "display", "grid", "grid-template-columns", "40px 1fr", "gap", "12px", "padding", "8px 16px", "border-bottom", "1px solid var(--mj-border-default)", "background", "var(--mj-bg-surface-sunken)", "font-size", "0.85em", "color", "var(--mj-text-muted)"], [2, "display", "flex", "gap", "16px", "flex-wrap", "wrap", "align-items", "center", "margin-bottom", "8px"], [2, "padding", "8px", "background", "var(--mj-bg-surface-card)", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", "margin-top", "8px"], ["title", "Drag to reorder priority", 1, "fa-solid", "fa-grip-vertical", 2, "cursor", "move"], [2, "font-size", "0.7em", "margin-top", "2px"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select a model...", 2, "width", "100%", 3, "ngModelChange", "ValueChange", "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [2, "color", "var(--mj-text-muted)", "font-style", "italic", "font-size", "0.9em"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select vendor...", 2, "width", "100%", 3, "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select vendor...", 2, "width", "100%", 3, "ngModelChange", "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [2, "font-size", "0.9em", "font-weight", "500", 3, "color"], [2, "font-size", "0.9em", "font-weight", "500"], [2, "font-size", "0.8em", "margin-left", "4px"], [2, "font-size", "0.9em", 3, "color"], [2, "color", "var(--mj-text-muted)", "font-size", "0.9em"], [2, "padding", "4px", "color", "var(--mj-text-muted)", "font-style", "italic", "font-size", "0.85em"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Default", 2, "width", "100%", 3, "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Default", 2, "width", "100%", 3, "ngModelChange", "ValueChange", "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [2, "display", "flex", "gap", "2px", "margin-bottom", "4px"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Remove model", 2, "color", "var(--mj-status-error)"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Move up", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-up"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Move down", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-down"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Remove model", 2, "color", "var(--mj-status-error)", 3, "click"], [1, "fa-solid", "fa-times"], [2, "margin-bottom", "6px", "font-weight", "600", "color", "var(--mj-text-secondary)", "font-size", "0.9em"], [1, "fa-solid", "fa-layer-group"], [2, "display", "grid", "grid-template-columns", "1fr 1fr 1fr", "gap", "12px", "align-items", "center"], [2, "display", "flex", "gap", "16px", "flex-wrap", "wrap", "align-items", "center"], [2, "display", "block", "margin-bottom", "2px", "font-size", "0.8em", "font-weight", "600", "color", "var(--mj-text-secondary)"], ["TextField", "text", "ValueField", "value", "Placeholder", "Select mode...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name", "Data", "ValuePrimitive"], ["Placeholder", "Count...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name", "Min", "Step", "Format"], ["type", "text", "placeholder", "Parameter name...", 1, "mj-input", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name"], ["mjButton", "", "variant", "outline", "size", "sm", 2, "color", "var(--mj-status-success)", "border-color", "var(--mj-status-success)", 3, "click"], [1, "fa-solid", "fa-cogs", 2, "color", "var(--mj-text-muted)"], [2, "padding", "8px", "color", "var(--mj-text-muted)", "font-style", "italic"], ["name", "resultSelectorPromptID", "TextField", "text", "ValueField", "value", "Placeholder", "Select a result selector prompt...", 2, "width", "100%", 3, "ngModel", "Data", "ValuePrimitive", "Filterable"], ["name", "resultSelectorPromptID", "TextField", "text", "ValueField", "value", "Placeholder", "Select a result selector prompt...", 2, "width", "100%", 3, "ngModelChange", "ValueChange", "ngModel", "Data", "ValuePrimitive", "Filterable"], [1, "fa-solid", "fa-wand-magic-sparkles", 2, "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-sliders", 2, "color", "var(--mj-text-muted)"], [1, "badge", 2, "background", "var(--mj-brand-primary)", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], ["title", "These parameters are defined in the template and will be available when executing this prompt", 1, "fa-solid", "fa-info-circle"], [2, "display", "grid", "gap", "12px"], [1, "parameter-card", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "padding", "16px", "background", "var(--mj-bg-surface-sunken)", "transition", "all 0.2s", 3, "border-left"], [2, "margin-top", "16px", "padding", "12px", "background", "color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))", "border-radius", "6px", "border", "1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default))"], [2, "display", "flex", "align-items", "flex-start", "gap", "8px"], [1, "fa-solid", "fa-lightbulb", 2, "color", "var(--mj-brand-primary)", "margin-top", "2px"], [2, "flex", "1", "font-size", "0.85em", "color", "var(--mj-brand-primary)", "line-height", "1.5"], [1, "parameter-card", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "padding", "16px", "background", "var(--mj-bg-surface-sunken)", "transition", "all 0.2s"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "margin-bottom", "8px"], [2, "display", "flex", "align-items", "center", "gap", "8px"], [2, "font-size", "1.2em"], [2, "margin", "0", "color", "var(--mj-text-secondary)", "font-weight", "600"], [2, "color", "#dc3545", "font-size", "0.9em", "margin-left", "4px"], [1, "type-badge", 2, "color", "white", "padding", "4px 8px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], [2, "color", "#dc3545", "font-size", "0.85em", "font-weight", "500"], [2, "color", "var(--mj-text-muted)", "font-size", "0.85em"], [2, "margin", "0 0 8px 0", "color", "var(--mj-text-muted)", "font-size", "0.9em", "line-height", "1.4"], [2, "font-size", "0.85em", "color", "var(--mj-text-secondary)"], [2, "display", "flex", "align-items", "center", "gap", "4px", "margin-bottom", "4px"], [1, "fa-solid", "fa-info-circle", 2, "color", "var(--mj-text-muted)"], [2, "display", "grid", "grid-template-columns", "repeat(auto-fit, minmax(200px, 1fr))", "gap", "12px", "margin-top", "12px"], [2, "background", "var(--mj-bg-surface-card)", "padding", "8px 12px", "border-radius", "4px", "border", "1px solid var(--mj-border-default)"], [2, "display", "block", "font-size", "0.8em", "color", "var(--mj-text-muted)", "margin-bottom", "2px"], [2, "font-size", "0.85em", "color", "var(--mj-text-secondary)", "word-break", "break-all"], [2, "font-size", "0.8em", "color", "var(--mj-text-secondary)", "word-break", "break-all"], [2, "padding", "16px"], [2, "background", "var(--mj-bg-surface-sunken)", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", "padding", "12px", "font-family", "'Courier New', monospace", "font-size", "0.9em", "white-space", "pre-wrap", "overflow", "auto", "max-height", "250px"], [2, "background", "#fff3cd", "border", "1px solid #ffeaa7", "border-radius", "4px", "padding", "12px", "color", "#856404", "text-align", "center"], [2, "color", "#dc3545", "font-size", "0.8em", "font-weight", "normal"], ["name", "outputExample", "language", "json", "placeholder", "Enter JSON example structure...", 2, "width", "100%", "height", "200px", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", 3, "ngModelChange", "ngModel"], [2, "margin-top", "8px", "color", "var(--mj-text-muted)", "font-size", "0.85em"], [1, "fa-solid", "fa-exclamation-triangle"], [2, "text-align", "center", "padding", "40px", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-history", 2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-muted)", "font-weight", "normal"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "2em", "margin-bottom", "12px"], [1, "fa-solid", "fa-history", 2, "font-size", "3em", "margin-bottom", "12px", "opacity", "0.3"], [2, "display", "flex", "justify-content", "space-between", "align-items", "center", "margin-bottom", "16px"], [2, "display", "flex", "gap", "8px", "align-items", "center"], [1, "mj-button-group"], ["mjButton", "", "size", "sm", 3, "click"], [2, "margin-left", "4px", "font-size", "0.8em", 3, "class"], [2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "overflow", "hidden"], [2, "width", "100%", "border-collapse", "collapse"], [2, "background", "var(--mj-bg-surface-sunken)", "border-bottom", "2px solid var(--mj-border-default)"], [2, "padding", "12px", "text-align", "left", "font-weight", "600", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "right", "font-weight", "600", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "center", "font-weight", "600", "color", "var(--mj-text-secondary)"], [1, "history-row", 2, "border-bottom", "1px solid var(--mj-border-default)", 3, "even-row"], [2, "margin-left", "4px", "font-size", "0.8em"], [1, "history-row", 2, "border-bottom", "1px solid var(--mj-border-default)"], [2, "padding", "12px"], [2, "display", "flex", "align-items", "center", "gap", "6px"], [2, "padding", "12px", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "right", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "center"], [2, "padding", "4px 8px", "border-radius", "12px", "background", "var(--mj-bg-surface-sunken)", "color", "var(--mj-text-secondary)", "font-size", "0.85em", "font-weight", "500"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "View details", 3, "click"], [1, "fa-solid", "fa-external-link"], [3, "Params", "NewRecordValues", "AllowLoad", "ShowToolbar"], [1, "fa-solid", "fa-database", 2, "color", "var(--mj-text-muted)"], [2, "margin", "0 0 12px 0", "color", "var(--mj-text-secondary)"], [1, "fa-solid", "fa-link", 2, "color", "var(--mj-text-muted)"], [3, "Close", "Width", "Height", "MinWidth", "MinHeight", "Draggable", "Resizable", "Visible", "Title"], [3, "visibilityChange", "entity", "mode", "isVisible"]], template: function MJAIPromptFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
3039
|
-
i0.ɵɵ
|
|
3040
|
-
i0.ɵɵ
|
|
3041
|
-
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_2_Template,
|
|
3042
|
-
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_3_Template, 2, 11, "mj-window", 4);
|
|
3043
|
-
i0.ɵɵelementEnd();
|
|
3041
|
+
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 2, consts: [["form", "ngForm"], ["templateEditor", ""], [3, "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [3, "Width", "Height", "MinWidth", "MinHeight", "Draggable", "Resizable", "Visible", "Title"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [1, "prompt-main-area", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [1, "prompt-header", 2, "flex-shrink", "0", "padding", "20px", "background", "var(--mj-bg-surface-sunken)", "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"], [1, "fa-solid", "fa-robot", 2, "color", "var(--mj-brand-primary)", "font-size", "1.4em"], ["type", "text", "name", "promptName", "placeholder", "Enter prompt 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", "promptDescription", "placeholder", "Enter prompt 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-layer-group", 2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-secondary)", "font-weight", "500"], [1, "fa-solid", "fa-code", 2, "color", "var(--mj-text-muted)"], [2, "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", "Run AI Prompt Test Harness"], [2, "font-size", "0.75em", "color", "#dc3545", "text-align", "right", "max-width", "200px"], [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", ""], [1, "template-section", 2, "display", "flex", "flex-direction", "column", "min-height", "400px", "padding", "8px"], [1, "loading-state", 2, "flex", "1", "display", "flex", "align-items", "center", "justify-content", "center", "color", "var(--mj-text-muted)"], [1, "no-template-state", 2, "flex", "1", "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "padding", "40px", "color", "var(--mj-text-muted)"], [1, "invalid-template-state", 2, "flex", "1", "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "padding", "40px", "color", "#dc3545"], [1, "template-editor-container", 2, "flex", "1", "display", "flex", "flex-direction", "column", "min-height", "350px"], [2, "padding", "16px 0"], [2, "display", "grid", "grid-template-columns", "1fr 1fr", "gap", "20px"], ["FieldName", "ParallelizationMode", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ParallelCount", "Type", "numerictextbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ParallelConfigParam", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "OutputType", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "EffortLevel", "Type", "numerictextbox", "Caption", "Effort Level (1-100)", "Description", "Higher values request more thorough reasoning", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ValidationBehavior", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "EnableCaching", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode"], [2, "margin-bottom", "16px"], [2, "display", "block", "margin-bottom", "4px", "font-weight", "600", "color", "var(--mj-text-secondary)", "font-size", "0.9em"], [2, "color", "var(--mj-text-secondary)"], [2, "margin", "0 0 12px 0", "font-size", "0.85em", "color", "var(--mj-text-muted)"], ["FieldName", "AssistantPrefill", "Type", "textarea", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "StopSequences", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "PrefillFallbackMode", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["type", "text", "name", "promptName", "placeholder", "Enter prompt 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-badge", 2, "color", "white", "padding", "4px 10px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], ["name", "promptStatus", "TextField", "text", "ValueField", "value", 2, "width", "150px", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], [2, "color", "#dc3545"], [2, "padding", "8px", "color", "var(--mj-text-muted)", "font-style", "italic", "width", "200px"], ["name", "promptTypeID", "TextField", "Name", "ValueField", "ID", "Placeholder", "Select prompt type...", 2, "width", "200px", 3, "ngModel", "Data", "ValuePrimitive", "Filterable"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["name", "promptTypeID", "TextField", "Name", "ValueField", "ID", "Placeholder", "Select prompt type...", 2, "width", "200px", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive", "Filterable"], ["name", "promptDescription", "placeholder", "Enter prompt description...", 1, "mj-textarea", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-tag", 2, "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-database", 2, "color", "#28a745"], [2, "color", "#28a745", "font-weight", "500"], [1, "fa-solid", "fa-tachometer-alt", 2, "color", "var(--mj-text-muted)"], ["mjButton", "", "variant", "primary", "size", "lg", "title", "Run AI Prompt Test Harness", 3, "click"], [1, "fa-solid", "fa-play"], [2, "display", "flex", "align-items", "center", "gap", "8px", "font-weight", "600"], [2, "color", "var(--mj-text-muted)", "font-size", "0.9em", "font-weight", "normal"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "24px", "margin-right", "12px"], [1, "fa-solid", "fa-code", 2, "font-size", "64px", "margin-bottom", "20px", "opacity", "0.3"], [2, "margin-bottom", "12px", "color", "var(--mj-text-secondary)"], [2, "margin-bottom", "24px", "text-align", "center", "max-width", "400px"], [2, "display", "flex", "gap", "12px"], ["mjButton", "", "variant", "primary"], ["mjButton", "", "variant", "outline"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "fa-solid", "fa-plus"], ["mjButton", "", "variant", "outline", 3, "click"], [1, "fa-solid", "fa-link"], [1, "fa-solid", "fa-exclamation-triangle", 2, "font-size", "64px", "margin-bottom", "20px", "opacity", "0.7"], [2, "margin-bottom", "12px"], [1, "fa-solid", "fa-refresh"], [1, "template-actions", 2, "display", "flex", "gap", "8px", "padding", "8px", "border-bottom", "1px solid var(--mj-border-default)", "background", "var(--mj-bg-surface-sunken)"], [2, "flex", "1", "background", "var(--mj-bg-surface-card)", "border-radius", "6px", "border", "1px solid var(--mj-border-default)"], [2, "display", "block", "min-height", "300px", 3, "contentChange", "runTemplate", "template", "config"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Change to a different template"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Open template in new window"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Change to a different template", 3, "click"], [1, "fa-solid", "fa-exchange-alt"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Open template in new window", 3, "click"], [1, "fa-solid", "fa-external-link-alt"], [1, "model-management", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "6px", "background", "var(--mj-bg-surface-sunken)"], [1, "loading-state", 2, "padding", "20px", "text-align", "center", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-microchip", 2, "color", "var(--mj-text-muted)"], [1, "badge", 2, "background", "#17a2b8", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [2, "color", "var(--mj-text-muted)", "font-size", "0.8em", "font-weight", "normal", "margin-left", "8px"], ["title", "Models are tried in order from top to bottom. The first available model will be used.", 1, "fa-solid", "fa-info-circle"], [1, "empty-state", 2, "padding", "20px", "text-align", "center", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-info-circle"], [2, "margin-top", "10px"], ["mjButton", "", "variant", "outline", "size", "sm", 3, "click"], [2, "padding", "12px 16px", "background", "color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))", "border-bottom", "1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default))", "color", "var(--mj-brand-primary)", "font-size", "0.85em"], [1, "model-header", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "background", "var(--mj-bg-surface-sunken)", "font-weight", "600", "font-size", "0.85em", "color", "var(--mj-text-secondary)", "border-bottom", "1px solid var(--mj-border-default)"], ["title", "Priority order - models are tried from top to bottom"], [1, "fa-solid", "fa-sort", 2, "color", "var(--mj-text-muted)"], [1, "add-model-row", 2, "padding", "12px 16px", "text-align", "center", "background", "var(--mj-bg-surface-sunken)", "border-top", "1px solid var(--mj-border-default)"], [1, "fa-solid", "fa-info-circle", 2, "margin-right", "6px"], [1, "model-row", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "border-bottom", "1px solid var(--mj-border-default)", "align-items", "start", "transition", "background 0.2s, opacity 0.2s", 3, "dragstart", "dragover", "drop", "dragend", "draggable"], [1, "drag-handle", 2, "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "color", "var(--mj-text-muted)"], [2, "font-size", "0.9em", "font-weight", "600", 3, "title"], [1, "model-select"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select a model...", 2, "width", "100%", 3, "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [1, "model-vendor"], [1, "model-configuration"], [2, "font-size", "0.9em"], [1, "model-created"], [2, "color", "var(--mj-text-muted)", "font-size", "0.8em"], [2, "color", "#28a745", "font-size", "0.8em", "font-style", "italic"], [1, "model-actions", 2, "display", "flex", "gap", "2px", "flex-direction", "column"], [2, "display", "grid", "grid-template-columns", "40px 1fr", "gap", "12px", "padding", "8px 16px", "border-bottom", "1px solid var(--mj-border-default)", "background", "var(--mj-bg-surface-sunken)", "font-size", "0.85em", "color", "var(--mj-text-muted)"], [2, "display", "flex", "gap", "16px", "flex-wrap", "wrap", "align-items", "center", "margin-bottom", "8px"], [2, "padding", "8px", "background", "var(--mj-bg-surface-card)", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", "margin-top", "8px"], ["title", "Drag to reorder priority", 1, "fa-solid", "fa-grip-vertical", 2, "cursor", "move"], [2, "font-size", "0.7em", "margin-top", "2px"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select a model...", 2, "width", "100%", 3, "ngModelChange", "ValueChange", "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [2, "color", "var(--mj-text-muted)", "font-style", "italic", "font-size", "0.9em"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select vendor...", 2, "width", "100%", 3, "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select vendor...", 2, "width", "100%", 3, "ngModelChange", "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [2, "font-size", "0.9em", "font-weight", "500", 3, "color"], [2, "font-size", "0.9em", "font-weight", "500"], [2, "font-size", "0.8em", "margin-left", "4px"], [2, "font-size", "0.9em", 3, "color"], [2, "color", "var(--mj-text-muted)", "font-size", "0.9em"], [2, "padding", "4px", "color", "var(--mj-text-muted)", "font-style", "italic", "font-size", "0.85em"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Default", 2, "width", "100%", 3, "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Default", 2, "width", "100%", 3, "ngModelChange", "ValueChange", "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [2, "display", "flex", "gap", "2px", "margin-bottom", "4px"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Remove model", 2, "color", "var(--mj-status-error)"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Move up", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-up"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Move down", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-down"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Remove model", 2, "color", "var(--mj-status-error)", 3, "click"], [1, "fa-solid", "fa-times"], [2, "margin-bottom", "6px", "font-weight", "600", "color", "var(--mj-text-secondary)", "font-size", "0.9em"], [1, "fa-solid", "fa-layer-group"], [2, "display", "grid", "grid-template-columns", "1fr 1fr 1fr", "gap", "12px", "align-items", "center"], [2, "display", "flex", "gap", "16px", "flex-wrap", "wrap", "align-items", "center"], [2, "display", "block", "margin-bottom", "2px", "font-size", "0.8em", "font-weight", "600", "color", "var(--mj-text-secondary)"], ["TextField", "text", "ValueField", "value", "Placeholder", "Select mode...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name", "Data", "ValuePrimitive"], ["Placeholder", "Count...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name", "Min", "Step", "Format"], ["type", "text", "placeholder", "Parameter name...", 1, "mj-input", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name"], ["mjButton", "", "variant", "outline", "size", "sm", 2, "color", "var(--mj-status-success)", "border-color", "var(--mj-status-success)", 3, "click"], [1, "fa-solid", "fa-cogs", 2, "color", "var(--mj-text-muted)"], [2, "padding", "8px", "color", "var(--mj-text-muted)", "font-style", "italic"], ["name", "resultSelectorPromptID", "TextField", "text", "ValueField", "value", "Placeholder", "Select a result selector prompt...", 2, "width", "100%", 3, "ngModel", "Data", "ValuePrimitive", "Filterable"], ["name", "resultSelectorPromptID", "TextField", "text", "ValueField", "value", "Placeholder", "Select a result selector prompt...", 2, "width", "100%", 3, "ngModelChange", "ValueChange", "ngModel", "Data", "ValuePrimitive", "Filterable"], [1, "fa-solid", "fa-wand-magic-sparkles", 2, "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-sliders", 2, "color", "var(--mj-text-muted)"], [1, "badge", 2, "background", "var(--mj-brand-primary)", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], ["title", "These parameters are defined in the template and will be available when executing this prompt", 1, "fa-solid", "fa-info-circle"], [2, "display", "grid", "gap", "12px"], [1, "parameter-card", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "padding", "16px", "background", "var(--mj-bg-surface-sunken)", "transition", "all 0.2s", 3, "border-left"], [2, "margin-top", "16px", "padding", "12px", "background", "color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))", "border-radius", "6px", "border", "1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default))"], [2, "display", "flex", "align-items", "flex-start", "gap", "8px"], [1, "fa-solid", "fa-lightbulb", 2, "color", "var(--mj-brand-primary)", "margin-top", "2px"], [2, "flex", "1", "font-size", "0.85em", "color", "var(--mj-brand-primary)", "line-height", "1.5"], [1, "parameter-card", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "padding", "16px", "background", "var(--mj-bg-surface-sunken)", "transition", "all 0.2s"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "margin-bottom", "8px"], [2, "display", "flex", "align-items", "center", "gap", "8px"], [2, "font-size", "1.2em"], [2, "margin", "0", "color", "var(--mj-text-secondary)", "font-weight", "600"], [2, "color", "#dc3545", "font-size", "0.9em", "margin-left", "4px"], [1, "type-badge", 2, "color", "white", "padding", "4px 8px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], [2, "color", "#dc3545", "font-size", "0.85em", "font-weight", "500"], [2, "color", "var(--mj-text-muted)", "font-size", "0.85em"], [2, "margin", "0 0 8px 0", "color", "var(--mj-text-muted)", "font-size", "0.9em", "line-height", "1.4"], [2, "font-size", "0.85em", "color", "var(--mj-text-secondary)"], [2, "display", "flex", "align-items", "center", "gap", "4px", "margin-bottom", "4px"], [1, "fa-solid", "fa-info-circle", 2, "color", "var(--mj-text-muted)"], [2, "display", "grid", "grid-template-columns", "repeat(auto-fit, minmax(200px, 1fr))", "gap", "12px", "margin-top", "12px"], [2, "background", "var(--mj-bg-surface-card)", "padding", "8px 12px", "border-radius", "4px", "border", "1px solid var(--mj-border-default)"], [2, "display", "block", "font-size", "0.8em", "color", "var(--mj-text-muted)", "margin-bottom", "2px"], [2, "font-size", "0.85em", "color", "var(--mj-text-secondary)", "word-break", "break-all"], [2, "font-size", "0.8em", "color", "var(--mj-text-secondary)", "word-break", "break-all"], [2, "padding", "16px"], [2, "background", "var(--mj-bg-surface-sunken)", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", "padding", "12px", "font-family", "'Courier New', monospace", "font-size", "0.9em", "white-space", "pre-wrap", "overflow", "auto", "max-height", "250px"], [2, "background", "#fff3cd", "border", "1px solid #ffeaa7", "border-radius", "4px", "padding", "12px", "color", "#856404", "text-align", "center"], [2, "color", "#dc3545", "font-size", "0.8em", "font-weight", "normal"], ["name", "outputExample", "language", "json", "placeholder", "Enter JSON example structure...", 2, "width", "100%", "height", "200px", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", 3, "ngModelChange", "ngModel"], [2, "margin-top", "8px", "color", "var(--mj-text-muted)", "font-size", "0.85em"], [1, "fa-solid", "fa-exclamation-triangle"], [2, "text-align", "center", "padding", "40px", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-history", 2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-muted)", "font-weight", "normal"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "2em", "margin-bottom", "12px"], [1, "fa-solid", "fa-history", 2, "font-size", "3em", "margin-bottom", "12px", "opacity", "0.3"], [2, "display", "flex", "justify-content", "space-between", "align-items", "center", "margin-bottom", "16px"], [2, "display", "flex", "gap", "8px", "align-items", "center"], [1, "mj-button-group"], ["mjButton", "", "size", "sm", 3, "click"], [2, "margin-left", "4px", "font-size", "0.8em", 3, "class"], [2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "overflow", "hidden"], [2, "width", "100%", "border-collapse", "collapse"], [2, "background", "var(--mj-bg-surface-sunken)", "border-bottom", "2px solid var(--mj-border-default)"], [2, "padding", "12px", "text-align", "left", "font-weight", "600", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "right", "font-weight", "600", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "center", "font-weight", "600", "color", "var(--mj-text-secondary)"], [1, "history-row", 2, "border-bottom", "1px solid var(--mj-border-default)", 3, "even-row"], [2, "margin-left", "4px", "font-size", "0.8em"], [1, "history-row", 2, "border-bottom", "1px solid var(--mj-border-default)"], [2, "padding", "12px"], [2, "display", "flex", "align-items", "center", "gap", "6px"], [2, "padding", "12px", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "right", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "center"], [2, "padding", "4px 8px", "border-radius", "12px", "background", "var(--mj-bg-surface-sunken)", "color", "var(--mj-text-secondary)", "font-size", "0.85em", "font-weight", "500"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "View details", 3, "click"], [1, "fa-solid", "fa-external-link"], [3, "Params", "NewRecordValues", "AllowLoad", "ShowToolbar"], [1, "fa-solid", "fa-database", 2, "color", "var(--mj-text-muted)"], [2, "margin", "0 0 12px 0", "color", "var(--mj-text-secondary)"], [1, "fa-solid", "fa-link", 2, "color", "var(--mj-text-muted)"], [3, "Close", "Width", "Height", "MinWidth", "MinHeight", "Draggable", "Resizable", "Visible", "Title"], [3, "visibilityChange", "entity", "mode", "isVisible"]], template: function MJAIPromptFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
3042
|
+
i0.ɵɵelement(0, "div");
|
|
3043
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Template, 77, 53, "mj-record-form-container", 2);
|
|
3044
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_2_Template, 2, 11, "mj-window", 3);
|
|
3044
3045
|
} if (rf & 2) {
|
|
3045
|
-
i0.ɵɵadvance(2);
|
|
3046
|
-
i0.ɵɵconditional(ctx.record ? 2 : -1);
|
|
3047
3046
|
i0.ɵɵadvance();
|
|
3048
|
-
i0.ɵɵconditional(ctx.
|
|
3049
|
-
|
|
3047
|
+
i0.ɵɵconditional(ctx.record ? 1 : -1);
|
|
3048
|
+
i0.ɵɵadvance();
|
|
3049
|
+
i0.ɵɵconditional(ctx.showTestHarness ? 2 : -1);
|
|
3050
|
+
} }, dependencies: [i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i2.MJDropdownComponent, i2.MJNumericInputComponent, i2.MJWindowComponent, i3.MjFormFieldComponent, i3.MjRecordFormContainerComponent, i3.ExplorerEntityDataGridComponent, i4.CodeEditorComponent, i5.AITestHarnessComponent, i6.TemplateEditorComponent, i7.DatePipe], styles: ["\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\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.custom-toolbar-actions[_ngcontent-%COMP%] {\n margin-left: auto;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.config-summary[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.config-item[_ngcontent-%COMP%] {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.config-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.template-tab-content[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n.template-header[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n.loading-state[_ngcontent-%COMP%], \n.no-template-state[_ngcontent-%COMP%], \n.invalid-template-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n.no-template-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.invalid-template-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n opacity: 0.6;\n}\n\n.template-editor-container[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n}\n\n\n\n@media (max-width: 1200px) {\n .record-form-container[_ngcontent-%COMP%] .mj-tab-body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n grid-template-columns: 1fr !important;\n gap: 20px;\n }\n\n .config-summary[_ngcontent-%COMP%] {\n order: -1;\n position: static;\n max-height: none;\n }\n}\n\n\n\n@media (max-width: 768px) {\n .custom-toolbar-actions[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 4px !important;\n }\n\n .status-badge[_ngcontent-%COMP%] {\n align-self: flex-start;\n }\n}\n\n\n\n.record-form-container[_ngcontent-%COMP%] mj-form-section[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n\n\n.status-badge[_ngcontent-%COMP%], \n.config-item[_ngcontent-%COMP%], \n.template-header[_ngcontent-%COMP%] {\n transition: all 0.2s ease;\n}\n\n.config-item[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-sm);\n margin: 0 -8px;\n padding: 8px;\n}\n\n\n\n.history-row[_ngcontent-%COMP%] {\n transition: background 0.2s;\n}\n\n.history-row[_ngcontent-%COMP%]:not(.even-row) {\n background: var(--mj-bg-surface-card);\n}\n\n.history-row.even-row[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n.history-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default) !important;\n}\n\n\n\n.parameter-card[_ngcontent-%COMP%] {\n position: relative;\n overflow: hidden;\n}\n\n.parameter-card[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 4px;\n background: inherit;\n transition: width 0.2s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover::before {\n width: 6px;\n}\n\n.type-badge[_ngcontent-%COMP%] {\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n transition: transform 0.2s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover .type-badge[_ngcontent-%COMP%] {\n transform: scale(1.05);\n}\n\n\n\n.parameter-card[_ngcontent-%COMP%] i.fa-solid[_ngcontent-%COMP%] {\n transition: transform 0.3s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover i.fa-solid[_ngcontent-%COMP%] {\n transform: rotate(360deg);\n}\n\n\n\n@media (max-width: 768px) {\n .parameter-card[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n }\n\n .parameter-card[_ngcontent-%COMP%] h6[_ngcontent-%COMP%] {\n font-size: 0.95em;\n }\n\n .type-badge[_ngcontent-%COMP%] {\n font-size: 0.7em !important;\n }\n}"] }); }
|
|
3050
3051
|
};
|
|
3051
3052
|
MJAIPromptFormComponentExtended = __decorate([
|
|
3052
3053
|
RegisterClass(BaseFormComponent, 'MJ: AI Prompts')
|
|
@@ -3054,7 +3055,7 @@ MJAIPromptFormComponentExtended = __decorate([
|
|
|
3054
3055
|
export { MJAIPromptFormComponentExtended };
|
|
3055
3056
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJAIPromptFormComponentExtended, [{
|
|
3056
3057
|
type: Component,
|
|
3057
|
-
args: [{ standalone: false, selector: 'mj-ai-prompt-form', template: "<div class=\"record-form-container\" style=\"height: 100%; display: flex; flex-direction: column;\">\n <!-- Dialog container -->\n <div></div>\n @if (record) {\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n <mj-form-toolbar [Form]=\"this\"></mj-form-toolbar>\n <!-- Main Content Area - Template Editor and Configuration -->\n <div class=\"prompt-main-area\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n <!-- Header Section -->\n <div class=\"prompt-header\" style=\"flex-shrink: 0; padding: 20px; background: var(--mj-bg-surface-sunken); border-bottom: 2px solid var(--mj-border-default);\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n <!-- Left: Prompt Info -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 8px;\">\n <i class=\"fa-solid fa-robot\" style=\"color: var(--mj-brand-primary); font-size: 1.4em;\"></i>\n @if (EditMode) {\n <input type=\"text\" class=\"mj-input\" [(ngModel)]=\"record.Name\"\n name=\"promptName\"\n placeholder=\"Enter prompt 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 AI Prompt' }}</h4>\n <span class=\"status-badge\" [style.background-color]=\"getStatusBadgeColor()\"\n style=\"color: white; padding: 4px 10px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\">\n {{ record.Status }}\n </span>\n }\n </div>\n <!-- 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=\"promptStatus\"\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: #dc3545;\">*</span>\n </label>\n @if (isLoadingPromptTypes) {\n <div style=\"padding: 8px; color: var(--mj-text-muted); font-style: italic; width: 200px;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading types...\n </div>\n } @else {\n <mj-dropdown [(ngModel)]=\"record.TypeID\"\n name=\"promptTypeID\"\n [Data]=\"availablePromptTypes\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select prompt type...\"\n style=\"width: 200px;\">\n </mj-dropdown>\n }\n </div>\n </div>\n }\n @if (EditMode) {\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.Description\"\n name=\"promptDescription\"\n [rows]=\"2\"\n placeholder=\"Enter prompt description...\"\n style=\"width: 100%; max-width: 600px; margin-bottom: 12px;\"></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 <!-- Quick Config Row -->\n <div class=\"quick-config\" style=\"display: flex; align-items: center; gap: 16px; flex-wrap: wrap;\">\n @if (record.TypeID) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-tag\" 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;\">{{ getPromptTypeDisplayName(record.TypeID) }}</span>\n </div>\n }\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-layer-group\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Parallelization:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ getParallelizationModeDisplay() }}</span>\n </div>\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Output:</span>\n <span [style.color]=\"getValidationColor()\" style=\"font-weight: 500;\">{{ getOutputTypeDisplay() }}</span>\n </div>\n @if (record.EnableCaching) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-database\" style=\"color: #28a745;\"></i>\n <span style=\"color: #28a745; font-weight: 500;\">Caching Enabled</span>\n </div>\n }\n @if (record.EffortLevel) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-tachometer-alt\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Effort Level:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ record.EffortLevel }}</span>\n </div>\n }\n </div>\n </div>\n <!-- Right: Action Buttons -->\n <div class=\"action-buttons\" style=\"display: flex; flex-direction: column; gap: 8px; align-items: flex-end;\">\n <div style=\"display: flex; gap: 8px;\">\n @if (record.ID) {\n <button mjButton variant=\"primary\" size=\"lg\"\n (click)=\"openTestHarness()\"\n title=\"Run AI Prompt Test Harness\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n </div>\n @if (!canExecute && record.ID) {\n <div style=\"font-size: 0.75em; color: #dc3545; text-align: right; max-width: 200px;\">\n @if (record.Status !== 'Active') {\n \u2022 Prompt must be Active<br>\n }\n @if (!record.TemplateID) {\n \u2022 Template is required<br>\n }\n @if (!template && record.TemplateID) {\n \u2022 Template not found<br>\n }\n </div>\n }\n </div>\n </div>\n </div>\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 <!-- Template Editor Section -->\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-code\" style=\"color: var(--mj-text-muted);\"></i>\n Template Editor\n @if (template) {\n <span style=\"color: var(--mj-text-muted); font-size: 0.9em; font-weight: normal;\">• {{ template.Name }}</span>\n }\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div class=\"template-section\" style=\"display: flex; flex-direction: column; min-height: 400px; padding: 8px;\">\n @if (isLoadingTemplate) {\n <div class=\"loading-state\" style=\"flex: 1; display: flex; align-items: center; justify-content: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 24px; margin-right: 12px;\"></i>\n Loading template...\n </div>\n } @else if (!record.TemplateID) {\n <div class=\"no-template-state\" style=\"flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 40px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-code\" style=\"font-size: 64px; margin-bottom: 20px; opacity: 0.3;\"></i>\n <h5 style=\"margin-bottom: 12px; color: var(--mj-text-secondary);\">No Template Associated</h5>\n <p style=\"margin-bottom: 24px; text-align: center; max-width: 400px;\">\n This AI prompt needs a template to define its structure and parameters.\n Create a new template or link to an existing one.\n </p>\n <div style=\"display: flex; gap: 12px;\">\n @if (UserCanCreateTemplates) {\n <button mjButton variant=\"primary\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n }\n @if (UserCanReadTemplates) {\n <button mjButton variant=\"outline\" (click)=\"linkExistingTemplate()\">\n <i class=\"fa-solid fa-link\"></i> Link Existing Template\n </button>\n }\n </div>\n </div>\n } @else if (templateNotFoundInDatabase) {\n <div class=\"invalid-template-state\" style=\"flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 40px; color: #dc3545;\">\n <i class=\"fa-solid fa-exclamation-triangle\" style=\"font-size: 64px; margin-bottom: 20px; opacity: 0.7;\"></i>\n <h5 style=\"margin-bottom: 12px;\">Template Not Found</h5>\n <p style=\"margin-bottom: 24px; text-align: center; max-width: 400px;\">\n The referenced template could not be loaded. It may have been deleted or moved.\n </p>\n <div style=\"display: flex; gap: 12px;\">\n <button mjButton variant=\"outline\" (click)=\"loadTemplate()\">\n <i class=\"fa-solid fa-refresh\"></i> Retry Loading\n </button>\n @if (UserCanCreateTemplates) {\n <button mjButton variant=\"primary\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n }\n </div>\n </div>\n } @else {\n <!-- Active Template Editor -->\n <div class=\"template-editor-container\" style=\"flex: 1; display: flex; flex-direction: column; min-height: 350px;\">\n <!-- Template Actions Bar -->\n @if (template && EditMode) {\n <div class=\"template-actions\" style=\"display: flex; gap: 8px; padding: 8px; border-bottom: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-sunken);\">\n @if (UserCanUpdateTemplates) {\n <button mjButton\n variant=\"outline\"\n size=\"sm\"\n (click)=\"linkExistingTemplate()\"\n title=\"Change to a different template\">\n <i class=\"fa-solid fa-exchange-alt\"></i> Change Template\n </button>\n }\n @if (UserCanReadTemplates) {\n <button mjButton\n variant=\"outline\"\n size=\"sm\"\n (click)=\"openTemplateInNewWindow()\"\n title=\"Open template in new window\">\n <i class=\"fa-solid fa-external-link-alt\"></i> Open in New Window\n </button>\n }\n </div>\n }\n <!-- Template Editor -->\n <div style=\"flex: 1; background: var(--mj-bg-surface-card); border-radius: 6px; border: 1px solid var(--mj-border-default);\">\n <mj-template-editor\n #templateEditor\n [template]=\"template\"\n [config]=\"templateEditorConfig\"\n (contentChange)=\"onTemplateContentChange($event)\"\n (runTemplate)=\"onTemplateRun($event)\"\n style=\"display: block; min-height: 300px;\">\n </mj-template-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n <!-- Model Configuration Expansion Panel -->\n @if (record.IsSaved) {\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-microchip\" style=\"color: var(--mj-text-muted);\"></i>\n Models\n @if (promptModels.length > 0) {\n <span class=\"badge\" style=\"background: #17a2b8; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ promptModels.length }}\n </span>\n }\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em; font-weight: normal; margin-left: 8px;\">\n <i class=\"fa-solid fa-info-circle\" title=\"Models are tried in order from top to bottom. The first available model will be used.\"></i>\n Priority order (first available model will be used)\n </span>\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <!-- Model Management Interface -->\n <div class=\"model-management\" style=\"border: 1px solid var(--mj-border-default); border-radius: 6px; background: var(--mj-bg-surface-sunken);\">\n @if (isLoadingModels) {\n <div class=\"loading-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading models...\n </div>\n } @else {\n @if (promptModels.length === 0) {\n <div class=\"empty-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-info-circle\"></i> No models configured\n @if (EditMode && UserCanCreatePromptModels) {\n <div style=\"margin-top: 10px;\">\n <button mjButton variant=\"outline\" size=\"sm\"\n (click)=\"addNewModel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n </div>\n }\n </div>\n } @else {\n <!-- Priority explanation for multiple models -->\n @if (promptModels.length > 1) {\n <div style=\"padding: 12px 16px; background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface)); border-bottom: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default)); color: var(--mj-brand-primary); font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\" style=\"margin-right: 6px;\"></i>\n Models are tried in priority order (highest priority first). The first available model that meets requirements will be used for execution.\n </div>\n }\n <!-- Column Headers -->\n <div class=\"model-header\" style=\"display: grid; grid-template-columns: 40px 2fr 1fr 1fr 1fr 60px; gap: 12px; padding: 12px 16px; background: var(--mj-bg-surface-sunken); font-weight: 600; font-size: 0.85em; color: var(--mj-text-secondary); border-bottom: 1px solid var(--mj-border-default);\">\n <div title=\"Priority order - models are tried from top to bottom\">\n <i class=\"fa-solid fa-sort\" style=\"color: var(--mj-text-muted);\"></i>\n </div>\n <div>AI Model <span style=\"color: #dc3545;\">*</span></div>\n <div>Vendor</div>\n <div>Configuration</div>\n <div>Created</div>\n <div>Actions</div>\n </div>\n @for (model of promptModels; track getModelTrackId(model) || $index; let i = $index) {\n <div class=\"model-row\"\n [draggable]=\"EditMode\"\n (dragstart)=\"onDragStart($event, i)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($event, i)\"\n (dragend)=\"onDragEnd($event)\"\n [style.background]=\"!model.ModelID ? '#fff3cd' : (draggedIndex === i ? 'color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))' : 'var(--mj-bg-surface-card)')\"\n [style.border-left]=\"!model.ModelID ? '3px solid #ffc107' : 'none'\"\n [style.opacity]=\"draggedIndex === i ? '0.5' : '1'\"\n style=\"display: grid; grid-template-columns: 40px 2fr 1fr 1fr 1fr 60px; gap: 12px; padding: 12px 16px; border-bottom: 1px solid var(--mj-border-default); align-items: start; transition: background 0.2s, opacity 0.2s;\">\n <!-- Drag Handle / Priority -->\n <div class=\"drag-handle\" style=\"display: flex; flex-direction: column; align-items: center; justify-content: center; color: var(--mj-text-muted);\">\n @if (EditMode) {\n <i class=\"fa-solid fa-grip-vertical\" title=\"Drag to reorder priority\" style=\"cursor: move;\"></i>\n <span style=\"font-size: 0.7em; margin-top: 2px;\">#{{ i + 1 }}</span>\n } @else {\n <span style=\"font-size: 0.9em; font-weight: 600;\" title=\"Priority {{ model.Priority }} - Higher priority numbers are tried first\">#{{ i + 1 }}</span>\n }\n </div>\n <!-- Model Selection -->\n <div class=\"model-select\">\n @if (EditMode) {\n <mj-dropdown [(ngModel)]=\"model.ModelID\"\n [name]=\"'modelId_' + getModelTrackId(model)\"\n [Data]=\"availableModels\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select a model...\"\n (ValueChange)=\"onModelChange($any($event), i)\"\n style=\"width: 100%;\">\n </mj-dropdown>\n } @else {\n <span style=\"font-weight: 500;\">{{ getModelDisplayName(model.ModelID) }}</span>\n }\n </div>\n <!-- Vendor -->\n <div class=\"model-vendor\">\n @if (EditMode) {\n @if (model.ModelID) {\n @if (shouldShowVendorDropdown(model.ModelID)) {\n <mj-dropdown [(ngModel)]=\"model.VendorID\"\n [name]=\"'vendorId_' + getModelTrackId(model)\"\n [Data]=\"getVendorsForModelSync(model.ModelID)\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select vendor...\"\n style=\"width: 100%;\">\n </mj-dropdown>\n } @else {\n <!-- Single vendor - just show the name -->\n @if (getVendorsForModelSync(model.ModelID).length === 1) {\n <span [style.color]=\"getVendorStatusColor(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID)\" style=\"font-size: 0.9em; font-weight: 500;\">\n {{ getVendorsForModelSync(model.ModelID)[0].Name }}\n @if (getModelVendorStatus(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID) }})</span>\n }\n </span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-style: italic; font-size: 0.9em;\">No vendors available</span>\n }\n }\n } @else {\n <span style=\"color: var(--mj-text-muted); font-style: italic; font-size: 0.9em;\">Select model first</span>\n }\n } @else {\n @if (model.VendorID && model.ModelID) {\n <span [style.color]=\"getVendorStatusColor(model.ModelID, model.VendorID)\" style=\"font-size: 0.9em;\">\n {{ getVendorDisplayName(model.VendorID) }}\n @if (getModelVendorStatus(model.ModelID, model.VendorID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, model.VendorID) }})</span>\n }\n </span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-size: 0.9em;\">-</span>\n }\n }\n </div>\n <!-- Configuration -->\n <div class=\"model-configuration\">\n @if (EditMode) {\n @if (isLoadingConfigurations) {\n <div style=\"padding: 4px; color: var(--mj-text-muted); font-style: italic; font-size: 0.85em;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...\n </div>\n } @else {\n <mj-dropdown [(ngModel)]=\"model.ConfigurationID\"\n [name]=\"'configurationId_' + getModelTrackId(model)\"\n [Data]=\"availableConfigurations\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Default\"\n (ValueChange)=\"onConfigurationChange($any($event), i)\"\n style=\"width: 100%;\">\n </mj-dropdown>\n }\n } @else {\n <span style=\"font-size: 0.9em;\">{{ getConfigurationDisplayName(model.ConfigurationID) }}</span>\n }\n </div>\n <!-- Created Date -->\n <div class=\"model-created\">\n @if (model.ID) {\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em;\">{{ model.__mj_CreatedAt | date:'short' }}</span>\n } @else {\n <span style=\"color: #28a745; font-size: 0.8em; font-style: italic;\">New</span>\n }\n </div>\n <!-- Actions -->\n <div class=\"model-actions\" style=\"display: flex; gap: 2px; flex-direction: column;\">\n @if (EditMode) {\n <div style=\"display: flex; gap: 2px; margin-bottom: 4px;\">\n @if (UserCanUpdatePromptModels) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"moveModelUp(i)\"\n [disabled]=\"i === 0\"\n title=\"Move up\">\n <i class=\"fa-solid fa-chevron-up\"></i>\n </button>\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"moveModelDown(i)\"\n [disabled]=\"i === promptModels.length - 1\"\n title=\"Move down\">\n <i class=\"fa-solid fa-chevron-down\"></i>\n </button>\n }\n </div>\n @if (UserCanDeletePromptModels) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"removePromptModel(i)\"\n title=\"Remove model\"\n style=\"color: var(--mj-status-error);\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n }\n </div>\n </div>\n <!-- Second row with additional details -->\n <div style=\"display: grid; grid-template-columns: 40px 1fr; gap: 12px; padding: 8px 16px; border-bottom: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-sunken); font-size: 0.85em; color: var(--mj-text-muted);\">\n <div></div>\n <div>\n <!-- Basic model details -->\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap; align-items: center; margin-bottom: 8px;\">\n @if (model.Status) {\n <span><strong>Status:</strong> {{ model.Status }}</span>\n }\n </div>\n <!-- Parallel execution fields when prompt is ModelSpecific -->\n @if (record.ParallelizationMode === 'ModelSpecific') {\n <div style=\"padding: 8px; background: var(--mj-bg-surface-card); border: 1px solid var(--mj-border-default); border-radius: 4px; margin-top: 8px;\">\n <div style=\"margin-bottom: 6px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n <i class=\"fa-solid fa-layer-group\"></i> Model-Specific Parallel Execution\n </div>\n @if (EditMode) {\n <div style=\"display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; align-items: center;\">\n <!-- Parallel Mode -->\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: var(--mj-text-secondary);\">Parallel Mode</label>\n <mj-dropdown [(ngModel)]=\"model.ParallelizationMode\"\n [name]=\"'parallelMode_' + i\"\n [Data]=\"[{text: 'None', value: 'None'}, {text: 'Static Count', value: 'StaticCount'}, {text: 'Config Param', value: 'ConfigParam'}]\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n Placeholder=\"Select mode...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </mj-dropdown>\n </div>\n <!-- Parallel Count (when StaticCount) -->\n @if (model.ParallelizationMode === 'StaticCount') {\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: var(--mj-text-secondary);\">Parallel Count</label>\n <mj-numeric-input [(ngModel)]=\"model.ParallelCount\"\n [name]=\"'parallelCount_' + i\"\n [Min]=\"1\"\n [Step]=\"1\"\n [Format]=\"'n0'\"\n Placeholder=\"Count...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </mj-numeric-input>\n </div>\n }\n <!-- Config Param (when ConfigParam) -->\n @if (model.ParallelizationMode === 'ConfigParam') {\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: var(--mj-text-secondary);\">Config Parameter</label>\n <input type=\"text\" class=\"mj-input\" [(ngModel)]=\"model.ParallelConfigParam\"\n [name]=\"'parallelConfigParam_' + i\"\n placeholder=\"Parameter name...\"\n style=\"width: 100%; font-size: 0.85em;\" />\n </div>\n }\n </div>\n } @else {\n <!-- Read-only display -->\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap; align-items: center;\">\n @if (model.ParallelizationMode) {\n <span><strong>Parallel Mode:</strong> {{ model.ParallelizationMode }}</span>\n }\n @if (model.ParallelCount) {\n <span><strong>Parallel Count:</strong> {{ model.ParallelCount }}</span>\n }\n @if (model.ParallelConfigParam) {\n <span><strong>Config Param:</strong> {{ model.ParallelConfigParam }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n @if (EditMode && UserCanCreatePromptModels) {\n <div class=\"add-model-row\" style=\"padding: 12px 16px; text-align: center; background: var(--mj-bg-surface-sunken); border-top: 1px solid var(--mj-border-default);\">\n <button mjButton variant=\"outline\" size=\"sm\"\n (click)=\"addNewModel()\"\n style=\"color: var(--mj-status-success); border-color: var(--mj-status-success);\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n </div>\n }\n }\n }\n </div>\n </div>\n </mj-accordion-panel>\n }\n <!-- Advanced Configuration Expansion Panel -->\n <mj-accordion-panel\n [Expanded]=\"false\"\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 Advanced Configuration\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- Left Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelizationMode\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n @if (showParallelCount) {\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelCount\"\n Type=\"numerictextbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n }\n @if (showParallelConfigParam) {\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelConfigParam\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n }\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"OutputType\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EffortLevel\"\n Type=\"numerictextbox\"\n Caption=\"Effort Level (1-100)\"\n Description=\"Higher values request more thorough reasoning\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n <!-- Right Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ValidationBehavior\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EnableCaching\"\n Type=\"checkbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <!-- Result Selector Prompt with Tree Selector -->\n <div style=\"margin-bottom: 16px;\">\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Result Selector Prompt\n </label>\n @if (EditMode) {\n @if (isLoadingResultSelectorData) {\n <div style=\"padding: 8px; color: var(--mj-text-muted); font-style: italic;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading prompts...\n </div>\n } @else {\n <mj-dropdown\n [(ngModel)]=\"record.ResultSelectorPromptID\"\n name=\"resultSelectorPromptID\"\n [Data]=\"resultSelectorTreeData\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select a result selector prompt...\"\n style=\"width: 100%;\"\n (ValueChange)=\"onResultSelectorChange($any($event))\">\n </mj-dropdown>\n }\n } @else {\n <span style=\"color: var(--mj-text-secondary);\">{{ getPromptDisplayName(record.ResultSelectorPromptID || '') || 'None selected' }}</span>\n }\n </div>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Prefill & Output Control Expansion Panel -->\n <mj-accordion-panel\n [Expanded]=\"false\"\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-text-muted);\"></i>\n Prefill & Output Control\n </span>\n </ng-template>\n <div style=\"padding: 16px 0;\">\n <p style=\"margin: 0 0 12px 0; font-size: 0.85em; color: var(--mj-text-muted);\">\n Assistant prefill seeds the model's response with an initial string, guiding output format and content. Stop sequences terminate generation when encountered.\n </p>\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- Left Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"AssistantPrefill\"\n Type=\"textarea\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"StopSequences\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n <!-- Right Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"PrefillFallbackMode\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Template Parameters Expansion Panel -->\n @if (template && templateParams.length > 0) {\n <mj-accordion-panel\n [Expanded]=\"false\"\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 Template Parameters\n <span class=\"badge\" style=\"background: var(--mj-brand-primary); color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ templateParams.length }}\n </span>\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em; font-weight: normal; margin-left: 8px;\">\n <i class=\"fa-solid fa-info-circle\" title=\"These parameters are defined in the template and will be available when executing this prompt\"></i>\n Parameters defined in the template\n </span>\n </span>\n </ng-template>\n <!-- Template Parameters Display -->\n <div style=\"padding: 16px 0;\">\n @if (isLoadingTemplateParams) {\n <div class=\"loading-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading template parameters...\n </div>\n } @else if (templateParams.length === 0) {\n <div class=\"empty-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-info-circle\"></i> This template has no parameters defined\n </div>\n } @else {\n <!-- Parameters Grid -->\n <div style=\"display: grid; gap: 12px;\">\n @for (param of templateParams; track param.ID) {\n <div class=\"parameter-card\"\n style=\"border: 1px solid var(--mj-border-default); border-radius: 8px; padding: 16px; background: var(--mj-bg-surface-sunken); transition: all 0.2s;\"\n [style.border-left]=\"'4px solid ' + getParamTypeColor(param.Type)\">\n <!-- Parameter Header -->\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 8px;\">\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <i [class]=\"'fa-solid ' + getParamTypeIcon(param.Type)\"\n [style.color]=\"getParamTypeColor(param.Type)\"\n style=\"font-size: 1.2em;\"></i>\n <h6 style=\"margin: 0; color: var(--mj-text-secondary); font-weight: 600;\">\n {{ param.Name }}\n @if (param.IsRequired) {\n <span style=\"color: #dc3545; font-size: 0.9em; margin-left: 4px;\">*</span>\n }\n </h6>\n </div>\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <span class=\"type-badge\"\n [style.background-color]=\"getParamTypeColor(param.Type)\"\n style=\"color: white; padding: 4px 8px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\">\n {{ param.Type }}\n </span>\n @if (param.IsRequired) {\n <span style=\"color: #dc3545; font-size: 0.85em; font-weight: 500;\">Required</span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-size: 0.85em;\">Optional</span>\n }\n </div>\n </div>\n <!-- Parameter Description -->\n @if (param.Description) {\n <p style=\"margin: 0 0 8px 0; color: var(--mj-text-muted); font-size: 0.9em; line-height: 1.4;\">\n {{ param.Description }}\n </p>\n }\n <!-- Type-specific Information -->\n <div style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">\n <span style=\"display: flex; align-items: center; gap: 4px; margin-bottom: 4px;\">\n <i class=\"fa-solid fa-info-circle\" style=\"color: var(--mj-text-muted);\"></i>\n {{ getParamTypeDescription(param) }}\n </span>\n </div>\n <!-- Additional Parameter Details -->\n <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin-top: 12px;\">\n @if (param.DefaultValue) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Default Value</label>\n <code style=\"font-size: 0.85em; color: var(--mj-text-secondary); word-break: break-all;\">{{ param.DefaultValue }}</code>\n </div>\n }\n @if (param.EntityID) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Entity</label>\n <span style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">{{ param.Entity || 'Entity ID: ' + param.EntityID }}</span>\n </div>\n }\n @if (param.LinkedParameterName) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Linked To</label>\n <span style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">\n {{ param.LinkedParameterName }}\n @if (param.LinkedParameterField) {\n ({{ param.LinkedParameterField }})\n }\n </span>\n </div>\n }\n @if (param.ExtraFilter) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Filter</label>\n <code style=\"font-size: 0.8em; color: var(--mj-text-secondary); word-break: break-all;\">{{ param.ExtraFilter }}</code>\n </div>\n }\n @if (param.RecordID) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Record ID</label>\n <code style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">{{ param.RecordID }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n <!-- Help Text -->\n <div style=\"margin-top: 16px; padding: 12px; background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface)); border-radius: 6px; border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default));\">\n <div style=\"display: flex; align-items: flex-start; gap: 8px;\">\n <i class=\"fa-solid fa-lightbulb\" style=\"color: var(--mj-brand-primary); margin-top: 2px;\"></i>\n <div style=\"flex: 1; font-size: 0.85em; color: var(--mj-brand-primary); line-height: 1.5;\">\n <strong>Using Template Parameters:</strong> When executing this prompt, you'll be prompted to provide values for all required parameters.\n Parameters can be simple values (text, numbers) or complex data structures (JSON objects, database records, or entire entity collections).\n The template will use these parameters to generate dynamic content based on the values provided at execution time.\n </div>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Output Example Expansion Panel (when OutputType = object) -->\n @if (showOutputExample) {\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-code\" style=\"color: var(--mj-text-muted);\"></i>\n Output Example (JSON)\n <span style=\"color: #dc3545; font-size: 0.8em; font-weight: normal;\">• Required for object output type</span>\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px;\">\n @if (EditMode) {\n <mj-code-editor\n [(ngModel)]=\"record.OutputExample\"\n name=\"outputExample\"\n language=\"json\"\n placeholder=\"Enter JSON example structure...\"\n style=\"width: 100%; height: 200px; border: 1px solid var(--mj-border-default); border-radius: 4px;\">\n </mj-code-editor>\n <div style=\"margin-top: 8px; color: var(--mj-text-muted); font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\"></i> Provide a JSON example that defines the expected structure for object output validation.\n </div>\n } @else if (record.OutputExample) {\n <div style=\"background: var(--mj-bg-surface-sunken); border: 1px solid var(--mj-border-default); border-radius: 4px; padding: 12px; font-family: 'Courier New', monospace; font-size: 0.9em; white-space: pre-wrap; overflow: auto; max-height: 250px;\">{{ record.OutputExample }}</div>\n } @else {\n <div style=\"background: #fff3cd; border: 1px solid #ffeaa7; border-radius: 4px; padding: 12px; color: #856404; text-align: center;\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i> Output example is required when output type is 'object'\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Execution History Expansion Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"false\"\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-history\" style=\"color: var(--mj-text-muted);\"></i>\n Execution History\n @if (executionHistory.length > 0) {\n <span style=\"color: var(--mj-text-muted); font-weight: normal;\">({{ executionHistory.length }})</span>\n }\n </span>\n </ng-template>\n <!-- Custom Execution History Viewer -->\n <div style=\"padding: 16px;\">\n @if (isLoadingHistory) {\n <div style=\"text-align: center; padding: 40px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 2em; margin-bottom: 12px;\"></i>\n <p>Loading execution history...</p>\n </div>\n } @else if (executionHistory.length === 0) {\n <div style=\"text-align: center; padding: 40px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-history\" style=\"font-size: 3em; margin-bottom: 12px; opacity: 0.3;\"></i>\n <p>No execution history yet</p>\n <p style=\"font-size: 0.9em;\">Run this prompt to see execution history here</p>\n </div>\n } @else {\n <!-- Sort Controls -->\n <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;\">\n <div style=\"color: var(--mj-text-muted); font-size: 0.9em;\">\n Showing {{ executionHistory.length }} executions\n </div>\n <div style=\"display: flex; gap: 8px; align-items: center;\">\n <span style=\"color: var(--mj-text-muted); font-size: 0.85em;\">Sort by:</span>\n <div class=\"mj-button-group\">\n <button mjButton\n [class.active]=\"historySortField === 'runAt'\"\n (click)=\"changeHistorySort('runAt')\"\n size=\"sm\">\n Date\n @if (historySortField === 'runAt') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button mjButton\n [class.active]=\"historySortField === 'executionTime'\"\n (click)=\"changeHistorySort('executionTime')\"\n size=\"sm\">\n Duration\n @if (historySortField === 'executionTime') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button mjButton\n [class.active]=\"historySortField === 'tokens'\"\n (click)=\"changeHistorySort('tokens')\"\n size=\"sm\">\n Tokens\n @if (historySortField === 'tokens') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button mjButton\n [class.active]=\"historySortField === 'cost'\"\n (click)=\"changeHistorySort('cost')\"\n size=\"sm\">\n Cost\n @if (historySortField === 'cost') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n </div>\n </div>\n </div>\n <!-- Execution History Table -->\n <div style=\"border: 1px solid var(--mj-border-default); border-radius: 8px; overflow: hidden;\">\n <table style=\"width: 100%; border-collapse: collapse;\">\n <thead>\n <tr style=\"background: var(--mj-bg-surface-sunken); border-bottom: 2px solid var(--mj-border-default);\">\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Status</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Date & Time</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Model</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Duration</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: var(--mj-text-secondary);\">Tokens</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: var(--mj-text-secondary);\">Cost</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: var(--mj-text-secondary);\">Type</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: var(--mj-text-secondary);\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (run of executionHistory; track run.ID; let i = $index) {\n <tr class=\"history-row\"\n [class.even-row]=\"i % 2 === 0\"\n style=\"border-bottom: 1px solid var(--mj-border-default);\">\n <td style=\"padding: 12px;\">\n <span style=\"display: flex; align-items: center; gap: 6px;\">\n <i [class]=\"'fa-solid ' + getExecutionStatusIcon(run.Success)\"\n [style.color]=\"getExecutionStatusColor(run.Success)\"></i>\n <span [style.color]=\"getExecutionStatusColor(run.Success)\" style=\"font-weight: 500;\">\n {{ run.Success === true ? 'Success' : run.Success === false ? 'Failed' : 'Running' }}\n </span>\n </span>\n </td>\n <td style=\"padding: 12px; color: var(--mj-text-secondary);\">\n {{ run.RunAt | date:'short' }}\n </td>\n <td style=\"padding: 12px; color: var(--mj-text-secondary);\">\n <span style=\"display: flex; align-items: center; gap: 6px;\">\n <i class=\"fa-solid fa-microchip\" style=\"color: var(--mj-text-muted);\"></i>\n {{ run.Model || 'Unknown' }}\n </span>\n </td>\n <td style=\"padding: 12px; color: var(--mj-text-secondary);\">\n {{ formatDuration(run.ExecutionTimeMS) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: var(--mj-text-secondary);\">\n {{ formatTokens(run.TokensUsed) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: var(--mj-text-secondary);\">\n {{ formatCost(run.TotalCost || run.Cost) }}\n </td>\n <td style=\"padding: 12px; text-align: center;\">\n @if (run.RunType) {\n <span style=\"padding: 4px 8px; border-radius: 12px; background: var(--mj-bg-surface-sunken); \n color: var(--mj-text-secondary); font-size: 0.85em; font-weight: 500;\">\n {{ run.RunType }}\n </span>\n }\n </td>\n <td style=\"padding: 12px; text-align: center;\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"navigateToPromptRun(run.ID)\"\n title=\"View details\">\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 <!-- Cache Expansion Panel -->\n @if (record.IsSaved && record.EnableCaching) {\n <mj-accordion-panel\n [Expanded]=\"false\"\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-database\" style=\"color: var(--mj-text-muted);\"></i>\n Result Cache\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Result Cache','AIPromptID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Result Cache')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n </mj-accordion-panel>\n }\n <!-- Related Items Expansion Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"false\"\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-link\" style=\"color: var(--mj-text-muted);\"></i>\n Related Items\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- AI Agents -->\n <div>\n <h6 style=\"margin: 0 0 12px 0; color: var(--mj-text-secondary);\">AI Agents Using This Prompt</h6>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Agent Prompts','PromptID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Agent Prompts')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n <!-- Result Selector References -->\n <div>\n <h6 style=\"margin: 0 0 12px 0; color: var(--mj-text-secondary);\">Prompts Using This as Result Selector</h6>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Prompts','ResultSelectorPromptID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Prompts')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n }\n </div>\n </div>\n </form>\n }\n\n\n <!-- AI Prompt Test Harness -->\n @if (showTestHarness) {\n <mj-window\n [Width]=\"1200\"\n [Height]=\"800\"\n [MinWidth]=\"800\"\n [MinHeight]=\"600\"\n [Draggable]=\"true\"\n [Resizable]=\"true\"\n [Visible]=\"true\"\n (Close)=\"onTestHarnessVisibilityChanged(false)\"\n [Title]=\"'Run AI Prompt - ' + (record.Name || 'Untitled')\">\n <mj-ai-test-harness\n [entity]=\"record\"\n [mode]=\"'prompt'\"\n [isVisible]=\"showTestHarness\"\n (visibilityChange)=\"onTestHarnessVisibilityChanged($event)\">\n </mj-ai-test-harness>\n </mj-window>\n }\n</div>", styles: ["/* Override shared form-styles to enable flex layout */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\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.custom-toolbar-actions {\n margin-left: auto;\n}\n\n.status-badge {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.config-summary {\n position: sticky;\n top: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.config-item {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.config-item:last-child {\n border-bottom: none;\n}\n\n.template-tab-content {\n background: var(--mj-bg-surface);\n}\n\n.template-header h5 {\n font-size: 1.1em;\n}\n\n.loading-state,\n.no-template-state,\n.invalid-template-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n.no-template-state i,\n.invalid-template-state i {\n opacity: 0.6;\n}\n\n.template-editor-container {\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n}\n\n/* Grid layout adjustments */\n@media (max-width: 1200px) {\n .record-form-container .mj-tab-body > div {\n grid-template-columns: 1fr !important;\n gap: 20px;\n }\n\n .config-summary {\n order: -1;\n position: static;\n max-height: none;\n }\n}\n\n/* Responsive toolbar */\n@media (max-width: 768px) {\n .custom-toolbar-actions {\n flex-direction: column;\n gap: 4px !important;\n }\n\n .status-badge {\n align-self: flex-start;\n }\n}\n\n/* Ensure proper spacing in form sections */\n.record-form-container mj-form-section {\n padding: 16px;\n}\n\n/* Smooth transitions for better UX */\n.status-badge,\n.config-item,\n.template-header {\n transition: all 0.2s ease;\n}\n\n.config-item:hover {\n background-color: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-sm);\n margin: 0 -8px;\n padding: 8px;\n}\n\n/* Execution History Table Styles */\n.history-row {\n transition: background 0.2s;\n}\n\n.history-row:not(.even-row) {\n background: var(--mj-bg-surface-card);\n}\n\n.history-row.even-row {\n background: var(--mj-bg-surface);\n}\n\n.history-row:hover {\n background: var(--mj-border-default) !important;\n}\n\n/* Template Parameters Styles */\n.parameter-card {\n position: relative;\n overflow: hidden;\n}\n\n.parameter-card::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 4px;\n background: inherit;\n transition: width 0.2s;\n}\n\n.parameter-card:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.parameter-card:hover::before {\n width: 6px;\n}\n\n.type-badge {\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n transition: transform 0.2s;\n}\n\n.parameter-card:hover .type-badge {\n transform: scale(1.05);\n}\n\n/* Parameter type icons animation */\n.parameter-card i.fa-solid {\n transition: transform 0.3s;\n}\n\n.parameter-card:hover i.fa-solid {\n transform: rotate(360deg);\n}\n\n/* Grid responsive behavior */\n@media (max-width: 768px) {\n .parameter-card {\n margin-bottom: 8px;\n }\n\n .parameter-card h6 {\n font-size: 0.95em;\n }\n\n .type-badge {\n font-size: 0.7em !important;\n }\n}\n"] }]
|
|
3058
|
+
args: [{ standalone: false, selector: 'mj-ai-prompt-form', template: "<!-- Dialog container -->\n<div></div>\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 <!-- Main Content Area - Template Editor and Configuration -->\n <div class=\"prompt-main-area\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n <!-- Header Section -->\n <div class=\"prompt-header\" style=\"flex-shrink: 0; padding: 20px; background: var(--mj-bg-surface-sunken); border-bottom: 2px solid var(--mj-border-default);\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n <!-- Left: Prompt Info -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 8px;\">\n <i class=\"fa-solid fa-robot\" style=\"color: var(--mj-brand-primary); font-size: 1.4em;\"></i>\n @if (EditMode) {\n <input type=\"text\" class=\"mj-input\" [(ngModel)]=\"record.Name\"\n name=\"promptName\"\n placeholder=\"Enter prompt 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 AI Prompt' }}</h4>\n <span class=\"status-badge\" [style.background-color]=\"getStatusBadgeColor()\"\n style=\"color: white; padding: 4px 10px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\">\n {{ record.Status }}\n </span>\n }\n </div>\n <!-- 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=\"promptStatus\"\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: #dc3545;\">*</span>\n </label>\n @if (isLoadingPromptTypes) {\n <div style=\"padding: 8px; color: var(--mj-text-muted); font-style: italic; width: 200px;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading types...\n </div>\n } @else {\n <mj-dropdown [(ngModel)]=\"record.TypeID\"\n name=\"promptTypeID\"\n [Data]=\"availablePromptTypes\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select prompt type...\"\n style=\"width: 200px;\">\n </mj-dropdown>\n }\n </div>\n </div>\n }\n @if (EditMode) {\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.Description\"\n name=\"promptDescription\"\n [rows]=\"2\"\n placeholder=\"Enter prompt description...\"\n style=\"width: 100%; max-width: 600px; margin-bottom: 12px;\"></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 <!-- Quick Config Row -->\n <div class=\"quick-config\" style=\"display: flex; align-items: center; gap: 16px; flex-wrap: wrap;\">\n @if (record.TypeID) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-tag\" 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;\">{{ getPromptTypeDisplayName(record.TypeID) }}</span>\n </div>\n }\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-layer-group\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Parallelization:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ getParallelizationModeDisplay() }}</span>\n </div>\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Output:</span>\n <span [style.color]=\"getValidationColor()\" style=\"font-weight: 500;\">{{ getOutputTypeDisplay() }}</span>\n </div>\n @if (record.EnableCaching) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-database\" style=\"color: #28a745;\"></i>\n <span style=\"color: #28a745; font-weight: 500;\">Caching Enabled</span>\n </div>\n }\n @if (record.EffortLevel) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-tachometer-alt\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Effort Level:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ record.EffortLevel }}</span>\n </div>\n }\n </div>\n </div>\n <!-- Right: Action Buttons -->\n <div class=\"action-buttons\" style=\"display: flex; flex-direction: column; gap: 8px; align-items: flex-end;\">\n <div style=\"display: flex; gap: 8px;\">\n @if (record.ID) {\n <button mjButton variant=\"primary\" size=\"lg\"\n (click)=\"openTestHarness()\"\n title=\"Run AI Prompt Test Harness\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n </div>\n @if (!canExecute && record.ID) {\n <div style=\"font-size: 0.75em; color: #dc3545; text-align: right; max-width: 200px;\">\n @if (record.Status !== 'Active') {\n \u2022 Prompt must be Active<br>\n }\n @if (!record.TemplateID) {\n \u2022 Template is required<br>\n }\n @if (!template && record.TemplateID) {\n \u2022 Template not found<br>\n }\n </div>\n }\n </div>\n </div>\n </div>\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 <!-- Template Editor Section -->\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-code\" style=\"color: var(--mj-text-muted);\"></i>\n Template Editor\n @if (template) {\n <span style=\"color: var(--mj-text-muted); font-size: 0.9em; font-weight: normal;\">• {{ template.Name }}</span>\n }\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div class=\"template-section\" style=\"display: flex; flex-direction: column; min-height: 400px; padding: 8px;\">\n @if (isLoadingTemplate) {\n <div class=\"loading-state\" style=\"flex: 1; display: flex; align-items: center; justify-content: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 24px; margin-right: 12px;\"></i>\n Loading template...\n </div>\n } @else if (!record.TemplateID) {\n <div class=\"no-template-state\" style=\"flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 40px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-code\" style=\"font-size: 64px; margin-bottom: 20px; opacity: 0.3;\"></i>\n <h5 style=\"margin-bottom: 12px; color: var(--mj-text-secondary);\">No Template Associated</h5>\n <p style=\"margin-bottom: 24px; text-align: center; max-width: 400px;\">\n This AI prompt needs a template to define its structure and parameters.\n Create a new template or link to an existing one.\n </p>\n <div style=\"display: flex; gap: 12px;\">\n @if (UserCanCreateTemplates) {\n <button mjButton variant=\"primary\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n }\n @if (UserCanReadTemplates) {\n <button mjButton variant=\"outline\" (click)=\"linkExistingTemplate()\">\n <i class=\"fa-solid fa-link\"></i> Link Existing Template\n </button>\n }\n </div>\n </div>\n } @else if (templateNotFoundInDatabase) {\n <div class=\"invalid-template-state\" style=\"flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 40px; color: #dc3545;\">\n <i class=\"fa-solid fa-exclamation-triangle\" style=\"font-size: 64px; margin-bottom: 20px; opacity: 0.7;\"></i>\n <h5 style=\"margin-bottom: 12px;\">Template Not Found</h5>\n <p style=\"margin-bottom: 24px; text-align: center; max-width: 400px;\">\n The referenced template could not be loaded. It may have been deleted or moved.\n </p>\n <div style=\"display: flex; gap: 12px;\">\n <button mjButton variant=\"outline\" (click)=\"loadTemplate()\">\n <i class=\"fa-solid fa-refresh\"></i> Retry Loading\n </button>\n @if (UserCanCreateTemplates) {\n <button mjButton variant=\"primary\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n }\n </div>\n </div>\n } @else {\n <!-- Active Template Editor -->\n <div class=\"template-editor-container\" style=\"flex: 1; display: flex; flex-direction: column; min-height: 350px;\">\n <!-- Template Actions Bar -->\n @if (template && EditMode) {\n <div class=\"template-actions\" style=\"display: flex; gap: 8px; padding: 8px; border-bottom: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-sunken);\">\n @if (UserCanUpdateTemplates) {\n <button mjButton\n variant=\"outline\"\n size=\"sm\"\n (click)=\"linkExistingTemplate()\"\n title=\"Change to a different template\">\n <i class=\"fa-solid fa-exchange-alt\"></i> Change Template\n </button>\n }\n @if (UserCanReadTemplates) {\n <button mjButton\n variant=\"outline\"\n size=\"sm\"\n (click)=\"openTemplateInNewWindow()\"\n title=\"Open template in new window\">\n <i class=\"fa-solid fa-external-link-alt\"></i> Open in New Window\n </button>\n }\n </div>\n }\n <!-- Template Editor -->\n <div style=\"flex: 1; background: var(--mj-bg-surface-card); border-radius: 6px; border: 1px solid var(--mj-border-default);\">\n <mj-template-editor\n #templateEditor\n [template]=\"template\"\n [config]=\"templateEditorConfig\"\n (contentChange)=\"onTemplateContentChange($event)\"\n (runTemplate)=\"onTemplateRun($event)\"\n style=\"display: block; min-height: 300px;\">\n </mj-template-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n <!-- Model Configuration Expansion Panel -->\n @if (record.IsSaved) {\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-microchip\" style=\"color: var(--mj-text-muted);\"></i>\n Models\n @if (promptModels.length > 0) {\n <span class=\"badge\" style=\"background: #17a2b8; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ promptModels.length }}\n </span>\n }\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em; font-weight: normal; margin-left: 8px;\">\n <i class=\"fa-solid fa-info-circle\" title=\"Models are tried in order from top to bottom. The first available model will be used.\"></i>\n Priority order (first available model will be used)\n </span>\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <!-- Model Management Interface -->\n <div class=\"model-management\" style=\"border: 1px solid var(--mj-border-default); border-radius: 6px; background: var(--mj-bg-surface-sunken);\">\n @if (isLoadingModels) {\n <div class=\"loading-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading models...\n </div>\n } @else {\n @if (promptModels.length === 0) {\n <div class=\"empty-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-info-circle\"></i> No models configured\n @if (EditMode && UserCanCreatePromptModels) {\n <div style=\"margin-top: 10px;\">\n <button mjButton variant=\"outline\" size=\"sm\"\n (click)=\"addNewModel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n </div>\n }\n </div>\n } @else {\n <!-- Priority explanation for multiple models -->\n @if (promptModels.length > 1) {\n <div style=\"padding: 12px 16px; background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface)); border-bottom: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default)); color: var(--mj-brand-primary); font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\" style=\"margin-right: 6px;\"></i>\n Models are tried in priority order (highest priority first). The first available model that meets requirements will be used for execution.\n </div>\n }\n <!-- Column Headers -->\n <div class=\"model-header\" style=\"display: grid; grid-template-columns: 40px 2fr 1fr 1fr 1fr 60px; gap: 12px; padding: 12px 16px; background: var(--mj-bg-surface-sunken); font-weight: 600; font-size: 0.85em; color: var(--mj-text-secondary); border-bottom: 1px solid var(--mj-border-default);\">\n <div title=\"Priority order - models are tried from top to bottom\">\n <i class=\"fa-solid fa-sort\" style=\"color: var(--mj-text-muted);\"></i>\n </div>\n <div>AI Model <span style=\"color: #dc3545;\">*</span></div>\n <div>Vendor</div>\n <div>Configuration</div>\n <div>Created</div>\n <div>Actions</div>\n </div>\n @for (model of promptModels; track getModelTrackId(model) || $index; let i = $index) {\n <div class=\"model-row\"\n [draggable]=\"EditMode\"\n (dragstart)=\"onDragStart($event, i)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($event, i)\"\n (dragend)=\"onDragEnd($event)\"\n [style.background]=\"!model.ModelID ? '#fff3cd' : (draggedIndex === i ? 'color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))' : 'var(--mj-bg-surface-card)')\"\n [style.border-left]=\"!model.ModelID ? '3px solid #ffc107' : 'none'\"\n [style.opacity]=\"draggedIndex === i ? '0.5' : '1'\"\n style=\"display: grid; grid-template-columns: 40px 2fr 1fr 1fr 1fr 60px; gap: 12px; padding: 12px 16px; border-bottom: 1px solid var(--mj-border-default); align-items: start; transition: background 0.2s, opacity 0.2s;\">\n <!-- Drag Handle / Priority -->\n <div class=\"drag-handle\" style=\"display: flex; flex-direction: column; align-items: center; justify-content: center; color: var(--mj-text-muted);\">\n @if (EditMode) {\n <i class=\"fa-solid fa-grip-vertical\" title=\"Drag to reorder priority\" style=\"cursor: move;\"></i>\n <span style=\"font-size: 0.7em; margin-top: 2px;\">#{{ i + 1 }}</span>\n } @else {\n <span style=\"font-size: 0.9em; font-weight: 600;\" title=\"Priority {{ model.Priority }} - Higher priority numbers are tried first\">#{{ i + 1 }}</span>\n }\n </div>\n <!-- Model Selection -->\n <div class=\"model-select\">\n @if (EditMode) {\n <mj-dropdown [(ngModel)]=\"model.ModelID\"\n [name]=\"'modelId_' + getModelTrackId(model)\"\n [Data]=\"availableModels\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select a model...\"\n (ValueChange)=\"onModelChange($any($event), i)\"\n style=\"width: 100%;\">\n </mj-dropdown>\n } @else {\n <span style=\"font-weight: 500;\">{{ getModelDisplayName(model.ModelID) }}</span>\n }\n </div>\n <!-- Vendor -->\n <div class=\"model-vendor\">\n @if (EditMode) {\n @if (model.ModelID) {\n @if (shouldShowVendorDropdown(model.ModelID)) {\n <mj-dropdown [(ngModel)]=\"model.VendorID\"\n [name]=\"'vendorId_' + getModelTrackId(model)\"\n [Data]=\"getVendorsForModelSync(model.ModelID)\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select vendor...\"\n style=\"width: 100%;\">\n </mj-dropdown>\n } @else {\n <!-- Single vendor - just show the name -->\n @if (getVendorsForModelSync(model.ModelID).length === 1) {\n <span [style.color]=\"getVendorStatusColor(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID)\" style=\"font-size: 0.9em; font-weight: 500;\">\n {{ getVendorsForModelSync(model.ModelID)[0].Name }}\n @if (getModelVendorStatus(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID) }})</span>\n }\n </span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-style: italic; font-size: 0.9em;\">No vendors available</span>\n }\n }\n } @else {\n <span style=\"color: var(--mj-text-muted); font-style: italic; font-size: 0.9em;\">Select model first</span>\n }\n } @else {\n @if (model.VendorID && model.ModelID) {\n <span [style.color]=\"getVendorStatusColor(model.ModelID, model.VendorID)\" style=\"font-size: 0.9em;\">\n {{ getVendorDisplayName(model.VendorID) }}\n @if (getModelVendorStatus(model.ModelID, model.VendorID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, model.VendorID) }})</span>\n }\n </span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-size: 0.9em;\">-</span>\n }\n }\n </div>\n <!-- Configuration -->\n <div class=\"model-configuration\">\n @if (EditMode) {\n @if (isLoadingConfigurations) {\n <div style=\"padding: 4px; color: var(--mj-text-muted); font-style: italic; font-size: 0.85em;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...\n </div>\n } @else {\n <mj-dropdown [(ngModel)]=\"model.ConfigurationID\"\n [name]=\"'configurationId_' + getModelTrackId(model)\"\n [Data]=\"availableConfigurations\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Default\"\n (ValueChange)=\"onConfigurationChange($any($event), i)\"\n style=\"width: 100%;\">\n </mj-dropdown>\n }\n } @else {\n <span style=\"font-size: 0.9em;\">{{ getConfigurationDisplayName(model.ConfigurationID) }}</span>\n }\n </div>\n <!-- Created Date -->\n <div class=\"model-created\">\n @if (model.ID) {\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em;\">{{ model.__mj_CreatedAt | date:'short' }}</span>\n } @else {\n <span style=\"color: #28a745; font-size: 0.8em; font-style: italic;\">New</span>\n }\n </div>\n <!-- Actions -->\n <div class=\"model-actions\" style=\"display: flex; gap: 2px; flex-direction: column;\">\n @if (EditMode) {\n <div style=\"display: flex; gap: 2px; margin-bottom: 4px;\">\n @if (UserCanUpdatePromptModels) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"moveModelUp(i)\"\n [disabled]=\"i === 0\"\n title=\"Move up\">\n <i class=\"fa-solid fa-chevron-up\"></i>\n </button>\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"moveModelDown(i)\"\n [disabled]=\"i === promptModels.length - 1\"\n title=\"Move down\">\n <i class=\"fa-solid fa-chevron-down\"></i>\n </button>\n }\n </div>\n @if (UserCanDeletePromptModels) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"removePromptModel(i)\"\n title=\"Remove model\"\n style=\"color: var(--mj-status-error);\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n }\n </div>\n </div>\n <!-- Second row with additional details -->\n <div style=\"display: grid; grid-template-columns: 40px 1fr; gap: 12px; padding: 8px 16px; border-bottom: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-sunken); font-size: 0.85em; color: var(--mj-text-muted);\">\n <div></div>\n <div>\n <!-- Basic model details -->\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap; align-items: center; margin-bottom: 8px;\">\n @if (model.Status) {\n <span><strong>Status:</strong> {{ model.Status }}</span>\n }\n </div>\n <!-- Parallel execution fields when prompt is ModelSpecific -->\n @if (record.ParallelizationMode === 'ModelSpecific') {\n <div style=\"padding: 8px; background: var(--mj-bg-surface-card); border: 1px solid var(--mj-border-default); border-radius: 4px; margin-top: 8px;\">\n <div style=\"margin-bottom: 6px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n <i class=\"fa-solid fa-layer-group\"></i> Model-Specific Parallel Execution\n </div>\n @if (EditMode) {\n <div style=\"display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; align-items: center;\">\n <!-- Parallel Mode -->\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: var(--mj-text-secondary);\">Parallel Mode</label>\n <mj-dropdown [(ngModel)]=\"model.ParallelizationMode\"\n [name]=\"'parallelMode_' + i\"\n [Data]=\"[{text: 'None', value: 'None'}, {text: 'Static Count', value: 'StaticCount'}, {text: 'Config Param', value: 'ConfigParam'}]\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n Placeholder=\"Select mode...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </mj-dropdown>\n </div>\n <!-- Parallel Count (when StaticCount) -->\n @if (model.ParallelizationMode === 'StaticCount') {\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: var(--mj-text-secondary);\">Parallel Count</label>\n <mj-numeric-input [(ngModel)]=\"model.ParallelCount\"\n [name]=\"'parallelCount_' + i\"\n [Min]=\"1\"\n [Step]=\"1\"\n [Format]=\"'n0'\"\n Placeholder=\"Count...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </mj-numeric-input>\n </div>\n }\n <!-- Config Param (when ConfigParam) -->\n @if (model.ParallelizationMode === 'ConfigParam') {\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: var(--mj-text-secondary);\">Config Parameter</label>\n <input type=\"text\" class=\"mj-input\" [(ngModel)]=\"model.ParallelConfigParam\"\n [name]=\"'parallelConfigParam_' + i\"\n placeholder=\"Parameter name...\"\n style=\"width: 100%; font-size: 0.85em;\" />\n </div>\n }\n </div>\n } @else {\n <!-- Read-only display -->\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap; align-items: center;\">\n @if (model.ParallelizationMode) {\n <span><strong>Parallel Mode:</strong> {{ model.ParallelizationMode }}</span>\n }\n @if (model.ParallelCount) {\n <span><strong>Parallel Count:</strong> {{ model.ParallelCount }}</span>\n }\n @if (model.ParallelConfigParam) {\n <span><strong>Config Param:</strong> {{ model.ParallelConfigParam }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n @if (EditMode && UserCanCreatePromptModels) {\n <div class=\"add-model-row\" style=\"padding: 12px 16px; text-align: center; background: var(--mj-bg-surface-sunken); border-top: 1px solid var(--mj-border-default);\">\n <button mjButton variant=\"outline\" size=\"sm\"\n (click)=\"addNewModel()\"\n style=\"color: var(--mj-status-success); border-color: var(--mj-status-success);\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n </div>\n }\n }\n }\n </div>\n </div>\n </mj-accordion-panel>\n }\n <!-- Advanced Configuration Expansion Panel -->\n <mj-accordion-panel\n [Expanded]=\"false\"\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 Advanced Configuration\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- Left Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelizationMode\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n @if (showParallelCount) {\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelCount\"\n Type=\"numerictextbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n }\n @if (showParallelConfigParam) {\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelConfigParam\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n }\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"OutputType\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EffortLevel\"\n Type=\"numerictextbox\"\n Caption=\"Effort Level (1-100)\"\n Description=\"Higher values request more thorough reasoning\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n <!-- Right Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ValidationBehavior\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EnableCaching\"\n Type=\"checkbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <!-- Result Selector Prompt with Tree Selector -->\n <div style=\"margin-bottom: 16px;\">\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Result Selector Prompt\n </label>\n @if (EditMode) {\n @if (isLoadingResultSelectorData) {\n <div style=\"padding: 8px; color: var(--mj-text-muted); font-style: italic;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading prompts...\n </div>\n } @else {\n <mj-dropdown\n [(ngModel)]=\"record.ResultSelectorPromptID\"\n name=\"resultSelectorPromptID\"\n [Data]=\"resultSelectorTreeData\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select a result selector prompt...\"\n style=\"width: 100%;\"\n (ValueChange)=\"onResultSelectorChange($any($event))\">\n </mj-dropdown>\n }\n } @else {\n <span style=\"color: var(--mj-text-secondary);\">{{ getPromptDisplayName(record.ResultSelectorPromptID || '') || 'None selected' }}</span>\n }\n </div>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Prefill & Output Control Expansion Panel -->\n <mj-accordion-panel\n [Expanded]=\"false\"\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-text-muted);\"></i>\n Prefill & Output Control\n </span>\n </ng-template>\n <div style=\"padding: 16px 0;\">\n <p style=\"margin: 0 0 12px 0; font-size: 0.85em; color: var(--mj-text-muted);\">\n Assistant prefill seeds the model's response with an initial string, guiding output format and content. Stop sequences terminate generation when encountered.\n </p>\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- Left Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"AssistantPrefill\"\n Type=\"textarea\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"StopSequences\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n <!-- Right Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"PrefillFallbackMode\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Template Parameters Expansion Panel -->\n @if (template && templateParams.length > 0) {\n <mj-accordion-panel\n [Expanded]=\"false\"\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 Template Parameters\n <span class=\"badge\" style=\"background: var(--mj-brand-primary); color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ templateParams.length }}\n </span>\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em; font-weight: normal; margin-left: 8px;\">\n <i class=\"fa-solid fa-info-circle\" title=\"These parameters are defined in the template and will be available when executing this prompt\"></i>\n Parameters defined in the template\n </span>\n </span>\n </ng-template>\n <!-- Template Parameters Display -->\n <div style=\"padding: 16px 0;\">\n @if (isLoadingTemplateParams) {\n <div class=\"loading-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading template parameters...\n </div>\n } @else if (templateParams.length === 0) {\n <div class=\"empty-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-info-circle\"></i> This template has no parameters defined\n </div>\n } @else {\n <!-- Parameters Grid -->\n <div style=\"display: grid; gap: 12px;\">\n @for (param of templateParams; track param.ID) {\n <div class=\"parameter-card\"\n style=\"border: 1px solid var(--mj-border-default); border-radius: 8px; padding: 16px; background: var(--mj-bg-surface-sunken); transition: all 0.2s;\"\n [style.border-left]=\"'4px solid ' + getParamTypeColor(param.Type)\">\n <!-- Parameter Header -->\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 8px;\">\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <i [class]=\"'fa-solid ' + getParamTypeIcon(param.Type)\"\n [style.color]=\"getParamTypeColor(param.Type)\"\n style=\"font-size: 1.2em;\"></i>\n <h6 style=\"margin: 0; color: var(--mj-text-secondary); font-weight: 600;\">\n {{ param.Name }}\n @if (param.IsRequired) {\n <span style=\"color: #dc3545; font-size: 0.9em; margin-left: 4px;\">*</span>\n }\n </h6>\n </div>\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <span class=\"type-badge\"\n [style.background-color]=\"getParamTypeColor(param.Type)\"\n style=\"color: white; padding: 4px 8px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\">\n {{ param.Type }}\n </span>\n @if (param.IsRequired) {\n <span style=\"color: #dc3545; font-size: 0.85em; font-weight: 500;\">Required</span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-size: 0.85em;\">Optional</span>\n }\n </div>\n </div>\n <!-- Parameter Description -->\n @if (param.Description) {\n <p style=\"margin: 0 0 8px 0; color: var(--mj-text-muted); font-size: 0.9em; line-height: 1.4;\">\n {{ param.Description }}\n </p>\n }\n <!-- Type-specific Information -->\n <div style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">\n <span style=\"display: flex; align-items: center; gap: 4px; margin-bottom: 4px;\">\n <i class=\"fa-solid fa-info-circle\" style=\"color: var(--mj-text-muted);\"></i>\n {{ getParamTypeDescription(param) }}\n </span>\n </div>\n <!-- Additional Parameter Details -->\n <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin-top: 12px;\">\n @if (param.DefaultValue) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Default Value</label>\n <code style=\"font-size: 0.85em; color: var(--mj-text-secondary); word-break: break-all;\">{{ param.DefaultValue }}</code>\n </div>\n }\n @if (param.EntityID) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Entity</label>\n <span style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">{{ param.Entity || 'Entity ID: ' + param.EntityID }}</span>\n </div>\n }\n @if (param.LinkedParameterName) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Linked To</label>\n <span style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">\n {{ param.LinkedParameterName }}\n @if (param.LinkedParameterField) {\n ({{ param.LinkedParameterField }})\n }\n </span>\n </div>\n }\n @if (param.ExtraFilter) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Filter</label>\n <code style=\"font-size: 0.8em; color: var(--mj-text-secondary); word-break: break-all;\">{{ param.ExtraFilter }}</code>\n </div>\n }\n @if (param.RecordID) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Record ID</label>\n <code style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">{{ param.RecordID }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n <!-- Help Text -->\n <div style=\"margin-top: 16px; padding: 12px; background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface)); border-radius: 6px; border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default));\">\n <div style=\"display: flex; align-items: flex-start; gap: 8px;\">\n <i class=\"fa-solid fa-lightbulb\" style=\"color: var(--mj-brand-primary); margin-top: 2px;\"></i>\n <div style=\"flex: 1; font-size: 0.85em; color: var(--mj-brand-primary); line-height: 1.5;\">\n <strong>Using Template Parameters:</strong> When executing this prompt, you'll be prompted to provide values for all required parameters.\n Parameters can be simple values (text, numbers) or complex data structures (JSON objects, database records, or entire entity collections).\n The template will use these parameters to generate dynamic content based on the values provided at execution time.\n </div>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Output Example Expansion Panel (when OutputType = object) -->\n @if (showOutputExample) {\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-code\" style=\"color: var(--mj-text-muted);\"></i>\n Output Example (JSON)\n <span style=\"color: #dc3545; font-size: 0.8em; font-weight: normal;\">• Required for object output type</span>\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px;\">\n @if (EditMode) {\n <mj-code-editor\n [(ngModel)]=\"record.OutputExample\"\n name=\"outputExample\"\n language=\"json\"\n placeholder=\"Enter JSON example structure...\"\n style=\"width: 100%; height: 200px; border: 1px solid var(--mj-border-default); border-radius: 4px;\">\n </mj-code-editor>\n <div style=\"margin-top: 8px; color: var(--mj-text-muted); font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\"></i> Provide a JSON example that defines the expected structure for object output validation.\n </div>\n } @else if (record.OutputExample) {\n <div style=\"background: var(--mj-bg-surface-sunken); border: 1px solid var(--mj-border-default); border-radius: 4px; padding: 12px; font-family: 'Courier New', monospace; font-size: 0.9em; white-space: pre-wrap; overflow: auto; max-height: 250px;\">{{ record.OutputExample }}</div>\n } @else {\n <div style=\"background: #fff3cd; border: 1px solid #ffeaa7; border-radius: 4px; padding: 12px; color: #856404; text-align: center;\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i> Output example is required when output type is 'object'\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Execution History Expansion Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"false\"\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-history\" style=\"color: var(--mj-text-muted);\"></i>\n Execution History\n @if (executionHistory.length > 0) {\n <span style=\"color: var(--mj-text-muted); font-weight: normal;\">({{ executionHistory.length }})</span>\n }\n </span>\n </ng-template>\n <!-- Custom Execution History Viewer -->\n <div style=\"padding: 16px;\">\n @if (isLoadingHistory) {\n <div style=\"text-align: center; padding: 40px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 2em; margin-bottom: 12px;\"></i>\n <p>Loading execution history...</p>\n </div>\n } @else if (executionHistory.length === 0) {\n <div style=\"text-align: center; padding: 40px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-history\" style=\"font-size: 3em; margin-bottom: 12px; opacity: 0.3;\"></i>\n <p>No execution history yet</p>\n <p style=\"font-size: 0.9em;\">Run this prompt to see execution history here</p>\n </div>\n } @else {\n <!-- Sort Controls -->\n <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;\">\n <div style=\"color: var(--mj-text-muted); font-size: 0.9em;\">\n Showing {{ executionHistory.length }} executions\n </div>\n <div style=\"display: flex; gap: 8px; align-items: center;\">\n <span style=\"color: var(--mj-text-muted); font-size: 0.85em;\">Sort by:</span>\n <div class=\"mj-button-group\">\n <button mjButton\n [class.active]=\"historySortField === 'runAt'\"\n (click)=\"changeHistorySort('runAt')\"\n size=\"sm\">\n Date\n @if (historySortField === 'runAt') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button mjButton\n [class.active]=\"historySortField === 'executionTime'\"\n (click)=\"changeHistorySort('executionTime')\"\n size=\"sm\">\n Duration\n @if (historySortField === 'executionTime') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button mjButton\n [class.active]=\"historySortField === 'tokens'\"\n (click)=\"changeHistorySort('tokens')\"\n size=\"sm\">\n Tokens\n @if (historySortField === 'tokens') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button mjButton\n [class.active]=\"historySortField === 'cost'\"\n (click)=\"changeHistorySort('cost')\"\n size=\"sm\">\n Cost\n @if (historySortField === 'cost') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n </div>\n </div>\n </div>\n <!-- Execution History Table -->\n <div style=\"border: 1px solid var(--mj-border-default); border-radius: 8px; overflow: hidden;\">\n <table style=\"width: 100%; border-collapse: collapse;\">\n <thead>\n <tr style=\"background: var(--mj-bg-surface-sunken); border-bottom: 2px solid var(--mj-border-default);\">\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Status</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Date & Time</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Model</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Duration</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: var(--mj-text-secondary);\">Tokens</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: var(--mj-text-secondary);\">Cost</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: var(--mj-text-secondary);\">Type</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: var(--mj-text-secondary);\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (run of executionHistory; track run.ID; let i = $index) {\n <tr class=\"history-row\"\n [class.even-row]=\"i % 2 === 0\"\n style=\"border-bottom: 1px solid var(--mj-border-default);\">\n <td style=\"padding: 12px;\">\n <span style=\"display: flex; align-items: center; gap: 6px;\">\n <i [class]=\"'fa-solid ' + getExecutionStatusIcon(run.Success)\"\n [style.color]=\"getExecutionStatusColor(run.Success)\"></i>\n <span [style.color]=\"getExecutionStatusColor(run.Success)\" style=\"font-weight: 500;\">\n {{ run.Success === true ? 'Success' : run.Success === false ? 'Failed' : 'Running' }}\n </span>\n </span>\n </td>\n <td style=\"padding: 12px; color: var(--mj-text-secondary);\">\n {{ run.RunAt | date:'short' }}\n </td>\n <td style=\"padding: 12px; color: var(--mj-text-secondary);\">\n <span style=\"display: flex; align-items: center; gap: 6px;\">\n <i class=\"fa-solid fa-microchip\" style=\"color: var(--mj-text-muted);\"></i>\n {{ run.Model || 'Unknown' }}\n </span>\n </td>\n <td style=\"padding: 12px; color: var(--mj-text-secondary);\">\n {{ formatDuration(run.ExecutionTimeMS) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: var(--mj-text-secondary);\">\n {{ formatTokens(run.TokensUsed) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: var(--mj-text-secondary);\">\n {{ formatCost(run.TotalCost || run.Cost) }}\n </td>\n <td style=\"padding: 12px; text-align: center;\">\n @if (run.RunType) {\n <span style=\"padding: 4px 8px; border-radius: 12px; background: var(--mj-bg-surface-sunken); \n color: var(--mj-text-secondary); font-size: 0.85em; font-weight: 500;\">\n {{ run.RunType }}\n </span>\n }\n </td>\n <td style=\"padding: 12px; text-align: center;\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"navigateToPromptRun(run.ID)\"\n title=\"View details\">\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 <!-- Cache Expansion Panel -->\n @if (record.IsSaved && record.EnableCaching) {\n <mj-accordion-panel\n [Expanded]=\"false\"\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-database\" style=\"color: var(--mj-text-muted);\"></i>\n Result Cache\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Result Cache','AIPromptID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Result Cache')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n </mj-accordion-panel>\n }\n <!-- Related Items Expansion Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"false\"\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-link\" style=\"color: var(--mj-text-muted);\"></i>\n Related Items\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- AI Agents -->\n <div>\n <h6 style=\"margin: 0 0 12px 0; color: var(--mj-text-secondary);\">AI Agents Using This Prompt</h6>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Agent Prompts','PromptID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Agent Prompts')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n <!-- Result Selector References -->\n <div>\n <h6 style=\"margin: 0 0 12px 0; color: var(--mj-text-secondary);\">Prompts Using This as Result Selector</h6>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Prompts','ResultSelectorPromptID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Prompts')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\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\n<!-- AI Prompt Test Harness -->\n@if (showTestHarness) {\n <mj-window\n [Width]=\"1200\"\n [Height]=\"800\"\n [MinWidth]=\"800\"\n [MinHeight]=\"600\"\n [Draggable]=\"true\"\n [Resizable]=\"true\"\n [Visible]=\"true\"\n (Close)=\"onTestHarnessVisibilityChanged(false)\"\n [Title]=\"'Run AI Prompt - ' + (record.Name || 'Untitled')\">\n <mj-ai-test-harness\n [entity]=\"record\"\n [mode]=\"'prompt'\"\n [isVisible]=\"showTestHarness\"\n (visibilityChange)=\"onTestHarnessVisibilityChanged($event)\">\n </mj-ai-test-harness>\n </mj-window>\n}", styles: ["/* Override shared form-styles to enable flex layout */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\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.custom-toolbar-actions {\n margin-left: auto;\n}\n\n.status-badge {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.config-summary {\n position: sticky;\n top: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.config-item {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.config-item:last-child {\n border-bottom: none;\n}\n\n.template-tab-content {\n background: var(--mj-bg-surface);\n}\n\n.template-header h5 {\n font-size: 1.1em;\n}\n\n.loading-state,\n.no-template-state,\n.invalid-template-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n.no-template-state i,\n.invalid-template-state i {\n opacity: 0.6;\n}\n\n.template-editor-container {\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n}\n\n/* Grid layout adjustments */\n@media (max-width: 1200px) {\n .record-form-container .mj-tab-body > div {\n grid-template-columns: 1fr !important;\n gap: 20px;\n }\n\n .config-summary {\n order: -1;\n position: static;\n max-height: none;\n }\n}\n\n/* Responsive toolbar */\n@media (max-width: 768px) {\n .custom-toolbar-actions {\n flex-direction: column;\n gap: 4px !important;\n }\n\n .status-badge {\n align-self: flex-start;\n }\n}\n\n/* Ensure proper spacing in form sections */\n.record-form-container mj-form-section {\n padding: 16px;\n}\n\n/* Smooth transitions for better UX */\n.status-badge,\n.config-item,\n.template-header {\n transition: all 0.2s ease;\n}\n\n.config-item:hover {\n background-color: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-sm);\n margin: 0 -8px;\n padding: 8px;\n}\n\n/* Execution History Table Styles */\n.history-row {\n transition: background 0.2s;\n}\n\n.history-row:not(.even-row) {\n background: var(--mj-bg-surface-card);\n}\n\n.history-row.even-row {\n background: var(--mj-bg-surface);\n}\n\n.history-row:hover {\n background: var(--mj-border-default) !important;\n}\n\n/* Template Parameters Styles */\n.parameter-card {\n position: relative;\n overflow: hidden;\n}\n\n.parameter-card::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 4px;\n background: inherit;\n transition: width 0.2s;\n}\n\n.parameter-card:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.parameter-card:hover::before {\n width: 6px;\n}\n\n.type-badge {\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n transition: transform 0.2s;\n}\n\n.parameter-card:hover .type-badge {\n transform: scale(1.05);\n}\n\n/* Parameter type icons animation */\n.parameter-card i.fa-solid {\n transition: transform 0.3s;\n}\n\n.parameter-card:hover i.fa-solid {\n transform: rotate(360deg);\n}\n\n/* Grid responsive behavior */\n@media (max-width: 768px) {\n .parameter-card {\n margin-bottom: 8px;\n }\n\n .parameter-card h6 {\n font-size: 0.95em;\n }\n\n .type-badge {\n font-size: 0.7em !important;\n }\n}\n"] }]
|
|
3058
3059
|
}], null, { templateEditor: [{
|
|
3059
3060
|
type: ViewChild,
|
|
3060
3061
|
args: ['templateEditor']
|