@memberjunction/ng-core-entity-forms 6.2.1 → 6.3.0-edge.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 (204) hide show
  1. package/README.md +5 -6
  2. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.d.ts.map +1 -1
  3. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js +3 -3
  4. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js.map +1 -1
  5. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts +12 -0
  6. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts.map +1 -1
  7. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js +293 -230
  8. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
  9. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +2 -2
  10. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +2 -2
  11. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +11 -0
  12. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  13. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +862 -812
  14. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  15. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +2 -2
  16. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +2 -2
  17. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +2 -2
  18. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +2 -2
  19. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +2 -2
  20. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +2 -2
  21. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +12 -0
  22. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  23. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +821 -763
  24. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  25. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +2 -2
  26. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +10 -0
  27. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  28. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +700 -605
  29. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  30. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +10 -0
  31. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
  32. package/dist/lib/custom/Actions/action-execution-log-form.component.js +223 -175
  33. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  34. package/dist/lib/custom/Actions/action-form.component.d.ts +10 -0
  35. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
  36. package/dist/lib/custom/Actions/action-form.component.js +502 -453
  37. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  38. package/dist/lib/custom/Companies/company-header.panel.d.ts.map +1 -1
  39. package/dist/lib/custom/Companies/company-header.panel.js +3 -3
  40. package/dist/lib/custom/Companies/company-header.panel.js.map +1 -1
  41. package/dist/lib/custom/Conversations/conversation-header.panel.d.ts.map +1 -1
  42. package/dist/lib/custom/Conversations/conversation-header.panel.js +3 -3
  43. package/dist/lib/custom/Conversations/conversation-header.panel.js.map +1 -1
  44. package/dist/lib/custom/Employees/employee-header.panel.d.ts.map +1 -1
  45. package/dist/lib/custom/Employees/employee-header.panel.js +3 -3
  46. package/dist/lib/custom/Employees/employee-header.panel.js.map +1 -1
  47. package/dist/lib/custom/Entities/entity-form.component.d.ts +15 -0
  48. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  49. package/dist/lib/custom/Entities/entity-form.component.js +836 -801
  50. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  51. package/dist/lib/custom/EntityActions/entityaction.form.component.js +2 -2
  52. package/dist/lib/custom/Files/file-form.component.js +2 -2
  53. package/dist/lib/custom/Lists/list-form.component.d.ts +5 -0
  54. package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
  55. package/dist/lib/custom/Lists/list-form.component.js +355 -338
  56. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  57. package/dist/lib/custom/MLModels/ml-model-form.component.js +3 -3
  58. package/dist/lib/custom/MLModels/ml-model-form.component.js.map +1 -1
  59. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +17 -35
  60. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -1
  61. package/dist/lib/custom/MLModels/ml-model-view-models.js +55 -54
  62. package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -1
  63. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +7 -99
  64. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -1
  65. package/dist/lib/custom/MLModels/ps-model-detail.component.js +124 -303
  66. package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -1
  67. package/dist/lib/custom/Queries/query-form.component.d.ts +9 -0
  68. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  69. package/dist/lib/custom/Queries/query-form.component.js +493 -444
  70. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  71. package/dist/lib/custom/Queries/query-run-dialog.component.js +2 -2
  72. package/dist/lib/custom/Templates/template-param-dialog.component.js +2 -2
  73. package/dist/lib/custom/Templates/templates-form.component.d.ts +9 -0
  74. package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
  75. package/dist/lib/custom/Templates/templates-form.component.js +118 -74
  76. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  77. package/dist/lib/custom/Tests/test-form.component.d.ts +5 -0
  78. package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
  79. package/dist/lib/custom/Tests/test-form.component.js +471 -451
  80. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  81. package/dist/lib/custom/Tests/test-run-form.component.d.ts +5 -0
  82. package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
  83. package/dist/lib/custom/Tests/test-run-form.component.js +312 -289
  84. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  85. package/dist/lib/custom/Tests/test-suite-form.component.d.ts +5 -0
  86. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  87. package/dist/lib/custom/Tests/test-suite-form.component.js +697 -677
  88. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  89. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +5 -0
  90. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
  91. package/dist/lib/custom/Tests/test-suite-run-form.component.js +453 -433
  92. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  93. package/dist/lib/custom/Users/user-header.panel.d.ts.map +1 -1
  94. package/dist/lib/custom/Users/user-header.panel.js +3 -3
  95. package/dist/lib/custom/Users/user-header.panel.js.map +1 -1
  96. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts +2 -2
  97. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts.map +1 -1
  98. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js +30 -13
  99. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js.map +1 -1
  100. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +23 -0
  101. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  102. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +276 -216
  103. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  104. package/dist/lib/custom/custom-forms.module.d.ts +1 -1
  105. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  106. package/dist/lib/custom/custom-forms.module.js +7 -1
  107. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  108. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
  109. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +32 -14
  110. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  111. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.d.ts.map +1 -1
  112. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +119 -95
  113. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
  114. package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.d.ts +10 -0
  115. package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.d.ts.map +1 -0
  116. package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.js +124 -0
  117. package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.js.map +1 -0
  118. package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.d.ts +10 -0
  119. package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.d.ts.map +1 -0
  120. package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.js +99 -0
  121. package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.js.map +1 -0
  122. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +2 -2
  123. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
  124. package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.d.ts +10 -0
  125. package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.d.ts.map +1 -0
  126. package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.js +95 -0
  127. package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.js.map +1 -0
  128. package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.d.ts +10 -0
  129. package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.d.ts.map +1 -0
  130. package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.js +60 -0
  131. package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.js.map +1 -0
  132. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  133. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +124 -106
  134. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  135. package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.d.ts.map +1 -1
  136. package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.js +12 -4
  137. package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.js.map +1 -1
  138. package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.d.ts.map +1 -1
  139. package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js +19 -11
  140. package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js.map +1 -1
  141. package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.d.ts +10 -0
  142. package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.d.ts.map +1 -0
  143. package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.js +62 -0
  144. package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.js.map +1 -0
  145. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.d.ts.map +1 -1
  146. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js +26 -12
  147. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js.map +1 -1
  148. package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.d.ts +10 -0
  149. package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.d.ts.map +1 -0
  150. package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.js +140 -0
  151. package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.js.map +1 -0
  152. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.d.ts.map +1 -1
  153. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +69 -15
  154. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
  155. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.d.ts.map +1 -1
  156. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js +31 -13
  157. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js.map +1 -1
  158. package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.d.ts +10 -0
  159. package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.d.ts.map +1 -0
  160. package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.js +205 -0
  161. package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.js.map +1 -0
  162. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.d.ts.map +1 -1
  163. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js +24 -6
  164. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js.map +1 -1
  165. package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.d.ts +10 -0
  166. package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.d.ts.map +1 -0
  167. package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.js +173 -0
  168. package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.js.map +1 -0
  169. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.d.ts.map +1 -1
  170. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js +46 -24
  171. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js.map +1 -1
  172. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js +22 -14
  173. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js.map +1 -1
  174. package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.d.ts +10 -0
  175. package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.d.ts.map +1 -0
  176. package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.js +175 -0
  177. package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.js.map +1 -0
  178. package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js +8 -6
  179. package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js.map +1 -1
  180. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.d.ts.map +1 -1
  181. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js +44 -36
  182. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
  183. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.d.ts.map +1 -1
  184. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js +54 -32
  185. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js.map +1 -1
  186. package/dist/lib/generated/generated-forms.module.d.ts +452 -443
  187. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  188. package/dist/lib/generated/generated-forms.module.js +27 -0
  189. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  190. package/dist/lib/panels/feature-values/feature-values.panel.js +1 -1
  191. package/dist/lib/panels/feature-values/feature-values.panel.js.map +1 -1
  192. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +1 -1
  193. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
  194. package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
  195. package/dist/lib/shared/components/template-editor.component.js +2 -2
  196. package/dist/lib/shared/phone-hero.d.ts +17 -0
  197. package/dist/lib/shared/phone-hero.d.ts.map +1 -0
  198. package/dist/lib/shared/phone-hero.js +30 -0
  199. package/dist/lib/shared/phone-hero.js.map +1 -0
  200. package/dist/lib/shared/phone-sections-state.d.ts +28 -0
  201. package/dist/lib/shared/phone-sections-state.d.ts.map +1 -0
  202. package/dist/lib/shared/phone-sections-state.js +38 -0
  203. package/dist/lib/shared/phone-sections-state.js.map +1 -0
  204. package/package.json +50 -50
@@ -15,6 +15,8 @@ import { AIEngineBase } from '@memberjunction/ai-engine-base';
15
15
  import { AITestHarnessDialogService } from '@memberjunction/ng-ai-test-harness';
16
16
  import { AIPromptManagementService } from './ai-prompt-management.service';
17
17
  import { DedupePendingRecordsByEntity } from './pending-records';
18
+ import { JoinHeroSummary } from '../../shared/phone-hero';
19
+ import { PhoneSectionsState } from '../../shared/phone-sections-state';
18
20
  import * as i0 from "@angular/core";
19
21
  import * as i1 from "@angular/forms";
20
22
  import * as i2 from "@memberjunction/ng-ui-components";
@@ -35,7 +37,7 @@ function _forTrack0($index, $item) { return this.getModelTrackId($item) || $inde
35
37
  const _forTrack1 = ($index, $item) => $item.ID;
36
38
  function MJAIPromptFormComponentExtended_Conditional_1_Conditional_9_Template(rf, ctx) { if (rf & 1) {
37
39
  const _r3 = i0.ɵɵgetCurrentView();
38
- i0.ɵɵelementStart(0, "input", 52);
40
+ i0.ɵɵelementStart(0, "input", 62);
39
41
  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); });
40
42
  i0.ɵɵelementEnd();
41
43
  } if (rf & 2) {
@@ -43,10 +45,10 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_9_Template(rf
43
45
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Name);
44
46
  } }
45
47
  function MJAIPromptFormComponentExtended_Conditional_1_Conditional_10_Template(rf, ctx) { if (rf & 1) {
46
- i0.ɵɵelementStart(0, "h4", 53);
48
+ i0.ɵɵelementStart(0, "h4", 63);
47
49
  i0.ɵɵtext(1);
48
50
  i0.ɵɵelementEnd();
49
- i0.ɵɵelementStart(2, "span", 54);
51
+ i0.ɵɵelementStart(2, "span", 64);
50
52
  i0.ɵɵtext(3);
51
53
  i0.ɵɵelementEnd();
52
54
  } if (rf & 2) {
@@ -59,14 +61,14 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_10_Template(r
59
61
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Status, " ");
60
62
  } }
61
63
  function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_10_Template(rf, ctx) { if (rf & 1) {
62
- i0.ɵɵelementStart(0, "div", 57);
63
- i0.ɵɵelement(1, "i", 59);
64
+ i0.ɵɵelementStart(0, "div", 67);
65
+ i0.ɵɵelement(1, "i", 69);
64
66
  i0.ɵɵtext(2, " Loading types... ");
65
67
  i0.ɵɵelementEnd();
66
68
  } }
67
69
  function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_11_Template(rf, ctx) { if (rf & 1) {
68
70
  const _r5 = i0.ɵɵgetCurrentView();
69
- i0.ɵɵelementStart(0, "mj-dropdown", 60);
71
+ i0.ɵɵelementStart(0, "mj-dropdown", 70);
70
72
  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); });
71
73
  i0.ɵɵelementEnd();
72
74
  } if (rf & 2) {
@@ -76,18 +78,18 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditiona
76
78
  } }
77
79
  function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
78
80
  const _r4 = i0.ɵɵgetCurrentView();
79
- i0.ɵɵelementStart(0, "div", 13)(1, "div")(2, "label", 46);
81
+ i0.ɵɵelementStart(0, "div", 13)(1, "div")(2, "label", 50);
80
82
  i0.ɵɵtext(3, "Status");
81
83
  i0.ɵɵelementEnd();
82
- i0.ɵɵelementStart(4, "mj-dropdown", 55);
84
+ i0.ɵɵelementStart(4, "mj-dropdown", 65);
83
85
  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); });
84
86
  i0.ɵɵelementEnd()();
85
- i0.ɵɵelementStart(5, "div")(6, "label", 46);
87
+ i0.ɵɵelementStart(5, "div")(6, "label", 50);
86
88
  i0.ɵɵtext(7, " Type ");
87
- i0.ɵɵelementStart(8, "span", 56);
89
+ i0.ɵɵelementStart(8, "span", 66);
88
90
  i0.ɵɵtext(9, "*");
89
91
  i0.ɵɵelementEnd()();
90
- i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_10_Template, 3, 0, "div", 57)(11, MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_11_Template, 1, 4, "mj-dropdown", 58);
92
+ i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_10_Template, 3, 0, "div", 67)(11, MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_11_Template, 1, 4, "mj-dropdown", 68);
91
93
  i0.ɵɵelementEnd()();
92
94
  } if (rf & 2) {
93
95
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -99,7 +101,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Template(r
99
101
  } }
100
102
  function MJAIPromptFormComponentExtended_Conditional_1_Conditional_12_Template(rf, ctx) { if (rf & 1) {
101
103
  const _r6 = i0.ɵɵgetCurrentView();
102
- i0.ɵɵelementStart(0, "textarea", 61);
104
+ i0.ɵɵelementStart(0, "textarea", 71);
103
105
  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); });
104
106
  i0.ɵɵelementEnd();
105
107
  } if (rf & 2) {
@@ -118,7 +120,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_13_Template(r
118
120
  } }
119
121
  function MJAIPromptFormComponentExtended_Conditional_1_Conditional_15_Template(rf, ctx) { if (rf & 1) {
120
122
  i0.ɵɵelementStart(0, "div", 17);
121
- i0.ɵɵelement(1, "i", 62);
123
+ i0.ɵɵelement(1, "i", 72);
122
124
  i0.ɵɵelementStart(2, "span", 19);
123
125
  i0.ɵɵtext(3, "Type:");
124
126
  i0.ɵɵelementEnd();
@@ -132,14 +134,14 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_15_Template(r
132
134
  } }
133
135
  function MJAIPromptFormComponentExtended_Conditional_1_Conditional_28_Template(rf, ctx) { if (rf & 1) {
134
136
  i0.ɵɵelementStart(0, "div", 17);
135
- i0.ɵɵelement(1, "i", 63);
136
- i0.ɵɵelementStart(2, "span", 64);
137
+ i0.ɵɵelement(1, "i", 73);
138
+ i0.ɵɵelementStart(2, "span", 74);
137
139
  i0.ɵɵtext(3, "Caching Enabled");
138
140
  i0.ɵɵelementEnd()();
139
141
  } }
140
142
  function MJAIPromptFormComponentExtended_Conditional_1_Conditional_29_Template(rf, ctx) { if (rf & 1) {
141
143
  i0.ɵɵelementStart(0, "div", 17);
142
- i0.ɵɵelement(1, "i", 65);
144
+ i0.ɵɵelement(1, "i", 75);
143
145
  i0.ɵɵelementStart(2, "span", 19);
144
146
  i0.ɵɵtext(3, "Effort Level:");
145
147
  i0.ɵɵelementEnd();
@@ -153,9 +155,9 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_29_Template(r
153
155
  } }
154
156
  function MJAIPromptFormComponentExtended_Conditional_1_Conditional_32_Template(rf, ctx) { if (rf & 1) {
155
157
  const _r7 = i0.ɵɵgetCurrentView();
156
- i0.ɵɵelementStart(0, "button", 66);
158
+ i0.ɵɵelementStart(0, "button", 76);
157
159
  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()); });
158
- i0.ɵɵelement(1, "i", 67);
160
+ i0.ɵɵelement(1, "i", 77);
159
161
  i0.ɵɵtext(2, " Run ");
160
162
  i0.ɵɵelementEnd();
161
163
  } }
@@ -186,8 +188,23 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_33_Template(r
186
188
  i0.ɵɵadvance();
187
189
  i0.ɵɵconditional(!ctx_r1.template && ctx_r1.record.TemplateID ? 3 : -1);
188
190
  } }
189
- function MJAIPromptFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Template(rf, ctx) { if (rf & 1) {
190
- i0.ɵɵelementStart(0, "span", 69);
191
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_34_Template(rf, ctx) { if (rf & 1) {
192
+ const _r8 = i0.ɵɵgetCurrentView();
193
+ i0.ɵɵelementStart(0, "button", 78);
194
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_34_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleHeroDetails()); });
195
+ i0.ɵɵelementStart(1, "span", 79);
196
+ i0.ɵɵtext(2);
197
+ i0.ɵɵelementEnd();
198
+ i0.ɵɵelement(3, "i", 80);
199
+ i0.ɵɵelementEnd();
200
+ } if (rf & 2) {
201
+ const ctx_r1 = i0.ɵɵnextContext(2);
202
+ i0.ɵɵattribute("aria-expanded", ctx_r1.HeroDetailsOpen);
203
+ i0.ɵɵadvance(2);
204
+ i0.ɵɵtextInterpolate(ctx_r1.HeroSummary);
205
+ } }
206
+ function MJAIPromptFormComponentExtended_Conditional_1_ng_template_38_Conditional_3_Template(rf, ctx) { if (rf & 1) {
207
+ i0.ɵɵelementStart(0, "span", 82);
191
208
  i0.ɵɵtext(1);
192
209
  i0.ɵɵelementEnd();
193
210
  } if (rf & 2) {
@@ -195,43 +212,43 @@ function MJAIPromptFormComponentExtended_Conditional_1_ng_template_36_Conditiona
195
212
  i0.ɵɵadvance();
196
213
  i0.ɵɵtextInterpolate1("\u2022 ", ctx_r1.template.Name);
197
214
  } }
198
- function MJAIPromptFormComponentExtended_Conditional_1_ng_template_36_Template(rf, ctx) { if (rf & 1) {
199
- i0.ɵɵelementStart(0, "span", 68);
215
+ function MJAIPromptFormComponentExtended_Conditional_1_ng_template_38_Template(rf, ctx) { if (rf & 1) {
216
+ i0.ɵɵelementStart(0, "span", 81);
200
217
  i0.ɵɵelement(1, "i", 21);
201
218
  i0.ɵɵtext(2, " Template Editor ");
202
- i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Template, 2, 1, "span", 69);
219
+ i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_ng_template_38_Conditional_3_Template, 2, 1, "span", 82);
203
220
  i0.ɵɵelementEnd();
204
221
  } if (rf & 2) {
205
222
  const ctx_r1 = i0.ɵɵnextContext(2);
206
223
  i0.ɵɵadvance(3);
207
224
  i0.ɵɵconditional(ctx_r1.template ? 3 : -1);
208
225
  } }
209
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_38_Template(rf, ctx) { if (rf & 1) {
210
- i0.ɵɵelementStart(0, "div", 31);
211
- i0.ɵɵelement(1, "i", 70);
226
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Template(rf, ctx) { if (rf & 1) {
227
+ i0.ɵɵelementStart(0, "div", 33);
228
+ i0.ɵɵelement(1, "i", 83);
212
229
  i0.ɵɵtext(2, " Loading template... ");
213
230
  i0.ɵɵelementEnd();
214
231
  } }
215
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_2_Template(rf, ctx) { if (rf & 1) {
216
- const _r8 = i0.ɵɵgetCurrentView();
217
- i0.ɵɵelementStart(0, "button", 74);
218
- i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createNewTemplate()); });
219
- i0.ɵɵelement(1, "i", 75);
232
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_2_Template(rf, ctx) { if (rf & 1) {
233
+ const _r9 = i0.ɵɵgetCurrentView();
234
+ i0.ɵɵelementStart(0, "button", 87);
235
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createNewTemplate()); });
236
+ i0.ɵɵelement(1, "i", 88);
220
237
  i0.ɵɵtext(2, " Create New Template ");
221
238
  i0.ɵɵelementEnd();
222
239
  } }
223
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_3_Template(rf, ctx) { if (rf & 1) {
224
- const _r9 = i0.ɵɵgetCurrentView();
225
- i0.ɵɵelementStart(0, "button", 76);
226
- i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.linkExistingTemplate()); });
227
- i0.ɵɵelement(1, "i", 77);
240
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_3_Template(rf, ctx) { if (rf & 1) {
241
+ const _r10 = i0.ɵɵgetCurrentView();
242
+ i0.ɵɵelementStart(0, "button", 89);
243
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.linkExistingTemplate()); });
244
+ i0.ɵɵelement(1, "i", 90);
228
245
  i0.ɵɵtext(2, " Link Existing Template ");
229
246
  i0.ɵɵelementEnd();
230
247
  } }
231
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Template(rf, ctx) { if (rf & 1) {
232
- i0.ɵɵelementStart(0, "mj-empty-state", 32)(1, "div", 71);
233
- i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_2_Template, 3, 0, "button", 72);
234
- i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_3_Template, 3, 0, "button", 73);
248
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Template(rf, ctx) { if (rf & 1) {
249
+ i0.ɵɵelementStart(0, "mj-empty-state", 34)(1, "div", 84);
250
+ i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_2_Template, 3, 0, "button", 85);
251
+ i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_3_Template, 3, 0, "button", 86);
235
252
  i0.ɵɵelementEnd()();
236
253
  } if (rf & 2) {
237
254
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -240,48 +257,48 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Template(r
240
257
  i0.ɵɵadvance();
241
258
  i0.ɵɵconditional(ctx_r1.UserCanReadTemplates ? 3 : -1);
242
259
  } }
243
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Conditional_5_Template(rf, ctx) { if (rf & 1) {
244
- const _r11 = i0.ɵɵgetCurrentView();
245
- i0.ɵɵelementStart(0, "button", 74);
246
- i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createNewTemplate()); });
247
- i0.ɵɵelement(1, "i", 75);
260
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Template(rf, ctx) { if (rf & 1) {
261
+ const _r12 = i0.ɵɵgetCurrentView();
262
+ i0.ɵɵelementStart(0, "button", 87);
263
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createNewTemplate()); });
264
+ i0.ɵɵelement(1, "i", 88);
248
265
  i0.ɵɵtext(2, " Create New Template ");
249
266
  i0.ɵɵelementEnd();
250
267
  } }
251
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Template(rf, ctx) { if (rf & 1) {
252
- const _r10 = i0.ɵɵgetCurrentView();
253
- i0.ɵɵelementStart(0, "mj-empty-state", 33)(1, "div", 71)(2, "button", 76);
254
- i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.loadTemplate()); });
255
- i0.ɵɵelement(3, "i", 78);
268
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Template(rf, ctx) { if (rf & 1) {
269
+ const _r11 = i0.ɵɵgetCurrentView();
270
+ i0.ɵɵelementStart(0, "mj-empty-state", 35)(1, "div", 84)(2, "button", 89);
271
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.loadTemplate()); });
272
+ i0.ɵɵelement(3, "i", 91);
256
273
  i0.ɵɵtext(4, " Retry Loading ");
257
274
  i0.ɵɵelementEnd();
258
- i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Conditional_5_Template, 3, 0, "button", 72);
275
+ i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Template, 3, 0, "button", 85);
259
276
  i0.ɵɵelementEnd()();
260
277
  } if (rf & 2) {
261
278
  const ctx_r1 = i0.ɵɵnextContext(2);
262
279
  i0.ɵɵadvance(5);
263
280
  i0.ɵɵconditional(ctx_r1.UserCanCreateTemplates ? 5 : -1);
264
281
  } }
265
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
266
- const _r13 = i0.ɵɵgetCurrentView();
267
- i0.ɵɵelementStart(0, "button", 84);
268
- 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()); });
269
- i0.ɵɵelement(1, "i", 85);
282
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
283
+ const _r14 = i0.ɵɵgetCurrentView();
284
+ i0.ɵɵelementStart(0, "button", 97);
285
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Conditional_1_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.linkExistingTemplate()); });
286
+ i0.ɵɵelement(1, "i", 98);
270
287
  i0.ɵɵtext(2, " Change Template ");
271
288
  i0.ɵɵelementEnd();
272
289
  } }
273
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
274
- const _r14 = i0.ɵɵgetCurrentView();
275
- i0.ɵɵelementStart(0, "button", 86);
276
- 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()); });
277
- i0.ɵɵelement(1, "i", 87);
290
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
291
+ const _r15 = i0.ɵɵgetCurrentView();
292
+ i0.ɵɵelementStart(0, "button", 99);
293
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Conditional_1_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.openTemplateInNewWindow()); });
294
+ i0.ɵɵelement(1, "i", 100);
278
295
  i0.ɵɵtext(2, " Open in New Window ");
279
296
  i0.ɵɵelementEnd();
280
297
  } }
281
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Template(rf, ctx) { if (rf & 1) {
282
- i0.ɵɵelementStart(0, "div", 79);
283
- i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_1_Template, 3, 0, "button", 82);
284
- i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_2_Template, 3, 0, "button", 83);
298
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Conditional_1_Template(rf, ctx) { if (rf & 1) {
299
+ i0.ɵɵelementStart(0, "div", 92);
300
+ i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Conditional_1_Conditional_1_Template, 3, 0, "button", 95);
301
+ i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Conditional_1_Conditional_2_Template, 3, 0, "button", 96);
285
302
  i0.ɵɵelementEnd();
286
303
  } if (rf & 2) {
287
304
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -290,12 +307,12 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditiona
290
307
  i0.ɵɵadvance();
291
308
  i0.ɵɵconditional(ctx_r1.UserCanReadTemplates ? 2 : -1);
292
309
  } }
293
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Template(rf, ctx) { if (rf & 1) {
294
- const _r12 = i0.ɵɵgetCurrentView();
295
- i0.ɵɵelementStart(0, "div", 34);
296
- i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Template, 3, 2, "div", 79);
297
- i0.ɵɵelementStart(2, "div", 80)(3, "mj-template-editor", 81, 1);
298
- 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)); });
310
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Template(rf, ctx) { if (rf & 1) {
311
+ const _r13 = i0.ɵɵgetCurrentView();
312
+ i0.ɵɵelementStart(0, "div", 36);
313
+ i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Conditional_1_Template, 3, 2, "div", 92);
314
+ i0.ɵɵelementStart(2, "div", 93)(3, "mj-template-editor", 94, 1);
315
+ i0.ɵɵlistener("contentChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Template_mj_template_editor_contentChange_3_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTemplateContentChange($event)); })("runTemplate", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Template_mj_template_editor_runTemplate_3_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTemplateRun($event)); });
299
316
  i0.ɵɵelementEnd()()();
300
317
  } if (rf & 2) {
301
318
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -304,8 +321,8 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Template(r
304
321
  i0.ɵɵadvance(2);
305
322
  i0.ɵɵproperty("template", ctx_r1.template)("config", ctx_r1.templateEditorConfig);
306
323
  } }
307
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
308
- i0.ɵɵelementStart(0, "span", 91);
324
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
325
+ i0.ɵɵelementStart(0, "span", 104);
309
326
  i0.ɵɵtext(1);
310
327
  i0.ɵɵelementEnd();
311
328
  } if (rf & 2) {
@@ -313,13 +330,13 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_templat
313
330
  i0.ɵɵadvance();
314
331
  i0.ɵɵtextInterpolate(ctx_r1.promptModels.length);
315
332
  } }
316
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_template_1_Template(rf, ctx) { if (rf & 1) {
317
- i0.ɵɵelementStart(0, "span", 68);
318
- i0.ɵɵelement(1, "i", 90);
333
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_ng_template_1_Template(rf, ctx) { if (rf & 1) {
334
+ i0.ɵɵelementStart(0, "span", 81);
335
+ i0.ɵɵelement(1, "i", 103);
319
336
  i0.ɵɵtext(2, " Models ");
320
- i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_template_1_Conditional_3_Template, 2, 1, "span", 91);
321
- i0.ɵɵelementStart(4, "span", 92);
322
- i0.ɵɵelement(5, "i", 93);
337
+ i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_ng_template_1_Conditional_3_Template, 2, 1, "span", 104);
338
+ i0.ɵɵelementStart(4, "span", 105);
339
+ i0.ɵɵelement(5, "i", 106);
323
340
  i0.ɵɵtext(6, " Priority order (first available model will be used) ");
324
341
  i0.ɵɵelementEnd()();
325
342
  } if (rf & 2) {
@@ -327,257 +344,257 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_templat
327
344
  i0.ɵɵadvance(3);
328
345
  i0.ɵɵconditional(ctx_r1.promptModels.length > 0 ? 3 : -1);
329
346
  } }
330
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_4_Template(rf, ctx) { if (rf & 1) {
331
- i0.ɵɵelementStart(0, "div", 89);
332
- i0.ɵɵelement(1, "i", 59);
347
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_4_Template(rf, ctx) { if (rf & 1) {
348
+ i0.ɵɵelementStart(0, "div", 102);
349
+ i0.ɵɵelement(1, "i", 69);
333
350
  i0.ɵɵtext(2, " Loading models... ");
334
351
  i0.ɵɵelementEnd();
335
352
  } }
336
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
337
- const _r15 = i0.ɵɵgetCurrentView();
338
- i0.ɵɵelementStart(0, "button", 96);
339
- i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
340
- i0.ɵɵelement(1, "i", 75);
353
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
354
+ const _r16 = i0.ɵɵgetCurrentView();
355
+ i0.ɵɵelementStart(0, "button", 109);
356
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_0_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
357
+ i0.ɵɵelement(1, "i", 88);
341
358
  i0.ɵɵtext(2, " Add Model ");
342
359
  i0.ɵɵelementEnd();
343
360
  } }
344
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Template(rf, ctx) { if (rf & 1) {
345
- i0.ɵɵelementStart(0, "mj-empty-state", 94);
346
- i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Conditional_1_Template, 3, 0, "button", 95);
361
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_0_Template(rf, ctx) { if (rf & 1) {
362
+ i0.ɵɵelementStart(0, "mj-empty-state", 107);
363
+ i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_0_Conditional_1_Template, 3, 0, "button", 108);
347
364
  i0.ɵɵelementEnd();
348
365
  } if (rf & 2) {
349
366
  const ctx_r1 = i0.ɵɵnextContext(4);
350
367
  i0.ɵɵadvance();
351
368
  i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.UserCanCreatePromptModels ? 1 : -1);
352
369
  } }
353
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
354
- i0.ɵɵelementStart(0, "div", 97);
355
- i0.ɵɵelement(1, "i", 102);
370
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
371
+ i0.ɵɵelementStart(0, "div", 110);
372
+ i0.ɵɵelement(1, "i", 115);
356
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. ");
357
374
  i0.ɵɵelementEnd();
358
375
  } }
359
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
360
- i0.ɵɵelement(0, "i", 118);
361
- i0.ɵɵelementStart(1, "span", 119);
376
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
377
+ i0.ɵɵelement(0, "i", 131);
378
+ i0.ɵɵelementStart(1, "span", 132);
362
379
  i0.ɵɵtext(2);
363
380
  i0.ɵɵelementEnd();
364
381
  } if (rf & 2) {
365
- const ɵ$index_289_r17 = i0.ɵɵnextContext().$index;
382
+ const ɵ$index_299_r18 = i0.ɵɵnextContext().$index;
366
383
  i0.ɵɵadvance(2);
367
- i0.ɵɵtextInterpolate1("#", ɵ$index_289_r17 + 1);
384
+ i0.ɵɵtextInterpolate1("#", ɵ$index_299_r18 + 1);
368
385
  } }
369
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_3_Template(rf, ctx) { if (rf & 1) {
370
- i0.ɵɵelementStart(0, "span", 105);
386
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_3_Template(rf, ctx) { if (rf & 1) {
387
+ i0.ɵɵelementStart(0, "span", 118);
371
388
  i0.ɵɵtext(1);
372
389
  i0.ɵɵelementEnd();
373
390
  } if (rf & 2) {
374
- const ctx_r17 = i0.ɵɵnextContext();
375
- const model_r19 = ctx_r17.$implicit;
376
- const ɵ$index_289_r17 = ctx_r17.$index;
377
- i0.ɵɵproperty("title", i0.ɵɵinterpolate1("Priority ", model_r19.Priority, " - Higher priority numbers are tried first"));
391
+ const ctx_r18 = i0.ɵɵnextContext();
392
+ const model_r20 = ctx_r18.$implicit;
393
+ const ɵ$index_299_r18 = ctx_r18.$index;
394
+ i0.ɵɵproperty("title", i0.ɵɵinterpolate1("Priority ", model_r20.Priority, " - Higher priority numbers are tried first"));
378
395
  i0.ɵɵadvance();
379
- i0.ɵɵtextInterpolate1("#", ɵ$index_289_r17 + 1);
396
+ i0.ɵɵtextInterpolate1("#", ɵ$index_299_r18 + 1);
380
397
  } }
381
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template(rf, ctx) { if (rf & 1) {
382
- const _r20 = i0.ɵɵgetCurrentView();
383
- i0.ɵɵelementStart(0, "mj-dropdown", 120);
384
- 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); });
385
- 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_289_r17 = i0.ɵɵnextContext().$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onModelChange($event, ɵ$index_289_r17)); });
398
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_5_Template(rf, ctx) { if (rf & 1) {
399
+ const _r21 = i0.ɵɵgetCurrentView();
400
+ i0.ɵɵelementStart(0, "mj-dropdown", 133);
401
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_5_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r21); const model_r20 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(model_r20.ModelID, $event) || (model_r20.ModelID = $event); return i0.ɵɵresetView($event); });
402
+ i0.ɵɵlistener("ValueChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_5_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r21); const ɵ$index_299_r18 = i0.ɵɵnextContext().$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onModelChange($event, ɵ$index_299_r18)); });
386
403
  i0.ɵɵelementEnd();
387
404
  } if (rf & 2) {
388
- const model_r19 = i0.ɵɵnextContext().$implicit;
405
+ const model_r20 = i0.ɵɵnextContext().$implicit;
389
406
  const ctx_r1 = i0.ɵɵnextContext(5);
390
- i0.ɵɵtwoWayProperty("ngModel", model_r19.ModelID);
391
- i0.ɵɵproperty("name", "modelId_" + ctx_r1.getModelTrackId(model_r19))("Data", ctx_r1.availableModels)("ValuePrimitive", true)("Filterable", true);
407
+ i0.ɵɵtwoWayProperty("ngModel", model_r20.ModelID);
408
+ i0.ɵɵproperty("name", "modelId_" + ctx_r1.getModelTrackId(model_r20))("Data", ctx_r1.availableModels)("ValuePrimitive", true)("Filterable", true);
392
409
  } }
393
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_6_Template(rf, ctx) { if (rf & 1) {
410
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_6_Template(rf, ctx) { if (rf & 1) {
394
411
  i0.ɵɵelementStart(0, "span", 22);
395
412
  i0.ɵɵtext(1);
396
413
  i0.ɵɵelementEnd();
397
414
  } if (rf & 2) {
398
- const model_r19 = i0.ɵɵnextContext().$implicit;
415
+ const model_r20 = i0.ɵɵnextContext().$implicit;
399
416
  const ctx_r1 = i0.ɵɵnextContext(5);
400
417
  i0.ɵɵadvance();
401
- i0.ɵɵtextInterpolate(ctx_r1.getModelDisplayName(model_r19.ModelID));
418
+ i0.ɵɵtextInterpolate(ctx_r1.getModelDisplayName(model_r20.ModelID));
402
419
  } }
403
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template(rf, ctx) { if (rf & 1) {
404
- const _r21 = i0.ɵɵgetCurrentView();
405
- i0.ɵɵelementStart(0, "mj-dropdown", 123);
406
- 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); });
420
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template(rf, ctx) { if (rf & 1) {
421
+ const _r22 = i0.ɵɵgetCurrentView();
422
+ i0.ɵɵelementStart(0, "mj-dropdown", 136);
423
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r22); const model_r20 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r20.VendorID, $event) || (model_r20.VendorID = $event); return i0.ɵɵresetView($event); });
407
424
  i0.ɵɵelementEnd();
408
425
  } if (rf & 2) {
409
- const model_r19 = i0.ɵɵnextContext(3).$implicit;
426
+ const model_r20 = i0.ɵɵnextContext(3).$implicit;
410
427
  const ctx_r1 = i0.ɵɵnextContext(5);
411
- i0.ɵɵtwoWayProperty("ngModel", model_r19.VendorID);
412
- i0.ɵɵproperty("name", "vendorId_" + ctx_r1.getModelTrackId(model_r19))("Data", ctx_r1.getVendorsForModelSync(model_r19.ModelID))("ValuePrimitive", true)("Filterable", true);
428
+ i0.ɵɵtwoWayProperty("ngModel", model_r20.VendorID);
429
+ i0.ɵɵproperty("name", "vendorId_" + ctx_r1.getModelTrackId(model_r20))("Data", ctx_r1.getVendorsForModelSync(model_r20.ModelID))("ValuePrimitive", true)("Filterable", true);
413
430
  } }
414
- 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) {
415
- i0.ɵɵelementStart(0, "span", 126);
431
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
432
+ i0.ɵɵelementStart(0, "span", 139);
416
433
  i0.ɵɵtext(1);
417
434
  i0.ɵɵelementEnd();
418
435
  } if (rf & 2) {
419
- const model_r19 = i0.ɵɵnextContext(5).$implicit;
436
+ const model_r20 = i0.ɵɵnextContext(5).$implicit;
420
437
  const ctx_r1 = i0.ɵɵnextContext(5);
421
438
  i0.ɵɵadvance();
422
- i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r19.ModelID, ctx_r1.getVendorsForModelSync(model_r19.ModelID)[0].ID), ")");
439
+ i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r20.ModelID, ctx_r1.getVendorsForModelSync(model_r20.ModelID)[0].ID), ")");
423
440
  } }
424
- 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) {
425
- i0.ɵɵelementStart(0, "span", 125);
441
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
442
+ i0.ɵɵelementStart(0, "span", 138);
426
443
  i0.ɵɵtext(1);
427
- 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", 126);
444
+ i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Conditional_2_Template, 2, 1, "span", 139);
428
445
  i0.ɵɵelementEnd();
429
446
  } if (rf & 2) {
430
- const model_r19 = i0.ɵɵnextContext(4).$implicit;
447
+ const model_r20 = i0.ɵɵnextContext(4).$implicit;
431
448
  const ctx_r1 = i0.ɵɵnextContext(5);
432
- i0.ɵɵstyleProp("color", ctx_r1.getVendorStatusColor(model_r19.ModelID, ctx_r1.getVendorsForModelSync(model_r19.ModelID)[0].ID));
449
+ i0.ɵɵstyleProp("color", ctx_r1.getVendorStatusColor(model_r20.ModelID, ctx_r1.getVendorsForModelSync(model_r20.ModelID)[0].ID));
433
450
  i0.ɵɵadvance();
434
- i0.ɵɵtextInterpolate1(" ", ctx_r1.getVendorsForModelSync(model_r19.ModelID)[0].Name, " ");
451
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getVendorsForModelSync(model_r20.ModelID)[0].Name, " ");
435
452
  i0.ɵɵadvance();
436
- i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r19.ModelID, ctx_r1.getVendorsForModelSync(model_r19.ModelID)[0].ID) !== "Active" ? 2 : -1);
453
+ i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r20.ModelID, ctx_r1.getVendorsForModelSync(model_r20.ModelID)[0].ID) !== "Active" ? 2 : -1);
437
454
  } }
438
- 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) {
439
- i0.ɵɵelementStart(0, "span", 121);
455
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
456
+ i0.ɵɵelementStart(0, "span", 134);
440
457
  i0.ɵɵtext(1, "No vendors available");
441
458
  i0.ɵɵelementEnd();
442
459
  } }
443
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
444
- 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", 124)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template, 2, 0, "span", 121);
460
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_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_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template, 3, 4, "span", 137)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template, 2, 0, "span", 134);
445
462
  } if (rf & 2) {
446
- const model_r19 = i0.ɵɵnextContext(3).$implicit;
463
+ const model_r20 = i0.ɵɵnextContext(3).$implicit;
447
464
  const ctx_r1 = i0.ɵɵnextContext(5);
448
- i0.ɵɵconditional(ctx_r1.getVendorsForModelSync(model_r19.ModelID).length === 1 ? 0 : 1);
465
+ i0.ɵɵconditional(ctx_r1.getVendorsForModelSync(model_r20.ModelID).length === 1 ? 0 : 1);
449
466
  } }
450
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Template(rf, ctx) { if (rf & 1) {
451
- 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", 122)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Template, 2, 1);
467
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Template(rf, ctx) { if (rf & 1) {
468
+ i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template, 1, 5, "mj-dropdown", 135)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Template, 2, 1);
452
469
  } if (rf & 2) {
453
- const model_r19 = i0.ɵɵnextContext(2).$implicit;
470
+ const model_r20 = i0.ɵɵnextContext(2).$implicit;
454
471
  const ctx_r1 = i0.ɵɵnextContext(5);
455
- i0.ɵɵconditional(ctx_r1.shouldShowVendorDropdown(model_r19.ModelID) ? 0 : 1);
472
+ i0.ɵɵconditional(ctx_r1.shouldShowVendorDropdown(model_r20.ModelID) ? 0 : 1);
456
473
  } }
457
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
458
- i0.ɵɵelementStart(0, "span", 121);
474
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
475
+ i0.ɵɵelementStart(0, "span", 134);
459
476
  i0.ɵɵtext(1, "Select model first");
460
477
  i0.ɵɵelementEnd();
461
478
  } }
462
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Template(rf, ctx) { if (rf & 1) {
463
- 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", 121);
479
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Template(rf, ctx) { if (rf & 1) {
480
+ i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Template, 2, 1)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_1_Template, 2, 0, "span", 134);
464
481
  } if (rf & 2) {
465
- const model_r19 = i0.ɵɵnextContext().$implicit;
466
- i0.ɵɵconditional(model_r19.ModelID ? 0 : 1);
482
+ const model_r20 = i0.ɵɵnextContext().$implicit;
483
+ i0.ɵɵconditional(model_r20.ModelID ? 0 : 1);
467
484
  } }
468
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
469
- i0.ɵɵelementStart(0, "span", 126);
485
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
486
+ i0.ɵɵelementStart(0, "span", 139);
470
487
  i0.ɵɵtext(1);
471
488
  i0.ɵɵelementEnd();
472
489
  } if (rf & 2) {
473
- const model_r19 = i0.ɵɵnextContext(3).$implicit;
490
+ const model_r20 = i0.ɵɵnextContext(3).$implicit;
474
491
  const ctx_r1 = i0.ɵɵnextContext(5);
475
492
  i0.ɵɵadvance();
476
- i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r19.ModelID, model_r19.VendorID), ")");
493
+ i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r20.ModelID, model_r20.VendorID), ")");
477
494
  } }
478
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
479
- i0.ɵɵelementStart(0, "span", 110);
495
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
496
+ i0.ɵɵelementStart(0, "span", 123);
480
497
  i0.ɵɵtext(1);
481
- i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Conditional_2_Template, 2, 1, "span", 126);
498
+ i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Conditional_2_Template, 2, 1, "span", 139);
482
499
  i0.ɵɵelementEnd();
483
500
  } if (rf & 2) {
484
- const model_r19 = i0.ɵɵnextContext(2).$implicit;
501
+ const model_r20 = i0.ɵɵnextContext(2).$implicit;
485
502
  const ctx_r1 = i0.ɵɵnextContext(5);
486
- i0.ɵɵstyleProp("color", ctx_r1.getVendorStatusColor(model_r19.ModelID, model_r19.VendorID));
503
+ i0.ɵɵstyleProp("color", ctx_r1.getVendorStatusColor(model_r20.ModelID, model_r20.VendorID));
487
504
  i0.ɵɵadvance();
488
- i0.ɵɵtextInterpolate1(" ", ctx_r1.getVendorDisplayName(model_r19.VendorID), " ");
505
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getVendorDisplayName(model_r20.VendorID), " ");
489
506
  i0.ɵɵadvance();
490
- i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r19.ModelID, model_r19.VendorID) !== "Active" ? 2 : -1);
507
+ i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r20.ModelID, model_r20.VendorID) !== "Active" ? 2 : -1);
491
508
  } }
492
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
493
- i0.ɵɵelementStart(0, "span", 128);
509
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
510
+ i0.ɵɵelementStart(0, "span", 141);
494
511
  i0.ɵɵtext(1, "-");
495
512
  i0.ɵɵelementEnd();
496
513
  } }
497
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Template(rf, ctx) { if (rf & 1) {
498
- i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Template, 3, 4, "span", 127)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_1_Template, 2, 0, "span", 128);
514
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_9_Template(rf, ctx) { if (rf & 1) {
515
+ i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Template, 3, 4, "span", 140)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_1_Template, 2, 0, "span", 141);
499
516
  } if (rf & 2) {
500
- const model_r19 = i0.ɵɵnextContext().$implicit;
501
- i0.ɵɵconditional(model_r19.VendorID && model_r19.ModelID ? 0 : 1);
517
+ const model_r20 = i0.ɵɵnextContext().$implicit;
518
+ i0.ɵɵconditional(model_r20.VendorID && model_r20.ModelID ? 0 : 1);
502
519
  } }
503
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_0_Template(rf, ctx) { if (rf & 1) {
504
- i0.ɵɵelementStart(0, "div", 129);
505
- i0.ɵɵelement(1, "i", 59);
520
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_0_Template(rf, ctx) { if (rf & 1) {
521
+ i0.ɵɵelementStart(0, "div", 142);
522
+ i0.ɵɵelement(1, "i", 69);
506
523
  i0.ɵɵtext(2, " Loading... ");
507
524
  i0.ɵɵelementEnd();
508
525
  } }
509
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
510
- const _r22 = i0.ɵɵgetCurrentView();
511
- i0.ɵɵelementStart(0, "mj-dropdown", 131);
512
- 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); });
513
- 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_289_r17 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onConfigurationChange($event, ɵ$index_289_r17)); });
526
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
527
+ const _r23 = i0.ɵɵgetCurrentView();
528
+ i0.ɵɵelementStart(0, "mj-dropdown", 144);
529
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r23); const model_r20 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵtwoWayBindingSet(model_r20.ConfigurationID, $event) || (model_r20.ConfigurationID = $event); return i0.ɵɵresetView($event); });
530
+ i0.ɵɵlistener("ValueChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r23); const ɵ$index_299_r18 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onConfigurationChange($event, ɵ$index_299_r18)); });
514
531
  i0.ɵɵelementEnd();
515
532
  } if (rf & 2) {
516
- const model_r19 = i0.ɵɵnextContext(2).$implicit;
533
+ const model_r20 = i0.ɵɵnextContext(2).$implicit;
517
534
  const ctx_r1 = i0.ɵɵnextContext(5);
518
- i0.ɵɵtwoWayProperty("ngModel", model_r19.ConfigurationID);
519
- i0.ɵɵproperty("name", "configurationId_" + ctx_r1.getModelTrackId(model_r19))("Data", ctx_r1.availableConfigurations)("ValuePrimitive", true)("Filterable", true);
535
+ i0.ɵɵtwoWayProperty("ngModel", model_r20.ConfigurationID);
536
+ i0.ɵɵproperty("name", "configurationId_" + ctx_r1.getModelTrackId(model_r20))("Data", ctx_r1.availableConfigurations)("ValuePrimitive", true)("Filterable", true);
520
537
  } }
521
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Template(rf, ctx) { if (rf & 1) {
522
- i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_0_Template, 3, 0, "div", 129)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template, 1, 5, "mj-dropdown", 130);
538
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_11_Template(rf, ctx) { if (rf & 1) {
539
+ i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_0_Template, 3, 0, "div", 142)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template, 1, 5, "mj-dropdown", 143);
523
540
  } if (rf & 2) {
524
541
  const ctx_r1 = i0.ɵɵnextContext(6);
525
542
  i0.ɵɵconditional(ctx_r1.isLoadingConfigurations ? 0 : 1);
526
543
  } }
527
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_12_Template(rf, ctx) { if (rf & 1) {
528
- i0.ɵɵelementStart(0, "span", 110);
544
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_12_Template(rf, ctx) { if (rf & 1) {
545
+ i0.ɵɵelementStart(0, "span", 123);
529
546
  i0.ɵɵtext(1);
530
547
  i0.ɵɵelementEnd();
531
548
  } if (rf & 2) {
532
- const model_r19 = i0.ɵɵnextContext().$implicit;
549
+ const model_r20 = i0.ɵɵnextContext().$implicit;
533
550
  const ctx_r1 = i0.ɵɵnextContext(5);
534
551
  i0.ɵɵadvance();
535
- i0.ɵɵtextInterpolate(ctx_r1.getConfigurationDisplayName(model_r19.ConfigurationID));
552
+ i0.ɵɵtextInterpolate(ctx_r1.getConfigurationDisplayName(model_r20.ConfigurationID));
536
553
  } }
537
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_14_Template(rf, ctx) { if (rf & 1) {
538
- i0.ɵɵelementStart(0, "span", 112);
554
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_14_Template(rf, ctx) { if (rf & 1) {
555
+ i0.ɵɵelementStart(0, "span", 125);
539
556
  i0.ɵɵtext(1);
540
557
  i0.ɵɵpipe(2, "date");
541
558
  i0.ɵɵelementEnd();
542
559
  } if (rf & 2) {
543
- const model_r19 = i0.ɵɵnextContext().$implicit;
560
+ const model_r20 = i0.ɵɵnextContext().$implicit;
544
561
  i0.ɵɵadvance();
545
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(2, 1, model_r19.__mj_CreatedAt, "short"));
562
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(2, 1, model_r20.__mj_CreatedAt, "short"));
546
563
  } }
547
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_15_Template(rf, ctx) { if (rf & 1) {
548
- i0.ɵɵelementStart(0, "span", 113);
564
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_15_Template(rf, ctx) { if (rf & 1) {
565
+ i0.ɵɵelementStart(0, "span", 126);
549
566
  i0.ɵɵtext(1, "New");
550
567
  i0.ɵɵelementEnd();
551
568
  } }
552
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template(rf, ctx) { if (rf & 1) {
553
- const _r23 = i0.ɵɵgetCurrentView();
554
- i0.ɵɵelementStart(0, "button", 134);
555
- 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_289_r17 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelUp(ɵ$index_289_r17)); });
556
- i0.ɵɵelement(1, "i", 135);
569
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template(rf, ctx) { if (rf & 1) {
570
+ const _r24 = i0.ɵɵgetCurrentView();
571
+ i0.ɵɵelementStart(0, "button", 147);
572
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r24); const ɵ$index_299_r18 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelUp(ɵ$index_299_r18)); });
573
+ i0.ɵɵelement(1, "i", 148);
557
574
  i0.ɵɵelementEnd();
558
- i0.ɵɵelementStart(2, "button", 136);
559
- 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_289_r17 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelDown(ɵ$index_289_r17)); });
560
- i0.ɵɵelement(3, "i", 137);
575
+ i0.ɵɵelementStart(2, "button", 149);
576
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r24); const ɵ$index_299_r18 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelDown(ɵ$index_299_r18)); });
577
+ i0.ɵɵelement(3, "i", 150);
561
578
  i0.ɵɵelementEnd();
562
579
  } if (rf & 2) {
563
- const ɵ$index_289_r17 = i0.ɵɵnextContext(2).$index;
580
+ const ɵ$index_299_r18 = i0.ɵɵnextContext(2).$index;
564
581
  const ctx_r1 = i0.ɵɵnextContext(5);
565
- i0.ɵɵproperty("disabled", ɵ$index_289_r17 === 0);
582
+ i0.ɵɵproperty("disabled", ɵ$index_299_r18 === 0);
566
583
  i0.ɵɵadvance(2);
567
- i0.ɵɵproperty("disabled", ɵ$index_289_r17 === ctx_r1.promptModels.length - 1);
584
+ i0.ɵɵproperty("disabled", ɵ$index_299_r18 === ctx_r1.promptModels.length - 1);
568
585
  } }
569
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
570
- const _r24 = i0.ɵɵgetCurrentView();
571
- i0.ɵɵelementStart(0, "button", 138);
572
- 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_289_r17 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.removePromptModel(ɵ$index_289_r17)); });
573
- i0.ɵɵelement(1, "i", 139);
586
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
587
+ const _r25 = i0.ɵɵgetCurrentView();
588
+ i0.ɵɵelementStart(0, "button", 151);
589
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r25); const ɵ$index_299_r18 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.removePromptModel(ɵ$index_299_r18)); });
590
+ i0.ɵɵelement(1, "i", 152);
574
591
  i0.ɵɵelementEnd();
575
592
  } }
576
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Template(rf, ctx) { if (rf & 1) {
577
- i0.ɵɵelementStart(0, "div", 132);
578
- i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template, 4, 2);
593
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_17_Template(rf, ctx) { if (rf & 1) {
594
+ i0.ɵɵelementStart(0, "div", 145);
595
+ i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template, 4, 2);
579
596
  i0.ɵɵelementEnd();
580
- i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template, 2, 0, "button", 133);
597
+ i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template, 2, 0, "button", 146);
581
598
  } if (rf & 2) {
582
599
  const ctx_r1 = i0.ɵɵnextContext(6);
583
600
  i0.ɵɵadvance();
@@ -585,166 +602,166 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
585
602
  i0.ɵɵadvance();
586
603
  i0.ɵɵconditional(ctx_r1.UserCanDeletePromptModels ? 2 : -1);
587
604
  } }
588
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_22_Template(rf, ctx) { if (rf & 1) {
605
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_22_Template(rf, ctx) { if (rf & 1) {
589
606
  i0.ɵɵelementStart(0, "span")(1, "strong");
590
607
  i0.ɵɵtext(2, "Status:");
591
608
  i0.ɵɵelementEnd();
592
609
  i0.ɵɵtext(3);
593
610
  i0.ɵɵelementEnd();
594
611
  } if (rf & 2) {
595
- const model_r19 = i0.ɵɵnextContext().$implicit;
612
+ const model_r20 = i0.ɵɵnextContext().$implicit;
596
613
  i0.ɵɵadvance(3);
597
- i0.ɵɵtextInterpolate1(" ", model_r19.Status);
614
+ i0.ɵɵtextInterpolate1(" ", model_r20.Status);
598
615
  } }
599
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template(rf, ctx) { if (rf & 1) {
600
- const _r26 = i0.ɵɵgetCurrentView();
601
- i0.ɵɵelementStart(0, "div")(1, "label", 144);
616
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template(rf, ctx) { if (rf & 1) {
617
+ const _r27 = i0.ɵɵgetCurrentView();
618
+ i0.ɵɵelementStart(0, "div")(1, "label", 157);
602
619
  i0.ɵɵtext(2, "Parallel Count");
603
620
  i0.ɵɵelementEnd();
604
- i0.ɵɵelementStart(3, "mj-numeric-input", 146);
605
- 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); });
621
+ i0.ɵɵelementStart(3, "mj-numeric-input", 159);
622
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template_mj_numeric_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r27); const model_r20 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r20.ParallelCount, $event) || (model_r20.ParallelCount = $event); return i0.ɵɵresetView($event); });
606
623
  i0.ɵɵelementEnd()();
607
624
  } if (rf & 2) {
608
- const ctx_r17 = i0.ɵɵnextContext(3);
609
- const model_r19 = ctx_r17.$implicit;
610
- const ɵ$index_289_r17 = ctx_r17.$index;
625
+ const ctx_r18 = i0.ɵɵnextContext(3);
626
+ const model_r20 = ctx_r18.$implicit;
627
+ const ɵ$index_299_r18 = ctx_r18.$index;
611
628
  i0.ɵɵadvance(3);
612
- i0.ɵɵtwoWayProperty("ngModel", model_r19.ParallelCount);
613
- i0.ɵɵproperty("name", "parallelCount_" + ɵ$index_289_r17)("Min", 1)("Step", 1)("Format", "n0");
629
+ i0.ɵɵtwoWayProperty("ngModel", model_r20.ParallelCount);
630
+ i0.ɵɵproperty("name", "parallelCount_" + ɵ$index_299_r18)("Min", 1)("Step", 1)("Format", "n0");
614
631
  } }
615
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template(rf, ctx) { if (rf & 1) {
616
- const _r27 = i0.ɵɵgetCurrentView();
617
- i0.ɵɵelementStart(0, "div")(1, "label", 144);
632
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template(rf, ctx) { if (rf & 1) {
633
+ const _r28 = i0.ɵɵgetCurrentView();
634
+ i0.ɵɵelementStart(0, "div")(1, "label", 157);
618
635
  i0.ɵɵtext(2, "Config Parameter");
619
636
  i0.ɵɵelementEnd();
620
- i0.ɵɵelementStart(3, "input", 147);
621
- 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); });
637
+ i0.ɵɵelementStart(3, "input", 160);
638
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r28); const model_r20 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r20.ParallelConfigParam, $event) || (model_r20.ParallelConfigParam = $event); return i0.ɵɵresetView($event); });
622
639
  i0.ɵɵelementEnd()();
623
640
  } if (rf & 2) {
624
- const ctx_r17 = i0.ɵɵnextContext(3);
625
- const model_r19 = ctx_r17.$implicit;
626
- const ɵ$index_289_r17 = ctx_r17.$index;
641
+ const ctx_r18 = i0.ɵɵnextContext(3);
642
+ const model_r20 = ctx_r18.$implicit;
643
+ const ɵ$index_299_r18 = ctx_r18.$index;
627
644
  i0.ɵɵadvance(3);
628
- i0.ɵɵtwoWayProperty("ngModel", model_r19.ParallelConfigParam);
629
- i0.ɵɵproperty("name", "parallelConfigParam_" + ɵ$index_289_r17);
645
+ i0.ɵɵtwoWayProperty("ngModel", model_r20.ParallelConfigParam);
646
+ i0.ɵɵproperty("name", "parallelConfigParam_" + ɵ$index_299_r18);
630
647
  } }
631
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template(rf, ctx) { if (rf & 1) {
632
- const _r25 = i0.ɵɵgetCurrentView();
633
- i0.ɵɵelementStart(0, "div", 142)(1, "div")(2, "label", 144);
648
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template(rf, ctx) { if (rf & 1) {
649
+ const _r26 = i0.ɵɵgetCurrentView();
650
+ i0.ɵɵelementStart(0, "div", 155)(1, "div")(2, "label", 157);
634
651
  i0.ɵɵtext(3, "Parallel Mode");
635
652
  i0.ɵɵelementEnd();
636
- i0.ɵɵelementStart(4, "mj-dropdown", 145);
637
- 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); });
653
+ i0.ɵɵelementStart(4, "mj-dropdown", 158);
654
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template_mj_dropdown_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r26); const model_r20 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵtwoWayBindingSet(model_r20.ParallelizationMode, $event) || (model_r20.ParallelizationMode = $event); return i0.ɵɵresetView($event); });
638
655
  i0.ɵɵelementEnd()();
639
- i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template, 4, 5, "div");
640
- i0.ɵɵconditionalCreate(6, MJAIPromptFormComponentExtended_Conditional_1_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_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template, 4, 5, "div");
657
+ i0.ɵɵconditionalCreate(6, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template, 4, 2, "div");
641
658
  i0.ɵɵelementEnd();
642
659
  } if (rf & 2) {
643
- const ctx_r17 = i0.ɵɵnextContext(2);
644
- const model_r19 = ctx_r17.$implicit;
645
- const ɵ$index_289_r17 = ctx_r17.$index;
660
+ const ctx_r18 = i0.ɵɵnextContext(2);
661
+ const model_r20 = ctx_r18.$implicit;
662
+ const ɵ$index_299_r18 = ctx_r18.$index;
646
663
  i0.ɵɵadvance(4);
647
- i0.ɵɵtwoWayProperty("ngModel", model_r19.ParallelizationMode);
648
- i0.ɵɵproperty("name", "parallelMode_" + ɵ$index_289_r17)("Data", i0.ɵɵpureFunction3(9, _c4, i0.ɵɵpureFunction0(6, _c5), i0.ɵɵpureFunction0(7, _c6), i0.ɵɵpureFunction0(8, _c7)))("ValuePrimitive", true);
664
+ i0.ɵɵtwoWayProperty("ngModel", model_r20.ParallelizationMode);
665
+ i0.ɵɵproperty("name", "parallelMode_" + ɵ$index_299_r18)("Data", i0.ɵɵpureFunction3(9, _c4, i0.ɵɵpureFunction0(6, _c5), i0.ɵɵpureFunction0(7, _c6), i0.ɵɵpureFunction0(8, _c7)))("ValuePrimitive", true);
649
666
  i0.ɵɵadvance();
650
- i0.ɵɵconditional(model_r19.ParallelizationMode === "StaticCount" ? 5 : -1);
667
+ i0.ɵɵconditional(model_r20.ParallelizationMode === "StaticCount" ? 5 : -1);
651
668
  i0.ɵɵadvance();
652
- i0.ɵɵconditional(model_r19.ParallelizationMode === "ConfigParam" ? 6 : -1);
669
+ i0.ɵɵconditional(model_r20.ParallelizationMode === "ConfigParam" ? 6 : -1);
653
670
  } }
654
- function MJAIPromptFormComponentExtended_Conditional_1_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_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
655
672
  i0.ɵɵelementStart(0, "span")(1, "strong");
656
673
  i0.ɵɵtext(2, "Parallel Mode:");
657
674
  i0.ɵɵelementEnd();
658
675
  i0.ɵɵtext(3);
659
676
  i0.ɵɵelementEnd();
660
677
  } if (rf & 2) {
661
- const model_r19 = i0.ɵɵnextContext(3).$implicit;
678
+ const model_r20 = i0.ɵɵnextContext(3).$implicit;
662
679
  i0.ɵɵadvance(3);
663
- i0.ɵɵtextInterpolate1(" ", model_r19.ParallelizationMode);
680
+ i0.ɵɵtextInterpolate1(" ", model_r20.ParallelizationMode);
664
681
  } }
665
- function MJAIPromptFormComponentExtended_Conditional_1_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_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_2_Template(rf, ctx) { if (rf & 1) {
666
683
  i0.ɵɵelementStart(0, "span")(1, "strong");
667
684
  i0.ɵɵtext(2, "Parallel Count:");
668
685
  i0.ɵɵelementEnd();
669
686
  i0.ɵɵtext(3);
670
687
  i0.ɵɵelementEnd();
671
688
  } if (rf & 2) {
672
- const model_r19 = i0.ɵɵnextContext(3).$implicit;
689
+ const model_r20 = i0.ɵɵnextContext(3).$implicit;
673
690
  i0.ɵɵadvance(3);
674
- i0.ɵɵtextInterpolate1(" ", model_r19.ParallelCount);
691
+ i0.ɵɵtextInterpolate1(" ", model_r20.ParallelCount);
675
692
  } }
676
- function MJAIPromptFormComponentExtended_Conditional_1_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_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_3_Template(rf, ctx) { if (rf & 1) {
677
694
  i0.ɵɵelementStart(0, "span")(1, "strong");
678
695
  i0.ɵɵtext(2, "Config Param:");
679
696
  i0.ɵɵelementEnd();
680
697
  i0.ɵɵtext(3);
681
698
  i0.ɵɵelementEnd();
682
699
  } if (rf & 2) {
683
- const model_r19 = i0.ɵɵnextContext(3).$implicit;
700
+ const model_r20 = i0.ɵɵnextContext(3).$implicit;
684
701
  i0.ɵɵadvance(3);
685
- i0.ɵɵtextInterpolate1(" ", model_r19.ParallelConfigParam);
702
+ i0.ɵɵtextInterpolate1(" ", model_r20.ParallelConfigParam);
686
703
  } }
687
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Template(rf, ctx) { if (rf & 1) {
688
- i0.ɵɵelementStart(0, "div", 143);
689
- i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_1_Template, 4, 1, "span");
690
- i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_2_Template, 4, 1, "span");
691
- i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_3_Template, 4, 1, "span");
704
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Template(rf, ctx) { if (rf & 1) {
705
+ i0.ɵɵelementStart(0, "div", 156);
706
+ i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_1_Template, 4, 1, "span");
707
+ i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_2_Template, 4, 1, "span");
708
+ i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_3_Template, 4, 1, "span");
692
709
  i0.ɵɵelementEnd();
693
710
  } if (rf & 2) {
694
- const model_r19 = i0.ɵɵnextContext(2).$implicit;
711
+ const model_r20 = i0.ɵɵnextContext(2).$implicit;
695
712
  i0.ɵɵadvance();
696
- i0.ɵɵconditional(model_r19.ParallelizationMode ? 1 : -1);
713
+ i0.ɵɵconditional(model_r20.ParallelizationMode ? 1 : -1);
697
714
  i0.ɵɵadvance();
698
- i0.ɵɵconditional(model_r19.ParallelCount ? 2 : -1);
715
+ i0.ɵɵconditional(model_r20.ParallelCount ? 2 : -1);
699
716
  i0.ɵɵadvance();
700
- i0.ɵɵconditional(model_r19.ParallelConfigParam ? 3 : -1);
717
+ i0.ɵɵconditional(model_r20.ParallelConfigParam ? 3 : -1);
701
718
  } }
702
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Template(rf, ctx) { if (rf & 1) {
703
- i0.ɵɵelementStart(0, "div", 117)(1, "div", 140);
704
- i0.ɵɵelement(2, "i", 141);
719
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Template(rf, ctx) { if (rf & 1) {
720
+ i0.ɵɵelementStart(0, "div", 130)(1, "div", 153);
721
+ i0.ɵɵelement(2, "i", 154);
705
722
  i0.ɵɵtext(3, " Model-Specific Parallel Execution ");
706
723
  i0.ɵɵelementEnd();
707
- i0.ɵɵconditionalCreate(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template, 7, 13, "div", 142)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Template, 4, 3, "div", 143);
724
+ i0.ɵɵconditionalCreate(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template, 7, 13, "div", 155)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Template, 4, 3, "div", 156);
708
725
  i0.ɵɵelementEnd();
709
726
  } if (rf & 2) {
710
727
  const ctx_r1 = i0.ɵɵnextContext(6);
711
728
  i0.ɵɵadvance(4);
712
729
  i0.ɵɵconditional(ctx_r1.EditMode ? 4 : 5);
713
730
  } }
714
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Template(rf, ctx) { if (rf & 1) {
715
- const _r16 = i0.ɵɵgetCurrentView();
716
- i0.ɵɵelementStart(0, "div", 103);
717
- i0.ɵɵlistener("dragstart", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Template_div_dragstart_0_listener($event) { const ɵ$index_289_r17 = i0.ɵɵrestoreView(_r16).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragStart($event, ɵ$index_289_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_289_r17 = i0.ɵɵrestoreView(_r16).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDrop($event, ɵ$index_289_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)); });
718
- i0.ɵɵelementStart(1, "div", 104);
719
- 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", 105);
731
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Template(rf, ctx) { if (rf & 1) {
732
+ const _r17 = i0.ɵɵgetCurrentView();
733
+ i0.ɵɵelementStart(0, "div", 116);
734
+ i0.ɵɵlistener("dragstart", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Template_div_dragstart_0_listener($event) { const ɵ$index_299_r18 = i0.ɵɵrestoreView(_r17).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragStart($event, ɵ$index_299_r18)); })("dragover", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Template_div_dragover_0_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragOver($event)); })("drop", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Template_div_drop_0_listener($event) { const ɵ$index_299_r18 = i0.ɵɵrestoreView(_r17).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDrop($event, ɵ$index_299_r18)); })("dragend", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Template_div_dragend_0_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragEnd($event)); });
735
+ i0.ɵɵelementStart(1, "div", 117);
736
+ i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_2_Template, 3, 1)(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_3_Template, 2, 3, "span", 118);
720
737
  i0.ɵɵelementEnd();
721
- i0.ɵɵelementStart(4, "div", 106);
722
- i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template, 1, 5, "mj-dropdown", 107)(6, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_6_Template, 2, 1, "span", 22);
738
+ i0.ɵɵelementStart(4, "div", 119);
739
+ i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_5_Template, 1, 5, "mj-dropdown", 120)(6, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_6_Template, 2, 1, "span", 22);
723
740
  i0.ɵɵelementEnd();
724
- i0.ɵɵelementStart(7, "div", 108);
725
- 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);
741
+ i0.ɵɵelementStart(7, "div", 121);
742
+ i0.ɵɵconditionalCreate(8, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Template, 2, 1)(9, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_9_Template, 2, 1);
726
743
  i0.ɵɵelementEnd();
727
- i0.ɵɵelementStart(10, "div", 109);
728
- 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", 110);
744
+ i0.ɵɵelementStart(10, "div", 122);
745
+ i0.ɵɵconditionalCreate(11, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_11_Template, 2, 1)(12, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_12_Template, 2, 1, "span", 123);
729
746
  i0.ɵɵelementEnd();
730
- i0.ɵɵelementStart(13, "div", 111);
731
- i0.ɵɵconditionalCreate(14, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_14_Template, 3, 4, "span", 112)(15, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_15_Template, 2, 0, "span", 113);
747
+ i0.ɵɵelementStart(13, "div", 124);
748
+ i0.ɵɵconditionalCreate(14, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_14_Template, 3, 4, "span", 125)(15, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_15_Template, 2, 0, "span", 126);
732
749
  i0.ɵɵelementEnd();
733
- i0.ɵɵelementStart(16, "div", 114);
734
- i0.ɵɵconditionalCreate(17, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Template, 3, 2);
750
+ i0.ɵɵelementStart(16, "div", 127);
751
+ i0.ɵɵconditionalCreate(17, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_17_Template, 3, 2);
735
752
  i0.ɵɵelementEnd()();
736
- i0.ɵɵelementStart(18, "div", 115);
753
+ i0.ɵɵelementStart(18, "div", 128);
737
754
  i0.ɵɵelement(19, "div");
738
- i0.ɵɵelementStart(20, "div")(21, "div", 116);
739
- i0.ɵɵconditionalCreate(22, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_22_Template, 4, 1, "span");
755
+ i0.ɵɵelementStart(20, "div")(21, "div", 129);
756
+ i0.ɵɵconditionalCreate(22, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_22_Template, 4, 1, "span");
740
757
  i0.ɵɵelementEnd();
741
- i0.ɵɵconditionalCreate(23, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Template, 6, 1, "div", 117);
758
+ i0.ɵɵconditionalCreate(23, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Template, 6, 1, "div", 130);
742
759
  i0.ɵɵelementEnd()();
743
760
  } if (rf & 2) {
744
- const model_r19 = ctx.$implicit;
745
- const ɵ$index_289_r17 = ctx.$index;
761
+ const model_r20 = ctx.$implicit;
762
+ const ɵ$index_299_r18 = ctx.$index;
746
763
  const ctx_r1 = i0.ɵɵnextContext(5);
747
- i0.ɵɵstyleProp("background", !model_r19.ModelID ? "#fff3cd" : ctx_r1.draggedIndex === ɵ$index_289_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_289_r17 ? "0.5" : "1");
764
+ i0.ɵɵstyleProp("background", !model_r20.ModelID ? "#fff3cd" : ctx_r1.draggedIndex === ɵ$index_299_r18 ? "color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))" : "var(--mj-bg-surface-card)")("border-left", !model_r20.ModelID ? "3px solid #ffc107" : "none")("opacity", ctx_r1.draggedIndex === ɵ$index_299_r18 ? "0.5" : "1");
748
765
  i0.ɵɵproperty("draggable", ctx_r1.EditMode);
749
766
  i0.ɵɵadvance(2);
750
767
  i0.ɵɵconditional(ctx_r1.EditMode ? 2 : 3);
@@ -755,30 +772,30 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
755
772
  i0.ɵɵadvance(3);
756
773
  i0.ɵɵconditional(ctx_r1.EditMode ? 11 : 12);
757
774
  i0.ɵɵadvance(3);
758
- i0.ɵɵconditional(model_r19.ID ? 14 : 15);
775
+ i0.ɵɵconditional(model_r20.ID ? 14 : 15);
759
776
  i0.ɵɵadvance(3);
760
777
  i0.ɵɵconditional(ctx_r1.EditMode ? 17 : -1);
761
778
  i0.ɵɵadvance(5);
762
- i0.ɵɵconditional(model_r19.Status ? 22 : -1);
779
+ i0.ɵɵconditional(model_r20.Status ? 22 : -1);
763
780
  i0.ɵɵadvance();
764
781
  i0.ɵɵconditional(ctx_r1.record.ParallelizationMode === "ModelSpecific" ? 23 : -1);
765
782
  } }
766
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
767
- const _r28 = i0.ɵɵgetCurrentView();
768
- i0.ɵɵelementStart(0, "div", 101)(1, "button", 148);
769
- 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()); });
770
- i0.ɵɵelement(2, "i", 75);
783
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
784
+ const _r29 = i0.ɵɵgetCurrentView();
785
+ i0.ɵɵelementStart(0, "div", 114)(1, "button", 161);
786
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_Conditional_18_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
787
+ i0.ɵɵelement(2, "i", 88);
771
788
  i0.ɵɵtext(3, " Add Model ");
772
789
  i0.ɵɵelementEnd()();
773
790
  } }
774
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
775
- i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_0_Template, 3, 0, "div", 97);
776
- i0.ɵɵelementStart(1, "div", 98)(2, "div", 99);
777
- i0.ɵɵelement(3, "i", 100);
791
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
792
+ i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_Conditional_0_Template, 3, 0, "div", 110);
793
+ i0.ɵɵelementStart(1, "div", 111)(2, "div", 112);
794
+ i0.ɵɵelement(3, "i", 113);
778
795
  i0.ɵɵelementEnd();
779
796
  i0.ɵɵelementStart(4, "div");
780
797
  i0.ɵɵtext(5, "AI Model ");
781
- i0.ɵɵelementStart(6, "span", 56);
798
+ i0.ɵɵelementStart(6, "span", 66);
782
799
  i0.ɵɵtext(7, "*");
783
800
  i0.ɵɵelementEnd()();
784
801
  i0.ɵɵelementStart(8, "div");
@@ -793,8 +810,8 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
793
810
  i0.ɵɵelementStart(14, "div");
794
811
  i0.ɵɵtext(15, "Actions");
795
812
  i0.ɵɵelementEnd()();
796
- i0.ɵɵrepeaterCreate(16, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Template, 24, 15, null, null, _forTrack0, true);
797
- i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_18_Template, 4, 0, "div", 101);
813
+ i0.ɵɵrepeaterCreate(16, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Template, 24, 15, null, null, _forTrack0, true);
814
+ i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_Conditional_18_Template, 4, 0, "div", 114);
798
815
  } if (rf & 2) {
799
816
  const ctx_r1 = i0.ɵɵnextContext(4);
800
817
  i0.ɵɵconditional(ctx_r1.promptModels.length > 1 ? 0 : -1);
@@ -803,67 +820,67 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
803
820
  i0.ɵɵadvance(2);
804
821
  i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.UserCanCreatePromptModels ? 18 : -1);
805
822
  } }
806
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Template(rf, ctx) { if (rf & 1) {
807
- i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Template, 2, 1, "mj-empty-state", 94)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Template, 19, 2);
823
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Template(rf, ctx) { if (rf & 1) {
824
+ i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_0_Template, 2, 1, "mj-empty-state", 107)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_Template, 19, 2);
808
825
  } if (rf & 2) {
809
826
  const ctx_r1 = i0.ɵɵnextContext(3);
810
827
  i0.ɵɵconditional(ctx_r1.promptModels.length === 0 ? 0 : 1);
811
828
  } }
812
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Template(rf, ctx) { if (rf & 1) {
813
- i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
814
- i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_template_1_Template, 7, 1, "ng-template", 29);
815
- i0.ɵɵelementStart(2, "div", 35)(3, "div", 88);
816
- i0.ɵɵconditionalCreate(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_4_Template, 3, 0, "div", 89)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Template, 2, 1);
829
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Template(rf, ctx) { if (rf & 1) {
830
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 37);
831
+ i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_ng_template_1_Template, 7, 1, "ng-template", 31);
832
+ i0.ɵɵelementStart(2, "div", 39)(3, "div", 101);
833
+ i0.ɵɵconditionalCreate(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_4_Template, 3, 0, "div", 102)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Template, 2, 1);
817
834
  i0.ɵɵelementEnd()()();
818
835
  } if (rf & 2) {
819
836
  const ctx_r1 = i0.ɵɵnextContext(2);
820
- i0.ɵɵproperty("Expanded", true);
837
+ i0.ɵɵproperty("SectionCount", ctx_r1.promptModels.length)("Expanded", true);
821
838
  i0.ɵɵadvance(4);
822
839
  i0.ɵɵconditional(ctx_r1.isLoadingModels ? 4 : 5);
823
840
  } }
824
- function MJAIPromptFormComponentExtended_Conditional_1_ng_template_44_Template(rf, ctx) { if (rf & 1) {
825
- i0.ɵɵelementStart(0, "span", 68);
826
- i0.ɵɵelement(1, "i", 149);
841
+ function MJAIPromptFormComponentExtended_Conditional_1_ng_template_46_Template(rf, ctx) { if (rf & 1) {
842
+ i0.ɵɵelementStart(0, "span", 81);
843
+ i0.ɵɵelement(1, "i", 162);
827
844
  i0.ɵɵtext(2, " Advanced Configuration ");
828
845
  i0.ɵɵelementEnd();
829
846
  } }
830
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_49_Template(rf, ctx) { if (rf & 1) {
831
- i0.ɵɵelement(0, "mj-form-field", 38);
847
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_51_Template(rf, ctx) { if (rf & 1) {
848
+ i0.ɵɵelement(0, "mj-form-field", 42);
832
849
  } if (rf & 2) {
833
850
  const ctx_r1 = i0.ɵɵnextContext(2);
834
851
  i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
835
852
  } }
836
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_50_Template(rf, ctx) { if (rf & 1) {
837
- i0.ɵɵelement(0, "mj-form-field", 39);
853
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_52_Template(rf, ctx) { if (rf & 1) {
854
+ i0.ɵɵelement(0, "mj-form-field", 43);
838
855
  } if (rf & 2) {
839
856
  const ctx_r1 = i0.ɵɵnextContext(2);
840
857
  i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
841
858
  } }
842
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_60_Conditional_0_Template(rf, ctx) { if (rf & 1) {
843
- i0.ɵɵelementStart(0, "div", 150);
844
- i0.ɵɵelement(1, "i", 59);
859
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_62_Conditional_0_Template(rf, ctx) { if (rf & 1) {
860
+ i0.ɵɵelementStart(0, "div", 163);
861
+ i0.ɵɵelement(1, "i", 69);
845
862
  i0.ɵɵtext(2, " Loading prompts... ");
846
863
  i0.ɵɵelementEnd();
847
864
  } }
848
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_60_Conditional_1_Template(rf, ctx) { if (rf & 1) {
849
- const _r29 = i0.ɵɵgetCurrentView();
850
- i0.ɵɵelementStart(0, "mj-dropdown", 152);
851
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_60_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); });
852
- i0.ɵɵlistener("ValueChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_60_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)); });
865
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_62_Conditional_1_Template(rf, ctx) { if (rf & 1) {
866
+ const _r30 = i0.ɵɵgetCurrentView();
867
+ i0.ɵɵelementStart(0, "mj-dropdown", 165);
868
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_62_Conditional_1_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r30); 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_62_Conditional_1_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r30); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onResultSelectorChange($event)); });
853
870
  i0.ɵɵelementEnd();
854
871
  } if (rf & 2) {
855
872
  const ctx_r1 = i0.ɵɵnextContext(3);
856
873
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.ResultSelectorPromptID);
857
874
  i0.ɵɵproperty("Data", ctx_r1.resultSelectorTreeData)("ValuePrimitive", true)("Filterable", true);
858
875
  } }
859
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_60_Template(rf, ctx) { if (rf & 1) {
860
- i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_60_Conditional_0_Template, 3, 0, "div", 150)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_60_Conditional_1_Template, 1, 4, "mj-dropdown", 151);
876
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_62_Template(rf, ctx) { if (rf & 1) {
877
+ i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_62_Conditional_0_Template, 3, 0, "div", 163)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_62_Conditional_1_Template, 1, 4, "mj-dropdown", 164);
861
878
  } if (rf & 2) {
862
879
  const ctx_r1 = i0.ɵɵnextContext(2);
863
880
  i0.ɵɵconditional(ctx_r1.isLoadingResultSelectorData ? 0 : 1);
864
881
  } }
865
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_61_Template(rf, ctx) { if (rf & 1) {
866
- i0.ɵɵelementStart(0, "span", 47);
882
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_63_Template(rf, ctx) { if (rf & 1) {
883
+ i0.ɵɵelementStart(0, "span", 51);
867
884
  i0.ɵɵtext(1);
868
885
  i0.ɵɵelementEnd();
869
886
  } if (rf & 2) {
@@ -871,21 +888,21 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_61_Template(r
871
888
  i0.ɵɵadvance();
872
889
  i0.ɵɵtextInterpolate(ctx_r1.getPromptDisplayName(ctx_r1.record.ResultSelectorPromptID || "") || "None selected");
873
890
  } }
874
- function MJAIPromptFormComponentExtended_Conditional_1_ng_template_63_Template(rf, ctx) { if (rf & 1) {
875
- i0.ɵɵelementStart(0, "span", 68);
876
- i0.ɵɵelement(1, "i", 153);
891
+ function MJAIPromptFormComponentExtended_Conditional_1_ng_template_65_Template(rf, ctx) { if (rf & 1) {
892
+ i0.ɵɵelementStart(0, "span", 81);
893
+ i0.ɵɵelement(1, "i", 166);
877
894
  i0.ɵɵtext(2, " Prefill & Output Control ");
878
895
  i0.ɵɵelementEnd();
879
896
  } }
880
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_ng_template_1_Template(rf, ctx) { if (rf & 1) {
881
- i0.ɵɵelementStart(0, "span", 68);
882
- i0.ɵɵelement(1, "i", 155);
897
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_ng_template_1_Template(rf, ctx) { if (rf & 1) {
898
+ i0.ɵɵelementStart(0, "span", 81);
899
+ i0.ɵɵelement(1, "i", 168);
883
900
  i0.ɵɵtext(2, " Template Parameters ");
884
- i0.ɵɵelementStart(3, "span", 91);
901
+ i0.ɵɵelementStart(3, "span", 104);
885
902
  i0.ɵɵtext(4);
886
903
  i0.ɵɵelementEnd();
887
- i0.ɵɵelementStart(5, "span", 92);
888
- i0.ɵɵelement(6, "i", 156);
904
+ i0.ɵɵelementStart(5, "span", 105);
905
+ i0.ɵɵelement(6, "i", 169);
889
906
  i0.ɵɵtext(7, " Parameters defined in the template ");
890
907
  i0.ɵɵelementEnd()();
891
908
  } if (rf & 2) {
@@ -893,171 +910,171 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_ng_templat
893
910
  i0.ɵɵadvance(4);
894
911
  i0.ɵɵtextInterpolate(ctx_r1.templateParams.length);
895
912
  } }
896
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_3_Template(rf, ctx) { if (rf & 1) {
897
- i0.ɵɵelementStart(0, "div", 89);
898
- i0.ɵɵelement(1, "i", 59);
913
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_3_Template(rf, ctx) { if (rf & 1) {
914
+ i0.ɵɵelementStart(0, "div", 102);
915
+ i0.ɵɵelement(1, "i", 69);
899
916
  i0.ɵɵtext(2, " Loading template parameters... ");
900
917
  i0.ɵɵelementEnd();
901
918
  } }
902
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_4_Template(rf, ctx) { if (rf & 1) {
903
- i0.ɵɵelement(0, "mj-empty-state", 154);
919
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_4_Template(rf, ctx) { if (rf & 1) {
920
+ i0.ɵɵelement(0, "mj-empty-state", 167);
904
921
  } }
905
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
906
- i0.ɵɵelementStart(0, "span", 168);
922
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
923
+ i0.ɵɵelementStart(0, "span", 181);
907
924
  i0.ɵɵtext(1, "*");
908
925
  i0.ɵɵelementEnd();
909
926
  } }
910
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
911
- i0.ɵɵelementStart(0, "span", 170);
927
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
928
+ i0.ɵɵelementStart(0, "span", 183);
912
929
  i0.ɵɵtext(1, "Required");
913
930
  i0.ɵɵelementEnd();
914
931
  } }
915
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
916
- i0.ɵɵelementStart(0, "span", 171);
932
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
933
+ i0.ɵɵelementStart(0, "span", 184);
917
934
  i0.ɵɵtext(1, "Optional");
918
935
  i0.ɵɵelementEnd();
919
936
  } }
920
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
921
- i0.ɵɵelementStart(0, "p", 172);
937
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
938
+ i0.ɵɵelementStart(0, "p", 185);
922
939
  i0.ɵɵtext(1);
923
940
  i0.ɵɵelementEnd();
924
941
  } if (rf & 2) {
925
- const param_r30 = i0.ɵɵnextContext().$implicit;
942
+ const param_r31 = i0.ɵɵnextContext().$implicit;
926
943
  i0.ɵɵadvance();
927
- i0.ɵɵtextInterpolate1(" ", param_r30.Description, " ");
944
+ i0.ɵɵtextInterpolate1(" ", param_r31.Description, " ");
928
945
  } }
929
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
930
- i0.ɵɵelementStart(0, "div", 177)(1, "label", 178);
946
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
947
+ i0.ɵɵelementStart(0, "div", 190)(1, "label", 191);
931
948
  i0.ɵɵtext(2, "Default Value");
932
949
  i0.ɵɵelementEnd();
933
- i0.ɵɵelementStart(3, "code", 179);
950
+ i0.ɵɵelementStart(3, "code", 192);
934
951
  i0.ɵɵtext(4);
935
952
  i0.ɵɵelementEnd()();
936
953
  } if (rf & 2) {
937
- const param_r30 = i0.ɵɵnextContext().$implicit;
954
+ const param_r31 = i0.ɵɵnextContext().$implicit;
938
955
  i0.ɵɵadvance(4);
939
- i0.ɵɵtextInterpolate(param_r30.DefaultValue);
956
+ i0.ɵɵtextInterpolate(param_r31.DefaultValue);
940
957
  } }
941
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
942
- i0.ɵɵelementStart(0, "div", 177)(1, "label", 178);
958
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
959
+ i0.ɵɵelementStart(0, "div", 190)(1, "label", 191);
943
960
  i0.ɵɵtext(2, "Entity");
944
961
  i0.ɵɵelementEnd();
945
- i0.ɵɵelementStart(3, "span", 173);
962
+ i0.ɵɵelementStart(3, "span", 186);
946
963
  i0.ɵɵtext(4);
947
964
  i0.ɵɵelementEnd()();
948
965
  } if (rf & 2) {
949
- const param_r30 = i0.ɵɵnextContext().$implicit;
966
+ const param_r31 = i0.ɵɵnextContext().$implicit;
950
967
  i0.ɵɵadvance(4);
951
- i0.ɵɵtextInterpolate(param_r30.Entity || "Entity ID: " + param_r30.EntityID);
968
+ i0.ɵɵtextInterpolate(param_r31.Entity || "Entity ID: " + param_r31.EntityID);
952
969
  } }
953
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_20_Conditional_5_Template(rf, ctx) { if (rf & 1) {
970
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_20_Conditional_5_Template(rf, ctx) { if (rf & 1) {
954
971
  i0.ɵɵtext(0);
955
972
  } if (rf & 2) {
956
- const param_r30 = i0.ɵɵnextContext(2).$implicit;
957
- i0.ɵɵtextInterpolate1(" (", param_r30.LinkedParameterField, ") ");
973
+ const param_r31 = i0.ɵɵnextContext(2).$implicit;
974
+ i0.ɵɵtextInterpolate1(" (", param_r31.LinkedParameterField, ") ");
958
975
  } }
959
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
960
- i0.ɵɵelementStart(0, "div", 177)(1, "label", 178);
976
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
977
+ i0.ɵɵelementStart(0, "div", 190)(1, "label", 191);
961
978
  i0.ɵɵtext(2, "Linked To");
962
979
  i0.ɵɵelementEnd();
963
- i0.ɵɵelementStart(3, "span", 173);
980
+ i0.ɵɵelementStart(3, "span", 186);
964
981
  i0.ɵɵtext(4);
965
- i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_20_Conditional_5_Template, 1, 1);
982
+ i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_20_Conditional_5_Template, 1, 1);
966
983
  i0.ɵɵelementEnd()();
967
984
  } if (rf & 2) {
968
- const param_r30 = i0.ɵɵnextContext().$implicit;
985
+ const param_r31 = i0.ɵɵnextContext().$implicit;
969
986
  i0.ɵɵadvance(4);
970
- i0.ɵɵtextInterpolate1(" ", param_r30.LinkedParameterName, " ");
987
+ i0.ɵɵtextInterpolate1(" ", param_r31.LinkedParameterName, " ");
971
988
  i0.ɵɵadvance();
972
- i0.ɵɵconditional(param_r30.LinkedParameterField ? 5 : -1);
989
+ i0.ɵɵconditional(param_r31.LinkedParameterField ? 5 : -1);
973
990
  } }
974
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
975
- i0.ɵɵelementStart(0, "div", 177)(1, "label", 178);
991
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
992
+ i0.ɵɵelementStart(0, "div", 190)(1, "label", 191);
976
993
  i0.ɵɵtext(2, "Filter");
977
994
  i0.ɵɵelementEnd();
978
- i0.ɵɵelementStart(3, "code", 180);
995
+ i0.ɵɵelementStart(3, "code", 193);
979
996
  i0.ɵɵtext(4);
980
997
  i0.ɵɵelementEnd()();
981
998
  } if (rf & 2) {
982
- const param_r30 = i0.ɵɵnextContext().$implicit;
999
+ const param_r31 = i0.ɵɵnextContext().$implicit;
983
1000
  i0.ɵɵadvance(4);
984
- i0.ɵɵtextInterpolate(param_r30.ExtraFilter);
1001
+ i0.ɵɵtextInterpolate(param_r31.ExtraFilter);
985
1002
  } }
986
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
987
- i0.ɵɵelementStart(0, "div", 177)(1, "label", 178);
1003
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
1004
+ i0.ɵɵelementStart(0, "div", 190)(1, "label", 191);
988
1005
  i0.ɵɵtext(2, "Record ID");
989
1006
  i0.ɵɵelementEnd();
990
- i0.ɵɵelementStart(3, "code", 173);
1007
+ i0.ɵɵelementStart(3, "code", 186);
991
1008
  i0.ɵɵtext(4);
992
1009
  i0.ɵɵelementEnd()();
993
1010
  } if (rf & 2) {
994
- const param_r30 = i0.ɵɵnextContext().$implicit;
1011
+ const param_r31 = i0.ɵɵnextContext().$implicit;
995
1012
  i0.ɵɵadvance(4);
996
- i0.ɵɵtextInterpolate(param_r30.RecordID);
1013
+ i0.ɵɵtextInterpolate(param_r31.RecordID);
997
1014
  } }
998
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Template(rf, ctx) { if (rf & 1) {
999
- i0.ɵɵelementStart(0, "div", 163)(1, "div", 164)(2, "div", 165);
1000
- i0.ɵɵelement(3, "i", 166);
1001
- i0.ɵɵelementStart(4, "h6", 167);
1015
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Template(rf, ctx) { if (rf & 1) {
1016
+ i0.ɵɵelementStart(0, "div", 176)(1, "div", 177)(2, "div", 178);
1017
+ i0.ɵɵelement(3, "i", 179);
1018
+ i0.ɵɵelementStart(4, "h6", 180);
1002
1019
  i0.ɵɵtext(5);
1003
- i0.ɵɵconditionalCreate(6, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_6_Template, 2, 0, "span", 168);
1020
+ i0.ɵɵconditionalCreate(6, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_6_Template, 2, 0, "span", 181);
1004
1021
  i0.ɵɵelementEnd()();
1005
- i0.ɵɵelementStart(7, "div", 165)(8, "span", 169);
1022
+ i0.ɵɵelementStart(7, "div", 178)(8, "span", 182);
1006
1023
  i0.ɵɵtext(9);
1007
1024
  i0.ɵɵelementEnd();
1008
- i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_10_Template, 2, 0, "span", 170)(11, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_11_Template, 2, 0, "span", 171);
1025
+ i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_10_Template, 2, 0, "span", 183)(11, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_11_Template, 2, 0, "span", 184);
1009
1026
  i0.ɵɵelementEnd()();
1010
- i0.ɵɵconditionalCreate(12, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_12_Template, 2, 1, "p", 172);
1011
- i0.ɵɵelementStart(13, "div", 173)(14, "span", 174);
1012
- i0.ɵɵelement(15, "i", 175);
1027
+ i0.ɵɵconditionalCreate(12, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_12_Template, 2, 1, "p", 185);
1028
+ i0.ɵɵelementStart(13, "div", 186)(14, "span", 187);
1029
+ i0.ɵɵelement(15, "i", 188);
1013
1030
  i0.ɵɵtext(16);
1014
1031
  i0.ɵɵelementEnd()();
1015
- i0.ɵɵelementStart(17, "div", 176);
1016
- i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_18_Template, 5, 1, "div", 177);
1017
- i0.ɵɵconditionalCreate(19, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_19_Template, 5, 1, "div", 177);
1018
- i0.ɵɵconditionalCreate(20, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_20_Template, 6, 2, "div", 177);
1019
- i0.ɵɵconditionalCreate(21, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_21_Template, 5, 1, "div", 177);
1020
- i0.ɵɵconditionalCreate(22, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_22_Template, 5, 1, "div", 177);
1032
+ i0.ɵɵelementStart(17, "div", 189);
1033
+ i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_18_Template, 5, 1, "div", 190);
1034
+ i0.ɵɵconditionalCreate(19, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_19_Template, 5, 1, "div", 190);
1035
+ i0.ɵɵconditionalCreate(20, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_20_Template, 6, 2, "div", 190);
1036
+ i0.ɵɵconditionalCreate(21, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_21_Template, 5, 1, "div", 190);
1037
+ i0.ɵɵconditionalCreate(22, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_22_Template, 5, 1, "div", 190);
1021
1038
  i0.ɵɵelementEnd()();
1022
1039
  } if (rf & 2) {
1023
- const param_r30 = ctx.$implicit;
1040
+ const param_r31 = ctx.$implicit;
1024
1041
  const ctx_r1 = i0.ɵɵnextContext(4);
1025
- i0.ɵɵstyleProp("border-left", "4px solid " + ctx_r1.getParamTypeColor(param_r30.Type));
1042
+ i0.ɵɵstyleProp("border-left", "4px solid " + ctx_r1.getParamTypeColor(param_r31.Type));
1026
1043
  i0.ɵɵadvance(3);
1027
- i0.ɵɵclassMap("fa-solid " + ctx_r1.getParamTypeIcon(param_r30.Type));
1028
- i0.ɵɵstyleProp("color", ctx_r1.getParamTypeColor(param_r30.Type));
1044
+ i0.ɵɵclassMap("fa-solid " + ctx_r1.getParamTypeIcon(param_r31.Type));
1045
+ i0.ɵɵstyleProp("color", ctx_r1.getParamTypeColor(param_r31.Type));
1029
1046
  i0.ɵɵadvance(2);
1030
- i0.ɵɵtextInterpolate1(" ", param_r30.Name, " ");
1047
+ i0.ɵɵtextInterpolate1(" ", param_r31.Name, " ");
1031
1048
  i0.ɵɵadvance();
1032
- i0.ɵɵconditional(param_r30.IsRequired ? 6 : -1);
1049
+ i0.ɵɵconditional(param_r31.IsRequired ? 6 : -1);
1033
1050
  i0.ɵɵadvance(2);
1034
- i0.ɵɵstyleProp("background-color", ctx_r1.getParamTypeColor(param_r30.Type));
1051
+ i0.ɵɵstyleProp("background-color", ctx_r1.getParamTypeColor(param_r31.Type));
1035
1052
  i0.ɵɵadvance();
1036
- i0.ɵɵtextInterpolate1(" ", param_r30.Type, " ");
1053
+ i0.ɵɵtextInterpolate1(" ", param_r31.Type, " ");
1037
1054
  i0.ɵɵadvance();
1038
- i0.ɵɵconditional(param_r30.IsRequired ? 10 : 11);
1055
+ i0.ɵɵconditional(param_r31.IsRequired ? 10 : 11);
1039
1056
  i0.ɵɵadvance(2);
1040
- i0.ɵɵconditional(param_r30.Description ? 12 : -1);
1057
+ i0.ɵɵconditional(param_r31.Description ? 12 : -1);
1041
1058
  i0.ɵɵadvance(4);
1042
- i0.ɵɵtextInterpolate1(" ", ctx_r1.getParamTypeDescription(param_r30), " ");
1059
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getParamTypeDescription(param_r31), " ");
1043
1060
  i0.ɵɵadvance(2);
1044
- i0.ɵɵconditional(param_r30.DefaultValue ? 18 : -1);
1061
+ i0.ɵɵconditional(param_r31.DefaultValue ? 18 : -1);
1045
1062
  i0.ɵɵadvance();
1046
- i0.ɵɵconditional(param_r30.EntityID ? 19 : -1);
1063
+ i0.ɵɵconditional(param_r31.EntityID ? 19 : -1);
1047
1064
  i0.ɵɵadvance();
1048
- i0.ɵɵconditional(param_r30.LinkedParameterName ? 20 : -1);
1065
+ i0.ɵɵconditional(param_r31.LinkedParameterName ? 20 : -1);
1049
1066
  i0.ɵɵadvance();
1050
- i0.ɵɵconditional(param_r30.ExtraFilter ? 21 : -1);
1067
+ i0.ɵɵconditional(param_r31.ExtraFilter ? 21 : -1);
1051
1068
  i0.ɵɵadvance();
1052
- i0.ɵɵconditional(param_r30.RecordID ? 22 : -1);
1069
+ i0.ɵɵconditional(param_r31.RecordID ? 22 : -1);
1053
1070
  } }
1054
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1055
- i0.ɵɵelementStart(0, "div", 157);
1056
- i0.ɵɵrepeaterCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Template, 23, 19, "div", 158, _forTrack1);
1071
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1072
+ i0.ɵɵelementStart(0, "div", 170);
1073
+ i0.ɵɵrepeaterCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Template, 23, 19, "div", 171, _forTrack1);
1057
1074
  i0.ɵɵelementEnd();
1058
- i0.ɵɵelementStart(3, "div", 159)(4, "div", 160);
1059
- i0.ɵɵelement(5, "i", 161);
1060
- i0.ɵɵelementStart(6, "div", 162)(7, "strong");
1075
+ i0.ɵɵelementStart(3, "div", 172)(4, "div", 173);
1076
+ i0.ɵɵelement(5, "i", 174);
1077
+ i0.ɵɵelementStart(6, "div", 175)(7, "strong");
1061
1078
  i0.ɵɵtext(8, "Using Template Parameters:");
1062
1079
  i0.ɵɵelementEnd();
1063
1080
  i0.ɵɵtext(9, " When executing this prompt, you'll be prompted to provide values for all required parameters. Parameters can be simple values (text, numbers) or complex data structures (JSON objects, database records, or entire entity collections). The template will use these parameters to generate dynamic content based on the values provided at execution time. ");
@@ -1067,11 +1084,11 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditiona
1067
1084
  i0.ɵɵadvance();
1068
1085
  i0.ɵɵrepeater(ctx_r1.templateParams);
1069
1086
  } }
1070
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Template(rf, ctx) { if (rf & 1) {
1071
- i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
1072
- i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_ng_template_1_Template, 8, 1, "ng-template", 29);
1073
- i0.ɵɵelementStart(2, "div", 35);
1074
- i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_3_Template, 3, 0, "div", 89)(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_4_Template, 1, 0, "mj-empty-state", 154)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_Template, 10, 0);
1087
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Template(rf, ctx) { if (rf & 1) {
1088
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 57);
1089
+ i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_ng_template_1_Template, 8, 1, "ng-template", 31);
1090
+ i0.ɵɵelementStart(2, "div", 39);
1091
+ i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_3_Template, 3, 0, "div", 102)(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_4_Template, 1, 0, "mj-empty-state", 167)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Template, 10, 0);
1075
1092
  i0.ɵɵelementEnd()();
1076
1093
  } if (rf & 2) {
1077
1094
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1079,29 +1096,29 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Template(r
1079
1096
  i0.ɵɵadvance(3);
1080
1097
  i0.ɵɵconditional(ctx_r1.isLoadingTemplateParams ? 3 : ctx_r1.templateParams.length === 0 ? 4 : 5);
1081
1098
  } }
1082
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1083
- i0.ɵɵelementStart(0, "span", 68);
1099
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1100
+ i0.ɵɵelementStart(0, "span", 81);
1084
1101
  i0.ɵɵelement(1, "i", 21);
1085
1102
  i0.ɵɵtext(2, " Output Example (JSON) ");
1086
- i0.ɵɵelementStart(3, "span", 184);
1103
+ i0.ɵɵelementStart(3, "span", 197);
1087
1104
  i0.ɵɵtext(4, "\u2022 Required for object output type");
1088
1105
  i0.ɵɵelementEnd()();
1089
1106
  } }
1090
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1091
- const _r31 = i0.ɵɵgetCurrentView();
1092
- i0.ɵɵelementStart(0, "mj-code-editor", 185);
1093
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_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); });
1107
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1108
+ const _r32 = i0.ɵɵgetCurrentView();
1109
+ i0.ɵɵelementStart(0, "mj-code-editor", 198);
1110
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Conditional_3_Template_mj_code_editor_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.OutputExample, $event) || (ctx_r1.record.OutputExample = $event); return i0.ɵɵresetView($event); });
1094
1111
  i0.ɵɵelementEnd();
1095
- i0.ɵɵelementStart(1, "div", 186);
1096
- i0.ɵɵelement(2, "i", 187);
1112
+ i0.ɵɵelementStart(1, "div", 199);
1113
+ i0.ɵɵelement(2, "i", 200);
1097
1114
  i0.ɵɵtext(3, " Provide a JSON example that defines the expected structure for object output validation. ");
1098
1115
  i0.ɵɵelementEnd();
1099
1116
  } if (rf & 2) {
1100
1117
  const ctx_r1 = i0.ɵɵnextContext(3);
1101
1118
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.OutputExample);
1102
1119
  } }
1103
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1104
- i0.ɵɵelementStart(0, "div", 182);
1120
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1121
+ i0.ɵɵelementStart(0, "div", 195);
1105
1122
  i0.ɵɵtext(1);
1106
1123
  i0.ɵɵelementEnd();
1107
1124
  } if (rf & 2) {
@@ -1109,16 +1126,16 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditiona
1109
1126
  i0.ɵɵadvance();
1110
1127
  i0.ɵɵtextInterpolate(ctx_r1.record.OutputExample);
1111
1128
  } }
1112
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1113
- i0.ɵɵelementStart(0, "mj-alert", 183);
1129
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1130
+ i0.ɵɵelementStart(0, "mj-alert", 196);
1114
1131
  i0.ɵɵtext(1, "Output example is required when output type is 'object'");
1115
1132
  i0.ɵɵelementEnd();
1116
1133
  } }
1117
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Template(rf, ctx) { if (rf & 1) {
1118
- i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
1119
- i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_ng_template_1_Template, 5, 0, "ng-template", 29);
1120
- i0.ɵɵelementStart(2, "div", 181);
1121
- i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_3_Template, 4, 1)(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_4_Template, 2, 1, "div", 182)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Template, 2, 0, "mj-alert", 183);
1134
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Template(rf, ctx) { if (rf & 1) {
1135
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 58);
1136
+ i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_ng_template_1_Template, 5, 0, "ng-template", 31);
1137
+ i0.ɵɵelementStart(2, "div", 194);
1138
+ i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Conditional_3_Template, 4, 1)(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Conditional_4_Template, 2, 1, "div", 195)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Conditional_5_Template, 2, 0, "mj-alert", 196);
1122
1139
  i0.ɵɵelementEnd()();
1123
1140
  } if (rf & 2) {
1124
1141
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1126,8 +1143,8 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Template(r
1126
1143
  i0.ɵɵadvance(3);
1127
1144
  i0.ɵɵconditional(ctx_r1.EditMode ? 3 : ctx_r1.record.OutputExample ? 4 : 5);
1128
1145
  } }
1129
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1130
- i0.ɵɵelementStart(0, "span", 191);
1146
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1147
+ i0.ɵɵelementStart(0, "span", 204);
1131
1148
  i0.ɵɵtext(1);
1132
1149
  i0.ɵɵelementEnd();
1133
1150
  } if (rf & 2) {
@@ -1135,171 +1152,214 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_ng_templat
1135
1152
  i0.ɵɵadvance();
1136
1153
  i0.ɵɵtextInterpolate1("(", ctx_r1.executionHistory.length, ")");
1137
1154
  } }
1138
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1139
- i0.ɵɵelementStart(0, "span", 68);
1140
- i0.ɵɵelement(1, "i", 190);
1155
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1156
+ i0.ɵɵelementStart(0, "span", 81);
1157
+ i0.ɵɵelement(1, "i", 203);
1141
1158
  i0.ɵɵtext(2, " Execution History ");
1142
- i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_ng_template_1_Conditional_3_Template, 2, 1, "span", 191);
1159
+ i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_ng_template_1_Conditional_3_Template, 2, 1, "span", 204);
1143
1160
  i0.ɵɵelementEnd();
1144
1161
  } if (rf & 2) {
1145
1162
  const ctx_r1 = i0.ɵɵnextContext(3);
1146
1163
  i0.ɵɵadvance(3);
1147
1164
  i0.ɵɵconditional(ctx_r1.executionHistory.length > 0 ? 3 : -1);
1148
1165
  } }
1149
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1150
- i0.ɵɵelementStart(0, "div", 188);
1151
- i0.ɵɵelement(1, "i", 192);
1166
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1167
+ i0.ɵɵelementStart(0, "div", 201);
1168
+ i0.ɵɵelement(1, "i", 205);
1152
1169
  i0.ɵɵelementStart(2, "p");
1153
1170
  i0.ɵɵtext(3, "Loading execution history...");
1154
1171
  i0.ɵɵelementEnd()();
1155
1172
  } }
1156
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1157
- i0.ɵɵelement(0, "mj-empty-state", 189);
1173
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1174
+ i0.ɵɵelement(0, "mj-empty-state", 202);
1158
1175
  } }
1159
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1160
- i0.ɵɵelement(0, "i", 205);
1176
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1177
+ i0.ɵɵelement(0, "i", 220);
1161
1178
  } if (rf & 2) {
1162
1179
  const ctx_r1 = i0.ɵɵnextContext(4);
1163
1180
  i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
1164
1181
  } }
1165
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Conditional_12_Template(rf, ctx) { if (rf & 1) {
1166
- i0.ɵɵelement(0, "i", 205);
1182
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Conditional_12_Template(rf, ctx) { if (rf & 1) {
1183
+ i0.ɵɵelement(0, "i", 220);
1167
1184
  } if (rf & 2) {
1168
1185
  const ctx_r1 = i0.ɵɵnextContext(4);
1169
1186
  i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
1170
1187
  } }
1171
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Conditional_15_Template(rf, ctx) { if (rf & 1) {
1172
- i0.ɵɵelement(0, "i", 205);
1188
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Conditional_15_Template(rf, ctx) { if (rf & 1) {
1189
+ i0.ɵɵelement(0, "i", 220);
1173
1190
  } if (rf & 2) {
1174
1191
  const ctx_r1 = i0.ɵɵnextContext(4);
1175
1192
  i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
1176
1193
  } }
1177
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Conditional_18_Template(rf, ctx) { if (rf & 1) {
1178
- i0.ɵɵelement(0, "i", 205);
1194
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Conditional_18_Template(rf, ctx) { if (rf & 1) {
1195
+ i0.ɵɵelement(0, "i", 220);
1179
1196
  } if (rf & 2) {
1180
1197
  const ctx_r1 = i0.ɵɵnextContext(4);
1181
1198
  i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
1182
1199
  } }
1183
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_41_Conditional_20_Template(rf, ctx) { if (rf & 1) {
1184
- i0.ɵɵelementStart(0, "span", 212);
1200
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_For_41_Conditional_20_Template(rf, ctx) { if (rf & 1) {
1201
+ i0.ɵɵelementStart(0, "span", 227);
1185
1202
  i0.ɵɵtext(1);
1186
1203
  i0.ɵɵelementEnd();
1187
1204
  } if (rf & 2) {
1188
- const run_r34 = i0.ɵɵnextContext().$implicit;
1205
+ const run_r35 = i0.ɵɵnextContext().$implicit;
1189
1206
  i0.ɵɵadvance();
1190
- i0.ɵɵtextInterpolate1(" ", run_r34.RunType, " ");
1207
+ i0.ɵɵtextInterpolate1(" ", run_r35.RunType, " ");
1191
1208
  } }
1192
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_41_Template(rf, ctx) { if (rf & 1) {
1193
- const _r33 = i0.ɵɵgetCurrentView();
1194
- i0.ɵɵelementStart(0, "tr", 206)(1, "td", 207)(2, "span", 208);
1209
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_For_41_Template(rf, ctx) { if (rf & 1) {
1210
+ const _r34 = i0.ɵɵgetCurrentView();
1211
+ i0.ɵɵelementStart(0, "tr", 221)(1, "td", 222)(2, "span", 223);
1195
1212
  i0.ɵɵelement(3, "i");
1196
1213
  i0.ɵɵelementStart(4, "span", 22);
1197
1214
  i0.ɵɵtext(5);
1198
1215
  i0.ɵɵelementEnd()()();
1199
- i0.ɵɵelementStart(6, "td", 209);
1216
+ i0.ɵɵelementStart(6, "td", 224);
1200
1217
  i0.ɵɵtext(7);
1201
1218
  i0.ɵɵpipe(8, "date");
1202
1219
  i0.ɵɵelementEnd();
1203
- i0.ɵɵelementStart(9, "td", 209)(10, "span", 208);
1204
- i0.ɵɵelement(11, "i", 90);
1220
+ i0.ɵɵelementStart(9, "td", 224)(10, "span", 223);
1221
+ i0.ɵɵelement(11, "i", 103);
1205
1222
  i0.ɵɵtext(12);
1206
1223
  i0.ɵɵelementEnd()();
1207
- i0.ɵɵelementStart(13, "td", 209);
1224
+ i0.ɵɵelementStart(13, "td", 224);
1208
1225
  i0.ɵɵtext(14);
1209
1226
  i0.ɵɵelementEnd();
1210
- i0.ɵɵelementStart(15, "td", 210);
1227
+ i0.ɵɵelementStart(15, "td", 225);
1211
1228
  i0.ɵɵtext(16);
1212
1229
  i0.ɵɵelementEnd();
1213
- i0.ɵɵelementStart(17, "td", 210);
1230
+ i0.ɵɵelementStart(17, "td", 225);
1214
1231
  i0.ɵɵtext(18);
1215
1232
  i0.ɵɵelementEnd();
1216
- i0.ɵɵelementStart(19, "td", 211);
1217
- i0.ɵɵconditionalCreate(20, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_41_Conditional_20_Template, 2, 1, "span", 212);
1233
+ i0.ɵɵelementStart(19, "td", 226);
1234
+ i0.ɵɵconditionalCreate(20, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_For_41_Conditional_20_Template, 2, 1, "span", 227);
1218
1235
  i0.ɵɵelementEnd();
1219
- i0.ɵɵelementStart(21, "td", 211)(22, "button", 213);
1220
- i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_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)); });
1221
- i0.ɵɵelement(23, "i", 214);
1236
+ i0.ɵɵelementStart(21, "td", 226)(22, "button", 228);
1237
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_For_41_Template_button_click_22_listener() { const run_r35 = i0.ɵɵrestoreView(_r34).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToPromptRun(run_r35.ID)); });
1238
+ i0.ɵɵelement(23, "i", 229);
1222
1239
  i0.ɵɵelementEnd()()();
1223
1240
  } if (rf & 2) {
1224
- const run_r34 = ctx.$implicit;
1225
- const ɵ$index_819_r35 = ctx.$index;
1241
+ const run_r35 = ctx.$implicit;
1242
+ const ɵ$index_829_r36 = ctx.$index;
1226
1243
  const ctx_r1 = i0.ɵɵnextContext(4);
1227
- i0.ɵɵclassProp("even-row", ɵ$index_819_r35 % 2 === 0);
1244
+ i0.ɵɵclassProp("even-row", ɵ$index_829_r36 % 2 === 0);
1228
1245
  i0.ɵɵadvance(3);
1229
- i0.ɵɵclassMap("fa-solid " + ctx_r1.getExecutionStatusIcon(run_r34.Success));
1230
- i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r34.Success));
1246
+ i0.ɵɵclassMap("fa-solid " + ctx_r1.getExecutionStatusIcon(run_r35.Success));
1247
+ i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r35.Success));
1231
1248
  i0.ɵɵadvance();
1232
- i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r34.Success));
1249
+ i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r35.Success));
1233
1250
  i0.ɵɵadvance();
1234
- i0.ɵɵtextInterpolate1(" ", run_r34.Success === true ? "Success" : run_r34.Success === false ? "Failed" : "Running", " ");
1251
+ i0.ɵɵtextInterpolate1(" ", run_r35.Success === true ? "Success" : run_r35.Success === false ? "Failed" : "Running", " ");
1235
1252
  i0.ɵɵadvance(2);
1236
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(8, 15, run_r34.RunAt, "short"), " ");
1253
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(8, 15, run_r35.RunAt, "short"), " ");
1237
1254
  i0.ɵɵadvance(5);
1238
- i0.ɵɵtextInterpolate1(" ", run_r34.Model || "Unknown", " ");
1255
+ i0.ɵɵtextInterpolate1(" ", run_r35.Model || "Unknown", " ");
1239
1256
  i0.ɵɵadvance(2);
1240
- i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(run_r34.ExecutionTimeMS), " ");
1257
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(run_r35.ExecutionTimeMS), " ");
1241
1258
  i0.ɵɵadvance(2);
1242
- i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(run_r34.TokensUsed), " ");
1259
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(run_r35.TokensUsed), " ");
1243
1260
  i0.ɵɵadvance(2);
1244
- i0.ɵɵtextInterpolate1(" ", ctx_r1.formatCost(run_r34.TotalCost || run_r34.Cost), " ");
1261
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatCost(run_r35.TotalCost || run_r35.Cost), " ");
1245
1262
  i0.ɵɵadvance(2);
1246
- i0.ɵɵconditional(run_r34.RunType ? 20 : -1);
1263
+ i0.ɵɵconditional(run_r35.RunType ? 20 : -1);
1247
1264
  } }
1248
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1249
- const _r32 = i0.ɵɵgetCurrentView();
1250
- i0.ɵɵelementStart(0, "div", 193)(1, "div", 128);
1265
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_For_44_Conditional_10_Template(rf, ctx) { if (rf & 1) {
1266
+ i0.ɵɵtext(0);
1267
+ } if (rf & 2) {
1268
+ const run_r38 = i0.ɵɵnextContext().$implicit;
1269
+ i0.ɵɵtextInterpolate1(" \u00B7 ", run_r38.RunType);
1270
+ } }
1271
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_For_44_Template(rf, ctx) { if (rf & 1) {
1272
+ const _r37 = i0.ɵɵgetCurrentView();
1273
+ i0.ɵɵelementStart(0, "button", 230);
1274
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_For_44_Template_button_click_0_listener() { const run_r38 = i0.ɵɵrestoreView(_r37).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToPromptRun(run_r38.ID)); });
1275
+ i0.ɵɵelementStart(1, "span", 231)(2, "span", 232);
1276
+ i0.ɵɵelement(3, "i", 233);
1277
+ i0.ɵɵtext(4);
1278
+ i0.ɵɵelementEnd();
1279
+ i0.ɵɵelementStart(5, "span", 234);
1280
+ i0.ɵɵtext(6);
1281
+ i0.ɵɵelementEnd()();
1282
+ i0.ɵɵelementStart(7, "span", 235);
1283
+ i0.ɵɵtext(8);
1284
+ i0.ɵɵpipe(9, "date");
1285
+ i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_For_44_Conditional_10_Template, 1, 1);
1286
+ i0.ɵɵelementEnd();
1287
+ i0.ɵɵelement(11, "i", 236);
1288
+ i0.ɵɵelementEnd();
1289
+ } if (rf & 2) {
1290
+ const run_r38 = ctx.$implicit;
1291
+ const ctx_r1 = i0.ɵɵnextContext(4);
1292
+ i0.ɵɵadvance(2);
1293
+ i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r38.Success));
1294
+ i0.ɵɵadvance();
1295
+ i0.ɵɵclassMap("fa-solid " + ctx_r1.getExecutionStatusIcon(run_r38.Success));
1296
+ i0.ɵɵadvance();
1297
+ i0.ɵɵtextInterpolate1(" ", run_r38.Success === true ? "Success" : run_r38.Success === false ? "Failed" : "Running", " ");
1298
+ i0.ɵɵadvance(2);
1299
+ i0.ɵɵtextInterpolate(run_r38.Model || "Unknown");
1300
+ i0.ɵɵadvance(2);
1301
+ i0.ɵɵtextInterpolate4("", i0.ɵɵpipeBind2(9, 11, run_r38.RunAt, "short"), " \u00B7 ", ctx_r1.formatDuration(run_r38.ExecutionTimeMS), " \u00B7 ", ctx_r1.formatTokens(run_r38.TokensUsed), " tokens \u00B7 ", ctx_r1.formatCost(run_r38.TotalCost || run_r38.Cost));
1302
+ i0.ɵɵadvance(2);
1303
+ i0.ɵɵconditional(run_r38.RunType ? 10 : -1);
1304
+ } }
1305
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1306
+ const _r33 = i0.ɵɵgetCurrentView();
1307
+ i0.ɵɵelementStart(0, "div", 206)(1, "div", 141);
1251
1308
  i0.ɵɵtext(2);
1252
1309
  i0.ɵɵelementEnd();
1253
- i0.ɵɵelementStart(3, "div", 194)(4, "span", 171);
1310
+ i0.ɵɵelementStart(3, "div", 207)(4, "span", 184);
1254
1311
  i0.ɵɵtext(5, "Sort by:");
1255
1312
  i0.ɵɵelementEnd();
1256
- i0.ɵɵelementStart(6, "div", 195)(7, "button", 196);
1257
- i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("runAt")); });
1313
+ i0.ɵɵelementStart(6, "div", 208)(7, "button", 209);
1314
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r33); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("runAt")); });
1258
1315
  i0.ɵɵtext(8, " Date ");
1259
- i0.ɵɵconditionalCreate(9, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Conditional_9_Template, 1, 2, "i", 197);
1316
+ i0.ɵɵconditionalCreate(9, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Conditional_9_Template, 1, 2, "i", 210);
1260
1317
  i0.ɵɵelementEnd();
1261
- i0.ɵɵelementStart(10, "button", 196);
1262
- i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("executionTime")); });
1318
+ i0.ɵɵelementStart(10, "button", 209);
1319
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r33); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("executionTime")); });
1263
1320
  i0.ɵɵtext(11, " Duration ");
1264
- i0.ɵɵconditionalCreate(12, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Conditional_12_Template, 1, 2, "i", 197);
1321
+ i0.ɵɵconditionalCreate(12, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Conditional_12_Template, 1, 2, "i", 210);
1265
1322
  i0.ɵɵelementEnd();
1266
- i0.ɵɵelementStart(13, "button", 196);
1267
- i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("tokens")); });
1323
+ i0.ɵɵelementStart(13, "button", 209);
1324
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r33); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("tokens")); });
1268
1325
  i0.ɵɵtext(14, " Tokens ");
1269
- i0.ɵɵconditionalCreate(15, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Conditional_15_Template, 1, 2, "i", 197);
1326
+ i0.ɵɵconditionalCreate(15, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Conditional_15_Template, 1, 2, "i", 210);
1270
1327
  i0.ɵɵelementEnd();
1271
- i0.ɵɵelementStart(16, "button", 196);
1272
- i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("cost")); });
1328
+ i0.ɵɵelementStart(16, "button", 209);
1329
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r33); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("cost")); });
1273
1330
  i0.ɵɵtext(17, " Cost ");
1274
- i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Conditional_18_Template, 1, 2, "i", 197);
1331
+ i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Conditional_18_Template, 1, 2, "i", 210);
1275
1332
  i0.ɵɵelementEnd()()()();
1276
- i0.ɵɵelementStart(19, "div", 198)(20, "table", 199)(21, "thead")(22, "tr", 200)(23, "th", 201);
1333
+ i0.ɵɵelementStart(19, "div", 211)(20, "table", 212)(21, "thead")(22, "tr", 213)(23, "th", 214);
1277
1334
  i0.ɵɵtext(24, "Status");
1278
1335
  i0.ɵɵelementEnd();
1279
- i0.ɵɵelementStart(25, "th", 201);
1336
+ i0.ɵɵelementStart(25, "th", 214);
1280
1337
  i0.ɵɵtext(26, "Date & Time");
1281
1338
  i0.ɵɵelementEnd();
1282
- i0.ɵɵelementStart(27, "th", 201);
1339
+ i0.ɵɵelementStart(27, "th", 214);
1283
1340
  i0.ɵɵtext(28, "Model");
1284
1341
  i0.ɵɵelementEnd();
1285
- i0.ɵɵelementStart(29, "th", 201);
1342
+ i0.ɵɵelementStart(29, "th", 214);
1286
1343
  i0.ɵɵtext(30, "Duration");
1287
1344
  i0.ɵɵelementEnd();
1288
- i0.ɵɵelementStart(31, "th", 202);
1345
+ i0.ɵɵelementStart(31, "th", 215);
1289
1346
  i0.ɵɵtext(32, "Tokens");
1290
1347
  i0.ɵɵelementEnd();
1291
- i0.ɵɵelementStart(33, "th", 202);
1348
+ i0.ɵɵelementStart(33, "th", 215);
1292
1349
  i0.ɵɵtext(34, "Cost");
1293
1350
  i0.ɵɵelementEnd();
1294
- i0.ɵɵelementStart(35, "th", 203);
1351
+ i0.ɵɵelementStart(35, "th", 216);
1295
1352
  i0.ɵɵtext(36, "Type");
1296
1353
  i0.ɵɵelementEnd();
1297
- i0.ɵɵelementStart(37, "th", 203);
1354
+ i0.ɵɵelementStart(37, "th", 216);
1298
1355
  i0.ɵɵtext(38, "Actions");
1299
1356
  i0.ɵɵelementEnd()()();
1300
1357
  i0.ɵɵelementStart(39, "tbody");
1301
- i0.ɵɵrepeaterCreate(40, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_41_Template, 24, 18, "tr", 204, _forTrack1);
1358
+ i0.ɵɵrepeaterCreate(40, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_For_41_Template, 24, 18, "tr", 217, _forTrack1);
1302
1359
  i0.ɵɵelementEnd()()();
1360
+ i0.ɵɵelementStart(42, "div", 218);
1361
+ i0.ɵɵrepeaterCreate(43, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_For_44_Template, 12, 14, "button", 219, _forTrack1);
1362
+ i0.ɵɵelementEnd();
1303
1363
  } if (rf & 2) {
1304
1364
  const ctx_r1 = i0.ɵɵnextContext(3);
1305
1365
  i0.ɵɵadvance(2);
@@ -1322,30 +1382,32 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditiona
1322
1382
  i0.ɵɵconditional(ctx_r1.historySortField === "cost" ? 18 : -1);
1323
1383
  i0.ɵɵadvance(22);
1324
1384
  i0.ɵɵrepeater(ctx_r1.executionHistory);
1385
+ i0.ɵɵadvance(3);
1386
+ i0.ɵɵrepeater(ctx_r1.executionHistory);
1325
1387
  } }
1326
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Template(rf, ctx) { if (rf & 1) {
1327
- i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
1328
- i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_ng_template_1_Template, 4, 1, "ng-template", 29);
1329
- i0.ɵɵelementStart(2, "div", 181);
1330
- i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_3_Template, 4, 0, "div", 188)(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_4_Template, 1, 0, "mj-empty-state", 189)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Template, 42, 13);
1388
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Template(rf, ctx) { if (rf & 1) {
1389
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 59);
1390
+ i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_ng_template_1_Template, 4, 1, "ng-template", 31);
1391
+ i0.ɵɵelementStart(2, "div", 194);
1392
+ i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_3_Template, 4, 0, "div", 201)(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_4_Template, 1, 0, "mj-empty-state", 202)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Template, 45, 13);
1331
1393
  i0.ɵɵelementEnd()();
1332
1394
  } if (rf & 2) {
1333
1395
  const ctx_r1 = i0.ɵɵnextContext(2);
1334
- i0.ɵɵproperty("Expanded", false);
1396
+ i0.ɵɵproperty("SectionCount", ctx_r1.executionHistory.length)("Expanded", false);
1335
1397
  i0.ɵɵadvance(3);
1336
1398
  i0.ɵɵconditional(ctx_r1.isLoadingHistory ? 3 : ctx_r1.executionHistory.length === 0 ? 4 : 5);
1337
1399
  } }
1338
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1339
- i0.ɵɵelementStart(0, "span", 68);
1340
- i0.ɵɵelement(1, "i", 216);
1400
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_78_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1401
+ i0.ɵɵelementStart(0, "span", 81);
1402
+ i0.ɵɵelement(1, "i", 238);
1341
1403
  i0.ɵɵtext(2, " Result Cache ");
1342
1404
  i0.ɵɵelementEnd();
1343
1405
  } }
1344
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Template(rf, ctx) { if (rf & 1) {
1345
- i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
1346
- i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_ng_template_1_Template, 3, 0, "ng-template", 29);
1347
- i0.ɵɵelementStart(2, "div", 35);
1348
- i0.ɵɵelement(3, "mj-explorer-entity-data-grid", 215);
1406
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_78_Template(rf, ctx) { if (rf & 1) {
1407
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 60);
1408
+ i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_78_ng_template_1_Template, 3, 0, "ng-template", 31);
1409
+ i0.ɵɵelementStart(2, "div", 39);
1410
+ i0.ɵɵelement(3, "mj-explorer-entity-data-grid", 237);
1349
1411
  i0.ɵɵelementEnd()();
1350
1412
  } if (rf & 2) {
1351
1413
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1353,24 +1415,24 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Template(r
1353
1415
  i0.ɵɵadvance(3);
1354
1416
  i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: AI Result Cache", "AIPromptID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: AI Result Cache"))("AllowLoad", true)("ShowToolbar", false);
1355
1417
  } }
1356
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1357
- i0.ɵɵelementStart(0, "span", 68);
1358
- i0.ɵɵelement(1, "i", 218);
1418
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_79_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1419
+ i0.ɵɵelementStart(0, "span", 81);
1420
+ i0.ɵɵelement(1, "i", 240);
1359
1421
  i0.ɵɵtext(2, " Related Items ");
1360
1422
  i0.ɵɵelementEnd();
1361
1423
  } }
1362
- function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Template(rf, ctx) { if (rf & 1) {
1363
- i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
1364
- i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_ng_template_1_Template, 3, 0, "ng-template", 29);
1365
- i0.ɵɵelementStart(2, "div", 35)(3, "div", 36)(4, "div")(5, "h6", 217);
1424
+ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_79_Template(rf, ctx) { if (rf & 1) {
1425
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 61);
1426
+ i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_79_ng_template_1_Template, 3, 0, "ng-template", 31);
1427
+ i0.ɵɵelementStart(2, "div", 39)(3, "div", 40)(4, "div")(5, "h6", 239);
1366
1428
  i0.ɵɵtext(6, "AI Agents Using This Prompt");
1367
1429
  i0.ɵɵelementEnd();
1368
- i0.ɵɵelement(7, "mj-explorer-entity-data-grid", 215);
1430
+ i0.ɵɵelement(7, "mj-explorer-entity-data-grid", 237);
1369
1431
  i0.ɵɵelementEnd();
1370
- i0.ɵɵelementStart(8, "div")(9, "h6", 217);
1432
+ i0.ɵɵelementStart(8, "div")(9, "h6", 239);
1371
1433
  i0.ɵɵtext(10, "Prompts Using This as Result Selector");
1372
1434
  i0.ɵɵelementEnd();
1373
- i0.ɵɵelement(11, "mj-explorer-entity-data-grid", 215);
1435
+ i0.ɵɵelement(11, "mj-explorer-entity-data-grid", 237);
1374
1436
  i0.ɵɵelementEnd()()()();
1375
1437
  } if (rf & 2) {
1376
1438
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1415,49 +1477,55 @@ function MJAIPromptFormComponentExtended_Conditional_1_Template(rf, ctx) { if (r
1415
1477
  i0.ɵɵconditionalCreate(32, MJAIPromptFormComponentExtended_Conditional_1_Conditional_32_Template, 3, 0, "button", 25);
1416
1478
  i0.ɵɵelementEnd();
1417
1479
  i0.ɵɵconditionalCreate(33, MJAIPromptFormComponentExtended_Conditional_1_Conditional_33_Template, 4, 3, "div", 26);
1418
- i0.ɵɵelementEnd()()();
1419
- i0.ɵɵelementStart(34, "div", 27)(35, "mj-accordion-panel", 28);
1420
- i0.ɵɵtemplate(36, MJAIPromptFormComponentExtended_Conditional_1_ng_template_36_Template, 4, 1, "ng-template", 29);
1421
- i0.ɵɵelementStart(37, "div", 30);
1422
- i0.ɵɵconditionalCreate(38, MJAIPromptFormComponentExtended_Conditional_1_Conditional_38_Template, 3, 0, "div", 31)(39, MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Template, 4, 2, "mj-empty-state", 32)(40, MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Template, 6, 1, "mj-empty-state", 33)(41, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Template, 5, 3, "div", 34);
1423
1480
  i0.ɵɵelementEnd()();
1424
- i0.ɵɵconditionalCreate(42, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Template, 6, 2, "mj-accordion-panel", 28);
1425
- i0.ɵɵelementStart(43, "mj-accordion-panel", 28);
1426
- i0.ɵɵtemplate(44, MJAIPromptFormComponentExtended_Conditional_1_ng_template_44_Template, 3, 0, "ng-template", 29);
1427
- i0.ɵɵelementStart(45, "div", 35)(46, "div", 36)(47, "div");
1428
- i0.ɵɵelement(48, "mj-form-field", 37);
1429
- i0.ɵɵconditionalCreate(49, MJAIPromptFormComponentExtended_Conditional_1_Conditional_49_Template, 1, 3, "mj-form-field", 38);
1430
- i0.ɵɵconditionalCreate(50, MJAIPromptFormComponentExtended_Conditional_1_Conditional_50_Template, 1, 3, "mj-form-field", 39);
1431
- i0.ɵɵelement(51, "mj-form-field", 40)(52, "mj-form-field", 41);
1432
- i0.ɵɵelementEnd();
1433
- i0.ɵɵelementStart(53, "div");
1434
- i0.ɵɵelement(54, "mj-form-field", 42)(55, "mj-form-field", 43)(56, "mj-form-field", 44);
1435
- i0.ɵɵelementStart(57, "div", 45)(58, "label", 46);
1436
- i0.ɵɵtext(59, " Result Selector Prompt ");
1437
- i0.ɵɵelementEnd();
1438
- i0.ɵɵconditionalCreate(60, MJAIPromptFormComponentExtended_Conditional_1_Conditional_60_Template, 2, 1)(61, MJAIPromptFormComponentExtended_Conditional_1_Conditional_61_Template, 2, 1, "span", 47);
1481
+ i0.ɵɵconditionalCreate(34, MJAIPromptFormComponentExtended_Conditional_1_Conditional_34_Template, 4, 2, "button", 27);
1482
+ i0.ɵɵelementEnd();
1483
+ i0.ɵɵelementStart(35, "div", 28)(36, "mj-accordion-sections", 29);
1484
+ i0.ɵɵlistener("ActiveKeyChange", function MJAIPromptFormComponentExtended_Conditional_1_Template_mj_accordion_sections_ActiveKeyChange_36_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Phone.Pick($event)); });
1485
+ i0.ɵɵelementStart(37, "mj-accordion-panel", 30);
1486
+ i0.ɵɵtemplate(38, MJAIPromptFormComponentExtended_Conditional_1_ng_template_38_Template, 4, 1, "ng-template", 31);
1487
+ i0.ɵɵelementStart(39, "div", 32);
1488
+ i0.ɵɵconditionalCreate(40, MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Template, 3, 0, "div", 33)(41, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Template, 4, 2, "mj-empty-state", 34)(42, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Template, 6, 1, "mj-empty-state", 35)(43, MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Template, 5, 3, "div", 36);
1489
+ i0.ɵɵelementEnd()();
1490
+ i0.ɵɵconditionalCreate(44, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Template, 6, 3, "mj-accordion-panel", 37);
1491
+ i0.ɵɵelementStart(45, "mj-accordion-panel", 38);
1492
+ i0.ɵɵtemplate(46, MJAIPromptFormComponentExtended_Conditional_1_ng_template_46_Template, 3, 0, "ng-template", 31);
1493
+ i0.ɵɵelementStart(47, "div", 39)(48, "div", 40)(49, "div");
1494
+ i0.ɵɵelement(50, "mj-form-field", 41);
1495
+ i0.ɵɵconditionalCreate(51, MJAIPromptFormComponentExtended_Conditional_1_Conditional_51_Template, 1, 3, "mj-form-field", 42);
1496
+ i0.ɵɵconditionalCreate(52, MJAIPromptFormComponentExtended_Conditional_1_Conditional_52_Template, 1, 3, "mj-form-field", 43);
1497
+ i0.ɵɵelement(53, "mj-form-field", 44)(54, "mj-form-field", 45);
1498
+ i0.ɵɵelementEnd();
1499
+ i0.ɵɵelementStart(55, "div");
1500
+ i0.ɵɵelement(56, "mj-form-field", 46)(57, "mj-form-field", 47)(58, "mj-form-field", 48);
1501
+ i0.ɵɵelementStart(59, "div", 49)(60, "label", 50);
1502
+ i0.ɵɵtext(61, " Result Selector Prompt ");
1503
+ i0.ɵɵelementEnd();
1504
+ i0.ɵɵconditionalCreate(62, MJAIPromptFormComponentExtended_Conditional_1_Conditional_62_Template, 2, 1)(63, MJAIPromptFormComponentExtended_Conditional_1_Conditional_63_Template, 2, 1, "span", 51);
1439
1505
  i0.ɵɵelementEnd()()()()();
1440
- i0.ɵɵelementStart(62, "mj-accordion-panel", 28);
1441
- i0.ɵɵtemplate(63, MJAIPromptFormComponentExtended_Conditional_1_ng_template_63_Template, 3, 0, "ng-template", 29);
1442
- i0.ɵɵelementStart(64, "div", 35)(65, "p", 48);
1443
- i0.ɵɵtext(66, " Assistant prefill seeds the model's response with an initial string, guiding output format and content. Stop sequences terminate generation when encountered. ");
1506
+ i0.ɵɵelementStart(64, "mj-accordion-panel", 52);
1507
+ i0.ɵɵtemplate(65, MJAIPromptFormComponentExtended_Conditional_1_ng_template_65_Template, 3, 0, "ng-template", 31);
1508
+ i0.ɵɵelementStart(66, "div", 39)(67, "p", 53);
1509
+ i0.ɵɵtext(68, " Assistant prefill seeds the model's response with an initial string, guiding output format and content. Stop sequences terminate generation when encountered. ");
1444
1510
  i0.ɵɵelementEnd();
1445
- i0.ɵɵelementStart(67, "div", 36)(68, "div");
1446
- i0.ɵɵelement(69, "mj-form-field", 49)(70, "mj-form-field", 50);
1511
+ i0.ɵɵelementStart(69, "div", 40)(70, "div");
1512
+ i0.ɵɵelement(71, "mj-form-field", 54)(72, "mj-form-field", 55);
1447
1513
  i0.ɵɵelementEnd();
1448
- i0.ɵɵelementStart(71, "div");
1449
- i0.ɵɵelement(72, "mj-form-field", 51);
1450
- i0.ɵɵelementEnd()()()();
1451
- i0.ɵɵconditionalCreate(73, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Template, 6, 2, "mj-accordion-panel", 28);
1452
- i0.ɵɵconditionalCreate(74, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Template, 6, 2, "mj-accordion-panel", 28);
1453
- i0.ɵɵconditionalCreate(75, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Template, 6, 2, "mj-accordion-panel", 28);
1454
- i0.ɵɵconditionalCreate(76, MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Template, 4, 5, "mj-accordion-panel", 28);
1455
- i0.ɵɵconditionalCreate(77, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Template, 12, 9, "mj-accordion-panel", 28);
1514
+ i0.ɵɵelementStart(73, "div");
1515
+ i0.ɵɵelement(74, "mj-form-field", 56);
1456
1516
  i0.ɵɵelementEnd()()()();
1517
+ i0.ɵɵconditionalCreate(75, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Template, 6, 2, "mj-accordion-panel", 57);
1518
+ i0.ɵɵconditionalCreate(76, MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Template, 6, 2, "mj-accordion-panel", 58);
1519
+ i0.ɵɵconditionalCreate(77, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Template, 6, 3, "mj-accordion-panel", 59);
1520
+ i0.ɵɵconditionalCreate(78, MJAIPromptFormComponentExtended_Conditional_1_Conditional_78_Template, 4, 5, "mj-accordion-panel", 60);
1521
+ i0.ɵɵconditionalCreate(79, MJAIPromptFormComponentExtended_Conditional_1_Conditional_79_Template, 12, 9, "mj-accordion-panel", 61);
1522
+ i0.ɵɵelementEnd()()()()();
1457
1523
  } if (rf & 2) {
1458
1524
  const ctx_r1 = i0.ɵɵnextContext();
1459
1525
  i0.ɵɵproperty("Record", ctx_r1.record)("FormComponent", ctx_r1)("ToolbarConfig", ctx_r1.toolbarConfig)("WidthMode", "full-width");
1460
- i0.ɵɵadvance(9);
1526
+ i0.ɵɵadvance(4);
1527
+ i0.ɵɵclassProp("hero-view", !ctx_r1.EditMode)("hero-compact", !ctx_r1.EditMode && !ctx_r1.HeroDetailsOpen);
1528
+ i0.ɵɵadvance(5);
1461
1529
  i0.ɵɵconditional(ctx_r1.EditMode ? 9 : 10);
1462
1530
  i0.ɵɵadvance(2);
1463
1531
  i0.ɵɵconditional(ctx_r1.EditMode ? 11 : -1);
@@ -1479,20 +1547,24 @@ function MJAIPromptFormComponentExtended_Conditional_1_Template(rf, ctx) { if (r
1479
1547
  i0.ɵɵconditional(ctx_r1.record.ID ? 32 : -1);
1480
1548
  i0.ɵɵadvance();
1481
1549
  i0.ɵɵconditional(!ctx_r1.canExecute && ctx_r1.record.ID ? 33 : -1);
1550
+ i0.ɵɵadvance();
1551
+ i0.ɵɵconditional(!ctx_r1.EditMode && ctx_r1.HeroSummary ? 34 : -1);
1482
1552
  i0.ɵɵadvance(2);
1553
+ i0.ɵɵproperty("Enabled", ctx_r1.Phone.IsPhone)("ActiveKey", ctx_r1.Phone.Section);
1554
+ i0.ɵɵadvance();
1483
1555
  i0.ɵɵproperty("Expanded", true);
1484
1556
  i0.ɵɵadvance(3);
1485
- i0.ɵɵconditional(ctx_r1.isLoadingTemplate ? 38 : !ctx_r1.record.TemplateID ? 39 : ctx_r1.templateNotFoundInDatabase ? 40 : 41);
1557
+ i0.ɵɵconditional(ctx_r1.isLoadingTemplate ? 40 : !ctx_r1.record.TemplateID ? 41 : ctx_r1.templateNotFoundInDatabase ? 42 : 43);
1486
1558
  i0.ɵɵadvance(4);
1487
- i0.ɵɵconditional(ctx_r1.record.IsSaved ? 42 : -1);
1559
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 44 : -1);
1488
1560
  i0.ɵɵadvance();
1489
1561
  i0.ɵɵproperty("Expanded", false);
1490
1562
  i0.ɵɵadvance(5);
1491
1563
  i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
1492
1564
  i0.ɵɵadvance();
1493
- i0.ɵɵconditional(ctx_r1.showParallelCount ? 49 : -1);
1565
+ i0.ɵɵconditional(ctx_r1.showParallelCount ? 51 : -1);
1494
1566
  i0.ɵɵadvance();
1495
- i0.ɵɵconditional(ctx_r1.showParallelConfigParam ? 50 : -1);
1567
+ i0.ɵɵconditional(ctx_r1.showParallelConfigParam ? 52 : -1);
1496
1568
  i0.ɵɵadvance();
1497
1569
  i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
1498
1570
  i0.ɵɵadvance();
@@ -1504,7 +1576,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Template(rf, ctx) { if (r
1504
1576
  i0.ɵɵadvance();
1505
1577
  i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
1506
1578
  i0.ɵɵadvance(4);
1507
- i0.ɵɵconditional(ctx_r1.EditMode ? 60 : 61);
1579
+ i0.ɵɵconditional(ctx_r1.EditMode ? 62 : 63);
1508
1580
  i0.ɵɵadvance(2);
1509
1581
  i0.ɵɵproperty("Expanded", false);
1510
1582
  i0.ɵɵadvance(7);
@@ -1514,22 +1586,22 @@ function MJAIPromptFormComponentExtended_Conditional_1_Template(rf, ctx) { if (r
1514
1586
  i0.ɵɵadvance(2);
1515
1587
  i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
1516
1588
  i0.ɵɵadvance();
1517
- i0.ɵɵconditional(ctx_r1.template && ctx_r1.templateParams.length > 0 ? 73 : -1);
1589
+ i0.ɵɵconditional(ctx_r1.template && ctx_r1.templateParams.length > 0 ? 75 : -1);
1518
1590
  i0.ɵɵadvance();
1519
- i0.ɵɵconditional(ctx_r1.showOutputExample ? 74 : -1);
1591
+ i0.ɵɵconditional(ctx_r1.showOutputExample ? 76 : -1);
1520
1592
  i0.ɵɵadvance();
1521
- i0.ɵɵconditional(ctx_r1.record.IsSaved ? 75 : -1);
1593
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 77 : -1);
1522
1594
  i0.ɵɵadvance();
1523
- i0.ɵɵconditional(ctx_r1.record.IsSaved && ctx_r1.record.EnableCaching ? 76 : -1);
1595
+ i0.ɵɵconditional(ctx_r1.record.IsSaved && ctx_r1.record.EnableCaching ? 78 : -1);
1524
1596
  i0.ɵɵadvance();
1525
- i0.ɵɵconditional(ctx_r1.record.IsSaved ? 77 : -1);
1597
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 79 : -1);
1526
1598
  } }
1527
1599
  function MJAIPromptFormComponentExtended_Conditional_2_Template(rf, ctx) { if (rf & 1) {
1528
- const _r36 = i0.ɵɵgetCurrentView();
1529
- i0.ɵɵelementStart(0, "mj-window", 219);
1530
- 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)); });
1531
- i0.ɵɵelementStart(1, "mj-ai-test-harness", 220);
1532
- 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)); });
1600
+ const _r39 = i0.ɵɵgetCurrentView();
1601
+ i0.ɵɵelementStart(0, "mj-window", 241);
1602
+ i0.ɵɵlistener("Close", function MJAIPromptFormComponentExtended_Conditional_2_Template_mj_window_Close_0_listener() { i0.ɵɵrestoreView(_r39); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged(false)); });
1603
+ i0.ɵɵelementStart(1, "mj-ai-test-harness", 242);
1604
+ i0.ɵɵlistener("visibilityChange", function MJAIPromptFormComponentExtended_Conditional_2_Template_mj_ai_test_harness_visibilityChange_1_listener($event) { i0.ɵɵrestoreView(_r39); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged($event)); });
1533
1605
  i0.ɵɵelementEnd()();
1534
1606
  } if (rf & 2) {
1535
1607
  const ctx_r1 = i0.ɵɵnextContext();
@@ -1540,6 +1612,10 @@ function MJAIPromptFormComponentExtended_Conditional_2_Template(rf, ctx) { if (r
1540
1612
  let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended extends MJAIPromptFormComponent {
1541
1613
  constructor() {
1542
1614
  super(...arguments);
1615
+ /** Phone width shows the stacked accordions as sections behind one picker (design call 7A). */
1616
+ this.Phone = new PhoneSectionsState(() => this.cdr.markForCheck());
1617
+ /** Phone hero (6A): whether the summary line is expanded to show the rest of the hero. */
1618
+ this.HeroDetailsOpen = false;
1543
1619
  this.testHarnessService = inject(AITestHarnessDialogService);
1544
1620
  this.viewContainerRef = inject(ViewContainerRef);
1545
1621
  this.promptManagementService = inject(AIPromptManagementService);
@@ -1583,6 +1659,25 @@ let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended exte
1583
1659
  this._permissionCache = new Map();
1584
1660
  this.__inferenceProvider_VendorTypeDefinitionID = '';
1585
1661
  }
1662
+ ngOnDestroy() {
1663
+ super.ngOnDestroy();
1664
+ this.Phone.Stop();
1665
+ }
1666
+ /** Toggles the phone hero between its compact identity row and the full hero. */
1667
+ ToggleHeroDetails() {
1668
+ this.HeroDetailsOpen = !this.HeroDetailsOpen;
1669
+ this.cdr.markForCheck();
1670
+ }
1671
+ /** The phone hero's one-line summary of what the compact hero leaves out. */
1672
+ get HeroSummary() {
1673
+ return JoinHeroSummary([
1674
+ this.record.TypeID ? this.getPromptTypeDisplayName(this.record.TypeID) : null,
1675
+ `Parallel: ${this.getParallelizationModeDisplay()}`,
1676
+ `Output: ${this.getOutputTypeDisplay()}`,
1677
+ this.record.EnableCaching ? 'Caching on' : null,
1678
+ this.record.EffortLevel != null ? `Effort ${this.record.EffortLevel}` : null,
1679
+ ]);
1680
+ }
1586
1681
  /** @deprecated Use {@link ToolbarConfig}. */
1587
1682
  get toolbarConfig() {
1588
1683
  return this.ToolbarConfig;
@@ -3101,7 +3196,7 @@ let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended exte
3101
3196
  this.updateModelPriorities();
3102
3197
  // Force Angular to re-evaluate all bindings
3103
3198
  this.cdr.detectChanges();
3104
- // Additional force update for Kendo dropdowns
3199
+ // Additional force update for dropdowns
3105
3200
  setTimeout(() => {
3106
3201
  this.cdr.detectChanges();
3107
3202
  }, 0);
@@ -3127,7 +3222,7 @@ let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended exte
3127
3222
  this.updateModelPriorities();
3128
3223
  // Force Angular to re-evaluate all bindings
3129
3224
  this.cdr.detectChanges();
3130
- // Additional force update for Kendo dropdowns
3225
+ // Additional force update for dropdowns
3131
3226
  setTimeout(() => {
3132
3227
  this.cdr.detectChanges();
3133
3228
  }, 0);
@@ -3199,7 +3294,7 @@ let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended exte
3199
3294
  this.updateModelPriorities();
3200
3295
  // Force Angular to re-evaluate all bindings
3201
3296
  this.cdr.detectChanges();
3202
- // Additional force update for Kendo dropdowns
3297
+ // Additional force update for dropdowns
3203
3298
  setTimeout(() => {
3204
3299
  this.cdr.detectChanges();
3205
3300
  }, 0);
@@ -3473,16 +3568,16 @@ let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended exte
3473
3568
  } if (rf & 2) {
3474
3569
  let _t;
3475
3570
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.TemplateEditor = _t.first);
3476
- } }, 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)"], ["Size", "large", "Icon", "fa-solid fa-code", "Title", "No Template Associated", "Message", "This AI prompt needs a template to define its structure and parameters. Create a new template or link to an existing one.", 1, "no-template-state"], ["Variant", "warning", "Title", "Template Not Found", "Message", "The referenced template could not be loaded. It may have been deleted or moved.", 1, "invalid-template-state"], [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"], ["FieldName", "TemplateDataCapture", "Type", "select", 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"], ["ngProjectAs", "[actions]", 5, ["", "actions", ""], 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-arrows-rotate"], [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, "mj-accordion-badge"], [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"], ["Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "No models configured"], ["ngProjectAs", "[actions]", "mjButton", "", "variant", "outline", "size", "sm", 5, ["", "actions", ""]], ["ngProjectAs", "[actions]", "mjButton", "", "variant", "outline", "size", "sm", 5, ["", "actions", ""], 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)"], ["Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "This template has no parameters defined"], [1, "fa-solid", "fa-sliders", 2, "color", "var(--mj-text-muted)"], ["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"], ["Variant", "warning"], [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-info-circle"], [2, "text-align", "center", "padding", "40px", "color", "var(--mj-text-muted)"], ["Size", "compact", "Icon", "fa-solid fa-clock-rotate-left", "Title", "No execution history yet", "Message", "Run this prompt to see execution history here"], [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"], [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) {
3571
+ } }, 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", "phone-hero", 2, "flex-shrink", "0", "padding", "20px", "background", "var(--mj-bg-surface-sunken)", "border-bottom", "2px solid var(--mj-border-default)"], [1, "hero-header-row"], [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"], [1, "phone-hero-detail", 2, "margin", "0 0 12px 0", "color", "var(--mj-text-muted)", "font-size", "0.9em", "line-height", "1.4"], [1, "quick-config", "phone-hero-detail", 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", "gap", "8px"], ["mjButton", "", "variant", "primary", "size", "lg", "title", "Run AI Prompt Test Harness", 1, "phone-hero-run"], [2, "font-size", "0.75em", "color", "#dc3545", "text-align", "right", "max-width", "200px"], ["type", "button", 1, "phone-hero-summary"], [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"], [3, "ActiveKeyChange", "Enabled", "ActiveKey"], ["SectionKey", "template", "SectionTitle", "Template Editor", "SectionIcon", "fa-solid fa-code", 2, "margin-bottom", "12px", 3, "Expanded"], ["mjAccordionTitle", ""], [1, "phone-flush-x", "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)"], ["Size", "large", "Icon", "fa-solid fa-code", "Title", "No Template Associated", "Message", "This AI prompt needs a template to define its structure and parameters. Create a new template or link to an existing one.", 1, "no-template-state"], ["Variant", "warning", "Title", "Template Not Found", "Message", "The referenced template could not be loaded. It may have been deleted or moved.", 1, "invalid-template-state"], [1, "template-editor-container", 2, "flex", "1", "display", "flex", "flex-direction", "column", "min-height", "350px"], ["SectionKey", "models", "SectionTitle", "Models", "SectionIcon", "fa-solid fa-microchip", 2, "margin-bottom", "12px", 3, "SectionCount", "Expanded"], ["SectionKey", "advanced", "SectionTitle", "Advanced Configuration", "SectionIcon", "fa-solid fa-cogs", 2, "margin-bottom", "12px", 3, "Expanded"], [2, "padding", "16px 0"], [1, "related-grid-pair", 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"], ["FieldName", "TemplateDataCapture", "Type", "select", 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)"], ["SectionKey", "prefill", "SectionTitle", "Prefill & Output Control", "SectionIcon", "fa-solid fa-wand-magic-sparkles", 2, "margin-bottom", "12px", 3, "Expanded"], [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"], ["SectionKey", "parameters", "SectionTitle", "Template Parameters", "SectionIcon", "fa-solid fa-sliders", 2, "margin-bottom", "12px", 3, "Expanded"], ["SectionKey", "output-example", "SectionTitle", "Output Example", "SectionIcon", "fa-solid fa-code", 2, "margin-bottom", "12px", 3, "Expanded"], ["SectionKey", "history", "SectionTitle", "Execution History", "SectionIcon", "fa-solid fa-history", 2, "margin-bottom", "12px", 3, "SectionCount", "Expanded"], ["SectionKey", "cache", "SectionTitle", "Result Cache", "SectionIcon", "fa-solid fa-database", 2, "margin-bottom", "12px", 3, "Expanded"], ["SectionKey", "related", "SectionTitle", "Related Items", "SectionIcon", "fa-solid fa-link", 2, "margin-bottom", "12px", 3, "Expanded"], ["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", 1, "phone-hero-run", 3, "click"], [1, "fa-solid", "fa-play"], ["type", "button", 1, "phone-hero-summary", 3, "click"], [1, "phone-hero-summary-text"], ["aria-hidden", "true", 1, "fa-solid", "fa-chevron-down"], [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"], ["ngProjectAs", "[actions]", 5, ["", "actions", ""], 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-arrows-rotate"], [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, "mj-accordion-badge"], [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"], ["Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "No models configured"], ["ngProjectAs", "[actions]", "mjButton", "", "variant", "outline", "size", "sm", 5, ["", "actions", ""]], ["ngProjectAs", "[actions]", "mjButton", "", "variant", "outline", "size", "sm", 5, ["", "actions", ""], 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"], [1, "model-details-row", 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"], [1, "model-parallel-grid", 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)"], ["Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "This template has no parameters defined"], [1, "fa-solid", "fa-sliders", 2, "color", "var(--mj-text-muted)"], ["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"], [1, "phone-flush-x", 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"], ["Variant", "warning"], [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-info-circle"], [2, "text-align", "center", "padding", "40px", "color", "var(--mj-text-muted)"], ["Size", "compact", "Icon", "fa-solid fa-clock-rotate-left", "Title", "No execution history yet", "Message", "Run this prompt to see execution history here"], [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"], [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"], [1, "history-table-wrap", 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"], [1, "history-cards"], ["type", "button", 1, "history-card"], [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"], ["type", "button", 1, "history-card", 3, "click"], [1, "history-card-main"], [1, "history-card-status"], ["aria-hidden", "true"], [1, "history-card-model"], [1, "history-card-meta"], ["aria-hidden", "true", 1, "fa-solid", "fa-chevron-right", "history-card-open"], [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) {
3477
3572
  i0.ɵɵelement(0, "div");
3478
- i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Template, 78, 56, "mj-record-form-container", 2);
3573
+ i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Template, 80, 63, "mj-record-form-container", 2);
3479
3574
  i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_2_Template, 2, 11, "mj-window", 3);
3480
3575
  } if (rf & 2) {
3481
3576
  i0.ɵɵadvance();
3482
3577
  i0.ɵɵconditional(ctx.record ? 1 : -1);
3483
3578
  i0.ɵɵadvance();
3484
3579
  i0.ɵɵconditional(ctx.showTestHarness ? 2 : -1);
3485
- } }, dependencies: [i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJEmptyStateComponent, i2.MJAlertComponent, 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[_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 display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n\nmj-empty-state.no-template-state[_ngcontent-%COMP%], \nmj-empty-state.invalid-template-state[_ngcontent-%COMP%] {\n flex: 1;\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@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@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.record-form-container[_ngcontent-%COMP%] mj-form-section[_ngcontent-%COMP%] {\n padding: 16px;\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.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.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.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@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}"] }); }
3580
+ } }, dependencies: [i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJEmptyStateComponent, i2.MJAlertComponent, i2.MJAccordionSectionsComponent, 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[_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 display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n\nmj-empty-state.no-template-state[_ngcontent-%COMP%], \nmj-empty-state.invalid-template-state[_ngcontent-%COMP%] {\n flex: 1;\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@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@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.record-form-container[_ngcontent-%COMP%] mj-form-section[_ngcontent-%COMP%] {\n padding: 16px;\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.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.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.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@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}\n\n\n.hero-header-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n}\n\n.action-buttons[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n align-items: flex-end;\n}\n\n@media (max-width: 768px) {\n .hero-header-row[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .action-buttons[_ngcontent-%COMP%] {\n width: 100%;\n align-items: stretch;\n }\n\n .action-buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n }\n\n .action-buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > button[_ngcontent-%COMP%] {\n flex: 1;\n }\n}\n\n\n@media (max-width: 768px) {\n .related-grid-pair[_ngcontent-%COMP%] {\n grid-template-columns: 1fr !important;\n }\n}\n\n\n\n\n\n.history-cards[_ngcontent-%COMP%] {\n display: none;\n}\n\n@media (max-width: 768px) {\n \n .model-management[_ngcontent-%COMP%] .model-header[_ngcontent-%COMP%], \n .model-management[_ngcontent-%COMP%] .model-created[_ngcontent-%COMP%] {\n display: none !important;\n }\n\n .model-management[_ngcontent-%COMP%] .model-row[_ngcontent-%COMP%] {\n grid-template-columns: 32px auto minmax(0, 1fr) auto !important;\n grid-template-areas:\n \"prio model model actions\"\n \"prio vendor config actions\";\n column-gap: 8px !important;\n row-gap: 2px !important;\n padding: 10px 12px !important;\n align-items: center !important;\n }\n\n \n .model-management[_ngcontent-%COMP%] .model-row[_ngcontent-%COMP%]:has(mj-dropdown) {\n grid-template-columns: 32px minmax(0, 1fr) auto !important;\n grid-template-areas:\n \"prio model actions\"\n \"prio vendor actions\"\n \"prio config actions\";\n row-gap: 8px !important;\n }\n\n .model-row[_ngcontent-%COMP%] > .drag-handle[_ngcontent-%COMP%] { grid-area: prio; }\n .model-row[_ngcontent-%COMP%] > .model-select[_ngcontent-%COMP%] { grid-area: model; min-width: 0; }\n .model-row[_ngcontent-%COMP%] > .model-vendor[_ngcontent-%COMP%] { grid-area: vendor; min-width: 0; }\n .model-row[_ngcontent-%COMP%] > .model-configuration[_ngcontent-%COMP%] { grid-area: config; min-width: 0; }\n .model-row[_ngcontent-%COMP%] > .model-actions[_ngcontent-%COMP%] { grid-area: actions; }\n\n .model-row[_ngcontent-%COMP%]:not(:has(mj-dropdown)) > .model-vendor[_ngcontent-%COMP%], \n .model-row[_ngcontent-%COMP%]:not(:has(mj-dropdown)) > .model-configuration[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .model-row[_ngcontent-%COMP%]:not(:has(mj-dropdown)) > .model-configuration[_ngcontent-%COMP%]::before {\n content: '\u00B7';\n margin-right: 6px;\n }\n\n .model-management[_ngcontent-%COMP%] .model-details-row[_ngcontent-%COMP%] {\n grid-template-columns: minmax(0, 1fr) !important;\n padding: 8px 12px !important;\n }\n\n .model-management[_ngcontent-%COMP%] .model-details-row[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child {\n display: none;\n }\n\n .model-management[_ngcontent-%COMP%] .model-parallel-grid[_ngcontent-%COMP%] {\n grid-template-columns: minmax(0, 1fr) !important;\n }\n\n \n .history-table-wrap[_ngcontent-%COMP%] {\n display: none !important;\n }\n\n .history-cards[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n }\n\n .history-card[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: center;\n column-gap: 8px;\n row-gap: 2px;\n min-height: 44px;\n padding: 10px 12px;\n border: 0;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font: inherit;\n text-align: left;\n cursor: pointer;\n }\n\n .history-card[_ngcontent-%COMP%]:last-child {\n border-bottom: 0;\n }\n\n .history-card[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n }\n\n .history-card[_ngcontent-%COMP%]:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n }\n\n .history-card-main[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n font-size: var(--mj-text-sm);\n }\n\n .history-card-status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n font-weight: var(--mj-font-semibold);\n }\n\n .history-card-model[_ngcontent-%COMP%] {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-secondary);\n }\n\n .history-card-meta[_ngcontent-%COMP%] {\n grid-column: 1;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n overflow-wrap: anywhere;\n }\n\n .history-card-open[_ngcontent-%COMP%] {\n grid-column: 2;\n grid-row: 1 / span 2;\n color: var(--mj-text-muted);\n font-size: var(--mj-text-xs);\n }\n}\n\n\n\n@media (max-width: 768px) {\n .configuration-sections[_ngcontent-%COMP%] {\n padding: 12px 0 !important;\n border-top: 0 !important;\n background: transparent !important;\n }\n\n .phone-flush-x[_ngcontent-%COMP%] {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n}", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n.phone-hero-summary[_ngcontent-%COMP%], \n.phone-hero-only[_ngcontent-%COMP%] {\n display: none;\n}\n\n@media (max-width: 768px) {\n .phone-hero[_ngcontent-%COMP%] {\n padding: 12px !important;\n }\n\n \n .phone-hero.hero-compact[_ngcontent-%COMP%] .phone-hero-detail[_ngcontent-%COMP%], \n .phone-hero.hero-view[_ngcontent-%COMP%] .phone-hero-hide[_ngcontent-%COMP%] {\n display: none !important;\n }\n\n .phone-hero-only[_ngcontent-%COMP%] {\n display: inline-flex;\n }\n\n \n .phone-hero[_ngcontent-%COMP%] .phone-hero-stats[_ngcontent-%COMP%] {\n display: grid !important;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 8px;\n }\n\n .phone-hero-status[_ngcontent-%COMP%] {\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 999px);\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n vertical-align: middle;\n white-space: nowrap;\n }\n\n \n .phone-hero-status[data-status=\"running\"][_ngcontent-%COMP%] { color: var(--mj-status-warning-text); background: var(--mj-status-warning-bg); }\n .phone-hero-status[data-status=\"success\"][_ngcontent-%COMP%] { color: var(--mj-status-success-text); background: var(--mj-status-success-bg); }\n .phone-hero-status[data-status=\"error\"][_ngcontent-%COMP%] { color: var(--mj-status-error-text); background: var(--mj-status-error-bg); }\n .phone-hero-status[data-status=\"info\"][_ngcontent-%COMP%] { color: var(--mj-status-info-text); background: var(--mj-status-info-bg); }\n\n .phone-hero-top[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n gap: 10px;\n }\n\n .phone-hero-actions[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .phone-hero[_ngcontent-%COMP%] .phone-hero-run[_ngcontent-%COMP%] {\n width: 100%;\n min-height: 44px;\n justify-content: center;\n }\n\n \n\n .phone-hero-summary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n min-height: 44px;\n margin-top: 8px;\n padding: 0 4px;\n border: 0;\n border-top: 1px solid color-mix(in srgb, currentColor 20%, transparent);\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: var(--mj-text-sm);\n text-align: left;\n cursor: pointer;\n opacity: 0.85;\n }\n\n .phone-hero-summary[_ngcontent-%COMP%]:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n }\n\n .phone-hero-summary-text[_ngcontent-%COMP%] {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .phone-hero-summary[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n flex-shrink: 0;\n transition: transform 0.15s ease;\n }\n\n .phone-hero-summary[aria-expanded=\"true\"][_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .phone-hero-summary[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n transition: none;\n }\n}"] }); }
3486
3581
  };
3487
3582
  MJAIPromptFormComponentExtended = __decorate([
3488
3583
  RegisterClass(BaseFormComponent, 'MJ: AI Prompts')
@@ -3490,10 +3585,10 @@ MJAIPromptFormComponentExtended = __decorate([
3490
3585
  export { MJAIPromptFormComponentExtended };
3491
3586
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJAIPromptFormComponentExtended, [{
3492
3587
  type: Component,
3493
- 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 <mj-empty-state class=\"no-template-state\"\n Size=\"large\"\n Icon=\"fa-solid fa-code\"\n Title=\"No Template Associated\"\n Message=\"This AI prompt needs a template to define its structure and parameters. Create a new template or link to an existing one.\">\n <div ngProjectAs=\"[actions]\" 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 </mj-empty-state>\n } @else if (templateNotFoundInDatabase) {\n <mj-empty-state class=\"invalid-template-state\"\n Variant=\"warning\"\n Title=\"Template Not Found\"\n Message=\"The referenced template could not be loaded. It may have been deleted or moved.\">\n <div ngProjectAs=\"[actions]\" style=\"display: flex; gap: 12px;\">\n <button mjButton variant=\"outline\" (click)=\"loadTemplate()\">\n <i class=\"fa-solid fa-arrows-rotate\"></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 </mj-empty-state>\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=\"mj-accordion-badge\">{{ promptModels.length }}</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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No models configured\">\n @if (EditMode && UserCanCreatePromptModels) {\n <button ngProjectAs=\"[actions]\" mjButton variant=\"outline\" size=\"sm\"\n (click)=\"addNewModel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n }\n </mj-empty-state>\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 <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"TemplateDataCapture\"\n Type=\"select\"\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=\"mj-accordion-badge\">{{ templateParams.length }}</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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"This template has no parameters defined\" />\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 <mj-alert Variant=\"warning\">Output example is required when output type is 'object'</mj-alert>\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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-clock-rotate-left\"\n Title=\"No execution history yet\"\n Message=\"Run this prompt to see execution history here\" />\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 display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n/* Template-editor placeholders fill the editor pane */\nmj-empty-state.no-template-state,\nmj-empty-state.invalid-template-state {\n flex: 1;\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"] }]
3588
+ 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 phone-hero\" [class.hero-view]=\"!EditMode\" [class.hero-compact]=\"!EditMode && !HeroDetailsOpen\" style=\"flex-shrink: 0; padding: 20px; background: var(--mj-bg-surface-sunken); border-bottom: 2px solid var(--mj-border-default);\">\n <div class=\"hero-header-row\">\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 class=\"phone-hero-detail\" 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 phone-hero-detail\" 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\">\n <div style=\"display: flex; gap: 8px;\">\n @if (record.ID) {\n <button mjButton variant=\"primary\" size=\"lg\" class=\"phone-hero-run\"\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 @if (!EditMode && HeroSummary) {\n <button type=\"button\" class=\"phone-hero-summary\" [attr.aria-expanded]=\"HeroDetailsOpen\" (click)=\"ToggleHeroDetails()\">\n <span class=\"phone-hero-summary-text\">{{ HeroSummary }}</span>\n <i class=\"fa-solid fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n }\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 <!-- Phone: one section at a time behind a picker; desktop keeps the accordions -->\n <mj-accordion-sections [Enabled]=\"Phone.IsPhone\" [ActiveKey]=\"Phone.Section\" (ActiveKeyChange)=\"Phone.Pick($event)\">\n <!-- Template Editor Section -->\n <mj-accordion-panel SectionKey=\"template\" SectionTitle=\"Template Editor\" SectionIcon=\"fa-solid fa-code\"\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=\"phone-flush-x 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 <mj-empty-state class=\"no-template-state\"\n Size=\"large\"\n Icon=\"fa-solid fa-code\"\n Title=\"No Template Associated\"\n Message=\"This AI prompt needs a template to define its structure and parameters. Create a new template or link to an existing one.\">\n <div ngProjectAs=\"[actions]\" 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 </mj-empty-state>\n } @else if (templateNotFoundInDatabase) {\n <mj-empty-state class=\"invalid-template-state\"\n Variant=\"warning\"\n Title=\"Template Not Found\"\n Message=\"The referenced template could not be loaded. It may have been deleted or moved.\">\n <div ngProjectAs=\"[actions]\" style=\"display: flex; gap: 12px;\">\n <button mjButton variant=\"outline\" (click)=\"loadTemplate()\">\n <i class=\"fa-solid fa-arrows-rotate\"></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 </mj-empty-state>\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 SectionKey=\"models\" SectionTitle=\"Models\" SectionIcon=\"fa-solid fa-microchip\" [SectionCount]=\"promptModels.length\"\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=\"mj-accordion-badge\">{{ promptModels.length }}</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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No models configured\">\n @if (EditMode && UserCanCreatePromptModels) {\n <button ngProjectAs=\"[actions]\" mjButton variant=\"outline\" size=\"sm\"\n (click)=\"addNewModel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n }\n </mj-empty-state>\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 class=\"model-details-row\" 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 class=\"model-parallel-grid\" 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 SectionKey=\"advanced\" SectionTitle=\"Advanced Configuration\" SectionIcon=\"fa-solid fa-cogs\"\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 class=\"related-grid-pair\" 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 <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"TemplateDataCapture\"\n Type=\"select\"\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 SectionKey=\"prefill\" SectionTitle=\"Prefill &amp; Output Control\" SectionIcon=\"fa-solid fa-wand-magic-sparkles\"\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 class=\"related-grid-pair\" 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 SectionKey=\"parameters\" SectionTitle=\"Template Parameters\" SectionIcon=\"fa-solid fa-sliders\"\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=\"mj-accordion-badge\">{{ templateParams.length }}</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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"This template has no parameters defined\" />\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 SectionKey=\"output-example\" SectionTitle=\"Output Example\" SectionIcon=\"fa-solid fa-code\"\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 class=\"phone-flush-x\" 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 <mj-alert Variant=\"warning\">Output example is required when output type is 'object'</mj-alert>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Execution History Expansion Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel SectionKey=\"history\" SectionTitle=\"Execution History\" SectionIcon=\"fa-solid fa-history\" [SectionCount]=\"executionHistory.length\"\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 class=\"phone-flush-x\" 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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-clock-rotate-left\"\n Title=\"No execution history yet\"\n Message=\"Run this prompt to see execution history here\" />\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 class=\"history-table-wrap\" 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 <!-- Phone: one card per run; the table's eight columns do not fit a 375px screen -->\n <div class=\"history-cards\">\n @for (run of executionHistory; track run.ID) {\n <button type=\"button\" class=\"history-card\" (click)=\"navigateToPromptRun(run.ID)\">\n <span class=\"history-card-main\">\n <span class=\"history-card-status\" [style.color]=\"getExecutionStatusColor(run.Success)\">\n <i [class]=\"'fa-solid ' + getExecutionStatusIcon(run.Success)\" aria-hidden=\"true\"></i>\n {{ run.Success === true ? 'Success' : run.Success === false ? 'Failed' : 'Running' }}\n </span>\n <span class=\"history-card-model\">{{ run.Model || 'Unknown' }}</span>\n </span>\n <span class=\"history-card-meta\">{{ run.RunAt | date:'short' }} \u00B7 {{ formatDuration(run.ExecutionTimeMS) }} \u00B7 {{ formatTokens(run.TokensUsed) }} tokens \u00B7 {{ formatCost(run.TotalCost || run.Cost) }}@if (run.RunType) { \u00B7 {{ run.RunType }}}</span>\n <i class=\"fa-solid fa-chevron-right history-card-open\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Cache Expansion Panel -->\n @if (record.IsSaved && record.EnableCaching) {\n <mj-accordion-panel SectionKey=\"cache\" SectionTitle=\"Result Cache\" SectionIcon=\"fa-solid fa-database\"\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 SectionKey=\"related\" SectionTitle=\"Related Items\" SectionIcon=\"fa-solid fa-link\"\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 class=\"related-grid-pair\" 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 </mj-accordion-sections>\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 display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n/* Template-editor placeholders fill the editor pane */\nmj-empty-state.no-template-state,\nmj-empty-state.invalid-template-state {\n flex: 1;\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\n/* Hero header row: title block left, actions right; on a phone the actions drop under the title. */\n.hero-header-row {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n}\n\n.action-buttons {\n display: flex;\n flex-direction: column;\n gap: 8px;\n align-items: flex-end;\n}\n\n@media (max-width: 768px) {\n .hero-header-row {\n flex-direction: column;\n }\n\n .action-buttons {\n width: 100%;\n align-items: stretch;\n }\n\n .action-buttons > div {\n display: flex;\n gap: 8px;\n }\n\n .action-buttons > div > button {\n flex: 1;\n }\n}\n\n/* Phone (375px): side-by-side grids stack. */\n@media (max-width: 768px) {\n .related-grid-pair {\n grid-template-columns: 1fr !important;\n }\n}\n\n/* ============================================\n PHONE (375px): Models as cards, Execution History as cards.\n The model rows and details rows set their grids inline, hence !important.\n ============================================ */\n.history-cards {\n display: none;\n}\n\n@media (max-width: 768px) {\n /* Models: view mode reads \"#1 Gemini 3.5 Flash\" over \"Google \u00B7 Default\" */\n .model-management .model-header,\n .model-management .model-created {\n display: none !important;\n }\n\n .model-management .model-row {\n grid-template-columns: 32px auto minmax(0, 1fr) auto !important;\n grid-template-areas:\n \"prio model model actions\"\n \"prio vendor config actions\";\n column-gap: 8px !important;\n row-gap: 2px !important;\n padding: 10px 12px !important;\n align-items: center !important;\n }\n\n /* Edit mode: each dropdown gets the full width, one per line */\n .model-management .model-row:has(mj-dropdown) {\n grid-template-columns: 32px minmax(0, 1fr) auto !important;\n grid-template-areas:\n \"prio model actions\"\n \"prio vendor actions\"\n \"prio config actions\";\n row-gap: 8px !important;\n }\n\n .model-row > .drag-handle { grid-area: prio; }\n .model-row > .model-select { grid-area: model; min-width: 0; }\n .model-row > .model-vendor { grid-area: vendor; min-width: 0; }\n .model-row > .model-configuration { grid-area: config; min-width: 0; }\n .model-row > .model-actions { grid-area: actions; }\n\n .model-row:not(:has(mj-dropdown)) > .model-vendor,\n .model-row:not(:has(mj-dropdown)) > .model-configuration {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .model-row:not(:has(mj-dropdown)) > .model-configuration::before {\n content: '\u00B7';\n margin-right: 6px;\n }\n\n .model-management .model-details-row {\n grid-template-columns: minmax(0, 1fr) !important;\n padding: 8px 12px !important;\n }\n\n .model-management .model-details-row > div:first-child {\n display: none;\n }\n\n .model-management .model-parallel-grid {\n grid-template-columns: minmax(0, 1fr) !important;\n }\n\n /* Execution History: the table gives way to one card per run */\n .history-table-wrap {\n display: none !important;\n }\n\n .history-cards {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n }\n\n .history-card {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: center;\n column-gap: 8px;\n row-gap: 2px;\n min-height: 44px;\n padding: 10px 12px;\n border: 0;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font: inherit;\n text-align: left;\n cursor: pointer;\n }\n\n .history-card:last-child {\n border-bottom: 0;\n }\n\n .history-card:hover {\n background: var(--mj-bg-surface-hover);\n }\n\n .history-card:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n }\n\n .history-card-main {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n font-size: var(--mj-text-sm);\n }\n\n .history-card-status {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n font-weight: var(--mj-font-semibold);\n }\n\n .history-card-model {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-secondary);\n }\n\n .history-card-meta {\n grid-column: 1;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n overflow-wrap: anywhere;\n }\n\n .history-card-open {\n grid-column: 2;\n grid-row: 1 / span 2;\n color: var(--mj-text-muted);\n font-size: var(--mj-text-xs);\n }\n}\n\n/* Phone: sections sit on the page's 12px gutter, so the container and the inline-padded body\n wrappers drop their side padding (they would indent every section twice). */\n@media (max-width: 768px) {\n .configuration-sections {\n padding: 12px 0 !important;\n border-top: 0 !important;\n background: transparent !important;\n }\n\n .phone-flush-x {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n}\n", "/* ============================================\n PHONE HERO (design call 6A), shared by the custom forms that own a hero.\n Under 768px the hero keeps icon, name, status and the primary action. Anything tagged\n .phone-hero-detail hides while the hero is compact and comes back when the summary line is\n tapped. Edit mode is untouched: the host only gets .hero-compact / .hero-view in view mode.\n Host: .phone-hero [class.hero-view]=\"!EditMode\" [class.hero-compact]=\"!EditMode && !HeroDetailsOpen\"\n Tags: .phone-hero-detail hidden while compact\n .phone-hero-hide hidden in view mode (said elsewhere on the phone hero)\n .phone-hero-only shown only on phones\n .phone-hero-top a title + action row that stacks\n .phone-hero-actions / .phone-hero-run the primary action, full width at 44px\n .phone-hero-stats a metric row that reflows to a 2-up grid when the hero is expanded\n .phone-hero-status a status chip in the identity row (with .phone-hero-only)\n ============================================ */\n.phone-hero-summary,\n.phone-hero-only {\n display: none;\n}\n\n@media (max-width: 768px) {\n .phone-hero {\n padding: 12px !important;\n }\n\n /* !important: several heroes carry inline display/padding styles on these rows */\n .phone-hero.hero-compact .phone-hero-detail,\n .phone-hero.hero-view .phone-hero-hide {\n display: none !important;\n }\n\n .phone-hero-only {\n display: inline-flex;\n }\n\n /* Lower specificity than the compact rule above, so a compact hero still hides it */\n .phone-hero .phone-hero-stats {\n display: grid !important;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 8px;\n }\n\n .phone-hero-status {\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 999px);\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n vertical-align: middle;\n white-space: nowrap;\n }\n\n /* data-status comes from RunStatusKind(); the -text / -bg pairs keep contrast in both themes */\n .phone-hero-status[data-status=\"running\"] { color: var(--mj-status-warning-text); background: var(--mj-status-warning-bg); }\n .phone-hero-status[data-status=\"success\"] { color: var(--mj-status-success-text); background: var(--mj-status-success-bg); }\n .phone-hero-status[data-status=\"error\"] { color: var(--mj-status-error-text); background: var(--mj-status-error-bg); }\n .phone-hero-status[data-status=\"info\"] { color: var(--mj-status-info-text); background: var(--mj-status-info-bg); }\n\n .phone-hero-top {\n flex-direction: column;\n align-items: stretch;\n gap: 10px;\n }\n\n .phone-hero-actions {\n width: 100%;\n }\n\n .phone-hero .phone-hero-run {\n width: 100%;\n min-height: 44px;\n justify-content: center;\n }\n\n /* Inherits the hero's text colour, so it reads on light heroes and on the brand-blue\n Queries hero alike; a muted token would be grey on blue. */\n .phone-hero-summary {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n min-height: 44px;\n margin-top: 8px;\n padding: 0 4px;\n border: 0;\n border-top: 1px solid color-mix(in srgb, currentColor 20%, transparent);\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: var(--mj-text-sm);\n text-align: left;\n cursor: pointer;\n opacity: 0.85;\n }\n\n .phone-hero-summary:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n }\n\n .phone-hero-summary-text {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .phone-hero-summary > i {\n flex-shrink: 0;\n transition: transform 0.15s ease;\n }\n\n .phone-hero-summary[aria-expanded=\"true\"] > i {\n transform: rotate(180deg);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .phone-hero-summary > i {\n transition: none;\n }\n}\n"] }]
3494
3589
  }], null, { TemplateEditor: [{
3495
3590
  type: ViewChild,
3496
3591
  args: ['templateEditor']
3497
3592
  }] }); })();
3498
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJAIPromptFormComponentExtended, { className: "MJAIPromptFormComponentExtended", filePath: "src/lib/custom/AIPrompts/ai-prompt-form.component.ts", lineNumber: 23 }); })();
3593
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJAIPromptFormComponentExtended, { className: "MJAIPromptFormComponentExtended", filePath: "src/lib/custom/AIPrompts/ai-prompt-form.component.ts", lineNumber: 25 }); })();
3499
3594
  //# sourceMappingURL=ai-prompt-form.component.js.map