@memberjunction/ng-core-entity-forms 5.29.0 → 5.30.0

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