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