@memberjunction/ng-core-entity-forms 2.54.0 → 2.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -206
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +8 -5
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +202 -220
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +36 -0
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -0
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +325 -0
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -0
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +41 -0
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -0
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +87 -0
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -0
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +5 -2
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +501 -485
- 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 +1 -0
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +4 -0
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +5 -4
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +150 -72
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +31 -35
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +23 -43
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js +11 -12
- package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js +7 -8
- package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js +7 -8
- package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIModel/aimodel.form.component.js +7 -8
- package/dist/lib/generated/Entities/AIModel/aimodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIModelType/aimodeltype.form.component.js +11 -12
- package/dist/lib/generated/Entities/AIModelType/aimodeltype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js +11 -12
- package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.js +11 -12
- package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIPromptRun/sections/details.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIPromptRun/sections/details.component.js +13 -4
- package/dist/lib/generated/Entities/AIPromptRun/sections/details.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.js +11 -12
- package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.js.map +1 -1
- package/dist/public-api.d.ts +2 -3
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -16
- package/dist/public-api.js.map +1 -1
- package/package.json +13 -12
- package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.d.ts +0 -273
- package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.d.ts.map +0 -1
- package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.js +0 -1429
- package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.js.map +0 -1
- package/dist/lib/custom/ai-test-harness/agent-execution-node.component.d.ts +0 -19
- package/dist/lib/custom/ai-test-harness/agent-execution-node.component.d.ts.map +0 -1
- package/dist/lib/custom/ai-test-harness/agent-execution-node.component.js +0 -458
- package/dist/lib/custom/ai-test-harness/agent-execution-node.component.js.map +0 -1
- package/dist/lib/custom/ai-test-harness/ai-test-harness-dialog.component.d.ts +0 -78
- package/dist/lib/custom/ai-test-harness/ai-test-harness-dialog.component.d.ts.map +0 -1
- package/dist/lib/custom/ai-test-harness/ai-test-harness-dialog.component.js +0 -157
- package/dist/lib/custom/ai-test-harness/ai-test-harness-dialog.component.js.map +0 -1
- package/dist/lib/custom/ai-test-harness/ai-test-harness.component.d.ts +0 -631
- package/dist/lib/custom/ai-test-harness/ai-test-harness.component.d.ts.map +0 -1
- package/dist/lib/custom/ai-test-harness/ai-test-harness.component.js +0 -3380
- package/dist/lib/custom/ai-test-harness/ai-test-harness.component.js.map +0 -1
- package/dist/lib/custom/ai-test-harness/json-viewer-window.component.d.ts +0 -8
- package/dist/lib/custom/ai-test-harness/json-viewer-window.component.d.ts.map +0 -1
- package/dist/lib/custom/ai-test-harness/json-viewer-window.component.js +0 -57
- package/dist/lib/custom/ai-test-harness/json-viewer-window.component.js.map +0 -1
- package/dist/lib/custom/test-harness-dialog.service.d.ts +0 -111
- package/dist/lib/custom/test-harness-dialog.service.d.ts.map +0 -1
- package/dist/lib/custom/test-harness-dialog.service.js +0 -211
- package/dist/lib/custom/test-harness-dialog.service.js.map +0 -1
|
@@ -15,19 +15,19 @@ import { AIEngineBase } from '@memberjunction/ai-engine-base';
|
|
|
15
15
|
import * as i0 from "@angular/core";
|
|
16
16
|
import * as i1 from "@memberjunction/ng-shared";
|
|
17
17
|
import * as i2 from "@angular/router";
|
|
18
|
-
import * as i3 from "@
|
|
19
|
-
import * as i4 from "@angular/
|
|
20
|
-
import * as i5 from "@
|
|
21
|
-
import * as i6 from "@progress/kendo-angular-
|
|
22
|
-
import * as i7 from "@progress/kendo-angular-
|
|
23
|
-
import * as i8 from "@progress/kendo-angular-
|
|
24
|
-
import * as i9 from "@progress/kendo-angular-
|
|
25
|
-
import * as i10 from "@
|
|
26
|
-
import * as i11 from "@memberjunction/ng-
|
|
27
|
-
import * as i12 from "@memberjunction/ng-
|
|
28
|
-
import * as i13 from "@memberjunction/ng-
|
|
29
|
-
import * as i14 from "
|
|
30
|
-
import * as i15 from "
|
|
18
|
+
import * as i3 from "@memberjunction/ng-ai-test-harness";
|
|
19
|
+
import * as i4 from "@angular/common";
|
|
20
|
+
import * as i5 from "@angular/forms";
|
|
21
|
+
import * as i6 from "@progress/kendo-angular-layout";
|
|
22
|
+
import * as i7 from "@progress/kendo-angular-dialog";
|
|
23
|
+
import * as i8 from "@progress/kendo-angular-inputs";
|
|
24
|
+
import * as i9 from "@progress/kendo-angular-dropdowns";
|
|
25
|
+
import * as i10 from "@progress/kendo-angular-buttons";
|
|
26
|
+
import * as i11 from "@memberjunction/ng-user-view-grid";
|
|
27
|
+
import * as i12 from "@memberjunction/ng-base-forms";
|
|
28
|
+
import * as i13 from "@memberjunction/ng-form-toolbar";
|
|
29
|
+
import * as i14 from "@memberjunction/ng-code-editor";
|
|
30
|
+
import * as i15 from "../../shared/components/template-editor.component";
|
|
31
31
|
const _c0 = ["templateEditor"];
|
|
32
32
|
const _forTrack0 = ($index, $item) => $item.ID;
|
|
33
33
|
const _forTrack1 = ($index, $item) => $item.ID || $index;
|
|
@@ -38,20 +38,20 @@ const _c4 = (a0, a1, a2) => [a0, a1, a2];
|
|
|
38
38
|
const _c5 = () => ({ text: "None", value: "None" });
|
|
39
39
|
const _c6 = () => ({ text: "Static Count", value: "StaticCount" });
|
|
40
40
|
const _c7 = () => ({ text: "Config Param", value: "ConfigParam" });
|
|
41
|
-
function
|
|
41
|
+
function AIPromptFormComponentExtended_form_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
42
42
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
43
|
-
i0.ɵɵelementStart(0, "kendo-textbox",
|
|
44
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
43
|
+
i0.ɵɵelementStart(0, "kendo-textbox", 48);
|
|
44
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_9_Template_kendo_textbox_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Name, $event) || (ctx_r1.record.Name = $event); return i0.ɵɵresetView($event); });
|
|
45
45
|
i0.ɵɵelementEnd();
|
|
46
46
|
} if (rf & 2) {
|
|
47
47
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
48
48
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Name);
|
|
49
49
|
} }
|
|
50
|
-
function
|
|
51
|
-
i0.ɵɵelementStart(0, "h4",
|
|
50
|
+
function AIPromptFormComponentExtended_form_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
51
|
+
i0.ɵɵelementStart(0, "h4", 49);
|
|
52
52
|
i0.ɵɵtext(1);
|
|
53
53
|
i0.ɵɵelementEnd();
|
|
54
|
-
i0.ɵɵelementStart(2, "span",
|
|
54
|
+
i0.ɵɵelementStart(2, "span", 50);
|
|
55
55
|
i0.ɵɵtext(3);
|
|
56
56
|
i0.ɵɵelementEnd();
|
|
57
57
|
} if (rf & 2) {
|
|
@@ -63,36 +63,36 @@ function AIPromptFormComponentExtended_form_1_Conditional_10_Template(rf, ctx) {
|
|
|
63
63
|
i0.ɵɵadvance();
|
|
64
64
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Status, " ");
|
|
65
65
|
} }
|
|
66
|
-
function
|
|
67
|
-
i0.ɵɵelementStart(0, "div",
|
|
68
|
-
i0.ɵɵelement(1, "i",
|
|
66
|
+
function AIPromptFormComponentExtended_form_2_Conditional_11_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
67
|
+
i0.ɵɵelementStart(0, "div", 53);
|
|
68
|
+
i0.ɵɵelement(1, "i", 55);
|
|
69
69
|
i0.ɵɵtext(2, " Loading types... ");
|
|
70
70
|
i0.ɵɵelementEnd();
|
|
71
71
|
} }
|
|
72
|
-
function
|
|
72
|
+
function AIPromptFormComponentExtended_form_2_Conditional_11_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
73
73
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
74
|
-
i0.ɵɵelementStart(0, "kendo-dropdownlist",
|
|
75
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
74
|
+
i0.ɵɵelementStart(0, "kendo-dropdownlist", 56);
|
|
75
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_11_Conditional_11_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.TypeID, $event) || (ctx_r1.record.TypeID = $event); return i0.ɵɵresetView($event); });
|
|
76
76
|
i0.ɵɵelementEnd();
|
|
77
77
|
} if (rf & 2) {
|
|
78
78
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
79
79
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.TypeID);
|
|
80
80
|
i0.ɵɵproperty("data", ctx_r1.availablePromptTypes)("valuePrimitive", true)("filterable", true);
|
|
81
81
|
} }
|
|
82
|
-
function
|
|
82
|
+
function AIPromptFormComponentExtended_form_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
83
83
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
84
|
-
i0.ɵɵelementStart(0, "div",
|
|
84
|
+
i0.ɵɵelementStart(0, "div", 15)(1, "div")(2, "label", 46);
|
|
85
85
|
i0.ɵɵtext(3, "Status");
|
|
86
86
|
i0.ɵɵelementEnd();
|
|
87
|
-
i0.ɵɵelementStart(4, "kendo-dropdownlist",
|
|
88
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
87
|
+
i0.ɵɵelementStart(4, "kendo-dropdownlist", 51);
|
|
88
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_11_Template_kendo_dropdownlist_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Status, $event) || (ctx_r1.record.Status = $event); return i0.ɵɵresetView($event); });
|
|
89
89
|
i0.ɵɵelementEnd()();
|
|
90
|
-
i0.ɵɵelementStart(5, "div")(6, "label",
|
|
90
|
+
i0.ɵɵelementStart(5, "div")(6, "label", 46);
|
|
91
91
|
i0.ɵɵtext(7, " Type ");
|
|
92
|
-
i0.ɵɵelementStart(8, "span",
|
|
92
|
+
i0.ɵɵelementStart(8, "span", 52);
|
|
93
93
|
i0.ɵɵtext(9, "*");
|
|
94
94
|
i0.ɵɵelementEnd()();
|
|
95
|
-
i0.ɵɵtemplate(10,
|
|
95
|
+
i0.ɵɵtemplate(10, AIPromptFormComponentExtended_form_2_Conditional_11_Conditional_10_Template, 3, 0, "div", 53)(11, AIPromptFormComponentExtended_form_2_Conditional_11_Conditional_11_Template, 1, 4, "kendo-dropdownlist", 54);
|
|
96
96
|
i0.ɵɵelementEnd()();
|
|
97
97
|
} if (rf & 2) {
|
|
98
98
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -102,18 +102,18 @@ function AIPromptFormComponentExtended_form_1_Conditional_11_Template(rf, ctx) {
|
|
|
102
102
|
i0.ɵɵadvance(6);
|
|
103
103
|
i0.ɵɵconditional(ctx_r1.isLoadingPromptTypes ? 10 : 11);
|
|
104
104
|
} }
|
|
105
|
-
function
|
|
105
|
+
function AIPromptFormComponentExtended_form_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
106
106
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
107
|
-
i0.ɵɵelementStart(0, "kendo-textarea",
|
|
108
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
107
|
+
i0.ɵɵelementStart(0, "kendo-textarea", 57);
|
|
108
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_12_Template_kendo_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Description, $event) || (ctx_r1.record.Description = $event); return i0.ɵɵresetView($event); });
|
|
109
109
|
i0.ɵɵelementEnd();
|
|
110
110
|
} if (rf & 2) {
|
|
111
111
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
112
112
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Description);
|
|
113
113
|
i0.ɵɵproperty("rows", 2);
|
|
114
114
|
} }
|
|
115
|
-
function
|
|
116
|
-
i0.ɵɵelementStart(0, "p",
|
|
115
|
+
function AIPromptFormComponentExtended_form_2_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
116
|
+
i0.ɵɵelementStart(0, "p", 17);
|
|
117
117
|
i0.ɵɵtext(1);
|
|
118
118
|
i0.ɵɵelementEnd();
|
|
119
119
|
} if (rf & 2) {
|
|
@@ -121,13 +121,13 @@ function AIPromptFormComponentExtended_form_1_Conditional_13_Template(rf, ctx) {
|
|
|
121
121
|
i0.ɵɵadvance();
|
|
122
122
|
i0.ɵɵtextInterpolate(ctx_r1.record.Description);
|
|
123
123
|
} }
|
|
124
|
-
function
|
|
125
|
-
i0.ɵɵelementStart(0, "div",
|
|
126
|
-
i0.ɵɵelement(1, "i",
|
|
127
|
-
i0.ɵɵelementStart(2, "span",
|
|
124
|
+
function AIPromptFormComponentExtended_form_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
125
|
+
i0.ɵɵelementStart(0, "div", 19);
|
|
126
|
+
i0.ɵɵelement(1, "i", 58);
|
|
127
|
+
i0.ɵɵelementStart(2, "span", 21);
|
|
128
128
|
i0.ɵɵtext(3, "Type:");
|
|
129
129
|
i0.ɵɵelementEnd();
|
|
130
|
-
i0.ɵɵelementStart(4, "span",
|
|
130
|
+
i0.ɵɵelementStart(4, "span", 22);
|
|
131
131
|
i0.ɵɵtext(5);
|
|
132
132
|
i0.ɵɵelementEnd()();
|
|
133
133
|
} if (rf & 2) {
|
|
@@ -135,38 +135,38 @@ function AIPromptFormComponentExtended_form_1_Conditional_15_Template(rf, ctx) {
|
|
|
135
135
|
i0.ɵɵadvance(5);
|
|
136
136
|
i0.ɵɵtextInterpolate(ctx_r1.getPromptTypeDisplayName(ctx_r1.record.TypeID));
|
|
137
137
|
} }
|
|
138
|
-
function
|
|
139
|
-
i0.ɵɵelementStart(0, "div",
|
|
140
|
-
i0.ɵɵelement(1, "i",
|
|
141
|
-
i0.ɵɵelementStart(2, "span",
|
|
138
|
+
function AIPromptFormComponentExtended_form_2_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
139
|
+
i0.ɵɵelementStart(0, "div", 19);
|
|
140
|
+
i0.ɵɵelement(1, "i", 59);
|
|
141
|
+
i0.ɵɵelementStart(2, "span", 60);
|
|
142
142
|
i0.ɵɵtext(3, "Caching Enabled");
|
|
143
143
|
i0.ɵɵelementEnd()();
|
|
144
144
|
} }
|
|
145
|
-
function
|
|
145
|
+
function AIPromptFormComponentExtended_form_2_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
146
146
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
147
|
-
i0.ɵɵelementStart(0, "button",
|
|
148
|
-
i0.ɵɵlistener("click", function
|
|
149
|
-
i0.ɵɵelement(1, "i",
|
|
147
|
+
i0.ɵɵelementStart(0, "button", 61);
|
|
148
|
+
i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_31_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openTestHarness()); });
|
|
149
|
+
i0.ɵɵelement(1, "i", 62);
|
|
150
150
|
i0.ɵɵtext(2, " Run ");
|
|
151
151
|
i0.ɵɵelementEnd();
|
|
152
152
|
} if (rf & 2) {
|
|
153
153
|
i0.ɵɵproperty("themeColor", "primary")("size", "large");
|
|
154
154
|
} }
|
|
155
|
-
function
|
|
155
|
+
function AIPromptFormComponentExtended_form_2_Conditional_32_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
156
156
|
i0.ɵɵtext(0, " \u2022 Prompt must be Active");
|
|
157
157
|
i0.ɵɵelement(1, "br");
|
|
158
158
|
} }
|
|
159
|
-
function
|
|
159
|
+
function AIPromptFormComponentExtended_form_2_Conditional_32_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
160
160
|
i0.ɵɵtext(0, " \u2022 Template is required");
|
|
161
161
|
i0.ɵɵelement(1, "br");
|
|
162
162
|
} }
|
|
163
|
-
function
|
|
163
|
+
function AIPromptFormComponentExtended_form_2_Conditional_32_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
164
164
|
i0.ɵɵtext(0, " \u2022 Template not found");
|
|
165
165
|
i0.ɵɵelement(1, "br");
|
|
166
166
|
} }
|
|
167
|
-
function
|
|
168
|
-
i0.ɵɵelementStart(0, "div",
|
|
169
|
-
i0.ɵɵtemplate(1,
|
|
167
|
+
function AIPromptFormComponentExtended_form_2_Conditional_32_Template(rf, ctx) { if (rf & 1) {
|
|
168
|
+
i0.ɵɵelementStart(0, "div", 28);
|
|
169
|
+
i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_32_Conditional_1_Template, 2, 0, "br")(2, AIPromptFormComponentExtended_form_2_Conditional_32_Conditional_2_Template, 2, 0, "br")(3, AIPromptFormComponentExtended_form_2_Conditional_32_Conditional_3_Template, 2, 0, "br");
|
|
170
170
|
i0.ɵɵelementEnd();
|
|
171
171
|
} if (rf & 2) {
|
|
172
172
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -177,8 +177,8 @@ function AIPromptFormComponentExtended_form_1_Conditional_32_Template(rf, ctx) {
|
|
|
177
177
|
i0.ɵɵadvance();
|
|
178
178
|
i0.ɵɵconditional(!ctx_r1.template && ctx_r1.record.TemplateID ? 3 : -1);
|
|
179
179
|
} }
|
|
180
|
-
function
|
|
181
|
-
i0.ɵɵelementStart(0, "span",
|
|
180
|
+
function AIPromptFormComponentExtended_form_2_ng_template_35_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
181
|
+
i0.ɵɵelementStart(0, "span", 64);
|
|
182
182
|
i0.ɵɵtext(1);
|
|
183
183
|
i0.ɵɵelementEnd();
|
|
184
184
|
} if (rf & 2) {
|
|
@@ -186,41 +186,41 @@ function AIPromptFormComponentExtended_form_1_ng_template_35_Conditional_3_Templ
|
|
|
186
186
|
i0.ɵɵadvance();
|
|
187
187
|
i0.ɵɵtextInterpolate1("\u2022 ", ctx_r1.template.Name, "");
|
|
188
188
|
} }
|
|
189
|
-
function
|
|
190
|
-
i0.ɵɵelementStart(0, "span",
|
|
191
|
-
i0.ɵɵelement(1, "i",
|
|
189
|
+
function AIPromptFormComponentExtended_form_2_ng_template_35_Template(rf, ctx) { if (rf & 1) {
|
|
190
|
+
i0.ɵɵelementStart(0, "span", 63);
|
|
191
|
+
i0.ɵɵelement(1, "i", 23);
|
|
192
192
|
i0.ɵɵtext(2, " Template Editor ");
|
|
193
|
-
i0.ɵɵtemplate(3,
|
|
193
|
+
i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_2_ng_template_35_Conditional_3_Template, 2, 1, "span", 64);
|
|
194
194
|
i0.ɵɵelementEnd();
|
|
195
195
|
} if (rf & 2) {
|
|
196
196
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
197
197
|
i0.ɵɵadvance(3);
|
|
198
198
|
i0.ɵɵconditional(ctx_r1.template ? 3 : -1);
|
|
199
199
|
} }
|
|
200
|
-
function
|
|
201
|
-
i0.ɵɵelementStart(0, "div",
|
|
202
|
-
i0.ɵɵelement(1, "i",
|
|
200
|
+
function AIPromptFormComponentExtended_form_2_Conditional_37_Template(rf, ctx) { if (rf & 1) {
|
|
201
|
+
i0.ɵɵelementStart(0, "div", 33);
|
|
202
|
+
i0.ɵɵelement(1, "i", 65);
|
|
203
203
|
i0.ɵɵtext(2, " Loading template... ");
|
|
204
204
|
i0.ɵɵelementEnd();
|
|
205
205
|
} }
|
|
206
|
-
function
|
|
206
|
+
function AIPromptFormComponentExtended_form_2_Conditional_38_Template(rf, ctx) { if (rf & 1) {
|
|
207
207
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
208
|
-
i0.ɵɵelementStart(0, "div",
|
|
209
|
-
i0.ɵɵelement(1, "i",
|
|
210
|
-
i0.ɵɵelementStart(2, "h5",
|
|
208
|
+
i0.ɵɵelementStart(0, "div", 34);
|
|
209
|
+
i0.ɵɵelement(1, "i", 66);
|
|
210
|
+
i0.ɵɵelementStart(2, "h5", 67);
|
|
211
211
|
i0.ɵɵtext(3, "No Template Associated");
|
|
212
212
|
i0.ɵɵelementEnd();
|
|
213
|
-
i0.ɵɵelementStart(4, "p",
|
|
213
|
+
i0.ɵɵelementStart(4, "p", 68);
|
|
214
214
|
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. ");
|
|
215
215
|
i0.ɵɵelementEnd();
|
|
216
|
-
i0.ɵɵelementStart(6, "div",
|
|
217
|
-
i0.ɵɵlistener("click", function
|
|
218
|
-
i0.ɵɵelement(8, "i",
|
|
216
|
+
i0.ɵɵelementStart(6, "div", 69)(7, "button", 70);
|
|
217
|
+
i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_38_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.createNewTemplate()); });
|
|
218
|
+
i0.ɵɵelement(8, "i", 71);
|
|
219
219
|
i0.ɵɵtext(9, " Create New Template ");
|
|
220
220
|
i0.ɵɵelementEnd();
|
|
221
|
-
i0.ɵɵelementStart(10, "button",
|
|
222
|
-
i0.ɵɵlistener("click", function
|
|
223
|
-
i0.ɵɵelement(11, "i",
|
|
221
|
+
i0.ɵɵelementStart(10, "button", 72);
|
|
222
|
+
i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_38_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.linkExistingTemplate()); });
|
|
223
|
+
i0.ɵɵelement(11, "i", 73);
|
|
224
224
|
i0.ɵɵtext(12, " Link Existing Template ");
|
|
225
225
|
i0.ɵɵelementEnd()()();
|
|
226
226
|
} if (rf & 2) {
|
|
@@ -229,24 +229,24 @@ function AIPromptFormComponentExtended_form_1_Conditional_38_Template(rf, ctx) {
|
|
|
229
229
|
i0.ɵɵadvance(3);
|
|
230
230
|
i0.ɵɵproperty("fillMode", "outline");
|
|
231
231
|
} }
|
|
232
|
-
function
|
|
232
|
+
function AIPromptFormComponentExtended_form_2_Conditional_39_Template(rf, ctx) { if (rf & 1) {
|
|
233
233
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
234
|
-
i0.ɵɵelementStart(0, "div",
|
|
235
|
-
i0.ɵɵelement(1, "i",
|
|
236
|
-
i0.ɵɵelementStart(2, "h5",
|
|
234
|
+
i0.ɵɵelementStart(0, "div", 35);
|
|
235
|
+
i0.ɵɵelement(1, "i", 74);
|
|
236
|
+
i0.ɵɵelementStart(2, "h5", 75);
|
|
237
237
|
i0.ɵɵtext(3, "Template Not Found");
|
|
238
238
|
i0.ɵɵelementEnd();
|
|
239
|
-
i0.ɵɵelementStart(4, "p",
|
|
239
|
+
i0.ɵɵelementStart(4, "p", 68);
|
|
240
240
|
i0.ɵɵtext(5, " The referenced template could not be loaded. It may have been deleted or moved. ");
|
|
241
241
|
i0.ɵɵelementEnd();
|
|
242
|
-
i0.ɵɵelementStart(6, "div",
|
|
243
|
-
i0.ɵɵlistener("click", function
|
|
244
|
-
i0.ɵɵelement(8, "i",
|
|
242
|
+
i0.ɵɵelementStart(6, "div", 69)(7, "button", 72);
|
|
243
|
+
i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_39_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.loadTemplate()); });
|
|
244
|
+
i0.ɵɵelement(8, "i", 76);
|
|
245
245
|
i0.ɵɵtext(9, " Retry Loading ");
|
|
246
246
|
i0.ɵɵelementEnd();
|
|
247
|
-
i0.ɵɵelementStart(10, "button",
|
|
248
|
-
i0.ɵɵlistener("click", function
|
|
249
|
-
i0.ɵɵelement(11, "i",
|
|
247
|
+
i0.ɵɵelementStart(10, "button", 70);
|
|
248
|
+
i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_39_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.createNewTemplate()); });
|
|
249
|
+
i0.ɵɵelement(11, "i", 71);
|
|
250
250
|
i0.ɵɵtext(12, " Create New Template ");
|
|
251
251
|
i0.ɵɵelementEnd()()();
|
|
252
252
|
} if (rf & 2) {
|
|
@@ -255,25 +255,25 @@ function AIPromptFormComponentExtended_form_1_Conditional_39_Template(rf, ctx) {
|
|
|
255
255
|
i0.ɵɵadvance(3);
|
|
256
256
|
i0.ɵɵproperty("themeColor", "primary");
|
|
257
257
|
} }
|
|
258
|
-
function
|
|
258
|
+
function AIPromptFormComponentExtended_form_2_Conditional_40_Template(rf, ctx) { if (rf & 1) {
|
|
259
259
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
260
|
-
i0.ɵɵelementStart(0, "div",
|
|
261
|
-
i0.ɵɵlistener("contentChange", function
|
|
260
|
+
i0.ɵɵelementStart(0, "div", 36)(1, "div", 77)(2, "mj-template-editor", 78, 1);
|
|
261
|
+
i0.ɵɵlistener("contentChange", function AIPromptFormComponentExtended_form_2_Conditional_40_Template_mj_template_editor_contentChange_2_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTemplateContentChange($event)); })("runTemplate", function AIPromptFormComponentExtended_form_2_Conditional_40_Template_mj_template_editor_runTemplate_2_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTemplateRun($event)); });
|
|
262
262
|
i0.ɵɵelementEnd()()();
|
|
263
263
|
} if (rf & 2) {
|
|
264
264
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
265
265
|
i0.ɵɵadvance(2);
|
|
266
266
|
i0.ɵɵproperty("template", ctx_r1.template)("config", ctx_r1.templateEditorConfig);
|
|
267
267
|
} }
|
|
268
|
-
function
|
|
269
|
-
i0.ɵɵelementStart(0, "span",
|
|
270
|
-
i0.ɵɵelement(1, "i",
|
|
268
|
+
function AIPromptFormComponentExtended_form_2_Conditional_41_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
269
|
+
i0.ɵɵelementStart(0, "span", 63);
|
|
270
|
+
i0.ɵɵelement(1, "i", 81);
|
|
271
271
|
i0.ɵɵtext(2, " Template Parameters ");
|
|
272
|
-
i0.ɵɵelementStart(3, "span",
|
|
272
|
+
i0.ɵɵelementStart(3, "span", 82);
|
|
273
273
|
i0.ɵɵtext(4);
|
|
274
274
|
i0.ɵɵelementEnd();
|
|
275
|
-
i0.ɵɵelementStart(5, "span",
|
|
276
|
-
i0.ɵɵelement(6, "i",
|
|
275
|
+
i0.ɵɵelementStart(5, "span", 83);
|
|
276
|
+
i0.ɵɵelement(6, "i", 84);
|
|
277
277
|
i0.ɵɵtext(7, " Parameters defined in the template ");
|
|
278
278
|
i0.ɵɵelementEnd()();
|
|
279
279
|
} if (rf & 2) {
|
|
@@ -281,35 +281,35 @@ function AIPromptFormComponentExtended_form_1_Conditional_41_ng_template_1_Templ
|
|
|
281
281
|
i0.ɵɵadvance(4);
|
|
282
282
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.templateParams.length, " ");
|
|
283
283
|
} }
|
|
284
|
-
function
|
|
285
|
-
i0.ɵɵelementStart(0, "div",
|
|
286
|
-
i0.ɵɵelement(1, "i",
|
|
284
|
+
function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
285
|
+
i0.ɵɵelementStart(0, "div", 79);
|
|
286
|
+
i0.ɵɵelement(1, "i", 55);
|
|
287
287
|
i0.ɵɵtext(2, " Loading template parameters... ");
|
|
288
288
|
i0.ɵɵelementEnd();
|
|
289
289
|
} }
|
|
290
|
-
function
|
|
291
|
-
i0.ɵɵelementStart(0, "div",
|
|
292
|
-
i0.ɵɵelement(1, "i",
|
|
290
|
+
function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
291
|
+
i0.ɵɵelementStart(0, "div", 80);
|
|
292
|
+
i0.ɵɵelement(1, "i", 85);
|
|
293
293
|
i0.ɵɵtext(2, " This template has no parameters defined ");
|
|
294
294
|
i0.ɵɵelementEnd();
|
|
295
295
|
} }
|
|
296
|
-
function
|
|
297
|
-
i0.ɵɵelementStart(0, "span",
|
|
296
|
+
function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
297
|
+
i0.ɵɵelementStart(0, "span", 97);
|
|
298
298
|
i0.ɵɵtext(1, "*");
|
|
299
299
|
i0.ɵɵelementEnd();
|
|
300
300
|
} }
|
|
301
|
-
function
|
|
302
|
-
i0.ɵɵelementStart(0, "span",
|
|
301
|
+
function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
302
|
+
i0.ɵɵelementStart(0, "span", 99);
|
|
303
303
|
i0.ɵɵtext(1, "Required");
|
|
304
304
|
i0.ɵɵelementEnd();
|
|
305
305
|
} }
|
|
306
|
-
function
|
|
307
|
-
i0.ɵɵelementStart(0, "span",
|
|
306
|
+
function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
307
|
+
i0.ɵɵelementStart(0, "span", 100);
|
|
308
308
|
i0.ɵɵtext(1, "Optional");
|
|
309
309
|
i0.ɵɵelementEnd();
|
|
310
310
|
} }
|
|
311
|
-
function
|
|
312
|
-
i0.ɵɵelementStart(0, "p",
|
|
311
|
+
function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
312
|
+
i0.ɵɵelementStart(0, "p", 101);
|
|
313
313
|
i0.ɵɵtext(1);
|
|
314
314
|
i0.ɵɵelementEnd();
|
|
315
315
|
} if (rf & 2) {
|
|
@@ -317,11 +317,11 @@ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2
|
|
|
317
317
|
i0.ɵɵadvance();
|
|
318
318
|
i0.ɵɵtextInterpolate1(" ", param_r10.Description, " ");
|
|
319
319
|
} }
|
|
320
|
-
function
|
|
321
|
-
i0.ɵɵelementStart(0, "div",
|
|
320
|
+
function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
321
|
+
i0.ɵɵelementStart(0, "div", 106)(1, "label", 107);
|
|
322
322
|
i0.ɵɵtext(2, "Default Value");
|
|
323
323
|
i0.ɵɵelementEnd();
|
|
324
|
-
i0.ɵɵelementStart(3, "code",
|
|
324
|
+
i0.ɵɵelementStart(3, "code", 108);
|
|
325
325
|
i0.ɵɵtext(4);
|
|
326
326
|
i0.ɵɵelementEnd()();
|
|
327
327
|
} if (rf & 2) {
|
|
@@ -329,11 +329,11 @@ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2
|
|
|
329
329
|
i0.ɵɵadvance(4);
|
|
330
330
|
i0.ɵɵtextInterpolate(param_r10.DefaultValue);
|
|
331
331
|
} }
|
|
332
|
-
function
|
|
333
|
-
i0.ɵɵelementStart(0, "div",
|
|
332
|
+
function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
333
|
+
i0.ɵɵelementStart(0, "div", 106)(1, "label", 107);
|
|
334
334
|
i0.ɵɵtext(2, "Entity");
|
|
335
335
|
i0.ɵɵelementEnd();
|
|
336
|
-
i0.ɵɵelementStart(3, "span",
|
|
336
|
+
i0.ɵɵelementStart(3, "span", 102);
|
|
337
337
|
i0.ɵɵtext(4);
|
|
338
338
|
i0.ɵɵelementEnd()();
|
|
339
339
|
} if (rf & 2) {
|
|
@@ -341,19 +341,19 @@ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2
|
|
|
341
341
|
i0.ɵɵadvance(4);
|
|
342
342
|
i0.ɵɵtextInterpolate(param_r10.Entity || "Entity ID: " + param_r10.EntityID);
|
|
343
343
|
} }
|
|
344
|
-
function
|
|
344
|
+
function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Conditional_20_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
345
345
|
i0.ɵɵtext(0);
|
|
346
346
|
} if (rf & 2) {
|
|
347
347
|
const param_r10 = i0.ɵɵnextContext(2).$implicit;
|
|
348
348
|
i0.ɵɵtextInterpolate1(" (", param_r10.LinkedParameterField, ") ");
|
|
349
349
|
} }
|
|
350
|
-
function
|
|
351
|
-
i0.ɵɵelementStart(0, "div",
|
|
350
|
+
function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
351
|
+
i0.ɵɵelementStart(0, "div", 106)(1, "label", 107);
|
|
352
352
|
i0.ɵɵtext(2, "Linked To");
|
|
353
353
|
i0.ɵɵelementEnd();
|
|
354
|
-
i0.ɵɵelementStart(3, "span",
|
|
354
|
+
i0.ɵɵelementStart(3, "span", 102);
|
|
355
355
|
i0.ɵɵtext(4);
|
|
356
|
-
i0.ɵɵtemplate(5,
|
|
356
|
+
i0.ɵɵtemplate(5, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Conditional_20_Conditional_5_Template, 1, 1);
|
|
357
357
|
i0.ɵɵelementEnd()();
|
|
358
358
|
} if (rf & 2) {
|
|
359
359
|
const param_r10 = i0.ɵɵnextContext().$implicit;
|
|
@@ -362,11 +362,11 @@ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2
|
|
|
362
362
|
i0.ɵɵadvance();
|
|
363
363
|
i0.ɵɵconditional(param_r10.LinkedParameterField ? 5 : -1);
|
|
364
364
|
} }
|
|
365
|
-
function
|
|
366
|
-
i0.ɵɵelementStart(0, "div",
|
|
365
|
+
function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
366
|
+
i0.ɵɵelementStart(0, "div", 106)(1, "label", 107);
|
|
367
367
|
i0.ɵɵtext(2, "Filter");
|
|
368
368
|
i0.ɵɵelementEnd();
|
|
369
|
-
i0.ɵɵelementStart(3, "code",
|
|
369
|
+
i0.ɵɵelementStart(3, "code", 109);
|
|
370
370
|
i0.ɵɵtext(4);
|
|
371
371
|
i0.ɵɵelementEnd()();
|
|
372
372
|
} if (rf & 2) {
|
|
@@ -374,11 +374,11 @@ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2
|
|
|
374
374
|
i0.ɵɵadvance(4);
|
|
375
375
|
i0.ɵɵtextInterpolate(param_r10.ExtraFilter);
|
|
376
376
|
} }
|
|
377
|
-
function
|
|
378
|
-
i0.ɵɵelementStart(0, "div",
|
|
377
|
+
function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
378
|
+
i0.ɵɵelementStart(0, "div", 106)(1, "label", 107);
|
|
379
379
|
i0.ɵɵtext(2, "Record ID");
|
|
380
380
|
i0.ɵɵelementEnd();
|
|
381
|
-
i0.ɵɵelementStart(3, "code",
|
|
381
|
+
i0.ɵɵelementStart(3, "code", 102);
|
|
382
382
|
i0.ɵɵtext(4);
|
|
383
383
|
i0.ɵɵelementEnd()();
|
|
384
384
|
} if (rf & 2) {
|
|
@@ -386,25 +386,25 @@ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2
|
|
|
386
386
|
i0.ɵɵadvance(4);
|
|
387
387
|
i0.ɵɵtextInterpolate(param_r10.RecordID);
|
|
388
388
|
} }
|
|
389
|
-
function
|
|
390
|
-
i0.ɵɵelementStart(0, "div",
|
|
391
|
-
i0.ɵɵelement(3, "i",
|
|
392
|
-
i0.ɵɵelementStart(4, "h6",
|
|
389
|
+
function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
390
|
+
i0.ɵɵelementStart(0, "div", 92)(1, "div", 93)(2, "div", 94);
|
|
391
|
+
i0.ɵɵelement(3, "i", 95);
|
|
392
|
+
i0.ɵɵelementStart(4, "h6", 96);
|
|
393
393
|
i0.ɵɵtext(5);
|
|
394
|
-
i0.ɵɵtemplate(6,
|
|
394
|
+
i0.ɵɵtemplate(6, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Conditional_6_Template, 2, 0, "span", 97);
|
|
395
395
|
i0.ɵɵelementEnd()();
|
|
396
|
-
i0.ɵɵelementStart(7, "div",
|
|
396
|
+
i0.ɵɵelementStart(7, "div", 94)(8, "span", 98);
|
|
397
397
|
i0.ɵɵtext(9);
|
|
398
398
|
i0.ɵɵelementEnd();
|
|
399
|
-
i0.ɵɵtemplate(10,
|
|
399
|
+
i0.ɵɵtemplate(10, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Conditional_10_Template, 2, 0, "span", 99)(11, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Conditional_11_Template, 2, 0, "span", 100);
|
|
400
400
|
i0.ɵɵelementEnd()();
|
|
401
|
-
i0.ɵɵtemplate(12,
|
|
402
|
-
i0.ɵɵelementStart(13, "div",
|
|
403
|
-
i0.ɵɵelement(15, "i",
|
|
401
|
+
i0.ɵɵtemplate(12, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Conditional_12_Template, 2, 1, "p", 101);
|
|
402
|
+
i0.ɵɵelementStart(13, "div", 102)(14, "span", 103);
|
|
403
|
+
i0.ɵɵelement(15, "i", 104);
|
|
404
404
|
i0.ɵɵtext(16);
|
|
405
405
|
i0.ɵɵelementEnd()();
|
|
406
|
-
i0.ɵɵelementStart(17, "div",
|
|
407
|
-
i0.ɵɵtemplate(18,
|
|
406
|
+
i0.ɵɵelementStart(17, "div", 105);
|
|
407
|
+
i0.ɵɵtemplate(18, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Conditional_18_Template, 5, 1, "div", 106)(19, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Conditional_19_Template, 5, 1, "div", 106)(20, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Conditional_20_Template, 6, 2, "div", 106)(21, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Conditional_21_Template, 5, 1, "div", 106)(22, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Conditional_22_Template, 5, 1, "div", 106);
|
|
408
408
|
i0.ɵɵelementEnd()();
|
|
409
409
|
} if (rf & 2) {
|
|
410
410
|
const param_r10 = ctx.$implicit;
|
|
@@ -438,13 +438,13 @@ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2
|
|
|
438
438
|
i0.ɵɵadvance();
|
|
439
439
|
i0.ɵɵconditional(param_r10.RecordID ? 22 : -1);
|
|
440
440
|
} }
|
|
441
|
-
function
|
|
442
|
-
i0.ɵɵelementStart(0, "div",
|
|
443
|
-
i0.ɵɵrepeaterCreate(1,
|
|
441
|
+
function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
442
|
+
i0.ɵɵelementStart(0, "div", 86);
|
|
443
|
+
i0.ɵɵrepeaterCreate(1, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_For_2_Template, 23, 19, "div", 87, _forTrack0);
|
|
444
444
|
i0.ɵɵelementEnd();
|
|
445
|
-
i0.ɵɵelementStart(3, "div",
|
|
446
|
-
i0.ɵɵelement(5, "i",
|
|
447
|
-
i0.ɵɵelementStart(6, "div",
|
|
445
|
+
i0.ɵɵelementStart(3, "div", 88)(4, "div", 89);
|
|
446
|
+
i0.ɵɵelement(5, "i", 90);
|
|
447
|
+
i0.ɵɵelementStart(6, "div", 91)(7, "strong");
|
|
448
448
|
i0.ɵɵtext(8, "Using Template Parameters:");
|
|
449
449
|
i0.ɵɵelementEnd();
|
|
450
450
|
i0.ɵɵtext(9, " When executing this prompt, you'll be prompted to provide values for all required parameters. Parameters can be simple values (text, numbers) or complex data structures (JSON objects, database records, or entire entity collections). The template will use these parameters to generate dynamic content based on the values provided at execution time. ");
|
|
@@ -454,11 +454,11 @@ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Templ
|
|
|
454
454
|
i0.ɵɵadvance();
|
|
455
455
|
i0.ɵɵrepeater(ctx_r1.templateParams);
|
|
456
456
|
} }
|
|
457
|
-
function
|
|
458
|
-
i0.ɵɵelementStart(0, "kendo-expansionpanel",
|
|
459
|
-
i0.ɵɵtemplate(1,
|
|
460
|
-
i0.ɵɵelementStart(2, "div",
|
|
461
|
-
i0.ɵɵtemplate(3,
|
|
457
|
+
function AIPromptFormComponentExtended_form_2_Conditional_41_Template(rf, ctx) { if (rf & 1) {
|
|
458
|
+
i0.ɵɵelementStart(0, "kendo-expansionpanel", 30);
|
|
459
|
+
i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_41_ng_template_1_Template, 8, 1, "ng-template", 31);
|
|
460
|
+
i0.ɵɵelementStart(2, "div", 37);
|
|
461
|
+
i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_3_Template, 3, 0, "div", 79)(4, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_4_Template, 3, 0, "div", 80)(5, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Template, 10, 0);
|
|
462
462
|
i0.ɵɵelementEnd()();
|
|
463
463
|
} if (rf & 2) {
|
|
464
464
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -466,8 +466,8 @@ function AIPromptFormComponentExtended_form_1_Conditional_41_Template(rf, ctx) {
|
|
|
466
466
|
i0.ɵɵadvance(3);
|
|
467
467
|
i0.ɵɵconditional(ctx_r1.isLoadingTemplateParams ? 3 : ctx_r1.templateParams.length === 0 ? 4 : 5);
|
|
468
468
|
} }
|
|
469
|
-
function
|
|
470
|
-
i0.ɵɵelementStart(0, "span",
|
|
469
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
470
|
+
i0.ɵɵelementStart(0, "span", 112);
|
|
471
471
|
i0.ɵɵtext(1);
|
|
472
472
|
i0.ɵɵelementEnd();
|
|
473
473
|
} if (rf & 2) {
|
|
@@ -475,13 +475,13 @@ function AIPromptFormComponentExtended_form_1_Conditional_42_ng_template_1_Condi
|
|
|
475
475
|
i0.ɵɵadvance();
|
|
476
476
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.promptModels.length, " ");
|
|
477
477
|
} }
|
|
478
|
-
function
|
|
479
|
-
i0.ɵɵelementStart(0, "span",
|
|
480
|
-
i0.ɵɵelement(1, "i",
|
|
478
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
479
|
+
i0.ɵɵelementStart(0, "span", 63);
|
|
480
|
+
i0.ɵɵelement(1, "i", 111);
|
|
481
481
|
i0.ɵɵtext(2, " Models ");
|
|
482
|
-
i0.ɵɵtemplate(3,
|
|
483
|
-
i0.ɵɵelementStart(4, "span",
|
|
484
|
-
i0.ɵɵelement(5, "i",
|
|
482
|
+
i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_2_Conditional_42_ng_template_1_Conditional_3_Template, 2, 1, "span", 112);
|
|
483
|
+
i0.ɵɵelementStart(4, "span", 83);
|
|
484
|
+
i0.ɵɵelement(5, "i", 113);
|
|
485
485
|
i0.ɵɵtext(6, " Priority order (first available model will be used) ");
|
|
486
486
|
i0.ɵɵelementEnd()();
|
|
487
487
|
} if (rf & 2) {
|
|
@@ -489,73 +489,73 @@ function AIPromptFormComponentExtended_form_1_Conditional_42_ng_template_1_Templ
|
|
|
489
489
|
i0.ɵɵadvance(3);
|
|
490
490
|
i0.ɵɵconditional(ctx_r1.promptModels.length > 0 ? 3 : -1);
|
|
491
491
|
} }
|
|
492
|
-
function
|
|
493
|
-
i0.ɵɵelementStart(0, "div",
|
|
494
|
-
i0.ɵɵelement(1, "i",
|
|
492
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
493
|
+
i0.ɵɵelementStart(0, "div", 79);
|
|
494
|
+
i0.ɵɵelement(1, "i", 55);
|
|
495
495
|
i0.ɵɵtext(2, " Loading models... ");
|
|
496
496
|
i0.ɵɵelementEnd();
|
|
497
497
|
} }
|
|
498
|
-
function
|
|
498
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_0_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
499
499
|
const _r11 = i0.ɵɵgetCurrentView();
|
|
500
|
-
i0.ɵɵelementStart(0, "div",
|
|
501
|
-
i0.ɵɵlistener("click", function
|
|
502
|
-
i0.ɵɵelement(2, "i",
|
|
500
|
+
i0.ɵɵelementStart(0, "div", 114)(1, "button", 115);
|
|
501
|
+
i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_0_Conditional_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
|
|
502
|
+
i0.ɵɵelement(2, "i", 71);
|
|
503
503
|
i0.ɵɵtext(3, " Add Model ");
|
|
504
504
|
i0.ɵɵelementEnd()();
|
|
505
505
|
} }
|
|
506
|
-
function
|
|
507
|
-
i0.ɵɵelementStart(0, "div",
|
|
508
|
-
i0.ɵɵelement(1, "i",
|
|
506
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
507
|
+
i0.ɵɵelementStart(0, "div", 80);
|
|
508
|
+
i0.ɵɵelement(1, "i", 85);
|
|
509
509
|
i0.ɵɵtext(2, " No models configured ");
|
|
510
|
-
i0.ɵɵtemplate(3,
|
|
510
|
+
i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_0_Conditional_3_Template, 4, 0, "div", 114);
|
|
511
511
|
i0.ɵɵelementEnd();
|
|
512
512
|
} if (rf & 2) {
|
|
513
513
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
514
514
|
i0.ɵɵadvance(3);
|
|
515
515
|
i0.ɵɵconditional(ctx_r1.EditMode ? 3 : -1);
|
|
516
516
|
} }
|
|
517
|
-
function
|
|
518
|
-
i0.ɵɵelementStart(0, "div",
|
|
519
|
-
i0.ɵɵelement(1, "i",
|
|
517
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
518
|
+
i0.ɵɵelementStart(0, "div", 116);
|
|
519
|
+
i0.ɵɵelement(1, "i", 121);
|
|
520
520
|
i0.ɵɵtext(2, " Models are tried in priority order (1, 2, 3...). The first available model that meets requirements will be used for execution. ");
|
|
521
521
|
i0.ɵɵelementEnd();
|
|
522
522
|
} }
|
|
523
|
-
function
|
|
524
|
-
i0.ɵɵelement(0, "i",
|
|
525
|
-
i0.ɵɵelementStart(1, "span",
|
|
523
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
524
|
+
i0.ɵɵelement(0, "i", 135);
|
|
525
|
+
i0.ɵɵelementStart(1, "span", 136);
|
|
526
526
|
i0.ɵɵtext(2);
|
|
527
527
|
i0.ɵɵelementEnd();
|
|
528
528
|
} if (rf & 2) {
|
|
529
|
-
const ɵ$
|
|
529
|
+
const ɵ$index_417_r13 = i0.ɵɵnextContext().$index;
|
|
530
530
|
i0.ɵɵadvance(2);
|
|
531
|
-
i0.ɵɵtextInterpolate1("#", ɵ$
|
|
531
|
+
i0.ɵɵtextInterpolate1("#", ɵ$index_417_r13 + 1, "");
|
|
532
532
|
} }
|
|
533
|
-
function
|
|
534
|
-
i0.ɵɵelementStart(0, "span",
|
|
533
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
534
|
+
i0.ɵɵelementStart(0, "span", 124);
|
|
535
535
|
i0.ɵɵtext(1);
|
|
536
536
|
i0.ɵɵelementEnd();
|
|
537
537
|
} if (rf & 2) {
|
|
538
|
-
const ɵ$
|
|
539
|
-
i0.ɵɵpropertyInterpolate1("title", "Priority ", ɵ$
|
|
538
|
+
const ɵ$index_417_r13 = i0.ɵɵnextContext().$index;
|
|
539
|
+
i0.ɵɵpropertyInterpolate1("title", "Priority ", ɵ$index_417_r13 + 1, " - Lower numbers are tried first");
|
|
540
540
|
i0.ɵɵadvance();
|
|
541
|
-
i0.ɵɵtextInterpolate1("#", ɵ$
|
|
541
|
+
i0.ɵɵtextInterpolate1("#", ɵ$index_417_r13 + 1, "");
|
|
542
542
|
} }
|
|
543
|
-
function
|
|
543
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
544
544
|
const _r14 = i0.ɵɵgetCurrentView();
|
|
545
|
-
i0.ɵɵelementStart(0, "kendo-dropdownlist",
|
|
546
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
547
|
-
i0.ɵɵlistener("valueChange", function
|
|
545
|
+
i0.ɵɵelementStart(0, "kendo-dropdownlist", 137);
|
|
546
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_5_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r14); const model_r15 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(model_r15.ModelID, $event) || (model_r15.ModelID = $event); return i0.ɵɵresetView($event); });
|
|
547
|
+
i0.ɵɵlistener("valueChange", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_5_Template_kendo_dropdownlist_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r14); const ɵ$index_417_r13 = i0.ɵɵnextContext().$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onModelChange($event, ɵ$index_417_r13)); });
|
|
548
548
|
i0.ɵɵelementEnd();
|
|
549
549
|
} if (rf & 2) {
|
|
550
550
|
const ctx_r15 = i0.ɵɵnextContext();
|
|
551
551
|
const model_r15 = ctx_r15.$implicit;
|
|
552
|
-
const ɵ$
|
|
552
|
+
const ɵ$index_417_r13 = ctx_r15.$index;
|
|
553
553
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
554
554
|
i0.ɵɵtwoWayProperty("ngModel", model_r15.ModelID);
|
|
555
|
-
i0.ɵɵproperty("name", "modelId_" + ɵ$
|
|
555
|
+
i0.ɵɵproperty("name", "modelId_" + ɵ$index_417_r13)("data", ctx_r1.availableModels)("valuePrimitive", true)("filterable", true);
|
|
556
556
|
} }
|
|
557
|
-
function
|
|
558
|
-
i0.ɵɵelementStart(0, "span",
|
|
557
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
558
|
+
i0.ɵɵelementStart(0, "span", 24);
|
|
559
559
|
i0.ɵɵtext(1);
|
|
560
560
|
i0.ɵɵelementEnd();
|
|
561
561
|
} if (rf & 2) {
|
|
@@ -564,8 +564,8 @@ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Condi
|
|
|
564
564
|
i0.ɵɵadvance();
|
|
565
565
|
i0.ɵɵtextInterpolate(ctx_r1.getModelDisplayName(model_r15.ModelID));
|
|
566
566
|
} }
|
|
567
|
-
function
|
|
568
|
-
i0.ɵɵelementStart(0, "span",
|
|
567
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
568
|
+
i0.ɵɵelementStart(0, "span", 142);
|
|
569
569
|
i0.ɵɵtext(1);
|
|
570
570
|
i0.ɵɵelementEnd();
|
|
571
571
|
} if (rf & 2) {
|
|
@@ -575,10 +575,10 @@ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Condi
|
|
|
575
575
|
i0.ɵɵadvance();
|
|
576
576
|
i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r15.ModelID, dataItem_r18.ID), ")");
|
|
577
577
|
} }
|
|
578
|
-
function
|
|
578
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
579
579
|
i0.ɵɵelementStart(0, "span");
|
|
580
580
|
i0.ɵɵtext(1);
|
|
581
|
-
i0.ɵɵtemplate(2,
|
|
581
|
+
i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Conditional_2_Template, 2, 1, "span", 142);
|
|
582
582
|
i0.ɵɵelementEnd();
|
|
583
583
|
} if (rf & 2) {
|
|
584
584
|
const dataItem_r18 = ctx.$implicit;
|
|
@@ -590,22 +590,22 @@ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Condi
|
|
|
590
590
|
i0.ɵɵadvance();
|
|
591
591
|
i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r15.ModelID, dataItem_r18.ID) !== "Active" ? 2 : -1);
|
|
592
592
|
} }
|
|
593
|
-
function
|
|
593
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
594
594
|
const _r17 = i0.ɵɵgetCurrentView();
|
|
595
|
-
i0.ɵɵelementStart(0, "kendo-dropdownlist",
|
|
596
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
597
|
-
i0.ɵɵtemplate(1,
|
|
595
|
+
i0.ɵɵelementStart(0, "kendo-dropdownlist", 140);
|
|
596
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_0_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r17); const model_r15 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r15.VendorID, $event) || (model_r15.VendorID = $event); return i0.ɵɵresetView($event); });
|
|
597
|
+
i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Template, 3, 4, "ng-template", 141);
|
|
598
598
|
i0.ɵɵelementEnd();
|
|
599
599
|
} if (rf & 2) {
|
|
600
600
|
const ctx_r15 = i0.ɵɵnextContext(3);
|
|
601
601
|
const model_r15 = ctx_r15.$implicit;
|
|
602
|
-
const ɵ$
|
|
602
|
+
const ɵ$index_417_r13 = ctx_r15.$index;
|
|
603
603
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
604
604
|
i0.ɵɵtwoWayProperty("ngModel", model_r15.VendorID);
|
|
605
|
-
i0.ɵɵproperty("name", "vendorId_" + ɵ$
|
|
605
|
+
i0.ɵɵproperty("name", "vendorId_" + ɵ$index_417_r13)("data", ctx_r1.getVendorsForModelSync(model_r15.ModelID))("valuePrimitive", true)("filterable", true);
|
|
606
606
|
} }
|
|
607
|
-
function
|
|
608
|
-
i0.ɵɵelementStart(0, "span",
|
|
607
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
608
|
+
i0.ɵɵelementStart(0, "span", 142);
|
|
609
609
|
i0.ɵɵtext(1);
|
|
610
610
|
i0.ɵɵelementEnd();
|
|
611
611
|
} if (rf & 2) {
|
|
@@ -614,10 +614,10 @@ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Condi
|
|
|
614
614
|
i0.ɵɵadvance();
|
|
615
615
|
i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r15.ModelID, ctx_r1.getVendorsForModelSync(model_r15.ModelID)[0].ID), ")");
|
|
616
616
|
} }
|
|
617
|
-
function
|
|
618
|
-
i0.ɵɵelementStart(0, "span",
|
|
617
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
618
|
+
i0.ɵɵelementStart(0, "span", 144);
|
|
619
619
|
i0.ɵɵtext(1);
|
|
620
|
-
i0.ɵɵtemplate(2,
|
|
620
|
+
i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Conditional_2_Template, 2, 1, "span", 142);
|
|
621
621
|
i0.ɵɵelementEnd();
|
|
622
622
|
} if (rf & 2) {
|
|
623
623
|
const model_r15 = i0.ɵɵnextContext(4).$implicit;
|
|
@@ -628,38 +628,38 @@ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Condi
|
|
|
628
628
|
i0.ɵɵadvance();
|
|
629
629
|
i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r15.ModelID, ctx_r1.getVendorsForModelSync(model_r15.ModelID)[0].ID) !== "Active" ? 2 : -1);
|
|
630
630
|
} }
|
|
631
|
-
function
|
|
632
|
-
i0.ɵɵelementStart(0, "span",
|
|
631
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
632
|
+
i0.ɵɵelementStart(0, "span", 138);
|
|
633
633
|
i0.ɵɵtext(1, "No vendors available");
|
|
634
634
|
i0.ɵɵelementEnd();
|
|
635
635
|
} }
|
|
636
|
-
function
|
|
637
|
-
i0.ɵɵtemplate(0,
|
|
636
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
637
|
+
i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template, 3, 4, "span", 143)(1, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template, 2, 0, "span", 138);
|
|
638
638
|
} if (rf & 2) {
|
|
639
639
|
const model_r15 = i0.ɵɵnextContext(3).$implicit;
|
|
640
640
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
641
641
|
i0.ɵɵconditional(ctx_r1.getVendorsForModelSync(model_r15.ModelID).length === 1 ? 0 : 1);
|
|
642
642
|
} }
|
|
643
|
-
function
|
|
644
|
-
i0.ɵɵtemplate(0,
|
|
643
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
644
|
+
i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_0_Template, 2, 5, "kendo-dropdownlist", 139)(1, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Template, 2, 1);
|
|
645
645
|
} if (rf & 2) {
|
|
646
646
|
const model_r15 = i0.ɵɵnextContext(2).$implicit;
|
|
647
647
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
648
648
|
i0.ɵɵconditional(ctx_r1.shouldShowVendorDropdown(model_r15.ModelID) ? 0 : 1);
|
|
649
649
|
} }
|
|
650
|
-
function
|
|
651
|
-
i0.ɵɵelementStart(0, "span",
|
|
650
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
651
|
+
i0.ɵɵelementStart(0, "span", 138);
|
|
652
652
|
i0.ɵɵtext(1, "Select model first");
|
|
653
653
|
i0.ɵɵelementEnd();
|
|
654
654
|
} }
|
|
655
|
-
function
|
|
656
|
-
i0.ɵɵtemplate(0,
|
|
655
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
656
|
+
i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Template, 2, 1)(1, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_1_Template, 2, 0, "span", 138);
|
|
657
657
|
} if (rf & 2) {
|
|
658
658
|
const model_r15 = i0.ɵɵnextContext().$implicit;
|
|
659
659
|
i0.ɵɵconditional(model_r15.ModelID ? 0 : 1);
|
|
660
660
|
} }
|
|
661
|
-
function
|
|
662
|
-
i0.ɵɵelementStart(0, "span",
|
|
661
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_9_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
662
|
+
i0.ɵɵelementStart(0, "span", 142);
|
|
663
663
|
i0.ɵɵtext(1);
|
|
664
664
|
i0.ɵɵelementEnd();
|
|
665
665
|
} if (rf & 2) {
|
|
@@ -668,10 +668,10 @@ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Condi
|
|
|
668
668
|
i0.ɵɵadvance();
|
|
669
669
|
i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r15.ModelID, model_r15.VendorID), ")");
|
|
670
670
|
} }
|
|
671
|
-
function
|
|
672
|
-
i0.ɵɵelementStart(0, "span",
|
|
671
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
672
|
+
i0.ɵɵelementStart(0, "span", 147);
|
|
673
673
|
i0.ɵɵtext(1);
|
|
674
|
-
i0.ɵɵtemplate(2,
|
|
674
|
+
i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_9_Conditional_0_Conditional_2_Template, 2, 1, "span", 142);
|
|
675
675
|
i0.ɵɵelementEnd();
|
|
676
676
|
} if (rf & 2) {
|
|
677
677
|
const model_r15 = i0.ɵɵnextContext(2).$implicit;
|
|
@@ -682,19 +682,19 @@ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Condi
|
|
|
682
682
|
i0.ɵɵadvance();
|
|
683
683
|
i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r15.ModelID, model_r15.VendorID) !== "Active" ? 2 : -1);
|
|
684
684
|
} }
|
|
685
|
-
function
|
|
686
|
-
i0.ɵɵelementStart(0, "span",
|
|
685
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
686
|
+
i0.ɵɵelementStart(0, "span", 146);
|
|
687
687
|
i0.ɵɵtext(1, "-");
|
|
688
688
|
i0.ɵɵelementEnd();
|
|
689
689
|
} }
|
|
690
|
-
function
|
|
691
|
-
i0.ɵɵtemplate(0,
|
|
690
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
691
|
+
i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_9_Conditional_0_Template, 3, 4, "span", 145)(1, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_9_Conditional_1_Template, 2, 0, "span", 146);
|
|
692
692
|
} if (rf & 2) {
|
|
693
693
|
const model_r15 = i0.ɵɵnextContext().$implicit;
|
|
694
694
|
i0.ɵɵconditional(model_r15.VendorID && model_r15.ModelID ? 0 : 1);
|
|
695
695
|
} }
|
|
696
|
-
function
|
|
697
|
-
i0.ɵɵelementStart(0, "span",
|
|
696
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
697
|
+
i0.ɵɵelementStart(0, "span", 129);
|
|
698
698
|
i0.ɵɵtext(1);
|
|
699
699
|
i0.ɵɵpipe(2, "date");
|
|
700
700
|
i0.ɵɵelementEnd();
|
|
@@ -703,34 +703,34 @@ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Condi
|
|
|
703
703
|
i0.ɵɵadvance();
|
|
704
704
|
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(2, 1, model_r15.__mj_CreatedAt, "short"));
|
|
705
705
|
} }
|
|
706
|
-
function
|
|
707
|
-
i0.ɵɵelementStart(0, "span",
|
|
706
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
707
|
+
i0.ɵɵelementStart(0, "span", 130);
|
|
708
708
|
i0.ɵɵtext(1, "New");
|
|
709
709
|
i0.ɵɵelementEnd();
|
|
710
710
|
} }
|
|
711
|
-
function
|
|
711
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
712
712
|
const _r19 = i0.ɵɵgetCurrentView();
|
|
713
|
-
i0.ɵɵelementStart(0, "div",
|
|
714
|
-
i0.ɵɵlistener("click", function
|
|
715
|
-
i0.ɵɵelement(2, "i",
|
|
713
|
+
i0.ɵɵelementStart(0, "div", 148)(1, "button", 149);
|
|
714
|
+
i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_14_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r19); const ɵ$index_417_r13 = i0.ɵɵnextContext().$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelUp(ɵ$index_417_r13)); });
|
|
715
|
+
i0.ɵɵelement(2, "i", 150);
|
|
716
716
|
i0.ɵɵelementEnd();
|
|
717
|
-
i0.ɵɵelementStart(3, "button",
|
|
718
|
-
i0.ɵɵlistener("click", function
|
|
719
|
-
i0.ɵɵelement(4, "i",
|
|
717
|
+
i0.ɵɵelementStart(3, "button", 151);
|
|
718
|
+
i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_14_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r19); const ɵ$index_417_r13 = i0.ɵɵnextContext().$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelDown(ɵ$index_417_r13)); });
|
|
719
|
+
i0.ɵɵelement(4, "i", 152);
|
|
720
720
|
i0.ɵɵelementEnd()();
|
|
721
|
-
i0.ɵɵelementStart(5, "button",
|
|
722
|
-
i0.ɵɵlistener("click", function
|
|
723
|
-
i0.ɵɵelement(6, "i",
|
|
721
|
+
i0.ɵɵelementStart(5, "button", 153);
|
|
722
|
+
i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_14_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r19); const ɵ$index_417_r13 = i0.ɵɵnextContext().$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.removePromptModel(ɵ$index_417_r13)); });
|
|
723
|
+
i0.ɵɵelement(6, "i", 154);
|
|
724
724
|
i0.ɵɵelementEnd();
|
|
725
725
|
} if (rf & 2) {
|
|
726
|
-
const ɵ$
|
|
726
|
+
const ɵ$index_417_r13 = i0.ɵɵnextContext().$index;
|
|
727
727
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
728
728
|
i0.ɵɵadvance();
|
|
729
|
-
i0.ɵɵproperty("disabled", ɵ$
|
|
729
|
+
i0.ɵɵproperty("disabled", ɵ$index_417_r13 === 0);
|
|
730
730
|
i0.ɵɵadvance(2);
|
|
731
|
-
i0.ɵɵproperty("disabled", ɵ$
|
|
731
|
+
i0.ɵɵproperty("disabled", ɵ$index_417_r13 === ctx_r1.promptModels.length - 1);
|
|
732
732
|
} }
|
|
733
|
-
function
|
|
733
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
734
734
|
i0.ɵɵelementStart(0, "span")(1, "strong");
|
|
735
735
|
i0.ɵɵtext(2, "Status:");
|
|
736
736
|
i0.ɵɵelementEnd();
|
|
@@ -741,7 +741,7 @@ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Condi
|
|
|
741
741
|
i0.ɵɵadvance(3);
|
|
742
742
|
i0.ɵɵtextInterpolate1(" ", model_r15.Status, "");
|
|
743
743
|
} }
|
|
744
|
-
function
|
|
744
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
745
745
|
i0.ɵɵelementStart(0, "span")(1, "strong");
|
|
746
746
|
i0.ɵɵtext(2, "Configuration:");
|
|
747
747
|
i0.ɵɵelementEnd();
|
|
@@ -752,61 +752,61 @@ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Condi
|
|
|
752
752
|
i0.ɵɵadvance(3);
|
|
753
753
|
i0.ɵɵtextInterpolate1(" ", model_r15.ConfigurationID, "");
|
|
754
754
|
} }
|
|
755
|
-
function
|
|
755
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
756
756
|
const _r21 = i0.ɵɵgetCurrentView();
|
|
757
|
-
i0.ɵɵelementStart(0, "div")(1, "label",
|
|
757
|
+
i0.ɵɵelementStart(0, "div")(1, "label", 159);
|
|
758
758
|
i0.ɵɵtext(2, "Parallel Count");
|
|
759
759
|
i0.ɵɵelementEnd();
|
|
760
|
-
i0.ɵɵelementStart(3, "kendo-numerictextbox",
|
|
761
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
760
|
+
i0.ɵɵelementStart(3, "kendo-numerictextbox", 161);
|
|
761
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Conditional_5_Template_kendo_numerictextbox_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r21); const model_r15 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r15.ParallelCount, $event) || (model_r15.ParallelCount = $event); return i0.ɵɵresetView($event); });
|
|
762
762
|
i0.ɵɵelementEnd()();
|
|
763
763
|
} if (rf & 2) {
|
|
764
764
|
const ctx_r15 = i0.ɵɵnextContext(3);
|
|
765
765
|
const model_r15 = ctx_r15.$implicit;
|
|
766
|
-
const ɵ$
|
|
766
|
+
const ɵ$index_417_r13 = ctx_r15.$index;
|
|
767
767
|
i0.ɵɵadvance(3);
|
|
768
768
|
i0.ɵɵtwoWayProperty("ngModel", model_r15.ParallelCount);
|
|
769
|
-
i0.ɵɵproperty("name", "parallelCount_" + ɵ$
|
|
769
|
+
i0.ɵɵproperty("name", "parallelCount_" + ɵ$index_417_r13)("min", 1)("step", 1)("format", "n0");
|
|
770
770
|
} }
|
|
771
|
-
function
|
|
771
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
772
772
|
const _r22 = i0.ɵɵgetCurrentView();
|
|
773
|
-
i0.ɵɵelementStart(0, "div")(1, "label",
|
|
773
|
+
i0.ɵɵelementStart(0, "div")(1, "label", 159);
|
|
774
774
|
i0.ɵɵtext(2, "Config Parameter");
|
|
775
775
|
i0.ɵɵelementEnd();
|
|
776
|
-
i0.ɵɵelementStart(3, "kendo-textbox",
|
|
777
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
776
|
+
i0.ɵɵelementStart(3, "kendo-textbox", 162);
|
|
777
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Conditional_6_Template_kendo_textbox_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r22); const model_r15 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r15.ParallelConfigParam, $event) || (model_r15.ParallelConfigParam = $event); return i0.ɵɵresetView($event); });
|
|
778
778
|
i0.ɵɵelementEnd()();
|
|
779
779
|
} if (rf & 2) {
|
|
780
780
|
const ctx_r15 = i0.ɵɵnextContext(3);
|
|
781
781
|
const model_r15 = ctx_r15.$implicit;
|
|
782
|
-
const ɵ$
|
|
782
|
+
const ɵ$index_417_r13 = ctx_r15.$index;
|
|
783
783
|
i0.ɵɵadvance(3);
|
|
784
784
|
i0.ɵɵtwoWayProperty("ngModel", model_r15.ParallelConfigParam);
|
|
785
|
-
i0.ɵɵproperty("name", "parallelConfigParam_" + ɵ$
|
|
785
|
+
i0.ɵɵproperty("name", "parallelConfigParam_" + ɵ$index_417_r13);
|
|
786
786
|
} }
|
|
787
|
-
function
|
|
787
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
788
788
|
const _r20 = i0.ɵɵgetCurrentView();
|
|
789
|
-
i0.ɵɵelementStart(0, "div",
|
|
789
|
+
i0.ɵɵelementStart(0, "div", 157)(1, "div")(2, "label", 159);
|
|
790
790
|
i0.ɵɵtext(3, "Parallel Mode");
|
|
791
791
|
i0.ɵɵelementEnd();
|
|
792
|
-
i0.ɵɵelementStart(4, "kendo-dropdownlist",
|
|
793
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
792
|
+
i0.ɵɵelementStart(4, "kendo-dropdownlist", 160);
|
|
793
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Template_kendo_dropdownlist_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r20); const model_r15 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵtwoWayBindingSet(model_r15.ParallelizationMode, $event) || (model_r15.ParallelizationMode = $event); return i0.ɵɵresetView($event); });
|
|
794
794
|
i0.ɵɵelementEnd()();
|
|
795
|
-
i0.ɵɵtemplate(5,
|
|
795
|
+
i0.ɵɵtemplate(5, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Conditional_5_Template, 4, 5, "div")(6, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Conditional_6_Template, 4, 2, "div");
|
|
796
796
|
i0.ɵɵelementEnd();
|
|
797
797
|
} if (rf & 2) {
|
|
798
798
|
const ctx_r15 = i0.ɵɵnextContext(2);
|
|
799
799
|
const model_r15 = ctx_r15.$implicit;
|
|
800
|
-
const ɵ$
|
|
800
|
+
const ɵ$index_417_r13 = ctx_r15.$index;
|
|
801
801
|
i0.ɵɵadvance(4);
|
|
802
802
|
i0.ɵɵtwoWayProperty("ngModel", model_r15.ParallelizationMode);
|
|
803
|
-
i0.ɵɵproperty("name", "parallelMode_" + ɵ$
|
|
803
|
+
i0.ɵɵproperty("name", "parallelMode_" + ɵ$index_417_r13)("data", i0.ɵɵpureFunction3(9, _c4, i0.ɵɵpureFunction0(6, _c5), i0.ɵɵpureFunction0(7, _c6), i0.ɵɵpureFunction0(8, _c7)))("valuePrimitive", true);
|
|
804
804
|
i0.ɵɵadvance();
|
|
805
805
|
i0.ɵɵconditional(model_r15.ParallelizationMode === "StaticCount" ? 5 : -1);
|
|
806
806
|
i0.ɵɵadvance();
|
|
807
807
|
i0.ɵɵconditional(model_r15.ParallelizationMode === "ConfigParam" ? 6 : -1);
|
|
808
808
|
} }
|
|
809
|
-
function
|
|
809
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
810
810
|
i0.ɵɵelementStart(0, "span")(1, "strong");
|
|
811
811
|
i0.ɵɵtext(2, "Parallel Mode:");
|
|
812
812
|
i0.ɵɵelementEnd();
|
|
@@ -817,7 +817,7 @@ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Condi
|
|
|
817
817
|
i0.ɵɵadvance(3);
|
|
818
818
|
i0.ɵɵtextInterpolate1(" ", model_r15.ParallelizationMode, "");
|
|
819
819
|
} }
|
|
820
|
-
function
|
|
820
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
821
821
|
i0.ɵɵelementStart(0, "span")(1, "strong");
|
|
822
822
|
i0.ɵɵtext(2, "Parallel Count:");
|
|
823
823
|
i0.ɵɵelementEnd();
|
|
@@ -828,7 +828,7 @@ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Condi
|
|
|
828
828
|
i0.ɵɵadvance(3);
|
|
829
829
|
i0.ɵɵtextInterpolate1(" ", model_r15.ParallelCount, "");
|
|
830
830
|
} }
|
|
831
|
-
function
|
|
831
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
832
832
|
i0.ɵɵelementStart(0, "span")(1, "strong");
|
|
833
833
|
i0.ɵɵtext(2, "Config Param:");
|
|
834
834
|
i0.ɵɵelementEnd();
|
|
@@ -839,9 +839,9 @@ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Condi
|
|
|
839
839
|
i0.ɵɵadvance(3);
|
|
840
840
|
i0.ɵɵtextInterpolate1(" ", model_r15.ParallelConfigParam, "");
|
|
841
841
|
} }
|
|
842
|
-
function
|
|
843
|
-
i0.ɵɵelementStart(0, "div",
|
|
844
|
-
i0.ɵɵtemplate(1,
|
|
842
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
843
|
+
i0.ɵɵelementStart(0, "div", 158);
|
|
844
|
+
i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Conditional_1_Template, 4, 1, "span")(2, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Conditional_2_Template, 4, 1, "span")(3, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Conditional_3_Template, 4, 1, "span");
|
|
845
845
|
i0.ɵɵelementEnd();
|
|
846
846
|
} if (rf & 2) {
|
|
847
847
|
const model_r15 = i0.ɵɵnextContext(2).$implicit;
|
|
@@ -852,49 +852,49 @@ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Condi
|
|
|
852
852
|
i0.ɵɵadvance();
|
|
853
853
|
i0.ɵɵconditional(model_r15.ParallelConfigParam ? 3 : -1);
|
|
854
854
|
} }
|
|
855
|
-
function
|
|
856
|
-
i0.ɵɵelementStart(0, "div",
|
|
857
|
-
i0.ɵɵelement(2, "i",
|
|
855
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
856
|
+
i0.ɵɵelementStart(0, "div", 134)(1, "div", 155);
|
|
857
|
+
i0.ɵɵelement(2, "i", 156);
|
|
858
858
|
i0.ɵɵtext(3, " Model-Specific Parallel Execution ");
|
|
859
859
|
i0.ɵɵelementEnd();
|
|
860
|
-
i0.ɵɵtemplate(4,
|
|
860
|
+
i0.ɵɵtemplate(4, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Template, 7, 13, "div", 157)(5, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Template, 4, 3, "div", 158);
|
|
861
861
|
i0.ɵɵelementEnd();
|
|
862
862
|
} if (rf & 2) {
|
|
863
863
|
const ctx_r1 = i0.ɵɵnextContext(6);
|
|
864
864
|
i0.ɵɵadvance(4);
|
|
865
865
|
i0.ɵɵconditional(ctx_r1.EditMode ? 4 : 5);
|
|
866
866
|
} }
|
|
867
|
-
function
|
|
867
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Template(rf, ctx) { if (rf & 1) {
|
|
868
868
|
const _r12 = i0.ɵɵgetCurrentView();
|
|
869
|
-
i0.ɵɵelementStart(0, "div",
|
|
870
|
-
i0.ɵɵlistener("dragstart", function
|
|
871
|
-
i0.ɵɵelementStart(1, "div",
|
|
872
|
-
i0.ɵɵtemplate(2,
|
|
869
|
+
i0.ɵɵelementStart(0, "div", 122);
|
|
870
|
+
i0.ɵɵlistener("dragstart", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Template_div_dragstart_0_listener($event) { const ɵ$index_417_r13 = i0.ɵɵrestoreView(_r12).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragStart($event, ɵ$index_417_r13)); })("dragover", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Template_div_dragover_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragOver($event)); })("drop", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Template_div_drop_0_listener($event) { const ɵ$index_417_r13 = i0.ɵɵrestoreView(_r12).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDrop($event, ɵ$index_417_r13)); })("dragend", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Template_div_dragend_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragEnd($event)); });
|
|
871
|
+
i0.ɵɵelementStart(1, "div", 123);
|
|
872
|
+
i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_2_Template, 3, 1)(3, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_3_Template, 2, 3, "span", 124);
|
|
873
873
|
i0.ɵɵelementEnd();
|
|
874
|
-
i0.ɵɵelementStart(4, "div",
|
|
875
|
-
i0.ɵɵtemplate(5,
|
|
874
|
+
i0.ɵɵelementStart(4, "div", 125);
|
|
875
|
+
i0.ɵɵtemplate(5, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_5_Template, 1, 5, "kendo-dropdownlist", 126)(6, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_6_Template, 2, 1, "span", 24);
|
|
876
876
|
i0.ɵɵelementEnd();
|
|
877
|
-
i0.ɵɵelementStart(7, "div",
|
|
878
|
-
i0.ɵɵtemplate(8,
|
|
877
|
+
i0.ɵɵelementStart(7, "div", 127);
|
|
878
|
+
i0.ɵɵtemplate(8, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Template, 2, 1)(9, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_9_Template, 2, 1);
|
|
879
879
|
i0.ɵɵelementEnd();
|
|
880
|
-
i0.ɵɵelementStart(10, "div",
|
|
881
|
-
i0.ɵɵtemplate(11,
|
|
880
|
+
i0.ɵɵelementStart(10, "div", 128);
|
|
881
|
+
i0.ɵɵtemplate(11, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_11_Template, 3, 4, "span", 129)(12, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_12_Template, 2, 0, "span", 130);
|
|
882
882
|
i0.ɵɵelementEnd();
|
|
883
|
-
i0.ɵɵelementStart(13, "div",
|
|
884
|
-
i0.ɵɵtemplate(14,
|
|
883
|
+
i0.ɵɵelementStart(13, "div", 131);
|
|
884
|
+
i0.ɵɵtemplate(14, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_14_Template, 7, 2);
|
|
885
885
|
i0.ɵɵelementEnd()();
|
|
886
|
-
i0.ɵɵelementStart(15, "div",
|
|
886
|
+
i0.ɵɵelementStart(15, "div", 132);
|
|
887
887
|
i0.ɵɵelement(16, "div");
|
|
888
|
-
i0.ɵɵelementStart(17, "div")(18, "div",
|
|
889
|
-
i0.ɵɵtemplate(19,
|
|
888
|
+
i0.ɵɵelementStart(17, "div")(18, "div", 133);
|
|
889
|
+
i0.ɵɵtemplate(19, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_19_Template, 4, 1, "span")(20, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_20_Template, 4, 1, "span");
|
|
890
890
|
i0.ɵɵelementEnd();
|
|
891
|
-
i0.ɵɵtemplate(21,
|
|
891
|
+
i0.ɵɵtemplate(21, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Template, 6, 1, "div", 134);
|
|
892
892
|
i0.ɵɵelementEnd()();
|
|
893
893
|
} if (rf & 2) {
|
|
894
894
|
const model_r15 = ctx.$implicit;
|
|
895
|
-
const ɵ$
|
|
895
|
+
const ɵ$index_417_r13 = ctx.$index;
|
|
896
896
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
897
|
-
i0.ɵɵstyleProp("background", !model_r15.ModelID ? "#fff3cd" : ctx_r1.draggedIndex === ɵ$
|
|
897
|
+
i0.ɵɵstyleProp("background", !model_r15.ModelID ? "#fff3cd" : ctx_r1.draggedIndex === ɵ$index_417_r13 ? "#e3f2fd" : "white")("border-left", !model_r15.ModelID ? "3px solid #ffc107" : "none")("opacity", ctx_r1.draggedIndex === ɵ$index_417_r13 ? "0.5" : "1");
|
|
898
898
|
i0.ɵɵproperty("draggable", ctx_r1.EditMode);
|
|
899
899
|
i0.ɵɵadvance(2);
|
|
900
900
|
i0.ɵɵconditional(ctx_r1.EditMode ? 2 : 3);
|
|
@@ -913,22 +913,22 @@ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Condi
|
|
|
913
913
|
i0.ɵɵadvance();
|
|
914
914
|
i0.ɵɵconditional(ctx_r1.record.ParallelizationMode === "ModelSpecific" ? 21 : -1);
|
|
915
915
|
} }
|
|
916
|
-
function
|
|
916
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
917
917
|
const _r23 = i0.ɵɵgetCurrentView();
|
|
918
|
-
i0.ɵɵelementStart(0, "div",
|
|
919
|
-
i0.ɵɵlistener("click", function
|
|
920
|
-
i0.ɵɵelement(2, "i",
|
|
918
|
+
i0.ɵɵelementStart(0, "div", 120)(1, "button", 163);
|
|
919
|
+
i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_Conditional_16_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
|
|
920
|
+
i0.ɵɵelement(2, "i", 71);
|
|
921
921
|
i0.ɵɵtext(3, " Add Model ");
|
|
922
922
|
i0.ɵɵelementEnd()();
|
|
923
923
|
} }
|
|
924
|
-
function
|
|
925
|
-
i0.ɵɵtemplate(0,
|
|
926
|
-
i0.ɵɵelementStart(1, "div",
|
|
927
|
-
i0.ɵɵelement(3, "i",
|
|
924
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
925
|
+
i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_Conditional_0_Template, 3, 0, "div", 116);
|
|
926
|
+
i0.ɵɵelementStart(1, "div", 117)(2, "div", 118);
|
|
927
|
+
i0.ɵɵelement(3, "i", 119);
|
|
928
928
|
i0.ɵɵelementEnd();
|
|
929
929
|
i0.ɵɵelementStart(4, "div");
|
|
930
930
|
i0.ɵɵtext(5, "AI Model ");
|
|
931
|
-
i0.ɵɵelementStart(6, "span",
|
|
931
|
+
i0.ɵɵelementStart(6, "span", 52);
|
|
932
932
|
i0.ɵɵtext(7, "*");
|
|
933
933
|
i0.ɵɵelementEnd()();
|
|
934
934
|
i0.ɵɵelementStart(8, "div");
|
|
@@ -940,8 +940,8 @@ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Condi
|
|
|
940
940
|
i0.ɵɵelementStart(12, "div");
|
|
941
941
|
i0.ɵɵtext(13, "Actions");
|
|
942
942
|
i0.ɵɵelementEnd()();
|
|
943
|
-
i0.ɵɵrepeaterCreate(14,
|
|
944
|
-
i0.ɵɵtemplate(16,
|
|
943
|
+
i0.ɵɵrepeaterCreate(14, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_15_Template, 22, 15, null, null, _forTrack1);
|
|
944
|
+
i0.ɵɵtemplate(16, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_Conditional_16_Template, 4, 0, "div", 120);
|
|
945
945
|
} if (rf & 2) {
|
|
946
946
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
947
947
|
i0.ɵɵconditional(ctx_r1.promptModels.length > 1 ? 0 : -1);
|
|
@@ -950,17 +950,17 @@ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Condi
|
|
|
950
950
|
i0.ɵɵadvance(2);
|
|
951
951
|
i0.ɵɵconditional(ctx_r1.EditMode ? 16 : -1);
|
|
952
952
|
} }
|
|
953
|
-
function
|
|
954
|
-
i0.ɵɵtemplate(0,
|
|
953
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
954
|
+
i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_0_Template, 4, 1, "div", 80)(1, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_Template, 17, 2);
|
|
955
955
|
} if (rf & 2) {
|
|
956
956
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
957
957
|
i0.ɵɵconditional(ctx_r1.promptModels.length === 0 ? 0 : 1);
|
|
958
958
|
} }
|
|
959
|
-
function
|
|
960
|
-
i0.ɵɵelementStart(0, "kendo-expansionpanel",
|
|
961
|
-
i0.ɵɵtemplate(1,
|
|
962
|
-
i0.ɵɵelementStart(2, "div",
|
|
963
|
-
i0.ɵɵtemplate(4,
|
|
959
|
+
function AIPromptFormComponentExtended_form_2_Conditional_42_Template(rf, ctx) { if (rf & 1) {
|
|
960
|
+
i0.ɵɵelementStart(0, "kendo-expansionpanel", 30);
|
|
961
|
+
i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_42_ng_template_1_Template, 7, 1, "ng-template", 31);
|
|
962
|
+
i0.ɵɵelementStart(2, "div", 37)(3, "div", 110);
|
|
963
|
+
i0.ɵɵtemplate(4, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_4_Template, 3, 0, "div", 79)(5, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Template, 2, 1);
|
|
964
964
|
i0.ɵɵelementEnd()()();
|
|
965
965
|
} if (rf & 2) {
|
|
966
966
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -968,49 +968,49 @@ function AIPromptFormComponentExtended_form_1_Conditional_42_Template(rf, ctx) {
|
|
|
968
968
|
i0.ɵɵadvance(4);
|
|
969
969
|
i0.ɵɵconditional(ctx_r1.isLoadingModels ? 4 : 5);
|
|
970
970
|
} }
|
|
971
|
-
function
|
|
972
|
-
i0.ɵɵelementStart(0, "span",
|
|
973
|
-
i0.ɵɵelement(1, "i",
|
|
971
|
+
function AIPromptFormComponentExtended_form_2_ng_template_44_Template(rf, ctx) { if (rf & 1) {
|
|
972
|
+
i0.ɵɵelementStart(0, "span", 63);
|
|
973
|
+
i0.ɵɵelement(1, "i", 164);
|
|
974
974
|
i0.ɵɵtext(2, " Advanced Configuration ");
|
|
975
975
|
i0.ɵɵelementEnd();
|
|
976
976
|
} }
|
|
977
|
-
function
|
|
978
|
-
i0.ɵɵelement(0, "mj-form-field",
|
|
977
|
+
function AIPromptFormComponentExtended_form_2_Conditional_49_Template(rf, ctx) { if (rf & 1) {
|
|
978
|
+
i0.ɵɵelement(0, "mj-form-field", 40);
|
|
979
979
|
} if (rf & 2) {
|
|
980
980
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
981
981
|
i0.ɵɵproperty("record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
|
|
982
982
|
} }
|
|
983
|
-
function
|
|
984
|
-
i0.ɵɵelement(0, "mj-form-field",
|
|
983
|
+
function AIPromptFormComponentExtended_form_2_Conditional_50_Template(rf, ctx) { if (rf & 1) {
|
|
984
|
+
i0.ɵɵelement(0, "mj-form-field", 41);
|
|
985
985
|
} if (rf & 2) {
|
|
986
986
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
987
987
|
i0.ɵɵproperty("record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
|
|
988
988
|
} }
|
|
989
|
-
function
|
|
990
|
-
i0.ɵɵelementStart(0, "div",
|
|
991
|
-
i0.ɵɵelement(1, "i",
|
|
989
|
+
function AIPromptFormComponentExtended_form_2_Conditional_58_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
990
|
+
i0.ɵɵelementStart(0, "div", 165);
|
|
991
|
+
i0.ɵɵelement(1, "i", 55);
|
|
992
992
|
i0.ɵɵtext(2, " Loading prompts... ");
|
|
993
993
|
i0.ɵɵelementEnd();
|
|
994
994
|
} }
|
|
995
|
-
function
|
|
995
|
+
function AIPromptFormComponentExtended_form_2_Conditional_58_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
996
996
|
const _r24 = i0.ɵɵgetCurrentView();
|
|
997
|
-
i0.ɵɵelementStart(0, "kendo-dropdowntree",
|
|
998
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
999
|
-
i0.ɵɵlistener("valueChange", function
|
|
997
|
+
i0.ɵɵelementStart(0, "kendo-dropdowntree", 167);
|
|
998
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_58_Conditional_1_Template_kendo_dropdowntree_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.ResultSelectorPromptID, $event) || (ctx_r1.record.ResultSelectorPromptID = $event); return i0.ɵɵresetView($event); });
|
|
999
|
+
i0.ɵɵlistener("valueChange", function AIPromptFormComponentExtended_form_2_Conditional_58_Conditional_1_Template_kendo_dropdowntree_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onResultSelectorChange($event)); });
|
|
1000
1000
|
i0.ɵɵelementEnd();
|
|
1001
1001
|
} if (rf & 2) {
|
|
1002
1002
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1003
1003
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.ResultSelectorPromptID);
|
|
1004
1004
|
i0.ɵɵproperty("data", ctx_r1.resultSelectorTreeData)("valuePrimitive", true)("filterable", true);
|
|
1005
1005
|
} }
|
|
1006
|
-
function
|
|
1007
|
-
i0.ɵɵtemplate(0,
|
|
1006
|
+
function AIPromptFormComponentExtended_form_2_Conditional_58_Template(rf, ctx) { if (rf & 1) {
|
|
1007
|
+
i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_58_Conditional_0_Template, 3, 0, "div", 165)(1, AIPromptFormComponentExtended_form_2_Conditional_58_Conditional_1_Template, 1, 4, "kendo-dropdowntree", 166);
|
|
1008
1008
|
} if (rf & 2) {
|
|
1009
1009
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1010
1010
|
i0.ɵɵconditional(ctx_r1.isLoadingResultSelectorData ? 0 : 1);
|
|
1011
1011
|
} }
|
|
1012
|
-
function
|
|
1013
|
-
i0.ɵɵelementStart(0, "span",
|
|
1012
|
+
function AIPromptFormComponentExtended_form_2_Conditional_59_Template(rf, ctx) { if (rf & 1) {
|
|
1013
|
+
i0.ɵɵelementStart(0, "span", 47);
|
|
1014
1014
|
i0.ɵɵtext(1);
|
|
1015
1015
|
i0.ɵɵelementEnd();
|
|
1016
1016
|
} if (rf & 2) {
|
|
@@ -1018,29 +1018,29 @@ function AIPromptFormComponentExtended_form_1_Conditional_59_Template(rf, ctx) {
|
|
|
1018
1018
|
i0.ɵɵadvance();
|
|
1019
1019
|
i0.ɵɵtextInterpolate(ctx_r1.getPromptDisplayName(ctx_r1.record.ResultSelectorPromptID || "") || "None selected");
|
|
1020
1020
|
} }
|
|
1021
|
-
function
|
|
1022
|
-
i0.ɵɵelementStart(0, "span",
|
|
1023
|
-
i0.ɵɵelement(1, "i",
|
|
1021
|
+
function AIPromptFormComponentExtended_form_2_Conditional_60_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1022
|
+
i0.ɵɵelementStart(0, "span", 63);
|
|
1023
|
+
i0.ɵɵelement(1, "i", 23);
|
|
1024
1024
|
i0.ɵɵtext(2, " Output Example (JSON) ");
|
|
1025
|
-
i0.ɵɵelementStart(3, "span",
|
|
1025
|
+
i0.ɵɵelementStart(3, "span", 171);
|
|
1026
1026
|
i0.ɵɵtext(4, "\u2022 Required for object output type");
|
|
1027
1027
|
i0.ɵɵelementEnd()();
|
|
1028
1028
|
} }
|
|
1029
|
-
function
|
|
1029
|
+
function AIPromptFormComponentExtended_form_2_Conditional_60_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1030
1030
|
const _r25 = i0.ɵɵgetCurrentView();
|
|
1031
|
-
i0.ɵɵelementStart(0, "mj-code-editor",
|
|
1032
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1031
|
+
i0.ɵɵelementStart(0, "mj-code-editor", 172);
|
|
1032
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_60_Conditional_3_Template_mj_code_editor_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.OutputExample, $event) || (ctx_r1.record.OutputExample = $event); return i0.ɵɵresetView($event); });
|
|
1033
1033
|
i0.ɵɵelementEnd();
|
|
1034
|
-
i0.ɵɵelementStart(1, "div",
|
|
1035
|
-
i0.ɵɵelement(2, "i",
|
|
1034
|
+
i0.ɵɵelementStart(1, "div", 173);
|
|
1035
|
+
i0.ɵɵelement(2, "i", 85);
|
|
1036
1036
|
i0.ɵɵtext(3, " Provide a JSON example that defines the expected structure for object output validation. ");
|
|
1037
1037
|
i0.ɵɵelementEnd();
|
|
1038
1038
|
} if (rf & 2) {
|
|
1039
1039
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1040
1040
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.OutputExample);
|
|
1041
1041
|
} }
|
|
1042
|
-
function
|
|
1043
|
-
i0.ɵɵelementStart(0, "div",
|
|
1042
|
+
function AIPromptFormComponentExtended_form_2_Conditional_60_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1043
|
+
i0.ɵɵelementStart(0, "div", 169);
|
|
1044
1044
|
i0.ɵɵtext(1);
|
|
1045
1045
|
i0.ɵɵelementEnd();
|
|
1046
1046
|
} if (rf & 2) {
|
|
@@ -1048,17 +1048,17 @@ function AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_4_Templ
|
|
|
1048
1048
|
i0.ɵɵadvance();
|
|
1049
1049
|
i0.ɵɵtextInterpolate(ctx_r1.record.OutputExample);
|
|
1050
1050
|
} }
|
|
1051
|
-
function
|
|
1052
|
-
i0.ɵɵelementStart(0, "div",
|
|
1053
|
-
i0.ɵɵelement(1, "i",
|
|
1051
|
+
function AIPromptFormComponentExtended_form_2_Conditional_60_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1052
|
+
i0.ɵɵelementStart(0, "div", 170);
|
|
1053
|
+
i0.ɵɵelement(1, "i", 174);
|
|
1054
1054
|
i0.ɵɵtext(2, " Output example is required when output type is 'object' ");
|
|
1055
1055
|
i0.ɵɵelementEnd();
|
|
1056
1056
|
} }
|
|
1057
|
-
function
|
|
1058
|
-
i0.ɵɵelementStart(0, "kendo-expansionpanel",
|
|
1059
|
-
i0.ɵɵtemplate(1,
|
|
1060
|
-
i0.ɵɵelementStart(2, "div",
|
|
1061
|
-
i0.ɵɵtemplate(3,
|
|
1057
|
+
function AIPromptFormComponentExtended_form_2_Conditional_60_Template(rf, ctx) { if (rf & 1) {
|
|
1058
|
+
i0.ɵɵelementStart(0, "kendo-expansionpanel", 30);
|
|
1059
|
+
i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_60_ng_template_1_Template, 5, 0, "ng-template", 31);
|
|
1060
|
+
i0.ɵɵelementStart(2, "div", 168);
|
|
1061
|
+
i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_2_Conditional_60_Conditional_3_Template, 4, 1)(4, AIPromptFormComponentExtended_form_2_Conditional_60_Conditional_4_Template, 2, 1, "div", 169)(5, AIPromptFormComponentExtended_form_2_Conditional_60_Conditional_5_Template, 3, 0, "div", 170);
|
|
1062
1062
|
i0.ɵɵelementEnd()();
|
|
1063
1063
|
} if (rf & 2) {
|
|
1064
1064
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1066,8 +1066,8 @@ function AIPromptFormComponentExtended_form_1_Conditional_60_Template(rf, ctx) {
|
|
|
1066
1066
|
i0.ɵɵadvance(3);
|
|
1067
1067
|
i0.ɵɵconditional(ctx_r1.EditMode ? 3 : ctx_r1.record.OutputExample ? 4 : 5);
|
|
1068
1068
|
} }
|
|
1069
|
-
function
|
|
1070
|
-
i0.ɵɵelementStart(0, "span",
|
|
1069
|
+
function AIPromptFormComponentExtended_form_2_Conditional_61_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1070
|
+
i0.ɵɵelementStart(0, "span", 177);
|
|
1071
1071
|
i0.ɵɵtext(1);
|
|
1072
1072
|
i0.ɵɵelementEnd();
|
|
1073
1073
|
} if (rf & 2) {
|
|
@@ -1075,60 +1075,60 @@ function AIPromptFormComponentExtended_form_1_Conditional_61_ng_template_1_Condi
|
|
|
1075
1075
|
i0.ɵɵadvance();
|
|
1076
1076
|
i0.ɵɵtextInterpolate1("(", ctx_r1.executionHistory.length, ")");
|
|
1077
1077
|
} }
|
|
1078
|
-
function
|
|
1079
|
-
i0.ɵɵelementStart(0, "span",
|
|
1080
|
-
i0.ɵɵelement(1, "i",
|
|
1078
|
+
function AIPromptFormComponentExtended_form_2_Conditional_61_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1079
|
+
i0.ɵɵelementStart(0, "span", 63);
|
|
1080
|
+
i0.ɵɵelement(1, "i", 176);
|
|
1081
1081
|
i0.ɵɵtext(2, " Execution History ");
|
|
1082
|
-
i0.ɵɵtemplate(3,
|
|
1082
|
+
i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_2_Conditional_61_ng_template_1_Conditional_3_Template, 2, 1, "span", 177);
|
|
1083
1083
|
i0.ɵɵelementEnd();
|
|
1084
1084
|
} if (rf & 2) {
|
|
1085
1085
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1086
1086
|
i0.ɵɵadvance(3);
|
|
1087
1087
|
i0.ɵɵconditional(ctx_r1.executionHistory.length > 0 ? 3 : -1);
|
|
1088
1088
|
} }
|
|
1089
|
-
function
|
|
1090
|
-
i0.ɵɵelementStart(0, "div",
|
|
1091
|
-
i0.ɵɵelement(1, "i",
|
|
1089
|
+
function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1090
|
+
i0.ɵɵelementStart(0, "div", 175);
|
|
1091
|
+
i0.ɵɵelement(1, "i", 178);
|
|
1092
1092
|
i0.ɵɵelementStart(2, "p");
|
|
1093
1093
|
i0.ɵɵtext(3, "Loading execution history...");
|
|
1094
1094
|
i0.ɵɵelementEnd()();
|
|
1095
1095
|
} }
|
|
1096
|
-
function
|
|
1097
|
-
i0.ɵɵelementStart(0, "div",
|
|
1098
|
-
i0.ɵɵelement(1, "i",
|
|
1096
|
+
function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1097
|
+
i0.ɵɵelementStart(0, "div", 175);
|
|
1098
|
+
i0.ɵɵelement(1, "i", 179);
|
|
1099
1099
|
i0.ɵɵelementStart(2, "p");
|
|
1100
1100
|
i0.ɵɵtext(3, "No execution history yet");
|
|
1101
1101
|
i0.ɵɵelementEnd();
|
|
1102
|
-
i0.ɵɵelementStart(4, "p",
|
|
1102
|
+
i0.ɵɵelementStart(4, "p", 147);
|
|
1103
1103
|
i0.ɵɵtext(5, "Run this prompt to see execution history here");
|
|
1104
1104
|
i0.ɵɵelementEnd()();
|
|
1105
1105
|
} }
|
|
1106
|
-
function
|
|
1107
|
-
i0.ɵɵelement(0, "i",
|
|
1106
|
+
function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1107
|
+
i0.ɵɵelement(0, "i", 192);
|
|
1108
1108
|
} if (rf & 2) {
|
|
1109
1109
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1110
1110
|
i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
|
|
1111
1111
|
} }
|
|
1112
|
-
function
|
|
1113
|
-
i0.ɵɵelement(0, "i",
|
|
1112
|
+
function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
1113
|
+
i0.ɵɵelement(0, "i", 192);
|
|
1114
1114
|
} if (rf & 2) {
|
|
1115
1115
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1116
1116
|
i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
|
|
1117
1117
|
} }
|
|
1118
|
-
function
|
|
1119
|
-
i0.ɵɵelement(0, "i",
|
|
1118
|
+
function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
1119
|
+
i0.ɵɵelement(0, "i", 192);
|
|
1120
1120
|
} if (rf & 2) {
|
|
1121
1121
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1122
1122
|
i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
|
|
1123
1123
|
} }
|
|
1124
|
-
function
|
|
1125
|
-
i0.ɵɵelement(0, "i",
|
|
1124
|
+
function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
1125
|
+
i0.ɵɵelement(0, "i", 192);
|
|
1126
1126
|
} if (rf & 2) {
|
|
1127
1127
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1128
1128
|
i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
|
|
1129
1129
|
} }
|
|
1130
|
-
function
|
|
1131
|
-
i0.ɵɵelementStart(0, "span",
|
|
1130
|
+
function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_41_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
1131
|
+
i0.ɵɵelementStart(0, "span", 199);
|
|
1132
1132
|
i0.ɵɵtext(1);
|
|
1133
1133
|
i0.ɵɵelementEnd();
|
|
1134
1134
|
} if (rf & 2) {
|
|
@@ -1136,42 +1136,42 @@ function AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_For_4
|
|
|
1136
1136
|
i0.ɵɵadvance();
|
|
1137
1137
|
i0.ɵɵtextInterpolate1(" ", run_r28.RunType, " ");
|
|
1138
1138
|
} }
|
|
1139
|
-
function
|
|
1139
|
+
function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_41_Template(rf, ctx) { if (rf & 1) {
|
|
1140
1140
|
const _r27 = i0.ɵɵgetCurrentView();
|
|
1141
|
-
i0.ɵɵelementStart(0, "tr",
|
|
1141
|
+
i0.ɵɵelementStart(0, "tr", 193)(1, "td", 194)(2, "span", 195);
|
|
1142
1142
|
i0.ɵɵelement(3, "i");
|
|
1143
|
-
i0.ɵɵelementStart(4, "span",
|
|
1143
|
+
i0.ɵɵelementStart(4, "span", 24);
|
|
1144
1144
|
i0.ɵɵtext(5);
|
|
1145
1145
|
i0.ɵɵelementEnd()()();
|
|
1146
|
-
i0.ɵɵelementStart(6, "td",
|
|
1146
|
+
i0.ɵɵelementStart(6, "td", 196);
|
|
1147
1147
|
i0.ɵɵtext(7);
|
|
1148
1148
|
i0.ɵɵpipe(8, "date");
|
|
1149
1149
|
i0.ɵɵelementEnd();
|
|
1150
|
-
i0.ɵɵelementStart(9, "td",
|
|
1151
|
-
i0.ɵɵelement(11, "i",
|
|
1150
|
+
i0.ɵɵelementStart(9, "td", 196)(10, "span", 195);
|
|
1151
|
+
i0.ɵɵelement(11, "i", 111);
|
|
1152
1152
|
i0.ɵɵtext(12);
|
|
1153
1153
|
i0.ɵɵelementEnd()();
|
|
1154
|
-
i0.ɵɵelementStart(13, "td",
|
|
1154
|
+
i0.ɵɵelementStart(13, "td", 196);
|
|
1155
1155
|
i0.ɵɵtext(14);
|
|
1156
1156
|
i0.ɵɵelementEnd();
|
|
1157
|
-
i0.ɵɵelementStart(15, "td",
|
|
1157
|
+
i0.ɵɵelementStart(15, "td", 197);
|
|
1158
1158
|
i0.ɵɵtext(16);
|
|
1159
1159
|
i0.ɵɵelementEnd();
|
|
1160
|
-
i0.ɵɵelementStart(17, "td",
|
|
1160
|
+
i0.ɵɵelementStart(17, "td", 197);
|
|
1161
1161
|
i0.ɵɵtext(18);
|
|
1162
1162
|
i0.ɵɵelementEnd();
|
|
1163
|
-
i0.ɵɵelementStart(19, "td",
|
|
1164
|
-
i0.ɵɵtemplate(20,
|
|
1163
|
+
i0.ɵɵelementStart(19, "td", 198);
|
|
1164
|
+
i0.ɵɵtemplate(20, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_41_Conditional_20_Template, 2, 1, "span", 199);
|
|
1165
1165
|
i0.ɵɵelementEnd();
|
|
1166
|
-
i0.ɵɵelementStart(21, "td",
|
|
1167
|
-
i0.ɵɵlistener("click", function
|
|
1168
|
-
i0.ɵɵelement(23, "i",
|
|
1166
|
+
i0.ɵɵelementStart(21, "td", 198)(22, "button", 200);
|
|
1167
|
+
i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_41_Template_button_click_22_listener() { const run_r28 = i0.ɵɵrestoreView(_r27).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToPromptRun(run_r28.ID)); });
|
|
1168
|
+
i0.ɵɵelement(23, "i", 201);
|
|
1169
1169
|
i0.ɵɵelementEnd()()();
|
|
1170
1170
|
} if (rf & 2) {
|
|
1171
1171
|
const run_r28 = ctx.$implicit;
|
|
1172
|
-
const ɵ$
|
|
1172
|
+
const ɵ$index_792_r29 = ctx.$index;
|
|
1173
1173
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1174
|
-
i0.ɵɵclassProp("even-row", ɵ$
|
|
1174
|
+
i0.ɵɵclassProp("even-row", ɵ$index_792_r29 % 2 === 0);
|
|
1175
1175
|
i0.ɵɵadvance(3);
|
|
1176
1176
|
i0.ɵɵclassMap("fa-solid " + ctx_r1.getExecutionStatusIcon(run_r28.Success));
|
|
1177
1177
|
i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r28.Success));
|
|
@@ -1192,60 +1192,60 @@ function AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_For_4
|
|
|
1192
1192
|
i0.ɵɵadvance(2);
|
|
1193
1193
|
i0.ɵɵconditional(run_r28.RunType ? 20 : -1);
|
|
1194
1194
|
} }
|
|
1195
|
-
function
|
|
1195
|
+
function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1196
1196
|
const _r26 = i0.ɵɵgetCurrentView();
|
|
1197
|
-
i0.ɵɵelementStart(0, "div",
|
|
1197
|
+
i0.ɵɵelementStart(0, "div", 180)(1, "div", 146);
|
|
1198
1198
|
i0.ɵɵtext(2);
|
|
1199
1199
|
i0.ɵɵelementEnd();
|
|
1200
|
-
i0.ɵɵelementStart(3, "div",
|
|
1200
|
+
i0.ɵɵelementStart(3, "div", 181)(4, "span", 100);
|
|
1201
1201
|
i0.ɵɵtext(5, "Sort by:");
|
|
1202
1202
|
i0.ɵɵelementEnd();
|
|
1203
|
-
i0.ɵɵelementStart(6, "kendo-buttongroup",
|
|
1204
|
-
i0.ɵɵlistener("click", function
|
|
1203
|
+
i0.ɵɵelementStart(6, "kendo-buttongroup", 182)(7, "button", 183);
|
|
1204
|
+
i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("runAt")); });
|
|
1205
1205
|
i0.ɵɵtext(8, " Date ");
|
|
1206
|
-
i0.ɵɵtemplate(9,
|
|
1206
|
+
i0.ɵɵtemplate(9, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Conditional_9_Template, 1, 2, "i", 184);
|
|
1207
1207
|
i0.ɵɵelementEnd();
|
|
1208
|
-
i0.ɵɵelementStart(10, "button",
|
|
1209
|
-
i0.ɵɵlistener("click", function
|
|
1208
|
+
i0.ɵɵelementStart(10, "button", 183);
|
|
1209
|
+
i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("executionTime")); });
|
|
1210
1210
|
i0.ɵɵtext(11, " Duration ");
|
|
1211
|
-
i0.ɵɵtemplate(12,
|
|
1211
|
+
i0.ɵɵtemplate(12, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Conditional_12_Template, 1, 2, "i", 184);
|
|
1212
1212
|
i0.ɵɵelementEnd();
|
|
1213
|
-
i0.ɵɵelementStart(13, "button",
|
|
1214
|
-
i0.ɵɵlistener("click", function
|
|
1213
|
+
i0.ɵɵelementStart(13, "button", 183);
|
|
1214
|
+
i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("tokens")); });
|
|
1215
1215
|
i0.ɵɵtext(14, " Tokens ");
|
|
1216
|
-
i0.ɵɵtemplate(15,
|
|
1216
|
+
i0.ɵɵtemplate(15, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Conditional_15_Template, 1, 2, "i", 184);
|
|
1217
1217
|
i0.ɵɵelementEnd();
|
|
1218
|
-
i0.ɵɵelementStart(16, "button",
|
|
1219
|
-
i0.ɵɵlistener("click", function
|
|
1218
|
+
i0.ɵɵelementStart(16, "button", 183);
|
|
1219
|
+
i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("cost")); });
|
|
1220
1220
|
i0.ɵɵtext(17, " Cost ");
|
|
1221
|
-
i0.ɵɵtemplate(18,
|
|
1221
|
+
i0.ɵɵtemplate(18, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Conditional_18_Template, 1, 2, "i", 184);
|
|
1222
1222
|
i0.ɵɵelementEnd()()()();
|
|
1223
|
-
i0.ɵɵelementStart(19, "div",
|
|
1223
|
+
i0.ɵɵelementStart(19, "div", 185)(20, "table", 186)(21, "thead")(22, "tr", 187)(23, "th", 188);
|
|
1224
1224
|
i0.ɵɵtext(24, "Status");
|
|
1225
1225
|
i0.ɵɵelementEnd();
|
|
1226
|
-
i0.ɵɵelementStart(25, "th",
|
|
1226
|
+
i0.ɵɵelementStart(25, "th", 188);
|
|
1227
1227
|
i0.ɵɵtext(26, "Date & Time");
|
|
1228
1228
|
i0.ɵɵelementEnd();
|
|
1229
|
-
i0.ɵɵelementStart(27, "th",
|
|
1229
|
+
i0.ɵɵelementStart(27, "th", 188);
|
|
1230
1230
|
i0.ɵɵtext(28, "Model");
|
|
1231
1231
|
i0.ɵɵelementEnd();
|
|
1232
|
-
i0.ɵɵelementStart(29, "th",
|
|
1232
|
+
i0.ɵɵelementStart(29, "th", 188);
|
|
1233
1233
|
i0.ɵɵtext(30, "Duration");
|
|
1234
1234
|
i0.ɵɵelementEnd();
|
|
1235
|
-
i0.ɵɵelementStart(31, "th",
|
|
1235
|
+
i0.ɵɵelementStart(31, "th", 189);
|
|
1236
1236
|
i0.ɵɵtext(32, "Tokens");
|
|
1237
1237
|
i0.ɵɵelementEnd();
|
|
1238
|
-
i0.ɵɵelementStart(33, "th",
|
|
1238
|
+
i0.ɵɵelementStart(33, "th", 189);
|
|
1239
1239
|
i0.ɵɵtext(34, "Cost");
|
|
1240
1240
|
i0.ɵɵelementEnd();
|
|
1241
|
-
i0.ɵɵelementStart(35, "th",
|
|
1241
|
+
i0.ɵɵelementStart(35, "th", 190);
|
|
1242
1242
|
i0.ɵɵtext(36, "Type");
|
|
1243
1243
|
i0.ɵɵelementEnd();
|
|
1244
|
-
i0.ɵɵelementStart(37, "th",
|
|
1244
|
+
i0.ɵɵelementStart(37, "th", 190);
|
|
1245
1245
|
i0.ɵɵtext(38, "Actions");
|
|
1246
1246
|
i0.ɵɵelementEnd()()();
|
|
1247
1247
|
i0.ɵɵelementStart(39, "tbody");
|
|
1248
|
-
i0.ɵɵrepeaterCreate(40,
|
|
1248
|
+
i0.ɵɵrepeaterCreate(40, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_41_Template, 24, 18, "tr", 191, _forTrack0);
|
|
1249
1249
|
i0.ɵɵelementEnd()()();
|
|
1250
1250
|
} if (rf & 2) {
|
|
1251
1251
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -1270,11 +1270,11 @@ function AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_Templ
|
|
|
1270
1270
|
i0.ɵɵadvance(22);
|
|
1271
1271
|
i0.ɵɵrepeater(ctx_r1.executionHistory);
|
|
1272
1272
|
} }
|
|
1273
|
-
function
|
|
1274
|
-
i0.ɵɵelementStart(0, "kendo-expansionpanel",
|
|
1275
|
-
i0.ɵɵtemplate(1,
|
|
1276
|
-
i0.ɵɵelementStart(2, "div",
|
|
1277
|
-
i0.ɵɵtemplate(3,
|
|
1273
|
+
function AIPromptFormComponentExtended_form_2_Conditional_61_Template(rf, ctx) { if (rf & 1) {
|
|
1274
|
+
i0.ɵɵelementStart(0, "kendo-expansionpanel", 30);
|
|
1275
|
+
i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_61_ng_template_1_Template, 4, 1, "ng-template", 31);
|
|
1276
|
+
i0.ɵɵelementStart(2, "div", 168);
|
|
1277
|
+
i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_3_Template, 4, 0, "div", 175)(4, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_4_Template, 6, 0, "div", 175)(5, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Template, 42, 9);
|
|
1278
1278
|
i0.ɵɵelementEnd()();
|
|
1279
1279
|
} if (rf & 2) {
|
|
1280
1280
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1282,17 +1282,17 @@ function AIPromptFormComponentExtended_form_1_Conditional_61_Template(rf, ctx) {
|
|
|
1282
1282
|
i0.ɵɵadvance(3);
|
|
1283
1283
|
i0.ɵɵconditional(ctx_r1.isLoadingHistory ? 3 : ctx_r1.executionHistory.length === 0 ? 4 : 5);
|
|
1284
1284
|
} }
|
|
1285
|
-
function
|
|
1286
|
-
i0.ɵɵelementStart(0, "span",
|
|
1287
|
-
i0.ɵɵelement(1, "i",
|
|
1285
|
+
function AIPromptFormComponentExtended_form_2_Conditional_62_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1286
|
+
i0.ɵɵelementStart(0, "span", 63);
|
|
1287
|
+
i0.ɵɵelement(1, "i", 203);
|
|
1288
1288
|
i0.ɵɵtext(2, " Result Cache ");
|
|
1289
1289
|
i0.ɵɵelementEnd();
|
|
1290
1290
|
} }
|
|
1291
|
-
function
|
|
1292
|
-
i0.ɵɵelementStart(0, "kendo-expansionpanel",
|
|
1293
|
-
i0.ɵɵtemplate(1,
|
|
1294
|
-
i0.ɵɵelementStart(2, "div",
|
|
1295
|
-
i0.ɵɵelement(3, "mj-user-view-grid",
|
|
1291
|
+
function AIPromptFormComponentExtended_form_2_Conditional_62_Template(rf, ctx) { if (rf & 1) {
|
|
1292
|
+
i0.ɵɵelementStart(0, "kendo-expansionpanel", 30);
|
|
1293
|
+
i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_62_ng_template_1_Template, 3, 0, "ng-template", 31);
|
|
1294
|
+
i0.ɵɵelementStart(2, "div", 37);
|
|
1295
|
+
i0.ɵɵelement(3, "mj-user-view-grid", 202);
|
|
1296
1296
|
i0.ɵɵelementEnd()();
|
|
1297
1297
|
} if (rf & 2) {
|
|
1298
1298
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1300,24 +1300,24 @@ function AIPromptFormComponentExtended_form_1_Conditional_62_Template(rf, ctx) {
|
|
|
1300
1300
|
i0.ɵɵadvance(3);
|
|
1301
1301
|
i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("AI Result Cache", "AIPromptID"))("NewRecordValues", ctx_r1.NewRecordValues("AI Result Cache"))("AllowLoad", true)("EditMode", ctx_r1.GridEditMode());
|
|
1302
1302
|
} }
|
|
1303
|
-
function
|
|
1304
|
-
i0.ɵɵelementStart(0, "span",
|
|
1305
|
-
i0.ɵɵelement(1, "i",
|
|
1303
|
+
function AIPromptFormComponentExtended_form_2_Conditional_63_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1304
|
+
i0.ɵɵelementStart(0, "span", 63);
|
|
1305
|
+
i0.ɵɵelement(1, "i", 206);
|
|
1306
1306
|
i0.ɵɵtext(2, " Related Items ");
|
|
1307
1307
|
i0.ɵɵelementEnd();
|
|
1308
1308
|
} }
|
|
1309
|
-
function
|
|
1310
|
-
i0.ɵɵelementStart(0, "kendo-expansionpanel",
|
|
1311
|
-
i0.ɵɵtemplate(1,
|
|
1312
|
-
i0.ɵɵelementStart(2, "div",
|
|
1309
|
+
function AIPromptFormComponentExtended_form_2_Conditional_63_Template(rf, ctx) { if (rf & 1) {
|
|
1310
|
+
i0.ɵɵelementStart(0, "kendo-expansionpanel", 30);
|
|
1311
|
+
i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_63_ng_template_1_Template, 3, 0, "ng-template", 31);
|
|
1312
|
+
i0.ɵɵelementStart(2, "div", 37)(3, "div", 38)(4, "div")(5, "h6", 204);
|
|
1313
1313
|
i0.ɵɵtext(6, "AI Agents Using This Prompt");
|
|
1314
1314
|
i0.ɵɵelementEnd();
|
|
1315
|
-
i0.ɵɵelement(7, "mj-user-view-grid",
|
|
1315
|
+
i0.ɵɵelement(7, "mj-user-view-grid", 205);
|
|
1316
1316
|
i0.ɵɵelementEnd();
|
|
1317
|
-
i0.ɵɵelementStart(8, "div")(9, "h6",
|
|
1317
|
+
i0.ɵɵelementStart(8, "div")(9, "h6", 204);
|
|
1318
1318
|
i0.ɵɵtext(10, "Prompts Using This as Result Selector");
|
|
1319
1319
|
i0.ɵɵelementEnd();
|
|
1320
|
-
i0.ɵɵelement(11, "mj-user-view-grid",
|
|
1320
|
+
i0.ɵɵelement(11, "mj-user-view-grid", 205);
|
|
1321
1321
|
i0.ɵɵelementEnd()()()();
|
|
1322
1322
|
} if (rf & 2) {
|
|
1323
1323
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1327,60 +1327,60 @@ function AIPromptFormComponentExtended_form_1_Conditional_63_Template(rf, ctx) {
|
|
|
1327
1327
|
i0.ɵɵadvance(4);
|
|
1328
1328
|
i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("AI Prompts", "ResultSelectorPromptID"))("NewRecordValues", ctx_r1.NewRecordValues("AI Prompts"))("AllowLoad", true)("EditMode", ctx_r1.GridEditMode());
|
|
1329
1329
|
} }
|
|
1330
|
-
function
|
|
1331
|
-
i0.ɵɵelementStart(0, "form",
|
|
1332
|
-
i0.ɵɵelement(2, "mj-form-toolbar",
|
|
1333
|
-
i0.ɵɵelementStart(3, "div",
|
|
1334
|
-
i0.ɵɵelement(8, "i",
|
|
1335
|
-
i0.ɵɵtemplate(9,
|
|
1336
|
-
i0.ɵɵelementEnd();
|
|
1337
|
-
i0.ɵɵtemplate(11,
|
|
1338
|
-
i0.ɵɵelementStart(14, "div",
|
|
1339
|
-
i0.ɵɵtemplate(15,
|
|
1340
|
-
i0.ɵɵelementStart(16, "div",
|
|
1341
|
-
i0.ɵɵelement(17, "i",
|
|
1342
|
-
i0.ɵɵelementStart(18, "span",
|
|
1330
|
+
function AIPromptFormComponentExtended_form_2_Template(rf, ctx) { if (rf & 1) {
|
|
1331
|
+
i0.ɵɵelementStart(0, "form", 6, 0);
|
|
1332
|
+
i0.ɵɵelement(2, "mj-form-toolbar", 7);
|
|
1333
|
+
i0.ɵɵelementStart(3, "div", 8)(4, "div", 9)(5, "div", 10)(6, "div", 11)(7, "div", 12);
|
|
1334
|
+
i0.ɵɵelement(8, "i", 13);
|
|
1335
|
+
i0.ɵɵtemplate(9, AIPromptFormComponentExtended_form_2_Conditional_9_Template, 1, 1, "kendo-textbox", 14)(10, AIPromptFormComponentExtended_form_2_Conditional_10_Template, 4, 4);
|
|
1336
|
+
i0.ɵɵelementEnd();
|
|
1337
|
+
i0.ɵɵtemplate(11, AIPromptFormComponentExtended_form_2_Conditional_11_Template, 12, 11, "div", 15)(12, AIPromptFormComponentExtended_form_2_Conditional_12_Template, 1, 2, "kendo-textarea", 16)(13, AIPromptFormComponentExtended_form_2_Conditional_13_Template, 2, 1, "p", 17);
|
|
1338
|
+
i0.ɵɵelementStart(14, "div", 18);
|
|
1339
|
+
i0.ɵɵtemplate(15, AIPromptFormComponentExtended_form_2_Conditional_15_Template, 6, 1, "div", 19);
|
|
1340
|
+
i0.ɵɵelementStart(16, "div", 19);
|
|
1341
|
+
i0.ɵɵelement(17, "i", 20);
|
|
1342
|
+
i0.ɵɵelementStart(18, "span", 21);
|
|
1343
1343
|
i0.ɵɵtext(19, "Parallelization:");
|
|
1344
1344
|
i0.ɵɵelementEnd();
|
|
1345
|
-
i0.ɵɵelementStart(20, "span",
|
|
1345
|
+
i0.ɵɵelementStart(20, "span", 22);
|
|
1346
1346
|
i0.ɵɵtext(21);
|
|
1347
1347
|
i0.ɵɵelementEnd()();
|
|
1348
|
-
i0.ɵɵelementStart(22, "div",
|
|
1349
|
-
i0.ɵɵelement(23, "i",
|
|
1350
|
-
i0.ɵɵelementStart(24, "span",
|
|
1348
|
+
i0.ɵɵelementStart(22, "div", 19);
|
|
1349
|
+
i0.ɵɵelement(23, "i", 23);
|
|
1350
|
+
i0.ɵɵelementStart(24, "span", 21);
|
|
1351
1351
|
i0.ɵɵtext(25, "Output:");
|
|
1352
1352
|
i0.ɵɵelementEnd();
|
|
1353
|
-
i0.ɵɵelementStart(26, "span",
|
|
1353
|
+
i0.ɵɵelementStart(26, "span", 24);
|
|
1354
1354
|
i0.ɵɵtext(27);
|
|
1355
1355
|
i0.ɵɵelementEnd()();
|
|
1356
|
-
i0.ɵɵtemplate(28,
|
|
1356
|
+
i0.ɵɵtemplate(28, AIPromptFormComponentExtended_form_2_Conditional_28_Template, 4, 0, "div", 19);
|
|
1357
1357
|
i0.ɵɵelementEnd()();
|
|
1358
|
-
i0.ɵɵelementStart(29, "div",
|
|
1359
|
-
i0.ɵɵtemplate(31,
|
|
1358
|
+
i0.ɵɵelementStart(29, "div", 25)(30, "div", 26);
|
|
1359
|
+
i0.ɵɵtemplate(31, AIPromptFormComponentExtended_form_2_Conditional_31_Template, 3, 2, "button", 27);
|
|
1360
1360
|
i0.ɵɵelementEnd();
|
|
1361
|
-
i0.ɵɵtemplate(32,
|
|
1361
|
+
i0.ɵɵtemplate(32, AIPromptFormComponentExtended_form_2_Conditional_32_Template, 4, 3, "div", 28);
|
|
1362
1362
|
i0.ɵɵelementEnd()()();
|
|
1363
|
-
i0.ɵɵelementStart(33, "div",
|
|
1364
|
-
i0.ɵɵtemplate(35,
|
|
1365
|
-
i0.ɵɵelementStart(36, "div",
|
|
1366
|
-
i0.ɵɵtemplate(37,
|
|
1363
|
+
i0.ɵɵelementStart(33, "div", 29)(34, "kendo-expansionpanel", 30);
|
|
1364
|
+
i0.ɵɵtemplate(35, AIPromptFormComponentExtended_form_2_ng_template_35_Template, 4, 1, "ng-template", 31);
|
|
1365
|
+
i0.ɵɵelementStart(36, "div", 32);
|
|
1366
|
+
i0.ɵɵtemplate(37, AIPromptFormComponentExtended_form_2_Conditional_37_Template, 3, 0, "div", 33)(38, AIPromptFormComponentExtended_form_2_Conditional_38_Template, 13, 2, "div", 34)(39, AIPromptFormComponentExtended_form_2_Conditional_39_Template, 13, 2, "div", 35)(40, AIPromptFormComponentExtended_form_2_Conditional_40_Template, 4, 2, "div", 36);
|
|
1367
1367
|
i0.ɵɵelementEnd()();
|
|
1368
|
-
i0.ɵɵtemplate(41,
|
|
1369
|
-
i0.ɵɵelementStart(43, "kendo-expansionpanel",
|
|
1370
|
-
i0.ɵɵtemplate(44,
|
|
1371
|
-
i0.ɵɵelementStart(45, "div",
|
|
1372
|
-
i0.ɵɵelement(48, "mj-form-field",
|
|
1373
|
-
i0.ɵɵtemplate(49,
|
|
1374
|
-
i0.ɵɵelement(51, "mj-form-field",
|
|
1368
|
+
i0.ɵɵtemplate(41, AIPromptFormComponentExtended_form_2_Conditional_41_Template, 6, 2, "kendo-expansionpanel", 30)(42, AIPromptFormComponentExtended_form_2_Conditional_42_Template, 6, 2, "kendo-expansionpanel", 30);
|
|
1369
|
+
i0.ɵɵelementStart(43, "kendo-expansionpanel", 30);
|
|
1370
|
+
i0.ɵɵtemplate(44, AIPromptFormComponentExtended_form_2_ng_template_44_Template, 3, 0, "ng-template", 31);
|
|
1371
|
+
i0.ɵɵelementStart(45, "div", 37)(46, "div", 38)(47, "div");
|
|
1372
|
+
i0.ɵɵelement(48, "mj-form-field", 39);
|
|
1373
|
+
i0.ɵɵtemplate(49, AIPromptFormComponentExtended_form_2_Conditional_49_Template, 1, 3, "mj-form-field", 40)(50, AIPromptFormComponentExtended_form_2_Conditional_50_Template, 1, 3, "mj-form-field", 41);
|
|
1374
|
+
i0.ɵɵelement(51, "mj-form-field", 42);
|
|
1375
1375
|
i0.ɵɵelementEnd();
|
|
1376
1376
|
i0.ɵɵelementStart(52, "div");
|
|
1377
|
-
i0.ɵɵelement(53, "mj-form-field",
|
|
1378
|
-
i0.ɵɵelementStart(55, "div",
|
|
1377
|
+
i0.ɵɵelement(53, "mj-form-field", 43)(54, "mj-form-field", 44);
|
|
1378
|
+
i0.ɵɵelementStart(55, "div", 45)(56, "label", 46);
|
|
1379
1379
|
i0.ɵɵtext(57, " Result Selector Prompt ");
|
|
1380
1380
|
i0.ɵɵelementEnd();
|
|
1381
|
-
i0.ɵɵtemplate(58,
|
|
1381
|
+
i0.ɵɵtemplate(58, AIPromptFormComponentExtended_form_2_Conditional_58_Template, 2, 1)(59, AIPromptFormComponentExtended_form_2_Conditional_59_Template, 2, 1, "span", 47);
|
|
1382
1382
|
i0.ɵɵelementEnd()()()()();
|
|
1383
|
-
i0.ɵɵtemplate(60,
|
|
1383
|
+
i0.ɵɵtemplate(60, AIPromptFormComponentExtended_form_2_Conditional_60_Template, 6, 2, "kendo-expansionpanel", 30)(61, AIPromptFormComponentExtended_form_2_Conditional_61_Template, 6, 2, "kendo-expansionpanel", 30)(62, AIPromptFormComponentExtended_form_2_Conditional_62_Template, 4, 5, "kendo-expansionpanel", 30)(63, AIPromptFormComponentExtended_form_2_Conditional_63_Template, 12, 9, "kendo-expansionpanel", 30);
|
|
1384
1384
|
i0.ɵɵelementEnd()()();
|
|
1385
1385
|
} if (rf & 2) {
|
|
1386
1386
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -1439,12 +1439,12 @@ function AIPromptFormComponentExtended_form_1_Template(rf, ctx) { if (rf & 1) {
|
|
|
1439
1439
|
i0.ɵɵadvance();
|
|
1440
1440
|
i0.ɵɵconditional(ctx_r1.record.IsSaved ? 63 : -1);
|
|
1441
1441
|
} }
|
|
1442
|
-
function
|
|
1442
|
+
function AIPromptFormComponentExtended_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1443
1443
|
const _r30 = i0.ɵɵgetCurrentView();
|
|
1444
|
-
i0.ɵɵelementStart(0, "kendo-window",
|
|
1445
|
-
i0.ɵɵlistener("close", function
|
|
1446
|
-
i0.ɵɵelementStart(1, "mj-ai-test-harness",
|
|
1447
|
-
i0.ɵɵlistener("visibilityChange", function
|
|
1444
|
+
i0.ɵɵelementStart(0, "kendo-window", 207);
|
|
1445
|
+
i0.ɵɵlistener("close", function AIPromptFormComponentExtended_Conditional_3_Template_kendo_window_close_0_listener() { i0.ɵɵrestoreView(_r30); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged(false)); });
|
|
1446
|
+
i0.ɵɵelementStart(1, "mj-ai-test-harness", 208);
|
|
1447
|
+
i0.ɵɵlistener("visibilityChange", function AIPromptFormComponentExtended_Conditional_3_Template_mj_ai_test_harness_visibilityChange_1_listener($event) { i0.ɵɵrestoreView(_r30); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged($event)); });
|
|
1448
1448
|
i0.ɵɵelementEnd()();
|
|
1449
1449
|
} if (rf & 2) {
|
|
1450
1450
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -1462,9 +1462,11 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
1462
1462
|
compactMode: false
|
|
1463
1463
|
};
|
|
1464
1464
|
}
|
|
1465
|
-
constructor(elementRef, sharedService, router, route, cdr) {
|
|
1465
|
+
constructor(elementRef, sharedService, router, route, cdr, testHarnessService, viewContainerRef) {
|
|
1466
1466
|
super(elementRef, sharedService, router, route, cdr);
|
|
1467
1467
|
this.cdr = cdr;
|
|
1468
|
+
this.testHarnessService = testHarnessService;
|
|
1469
|
+
this.viewContainerRef = viewContainerRef;
|
|
1468
1470
|
this.template = null;
|
|
1469
1471
|
this.templateContent = null;
|
|
1470
1472
|
this.templateParams = [];
|
|
@@ -1707,7 +1709,20 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
1707
1709
|
MJNotificationService.Instance.CreateSimpleNotification('Please save the AI prompt before testing', 'warning', 4000);
|
|
1708
1710
|
return;
|
|
1709
1711
|
}
|
|
1710
|
-
|
|
1712
|
+
// Use the dialog service instead of inline
|
|
1713
|
+
this.testHarnessService.openForPrompt(this.record.ID, this.viewContainerRef).subscribe({
|
|
1714
|
+
next: (result) => {
|
|
1715
|
+
if (result.success) {
|
|
1716
|
+
MJNotificationService.Instance.CreateSimpleNotification('Prompt test completed successfully', 'success', 3000);
|
|
1717
|
+
// Reload execution history
|
|
1718
|
+
this.loadExecutionHistory();
|
|
1719
|
+
}
|
|
1720
|
+
},
|
|
1721
|
+
error: (error) => {
|
|
1722
|
+
console.error('Test harness error:', error);
|
|
1723
|
+
MJNotificationService.Instance.CreateSimpleNotification('Test failed: ' + error.message, 'error', 5000);
|
|
1724
|
+
}
|
|
1725
|
+
});
|
|
1711
1726
|
}
|
|
1712
1727
|
/**
|
|
1713
1728
|
* Handles when test harness is closed
|
|
@@ -2549,22 +2564,23 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2549
2564
|
return 'Unknown type';
|
|
2550
2565
|
}
|
|
2551
2566
|
}
|
|
2552
|
-
static { this.ɵfac = function AIPromptFormComponentExtended_Factory(t) { return new (t || AIPromptFormComponentExtended)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.SharedService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
|
|
2567
|
+
static { this.ɵfac = function AIPromptFormComponentExtended_Factory(t) { return new (t || AIPromptFormComponentExtended)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.SharedService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i3.AITestHarnessDialogService), i0.ɵɵdirectiveInject(i0.ViewContainerRef)); }; }
|
|
2553
2568
|
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AIPromptFormComponentExtended, selectors: [["mj-ai-prompt-form"]], viewQuery: function AIPromptFormComponentExtended_Query(rf, ctx) { if (rf & 1) {
|
|
2554
2569
|
i0.ɵɵviewQuery(_c0, 5);
|
|
2555
2570
|
} if (rf & 2) {
|
|
2556
2571
|
let _t;
|
|
2557
2572
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.templateEditor = _t.first);
|
|
2558
|
-
} }, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 2, consts: [["form", "ngForm"], ["templateEditor", ""], [1, "record-form-container"], ["class", "record-form", 4, "ngIf"], [3, "width", "height", "minWidth", "minHeight", "draggable", "resizable", "state", "title"], [1, "record-form"], [3, "form"], [1, "prompt-main-area", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow-y", "auto"], [1, "prompt-header", 2, "flex-shrink", "0", "padding", "20px", "background", "#f8f9fa", "border-bottom", "2px solid #e9ecef"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "gap", "20px"], [2, "flex", "1", "min-width", "0"], [2, "display", "flex", "align-items", "center", "gap", "12px", "margin-bottom", "8px"], [1, "fa-solid", "fa-robot", 2, "color", "#6f42c1", "font-size", "1.4em"], ["name", "promptName", "placeholder", "Enter prompt name...", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModel"], [2, "display", "flex", "gap", "16px", "margin-bottom", "12px", "flex-wrap", "wrap"], ["name", "promptDescription", "placeholder", "Enter prompt description...", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModel", "rows"], [2, "margin", "0 0 12px 0", "color", "#6c757d", "font-size", "0.9em", "line-height", "1.4"], [1, "quick-config", 2, "display", "flex", "align-items", "center", "gap", "16px", "flex-wrap", "wrap"], [1, "config-item", 2, "display", "flex", "align-items", "center", "gap", "6px", "font-size", "0.85em"], [1, "fa-solid", "fa-layer-group", 2, "color", "#6c757d"], [2, "color", "#6c757d"], [2, "color", "#495057", "font-weight", "500"], [1, "fa-solid", "fa-code", 2, "color", "#6c757d"], [2, "font-weight", "500"], [1, "action-buttons", 2, "display", "flex", "flex-direction", "column", "gap", "8px", "align-items", "flex-end"], [2, "display", "flex", "gap", "8px"], ["kendoButton", "", "title", "Run AI Prompt Test Harness", 3, "themeColor", "size"], [2, "font-size", "0.75em", "color", "#dc3545", "text-align", "right", "max-width", "200px"], [1, "configuration-sections", 2, "flex", "1", "background", "white", "border-top", "2px solid #e9ecef", "padding", "16px", "min-height", "0"], [2, "margin-bottom", "12px", 3, "expanded"], ["kendoExpansionPanelTitleDirective", ""], [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", "#6c757d"], [1, "no-template-state", 2, "flex", "1", "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "padding", "40px", "color", "#6c757d"], [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", "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", "#495057", "font-size", "0.9em"], [2, "color", "#495057"], ["name", "promptName", "placeholder", "Enter prompt name...", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModelChange", "ngModel"], [2, "margin", "0", "color", "#495057", "font-weight", "600", "flex", "1"], [1, "status-badge", 2, "color", "white", "padding", "4px 10px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], ["name", "promptStatus", "textField", "text", "valueField", "value", 2, "width", "150px", 3, "ngModelChange", "ngModel", "data", "valuePrimitive"], [2, "color", "#dc3545"], [2, "padding", "8px", "color", "#6c757d", "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...", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-tag", 2, "color", "#6c757d"], [1, "fa-solid", "fa-database", 2, "color", "#28a745"], [2, "color", "#28a745", "font-weight", "500"], ["kendoButton", "", "title", "Run AI Prompt Test Harness", 3, "click", "themeColor", "size"], [1, "fa-solid", "fa-play"], [2, "display", "flex", "align-items", "center", "gap", "8px", "font-weight", "600"], [2, "color", "#6c757d", "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", "#495057"], [2, "margin-bottom", "24px", "text-align", "center", "max-width", "400px"], [2, "display", "flex", "gap", "12px"], ["kendoButton", "", 3, "click", "themeColor"], [1, "fa-solid", "fa-plus"], ["kendoButton", "", 3, "click", "fillMode"], [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"], [2, "flex", "1", "background", "white", "border-radius", "6px", "border", "1px solid #e9ecef"], [2, "display", "block", "min-height", "300px", 3, "contentChange", "runTemplate", "template", "config"], [1, "loading-state", 2, "padding", "20px", "text-align", "center", "color", "#6c757d"], [1, "empty-state", 2, "padding", "20px", "text-align", "center", "color", "#6c757d"], [1, "fa-solid", "fa-sliders", 2, "color", "#6c757d"], [1, "badge", 2, "background", "#6f42c1", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [2, "color", "#6c757d", "font-size", "0.8em", "font-weight", "normal", "margin-left", "8px"], ["title", "These parameters are defined in the template and will be available when executing this prompt", 1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-info-circle"], [2, "display", "grid", "gap", "12px"], [1, "parameter-card", 2, "border", "1px solid #e9ecef", "border-radius", "8px", "padding", "16px", "background", "#f8f9fa", "transition", "all 0.2s", 3, "border-left"], [2, "margin-top", "16px", "padding", "12px", "background", "#e3f2fd", "border-radius", "6px", "border", "1px solid #bbdefb"], [2, "display", "flex", "align-items", "flex-start", "gap", "8px"], [1, "fa-solid", "fa-lightbulb", 2, "color", "#1976d2", "margin-top", "2px"], [2, "flex", "1", "font-size", "0.85em", "color", "#1565c0", "line-height", "1.5"], [1, "parameter-card", 2, "border", "1px solid #e9ecef", "border-radius", "8px", "padding", "16px", "background", "#f8f9fa", "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", "#495057", "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", "#6c757d", "font-size", "0.85em"], [2, "margin", "0 0 8px 0", "color", "#6c757d", "font-size", "0.9em", "line-height", "1.4"], [2, "font-size", "0.85em", "color", "#495057"], [2, "display", "flex", "align-items", "center", "gap", "4px", "margin-bottom", "4px"], [1, "fa-solid", "fa-info-circle", 2, "color", "#6c757d"], [2, "display", "grid", "grid-template-columns", "repeat(auto-fit, minmax(200px, 1fr))", "gap", "12px", "margin-top", "12px"], [2, "background", "white", "padding", "8px 12px", "border-radius", "4px", "border", "1px solid #dee2e6"], [2, "display", "block", "font-size", "0.8em", "color", "#6c757d", "margin-bottom", "2px"], [2, "font-size", "0.85em", "color", "#495057", "word-break", "break-all"], [2, "font-size", "0.8em", "color", "#495057", "word-break", "break-all"], [1, "model-management", 2, "border", "1px solid #dee2e6", "border-radius", "6px", "background", "#f8f9fa"], [1, "fa-solid", "fa-microchip", 2, "color", "#6c757d"], [1, "badge", 2, "background", "#17a2b8", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], ["title", "Models are tried in order from top to bottom. The first available model will be used.", 1, "fa-solid", "fa-info-circle"], [2, "margin-top", "10px"], ["kendoButton", "", "fillMode", "outline", "themeColor", "primary", "size", "small", 3, "click"], [2, "padding", "12px 16px", "background", "#e3f2fd", "border-bottom", "1px solid #bbdefb", "color", "#1565c0", "font-size", "0.85em"], [1, "model-header", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "background", "#e9ecef", "font-weight", "600", "font-size", "0.85em", "color", "#495057", "border-bottom", "1px solid #dee2e6"], ["title", "Priority order - models are tried from top to bottom"], [1, "fa-solid", "fa-sort", 2, "color", "#6c757d"], [1, "add-model-row", 2, "padding", "12px 16px", "text-align", "center", "background", "#f8f9fa", "border-top", "1px solid #dee2e6"], [1, "fa-solid", "fa-info-circle", 2, "margin-right", "6px"], [1, "model-row", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "border-bottom", "1px solid #e9ecef", "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", "#6c757d"], [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-created"], [2, "color", "#6c757d", "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 #e9ecef", "background", "#f8f9fa", "font-size", "0.85em", "color", "#6c757d"], [2, "display", "flex", "gap", "16px", "flex-wrap", "wrap", "align-items", "center", "margin-bottom", "8px"], [2, "padding", "8px", "background", "#fff", "border", "1px solid #dee2e6", "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", "#6c757d", "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"], ["kendoDropDownListItemTemplate", ""], [2, "font-size", "0.8em", "margin-left", "4px"], [2, "font-size", "0.9em", "font-weight", "500", 3, "color"], [2, "font-size", "0.9em", "font-weight", "500"], [2, "font-size", "0.9em", 3, "color"], [2, "color", "#6c757d", "font-size", "0.9em"], [2, "font-size", "0.9em"], [2, "display", "flex", "gap", "2px", "margin-bottom", "4px"], ["kendoButton", "", "fillMode", "flat", "size", "small", "title", "Move up", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-up"], ["kendoButton", "", "fillMode", "flat", "size", "small", "title", "Move down", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-down"], ["kendoButton", "", "fillMode", "flat", "themeColor", "error", "size", "small", "title", "Remove model", 3, "click"], [1, "fa-solid", "fa-times"], [2, "margin-bottom", "6px", "font-weight", "600", "color", "#495057", "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", "#495057"], ["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"], ["placeholder", "Parameter name...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name"], ["kendoButton", "", "fillMode", "outline", "themeColor", "success", "size", "small", 3, "click"], [1, "fa-solid", "fa-cogs", 2, "color", "#6c757d"], [2, "padding", "8px", "color", "#6c757d", "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"], [2, "padding", "16px"], [2, "background", "#f8f9fa", "border", "1px solid #dee2e6", "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 #dee2e6", "border-radius", "4px", 3, "ngModelChange", "ngModel"], [2, "margin-top", "8px", "color", "#6c757d", "font-size", "0.85em"], [1, "fa-solid", "fa-exclamation-triangle"], [2, "text-align", "center", "padding", "40px", "color", "#6c757d"], [1, "fa-solid", "fa-history", 2, "color", "#6c757d"], [2, "color", "#6c757d", "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"], ["selection", "single"], ["kendoButton", "", "size", "small", 3, "click", "selected"], [2, "margin-left", "4px", "font-size", "0.8em", 3, "class"], [2, "border", "1px solid #e9ecef", "border-radius", "8px", "overflow", "hidden"], [2, "width", "100%", "border-collapse", "collapse"], [2, "background", "#f8f9fa", "border-bottom", "2px solid #e9ecef"], [2, "padding", "12px", "text-align", "left", "font-weight", "600", "color", "#495057"], [2, "padding", "12px", "text-align", "right", "font-weight", "600", "color", "#495057"], [2, "padding", "12px", "text-align", "center", "font-weight", "600", "color", "#495057"], [1, "history-row", 2, "border-bottom", "1px solid #f1f3f5", 3, "even-row"], [2, "margin-left", "4px", "font-size", "0.8em"], [1, "history-row", 2, "border-bottom", "1px solid #f1f3f5"], [2, "padding", "12px"], [2, "display", "flex", "align-items", "center", "gap", "6px"], [2, "padding", "12px", "color", "#495057"], [2, "padding", "12px", "text-align", "right", "color", "#495057"], [2, "padding", "12px", "text-align", "center"], [2, "padding", "4px 8px", "border-radius", "12px", "background", "#e9ecef", "color", "#495057", "font-size", "0.85em", "font-weight", "500"], ["kendoButton", "", "fillMode", "flat", "size", "small", "title", "View details", 3, "click"], [1, "fa-solid", "fa-external-link"], [2, "height", "300px", 3, "Params", "NewRecordValues", "AllowLoad", "EditMode"], [1, "fa-solid", "fa-database", 2, "color", "#6c757d"], [2, "margin", "0 0 12px 0", "color", "#495057"], [2, "height", "200px", 3, "Params", "NewRecordValues", "AllowLoad", "EditMode"], [1, "fa-solid", "fa-link", 2, "color", "#6c757d"], [3, "close", "width", "height", "minWidth", "minHeight", "draggable", "resizable", "state", "title"], [3, "visibilityChange", "entity", "mode", "isVisible"]], template: function AIPromptFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
2573
|
+
} }, features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 2, consts: [["form", "ngForm"], ["templateEditor", ""], [1, "record-form-container"], ["kendoDialogContainer", ""], ["class", "record-form", 4, "ngIf"], [3, "width", "height", "minWidth", "minHeight", "draggable", "resizable", "state", "title"], [1, "record-form"], [3, "form"], [1, "prompt-main-area", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow-y", "auto"], [1, "prompt-header", 2, "flex-shrink", "0", "padding", "20px", "background", "#f8f9fa", "border-bottom", "2px solid #e9ecef"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "gap", "20px"], [2, "flex", "1", "min-width", "0"], [2, "display", "flex", "align-items", "center", "gap", "12px", "margin-bottom", "8px"], [1, "fa-solid", "fa-robot", 2, "color", "#6f42c1", "font-size", "1.4em"], ["name", "promptName", "placeholder", "Enter prompt name...", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModel"], [2, "display", "flex", "gap", "16px", "margin-bottom", "12px", "flex-wrap", "wrap"], ["name", "promptDescription", "placeholder", "Enter prompt description...", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModel", "rows"], [2, "margin", "0 0 12px 0", "color", "#6c757d", "font-size", "0.9em", "line-height", "1.4"], [1, "quick-config", 2, "display", "flex", "align-items", "center", "gap", "16px", "flex-wrap", "wrap"], [1, "config-item", 2, "display", "flex", "align-items", "center", "gap", "6px", "font-size", "0.85em"], [1, "fa-solid", "fa-layer-group", 2, "color", "#6c757d"], [2, "color", "#6c757d"], [2, "color", "#495057", "font-weight", "500"], [1, "fa-solid", "fa-code", 2, "color", "#6c757d"], [2, "font-weight", "500"], [1, "action-buttons", 2, "display", "flex", "flex-direction", "column", "gap", "8px", "align-items", "flex-end"], [2, "display", "flex", "gap", "8px"], ["kendoButton", "", "title", "Run AI Prompt Test Harness", 3, "themeColor", "size"], [2, "font-size", "0.75em", "color", "#dc3545", "text-align", "right", "max-width", "200px"], [1, "configuration-sections", 2, "flex", "1", "background", "white", "border-top", "2px solid #e9ecef", "padding", "16px", "min-height", "0"], [2, "margin-bottom", "12px", 3, "expanded"], ["kendoExpansionPanelTitleDirective", ""], [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", "#6c757d"], [1, "no-template-state", 2, "flex", "1", "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "padding", "40px", "color", "#6c757d"], [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", "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", "#495057", "font-size", "0.9em"], [2, "color", "#495057"], ["name", "promptName", "placeholder", "Enter prompt name...", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModelChange", "ngModel"], [2, "margin", "0", "color", "#495057", "font-weight", "600", "flex", "1"], [1, "status-badge", 2, "color", "white", "padding", "4px 10px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], ["name", "promptStatus", "textField", "text", "valueField", "value", 2, "width", "150px", 3, "ngModelChange", "ngModel", "data", "valuePrimitive"], [2, "color", "#dc3545"], [2, "padding", "8px", "color", "#6c757d", "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...", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-tag", 2, "color", "#6c757d"], [1, "fa-solid", "fa-database", 2, "color", "#28a745"], [2, "color", "#28a745", "font-weight", "500"], ["kendoButton", "", "title", "Run AI Prompt Test Harness", 3, "click", "themeColor", "size"], [1, "fa-solid", "fa-play"], [2, "display", "flex", "align-items", "center", "gap", "8px", "font-weight", "600"], [2, "color", "#6c757d", "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", "#495057"], [2, "margin-bottom", "24px", "text-align", "center", "max-width", "400px"], [2, "display", "flex", "gap", "12px"], ["kendoButton", "", 3, "click", "themeColor"], [1, "fa-solid", "fa-plus"], ["kendoButton", "", 3, "click", "fillMode"], [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"], [2, "flex", "1", "background", "white", "border-radius", "6px", "border", "1px solid #e9ecef"], [2, "display", "block", "min-height", "300px", 3, "contentChange", "runTemplate", "template", "config"], [1, "loading-state", 2, "padding", "20px", "text-align", "center", "color", "#6c757d"], [1, "empty-state", 2, "padding", "20px", "text-align", "center", "color", "#6c757d"], [1, "fa-solid", "fa-sliders", 2, "color", "#6c757d"], [1, "badge", 2, "background", "#6f42c1", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [2, "color", "#6c757d", "font-size", "0.8em", "font-weight", "normal", "margin-left", "8px"], ["title", "These parameters are defined in the template and will be available when executing this prompt", 1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-info-circle"], [2, "display", "grid", "gap", "12px"], [1, "parameter-card", 2, "border", "1px solid #e9ecef", "border-radius", "8px", "padding", "16px", "background", "#f8f9fa", "transition", "all 0.2s", 3, "border-left"], [2, "margin-top", "16px", "padding", "12px", "background", "#e3f2fd", "border-radius", "6px", "border", "1px solid #bbdefb"], [2, "display", "flex", "align-items", "flex-start", "gap", "8px"], [1, "fa-solid", "fa-lightbulb", 2, "color", "#1976d2", "margin-top", "2px"], [2, "flex", "1", "font-size", "0.85em", "color", "#1565c0", "line-height", "1.5"], [1, "parameter-card", 2, "border", "1px solid #e9ecef", "border-radius", "8px", "padding", "16px", "background", "#f8f9fa", "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", "#495057", "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", "#6c757d", "font-size", "0.85em"], [2, "margin", "0 0 8px 0", "color", "#6c757d", "font-size", "0.9em", "line-height", "1.4"], [2, "font-size", "0.85em", "color", "#495057"], [2, "display", "flex", "align-items", "center", "gap", "4px", "margin-bottom", "4px"], [1, "fa-solid", "fa-info-circle", 2, "color", "#6c757d"], [2, "display", "grid", "grid-template-columns", "repeat(auto-fit, minmax(200px, 1fr))", "gap", "12px", "margin-top", "12px"], [2, "background", "white", "padding", "8px 12px", "border-radius", "4px", "border", "1px solid #dee2e6"], [2, "display", "block", "font-size", "0.8em", "color", "#6c757d", "margin-bottom", "2px"], [2, "font-size", "0.85em", "color", "#495057", "word-break", "break-all"], [2, "font-size", "0.8em", "color", "#495057", "word-break", "break-all"], [1, "model-management", 2, "border", "1px solid #dee2e6", "border-radius", "6px", "background", "#f8f9fa"], [1, "fa-solid", "fa-microchip", 2, "color", "#6c757d"], [1, "badge", 2, "background", "#17a2b8", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], ["title", "Models are tried in order from top to bottom. The first available model will be used.", 1, "fa-solid", "fa-info-circle"], [2, "margin-top", "10px"], ["kendoButton", "", "fillMode", "outline", "themeColor", "primary", "size", "small", 3, "click"], [2, "padding", "12px 16px", "background", "#e3f2fd", "border-bottom", "1px solid #bbdefb", "color", "#1565c0", "font-size", "0.85em"], [1, "model-header", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "background", "#e9ecef", "font-weight", "600", "font-size", "0.85em", "color", "#495057", "border-bottom", "1px solid #dee2e6"], ["title", "Priority order - models are tried from top to bottom"], [1, "fa-solid", "fa-sort", 2, "color", "#6c757d"], [1, "add-model-row", 2, "padding", "12px 16px", "text-align", "center", "background", "#f8f9fa", "border-top", "1px solid #dee2e6"], [1, "fa-solid", "fa-info-circle", 2, "margin-right", "6px"], [1, "model-row", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "border-bottom", "1px solid #e9ecef", "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", "#6c757d"], [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-created"], [2, "color", "#6c757d", "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 #e9ecef", "background", "#f8f9fa", "font-size", "0.85em", "color", "#6c757d"], [2, "display", "flex", "gap", "16px", "flex-wrap", "wrap", "align-items", "center", "margin-bottom", "8px"], [2, "padding", "8px", "background", "#fff", "border", "1px solid #dee2e6", "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", "#6c757d", "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"], ["kendoDropDownListItemTemplate", ""], [2, "font-size", "0.8em", "margin-left", "4px"], [2, "font-size", "0.9em", "font-weight", "500", 3, "color"], [2, "font-size", "0.9em", "font-weight", "500"], [2, "font-size", "0.9em", 3, "color"], [2, "color", "#6c757d", "font-size", "0.9em"], [2, "font-size", "0.9em"], [2, "display", "flex", "gap", "2px", "margin-bottom", "4px"], ["kendoButton", "", "fillMode", "flat", "size", "small", "title", "Move up", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-up"], ["kendoButton", "", "fillMode", "flat", "size", "small", "title", "Move down", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-down"], ["kendoButton", "", "fillMode", "flat", "themeColor", "error", "size", "small", "title", "Remove model", 3, "click"], [1, "fa-solid", "fa-times"], [2, "margin-bottom", "6px", "font-weight", "600", "color", "#495057", "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", "#495057"], ["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"], ["placeholder", "Parameter name...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name"], ["kendoButton", "", "fillMode", "outline", "themeColor", "success", "size", "small", 3, "click"], [1, "fa-solid", "fa-cogs", 2, "color", "#6c757d"], [2, "padding", "8px", "color", "#6c757d", "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"], [2, "padding", "16px"], [2, "background", "#f8f9fa", "border", "1px solid #dee2e6", "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 #dee2e6", "border-radius", "4px", 3, "ngModelChange", "ngModel"], [2, "margin-top", "8px", "color", "#6c757d", "font-size", "0.85em"], [1, "fa-solid", "fa-exclamation-triangle"], [2, "text-align", "center", "padding", "40px", "color", "#6c757d"], [1, "fa-solid", "fa-history", 2, "color", "#6c757d"], [2, "color", "#6c757d", "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"], ["selection", "single"], ["kendoButton", "", "size", "small", 3, "click", "selected"], [2, "margin-left", "4px", "font-size", "0.8em", 3, "class"], [2, "border", "1px solid #e9ecef", "border-radius", "8px", "overflow", "hidden"], [2, "width", "100%", "border-collapse", "collapse"], [2, "background", "#f8f9fa", "border-bottom", "2px solid #e9ecef"], [2, "padding", "12px", "text-align", "left", "font-weight", "600", "color", "#495057"], [2, "padding", "12px", "text-align", "right", "font-weight", "600", "color", "#495057"], [2, "padding", "12px", "text-align", "center", "font-weight", "600", "color", "#495057"], [1, "history-row", 2, "border-bottom", "1px solid #f1f3f5", 3, "even-row"], [2, "margin-left", "4px", "font-size", "0.8em"], [1, "history-row", 2, "border-bottom", "1px solid #f1f3f5"], [2, "padding", "12px"], [2, "display", "flex", "align-items", "center", "gap", "6px"], [2, "padding", "12px", "color", "#495057"], [2, "padding", "12px", "text-align", "right", "color", "#495057"], [2, "padding", "12px", "text-align", "center"], [2, "padding", "4px 8px", "border-radius", "12px", "background", "#e9ecef", "color", "#495057", "font-size", "0.85em", "font-weight", "500"], ["kendoButton", "", "fillMode", "flat", "size", "small", "title", "View details", 3, "click"], [1, "fa-solid", "fa-external-link"], [2, "height", "300px", 3, "Params", "NewRecordValues", "AllowLoad", "EditMode"], [1, "fa-solid", "fa-database", 2, "color", "#6c757d"], [2, "margin", "0 0 12px 0", "color", "#495057"], [2, "height", "200px", 3, "Params", "NewRecordValues", "AllowLoad", "EditMode"], [1, "fa-solid", "fa-link", 2, "color", "#6c757d"], [3, "close", "width", "height", "minWidth", "minHeight", "draggable", "resizable", "state", "title"], [3, "visibilityChange", "entity", "mode", "isVisible"]], template: function AIPromptFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
2559
2574
|
i0.ɵɵelementStart(0, "div", 2);
|
|
2560
|
-
i0.ɵɵ
|
|
2575
|
+
i0.ɵɵelement(1, "div", 3);
|
|
2576
|
+
i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_2_Template, 64, 36, "form", 4)(3, AIPromptFormComponentExtended_Conditional_3_Template, 2, 12, "kendo-window", 5);
|
|
2561
2577
|
i0.ɵɵelementEnd();
|
|
2562
2578
|
} if (rf & 2) {
|
|
2563
|
-
i0.ɵɵadvance();
|
|
2579
|
+
i0.ɵɵadvance(2);
|
|
2564
2580
|
i0.ɵɵproperty("ngIf", ctx.record);
|
|
2565
2581
|
i0.ɵɵadvance();
|
|
2566
|
-
i0.ɵɵconditional(ctx.showTestHarness ?
|
|
2567
|
-
} }, dependencies: [
|
|
2582
|
+
i0.ɵɵconditional(ctx.showTestHarness ? 3 : -1);
|
|
2583
|
+
} }, dependencies: [i4.NgIf, i5.ɵNgNoValidate, i5.NgControlStatus, i5.NgControlStatusGroup, i5.NgModel, i5.NgForm, i6.ExpansionPanelComponent, i6.ExpansionPanelTitleDirective, i7.DialogContainerDirective, i7.WindowComponent, i8.TextAreaComponent, i8.TextBoxComponent, i8.NumericTextBoxComponent, i9.ItemTemplateDirective, i9.DropDownListComponent, i9.DropDownTreeComponent, i10.ButtonGroupComponent, i10.ButtonComponent, i11.UserViewGridComponent, i12.MJFormField, i13.FormToolbarComponent, i14.CodeEditorComponent, i3.AITestHarnessComponent, i15.TemplateEditorComponent, i4.DatePipe], styles: [".record-form-container[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\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 #e9ecef;\n}\n\n.config-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.template-tab-content[_ngcontent-%COMP%] {\n background: #fff;\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: #fff;\n border-radius: 6px;\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: rgba(0,0,0,0.02);\n border-radius: 4px;\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: #f8f9fa;\n}\n\n.history-row.even-row[_ngcontent-%COMP%] {\n background: white;\n}\n\n.history-row[_ngcontent-%COMP%]:hover {\n background: #e9ecef !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: 0 4px 12px rgba(0,0,0,0.1);\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}"] }); }
|
|
2568
2584
|
};
|
|
2569
2585
|
AIPromptFormComponentExtended = __decorate([
|
|
2570
2586
|
RegisterClass(BaseFormComponent, 'AI Prompts')
|
|
@@ -2572,12 +2588,12 @@ AIPromptFormComponentExtended = __decorate([
|
|
|
2572
2588
|
export { AIPromptFormComponentExtended };
|
|
2573
2589
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AIPromptFormComponentExtended, [{
|
|
2574
2590
|
type: Component,
|
|
2575
|
-
args: [{ selector: 'mj-ai-prompt-form', template: "<div class=\"record-form-container\">\n <form *ngIf=\"record\" class=\"record-form\" #form=\"ngForm\" >\n <mj-form-toolbar [form]=\"this\"></mj-form-toolbar>\n\n <!-- Main Content Area - Template Editor and Configuration -->\n <div class=\"prompt-main-area\" style=\"display: flex; flex-direction: column; height: 100%; overflow-y: auto;\">\n \n <!-- Header Section -->\n <div class=\"prompt-header\" style=\"flex-shrink: 0; padding: 20px; background: #f8f9fa; border-bottom: 2px solid #e9ecef;\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n \n <!-- Left: 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: #6f42c1; font-size: 1.4em;\"></i>\n @if (EditMode) {\n <kendo-textbox [(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 </kendo-textbox>\n } @else {\n <h4 style=\"margin: 0; color: #495057; 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 \n <!-- Status and Type Editors when in edit mode -->\n @if (EditMode) {\n <div style=\"display: flex; gap: 16px; margin-bottom: 12px; flex-wrap: wrap;\">\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: #495057; font-size: 0.9em;\">Status</label>\n <kendo-dropdownlist [(ngModel)]=\"record.Status\"\n name=\"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 </kendo-dropdownlist>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: #495057; font-size: 0.9em;\">\n Type <span style=\"color: #dc3545;\">*</span>\n </label>\n @if (isLoadingPromptTypes) {\n <div style=\"padding: 8px; color: #6c757d; font-style: italic; width: 200px;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading types...\n </div>\n } @else {\n <kendo-dropdownlist [(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 </kendo-dropdownlist>\n }\n </div>\n </div>\n }\n \n @if (EditMode) {\n <kendo-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;\">\n </kendo-textarea>\n } @else if (record.Description) {\n <p style=\"margin: 0 0 12px 0; color: #6c757d; font-size: 0.9em; line-height: 1.4;\">{{ record.Description }}</p>\n }\n \n <!-- Quick Config Row -->\n <div class=\"quick-config\" style=\"display: flex; align-items: center; gap: 16px; flex-wrap: wrap;\">\n @if (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: #6c757d;\"></i>\n <span style=\"color: #6c757d;\">Type:</span>\n <span style=\"color: #495057; font-weight: 500;\">{{ getPromptTypeDisplayName(record.TypeID) }}</span>\n </div>\n }\n \n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-layer-group\" style=\"color: #6c757d;\"></i>\n <span style=\"color: #6c757d;\">Parallelization:</span>\n <span style=\"color: #495057; font-weight: 500;\">{{ getParallelizationModeDisplay() }}</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-code\" style=\"color: #6c757d;\"></i>\n <span style=\"color: #6c757d;\">Output:</span>\n <span [style.color]=\"getValidationColor()\" style=\"font-weight: 500;\">{{ getOutputTypeDisplay() }}</span>\n </div>\n \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 </div>\n </div>\n \n <!-- Right: Action Buttons -->\n <div class=\"action-buttons\" style=\"display: flex; flex-direction: column; gap: 8px; align-items: flex-end;\">\n <div style=\"display: flex; gap: 8px;\">\n @if (record.ID) {\n <button kendoButton [themeColor]=\"'primary'\" [size]=\"'large'\"\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 \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\n <!-- Configuration Sections with Expansion Panels -->\n <div class=\"configuration-sections\" style=\"flex: 1; background: white; border-top: 2px solid #e9ecef; padding: 16px; min-height: 0;\">\n <!-- Template Editor Section -->\n <kendo-expansionpanel \n [expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: #6c757d;\"></i>\n Template Editor\n @if (template) {\n <span style=\"color: #6c757d; font-size: 0.9em; font-weight: normal;\">\u2022 {{ template.Name }}</span>\n }\n </span>\n </ng-template>\n \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: #6c757d;\">\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: #6c757d;\">\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: #495057;\">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 <button kendoButton [themeColor]=\"'primary'\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n <button kendoButton [fillMode]=\"'outline'\" (click)=\"linkExistingTemplate()\">\n <i class=\"fa-solid fa-link\"></i> Link Existing Template\n </button>\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 kendoButton [fillMode]=\"'outline'\" (click)=\"loadTemplate()\">\n <i class=\"fa-solid fa-refresh\"></i> Retry Loading\n </button>\n <button kendoButton [themeColor]=\"'primary'\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\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 Editor -->\n <div style=\"flex: 1; background: white; border-radius: 6px; border: 1px solid #e9ecef;\">\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 </kendo-expansionpanel> \n\n <!-- Template Parameters Expansion Panel -->\n @if (template && templateParams.length > 0) {\n <kendo-expansionpanel \n [expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: #6c757d;\"></i>\n Template Parameters\n <span class=\"badge\" style=\"background: #6f42c1; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ templateParams.length }}\n </span>\n <span style=\"color: #6c757d; 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 \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: #6c757d;\">\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: #6c757d;\">\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 #e9ecef; border-radius: 8px; padding: 16px; background: #f8f9fa; transition: all 0.2s;\"\n [style.border-left]=\"'4px solid ' + getParamTypeColor(param.Type)\">\n \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: #495057; 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: #6c757d; font-size: 0.85em;\">Optional</span>\n }\n </div>\n </div>\n \n <!-- Parameter Description -->\n @if (param.Description) {\n <p style=\"margin: 0 0 8px 0; color: #6c757d; font-size: 0.9em; line-height: 1.4;\">\n {{ param.Description }}\n </p>\n }\n \n <!-- Type-specific Information -->\n <div style=\"font-size: 0.85em; color: #495057;\">\n <span style=\"display: flex; align-items: center; gap: 4px; margin-bottom: 4px;\">\n <i class=\"fa-solid fa-info-circle\" style=\"color: #6c757d;\"></i>\n {{ getParamTypeDescription(param) }}\n </span>\n </div>\n \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: white; padding: 8px 12px; border-radius: 4px; border: 1px solid #dee2e6;\">\n <label style=\"display: block; font-size: 0.8em; color: #6c757d; margin-bottom: 2px;\">Default Value</label>\n <code style=\"font-size: 0.85em; color: #495057; word-break: break-all;\">{{ param.DefaultValue }}</code>\n </div>\n }\n \n @if (param.EntityID) {\n <div style=\"background: white; padding: 8px 12px; border-radius: 4px; border: 1px solid #dee2e6;\">\n <label style=\"display: block; font-size: 0.8em; color: #6c757d; margin-bottom: 2px;\">Entity</label>\n <span style=\"font-size: 0.85em; color: #495057;\">{{ param.Entity || 'Entity ID: ' + param.EntityID }}</span>\n </div>\n }\n \n @if (param.LinkedParameterName) {\n <div style=\"background: white; padding: 8px 12px; border-radius: 4px; border: 1px solid #dee2e6;\">\n <label style=\"display: block; font-size: 0.8em; color: #6c757d; margin-bottom: 2px;\">Linked To</label>\n <span style=\"font-size: 0.85em; color: #495057;\">\n {{ param.LinkedParameterName }}\n @if (param.LinkedParameterField) {\n ({{ param.LinkedParameterField }})\n }\n </span>\n </div>\n }\n \n @if (param.ExtraFilter) {\n <div style=\"background: white; padding: 8px 12px; border-radius: 4px; border: 1px solid #dee2e6;\">\n <label style=\"display: block; font-size: 0.8em; color: #6c757d; margin-bottom: 2px;\">Filter</label>\n <code style=\"font-size: 0.8em; color: #495057; word-break: break-all;\">{{ param.ExtraFilter }}</code>\n </div>\n }\n \n @if (param.RecordID) {\n <div style=\"background: white; padding: 8px 12px; border-radius: 4px; border: 1px solid #dee2e6;\">\n <label style=\"display: block; font-size: 0.8em; color: #6c757d; margin-bottom: 2px;\">Record ID</label>\n <code style=\"font-size: 0.85em; color: #495057;\">{{ param.RecordID }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n \n <!-- Help Text -->\n <div style=\"margin-top: 16px; padding: 12px; background: #e3f2fd; border-radius: 6px; border: 1px solid #bbdefb;\">\n <div style=\"display: flex; align-items: flex-start; gap: 8px;\">\n <i class=\"fa-solid fa-lightbulb\" style=\"color: #1976d2; margin-top: 2px;\"></i>\n <div style=\"flex: 1; font-size: 0.85em; color: #1565c0; 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 </kendo-expansionpanel>\n }\n\n <!-- Model Configuration Expansion Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel \n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-microchip\" style=\"color: #6c757d;\"></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: #6c757d; 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 \n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <!-- Model Management Interface -->\n <div class=\"model-management\" style=\"border: 1px solid #dee2e6; border-radius: 6px; background: #f8f9fa;\">\n @if (isLoadingModels) {\n <div class=\"loading-state\" style=\"padding: 20px; text-align: center; color: #6c757d;\">\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: #6c757d;\">\n <i class=\"fa-solid fa-info-circle\"></i> No models configured\n @if (EditMode) {\n <div style=\"margin-top: 10px;\">\n <button kendoButton fillMode=\"outline\" themeColor=\"primary\" size=\"small\"\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: #e3f2fd; border-bottom: 1px solid #bbdefb; color: #1565c0; font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\" style=\"margin-right: 6px;\"></i>\n Models are tried in priority order (1, 2, 3...). 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 60px; gap: 12px; padding: 12px 16px; background: #e9ecef; font-weight: 600; font-size: 0.85em; color: #495057; border-bottom: 1px solid #dee2e6;\">\n <div title=\"Priority order - models are tried from top to bottom\">\n <i class=\"fa-solid fa-sort\" style=\"color: #6c757d;\"></i>\n </div>\n <div>AI Model <span style=\"color: #dc3545;\">*</span></div>\n <div>Vendor</div>\n <div>Created</div>\n <div>Actions</div>\n </div>\n \n @for (model of promptModels; track model.ID || $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 ? '#e3f2fd' : 'white')\"\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 60px; gap: 12px; padding: 12px 16px; border-bottom: 1px solid #e9ecef; align-items: start; transition: background 0.2s, opacity 0.2s;\">\n \n <!-- Drag Handle / Priority -->\n <div class=\"drag-handle\" style=\"display: flex; flex-direction: column; align-items: center; justify-content: center; color: #6c757d;\">\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 {{ i + 1 }} - Lower numbers are tried first\">#{{ i + 1 }}</span>\n }\n </div>\n \n <!-- Model Selection -->\n <div class=\"model-select\">\n @if (EditMode) {\n <kendo-dropdownlist [(ngModel)]=\"model.ModelID\"\n [name]=\"'modelId_' + i\"\n [data]=\"availableModels\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [filterable]=\"true\"\n placeholder=\"Select a model...\"\n (valueChange)=\"onModelChange($event, i)\"\n style=\"width: 100%;\">\n </kendo-dropdownlist>\n } @else {\n <span style=\"font-weight: 500;\">{{ getModelDisplayName(model.ModelID) }}</span>\n }\n </div>\n \n <!-- Vendor -->\n <div class=\"model-vendor\">\n @if (EditMode) {\n @if (model.ModelID) {\n @if (shouldShowVendorDropdown(model.ModelID)) {\n <kendo-dropdownlist [(ngModel)]=\"model.VendorID\"\n [name]=\"'vendorId_' + i\"\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 <ng-template kendoDropDownListItemTemplate let-dataItem>\n <span [style.color]=\"getVendorStatusColor(model.ModelID, dataItem.ID)\">\n {{ dataItem.Name }}\n @if (getModelVendorStatus(model.ModelID, dataItem.ID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, dataItem.ID) }})</span>\n }\n </span>\n </ng-template>\n </kendo-dropdownlist>\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: #6c757d; font-style: italic; font-size: 0.9em;\">No vendors available</span>\n }\n }\n } @else {\n <span style=\"color: #6c757d; 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: #6c757d; font-size: 0.9em;\">-</span>\n }\n }\n </div>\n \n \n <!-- Created Date -->\n <div class=\"model-created\">\n @if (model.ID) {\n <span style=\"color: #6c757d; 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 \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 <button kendoButton fillMode=\"flat\" size=\"small\"\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 kendoButton fillMode=\"flat\" size=\"small\"\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 </div>\n <button kendoButton fillMode=\"flat\" themeColor=\"error\" size=\"small\"\n (click)=\"removePromptModel(i)\"\n title=\"Remove model\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n </div>\n \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 #e9ecef; background: #f8f9fa; font-size: 0.85em; color: #6c757d;\">\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 @if (model.ConfigurationID) {\n <span><strong>Configuration:</strong> {{ model.ConfigurationID }}</span>\n }\n </div>\n \n <!-- Parallel execution fields when prompt is ModelSpecific -->\n @if (record.ParallelizationMode === 'ModelSpecific') {\n <div style=\"padding: 8px; background: #fff; border: 1px solid #dee2e6; border-radius: 4px; margin-top: 8px;\">\n <div style=\"margin-bottom: 6px; font-weight: 600; color: #495057; font-size: 0.9em;\">\n <i class=\"fa-solid fa-layer-group\"></i> Model-Specific Parallel Execution\n </div>\n \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: #495057;\">Parallel Mode</label>\n <kendo-dropdownlist [(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 </kendo-dropdownlist>\n </div>\n \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: #495057;\">Parallel Count</label>\n <kendo-numerictextbox [(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 </kendo-numerictextbox>\n </div>\n }\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: #495057;\">Config Parameter</label>\n <kendo-textbox [(ngModel)]=\"model.ParallelConfigParam\"\n [name]=\"'parallelConfigParam_' + i\"\n placeholder=\"Parameter name...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </kendo-textbox>\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 \n @if (EditMode) {\n <div class=\"add-model-row\" style=\"padding: 12px 16px; text-align: center; background: #f8f9fa; border-top: 1px solid #dee2e6;\">\n <button kendoButton fillMode=\"outline\" themeColor=\"success\" size=\"small\"\n (click)=\"addNewModel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n </div>\n }\n }\n }\n </div>\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Advanced Configuration Expansion Panel -->\n <kendo-expansionpanel \n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-cogs\" style=\"color: #6c757d;\"></i>\n Advanced Configuration\n </span>\n </ng-template>\n \n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n \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 \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 \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 \n <mj-form-field \n [record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"OutputType\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n \n </div>\n \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 \n <mj-form-field \n [record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EnableCaching\"\n Type=\"checkbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n \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: #495057; font-size: 0.9em;\">\n Result Selector Prompt\n </label>\n @if (EditMode) {\n @if (isLoadingResultSelectorData) {\n <div style=\"padding: 8px; color: #6c757d; font-style: italic;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading prompts...\n </div>\n } @else {\n <kendo-dropdowntree \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($event)\">\n </kendo-dropdowntree>\n }\n } @else {\n <span style=\"color: #495057;\">{{ getPromptDisplayName(record.ResultSelectorPromptID || '') || 'None selected' }}</span>\n }\n </div>\n </div>\n </div>\n </div>\n </kendo-expansionpanel>\n\n <!-- Output Example Expansion Panel (when OutputType = object) -->\n @if (showOutputExample) {\n <kendo-expansionpanel \n [expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: #6c757d;\"></i>\n Output Example (JSON)\n <span style=\"color: #dc3545; font-size: 0.8em; font-weight: normal;\">\u2022 Required for object output type</span>\n </span>\n </ng-template>\n \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 #dee2e6; border-radius: 4px;\">\n </mj-code-editor>\n <div style=\"margin-top: 8px; color: #6c757d; 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: #f8f9fa; border: 1px solid #dee2e6; 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 </kendo-expansionpanel>\n }\n\n <!-- Execution History Expansion Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel \n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-history\" style=\"color: #6c757d;\"></i>\n Execution History\n @if (executionHistory.length > 0) {\n <span style=\"color: #6c757d; font-weight: normal;\">({{ executionHistory.length }})</span>\n }\n </span>\n </ng-template>\n \n <!-- Custom Execution History Viewer -->\n <div style=\"padding: 16px;\">\n @if (isLoadingHistory) {\n <div style=\"text-align: center; padding: 40px; color: #6c757d;\">\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: #6c757d;\">\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: #6c757d; 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: #6c757d; font-size: 0.85em;\">Sort by:</span>\n <kendo-buttongroup selection=\"single\">\n <button kendoButton \n [selected]=\"historySortField === 'runAt'\"\n (click)=\"changeHistorySort('runAt')\"\n size=\"small\">\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 kendoButton \n [selected]=\"historySortField === 'executionTime'\"\n (click)=\"changeHistorySort('executionTime')\"\n size=\"small\">\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 kendoButton \n [selected]=\"historySortField === 'tokens'\"\n (click)=\"changeHistorySort('tokens')\"\n size=\"small\">\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 kendoButton \n [selected]=\"historySortField === 'cost'\"\n (click)=\"changeHistorySort('cost')\"\n size=\"small\">\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 </kendo-buttongroup>\n </div>\n </div>\n \n <!-- Execution History Table -->\n <div style=\"border: 1px solid #e9ecef; border-radius: 8px; overflow: hidden;\">\n <table style=\"width: 100%; border-collapse: collapse;\">\n <thead>\n <tr style=\"background: #f8f9fa; border-bottom: 2px solid #e9ecef;\">\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: #495057;\">Status</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: #495057;\">Date & Time</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: #495057;\">Model</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: #495057;\">Duration</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: #495057;\">Tokens</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: #495057;\">Cost</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: #495057;\">Type</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: #495057;\">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 #f1f3f5;\">\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: #495057;\">\n {{ run.RunAt | date:'short' }}\n </td>\n <td style=\"padding: 12px; color: #495057;\">\n <span style=\"display: flex; align-items: center; gap: 6px;\">\n <i class=\"fa-solid fa-microchip\" style=\"color: #6c757d;\"></i>\n {{ run.Model || 'Unknown' }}\n </span>\n </td>\n <td style=\"padding: 12px; color: #495057;\">\n {{ formatDuration(run.ExecutionTimeMS) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: #495057;\">\n {{ formatTokens(run.TokensUsed) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: #495057;\">\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: #e9ecef; \n color: #495057; 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 kendoButton \n fillMode=\"flat\"\n size=\"small\"\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 </kendo-expansionpanel>\n }\n\n <!-- Cache Expansion Panel -->\n @if (record.IsSaved && record.EnableCaching) {\n <kendo-expansionpanel \n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-database\" style=\"color: #6c757d;\"></i>\n Result Cache\n </span>\n </ng-template>\n \n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <mj-user-view-grid \n [Params]=\"BuildRelationshipViewParamsByEntityName('AI Result Cache','AIPromptID')\" \n [NewRecordValues]=\"NewRecordValues('AI Result Cache')\"\n [AllowLoad]=\"true\"\n [EditMode]=\"GridEditMode()\" \n style=\"height: 300px;\">\n </mj-user-view-grid>\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Related Items Expansion Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel \n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-link\" style=\"color: #6c757d;\"></i>\n Related Items\n </span>\n </ng-template>\n \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: #495057;\">AI Agents Using This Prompt</h6>\n <mj-user-view-grid \n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Agent Prompts','PromptID')\" \n [NewRecordValues]=\"NewRecordValues('MJ: AI Agent Prompts')\"\n [AllowLoad]=\"true\"\n [EditMode]=\"GridEditMode()\" \n style=\"height: 200px;\">\n </mj-user-view-grid>\n </div>\n \n <!-- Result Selector References -->\n <div>\n <h6 style=\"margin: 0 0 12px 0; color: #495057;\">Prompts Using This as Result Selector</h6>\n <mj-user-view-grid \n [Params]=\"BuildRelationshipViewParamsByEntityName('AI Prompts','ResultSelectorPromptID')\" \n [NewRecordValues]=\"NewRecordValues('AI Prompts')\"\n [AllowLoad]=\"true\"\n [EditMode]=\"GridEditMode()\" \n style=\"height: 200px;\">\n </mj-user-view-grid>\n </div>\n </div>\n </div>\n </kendo-expansionpanel>\n }\n </div>\n </div>\n </form>\n\n \n <!-- AI Prompt Test Harness -->\n @if (showTestHarness) {\n <kendo-window \n [width]=\"1200\" \n [height]=\"800\" \n [minWidth]=\"800\"\n [minHeight]=\"600\"\n [draggable]=\"true\"\n [resizable]=\"true\"\n [state]=\"'default'\"\n (close)=\"onTestHarnessVisibilityChanged(false)\"\n title=\"Run 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 </kendo-window>\n }\n</div>", styles: [".record-form-container {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\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 #e9ecef;\n}\n\n.config-item:last-child {\n border-bottom: none;\n}\n\n.template-tab-content {\n background: #fff;\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: #fff;\n border-radius: 6px;\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: rgba(0,0,0,0.02);\n border-radius: 4px;\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: #f8f9fa;\n}\n\n.history-row.even-row {\n background: white;\n}\n\n.history-row:hover {\n background: #e9ecef !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: 0 4px 12px rgba(0,0,0,0.1);\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}"] }]
|
|
2576
|
-
}], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }], { templateEditor: [{
|
|
2591
|
+
args: [{ selector: 'mj-ai-prompt-form', template: "<div class=\"record-form-container\">\n <!-- Dialog container for Kendo dialogs -->\n <div kendoDialogContainer></div>\n <form *ngIf=\"record\" class=\"record-form\" #form=\"ngForm\" >\n <mj-form-toolbar [form]=\"this\"></mj-form-toolbar>\n\n <!-- Main Content Area - Template Editor and Configuration -->\n <div class=\"prompt-main-area\" style=\"display: flex; flex-direction: column; height: 100%; overflow-y: auto;\">\n \n <!-- Header Section -->\n <div class=\"prompt-header\" style=\"flex-shrink: 0; padding: 20px; background: #f8f9fa; border-bottom: 2px solid #e9ecef;\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n \n <!-- Left: 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: #6f42c1; font-size: 1.4em;\"></i>\n @if (EditMode) {\n <kendo-textbox [(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 </kendo-textbox>\n } @else {\n <h4 style=\"margin: 0; color: #495057; 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 \n <!-- Status and Type Editors when in edit mode -->\n @if (EditMode) {\n <div style=\"display: flex; gap: 16px; margin-bottom: 12px; flex-wrap: wrap;\">\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: #495057; font-size: 0.9em;\">Status</label>\n <kendo-dropdownlist [(ngModel)]=\"record.Status\"\n name=\"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 </kendo-dropdownlist>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: #495057; font-size: 0.9em;\">\n Type <span style=\"color: #dc3545;\">*</span>\n </label>\n @if (isLoadingPromptTypes) {\n <div style=\"padding: 8px; color: #6c757d; font-style: italic; width: 200px;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading types...\n </div>\n } @else {\n <kendo-dropdownlist [(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 </kendo-dropdownlist>\n }\n </div>\n </div>\n }\n \n @if (EditMode) {\n <kendo-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;\">\n </kendo-textarea>\n } @else if (record.Description) {\n <p style=\"margin: 0 0 12px 0; color: #6c757d; font-size: 0.9em; line-height: 1.4;\">{{ record.Description }}</p>\n }\n \n <!-- Quick Config Row -->\n <div class=\"quick-config\" style=\"display: flex; align-items: center; gap: 16px; flex-wrap: wrap;\">\n @if (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: #6c757d;\"></i>\n <span style=\"color: #6c757d;\">Type:</span>\n <span style=\"color: #495057; font-weight: 500;\">{{ getPromptTypeDisplayName(record.TypeID) }}</span>\n </div>\n }\n \n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-layer-group\" style=\"color: #6c757d;\"></i>\n <span style=\"color: #6c757d;\">Parallelization:</span>\n <span style=\"color: #495057; font-weight: 500;\">{{ getParallelizationModeDisplay() }}</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-code\" style=\"color: #6c757d;\"></i>\n <span style=\"color: #6c757d;\">Output:</span>\n <span [style.color]=\"getValidationColor()\" style=\"font-weight: 500;\">{{ getOutputTypeDisplay() }}</span>\n </div>\n \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 </div>\n </div>\n \n <!-- Right: Action Buttons -->\n <div class=\"action-buttons\" style=\"display: flex; flex-direction: column; gap: 8px; align-items: flex-end;\">\n <div style=\"display: flex; gap: 8px;\">\n @if (record.ID) {\n <button kendoButton [themeColor]=\"'primary'\" [size]=\"'large'\"\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 \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\n <!-- Configuration Sections with Expansion Panels -->\n <div class=\"configuration-sections\" style=\"flex: 1; background: white; border-top: 2px solid #e9ecef; padding: 16px; min-height: 0;\">\n <!-- Template Editor Section -->\n <kendo-expansionpanel \n [expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: #6c757d;\"></i>\n Template Editor\n @if (template) {\n <span style=\"color: #6c757d; font-size: 0.9em; font-weight: normal;\">\u2022 {{ template.Name }}</span>\n }\n </span>\n </ng-template>\n \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: #6c757d;\">\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: #6c757d;\">\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: #495057;\">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 <button kendoButton [themeColor]=\"'primary'\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n <button kendoButton [fillMode]=\"'outline'\" (click)=\"linkExistingTemplate()\">\n <i class=\"fa-solid fa-link\"></i> Link Existing Template\n </button>\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 kendoButton [fillMode]=\"'outline'\" (click)=\"loadTemplate()\">\n <i class=\"fa-solid fa-refresh\"></i> Retry Loading\n </button>\n <button kendoButton [themeColor]=\"'primary'\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\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 Editor -->\n <div style=\"flex: 1; background: white; border-radius: 6px; border: 1px solid #e9ecef;\">\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 </kendo-expansionpanel> \n\n <!-- Template Parameters Expansion Panel -->\n @if (template && templateParams.length > 0) {\n <kendo-expansionpanel \n [expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: #6c757d;\"></i>\n Template Parameters\n <span class=\"badge\" style=\"background: #6f42c1; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ templateParams.length }}\n </span>\n <span style=\"color: #6c757d; 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 \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: #6c757d;\">\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: #6c757d;\">\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 #e9ecef; border-radius: 8px; padding: 16px; background: #f8f9fa; transition: all 0.2s;\"\n [style.border-left]=\"'4px solid ' + getParamTypeColor(param.Type)\">\n \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: #495057; 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: #6c757d; font-size: 0.85em;\">Optional</span>\n }\n </div>\n </div>\n \n <!-- Parameter Description -->\n @if (param.Description) {\n <p style=\"margin: 0 0 8px 0; color: #6c757d; font-size: 0.9em; line-height: 1.4;\">\n {{ param.Description }}\n </p>\n }\n \n <!-- Type-specific Information -->\n <div style=\"font-size: 0.85em; color: #495057;\">\n <span style=\"display: flex; align-items: center; gap: 4px; margin-bottom: 4px;\">\n <i class=\"fa-solid fa-info-circle\" style=\"color: #6c757d;\"></i>\n {{ getParamTypeDescription(param) }}\n </span>\n </div>\n \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: white; padding: 8px 12px; border-radius: 4px; border: 1px solid #dee2e6;\">\n <label style=\"display: block; font-size: 0.8em; color: #6c757d; margin-bottom: 2px;\">Default Value</label>\n <code style=\"font-size: 0.85em; color: #495057; word-break: break-all;\">{{ param.DefaultValue }}</code>\n </div>\n }\n \n @if (param.EntityID) {\n <div style=\"background: white; padding: 8px 12px; border-radius: 4px; border: 1px solid #dee2e6;\">\n <label style=\"display: block; font-size: 0.8em; color: #6c757d; margin-bottom: 2px;\">Entity</label>\n <span style=\"font-size: 0.85em; color: #495057;\">{{ param.Entity || 'Entity ID: ' + param.EntityID }}</span>\n </div>\n }\n \n @if (param.LinkedParameterName) {\n <div style=\"background: white; padding: 8px 12px; border-radius: 4px; border: 1px solid #dee2e6;\">\n <label style=\"display: block; font-size: 0.8em; color: #6c757d; margin-bottom: 2px;\">Linked To</label>\n <span style=\"font-size: 0.85em; color: #495057;\">\n {{ param.LinkedParameterName }}\n @if (param.LinkedParameterField) {\n ({{ param.LinkedParameterField }})\n }\n </span>\n </div>\n }\n \n @if (param.ExtraFilter) {\n <div style=\"background: white; padding: 8px 12px; border-radius: 4px; border: 1px solid #dee2e6;\">\n <label style=\"display: block; font-size: 0.8em; color: #6c757d; margin-bottom: 2px;\">Filter</label>\n <code style=\"font-size: 0.8em; color: #495057; word-break: break-all;\">{{ param.ExtraFilter }}</code>\n </div>\n }\n \n @if (param.RecordID) {\n <div style=\"background: white; padding: 8px 12px; border-radius: 4px; border: 1px solid #dee2e6;\">\n <label style=\"display: block; font-size: 0.8em; color: #6c757d; margin-bottom: 2px;\">Record ID</label>\n <code style=\"font-size: 0.85em; color: #495057;\">{{ param.RecordID }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n \n <!-- Help Text -->\n <div style=\"margin-top: 16px; padding: 12px; background: #e3f2fd; border-radius: 6px; border: 1px solid #bbdefb;\">\n <div style=\"display: flex; align-items: flex-start; gap: 8px;\">\n <i class=\"fa-solid fa-lightbulb\" style=\"color: #1976d2; margin-top: 2px;\"></i>\n <div style=\"flex: 1; font-size: 0.85em; color: #1565c0; 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 </kendo-expansionpanel>\n }\n\n <!-- Model Configuration Expansion Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel \n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-microchip\" style=\"color: #6c757d;\"></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: #6c757d; 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 \n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <!-- Model Management Interface -->\n <div class=\"model-management\" style=\"border: 1px solid #dee2e6; border-radius: 6px; background: #f8f9fa;\">\n @if (isLoadingModels) {\n <div class=\"loading-state\" style=\"padding: 20px; text-align: center; color: #6c757d;\">\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: #6c757d;\">\n <i class=\"fa-solid fa-info-circle\"></i> No models configured\n @if (EditMode) {\n <div style=\"margin-top: 10px;\">\n <button kendoButton fillMode=\"outline\" themeColor=\"primary\" size=\"small\"\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: #e3f2fd; border-bottom: 1px solid #bbdefb; color: #1565c0; font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\" style=\"margin-right: 6px;\"></i>\n Models are tried in priority order (1, 2, 3...). 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 60px; gap: 12px; padding: 12px 16px; background: #e9ecef; font-weight: 600; font-size: 0.85em; color: #495057; border-bottom: 1px solid #dee2e6;\">\n <div title=\"Priority order - models are tried from top to bottom\">\n <i class=\"fa-solid fa-sort\" style=\"color: #6c757d;\"></i>\n </div>\n <div>AI Model <span style=\"color: #dc3545;\">*</span></div>\n <div>Vendor</div>\n <div>Created</div>\n <div>Actions</div>\n </div>\n \n @for (model of promptModels; track model.ID || $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 ? '#e3f2fd' : 'white')\"\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 60px; gap: 12px; padding: 12px 16px; border-bottom: 1px solid #e9ecef; align-items: start; transition: background 0.2s, opacity 0.2s;\">\n \n <!-- Drag Handle / Priority -->\n <div class=\"drag-handle\" style=\"display: flex; flex-direction: column; align-items: center; justify-content: center; color: #6c757d;\">\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 {{ i + 1 }} - Lower numbers are tried first\">#{{ i + 1 }}</span>\n }\n </div>\n \n <!-- Model Selection -->\n <div class=\"model-select\">\n @if (EditMode) {\n <kendo-dropdownlist [(ngModel)]=\"model.ModelID\"\n [name]=\"'modelId_' + i\"\n [data]=\"availableModels\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [filterable]=\"true\"\n placeholder=\"Select a model...\"\n (valueChange)=\"onModelChange($event, i)\"\n style=\"width: 100%;\">\n </kendo-dropdownlist>\n } @else {\n <span style=\"font-weight: 500;\">{{ getModelDisplayName(model.ModelID) }}</span>\n }\n </div>\n \n <!-- Vendor -->\n <div class=\"model-vendor\">\n @if (EditMode) {\n @if (model.ModelID) {\n @if (shouldShowVendorDropdown(model.ModelID)) {\n <kendo-dropdownlist [(ngModel)]=\"model.VendorID\"\n [name]=\"'vendorId_' + i\"\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 <ng-template kendoDropDownListItemTemplate let-dataItem>\n <span [style.color]=\"getVendorStatusColor(model.ModelID, dataItem.ID)\">\n {{ dataItem.Name }}\n @if (getModelVendorStatus(model.ModelID, dataItem.ID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, dataItem.ID) }})</span>\n }\n </span>\n </ng-template>\n </kendo-dropdownlist>\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: #6c757d; font-style: italic; font-size: 0.9em;\">No vendors available</span>\n }\n }\n } @else {\n <span style=\"color: #6c757d; 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: #6c757d; font-size: 0.9em;\">-</span>\n }\n }\n </div>\n \n \n <!-- Created Date -->\n <div class=\"model-created\">\n @if (model.ID) {\n <span style=\"color: #6c757d; 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 \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 <button kendoButton fillMode=\"flat\" size=\"small\"\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 kendoButton fillMode=\"flat\" size=\"small\"\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 </div>\n <button kendoButton fillMode=\"flat\" themeColor=\"error\" size=\"small\"\n (click)=\"removePromptModel(i)\"\n title=\"Remove model\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n </div>\n \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 #e9ecef; background: #f8f9fa; font-size: 0.85em; color: #6c757d;\">\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 @if (model.ConfigurationID) {\n <span><strong>Configuration:</strong> {{ model.ConfigurationID }}</span>\n }\n </div>\n \n <!-- Parallel execution fields when prompt is ModelSpecific -->\n @if (record.ParallelizationMode === 'ModelSpecific') {\n <div style=\"padding: 8px; background: #fff; border: 1px solid #dee2e6; border-radius: 4px; margin-top: 8px;\">\n <div style=\"margin-bottom: 6px; font-weight: 600; color: #495057; font-size: 0.9em;\">\n <i class=\"fa-solid fa-layer-group\"></i> Model-Specific Parallel Execution\n </div>\n \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: #495057;\">Parallel Mode</label>\n <kendo-dropdownlist [(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 </kendo-dropdownlist>\n </div>\n \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: #495057;\">Parallel Count</label>\n <kendo-numerictextbox [(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 </kendo-numerictextbox>\n </div>\n }\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: #495057;\">Config Parameter</label>\n <kendo-textbox [(ngModel)]=\"model.ParallelConfigParam\"\n [name]=\"'parallelConfigParam_' + i\"\n placeholder=\"Parameter name...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </kendo-textbox>\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 \n @if (EditMode) {\n <div class=\"add-model-row\" style=\"padding: 12px 16px; text-align: center; background: #f8f9fa; border-top: 1px solid #dee2e6;\">\n <button kendoButton fillMode=\"outline\" themeColor=\"success\" size=\"small\"\n (click)=\"addNewModel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n </div>\n }\n }\n }\n </div>\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Advanced Configuration Expansion Panel -->\n <kendo-expansionpanel \n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-cogs\" style=\"color: #6c757d;\"></i>\n Advanced Configuration\n </span>\n </ng-template>\n \n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n \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 \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 \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 \n <mj-form-field \n [record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"OutputType\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n \n </div>\n \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 \n <mj-form-field \n [record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EnableCaching\"\n Type=\"checkbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n \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: #495057; font-size: 0.9em;\">\n Result Selector Prompt\n </label>\n @if (EditMode) {\n @if (isLoadingResultSelectorData) {\n <div style=\"padding: 8px; color: #6c757d; font-style: italic;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading prompts...\n </div>\n } @else {\n <kendo-dropdowntree \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($event)\">\n </kendo-dropdowntree>\n }\n } @else {\n <span style=\"color: #495057;\">{{ getPromptDisplayName(record.ResultSelectorPromptID || '') || 'None selected' }}</span>\n }\n </div>\n </div>\n </div>\n </div>\n </kendo-expansionpanel>\n\n <!-- Output Example Expansion Panel (when OutputType = object) -->\n @if (showOutputExample) {\n <kendo-expansionpanel \n [expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: #6c757d;\"></i>\n Output Example (JSON)\n <span style=\"color: #dc3545; font-size: 0.8em; font-weight: normal;\">\u2022 Required for object output type</span>\n </span>\n </ng-template>\n \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 #dee2e6; border-radius: 4px;\">\n </mj-code-editor>\n <div style=\"margin-top: 8px; color: #6c757d; 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: #f8f9fa; border: 1px solid #dee2e6; 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 </kendo-expansionpanel>\n }\n\n <!-- Execution History Expansion Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel \n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-history\" style=\"color: #6c757d;\"></i>\n Execution History\n @if (executionHistory.length > 0) {\n <span style=\"color: #6c757d; font-weight: normal;\">({{ executionHistory.length }})</span>\n }\n </span>\n </ng-template>\n \n <!-- Custom Execution History Viewer -->\n <div style=\"padding: 16px;\">\n @if (isLoadingHistory) {\n <div style=\"text-align: center; padding: 40px; color: #6c757d;\">\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: #6c757d;\">\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: #6c757d; 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: #6c757d; font-size: 0.85em;\">Sort by:</span>\n <kendo-buttongroup selection=\"single\">\n <button kendoButton \n [selected]=\"historySortField === 'runAt'\"\n (click)=\"changeHistorySort('runAt')\"\n size=\"small\">\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 kendoButton \n [selected]=\"historySortField === 'executionTime'\"\n (click)=\"changeHistorySort('executionTime')\"\n size=\"small\">\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 kendoButton \n [selected]=\"historySortField === 'tokens'\"\n (click)=\"changeHistorySort('tokens')\"\n size=\"small\">\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 kendoButton \n [selected]=\"historySortField === 'cost'\"\n (click)=\"changeHistorySort('cost')\"\n size=\"small\">\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 </kendo-buttongroup>\n </div>\n </div>\n \n <!-- Execution History Table -->\n <div style=\"border: 1px solid #e9ecef; border-radius: 8px; overflow: hidden;\">\n <table style=\"width: 100%; border-collapse: collapse;\">\n <thead>\n <tr style=\"background: #f8f9fa; border-bottom: 2px solid #e9ecef;\">\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: #495057;\">Status</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: #495057;\">Date & Time</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: #495057;\">Model</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: #495057;\">Duration</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: #495057;\">Tokens</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: #495057;\">Cost</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: #495057;\">Type</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: #495057;\">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 #f1f3f5;\">\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: #495057;\">\n {{ run.RunAt | date:'short' }}\n </td>\n <td style=\"padding: 12px; color: #495057;\">\n <span style=\"display: flex; align-items: center; gap: 6px;\">\n <i class=\"fa-solid fa-microchip\" style=\"color: #6c757d;\"></i>\n {{ run.Model || 'Unknown' }}\n </span>\n </td>\n <td style=\"padding: 12px; color: #495057;\">\n {{ formatDuration(run.ExecutionTimeMS) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: #495057;\">\n {{ formatTokens(run.TokensUsed) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: #495057;\">\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: #e9ecef; \n color: #495057; 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 kendoButton \n fillMode=\"flat\"\n size=\"small\"\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 </kendo-expansionpanel>\n }\n\n <!-- Cache Expansion Panel -->\n @if (record.IsSaved && record.EnableCaching) {\n <kendo-expansionpanel \n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-database\" style=\"color: #6c757d;\"></i>\n Result Cache\n </span>\n </ng-template>\n \n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <mj-user-view-grid \n [Params]=\"BuildRelationshipViewParamsByEntityName('AI Result Cache','AIPromptID')\" \n [NewRecordValues]=\"NewRecordValues('AI Result Cache')\"\n [AllowLoad]=\"true\"\n [EditMode]=\"GridEditMode()\" \n style=\"height: 300px;\">\n </mj-user-view-grid>\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Related Items Expansion Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel \n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-link\" style=\"color: #6c757d;\"></i>\n Related Items\n </span>\n </ng-template>\n \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: #495057;\">AI Agents Using This Prompt</h6>\n <mj-user-view-grid \n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Agent Prompts','PromptID')\" \n [NewRecordValues]=\"NewRecordValues('MJ: AI Agent Prompts')\"\n [AllowLoad]=\"true\"\n [EditMode]=\"GridEditMode()\" \n style=\"height: 200px;\">\n </mj-user-view-grid>\n </div>\n \n <!-- Result Selector References -->\n <div>\n <h6 style=\"margin: 0 0 12px 0; color: #495057;\">Prompts Using This as Result Selector</h6>\n <mj-user-view-grid \n [Params]=\"BuildRelationshipViewParamsByEntityName('AI Prompts','ResultSelectorPromptID')\" \n [NewRecordValues]=\"NewRecordValues('AI Prompts')\"\n [AllowLoad]=\"true\"\n [EditMode]=\"GridEditMode()\" \n style=\"height: 200px;\">\n </mj-user-view-grid>\n </div>\n </div>\n </div>\n </kendo-expansionpanel>\n }\n </div>\n </div>\n </form>\n\n \n <!-- AI Prompt Test Harness -->\n @if (showTestHarness) {\n <kendo-window \n [width]=\"1200\" \n [height]=\"800\" \n [minWidth]=\"800\"\n [minHeight]=\"600\"\n [draggable]=\"true\"\n [resizable]=\"true\"\n [state]=\"'default'\"\n (close)=\"onTestHarnessVisibilityChanged(false)\"\n title=\"Run 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 </kendo-window>\n }\n</div>", styles: [".record-form-container {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\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 #e9ecef;\n}\n\n.config-item:last-child {\n border-bottom: none;\n}\n\n.template-tab-content {\n background: #fff;\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: #fff;\n border-radius: 6px;\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: rgba(0,0,0,0.02);\n border-radius: 4px;\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: #f8f9fa;\n}\n\n.history-row.even-row {\n background: white;\n}\n\n.history-row:hover {\n background: #e9ecef !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: 0 4px 12px rgba(0,0,0,0.1);\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}"] }]
|
|
2592
|
+
}], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i3.AITestHarnessDialogService }, { type: i0.ViewContainerRef }], { templateEditor: [{
|
|
2577
2593
|
type: ViewChild,
|
|
2578
2594
|
args: ['templateEditor']
|
|
2579
2595
|
}] }); })();
|
|
2580
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIPromptFormComponentExtended, { className: "AIPromptFormComponentExtended", filePath: "src/lib/custom/AIPrompts/ai-prompt-form.component.ts", lineNumber:
|
|
2596
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIPromptFormComponentExtended, { className: "AIPromptFormComponentExtended", filePath: "src/lib/custom/AIPrompts/ai-prompt-form.component.ts", lineNumber: 20 }); })();
|
|
2581
2597
|
export function LoadAIPromptFormComponentExtended() {
|
|
2582
2598
|
// This function ensures the class isn't tree-shaken and registers it with MemberJunction
|
|
2583
2599
|
}
|