@memberjunction/ng-core-entity-forms 2.80.1 → 2.82.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.
Files changed (87) hide show
  1. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +2 -2
  2. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
  3. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +4 -4
  4. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +2 -2
  5. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
  6. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +4 -4
  7. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +51 -3
  8. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  9. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +722 -163
  10. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  11. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +3 -2
  12. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
  13. package/dist/lib/custom/AIAgents/ai-agent-management.service.js +74 -46
  14. package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
  15. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +2 -2
  16. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
  17. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +4 -4
  18. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +2 -2
  19. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
  20. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +39 -32
  21. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
  22. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
  23. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +2 -2
  24. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
  25. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +2 -2
  26. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
  27. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +4 -4
  28. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +2 -2
  29. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
  30. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +29 -25
  31. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
  32. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +299 -283
  33. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  34. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +474 -456
  35. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  36. package/dist/lib/custom/Templates/templates-form.component.d.ts +5 -0
  37. package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
  38. package/dist/lib/custom/Templates/templates-form.component.js +21 -2
  39. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  40. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +6 -0
  41. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
  42. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +70 -16
  43. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  44. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts +6 -5
  45. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
  46. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +8 -22
  47. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
  48. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +5 -4
  49. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  50. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +30 -24
  51. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  52. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.d.ts +8 -4
  53. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.d.ts.map +1 -1
  54. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +39 -18
  55. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +1 -1
  56. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +20 -3
  57. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  58. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +317 -140
  59. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  60. package/dist/lib/generated/Entities/AIAgent/sections/details.component.d.ts.map +1 -1
  61. package/dist/lib/generated/Entities/AIAgent/sections/details.component.js +13 -4
  62. package/dist/lib/generated/Entities/AIAgent/sections/details.component.js.map +1 -1
  63. package/dist/lib/generated/Entities/AIAgentRun/sections/details.component.d.ts.map +1 -1
  64. package/dist/lib/generated/Entities/AIAgentRun/sections/details.component.js +13 -4
  65. package/dist/lib/generated/Entities/AIAgentRun/sections/details.component.js.map +1 -1
  66. package/dist/lib/generated/Entities/AIPrompt/sections/details.component.d.ts.map +1 -1
  67. package/dist/lib/generated/Entities/AIPrompt/sections/details.component.js +13 -4
  68. package/dist/lib/generated/Entities/AIPrompt/sections/details.component.js.map +1 -1
  69. package/dist/lib/generated/Entities/AIPromptRun/sections/details.component.d.ts.map +1 -1
  70. package/dist/lib/generated/Entities/AIPromptRun/sections/details.component.js +13 -4
  71. package/dist/lib/generated/Entities/AIPromptRun/sections/details.component.js.map +1 -1
  72. package/dist/lib/generated/Entities/Entity/sections/details.component.d.ts.map +1 -1
  73. package/dist/lib/generated/Entities/Entity/sections/details.component.js +13 -4
  74. package/dist/lib/generated/Entities/Entity/sections/details.component.js.map +1 -1
  75. package/dist/lib/generated/Entities/Query/sections/details.component.d.ts.map +1 -1
  76. package/dist/lib/generated/Entities/Query/sections/details.component.js +40 -4
  77. package/dist/lib/generated/Entities/Query/sections/details.component.js.map +1 -1
  78. package/dist/lib/generated/Entities/QueryCategory/sections/details.component.d.ts.map +1 -1
  79. package/dist/lib/generated/Entities/QueryCategory/sections/details.component.js +40 -4
  80. package/dist/lib/generated/Entities/QueryCategory/sections/details.component.js.map +1 -1
  81. package/dist/lib/generated/Entities/User/user.form.component.js +6 -6
  82. package/dist/lib/generated/Entities/User/user.form.component.js.map +1 -1
  83. package/dist/lib/shared/components/template-editor.component.d.ts +5 -0
  84. package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
  85. package/dist/lib/shared/components/template-editor.component.js +21 -2
  86. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  87. package/package.json +17 -16
@@ -41,7 +41,7 @@ const _c6 = () => ({ text: "Static Count", value: "StaticCount" });
41
41
  const _c7 = () => ({ text: "Config Param", value: "ConfigParam" });
42
42
  function AIPromptFormComponentExtended_form_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
43
43
  const _r1 = i0.ɵɵgetCurrentView();
44
- i0.ɵɵelementStart(0, "kendo-textbox", 48);
44
+ i0.ɵɵelementStart(0, "kendo-textbox", 49);
45
45
  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); });
46
46
  i0.ɵɵelementEnd();
47
47
  } if (rf & 2) {
@@ -49,10 +49,10 @@ function AIPromptFormComponentExtended_form_2_Conditional_9_Template(rf, ctx) {
49
49
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Name);
50
50
  } }
51
51
  function AIPromptFormComponentExtended_form_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
52
- i0.ɵɵelementStart(0, "h4", 49);
52
+ i0.ɵɵelementStart(0, "h4", 50);
53
53
  i0.ɵɵtext(1);
54
54
  i0.ɵɵelementEnd();
55
- i0.ɵɵelementStart(2, "span", 50);
55
+ i0.ɵɵelementStart(2, "span", 51);
56
56
  i0.ɵɵtext(3);
57
57
  i0.ɵɵelementEnd();
58
58
  } if (rf & 2) {
@@ -65,14 +65,14 @@ function AIPromptFormComponentExtended_form_2_Conditional_10_Template(rf, ctx) {
65
65
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Status, " ");
66
66
  } }
67
67
  function AIPromptFormComponentExtended_form_2_Conditional_11_Conditional_10_Template(rf, ctx) { if (rf & 1) {
68
- i0.ɵɵelementStart(0, "div", 53);
69
- i0.ɵɵelement(1, "i", 55);
68
+ i0.ɵɵelementStart(0, "div", 54);
69
+ i0.ɵɵelement(1, "i", 56);
70
70
  i0.ɵɵtext(2, " Loading types... ");
71
71
  i0.ɵɵelementEnd();
72
72
  } }
73
73
  function AIPromptFormComponentExtended_form_2_Conditional_11_Conditional_11_Template(rf, ctx) { if (rf & 1) {
74
74
  const _r4 = i0.ɵɵgetCurrentView();
75
- i0.ɵɵelementStart(0, "kendo-dropdownlist", 56);
75
+ i0.ɵɵelementStart(0, "kendo-dropdownlist", 57);
76
76
  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); });
77
77
  i0.ɵɵelementEnd();
78
78
  } if (rf & 2) {
@@ -82,18 +82,18 @@ function AIPromptFormComponentExtended_form_2_Conditional_11_Conditional_11_Temp
82
82
  } }
83
83
  function AIPromptFormComponentExtended_form_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
84
84
  const _r3 = i0.ɵɵgetCurrentView();
85
- i0.ɵɵelementStart(0, "div", 15)(1, "div")(2, "label", 46);
85
+ i0.ɵɵelementStart(0, "div", 15)(1, "div")(2, "label", 47);
86
86
  i0.ɵɵtext(3, "Status");
87
87
  i0.ɵɵelementEnd();
88
- i0.ɵɵelementStart(4, "kendo-dropdownlist", 51);
88
+ i0.ɵɵelementStart(4, "kendo-dropdownlist", 52);
89
89
  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); });
90
90
  i0.ɵɵelementEnd()();
91
- i0.ɵɵelementStart(5, "div")(6, "label", 46);
91
+ i0.ɵɵelementStart(5, "div")(6, "label", 47);
92
92
  i0.ɵɵtext(7, " Type ");
93
- i0.ɵɵelementStart(8, "span", 52);
93
+ i0.ɵɵelementStart(8, "span", 53);
94
94
  i0.ɵɵtext(9, "*");
95
95
  i0.ɵɵelementEnd()();
96
- 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
+ i0.ɵɵtemplate(10, AIPromptFormComponentExtended_form_2_Conditional_11_Conditional_10_Template, 3, 0, "div", 54)(11, AIPromptFormComponentExtended_form_2_Conditional_11_Conditional_11_Template, 1, 4, "kendo-dropdownlist", 55);
97
97
  i0.ɵɵelementEnd()();
98
98
  } if (rf & 2) {
99
99
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -105,7 +105,7 @@ function AIPromptFormComponentExtended_form_2_Conditional_11_Template(rf, ctx) {
105
105
  } }
106
106
  function AIPromptFormComponentExtended_form_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
107
107
  const _r5 = i0.ɵɵgetCurrentView();
108
- i0.ɵɵelementStart(0, "kendo-textarea", 57);
108
+ i0.ɵɵelementStart(0, "kendo-textarea", 58);
109
109
  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); });
110
110
  i0.ɵɵelementEnd();
111
111
  } if (rf & 2) {
@@ -124,7 +124,7 @@ function AIPromptFormComponentExtended_form_2_Conditional_13_Template(rf, ctx) {
124
124
  } }
125
125
  function AIPromptFormComponentExtended_form_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
126
126
  i0.ɵɵelementStart(0, "div", 19);
127
- i0.ɵɵelement(1, "i", 58);
127
+ i0.ɵɵelement(1, "i", 59);
128
128
  i0.ɵɵelementStart(2, "span", 21);
129
129
  i0.ɵɵtext(3, "Type:");
130
130
  i0.ɵɵelementEnd();
@@ -138,36 +138,50 @@ function AIPromptFormComponentExtended_form_2_Conditional_15_Template(rf, ctx) {
138
138
  } }
139
139
  function AIPromptFormComponentExtended_form_2_Conditional_28_Template(rf, ctx) { if (rf & 1) {
140
140
  i0.ɵɵelementStart(0, "div", 19);
141
- i0.ɵɵelement(1, "i", 59);
142
- i0.ɵɵelementStart(2, "span", 60);
141
+ i0.ɵɵelement(1, "i", 60);
142
+ i0.ɵɵelementStart(2, "span", 61);
143
143
  i0.ɵɵtext(3, "Caching Enabled");
144
144
  i0.ɵɵelementEnd()();
145
145
  } }
146
- function AIPromptFormComponentExtended_form_2_Conditional_31_Template(rf, ctx) { if (rf & 1) {
147
- const _r6 = i0.ɵɵgetCurrentView();
148
- i0.ɵɵelementStart(0, "button", 61);
149
- 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()); });
146
+ function AIPromptFormComponentExtended_form_2_Conditional_29_Template(rf, ctx) { if (rf & 1) {
147
+ i0.ɵɵelementStart(0, "div", 19);
150
148
  i0.ɵɵelement(1, "i", 62);
149
+ i0.ɵɵelementStart(2, "span", 21);
150
+ i0.ɵɵtext(3, "Effort Level:");
151
+ i0.ɵɵelementEnd();
152
+ i0.ɵɵelementStart(4, "span", 22);
153
+ i0.ɵɵtext(5);
154
+ i0.ɵɵelementEnd()();
155
+ } if (rf & 2) {
156
+ const ctx_r1 = i0.ɵɵnextContext(2);
157
+ i0.ɵɵadvance(5);
158
+ i0.ɵɵtextInterpolate(ctx_r1.record.EffortLevel);
159
+ } }
160
+ function AIPromptFormComponentExtended_form_2_Conditional_32_Template(rf, ctx) { if (rf & 1) {
161
+ const _r6 = i0.ɵɵgetCurrentView();
162
+ i0.ɵɵelementStart(0, "button", 63);
163
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_32_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openTestHarness()); });
164
+ i0.ɵɵelement(1, "i", 64);
151
165
  i0.ɵɵtext(2, " Run ");
152
166
  i0.ɵɵelementEnd();
153
167
  } if (rf & 2) {
154
168
  i0.ɵɵproperty("themeColor", "primary")("size", "large");
155
169
  } }
156
- function AIPromptFormComponentExtended_form_2_Conditional_32_Conditional_1_Template(rf, ctx) { if (rf & 1) {
170
+ function AIPromptFormComponentExtended_form_2_Conditional_33_Conditional_1_Template(rf, ctx) { if (rf & 1) {
157
171
  i0.ɵɵtext(0, " \u2022 Prompt must be Active");
158
172
  i0.ɵɵelement(1, "br");
159
173
  } }
160
- function AIPromptFormComponentExtended_form_2_Conditional_32_Conditional_2_Template(rf, ctx) { if (rf & 1) {
174
+ function AIPromptFormComponentExtended_form_2_Conditional_33_Conditional_2_Template(rf, ctx) { if (rf & 1) {
161
175
  i0.ɵɵtext(0, " \u2022 Template is required");
162
176
  i0.ɵɵelement(1, "br");
163
177
  } }
164
- function AIPromptFormComponentExtended_form_2_Conditional_32_Conditional_3_Template(rf, ctx) { if (rf & 1) {
178
+ function AIPromptFormComponentExtended_form_2_Conditional_33_Conditional_3_Template(rf, ctx) { if (rf & 1) {
165
179
  i0.ɵɵtext(0, " \u2022 Template not found");
166
180
  i0.ɵɵelement(1, "br");
167
181
  } }
168
- function AIPromptFormComponentExtended_form_2_Conditional_32_Template(rf, ctx) { if (rf & 1) {
182
+ function AIPromptFormComponentExtended_form_2_Conditional_33_Template(rf, ctx) { if (rf & 1) {
169
183
  i0.ɵɵelementStart(0, "div", 28);
170
- 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");
184
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_33_Conditional_1_Template, 2, 0, "br")(2, AIPromptFormComponentExtended_form_2_Conditional_33_Conditional_2_Template, 2, 0, "br")(3, AIPromptFormComponentExtended_form_2_Conditional_33_Conditional_3_Template, 2, 0, "br");
171
185
  i0.ɵɵelementEnd();
172
186
  } if (rf & 2) {
173
187
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -178,8 +192,8 @@ function AIPromptFormComponentExtended_form_2_Conditional_32_Template(rf, ctx) {
178
192
  i0.ɵɵadvance();
179
193
  i0.ɵɵconditional(!ctx_r1.template && ctx_r1.record.TemplateID ? 3 : -1);
180
194
  } }
181
- function AIPromptFormComponentExtended_form_2_ng_template_35_Conditional_3_Template(rf, ctx) { if (rf & 1) {
182
- i0.ɵɵelementStart(0, "span", 64);
195
+ function AIPromptFormComponentExtended_form_2_ng_template_36_Conditional_3_Template(rf, ctx) { if (rf & 1) {
196
+ i0.ɵɵelementStart(0, "span", 66);
183
197
  i0.ɵɵtext(1);
184
198
  i0.ɵɵelementEnd();
185
199
  } if (rf & 2) {
@@ -187,54 +201,54 @@ function AIPromptFormComponentExtended_form_2_ng_template_35_Conditional_3_Templ
187
201
  i0.ɵɵadvance();
188
202
  i0.ɵɵtextInterpolate1("\u2022 ", ctx_r1.template.Name, "");
189
203
  } }
190
- function AIPromptFormComponentExtended_form_2_ng_template_35_Template(rf, ctx) { if (rf & 1) {
191
- i0.ɵɵelementStart(0, "span", 63);
204
+ function AIPromptFormComponentExtended_form_2_ng_template_36_Template(rf, ctx) { if (rf & 1) {
205
+ i0.ɵɵelementStart(0, "span", 65);
192
206
  i0.ɵɵelement(1, "i", 23);
193
207
  i0.ɵɵtext(2, " Template Editor ");
194
- i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_2_ng_template_35_Conditional_3_Template, 2, 1, "span", 64);
208
+ i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_2_ng_template_36_Conditional_3_Template, 2, 1, "span", 66);
195
209
  i0.ɵɵelementEnd();
196
210
  } if (rf & 2) {
197
211
  const ctx_r1 = i0.ɵɵnextContext(2);
198
212
  i0.ɵɵadvance(3);
199
213
  i0.ɵɵconditional(ctx_r1.template ? 3 : -1);
200
214
  } }
201
- function AIPromptFormComponentExtended_form_2_Conditional_37_Template(rf, ctx) { if (rf & 1) {
215
+ function AIPromptFormComponentExtended_form_2_Conditional_38_Template(rf, ctx) { if (rf & 1) {
202
216
  i0.ɵɵelementStart(0, "div", 33);
203
- i0.ɵɵelement(1, "i", 65);
217
+ i0.ɵɵelement(1, "i", 67);
204
218
  i0.ɵɵtext(2, " Loading template... ");
205
219
  i0.ɵɵelementEnd();
206
220
  } }
207
- function AIPromptFormComponentExtended_form_2_Conditional_38_Conditional_7_Template(rf, ctx) { if (rf & 1) {
221
+ function AIPromptFormComponentExtended_form_2_Conditional_39_Conditional_7_Template(rf, ctx) { if (rf & 1) {
208
222
  const _r7 = i0.ɵɵgetCurrentView();
209
- i0.ɵɵelementStart(0, "button", 72);
210
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_38_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createNewTemplate()); });
211
- i0.ɵɵelement(1, "i", 73);
223
+ i0.ɵɵelementStart(0, "button", 74);
224
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_39_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createNewTemplate()); });
225
+ i0.ɵɵelement(1, "i", 75);
212
226
  i0.ɵɵtext(2, " Create New Template ");
213
227
  i0.ɵɵelementEnd();
214
228
  } if (rf & 2) {
215
229
  i0.ɵɵproperty("themeColor", "primary");
216
230
  } }
217
- function AIPromptFormComponentExtended_form_2_Conditional_38_Conditional_8_Template(rf, ctx) { if (rf & 1) {
231
+ function AIPromptFormComponentExtended_form_2_Conditional_39_Conditional_8_Template(rf, ctx) { if (rf & 1) {
218
232
  const _r8 = i0.ɵɵgetCurrentView();
219
- i0.ɵɵelementStart(0, "button", 74);
220
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_38_Conditional_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.linkExistingTemplate()); });
221
- i0.ɵɵelement(1, "i", 75);
233
+ i0.ɵɵelementStart(0, "button", 76);
234
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_39_Conditional_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.linkExistingTemplate()); });
235
+ i0.ɵɵelement(1, "i", 77);
222
236
  i0.ɵɵtext(2, " Link Existing Template ");
223
237
  i0.ɵɵelementEnd();
224
238
  } if (rf & 2) {
225
239
  i0.ɵɵproperty("fillMode", "outline");
226
240
  } }
227
- function AIPromptFormComponentExtended_form_2_Conditional_38_Template(rf, ctx) { if (rf & 1) {
241
+ function AIPromptFormComponentExtended_form_2_Conditional_39_Template(rf, ctx) { if (rf & 1) {
228
242
  i0.ɵɵelementStart(0, "div", 34);
229
- i0.ɵɵelement(1, "i", 66);
230
- i0.ɵɵelementStart(2, "h5", 67);
243
+ i0.ɵɵelement(1, "i", 68);
244
+ i0.ɵɵelementStart(2, "h5", 69);
231
245
  i0.ɵɵtext(3, "No Template Associated");
232
246
  i0.ɵɵelementEnd();
233
- i0.ɵɵelementStart(4, "p", 68);
247
+ i0.ɵɵelementStart(4, "p", 70);
234
248
  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. ");
235
249
  i0.ɵɵelementEnd();
236
- i0.ɵɵelementStart(6, "div", 69);
237
- i0.ɵɵtemplate(7, AIPromptFormComponentExtended_form_2_Conditional_38_Conditional_7_Template, 3, 1, "button", 70)(8, AIPromptFormComponentExtended_form_2_Conditional_38_Conditional_8_Template, 3, 1, "button", 71);
250
+ i0.ɵɵelementStart(6, "div", 71);
251
+ i0.ɵɵtemplate(7, AIPromptFormComponentExtended_form_2_Conditional_39_Conditional_7_Template, 3, 1, "button", 72)(8, AIPromptFormComponentExtended_form_2_Conditional_39_Conditional_8_Template, 3, 1, "button", 73);
238
252
  i0.ɵɵelementEnd()();
239
253
  } if (rf & 2) {
240
254
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -243,32 +257,32 @@ function AIPromptFormComponentExtended_form_2_Conditional_38_Template(rf, ctx) {
243
257
  i0.ɵɵadvance();
244
258
  i0.ɵɵconditional(ctx_r1.UserCanReadTemplates ? 8 : -1);
245
259
  } }
246
- function AIPromptFormComponentExtended_form_2_Conditional_39_Conditional_10_Template(rf, ctx) { if (rf & 1) {
260
+ function AIPromptFormComponentExtended_form_2_Conditional_40_Conditional_10_Template(rf, ctx) { if (rf & 1) {
247
261
  const _r10 = i0.ɵɵgetCurrentView();
248
- i0.ɵɵelementStart(0, "button", 72);
249
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_39_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createNewTemplate()); });
250
- i0.ɵɵelement(1, "i", 73);
262
+ i0.ɵɵelementStart(0, "button", 74);
263
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_40_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createNewTemplate()); });
264
+ i0.ɵɵelement(1, "i", 75);
251
265
  i0.ɵɵtext(2, " Create New Template ");
252
266
  i0.ɵɵelementEnd();
253
267
  } if (rf & 2) {
254
268
  i0.ɵɵproperty("themeColor", "primary");
255
269
  } }
256
- function AIPromptFormComponentExtended_form_2_Conditional_39_Template(rf, ctx) { if (rf & 1) {
270
+ function AIPromptFormComponentExtended_form_2_Conditional_40_Template(rf, ctx) { if (rf & 1) {
257
271
  const _r9 = i0.ɵɵgetCurrentView();
258
272
  i0.ɵɵelementStart(0, "div", 35);
259
- i0.ɵɵelement(1, "i", 76);
260
- i0.ɵɵelementStart(2, "h5", 77);
273
+ i0.ɵɵelement(1, "i", 78);
274
+ i0.ɵɵelementStart(2, "h5", 79);
261
275
  i0.ɵɵtext(3, "Template Not Found");
262
276
  i0.ɵɵelementEnd();
263
- i0.ɵɵelementStart(4, "p", 68);
277
+ i0.ɵɵelementStart(4, "p", 70);
264
278
  i0.ɵɵtext(5, " The referenced template could not be loaded. It may have been deleted or moved. ");
265
279
  i0.ɵɵelementEnd();
266
- i0.ɵɵelementStart(6, "div", 69)(7, "button", 74);
267
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_39_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.loadTemplate()); });
268
- i0.ɵɵelement(8, "i", 78);
280
+ i0.ɵɵelementStart(6, "div", 71)(7, "button", 76);
281
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_40_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.loadTemplate()); });
282
+ i0.ɵɵelement(8, "i", 80);
269
283
  i0.ɵɵtext(9, " Retry Loading ");
270
284
  i0.ɵɵelementEnd();
271
- i0.ɵɵtemplate(10, AIPromptFormComponentExtended_form_2_Conditional_39_Conditional_10_Template, 3, 1, "button", 70);
285
+ i0.ɵɵtemplate(10, AIPromptFormComponentExtended_form_2_Conditional_40_Conditional_10_Template, 3, 1, "button", 72);
272
286
  i0.ɵɵelementEnd()();
273
287
  } if (rf & 2) {
274
288
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -277,29 +291,29 @@ function AIPromptFormComponentExtended_form_2_Conditional_39_Template(rf, ctx) {
277
291
  i0.ɵɵadvance(3);
278
292
  i0.ɵɵconditional(ctx_r1.UserCanCreateTemplates ? 10 : -1);
279
293
  } }
280
- function AIPromptFormComponentExtended_form_2_Conditional_40_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
294
+ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
281
295
  const _r12 = i0.ɵɵgetCurrentView();
282
- i0.ɵɵelementStart(0, "button", 84);
283
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_40_Conditional_1_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.linkExistingTemplate()); });
284
- i0.ɵɵelement(1, "i", 85);
296
+ i0.ɵɵelementStart(0, "button", 86);
297
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_1_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.linkExistingTemplate()); });
298
+ i0.ɵɵelement(1, "i", 87);
285
299
  i0.ɵɵtext(2, " Change Template ");
286
300
  i0.ɵɵelementEnd();
287
301
  } if (rf & 2) {
288
302
  i0.ɵɵproperty("fillMode", "outline")("size", "small");
289
303
  } }
290
- function AIPromptFormComponentExtended_form_2_Conditional_40_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
304
+ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
291
305
  const _r13 = i0.ɵɵgetCurrentView();
292
- i0.ɵɵelementStart(0, "button", 86);
293
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_40_Conditional_1_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.openTemplateInNewWindow()); });
294
- i0.ɵɵelement(1, "i", 87);
306
+ i0.ɵɵelementStart(0, "button", 88);
307
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_1_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.openTemplateInNewWindow()); });
308
+ i0.ɵɵelement(1, "i", 89);
295
309
  i0.ɵɵtext(2, " Open in New Window ");
296
310
  i0.ɵɵelementEnd();
297
311
  } if (rf & 2) {
298
312
  i0.ɵɵproperty("fillMode", "outline")("size", "small");
299
313
  } }
300
- function AIPromptFormComponentExtended_form_2_Conditional_40_Conditional_1_Template(rf, ctx) { if (rf & 1) {
301
- i0.ɵɵelementStart(0, "div", 79);
302
- i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_40_Conditional_1_Conditional_1_Template, 3, 2, "button", 82)(2, AIPromptFormComponentExtended_form_2_Conditional_40_Conditional_1_Conditional_2_Template, 3, 2, "button", 83);
314
+ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_1_Template(rf, ctx) { if (rf & 1) {
315
+ i0.ɵɵelementStart(0, "div", 81);
316
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_1_Conditional_1_Template, 3, 2, "button", 84)(2, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_1_Conditional_2_Template, 3, 2, "button", 85);
303
317
  i0.ɵɵelementEnd();
304
318
  } if (rf & 2) {
305
319
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -308,12 +322,12 @@ function AIPromptFormComponentExtended_form_2_Conditional_40_Conditional_1_Templ
308
322
  i0.ɵɵadvance();
309
323
  i0.ɵɵconditional(ctx_r1.UserCanReadTemplates ? 2 : -1);
310
324
  } }
311
- function AIPromptFormComponentExtended_form_2_Conditional_40_Template(rf, ctx) { if (rf & 1) {
325
+ function AIPromptFormComponentExtended_form_2_Conditional_41_Template(rf, ctx) { if (rf & 1) {
312
326
  const _r11 = i0.ɵɵgetCurrentView();
313
327
  i0.ɵɵelementStart(0, "div", 36);
314
- i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_40_Conditional_1_Template, 3, 2, "div", 79);
315
- i0.ɵɵelementStart(2, "div", 80)(3, "mj-template-editor", 81, 1);
316
- i0.ɵɵlistener("contentChange", function AIPromptFormComponentExtended_form_2_Conditional_40_Template_mj_template_editor_contentChange_3_listener($event) { i0.ɵɵrestoreView(_r11); 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_3_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTemplateRun($event)); });
328
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_1_Template, 3, 2, "div", 81);
329
+ i0.ɵɵelementStart(2, "div", 82)(3, "mj-template-editor", 83, 1);
330
+ i0.ɵɵlistener("contentChange", function AIPromptFormComponentExtended_form_2_Conditional_41_Template_mj_template_editor_contentChange_3_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTemplateContentChange($event)); })("runTemplate", function AIPromptFormComponentExtended_form_2_Conditional_41_Template_mj_template_editor_runTemplate_3_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTemplateRun($event)); });
317
331
  i0.ɵɵelementEnd()()();
318
332
  } if (rf & 2) {
319
333
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -322,8 +336,8 @@ function AIPromptFormComponentExtended_form_2_Conditional_40_Template(rf, ctx) {
322
336
  i0.ɵɵadvance(2);
323
337
  i0.ɵɵproperty("template", ctx_r1.template)("config", ctx_r1.templateEditorConfig);
324
338
  } }
325
- function AIPromptFormComponentExtended_form_2_Conditional_41_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
326
- i0.ɵɵelementStart(0, "span", 91);
339
+ function AIPromptFormComponentExtended_form_2_Conditional_42_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
340
+ i0.ɵɵelementStart(0, "span", 93);
327
341
  i0.ɵɵtext(1);
328
342
  i0.ɵɵelementEnd();
329
343
  } if (rf & 2) {
@@ -331,13 +345,13 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_ng_template_1_Condi
331
345
  i0.ɵɵadvance();
332
346
  i0.ɵɵtextInterpolate1(" ", ctx_r1.promptModels.length, " ");
333
347
  } }
334
- function AIPromptFormComponentExtended_form_2_Conditional_41_ng_template_1_Template(rf, ctx) { if (rf & 1) {
335
- i0.ɵɵelementStart(0, "span", 63);
336
- i0.ɵɵelement(1, "i", 90);
348
+ function AIPromptFormComponentExtended_form_2_Conditional_42_ng_template_1_Template(rf, ctx) { if (rf & 1) {
349
+ i0.ɵɵelementStart(0, "span", 65);
350
+ i0.ɵɵelement(1, "i", 92);
337
351
  i0.ɵɵtext(2, " Models ");
338
- i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_2_Conditional_41_ng_template_1_Conditional_3_Template, 2, 1, "span", 91);
339
- i0.ɵɵelementStart(4, "span", 92);
340
- i0.ɵɵelement(5, "i", 93);
352
+ i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_2_Conditional_42_ng_template_1_Conditional_3_Template, 2, 1, "span", 93);
353
+ i0.ɵɵelementStart(4, "span", 94);
354
+ i0.ɵɵelement(5, "i", 95);
341
355
  i0.ɵɵtext(6, " Priority order (first available model will be used) ");
342
356
  i0.ɵɵelementEnd()();
343
357
  } if (rf & 2) {
@@ -345,64 +359,64 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_ng_template_1_Templ
345
359
  i0.ɵɵadvance(3);
346
360
  i0.ɵɵconditional(ctx_r1.promptModels.length > 0 ? 3 : -1);
347
361
  } }
348
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_4_Template(rf, ctx) { if (rf & 1) {
349
- i0.ɵɵelementStart(0, "div", 89);
350
- i0.ɵɵelement(1, "i", 55);
362
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_4_Template(rf, ctx) { if (rf & 1) {
363
+ i0.ɵɵelementStart(0, "div", 91);
364
+ i0.ɵɵelement(1, "i", 56);
351
365
  i0.ɵɵtext(2, " Loading models... ");
352
366
  i0.ɵɵelementEnd();
353
367
  } }
354
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_0_Conditional_3_Template(rf, ctx) { if (rf & 1) {
368
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_0_Conditional_3_Template(rf, ctx) { if (rf & 1) {
355
369
  const _r14 = i0.ɵɵgetCurrentView();
356
- i0.ɵɵelementStart(0, "div", 96)(1, "button", 97);
357
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_0_Conditional_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
358
- i0.ɵɵelement(2, "i", 73);
370
+ i0.ɵɵelementStart(0, "div", 98)(1, "button", 99);
371
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_0_Conditional_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
372
+ i0.ɵɵelement(2, "i", 75);
359
373
  i0.ɵɵtext(3, " Add Model ");
360
374
  i0.ɵɵelementEnd()();
361
375
  } }
362
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_0_Template(rf, ctx) { if (rf & 1) {
363
- i0.ɵɵelementStart(0, "div", 94);
364
- i0.ɵɵelement(1, "i", 95);
376
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_0_Template(rf, ctx) { if (rf & 1) {
377
+ i0.ɵɵelementStart(0, "div", 96);
378
+ i0.ɵɵelement(1, "i", 97);
365
379
  i0.ɵɵtext(2, " No models configured ");
366
- i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_0_Conditional_3_Template, 4, 0, "div", 96);
380
+ i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_0_Conditional_3_Template, 4, 0, "div", 98);
367
381
  i0.ɵɵelementEnd();
368
382
  } if (rf & 2) {
369
383
  const ctx_r1 = i0.ɵɵnextContext(4);
370
384
  i0.ɵɵadvance(3);
371
385
  i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.UserCanCreatePromptModels ? 3 : -1);
372
386
  } }
373
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
374
- i0.ɵɵelementStart(0, "div", 98);
375
- i0.ɵɵelement(1, "i", 103);
387
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
388
+ i0.ɵɵelementStart(0, "div", 100);
389
+ i0.ɵɵelement(1, "i", 105);
376
390
  i0.ɵɵtext(2, " Models are tried in priority order (highest priority first). The first available model that meets requirements will be used for execution. ");
377
391
  i0.ɵɵelementEnd();
378
392
  } }
379
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
380
- i0.ɵɵelement(0, "i", 119);
381
- i0.ɵɵelementStart(1, "span", 120);
393
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
394
+ i0.ɵɵelement(0, "i", 121);
395
+ i0.ɵɵelementStart(1, "span", 122);
382
396
  i0.ɵɵtext(2);
383
397
  i0.ɵɵelementEnd();
384
398
  } if (rf & 2) {
385
- const ɵ$index_302_r16 = i0.ɵɵnextContext().$index;
399
+ const ɵ$index_313_r16 = i0.ɵɵnextContext().$index;
386
400
  i0.ɵɵadvance(2);
387
- i0.ɵɵtextInterpolate1("#", ɵ$index_302_r16 + 1, "");
401
+ i0.ɵɵtextInterpolate1("#", ɵ$index_313_r16 + 1, "");
388
402
  } }
389
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_3_Template(rf, ctx) { if (rf & 1) {
390
- i0.ɵɵelementStart(0, "span", 106);
403
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_3_Template(rf, ctx) { if (rf & 1) {
404
+ i0.ɵɵelementStart(0, "span", 108);
391
405
  i0.ɵɵtext(1);
392
406
  i0.ɵɵelementEnd();
393
407
  } if (rf & 2) {
394
408
  const ctx_r16 = i0.ɵɵnextContext();
395
409
  const model_r18 = ctx_r16.$implicit;
396
- const ɵ$index_302_r16 = ctx_r16.$index;
410
+ const ɵ$index_313_r16 = ctx_r16.$index;
397
411
  i0.ɵɵpropertyInterpolate1("title", "Priority ", model_r18.Priority, " - Higher priority numbers are tried first");
398
412
  i0.ɵɵadvance();
399
- i0.ɵɵtextInterpolate1("#", ɵ$index_302_r16 + 1, "");
413
+ i0.ɵɵtextInterpolate1("#", ɵ$index_313_r16 + 1, "");
400
414
  } }
401
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_5_Template(rf, ctx) { if (rf & 1) {
415
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template(rf, ctx) { if (rf & 1) {
402
416
  const _r19 = i0.ɵɵgetCurrentView();
403
- i0.ɵɵelementStart(0, "kendo-dropdownlist", 121);
404
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_5_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r19); const model_r18 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(model_r18.ModelID, $event) || (model_r18.ModelID = $event); return i0.ɵɵresetView($event); });
405
- i0.ɵɵlistener("valueChange", function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_5_Template_kendo_dropdownlist_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r19); const ɵ$index_302_r16 = i0.ɵɵnextContext().$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onModelChange($event, ɵ$index_302_r16)); });
417
+ i0.ɵɵelementStart(0, "kendo-dropdownlist", 123);
418
+ i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r19); const model_r18 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(model_r18.ModelID, $event) || (model_r18.ModelID = $event); return i0.ɵɵresetView($event); });
419
+ i0.ɵɵlistener("valueChange", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template_kendo_dropdownlist_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r19); const ɵ$index_313_r16 = i0.ɵɵnextContext().$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onModelChange($event, ɵ$index_313_r16)); });
406
420
  i0.ɵɵelementEnd();
407
421
  } if (rf & 2) {
408
422
  const model_r18 = i0.ɵɵnextContext().$implicit;
@@ -410,7 +424,7 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Condi
410
424
  i0.ɵɵtwoWayProperty("ngModel", model_r18.ModelID);
411
425
  i0.ɵɵproperty("name", "modelId_" + ctx_r1.getModelTrackId(model_r18))("data", ctx_r1.availableModels)("valuePrimitive", true)("filterable", true);
412
426
  } }
413
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_6_Template(rf, ctx) { if (rf & 1) {
427
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_6_Template(rf, ctx) { if (rf & 1) {
414
428
  i0.ɵɵelementStart(0, "span", 24);
415
429
  i0.ɵɵtext(1);
416
430
  i0.ɵɵelementEnd();
@@ -420,8 +434,8 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Condi
420
434
  i0.ɵɵadvance();
421
435
  i0.ɵɵtextInterpolate(ctx_r1.getModelDisplayName(model_r18.ModelID));
422
436
  } }
423
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
424
- i0.ɵɵelementStart(0, "span", 126);
437
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
438
+ i0.ɵɵelementStart(0, "span", 128);
425
439
  i0.ɵɵtext(1);
426
440
  i0.ɵɵelementEnd();
427
441
  } if (rf & 2) {
@@ -431,10 +445,10 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Condi
431
445
  i0.ɵɵadvance();
432
446
  i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r18.ModelID, dataItem_r21.ID), ")");
433
447
  } }
434
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Template(rf, ctx) { if (rf & 1) {
448
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Template(rf, ctx) { if (rf & 1) {
435
449
  i0.ɵɵelementStart(0, "span");
436
450
  i0.ɵɵtext(1);
437
- i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Conditional_2_Template, 2, 1, "span", 126);
451
+ i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Conditional_2_Template, 2, 1, "span", 128);
438
452
  i0.ɵɵelementEnd();
439
453
  } if (rf & 2) {
440
454
  const dataItem_r21 = ctx.$implicit;
@@ -446,11 +460,11 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Condi
446
460
  i0.ɵɵadvance();
447
461
  i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r18.ModelID, dataItem_r21.ID) !== "Active" ? 2 : -1);
448
462
  } }
449
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template(rf, ctx) { if (rf & 1) {
463
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template(rf, ctx) { if (rf & 1) {
450
464
  const _r20 = i0.ɵɵgetCurrentView();
451
- i0.ɵɵelementStart(0, "kendo-dropdownlist", 124);
452
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r20); const model_r18 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r18.VendorID, $event) || (model_r18.VendorID = $event); return i0.ɵɵresetView($event); });
453
- i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Template, 3, 4, "ng-template", 125);
465
+ i0.ɵɵelementStart(0, "kendo-dropdownlist", 126);
466
+ i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r20); const model_r18 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r18.VendorID, $event) || (model_r18.VendorID = $event); return i0.ɵɵresetView($event); });
467
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Template, 3, 4, "ng-template", 127);
454
468
  i0.ɵɵelementEnd();
455
469
  } if (rf & 2) {
456
470
  const model_r18 = i0.ɵɵnextContext(3).$implicit;
@@ -458,8 +472,8 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Condi
458
472
  i0.ɵɵtwoWayProperty("ngModel", model_r18.VendorID);
459
473
  i0.ɵɵproperty("name", "vendorId_" + ctx_r1.getModelTrackId(model_r18))("data", ctx_r1.getVendorsForModelSync(model_r18.ModelID))("valuePrimitive", true)("filterable", true);
460
474
  } }
461
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
462
- i0.ɵɵelementStart(0, "span", 126);
475
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
476
+ i0.ɵɵelementStart(0, "span", 128);
463
477
  i0.ɵɵtext(1);
464
478
  i0.ɵɵelementEnd();
465
479
  } if (rf & 2) {
@@ -468,10 +482,10 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Condi
468
482
  i0.ɵɵadvance();
469
483
  i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r18.ModelID, ctx_r1.getVendorsForModelSync(model_r18.ModelID)[0].ID), ")");
470
484
  } }
471
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
472
- i0.ɵɵelementStart(0, "span", 128);
485
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
486
+ i0.ɵɵelementStart(0, "span", 130);
473
487
  i0.ɵɵtext(1);
474
- i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Conditional_2_Template, 2, 1, "span", 126);
488
+ i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Conditional_2_Template, 2, 1, "span", 128);
475
489
  i0.ɵɵelementEnd();
476
490
  } if (rf & 2) {
477
491
  const model_r18 = i0.ɵɵnextContext(4).$implicit;
@@ -482,38 +496,38 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Condi
482
496
  i0.ɵɵadvance();
483
497
  i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r18.ModelID, ctx_r1.getVendorsForModelSync(model_r18.ModelID)[0].ID) !== "Active" ? 2 : -1);
484
498
  } }
485
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
486
- i0.ɵɵelementStart(0, "span", 122);
499
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
500
+ i0.ɵɵelementStart(0, "span", 124);
487
501
  i0.ɵɵtext(1, "No vendors available");
488
502
  i0.ɵɵelementEnd();
489
503
  } }
490
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
491
- i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template, 3, 4, "span", 127)(1, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template, 2, 0, "span", 122);
504
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
505
+ i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template, 3, 4, "span", 129)(1, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template, 2, 0, "span", 124);
492
506
  } if (rf & 2) {
493
507
  const model_r18 = i0.ɵɵnextContext(3).$implicit;
494
508
  const ctx_r1 = i0.ɵɵnextContext(5);
495
509
  i0.ɵɵconditional(ctx_r1.getVendorsForModelSync(model_r18.ModelID).length === 1 ? 0 : 1);
496
510
  } }
497
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Template(rf, ctx) { if (rf & 1) {
498
- i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template, 2, 5, "kendo-dropdownlist", 123)(1, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Template, 2, 1);
511
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Template(rf, ctx) { if (rf & 1) {
512
+ i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template, 2, 5, "kendo-dropdownlist", 125)(1, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Template, 2, 1);
499
513
  } if (rf & 2) {
500
514
  const model_r18 = i0.ɵɵnextContext(2).$implicit;
501
515
  const ctx_r1 = i0.ɵɵnextContext(5);
502
516
  i0.ɵɵconditional(ctx_r1.shouldShowVendorDropdown(model_r18.ModelID) ? 0 : 1);
503
517
  } }
504
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
505
- i0.ɵɵelementStart(0, "span", 122);
518
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
519
+ i0.ɵɵelementStart(0, "span", 124);
506
520
  i0.ɵɵtext(1, "Select model first");
507
521
  i0.ɵɵelementEnd();
508
522
  } }
509
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_8_Template(rf, ctx) { if (rf & 1) {
510
- i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Template, 2, 1)(1, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_1_Template, 2, 0, "span", 122);
523
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Template(rf, ctx) { if (rf & 1) {
524
+ i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Template, 2, 1)(1, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_1_Template, 2, 0, "span", 124);
511
525
  } if (rf & 2) {
512
526
  const model_r18 = i0.ɵɵnextContext().$implicit;
513
527
  i0.ɵɵconditional(model_r18.ModelID ? 0 : 1);
514
528
  } }
515
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
516
- i0.ɵɵelementStart(0, "span", 126);
529
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
530
+ i0.ɵɵelementStart(0, "span", 128);
517
531
  i0.ɵɵtext(1);
518
532
  i0.ɵɵelementEnd();
519
533
  } if (rf & 2) {
@@ -522,10 +536,10 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Condi
522
536
  i0.ɵɵadvance();
523
537
  i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r18.ModelID, model_r18.VendorID), ")");
524
538
  } }
525
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
526
- i0.ɵɵelementStart(0, "span", 111);
539
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
540
+ i0.ɵɵelementStart(0, "span", 113);
527
541
  i0.ɵɵtext(1);
528
- i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Conditional_2_Template, 2, 1, "span", 126);
542
+ i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Conditional_2_Template, 2, 1, "span", 128);
529
543
  i0.ɵɵelementEnd();
530
544
  } if (rf & 2) {
531
545
  const model_r18 = i0.ɵɵnextContext(2).$implicit;
@@ -536,34 +550,34 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Condi
536
550
  i0.ɵɵadvance();
537
551
  i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r18.ModelID, model_r18.VendorID) !== "Active" ? 2 : -1);
538
552
  } }
539
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
540
- i0.ɵɵelementStart(0, "span", 130);
553
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
554
+ i0.ɵɵelementStart(0, "span", 132);
541
555
  i0.ɵɵtext(1, "-");
542
556
  i0.ɵɵelementEnd();
543
557
  } }
544
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_9_Template(rf, ctx) { if (rf & 1) {
545
- i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Template, 3, 4, "span", 129)(1, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_1_Template, 2, 0, "span", 130);
558
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Template(rf, ctx) { if (rf & 1) {
559
+ i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Template, 3, 4, "span", 131)(1, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_1_Template, 2, 0, "span", 132);
546
560
  } if (rf & 2) {
547
561
  const model_r18 = i0.ɵɵnextContext().$implicit;
548
562
  i0.ɵɵconditional(model_r18.VendorID && model_r18.ModelID ? 0 : 1);
549
563
  } }
550
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_0_Template(rf, ctx) { if (rf & 1) {
551
- i0.ɵɵelementStart(0, "div", 131);
552
- i0.ɵɵelement(1, "i", 55);
564
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_0_Template(rf, ctx) { if (rf & 1) {
565
+ i0.ɵɵelementStart(0, "div", 133);
566
+ i0.ɵɵelement(1, "i", 56);
553
567
  i0.ɵɵtext(2, " Loading... ");
554
568
  i0.ɵɵelementEnd();
555
569
  } }
556
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_ng_template_1_Template(rf, ctx) { if (rf & 1) {
557
- i0.ɵɵelementStart(0, "div", 135);
570
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_ng_template_1_Template(rf, ctx) { if (rf & 1) {
571
+ i0.ɵɵelementStart(0, "div", 137);
558
572
  i0.ɵɵtext(1, " No configurations available ");
559
573
  i0.ɵɵelementEnd();
560
574
  } }
561
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
575
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
562
576
  const _r22 = i0.ɵɵgetCurrentView();
563
- i0.ɵɵelementStart(0, "kendo-dropdownlist", 133);
564
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r22); const model_r18 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵtwoWayBindingSet(model_r18.ConfigurationID, $event) || (model_r18.ConfigurationID = $event); return i0.ɵɵresetView($event); });
565
- i0.ɵɵlistener("valueChange", function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template_kendo_dropdownlist_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r22); const ɵ$index_302_r16 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onConfigurationChange($event, ɵ$index_302_r16)); });
566
- i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_ng_template_1_Template, 2, 0, "ng-template", 134);
577
+ i0.ɵɵelementStart(0, "kendo-dropdownlist", 135);
578
+ i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r22); const model_r18 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵtwoWayBindingSet(model_r18.ConfigurationID, $event) || (model_r18.ConfigurationID = $event); return i0.ɵɵresetView($event); });
579
+ i0.ɵɵlistener("valueChange", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template_kendo_dropdownlist_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r22); const ɵ$index_313_r16 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onConfigurationChange($event, ɵ$index_313_r16)); });
580
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_ng_template_1_Template, 2, 0, "ng-template", 136);
567
581
  i0.ɵɵelementEnd();
568
582
  } if (rf & 2) {
569
583
  const model_r18 = i0.ɵɵnextContext(2).$implicit;
@@ -571,14 +585,14 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Condi
571
585
  i0.ɵɵtwoWayProperty("ngModel", model_r18.ConfigurationID);
572
586
  i0.ɵɵproperty("name", "configurationId_" + ctx_r1.getModelTrackId(model_r18))("data", ctx_r1.availableConfigurations)("valuePrimitive", true)("filterable", true);
573
587
  } }
574
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_11_Template(rf, ctx) { if (rf & 1) {
575
- i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_0_Template, 3, 0, "div", 131)(1, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template, 2, 5, "kendo-dropdownlist", 132);
588
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Template(rf, ctx) { if (rf & 1) {
589
+ i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_0_Template, 3, 0, "div", 133)(1, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template, 2, 5, "kendo-dropdownlist", 134);
576
590
  } if (rf & 2) {
577
591
  const ctx_r1 = i0.ɵɵnextContext(6);
578
592
  i0.ɵɵconditional(ctx_r1.isLoadingConfigurations ? 0 : 1);
579
593
  } }
580
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_12_Template(rf, ctx) { if (rf & 1) {
581
- i0.ɵɵelementStart(0, "span", 111);
594
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_12_Template(rf, ctx) { if (rf & 1) {
595
+ i0.ɵɵelementStart(0, "span", 113);
582
596
  i0.ɵɵtext(1);
583
597
  i0.ɵɵelementEnd();
584
598
  } if (rf & 2) {
@@ -587,8 +601,8 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Condi
587
601
  i0.ɵɵadvance();
588
602
  i0.ɵɵtextInterpolate(ctx_r1.getConfigurationDisplayName(model_r18.ConfigurationID));
589
603
  } }
590
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_14_Template(rf, ctx) { if (rf & 1) {
591
- i0.ɵɵelementStart(0, "span", 113);
604
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_14_Template(rf, ctx) { if (rf & 1) {
605
+ i0.ɵɵelementStart(0, "span", 115);
592
606
  i0.ɵɵtext(1);
593
607
  i0.ɵɵpipe(2, "date");
594
608
  i0.ɵɵelementEnd();
@@ -597,40 +611,40 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Condi
597
611
  i0.ɵɵadvance();
598
612
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(2, 1, model_r18.__mj_CreatedAt, "short"));
599
613
  } }
600
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_15_Template(rf, ctx) { if (rf & 1) {
601
- i0.ɵɵelementStart(0, "span", 114);
614
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_15_Template(rf, ctx) { if (rf & 1) {
615
+ i0.ɵɵelementStart(0, "span", 116);
602
616
  i0.ɵɵtext(1, "New");
603
617
  i0.ɵɵelementEnd();
604
618
  } }
605
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template(rf, ctx) { if (rf & 1) {
619
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template(rf, ctx) { if (rf & 1) {
606
620
  const _r23 = i0.ɵɵgetCurrentView();
607
- i0.ɵɵelementStart(0, "button", 138);
608
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r23); const ɵ$index_302_r16 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelUp(ɵ$index_302_r16)); });
609
- i0.ɵɵelement(1, "i", 139);
621
+ i0.ɵɵelementStart(0, "button", 140);
622
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r23); const ɵ$index_313_r16 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelUp(ɵ$index_313_r16)); });
623
+ i0.ɵɵelement(1, "i", 141);
610
624
  i0.ɵɵelementEnd();
611
- i0.ɵɵelementStart(2, "button", 140);
612
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r23); const ɵ$index_302_r16 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelDown(ɵ$index_302_r16)); });
613
- i0.ɵɵelement(3, "i", 141);
625
+ i0.ɵɵelementStart(2, "button", 142);
626
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r23); const ɵ$index_313_r16 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelDown(ɵ$index_313_r16)); });
627
+ i0.ɵɵelement(3, "i", 143);
614
628
  i0.ɵɵelementEnd();
615
629
  } if (rf & 2) {
616
- const ɵ$index_302_r16 = i0.ɵɵnextContext(2).$index;
630
+ const ɵ$index_313_r16 = i0.ɵɵnextContext(2).$index;
617
631
  const ctx_r1 = i0.ɵɵnextContext(5);
618
- i0.ɵɵproperty("disabled", ɵ$index_302_r16 === 0);
632
+ i0.ɵɵproperty("disabled", ɵ$index_313_r16 === 0);
619
633
  i0.ɵɵadvance(2);
620
- i0.ɵɵproperty("disabled", ɵ$index_302_r16 === ctx_r1.promptModels.length - 1);
634
+ i0.ɵɵproperty("disabled", ɵ$index_313_r16 === ctx_r1.promptModels.length - 1);
621
635
  } }
622
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
636
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
623
637
  const _r24 = i0.ɵɵgetCurrentView();
624
- i0.ɵɵelementStart(0, "button", 142);
625
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r24); const ɵ$index_302_r16 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.removePromptModel(ɵ$index_302_r16)); });
626
- i0.ɵɵelement(1, "i", 143);
638
+ i0.ɵɵelementStart(0, "button", 144);
639
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r24); const ɵ$index_313_r16 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.removePromptModel(ɵ$index_313_r16)); });
640
+ i0.ɵɵelement(1, "i", 145);
627
641
  i0.ɵɵelementEnd();
628
642
  } }
629
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_17_Template(rf, ctx) { if (rf & 1) {
630
- i0.ɵɵelementStart(0, "div", 136);
631
- i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template, 4, 2);
643
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Template(rf, ctx) { if (rf & 1) {
644
+ i0.ɵɵelementStart(0, "div", 138);
645
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template, 4, 2);
632
646
  i0.ɵɵelementEnd();
633
- i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template, 2, 0, "button", 137);
647
+ i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template, 2, 0, "button", 139);
634
648
  } if (rf & 2) {
635
649
  const ctx_r1 = i0.ɵɵnextContext(6);
636
650
  i0.ɵɵadvance();
@@ -638,7 +652,7 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Condi
638
652
  i0.ɵɵadvance();
639
653
  i0.ɵɵconditional(ctx_r1.UserCanDeletePromptModels ? 2 : -1);
640
654
  } }
641
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_22_Template(rf, ctx) { if (rf & 1) {
655
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_22_Template(rf, ctx) { if (rf & 1) {
642
656
  i0.ɵɵelementStart(0, "span")(1, "strong");
643
657
  i0.ɵɵtext(2, "Status:");
644
658
  i0.ɵɵelementEnd();
@@ -649,61 +663,61 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Condi
649
663
  i0.ɵɵadvance(3);
650
664
  i0.ɵɵtextInterpolate1(" ", model_r18.Status, "");
651
665
  } }
652
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template(rf, ctx) { if (rf & 1) {
666
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template(rf, ctx) { if (rf & 1) {
653
667
  const _r26 = i0.ɵɵgetCurrentView();
654
- i0.ɵɵelementStart(0, "div")(1, "label", 148);
668
+ i0.ɵɵelementStart(0, "div")(1, "label", 150);
655
669
  i0.ɵɵtext(2, "Parallel Count");
656
670
  i0.ɵɵelementEnd();
657
- i0.ɵɵelementStart(3, "kendo-numerictextbox", 150);
658
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template_kendo_numerictextbox_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r26); const model_r18 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r18.ParallelCount, $event) || (model_r18.ParallelCount = $event); return i0.ɵɵresetView($event); });
671
+ i0.ɵɵelementStart(3, "kendo-numerictextbox", 152);
672
+ i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template_kendo_numerictextbox_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r26); const model_r18 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r18.ParallelCount, $event) || (model_r18.ParallelCount = $event); return i0.ɵɵresetView($event); });
659
673
  i0.ɵɵelementEnd()();
660
674
  } if (rf & 2) {
661
675
  const ctx_r16 = i0.ɵɵnextContext(3);
662
676
  const model_r18 = ctx_r16.$implicit;
663
- const ɵ$index_302_r16 = ctx_r16.$index;
677
+ const ɵ$index_313_r16 = ctx_r16.$index;
664
678
  i0.ɵɵadvance(3);
665
679
  i0.ɵɵtwoWayProperty("ngModel", model_r18.ParallelCount);
666
- i0.ɵɵproperty("name", "parallelCount_" + ɵ$index_302_r16)("min", 1)("step", 1)("format", "n0");
680
+ i0.ɵɵproperty("name", "parallelCount_" + ɵ$index_313_r16)("min", 1)("step", 1)("format", "n0");
667
681
  } }
668
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template(rf, ctx) { if (rf & 1) {
682
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template(rf, ctx) { if (rf & 1) {
669
683
  const _r27 = i0.ɵɵgetCurrentView();
670
- i0.ɵɵelementStart(0, "div")(1, "label", 148);
684
+ i0.ɵɵelementStart(0, "div")(1, "label", 150);
671
685
  i0.ɵɵtext(2, "Config Parameter");
672
686
  i0.ɵɵelementEnd();
673
- i0.ɵɵelementStart(3, "kendo-textbox", 151);
674
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template_kendo_textbox_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r27); const model_r18 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r18.ParallelConfigParam, $event) || (model_r18.ParallelConfigParam = $event); return i0.ɵɵresetView($event); });
687
+ i0.ɵɵelementStart(3, "kendo-textbox", 153);
688
+ i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template_kendo_textbox_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r27); const model_r18 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r18.ParallelConfigParam, $event) || (model_r18.ParallelConfigParam = $event); return i0.ɵɵresetView($event); });
675
689
  i0.ɵɵelementEnd()();
676
690
  } if (rf & 2) {
677
691
  const ctx_r16 = i0.ɵɵnextContext(3);
678
692
  const model_r18 = ctx_r16.$implicit;
679
- const ɵ$index_302_r16 = ctx_r16.$index;
693
+ const ɵ$index_313_r16 = ctx_r16.$index;
680
694
  i0.ɵɵadvance(3);
681
695
  i0.ɵɵtwoWayProperty("ngModel", model_r18.ParallelConfigParam);
682
- i0.ɵɵproperty("name", "parallelConfigParam_" + ɵ$index_302_r16);
696
+ i0.ɵɵproperty("name", "parallelConfigParam_" + ɵ$index_313_r16);
683
697
  } }
684
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template(rf, ctx) { if (rf & 1) {
698
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template(rf, ctx) { if (rf & 1) {
685
699
  const _r25 = i0.ɵɵgetCurrentView();
686
- i0.ɵɵelementStart(0, "div", 146)(1, "div")(2, "label", 148);
700
+ i0.ɵɵelementStart(0, "div", 148)(1, "div")(2, "label", 150);
687
701
  i0.ɵɵtext(3, "Parallel Mode");
688
702
  i0.ɵɵelementEnd();
689
- i0.ɵɵelementStart(4, "kendo-dropdownlist", 149);
690
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template_kendo_dropdownlist_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r25); const model_r18 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵtwoWayBindingSet(model_r18.ParallelizationMode, $event) || (model_r18.ParallelizationMode = $event); return i0.ɵɵresetView($event); });
703
+ i0.ɵɵelementStart(4, "kendo-dropdownlist", 151);
704
+ i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template_kendo_dropdownlist_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r25); const model_r18 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵtwoWayBindingSet(model_r18.ParallelizationMode, $event) || (model_r18.ParallelizationMode = $event); return i0.ɵɵresetView($event); });
691
705
  i0.ɵɵelementEnd()();
692
- i0.ɵɵtemplate(5, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template, 4, 5, "div")(6, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template, 4, 2, "div");
706
+ i0.ɵɵtemplate(5, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template, 4, 5, "div")(6, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template, 4, 2, "div");
693
707
  i0.ɵɵelementEnd();
694
708
  } if (rf & 2) {
695
709
  const ctx_r16 = i0.ɵɵnextContext(2);
696
710
  const model_r18 = ctx_r16.$implicit;
697
- const ɵ$index_302_r16 = ctx_r16.$index;
711
+ const ɵ$index_313_r16 = ctx_r16.$index;
698
712
  i0.ɵɵadvance(4);
699
713
  i0.ɵɵtwoWayProperty("ngModel", model_r18.ParallelizationMode);
700
- i0.ɵɵproperty("name", "parallelMode_" + ɵ$index_302_r16)("data", i0.ɵɵpureFunction3(9, _c4, i0.ɵɵpureFunction0(6, _c5), i0.ɵɵpureFunction0(7, _c6), i0.ɵɵpureFunction0(8, _c7)))("valuePrimitive", true);
714
+ i0.ɵɵproperty("name", "parallelMode_" + ɵ$index_313_r16)("data", i0.ɵɵpureFunction3(9, _c4, i0.ɵɵpureFunction0(6, _c5), i0.ɵɵpureFunction0(7, _c6), i0.ɵɵpureFunction0(8, _c7)))("valuePrimitive", true);
701
715
  i0.ɵɵadvance();
702
716
  i0.ɵɵconditional(model_r18.ParallelizationMode === "StaticCount" ? 5 : -1);
703
717
  i0.ɵɵadvance();
704
718
  i0.ɵɵconditional(model_r18.ParallelizationMode === "ConfigParam" ? 6 : -1);
705
719
  } }
706
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
720
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
707
721
  i0.ɵɵelementStart(0, "span")(1, "strong");
708
722
  i0.ɵɵtext(2, "Parallel Mode:");
709
723
  i0.ɵɵelementEnd();
@@ -714,7 +728,7 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Condi
714
728
  i0.ɵɵadvance(3);
715
729
  i0.ɵɵtextInterpolate1(" ", model_r18.ParallelizationMode, "");
716
730
  } }
717
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_2_Template(rf, ctx) { if (rf & 1) {
731
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_2_Template(rf, ctx) { if (rf & 1) {
718
732
  i0.ɵɵelementStart(0, "span")(1, "strong");
719
733
  i0.ɵɵtext(2, "Parallel Count:");
720
734
  i0.ɵɵelementEnd();
@@ -725,7 +739,7 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Condi
725
739
  i0.ɵɵadvance(3);
726
740
  i0.ɵɵtextInterpolate1(" ", model_r18.ParallelCount, "");
727
741
  } }
728
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_3_Template(rf, ctx) { if (rf & 1) {
742
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_3_Template(rf, ctx) { if (rf & 1) {
729
743
  i0.ɵɵelementStart(0, "span")(1, "strong");
730
744
  i0.ɵɵtext(2, "Config Param:");
731
745
  i0.ɵɵelementEnd();
@@ -736,9 +750,9 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Condi
736
750
  i0.ɵɵadvance(3);
737
751
  i0.ɵɵtextInterpolate1(" ", model_r18.ParallelConfigParam, "");
738
752
  } }
739
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Template(rf, ctx) { if (rf & 1) {
740
- i0.ɵɵelementStart(0, "div", 147);
741
- i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_1_Template, 4, 1, "span")(2, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_2_Template, 4, 1, "span")(3, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_3_Template, 4, 1, "span");
753
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Template(rf, ctx) { if (rf & 1) {
754
+ i0.ɵɵelementStart(0, "div", 149);
755
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_1_Template, 4, 1, "span")(2, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_2_Template, 4, 1, "span")(3, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_3_Template, 4, 1, "span");
742
756
  i0.ɵɵelementEnd();
743
757
  } if (rf & 2) {
744
758
  const model_r18 = i0.ɵɵnextContext(2).$implicit;
@@ -749,52 +763,52 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Condi
749
763
  i0.ɵɵadvance();
750
764
  i0.ɵɵconditional(model_r18.ParallelConfigParam ? 3 : -1);
751
765
  } }
752
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_23_Template(rf, ctx) { if (rf & 1) {
753
- i0.ɵɵelementStart(0, "div", 118)(1, "div", 144);
754
- i0.ɵɵelement(2, "i", 145);
766
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Template(rf, ctx) { if (rf & 1) {
767
+ i0.ɵɵelementStart(0, "div", 120)(1, "div", 146);
768
+ i0.ɵɵelement(2, "i", 147);
755
769
  i0.ɵɵtext(3, " Model-Specific Parallel Execution ");
756
770
  i0.ɵɵelementEnd();
757
- i0.ɵɵtemplate(4, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template, 7, 13, "div", 146)(5, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Template, 4, 3, "div", 147);
771
+ i0.ɵɵtemplate(4, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template, 7, 13, "div", 148)(5, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Template, 4, 3, "div", 149);
758
772
  i0.ɵɵelementEnd();
759
773
  } if (rf & 2) {
760
774
  const ctx_r1 = i0.ɵɵnextContext(6);
761
775
  i0.ɵɵadvance(4);
762
776
  i0.ɵɵconditional(ctx_r1.EditMode ? 4 : 5);
763
777
  } }
764
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Template(rf, ctx) { if (rf & 1) {
778
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Template(rf, ctx) { if (rf & 1) {
765
779
  const _r15 = i0.ɵɵgetCurrentView();
766
- i0.ɵɵelementStart(0, "div", 104);
767
- i0.ɵɵlistener("dragstart", function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Template_div_dragstart_0_listener($event) { const ɵ$index_302_r16 = i0.ɵɵrestoreView(_r15).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragStart($event, ɵ$index_302_r16)); })("dragover", function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Template_div_dragover_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragOver($event)); })("drop", function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Template_div_drop_0_listener($event) { const ɵ$index_302_r16 = i0.ɵɵrestoreView(_r15).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDrop($event, ɵ$index_302_r16)); })("dragend", function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Template_div_dragend_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragEnd($event)); });
768
- i0.ɵɵelementStart(1, "div", 105);
769
- i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_2_Template, 3, 1)(3, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_3_Template, 2, 3, "span", 106);
780
+ i0.ɵɵelementStart(0, "div", 106);
781
+ i0.ɵɵlistener("dragstart", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Template_div_dragstart_0_listener($event) { const ɵ$index_313_r16 = i0.ɵɵrestoreView(_r15).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragStart($event, ɵ$index_313_r16)); })("dragover", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Template_div_dragover_0_listener($event) { i0.ɵɵrestoreView(_r15); 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_17_Template_div_drop_0_listener($event) { const ɵ$index_313_r16 = i0.ɵɵrestoreView(_r15).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDrop($event, ɵ$index_313_r16)); })("dragend", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Template_div_dragend_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragEnd($event)); });
782
+ i0.ɵɵelementStart(1, "div", 107);
783
+ i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_2_Template, 3, 1)(3, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_3_Template, 2, 3, "span", 108);
770
784
  i0.ɵɵelementEnd();
771
- i0.ɵɵelementStart(4, "div", 107);
772
- i0.ɵɵtemplate(5, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_5_Template, 1, 5, "kendo-dropdownlist", 108)(6, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_6_Template, 2, 1, "span", 24);
785
+ i0.ɵɵelementStart(4, "div", 109);
786
+ i0.ɵɵtemplate(5, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template, 1, 5, "kendo-dropdownlist", 110)(6, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_6_Template, 2, 1, "span", 24);
773
787
  i0.ɵɵelementEnd();
774
- i0.ɵɵelementStart(7, "div", 109);
775
- i0.ɵɵtemplate(8, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_8_Template, 2, 1)(9, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_9_Template, 2, 1);
788
+ i0.ɵɵelementStart(7, "div", 111);
789
+ i0.ɵɵtemplate(8, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Template, 2, 1)(9, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Template, 2, 1);
776
790
  i0.ɵɵelementEnd();
777
- i0.ɵɵelementStart(10, "div", 110);
778
- i0.ɵɵtemplate(11, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_11_Template, 2, 1)(12, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_12_Template, 2, 1, "span", 111);
791
+ i0.ɵɵelementStart(10, "div", 112);
792
+ i0.ɵɵtemplate(11, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Template, 2, 1)(12, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_12_Template, 2, 1, "span", 113);
779
793
  i0.ɵɵelementEnd();
780
- i0.ɵɵelementStart(13, "div", 112);
781
- i0.ɵɵtemplate(14, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_14_Template, 3, 4, "span", 113)(15, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_15_Template, 2, 0, "span", 114);
794
+ i0.ɵɵelementStart(13, "div", 114);
795
+ i0.ɵɵtemplate(14, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_14_Template, 3, 4, "span", 115)(15, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_15_Template, 2, 0, "span", 116);
782
796
  i0.ɵɵelementEnd();
783
- i0.ɵɵelementStart(16, "div", 115);
784
- i0.ɵɵtemplate(17, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_17_Template, 3, 2);
797
+ i0.ɵɵelementStart(16, "div", 117);
798
+ i0.ɵɵtemplate(17, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Template, 3, 2);
785
799
  i0.ɵɵelementEnd()();
786
- i0.ɵɵelementStart(18, "div", 116);
800
+ i0.ɵɵelementStart(18, "div", 118);
787
801
  i0.ɵɵelement(19, "div");
788
- i0.ɵɵelementStart(20, "div")(21, "div", 117);
789
- i0.ɵɵtemplate(22, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_22_Template, 4, 1, "span");
802
+ i0.ɵɵelementStart(20, "div")(21, "div", 119);
803
+ i0.ɵɵtemplate(22, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_22_Template, 4, 1, "span");
790
804
  i0.ɵɵelementEnd();
791
- i0.ɵɵtemplate(23, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Conditional_23_Template, 6, 1, "div", 118);
805
+ i0.ɵɵtemplate(23, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Template, 6, 1, "div", 120);
792
806
  i0.ɵɵelementEnd()();
793
807
  } if (rf & 2) {
794
808
  const model_r18 = ctx.$implicit;
795
- const ɵ$index_302_r16 = ctx.$index;
809
+ const ɵ$index_313_r16 = ctx.$index;
796
810
  const ctx_r1 = i0.ɵɵnextContext(5);
797
- i0.ɵɵstyleProp("background", !model_r18.ModelID ? "#fff3cd" : ctx_r1.draggedIndex === ɵ$index_302_r16 ? "#e3f2fd" : "white")("border-left", !model_r18.ModelID ? "3px solid #ffc107" : "none")("opacity", ctx_r1.draggedIndex === ɵ$index_302_r16 ? "0.5" : "1");
811
+ i0.ɵɵstyleProp("background", !model_r18.ModelID ? "#fff3cd" : ctx_r1.draggedIndex === ɵ$index_313_r16 ? "#e3f2fd" : "white")("border-left", !model_r18.ModelID ? "3px solid #ffc107" : "none")("opacity", ctx_r1.draggedIndex === ɵ$index_313_r16 ? "0.5" : "1");
798
812
  i0.ɵɵproperty("draggable", ctx_r1.EditMode);
799
813
  i0.ɵɵadvance(2);
800
814
  i0.ɵɵconditional(ctx_r1.EditMode ? 2 : 3);
@@ -813,22 +827,22 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Condi
813
827
  i0.ɵɵadvance();
814
828
  i0.ɵɵconditional(ctx_r1.record.ParallelizationMode === "ModelSpecific" ? 23 : -1);
815
829
  } }
816
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
830
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
817
831
  const _r28 = i0.ɵɵgetCurrentView();
818
- i0.ɵɵelementStart(0, "div", 102)(1, "button", 152);
819
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_Conditional_18_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
820
- i0.ɵɵelement(2, "i", 73);
832
+ i0.ɵɵelementStart(0, "div", 104)(1, "button", 154);
833
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_Conditional_18_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
834
+ i0.ɵɵelement(2, "i", 75);
821
835
  i0.ɵɵtext(3, " Add Model ");
822
836
  i0.ɵɵelementEnd()();
823
837
  } }
824
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
825
- i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_Conditional_0_Template, 3, 0, "div", 98);
826
- i0.ɵɵelementStart(1, "div", 99)(2, "div", 100);
827
- i0.ɵɵelement(3, "i", 101);
838
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
839
+ i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_Conditional_0_Template, 3, 0, "div", 100);
840
+ i0.ɵɵelementStart(1, "div", 101)(2, "div", 102);
841
+ i0.ɵɵelement(3, "i", 103);
828
842
  i0.ɵɵelementEnd();
829
843
  i0.ɵɵelementStart(4, "div");
830
844
  i0.ɵɵtext(5, "AI Model ");
831
- i0.ɵɵelementStart(6, "span", 52);
845
+ i0.ɵɵelementStart(6, "span", 53);
832
846
  i0.ɵɵtext(7, "*");
833
847
  i0.ɵɵelementEnd()();
834
848
  i0.ɵɵelementStart(8, "div");
@@ -843,8 +857,8 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Condi
843
857
  i0.ɵɵelementStart(14, "div");
844
858
  i0.ɵɵtext(15, "Actions");
845
859
  i0.ɵɵelementEnd()();
846
- i0.ɵɵrepeaterCreate(16, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_For_17_Template, 24, 15, null, null, _forTrack0, true);
847
- i0.ɵɵtemplate(18, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_Conditional_18_Template, 4, 0, "div", 102);
860
+ i0.ɵɵrepeaterCreate(16, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_For_17_Template, 24, 15, null, null, _forTrack0, true);
861
+ i0.ɵɵtemplate(18, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_Conditional_18_Template, 4, 0, "div", 104);
848
862
  } if (rf & 2) {
849
863
  const ctx_r1 = i0.ɵɵnextContext(4);
850
864
  i0.ɵɵconditional(ctx_r1.promptModels.length > 1 ? 0 : -1);
@@ -853,17 +867,17 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Condi
853
867
  i0.ɵɵadvance(2);
854
868
  i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.UserCanCreatePromptModels ? 18 : -1);
855
869
  } }
856
- function AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Template(rf, ctx) { if (rf & 1) {
857
- i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_0_Template, 4, 1, "div", 94)(1, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Conditional_1_Template, 19, 2);
870
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Template(rf, ctx) { if (rf & 1) {
871
+ i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_0_Template, 4, 1, "div", 96)(1, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Conditional_1_Template, 19, 2);
858
872
  } if (rf & 2) {
859
873
  const ctx_r1 = i0.ɵɵnextContext(3);
860
874
  i0.ɵɵconditional(ctx_r1.promptModels.length === 0 ? 0 : 1);
861
875
  } }
862
- function AIPromptFormComponentExtended_form_2_Conditional_41_Template(rf, ctx) { if (rf & 1) {
876
+ function AIPromptFormComponentExtended_form_2_Conditional_42_Template(rf, ctx) { if (rf & 1) {
863
877
  i0.ɵɵelementStart(0, "kendo-expansionpanel", 30);
864
- i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_41_ng_template_1_Template, 7, 1, "ng-template", 31);
865
- i0.ɵɵelementStart(2, "div", 37)(3, "div", 88);
866
- i0.ɵɵtemplate(4, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_4_Template, 3, 0, "div", 89)(5, AIPromptFormComponentExtended_form_2_Conditional_41_Conditional_5_Template, 2, 1);
878
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_42_ng_template_1_Template, 7, 1, "ng-template", 31);
879
+ i0.ɵɵelementStart(2, "div", 37)(3, "div", 90);
880
+ i0.ɵɵtemplate(4, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_4_Template, 3, 0, "div", 91)(5, AIPromptFormComponentExtended_form_2_Conditional_42_Conditional_5_Template, 2, 1);
867
881
  i0.ɵɵelementEnd()()();
868
882
  } if (rf & 2) {
869
883
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -871,49 +885,49 @@ function AIPromptFormComponentExtended_form_2_Conditional_41_Template(rf, ctx) {
871
885
  i0.ɵɵadvance(4);
872
886
  i0.ɵɵconditional(ctx_r1.isLoadingModels ? 4 : 5);
873
887
  } }
874
- function AIPromptFormComponentExtended_form_2_ng_template_43_Template(rf, ctx) { if (rf & 1) {
875
- i0.ɵɵelementStart(0, "span", 63);
876
- i0.ɵɵelement(1, "i", 153);
888
+ function AIPromptFormComponentExtended_form_2_ng_template_44_Template(rf, ctx) { if (rf & 1) {
889
+ i0.ɵɵelementStart(0, "span", 65);
890
+ i0.ɵɵelement(1, "i", 155);
877
891
  i0.ɵɵtext(2, " Advanced Configuration ");
878
892
  i0.ɵɵelementEnd();
879
893
  } }
880
- function AIPromptFormComponentExtended_form_2_Conditional_48_Template(rf, ctx) { if (rf & 1) {
894
+ function AIPromptFormComponentExtended_form_2_Conditional_49_Template(rf, ctx) { if (rf & 1) {
881
895
  i0.ɵɵelement(0, "mj-form-field", 40);
882
896
  } if (rf & 2) {
883
897
  const ctx_r1 = i0.ɵɵnextContext(2);
884
898
  i0.ɵɵproperty("record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
885
899
  } }
886
- function AIPromptFormComponentExtended_form_2_Conditional_49_Template(rf, ctx) { if (rf & 1) {
900
+ function AIPromptFormComponentExtended_form_2_Conditional_50_Template(rf, ctx) { if (rf & 1) {
887
901
  i0.ɵɵelement(0, "mj-form-field", 41);
888
902
  } if (rf & 2) {
889
903
  const ctx_r1 = i0.ɵɵnextContext(2);
890
904
  i0.ɵɵproperty("record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
891
905
  } }
892
- function AIPromptFormComponentExtended_form_2_Conditional_57_Conditional_0_Template(rf, ctx) { if (rf & 1) {
893
- i0.ɵɵelementStart(0, "div", 154);
894
- i0.ɵɵelement(1, "i", 55);
906
+ function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_0_Template(rf, ctx) { if (rf & 1) {
907
+ i0.ɵɵelementStart(0, "div", 156);
908
+ i0.ɵɵelement(1, "i", 56);
895
909
  i0.ɵɵtext(2, " Loading prompts... ");
896
910
  i0.ɵɵelementEnd();
897
911
  } }
898
- function AIPromptFormComponentExtended_form_2_Conditional_57_Conditional_1_Template(rf, ctx) { if (rf & 1) {
912
+ function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_1_Template(rf, ctx) { if (rf & 1) {
899
913
  const _r29 = i0.ɵɵgetCurrentView();
900
- i0.ɵɵelementStart(0, "kendo-dropdowntree", 156);
901
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_57_Conditional_1_Template_kendo_dropdowntree_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.ResultSelectorPromptID, $event) || (ctx_r1.record.ResultSelectorPromptID = $event); return i0.ɵɵresetView($event); });
902
- i0.ɵɵlistener("valueChange", function AIPromptFormComponentExtended_form_2_Conditional_57_Conditional_1_Template_kendo_dropdowntree_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onResultSelectorChange($event)); });
914
+ i0.ɵɵelementStart(0, "kendo-dropdowntree", 158);
915
+ i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_1_Template_kendo_dropdowntree_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.ResultSelectorPromptID, $event) || (ctx_r1.record.ResultSelectorPromptID = $event); return i0.ɵɵresetView($event); });
916
+ i0.ɵɵlistener("valueChange", function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_1_Template_kendo_dropdowntree_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onResultSelectorChange($event)); });
903
917
  i0.ɵɵelementEnd();
904
918
  } if (rf & 2) {
905
919
  const ctx_r1 = i0.ɵɵnextContext(3);
906
920
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.ResultSelectorPromptID);
907
921
  i0.ɵɵproperty("data", ctx_r1.resultSelectorTreeData)("valuePrimitive", true)("filterable", true);
908
922
  } }
909
- function AIPromptFormComponentExtended_form_2_Conditional_57_Template(rf, ctx) { if (rf & 1) {
910
- i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_57_Conditional_0_Template, 3, 0, "div", 154)(1, AIPromptFormComponentExtended_form_2_Conditional_57_Conditional_1_Template, 1, 4, "kendo-dropdowntree", 155);
923
+ function AIPromptFormComponentExtended_form_2_Conditional_59_Template(rf, ctx) { if (rf & 1) {
924
+ i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_0_Template, 3, 0, "div", 156)(1, AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_1_Template, 1, 4, "kendo-dropdowntree", 157);
911
925
  } if (rf & 2) {
912
926
  const ctx_r1 = i0.ɵɵnextContext(2);
913
927
  i0.ɵɵconditional(ctx_r1.isLoadingResultSelectorData ? 0 : 1);
914
928
  } }
915
- function AIPromptFormComponentExtended_form_2_Conditional_58_Template(rf, ctx) { if (rf & 1) {
916
- i0.ɵɵelementStart(0, "span", 47);
929
+ function AIPromptFormComponentExtended_form_2_Conditional_60_Template(rf, ctx) { if (rf & 1) {
930
+ i0.ɵɵelementStart(0, "span", 48);
917
931
  i0.ɵɵtext(1);
918
932
  i0.ɵɵelementEnd();
919
933
  } if (rf & 2) {
@@ -921,15 +935,15 @@ function AIPromptFormComponentExtended_form_2_Conditional_58_Template(rf, ctx) {
921
935
  i0.ɵɵadvance();
922
936
  i0.ɵɵtextInterpolate(ctx_r1.getPromptDisplayName(ctx_r1.record.ResultSelectorPromptID || "") || "None selected");
923
937
  } }
924
- function AIPromptFormComponentExtended_form_2_Conditional_59_ng_template_1_Template(rf, ctx) { if (rf & 1) {
925
- i0.ɵɵelementStart(0, "span", 63);
926
- i0.ɵɵelement(1, "i", 157);
938
+ function AIPromptFormComponentExtended_form_2_Conditional_61_ng_template_1_Template(rf, ctx) { if (rf & 1) {
939
+ i0.ɵɵelementStart(0, "span", 65);
940
+ i0.ɵɵelement(1, "i", 159);
927
941
  i0.ɵɵtext(2, " Template Parameters ");
928
- i0.ɵɵelementStart(3, "span", 158);
942
+ i0.ɵɵelementStart(3, "span", 160);
929
943
  i0.ɵɵtext(4);
930
944
  i0.ɵɵelementEnd();
931
- i0.ɵɵelementStart(5, "span", 92);
932
- i0.ɵɵelement(6, "i", 159);
945
+ i0.ɵɵelementStart(5, "span", 94);
946
+ i0.ɵɵelement(6, "i", 161);
933
947
  i0.ɵɵtext(7, " Parameters defined in the template ");
934
948
  i0.ɵɵelementEnd()();
935
949
  } if (rf & 2) {
@@ -937,35 +951,35 @@ function AIPromptFormComponentExtended_form_2_Conditional_59_ng_template_1_Templ
937
951
  i0.ɵɵadvance(4);
938
952
  i0.ɵɵtextInterpolate1(" ", ctx_r1.templateParams.length, " ");
939
953
  } }
940
- function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_3_Template(rf, ctx) { if (rf & 1) {
941
- i0.ɵɵelementStart(0, "div", 89);
942
- i0.ɵɵelement(1, "i", 55);
954
+ function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_3_Template(rf, ctx) { if (rf & 1) {
955
+ i0.ɵɵelementStart(0, "div", 91);
956
+ i0.ɵɵelement(1, "i", 56);
943
957
  i0.ɵɵtext(2, " Loading template parameters... ");
944
958
  i0.ɵɵelementEnd();
945
959
  } }
946
- function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_4_Template(rf, ctx) { if (rf & 1) {
947
- i0.ɵɵelementStart(0, "div", 94);
948
- i0.ɵɵelement(1, "i", 95);
960
+ function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_4_Template(rf, ctx) { if (rf & 1) {
961
+ i0.ɵɵelementStart(0, "div", 96);
962
+ i0.ɵɵelement(1, "i", 97);
949
963
  i0.ɵɵtext(2, " This template has no parameters defined ");
950
964
  i0.ɵɵelementEnd();
951
965
  } }
952
- function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
953
- i0.ɵɵelementStart(0, "span", 171);
966
+ function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
967
+ i0.ɵɵelementStart(0, "span", 173);
954
968
  i0.ɵɵtext(1, "*");
955
969
  i0.ɵɵelementEnd();
956
970
  } }
957
- function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
958
- i0.ɵɵelementStart(0, "span", 173);
971
+ function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
972
+ i0.ɵɵelementStart(0, "span", 175);
959
973
  i0.ɵɵtext(1, "Required");
960
974
  i0.ɵɵelementEnd();
961
975
  } }
962
- function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
963
- i0.ɵɵelementStart(0, "span", 174);
976
+ function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
977
+ i0.ɵɵelementStart(0, "span", 176);
964
978
  i0.ɵɵtext(1, "Optional");
965
979
  i0.ɵɵelementEnd();
966
980
  } }
967
- function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
968
- i0.ɵɵelementStart(0, "p", 175);
981
+ function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
982
+ i0.ɵɵelementStart(0, "p", 177);
969
983
  i0.ɵɵtext(1);
970
984
  i0.ɵɵelementEnd();
971
985
  } if (rf & 2) {
@@ -973,11 +987,11 @@ function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2
973
987
  i0.ɵɵadvance();
974
988
  i0.ɵɵtextInterpolate1(" ", param_r30.Description, " ");
975
989
  } }
976
- function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
977
- i0.ɵɵelementStart(0, "div", 180)(1, "label", 181);
990
+ function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
991
+ i0.ɵɵelementStart(0, "div", 182)(1, "label", 183);
978
992
  i0.ɵɵtext(2, "Default Value");
979
993
  i0.ɵɵelementEnd();
980
- i0.ɵɵelementStart(3, "code", 182);
994
+ i0.ɵɵelementStart(3, "code", 184);
981
995
  i0.ɵɵtext(4);
982
996
  i0.ɵɵelementEnd()();
983
997
  } if (rf & 2) {
@@ -985,11 +999,11 @@ function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2
985
999
  i0.ɵɵadvance(4);
986
1000
  i0.ɵɵtextInterpolate(param_r30.DefaultValue);
987
1001
  } }
988
- function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
989
- i0.ɵɵelementStart(0, "div", 180)(1, "label", 181);
1002
+ function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
1003
+ i0.ɵɵelementStart(0, "div", 182)(1, "label", 183);
990
1004
  i0.ɵɵtext(2, "Entity");
991
1005
  i0.ɵɵelementEnd();
992
- i0.ɵɵelementStart(3, "span", 176);
1006
+ i0.ɵɵelementStart(3, "span", 178);
993
1007
  i0.ɵɵtext(4);
994
1008
  i0.ɵɵelementEnd()();
995
1009
  } if (rf & 2) {
@@ -997,19 +1011,19 @@ function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2
997
1011
  i0.ɵɵadvance(4);
998
1012
  i0.ɵɵtextInterpolate(param_r30.Entity || "Entity ID: " + param_r30.EntityID);
999
1013
  } }
1000
- function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Conditional_20_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1014
+ function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Conditional_20_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1001
1015
  i0.ɵɵtext(0);
1002
1016
  } if (rf & 2) {
1003
1017
  const param_r30 = i0.ɵɵnextContext(2).$implicit;
1004
1018
  i0.ɵɵtextInterpolate1(" (", param_r30.LinkedParameterField, ") ");
1005
1019
  } }
1006
- function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
1007
- i0.ɵɵelementStart(0, "div", 180)(1, "label", 181);
1020
+ function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
1021
+ i0.ɵɵelementStart(0, "div", 182)(1, "label", 183);
1008
1022
  i0.ɵɵtext(2, "Linked To");
1009
1023
  i0.ɵɵelementEnd();
1010
- i0.ɵɵelementStart(3, "span", 176);
1024
+ i0.ɵɵelementStart(3, "span", 178);
1011
1025
  i0.ɵɵtext(4);
1012
- i0.ɵɵtemplate(5, AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Conditional_20_Conditional_5_Template, 1, 1);
1026
+ i0.ɵɵtemplate(5, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Conditional_20_Conditional_5_Template, 1, 1);
1013
1027
  i0.ɵɵelementEnd()();
1014
1028
  } if (rf & 2) {
1015
1029
  const param_r30 = i0.ɵɵnextContext().$implicit;
@@ -1018,11 +1032,11 @@ function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2
1018
1032
  i0.ɵɵadvance();
1019
1033
  i0.ɵɵconditional(param_r30.LinkedParameterField ? 5 : -1);
1020
1034
  } }
1021
- function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
1022
- i0.ɵɵelementStart(0, "div", 180)(1, "label", 181);
1035
+ function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
1036
+ i0.ɵɵelementStart(0, "div", 182)(1, "label", 183);
1023
1037
  i0.ɵɵtext(2, "Filter");
1024
1038
  i0.ɵɵelementEnd();
1025
- i0.ɵɵelementStart(3, "code", 183);
1039
+ i0.ɵɵelementStart(3, "code", 185);
1026
1040
  i0.ɵɵtext(4);
1027
1041
  i0.ɵɵelementEnd()();
1028
1042
  } if (rf & 2) {
@@ -1030,11 +1044,11 @@ function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2
1030
1044
  i0.ɵɵadvance(4);
1031
1045
  i0.ɵɵtextInterpolate(param_r30.ExtraFilter);
1032
1046
  } }
1033
- function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
1034
- i0.ɵɵelementStart(0, "div", 180)(1, "label", 181);
1047
+ function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
1048
+ i0.ɵɵelementStart(0, "div", 182)(1, "label", 183);
1035
1049
  i0.ɵɵtext(2, "Record ID");
1036
1050
  i0.ɵɵelementEnd();
1037
- i0.ɵɵelementStart(3, "code", 176);
1051
+ i0.ɵɵelementStart(3, "code", 178);
1038
1052
  i0.ɵɵtext(4);
1039
1053
  i0.ɵɵelementEnd()();
1040
1054
  } if (rf & 2) {
@@ -1042,25 +1056,25 @@ function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2
1042
1056
  i0.ɵɵadvance(4);
1043
1057
  i0.ɵɵtextInterpolate(param_r30.RecordID);
1044
1058
  } }
1045
- function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Template(rf, ctx) { if (rf & 1) {
1046
- i0.ɵɵelementStart(0, "div", 166)(1, "div", 167)(2, "div", 168);
1047
- i0.ɵɵelement(3, "i", 169);
1048
- i0.ɵɵelementStart(4, "h6", 170);
1059
+ function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Template(rf, ctx) { if (rf & 1) {
1060
+ i0.ɵɵelementStart(0, "div", 168)(1, "div", 169)(2, "div", 170);
1061
+ i0.ɵɵelement(3, "i", 171);
1062
+ i0.ɵɵelementStart(4, "h6", 172);
1049
1063
  i0.ɵɵtext(5);
1050
- i0.ɵɵtemplate(6, AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Conditional_6_Template, 2, 0, "span", 171);
1064
+ i0.ɵɵtemplate(6, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Conditional_6_Template, 2, 0, "span", 173);
1051
1065
  i0.ɵɵelementEnd()();
1052
- i0.ɵɵelementStart(7, "div", 168)(8, "span", 172);
1066
+ i0.ɵɵelementStart(7, "div", 170)(8, "span", 174);
1053
1067
  i0.ɵɵtext(9);
1054
1068
  i0.ɵɵelementEnd();
1055
- i0.ɵɵtemplate(10, AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Conditional_10_Template, 2, 0, "span", 173)(11, AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Conditional_11_Template, 2, 0, "span", 174);
1069
+ i0.ɵɵtemplate(10, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Conditional_10_Template, 2, 0, "span", 175)(11, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Conditional_11_Template, 2, 0, "span", 176);
1056
1070
  i0.ɵɵelementEnd()();
1057
- i0.ɵɵtemplate(12, AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Conditional_12_Template, 2, 1, "p", 175);
1058
- i0.ɵɵelementStart(13, "div", 176)(14, "span", 177);
1059
- i0.ɵɵelement(15, "i", 178);
1071
+ i0.ɵɵtemplate(12, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Conditional_12_Template, 2, 1, "p", 177);
1072
+ i0.ɵɵelementStart(13, "div", 178)(14, "span", 179);
1073
+ i0.ɵɵelement(15, "i", 180);
1060
1074
  i0.ɵɵtext(16);
1061
1075
  i0.ɵɵelementEnd()();
1062
- i0.ɵɵelementStart(17, "div", 179);
1063
- i0.ɵɵtemplate(18, AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Conditional_18_Template, 5, 1, "div", 180)(19, AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Conditional_19_Template, 5, 1, "div", 180)(20, AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Conditional_20_Template, 6, 2, "div", 180)(21, AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Conditional_21_Template, 5, 1, "div", 180)(22, AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Conditional_22_Template, 5, 1, "div", 180);
1076
+ i0.ɵɵelementStart(17, "div", 181);
1077
+ i0.ɵɵtemplate(18, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Conditional_18_Template, 5, 1, "div", 182)(19, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Conditional_19_Template, 5, 1, "div", 182)(20, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Conditional_20_Template, 6, 2, "div", 182)(21, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Conditional_21_Template, 5, 1, "div", 182)(22, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Conditional_22_Template, 5, 1, "div", 182);
1064
1078
  i0.ɵɵelementEnd()();
1065
1079
  } if (rf & 2) {
1066
1080
  const param_r30 = ctx.$implicit;
@@ -1094,13 +1108,13 @@ function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2
1094
1108
  i0.ɵɵadvance();
1095
1109
  i0.ɵɵconditional(param_r30.RecordID ? 22 : -1);
1096
1110
  } }
1097
- function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1098
- i0.ɵɵelementStart(0, "div", 160);
1099
- i0.ɵɵrepeaterCreate(1, AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_For_2_Template, 23, 19, "div", 161, _forTrack1);
1111
+ function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1112
+ i0.ɵɵelementStart(0, "div", 162);
1113
+ i0.ɵɵrepeaterCreate(1, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_2_Template, 23, 19, "div", 163, _forTrack1);
1100
1114
  i0.ɵɵelementEnd();
1101
- i0.ɵɵelementStart(3, "div", 162)(4, "div", 163);
1102
- i0.ɵɵelement(5, "i", 164);
1103
- i0.ɵɵelementStart(6, "div", 165)(7, "strong");
1115
+ i0.ɵɵelementStart(3, "div", 164)(4, "div", 165);
1116
+ i0.ɵɵelement(5, "i", 166);
1117
+ i0.ɵɵelementStart(6, "div", 167)(7, "strong");
1104
1118
  i0.ɵɵtext(8, "Using Template Parameters:");
1105
1119
  i0.ɵɵelementEnd();
1106
1120
  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. ");
@@ -1110,11 +1124,11 @@ function AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_Templ
1110
1124
  i0.ɵɵadvance();
1111
1125
  i0.ɵɵrepeater(ctx_r1.templateParams);
1112
1126
  } }
1113
- function AIPromptFormComponentExtended_form_2_Conditional_59_Template(rf, ctx) { if (rf & 1) {
1127
+ function AIPromptFormComponentExtended_form_2_Conditional_61_Template(rf, ctx) { if (rf & 1) {
1114
1128
  i0.ɵɵelementStart(0, "kendo-expansionpanel", 30);
1115
- i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_59_ng_template_1_Template, 8, 1, "ng-template", 31);
1129
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_61_ng_template_1_Template, 8, 1, "ng-template", 31);
1116
1130
  i0.ɵɵelementStart(2, "div", 37);
1117
- i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_3_Template, 3, 0, "div", 89)(4, AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_4_Template, 3, 0, "div", 94)(5, AIPromptFormComponentExtended_form_2_Conditional_59_Conditional_5_Template, 10, 0);
1131
+ i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_3_Template, 3, 0, "div", 91)(4, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_4_Template, 3, 0, "div", 96)(5, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Template, 10, 0);
1118
1132
  i0.ɵɵelementEnd()();
1119
1133
  } if (rf & 2) {
1120
1134
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1122,29 +1136,29 @@ function AIPromptFormComponentExtended_form_2_Conditional_59_Template(rf, ctx) {
1122
1136
  i0.ɵɵadvance(3);
1123
1137
  i0.ɵɵconditional(ctx_r1.isLoadingTemplateParams ? 3 : ctx_r1.templateParams.length === 0 ? 4 : 5);
1124
1138
  } }
1125
- function AIPromptFormComponentExtended_form_2_Conditional_60_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1126
- i0.ɵɵelementStart(0, "span", 63);
1139
+ function AIPromptFormComponentExtended_form_2_Conditional_62_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1140
+ i0.ɵɵelementStart(0, "span", 65);
1127
1141
  i0.ɵɵelement(1, "i", 23);
1128
1142
  i0.ɵɵtext(2, " Output Example (JSON) ");
1129
- i0.ɵɵelementStart(3, "span", 187);
1143
+ i0.ɵɵelementStart(3, "span", 189);
1130
1144
  i0.ɵɵtext(4, "\u2022 Required for object output type");
1131
1145
  i0.ɵɵelementEnd()();
1132
1146
  } }
1133
- function AIPromptFormComponentExtended_form_2_Conditional_60_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1147
+ function AIPromptFormComponentExtended_form_2_Conditional_62_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1134
1148
  const _r31 = i0.ɵɵgetCurrentView();
1135
- i0.ɵɵelementStart(0, "mj-code-editor", 188);
1136
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_60_Conditional_3_Template_mj_code_editor_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r31); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.OutputExample, $event) || (ctx_r1.record.OutputExample = $event); return i0.ɵɵresetView($event); });
1149
+ i0.ɵɵelementStart(0, "mj-code-editor", 190);
1150
+ i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_2_Conditional_62_Conditional_3_Template_mj_code_editor_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r31); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.OutputExample, $event) || (ctx_r1.record.OutputExample = $event); return i0.ɵɵresetView($event); });
1137
1151
  i0.ɵɵelementEnd();
1138
- i0.ɵɵelementStart(1, "div", 189);
1139
- i0.ɵɵelement(2, "i", 95);
1152
+ i0.ɵɵelementStart(1, "div", 191);
1153
+ i0.ɵɵelement(2, "i", 97);
1140
1154
  i0.ɵɵtext(3, " Provide a JSON example that defines the expected structure for object output validation. ");
1141
1155
  i0.ɵɵelementEnd();
1142
1156
  } if (rf & 2) {
1143
1157
  const ctx_r1 = i0.ɵɵnextContext(3);
1144
1158
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.OutputExample);
1145
1159
  } }
1146
- function AIPromptFormComponentExtended_form_2_Conditional_60_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1147
- i0.ɵɵelementStart(0, "div", 185);
1160
+ function AIPromptFormComponentExtended_form_2_Conditional_62_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1161
+ i0.ɵɵelementStart(0, "div", 187);
1148
1162
  i0.ɵɵtext(1);
1149
1163
  i0.ɵɵelementEnd();
1150
1164
  } if (rf & 2) {
@@ -1152,17 +1166,17 @@ function AIPromptFormComponentExtended_form_2_Conditional_60_Conditional_4_Templ
1152
1166
  i0.ɵɵadvance();
1153
1167
  i0.ɵɵtextInterpolate(ctx_r1.record.OutputExample);
1154
1168
  } }
1155
- function AIPromptFormComponentExtended_form_2_Conditional_60_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1156
- i0.ɵɵelementStart(0, "div", 186);
1157
- i0.ɵɵelement(1, "i", 190);
1169
+ function AIPromptFormComponentExtended_form_2_Conditional_62_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1170
+ i0.ɵɵelementStart(0, "div", 188);
1171
+ i0.ɵɵelement(1, "i", 192);
1158
1172
  i0.ɵɵtext(2, " Output example is required when output type is 'object' ");
1159
1173
  i0.ɵɵelementEnd();
1160
1174
  } }
1161
- function AIPromptFormComponentExtended_form_2_Conditional_60_Template(rf, ctx) { if (rf & 1) {
1175
+ function AIPromptFormComponentExtended_form_2_Conditional_62_Template(rf, ctx) { if (rf & 1) {
1162
1176
  i0.ɵɵelementStart(0, "kendo-expansionpanel", 30);
1163
- i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_60_ng_template_1_Template, 5, 0, "ng-template", 31);
1164
- i0.ɵɵelementStart(2, "div", 184);
1165
- 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", 185)(5, AIPromptFormComponentExtended_form_2_Conditional_60_Conditional_5_Template, 3, 0, "div", 186);
1177
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_62_ng_template_1_Template, 5, 0, "ng-template", 31);
1178
+ i0.ɵɵelementStart(2, "div", 186);
1179
+ i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_2_Conditional_62_Conditional_3_Template, 4, 1)(4, AIPromptFormComponentExtended_form_2_Conditional_62_Conditional_4_Template, 2, 1, "div", 187)(5, AIPromptFormComponentExtended_form_2_Conditional_62_Conditional_5_Template, 3, 0, "div", 188);
1166
1180
  i0.ɵɵelementEnd()();
1167
1181
  } if (rf & 2) {
1168
1182
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1170,8 +1184,8 @@ function AIPromptFormComponentExtended_form_2_Conditional_60_Template(rf, ctx) {
1170
1184
  i0.ɵɵadvance(3);
1171
1185
  i0.ɵɵconditional(ctx_r1.EditMode ? 3 : ctx_r1.record.OutputExample ? 4 : 5);
1172
1186
  } }
1173
- function AIPromptFormComponentExtended_form_2_Conditional_61_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1174
- i0.ɵɵelementStart(0, "span", 193);
1187
+ function AIPromptFormComponentExtended_form_2_Conditional_63_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1188
+ i0.ɵɵelementStart(0, "span", 195);
1175
1189
  i0.ɵɵtext(1);
1176
1190
  i0.ɵɵelementEnd();
1177
1191
  } if (rf & 2) {
@@ -1179,60 +1193,60 @@ function AIPromptFormComponentExtended_form_2_Conditional_61_ng_template_1_Condi
1179
1193
  i0.ɵɵadvance();
1180
1194
  i0.ɵɵtextInterpolate1("(", ctx_r1.executionHistory.length, ")");
1181
1195
  } }
1182
- function AIPromptFormComponentExtended_form_2_Conditional_61_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1183
- i0.ɵɵelementStart(0, "span", 63);
1184
- i0.ɵɵelement(1, "i", 192);
1196
+ function AIPromptFormComponentExtended_form_2_Conditional_63_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1197
+ i0.ɵɵelementStart(0, "span", 65);
1198
+ i0.ɵɵelement(1, "i", 194);
1185
1199
  i0.ɵɵtext(2, " Execution History ");
1186
- i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_2_Conditional_61_ng_template_1_Conditional_3_Template, 2, 1, "span", 193);
1200
+ i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_2_Conditional_63_ng_template_1_Conditional_3_Template, 2, 1, "span", 195);
1187
1201
  i0.ɵɵelementEnd();
1188
1202
  } if (rf & 2) {
1189
1203
  const ctx_r1 = i0.ɵɵnextContext(3);
1190
1204
  i0.ɵɵadvance(3);
1191
1205
  i0.ɵɵconditional(ctx_r1.executionHistory.length > 0 ? 3 : -1);
1192
1206
  } }
1193
- function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1194
- i0.ɵɵelementStart(0, "div", 191);
1195
- i0.ɵɵelement(1, "i", 194);
1207
+ function AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1208
+ i0.ɵɵelementStart(0, "div", 193);
1209
+ i0.ɵɵelement(1, "i", 196);
1196
1210
  i0.ɵɵelementStart(2, "p");
1197
1211
  i0.ɵɵtext(3, "Loading execution history...");
1198
1212
  i0.ɵɵelementEnd()();
1199
1213
  } }
1200
- function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1201
- i0.ɵɵelementStart(0, "div", 191);
1202
- i0.ɵɵelement(1, "i", 195);
1214
+ function AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1215
+ i0.ɵɵelementStart(0, "div", 193);
1216
+ i0.ɵɵelement(1, "i", 197);
1203
1217
  i0.ɵɵelementStart(2, "p");
1204
1218
  i0.ɵɵtext(3, "No execution history yet");
1205
1219
  i0.ɵɵelementEnd();
1206
- i0.ɵɵelementStart(4, "p", 111);
1220
+ i0.ɵɵelementStart(4, "p", 113);
1207
1221
  i0.ɵɵtext(5, "Run this prompt to see execution history here");
1208
1222
  i0.ɵɵelementEnd()();
1209
1223
  } }
1210
- function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1211
- i0.ɵɵelement(0, "i", 208);
1224
+ function AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_5_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1225
+ i0.ɵɵelement(0, "i", 210);
1212
1226
  } if (rf & 2) {
1213
1227
  const ctx_r1 = i0.ɵɵnextContext(4);
1214
1228
  i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
1215
1229
  } }
1216
- function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Conditional_12_Template(rf, ctx) { if (rf & 1) {
1217
- i0.ɵɵelement(0, "i", 208);
1230
+ function AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_5_Conditional_12_Template(rf, ctx) { if (rf & 1) {
1231
+ i0.ɵɵelement(0, "i", 210);
1218
1232
  } if (rf & 2) {
1219
1233
  const ctx_r1 = i0.ɵɵnextContext(4);
1220
1234
  i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
1221
1235
  } }
1222
- function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Conditional_15_Template(rf, ctx) { if (rf & 1) {
1223
- i0.ɵɵelement(0, "i", 208);
1236
+ function AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_5_Conditional_15_Template(rf, ctx) { if (rf & 1) {
1237
+ i0.ɵɵelement(0, "i", 210);
1224
1238
  } if (rf & 2) {
1225
1239
  const ctx_r1 = i0.ɵɵnextContext(4);
1226
1240
  i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
1227
1241
  } }
1228
- function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Conditional_18_Template(rf, ctx) { if (rf & 1) {
1229
- i0.ɵɵelement(0, "i", 208);
1242
+ function AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_5_Conditional_18_Template(rf, ctx) { if (rf & 1) {
1243
+ i0.ɵɵelement(0, "i", 210);
1230
1244
  } if (rf & 2) {
1231
1245
  const ctx_r1 = i0.ɵɵnextContext(4);
1232
1246
  i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
1233
1247
  } }
1234
- function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_41_Conditional_20_Template(rf, ctx) { if (rf & 1) {
1235
- i0.ɵɵelementStart(0, "span", 215);
1248
+ function AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_5_For_41_Conditional_20_Template(rf, ctx) { if (rf & 1) {
1249
+ i0.ɵɵelementStart(0, "span", 217);
1236
1250
  i0.ɵɵtext(1);
1237
1251
  i0.ɵɵelementEnd();
1238
1252
  } if (rf & 2) {
@@ -1240,42 +1254,42 @@ function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_4
1240
1254
  i0.ɵɵadvance();
1241
1255
  i0.ɵɵtextInterpolate1(" ", run_r34.RunType, " ");
1242
1256
  } }
1243
- function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_41_Template(rf, ctx) { if (rf & 1) {
1257
+ function AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_5_For_41_Template(rf, ctx) { if (rf & 1) {
1244
1258
  const _r33 = i0.ɵɵgetCurrentView();
1245
- i0.ɵɵelementStart(0, "tr", 209)(1, "td", 210)(2, "span", 211);
1259
+ i0.ɵɵelementStart(0, "tr", 211)(1, "td", 212)(2, "span", 213);
1246
1260
  i0.ɵɵelement(3, "i");
1247
1261
  i0.ɵɵelementStart(4, "span", 24);
1248
1262
  i0.ɵɵtext(5);
1249
1263
  i0.ɵɵelementEnd()()();
1250
- i0.ɵɵelementStart(6, "td", 212);
1264
+ i0.ɵɵelementStart(6, "td", 214);
1251
1265
  i0.ɵɵtext(7);
1252
1266
  i0.ɵɵpipe(8, "date");
1253
1267
  i0.ɵɵelementEnd();
1254
- i0.ɵɵelementStart(9, "td", 212)(10, "span", 211);
1255
- i0.ɵɵelement(11, "i", 90);
1268
+ i0.ɵɵelementStart(9, "td", 214)(10, "span", 213);
1269
+ i0.ɵɵelement(11, "i", 92);
1256
1270
  i0.ɵɵtext(12);
1257
1271
  i0.ɵɵelementEnd()();
1258
- i0.ɵɵelementStart(13, "td", 212);
1272
+ i0.ɵɵelementStart(13, "td", 214);
1259
1273
  i0.ɵɵtext(14);
1260
1274
  i0.ɵɵelementEnd();
1261
- i0.ɵɵelementStart(15, "td", 213);
1275
+ i0.ɵɵelementStart(15, "td", 215);
1262
1276
  i0.ɵɵtext(16);
1263
1277
  i0.ɵɵelementEnd();
1264
- i0.ɵɵelementStart(17, "td", 213);
1278
+ i0.ɵɵelementStart(17, "td", 215);
1265
1279
  i0.ɵɵtext(18);
1266
1280
  i0.ɵɵelementEnd();
1267
- i0.ɵɵelementStart(19, "td", 214);
1268
- i0.ɵɵtemplate(20, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_41_Conditional_20_Template, 2, 1, "span", 215);
1281
+ i0.ɵɵelementStart(19, "td", 216);
1282
+ i0.ɵɵtemplate(20, AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_5_For_41_Conditional_20_Template, 2, 1, "span", 217);
1269
1283
  i0.ɵɵelementEnd();
1270
- i0.ɵɵelementStart(21, "td", 214)(22, "button", 216);
1271
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_41_Template_button_click_22_listener() { const run_r34 = i0.ɵɵrestoreView(_r33).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToPromptRun(run_r34.ID)); });
1272
- i0.ɵɵelement(23, "i", 217);
1284
+ i0.ɵɵelementStart(21, "td", 216)(22, "button", 218);
1285
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_5_For_41_Template_button_click_22_listener() { const run_r34 = i0.ɵɵrestoreView(_r33).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToPromptRun(run_r34.ID)); });
1286
+ i0.ɵɵelement(23, "i", 219);
1273
1287
  i0.ɵɵelementEnd()()();
1274
1288
  } if (rf & 2) {
1275
1289
  const run_r34 = ctx.$implicit;
1276
- const ɵ$index_829_r35 = ctx.$index;
1290
+ const ɵ$index_842_r35 = ctx.$index;
1277
1291
  const ctx_r1 = i0.ɵɵnextContext(4);
1278
- i0.ɵɵclassProp("even-row", ɵ$index_829_r35 % 2 === 0);
1292
+ i0.ɵɵclassProp("even-row", ɵ$index_842_r35 % 2 === 0);
1279
1293
  i0.ɵɵadvance(3);
1280
1294
  i0.ɵɵclassMap("fa-solid " + ctx_r1.getExecutionStatusIcon(run_r34.Success));
1281
1295
  i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r34.Success));
@@ -1296,60 +1310,60 @@ function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_4
1296
1310
  i0.ɵɵadvance(2);
1297
1311
  i0.ɵɵconditional(run_r34.RunType ? 20 : -1);
1298
1312
  } }
1299
- function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1313
+ function AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1300
1314
  const _r32 = i0.ɵɵgetCurrentView();
1301
- i0.ɵɵelementStart(0, "div", 196)(1, "div", 130);
1315
+ i0.ɵɵelementStart(0, "div", 198)(1, "div", 132);
1302
1316
  i0.ɵɵtext(2);
1303
1317
  i0.ɵɵelementEnd();
1304
- i0.ɵɵelementStart(3, "div", 197)(4, "span", 174);
1318
+ i0.ɵɵelementStart(3, "div", 199)(4, "span", 176);
1305
1319
  i0.ɵɵtext(5, "Sort by:");
1306
1320
  i0.ɵɵelementEnd();
1307
- i0.ɵɵelementStart(6, "kendo-buttongroup", 198)(7, "button", 199);
1308
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("runAt")); });
1321
+ i0.ɵɵelementStart(6, "kendo-buttongroup", 200)(7, "button", 201);
1322
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_5_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("runAt")); });
1309
1323
  i0.ɵɵtext(8, " Date ");
1310
- i0.ɵɵtemplate(9, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Conditional_9_Template, 1, 2, "i", 200);
1324
+ i0.ɵɵtemplate(9, AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_5_Conditional_9_Template, 1, 2, "i", 202);
1311
1325
  i0.ɵɵelementEnd();
1312
- i0.ɵɵelementStart(10, "button", 199);
1313
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("executionTime")); });
1326
+ i0.ɵɵelementStart(10, "button", 201);
1327
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_5_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("executionTime")); });
1314
1328
  i0.ɵɵtext(11, " Duration ");
1315
- i0.ɵɵtemplate(12, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Conditional_12_Template, 1, 2, "i", 200);
1329
+ i0.ɵɵtemplate(12, AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_5_Conditional_12_Template, 1, 2, "i", 202);
1316
1330
  i0.ɵɵelementEnd();
1317
- i0.ɵɵelementStart(13, "button", 199);
1318
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("tokens")); });
1331
+ i0.ɵɵelementStart(13, "button", 201);
1332
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_5_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("tokens")); });
1319
1333
  i0.ɵɵtext(14, " Tokens ");
1320
- i0.ɵɵtemplate(15, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Conditional_15_Template, 1, 2, "i", 200);
1334
+ i0.ɵɵtemplate(15, AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_5_Conditional_15_Template, 1, 2, "i", 202);
1321
1335
  i0.ɵɵelementEnd();
1322
- i0.ɵɵelementStart(16, "button", 199);
1323
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("cost")); });
1336
+ i0.ɵɵelementStart(16, "button", 201);
1337
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_5_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("cost")); });
1324
1338
  i0.ɵɵtext(17, " Cost ");
1325
- i0.ɵɵtemplate(18, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Conditional_18_Template, 1, 2, "i", 200);
1339
+ i0.ɵɵtemplate(18, AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_5_Conditional_18_Template, 1, 2, "i", 202);
1326
1340
  i0.ɵɵelementEnd()()()();
1327
- i0.ɵɵelementStart(19, "div", 201)(20, "table", 202)(21, "thead")(22, "tr", 203)(23, "th", 204);
1341
+ i0.ɵɵelementStart(19, "div", 203)(20, "table", 204)(21, "thead")(22, "tr", 205)(23, "th", 206);
1328
1342
  i0.ɵɵtext(24, "Status");
1329
1343
  i0.ɵɵelementEnd();
1330
- i0.ɵɵelementStart(25, "th", 204);
1344
+ i0.ɵɵelementStart(25, "th", 206);
1331
1345
  i0.ɵɵtext(26, "Date & Time");
1332
1346
  i0.ɵɵelementEnd();
1333
- i0.ɵɵelementStart(27, "th", 204);
1347
+ i0.ɵɵelementStart(27, "th", 206);
1334
1348
  i0.ɵɵtext(28, "Model");
1335
1349
  i0.ɵɵelementEnd();
1336
- i0.ɵɵelementStart(29, "th", 204);
1350
+ i0.ɵɵelementStart(29, "th", 206);
1337
1351
  i0.ɵɵtext(30, "Duration");
1338
1352
  i0.ɵɵelementEnd();
1339
- i0.ɵɵelementStart(31, "th", 205);
1353
+ i0.ɵɵelementStart(31, "th", 207);
1340
1354
  i0.ɵɵtext(32, "Tokens");
1341
1355
  i0.ɵɵelementEnd();
1342
- i0.ɵɵelementStart(33, "th", 205);
1356
+ i0.ɵɵelementStart(33, "th", 207);
1343
1357
  i0.ɵɵtext(34, "Cost");
1344
1358
  i0.ɵɵelementEnd();
1345
- i0.ɵɵelementStart(35, "th", 206);
1359
+ i0.ɵɵelementStart(35, "th", 208);
1346
1360
  i0.ɵɵtext(36, "Type");
1347
1361
  i0.ɵɵelementEnd();
1348
- i0.ɵɵelementStart(37, "th", 206);
1362
+ i0.ɵɵelementStart(37, "th", 208);
1349
1363
  i0.ɵɵtext(38, "Actions");
1350
1364
  i0.ɵɵelementEnd()()();
1351
1365
  i0.ɵɵelementStart(39, "tbody");
1352
- i0.ɵɵrepeaterCreate(40, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_For_41_Template, 24, 18, "tr", 207, _forTrack1);
1366
+ i0.ɵɵrepeaterCreate(40, AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_5_For_41_Template, 24, 18, "tr", 209, _forTrack1);
1353
1367
  i0.ɵɵelementEnd()()();
1354
1368
  } if (rf & 2) {
1355
1369
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1374,11 +1388,11 @@ function AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Templ
1374
1388
  i0.ɵɵadvance(22);
1375
1389
  i0.ɵɵrepeater(ctx_r1.executionHistory);
1376
1390
  } }
1377
- function AIPromptFormComponentExtended_form_2_Conditional_61_Template(rf, ctx) { if (rf & 1) {
1391
+ function AIPromptFormComponentExtended_form_2_Conditional_63_Template(rf, ctx) { if (rf & 1) {
1378
1392
  i0.ɵɵelementStart(0, "kendo-expansionpanel", 30);
1379
- i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_61_ng_template_1_Template, 4, 1, "ng-template", 31);
1380
- i0.ɵɵelementStart(2, "div", 184);
1381
- i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_3_Template, 4, 0, "div", 191)(4, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_4_Template, 6, 0, "div", 191)(5, AIPromptFormComponentExtended_form_2_Conditional_61_Conditional_5_Template, 42, 9);
1393
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_63_ng_template_1_Template, 4, 1, "ng-template", 31);
1394
+ i0.ɵɵelementStart(2, "div", 186);
1395
+ i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_3_Template, 4, 0, "div", 193)(4, AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_4_Template, 6, 0, "div", 193)(5, AIPromptFormComponentExtended_form_2_Conditional_63_Conditional_5_Template, 42, 9);
1382
1396
  i0.ɵɵelementEnd()();
1383
1397
  } if (rf & 2) {
1384
1398
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1386,17 +1400,17 @@ function AIPromptFormComponentExtended_form_2_Conditional_61_Template(rf, ctx) {
1386
1400
  i0.ɵɵadvance(3);
1387
1401
  i0.ɵɵconditional(ctx_r1.isLoadingHistory ? 3 : ctx_r1.executionHistory.length === 0 ? 4 : 5);
1388
1402
  } }
1389
- function AIPromptFormComponentExtended_form_2_Conditional_62_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1390
- i0.ɵɵelementStart(0, "span", 63);
1391
- i0.ɵɵelement(1, "i", 219);
1403
+ function AIPromptFormComponentExtended_form_2_Conditional_64_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1404
+ i0.ɵɵelementStart(0, "span", 65);
1405
+ i0.ɵɵelement(1, "i", 221);
1392
1406
  i0.ɵɵtext(2, " Result Cache ");
1393
1407
  i0.ɵɵelementEnd();
1394
1408
  } }
1395
- function AIPromptFormComponentExtended_form_2_Conditional_62_Template(rf, ctx) { if (rf & 1) {
1409
+ function AIPromptFormComponentExtended_form_2_Conditional_64_Template(rf, ctx) { if (rf & 1) {
1396
1410
  i0.ɵɵelementStart(0, "kendo-expansionpanel", 30);
1397
- i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_62_ng_template_1_Template, 3, 0, "ng-template", 31);
1411
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_64_ng_template_1_Template, 3, 0, "ng-template", 31);
1398
1412
  i0.ɵɵelementStart(2, "div", 37);
1399
- i0.ɵɵelement(3, "mj-user-view-grid", 218);
1413
+ i0.ɵɵelement(3, "mj-user-view-grid", 220);
1400
1414
  i0.ɵɵelementEnd()();
1401
1415
  } if (rf & 2) {
1402
1416
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1404,24 +1418,24 @@ function AIPromptFormComponentExtended_form_2_Conditional_62_Template(rf, ctx) {
1404
1418
  i0.ɵɵadvance(3);
1405
1419
  i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("AI Result Cache", "AIPromptID"))("NewRecordValues", ctx_r1.NewRecordValues("AI Result Cache"))("AllowLoad", true)("EditMode", ctx_r1.GridEditMode());
1406
1420
  } }
1407
- function AIPromptFormComponentExtended_form_2_Conditional_63_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1408
- i0.ɵɵelementStart(0, "span", 63);
1409
- i0.ɵɵelement(1, "i", 222);
1421
+ function AIPromptFormComponentExtended_form_2_Conditional_65_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1422
+ i0.ɵɵelementStart(0, "span", 65);
1423
+ i0.ɵɵelement(1, "i", 224);
1410
1424
  i0.ɵɵtext(2, " Related Items ");
1411
1425
  i0.ɵɵelementEnd();
1412
1426
  } }
1413
- function AIPromptFormComponentExtended_form_2_Conditional_63_Template(rf, ctx) { if (rf & 1) {
1427
+ function AIPromptFormComponentExtended_form_2_Conditional_65_Template(rf, ctx) { if (rf & 1) {
1414
1428
  i0.ɵɵelementStart(0, "kendo-expansionpanel", 30);
1415
- i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_63_ng_template_1_Template, 3, 0, "ng-template", 31);
1416
- i0.ɵɵelementStart(2, "div", 37)(3, "div", 38)(4, "div")(5, "h6", 220);
1429
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_2_Conditional_65_ng_template_1_Template, 3, 0, "ng-template", 31);
1430
+ i0.ɵɵelementStart(2, "div", 37)(3, "div", 38)(4, "div")(5, "h6", 222);
1417
1431
  i0.ɵɵtext(6, "AI Agents Using This Prompt");
1418
1432
  i0.ɵɵelementEnd();
1419
- i0.ɵɵelement(7, "mj-user-view-grid", 221);
1433
+ i0.ɵɵelement(7, "mj-user-view-grid", 223);
1420
1434
  i0.ɵɵelementEnd();
1421
- i0.ɵɵelementStart(8, "div")(9, "h6", 220);
1435
+ i0.ɵɵelementStart(8, "div")(9, "h6", 222);
1422
1436
  i0.ɵɵtext(10, "Prompts Using This as Result Selector");
1423
1437
  i0.ɵɵelementEnd();
1424
- i0.ɵɵelement(11, "mj-user-view-grid", 221);
1438
+ i0.ɵɵelement(11, "mj-user-view-grid", 223);
1425
1439
  i0.ɵɵelementEnd()()()();
1426
1440
  } if (rf & 2) {
1427
1441
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1457,34 +1471,34 @@ function AIPromptFormComponentExtended_form_2_Template(rf, ctx) { if (rf & 1) {
1457
1471
  i0.ɵɵelementStart(26, "span", 24);
1458
1472
  i0.ɵɵtext(27);
1459
1473
  i0.ɵɵelementEnd()();
1460
- i0.ɵɵtemplate(28, AIPromptFormComponentExtended_form_2_Conditional_28_Template, 4, 0, "div", 19);
1474
+ i0.ɵɵtemplate(28, AIPromptFormComponentExtended_form_2_Conditional_28_Template, 4, 0, "div", 19)(29, AIPromptFormComponentExtended_form_2_Conditional_29_Template, 6, 1, "div", 19);
1461
1475
  i0.ɵɵelementEnd()();
1462
- i0.ɵɵelementStart(29, "div", 25)(30, "div", 26);
1463
- i0.ɵɵtemplate(31, AIPromptFormComponentExtended_form_2_Conditional_31_Template, 3, 2, "button", 27);
1476
+ i0.ɵɵelementStart(30, "div", 25)(31, "div", 26);
1477
+ i0.ɵɵtemplate(32, AIPromptFormComponentExtended_form_2_Conditional_32_Template, 3, 2, "button", 27);
1464
1478
  i0.ɵɵelementEnd();
1465
- i0.ɵɵtemplate(32, AIPromptFormComponentExtended_form_2_Conditional_32_Template, 4, 3, "div", 28);
1479
+ i0.ɵɵtemplate(33, AIPromptFormComponentExtended_form_2_Conditional_33_Template, 4, 3, "div", 28);
1466
1480
  i0.ɵɵelementEnd()()();
1467
- i0.ɵɵelementStart(33, "div", 29)(34, "kendo-expansionpanel", 30);
1468
- i0.ɵɵtemplate(35, AIPromptFormComponentExtended_form_2_ng_template_35_Template, 4, 1, "ng-template", 31);
1469
- i0.ɵɵelementStart(36, "div", 32);
1470
- i0.ɵɵtemplate(37, AIPromptFormComponentExtended_form_2_Conditional_37_Template, 3, 0, "div", 33)(38, AIPromptFormComponentExtended_form_2_Conditional_38_Template, 9, 2, "div", 34)(39, AIPromptFormComponentExtended_form_2_Conditional_39_Template, 11, 2, "div", 35)(40, AIPromptFormComponentExtended_form_2_Conditional_40_Template, 5, 3, "div", 36);
1481
+ i0.ɵɵelementStart(34, "div", 29)(35, "kendo-expansionpanel", 30);
1482
+ i0.ɵɵtemplate(36, AIPromptFormComponentExtended_form_2_ng_template_36_Template, 4, 1, "ng-template", 31);
1483
+ i0.ɵɵelementStart(37, "div", 32);
1484
+ i0.ɵɵtemplate(38, AIPromptFormComponentExtended_form_2_Conditional_38_Template, 3, 0, "div", 33)(39, AIPromptFormComponentExtended_form_2_Conditional_39_Template, 9, 2, "div", 34)(40, AIPromptFormComponentExtended_form_2_Conditional_40_Template, 11, 2, "div", 35)(41, AIPromptFormComponentExtended_form_2_Conditional_41_Template, 5, 3, "div", 36);
1471
1485
  i0.ɵɵelementEnd()();
1472
- i0.ɵɵtemplate(41, AIPromptFormComponentExtended_form_2_Conditional_41_Template, 6, 2, "kendo-expansionpanel", 30);
1473
- i0.ɵɵelementStart(42, "kendo-expansionpanel", 30);
1474
- i0.ɵɵtemplate(43, AIPromptFormComponentExtended_form_2_ng_template_43_Template, 3, 0, "ng-template", 31);
1475
- i0.ɵɵelementStart(44, "div", 37)(45, "div", 38)(46, "div");
1476
- i0.ɵɵelement(47, "mj-form-field", 39);
1477
- i0.ɵɵtemplate(48, AIPromptFormComponentExtended_form_2_Conditional_48_Template, 1, 3, "mj-form-field", 40)(49, AIPromptFormComponentExtended_form_2_Conditional_49_Template, 1, 3, "mj-form-field", 41);
1478
- i0.ɵɵelement(50, "mj-form-field", 42);
1479
- i0.ɵɵelementEnd();
1480
- i0.ɵɵelementStart(51, "div");
1481
- i0.ɵɵelement(52, "mj-form-field", 43)(53, "mj-form-field", 44);
1482
- i0.ɵɵelementStart(54, "div", 45)(55, "label", 46);
1483
- i0.ɵɵtext(56, " Result Selector Prompt ");
1484
- i0.ɵɵelementEnd();
1485
- i0.ɵɵtemplate(57, AIPromptFormComponentExtended_form_2_Conditional_57_Template, 2, 1)(58, AIPromptFormComponentExtended_form_2_Conditional_58_Template, 2, 1, "span", 47);
1486
+ i0.ɵɵtemplate(42, AIPromptFormComponentExtended_form_2_Conditional_42_Template, 6, 2, "kendo-expansionpanel", 30);
1487
+ i0.ɵɵelementStart(43, "kendo-expansionpanel", 30);
1488
+ i0.ɵɵtemplate(44, AIPromptFormComponentExtended_form_2_ng_template_44_Template, 3, 0, "ng-template", 31);
1489
+ i0.ɵɵelementStart(45, "div", 37)(46, "div", 38)(47, "div");
1490
+ i0.ɵɵelement(48, "mj-form-field", 39);
1491
+ 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);
1492
+ i0.ɵɵelement(51, "mj-form-field", 42)(52, "mj-form-field", 43);
1493
+ i0.ɵɵelementEnd();
1494
+ i0.ɵɵelementStart(53, "div");
1495
+ i0.ɵɵelement(54, "mj-form-field", 44)(55, "mj-form-field", 45);
1496
+ i0.ɵɵelementStart(56, "div", 46)(57, "label", 47);
1497
+ i0.ɵɵtext(58, " Result Selector Prompt ");
1498
+ i0.ɵɵelementEnd();
1499
+ i0.ɵɵtemplate(59, AIPromptFormComponentExtended_form_2_Conditional_59_Template, 2, 1)(60, AIPromptFormComponentExtended_form_2_Conditional_60_Template, 2, 1, "span", 48);
1486
1500
  i0.ɵɵelementEnd()()()()();
1487
- i0.ɵɵtemplate(59, AIPromptFormComponentExtended_form_2_Conditional_59_Template, 6, 2, "kendo-expansionpanel", 30)(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);
1501
+ i0.ɵɵtemplate(61, AIPromptFormComponentExtended_form_2_Conditional_61_Template, 6, 2, "kendo-expansionpanel", 30)(62, AIPromptFormComponentExtended_form_2_Conditional_62_Template, 6, 2, "kendo-expansionpanel", 30)(63, AIPromptFormComponentExtended_form_2_Conditional_63_Template, 6, 2, "kendo-expansionpanel", 30)(64, AIPromptFormComponentExtended_form_2_Conditional_64_Template, 4, 5, "kendo-expansionpanel", 30)(65, AIPromptFormComponentExtended_form_2_Conditional_65_Template, 12, 9, "kendo-expansionpanel", 30);
1488
1502
  i0.ɵɵelementEnd()()();
1489
1503
  } if (rf & 2) {
1490
1504
  const ctx_r1 = i0.ɵɵnextContext();
@@ -1506,24 +1520,28 @@ function AIPromptFormComponentExtended_form_2_Template(rf, ctx) { if (rf & 1) {
1506
1520
  i0.ɵɵtextInterpolate(ctx_r1.getOutputTypeDisplay());
1507
1521
  i0.ɵɵadvance();
1508
1522
  i0.ɵɵconditional(ctx_r1.record.EnableCaching ? 28 : -1);
1523
+ i0.ɵɵadvance();
1524
+ i0.ɵɵconditional(ctx_r1.record.EffortLevel ? 29 : -1);
1509
1525
  i0.ɵɵadvance(3);
1510
- i0.ɵɵconditional(ctx_r1.record.ID ? 31 : -1);
1526
+ i0.ɵɵconditional(ctx_r1.record.ID ? 32 : -1);
1511
1527
  i0.ɵɵadvance();
1512
- i0.ɵɵconditional(!ctx_r1.canExecute && ctx_r1.record.ID ? 32 : -1);
1528
+ i0.ɵɵconditional(!ctx_r1.canExecute && ctx_r1.record.ID ? 33 : -1);
1513
1529
  i0.ɵɵadvance(2);
1514
1530
  i0.ɵɵproperty("expanded", true);
1515
1531
  i0.ɵɵadvance(3);
1516
- i0.ɵɵconditional(ctx_r1.isLoadingTemplate ? 37 : !ctx_r1.record.TemplateID ? 38 : ctx_r1.templateNotFoundInDatabase ? 39 : 40);
1532
+ i0.ɵɵconditional(ctx_r1.isLoadingTemplate ? 38 : !ctx_r1.record.TemplateID ? 39 : ctx_r1.templateNotFoundInDatabase ? 40 : 41);
1517
1533
  i0.ɵɵadvance(4);
1518
- i0.ɵɵconditional(ctx_r1.record.IsSaved ? 41 : -1);
1534
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 42 : -1);
1519
1535
  i0.ɵɵadvance();
1520
1536
  i0.ɵɵproperty("expanded", false);
1521
1537
  i0.ɵɵadvance(5);
1522
1538
  i0.ɵɵproperty("record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
1523
1539
  i0.ɵɵadvance();
1524
- i0.ɵɵconditional(ctx_r1.showParallelCount ? 48 : -1);
1540
+ i0.ɵɵconditional(ctx_r1.showParallelCount ? 49 : -1);
1525
1541
  i0.ɵɵadvance();
1526
- i0.ɵɵconditional(ctx_r1.showParallelConfigParam ? 49 : -1);
1542
+ i0.ɵɵconditional(ctx_r1.showParallelConfigParam ? 50 : -1);
1543
+ i0.ɵɵadvance();
1544
+ i0.ɵɵproperty("record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
1527
1545
  i0.ɵɵadvance();
1528
1546
  i0.ɵɵproperty("record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
1529
1547
  i0.ɵɵadvance(2);
@@ -1531,23 +1549,23 @@ function AIPromptFormComponentExtended_form_2_Template(rf, ctx) { if (rf & 1) {
1531
1549
  i0.ɵɵadvance();
1532
1550
  i0.ɵɵproperty("record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
1533
1551
  i0.ɵɵadvance(4);
1534
- i0.ɵɵconditional(ctx_r1.EditMode ? 57 : 58);
1552
+ i0.ɵɵconditional(ctx_r1.EditMode ? 59 : 60);
1535
1553
  i0.ɵɵadvance(2);
1536
- i0.ɵɵconditional(ctx_r1.template && ctx_r1.templateParams.length > 0 ? 59 : -1);
1554
+ i0.ɵɵconditional(ctx_r1.template && ctx_r1.templateParams.length > 0 ? 61 : -1);
1537
1555
  i0.ɵɵadvance();
1538
- i0.ɵɵconditional(ctx_r1.showOutputExample ? 60 : -1);
1556
+ i0.ɵɵconditional(ctx_r1.showOutputExample ? 62 : -1);
1539
1557
  i0.ɵɵadvance();
1540
- i0.ɵɵconditional(ctx_r1.record.IsSaved ? 61 : -1);
1558
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 63 : -1);
1541
1559
  i0.ɵɵadvance();
1542
- i0.ɵɵconditional(ctx_r1.record.IsSaved && ctx_r1.record.EnableCaching ? 62 : -1);
1560
+ i0.ɵɵconditional(ctx_r1.record.IsSaved && ctx_r1.record.EnableCaching ? 64 : -1);
1543
1561
  i0.ɵɵadvance();
1544
- i0.ɵɵconditional(ctx_r1.record.IsSaved ? 63 : -1);
1562
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 65 : -1);
1545
1563
  } }
1546
1564
  function AIPromptFormComponentExtended_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1547
1565
  const _r36 = i0.ɵɵgetCurrentView();
1548
- i0.ɵɵelementStart(0, "kendo-window", 223);
1566
+ i0.ɵɵelementStart(0, "kendo-window", 225);
1549
1567
  i0.ɵɵlistener("close", function AIPromptFormComponentExtended_Conditional_3_Template_kendo_window_close_0_listener() { i0.ɵɵrestoreView(_r36); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged(false)); });
1550
- i0.ɵɵelementStart(1, "mj-ai-test-harness", 224);
1568
+ i0.ɵɵelementStart(1, "mj-ai-test-harness", 226);
1551
1569
  i0.ɵɵlistener("visibilityChange", function AIPromptFormComponentExtended_Conditional_3_Template_mj_ai_test_harness_visibilityChange_1_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged($event)); });
1552
1570
  i0.ɵɵelementEnd()();
1553
1571
  } if (rf & 2) {
@@ -3028,10 +3046,10 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
3028
3046
  } if (rf & 2) {
3029
3047
  let _t;
3030
3048
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.templateEditor = _t.first);
3031
- } }, 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, "themeColor"], ["kendoButton", "", 3, "fillMode"], ["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"], [1, "template-actions", 2, "display", "flex", "gap", "8px", "padding", "8px", "border-bottom", "1px solid #e9ecef", "background", "#f8f9fa"], [2, "flex", "1", "background", "white", "border-radius", "6px", "border", "1px solid #e9ecef"], [2, "display", "block", "min-height", "300px", 3, "contentChange", "runTemplate", "template", "config"], ["kendoButton", "", "title", "Change to a different template", 3, "fillMode", "size"], ["kendoButton", "", "title", "Open template in new window", 3, "fillMode", "size"], ["kendoButton", "", "title", "Change to a different template", 3, "click", "fillMode", "size"], [1, "fa-solid", "fa-exchange-alt"], ["kendoButton", "", "title", "Open template in new window", 3, "click", "fillMode", "size"], [1, "fa-solid", "fa-external-link-alt"], [1, "model-management", 2, "border", "1px solid #dee2e6", "border-radius", "6px", "background", "#f8f9fa"], [1, "loading-state", 2, "padding", "20px", "text-align", "center", "color", "#6c757d"], [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"], [2, "color", "#6c757d", "font-size", "0.8em", "font-weight", "normal", "margin-left", "8px"], ["title", "Models are tried in order from top to bottom. The first available model will be used.", 1, "fa-solid", "fa-info-circle"], [1, "empty-state", 2, "padding", "20px", "text-align", "center", "color", "#6c757d"], [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 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 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-configuration"], [2, "font-size", "0.9em"], [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, "padding", "4px", "color", "#6c757d", "font-style", "italic", "font-size", "0.85em"], ["textField", "Name", "valueField", "ID", "placeholder", "Default", 2, "width", "100%", 3, "ngModel", "name", "data", "valuePrimitive", "filterable"], ["textField", "Name", "valueField", "ID", "placeholder", "Default", 2, "width", "100%", 3, "ngModelChange", "valueChange", "ngModel", "name", "data", "valuePrimitive", "filterable"], ["kendoDropDownListNoDataTemplate", ""], [2, "padding", "8px", "text-align", "center", "color", "#6c757d"], [2, "display", "flex", "gap", "2px", "margin-bottom", "4px"], ["kendoButton", "", "fillMode", "flat", "themeColor", "error", "size", "small", "title", "Remove model"], ["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"], [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"], ["title", "These parameters are defined in the template and will be available when executing this prompt", 1, "fa-solid", "fa-info-circle"], [2, "display", "grid", "gap", "12px"], [1, "parameter-card", 2, "border", "1px solid #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"], [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) {
3049
+ } }, 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", "EffortLevel", "Type", "numerictextbox", "Caption", "Effort Level (1-100)", "Description", "Higher values request more thorough reasoning", 3, "record", "ShowLabel", "EditMode"], ["FieldName", "ValidationBehavior", "Type", "dropdownlist", 3, "record", "ShowLabel", "EditMode"], ["FieldName", "EnableCaching", "Type", "checkbox", 3, "record", "ShowLabel", "EditMode"], [2, "margin-bottom", "16px"], [2, "display", "block", "margin-bottom", "4px", "font-weight", "600", "color", "#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"], [1, "fa-solid", "fa-tachometer-alt", 2, "color", "#6c757d"], ["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, "themeColor"], ["kendoButton", "", 3, "fillMode"], ["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"], [1, "template-actions", 2, "display", "flex", "gap", "8px", "padding", "8px", "border-bottom", "1px solid #e9ecef", "background", "#f8f9fa"], [2, "flex", "1", "background", "white", "border-radius", "6px", "border", "1px solid #e9ecef"], [2, "display", "block", "min-height", "300px", 3, "contentChange", "runTemplate", "template", "config"], ["kendoButton", "", "title", "Change to a different template", 3, "fillMode", "size"], ["kendoButton", "", "title", "Open template in new window", 3, "fillMode", "size"], ["kendoButton", "", "title", "Change to a different template", 3, "click", "fillMode", "size"], [1, "fa-solid", "fa-exchange-alt"], ["kendoButton", "", "title", "Open template in new window", 3, "click", "fillMode", "size"], [1, "fa-solid", "fa-external-link-alt"], [1, "model-management", 2, "border", "1px solid #dee2e6", "border-radius", "6px", "background", "#f8f9fa"], [1, "loading-state", 2, "padding", "20px", "text-align", "center", "color", "#6c757d"], [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"], [2, "color", "#6c757d", "font-size", "0.8em", "font-weight", "normal", "margin-left", "8px"], ["title", "Models are tried in order from top to bottom. The first available model will be used.", 1, "fa-solid", "fa-info-circle"], [1, "empty-state", 2, "padding", "20px", "text-align", "center", "color", "#6c757d"], [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 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 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-configuration"], [2, "font-size", "0.9em"], [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, "padding", "4px", "color", "#6c757d", "font-style", "italic", "font-size", "0.85em"], ["textField", "Name", "valueField", "ID", "placeholder", "Default", 2, "width", "100%", 3, "ngModel", "name", "data", "valuePrimitive", "filterable"], ["textField", "Name", "valueField", "ID", "placeholder", "Default", 2, "width", "100%", 3, "ngModelChange", "valueChange", "ngModel", "name", "data", "valuePrimitive", "filterable"], ["kendoDropDownListNoDataTemplate", ""], [2, "padding", "8px", "text-align", "center", "color", "#6c757d"], [2, "display", "flex", "gap", "2px", "margin-bottom", "4px"], ["kendoButton", "", "fillMode", "flat", "themeColor", "error", "size", "small", "title", "Remove model"], ["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"], [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"], ["title", "These parameters are defined in the template and will be available when executing this prompt", 1, "fa-solid", "fa-info-circle"], [2, "display", "grid", "gap", "12px"], [1, "parameter-card", 2, "border", "1px solid #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"], [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) {
3032
3050
  i0.ɵɵelementStart(0, "div", 2);
3033
3051
  i0.ɵɵelement(1, "div", 3);
3034
- i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_2_Template, 64, 36, "form", 4)(3, AIPromptFormComponentExtended_Conditional_3_Template, 2, 12, "kendo-window", 5);
3052
+ i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_2_Template, 66, 40, "form", 4)(3, AIPromptFormComponentExtended_Conditional_3_Template, 2, 12, "kendo-window", 5);
3035
3053
  i0.ɵɵelementEnd();
3036
3054
  } if (rf & 2) {
3037
3055
  i0.ɵɵadvance(2);
@@ -3046,7 +3064,7 @@ AIPromptFormComponentExtended = __decorate([
3046
3064
  export { AIPromptFormComponentExtended };
3047
3065
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AIPromptFormComponentExtended, [{
3048
3066
  type: Component,
3049
- 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 @if (UserCanCreateTemplates) {\n <button kendoButton [themeColor]=\"'primary'\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n }\n @if (UserCanReadTemplates) {\n <button kendoButton [fillMode]=\"'outline'\" (click)=\"linkExistingTemplate()\">\n <i class=\"fa-solid fa-link\"></i> Link Existing Template\n </button>\n }\n </div>\n </div>\n } @else if (templateNotFoundInDatabase) {\n <div class=\"invalid-template-state\" style=\"flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 40px; color: #dc3545;\">\n <i class=\"fa-solid fa-exclamation-triangle\" style=\"font-size: 64px; margin-bottom: 20px; opacity: 0.7;\"></i>\n <h5 style=\"margin-bottom: 12px;\">Template Not Found</h5>\n <p style=\"margin-bottom: 24px; text-align: center; max-width: 400px;\">\n The referenced template could not be loaded. It may have been deleted or moved.\n </p>\n <div style=\"display: flex; gap: 12px;\">\n <button kendoButton [fillMode]=\"'outline'\" (click)=\"loadTemplate()\">\n <i class=\"fa-solid fa-refresh\"></i> Retry Loading\n </button>\n @if (UserCanCreateTemplates) {\n <button kendoButton [themeColor]=\"'primary'\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n }\n </div>\n </div>\n } @else {\n <!-- Active Template Editor -->\n <div class=\"template-editor-container\" style=\"flex: 1; display: flex; flex-direction: column; min-height: 350px;\">\n <!-- Template Actions Bar -->\n @if (template && EditMode) {\n <div class=\"template-actions\" style=\"display: flex; gap: 8px; padding: 8px; border-bottom: 1px solid #e9ecef; background: #f8f9fa;\">\n @if (UserCanUpdateTemplates) {\n <button kendoButton \n [fillMode]=\"'outline'\" \n [size]=\"'small'\"\n (click)=\"linkExistingTemplate()\"\n title=\"Change to a different template\">\n <i class=\"fa-solid fa-exchange-alt\"></i> Change Template\n </button>\n }\n @if (UserCanReadTemplates) {\n <button kendoButton \n [fillMode]=\"'outline'\" \n [size]=\"'small'\"\n (click)=\"openTemplateInNewWindow()\"\n title=\"Open template in new window\">\n <i class=\"fa-solid fa-external-link-alt\"></i> Open in New Window\n </button>\n }\n </div>\n }\n \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 <!-- Model Configuration Expansion Panel -->\n @if (record.IsSaved) {\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-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 && UserCanCreatePromptModels) {\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 (highest priority first). The first available model that meets requirements will be used for execution.\n </div>\n }\n <!-- Column Headers -->\n <div class=\"model-header\" style=\"display: grid; grid-template-columns: 40px 2fr 1fr 1fr 1fr 60px; gap: 12px; padding: 12px 16px; background: #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>Configuration</div>\n <div>Created</div>\n <div>Actions</div>\n </div>\n \n @for (model of promptModels; track getModelTrackId(model) || $index; let i = $index) {\n <div class=\"model-row\" \n [draggable]=\"EditMode\"\n (dragstart)=\"onDragStart($event, i)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($event, i)\"\n (dragend)=\"onDragEnd($event)\"\n [style.background]=\"!model.ModelID ? '#fff3cd' : (draggedIndex === i ? '#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 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 {{ model.Priority }} - Higher priority 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_' + getModelTrackId(model)\"\n [data]=\"availableModels\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [filterable]=\"true\"\n placeholder=\"Select a model...\"\n (valueChange)=\"onModelChange($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_' + getModelTrackId(model)\"\n [data]=\"getVendorsForModelSync(model.ModelID)\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [filterable]=\"true\"\n placeholder=\"Select vendor...\"\n style=\"width: 100%;\">\n <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 <!-- Configuration -->\n <div class=\"model-configuration\">\n @if (EditMode) {\n @if (isLoadingConfigurations) {\n <div style=\"padding: 4px; color: #6c757d; font-style: italic; font-size: 0.85em;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...\n </div>\n } @else {\n <kendo-dropdownlist [(ngModel)]=\"model.ConfigurationID\"\n [name]=\"'configurationId_' + getModelTrackId(model)\"\n [data]=\"availableConfigurations\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [filterable]=\"true\"\n placeholder=\"Default\"\n (valueChange)=\"onConfigurationChange($event, i)\"\n style=\"width: 100%;\">\n <ng-template kendoDropDownListNoDataTemplate>\n <div style=\"padding: 8px; text-align: center; color: #6c757d;\">\n No configurations available\n </div>\n </ng-template>\n </kendo-dropdownlist>\n }\n } @else {\n <span style=\"font-size: 0.9em;\">{{ getConfigurationDisplayName(model.ConfigurationID) }}</span>\n }\n </div>\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 @if (UserCanUpdatePromptModels) {\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 }\n </div>\n @if (UserCanDeletePromptModels) {\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 }\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 </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 && UserCanCreatePromptModels) {\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 <!-- Template Parameters Expansion Panel -->\n @if (template && templateParams.length > 0) {\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-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 <!-- 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}"] }]
3067
+ 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 \n @if (record.EffortLevel) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-tachometer-alt\" style=\"color: #6c757d;\"></i>\n <span style=\"color: #6c757d;\">Effort Level:</span>\n <span style=\"color: #495057; font-weight: 500;\">{{ record.EffortLevel }}</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 @if (UserCanCreateTemplates) {\n <button kendoButton [themeColor]=\"'primary'\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n }\n @if (UserCanReadTemplates) {\n <button kendoButton [fillMode]=\"'outline'\" (click)=\"linkExistingTemplate()\">\n <i class=\"fa-solid fa-link\"></i> Link Existing Template\n </button>\n }\n </div>\n </div>\n } @else if (templateNotFoundInDatabase) {\n <div class=\"invalid-template-state\" style=\"flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 40px; color: #dc3545;\">\n <i class=\"fa-solid fa-exclamation-triangle\" style=\"font-size: 64px; margin-bottom: 20px; opacity: 0.7;\"></i>\n <h5 style=\"margin-bottom: 12px;\">Template Not Found</h5>\n <p style=\"margin-bottom: 24px; text-align: center; max-width: 400px;\">\n The referenced template could not be loaded. It may have been deleted or moved.\n </p>\n <div style=\"display: flex; gap: 12px;\">\n <button kendoButton [fillMode]=\"'outline'\" (click)=\"loadTemplate()\">\n <i class=\"fa-solid fa-refresh\"></i> Retry Loading\n </button>\n @if (UserCanCreateTemplates) {\n <button kendoButton [themeColor]=\"'primary'\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n }\n </div>\n </div>\n } @else {\n <!-- Active Template Editor -->\n <div class=\"template-editor-container\" style=\"flex: 1; display: flex; flex-direction: column; min-height: 350px;\">\n <!-- Template Actions Bar -->\n @if (template && EditMode) {\n <div class=\"template-actions\" style=\"display: flex; gap: 8px; padding: 8px; border-bottom: 1px solid #e9ecef; background: #f8f9fa;\">\n @if (UserCanUpdateTemplates) {\n <button kendoButton \n [fillMode]=\"'outline'\" \n [size]=\"'small'\"\n (click)=\"linkExistingTemplate()\"\n title=\"Change to a different template\">\n <i class=\"fa-solid fa-exchange-alt\"></i> Change Template\n </button>\n }\n @if (UserCanReadTemplates) {\n <button kendoButton \n [fillMode]=\"'outline'\" \n [size]=\"'small'\"\n (click)=\"openTemplateInNewWindow()\"\n title=\"Open template in new window\">\n <i class=\"fa-solid fa-external-link-alt\"></i> Open in New Window\n </button>\n }\n </div>\n }\n \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 <!-- Model Configuration Expansion Panel -->\n @if (record.IsSaved) {\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-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 && UserCanCreatePromptModels) {\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 (highest priority first). The first available model that meets requirements will be used for execution.\n </div>\n }\n <!-- Column Headers -->\n <div class=\"model-header\" style=\"display: grid; grid-template-columns: 40px 2fr 1fr 1fr 1fr 60px; gap: 12px; padding: 12px 16px; background: #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>Configuration</div>\n <div>Created</div>\n <div>Actions</div>\n </div>\n \n @for (model of promptModels; track getModelTrackId(model) || $index; let i = $index) {\n <div class=\"model-row\" \n [draggable]=\"EditMode\"\n (dragstart)=\"onDragStart($event, i)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($event, i)\"\n (dragend)=\"onDragEnd($event)\"\n [style.background]=\"!model.ModelID ? '#fff3cd' : (draggedIndex === i ? '#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 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 {{ model.Priority }} - Higher priority 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_' + getModelTrackId(model)\"\n [data]=\"availableModels\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [filterable]=\"true\"\n placeholder=\"Select a model...\"\n (valueChange)=\"onModelChange($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_' + getModelTrackId(model)\"\n [data]=\"getVendorsForModelSync(model.ModelID)\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [filterable]=\"true\"\n placeholder=\"Select vendor...\"\n style=\"width: 100%;\">\n <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 <!-- Configuration -->\n <div class=\"model-configuration\">\n @if (EditMode) {\n @if (isLoadingConfigurations) {\n <div style=\"padding: 4px; color: #6c757d; font-style: italic; font-size: 0.85em;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...\n </div>\n } @else {\n <kendo-dropdownlist [(ngModel)]=\"model.ConfigurationID\"\n [name]=\"'configurationId_' + getModelTrackId(model)\"\n [data]=\"availableConfigurations\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [filterable]=\"true\"\n placeholder=\"Default\"\n (valueChange)=\"onConfigurationChange($event, i)\"\n style=\"width: 100%;\">\n <ng-template kendoDropDownListNoDataTemplate>\n <div style=\"padding: 8px; text-align: center; color: #6c757d;\">\n No configurations available\n </div>\n </ng-template>\n </kendo-dropdownlist>\n }\n } @else {\n <span style=\"font-size: 0.9em;\">{{ getConfigurationDisplayName(model.ConfigurationID) }}</span>\n }\n </div>\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 @if (UserCanUpdatePromptModels) {\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 }\n </div>\n @if (UserCanDeletePromptModels) {\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 }\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 </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 && UserCanCreatePromptModels) {\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 <mj-form-field \n [record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EffortLevel\"\n Type=\"numerictextbox\"\n Caption=\"Effort Level (1-100)\"\n Description=\"Higher values request more thorough reasoning\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n \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 <!-- Template Parameters Expansion Panel -->\n @if (template && templateParams.length > 0) {\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-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 <!-- 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}"] }]
3050
3068
  }], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i3.AITestHarnessDialogService }, { type: i0.ViewContainerRef }, { type: i4.AIPromptManagementService }], { templateEditor: [{
3051
3069
  type: ViewChild,
3052
3070
  args: ['templateEditor']